From 88498f8cc3ac1245c9c68fcbb308206f157c837d Mon Sep 17 00:00:00 2001 From: Jaifroid Date: Mon, 29 Jun 2020 22:01:18 +0100 Subject: [PATCH] App packages for Kiwix JS Windows 0.9.9.991 beta Former-commit-id: 660698f9052e5dbb393672b971512572e73b655d [formerly dbe912c27a75318af1e5a5d6979f0c0960e7794b] Former-commit-id: 21a722d628ec13cefbb6b3c52b20b6b23b36505e --- ....0_AnyCPU_bundle.appxupload.REMOVED.git-id | 1 + .../Add-AppDevPackage.ps1 | 771 ++++++++++++++++++ .../Add-AppDevPackage.psd1 | Bin 0 -> 10150 bytes .../cs-CZ/Add-AppDevPackage.psd1 | Bin 0 -> 10278 bytes .../de-DE/Add-AppDevPackage.psd1 | Bin 0 -> 11628 bytes .../en-US/Add-AppDevPackage.psd1 | Bin 0 -> 10150 bytes .../es-ES/Add-AppDevPackage.psd1 | Bin 0 -> 10834 bytes .../fr-FR/Add-AppDevPackage.psd1 | Bin 0 -> 11344 bytes .../it-IT/Add-AppDevPackage.psd1 | Bin 0 -> 10738 bytes .../ja-JP/Add-AppDevPackage.psd1 | Bin 0 -> 6698 bytes .../ko-KR/Add-AppDevPackage.psd1 | Bin 0 -> 6348 bytes .../pl-PL/Add-AppDevPackage.psd1 | Bin 0 -> 10106 bytes .../pt-BR/Add-AppDevPackage.psd1 | Bin 0 -> 10580 bytes .../ru-RU/Add-AppDevPackage.psd1 | Bin 0 -> 10342 bytes .../tr-TR/Add-AppDevPackage.psd1 | Bin 0 -> 9608 bytes .../zh-CN/Add-AppDevPackage.psd1 | Bin 0 -> 4998 bytes .../zh-TW/Add-AppDevPackage.psd1 | Bin 0 -> 5180 bytes ....9.9991.0_AnyCPU.appxbundle.REMOVED.git-id | 1 + .../KiwixWebApp_0.9.9991.0_AnyCPU.cer | Bin 0 -> 1309 bytes package.appxmanifest | 2 +- 20 files changed, 774 insertions(+), 1 deletion(-) create mode 100644 AppPackages/KiwixWebApp_0.9.9991.0_AnyCPU_bundle.appxupload.REMOVED.git-id create mode 100644 AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.ps1 create mode 100644 AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/Add-AppDevPackage.psd1 create mode 100644 AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/cs-CZ/Add-AppDevPackage.psd1 create mode 100644 AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/de-DE/Add-AppDevPackage.psd1 create mode 100644 AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/en-US/Add-AppDevPackage.psd1 create mode 100644 AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/es-ES/Add-AppDevPackage.psd1 create mode 100644 AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/fr-FR/Add-AppDevPackage.psd1 create mode 100644 AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/it-IT/Add-AppDevPackage.psd1 create mode 100644 AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/ja-JP/Add-AppDevPackage.psd1 create mode 100644 AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/ko-KR/Add-AppDevPackage.psd1 create mode 100644 AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/pl-PL/Add-AppDevPackage.psd1 create mode 100644 AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/pt-BR/Add-AppDevPackage.psd1 create mode 100644 AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/ru-RU/Add-AppDevPackage.psd1 create mode 100644 AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/tr-TR/Add-AppDevPackage.psd1 create mode 100644 AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/zh-CN/Add-AppDevPackage.psd1 create mode 100644 AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/zh-TW/Add-AppDevPackage.psd1 create mode 100644 AppPackages/KiwixWebApp_0.9.9991.0_Test/KiwixWebApp_0.9.9991.0_AnyCPU.appxbundle.REMOVED.git-id create mode 100644 AppPackages/KiwixWebApp_0.9.9991.0_Test/KiwixWebApp_0.9.9991.0_AnyCPU.cer diff --git a/AppPackages/KiwixWebApp_0.9.9991.0_AnyCPU_bundle.appxupload.REMOVED.git-id b/AppPackages/KiwixWebApp_0.9.9991.0_AnyCPU_bundle.appxupload.REMOVED.git-id new file mode 100644 index 00000000..1598b556 --- /dev/null +++ b/AppPackages/KiwixWebApp_0.9.9991.0_AnyCPU_bundle.appxupload.REMOVED.git-id @@ -0,0 +1 @@ +292cc2633e005d44d9a6aca7913ceffe6d6ec499 \ No newline at end of file diff --git a/AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.ps1 b/AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.ps1 new file mode 100644 index 00000000..7ad52540 --- /dev/null +++ b/AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.ps1 @@ -0,0 +1,771 @@ +# +# Add-AppxDevPackage.ps1 is a PowerShell script designed to install app +# packages created by Visual Studio for developers. To run this script from +# Explorer, right-click on its icon and choose "Run with PowerShell". +# +# Visual Studio supplies this script in the folder generated with its +# "Prepare Package" command. The same folder will also contain the app +# package (a .appx file), the signing certificate (a .cer file), and a +# "Dependencies" subfolder containing all the framework packages used by the +# app. +# +# This script simplifies installing these packages by automating the +# following functions: +# 1. Find the app package and signing certificate in the script directory +# 2. Prompt the user to acquire a developer license and to install the +# certificate if necessary +# 3. Find dependency packages that are applicable to the operating system's +# CPU architecture +# 4. Install the package along with all applicable dependencies +# +# All command line parameters are reserved for use internally by the script. +# Users should launch this script from Explorer. +# + +# .Link +# http://go.microsoft.com/fwlink/?LinkId=243053 + +param( + [switch]$Force = $false, + [switch]$GetDeveloperLicense = $false, + [string]$CertificatePath = $null +) + +$ErrorActionPreference = "Stop" + +# The language resources for this script are placed in the +# "Add-AppDevPackage.resources" subfolder alongside the script. Since the +# current working directory might not be the directory that contains the +# script, we need to create the full path of the resources directory to +# pass into Import-LocalizedData +$ScriptPath = $null +try +{ + $ScriptPath = (Get-Variable MyInvocation).Value.MyCommand.Path + $ScriptDir = Split-Path -Parent $ScriptPath +} +catch {} + +if (!$ScriptPath) +{ + PrintMessageAndExit $UiStrings.ErrorNoScriptPath $ErrorCodes.NoScriptPath +} + +$LocalizedResourcePath = Join-Path $ScriptDir "Add-AppDevPackage.resources" +Import-LocalizedData -BindingVariable UiStrings -BaseDirectory $LocalizedResourcePath + +$ErrorCodes = Data { + ConvertFrom-StringData @' + Success = 0 + NoScriptPath = 1 + NoPackageFound = 2 + ManyPackagesFound = 3 + NoCertificateFound = 4 + ManyCertificatesFound = 5 + BadCertificate = 6 + PackageUnsigned = 7 + CertificateMismatch = 8 + ForceElevate = 9 + LaunchAdminFailed = 10 + GetDeveloperLicenseFailed = 11 + InstallCertificateFailed = 12 + AddPackageFailed = 13 + ForceDeveloperLicense = 14 + CertUtilInstallFailed = 17 + CertIsCA = 18 + BannedEKU = 19 + NoBasicConstraints = 20 + NoCodeSigningEku = 21 + InstallCertificateCancelled = 22 + BannedKeyUsage = 23 + ExpiredCertificate = 24 +'@ +} + +function PrintMessageAndExit($ErrorMessage, $ReturnCode) +{ + Write-Host $ErrorMessage + if (!$Force) + { + Pause + } + exit $ReturnCode +} + +# +# Warns the user about installing certificates, and presents a Yes/No prompt +# to confirm the action. The default is set to No. +# +function ConfirmCertificateInstall +{ + $Answer = $host.UI.PromptForChoice( + "", + $UiStrings.WarningInstallCert, + [System.Management.Automation.Host.ChoiceDescription[]]@($UiStrings.PromptYesString, $UiStrings.PromptNoString), + 1) + + return $Answer -eq 0 +} + +# +# Validates whether a file is a valid certificate using CertUtil. +# This needs to be done before calling Get-PfxCertificate on the file, otherwise +# the user will get a cryptic "Password: " prompt for invalid certs. +# +function ValidateCertificateFormat($FilePath) +{ + # certutil -verify prints a lot of text that we don't need, so it's redirected to $null here + certutil.exe -verify $FilePath > $null + if ($LastExitCode -lt 0) + { + PrintMessageAndExit ($UiStrings.ErrorBadCertificate -f $FilePath, $LastExitCode) $ErrorCodes.BadCertificate + } + + # Check if certificate is expired + $cert = Get-PfxCertificate $FilePath + if (($cert.NotBefore -gt (Get-Date)) -or ($cert.NotAfter -lt (Get-Date))) + { + PrintMessageAndExit ($UiStrings.ErrorExpiredCertificate -f $FilePath) $ErrorCodes.ExpiredCertificate + } +} + +# +# Verify that the developer certificate meets the following restrictions: +# - The certificate must contain a Basic Constraints extension, and its +# Certificate Authority (CA) property must be false. +# - The certificate's Key Usage extension must be either absent, or set to +# only DigitalSignature. +# - The certificate must contain an Extended Key Usage (EKU) extension with +# Code Signing usage. +# - The certificate must NOT contain any other EKU except Code Signing and +# Lifetime Signing. +# +# These restrictions are enforced to decrease security risks that arise from +# trusting digital certificates. +# +function CheckCertificateRestrictions +{ + Set-Variable -Name BasicConstraintsExtensionOid -Value "2.5.29.19" -Option Constant + Set-Variable -Name KeyUsageExtensionOid -Value "2.5.29.15" -Option Constant + Set-Variable -Name EkuExtensionOid -Value "2.5.29.37" -Option Constant + Set-Variable -Name CodeSigningEkuOid -Value "1.3.6.1.5.5.7.3.3" -Option Constant + Set-Variable -Name LifetimeSigningEkuOid -Value "1.3.6.1.4.1.311.10.3.13" -Option Constant + + $CertificateExtensions = (Get-PfxCertificate $CertificatePath).Extensions + $HasBasicConstraints = $false + $HasCodeSigningEku = $false + + foreach ($Extension in $CertificateExtensions) + { + # Certificate must contain the Basic Constraints extension + if ($Extension.oid.value -eq $BasicConstraintsExtensionOid) + { + # CA property must be false + if ($Extension.CertificateAuthority) + { + PrintMessageAndExit $UiStrings.ErrorCertIsCA $ErrorCodes.CertIsCA + } + $HasBasicConstraints = $true + } + + # If key usage is present, it must be set to digital signature + elseif ($Extension.oid.value -eq $KeyUsageExtensionOid) + { + if ($Extension.KeyUsages -ne "DigitalSignature") + { + PrintMessageAndExit ($UiStrings.ErrorBannedKeyUsage -f $Extension.KeyUsages) $ErrorCodes.BannedKeyUsage + } + } + + elseif ($Extension.oid.value -eq $EkuExtensionOid) + { + # Certificate must contain the Code Signing EKU + $EKUs = $Extension.EnhancedKeyUsages.Value + if ($EKUs -contains $CodeSigningEkuOid) + { + $HasCodeSigningEKU = $True + } + + # EKUs other than code signing and lifetime signing are not allowed + foreach ($EKU in $EKUs) + { + if ($EKU -ne $CodeSigningEkuOid -and $EKU -ne $LifetimeSigningEkuOid) + { + PrintMessageAndExit ($UiStrings.ErrorBannedEKU -f $EKU) $ErrorCodes.BannedEKU + } + } + } + } + + if (!$HasBasicConstraints) + { + PrintMessageAndExit $UiStrings.ErrorNoBasicConstraints $ErrorCodes.NoBasicConstraints + } + if (!$HasCodeSigningEKU) + { + PrintMessageAndExit $UiStrings.ErrorNoCodeSigningEku $ErrorCodes.NoCodeSigningEku + } +} + +# +# Performs operations that require administrative privileges: +# - Prompt the user to obtain a developer license +# - Install the developer certificate (if -Force is not specified, also prompts the user to confirm) +# +function DoElevatedOperations +{ + if ($GetDeveloperLicense) + { + Write-Host $UiStrings.GettingDeveloperLicense + + if ($Force) + { + PrintMessageAndExit $UiStrings.ErrorForceDeveloperLicense $ErrorCodes.ForceDeveloperLicense + } + try + { + Show-WindowsDeveloperLicenseRegistration + } + catch + { + $Error[0] # Dump details about the last error + PrintMessageAndExit $UiStrings.ErrorGetDeveloperLicenseFailed $ErrorCodes.GetDeveloperLicenseFailed + } + } + + if ($CertificatePath) + { + Write-Host $UiStrings.InstallingCertificate + + # Make sure certificate format is valid and usage constraints are followed + ValidateCertificateFormat $CertificatePath + CheckCertificateRestrictions + + # If -Force is not specified, warn the user and get consent + if ($Force -or (ConfirmCertificateInstall)) + { + # Add cert to store + certutil.exe -addstore TrustedPeople $CertificatePath + if ($LastExitCode -lt 0) + { + PrintMessageAndExit ($UiStrings.ErrorCertUtilInstallFailed -f $LastExitCode) $ErrorCodes.CertUtilInstallFailed + } + } + else + { + PrintMessageAndExit $UiStrings.ErrorInstallCertificateCancelled $ErrorCodes.InstallCertificateCancelled + } + } +} + +# +# Checks whether the machine is missing a valid developer license. +# +function CheckIfNeedDeveloperLicense +{ + $Result = $true + try + { + $Result = (Get-WindowsDeveloperLicense | Where-Object { $_.IsValid } | Measure-Object).Count -eq 0 + } + catch {} + + return $Result +} + +# +# Launches an elevated process running the current script to perform tasks +# that require administrative privileges. This function waits until the +# elevated process terminates, and checks whether those tasks were successful. +# +function LaunchElevated +{ + # Set up command line arguments to the elevated process + $RelaunchArgs = '-ExecutionPolicy Unrestricted -file "' + $ScriptPath + '"' + + if ($Force) + { + $RelaunchArgs += ' -Force' + } + if ($NeedDeveloperLicense) + { + $RelaunchArgs += ' -GetDeveloperLicense' + } + if ($NeedInstallCertificate) + { + $RelaunchArgs += ' -CertificatePath "' + $DeveloperCertificatePath.FullName + '"' + } + + # Launch the process and wait for it to finish + try + { + $AdminProcess = Start-Process "$PsHome\PowerShell.exe" -Verb RunAs -ArgumentList $RelaunchArgs -PassThru + } + catch + { + $Error[0] # Dump details about the last error + PrintMessageAndExit $UiStrings.ErrorLaunchAdminFailed $ErrorCodes.LaunchAdminFailed + } + + while (!($AdminProcess.HasExited)) + { + Start-Sleep -Seconds 2 + } + + # Check if all elevated operations were successful + if ($NeedDeveloperLicense) + { + if (CheckIfNeedDeveloperLicense) + { + PrintMessageAndExit $UiStrings.ErrorGetDeveloperLicenseFailed $ErrorCodes.GetDeveloperLicenseFailed + } + else + { + Write-Host $UiStrings.AcquireLicenseSuccessful + } + } + if ($NeedInstallCertificate) + { + $Signature = Get-AuthenticodeSignature $DeveloperPackagePath -Verbose + if ($Signature.Status -ne "Valid") + { + PrintMessageAndExit ($UiStrings.ErrorInstallCertificateFailed -f $Signature.Status) $ErrorCodes.InstallCertificateFailed + } + else + { + Write-Host $UiStrings.InstallCertificateSuccessful + } + } +} + +# +# Finds all applicable dependency packages according to OS architecture, and +# installs the developer package with its dependencies. The expected layout +# of dependencies is: +# +# +# \Dependencies +# .appx\.msix +# \x86 +# .appx\.msix +# \x64 +# .appx\.msix +# \arm +# .appx\.msix +# +function InstallPackageWithDependencies +{ + $DependencyPackagesDir = (Join-Path $ScriptDir "Dependencies") + $DependencyPackages = @() + if (Test-Path $DependencyPackagesDir) + { + # Get architecture-neutral dependencies + $DependencyPackages += Get-ChildItem (Join-Path $DependencyPackagesDir "*.appx") | Where-Object { $_.Mode -NotMatch "d" } + $DependencyPackages += Get-ChildItem (Join-Path $DependencyPackagesDir "*.msix") | Where-Object { $_.Mode -NotMatch "d" } + + # Get architecture-specific dependencies + if (($Env:Processor_Architecture -eq "x86" -or $Env:Processor_Architecture -eq "amd64") -and (Test-Path (Join-Path $DependencyPackagesDir "x86"))) + { + $DependencyPackages += Get-ChildItem (Join-Path $DependencyPackagesDir "x86\*.appx") | Where-Object { $_.Mode -NotMatch "d" } + $DependencyPackages += Get-ChildItem (Join-Path $DependencyPackagesDir "x86\*.msix") | Where-Object { $_.Mode -NotMatch "d" } + } + if (($Env:Processor_Architecture -eq "amd64") -and (Test-Path (Join-Path $DependencyPackagesDir "x64"))) + { + $DependencyPackages += Get-ChildItem (Join-Path $DependencyPackagesDir "x64\*.appx") | Where-Object { $_.Mode -NotMatch "d" } + $DependencyPackages += Get-ChildItem (Join-Path $DependencyPackagesDir "x64\*.msix") | Where-Object { $_.Mode -NotMatch "d" } + } + if (($Env:Processor_Architecture -eq "arm") -and (Test-Path (Join-Path $DependencyPackagesDir "arm"))) + { + $DependencyPackages += Get-ChildItem (Join-Path $DependencyPackagesDir "arm\*.appx") | Where-Object { $_.Mode -NotMatch "d" } + $DependencyPackages += Get-ChildItem (Join-Path $DependencyPackagesDir "arm\*.msix") | Where-Object { $_.Mode -NotMatch "d" } + } + } + Write-Host $UiStrings.InstallingPackage + + $AddPackageSucceeded = $False + try + { + if ($DependencyPackages.FullName.Count -gt 0) + { + Write-Host $UiStrings.DependenciesFound + $DependencyPackages.FullName + Add-AppxPackage -Path $DeveloperPackagePath.FullName -DependencyPath $DependencyPackages.FullName -ForceApplicationShutdown + } + else + { + Add-AppxPackage -Path $DeveloperPackagePath.FullName -ForceApplicationShutdown + } + $AddPackageSucceeded = $? + } + catch + { + $Error[0] # Dump details about the last error + } + + if (!$AddPackageSucceeded) + { + if ($NeedInstallCertificate) + { + PrintMessageAndExit $UiStrings.ErrorAddPackageFailedWithCert $ErrorCodes.AddPackageFailed + } + else + { + PrintMessageAndExit $UiStrings.ErrorAddPackageFailed $ErrorCodes.AddPackageFailed + } + } +} + +# +# Main script logic when the user launches the script without parameters. +# +function DoStandardOperations +{ + # Check for an .appx or .msix file in the script directory + $PackagePath = Get-ChildItem (Join-Path $ScriptDir "*.appx") | Where-Object { $_.Mode -NotMatch "d" } + if ($PackagePath -eq $null) + { + $PackagePath = Get-ChildItem (Join-Path $ScriptDir "*.msix") | Where-Object { $_.Mode -NotMatch "d" } + } + $PackageCount = ($PackagePath | Measure-Object).Count + + # Check for an .appxbundle or .msixbundle file in the script directory + $BundlePath = Get-ChildItem (Join-Path $ScriptDir "*.appxbundle") | Where-Object { $_.Mode -NotMatch "d" } + if ($BundlePath -eq $null) + { + $BundlePath = Get-ChildItem (Join-Path $ScriptDir "*.msixbundle") | Where-Object { $_.Mode -NotMatch "d" } + } + $BundleCount = ($BundlePath | Measure-Object).Count + + # Check for an .eappx or .emsix file in the script directory + $EncryptedPackagePath = Get-ChildItem (Join-Path $ScriptDir "*.eappx") | Where-Object { $_.Mode -NotMatch "d" } + if ($EncryptedPackagePath -eq $null) + { + $EncryptedPackagePath = Get-ChildItem (Join-Path $ScriptDir "*.emsix") | Where-Object { $_.Mode -NotMatch "d" } + } + $EncryptedPackageCount = ($EncryptedPackagePath | Measure-Object).Count + + # Check for an .eappxbundle or .emsixbundle file in the script directory + $EncryptedBundlePath = Get-ChildItem (Join-Path $ScriptDir "*.eappxbundle") | Where-Object { $_.Mode -NotMatch "d" } + if ($EncryptedBundlePath -eq $null) + { + $EncryptedBundlePath = Get-ChildItem (Join-Path $ScriptDir "*.emsixbundle") | Where-Object { $_.Mode -NotMatch "d" } + } + $EncryptedBundleCount = ($EncryptedBundlePath | Measure-Object).Count + + $NumberOfPackages = $PackageCount + $EncryptedPackageCount + $NumberOfBundles = $BundleCount + $EncryptedBundleCount + + # There must be at least one package or bundle + if ($NumberOfPackages + $NumberOfBundles -lt 1) + { + PrintMessageAndExit $UiStrings.ErrorNoPackageFound $ErrorCodes.NoPackageFound + } + # We must have exactly one bundle OR no bundle and exactly one package + elseif ($NumberOfBundles -gt 1 -or + ($NumberOfBundles -eq 0 -and $NumberOfpackages -gt 1)) + { + PrintMessageAndExit $UiStrings.ErrorManyPackagesFound $ErrorCodes.ManyPackagesFound + } + + # First attempt to install a bundle or encrypted bundle. If neither exists, fall back to packages and then encrypted packages + if ($BundleCount -eq 1) + { + $DeveloperPackagePath = $BundlePath + Write-Host ($UiStrings.BundleFound -f $DeveloperPackagePath.FullName) + } + elseif ($EncryptedBundleCount -eq 1) + { + $DeveloperPackagePath = $EncryptedBundlePath + Write-Host ($UiStrings.EncryptedBundleFound -f $DeveloperPackagePath.FullName) + } + elseif ($PackageCount -eq 1) + { + $DeveloperPackagePath = $PackagePath + Write-Host ($UiStrings.PackageFound -f $DeveloperPackagePath.FullName) + } + elseif ($EncryptedPackageCount -eq 1) + { + $DeveloperPackagePath = $EncryptedPackagePath + Write-Host ($UiStrings.EncryptedPackageFound -f $DeveloperPackagePath.FullName) + } + + # The package must be signed + $PackageSignature = Get-AuthenticodeSignature $DeveloperPackagePath + $PackageCertificate = $PackageSignature.SignerCertificate + if (!$PackageCertificate) + { + PrintMessageAndExit $UiStrings.ErrorPackageUnsigned $ErrorCodes.PackageUnsigned + } + + # Test if the package signature is trusted. If not, the corresponding certificate + # needs to be present in the current directory and needs to be installed. + $NeedInstallCertificate = ($PackageSignature.Status -ne "Valid") + + if ($NeedInstallCertificate) + { + # List all .cer files in the script directory + $DeveloperCertificatePath = Get-ChildItem (Join-Path $ScriptDir "*.cer") | Where-Object { $_.Mode -NotMatch "d" } + $DeveloperCertificateCount = ($DeveloperCertificatePath | Measure-Object).Count + + # There must be exactly 1 certificate + if ($DeveloperCertificateCount -lt 1) + { + PrintMessageAndExit $UiStrings.ErrorNoCertificateFound $ErrorCodes.NoCertificateFound + } + elseif ($DeveloperCertificateCount -gt 1) + { + PrintMessageAndExit $UiStrings.ErrorManyCertificatesFound $ErrorCodes.ManyCertificatesFound + } + + Write-Host ($UiStrings.CertificateFound -f $DeveloperCertificatePath.FullName) + + # The .cer file must have the format of a valid certificate + ValidateCertificateFormat $DeveloperCertificatePath + + # The package signature must match the certificate file + if ($PackageCertificate -ne (Get-PfxCertificate $DeveloperCertificatePath)) + { + PrintMessageAndExit $UiStrings.ErrorCertificateMismatch $ErrorCodes.CertificateMismatch + } + } + + $NeedDeveloperLicense = CheckIfNeedDeveloperLicense + + # Relaunch the script elevated with the necessary parameters if needed + if ($NeedDeveloperLicense -or $NeedInstallCertificate) + { + Write-Host $UiStrings.ElevateActions + if ($NeedDeveloperLicense) + { + Write-Host $UiStrings.ElevateActionDevLicense + } + if ($NeedInstallCertificate) + { + Write-Host $UiStrings.ElevateActionCertificate + } + + $IsAlreadyElevated = ([Security.Principal.WindowsIdentity]::GetCurrent().Groups.Value -contains "S-1-5-32-544") + if ($IsAlreadyElevated) + { + if ($Force -and $NeedDeveloperLicense) + { + PrintMessageAndExit $UiStrings.ErrorForceDeveloperLicense $ErrorCodes.ForceDeveloperLicense + } + if ($Force -and $NeedInstallCertificate) + { + Write-Warning $UiStrings.WarningInstallCert + } + } + else + { + if ($Force) + { + PrintMessageAndExit $UiStrings.ErrorForceElevate $ErrorCodes.ForceElevate + } + else + { + Write-Host $UiStrings.ElevateActionsContinue + Pause + } + } + + LaunchElevated + } + + InstallPackageWithDependencies +} + +# +# Main script entry point +# +if ($GetDeveloperLicense -or $CertificatePath) +{ + DoElevatedOperations +} +else +{ + DoStandardOperations + PrintMessageAndExit $UiStrings.Success $ErrorCodes.Success +} + +# SIG # Begin signature block +# MIIhdwYJKoZIhvcNAQcCoIIhaDCCIWQCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCD5BdpRggDM/3NT +# wBDQFaER9aOD9SdM3CUzPDQe6F3dFqCCC3IwggT6MIID4qADAgECAhMzAAACznya +# zn2QXtK3AAAAAALOMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD +# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy +# b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p +# bmcgUENBIDIwMTAwHhcNMTkwNTAyMjEyNTQyWhcNMjAwNTAyMjEyNTQyWjB0MQsw +# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u +# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy +# b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +# AQCjCFujRq0kQv+CIenBLay0fR5jqHa+CGpiQvBr0tPkbmSrlC8p6lNhE9Xm0fR/ +# nFNFMVO5mika5tL6YO9SSbkIXcLTDiG5wrcyvxp3uXbJ4SZntOKSCujqvNQClo1f +# ekSYqa3Zw9oAnleczgOALpDlVXqBfcL8076HuyznXEpFvrrYeOnLizWnXB6imf6D +# JZWlDAY2AbBMBxKC4s3tekVSXV6xUAIbO9LgwhvyqyXX5pda+A1QybNIDCUgcNGe +# Z3od6NLkcQybhh7ZtiZEpvoFzsjiGyLekibfTgsri9IB0sfYcSVLtViah9O6JTYx +# lQ1ZrP7XiS/lHjJGf6iNI1BRAgMBAAGjggF5MIIBdTAfBgNVHSUEGDAWBgorBgEE +# AYI3PQYBBggrBgEFBQcDAzAdBgNVHQ4EFgQUcz8M7szQ1eRKZIUkjATmgq2AyA8w +# UAYDVR0RBEkwR6RFMEMxKTAnBgNVBAsTIE1pY3Jvc29mdCBPcGVyYXRpb25zIFB1 +# ZXJ0byBSaWNvMRYwFAYDVQQFEw0yMzA4NjUrNDU0MjQzMB8GA1UdIwQYMBaAFOb8 +# X3u7IgBY5HJOtfQhdCMy5u+sMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwu +# bWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY0NvZFNpZ1BDQV8yMDEw +# LTA3LTA2LmNybDBaBggrBgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93 +# d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljQ29kU2lnUENBXzIwMTAtMDct +# MDYuY3J0MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggEBABw+6i+NrXj8 +# hRtQ8rVGMaV+qjBsLjkqmmciAvHO18z6BsbyfPrZSExHwyOs8zaDKX53DGpKbmSY +# CpDTN5T+VMDPfAfp29pryBbBHmAJFgK7TP+zWxHumNeVCkQgt/pA/e09OD4ISFhs +# hjFQf4evxJCKxrFlYIL+tPLB0FqcwcgxDsstlthoSOaReaNLMirjAaNpFG+gnVxB +# Rct7QEeBrJw4KCRO0kw43k5SpkHcLiupyOVCanz9MfAd5IbBmBU9hAkI1mKPdXbg +# XWcQoPCJrNeV5WQnqyYGlrjAFhs8UZH9XNNbj2iCvnVMfd7ggQ1troOxkiGeuTZg +# /uz/G+xsp0YwggZwMIIEWKADAgECAgphDFJMAAAAAAADMA0GCSqGSIb3DQEBCwUA +# MIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH +# UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQD +# EylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAxMDAeFw0x +# MDA3MDYyMDQwMTdaFw0yNTA3MDYyMDUwMTdaMH4xCzAJBgNVBAYTAlVTMRMwEQYD +# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy +# b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p +# bmcgUENBIDIwMTAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDpDmRQ +# eWe1xOP9CQBMnpSs91Zo6kTYz8VYT6mldnxtRbrTOZK0pB75+WWC5BfSj/1EnAjo +# ZZPOLFWEv30I4y4rqEErGLeiS25JTGsVB97R0sKJHnGUzbV/S7SvCNjMiNZrF5Q6 +# k84mP+zm/jSYV9UdXUn2siou1YW7WT/4kLQrg3TKK7M7RuPwRknBF2ZUyRy9HcRV +# Yldy+Ge5JSA03l2mpZVeqyiAzdWynuUDtWPTshTIwciKJgpZfwfs/w7tgBI1TBKm +# vlJb9aba4IsLSHfWhUfVELnG6Krui2otBVxgxrQqW5wjHF9F4xoUHm83yxkzgGqJ +# TaNqZmN4k9Uwz5UfAgMBAAGjggHjMIIB3zAQBgkrBgEEAYI3FQEEAwIBADAdBgNV +# HQ4EFgQU5vxfe7siAFjkck619CF0IzLm76wwGQYJKwYBBAGCNxQCBAweCgBTAHUA +# YgBDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU +# 1fZWy4/oolxiaNE9lJBb186aGMQwVgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDovL2Ny +# bC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWljUm9vQ2VyQXV0XzIw +# MTAtMDYtMjMuY3JsMFoGCCsGAQUFBwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0cDov +# L3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNSb29DZXJBdXRfMjAxMC0w +# Ni0yMy5jcnQwgZ0GA1UdIASBlTCBkjCBjwYJKwYBBAGCNy4DMIGBMD0GCCsGAQUF +# BwIBFjFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vUEtJL2RvY3MvQ1BTL2RlZmF1 +# bHQuaHRtMEAGCCsGAQUFBwICMDQeMiAdAEwAZQBnAGEAbABfAFAAbwBsAGkAYwB5 +# AF8AUwB0AGEAdABlAG0AZQBuAHQALiAdMA0GCSqGSIb3DQEBCwUAA4ICAQAadO9X +# Tyl7xBaFeLhQ0yL8CZ2sgpf4NP8qLJeVEuXkv8+/k8jjNKnbgbjcHgC+0jVvr+V/ +# eZV35QLU8evYzU4eG2GiwlojGvCMqGJRRWcI4z88HpP4MIUXyDlAptcOsyEp5aWh +# aYwik8x0mOehR0PyU6zADzBpf/7SJSBtb2HT3wfV2XIALGmGdj1R26Y5SMk3YW0H +# 3VMZy6fWYcK/4oOrD+Brm5XWfShRsIlKUaSabMi3H0oaDmmp19zBftFJcKq2rbty +# R2MX+qbWoqaG7KgQRJtjtrJpiQbHRoZ6GD/oxR0h1Xv5AiMtxUHLvx1MyBbvsZx/ +# /CJLSYpuFeOmf3Zb0VN5kYWd1dLbPXM18zyuVLJSR2rAqhOV0o4R2plnXjKM+zeF +# 0dx1hZyHxlpXhcK/3Q2PjJst67TuzyfTtV5p+qQWBAGnJGdzz01Ptt4FVpd69+lS +# TfR3BU+FxtgL8Y7tQgnRDXbjI1Z4IiY2vsqxjG6qHeSF2kczYo+kyZEzX3EeQK+Y +# Zcki6EIhJYocLWDZN4lBiSoWD9dhPJRoYFLv1keZoIBA7hWBdz6c4FMYGlAdOJWb +# HmYzEyc5F3iHNs5Ow1+y9T1HU7bg5dsLYT0q15IszjdaPkBCMaQfEAjCVpy/JF1R +# Ap1qedIX09rBlI4HeyVxRKsGaubUxt8jmpZ1xTGCFVswghVXAgEBMIGVMH4xCzAJ +# BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k +# MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jv +# c29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMTACEzMAAALOfJrOfZBe0rcAAAAAAs4w +# DQYJYIZIAWUDBAIBBQCgga4wGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYK +# KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIEMB6sh3 +# 0od0djZhSjYmDFfgME5hmf84vbeilDhjyyYCMEIGCisGAQQBgjcCAQwxNDAyoBSA +# EgBNAGkAYwByAG8AcwBvAGYAdKEagBhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20w +# DQYJKoZIhvcNAQEBBQAEggEAbSCTojfLf2UMTG8UGj0qjfzGhtyZR4cDedJIRNfh +# q7FhMsZMi64qJ9p5WWyci9bkSWFLAHmmsU1XfSqUdV0gi6+AdWo/G/JDWAqBnVbM +# SOE0bJQeMeCOCbMjxKFh+SzcO/NNrCs3mnWwYu61kYzhkWoOXxg4b3SrCdCYHYdV +# p0qrhyRxH5aNjGUmFiUF8+9AIIXRwDl0RO8IbWB8yMNXLFyQAtf0q6GkCmqh9NvG +# qmc7fwCzlVtzxck4jICzakFlSFuOULKKsMYWTxzu1ymrL3E/MTwdBGBaWRBFdtGY +# S1vuA8PhpC5wsJIm42GS9Y3tr0cErZqMQtQ28ykgMsZXVKGCEuUwghLhBgorBgEE +# AYI3AwMBMYIS0TCCEs0GCSqGSIb3DQEHAqCCEr4wghK6AgEDMQ8wDQYJYIZIAWUD +# BAIBBQAwggFRBgsqhkiG9w0BCRABBKCCAUAEggE8MIIBOAIBAQYKKwYBBAGEWQoD +# ATAxMA0GCWCGSAFlAwQCAQUABCAcQuQh0Q5JbgwhQVXvLRn9O5Dpp6yl6sMI8gEQ +# 26jx6wIGXMnex8O1GBMyMDE5MDcwOTIyMzA0NC41MjNaMASAAgH0oIHQpIHNMIHK +# MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk +# bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSUwIwYDVQQLExxN +# aWNyb3NvZnQgQW1lcmljYSBPcGVyYXRpb25zMSYwJAYDVQQLEx1UaGFsZXMgVFNT +# IEVTTjo3QkYxLUUzRUEtQjgwODElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3Rh +# bXAgU2VydmljZaCCDjwwggTxMIID2aADAgECAhMzAAAA9qzPdipzdJraAAAAAAD2 +# MA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n +# dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y +# YXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4X +# DTE4MTAyNDIxMTQyN1oXDTIwMDExMDIxMTQyN1owgcoxCzAJBgNVBAYTAlVTMRMw +# EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN +# aWNyb3NvZnQgQ29ycG9yYXRpb24xJTAjBgNVBAsTHE1pY3Jvc29mdCBBbWVyaWNh +# IE9wZXJhdGlvbnMxJjAkBgNVBAsTHVRoYWxlcyBUU1MgRVNOOjdCRjEtRTNFQS1C +# ODA4MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIIBIjAN +# BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlJq1QMAx7cd67Faablg8wvE1xAF7 +# ZgFA+ut/Tn9FegGGqB7i6VCkhPelTSfJR3yFekF9E3Sw+ZP2IcezKvbr5PXt0Svt +# n5BqBGrYK2+XFkjsjINzXzsE1+SeYJkT04hkMwmF8XRphesxCMMUTblm+LVEJFrY +# q5IIJCmo1kn9bODS2WqtfM/T+T+rVKAReYHV3YQjQpVW5rx/6O+s3sxQFKN77O8k +# +u/I/pWOnVwL4AJB4WonLiVlRSFsD8S4mTbtnq1vMUi+xlpZ5/49phizy7vr5cEc +# lrygDbDrrfC0S1PyooDh9tml1DUYbao/Jn2eCJFHoN0NBHzgEefpbG0HVQIDAQAB +# o4IBGzCCARcwHQYDVR0OBBYEFB2HYoOUH2iCSUjTbO6ZZIPsJvNKMB8GA1UdIwQY +# MBaAFNVjOlyKMZDzQ3t8RhvFM2hahW1VMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6 +# Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1RpbVN0YVBD +# QV8yMDEwLTA3LTAxLmNybDBaBggrBgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0 +# dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljVGltU3RhUENBXzIw +# MTAtMDctMDEuY3J0MAwGA1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwgw +# DQYJKoZIhvcNAQELBQADggEBADAV9s7iHFcW0JiR1fIe2d277chvA/GYqPn4LwAT +# m5mpK06QMBqnSDdQZ6MNCQM+HMcoi455atShcSchMgiIHbjhphXj/0BtUuaPQiWb +# k07J/sHi7O+8jQe3V3vDHsPT39J5LkBmp/jWdrOQNNhQstUN8CtyiEGekFyI7BS6 +# C9kYSedtrGTYFCPW5OJcnzCXowzIJ8olmOK8WR41pMRjaD/Cnrifzic1aR/YHwfO +# me9ysGeIy3acxd/8Jdp7v4iFN9TVW6Gnz7XJ4A4VNKiiOjw/lRD/h3JmroX+Ak79 +# LA5NJEAaqkLIniGCqdUI38oI7uO4qaTt2BL2VZ759tvCDtYwggZxMIIEWaADAgEC +# AgphCYEqAAAAAAACMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJVUzETMBEG +# A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj +# cm9zb2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0 +# aWZpY2F0ZSBBdXRob3JpdHkgMjAxMDAeFw0xMDA3MDEyMTM2NTVaFw0yNTA3MDEy +# MTQ2NTVaMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD +# VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAk +# BgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMIIBIjANBgkqhkiG +# 9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqR0NvHcRijog7PwTl/X6f2mUa3RUENWlCgCC +# hfvtfGhLLF/Fw+Vhwna3PmYrW/AVUycEMR9BGxqVHc4JE458YTBZsTBED/FgiIRU +# QwzXTbg4CLNC3ZOs1nMwVyaCo0UN0Or1R4HNvyRgMlhgRvJYR4YyhB50YWeRX4FU +# sc+TTJLBxKZd0WETbijGGvmGgLvfYfxGwScdJGcSchohiq9LZIlQYrFd/XcfPfBX +# day9ikJNQFHRD5wGPmd/9WbAA5ZEfu/QS/1u5ZrKsajyeioKMfDaTgaRtogINeh4 +# HLDpmc085y9Euqf03GS9pAHBIAmTeM38vMDJRF1eFpwBBU8iTQIDAQABo4IB5jCC +# AeIwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFNVjOlyKMZDzQ3t8RhvFM2ha +# hW1VMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNV +# HRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQW9fOmhjEMFYG +# A1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3Js +# L3Byb2R1Y3RzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNybDBaBggrBgEFBQcB +# AQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kv +# Y2VydHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3J0MIGgBgNVHSABAf8EgZUw +# gZIwgY8GCSsGAQQBgjcuAzCBgTA9BggrBgEFBQcCARYxaHR0cDovL3d3dy5taWNy +# b3NvZnQuY29tL1BLSS9kb2NzL0NQUy9kZWZhdWx0Lmh0bTBABggrBgEFBQcCAjA0 +# HjIgHQBMAGUAZwBhAGwAXwBQAG8AbABpAGMAeQBfAFMAdABhAHQAZQBtAGUAbgB0 +# AC4gHTANBgkqhkiG9w0BAQsFAAOCAgEAB+aIUQ3ixuCYP4FxAz2do6Ehb7Prpsz1 +# Mb7PBeKp/vpXbRkws8LFZslq3/Xn8Hi9x6ieJeP5vO1rVFcIK1GCRBL7uVOMzPRg +# Eop2zEBAQZvcXBf/XPleFzWYJFZLdO9CEMivv3/Gf/I3fVo/HPKZeUqRUgCvOA8X +# 9S95gWXZqbVr5MfO9sp6AG9LMEQkIjzP7QOllo9ZKby2/QThcJ8ySif9Va8v/rbl +# jjO7Yl+a21dA6fHOmWaQjP9qYn/dxUoLkSbiOewZSnFjnXshbcOco6I8+n99lmqQ +# eKZt0uGc+R38ONiU9MalCpaGpL2eGq4EQoO4tYCbIjggtSXlZOz39L9+Y1klD3ou +# OVd2onGqBooPiRa6YacRy5rYDkeagMXQzafQ732D8OE7cQnfXXSYIghh2rBQHm+9 +# 8eEA3+cxB6STOvdlR3jo+KhIq/fecn5ha293qYHLpwmsObvsxsvYgrRyzR30uIUB +# HoD7G4kqVDmyW9rIDVWZeodzOwjmmC3qjeAzLhIp9cAvVCch98isTtoouLGp25ay +# p0Kiyc8ZQU3ghvkqmqMRZjDTu3QyS99je/WZii8bxyGvWbWu3EQ8l1Bx16HSxVXj +# ad5XwdHeMMD9zOZN+w2/XU/pnR4ZOC+8z1gFLu8NoFA12u8JJxzVs341Hgi62jbb +# 01+P3nSISRKhggLOMIICNwIBATCB+KGB0KSBzTCByjELMAkGA1UEBhMCVVMxEzAR +# BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1p +# Y3Jvc29mdCBDb3Jwb3JhdGlvbjElMCMGA1UECxMcTWljcm9zb2Z0IEFtZXJpY2Eg +# T3BlcmF0aW9uczEmMCQGA1UECxMdVGhhbGVzIFRTUyBFU046N0JGMS1FM0VBLUI4 +# MDgxJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2WiIwoBATAH +# BgUrDgMCGgMVAA8XR8J71gM3wlrTm/PIW5v1VpqRoIGDMIGApH4wfDELMAkGA1UE +# BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc +# BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0 +# IFRpbWUtU3RhbXAgUENBIDIwMTAwDQYJKoZIhvcNAQEFBQACBQDgz1OkMCIYDzIw +# MTkwNzEwMDE1NTQ4WhgPMjAxOTA3MTEwMTU1NDhaMHcwPQYKKwYBBAGEWQoEATEv +# MC0wCgIFAODPU6QCAQAwCgIBAAICAscCAf8wBwIBAAICExAwCgIFAODQpSQCAQAw +# NgYKKwYBBAGEWQoEAjEoMCYwDAYKKwYBBAGEWQoDAqAKMAgCAQACAwehIKEKMAgC +# AQACAwGGoDANBgkqhkiG9w0BAQUFAAOBgQAtA+foiLfvVwWXWQRH/eCRs8sS2hx3 +# KXGON39/P89BANVPzXtnCgIYCmx48SBeWHzjnMenuENBoFdzhiK9Cov2DFu8Mkkc +# 1pM1IiKstq8RLHDmRWWDZZ6HOcy1PzCkO7x4kK6266U/2YXrRBcNKR9Zgdzlorm4 +# ecZH6aJ/Ghp98jGCAw0wggMJAgEBMIGTMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQI +# EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv +# ZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBD +# QSAyMDEwAhMzAAAA9qzPdipzdJraAAAAAAD2MA0GCWCGSAFlAwQCAQUAoIIBSjAa +# BgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwLwYJKoZIhvcNAQkEMSIEINHE98Vr +# C2V3rRFUE6l77BeuAtkeoF7+wOppTIFk+DBVMIH6BgsqhkiG9w0BCRACLzGB6jCB +# 5zCB5DCBvQQg94dBd2q07RcJ2dMl4z3mgBFSVptilRYPqZBOcS+TtOowgZgwgYCk +# fjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH +# UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQD +# Ex1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMAITMwAAAPasz3Yqc3Sa2gAA +# AAAA9jAiBCCLuzueAI0cRo8BgwxYt4GbiGDWbBKlqdRAXOdm/1PhYzANBgkqhkiG +# 9w0BAQsFAASCAQCJSAuJCRYB2ipL0CSqk6STO7fAIYAtbZJBIo62uuU8dqzaKenB +# 0TTFlkq3Ilx9+wAs+AuLDKEBi4VdZNF31BxrwA4yT8xhN6oh3JMakNHH+XkdsXGi +# 6tC/qtC+lz+Qrmk1YvftUkfaB6v1wpOwIaLpCcELHIrqQosLpeCm9W+ByKwxN4ju +# Ul1+MASKQQYK8pSi1DVru8zVuqC75TKf+X/CXgHnQADIN1gylF38vAHUcfIOXqR6 +# srC74CpfRM3ym7TpAreOvv0z31rz2TBv3X6WwjpGI8zhHJKT3MaG6TyTQbv4rbaJ +# 4K9MrLbynC4laN8VqDCPCdQeB4CO+hGZuDg1 +# SIG # End signature block diff --git a/AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/Add-AppDevPackage.psd1 new file mode 100644 index 0000000000000000000000000000000000000000..89c0d41750510272ed346287aa487fd14c6823be GIT binary patch literal 10150 zcmds-?Mqxo6vpRsq5s3hK+{5F(w9&Ogf>xAmL`p$5(52V*3~T0)$VGng#PPopWmE4 z&dl9A@oJWYhQ;0cGB4-lInOyWU$bSx__v@6L4z^A9nWWw&1$jp6CznnuKHh&WiEcB--HK+?|)Ul z)2NA|eH7#2PbSiINgYsb{0>yzgq@lOuQ#Mw=U&&cpd%Tjo&`fjSDX?%2&>vd{90o zQeH-un?{ZC#4=`oA?r;gAyOW+{O-0&GMNNe-15q<_zC7cl`N;aYT`IET^pupiI>M3 zdpv(yL#&T*ajE4{S4Yy5@rlLT5eM74I@6VLYokmwQo9r3iukPgiT1})>Q%K`*R^R3 zu8m761{ZQ9DJB_I0YNo7#jxZH%UdQ%_@s8YT_iw>oSt--?nmw z^UbMh(I%AH#TliYr`y@KpM{*^$~vZ;e^A&e=}ep)=$%`yn|b=lF`L)o$=4>sBUv02 zGK=9pu>r`$Bh)7JBld^{k7?fKS7VQT=!8wURXOa|7H=7Y9yi2*$c>hkOl~u1(+2=^} zSOz2qVA1_(gCkvG{YLL|4j@W5)$&}=r&>!fHqlAF0G5c|^H!DAWmk($`d+shwyb|u zj9QjR7zMp}3#pBxOl#2SoYsX_ke*u{^exBUWhI$x^i+1o!$a9N#pn|~9Y;^#0hl-S zAjh!YrvByaMAx9wSeW`9U-En;-#A*q7}3Ey`>tWOCaJBa6ZWY1L0*@9i!pPk)~;tA z%{dyurrF?q5|!(YC($leLoHej4J;PY8r|a{UmaTw;JF=~C*~^AK)nHGKo#+Hp;%aq zVQLx}2p@T-#&SG?wXTvTWp!c{{~CKBS<1cO9M4j}GN$F&w)DmURwflY4Z`S*NyxV;R8Fwj;)&%CHL3*oVrA z@w~RCDt4A()MLFRcfAYWY5%{L88^aT;w-BVZejuEXzv5pP?Xz&=wgsWI4tp&b=G^@_EdXeZ5TPu3M)mv~?2ZmW;*kL@hj zTEiG^9M>dBH&DHoIIWzQNp+pZ<4TIZI&?7Mq{_HYG`phmiq_K4nWaZu0TmS6+QB zgO9G#aUf~dwA#6eHXzkeXZvv2y{0>;Mnh@{+ik7M22V{QF80E2ve$)9H)ndrIo^lL zNko>rmt>%Fm#c{@1ok`efX$oEw2ZS%uDnGfY|x(AGi$JFnTdCZ2g6ccZ`nQ$jOo~4 z(GGULr@j^MY_HfVv6U*rG~$xij)5ms04w;kM9*7Ixff$_NO>{Sp* zU{p@*_BApYf}N8_J0RswooSu(k?mXCj!AvTiCPuw!NJ40nzxl4do)O4RdKx{ui@S5 zH};~8-_vd^(!aW#(ODAYlyfHAA{(qwix{i7&4#62HslY^BbF_Hk`2Fg``s#bxV`4z znmz;RnpV@@e7q(LvR7lfU?#(&mgPurw^=ejcd^{nz2@+9O5?hGwwmlNtyeRp1UK1D z0)@#MDT^Y_;yP)WH5LC;QPb1T*w-aPSs4+jNQTV(_rUdc&!`sC{-N!lbyZ;0nrSBV zW_1bPIHR(f1lz&z(|P7L?^Bx~9iCs_8PR$?Bf771qMvk9bgyc;5)qDIt<$T=vxgmXMef5c$jpXY$-{COUWPQ@j dV7W$vd7EXQ0&`Bfyclnv1A~m)`Y$?u{{tkY@&Nz< literal 0 HcmV?d00001 diff --git a/AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/cs-CZ/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/cs-CZ/Add-AppDevPackage.psd1 new file mode 100644 index 0000000000000000000000000000000000000000..5bf45b012d94d6c318a49458db8346fc77cfad14 GIT binary patch literal 10278 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 CcF4Q{ literal 0 HcmV?d00001 diff --git a/AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/de-DE/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/de-DE/Add-AppDevPackage.psd1 new file mode 100644 index 0000000000000000000000000000000000000000..c2cad29f7de05ad0a9e11223a5e01f4a204f709a GIT binary patch literal 11628 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 literal 0 HcmV?d00001 diff --git a/AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/es-ES/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/es-ES/Add-AppDevPackage.psd1 new file mode 100644 index 0000000000000000000000000000000000000000..a8793ff636e7bc79348d3f08877437a7db810381 GIT binary patch literal 10834 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 Y_16{r{^9QUsQU{G*l10^s^$NG083b5Bme*a literal 0 HcmV?d00001 diff --git a/AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/it-IT/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/it-IT/Add-AppDevPackage.psd1 new file mode 100644 index 0000000000000000000000000000000000000000..2f0d3b625e77877d57e24b6eca46e362458ba07f GIT binary patch literal 10738 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 literal 0 HcmV?d00001 diff --git a/AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/ja-JP/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/ja-JP/Add-AppDevPackage.psd1 new file mode 100644 index 0000000000000000000000000000000000000000..04bf5d69e1183e22b9a93ebef0b11cc540060adc GIT binary patch literal 6698 zcmc&(TWl0n7(T5cpkjFP)e#aYi7kJj2m%ez8<%do?JmvIw6U~%ZMV#p-Ii-g+qYgI zfi(q!F@$P}FGdZCiad~DxIK_aVy!PG@_+`=@Sust;N|z&GVsw@_>b-H<57wGV$a;IkJrI>9-Pa}@Vwc%H(V za>Y!w{RqGK>CF@Myv+kMM#9Q);rl?Zetu&`W7FDn){7s6@Phcgtt3Zv8Ak{*Kn1}#2LJ2}6+MPJir z^pL(J4=F0+beIC5q*JH`-ypO*02}v%dr0Jx|LC|6kJL$ad-PtxZdD)v!GRDakeA$mb z8(WO!FuaK1U<-JOfFhfUk5MK%xpd!_y2t}{N4 z8N;$eA#?)pQxcX_esY&wQ9lnKeM@)Xqf0nUy6xR?O2ybuxc?l7lAirIMRB@@h`t1W zy8C#P>L}*$busxt^Jb{s8>a-_Jie^82T1!E{O-|J`hW~^4+!}LIikW_hm}z(l3(at zOggyNGg{s3kD9xF5Scm*n-J_0mVY-G$4lUYIGT@HQxv8hDimmeJfXt9= zUA6|}_w1n;`sWRsbnVE7*p*%7J3Z1SQHh5Z^bggLV1|B0M9m;t(lq05rf~BSSaD>m zs#isoLY<;?3)p{v2)lu`;pX>zI&zdHk`gCLSq+jhf9YPW6!|1nblvdFvB8md&yux> zN*z25af|NKZOF!1p$8Eim65}g>Mc7QNG|U&5y4GB)IQiMi7q3CE7u1@oI`YT$8Zko z$6R7Gmv#y_k6*KF9~F_Ew>axKJ>=BZ09v@dDvP>ld$f6WUeRUtAg;Ji3PNk{Avvl| zQ0>H(EmzEPS#))zMO$gg+5g=@Zxno$>@jrO|MEwUnXqdJ*cxXtYq zyIOL_wQb)6`xgPl>~(&Qs=j|wh`pe?NjFTpXY^dC%ZEFa^`8u7aVan3u!BZ`VeS@K zs|l;mc~*X~QRr@k+-S^g2OE#JHJ%iGb6MnBqO%II8A3Hx`(}N2<;-_>e&fBj+LJCp zBld-s}+;aagD z`B?2Z3Xz%nc(v;?Eo|x1n^OAMqD?0}G~cIkn(8>eK;5`XKT=g>!MI6x!rwQ>@O!<_ zgFQ1bHiIve|aavU8_yQl&jU3HIF)BWjBSKXwHn5rlZa6-o;%U zE!^*`4trDA!sxu=I4wQaIhZf++IH8y+5iitP(it-aXoc<*^qs_k}8o?s$6*Ou&f*- z(fIoa_sPotdfl_7+6F1AQO%wFIRh*1X?gAFnVO8lnyS(yP_OOEosA8~v1#ShdZ76L zW2S(}ZaT7bFhcX9E_a-M`n6bJZn_|omvg5eGx6eT#55}H|)tf zcE7wcrG3@RiX%m7k-f9gE#uUoR@6g-{F2}9THR5Y^yT9Z~?kwm!Nxwb;uIxYFmTVlE4m3}9!jSvDVc_x-*ean;b4 zdso%3>)oo-*wlKo1ZE=RG`gEJjB_fI=}_$$vNNhKMXtWsjx6WyGlO=!7tW^bo~?N* znLk^r`Pf{0j9jw1Ps?UYn;NIV%xr)&{?nTR)Brmx#cCXDFbm*$x7*Y~N2Bfu+m<>W za_L-{f4DO7Uh#rsx?4=ycKCm-pyvE~=bKAwd)B7U9A|r4xAR;a0?04CXR|%v%rb>? zG=y`0#`~NfyqUfg(=3-+Da);DbsQC90`bdpHtx`E?@nQ_?u;M1& literal 0 HcmV?d00001 diff --git a/AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/ko-KR/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/ko-KR/Add-AppDevPackage.psd1 new file mode 100644 index 0000000000000000000000000000000000000000..6dcd09eaf2988f946f957c3d3e9986ab75bdda22 GIT binary patch literal 6348 zcmd5=UuauZ82<(ZohT|ysE~(CEp7wXwK}ni(P`W1T&IJr7@>lr+g!0`S(E8>-IEL^ zROqCFFM~Z)u#lG8b(+iwxnapoAkIv^MIpi-`mhHD9~AUO{r&FA+09Ar(yi=4!oA7O zJ?A^$pWpZUzH|Ql=OM9VP>#rm?3XbamG|YK9FX*81F{9*F?{;5&O4B?A1l9w z`5+TnE}>?9atvA}a39BeOTxH1@GA;AL$VjYIkFG>M0m{Ce*+ z&)D?COeI?~=L}$l5m@mae3`&H2joVp?#uTs?^_Nnsg*5gG3cx&%ZyjOM!qzqRgk>C zT7*XB5TZiFQNwyE$`i+(v!#%2>O#E4aM6Ffk3a(B(>(iB@guv(1~O~jVO(Fp*aSWr z3&h?*#Nmi1a~ueuK9n2BJuIPQC^LnaOnjAaEPEz5k+$U8x4$e!-04M2?k{x#t6g4< zc6xJ&tTB9){9rr7qU@rqPCIh>=46>356dvtJDTr@Zox91gB?eKtWjX#V1r$I@&AZt zXB>7O!qZp_TTid1!#UML_Eew{gtd^wGxP7UZua|4iQTFxNeMFD!b(J?PNjP_;Ch$9a(7m2lgceki0 zG)L+dEncj``d0c6BAeL5jKFSocg*J~{J0N7WjNJatE<)A znd^*EFlvJzf7M-)D@MJ(hE*|vRekx5@x1$oi5eqOz8Qa&6B=8TZC2U(oP&dhO|^n)5tz=m07knVt2qe$V3bPDgFO)&Y(q z=g{Ae6gFgzqoQfF`F8f_e_qsGq?SD7Ngor%C(KGz&F`v+;tA}8Pa=YwM3S2!zdaLK zzA+{TOUO8P()vsqsH8+zRMu(iJyq>DJ^xQ%fxpZ%a zBifRxr|h&JDC!&|hkXDvKIrvk+*A0nIIdon>JE;g@0zqNX9_INp4xIgUuMUt^kp4s z&Tt}Q#j9H7^vcqu^RHvnbYZT1qpm_nz>Mu~_%M!I#tOsA=EvHPWANIoa*>QT;c(Zd zSVva{vleNMc0z+b)YQhcSvRPKCEfEfHvxOi8e>W$f}=HN+yxxJhh8m?|9IBYD49Gz zQ&9}UXel%_ui%fOx3i@OirON@qFM$c+JRFSa`PxW$^G$O?typu6?WA8vO$6?t>t(T6& z+Hw5HUMPV#joNZY(LMhcawSweiQlne0{Eu>^jWJ8i0529{m_0?yWauqijD=Y;@de3 z^qC%NwN~(c+RTzZSjf&#^}A-Tr#XfD57wY--%i@~JYxD#V_x&1xq5InsaDWCbR8w% zcRV>%ysf1Mu`AEnZkAou3DRnPda$;dYa36Kg7ltpdTsLD(!y+kd3gKw&Hcd0qw+Ye zC$M|&7UpknIfncV?jg-MXn&e02)1|i=-An6#XsL;HTeJ7t_)&hz7=&V49FV?ghX XZ`a8WPgZUph8xd*=;e(#(dYMnsa-aw literal 0 HcmV?d00001 diff --git a/AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/pl-PL/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/pl-PL/Add-AppDevPackage.psd1 new file mode 100644 index 0000000000000000000000000000000000000000..9cecf8c32f1551f376e769c848a69d83564a252d GIT binary patch literal 10106 zcmdU#TW=gi7RPHIq6j2DfFD3Dkd|GEBm{z3B3W!=J1D!kSn^tkgqO*TV^8dv@y>-I zCVc9=@9zIsXHL4RyT+GbL69|Jzsn*;KAB6V!q?+k{qTj2quGh!< zHWHoPu%qv++>rbuQQOn1S-7Y7aTsdFj;=AUqZg zC~YtI9&7CnqBqTGtcSly)2`%gu6-nqDK}O=66d|R@~-3`Nv|Va-_uIFS`SZj7u5HJ z`XK5smVC#N1AAw}vI@Tl#b1{kQ?z~yr7dypN!OR+HWR0QxR{J5l5r}jUxw!qv4yTj zx~g>VnRI!rySeObj=Am6)@C)&)rf6KH+*6sIS0|l(e`X!z2!di8$|zX+5-PQ)(gAx z-qSk# z{7bmb&)}E)$$I!v)N4&w^XdvE^d-BPwzXb&bmu=pX&}V*8aVFgelOxWl@`x+btG)J zrO8m3KJ6TdKekR$#`}rg9N)FhDtz16mQg*wEJQ~M3#2NcZuZUT8@6b=(5o*W!ne?s zSUxTwa2nSp{%alM`Mo5aM7nrW?qQCCN%BN1hmrq8vRK9;!<00=Dy&O-a<|S>#M?rz zp=j*uMU=QTp*xqoEtB=af!2-X0k4(ODy<@}4kHG~T1Os1Dymi$bHDk(Lh@Gn)iSwx zKaq{Uz+qpz#^F`Rk*!3X{C^zv>_v*39ioRwhV~Z4T^AYdIzY@wQepdm3FN~T5cOM*;pA1&pFXIt2O7bHwZqK_INM0q1HK7kC%zK z9!k#_(Mr>BCB`kbpGl5mt;c#$=<5@_hx+X5itIt|9mWVb&~G!XyRDw-#u6#~mr4t@ zvAk<0^m_U>)Qablh>S53_Z#8cn1}d&UzFF?b=`^`)mM6Vyf-46?v2!+g?3wvABZl} zfG%i_qNF3~W?p!;^X(ftisIztjPpz$K2(#*O< z860jCr_Oh3`*0L=1jj$2IZG9sC;WW4Vd$keB!*-q4yZ89UNnn%2W8=RnuB zM8pMlsP9``YU{0x6IP3gAiSS-5` z?Ql!828i)HT39vPlGbQ3iJjjh>YRJ%A8(IcNk>m}AUQo&N79^F@H2qdAv=Fy$)T)= zZOP=<67A@6=CLMHNynmLS%94&L4{*C`?hsWcR5joJkTdyq~(9JqwOR&80tvJFLoY6 z0`ANsWh#}e-&}SQCG0H+z-d*NoaOPJKTX$rAAzPDup=b0#1Uu0Q%>vvG^~rgiih;+NMZvCI^RKp|@1ZD? zGjlZavv7)M8AtLgU7z(4_~a|~VaRSL>|FA9ALq0$zkJMdtapV!_TATKJHAuy^p19V zC69rr)j29T-rMf>>wJ$b=>PLwW+Q56rAYVLg> zQ+tzeS5ZmFK_yv;6Q_}Z_*l2ksq&ew*3^X%ufJ&S|7)vCZ-t+gqijxhKHW>Qm*;Rf zI_SnD_|NxHMH)CPLY*19|Av4seV>XbD`x~@~fk4ofR_|dILMp5UJ!! z;+T8PPmlt;P_u1z0`}HP+x*3(V;1Ri6DZnA1-{L_;A?Y@T%Nty0oZhfUY2~}=QZya z(0w6Hy35(LO}gnL@s!dWhnU6+oD-~8c$e#$iTN2bMw>6V#A%(forbPwML7HY+-sd~ z$@cBc=l+>L6?iD>Q|W|tux=hvCCa6UI*GX#zae{rU1=xS(R9$YQm(hcjGlS38^X{5l#q5R{`j_5c zs^6uH6~zQ}q|vIQB^tz$i|O|8ssmV25Q zb2bELa$rwUghlZ{Sp>bl{5O)lfb<}0ht)~jW?ygrNn zCurhr&zjGgo?T4G`YE){l+QP1BLn*cyGbFR5n#*bvhE~SZL338Re3swb*aCX_f%$6 zk@Q9QO0Tc=Y=-}D$!lKj4_=3JpS>7@Z{sC9F~5u&HSN!dDAUV+W3F^r2(~-drajN% z{=KpZ(@M8=o@cGT__@Km`}}#3WhOd-k~DQ3;0N`zkoBvd8joXVX&Ib;gDD!dAiijV*=HS%ww~xhf5{n$&NDq{+0*sMlAa1;=bN*h-`al1 ho6qAr#FJCmD;*u>s)&HOI`G0eFG?M@T literal 0 HcmV?d00001 diff --git a/AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/pt-BR/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/pt-BR/Add-AppDevPackage.psd1 new file mode 100644 index 0000000000000000000000000000000000000000..792aed3d0026e426924394f8734ffddb86640100 GIT binary patch literal 10580 zcmdU#UvC>#8ph8pEA4j}6=~U(mXtyfY^7*7I4O!~A*(b+D{*5IH}#U*!FFH)@nN&Q zsHn78Xm5e%cOJhvGvl!nlYl^x$1~$I@B5tR{d>;j#~)rzReF%d=`i)vNgAfF(;ywC zSJE5lopf8rzv=jmG;s@9siu(*Y~6J7d^xMxAgnnw2|J``G!7s z^~@cOdnIj2?ooPO->3T9mYy#pqc6>$>3FQ`4c(t=%$@Yd^oInpUOE%1nT`|vUZqWa zZs}|!IR|N9=Zx$L|47mX8Z}GzbsVQ>8nLgdiRLtt^lj;w=~JbDq}S&1UzLtMje3wi zk_;s6&7VEh*ndghv>{_N{YlqD$!?GRP#Wvn82Mp(uDgtUPxwcg*NG(F*F9ftrXAfq z)b%LiwGPj)t5FTt(Io}lk}A|qU&fWQapqam2kl* zW;hC(|OMttFFwm4jPlDRf#g)g7# zgN@C>P~X!_ZC$tXRNV5kk0I@4W^^dL_p<%p*N9o3hkcqD8pyB4S^q?y%}N%(ar5}w;dS5(vc360rXHsNuY1YBUpvBd`SUSwCOvT+3U7d)(1I0QFt;<*? z31jK6^z_k%&Y{kcMvOeu_cZIoQ>MDp#c(&b-B>@$lG}c6)&mW>a4Kf7Uqo%7d71tr z#Kg6cG_{!Z<~_#&9@WKr;b0xDA4}FmD0$|%VdawxPcxRsLVB29N;?eB(z(t~^{lTr zf~(4s%A6;1>p9(s_=zVZIxYf|r~MEl45~D{*3fG3%Z$QOl^9+cbT5fsA}T%{~_>iSlE~Wmco) z91xj@sK+z$BP=+`^9&oK$H*B`<@mA@nV!C6_`E^T2IgeVOy!NPXGu^!J=6Ip3A^ zP4$9zbD#INj@XIMBVh$qFf52f3)xM4;`?44ez=OM~7Z<(maz3W> zKAmT(NJ&kz8 z0z5~aj|j&DoO5UT-C6iR<9fPc3{{lcG??d1tc6#M6l3;xxLb}Ie{=RD>TGA%8D|Mw za*|O@a`!mN7@M4Krc(J}&Y7%Wa}*MdKbPCfx!X~%0PpsLsK9VUrHK`SXG>;q{=y>v zl||`cVY*Tz+|QhXnNh5OVA2Ti6l~2bOMH+&umK$mnj=rRx3bmtBO+jC@{Hy&8r`S+rfK?L z_E~x>W=sZ&uECv|aocCGRm3-UT%|Z$9%pUbUY!@eWIZv{9GYlLB`8tV#z&rUzGyPN z%4b13nfnepy3m2B?1K;!WskuAYCfH7%n~sI8b;q^Q>kb{y3%_cv`Re)7HHqv?jMty^uB2-a9*kr>*8alE&FlTHc<*U0i(T2(;@d_`}0S;inY#BNbDJH$NeZ2ubhq1#&P=80v@{qlCB z+id!DS*x|Z=z4Y}9_uyew`0rqa;$e-ve^ePhi1j*orCw_Z|S$lC*SFOy`7{llq2X7 z@nhH4z;mGdK@a7QkUcoo8O}ZKcw$}leXiZC;-mW{lenAyMsH5OUFa|96Ujwh4TQ#G zclw7#29|lNdvT7oEp@%VSKQ=kaG{&IFy{k#A~}+^|<VOH)XO7wMQaIYEL_{e-C{n0&rpyOAHL3X&< zmAwvD@nI`6}KRE#q&0 zzQ$%w-WR8mkcHRs4;W~a0Hd|$px;@*o z+Rfa6fH%33!%9rRUN7T=cg8HPzF-{$+YK{->jD6~Eu#79(W7W&4rWnKwMsSXWXn*B%9i^9j6 zzJDE#n=t_+KbPPA99dMeY0iUQh5UY*-;(zowf5U?mTB^6SKr(Afy;C(QGa)Si&{eU z^OMm*;kTUE*JEWTH)g$92O^&?pKruq^L;pL59gC7I=i`d;P>(y4 Hg?#@6OkJ(; literal 0 HcmV?d00001 diff --git a/AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/ru-RU/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/ru-RU/Add-AppDevPackage.psd1 new file mode 100644 index 0000000000000000000000000000000000000000..d1e8dd61ad3f94e9612368d905ba074e062ad239 GIT binary patch literal 10342 zcmdU#?{AaW702%jzv-mCnV2eV8g)TxH)#YXB*byB6FV^w#SkQhs!4r=l0c&}!{V^6 ztNO2R`+n}%x6iL@hcd!8MSkq(@%6dqe9!N5^RIv24DB!pufuV89$tmB@Q-jBPQoXl z6E?$bUAJ^y)BCDEwRP=;Ubv%cJ3I-Gbp3sJp!Yw8Kj=3+zoYNh!%FDt^NL>U`pv4= zeG-PEdlGKx{f++iwa?!~GOEwXUzfLw%NfdbZjcw02uPar%Ss`*F@!8K*Lp>srsRc3XR`yOCBq?C8E1_peeJ zi;rVT_`Ptx5H}~`U3hDUP0@SU>bCZ^%b>NUyURIl?p4)wS%xwa%XeEO+1_0DXW@nP zjV&Wzd5;`ULt(TlEg@M~h;{V2iWpYE%&ofHIx0~f3Xi|alg?z#r!{<@>iKcRYbLy2=m)I_#7?4M^Q(z z?g-0=QCf6a#v2KV09EwzxaE2IT(s+U*W48@M#9;MZ%5sF=PK0#LwFuX3vQx^jnw7J z?J$^2_m!;TT)MGUQE~O`u2{l?afhoiV|BKpVy;zR*ZLnBaG(>}XeZH+*keFlmJ z;Mr3QVV&doV2(#sH^wNZ9ZtRU+l%bs+HeIpAP*vgV*&aG9s$hJAD(ER7(Zy*|=H;Ra@#T^brnSHz3 z5gggQ7p(%+iR8IQvlr;B&*^N)9>Bh%C)nu_O4|9Gm+ZXGdL)Su62YnP4PXF6B2+#f}TaUCWUVY&#zo|2j$&#c;aK zV_{DBO(vO2U(fYUj3-B2kDc9W^dT}3)>mXwESq|*&MnU@i*u`E3ib6+e`p@NA*$QE zo#__&VV!UH)8xFf*s0PpTu6pIx6Le)<93m4+fw(X)2*o8952Oe+1y7` zhmZk5v+PZHgE4lE;Qrsf<(|FpB35`BU<>+8mY8a~i4fk15$u6JVNpdU#&7ULyoX97 z=_pMFayz(YN!d6>K;$7;pzC}3oRiJfO%X3xSx51aG&t4Vp^9X^kA6Qaizy16fGv32 z6I~e>y|{aX6r~D$dHyaKFVb%ggFK?>ip*rr{xhA`QLduzW6r9e4^@I{fY>Ydg>y=69e+q)7AK2uIBnU7LnT- z{Hh((UdfYF7g%Zl_IbQx3H8)c9 zJz3yQ&77KYA+r=upqZICXHg$h(YPPT`8d7|8F`$-NfX9{`+XSO@B=DQ~f z*krP^XR-gJUi37BZl5~L{Q^Dc;HMgfF5(BBAN)9WZckL} z9Vc0xF1R{9hO0$gQJUx5v&r7Qm~*br^Q-$A>Sm@>n?k|!ghTbnu0p$UhD!u)>H+;w zg?Y|Qh9Rn=A>Q5j(3_LN-N%ijD|qo7g*qYCYVOb6FY%nJ93CD-N*#SBGX7drUF|c~ zW{0%aS%WUD=oQ$j%n5t(tj_Zw<_>B)ehs?Nbrp&pus^yRD(i`6FMD$u^;t18rhb?B z;GT~YEq)&bY2@BszUl+CyFyY<0P`lmwlq? z@z}a!W1hR}^eWAqnGtv7&GxwDrOl^3q5fFwWSP>Hqp_=!Pb(D61?N3=x&?(ap{(O) z?&+EA4ODEY9&kJ<&z;E%`?AuPdimt&X}p_8oAo*EjYjk>V?7RsLi(x^hVx;}3)GpM zS0-Bqp=CJLk-ny1I>Qk=i`iJUl5g(k8Cia}a%@VKakYZO2hoQk^x{g78F)E%GY3Pu zroB^9qlcOFbu91mM3)nC<^fY_llg9a9ri4sh%xiTfAM#VSlSa>?J8gVB=Ih&vl zR>EuYgsp~`x(|4*`sGx!BX=`ClNxKz{q~AD##-_|#nZA+y}Kssu`qw8R?P={(hc() zPt5WYo1)eSTj%#?4CD;XQPZ^(x^u?IJDSygiqxt4s&e~2Go&h?%Vyo>zUxEPg#0H( zT?0OMzifi|KC*gN$c#40Nu^YrKQB8`KzhdmlV2 zo-aOICsUGF9rrkkE&ABRRr1$d1hs#qd`;&>_uK5BsuJ~tZ0g_Y|IdOv*elWaW1lv2 Rl6!UM%|wPT^}lw!{~OjLRA>MI literal 0 HcmV?d00001 diff --git a/AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/tr-TR/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/tr-TR/Add-AppDevPackage.psd1 new file mode 100644 index 0000000000000000000000000000000000000000..d7dcbde75a94915b6970dd8e6d2030e38489e3fc GIT binary patch literal 9608 zcmd^_>uy`e6@`aCQ=rd~0|%&EppnhQLD~R9YD=55h+Ho!)Qg zdZ2rTTK8UfsC`G_L;bzfzir8Rqdg8J`CP9j`n;jNufk50GjFZ_lVsNAvG$LWw+O?*G_HOmD<-mTtbHGA zwLfh}PrTN5bLsXf+UsAgqntar@s!) z!m(B!MNCv$c_feCtYce38R5FtO&OPKTCpWPh%*|VMciUbedpa`1?XDsS+IDii|Fur zsC|ijea}bQ<^92M@LC=j4!F*>Yu1^lg0;3JaP>sL&ZEx8BG|{b7g6q12*eU(&-A(( z*OQI=1MFm9bgE)BX3~Up!$GBYXfn~Y&|Xtz5dV<)G_C>h<9HWxyFIrl+}1s6e=Wj0 zVG64zlDy9DWu!O5SGsdgcb-H{9|%9hVfDTbW#`|u9-EIEUfI?6htW$jS$`aNUEfo$ zBz=EypndVxIO>wTC&n3cd9B-D-FkHSuuEp${*mmo+;UI*4#Xvmi85@^^e2(Oj+o19 zlXcyazSOSM7*h~Yq9oay(^nPFL;e4nf zo^!SuTV&a#@H$frC)yW&ISYT&WxSF@AfWs1Y!{3~7QTyB3&hNHAKF~YuT^BXN}u+X zukcqDvxq80E}eX@J(?`Zh1xvv%sIlLvna=mN1>|vQH zcc6yM^$wP^eIu>Fe?|dbTHj9C&G+Ip;y#w&(GCkF`iGgWW3AZGXS#`d z`t-GAfv-aa1YW{pR0>#gqMUJrrg7CY z_EFOq`4S;NjgQcs*wU||A*h8XQ*2!un*PEga5;JEtgM7hIzVggUJu50ADpU<866q0 zPVyuyoiKzKIl~Z3qOdPtrTX?l`+u$9r|Q8@<2qQ=y(pQIq@>QY3U9SD){rZ(DR}Mo zw=szP+vqg068=4t7Di3Io(ue`M0@P7Zka%q!pFNXp zaNeQfz)98l@>t*65;&go9327GyTqz??c=ff=;5CP@4PD9YvlD zn+BgNsYz$T#XO#v=hCs%#x=k6UBcK%`^;kBk`P*#-jy9?_M$=A+t<%Ub)P(v-|+|b z!znxsfcFH$oU#_O z0c>Zh%#2{#ILB^cM3=yGS z*TNcABF87KAvzaYeIRpRRcEUeYC8%a_U6Rv0P1UPW-DYgWy5?D~ZBy#U$@< z&eU0W_513C>EE%RDtxNNvl*nHEN-6LOqj3(uv@_jGdZ^XtBh8vp_nxO^?J1G{bt(^nO{@o{%)s8r zC-}JCyL2Pux$d7upUz`XU1rIyb}px5>wD&QDns@frxf>a^!#bkUG~7q#;3ArOXq`| ztjW3E6))m6SC*2^cnKW1Cm=?gPfO{r&m=};r1>iS>s~|?7`a&!W;yh*AexyM*n}hU zB#@^X)Je}oSjAbR)QK~XpGATDN$A{)|Lw?wduw|Q4|9SsLSUVIhQDo(zLdq~WciE8<5fr# ztJDi6Zu_S^3X?N6y$~vhb9=2VzN@{>N{(|nop~>xT;TjB_UJ0XA1FN(_B~Qn(eZ7K6pGWC^9WS-+C^9jqL8lW< zN5S`cdi8rb&pG}(9IUe8sr03~;el~awcUyyIgGx8shTH{w#U=#iPiYr9ODTBlF*2r z&ZpI8%oE$C-lEj8eb^*TMw6Umt`C$Rm~uYOCozpINe zUxQC~3i#5@35L_OVq5R&#wtx?^U0fv>S->v_#{KsdnK%TCV6{LB({b9kHROqKGkyx z{wGGsh-E}m9LgTA-#b4n&fAg2uN3>ThWz}!#2j$cn91~erTJ{Oo`WU!%UIkbCR$!hCMrE2FVwji1Fggd@GDX*WiLFZT%CO=i^eyW(KKkh)O&pc&-_o+^)V?$Q6 z?@Olu-vJ+`XM}z>=@}M156o`f@U$~kWjG~2OTjK|xQ%CoJVm>`oP@ROPYFT6UHxw) G{{9E_2jWHm literal 0 HcmV?d00001 diff --git a/AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/zh-CN/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/zh-CN/Add-AppDevPackage.psd1 new file mode 100644 index 0000000000000000000000000000000000000000..d9eae7dba1d9bbeed355e3fc261a4378cd03ff07 GIT binary patch literal 4998 zcmc&&ZERE589t;7Q$~WeKS=F{xLP%Eqb4yeh+!!!5CTJx* zNLnY^tc=Kvh$#iMFIuUcBJB^qwrW2rwG#ZPKp^!)RkaONWs{J)NDPGulx5Fzk8hoO zeF@#vX|nFQzP{%?=Xt;1G$YoZm`ckwL)oGzi`J7>0me+Fmvs0v*36EQzv^D21nfNOkwvH{+MW)pFJNsUxRM-qNgw zYs;w6oHLay+@1F1owKK;EtOgmg+7NMv(l$GAB8k`d~$ki_n;AtQLDuAhu!i z{Kxw3;6q8P@!gTwTxURUk~RKMW_Fx>v9r$np1gLhn4gZF3|+t2cfNl4j$UW_qFj?q z+la;dgP!+CYbO?sj`(bk89#J7nZB0n4%YZ-6JC1n-0|_CFLx%EOxsc{8uiPwJqP1+ zVJ)0IpAAJOig_Ec#y>CD$;Mb~{F!aZ74*Bs21x*yQxz z3ZEBV_~Likz8zSM2^EL*EXE4+Wfo{eP+nM(^`Pts*Ds3;lhf1=Wur8dWOY21(cSUZ zjs2Riw%RvWNAvblGFEu>jKWxh1t{Iip*r)8v9-fTBA8-@ax`rCF8>=;OBM~^2@9{$v5S?pUb{9(UrvL*nDrEfCf?HrjTxmZSE3xgGI0<TEos912|1BpcmoD(jLfa3ZXIHg?M?aQ5&g|VS=yXICbP|S1we`W`7eqY8Os@tPIs#($&Uk%Sa@R#Hx zv{;D&P0;_pqp6;Aqt+l>Qg!AJjg^&+v29D+WmOJlmk(zCe3<_BnOrl%o^>mFR<|A7 z#Ry_gbuf?TVs~TIN`=wgWB%|aX1 z(wUKBe%{z*o{20P_g<^<|M=*yOwQtazO7%rUt0e~PqHgsXVy+cCLX>rFInl8)ZCld z>f7N5J+{}nrLuM5>~1?CXBN4OS%#UcqGRP-wpDFZ<#P>kr`~byQ9B#}VjFUz6RSZk zO$038nY?&YM^99hQEB^3ISLOV7EhsuW$_!&R~0NxkQvcf1zF>-#@?FsitJoU z9R$xh#E19R3- zRr#H{m;BieUpamE*hl*5m)!WaH`|fz+|RoTt2#_fqAL$^<5Xt|o@(8@tCQQ~`VVgw z>;h|atrw@o9xYKt ztG^#wbDaLJa`XRRF7@Ayv*vrt(P%DBP!9X#lR^FRz5G8W7j!b3FWH;|GM=XAF6h2!GX1rqtjd*>U@@;wZaf?P P@6K*KvuweCQM~^fBZ4Ba literal 0 HcmV?d00001 diff --git a/AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/zh-TW/Add-AppDevPackage.psd1 b/AppPackages/KiwixWebApp_0.9.9991.0_Test/Add-AppDevPackage.resources/zh-TW/Add-AppDevPackage.psd1 new file mode 100644 index 0000000000000000000000000000000000000000..249e54ecb8e171245087c9883f28c02cf81936e7 GIT binary patch literal 5180 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 Bd}06q literal 0 HcmV?d00001 diff --git a/AppPackages/KiwixWebApp_0.9.9991.0_Test/KiwixWebApp_0.9.9991.0_AnyCPU.appxbundle.REMOVED.git-id b/AppPackages/KiwixWebApp_0.9.9991.0_Test/KiwixWebApp_0.9.9991.0_AnyCPU.appxbundle.REMOVED.git-id new file mode 100644 index 00000000..bdc9cec0 --- /dev/null +++ b/AppPackages/KiwixWebApp_0.9.9991.0_Test/KiwixWebApp_0.9.9991.0_AnyCPU.appxbundle.REMOVED.git-id @@ -0,0 +1 @@ +dcac11034a75d10a2632f8a6727225205f4262cd \ No newline at end of file diff --git a/AppPackages/KiwixWebApp_0.9.9991.0_Test/KiwixWebApp_0.9.9991.0_AnyCPU.cer b/AppPackages/KiwixWebApp_0.9.9991.0_Test/KiwixWebApp_0.9.9991.0_AnyCPU.cer new file mode 100644 index 0000000000000000000000000000000000000000..8cc1cd014521f6d9486b4cd033939479499612fe GIT binary patch literal 1309 zcmXqLVwE&#Vqsjs%*4pVB)~ms)26(iYC;$POP`n5eYM4amyJ`a&72|iT&M=SvEX9zP|<2rByd9m|K$i``(t$4HrD;S!{h(Sv$Kv;`HH!khVQ4 z+p>kFkLp;&*{2!jtQOui+18ffMtPA)+vk_kdven>Wd6syP5QX`kIGs$O$+}S@2sDn z7T>M5CSrH^My3~Y?B*m)^L@`I;PxbjAwWs8$uH~VMa%T7$`++_tQ!j_>Fag>;JLNc zXZpFaXNjkorM^qub-41$UO-bSsc+A5-@a!KZBk(g z=c!%F#LURRxVVXNKQKgg8^{C0SXP-u!a%G+Bz-Qw0w>RzE~}?aZbeCdKAxHI)WJX& zq=1h_j77wSgH34BAz3kn=LX_@(vusCc3)vK-~&nXGcx{XVPR%sZvZDRSydJu11>fW zZ8k<$R(57)gItgzd6qPT6a#|=dJA;gv@%Lc3as??lZ$eUQIeZ}aYmw%ZbqVRa+=wk&&gwpvpi6#y4PWlYn|8Ke@O7#aRYHa8*ogZZPjAg0fXH zib8!@wgTlUP^Nd74E~na9^7fLQf;5mf8LllDZyL&Y=y*4k|VAD@8gNl4`F4z)8eFfV8wTq z&+n40UhI3@TD<+$FT+*u_+HMu#^F=i{O`$3n~T{qP6vMft>k-!<6hO1)NN5q6<=3< zJtkx)ue{OTA<^#+$HAiM*@a6N&$(`KP&Gzz=ACV)VvLtPE{fD=xK*C7GI!~d;FE;{ z2dZXx|9^kMeX|Qg=^N4Q3-&*6{}H!ihts-60T&OvHfM9Zed0x&StLtz?#6fghcjnq zmBmP=-zjsS&u*X==x^$`C`x~Q# - + Kiwix JS