7-ZipSetupManager.psm1
<#
=========================================================================== Created with: SAPIEN Technologies, Inc., PowerShell Studio 2023 v5.8.219 Created on: 26.3.2023. 00:58 Created by: chxus Organization: CHXOFT Filename: 7-ZipSetupManager.psm1 ------------------------------------------------------------------------- Module Name: 7-ZipSetupManager =========================================================================== #> <# .EXTERNALHELP 7-ZipSetupManager.psm1-Help.xml #> function Get-7ZipDownloadLink { [CmdletBinding()] param ( [Parameter(Mandatory = $false, Position = 1, HelpMessage = 'Get 32bit installer.')] [switch]$x86, [Parameter(Mandatory = $false, Position = 2)] [switch]$GetFileNameOnly ) $7zipDownloadWebpage = (Invoke-WebRequest https://7-zip.org/download.html).AllElements if (-not ($x86)) { $setup = $7zipDownloadWebpage.href -like "*7z*-x64.exe" if ($setup.Count -gt 1) { $setup = $setup.Split([Environment]::NewLine) | Select-Object -First 1 } } else { $setup = $7zipDownloadWebpage.href -like "*7z*.exe" -cnotlike "*x64*" if ($setup.Count -gt 1) { $setup = $setup.Split([Environment]::NewLine) | Select-Object -First 1 } } $name = $setup.Split('/') $name = $name[1] $DownloadLink = "https://7-zip.org/$setup" if ($GetFileNameOnly) { return $name } else { return $DownloadLink } } <# .EXTERNALHELP 7-ZipSetupManager.psm1-Help.xml #> function Get-7ZipInstallationPath { [CmdletBinding()] param ( [switch]$GetVersionOnly, [switch]$Property, [switch]$CheckAll ) $GetPath = Microsoft.PowerShell.Management\Get-ChildItem HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\7-Zip* if (-not ($GetPath)) { $GetPath = Microsoft.PowerShell.Management\Get-ChildItem HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\7-Zip* } if ($GetPath) { $GetPath = Microsoft.PowerShell.Management\Get-ItemProperty $GetPath.PsPath $InstallPath = $GetPath.InstallLocation $Version = $GetPath.DisplayVersion if ($CheckAll) { if ($GetPath.DisplayName -like '*x64*') { $Pathx86 = Microsoft.PowerShell.Management\Get-ChildItem HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\7-Zip* if ($Pathx86) { $Pathx86 = Microsoft.PowerShell.Management\Get-ItemProperty $Pathx86.PsPath $InstallPathx86 = $Pathx86.InstallLocation $InstallPath = $InstallPath + "`n" + $InstallPathx86 } } } if ($Property) { return $GetPath } elseif ($GetVersionOnly) { return $Version } else { return $InstallPath } } else { return $false } } <# .EXTERNALHELP 7-ZipSetupManager.psm1-Help.xml #> function Get-7ZipSetup { [CmdletBinding()] param ( [Parameter(Mandatory = $false, Position = 1, HelpMessage = 'Enter valid path to download.', HelpMessageBaseName = 'Download path')] [AllowEmptyString()] [string]$Path, [Parameter(Position = 2)] [switch]$x86, [Parameter(Position = 3)] [switch]$AndStartInstallation, [Parameter(Mandatory = $false, Position = 4, DontShow = $true)] [switch]$Silent ) # Get-7ZipDownloadLink if ($x86) { $DownloadLink = Get-7ZipDownloadLink -x86 $FileName = Get-7ZipDownloadLink -GetFileNameOnly } else { $DownloadLink = Get-7ZipDownloadLink $FileName = Get-7ZipDownloadLink -GetFileNameOnly } $DownloadPath = (Microsoft.PowerShell.Management\Get-Location).Path + "\$FileName" if ($path) { if (Microsoft.PowerShell.Management\Resolve-Path -Path "$Path" -ErrorAction SilentlyContinue) { $DownloadPath = $Path + $FileName } else { return 'Path does not exist.' } } Microsoft.PowerShell.Utility\Invoke-WebRequest -Uri $DownloadLink -OutFile $DownloadPath -ErrorAction Stop if ($AndStartInstallation) { if (-not ($Silent)) { Microsoft.PowerShell.Management\Start-Process -FilePath $DownloadPath -Wait } else { Microsoft.PowerShell.Management\Start-Process -FilePath $DownloadPath -ArgumentList "/S" -Wait } return 'Installation complete.' } else { return "Downloaded to: $DownloadPath" } } <# .EXTERNALHELP 7-ZipSetupManager.psm1-Help.xml #> function Uninstall-7Zip { [CmdletBinding()] param ( [switch]$Silent ) # Get-7ZipInstallationPath $path = Get-7ZipInstallationPath -CheckAll if (-not ($path)) { return '7-Zip is not installed.' } else { $check = $path | Microsoft.PowerShell.Utility\Measure-Object -Line if ($check.Lines -eq 2) { Microsoft.PowerShell.Utility\Write-Warning 'Found both 64bit and 32bit installations, removing 64bit first, to remove the 32bit also run this command again.' } $uninstall = Get-7ZipInstallationPath -Property $uninstall = $uninstall.UninstallString if ($Silent) { Microsoft.PowerShell.Management\Start-Process -FilePath $uninstall -ArgumentList "/S" -Wait -ErrorAction Stop } else { Microsoft.PowerShell.Management\Start-Process -FilePath $uninstall -Wait -ErrorAction Stop } $path = Get-7ZipInstallationPath -CheckAll if (-not ($path)) { return '7-Zip for Windows uninstalled completely.' } else { $check = $path | Microsoft.PowerShell.Utility\Measure-Object -Line if ($check.Lines -eq 2) { return 'Uninstall canceled or error occured, both versions present 64 and 32 bit.' } else { return 'Uninstall canceled or there is 32bit version left to uninstall.' } } } } # SIG # Begin signature block # MIIbRwYJKoZIhvcNAQcCoIIbODCCGzQCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCB4Bw+FFzxoNNs0 # aCPZma7ILY8+jg8+dfAyCSuY1N2SDaCCFYYwggMyMIICGqADAgECAhCuC7oCPbvl # rEJ4JzUZnfD8MA0GCSqGSIb3DQEBCwUAMBoxGDAWBgNVBAMTD0NNYWtlIFRlc3Qg # Q2VydDAgFw0xNDAxMDEwNzAwMDBaGA8yMTAwMDEwMTA3MDAwMFowGjEYMBYGA1UE # AxMPQ01ha2UgVGVzdCBDZXJ0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC # AQEAy/GcWKj93HO+1SylOUMgS6KhJLQrTvn2Qscmm6XzRcZhUTxPWMJ/q6YvN3uY # m7qIvfQw6nBPfCvZIEjkmGECRZPdCZc0v1KLhvhLYSxIpxHpYIFW9+mxEj0fJEOL # PI1UeVgQnZCutFBPNEjCLhiR2v+pnF03tbuFO9P2q2ksYUhkapw5Y7Z7nOQVKgNC # np5bDj4ONVIw4SBcqDukQZzcOHc0IEHleCP9R0BuBdT6LWqovYWD5F0AVPnmm7G1 # DpYKzAl+IwS2eCBGH2Q5H2UODEXa24R5XEWFl70CODl+wPzvpkID2UXRxrKpnxk/ # pUOhPq7Ia2jjepEU+aX5lKZlzQIDAQABo3IwcDAMBgNVHRMBAf8EAjAAMBMGA1Ud # JQQMMAoGCCsGAQUFBwMDMEsGA1UdAQREMEKAEHT4UyF9dmOb2B+yY+KJZQOhHDAa # MRgwFgYDVQQDEw9DTWFrZSBUZXN0IENlcnSCEK4LugI9u+WsQngnNRmd8PwwDQYJ # KoZIhvcNAQELBQADggEBADf+AAZY1XexFIR6aLecXEFk2J9UjmL5WD2m6VNpgJd4 # 1SFesljqNTwu6qpOJ16qrK9ikHjbTpQBtxOEVrZz3XlbrgbC6jvDNegkm2eOD8NQ # toEozzgu/Aj8cGSDK7vXv314ViZ5j10Dl+chKwhr7sipLQO317/eaWOTmAkvHQ+n # tvVi81K87UlYtiPtKZz6haNqfRYM9DkJM5lzLl/wyyXf1UAP+uQSEHfizwYwUUNe # MCfaGMuvYZqecACaETQBWCaKfe7/cwDcOiO0WEz9e4utvSVxgZfoICb1BXFmF1Fc # xN6Z4mq4RxrdcRswl37IHYaU2p+oebwf7xGPHqXebkYwggWDMIIDa6ADAgECAg5F # 5rsDgzPDhWVI5v9FUTANBgkqhkiG9w0BAQwFADBMMSAwHgYDVQQLExdHbG9iYWxT # aWduIFJvb3QgQ0EgLSBSNjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMK # R2xvYmFsU2lnbjAeFw0xNDEyMTAwMDAwMDBaFw0zNDEyMTAwMDAwMDBaMEwxIDAe # BgNVBAsTF0dsb2JhbFNpZ24gUm9vdCBDQSAtIFI2MRMwEQYDVQQKEwpHbG9iYWxT # aWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A # MIICCgKCAgEAlQfoc8pm+ewUyns89w0I8bRFCyyCtEjG61s8roO4QZIzFKRvf+kq # zMawiGvFtonRxrL/FM5RFCHsSt0bWsbWh+5NOhUG7WRmC5KAykTec5RO86eJf094 # YwjIElBtQmYvTbl5KE1SGooagLcZgQ5+xIq8ZEwhHENo1z08isWyZtWQmrcxBsW+ # 4m0yBqYe+bnrqqO4v76CY1DQ8BiJ3+QPefXqoh8q0nAue+e8k7ttU+JIfIwQBzj/ # ZrJ3YX7g6ow8qrSk9vOVShIHbf2MsonP0KBhd8hYdLDUIzr3XTrKotudCd5dRC2Q # 8YHNV5L6frxQBGM032uTGL5rNrI55KwkNrfw77YcE1eTtt6y+OKFt3OiuDWqRfLg # nTahb1SK8XJWbi6IxVFCRBWU7qPFOJabTk5aC0fzBjZJdzC8cTflpuwhCHX85mEW # P3fV2ZGXhAps1AJNdMAU7f05+4PyXhShBLAL6f7uj+FuC7IIs2FmCWqxBjplllnA # 8DX9ydoojRoRh3CBCqiadR2eOoYFAJ7bgNYl+dwFnidZTHY5W+r5paHYgw/R/98w # EfmFzzNI9cptZBQselhP00sIScWVZBpjDnk99bOMylitnEJFeW4OhxlcVLFltr+M # m9wT6Q1vuC7cZ27JixG1hBSKABlwg3mRl5HUGie/Nx4yB9gUYzwoTK8CAwEAAaNj # MGEwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFK5s # BaOTE+Ki5+LXHNbH8H/IZ1OgMB8GA1UdIwQYMBaAFK5sBaOTE+Ki5+LXHNbH8H/I # Z1OgMA0GCSqGSIb3DQEBDAUAA4ICAQCDJe3o0f2VUs2ewASgkWnmXNCE3tytok/o # R3jWZZipW6g8h3wCitFutxZz5l/AVJjVdL7BzeIRka0jGD3d4XJElrSVXsB7jpl4 # FkMTVlezorM7tXfcQHKso+ubNT6xCCGh58RDN3kyvrXnnCxMvEMpmY4w06wh4OMd # +tgHM3ZUACIquU0gLnBo2uVT/INc053y/0QMRGby0uO9RgAabQK6JV2NoTFR3VRG # HE3bmZbvGhwEXKYV73jgef5d2z6qTFX9mhWpb+Gm+99wMOnD7kJG7cKTBYn6fWN7 # P9BxgXwA6JiuDng0wyX7rwqfIGvdOxOPEoziQRpIenOgd2nHtlx/gsge/lgbKCuo # bK1ebcAF0nu364D+JTf+AptorEJdw+71zNzwUHXSNmmc5nsE324GabbeCglIWYfr # exRgemSqaUPvkcdM7BjdbO9TLYyZ4V7ycj7PVMi9Z+ykD0xF/9O5MCMHTI8Qv4aW # 2ZlatJlXHKTMuxWJU7osBQ/kxJ4ZsRg01Uyduu33H68klQR4qAO77oHl2l98i0qh # kHQlp7M+S8gsVr3HyO844lyS8Hn3nIS6dC1hASB+ftHyTwdZX4stQ1LrRgyU4fVm # R3l31VRbH60kN8tFWk6gREjI2LCZxRWECfbWSUnAZbjmGnFuoKjxguhFPmzWAtcK # Z4MFWsmkEDCCBlkwggRBoAMCAQICDQHsHJJA3v0uQF18R3QwDQYJKoZIhvcNAQEM # BQAwTDEgMB4GA1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjYxEzARBgNVBAoT # Ckdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMTgwNjIwMDAwMDAw # WhcNMzQxMjEwMDAwMDAwWjBbMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFs # U2lnbiBudi1zYTExMC8GA1UEAxMoR2xvYmFsU2lnbiBUaW1lc3RhbXBpbmcgQ0Eg # LSBTSEEzODQgLSBHNDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAPAC # 4jAj+uAb4Zp0s691g1+pR1LHYTpjfDkjeW10/DHkdBIZlvrOJ2JbrgeKJ+5Xo8Q1 # 7bM0x6zDDOuAZm3RKErBLLu5cPJyroz3mVpddq6/RKh8QSSOj7rFT/82QaunLf14 # TkOI/pMZF9nuMc+8ijtuasSI8O6X9tzzGKBLmRwOh6cm4YjJoOWZ4p70nEw/XVvs # tu/SZc9FC1Q9sVRTB4uZbrhUmYqoMZI78np9/A5Y34Fq4bBsHmWCKtQhx5T+QpY7 # 8Quxf39GmA6HPXpl69FWqS69+1g9tYX6U5lNW3TtckuiDYI3GQzQq+pawe8P1Zm5 # P/RPNfGcD9M3E1LZJTTtlu/4Z+oIvo9Jev+QsdT3KRXX+Q1d1odDHnTEcCi0gHu9 # Kpu7hOEOrG8NubX2bVb+ih0JPiQOZybH/LINoJSwspTMe+Zn/qZYstTYQRLBVf1u # kcW7sUwIS57UQgZvGxjVNupkrs799QXm4mbQDgUhrLERBiMZ5PsFNETqCK6dSWcR # i4LlrVqGp2b9MwMB3pkl+XFu6ZxdAkxgPM8CjwH9cu6S8acS3kISTeypJuV3AqwO # VwwJ0WGeJoj8yLJN22TwRZ+6wT9Uo9h2ApVsao3KIlz2DATjKfpLsBzTN3SE2R1m # qzRzjx59fF6W1j0ZsJfqjFCRba9Xhn4QNx1rGhTfAgMBAAGjggEpMIIBJTAOBgNV # HQ8BAf8EBAMCAYYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQU6hbGaefj # y1dFOTOk8EC+0MO9ZZYwHwYDVR0jBBgwFoAUrmwFo5MT4qLn4tcc1sfwf8hnU6Aw # PgYIKwYBBQUHAQEEMjAwMC4GCCsGAQUFBzABhiJodHRwOi8vb2NzcDIuZ2xvYmFs # c2lnbi5jb20vcm9vdHI2MDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwuZ2xv # YmFsc2lnbi5jb20vcm9vdC1yNi5jcmwwRwYDVR0gBEAwPjA8BgRVHSAAMDQwMgYI # KwYBBQUHAgEWJmh0dHBzOi8vd3d3Lmdsb2JhbHNpZ24uY29tL3JlcG9zaXRvcnkv # MA0GCSqGSIb3DQEBDAUAA4ICAQB/4ojZV2crQl+BpwkLusS7KBhW1ky/2xsHcMb7 # CwmtADpgMx85xhZrGUBJJQge5Jv31qQNjx6W8oaiF95Bv0/hvKvN7sAjjMaF/ksV # JPkYROwfwqSs0LLP7MJWZR29f/begsi3n2HTtUZImJcCZ3oWlUrbYsbQswLMNEhF # Vd3s6UqfXhTtchBxdnDSD5bz6jdXlJEYr9yNmTgZWMKpoX6ibhUm6rT5fyrn50hk # aS/SmqFy9vckS3RafXKGNbMCVx+LnPy7rEze+t5TTIP9ErG2SVVPdZ2sb0rILmq5 # yojDEjBOsghzn16h1pnO6X1LlizMFmsYzeRZN4YJLOJF1rLNboJ1pdqNHrdbL4gu # PX3x8pEwBZzOe3ygxayvUQbwEccdMMVRVmDofJU9IuPVCiRTJ5eA+kiJJyx54jzl # mx7jqoSCiT7ASvUh/mIQ7R0w/PbM6kgnfIt1Qn9ry/Ola5UfBFg0ContglDk0Xuo # yea+SKorVdmNtyUgDhtRoNRjqoPqbHJhSsn6Q8TGV8Wdtjywi7C5HDHvve8U2BRA # bCAdwi3oC8aNbYy2ce1SIf4+9p+fORqurNIveiCx9KyqHeItFJ36lmodxjzK89kc # v1NNpEdZfJXEQ0H5JeIsEH6B+Q2Up33ytQn12GByQFCVINRDRL76oJXnIFm2eMak # aqoimzCCBmgwggRQoAMCAQICEAFIkD3CirynoRlNDBxXuCkwDQYJKoZIhvcNAQEL # BQAwWzELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExMTAv # BgNVBAMTKEdsb2JhbFNpZ24gVGltZXN0YW1waW5nIENBIC0gU0hBMzg0IC0gRzQw # HhcNMjIwNDA2MDc0MTU4WhcNMzMwNTA4MDc0MTU4WjBjMQswCQYDVQQGEwJCRTEZ # MBcGA1UECgwQR2xvYmFsU2lnbiBudi1zYTE5MDcGA1UEAwwwR2xvYmFsc2lnbiBU # U0EgZm9yIE1TIEF1dGhlbnRpY29kZSBBZHZhbmNlZCAtIEc0MIIBojANBgkqhkiG # 9w0BAQEFAAOCAY8AMIIBigKCAYEAwsncA7YbUPoqDeicpCHbKKcd9YC1EnQj/l4v # wxpdlrIgGRlQX3YjJjXGIeyU77WiOsWQgZsh7wsnpOMXZDvak9RWLzzXWPltrMAv # kHgjScD4wY9wE9Rr3yaIWnZ7SPfhpKbvCxrzJVQPgJ4jEhIT0bD3AuMrDf9APgBC # Q94a70z0h6nynjzQBufiY9LrTFvdXViU0+WlOSiqB152IzD8/H+YDcVlbRvVdEU6 # RrCiFnXeosIqcHy2drzZG666XZz2h5XOqqjitaOxk25ApZsQiHYWTjSh/J7x4RpU # 0cgkV5R2rcLH7KOjlnXixihrAgXoS7m14FIreAGMKjEsTOgF5W+fD4QmLmhs+stN # GXwYwf9qGqnLvqN1+OnIGLLM3S9BQCAcz4gLF8mwikPL4muTUfERvkK8+FHy2gAC # vggYKAUnxNw7XXcpHhnUQSpmfbRSc1xCpZDTjcWjqjfOcwGUJBlCQ9GUj0t+3ctt # vBtOe/mqCyJLSYBJcBstT940YD69AgMBAAGjggGeMIIBmjAOBgNVHQ8BAf8EBAMC # B4AwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgwHQYDVR0OBBYEFFtre/RwdAjBDSrI # 7/HEuUDSSsb9MEwGA1UdIARFMEMwQQYJKwYBBAGgMgEeMDQwMgYIKwYBBQUHAgEW # Jmh0dHBzOi8vd3d3Lmdsb2JhbHNpZ24uY29tL3JlcG9zaXRvcnkvMAwGA1UdEwEB # /wQCMAAwgZAGCCsGAQUFBwEBBIGDMIGAMDkGCCsGAQUFBzABhi1odHRwOi8vb2Nz # cC5nbG9iYWxzaWduLmNvbS9jYS9nc3RzYWNhc2hhMzg0ZzQwQwYIKwYBBQUHMAKG # N2h0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5jb20vY2FjZXJ0L2dzdHNhY2FzaGEz # ODRnNC5jcnQwHwYDVR0jBBgwFoAU6hbGaefjy1dFOTOk8EC+0MO9ZZYwQQYDVR0f # BDowODA2oDSgMoYwaHR0cDovL2NybC5nbG9iYWxzaWduLmNvbS9jYS9nc3RzYWNh # c2hhMzg0ZzQuY3JsMA0GCSqGSIb3DQEBCwUAA4ICAQAuaz6Pf7CwYNnxnYTclbbf # Xw2/JFHjGgaqVQTLYcHvZXGuC/2UJFcAx+T2DLwYlX0vGWpgM6a+0AhVVgS24/4e # u+UQdlQ7q1whXio1TUbLpky6BEBgYCzb0/ad3soyEAx4sLtWxQdLcLynD6tyvI3L # 6+7BTGvZ+pihdD7pqMh5fHZ3SP3P4/ANwenDkuAHDBMvP2t/NdnVt+5vfFjA8T8M # GbICo0lMnATD8LSXp+BNaiW6NBZiZsh4vGlzql9yojVYHibrvzIUqhJ66/SWa39y # rOqnOQgzATY+YSR+EZ0RHnYiVONAuy6GDHaeadLEHD2iC4yIBANU3ukbF/4sK57Z # 1lsiOPxkQIbNF3/hqZ+5v5JBqG8mavQPKLBAkZAvTrZ2ULxNI9l/T2uTKads59Aw # PqmTH8JQKznFsvhNJyTR/XbYvvmT9KlUCtV2WNE8nuoa6CTE+zbxL1nTksPsy2BS # HhxGJQj/ftmTrhSVqIaKBy5Ui3NMNxU4UFaH8U+uHI/JoWwvC/y7HG8tvaq262gj # 8O2UJxRjy6z0Z4osgdMUEhgBP4R6ruxHYD9oWJnJSsKhmRUFwq3eou/Xp1V8vIQb # TZS7jkqFRNmBPaqjJVVfpGvNNmwA+f9y3lrs/8mgQZYaQGqFkRyvdWOoy1oztZQz # frKND3O+h/yvOnMfeyDbcjGCBRcwggUTAgEBMC4wGjEYMBYGA1UEAxMPQ01ha2Ug # VGVzdCBDZXJ0AhCuC7oCPbvlrEJ4JzUZnfD8MA0GCWCGSAFlAwQCAQUAoEwwGQYJ # KoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwLwYJKoZIhvcNAQkEMSIEIPzv5yQ5PZW/ # lMMZ+4SxbboaB7c3xcIJCftE9XCIRTAqMA0GCSqGSIb3DQEBAQUABIIBALSnXm8g # 2bBiv3dKOLsPVcwF+X4MG8PFYxoXpmBM82gfn9i6xMfKeMtN9wzPRvn//+lJBwPB # 9C9zYdRdsxYAAOmW3iCsg8ygyfAg57Zc3JUhbDzFn2CdmKsgUQ+0KTOpSaPnhpOv # ycXDjF3TO3syDcaIZ23qsbyLCJfpvFGlilvHkHLa8qbPuPTNYeRTk/z4V2wcdQqX # wwgtZ06ADepqomUzqZq2m+BT8MjzUsIoZxFEfZjHER3rnY8S9sfeC0AZHaSFdj+D # Of8C4XTGFpZRonwmWq+lf7aDb9nT84yXbGie7086G/R0LJi6UnqVrDMmWDQ9F0GE # HTxrFP/JORi36VyhggNsMIIDaAYJKoZIhvcNAQkGMYIDWTCCA1UCAQEwbzBbMQsw # CQYDVQQGEwJCRTEZMBcGA1UEChMQR2xvYmFsU2lnbiBudi1zYTExMC8GA1UEAxMo # R2xvYmFsU2lnbiBUaW1lc3RhbXBpbmcgQ0EgLSBTSEEzODQgLSBHNAIQAUiQPcKK # vKehGU0MHFe4KTALBglghkgBZQMEAgGgggE9MBgGCSqGSIb3DQEJAzELBgkqhkiG # 9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTIzMDMyNjA5NDAxN1owKwYJKoZIhvcNAQk0 # MR4wHDALBglghkgBZQMEAgGhDQYJKoZIhvcNAQELBQAwLwYJKoZIhvcNAQkEMSIE # IBFsxtUHDCTMBMrAfNebv6zHf5/pDFeTf2yYpCHsjhEJMIGkBgsqhkiG9w0BCRAC # DDGBlDCBkTCBjjCBiwQUMQMOF2qkWS6rLIut6DKZ/LVYXc8wczBfpF0wWzELMAkG # A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExMTAvBgNVBAMTKEds # b2JhbFNpZ24gVGltZXN0YW1waW5nIENBIC0gU0hBMzg0IC0gRzQCEAFIkD3Ciryn # oRlNDBxXuCkwDQYJKoZIhvcNAQELBQAEggGAwPggAuo23t9o4yuVzN1nXALyh/CE # Z77gYI/UiP91luBfXNMyuIDso3moLwgzFIVmfmfZGMsI6Dl7WV6AgUvTGZlwIYcD # 3CZnvBRr7K39PzG+Y/XaQAmTcaaguy94oeSC4g4lT+QQcdiMgMpvjTmRaFbUNeR7 # 9o/hk8biwkfS1sBEFGZMOPKlOaEGAvJVcbLPp0mpMm5XSESaewsPniYEFbmy0XzY # 3ZJP8dcsrm4K+yovPHerfaf6RLH6cr5PMEe+PjYDZONAc8Nv1i+gfIh6MLECX+rB # k7+nOCImnrvDBBs/OzfnbnCFcaflInINpsUYuN1yGdOalBYpiXZOFfsiq1BCLtFE # AuDDLKFzh7u3xi/eBPCTVRUyFKI44ipqqpSpNW1H87iOFjhrLOpMR0y1PJwtcWox # QKZEpNZphxm8nZSuyIfSrMjlwQVb4UXotkoFiWs9qHVKdjiIRzziKF5nWIMyhsp7 # EuytGqm8XoH0pcQHwQc8ey5W7xDWLV7X1qhS # SIG # End signature block |