Created
January 7, 2018 09:57
-
-
Save dzas/6bd7fdec53c45b7d37d280b164e2c1cf to your computer and use it in GitHub Desktop.
BackupScripts.ps1
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Web Deploy: Powershell script to configure automatic backups on the server. | |
# Copyright (C) Microsoft Corp. 2010 | |
# | |
# Requirements: IIS 7, Windows Server 2008 (or higher) | |
# | |
$BackupSectionName = "system.webServer/wdeploy/backup" | |
$TurnedOnAttrName = "turnedOn" | |
$EnabledAttrName = "enabled" | |
$BackupPathAttrName = "backupPath" | |
$NumBackupsAttrName = "numberOfBackups" | |
$ContinueSyncOnBackupFailureAttrName = "continueSyncOnBackupFailure" | |
$ExcludedProvidersElemName = "excludedProviders" | |
$BackupSettingsProviderElemName = "backupSettingsProvider" | |
$CanSetEnabledAttrName = "canSetEnabled" | |
$CanSetNumberOfBackupsAttrName = "canSetNumberOfBackups" | |
$CanSetContinueSyncOnFailureAttrName = "canSetContinueSyncOnBackupFailure" | |
$CanAddExcludedProvidersAttrName = "canAddExcludedProviders" | |
$DefaultExcludedProviders = @("appHostAuthOverride","appPoolEnable32Bit","appPoolNetFx","appPoolPipeline","createApp","setAcl") | |
<# | |
.SYNOPSIS | |
Turns the backup feature on or off. | |
.DESCRIPTION | |
Turns the backup feature on or off. Overrides all server and site level backup settings. | |
.EXAMPLE | |
TurnOn-Backups -On $true | |
Turns on the backup feature, however in order for backups to be made, they still need to be | |
enabled at the server or site level. Use the Configure-Backups function to accomplish this. | |
#> | |
function TurnOn-Backups | |
{ | |
param( | |
[Parameter(Mandatory=$true)] | |
[bool]$On | |
) | |
. .\Common.ps1 | |
Initialize | |
try | |
{ | |
$serverManager = New-Object Microsoft.Web.Administration.ServerManager | |
$appHostConfig = $serverManager.GetApplicationHostConfiguration() | |
$configSection = $appHostConfig.GetSection($BackupSectionName) | |
$configSection.SetAttributeValue($TurnedOnAttrName, $On) | |
if($On) | |
{ | |
write-log $Global:Info $Resources.BackupTurningOn | |
} | |
else | |
{ | |
write-log $Global:Info $Resources.BackupTurningOff | |
} | |
$serverManager.CommitChanges() | |
} | |
finally | |
{ | |
if($serverManager -ne $null) | |
{ | |
$serverManager.Dispose() | |
} | |
} | |
} | |
<# | |
.SYNOPSIS | |
Configures backup settings at the server or site level. | |
.DESCRIPTION | |
Use this function to set server or site level backup settings. When server | |
level backup settings are set, this function automatically adds default | |
excluded providers. When site level backup settings are set, they take | |
preference over server level backup settings. | |
.EXAMPLE | |
Configure-Backups -Enabled $true | |
Turns on the backup feature at the server level, because a site is not specified. | |
.EXAMPLE | |
Configure-Backups -SiteName foo -Enabled $true -SetExcludedProviders @("dbmysql","dbfullsql") | |
Turns on the backup feature for site "foo". Also sets its excluded providers to "dbmysql" | |
and "dbfullsql" providers. | |
.EXAMPLE | |
Configure-Backups -SiteName foo -BackupPath "{SitePathParent}\{siteName}_snapshots" | |
Sets the physical file path for where the backups for site "foo" will be stored. | |
The variables "{SitePathParent}" and "{SiteName}" are special because they get | |
translated by Web Deploy. If the physical path of site "foo" were "c:\foo", the | |
path in the example would translate to "c:\foo_snapshots" | |
#> | |
function Configure-Backups | |
{ | |
param( | |
[string] $SiteName = [string]::Empty, | |
[System.Nullable``1[[System.Boolean]]] $Enabled, | |
[string] $BackupPath, | |
[System.Nullable``1[[System.Int32]]] $NumberOfBackups, | |
[System.Nullable``1[[System.Boolean]]] $ContinueSyncOnBackupFailure, | |
[string[]] $AddExcludedProviders = $null | |
) | |
. .\Common.ps1 | |
Initialize | |
# Setup default excluded providers at the server level | |
if([string]::IsNullOrEmpty($SiteName)) | |
{ | |
if($null -eq $AddExcludedProviders) | |
{ | |
$AddExcludedProviders = @() | |
} | |
foreach($provider in $DefaultExcludedProviders) | |
{ | |
$AddExcludedProviders += $provider | |
} | |
} | |
if($null -ne $AddExcludedProviders) | |
{ | |
$ExcludedProviders = @(RemoveDuplicatesFromList -List $AddExcludedProviders) | |
} | |
$serverManager = $null | |
if([string]::IsNullOrEmpty($SiteName)) | |
{ | |
write-log $Global:Info $Resources.ServerBackupConfigChanges | |
} | |
else | |
{ | |
write-log $Global:Info $Resources.SiteBackupConfigChanges $SiteName | |
} | |
try | |
{ | |
# Cleans up existing Excluded providers | |
$ExcludedProviders = VerifyAndDeleteExcludedProviders -SiteName $siteName -ExcludedProviders $ExcludedProviders ` | |
-SectionName $BackupSectionName | |
$serverManager = New-Object Microsoft.Web.Administration.ServerManager | |
$appHostConfig = $serverManager.GetApplicationHostConfiguration() | |
if([string]::IsNullOrEmpty($SiteName)) | |
{ | |
$configSection = $appHostConfig.GetSection($BackupSectionName) | |
} | |
else | |
{ | |
$configSection = $appHostConfig.GetSection($BackupSectionName, $SiteName) | |
} | |
if($Enabled -ne $null) | |
{ | |
write-log $Global:Info $Resources.BackupSettingEnabled $Enabled | |
$configSection.SetAttributeValue($EnabledAttrName, $Enabled) | |
} | |
if(-not [string]::IsNullOrEmpty($BackupPath)) | |
{ | |
write-log $Global:Info $Resources.BackupSettingPath $BackupPath | |
write-log $Global:Warning $Resources.BackupSettingPathWarn | |
$configSection.SetAttributeValue($BackupPathAttrName, $BackupPath) | |
} | |
if($NumberOfBackups -ne $null) | |
{ | |
write-log $Global:Info $Resources.BackupSettingNumber $NumberOfBackups | |
$configSection.SetAttributeValue($NumBackupsAttrName, $NumberOfBackups) | |
} | |
if($ContinueSyncOnBackupFailure -ne $null) | |
{ | |
write-log $Global:Info $Resources.BackupSettingContinueSync $ContinueSyncOnBackupFailure | |
$configSection.SetAttributeValue($ContinueSyncOnBackupFailureAttrName, $ContinueSyncOnBackupFailure) | |
} | |
if($null -ne $ExcludedProviders) | |
{ | |
# Find the ExcludedProviders Element | |
$configSection.ChildElements | out-null | |
foreach($child in $configSection.ChildElements) | |
{ | |
$excludedProvidersElem = $null | |
if($child.Schema -is [Microsoft.Web.Administration.ConfigurationCollectionSchema] -and ` | |
$child.Schema.AddElementNames -eq "provider") | |
{ | |
$excludedProvidersElem = $child | |
break | |
} | |
} | |
# Add specified providers to the ExcludedProviders collection | |
$providersCollection = $excludedProvidersElem.GetCollection() | |
# Add each provider to providers collection | |
foreach($provider in $ExcludedProviders) | |
{ | |
# Need to explicitly call GetCollection().CreateElement or creation won't work | |
$newProvider = $excludedProvidersElem.GetCollection().CreateElement() | |
$newProvider.SetAttributeValue("name", $provider) | |
$providersCollection.Add($newProvider) | out-null | |
write-log $Global:Info $Resources.BackupAddingProviders $provider | |
} | |
} | |
$serverManager.CommitChanges() | |
} | |
finally | |
{ | |
if($serverManager -ne $null) | |
{ | |
$serverManager.Dispose() | |
} | |
} | |
} | |
<# | |
.SYNOPSIS | |
Configures which backup settings a site can manage themselves using the BackupSettingsProvider. | |
.DESCRIPTION | |
These settings are only set at the server level, and allow a server administrator | |
to control which backup settings a site can manage themselves using the BackupSettingsProvider. | |
.EXAMPLE | |
Configure-BackupSettingsProvider -CanSetEnabled $true -CanAddExcludedProviders $false | |
Ensures that site administrators can set the "Enabled" setting for backups but cannot | |
modify the list of "ExcludedProviders." | |
#> | |
function Configure-BackupSettingsProvider | |
{ | |
param( | |
[System.Nullable``1[[System.Boolean]]] $CanSetEnabled, | |
[System.Nullable``1[[System.Boolean]]] $CanSetNumBackups, | |
[System.Nullable``1[[System.Boolean]]] $CanSetContinueSyncOnBackupFailure, | |
[System.Nullable``1[[System.Boolean]]] $CanAddExcludedProviders | |
) | |
. .\Common.ps1 | |
Initialize | |
$serverManager = $null | |
try | |
{ | |
$serverManager = New-Object Microsoft.Web.Administration.ServerManager | |
$appHostConfig = $serverManager.GetApplicationHostConfiguration() | |
$configSection = $appHostConfig.GetSection($BackupSectionName) | |
$backupProviderElem = GetBackupSettingsProviderElem -ConfigSection $configSection | |
if($CanSetEnabled -ne $null) | |
{ | |
write-log $Global:Info $Resources.BackupSettingCanSetEnabled $CanSetEnabled | |
$backupProviderElem.SetAttributeValue($CanSetEnabledAttrName, $CanSetEnabled) | |
} | |
if($CanSetNumBackups -ne $null) | |
{ | |
write-log $Global:Info $Resources.BackupSettingCanSetNumBackups $CanSetNumBackups | |
$backupProviderElem.SetAttributeValue($CanSetNumberOfBackupsAttrName, $CanSetNumBackups) | |
} | |
if($CanSetContinueSyncOnBackupFailure -ne $null) | |
{ | |
write-log $Global:Info $Resources.BackupSettingCanSetContinueSync $CanSetContinueSyncOnBackupFailure | |
$backupProviderElem.SetAttributeValue($CanSetContinueSyncOnFailureAttrName, $CanSetContinueSyncOnBackupFailure) | |
} | |
if($CanAddExcludedProviders -ne $null) | |
{ | |
write-log $Global:Info $Resources.BackupSettingCanSetExcludedProviders $CanAddExcludedProviders | |
$backupProviderElem.SetAttributeValue($CanAddExcludedProvidersAttrName, $CanAddExcludedProviders) | |
} | |
$serverManager.CommitChanges() | |
} | |
finally | |
{ | |
if($serverManager -ne $null) | |
{ | |
$serverManager.Dispose() | |
} | |
} | |
} | |
<# | |
.SYNOPSIS | |
Resets backup settings at either the server or site level. | |
.DESCRIPTION | |
Resets backup settings at either the server or site level. | |
.EXAMPLE | |
Reset-BackupSettings | |
Resets all backup settings at the server level. | |
.EXAMPLE | |
Reset-BackupSettings -SiteName foo | |
Resets all backup settings for site "foo" | |
#> | |
function Reset-BackupSettings | |
{ | |
param( | |
[string] $SiteName | |
) | |
. .\Common.ps1 | |
Initialize | |
$serverManager = $null | |
try | |
{ | |
$serverManager = New-Object Microsoft.Web.Administration.ServerManager | |
$appHostConfig = $serverManager.GetApplicationHostConfiguration() | |
if([string]::IsNullOrEmpty($SiteName)) | |
{ | |
write-log $Global:Info $Resources.BackupResetServerConfig | |
$configSection = $appHostConfig.GetSection($BackupSectionName) | |
} | |
else | |
{ | |
write-log $Global:Info $Resources.BackupResetSiteConfig $SiteName | |
$configSection = $appHostConfig.GetSection($BackupSectionName, $SiteName) | |
} | |
$configSection.Delete() | |
$serverManager.CommitChanges() | |
} | |
finally | |
{ | |
if($serverManager -ne $null) | |
{ | |
$serverManager.Dispose() | |
} | |
} | |
} | |
<# | |
.SYNOPSIS | |
Returns the current server or site level backup settings | |
.DESCRIPTION | |
Returns the current server or site level backup settings as an object. | |
.EXAMPLE | |
Get-BackupSettings | |
Returns the global backup settings | |
.Example | |
$settings = Get-BackupSettings -SiteName "foo" | |
$settings | get-member # Lists all properties of $settings | |
write-host $settings.Enabled # Outputs whether backups are enabled for site "foo" | |
#> | |
function Get-BackupSettings | |
{ | |
param( | |
[string] $SiteName | |
) | |
. .\Common.ps1 | |
Initialize | |
$serverManager = $null | |
$properties = @{ | |
SiteName = $SiteName | |
Enabled = "" | |
BackupPath = "" | |
NumberOfBackups = "" | |
ContinueSyncOnFailure = "" | |
CanSetEnabled = "" | |
CanSetNumberOfBackups = "" | |
CanSetContinueSyncOnFailure = "" | |
CanAddExcludedProviders = "" | |
ExcludedProviders = @() | |
} | |
$settings = new-object PSObject -Property $properties | |
try | |
{ | |
$serverManager = New-Object Microsoft.Web.Administration.ServerManager | |
$appHostConfig = $serverManager.GetApplicationHostConfiguration() | |
if([string]::IsNullOrEmpty($SiteName)) | |
{ | |
$configSection = $appHostConfig.GetSection($BackupSectionName) | |
} | |
else | |
{ | |
$configSection = $appHostConfig.GetSection($BackupSectionName, $SiteName) | |
} | |
$settings.Enabled = $configSection.GetAttributeValue($EnabledAttrName) | |
$settings.BackupPath = $configSection.GetAttributeValue($BackupPathAttrName) | |
$settings.NumberOfBackups = $configSection.GetAttributeValue($NumBackupsAttrName) | |
$settings.ContinueSyncOnFailure = $configSection.GetAttributeValue($ContinueSyncOnBackupFailureAttrName) | |
$providersCollection = @(GetExcludedProvidersColletion $configSection) | |
foreach($provider in $providersCollection) | |
{ | |
$settings.ExcludedProviders += $provider.GetAttributeValue("name") | |
} | |
$providerElem = GetBackupSettingsProviderElem -ConfigSection $configSection | |
$settings.CanSetEnabled = $providerElem.GetAttributeValue($CanSetEnabledAttrName) | |
$settings.CanSetNumberOfBackups = $providerElem.GetAttributeValue($CanSetNumberOfBackupsAttrName) | |
$settings.CanSetContinueSyncOnFailure = $providerElem.GetAttributeValue($CanSetContinueSyncOnFailureAttrName) | |
$settings.CanAddExcludedProviders = $providerElem.GetAttributeValue($CanAddExcludedProvidersAttrName) | |
return $settings | |
} | |
finally | |
{ | |
if($serverManager -ne $null) | |
{ | |
$serverManager.Dispose() | |
} | |
} | |
} | |
# SIG # Begin signature block | |
# MIIanQYJKoZIhvcNAQcCoIIajjCCGooCAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB | |
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR | |
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUQg4OAwsOrM1RZ404Oue4XnT+ | |
# DXugghWCMIIEwzCCA6ugAwIBAgITMwAAAG9lLVhtBxFGKAAAAAAAbzANBgkqhkiG | |
# 9w0BAQUFADB3MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G | |
# A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSEw | |
# HwYDVQQDExhNaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EwHhcNMTUwMzIwMTczMjAy | |
# WhcNMTYwNjIwMTczMjAyWjCBszELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp | |
# bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw | |
# b3JhdGlvbjENMAsGA1UECxMETU9QUjEnMCUGA1UECxMebkNpcGhlciBEU0UgRVNO | |
# OkMwRjQtMzA4Ni1ERUY4MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBT | |
# ZXJ2aWNlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz+ZtzcEqza6o | |
# XtiVTy0DQ0dzO7hC0tBXmt32UzZ31YhFJGrIq9Bm6YvFqg+e8oNGtirJ2DbG9KD/ | |
# EW9m8F4UGbKxZ/jxXpSGqo4lr/g1E/2CL8c4XlPAdhzF03k7sGPrT5OaBfCiF3Hc | |
# xgyW0wAFLkxtWLN/tCwkcHuWaSxsingJbUmZjjo+ZpWPT394G2B7V8lR9EttUcM0 | |
# t/g6CtYR38M6pR6gONzrrar4Q8SDmo2XNAM0BBrvrVQ2pNQaLP3DbvB45ynxuUTA | |
# cbQvxBCLDPc2Ynn9B1d96gV8TJ9OMD8nUDhmBrtdqD7FkNvfPHZWrZUgNFNy7WlZ | |
# bvBUH0DVOQIDAQABo4IBCTCCAQUwHQYDVR0OBBYEFPKmSSl4fFdwUmLP7ay3eyA0 | |
# R9z9MB8GA1UdIwQYMBaAFCM0+NlSRnAK7UD7dvuzK7DDNbMPMFQGA1UdHwRNMEsw | |
# SaBHoEWGQ2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3Rz | |
# L01pY3Jvc29mdFRpbWVTdGFtcFBDQS5jcmwwWAYIKwYBBQUHAQEETDBKMEgGCCsG | |
# AQUFBzAChjxodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY3Jv | |
# c29mdFRpbWVTdGFtcFBDQS5jcnQwEwYDVR0lBAwwCgYIKwYBBQUHAwgwDQYJKoZI | |
# hvcNAQEFBQADggEBAI2zTLbY7A2Hhhle5ADnl7jVz0wKPL33VdP08KCvVXKcI5e5 | |
# girHFgrFJxNZ0NowK4hCulID5l7JJWgnJ41kp235t5pqqz6sQtAeJCbMVK/2kIFr | |
# Hq1Dnxt7EFdqMjYxokRoAZhaKxK0iTH2TAyuFTy3JCRdu/98U0yExA3NRnd+Kcqf | |
# skZigrQ0x/USaVytec0x7ulHjvj8U/PkApBRa876neOFv1mAWRDVZ6NMpvLkoLTY | |
# wTqhakimiM5w9qmc3vNTkz1wcQD/vut8/P8IYw9LUVmrFRmQdB7/u72qNZs9nvMQ | |
# FNV69h/W4nXzknQNrRbZEs+hm63SEuoAOyMVDM8wggTsMIID1KADAgECAhMzAAAB | |
# Cix5rtd5e6asAAEAAAEKMA0GCSqGSIb3DQEBBQUAMHkxCzAJBgNVBAYTAlVTMRMw | |
# EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN | |
# aWNyb3NvZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jvc29mdCBDb2RlIFNp | |
# Z25pbmcgUENBMB4XDTE1MDYwNDE3NDI0NVoXDTE2MDkwNDE3NDI0NVowgYMxCzAJ | |
# BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k | |
# MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xDTALBgNVBAsTBE1PUFIx | |
# HjAcBgNVBAMTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjCCASIwDQYJKoZIhvcNAQEB | |
# BQADggEPADCCAQoCggEBAJL8bza74QO5KNZG0aJhuqVG+2MWPi75R9LH7O3HmbEm | |
# UXW92swPBhQRpGwZnsBfTVSJ5E1Q2I3NoWGldxOaHKftDXT3p1Z56Cj3U9KxemPg | |
# 9ZSXt+zZR/hsPfMliLO8CsUEp458hUh2HGFGqhnEemKLwcI1qvtYb8VjC5NJMIEb | |
# e99/fE+0R21feByvtveWE1LvudFNOeVz3khOPBSqlw05zItR4VzRO/COZ+owYKlN | |
# Wp1DvdsjusAP10sQnZxN8FGihKrknKc91qPvChhIqPqxTqWYDku/8BTzAMiwSNZb | |
# /jjXiREtBbpDAk8iAJYlrX01boRoqyAYOCj+HKIQsaUCAwEAAaOCAWAwggFcMBMG | |
# A1UdJQQMMAoGCCsGAQUFBwMDMB0GA1UdDgQWBBSJ/gox6ibN5m3HkZG5lIyiGGE3 | |
# NDBRBgNVHREESjBIpEYwRDENMAsGA1UECxMETU9QUjEzMDEGA1UEBRMqMzE1OTUr | |
# MDQwNzkzNTAtMTZmYS00YzYwLWI2YmYtOWQyYjFjZDA1OTg0MB8GA1UdIwQYMBaA | |
# FMsR6MrStBZYAck3LjMWFrlMmgofMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9j | |
# cmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY0NvZFNpZ1BDQV8w | |
# OC0zMS0yMDEwLmNybDBaBggrBgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6 | |
# Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljQ29kU2lnUENBXzA4LTMx | |
# LTIwMTAuY3J0MA0GCSqGSIb3DQEBBQUAA4IBAQCmqFOR3zsB/mFdBlrrZvAM2PfZ | |
# hNMAUQ4Q0aTRFyjnjDM4K9hDxgOLdeszkvSp4mf9AtulHU5DRV0bSePgTxbwfo/w | |
# iBHKgq2k+6apX/WXYMh7xL98m2ntH4LB8c2OeEti9dcNHNdTEtaWUu81vRmOoECT | |
# oQqlLRacwkZ0COvb9NilSTZUEhFVA7N7FvtH/vto/MBFXOI/Enkzou+Cxd5AGQfu | |
# FcUKm1kFQanQl56BngNb/ErjGi4FrFBHL4z6edgeIPgF+ylrGBT6cgS3C6eaZOwR | |
# XU9FSY0pGi370LYJU180lOAWxLnqczXoV+/h6xbDGMcGszvPYYTitkSJlKOGMIIF | |
# vDCCA6SgAwIBAgIKYTMmGgAAAAAAMTANBgkqhkiG9w0BAQUFADBfMRMwEQYKCZIm | |
# iZPyLGQBGRYDY29tMRkwFwYKCZImiZPyLGQBGRYJbWljcm9zb2Z0MS0wKwYDVQQD | |
# EyRNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMTAwODMx | |
# MjIxOTMyWhcNMjAwODMxMjIyOTMyWjB5MQswCQYDVQQGEwJVUzETMBEGA1UECBMK | |
# V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0 | |
# IENvcnBvcmF0aW9uMSMwIQYDVQQDExpNaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBD | |
# QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJyWVwZMGS/HZpgICBC | |
# mXZTbD4b1m/My/Hqa/6XFhDg3zp0gxq3L6Ay7P/ewkJOI9VyANs1VwqJyq4gSfTw | |
# aKxNS42lvXlLcZtHB9r9Jd+ddYjPqnNEf9eB2/O98jakyVxF3K+tPeAoaJcap6Vy | |
# c1bxF5Tk/TWUcqDWdl8ed0WDhTgW0HNbBbpnUo2lsmkv2hkL/pJ0KeJ2L1TdFDBZ | |
# +NKNYv3LyV9GMVC5JxPkQDDPcikQKCLHN049oDI9kM2hOAaFXE5WgigqBTK3S9dP | |
# Y+fSLWLxRT3nrAgA9kahntFbjCZT6HqqSvJGzzc8OJ60d1ylF56NyxGPVjzBrAlf | |
# A9MCAwEAAaOCAV4wggFaMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMsR6MrS | |
# tBZYAck3LjMWFrlMmgofMAsGA1UdDwQEAwIBhjASBgkrBgEEAYI3FQEEBQIDAQAB | |
# MCMGCSsGAQQBgjcVAgQWBBT90TFO0yaKleGYYDuoMW+mPLzYLTAZBgkrBgEEAYI3 | |
# FAIEDB4KAFMAdQBiAEMAQTAfBgNVHSMEGDAWgBQOrIJgQFYnl+UlE/wq4QpTlVnk | |
# pDBQBgNVHR8ESTBHMEWgQ6BBhj9odHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtp | |
# L2NybC9wcm9kdWN0cy9taWNyb3NvZnRyb290Y2VydC5jcmwwVAYIKwYBBQUHAQEE | |
# SDBGMEQGCCsGAQUFBzAChjhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2Nl | |
# cnRzL01pY3Jvc29mdFJvb3RDZXJ0LmNydDANBgkqhkiG9w0BAQUFAAOCAgEAWTk+ | |
# fyZGr+tvQLEytWrrDi9uqEn361917Uw7LddDrQv+y+ktMaMjzHxQmIAhXaw9L0y6 | |
# oqhWnONwu7i0+Hm1SXL3PupBf8rhDBdpy6WcIC36C1DEVs0t40rSvHDnqA2iA6VW | |
# 4LiKS1fylUKc8fPv7uOGHzQ8uFaa8FMjhSqkghyT4pQHHfLiTviMocroE6WRTsgb | |
# 0o9ylSpxbZsa+BzwU9ZnzCL/XB3Nooy9J7J5Y1ZEolHN+emjWFbdmwJFRC9f9Nqu | |
# 1IIybvyklRPk62nnqaIsvsgrEA5ljpnb9aL6EiYJZTiU8XofSrvR4Vbo0HiWGFzJ | |
# NRZf3ZMdSY4tvq00RBzuEBUaAF3dNVshzpjHCe6FDoxPbQ4TTj18KUicctHzbMrB | |
# 7HCjV5JXfZSNoBtIA1r3z6NnCnSlNu0tLxfI5nI3EvRvsTxngvlSso0zFmUeDord | |
# EN5k9G/ORtTTF+l5xAS00/ss3x+KnqwK+xMnQK3k+eGpf0a7B2BHZWBATrBC7E7t | |
# s3Z52Ao0CW0cgDEf4g5U3eWh++VHEK1kmP9QFi58vwUheuKVQSdpw5OPlcmN2Jsh | |
# rg1cnPCiroZogwxqLbt2awAdlq3yFnv2FoMkuYjPaqhHMS+a3ONxPdcAfmJH0c6I | |
# ybgY+g5yjcGjPa8CQGr/aZuW4hCoELQ3UAjWwz0wggYHMIID76ADAgECAgphFmg0 | |
# AAAAAAAcMA0GCSqGSIb3DQEBBQUAMF8xEzARBgoJkiaJk/IsZAEZFgNjb20xGTAX | |
# BgoJkiaJk/IsZAEZFgltaWNyb3NvZnQxLTArBgNVBAMTJE1pY3Jvc29mdCBSb290 | |
# IENlcnRpZmljYXRlIEF1dGhvcml0eTAeFw0wNzA0MDMxMjUzMDlaFw0yMTA0MDMx | |
# MzAzMDlaMHcxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD | |
# VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xITAf | |
# BgNVBAMTGE1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQTCCASIwDQYJKoZIhvcNAQEB | |
# BQADggEPADCCAQoCggEBAJ+hbLHf20iSKnxrLhnhveLjxZlRI1Ctzt0YTiQP7tGn | |
# 0UytdDAgEesH1VSVFUmUG0KSrphcMCbaAGvoe73siQcP9w4EmPCJzB/LMySHnfL0 | |
# Zxws/HvniB3q506jocEjU8qN+kXPCdBer9CwQgSi+aZsk2fXKNxGU7CG0OUoRi4n | |
# rIZPVVIM5AMs+2qQkDBuh/NZMJ36ftaXs+ghl3740hPzCLdTbVK0RZCfSABKR2YR | |
# JylmqJfk0waBSqL5hKcRRxQJgp+E7VV4/gGaHVAIhQAQMEbtt94jRrvELVSfrx54 | |
# QTF3zJvfO4OToWECtR0Nsfz3m7IBziJLVP/5BcPCIAsCAwEAAaOCAaswggGnMA8G | |
# A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFCM0+NlSRnAK7UD7dvuzK7DDNbMPMAsG | |
# A1UdDwQEAwIBhjAQBgkrBgEEAYI3FQEEAwIBADCBmAYDVR0jBIGQMIGNgBQOrIJg | |
# QFYnl+UlE/wq4QpTlVnkpKFjpGEwXzETMBEGCgmSJomT8ixkARkWA2NvbTEZMBcG | |
# CgmSJomT8ixkARkWCW1pY3Jvc29mdDEtMCsGA1UEAxMkTWljcm9zb2Z0IFJvb3Qg | |
# Q2VydGlmaWNhdGUgQXV0aG9yaXR5ghB5rRahSqClrUxzWPQHEy5lMFAGA1UdHwRJ | |
# MEcwRaBDoEGGP2h0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3Byb2R1 | |
# Y3RzL21pY3Jvc29mdHJvb3RjZXJ0LmNybDBUBggrBgEFBQcBAQRIMEYwRAYIKwYB | |
# BQUHMAKGOGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljcm9z | |
# b2Z0Um9vdENlcnQuY3J0MBMGA1UdJQQMMAoGCCsGAQUFBwMIMA0GCSqGSIb3DQEB | |
# BQUAA4ICAQAQl4rDXANENt3ptK132855UU0BsS50cVttDBOrzr57j7gu1BKijG1i | |
# uFcCy04gE1CZ3XpA4le7r1iaHOEdAYasu3jyi9DsOwHu4r6PCgXIjUji8FMV3U+r | |
# kuTnjWrVgMHmlPIGL4UD6ZEqJCJw+/b85HiZLg33B+JwvBhOnY5rCnKVuKE5nGct | |
# xVEO6mJcPxaYiyA/4gcaMvnMMUp2MT0rcgvI6nA9/4UKE9/CCmGO8Ne4F+tOi3/F | |
# NSteo7/rvH0LQnvUU3Ih7jDKu3hlXFsBFwoUDtLaFJj1PLlmWLMtL+f5hYbMUVbo | |
# nXCUbKw5TNT2eb+qGHpiKe+imyk0BncaYsk9Hm0fgvALxyy7z0Oz5fnsfbXjpKh0 | |
# NbhOxXEjEiZ2CzxSjHFaRkMUvLOzsE1nyJ9C/4B5IYCeFTBm6EISXhrIniIh0EPp | |
# K+m79EjMLNTYMoBMJipIJF9a6lbvpt6Znco6b72BJ3QGEe52Ib+bgsEnVLaxaj2J | |
# oXZhtG6hE6a/qkfwEm/9ijJssv7fUciMI8lmvZ0dhxJkAj0tr1mPuOQh5bWwymO0 | |
# eFQF1EEuUKyUsKV4q7OglnUa2ZKHE3UiLzKoCG6gW4wlv6DvhMoh1useT8ma7kng | |
# 9wFlb4kLfchpyOZu6qeXzjEp/w7FW1zYTRuh2Povnj8uVRZryROj/TGCBIUwggSB | |
# AgEBMIGQMHkxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD | |
# VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xIzAh | |
# BgNVBAMTGk1pY3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBAhMzAAABCix5rtd5e6as | |
# AAEAAAEKMAkGBSsOAwIaBQCggZ4wGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQw | |
# HAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwIwYJKoZIhvcNAQkEMRYEFLq7 | |
# T4P3QDoL52AUuB09FNltGXiaMD4GCisGAQQBgjcCAQwxMDAuoBaAFABXAGUAYgAg | |
# AEQAZQBwAGwAbwB5oRSAEmh0dHA6Ly93d3cuaWlzLm5ldDANBgkqhkiG9w0BAQEF | |
# AASCAQBnd1emYfcWsThpiHOkgKzItYFHJZbLb9Nw7ycKstVD9rNqHGtBoiMdRy4X | |
# f5EN9xnZb5nYRRlJYzTci3fB98/qOH0leeWWNhTlgpjQz/CIBb6rX4p7Z4Gp23EP | |
# 33b+nefZYQIOJFSI3PN1FoyjFQmWJtwx7PG1rZj47atvrRaQ54tHsreh8WUjfZ+G | |
# 0AtSRnAzrAs+0i55eqLTxDKsFwvoOzniNoGxd1woinJh0E66hNe/k5i4IUGw7T3P | |
# jQEuaJuTlzHiLEwG6m3035cZLpRb3iOFx/T8KLgJpc7qzu8EDea0Dyp/UOXD2FRu | |
# 3GEoR+iDnHv1xU63N707Wg4MsA9doYICKDCCAiQGCSqGSIb3DQEJBjGCAhUwggIR | |
# AgEBMIGOMHcxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD | |
# VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xITAf | |
# BgNVBAMTGE1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQQITMwAAAG9lLVhtBxFGKAAA | |
# AAAAbzAJBgUrDgMCGgUAoF0wGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkq | |
# hkiG9w0BCQUxDxcNMTUwNjE5MTgwNTQ0WjAjBgkqhkiG9w0BCQQxFgQUfH9yF17s | |
# bydL+97CNIWE/HaD1s4wDQYJKoZIhvcNAQEFBQAEggEABaY38dcwBaPBt9LrYsOf | |
# 0JHJpvMafXOKEMCbq1uAMbwbmUNJDkBqAPbnHYe2yXmpdGRbTeTvYF7D6IZzomC8 | |
# qMEL1LplkLzJc+Ggs7VlWgRj7elevw4/FLX/UiTladjnAWtEXyBCnypyHdwo0GUC | |
# 6cRiJiqnWhiHyvGZ0UjW/e8q54eLbKn7aVtwMiuvTcHWXd/AEGXPFVUTBToNyhzZ | |
# 7aZluLykCWaxX1bAUo6peRdpsGX9jtSGJMhYW9h/MAUrm6PWFnR6XVYen+DepqPh | |
# ClKEc/7urees7c7c7wDhYSgF5q1ii+9GRxv0eJGN1Ijijh3naiMKhUsxDy3iftul | |
# LA== | |
# SIG # End signature block |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment