GDK/Installers/InstallGamingServicesBundle...

313 строки
17 KiB
PowerShell

[CmdletBinding()]
param
(
[Parameter(Mandatory = $false)]
[string]
$AppxPath,
[Parameter(Mandatory = $false)]
[string]
$AppxDepDirPath
)
$Error.Clear();
if (-not $AppxPath) {
$AppxPath = Join-Path $PSScriptRoot "GamingServices.appxbundle";
}
if (-not (test-path $AppxPath)) {
Write-Output "ERROR: Appx not found: $AppxPath";
exit 1;
}
if (-not $AppxDepDirPath) {
$AppxDepDirPath = (get-item $AppxPath).Directory.FullName;
}
$systemVolume = Get-AppxVolume | Where-Object -Property IsSystemVolume -eq $True | Select-Object -First 1;
if (-not $systemVolume) {
Write-Output "ERROR: System volume not found.";
exit 1;
}
Write-Output ("System volume found.`n{0}" -f ($systemVolume | Format-List | Out-String).trim());
$systemRoot = [System.IO.path]::GetPathRoot($systemVolume.PackageStorePath);
if (-not $systemRoot) {
Write-Output "ERROR: System root not found.";
exit 1;
}
Write-Output "System root found: $systemRoot";
$package = Get-AppxPackage -Name Microsoft.GamingServices* | Sort-Object -Property Version -Descending | Select-Object -First 1;
$isOldPackagePresent = $false;
if ($package) {
Write-Output ("Version {0} of {1} was found already installed on the PC.`n{2}" -f $package.Version, $package.Name, ($package | Format-List | Out-String).trim());
$isOldPackagePresent = (([Version]$package.Version -lt [Version]'19.87.13001.0') -or ([Version]$package.Version -eq [Version]'1.43.2002.0'));
if ($isOldPackagePresent) {
Write-Output "Uninstalling $($package.PackageFullName) version $($package.Version)";
remove-appxpackage -allusers $package.PackageFullName -ErrorAction Continue;
if ($Error) {
Write-Output "Remove-AppxPackage failed for $($package.PackageFullName)";
}
else {
Write-Output "Remove-AppxPackage completed for $AppxPath";
}
}
}
else {
Write-Output 'No versions of Microsoft.GamingServices were found installed on the PC.';
}
if (($package -eq $null) -or $isOldPackagePresent) {
Write-Output "Installing $AppxPath Version 19.87.13001.0 Volume $systemRoot";
$allDepsFound = $TRUE;
[string[]]$depPackageNames = 'Microsoft.NET.Native.Runtime.2.2', 'Microsoft.NET.Native.Framework.2.2', 'Microsoft.VCLibs.x64.14.00';
$dependencyPaths = $depPackageNames | ForEach-Object { Join-Path -Path $AppxDepDirPath -ChildPath "$_.appx" };
ForEach ($dep in $dependencyPaths) { if (-not (test-path $dep)) { $allDepsFound = $FALSE; } };
if ($allDepsFound) {
Write-Output "Installing $AppxPath Version 19.87.13001.0 Volume $systemRoot -DependencyPath $dependencyPaths";
add-appxpackage -forceApplicationShutdown -path $AppxPath -Volume $systemRoot -DependencyPath $dependencyPaths -ErrorAction Continue;
}
else {
Write-Output "Installing $AppxPath Version 19.87.13001.0 Volume $systemRoot";
add-appxpackage -forceApplicationShutdown -path $AppxPath -Volume $systemRoot -ErrorAction Continue;
}
if ($Error) {
Write-Output "ERROR: Add-AppxPackage failed for $AppxPath";
$guid = ($error -split ' ' | select -Last 1) -as [Guid];
if ($guid) {
Write-Output "Get-AppPackageLog -ActivityID $guid";
Get-AppPackageLog -ActivityID $guid;
}
}
else {
Write-Output "Add-AppxPackage completed for $AppxPath";
}
}
else {
Write-Output "No installation needed as version $($package.Version) of $($package.Name) was found already installed on the PC.";
}
exit ($Error.Count);
# SIG # Begin signature block
# MIImdQYJKoZIhvcNAQcCoIImZjCCJmICAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAI351rPPV4btGZ
# Gfuis7ZV3AIiimevkjZiTJOqkQPaeKCCC2cwggTvMIID16ADAgECAhMzAAAFp7iP
# +5ddNYTsAAAAAAWnMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD
# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
# b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p
# bmcgUENBIDIwMTAwHhcNMjQwODIyMTkyNTU3WhcNMjUwNzA1MTkyNTU3WjB0MQsw
# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy
# b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
# AQCWGlTKjYt60rB8oNyPWJUGQV2NGwlRXKJg3484q2nJiv9+Frz96fGoXlblIeJ3
# xqQxEoCEDYjjbYClgx31MZcoRqJD0sKjNtYDKA0NiSdOJQut3+HN0rSx74yqobDB
# P8AKAyWANZitUQHnPH1EkTXMdRlnJnD1RtFljMYOJnrxfqrAdtNNxU1pIYYmY6oD
# 8dye81i9RHxSJGEgfMnEIpn/1ySkikTV+NOHFj1QH7+SHZWYNcdgL48QSa1jC30A
# i6MKLh91FOsCsuNU0cTC6z6QkP51l9dU8B+xnvZa2/WzvJhByZnjXS+tVeN2KB5E
# p0seOtuFwvI6KoOXrETKCDg7AgMBAAGjggFuMIIBajAfBgNVHSUEGDAWBgorBgEE
# AYI3PQYBBggrBgEFBQcDAzAdBgNVHQ4EFgQUUhW6zVNwhzmLbscozYppwd8fKxIw
# RQYDVR0RBD4wPKQ6MDgxHjAcBgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEW
# MBQGA1UEBRMNMjMwODY1KzUwMjcwMzAfBgNVHSMEGDAWgBTm/F97uyIAWORyTrX0
# IXQjMubvrDBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8vY3JsLm1pY3Jvc29mdC5j
# b20vcGtpL2NybC9wcm9kdWN0cy9NaWNDb2RTaWdQQ0FfMjAxMC0wNy0wNi5jcmww
# WgYIKwYBBQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRwOi8vd3d3Lm1pY3Jvc29m
# dC5jb20vcGtpL2NlcnRzL01pY0NvZFNpZ1BDQV8yMDEwLTA3LTA2LmNydDAMBgNV
# HRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQAl1cQIQ+FD/ubaWIiMg8wQtEx3
# SksQ5r6qAgferOe6TZ5bmTcMj2VUkHLrvmhScoRe9pQ/CqwZ676YuM90tiqPrMDj
# XO8kLCA+kTeDZoKQL0MI2ShbDhXrDIsui9hGNhd8PwGTWQksnoO4HxqGG2Mfiqsn
# OgMo9HimmTF2/H1XLc/g2TPpF8GyXAco7khch4l1hIIpmVEZN6ZFCk2/kOf7m2sC
# l8h5+BWQDmSaECtI2xc5SLbqot1isWvFiERtaw9xQb31MWYas2l2/XdcbH7QFYpK
# pG4dDZhKIdlRVmYpUyRaNOZWNwNc7G6bzKIC3HAGFOIEc4aDQu2yT/q0yJ7WMIIG
# cDCCBFigAwIBAgIKYQxSTAAAAAAAAzANBgkqhkiG9w0BAQsFADCBiDELMAkGA1UE
# BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc
# BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0
# IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcNMTAwNzA2MjA0MDE3
# WhcNMjUwNzA2MjA1MDE3WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu
# Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
# cmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQSAyMDEw
# MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA6Q5kUHlntcTj/QkATJ6U
# rPdWaOpE2M/FWE+ppXZ8bUW60zmStKQe+fllguQX0o/9RJwI6GWTzixVhL99COMu
# K6hBKxi3oktuSUxrFQfe0dLCiR5xlM21f0u0rwjYzIjWaxeUOpPOJj/s5v40mFfV
# HV1J9rIqLtWFu1k/+JC0K4N0yiuzO0bj8EZJwRdmVMkcvR3EVWJXcvhnuSUgNN5d
# pqWVXqsogM3Vsp7lA7Vj07IUyMHIiiYKWX8H7P8O7YASNUwSpr5SW/Wm2uCLC0h3
# 1oVH1RC5xuiq7otqLQVcYMa0KlucIxxfReMaFB5vN8sZM4BqiU2jamZjeJPVMM+V
# HwIDAQABo4IB4zCCAd8wEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFOb8X3u7
# IgBY5HJOtfQhdCMy5u+sMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1Ud
# DwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP6KJcYmjR
# PZSQW9fOmhjEMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0
# LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNy
# bDBaBggrBgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9z
# b2Z0LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3J0MIGd
# BgNVHSAEgZUwgZIwgY8GCSsGAQQBgjcuAzCBgTA9BggrBgEFBQcCARYxaHR0cDov
# L3d3dy5taWNyb3NvZnQuY29tL1BLSS9kb2NzL0NQUy9kZWZhdWx0Lmh0bTBABggr
# BgEFBQcCAjA0HjIgHQBMAGUAZwBhAGwAXwBQAG8AbABpAGMAeQBfAFMAdABhAHQA
# ZQBtAGUAbgB0AC4gHTANBgkqhkiG9w0BAQsFAAOCAgEAGnTvV08pe8QWhXi4UNMi
# /AmdrIKX+DT/KiyXlRLl5L/Pv5PI4zSp24G43B4AvtI1b6/lf3mVd+UC1PHr2M1O
# HhthosJaIxrwjKhiUUVnCOM/PB6T+DCFF8g5QKbXDrMhKeWloWmMIpPMdJjnoUdD
# 8lOswA8waX/+0iUgbW9h098H1dlyACxphnY9UdumOUjJN2FtB91TGcun1mHCv+KD
# qw/ga5uV1n0oUbCJSlGkmmzItx9KGg5pqdfcwX7RSXCqtq27ckdjF/qm1qKmhuyo
# EESbY7ayaYkGx0aGehg/6MUdIdV7+QIjLcVBy78dTMgW77Gcf/wiS0mKbhXjpn92
# W9FTeZGFndXS2z1zNfM8rlSyUkdqwKoTldKOEdqZZ14yjPs3hdHcdYWch8ZaV4XC
# v90Nj4ybLeu07s8n07VeafqkFgQBpyRnc89NT7beBVaXevfpUk30dwVPhcbYC/GO
# 7UIJ0Q124yNWeCImNr7KsYxuqh3khdpHM2KPpMmRM19xHkCvmGXJIuhCISWKHC1g
# 2TeJQYkqFg/XYTyUaGBS79ZHmaCAQO4VgXc+nOBTGBpQHTiVmx5mMxMnORd4hzbO
# TsNfsvU9R1O24OXbC2E9KteSLM43Wj5AQjGkHxAIwlacvyRdUQKdannSF9PawZSO
# B3slcUSrBmrm1MbfI5qWdcUxghpkMIIaYAIBATCBlTB+MQswCQYDVQQGEwJVUzET
# MBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMV
# TWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQgQ29kZSBT
# aWduaW5nIFBDQSAyMDEwAhMzAAAFp7iP+5ddNYTsAAAAAAWnMA0GCWCGSAFlAwQC
# AQUAoIIBBDAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgorBgEEAYI3AgEL
# MQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG9w0BCQQxIgQg+r33narhg6fKq+hs3dDu
# rZejDnJ1V12rawo20SV2X7UwPAYKKwYBBAGCNwoDHDEuDCxzUFk3eFBCN2hUNWc1
# SEhyWXQ4ckRMU005VnVaUnVXWmFlZjJlMjJSczU0PTBaBgorBgEEAYI3AgEMMUww
# SqAkgCIATQBpAGMAcgBvAHMAbwBmAHQAIABXAGkAbgBkAG8AdwBzoSKAIGh0dHA6
# Ly93d3cubWljcm9zb2Z0LmNvbS93aW5kb3dzMA0GCSqGSIb3DQEBAQUABIIBAGkH
# o/08SEPDvvmuGGmxB8wi0Oy4PErQ3yb8z+G9om1wrxr+cm3F31fu7LiQbfvOvQYk
# xTxjolpkg5xRmFtzi+64h7YA1MOTJGgYOr6Ug1Jn83wkLiKoAH3xMU7qzr9YSG5R
# Ha/TCDo9Ej0UJg/mk2TDjZg1Xv1bbv2+EirblAeCmYO5b7exXba+gs3LuLjQYdy9
# j2RnzzuRszsjMX7R3DEYaOOvW5E8Yn4l3bl12NBV9SsU+e3UgBCnNALfxZQvKByy
# 0aSHIbK0+TvxtZWyf+bdkzoCCOkQN7j2zh0A+pi8RSzheqtkEWVtYo4+/X3NbYbE
# CjNxz4PJN7jsGDuVV2ShgheXMIIXkwYKKwYBBAGCNwMDATGCF4Mwghd/BgkqhkiG
# 9w0BBwKgghdwMIIXbAIBAzEPMA0GCWCGSAFlAwQCAQUAMIIBUgYLKoZIhvcNAQkQ
# AQSgggFBBIIBPTCCATkCAQEGCisGAQQBhFkKAwEwMTANBglghkgBZQMEAgEFAAQg
# hJM39gtIwzRgLaRcvbMUFOlDhyk/24IWetrnhWVUIIUCBmcHuw0NERgTMjAyNDEw
# MjAxOTM4NTkuMDM3WjAEgAIB9KCB0aSBzjCByzELMAkGA1UEBhMCVVMxEzARBgNV
# BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
# c29mdCBDb3Jwb3JhdGlvbjElMCMGA1UECxMcTWljcm9zb2Z0IEFtZXJpY2EgT3Bl
# cmF0aW9uczEnMCUGA1UECxMeblNoaWVsZCBUU1MgRVNOOkE0MDAtMDVFMC1EOTQ3
# MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNloIIR7TCCByAw
# ggUIoAMCAQICEzMAAAHs4CukgtCRUoAAAQAAAewwDQYJKoZIhvcNAQELBQAwfDEL
# MAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1v
# bmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWlj
# cm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwHhcNMjMxMjA2MTg0NTM4WhcNMjUw
# MzA1MTg0NTM4WjCByzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
# EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
# bjElMCMGA1UECxMcTWljcm9zb2Z0IEFtZXJpY2EgT3BlcmF0aW9uczEnMCUGA1UE
# CxMeblNoaWVsZCBUU1MgRVNOOkE0MDAtMDVFMC1EOTQ3MSUwIwYDVQQDExxNaWNy
# b3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
# MIICCgKCAgEAsEf0bgk24MVFlZv1XbpdtrsHRGZtCKABbOqCK9/VSvyLT/NHJ/vE
# 5rT+u4mmweA5gCifRh+nSRoRDyaWOL0ykUjsK0TcVSCqDz3lBd3+FchxHKP7tUFG
# nZcA9d9jbmQsW54ejItpSxu6Q77M2ajBu0tzAotm5Np77RinXgCC/h++4C+K9NU0
# lm+67BNiW9T/zemP1tQqg4tfyG9/80all7eM8b3SBnD40uGSskBBd0hGQKuFyI4s
# qMDx2qjW2cXX9pFjv2o3X01PObfd+AlwIp29KPrkPSrWijS1VXDX+UKUuH+vzLFz
# ryBbgmDEXSg46Zr6MAHi/tY9u2wsQgaQ0B61pHz82af1/m7fQuxOYTz+h1UaKgWE
# e7tYFH+RhKvua9RwNI2o59EOjr32HJBNB3Tr+ilmvrAJiRuzw702Wnu+4aJs8eiD
# 6oIFaTWbgpO/Un1ZpyrvRefFAJ1OfE6gxxMxrEJzFECrLUt845+klNDSxBTQnrZb
# mipKlg0VSxFm7t9vSBId7alz138ukYf8Am8HvUgiSKKrQXsQaz8kGANl2s9Xyvcr
# E7MdJAPVdScFVeOCGvXPjMLQEerKinQIEaP27P17vILmvCw3uilsrve+HvZhlu2T
# vJ2qwxawE9RFxhw7nsoEir79iu8AfJQIDBiY+9wkL6/o6qFsMel3cnkCAwEAAaOC
# AUkwggFFMB0GA1UdDgQWBBT0WtBHZP4r9cIWELFfFIBH+EyFhjAfBgNVHSMEGDAW
# gBSfpxVdAF5iXYP05dJlpxtTNRnpcjBfBgNVHR8EWDBWMFSgUqBQhk5odHRwOi8v
# d3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3NvZnQlMjBUaW1lLVN0
# YW1wJTIwUENBJTIwMjAxMCgxKS5jcmwwbAYIKwYBBQUHAQEEYDBeMFwGCCsGAQUF
# BzAChlBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jv
# c29mdCUyMFRpbWUtU3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNydDAMBgNVHRMBAf8E
# AjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIHgDANBgkq
# hkiG9w0BAQsFAAOCAgEAkrzEpDEq745Qz2oPAEW9DhawELUizA6TdFGNxY7z4cBi
# g664sZp7jH465lY0atbvCIZA7xhf2332xU6/iAJw0noPEwfc3xv+Mm5J7qKZJW3h
# o27ezC8aX4aJQhEchHNtDzGSic/Ur837jtZ+ca6yzi/JtJ5r+ZAXL/stQFyeUHC4
# nJoXtiKd/w+uxHeqD6kCNN5g42GktTUIQTbbue8Dyl2dRKDU6AZPGwOvN/cNdfW/
# mvVk6KiLJHURqD+cYwyL/pnNLwR4WRpCVb3yIZuAKfM6bQu8VQJctI3jr+XVBjAm
# IGY76E5oHeOW6gMLp3Zj5Rrq+3pXlmHnS0H+7Ny+fqn2mP8RIf/bqNe0pzP4B1Uh
# gM7563hoTqwdi7XSqFUnuS22KYoV3LQ3u+omLS/pocVzxKc3Wt2yZYT0zkNyjhGQ
# KVREQaOcpbVozwlpV8cgqZeY4/Z2NJ33dO9W3pp6LvAN61Ga3YCiGrrbB+0hzojn
# m2RqjbvuttrybWt3gGLAgGsQHAfQYiT5Wu12nfaq02HU+OVZQmE7QUmOKFUbHnUg
# A7/fY7/4mCABstWwsrbmtKP0Kr/Xqyps0Ak1TF2g3NuQ0y3DBia0bmtytMYr3bZ6
# AXsc1Sa+sl6jPgWtsISFUbxnK4gZCl9BSRXlu69vV1/pNHuA5xuogRykI3nOlTcw
# ggdxMIIFWaADAgECAhMzAAAAFcXna54Cm0mZAAAAAAAVMA0GCSqGSIb3DQEBCwUA
# MIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
# UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQD
# EylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAxMDAeFw0y
# MTA5MzAxODIyMjVaFw0zMDA5MzAxODMyMjVaMHwxCzAJBgNVBAYTAlVTMRMwEQYD
# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
# b3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1w
# IFBDQSAyMDEwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5OGmTOe0
# ciELeaLL1yR5vQ7VgtP97pwHB9KpbE51yMo1V/YBf2xK4OK9uT4XYDP/XE/HZveV
# U3Fa4n5KWv64NmeFRiMMtY0Tz3cywBAY6GB9alKDRLemjkZrBxTzxXb1hlDcwUTI
# cVxRMTegCjhuje3XD9gmU3w5YQJ6xKr9cmmvHaus9ja+NSZk2pg7uhp7M62AW36M
# EBydUv626GIl3GoPz130/o5Tz9bshVZN7928jaTjkY+yOSxRnOlwaQ3KNi1wjjHI
# NSi947SHJMPgyY9+tVSP3PoFVZhtaDuaRr3tpK56KTesy+uDRedGbsoy1cCGMFxP
# LOJiss254o2I5JasAUq7vnGpF1tnYN74kpEeHT39IM9zfUGaRnXNxF803RKJ1v2l
# IH1+/NmeRd+2ci/bfV+AutuqfjbsNkz2K26oElHovwUDo9Fzpk03dJQcNIIP8BDy
# t0cY7afomXw/TNuvXsLz1dhzPUNOwTM5TI4CvEJoLhDqhFFG4tG9ahhaYQFzymei
# XtcodgLiMxhy16cg8ML6EgrXY28MyTZki1ugpoMhXV8wdJGUlNi5UPkLiWHzNgY1
# GIRH29wb0f2y1BzFa/ZcUlFdEtsluq9QBXpsxREdcu+N+VLEhReTwDwV2xo3xwgV
# GD94q0W29R6HXtqPnhZyacaue7e3PmriLq0CAwEAAaOCAd0wggHZMBIGCSsGAQQB
# gjcVAQQFAgMBAAEwIwYJKwYBBAGCNxUCBBYEFCqnUv5kxJq+gpE8RjUpzxD/LwTu
# MB0GA1UdDgQWBBSfpxVdAF5iXYP05dJlpxtTNRnpcjBcBgNVHSAEVTBTMFEGDCsG
# AQQBgjdMg30BATBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5j
# b20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wEwYDVR0lBAwwCgYIKwYBBQUH
# AwgwGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
# EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU1fZWy4/oolxiaNE9lJBb186aGMQwVgYD
# VR0fBE8wTTBLoEmgR4ZFaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwv
# cHJvZHVjdHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3JsMFoGCCsGAQUFBwEB
# BE4wTDBKBggrBgEFBQcwAoY+aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9j
# ZXJ0cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcnQwDQYJKoZIhvcNAQELBQAD
# ggIBAJ1VffwqreEsH2cBMSRb4Z5yS/ypb+pcFLY+TkdkeLEGk5c9MTO1OdfCcTY/
# 2mRsfNB1OW27DzHkwo/7bNGhlBgi7ulmZzpTTd2YurYeeNg2LpypglYAA7AFvono
# aeC6Ce5732pvvinLbtg/SHUB2RjebYIM9W0jVOR4U3UkV7ndn/OOPcbzaN9l9qRW
# qveVtihVJ9AkvUCgvxm2EhIRXT0n4ECWOKz3+SmJw7wXsFSFQrP8DJ6LGYnn8Atq
# gcKBGUIZUnWKNsIdw2FzLixre24/LAl4FOmRsqlb30mjdAy87JGA0j3mSj5mO0+7
# hvoyGtmW9I/2kQH2zsZ0/fZMcm8Qq3UwxTSwethQ/gpY3UA8x1RtnWN0SCyxTkct
# wRQEcb9k+SS+c23Kjgm9swFXSVRk2XPXfx5bRAGOWhmRaw2fpCjcZxkoJLo4S5pu
# +yFUa2pFEUep8beuyOiJXk+d0tBMdrVXVAmxaQFEfnyhYWxz/gq77EFmPWn9y8FB
# SX5+k77L+DvktxW/tM4+pTFRhLy/AsGConsXHRWJjXD+57XQKBqJC4822rpM+Zv/
# Cuk0+CQ1ZyvgDbjmjJnW4SLq8CdCPSWU5nR0W2rRnj7tfqAxM328y+l7vzhwRNGQ
# 8cirOoo6CGJ/2XBjU02N7oJtpQUQwXEGahC0HVUzWLOhcGbyoYIDUDCCAjgCAQEw
# gfmhgdGkgc4wgcsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw
# DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
# JTAjBgNVBAsTHE1pY3Jvc29mdCBBbWVyaWNhIE9wZXJhdGlvbnMxJzAlBgNVBAsT
# Hm5TaGllbGQgVFNTIEVTTjpBNDAwLTA1RTAtRDk0NzElMCMGA1UEAxMcTWljcm9z
# b2Z0IFRpbWUtU3RhbXAgU2VydmljZaIjCgEBMAcGBSsOAwIaAxUAjhz7YFXc/RFt
# IjzS/wV6iaKlTH+ggYMwgYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2Fz
# aGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENv
# cnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAx
# MDANBgkqhkiG9w0BAQsFAAIFAOq/Z6cwIhgPMjAyNDEwMjAxMTI3MzVaGA8yMDI0
# MTAyMTExMjczNVowdzA9BgorBgEEAYRZCgQBMS8wLTAKAgUA6r9npwIBADAKAgEA
# AgIyiwIB/zAHAgEAAgITlTAKAgUA6sC5JwIBADA2BgorBgEEAYRZCgQCMSgwJjAM
# BgorBgEEAYRZCgMCoAowCAIBAAIDB6EgoQowCAIBAAIDAYagMA0GCSqGSIb3DQEB
# CwUAA4IBAQA1JOEi234zBLpddT3GshmdepmB+xvVW6ynW0BgVPvW/mA1AGopGJLC
# JTsUk27Fxt6qiLMpV1ArcOQIbNyNnyr6NVBE+of/v7JBivGXRpiFPzIWH1VBNHQc
# 6Spqhml4XCKTqfVdiMu7WrdsMIB2g9hvAL3DuR41XP4Zjtpz+b6vykXdFGhZSE/h
# 6BOGFzGWREyVE32Lffwv0CKbSYwfav1jAQsjyMtTp1IiqJTGRF0hk3woriyfZ3uv
# Q7u/0w4foswMoKTg4R8kGnvUNYAWvEvP5R/nhhN9me3uPYoHkKRPU+2jXd7yOXjk
# Y/oLzhs8/M3VyAaoHFOPJoChmjV1iC/qMYIEDTCCBAkCAQEwgZMwfDELMAkGA1UE
# BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc
# BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0
# IFRpbWUtU3RhbXAgUENBIDIwMTACEzMAAAHs4CukgtCRUoAAAQAAAewwDQYJYIZI
# AWUDBAIBBQCgggFKMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAvBgkqhkiG
# 9w0BCQQxIgQgDn/RX2XA1auAJidSsjRVhvlS4jcQ/OE0Es6OH1ZshbEwgfoGCyqG
# SIb3DQEJEAIvMYHqMIHnMIHkMIG9BCAnCeb1an03yIcdtUAQWysqP8XIkCF2qDFl
# C3owBNUKgzCBmDCBgKR+MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n
# dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y
# YXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMz
# AAAB7OArpILQkVKAAAEAAAHsMCIEIEQgnW0h9Kb4IpUlF43izId7IcZo+p0TUp2C
# 6cJTRyeWMA0GCSqGSIb3DQEBCwUABIICAHbdgJQwxTnNxKqqP1Py5CWuxuqql1nf
# ZpAd38LQ71buEQ4fIpiANsF5+YdPZg5fdrmOG7If+C245XgAARGmaGBSxnMBXev0
# D8nhXMs6I/oMpksVgz508bgJvSVDWLeDNzy8IgrsFb7dkl/53KvWSUWSiQ4SkjhL
# CgKdUd1o5yRT0r6A3Ec3wqO2ptFCvEOJPtXG8QiT6Hk3EgnxIXVhqrkBB1Oip1Q4
# gtn9Ox8quuzic/BoS2ktbyxT6nO6wNkidIsZgEMyCUeXhInfqM4U0eQN1OVs5UyS
# u9svI4JHzuQz349mwhs1WRxd5A6brl3nZ0lL5oamly1z9rFsLIzAV8QfEi8vW2Tq
# 0xXe7I+iSBlKONUPv65NLXvvP6MlZewSHcX9mGL0ou9WES8HA3eLAsu+oLboOv2Y
# dJnZqN52Qx+XiOTK+5tMoUT3gGFvAEt6rzd7OMlxlQynNIJoKV1dGPZBVJKBZwHN
# HbPDmLHd21h0p3JQLDy+qjLfLYiLBsDFDEZo/QVVI9h12Cy+cYgLF+z7F2du6SFI
# Df8bVp0wiGTNMzGTE+6G3BcsoTDA87oHA6dNZjI5Df0PXi9X/nhk5Bmq1in+a0fG
# GlDtnUcHiLeyfgftdnglt40Iv0jfgZEdEC+lBjKqdxJ1gA/BrzdLS6DRTRlJ2J8V
# R6HSeUHZ3sWC
# SIG # End signature block