From dc66ba608b0a8972cd872c0d4940379aab29a8cd Mon Sep 17 00:00:00 2001 From: Kopatz <7265381+Kropatz@users.noreply.github.com> Date: Mon, 4 Aug 2025 12:45:35 +0200 Subject: [PATCH] update --- modules/services/kavita.nix | 4 +- modules/services/syncthing.nix | 2 +- pkgs/default.nix | 1 + pkgs/kavita-old/change-webroot.diff | 79 ++ pkgs/kavita-old/default.nix | 103 ++ pkgs/kavita-old/nuget-deps.json | 1732 +++++++++++++++++++++++ pkgs/kavita-old/restore-migrations.diff | 147 ++ pkgs/kavita-old/update.sh | 20 + 8 files changed, 2085 insertions(+), 3 deletions(-) create mode 100644 pkgs/kavita-old/change-webroot.diff create mode 100644 pkgs/kavita-old/default.nix create mode 100644 pkgs/kavita-old/nuget-deps.json create mode 100644 pkgs/kavita-old/restore-migrations.diff create mode 100755 pkgs/kavita-old/update.sh diff --git a/modules/services/kavita.nix b/modules/services/kavita.nix index f173fa2..86ed5e7 100644 --- a/modules/services/kavita.nix +++ b/modules/services/kavita.nix @@ -52,9 +52,9 @@ in { user = "kavita"; package = let - backend = pkgs.kavita.backend.overrideAttrs + backend = pkgs.kavita-old.backend.overrideAttrs (old: { patches = old.patches ++ [ ./kavita-patches-chapter-parsing.diff ./kavita-page-size.diff ]; }); - kavitaPatched = pkgs.kavita.overrideAttrs (old: { backend = backend; }); + kavitaPatched = pkgs.kavita-old.overrideAttrs (old: { backend = backend; }); in kavitaPatched; settings = { diff --git a/modules/services/syncthing.nix b/modules/services/syncthing.nix index 4fa1d75..f1c6c7e 100644 --- a/modules/services/syncthing.nix +++ b/modules/services/syncthing.nix @@ -49,7 +49,7 @@ in { }; phone = { id = - "XFQ7MV6-MKBYQXH-WGYVQUB-BYJJPFJ-HJTNZEP-PXWAMYY-DMADWSU-PQOTVAI"; + "JKZGIMH-4YWAMUN-SQZBKFY-BVLEFP4-NBNZP2T-R2LSLSN-RVSL7BH-3AFIFAB"; addresses = [ "tcp://192.168.0.15" "tcp://192.168.2.20" ]; }; }; diff --git a/pkgs/default.nix b/pkgs/default.nix index dade17d..191bab4 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -14,4 +14,5 @@ csharp-ls-8 = pkgs.callPackage ./csharp-lsp/default.nix { }; gpu-screen-recorder-ui = pkgs.callPackage ./gpu-screen-recorder-ui/default.nix { }; gpu-screen-recorder-notification = pkgs.callPackage ./gpu-screen-recorder-notification/default.nix { }; + kavita-old = pkgs.callPackage ./kavita-old/default.nix { }; } diff --git a/pkgs/kavita-old/change-webroot.diff b/pkgs/kavita-old/change-webroot.diff new file mode 100644 index 0000000..8c9e600 --- /dev/null +++ b/pkgs/kavita-old/change-webroot.diff @@ -0,0 +1,79 @@ +diff --git a/API/Controllers/FallbackController.cs b/API/Controllers/FallbackController.cs +index 0c92547..d54abb9 100644 +--- a/API/Controllers/FallbackController.cs ++++ b/API/Controllers/FallbackController.cs +@@ -22,7 +22,7 @@ public class FallbackController : Controller + + public PhysicalFileResult Index() + { +- return PhysicalFile(Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "index.html"), "text/HTML"); ++ return PhysicalFile(Path.Combine("@webroot@", "index.html"), "text/HTML"); + } + } + +diff --git a/API/Services/DirectoryService.cs b/API/Services/DirectoryService.cs +index 8c6c796..711f315 100644 +--- a/API/Services/DirectoryService.cs ++++ b/API/Services/DirectoryService.cs +@@ -120,7 +120,7 @@ public class DirectoryService : IDirectoryService + ExistOrCreate(SiteThemeDirectory); + FaviconDirectory = FileSystem.Path.Join(FileSystem.Directory.GetCurrentDirectory(), "config", "favicons"); + ExistOrCreate(FaviconDirectory); +- LocalizationDirectory = FileSystem.Path.Join(FileSystem.Directory.GetCurrentDirectory(), "I18N"); ++ LocalizationDirectory = FileSystem.Path.Join("@out@/lib/kavita-backend", "I18N"); + CustomizedTemplateDirectory = FileSystem.Path.Join(FileSystem.Directory.GetCurrentDirectory(), "config", "templates"); + ExistOrCreate(CustomizedTemplateDirectory); + TemplateDirectory = FileSystem.Path.Join(FileSystem.Directory.GetCurrentDirectory(), "EmailTemplates"); +diff --git a/API/Services/LocalizationService.cs b/API/Services/LocalizationService.cs +index ab3ad3d..f1a068b 100644 +--- a/API/Services/LocalizationService.cs ++++ b/API/Services/LocalizationService.cs +@@ -52,8 +52,7 @@ public class LocalizationService : ILocalizationService + else + { + _localizationDirectoryUi = directoryService.FileSystem.Path.Join( +- directoryService.FileSystem.Directory.GetCurrentDirectory(), +- "wwwroot", "assets/langs"); ++ "@webroot@", "assets/langs"); + } + + _cacheOptions = new MemoryCacheEntryOptions() +diff --git a/API/Startup.cs b/API/Startup.cs +index 7e3857c..84c466b 100644 +--- a/API/Startup.cs ++++ b/API/Startup.cs +@@ -36,6 +36,7 @@ using Microsoft.AspNetCore.StaticFiles; + using Microsoft.EntityFrameworkCore; + using Microsoft.Extensions.Configuration; + using Microsoft.Extensions.DependencyInjection; ++using Microsoft.Extensions.FileProviders; + using Microsoft.Extensions.Hosting; + using Microsoft.Extensions.Logging; + using Microsoft.Net.Http.Headers; +@@ -314,9 +315,6 @@ public class Startup + app.UsePathBase(basePath); + if (!env.IsDevelopment()) + { +- // We don't update the index.html in local as we don't serve from there +- UpdateBaseUrlInIndex(basePath); +- + // Update DB with what's in config + var dataContext = serviceProvider.GetRequiredService(); + var setting = dataContext.ServerSetting.SingleOrDefault(x => x.Key == ServerSettingKey.BaseUrl); +@@ -360,6 +358,7 @@ public class Startup + + app.UseStaticFiles(new StaticFileOptions + { ++ FileProvider = new PhysicalFileProvider("@webroot@"), + // bcmap files needed for PDF reader localizations (https://github.com/Kareadita/Kavita/issues/2970) + ContentTypeProvider = new FileExtensionContentTypeProvider + { +@@ -439,7 +438,7 @@ public class Startup + try + { + var htmlDoc = new HtmlDocument(); +- var indexHtmlPath = Path.Combine(Directory.GetCurrentDirectory(), "wwwroot", "index.html"); ++ var indexHtmlPath = Path.Combine("@webroot@", "index.html"); + htmlDoc.Load(indexHtmlPath); + + var baseNode = htmlDoc.DocumentNode.SelectSingleNode("/html/head/base"); diff --git a/pkgs/kavita-old/default.nix b/pkgs/kavita-old/default.nix new file mode 100644 index 0000000..855a733 --- /dev/null +++ b/pkgs/kavita-old/default.nix @@ -0,0 +1,103 @@ +{ + lib, + stdenvNoCC, + fetchFromGitHub, + fetchpatch2, + buildDotnetModule, + buildNpmPackage, + dotnetCorePackages, + nixosTests, +}: + +stdenvNoCC.mkDerivation (finalAttrs: { + pname = "kavita"; + version = "0.8.5.11"; + + src = fetchFromGitHub { + owner = "kareadita"; + repo = "kavita"; + rev = "v${finalAttrs.version}"; + hash = "sha256-HSVdEB0yhmm/SZseHQ5kTRBaVqCZZx934Ovq1pTmQkM="; + }; + + backend = buildDotnetModule { + pname = "kavita-backend"; + inherit (finalAttrs) version src; + + patches = [ + # The webroot is hardcoded as ./wwwroot + ./change-webroot.diff + # Upstream removes database migrations between versions + # Restore them to avoid breaking on updates + # Info: Restores migrations for versions between v0.7.1.4 and v0.7.9 + # On update: check if more migrations need to be restored! + # Migrations should at least allow updates from previous NixOS versions + ./restore-migrations.diff + # Our nixos test depends on /api/locale; this patch fixes an upstream bug where the first response always fails + # https://github.com/Kareadita/Kavita/pull/3686 remove once upstream is fixed + (fetchpatch2 { + name = "fix-locale-cache.patch"; + url = "https://github.com/Kareadita/Kavita/commit/5af07b9525c2164a6548092244bbdf66815b3e95.patch?full_index=1"; + hash = "sha256-aFZRxijAbA2mXJM+3kC4P4p76d0p5fEXLiaRhNmjOAA="; + }) + ]; + postPatch = '' + substituteInPlace API/Services/DirectoryService.cs --subst-var out + + substituteInPlace API/Startup.cs API/Services/LocalizationService.cs API/Controllers/FallbackController.cs \ + --subst-var-by webroot "${finalAttrs.frontend}/lib/node_modules/kavita-webui/dist/browser" + ''; + + executables = [ "API" ]; + + projectFile = "API/API.csproj"; + nugetDeps = ./nuget-deps.json; + dotnet-sdk = dotnetCorePackages.sdk_9_0; + dotnet-runtime = dotnetCorePackages.aspnetcore_9_0; + }; + + frontend = buildNpmPackage { + pname = "kavita-frontend"; + inherit (finalAttrs) version src; + + sourceRoot = "${finalAttrs.src.name}/UI/Web"; + + npmBuildScript = "prod"; + npmFlags = [ "--legacy-peer-deps" ]; + npmRebuildFlags = [ "--ignore-scripts" ]; # Prevent playwright from trying to install browsers + npmDepsHash = "sha256-9SfiH567+q3Id6/7pqWeX0y934V2YFQ4EWIJ+66smgI="; + }; + + dontBuild = true; + + installPhase = '' + runHook preInstall + + mkdir -p $out/bin $out/lib/kavita + ln -s $backend/lib/kavita-backend $out/lib/kavita/backend + ln -s $frontend/lib/node_modules/kavita-webui/dist $out/lib/kavita/frontend + ln -s $backend/bin/API $out/bin/kavita + + runHook postInstall + ''; + + passthru = { + tests = { + inherit (nixosTests) kavita; + }; + updateScript = ./update.sh; + }; + + meta = { + description = "Fast, feature rich, cross platform reading server"; + homepage = "https://kavitareader.com"; + changelog = "https://github.com/kareadita/kavita/releases/tag/${finalAttrs.src.rev}"; + license = lib.licenses.gpl3Only; + platforms = lib.platforms.linux; + maintainers = with lib.maintainers; [ + misterio77 + nevivurn + ]; + mainProgram = "kavita"; + }; +}) diff --git a/pkgs/kavita-old/nuget-deps.json b/pkgs/kavita-old/nuget-deps.json new file mode 100644 index 0000000..2632898 --- /dev/null +++ b/pkgs/kavita-old/nuget-deps.json @@ -0,0 +1,1732 @@ +[ + { + "pname": "AutoMapper", + "version": "12.0.1", + "hash": "sha256-a3wCSaOXl+5RKWNi1ddRbNWkOzfodFAUokqPyQiVHGg=" + }, + { + "pname": "AutoMapper.Extensions.Microsoft.DependencyInjection", + "version": "12.0.1", + "hash": "sha256-IfFPa1nHf9cT07gBH5/K6VfiabcHtjjO6X0oV92TWj4=" + }, + { + "pname": "BouncyCastle.Cryptography", + "version": "2.5.0", + "hash": "sha256-4JTx7QKSu3BE7kPuspN1KK2LtA9BWKLHZRLfOBEzWHY=" + }, + { + "pname": "Cronos", + "version": "0.9.0", + "hash": "sha256-yDYBfqSXqvT/VPUf6UT3XOgqqPmOMYqhjCBxpF5i15c=" + }, + { + "pname": "CsvHelper", + "version": "33.0.1", + "hash": "sha256-4MwA/WerpI0VYWiaEudNCNnE1v6/k2tPmLbRjmgijV4=" + }, + { + "pname": "Docnet.Core", + "version": "2.6.0", + "hash": "sha256-FcUM3Ox+U6b/vkjX2ZmKTSfIvFEhZoeEfJ94SlCSNqw=" + }, + { + "pname": "DotNet.Glob", + "version": "3.1.3", + "hash": "sha256-5uGSaGY1IqDjq4RCDLPJm0Lg9oyWmyR96OiNeGqSj84=" + }, + { + "pname": "EasyCaching.Core", + "version": "1.9.2", + "hash": "sha256-Fx+3X6kqW0PEb1SpWcAVHmP2x4MVaTGggzAlZGtXf2I=" + }, + { + "pname": "EasyCaching.InMemory", + "version": "1.9.2", + "hash": "sha256-mKtQtByW+nQpA7JSZrajCnfNmPx/eO62JMRjOFq1zEU=" + }, + { + "pname": "ExCSS", + "version": "4.3.0", + "hash": "sha256-7QGbwOlT1EEkgUULKWSJO3H8BzvV4KP/mUZE/9/3r6M=" + }, + { + "pname": "Flurl", + "version": "4.0.0", + "hash": "sha256-qCbO6ELAw+OP/RyrJhrxys5b+Kk2xR4RbzpLOsZYheg=" + }, + { + "pname": "Flurl.Http", + "version": "4.0.2", + "hash": "sha256-V1tlyjoCB9ZyTiwEV3ZYiSP/0q2R2+bqRI+wZLVJATA=" + }, + { + "pname": "Hangfire", + "version": "1.8.18", + "hash": "sha256-Ty2nF3qL5VQyZZcAaCBuBVohT7eMtwrKwFSv9TZCx0k=" + }, + { + "pname": "Hangfire.AspNetCore", + "version": "1.8.18", + "hash": "sha256-tQx6bh68ZJk+kG2d3hszAzAY+9yPzoNqvlfgccsXfxc=" + }, + { + "pname": "Hangfire.Core", + "version": "1.6.17", + "hash": "sha256-2ir8fLJJyWLxGTp2U12Pm6quH+uyJDfJvI2wRK2EIk8=" + }, + { + "pname": "Hangfire.Core", + "version": "1.8.0", + "hash": "sha256-FhGdGFroLF6CNuxWceNX46H/7taWpoqvbWJ8KzQo7xA=" + }, + { + "pname": "Hangfire.Core", + "version": "1.8.18", + "hash": "sha256-erTLLsfI1Vo58zke9qqI1n2PCFqCGBoH0J0/f+WCwnQ=" + }, + { + "pname": "Hangfire.InMemory", + "version": "1.0.0", + "hash": "sha256-nwMCtNl2TEJiUrG07EIEQZS8efb7/0iNgMa83ruPSTo=" + }, + { + "pname": "Hangfire.MaximumConcurrentExecutions", + "version": "1.1.0", + "hash": "sha256-xkAEW9jG1pc8vRwICyJUTgRg5mEyYOdQoXXpVuAhIaA=" + }, + { + "pname": "Hangfire.NetCore", + "version": "1.8.18", + "hash": "sha256-pensGJ3OJTydVhi5ziaVPCKNpOe9EMlimohtFmBw0bo=" + }, + { + "pname": "Hangfire.SqlServer", + "version": "1.8.18", + "hash": "sha256-mirQEgFPCXdvxE9XqXGUDizjixAlkUZ6WSJIk0Ovpuc=" + }, + { + "pname": "Hangfire.Storage.SQLite", + "version": "0.4.2", + "hash": "sha256-//40m/V+kgcDrKJ7/YfX1upOK9ZQEG/Bpbk7c5PmQuk=" + }, + { + "pname": "HtmlAgilityPack", + "version": "1.11.74", + "hash": "sha256-kp9Hd6H6YfVI8xGOQXTcpcLXDen85tzI423vsJkL6Zo=" + }, + { + "pname": "Humanizer.Core", + "version": "2.14.1", + "hash": "sha256-EXvojddPu+9JKgOG9NSQgUTfWq1RpOYw7adxDPKDJ6o=" + }, + { + "pname": "MailKit", + "version": "4.10.0", + "hash": "sha256-LnpMn+yD5gWrEmZ8dsHf80aBV1KM508uM91C4TftPsk=" + }, + { + "pname": "MarkdownDeep.NET.Core", + "version": "1.5.0.4", + "hash": "sha256-NO//QjqAcE4yDmQARbThyp8fdFrE2U0Bed5XToOG+jI=" + }, + { + "pname": "Microsoft.AspNetCore.Authentication.Abstractions", + "version": "2.3.0", + "hash": "sha256-UwMVhuE3TBEO7G0QJrghhYrgkYw2p9WR87yHQ1ty2RI=" + }, + { + "pname": "Microsoft.AspNetCore.Authentication.JwtBearer", + "version": "9.0.2", + "hash": "sha256-X/n1/FojwBdgJpAwgfUjTzt6sStEsjTX5KyZWXm1cGA=" + }, + { + "pname": "Microsoft.AspNetCore.Authentication.OpenIdConnect", + "version": "9.0.2", + "hash": "sha256-xqyfZOksphmvaN71bM5on4xf8usOSiKvGZ1j8F250IE=" + }, + { + "pname": "Microsoft.AspNetCore.Authorization", + "version": "2.3.0", + "hash": "sha256-UbxzeOIh76eCOMgC8A92KwfgOAljyT0k8En+l4PZDtA=" + }, + { + "pname": "Microsoft.AspNetCore.Authorization.Policy", + "version": "2.3.0", + "hash": "sha256-nMV4Yt6810pXITTxMysPIpfenu+3AnY7jq2LkPrkV00=" + }, + { + "pname": "Microsoft.AspNetCore.Connections.Abstractions", + "version": "2.3.0", + "hash": "sha256-qvA9LDr8vOLaERoxia/KRnVmf2q15n7OHKNsBY6t6xw=" + }, + { + "pname": "Microsoft.AspNetCore.Cryptography.Internal", + "version": "9.0.2", + "hash": "sha256-rGpA88L92YFSNeMZCoO74QTGOpmcgNqhYJ6norXX3eU=" + }, + { + "pname": "Microsoft.AspNetCore.Cryptography.KeyDerivation", + "version": "9.0.2", + "hash": "sha256-crQVw+JYWjOshBokx2W5fUEa+6oitZIJKEhXIsDg70g=" + }, + { + "pname": "Microsoft.AspNetCore.Hosting.Abstractions", + "version": "2.3.0", + "hash": "sha256-gtiRMQA5kO1biIVaBLjSq0/jVVpiI8WzS136z/Ex1zs=" + }, + { + "pname": "Microsoft.AspNetCore.Hosting.Server.Abstractions", + "version": "2.3.0", + "hash": "sha256-ltKZ02L3cXu2dCx1JGEt1X8gQgwTABn45QkBsREYxaw=" + }, + { + "pname": "Microsoft.AspNetCore.Http", + "version": "2.3.0", + "hash": "sha256-ubPGvFwMjXbydY1gzo/m31pWq5/SsS/tGRtOotHFfBU=" + }, + { + "pname": "Microsoft.AspNetCore.Http.Abstractions", + "version": "2.3.0", + "hash": "sha256-NrAFzk5IcxmeRk3Zu+rLcq0+KKiAYfygJbAdIt2Zpfk=" + }, + { + "pname": "Microsoft.AspNetCore.Http.Connections", + "version": "1.2.0", + "hash": "sha256-uev0FzYG2Ppl09h//B3BFxooD0uRm0ENO2jgOsABedM=" + }, + { + "pname": "Microsoft.AspNetCore.Http.Connections.Common", + "version": "1.2.0", + "hash": "sha256-eXIg7vJSl1x0xWcxTKmgUiGRJnEfnp/TEe0xqL0629w=" + }, + { + "pname": "Microsoft.AspNetCore.Http.Extensions", + "version": "2.3.0", + "hash": "sha256-sOVwC5wK5w85R+HbYkBlfPpmknyAEig3g0uVnTSGwhI=" + }, + { + "pname": "Microsoft.AspNetCore.Http.Features", + "version": "2.3.0", + "hash": "sha256-QkNFS3ScDLyt0XppATSogbF1raSQJN+wStcnAsSoUJw=" + }, + { + "pname": "Microsoft.AspNetCore.Identity.EntityFrameworkCore", + "version": "9.0.2", + "hash": "sha256-0AAxLKe2QwrfdGzBVWImKYSZyz8JLEErjf+/vFVVYzU=" + }, + { + "pname": "Microsoft.AspNetCore.Routing", + "version": "2.3.0", + "hash": "sha256-bXrYeVgI+sm2e5eOCwOkdWyCf5b7dQ8kv+pJRaeLiHI=" + }, + { + "pname": "Microsoft.AspNetCore.Routing.Abstractions", + "version": "2.3.0", + "hash": "sha256-pSPpwAU/zEidmBcRjSuz71fs5CIBRWF8yp/ujsIBXok=" + }, + { + "pname": "Microsoft.AspNetCore.SignalR", + "version": "1.2.0", + "hash": "sha256-83ogiJwoHL0XBOnGFQYopGTlzEyen1ep4aXesWSl/sg=" + }, + { + "pname": "Microsoft.AspNetCore.SignalR.Common", + "version": "1.2.0", + "hash": "sha256-ULMhoU12HCOE6BMAjdZpsbgIPGjtHeggnn7RkyPHmag=" + }, + { + "pname": "Microsoft.AspNetCore.SignalR.Core", + "version": "1.1.0", + "hash": "sha256-8NYrz6J0cVF+eBW/2B6oObwtD82Ze74H6TV+a1xRPtM=" + }, + { + "pname": "Microsoft.AspNetCore.SignalR.Core", + "version": "1.2.0", + "hash": "sha256-FbLZ4BbD5wYOoEyfqZ9C7Y5hJldXlbm1q3QJlkxgp68=" + }, + { + "pname": "Microsoft.AspNetCore.SignalR.Protocols.Json", + "version": "1.2.0", + "hash": "sha256-j2oYNJEX9r4owDiHMI83cglxkyP5Gty0Y0aFzA7avBo=" + }, + { + "pname": "Microsoft.AspNetCore.WebSockets", + "version": "2.3.0", + "hash": "sha256-D3h1Im37SQlDnIl3LiKb7Roje34qPeaRoeP3nEm0p3Y=" + }, + { + "pname": "Microsoft.AspNetCore.WebUtilities", + "version": "2.3.0", + "hash": "sha256-oJMEP44Q9ClhbyZUPtSb9jqQyJJ/dD4DHElRvkYpIOo=" + }, + { + "pname": "Microsoft.Bcl.AsyncInterfaces", + "version": "7.0.0", + "hash": "sha256-1e031E26iraIqun84ad0fCIR4MJZ1hcQo4yFN+B7UfE=" + }, + { + "pname": "Microsoft.Build.Framework", + "version": "16.10.0", + "hash": "sha256-Sj41LE1YQ/NfOdiDf5YnZgWSwGOzQ2uVvP1LgF/HSJ0=" + }, + { + "pname": "Microsoft.Build.Framework", + "version": "17.8.3", + "hash": "sha256-Rp4dN8ejOXqclIKMUXYvIliM6IYB7WMckMLwdCbVZ34=" + }, + { + "pname": "Microsoft.Build.Locator", + "version": "1.7.8", + "hash": "sha256-VhZ4jiJi17Cd5AkENXL1tjG9dV/oGj0aY67IGYd7vNs=" + }, + { + "pname": "Microsoft.CodeAnalysis.Analyzers", + "version": "3.3.4", + "hash": "sha256-qDzTfZBSCvAUu9gzq2k+LOvh6/eRvJ9++VCNck/ZpnE=" + }, + { + "pname": "Microsoft.CodeAnalysis.Common", + "version": "4.8.0", + "hash": "sha256-3IEinVTZq6/aajMVA8XTRO3LTIEt0PuhGyITGJLtqz4=" + }, + { + "pname": "Microsoft.CodeAnalysis.CSharp", + "version": "4.8.0", + "hash": "sha256-MmOnXJvd/ezs5UPcqyGLnbZz5m+VedpRfB+kFZeeqkU=" + }, + { + "pname": "Microsoft.CodeAnalysis.CSharp.Workspaces", + "version": "4.8.0", + "hash": "sha256-WNzc+6mKqzPviOI0WMdhKyrWs8u32bfGj2XwmfL7bwE=" + }, + { + "pname": "Microsoft.CodeAnalysis.Workspaces.Common", + "version": "4.8.0", + "hash": "sha256-X8R4SpWVO/gpip5erVZf5jCCx8EX3VzIRtNrQiLDIoM=" + }, + { + "pname": "Microsoft.CodeAnalysis.Workspaces.MSBuild", + "version": "4.8.0", + "hash": "sha256-hxpMKC6OF8OaIiSZhAgJ+Rw7M8nqS6xHdUURnRRxJmU=" + }, + { + "pname": "Microsoft.CSharp", + "version": "4.7.0", + "hash": "sha256-Enknv2RsFF68lEPdrf5M+BpV1kHoLTVRApKUwuk/pj0=" + }, + { + "pname": "Microsoft.Data.Sqlite.Core", + "version": "9.0.2", + "hash": "sha256-ZUVDe+oy7fAWcnQDRdhkVeN7YZkJewwqBNaxdZcykiM=" + }, + { + "pname": "Microsoft.EntityFrameworkCore", + "version": "9.0.2", + "hash": "sha256-ew+vhHqu+4Hgc5xKiIwEHYWD8dsXqtHmu8Ctre5MrXc=" + }, + { + "pname": "Microsoft.EntityFrameworkCore.Abstractions", + "version": "9.0.2", + "hash": "sha256-FNTvIJPkG6jlEE+3p4/qeL7NPDKNDgDCYlIrSn1gQ4E=" + }, + { + "pname": "Microsoft.EntityFrameworkCore.Analyzers", + "version": "9.0.2", + "hash": "sha256-qXwOxUCeg4b4NSLFD3Ws/D161uQoozM+EiBThp7IeBY=" + }, + { + "pname": "Microsoft.EntityFrameworkCore.Design", + "version": "9.0.2", + "hash": "sha256-f5LMTlXnb13wKQOofCJJ+TyEPOnHi9FpTaHaiYwJF80=" + }, + { + "pname": "Microsoft.EntityFrameworkCore.Relational", + "version": "9.0.2", + "hash": "sha256-IGc3xy455dFu+z6M0Vaqqm09VXehb/XFquOgtpTLcGk=" + }, + { + "pname": "Microsoft.EntityFrameworkCore.Sqlite", + "version": "9.0.2", + "hash": "sha256-ucYyVaLWpRk6Xl0OtX9qp8Nr0gktElgIML5b/JPItX4=" + }, + { + "pname": "Microsoft.EntityFrameworkCore.Sqlite.Core", + "version": "9.0.2", + "hash": "sha256-LqWVpwwj837DHoQuk/aq78Y9lwD/oWDJAxwLNdYN1No=" + }, + { + "pname": "Microsoft.Extensions.ApiDescription.Server", + "version": "6.0.5", + "hash": "sha256-RJjBWz+UHxkQE2s7CeGYdTZ218mCufrxl0eBykZdIt4=" + }, + { + "pname": "Microsoft.Extensions.Caching.Abstractions", + "version": "9.0.2", + "hash": "sha256-fSHzO0OgH+bSuq7vxMhe8gw17Cx2ouMLen9IsJAOD7c=" + }, + { + "pname": "Microsoft.Extensions.Caching.Memory", + "version": "9.0.2", + "hash": "sha256-QBqH+WqnJrzjLFekeu8yCGyRBRfiMUPihfhLi+Wtm7w=" + }, + { + "pname": "Microsoft.Extensions.Configuration", + "version": "8.0.0", + "hash": "sha256-9BPsASlxrV8ilmMCjdb3TiUcm5vFZxkBnAI/fNBSEyA=" + }, + { + "pname": "Microsoft.Extensions.Configuration", + "version": "9.0.2", + "hash": "sha256-AUNaLhYTcHUkqKGhSL7QgrifV9JkjKhNQ4Ws8UtZhlM=" + }, + { + "pname": "Microsoft.Extensions.Configuration.Abstractions", + "version": "3.0.0", + "hash": "sha256-GJDvt3qFAif5ToFjHgs8imCaUER7yvYJghnlYXiHrHU=" + }, + { + "pname": "Microsoft.Extensions.Configuration.Abstractions", + "version": "8.0.0", + "hash": "sha256-4eBpDkf7MJozTZnOwQvwcfgRKQGcNXe0K/kF+h5Rl8o=" + }, + { + "pname": "Microsoft.Extensions.Configuration.Abstractions", + "version": "9.0.0", + "hash": "sha256-xtG2USC9Qm0f2Nn6jkcklpyEDT3hcEZOxOwTc0ep7uc=" + }, + { + "pname": "Microsoft.Extensions.Configuration.Abstractions", + "version": "9.0.2", + "hash": "sha256-icRtfbi0nDRUYDErtKYx0z6A1gWo5xdswsSM6o4ozxc=" + }, + { + "pname": "Microsoft.Extensions.Configuration.Binder", + "version": "8.0.0", + "hash": "sha256-GanfInGzzoN2bKeNwON8/Hnamr6l7RTpYLA49CNXD9Q=" + }, + { + "pname": "Microsoft.Extensions.Configuration.Binder", + "version": "8.0.2", + "hash": "sha256-aGB0VuoC34YadAEqrwoaXLc5qla55pswDV2xLSmR7SE=" + }, + { + "pname": "Microsoft.Extensions.Configuration.Binder", + "version": "9.0.0", + "hash": "sha256-6ajYWcNOQX2WqftgnoUmVtyvC1kkPOtTCif4AiKEffU=" + }, + { + "pname": "Microsoft.Extensions.Configuration.Binder", + "version": "9.0.2", + "hash": "sha256-lYWUfvSnpp9M4N4wIfFnMlB+8K79g9uUa1NXsgnxs0k=" + }, + { + "pname": "Microsoft.Extensions.Configuration.CommandLine", + "version": "9.0.2", + "hash": "sha256-qsEwiAO/n2+k8Q8/AftqdSlvvQWDx7WKb+9VlP8Nuxw=" + }, + { + "pname": "Microsoft.Extensions.Configuration.EnvironmentVariables", + "version": "9.0.2", + "hash": "sha256-XgSdv8+zh2vXmhP+a31/+Y+mNLwQwLflfCiEtDemea0=" + }, + { + "pname": "Microsoft.Extensions.Configuration.FileExtensions", + "version": "9.0.2", + "hash": "sha256-eeZbwf2lcV74mjXtOX8q0MxvP4QzEYyHXr1EGFS/orU=" + }, + { + "pname": "Microsoft.Extensions.Configuration.Json", + "version": "9.0.2", + "hash": "sha256-7/ewyjh0gXu798fYcJxOCkdaAPIzrJ8reuTzqz93IJ0=" + }, + { + "pname": "Microsoft.Extensions.Configuration.UserSecrets", + "version": "9.0.2", + "hash": "sha256-0OmAQn8gIqTPN4s0NkcidXivjq5LsEGiNVxmp3qxGoo=" + }, + { + "pname": "Microsoft.Extensions.DependencyInjection", + "version": "9.0.2", + "hash": "sha256-jNQVj2Xo7wzVdNDu27bLbYCVUOF8yDVrFtC3cZ9OsXo=" + }, + { + "pname": "Microsoft.Extensions.DependencyInjection.Abstractions", + "version": "3.0.0", + "hash": "sha256-dGTb6sHsjZ86fiLnwbauGf9CQdN7G96lCM4ADjaSSBs=" + }, + { + "pname": "Microsoft.Extensions.DependencyInjection.Abstractions", + "version": "3.1.9", + "hash": "sha256-Zkt069WHJ542l+LbeeZxmaddoQiUeYE9bdyh4MN59tA=" + }, + { + "pname": "Microsoft.Extensions.DependencyInjection.Abstractions", + "version": "6.0.0", + "hash": "sha256-SZke0jNKIqJvvukdta+MgIlGsrP2EdPkkS8lfLg7Ju4=" + }, + { + "pname": "Microsoft.Extensions.DependencyInjection.Abstractions", + "version": "8.0.0", + "hash": "sha256-75KzEGWjbRELczJpCiJub+ltNUMMbz5A/1KQU+5dgP8=" + }, + { + "pname": "Microsoft.Extensions.DependencyInjection.Abstractions", + "version": "8.0.2", + "hash": "sha256-UfLfEQAkXxDaVPC7foE/J3FVEXd31Pu6uQIhTic3JgY=" + }, + { + "pname": "Microsoft.Extensions.DependencyInjection.Abstractions", + "version": "9.0.0", + "hash": "sha256-CncVwkKZ5CsIG2O0+OM9qXuYXh3p6UGyueTHSLDVL+c=" + }, + { + "pname": "Microsoft.Extensions.DependencyInjection.Abstractions", + "version": "9.0.2", + "hash": "sha256-WoTLgw/OlXhgN54Szip0Zpne7i/YTXwZ1ZLCPcHV6QM=" + }, + { + "pname": "Microsoft.Extensions.DependencyModel", + "version": "3.1.6", + "hash": "sha256-TKEE5GJmn1wLKuiF6Wd+Q7jpIlq9gSvlWvTVopCyoo4=" + }, + { + "pname": "Microsoft.Extensions.DependencyModel", + "version": "9.0.0", + "hash": "sha256-xirwlMWM0hBqgTneQOGkZ8l45mHT08XuSSRIbprgq94=" + }, + { + "pname": "Microsoft.Extensions.DependencyModel", + "version": "9.0.2", + "hash": "sha256-KqR0yrNi7S8rDje4RYjTEC98XG0rBreO4wkHGO6Llks=" + }, + { + "pname": "Microsoft.Extensions.Diagnostics", + "version": "9.0.2", + "hash": "sha256-ImTZ6PZyKEdq1XvqYT5DPr6cG0BSTrsrO7rTDuy29fc=" + }, + { + "pname": "Microsoft.Extensions.Diagnostics.Abstractions", + "version": "9.0.0", + "hash": "sha256-wG1LcET+MPRjUdz3HIOTHVEnbG/INFJUqzPErCM79eY=" + }, + { + "pname": "Microsoft.Extensions.Diagnostics.Abstractions", + "version": "9.0.2", + "hash": "sha256-JTJ8LCW3aYUO86OPgXRQthtDTUMikOfILExgeOF8CX4=" + }, + { + "pname": "Microsoft.Extensions.FileProviders.Abstractions", + "version": "3.0.0", + "hash": "sha256-QiLBIsAUcHkWk0Io6YEoPz3eQu8k50J2GzLFmiwYtJg=" + }, + { + "pname": "Microsoft.Extensions.FileProviders.Abstractions", + "version": "8.0.0", + "hash": "sha256-uQSXmt47X2HGoVniavjLICbPtD2ReQOYQMgy3l0xuMU=" + }, + { + "pname": "Microsoft.Extensions.FileProviders.Abstractions", + "version": "9.0.0", + "hash": "sha256-mVfLjZ8VrnOQR/uQjv74P2uEG+rgW72jfiGdSZhIfDc=" + }, + { + "pname": "Microsoft.Extensions.FileProviders.Abstractions", + "version": "9.0.2", + "hash": "sha256-RmVshMCWW1/RE/Wk8AeT4r6uZ+XFuwDFYzdxYKSm440=" + }, + { + "pname": "Microsoft.Extensions.FileProviders.Physical", + "version": "9.0.2", + "hash": "sha256-vQBgVLW813wOnJ1+943ArDWReok6p0jAl7fhwvyFtL8=" + }, + { + "pname": "Microsoft.Extensions.FileSystemGlobbing", + "version": "9.0.2", + "hash": "sha256-oH6X8SQjqi5Q2HLRILcUr9iPqnC1Ky5m5GbYYCKCxag=" + }, + { + "pname": "Microsoft.Extensions.Hosting", + "version": "9.0.2", + "hash": "sha256-eI9ckarRX0UCX+mBsEBYdvHZrmN86bXyTRvbH4gU9JM=" + }, + { + "pname": "Microsoft.Extensions.Hosting.Abstractions", + "version": "3.0.0", + "hash": "sha256-iUMCRR9uHSoub48MboewTxokP5QwrC47X5t+C+JUMo4=" + }, + { + "pname": "Microsoft.Extensions.Hosting.Abstractions", + "version": "8.0.1", + "hash": "sha256-/bIVL9uvBQhV/KQmjA1ZjR74sMfaAlBb15sVXsGDEVA=" + }, + { + "pname": "Microsoft.Extensions.Hosting.Abstractions", + "version": "9.0.0", + "hash": "sha256-NhEDqZGnwCDFyK/NKn1dwLQExYE82j1YVFcrhXVczqY=" + }, + { + "pname": "Microsoft.Extensions.Hosting.Abstractions", + "version": "9.0.2", + "hash": "sha256-PUCam4g5g84qIqfPA9sVBNVPA26rWFq7js9nHF3WLZc=" + }, + { + "pname": "Microsoft.Extensions.Identity.Core", + "version": "9.0.2", + "hash": "sha256-5aLS+VE+FqHozXW4qFu5gyGpV8HqIfGzRnUV/zXM2/Q=" + }, + { + "pname": "Microsoft.Extensions.Identity.Stores", + "version": "9.0.2", + "hash": "sha256-Em/aKN8WTmwg79RdK6+QDx1iVTR0qCK6/f54GW2HCjo=" + }, + { + "pname": "Microsoft.Extensions.Logging", + "version": "6.0.0", + "hash": "sha256-8WsZKRGfXW5MsXkMmNVf6slrkw+cR005czkOP2KUqTk=" + }, + { + "pname": "Microsoft.Extensions.Logging", + "version": "8.0.1", + "hash": "sha256-vkfVw4tQEg86Xg18v6QO0Qb4Ysz0Njx57d1XcNuj6IU=" + }, + { + "pname": "Microsoft.Extensions.Logging", + "version": "9.0.0", + "hash": "sha256-kR16c+N8nQrWeYLajqnXPg7RiXjZMSFLnKLEs4VfjcM=" + }, + { + "pname": "Microsoft.Extensions.Logging", + "version": "9.0.2", + "hash": "sha256-vPCb4ZoiwZUSGJIOhYiLwcZLnsd0ZZhny6KQkT88nI0=" + }, + { + "pname": "Microsoft.Extensions.Logging.Abstractions", + "version": "3.0.0", + "hash": "sha256-p70uTENWQc0J7ibLHlRHWk3RYZg0DMP3g2m4kAUaoxA=" + }, + { + "pname": "Microsoft.Extensions.Logging.Abstractions", + "version": "8.0.2", + "hash": "sha256-cHpe8X2BgYa5DzulZfq24rg8O2K5Lmq2OiLhoyAVgJc=" + }, + { + "pname": "Microsoft.Extensions.Logging.Abstractions", + "version": "9.0.0", + "hash": "sha256-iBTs9twjWXFeERt4CErkIIcoJZU1jrd1RWCI8V5j7KU=" + }, + { + "pname": "Microsoft.Extensions.Logging.Abstractions", + "version": "9.0.2", + "hash": "sha256-mCxeuc+37XY0bmZR+z4p1hrZUdTZEg+FRcs/m6dAQDU=" + }, + { + "pname": "Microsoft.Extensions.Logging.Configuration", + "version": "8.0.1", + "hash": "sha256-E2JbJG2EXlv2HUWLi17kIkAL6RC9rC2E18C3gAyOuaE=" + }, + { + "pname": "Microsoft.Extensions.Logging.Configuration", + "version": "9.0.2", + "hash": "sha256-SeNQ8us2cZ8xbJx8TK7xm3IxQR95EanSfMYhqvP2pWU=" + }, + { + "pname": "Microsoft.Extensions.Logging.Console", + "version": "9.0.2", + "hash": "sha256-yD30lW3ax4JHmZ9QIp1b0ELrXiwykP5KHF/feJGweyE=" + }, + { + "pname": "Microsoft.Extensions.Logging.Debug", + "version": "9.0.2", + "hash": "sha256-0WP9jFTsbXCIhYx/2IFL69mv2+K3Ld7C4QvwY00iOD0=" + }, + { + "pname": "Microsoft.Extensions.Logging.EventLog", + "version": "9.0.2", + "hash": "sha256-e4q/Z6xLq2HzQiKI7npagyEZdkfUe+FbIz3Tg+hPH9g=" + }, + { + "pname": "Microsoft.Extensions.Logging.EventSource", + "version": "9.0.2", + "hash": "sha256-W7yidllNOKxTvgIUqjJ3h55PAIR/XREfbuH+8TUhD0o=" + }, + { + "pname": "Microsoft.Extensions.ObjectPool", + "version": "8.0.11", + "hash": "sha256-xutYzUA86hOg0NfLcs/NPylKvNcNohucY1LpSEkkaps=" + }, + { + "pname": "Microsoft.Extensions.Options", + "version": "6.0.0", + "hash": "sha256-DxnEgGiCXpkrxFkxXtOXqwaiAtoIjA8VSSWCcsW0FwE=" + }, + { + "pname": "Microsoft.Extensions.Options", + "version": "8.0.0", + "hash": "sha256-n2m4JSegQKUTlOsKLZUUHHKMq926eJ0w9N9G+I3FoFw=" + }, + { + "pname": "Microsoft.Extensions.Options", + "version": "8.0.2", + "hash": "sha256-AjcldddddtN/9aH9pg7ClEZycWtFHLi9IPe1GGhNQys=" + }, + { + "pname": "Microsoft.Extensions.Options", + "version": "9.0.0", + "hash": "sha256-DT5euAQY/ItB5LPI8WIp6Dnd0lSvBRP35vFkOXC68ck=" + }, + { + "pname": "Microsoft.Extensions.Options", + "version": "9.0.2", + "hash": "sha256-y2jZfcWx/H6Sx7wklA248r6kPjZmzTTLGxW8ZxrzNLM=" + }, + { + "pname": "Microsoft.Extensions.Options.ConfigurationExtensions", + "version": "6.0.0", + "hash": "sha256-au0Y13cGk/dQFKuvSA5NnP/++bErTk0oOTlgmHdI2Mw=" + }, + { + "pname": "Microsoft.Extensions.Options.ConfigurationExtensions", + "version": "8.0.0", + "hash": "sha256-A5Bbzw1kiNkgirk5x8kyxwg9lLTcSngojeD+ocpG1RI=" + }, + { + "pname": "Microsoft.Extensions.Options.ConfigurationExtensions", + "version": "9.0.2", + "hash": "sha256-xOYLRlXDI4gMEoQ+J+sQBNRT2RPDNrSCZkob7qBiV10=" + }, + { + "pname": "Microsoft.Extensions.Primitives", + "version": "6.0.0", + "hash": "sha256-AgvysszpQ11AiTBJFkvSy8JnwIWTj15Pfek7T7ThUc4=" + }, + { + "pname": "Microsoft.Extensions.Primitives", + "version": "8.0.0", + "hash": "sha256-FU8qj3DR8bDdc1c+WeGZx/PCZeqqndweZM9epcpXjSo=" + }, + { + "pname": "Microsoft.Extensions.Primitives", + "version": "9.0.0", + "hash": "sha256-ZNLusK1CRuq5BZYZMDqaz04PIKScE2Z7sS2tehU7EJs=" + }, + { + "pname": "Microsoft.Extensions.Primitives", + "version": "9.0.2", + "hash": "sha256-zy/YNMaY47o6yNv2WuYiAJEjtoOF8jlWgsWHqXeSm4s=" + }, + { + "pname": "Microsoft.IdentityModel.Abstractions", + "version": "8.6.0", + "hash": "sha256-0mXOkDKvUikcyCMUcmA7PWl4RlAwwUciKSqTTgLDa3o=" + }, + { + "pname": "Microsoft.IdentityModel.JsonWebTokens", + "version": "8.6.0", + "hash": "sha256-Wey0xjL0n6NCi4HiVFGcDS6+ONPp+ogzb5ZTF7sFt3k=" + }, + { + "pname": "Microsoft.IdentityModel.Logging", + "version": "8.6.0", + "hash": "sha256-4M4EUJDMDgmqdBxlbptnrLNWOLbmzatypDpl30CBUlk=" + }, + { + "pname": "Microsoft.IdentityModel.Protocols", + "version": "8.0.1", + "hash": "sha256-v3DIpG6yfIToZBpHOjtQHRo2BhXGDoE70EVs6kBtrRg=" + }, + { + "pname": "Microsoft.IdentityModel.Protocols.OpenIdConnect", + "version": "8.0.1", + "hash": "sha256-ZHKaZxqESk+OU1SFTFGxvZ71zbdgWqv1L6ET9+fdXX0=" + }, + { + "pname": "Microsoft.IdentityModel.Tokens", + "version": "8.0.1", + "hash": "sha256-beVbbVQy874HlXkTKarPTT5/r7XR1NGHA/50ywWp7YA=" + }, + { + "pname": "Microsoft.IdentityModel.Tokens", + "version": "8.6.0", + "hash": "sha256-gyZpy8h9I09fr7icHaIXaxRTzhstHrrrq2wkd/5vz78=" + }, + { + "pname": "Microsoft.IO.RecyclableMemoryStream", + "version": "3.0.1", + "hash": "sha256-unFg/5EcU/XKJbob4GtQC43Ydgi5VjeBGs7hfhj4EYo=" + }, + { + "pname": "Microsoft.Net.Http.Headers", + "version": "2.3.0", + "hash": "sha256-XY3OyhKTzUVbmMnegp0IxApg8cw97RD9eXC2XenrOqE=" + }, + { + "pname": "Microsoft.NETCore.Platforms", + "version": "1.1.0", + "hash": "sha256-FeM40ktcObQJk4nMYShB61H/E8B7tIKfl9ObJ0IOcCM=" + }, + { + "pname": "Microsoft.NETCore.Targets", + "version": "1.1.0", + "hash": "sha256-0AqQ2gMS8iNlYkrD+BxtIg7cXMnr9xZHtKAuN4bjfaQ=" + }, + { + "pname": "Microsoft.OpenApi", + "version": "1.3.1", + "hash": "sha256-26dko2VfeHMnpas1R98ZxzWcgw7qr7lNCRuk3yXRjUU=" + }, + { + "pname": "Microsoft.OpenApi", + "version": "1.6.22", + "hash": "sha256-DDyPc6DAD/X4PgXlVIYqqU5KLwaIaMpvBml1fACKdjY=" + }, + { + "pname": "Microsoft.Win32.Primitives", + "version": "4.3.0", + "hash": "sha256-mBNDmPXNTW54XLnPAUwBRvkIORFM7/j0D0I2SyQPDEg=" + }, + { + "pname": "Microsoft.Win32.SystemEvents", + "version": "9.0.2", + "hash": "sha256-WXgu8y2LT8OtQSVRojumtlTkJVjfvXeZ8N9iRKIW/lI=" + }, + { + "pname": "MimeKit", + "version": "4.10.0", + "hash": "sha256-SLQ7+Yh3o8bbxyRsA5yJgeAOkR8SqMI0vB8VwjQDzl8=" + }, + { + "pname": "MimeTypeMapOfficial", + "version": "1.0.17", + "hash": "sha256-HuQRDUDjBlAKzbnCWvxkXp7tf2bCdd/evox8964grdA=" + }, + { + "pname": "Mono.TextTemplating", + "version": "3.0.0", + "hash": "sha256-VlgGDvgNZb7MeBbIZ4DE2Nn/j2aD9k6XqNHnASUSDr0=" + }, + { + "pname": "Nager.ArticleNumber", + "version": "1.0.7", + "hash": "sha256-Th3BIABiOo0vsgqznr6C6WhVdGDFalso/rAfUYDI0NE=" + }, + { + "pname": "NETStandard.Library", + "version": "1.6.1", + "hash": "sha256-iNan1ix7RtncGWC9AjAZ2sk70DoxOsmEOgQ10fXm4Pw=" + }, + { + "pname": "NetVips", + "version": "3.0.0", + "hash": "sha256-n3FDtdgEA12gxzfQ2bz5HlMOBnht4mz0jFstBh5CN00=" + }, + { + "pname": "NetVips.Native", + "version": "8.16.0", + "hash": "sha256-bHVoa9fWue4PY6FOIA0o3IU6WcMAK6VQOuQNADKD8S4=" + }, + { + "pname": "NetVips.Native.linux-arm", + "version": "8.16.0", + "hash": "sha256-VY/mUqkeLJZeYvLM1VbEtXFVZPuLgIHK6tvbwq+CjQw=" + }, + { + "pname": "NetVips.Native.linux-arm64", + "version": "8.16.0", + "hash": "sha256-ZXV8UmLFPVlk4tdFmoH/job43iS4ZchpM+gLJdFaoG8=" + }, + { + "pname": "NetVips.Native.linux-musl-arm64", + "version": "8.16.0", + "hash": "sha256-27EmQkg0IQ45tt7I8Gwnh442MuU5ouyIvPU0npcK2sI=" + }, + { + "pname": "NetVips.Native.linux-musl-x64", + "version": "8.16.0", + "hash": "sha256-MMT4wt0YEl7ZDvrmwXMLvmoGzlVZQ97YyHjMSHsJHZs=" + }, + { + "pname": "NetVips.Native.linux-x64", + "version": "8.16.0", + "hash": "sha256-eXSMJoz39utbAy4hiLJ2MTxWpkfdvW62OqhI3nOSYZo=" + }, + { + "pname": "NetVips.Native.osx-arm64", + "version": "8.16.0", + "hash": "sha256-tC2WmGzA/aItXj2dPunVt7Eu6pljV3334TcppN8NGqw=" + }, + { + "pname": "NetVips.Native.osx-x64", + "version": "8.16.0", + "hash": "sha256-yEfcmO33/dVgX5Qm72TouiQzw5yLPvFeveRRf/8gRs0=" + }, + { + "pname": "NetVips.Native.win-arm64", + "version": "8.16.0", + "hash": "sha256-AFM66a+i8qqda8mEuvzt48RopYSh5zDeHE+PigETBKc=" + }, + { + "pname": "NetVips.Native.win-x64", + "version": "8.16.0", + "hash": "sha256-+4j4lkE7wLd8MFKa/O1keT4Hgl3kKBg6PEAcc8dlCwA=" + }, + { + "pname": "NetVips.Native.win-x86", + "version": "8.16.0", + "hash": "sha256-kOE1SAqnf1ls3MQ4UkM4mheU7nKBFGOuFiQj5z8EL98=" + }, + { + "pname": "Newtonsoft.Json", + "version": "11.0.1", + "hash": "sha256-lbR7rpS/EXgJ8TqQspuIIqAsiorrZb1oOK4HFw+QyPw=" + }, + { + "pname": "Newtonsoft.Json", + "version": "11.0.2", + "hash": "sha256-YhlAbGfwoxQzxb3Hef4iyV9eGdPQJJNd2GgSR0jsBJ0=" + }, + { + "pname": "NReco.Logging.File", + "version": "1.2.2", + "hash": "sha256-guI+h8t26u/DfYq354CXbdKIBqrKsDAyDZh1wFtDshw=" + }, + { + "pname": "runtime.any.System.Collections", + "version": "4.3.0", + "hash": "sha256-4PGZqyWhZ6/HCTF2KddDsbmTTjxs2oW79YfkberDZS8=" + }, + { + "pname": "runtime.any.System.Diagnostics.Tools", + "version": "4.3.0", + "hash": "sha256-8yLKFt2wQxkEf7fNfzB+cPUCjYn2qbqNgQ1+EeY2h/I=" + }, + { + "pname": "runtime.any.System.Diagnostics.Tracing", + "version": "4.3.0", + "hash": "sha256-dsmTLGvt8HqRkDWP8iKVXJCS+akAzENGXKPV18W2RgI=" + }, + { + "pname": "runtime.any.System.Globalization", + "version": "4.3.0", + "hash": "sha256-PaiITTFI2FfPylTEk7DwzfKeiA/g/aooSU1pDcdwWLU=" + }, + { + "pname": "runtime.any.System.Globalization.Calendars", + "version": "4.3.0", + "hash": "sha256-AYh39tgXJVFu8aLi9Y/4rK8yWMaza4S4eaxjfcuEEL4=" + }, + { + "pname": "runtime.any.System.IO", + "version": "4.3.0", + "hash": "sha256-vej7ySRhyvM3pYh/ITMdC25ivSd0WLZAaIQbYj/6HVE=" + }, + { + "pname": "runtime.any.System.Reflection", + "version": "4.3.0", + "hash": "sha256-ns6f++lSA+bi1xXgmW1JkWFb2NaMD+w+YNTfMvyAiQk=" + }, + { + "pname": "runtime.any.System.Reflection.Extensions", + "version": "4.3.0", + "hash": "sha256-Y2AnhOcJwJVYv7Rp6Jz6ma0fpITFqJW+8rsw106K2X8=" + }, + { + "pname": "runtime.any.System.Reflection.Primitives", + "version": "4.3.0", + "hash": "sha256-LkPXtiDQM3BcdYkAm5uSNOiz3uF4J45qpxn5aBiqNXQ=" + }, + { + "pname": "runtime.any.System.Resources.ResourceManager", + "version": "4.3.0", + "hash": "sha256-9EvnmZslLgLLhJ00o5MWaPuJQlbUFcUF8itGQNVkcQ4=" + }, + { + "pname": "runtime.any.System.Runtime", + "version": "4.3.0", + "hash": "sha256-qwhNXBaJ1DtDkuRacgHwnZmOZ1u9q7N8j0cWOLYOELM=" + }, + { + "pname": "runtime.any.System.Runtime.Handles", + "version": "4.3.0", + "hash": "sha256-PQRACwnSUuxgVySO1840KvqCC9F8iI9iTzxNW0RcBS4=" + }, + { + "pname": "runtime.any.System.Runtime.InteropServices", + "version": "4.3.0", + "hash": "sha256-Kaw5PnLYIiqWbsoF3VKJhy7pkpoGsUwn4ZDCKscbbzA=" + }, + { + "pname": "runtime.any.System.Text.Encoding", + "version": "4.3.0", + "hash": "sha256-Q18B9q26MkWZx68exUfQT30+0PGmpFlDgaF0TnaIGCs=" + }, + { + "pname": "runtime.any.System.Text.Encoding.Extensions", + "version": "4.3.0", + "hash": "sha256-6MYj0RmLh4EVqMtO/MRqBi0HOn5iG4x9JimgCCJ+EFM=" + }, + { + "pname": "runtime.any.System.Threading.Tasks", + "version": "4.3.0", + "hash": "sha256-agdOM0NXupfHbKAQzQT8XgbI9B8hVEh+a/2vqeHctg4=" + }, + { + "pname": "runtime.any.System.Threading.Timer", + "version": "4.3.0", + "hash": "sha256-BgHxXCIbicVZtpgMimSXixhFC3V+p5ODqeljDjO8hCs=" + }, + { + "pname": "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl", + "version": "4.3.0", + "hash": "sha256-LXUPLX3DJxsU1Pd3UwjO1PO9NM2elNEDXeu2Mu/vNps=" + }, + { + "pname": "runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl", + "version": "4.3.0", + "hash": "sha256-qeSqaUI80+lqw5MK4vMpmO0CZaqrmYktwp6L+vQAb0I=" + }, + { + "pname": "runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl", + "version": "4.3.0", + "hash": "sha256-SrHqT9wrCBsxILWtaJgGKd6Odmxm8/Mh7Kh0CUkZVzA=" + }, + { + "pname": "runtime.native.System", + "version": "4.3.0", + "hash": "sha256-ZBZaodnjvLXATWpXXakFgcy6P+gjhshFXmglrL5xD5Y=" + }, + { + "pname": "runtime.native.System.IO.Compression", + "version": "4.3.0", + "hash": "sha256-DWnXs4vlKoU6WxxvCArTJupV6sX3iBbZh8SbqfHace8=" + }, + { + "pname": "runtime.native.System.Net.Http", + "version": "4.3.0", + "hash": "sha256-c556PyheRwpYhweBjSfIwEyZHnAUB8jWioyKEcp/2dg=" + }, + { + "pname": "runtime.native.System.Security.Cryptography.Apple", + "version": "4.3.0", + "hash": "sha256-2IhBv0i6pTcOyr8FFIyfPEaaCHUmJZ8DYwLUwJ+5waw=" + }, + { + "pname": "runtime.native.System.Security.Cryptography.OpenSsl", + "version": "4.3.0", + "hash": "sha256-Jy01KhtcCl2wjMpZWH+X3fhHcVn+SyllWFY8zWlz/6I=" + }, + { + "pname": "runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl", + "version": "4.3.0", + "hash": "sha256-wyv00gdlqf8ckxEdV7E+Ql9hJIoPcmYEuyeWb5Oz3mM=" + }, + { + "pname": "runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl", + "version": "4.3.0", + "hash": "sha256-zi+b4sCFrA9QBiSGDD7xPV27r3iHGlV99gpyVUjRmc4=" + }, + { + "pname": "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple", + "version": "4.3.0", + "hash": "sha256-serkd4A7F6eciPiPJtUyJyxzdAtupEcWIZQ9nptEzIM=" + }, + { + "pname": "runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl", + "version": "4.3.0", + "hash": "sha256-gybQU6mPgaWV3rBG2dbH6tT3tBq8mgze3PROdsuWnX0=" + }, + { + "pname": "runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl", + "version": "4.3.0", + "hash": "sha256-VsP72GVveWnGUvS/vjOQLv1U80H2K8nZ4fDAmI61Hm4=" + }, + { + "pname": "runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl", + "version": "4.3.0", + "hash": "sha256-4yKGa/IrNCKuQ3zaDzILdNPD32bNdy6xr5gdJigyF5g=" + }, + { + "pname": "runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl", + "version": "4.3.0", + "hash": "sha256-HmdJhhRsiVoOOCcUvAwdjpMRiyuSwdcgEv2j9hxi+Zc=" + }, + { + "pname": "runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl", + "version": "4.3.0", + "hash": "sha256-pVFUKuPPIx0edQKjzRon3zKq8zhzHEzko/lc01V/jdw=" + }, + { + "pname": "runtime.unix.Microsoft.Win32.Primitives", + "version": "4.3.0", + "hash": "sha256-LZb23lRXzr26tRS5aA0xyB08JxiblPDoA7HBvn6awXg=" + }, + { + "pname": "runtime.unix.System.Console", + "version": "4.3.0", + "hash": "sha256-AHkdKShTRHttqfMjmi+lPpTuCrM5vd/WRy6Kbtie190=" + }, + { + "pname": "runtime.unix.System.Diagnostics.Debug", + "version": "4.3.0", + "hash": "sha256-ReoazscfbGH+R6s6jkg5sIEHWNEvjEoHtIsMbpc7+tI=" + }, + { + "pname": "runtime.unix.System.IO.FileSystem", + "version": "4.3.0", + "hash": "sha256-Pf4mRl6YDK2x2KMh0WdyNgv0VUNdSKVDLlHqozecy5I=" + }, + { + "pname": "runtime.unix.System.Net.Primitives", + "version": "4.3.0", + "hash": "sha256-pHJ+I6i16MV6m77uhTC6GPY6jWGReE3SSP3fVB59ti0=" + }, + { + "pname": "runtime.unix.System.Net.Sockets", + "version": "4.3.0", + "hash": "sha256-IvgOeA2JuBjKl5yAVGjPYMPDzs9phb3KANs95H9v1w4=" + }, + { + "pname": "runtime.unix.System.Private.Uri", + "version": "4.3.0", + "hash": "sha256-c5tXWhE/fYbJVl9rXs0uHh3pTsg44YD1dJvyOA0WoMs=" + }, + { + "pname": "runtime.unix.System.Runtime.Extensions", + "version": "4.3.0", + "hash": "sha256-l8S9gt6dk3qYG6HYonHtdlYtBKyPb29uQ6NDjmrt3V4=" + }, + { + "pname": "Scrutor", + "version": "3.3.0", + "hash": "sha256-cYd6xuCn8cniuHWhiWMZRYZrYUjOvAz2wlEvOM5drmE=" + }, + { + "pname": "Serilog", + "version": "4.2.0", + "hash": "sha256-7f3EpCsEbDxXgsuhE430KVI14p7oDUuCtwRpOCqtnbs=" + }, + { + "pname": "Serilog.AspNetCore", + "version": "9.0.0", + "hash": "sha256-h58CFtXBRvwhTCrhQPHQMKbp98YiK02o+cOyOmktVpQ=" + }, + { + "pname": "Serilog.Enrichers.Thread", + "version": "4.0.0", + "hash": "sha256-lo+3ohNHKe/hTq9vGbk29p/OWcNlcyJToGL6EpCJQm8=" + }, + { + "pname": "Serilog.Extensions.Hosting", + "version": "9.0.0", + "hash": "sha256-bidr2foe7Dp4BJOlkc7ko0q6vt9ITG3IZ8b2BKRa0pw=" + }, + { + "pname": "Serilog.Extensions.Logging", + "version": "3.0.1", + "hash": "sha256-KtHMMnepmEpOlHrIGlUkK6Vq1L0iBBnFGavbUtvxOBk=" + }, + { + "pname": "Serilog.Extensions.Logging", + "version": "9.0.0", + "hash": "sha256-aGkz1V4HVl0rWC1BkcnLhG1EC7WLBoT3tdLdUUTFXaw=" + }, + { + "pname": "Serilog.Formatting.Compact", + "version": "3.0.0", + "hash": "sha256-nejEYqJEMG9P2iFZvbsCUPr5LZRtxbdUTLCI9N71jHY=" + }, + { + "pname": "Serilog.Settings.Configuration", + "version": "9.0.0", + "hash": "sha256-Q/q5UiSrcxoy5a/orod20E2RfiRtHDhxjjGMe1dW35I=" + }, + { + "pname": "Serilog.Sinks.AspNetCore.SignalR", + "version": "0.4.0", + "hash": "sha256-KkyrLNMsoBGMJN7C8NNGhGVxFDYzfvxlX66i3NLYkmo=" + }, + { + "pname": "Serilog.Sinks.Console", + "version": "6.0.0", + "hash": "sha256-QH8ykDkLssJ99Fgl+ZBFBr+RQRl0wRTkeccQuuGLyro=" + }, + { + "pname": "Serilog.Sinks.Debug", + "version": "3.0.0", + "hash": "sha256-7/LmoRF1rUDFhJ47bTRQQFRgSHnZDO8484r3sCGqYvE=" + }, + { + "pname": "Serilog.Sinks.File", + "version": "6.0.0", + "hash": "sha256-KQmlUpG9ovRpNqKhKe6rz3XMLUjkBqjyQhEm2hV5Sow=" + }, + { + "pname": "Serilog.Sinks.SignalR.Core", + "version": "0.1.2", + "hash": "sha256-7j9SK++4U7Q6f6ofPWsaH9xQii/jBK864u/kHYwxyJk=" + }, + { + "pname": "SharpCompress", + "version": "0.39.0", + "hash": "sha256-Me88MMn5NUiw5bugFKCKFRnFSXQKIFZJ+k97Ex6jgZE=" + }, + { + "pname": "SixLabors.ImageSharp", + "version": "3.1.7", + "hash": "sha256-jMD/FiIwW1kNhTI6hKig8/QFOO3eTQX/C22cSAcKBH4=" + }, + { + "pname": "SonarAnalyzer.CSharp", + "version": "10.7.0.110445", + "hash": "sha256-HIG3Us7EnfaZOLKjxDRCJjaoqwqCdrFuDI2GlMGadp4=" + }, + { + "pname": "sqlite-net-pcl", + "version": "1.8.116", + "hash": "sha256-XlD0ycLkpMeFkZ9NCktC2ldYzD2NyJarSv5h6e4gekA=" + }, + { + "pname": "SQLitePCLRaw.bundle_e_sqlite3", + "version": "2.1.10", + "hash": "sha256-kZIWjH/TVTXRIsHPZSl7zoC4KAMBMWmgFYGLrQ15Occ=" + }, + { + "pname": "SQLitePCLRaw.bundle_green", + "version": "2.0.4", + "hash": "sha256-QjDI47nPUXx75rMABeSYefB6gw6xgrgTjYY6Uq/1J4U=" + }, + { + "pname": "SQLitePCLRaw.core", + "version": "2.0.4", + "hash": "sha256-IUfP6hlLayClMzG3V0cEU2woJrlCqvZ/J6LBQB3fZVE=" + }, + { + "pname": "SQLitePCLRaw.core", + "version": "2.1.10", + "hash": "sha256-gpZcYwiJVCVwCyJu0R6hYxyMB39VhJDmYh9LxcIVAA8=" + }, + { + "pname": "SQLitePCLRaw.lib.e_sqlite3", + "version": "2.0.4", + "hash": "sha256-rPj53a6jdeX4gSr7SsUz7LtbecdoDJQb7bxSigsPvU4=" + }, + { + "pname": "SQLitePCLRaw.lib.e_sqlite3", + "version": "2.1.10", + "hash": "sha256-m2v2RQWol+1MNGZsx+G2N++T9BNtQGLLHXUjcwkdCnc=" + }, + { + "pname": "SQLitePCLRaw.provider.dynamic_cdecl", + "version": "2.0.4", + "hash": "sha256-0rzyURehoQsyDxW8Yj477TJLNcItBsJVwKBeGidKmSA=" + }, + { + "pname": "SQLitePCLRaw.provider.e_sqlite3", + "version": "2.1.10", + "hash": "sha256-MLs3jiETLZ7k/TgkHynZegCWuAbgHaDQKTPB0iNv7Fg=" + }, + { + "pname": "Swashbuckle.AspNetCore", + "version": "7.3.1", + "hash": "sha256-ZcTjOzUbSEIrlGPO/7M5C3wRqyhjZggNGJ3Sg6aUjf0=" + }, + { + "pname": "Swashbuckle.AspNetCore.Filters", + "version": "8.0.2", + "hash": "sha256-RCFdFvCzUYS850axoGaprr0heFyBFCIu9jzusXJ0YAA=" + }, + { + "pname": "Swashbuckle.AspNetCore.Filters.Abstractions", + "version": "8.0.2", + "hash": "sha256-oe6KYmrvaAKu0JpAwxpIiyxSaqfRg2VAyc/KKQX6xFI=" + }, + { + "pname": "Swashbuckle.AspNetCore.Swagger", + "version": "7.3.1", + "hash": "sha256-ifpw7iIFjFD1tqWuJeFxxQ9AQv4VKKbg7uk+EMzCISg=" + }, + { + "pname": "Swashbuckle.AspNetCore.SwaggerGen", + "version": "5.0.0", + "hash": "sha256-JGMmhhq6OdscsGsnSM6182ZkyWiSdr0ERmNZvJV4XAM=" + }, + { + "pname": "Swashbuckle.AspNetCore.SwaggerGen", + "version": "7.3.1", + "hash": "sha256-ZgPqUgcK8iO+1cDqm4JxkJwg9atuj6f9uR2ty5z54Do=" + }, + { + "pname": "Swashbuckle.AspNetCore.SwaggerUI", + "version": "7.3.1", + "hash": "sha256-0VmUWgbdW9L7YO+Xb79RsPsEJjXpDj/twLas1OlHlUs=" + }, + { + "pname": "System.AppContext", + "version": "4.3.0", + "hash": "sha256-yg95LNQOwFlA1tWxXdQkVyJqT4AnoDc+ACmrNvzGiZg=" + }, + { + "pname": "System.Buffers", + "version": "4.3.0", + "hash": "sha256-XqZWb4Kd04960h4U9seivjKseGA/YEIpdplfHYHQ9jk=" + }, + { + "pname": "System.Buffers", + "version": "4.6.0", + "hash": "sha256-c2QlgFB16IlfBms5YLsTCFQ/QeKoS6ph1a9mdRkq/Jc=" + }, + { + "pname": "System.CodeDom", + "version": "6.0.0", + "hash": "sha256-uPetUFZyHfxjScu5x4agjk9pIhbCkt5rG4Axj25npcQ=" + }, + { + "pname": "System.Collections", + "version": "4.3.0", + "hash": "sha256-afY7VUtD6w/5mYqrce8kQrvDIfS2GXDINDh73IjxJKc=" + }, + { + "pname": "System.Collections.Concurrent", + "version": "4.3.0", + "hash": "sha256-KMY5DfJnDeIsa13DpqvyN8NkReZEMAFnlmNglVoFIXI=" + }, + { + "pname": "System.Collections.Immutable", + "version": "7.0.0", + "hash": "sha256-9an2wbxue2qrtugYES9awshQg+KfJqajhnhs45kQIdk=" + }, + { + "pname": "System.Composition", + "version": "7.0.0", + "hash": "sha256-YjhxuzuVdAzRBHNQy9y/1ES+ll3QtLcd2o+o8wIyMao=" + }, + { + "pname": "System.Composition.AttributedModel", + "version": "7.0.0", + "hash": "sha256-3s52Dyk2J66v/B4LLYFBMyXl0I8DFDshjE+sMjW4ubM=" + }, + { + "pname": "System.Composition.Convention", + "version": "7.0.0", + "hash": "sha256-N4MkkBXSQkcFKsEdcSe6zmyFyMmFOHmI2BNo3wWxftk=" + }, + { + "pname": "System.Composition.Hosting", + "version": "7.0.0", + "hash": "sha256-7liQGMaVKNZU1iWTIXvqf0SG8zPobRoLsW7q916XC3M=" + }, + { + "pname": "System.Composition.Runtime", + "version": "7.0.0", + "hash": "sha256-Oo1BxSGLETmdNcYvnkGdgm7JYAnQmv1jY0gL0j++Pd0=" + }, + { + "pname": "System.Composition.TypedParts", + "version": "7.0.0", + "hash": "sha256-6ZzNdk35qQG3ttiAi4OXrihla7LVP+y2fL3bx40/32s=" + }, + { + "pname": "System.Console", + "version": "4.3.0", + "hash": "sha256-Xh3PPBZr0pDbDaK8AEHbdGz7ePK6Yi1ZyRWI1JM6mbo=" + }, + { + "pname": "System.Diagnostics.Debug", + "version": "4.3.0", + "hash": "sha256-fkA79SjPbSeiEcrbbUsb70u9B7wqbsdM9s1LnoKj0gM=" + }, + { + "pname": "System.Diagnostics.DiagnosticSource", + "version": "4.3.0", + "hash": "sha256-OFJRb0ygep0Z3yDBLwAgM/Tkfs4JCDtsNhwDH9cd1Xw=" + }, + { + "pname": "System.Diagnostics.DiagnosticSource", + "version": "6.0.0", + "hash": "sha256-RY9uWSPdK2fgSwlj1OHBGBVo3ZvGQgBJNzAsS5OGMWc=" + }, + { + "pname": "System.Diagnostics.EventLog", + "version": "9.0.2", + "hash": "sha256-IoiQbH8To9UqzYgJzYpFbuiRV3KGU85y4ccPTyttP/w=" + }, + { + "pname": "System.Diagnostics.Tools", + "version": "4.3.0", + "hash": "sha256-gVOv1SK6Ape0FQhCVlNOd9cvQKBvMxRX9K0JPVi8w0Y=" + }, + { + "pname": "System.Diagnostics.Tracing", + "version": "4.3.0", + "hash": "sha256-hCETZpHHGVhPYvb4C0fh4zs+8zv4GPoixagkLZjpa9Q=" + }, + { + "pname": "System.Drawing.Common", + "version": "9.0.2", + "hash": "sha256-S7IMV4R/nWbZs/YCwI9UwwLHDP57NkfSEIaoYNbRq54=" + }, + { + "pname": "System.Formats.Asn1", + "version": "8.0.1", + "hash": "sha256-may/Wg+esmm1N14kQTG4ESMBi+GQKPp0ZrrBo/o6OXM=" + }, + { + "pname": "System.Globalization", + "version": "4.3.0", + "hash": "sha256-caL0pRmFSEsaoeZeWN5BTQtGrAtaQPwFi8YOZPZG5rI=" + }, + { + "pname": "System.Globalization.Calendars", + "version": "4.3.0", + "hash": "sha256-uNOD0EOVFgnS2fMKvMiEtI9aOw00+Pfy/H+qucAQlPc=" + }, + { + "pname": "System.Globalization.Extensions", + "version": "4.3.0", + "hash": "sha256-mmJWA27T0GRVuFP9/sj+4TrR4GJWrzNIk2PDrbr7RQk=" + }, + { + "pname": "System.IdentityModel.Tokens.Jwt", + "version": "8.6.0", + "hash": "sha256-9usJvCIfrtI6T94wSXKGoL3UjZlE+F4LE4Y5zsD3LxI=" + }, + { + "pname": "System.IO", + "version": "4.3.0", + "hash": "sha256-ruynQHekFP5wPrDiVyhNiRIXeZ/I9NpjK5pU+HPDiRY=" + }, + { + "pname": "System.IO.Abstractions", + "version": "22.0.11", + "hash": "sha256-jFfPplSHoc8HfmLDexMustNaljMFiXK/CdH35vzju+4=" + }, + { + "pname": "System.IO.Compression", + "version": "4.3.0", + "hash": "sha256-f5PrQlQgj5Xj2ZnHxXW8XiOivaBvfqDao9Sb6AVinyA=" + }, + { + "pname": "System.IO.Compression.ZipFile", + "version": "4.3.0", + "hash": "sha256-WQl+JgWs+GaRMeiahTFUbrhlXIHapzcpTFXbRvAtvvs=" + }, + { + "pname": "System.IO.FileSystem", + "version": "4.3.0", + "hash": "sha256-vNIYnvlayuVj0WfRfYKpDrhDptlhp1pN8CYmlVd2TXw=" + }, + { + "pname": "System.IO.FileSystem.Primitives", + "version": "4.3.0", + "hash": "sha256-LMnfg8Vwavs9cMnq9nNH8IWtAtSfk0/Fy4s4Rt9r1kg=" + }, + { + "pname": "System.IO.Pipelines", + "version": "7.0.0", + "hash": "sha256-W2181khfJUTxLqhuAVRhCa52xZ3+ePGOLIPwEN8WisY=" + }, + { + "pname": "System.IO.Pipelines", + "version": "8.0.0", + "hash": "sha256-LdpB1s4vQzsOODaxiKstLks57X9DTD5D6cPx8DE1wwE=" + }, + { + "pname": "System.Linq", + "version": "4.3.0", + "hash": "sha256-R5uiSL3l6a3XrXSSL6jz+q/PcyVQzEAByiuXZNSqD/A=" + }, + { + "pname": "System.Linq.Expressions", + "version": "4.3.0", + "hash": "sha256-+3pvhZY7rip8HCbfdULzjlC9FPZFpYoQxhkcuFm2wk8=" + }, + { + "pname": "System.Memory", + "version": "4.5.3", + "hash": "sha256-Cvl7RbRbRu9qKzeRBWjavUkseT2jhZBUWV1SPipUWFk=" + }, + { + "pname": "System.Net.Http", + "version": "4.3.0", + "hash": "sha256-UoBB7WPDp2Bne/fwxKF0nE8grJ6FzTMXdT/jfsphj8Q=" + }, + { + "pname": "System.Net.NameResolution", + "version": "4.3.0", + "hash": "sha256-eGZwCBExWsnirWBHyp2sSSSXp6g7I6v53qNmwPgtJ5c=" + }, + { + "pname": "System.Net.Primitives", + "version": "4.3.0", + "hash": "sha256-MY7Z6vOtFMbEKaLW9nOSZeAjcWpwCtdO7/W1mkGZBzE=" + }, + { + "pname": "System.Net.Sockets", + "version": "4.3.0", + "hash": "sha256-il7dr5VT/QWDg/0cuh+4Es2u8LY//+qqiY9BZmYxSus=" + }, + { + "pname": "System.Net.WebSockets.WebSocketProtocol", + "version": "5.1.0", + "hash": "sha256-TCcPu94+/BpZ94sTdBA20RgD+qJvMsaTOqYKN+HxZBc=" + }, + { + "pname": "System.ObjectModel", + "version": "4.3.0", + "hash": "sha256-gtmRkWP2Kwr3nHtDh0yYtce38z1wrGzb6fjm4v8wN6Q=" + }, + { + "pname": "System.Private.Uri", + "version": "4.3.0", + "hash": "sha256-fVfgcoP4AVN1E5wHZbKBIOPYZ/xBeSIdsNF+bdukIRM=" + }, + { + "pname": "System.Reflection", + "version": "4.3.0", + "hash": "sha256-NQSZRpZLvtPWDlvmMIdGxcVuyUnw92ZURo0hXsEshXY=" + }, + { + "pname": "System.Reflection.Emit", + "version": "4.3.0", + "hash": "sha256-5LhkDmhy2FkSxulXR+bsTtMzdU3VyyuZzsxp7/DwyIU=" + }, + { + "pname": "System.Reflection.Emit", + "version": "4.7.0", + "hash": "sha256-Fw/CSRD+wajH1MqfKS3Q/sIrUH7GN4K+F+Dx68UPNIg=" + }, + { + "pname": "System.Reflection.Emit.ILGeneration", + "version": "4.3.0", + "hash": "sha256-mKRknEHNls4gkRwrEgi39B+vSaAz/Gt3IALtS98xNnA=" + }, + { + "pname": "System.Reflection.Emit.Lightweight", + "version": "4.3.0", + "hash": "sha256-rKx4a9yZKcajloSZHr4CKTVJ6Vjh95ni+zszPxWjh2I=" + }, + { + "pname": "System.Reflection.Extensions", + "version": "4.3.0", + "hash": "sha256-mMOCYzUenjd4rWIfq7zIX9PFYk/daUyF0A8l1hbydAk=" + }, + { + "pname": "System.Reflection.Metadata", + "version": "7.0.0", + "hash": "sha256-GwAKQhkhPBYTqmRdG9c9taqrKSKDwyUgOEhWLKxWNPI=" + }, + { + "pname": "System.Reflection.Primitives", + "version": "4.3.0", + "hash": "sha256-5ogwWB4vlQTl3jjk1xjniG2ozbFIjZTL9ug0usZQuBM=" + }, + { + "pname": "System.Reflection.TypeExtensions", + "version": "4.3.0", + "hash": "sha256-4U4/XNQAnddgQIHIJq3P2T80hN0oPdU2uCeghsDTWng=" + }, + { + "pname": "System.Resources.ResourceManager", + "version": "4.3.0", + "hash": "sha256-idiOD93xbbrbwwSnD4mORA9RYi/D/U48eRUsn/WnWGo=" + }, + { + "pname": "System.Runtime", + "version": "4.3.0", + "hash": "sha256-51813WXpBIsuA6fUtE5XaRQjcWdQ2/lmEokJt97u0Rg=" + }, + { + "pname": "System.Runtime.CompilerServices.Unsafe", + "version": "6.0.0", + "hash": "sha256-bEG1PnDp7uKYz/OgLOWs3RWwQSVYm+AnPwVmAmcgp2I=" + }, + { + "pname": "System.Runtime.Extensions", + "version": "4.3.0", + "hash": "sha256-wLDHmozr84v1W2zYCWYxxj0FR0JDYHSVRaRuDm0bd/o=" + }, + { + "pname": "System.Runtime.Handles", + "version": "4.3.0", + "hash": "sha256-KJ5aXoGpB56Y6+iepBkdpx/AfaJDAitx4vrkLqR7gms=" + }, + { + "pname": "System.Runtime.InteropServices", + "version": "4.3.0", + "hash": "sha256-8sDH+WUJfCR+7e4nfpftj/+lstEiZixWUBueR2zmHgI=" + }, + { + "pname": "System.Runtime.InteropServices.RuntimeInformation", + "version": "4.3.0", + "hash": "sha256-MYpl6/ZyC6hjmzWRIe+iDoldOMW1mfbwXsduAnXIKGA=" + }, + { + "pname": "System.Runtime.Numerics", + "version": "4.3.0", + "hash": "sha256-P5jHCgMbgFMYiONvzmaKFeOqcAIDPu/U8bOVrNPYKqc=" + }, + { + "pname": "System.Security.Claims", + "version": "4.3.0", + "hash": "sha256-Fua/rDwAqq4UByRVomAxMPmDBGd5eImRqHVQIeSxbks=" + }, + { + "pname": "System.Security.Cryptography.Algorithms", + "version": "4.3.0", + "hash": "sha256-tAJvNSlczYBJ3Ed24Ae27a55tq/n4D3fubNQdwcKWA8=" + }, + { + "pname": "System.Security.Cryptography.Cng", + "version": "4.3.0", + "hash": "sha256-u17vy6wNhqok91SrVLno2M1EzLHZm6VMca85xbVChsw=" + }, + { + "pname": "System.Security.Cryptography.Csp", + "version": "4.3.0", + "hash": "sha256-oefdTU/Z2PWU9nlat8uiRDGq/PGZoSPRgkML11pmvPQ=" + }, + { + "pname": "System.Security.Cryptography.Encoding", + "version": "4.3.0", + "hash": "sha256-Yuge89N6M+NcblcvXMeyHZ6kZDfwBv3LPMDiF8HhJss=" + }, + { + "pname": "System.Security.Cryptography.OpenSsl", + "version": "4.3.0", + "hash": "sha256-DL+D2sc2JrQiB4oAcUggTFyD8w3aLEjJfod5JPe+Oz4=" + }, + { + "pname": "System.Security.Cryptography.Pkcs", + "version": "8.0.1", + "hash": "sha256-KMNIkJ3yQ/5O6WIhPjyAIarsvIMhkp26A6aby5KkneU=" + }, + { + "pname": "System.Security.Cryptography.Primitives", + "version": "4.3.0", + "hash": "sha256-fnFi7B3SnVj5a+BbgXnbjnGNvWrCEU6Hp/wjsjWz318=" + }, + { + "pname": "System.Security.Cryptography.X509Certificates", + "version": "4.3.0", + "hash": "sha256-MG3V/owDh273GCUPsGGraNwaVpcydupl3EtPXj6TVG0=" + }, + { + "pname": "System.Security.Principal", + "version": "4.3.0", + "hash": "sha256-rjudVUHdo8pNJg2EVEn0XxxwNo5h2EaYo+QboPkXlYk=" + }, + { + "pname": "System.Security.Principal.Windows", + "version": "4.3.0", + "hash": "sha256-mbdLVUcEwe78p3ZnB6jYsizNEqxMaCAWI3tEQNhRQAE=" + }, + { + "pname": "System.Text.Encoding", + "version": "4.3.0", + "hash": "sha256-GctHVGLZAa/rqkBNhsBGnsiWdKyv6VDubYpGkuOkBLg=" + }, + { + "pname": "System.Text.Encoding.Extensions", + "version": "4.3.0", + "hash": "sha256-vufHXg8QAKxHlujPHHcrtGwAqFmsCD6HKjfDAiHyAYc=" + }, + { + "pname": "System.Text.Encodings.Web", + "version": "8.0.0", + "hash": "sha256-IUQkQkV9po1LC0QsqrilqwNzPvnc+4eVvq+hCvq8fvE=" + }, + { + "pname": "System.Text.Json", + "version": "7.0.3", + "hash": "sha256-aSJZ17MjqaZNQkprfxm/09LaCoFtpdWmqU9BTROzWX4=" + }, + { + "pname": "System.Text.Json", + "version": "9.0.2", + "hash": "sha256-kftKUuGgZtF4APmp77U79ws76mEIi+R9+DSVGikA5y8=" + }, + { + "pname": "System.Text.RegularExpressions", + "version": "4.3.0", + "hash": "sha256-VLCk1D1kcN2wbAe3d0YQM/PqCsPHOuqlBY1yd2Yo+K0=" + }, + { + "pname": "System.Threading", + "version": "4.3.0", + "hash": "sha256-ZDQ3dR4pzVwmaqBg4hacZaVenQ/3yAF/uV7BXZXjiWc=" + }, + { + "pname": "System.Threading.Channels", + "version": "7.0.0", + "hash": "sha256-Cu0gjQsLIR8Yvh0B4cOPJSYVq10a+3F9pVz/C43CNeM=" + }, + { + "pname": "System.Threading.Channels", + "version": "8.0.0", + "hash": "sha256-c5TYoLNXDLroLIPnlfyMHk7nZ70QAckc/c7V199YChg=" + }, + { + "pname": "System.Threading.Tasks", + "version": "4.3.0", + "hash": "sha256-Z5rXfJ1EXp3G32IKZGiZ6koMjRu0n8C1NGrwpdIen4w=" + }, + { + "pname": "System.Threading.Tasks.Extensions", + "version": "4.3.0", + "hash": "sha256-X2hQ5j+fxcmnm88Le/kSavjiGOmkcumBGTZKBLvorPc=" + }, + { + "pname": "System.Threading.ThreadPool", + "version": "4.3.0", + "hash": "sha256-wW0QdvssRoaOfQLazTGSnwYTurE4R8FxDx70pYkL+gg=" + }, + { + "pname": "System.Threading.Timer", + "version": "4.3.0", + "hash": "sha256-pmhslmhQhP32TWbBzoITLZ4BoORBqYk25OWbru04p9s=" + }, + { + "pname": "System.Xml.ReaderWriter", + "version": "4.3.0", + "hash": "sha256-QQ8KgU0lu4F5Unh+TbechO//zaAGZ4MfgvW72Cn1hzA=" + }, + { + "pname": "System.Xml.XDocument", + "version": "4.3.0", + "hash": "sha256-rWtdcmcuElNOSzCehflyKwHkDRpiOhJJs8CeQ0l1CCI=" + }, + { + "pname": "TestableIO.System.IO.Abstractions", + "version": "22.0.11", + "hash": "sha256-zW1WYq/rHJF9DFzbSrVSejepEE32jtO6E0M6xSW3ZTI=" + }, + { + "pname": "TestableIO.System.IO.Abstractions.Wrappers", + "version": "22.0.11", + "hash": "sha256-iy8sWpCe2+mG6zICnUT1qMEIz97DPcA6/P6KNonm9aM=" + }, + { + "pname": "Testably.Abstractions.FileSystem.Interface", + "version": "9.0.0", + "hash": "sha256-6JW+qDtqQT9StP4oTR7uO0NnmVc2xcjSZ6ds2H71wtg=" + }, + { + "pname": "VersOne.Epub", + "version": "3.3.2", + "hash": "sha256-jzkD4HDgFMevH8FRYml7UHEwMt7BWG+VpinIPlioIUo=" + }, + { + "pname": "xunit.assert", + "version": "2.9.3", + "hash": "sha256-vHYOde8bd10pOmr7iTAYNtPlqHzsJl4x3t1DDuYdDCA=" + }, + { + "pname": "YamlDotNet", + "version": "16.3.0", + "hash": "sha256-4Gi8wSQ8Rsi/3+LyegJr//A83nxn2fN8LN1wvSSp39Q=" + }, + { + "pname": "ZstdSharp.Port", + "version": "0.8.4", + "hash": "sha256-4bFUNK++6yUOnY7bZQiibClSJUQjH0uIiUbQLBtPWbo=" + } +] diff --git a/pkgs/kavita-old/restore-migrations.diff b/pkgs/kavita-old/restore-migrations.diff new file mode 100644 index 0000000..d158f50 --- /dev/null +++ b/pkgs/kavita-old/restore-migrations.diff @@ -0,0 +1,147 @@ +diff --git a/API/Data/ManualMigrations/MigrateDisableScrobblingOnComicLibraries.cs b/API/Data/ManualMigrations/MigrateDisableScrobblingOnComicLibraries.cs +new file mode 100644 +index 00000000..0de7bf5d +--- /dev/null ++++ b/API/Data/ManualMigrations/MigrateDisableScrobblingOnComicLibraries.cs +@@ -0,0 +1,38 @@ ++using System.Linq; ++using System.Threading.Tasks; ++using API.Entities.Enums; ++using Microsoft.EntityFrameworkCore; ++using Microsoft.Extensions.Logging; ++ ++namespace API.Data.ManualMigrations; ++ ++/// ++/// v0.7.4 introduced Scrobbling with Kavita+. By default, it is on, but Comic libraries have no scrobble providers, so disable ++/// ++public static class MigrateDisableScrobblingOnComicLibraries ++{ ++ public static async Task Migrate(IUnitOfWork unitOfWork, DataContext dataContext, ILogger logger) ++ { ++ if (!await dataContext.Library.Where(s => s.Type == LibraryType.Comic).Where(l => l.AllowScrobbling).AnyAsync()) ++ { ++ return; ++ } ++ logger.LogInformation("Running MigrateDisableScrobblingOnComicLibraries migration. Please be patient, this may take some time"); ++ ++ ++ foreach (var lib in await dataContext.Library.Where(s => s.Type == LibraryType.Comic).Where(l => l.AllowScrobbling).ToListAsync()) ++ { ++ lib.AllowScrobbling = false; ++ unitOfWork.LibraryRepository.Update(lib); ++ } ++ ++ if (unitOfWork.HasChanges()) ++ { ++ await unitOfWork.CommitAsync(); ++ } ++ ++ logger.LogInformation("MigrateDisableScrobblingOnComicLibraries migration finished"); ++ ++ } ++ ++} +diff --git a/API/Data/ManualMigrations/MigrateLoginRoles.cs b/API/Data/ManualMigrations/MigrateLoginRoles.cs +new file mode 100644 +index 00000000..f649908a +--- /dev/null ++++ b/API/Data/ManualMigrations/MigrateLoginRoles.cs +@@ -0,0 +1,36 @@ ++using System.Threading.Tasks; ++using API.Constants; ++using API.Entities; ++using Microsoft.AspNetCore.Identity; ++using Microsoft.Extensions.Logging; ++ ++namespace API.Data.ManualMigrations; ++ ++/// ++/// Added in v0.7.1.18 ++/// ++public static class MigrateLoginRoles ++{ ++ /// ++ /// Will not run if any users have the role already ++ /// ++ /// ++ /// ++ /// ++ public static async Task Migrate(IUnitOfWork unitOfWork, UserManager userManager, ILogger logger) ++ { ++ var usersWithRole = await userManager.GetUsersInRoleAsync(PolicyConstants.LoginRole); ++ if (usersWithRole.Count != 0) return; ++ ++ logger.LogCritical("Running MigrateLoginRoles migration"); ++ ++ var allUsers = await unitOfWork.UserRepository.GetAllUsersAsync(); ++ foreach (var user in allUsers) ++ { ++ await userManager.RemoveFromRoleAsync(user, PolicyConstants.LoginRole); ++ await userManager.AddToRoleAsync(user, PolicyConstants.LoginRole); ++ } ++ ++ logger.LogInformation("MigrateLoginRoles migration complete"); ++ } ++} +diff --git a/API/Data/ManualMigrations/MigrateRemoveWebPSettingRows.cs b/API/Data/ManualMigrations/MigrateRemoveWebPSettingRows.cs +new file mode 100644 +index 00000000..07e98ef6 +--- /dev/null ++++ b/API/Data/ManualMigrations/MigrateRemoveWebPSettingRows.cs +@@ -0,0 +1,31 @@ ++using System.Threading.Tasks; ++using API.Entities.Enums; ++using Microsoft.Extensions.Logging; ++ ++namespace API.Data.ManualMigrations; ++ ++/// ++/// Added in v0.7.2.7/v0.7.3 in which the ConvertXToWebP Setting keys were removed. This migration will remove them. ++/// ++public static class MigrateRemoveWebPSettingRows ++{ ++ public static async Task Migrate(IUnitOfWork unitOfWork, ILogger logger) ++ { ++ logger.LogCritical("Running MigrateRemoveWebPSettingRows migration - Please be patient, this may take some time. This is not an error"); ++ ++ var key = await unitOfWork.SettingsRepository.GetSettingAsync(ServerSettingKey.ConvertBookmarkToWebP); ++ var key2 = await unitOfWork.SettingsRepository.GetSettingAsync(ServerSettingKey.ConvertCoverToWebP); ++ if (key == null && key2 == null) ++ { ++ logger.LogCritical("Running MigrateRemoveWebPSettingRows migration - complete. Nothing to do"); ++ return; ++ } ++ ++ unitOfWork.SettingsRepository.Remove(key); ++ unitOfWork.SettingsRepository.Remove(key2); ++ ++ await unitOfWork.CommitAsync(); ++ ++ logger.LogCritical("Running MigrateRemoveWebPSettingRows migration - Completed. This is not an error"); ++ } ++} +diff --git a/API/Startup.cs b/API/Startup.cs +index 21c4fa45..04f4a077 100644 +--- a/API/Startup.cs ++++ b/API/Startup.cs +@@ -232,11 +232,19 @@ public class Startup + Task.Run(async () => + { + // Apply all migrations on startup ++ var userManager = serviceProvider.GetRequiredService>(); + var dataContext = serviceProvider.GetRequiredService(); + + + logger.LogInformation("Running Migrations"); + ++ // v0.7.2 ++ await MigrateLoginRoles.Migrate(unitOfWork, userManager, logger); ++ // v0.7.3 ++ await MigrateRemoveWebPSettingRows.Migrate(unitOfWork, logger); ++ // v0.7.4 ++ await MigrateDisableScrobblingOnComicLibraries.Migrate(unitOfWork, dataContext, logger); ++ + // v0.7.9 + await MigrateUserLibrarySideNavStream.Migrate(unitOfWork, dataContext, logger); + diff --git a/pkgs/kavita-old/update.sh b/pkgs/kavita-old/update.sh new file mode 100755 index 0000000..c2d793d --- /dev/null +++ b/pkgs/kavita-old/update.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env nix-shell +#! nix-shell -i bash -p common-updater-scripts curl jq nix-prefetch-github prefetch-npm-deps + +set -euo pipefail + +latest_version=$(curl -s https://api.github.com/repos/Kareadita/Kavita/releases/latest | jq -r '.tag_name' | tr -d v) + +pushd "$(mktemp -d)" +curl -s https://raw.githubusercontent.com/Kareadita/Kavita/v${latest_version}/UI/Web/package-lock.json -o package-lock.json +npmDepsHash=$(prefetch-npm-deps package-lock.json) +rm -f package-lock.json +popd + +update-source-version kavita "$latest_version" + +pushd "$(dirname "${BASH_SOURCE[0]}")" +sed -E 's#\bnpmDepsHash = ".*?"#npmDepsHash = "'"$npmDepsHash"'"#' -i default.nix +popd + +$(nix-build -A kavita.backend.fetch-deps --no-out-link)