Utilities/IGValidationUtility.ps1
using module "..\CAMP.psm1" $ExchangePresent = "Exchange" $SharePointPresent = "SharePoint" $OneDrivePresent = "OneDrive" Function Get-RetentionPolicyValidation { param ( $LogFile, $Mode ) $ConfigObjectList = @() try { $ConfigObjectList=@() $LabelPolicy =$false $PolicyDisabled = $false $AnyPolicyEnabled = $false $RetentionComplianceRules = $Config["GetRetentionComplianceRule"] $RetentionCompliancePolicies = $Config["GetRetentionCompliancePolicy"] $GetComplianceTag = $Config["GetComplianceTag"] $PartialWorkloadsStatus = @{} $PartialWorkloadsStatus[$ExchangePresent] = $false $PartialWorkloadsStatus[$SharePointPresent] = $false $PartialWorkloadsStatus[$OneDrivePresent] = $false foreach ( $RetentionCompliancePolicy in $RetentionCompliancePolicies) { $PolicyName = $($RetentionCompliancePolicy.Name) $ConfigObject = [CAMPCheckConfig]::new() $ConfigObject.Object = "$PolicyName" $PolicyConfigData = $null if($Mode -eq "Publish") { $RetentionCompliancePolicyRules = $RetentionComplianceRules | Where-Object {($_.Policy -ieq $($RetentionCompliancePolicy.ExchangeObjectId)) -and ($_.Disabled -eq $false) -and($_.PublishComplianceTag -ne "")} foreach( $RetentionCompliancePolicyRule in $RetentionCompliancePolicyRules ) { $PublishComplianceTag = $RetentionCompliancePolicyRule.PublishComplianceTag $PublishComplianceTag = $($PublishComplianceTag.Split(","))[1] $GetLabel= $GetComplianceTag | Where-Object{ ($_.Name -eq $PublishComplianceTag) } if( -not (($GetLabel.HasRetentionAction -eq $true) -and ($GetLabel.RetentionDuration -eq "Unlimited"))) {if($null -ne $GetLabel) { $LabelPolicy =$true if ($null -eq $PolicyConfigData ) { $PolicyConfigData += "<B>Labels : </B>$($GetLabel.Name)" } else { $PolicyConfigData += ", $($GetLabel.Name)" } } } } } elseif($Mode -eq "Auto") { $RetentionCompliancePolicyRules = $RetentionComplianceRules | Where-Object {($_.Policy -ieq $($RetentionCompliancePolicy.ExchangeObjectId)) -and ($_.Disabled -eq $false) -and($_.ApplyComplianceTag -ne "")} foreach( $RetentionCompliancePolicyRule in $RetentionCompliancePolicyRules ) { $ApplyComplianceTag = $RetentionCompliancePolicyRule.ApplyComplianceTag $GetLabel= $GetComplianceTag | Where-Object{ ($_.ExchangeObjectId -eq $ApplyComplianceTag)} if( -not (($GetLabel.HasRetentionAction -eq $true) -and ($GetLabel.RetentionDuration -eq "Unlimited"))) {if($null -ne $GetLabel) { $LabelPolicy =$true if ($null -eq $PolicyConfigData ) { $PolicyConfigData += "<B>Labels : </B>$($GetLabel.Name)" } else { $PolicyConfigData += ", $($GetLabel.Name)" } } } } } $ExchangeLocation = $RetentionCompliancePolicy.ExchangeLocation $SharePointLocation = $RetentionCompliancePolicy.SharePointLocation $OneDriveLocation = $RetentionCompliancePolicy.OneDriveLocation $ModernGroupLocation = $RetentionCompliancePolicy.ModernGroupLocation $PublicFolderLocation = $RetentionCompliancePolicy.PublicFolderLocation $SkypeLocation = $RetentionCompliancePolicy.SkypeLocation $WorkloadsStatus= "" if(($RetentionCompliancePolicy.Enabled -eq $true) -and ($null -ne $PolicyConfigData )) { if(($ExchangeLocation -ne "") ) { $WorkloadsStatus+= "Exchange, " $PartialWorkloadsStatus[$ExchangePresent] = $true } if(($SharePointLocation -ne "") ) { $WorkloadsStatus += "SharePoint, " $PartialWorkloadsStatus[$SharePointPresent] = $true } if(($OneDriveLocation -ne "") ) { $WorkloadsStatus+= "OneDrive, " $PartialWorkloadsStatus[$OneDrivePresent] = $true } if(($ModernGroupLocation -ne "") ) { $WorkloadsStatus += "ModernGroup, " } if(($PublicFolderLocation -ne "") ) { $WorkloadsStatus += "ExchangePublicFolders, " } if(($SkypeLocation -ne "") ) { $WorkloadsStatus += "Skype, " } } $workloadpresent ="<B>Workloads: </B>$WorkloadsStatus" $workloadpresent=$workloadpresent.TrimEnd(", ") if (($WorkloadsStatus -ne "") -and ($null -ne $PolicyConfigData ) -and ($RetentionCompliancePolicy.Enabled -eq $true) ) { if ( ($LabelPolicy -eq $true) ) { $AnyPolicyEnabled =$true $Workload= $workloadpresent $ConfigObject.ConfigData = "$Workload" $ConfigObject.ConfigItem = "$PolicyConfigData" $ConfigObject.SetResult([CAMPConfigLevel]::Ok, "Pass") $ConfigObjectList += $ConfigObject } } elseif(($null -ne $PolicyConfigData) -and ($RetentionCompliancePolicy.Enabled -eq $true) ) { $AnyPolicyEnabled =$true $ConfigObject.ConfigData = "No workload covered" $ConfigObject.ConfigItem = "$PolicyConfigData" $ConfigObject.SetResult([CAMPConfigLevel]::Informational, "Pass") $ConfigObjectList += $ConfigObject } elseif(($null -ne $PolicyConfigData) -and ($RetentionCompliancePolicy.Enabled -ne $true) ) { $PolicyDisabled =$true $ConfigObject.ConfigData = "Policy is not enabled" $ConfigObject.ConfigItem = "$PolicyConfigData" $ConfigObject.SetResult([CAMPConfigLevel]::Informational, "Pass") $ConfigObjectList += $ConfigObject } } if (($LabelPolicy -eq $false)-and ($PolicyDisabled -eq $false)) { $ConfigObject = [CAMPCheckConfig]::new() $ConfigObject.Object = "<B>No active policy or label defined<B>" $ConfigObject.ConfigItem = "" $ConfigObject.ConfigData = "<B>Affected workloads: </B>Exchange, SharePoint, OneDrive" $ConfigObject.SetResult([CAMPConfigLevel]::Ok, "Fail") $ConfigObjectList += $ConfigObject } $PartialLocation="" foreach ($Workload in ($PartialWorkloadsStatus.Keys | Sort-Object -CaseSensitive) ) { if ($PartialWorkloadsStatus[$Workload] -eq $false) { if ( $PartialLocation -eq "") { $PartialLocation += "$($Workload)" }else { $PartialLocation += ", $($Workload)" } } } if(($PartialLocation -ne "") -and (($PolicyDisabled -eq $true) -or ($AnyPolicyEnabled -eq $true))) { $ConfigObject = [CAMPCheckConfig]::new() $ConfigObject.Object = "<B>No policy defined for 1 or more workloads<B>" $ConfigObject.ConfigItem = "" $ConfigObject.ConfigData = "<B>Affected workloads: </B>$PartialLocation" $ConfigObject.SetResult([CAMPConfigLevel]::Ok, "Fail") $ConfigObjectList += $ConfigObject } } catch { Write-Host "Error:$(Get-Date) There was an issue while running CAMP. Please try running the tool again after some time." -ForegroundColor:Red $ErrorMessage = $_.ToString() $StackTraceInfo = $_.ScriptStackTrace Write-Log -IsError -ErrorMessage $ErrorMessage -StackTraceInfo $StackTraceInfo -LogFile $LogFile -ErrorAction:SilentlyContinue } return $ConfigObjectList } # SIG # Begin signature block # MIIlygYJKoZIhvcNAQcCoIIluzCCJbcCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDPbws/QSh/4M/p # pjQZCcXOngZDugLkROAm7JqM3E2qYqCCC5YwggT7MIID46ADAgECAhMzAAAE4qOH # mdFtQCqWAAEAAATiMA0GCSqGSIb3DQEBCwUAMHkxCzAJBgNVBAYTAlVTMRMwEQYD # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jvc29mdCBUZXN0aW5nIFBD # QSAyMDEwMB4XDTIxMDkwMjE5MjYyN1oXDTIyMDkwMTE5MjYyN1owfDELMAkGA1UE # BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc # BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdQ29kZSBTaWdu # IFRlc3QgKERPIE5PVCBUUlVTVCkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK # AoIBAQC08O5FqM6i91zE1YIK4epCwArU+0xTEScHJ0Vfy32sK+Xf3dM/vHm1iLfc # 7hhDNwVxfHvaHgjNYC2Qr2cff4F40aShGrc6xyIdmcSiygICYGQrF7FWKQ4thEdX # HuAMiuVYZQ9Jo+vxOXRJTSa3zsFFrbkCOgun7Vu9UeFxOQT1ByNomsxky0gCRu+P # YdaqnbOyxNsnCDaGUUHp+D1EpBv4Cdrgy9o359Z4nFUyUm4MVMjpG6jC2n8dPonw # hAcbjIvyJzA1v88jVCMfDrHt0AkIHN69J4wahtOrJeERgXjklilV0hMRwkVkfpnJ # 18aw7NqWsDi4ekmBd2EL6d+HljzNAgMBAAGjggF3MIIBczATBgNVHSUEDDAKBggr # BgEFBQcDAzAdBgNVHQ4EFgQUCekP9tRzR3NLSbCNG+oPPWd/nuYwRQYDVR0RBD4w # PKQ6MDgxHjAcBgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEWMBQGA1UEBRMN # MjMwMDcyKzQ2NzYwNTAfBgNVHSMEGDAWgBS/ZaKrb3WjTkWWVwXPOYf0wBUcHDBc # BgNVHR8EVTBTMFGgT6BNhktodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3Bz # L2NybC9NaWNyb3NvZnQlMjBUZXN0aW5nJTIwUENBJTIwMjAxMCgxKS5jcmwwaQYI # KwYBBQUHAQEEXTBbMFkGCCsGAQUFBzAChk1odHRwOi8vd3d3Lm1pY3Jvc29mdC5j # b20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRlc3RpbmclMjBQQ0ElMjAyMDEw # KDEpLmNydDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQCTxe9mJYSi # GUIIw4imC+gePdQLAeeMTTa8Uwa406/66Su7fVZTGNFMpLwofA1WfxvAX4+5+U+J # aFJod4KyAdUngWtPlyPmkR0kXQ6mTxvqMFEih/s0mRyW6dHMHrCezmY//89C5zau # E3LBcI4gqAQ2ZabPxj2+j6+Er8StKv07PigCuM4M16DIQUAY6kNgnate4WoiiQSu # mXhMiwtUh6jgSnTpOqpNfXk+YJxNoqHH8qqyW7FcQ88jyoxM4LYdAQVN3eYD7eJn # xfW2nWIbDRaZpBkv9N1t8yObWcyC/YrRLuq3QLqpll20Y1eFsm+gypEoiERqpPUT # 3p7K5897ABKoMIIGkzCCBHugAwIBAgITMwAAAC01ekaIyQdx2AAAAAAALTANBgkq # hkiG9w0BAQsFADCBkDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x # EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv # bjE6MDgGA1UEAxMxTWljcm9zb2Z0IFRlc3RpbmcgUm9vdCBDZXJ0aWZpY2F0ZSBB # dXRob3JpdHkgMjAxMDAeFw0yMDEyMTAyMDQzMjBaFw0zNTA2MTcyMTA0MTFaMHkx # CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt # b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1p # Y3Jvc29mdCBUZXN0aW5nIFBDQSAyMDEwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A # MIIBCgKCAQEAvzxggau+7P/XF2PypkLRE2KcsBfOukYaeyIuVXOaVLnG1NHKmP53 # Rw2OnfBezPhU7/LPKtRi8ak0CgTXxQWG8hD1TdOWCGaF2wJ9GNzieiOnmildrnkY # zwxj8Br/gampQz+pC7lR8bNIOvxELl8RxVY6/8oOzYgIwf3H1fU+7+pOG3KLI71F # N54fcMGnybggc+3zbD2LIQXPdxL+odwH6Q1beAlsMlUQR9A3yMf3+nP+RjTkVhao # N2RT1jX7w4C2jraGkaEQ1sFK9uN61BEKst4unhCX4IGuEl2IAV3MpMQoUpxg8Arm # iK9L6VeK7KMPNx4p9l0h09faXQ7JTtuNbQIDAQABo4IB+jCCAfYwDgYDVR0PAQH/ # BAQDAgGGMBIGCSsGAQQBgjcVAQQFAgMBAAEwIwYJKwYBBAGCNxUCBBYEFOqfXzO2 # 0F+erestpsECu0A4y+e1MB0GA1UdDgQWBBS/ZaKrb3WjTkWWVwXPOYf0wBUcHDBU # BgNVHSAETTBLMEkGBFUdIAAwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNy # b3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMBkGCSsGAQQBgjcU # AgQMHgoAUwB1AGIAQwBBMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUowEE # fjCIM+u5MZzK64V2Z/xltNEwWQYDVR0fBFIwUDBOoEygSoZIaHR0cDovL2NybC5t # aWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWljVGVzUm9vQ2VyQXV0XzIw # MTAtMDYtMTcuY3JsMIGNBggrBgEFBQcBAQSBgDB+ME0GCCsGAQUFBzAChkFodHRw # Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Rlc1Jvb0NlckF1dF8y # MDEwLTA2LTE3LmNydDAtBggrBgEFBQcwAYYhaHR0cDovL29uZW9jc3AubWljcm9z # b2Z0LmNvbS9vY3NwMA0GCSqGSIb3DQEBCwUAA4ICAQAntNCFsp7MD6QqU3PVbdrX # MQDI9v9jyPYBEbUYktrctPmvJuj8Snm9wWewiAN5Zc81NQVYjuKDBpb1un4SWVCb # 4PDVPZ0J87tGzYe9dOJ30EYGeiIaaStkLLmLOYAM6oInIqIwVyIk2SE/q2lGt8Ov # wcZevNmPkVYjk6nyJi5EdvS6ciPRmW9bRWRT4pWU8bZIQL938LE4lHOQAixrAQiW # es5Szp2U85E0nLdaDr5w/I28J/Z1+4zW1Nao1prVCOqrosnoNUfVf1kvswfW3FY2 # l1PiAYp8sGyO57GaztXdBoEOBcDLedfcPra9+NLdEF36NkE0g+9dbokFY7KxhUJ8 # WpMiCmN4yj9LKFLvQbctGMJJY9EwHFifm2pgaiaafKF1Gyz+NruJzEEgpysMo/f9 # AVBQ/qCdPQQGEWp3QDIaef4ts9QTx+RmDKCBDMTFLgFmmhbtUY0JWjLkKn7soz/L # IcDUle/p5TiFD4VhfZnAcvYQHXfuslnyp+yuhWzASnAQNnOIO6fc1JFIwkDkcM+k # /TspfAajzHooSAwXkrOWrjRDV6wI0YzMVHrEyQ0hZ5NnIXbL3lrTkOPjf3NBu1na # SNEaySduStDbFVjV3TXoENEnZiugJKYSwmhzoYHM1ngipN5rNdqJiK5ukp6E8LDz # i3l5/7XctJQY3+ZgHDJosjGCGYowghmGAgEBMIGQMHkxCzAJBgNVBAYTAlVTMRMw # EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN # aWNyb3NvZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jvc29mdCBUZXN0aW5n # IFBDQSAyMDEwAhMzAAAE4qOHmdFtQCqWAAEAAATiMA0GCWCGSAFlAwQCAQUAoIGu # MBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgor # BgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCCLOy5N8yR4saWWRyrphtH4W14cOimp # dy3Z7NObyVTjmDBCBgorBgEEAYI3AgEMMTQwMqAUgBIATQBpAGMAcgBvAHMAbwBm # AHShGoAYaHR0cDovL3d3dy5taWNyb3NvZnQuY29tMA0GCSqGSIb3DQEBAQUABIIB # ADeQgddKiXYKA9OruKYP+s2eudRBUUMnI7QEBUdPB593aYycL5/ZOfe4be9lpe53 # t1ePp/LreOvnWRfTEbm3DlaxicfQ1FwG0Wp3lwGq6Vwm06lgZD9gAg/A+Yv9+50Q # 1jD5HtSeTp+pT9Nq4rzk63GEG1ouwppDXGi3DAFOa02AE0LGMVAwXywpcrSskF9G # 9OOzsCgL8BhZBbyjtB+7N9QV7Wr4t5z40XYoINt/cvCq2ccI0gxmj3Q5hxd404Ie # 10H+45GoA8TK4d/xUqMdGwe+I36UlpxJN7cNnf26XH4vHtPdtEhwLbtxfKoEyz5B # y7H1M46zi+tvMpXEtO60oX+hghcZMIIXFQYKKwYBBAGCNwMDATGCFwUwghcBBgkq # hkiG9w0BBwKgghbyMIIW7gIBAzEPMA0GCWCGSAFlAwQCAQUAMIIBWQYLKoZIhvcN # AQkQAQSgggFIBIIBRDCCAUACAQEGCisGAQQBhFkKAwEwMTANBglghkgBZQMEAgEF # AAQgr0AM0NLvWE3ekeNS+NbmWa/sqsGTABZKNpTHBLI7n/4CBmKeAn6EHhgTMjAy # MjA2MTAwNDExMzUuNDYxWjAEgAIB9KCB2KSB1TCB0jELMAkGA1UEBhMCVVMxEzAR # BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1p # Y3Jvc29mdCBDb3Jwb3JhdGlvbjEtMCsGA1UECxMkTWljcm9zb2Z0IElyZWxhbmQg # T3BlcmF0aW9ucyBMaW1pdGVkMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjpBMjQw # LTRCODItMTMwRTElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2Vydmlj # ZaCCEWgwggcUMIIE/KADAgECAhMzAAABjXpVLnh0mSq3AAEAAAGNMA0GCSqGSIb3 # DQEBCwUAMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD # VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAk # BgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4XDTIxMTAyODE5 # Mjc0NVoXDTIzMDEyNjE5Mjc0NVowgdIxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpX # YXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg # Q29ycG9yYXRpb24xLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJhdGlv # bnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVzIFRTUyBFU046QTI0MC00QjgyLTEz # MEUxJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2UwggIiMA0G # CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDaNEgtmD47pTt0ty7AE8wH7S0lTPTA # cuonl/soldCxPNZOgANQxhXjFVmen2Y9NaiNQn+Xc7hep6AsM124UA5tyK2svJjk # cOzEB9QbX/ZiKVxKRI/oJwypZ+xLBQsZfnOWxUocnu2/CDbrLp4uSVR0UymKrb3h # Pi4lB1d3k7uYXLS9WRoY8bE1YttnEo3Ooq0WdZDuMy1nTle9p+QhZms1MW/wYakC # Ue1GxnUDwoOjogNIZU1lldtCz587Aw4an8HOh3x/VgjwZvag3+bHZxy90av2Vrnl # Bl5Wwzst9NoQ9DFuABwuBYOUg9yZPNwGSwTMs5CxKkHOyo9pYj3KRXDmh+auQUox # ulBPkQySLay4mhUznEaB1lae3+3PTTG5s9IoWLgHggwVQH2ZwA1Sr1wdouwdsMn4 # BSxU7SqdWPDNc9gl5HsL8HxfRSXpSQh2mVmadxBlIErfJlDL6gay4kpcUCrcGXFP # qQO6Fhi87uK0us95jSSe63WsqTGib66Lq8J22EJ+cCLKSfJELaWSerPPzHWYORDl # Do7H2nr+V24W6lIky2CwI8318i+t+mkwMUi9GhQuwc50smOtGWLxyjkz69mZ/bSh # PFi5fMzS1tG6sQnJwHlkxvDOewUfKY6SDLHw54WddXdxqvjm56MjUHWKpQNt5I3G # e9zO46FynPBpyQIDAQABo4IBNjCCATIwHQYDVR0OBBYEFHjMkW6Hn0bClO5KO7hJ # Nx+WKGaTMB8GA1UdIwQYMBaAFJ+nFV0AXmJdg/Tl0mWnG1M1GelyMF8GA1UdHwRY # MFYwVKBSoFCGTmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01p # Y3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNybDBsBggrBgEF # BQcBAQRgMF4wXAYIKwYBBQUHMAKGUGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9w # a2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVGltZS1TdGFtcCUyMFBDQSUyMDIwMTAo # MSkuY3J0MAwGA1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwgwDQYJKoZI # hvcNAQELBQADggIBADWvc7PSUSrdW+l0WWHdgHFziGdiQAvJg8Nr0U7heCrCQGbw # uxv6Ure1sYaCmLpAlsreIzcErQ5sFzBFolULEYsa2vonP2FG6ZHIXyjifbLdiIq/ # iiUHE2MVKFIZz0Tb0mZWMGYuCZ+NGo9z/asPbmrijDi4Detz16SJq5+AaFxIB16T # +X6QBJvOiE63/nPb4iWBPh7dq5JTO3YYAp8pkHTZkMZYop4JjekQuPW26HrJ+s4k # 88ic7hlktbe+Apq+0vx7oUlnImgMUx7Ann2gQv4Ard7YzYjggUT2fotVLxtL1Rsx # Qy+sCVc3lkzYjwZ0cH1Nt8jXtab/1R/iq7nzw8k3u8ImP2z4rFmpdzmwZJwuCqI+ # ohts1MT78ARn95OLFz1guBPIypqRkjn3AaqOs41BJju7RUQOQQTqKTP4VIVEorOn # JJvRZOAy9bGwu9uc3wAKYhI+cEdhmgayw8Avt+gYYoUt0AFNALY9fX1aOt/KuyEd # 2KpKUKymogYFPFFoe3I8yujcH/bqA98KXcwLesLc0arjEacgcNkZKLNSYaDxORAC # WhV1Tl0nW/3XSCPFrFpStoaE/wi20TRFadTldGn+wZo2YNwzBvIe5KloWyfdDbU7 # OK0/gGc3m2msdqeAALuOh7jOYueZGcCJRz2xGpDZuawwC9Smw7yeU4WaIzUvMIIH # cTCCBVmgAwIBAgITMwAAABXF52ueAptJmQAAAAAAFTANBgkqhkiG9w0BAQsFADCB # iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl # ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMp # TWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcNMjEw # OTMwMTgyMjI1WhcNMzAwOTMwMTgzMjI1WjB8MQswCQYDVQQGEwJVUzETMBEGA1UE # CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z # b2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQ # Q0EgMjAxMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOThpkzntHIh # C3miy9ckeb0O1YLT/e6cBwfSqWxOdcjKNVf2AX9sSuDivbk+F2Az/1xPx2b3lVNx # WuJ+Slr+uDZnhUYjDLWNE893MsAQGOhgfWpSg0S3po5GawcU88V29YZQ3MFEyHFc # UTE3oAo4bo3t1w/YJlN8OWECesSq/XJprx2rrPY2vjUmZNqYO7oaezOtgFt+jBAc # nVL+tuhiJdxqD89d9P6OU8/W7IVWTe/dvI2k45GPsjksUZzpcGkNyjYtcI4xyDUo # veO0hyTD4MmPfrVUj9z6BVWYbWg7mka97aSueik3rMvrg0XnRm7KMtXAhjBcTyzi # YrLNueKNiOSWrAFKu75xqRdbZ2De+JKRHh09/SDPc31BmkZ1zcRfNN0Sidb9pSB9 # fvzZnkXftnIv231fgLrbqn427DZM9ituqBJR6L8FA6PRc6ZNN3SUHDSCD/AQ8rdH # GO2n6Jl8P0zbr17C89XYcz1DTsEzOUyOArxCaC4Q6oRRRuLRvWoYWmEBc8pnol7X # KHYC4jMYctenIPDC+hIK12NvDMk2ZItboKaDIV1fMHSRlJTYuVD5C4lh8zYGNRiE # R9vcG9H9stQcxWv2XFJRXRLbJbqvUAV6bMURHXLvjflSxIUXk8A8FdsaN8cIFRg/ # eKtFtvUeh17aj54WcmnGrnu3tz5q4i6tAgMBAAGjggHdMIIB2TASBgkrBgEEAYI3 # FQEEBQIDAQABMCMGCSsGAQQBgjcVAgQWBBQqp1L+ZMSavoKRPEY1Kc8Q/y8E7jAd # BgNVHQ4EFgQUn6cVXQBeYl2D9OXSZacbUzUZ6XIwXAYDVR0gBFUwUzBRBgwrBgEE # AYI3TIN9AQEwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29t # L3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMBMGA1UdJQQMMAoGCCsGAQUFBwMI # MBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNVHRMB # Af8EBTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQW9fOmhjEMFYGA1Ud # HwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3By # b2R1Y3RzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNybDBaBggrBgEFBQcBAQRO # MEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2Vy # dHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3J0MA0GCSqGSIb3DQEBCwUAA4IC # AQCdVX38Kq3hLB9nATEkW+Geckv8qW/qXBS2Pk5HZHixBpOXPTEztTnXwnE2P9pk # bHzQdTltuw8x5MKP+2zRoZQYIu7pZmc6U03dmLq2HnjYNi6cqYJWAAOwBb6J6Gng # ugnue99qb74py27YP0h1AdkY3m2CDPVtI1TkeFN1JFe53Z/zjj3G82jfZfakVqr3 # lbYoVSfQJL1AoL8ZthISEV09J+BAljis9/kpicO8F7BUhUKz/AyeixmJ5/ALaoHC # gRlCGVJ1ijbCHcNhcy4sa3tuPywJeBTpkbKpW99Jo3QMvOyRgNI95ko+ZjtPu4b6 # MhrZlvSP9pEB9s7GdP32THJvEKt1MMU0sHrYUP4KWN1APMdUbZ1jdEgssU5HLcEU # BHG/ZPkkvnNtyo4JvbMBV0lUZNlz138eW0QBjloZkWsNn6Qo3GcZKCS6OEuabvsh # VGtqRRFHqfG3rsjoiV5PndLQTHa1V1QJsWkBRH58oWFsc/4Ku+xBZj1p/cvBQUl+ # fpO+y/g75LcVv7TOPqUxUYS8vwLBgqJ7Fx0ViY1w/ue10CgaiQuPNtq6TPmb/wrp # NPgkNWcr4A245oyZ1uEi6vAnQj0llOZ0dFtq0Z4+7X6gMTN9vMvpe784cETRkPHI # qzqKOghif9lwY1NNje6CbaUFEMFxBmoQtB1VM1izoXBm8qGCAtcwggJAAgEBMIIB # AKGB2KSB1TCB0jELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO # BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEt # MCsGA1UECxMkTWljcm9zb2Z0IElyZWxhbmQgT3BlcmF0aW9ucyBMaW1pdGVkMSYw # JAYDVQQLEx1UaGFsZXMgVFNTIEVTTjpBMjQwLTRCODItMTMwRTElMCMGA1UEAxMc # TWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaIjCgEBMAcGBSsOAwIaAxUAgHOV # kz1NE0Pg+C2ktZBmRI9hVwmggYMwgYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UE # CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z # b2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQ # Q0EgMjAxMDANBgkqhkiG9w0BAQUFAAIFAOZNHhYwIhgPMjAyMjA2MTAwOTM0MTRa # GA8yMDIyMDYxMTA5MzQxNFowdzA9BgorBgEEAYRZCgQBMS8wLTAKAgUA5k0eFgIB # ADAKAgEAAgIdVwIB/zAHAgEAAgIRzTAKAgUA5k5vlgIBADA2BgorBgEEAYRZCgQC # MSgwJjAMBgorBgEEAYRZCgMCoAowCAIBAAIDB6EgoQowCAIBAAIDAYagMA0GCSqG # SIb3DQEBBQUAA4GBAGiKOoSIHojLow6Kkkk/r8LP2tciPzd5Fcn59o9TzAHigCqU # X0CLxuNOhMw4d1cTQ1Hg8fCGoQeJbp/bo3xnxexQfLG9VtVchL/SniDTItMMoE/T # eeel3JS/b1VrDVlVCtFI9rsAkF8wm17k/QUiT7/cVfGyBqeKBwLahSEL89O4MYIE # DTCCBAkCAQEwgZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x # EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv # bjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTACEzMAAAGN # elUueHSZKrcAAQAAAY0wDQYJYIZIAWUDBAIBBQCgggFKMBoGCSqGSIb3DQEJAzEN # BgsqhkiG9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQgnKkBwLqHA+NU2Yp1EYvHvYiS # bNH+av5wit6vz0fI5pgwgfoGCyqGSIb3DQEJEAIvMYHqMIHnMIHkMIG9BCCelhEz # +h1eQMCfN/a50vnr1bxx8ZODBW56dDy20hjNfzCBmDCBgKR+MHwxCzAJBgNVBAYT # AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD # VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBU # aW1lLVN0YW1wIFBDQSAyMDEwAhMzAAABjXpVLnh0mSq3AAEAAAGNMCIEILN626OK # Bt4JaSLIIVTruoAzcAN6skUU95hFTq72KiiCMA0GCSqGSIb3DQEBCwUABIICAAeC # SSrSwWHdq9kwHkFjSj5Ommep5UMMDUj6VFzfKBQQ7SozYbREx5+JcmMRdSlmjqg9 # Je8Z2T1wFtFi5S9SN5f6j9OEbNoO7Z1dP2uYhc08WA7T1P/1B09n/zBPsJMWNFtR # AdD7p5BofEQ3qYSY26IyMT7gwwEG0VJWkISPMA5KR7xo5zJZ65wmtsvFLIpwbUVv # YOfzYzyATlTQGb2ajZfd6Pjs1f1U9mAvGXVH615nKThzhIBEGAG+Kepj53FnOO3b # ifRpm/fWpo88pqErXOGekfJw1i1/JvenhSOqwCbskdUiGB0aqF2qKEDQp2+CWjob # hBA65UySYlL57B1MaWn1DjXo09Ut6EGRiG/xwKCJ2jfC75Y6bt8OIwcBfAgBopMX # hXBt+w1MHe/46I9GsbD5NEjFrSyjKhyTZzLpJZzX3cRd07j2CN7xErIb8gQvy8Xl # V1UUrYoDnuyHrMbLe8VBZOSbF4RFlIZzGrPvEcjs5Ydd1eo2gB3VVwn1CiDf2SBC # wRJX6Zup6oPEWoX6AT/tKqZhQ68L8/dfa/hxrvOaItX0ZsW873EsRddiDGSmsWLU # poqiedrnJrrNrhqTK1fFWYtVMPb/gG/BDxocUmHBOVNk7/ffwsYEakr0ZC7GbqVm # JhoWsIIecvNahfH8opkt86Q5L5winxMviZmuLEPz # SIG # End signature block |