functions/Install-IntuneResourcetriggers.ps1
function Install-IntuneResourceTriggers { [CmdletBinding()] param ( [Parameter(ValueFromPipelineByPropertyName)] [Byte[]] $Key, [Parameter(ValueFromPipelineByPropertyName)] [String] $ProfilePath, [Parameter(ValueFromPipelineByPropertyName)] [String] $CentralDataPath = "$([System.Environment]::GetFolderPath('CommonApplicationData'))/IntuneResourceLocalization", [Parameter(ValueFromPipelineByPropertyName)] [String] $LogPath = "$([System.Environment]::GetFolderPath('CommonApplicationData'))/IntuneResourceLocalization/Logs" ) begin { # if (!$Script:Configuration) { # throw 'The configuration has not been set yet. Please use the cmdlet "Get-IntuneResourceEnvironment" to initialize' # } try { $ScheduledTaskConfiguration = (Get-IntuneCustomConfiguration).taskSchedulerTasks } catch { throw 'Cannot access the configuration file detailing Scheduled Task information' } } process { function createScheduledTaskEventTrigger { [CmdletBinding()] param( [PSCustomObject] $TriggerConfig ) #$Trigger = New-ScheduledTaskTrigger -AtLogOn $CIMTriggerClass = Get-CimClass -ClassName MSFT_TaskEventTrigger -Namespace Root/Microsoft/Windows/TaskScheduler:MSFT_TaskEventTrigger $Trigger = New-CimInstance -CimClass $CIMTriggerClass -ClientOnly if ($TriggerConfig | Get-Member -MemberType Properties | Where-Object { $_.Name -eq "sourceDataName" }) { $Trigger.Subscription = @" <QueryList> <Query Id="0" Path="$($TriggerConfig.sourceLog)"> <Select Path="$($TriggerConfig.sourceLog)"> *[System[Provider[@Name='$(($TriggerConfig.sourceLog -split '/')[0])'] and EventID=$($TriggerConfig.sourceEventID)]] and *[EventData[Data[@Name='$($TriggerConfig.sourceDataName)'] and (Data='$($TriggerConfig.sourceDataValue)')]] and *[EventData[Data[@Name='$($TriggerConfig.sourceHostName)'] and (Data='$($TriggerConfig.sourceHostValue)')]] </Select> </Query> </QueryList> "@ } else { $Trigger.Subscription = @" <QueryList> <Query Id="0" Path="$($TriggerConfig.sourceLog)"> <Select Path="$($TriggerConfig.sourceLog)"> *[System[Provider[@Name='$(($TriggerConfig.sourceLog -split '/')[0])'] and EventID=$($TriggerConfig.sourceEventID)]] </Select> </Query> </QueryList> "@ } $Trigger.Enabled = $True return $Trigger } function createScheduledTaskAtLogonTrigger { [CmdletBinding()] param( [PSCustomObject] $TriggerConfig ) $Trigger = New-ScheduledTaskTrigger -AtLogOn # -User ([System.Security.Principal.WindowsIdentity]::GetCurrent().Name) # $Trigger.Delay = 'PT10S' # No longer wanted. $Trigger.Enabled = $True return $Trigger } function createScheduledTaskAtWorkstationUnlockTrigger { [CmdletBinding()] param( [PSCustomObject] $TriggerConfig ) $CIMTriggerClass = Get-CimClass -ClassName MSFT_TaskSessionStateChangeTrigger -Namespace Root/Microsoft/Windows/TaskScheduler $Trigger = New-CimInstance -CimClass $CIMTriggerClass -ClientOnly $Trigger.StateChange = 8 # TASK_SESSION_STATE_CHANGE_TYPE.TASK_SESSION_UNLOCK (taskschd.h) $Trigger.Enabled = $True return $Trigger } function createScheduledTaskTrigger { [CmdletBinding()] param( [PSCustomObject] $TriggerConfig ) if ($TriggerConfig.triggerType -eq "Event") { return createScheduledTaskEventTrigger -TriggerConfig $TriggerConfig } elseif ($TriggerConfig.triggerType -eq "AtLogon") { return createScheduledTaskAtLogonTrigger -TriggerConfig $TriggerConfig } elseif ($TriggerConfig.triggerType -eq "AtWorkstationUnlock") { return createScheduledTaskAtWorkstationUnlockTrigger -TriggerConfig $TriggerConfig } } function createScheduledTaskEncodedCommandFromTemplateAction { [CmdletBinding()] param( [PSCustomObject] $ActionConfig ) $ScriptContents = (Get-IntuneScriptTemplates)[$ActionConfig.templateScript] If ($ProfilePath) { $ScriptContents = $ScriptContents.Replace("`$ProfilePath = ([System.Environment]::GetFolderPath('UserProfile'))", "`$ProfilePath = '$($ProfilePath)'") } if ($CentralDataPath) { $ScriptContents = $ScriptContents.Replace("`$CentralDataPath = (Join-Path -Path ([System.Environment]::GetFolderPath('CommonApplicationData')) -ChildPath 'IntuneResourceLocalization')", "`$CentralDataPath = '$($CentralDataPath)'") } if ($LogPath) { $ScriptContents = $ScriptContents.Replace("`$LogPath = Join-Path -Path ([System.Environment]::GetFolderPath('UserProfile')) -ChildPath `"Documents\WindowsPowerShell\Transcripts`"", "`$LogPath = '$($LogPath)'") } if ($key) { $ScriptContents = $ScriptContents.Replace('$Key = $null', "`$Key = @($($Key -join ','))") } $scriptBlockString = $ScriptContents.ToString() $bytes = [System.Text.Encoding]::Unicode.GetBytes($scriptBlockString) $encodedCommand = [Convert]::ToBase64String($bytes) # $Action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-NonInteractive -WindowStyle Hidden -EncodedCommand $($encodedCommand)" # 2023-10-25: changing to .cmd /c start /min "" powershell... to minimize pop-ups $encoding = if ($PSVersionTable.PSEdition -eq 'Core') { [System.Text.Encoding]::UTF8 } else { 'UTF8' } $ScriptContents | Out-File -FilePath (Join-Path -Path $($CentralDataPath) -ChildPath "$($ActionConfig.templateScript).ps1") -Encoding $encoding $Action = New-ScheduledTaskAction -Execute "cmd" -Argument "/c start /min """" powershell -WindowStyle Hidden -File ""$(Join-Path -Path $($CentralDataPath) -ChildPath "$($ActionConfig.templateScript).ps1")""" # 2023-09: Separate Start-Process to try and hide the window # $Action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-WindowStyle Hidden -Command `"& {Start-Process -FilePath 'powershell.Exe' -Wait -NoNewWindow -ArgumentList '-WindowStyle Hidden -EncodedCommand $($encodedCommand)'} `"" # powershell.exe -Command '& {Start-Process -FilePath ''C:\windows\system32\WindowsPowerShell\v1.0\powershell.Exe'' -ArgumentList ''-EncodedCommand <snip>'' -Wait -WindowStyle Minimized }' return $Action } function createScheduledTaskAction { [CmdletBinding()] param( [PSCustomObject] $ActionConfig ) if ($ActionConfig.actionType -eq "EncodedCommand") { return createScheduledTaskEncodedCommandFromTemplateAction -ActionConfig $ActionConfig } } function getUserToRunUnder { [CmdletBinding(DefaultParameterSetName = 'User')] param( [Parameter(Mandatory, ParameterSetName = 'User')] [String]$User, [Parameter(Mandatory, ParameterSetName = 'Group')] [String] $Group ) $TaskPrincipalOptions = switch ($PSCmdlet.ParameterSetName) { 'User' { switch ($User) { 'CurrentUser' { @{ UserId = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name LogonType = 'Interactive' RunLevel = 'Limited' } } 'LocalSystem' { @{ UserId = 'NT AUTHORITY\SYSTEM' LogonType = 'ServiceAccount' RunLevel = 'Highest' } } 'LastLoggedOn' { $lastLogonEvent = Get-WinEvent -LogName Security -FilterXPath "*[System[EventID=4624]]" | Sort-Object TimeCreated -Descending | Select-Object -First 1 $loggedInUser = $lastLogonEvent.Properties[5].Value @{ UserId = $loggedInUser LogonType = 'Interactive' RunLevel = 'Limited' } } } } 'Group' { @{ GroupId = $Group RunLevel = 'Limited' } } } New-ScheduledTaskPrincipal @TaskPrincipalOptions } foreach ($ScheduledTask in ($ScheduledTaskConfiguration)) { Write-Information "Creating Scheduled Task '$($ScheduledTask.Name)'" $Actions = @() + ( $ScheduledTask.actions | ForEach-Object { return createScheduledTaskAction -ActionConfig $_ }) $Triggers = @() + ( $ScheduledTask.triggers | ForEach-Object { return createScheduledTaskTrigger -TriggerConfig $_ }) $Principal = if ($ScheduledTask.user) { getUserToRunUnder -User $ScheduledTask.user } else { getUSerToRunUnder -Group $ScheduledTask.group } $TaskSettings = @{ AllowStartIfOnBatteries = $true Compatibility = 'Win8' DisallowDemandStart = $false DisallowHardTerminate = $false DisallowStartOnRemoteAppSession = $true DontStopIfGoingOnBatteries = $true DontStopOnIdleEnd = $true MultipleInstances = 'IgnoreNew' # 'Queue' # 'Parallel' # 'IgnoreNew' RunOnlyIfIdle = $false } $ScheduledTaskSettings = (New-ScheduledTaskSettingsSet @TaskSettings ) Register-ScheduledTask -TaskName $ScheduledTask.Name -Action $Actions -Trigger $Triggers -Principal $Principal -Settings $ScheduledTaskSettings -Force if ($ScheduledTask.startAfterInstallation) { Start-ScheduledTask -TaskName $ScheduledTask.Name } } } end { } } # SIG # Begin signature block # MIIumAYJKoZIhvcNAQcCoIIuiTCCLoUCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCRXxEkdvyEQwLd # hfORfHQAbP/re1zhQDS5/30vY+Z806CCE/8wggVyMIIDWqADAgECAhB2U/6sdUZI # k/Xl10pIOk74MA0GCSqGSIb3DQEBDAUAMFMxCzAJBgNVBAYTAkJFMRkwFwYDVQQK # ExBHbG9iYWxTaWduIG52LXNhMSkwJwYDVQQDEyBHbG9iYWxTaWduIENvZGUgU2ln # bmluZyBSb290IFI0NTAeFw0yMDAzMTgwMDAwMDBaFw00NTAzMTgwMDAwMDBaMFMx # CzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMSkwJwYDVQQD # EyBHbG9iYWxTaWduIENvZGUgU2lnbmluZyBSb290IFI0NTCCAiIwDQYJKoZIhvcN # AQEBBQADggIPADCCAgoCggIBALYtxTDdeuirkD0DcrA6S5kWYbLl/6VnHTcc5X7s # k4OqhPWjQ5uYRYq4Y1ddmwCIBCXp+GiSS4LYS8lKA/Oof2qPimEnvaFE0P31PyLC # o0+RjbMFsiiCkV37WYgFC5cGwpj4LKczJO5QOkHM8KCwex1N0qhYOJbp3/kbkbuL # ECzSx0Mdogl0oYCve+YzCgxZa4689Ktal3t/rlX7hPCA/oRM1+K6vcR1oW+9YRB0 # RLKYB+J0q/9o3GwmPukf5eAEh60w0wyNA3xVuBZwXCR4ICXrZ2eIq7pONJhrcBHe # OMrUvqHAnOHfHgIB2DvhZ0OEts/8dLcvhKO/ugk3PWdssUVcGWGrQYP1rB3rdw1G # R3POv72Vle2dK4gQ/vpY6KdX4bPPqFrpByWbEsSegHI9k9yMlN87ROYmgPzSwwPw # jAzSRdYu54+YnuYE7kJuZ35CFnFi5wT5YMZkobacgSFOK8ZtaJSGxpl0c2cxepHy # 1Ix5bnymu35Gb03FhRIrz5oiRAiohTfOB2FXBhcSJMDEMXOhmDVXR34QOkXZLaRR # kJipoAc3xGUaqhxrFnf3p5fsPxkwmW8x++pAsufSxPrJ0PBQdnRZ+o1tFzK++Ol+ # A/Tnh3Wa1EqRLIUDEwIrQoDyiWo2z8hMoM6e+MuNrRan097VmxinxpI68YJj8S4O # JGTfAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0G # A1UdDgQWBBQfAL9GgAr8eDm3pbRD2VZQu86WOzANBgkqhkiG9w0BAQwFAAOCAgEA # Xiu6dJc0RF92SChAhJPuAW7pobPWgCXme+S8CZE9D/x2rdfUMCC7j2DQkdYc8pzv # eBorlDICwSSWUlIC0PPR/PKbOW6Z4R+OQ0F9mh5byV2ahPwm5ofzdHImraQb2T07 # alKgPAkeLx57szO0Rcf3rLGvk2Ctdq64shV464Nq6//bRqsk5e4C+pAfWcAvXda3 # XaRcELdyU/hBTsz6eBolSsr+hWJDYcO0N6qB0vTWOg+9jVl+MEfeK2vnIVAzX9Rn # m9S4Z588J5kD/4VDjnMSyiDN6GHVsWbcF9Y5bQ/bzyM3oYKJThxrP9agzaoHnT5C # JqrXDO76R78aUn7RdYHTyYpiF21PiKAhoCY+r23ZYjAf6Zgorm6N1Y5McmaTgI0q # 41XHYGeQQlZcIlEPs9xOOe5N3dkdeBBUO27Ql28DtR6yI3PGErKaZND8lYUkqP/f # obDckUCu3wkzq7ndkrfxzJF0O2nrZ5cbkL/nx6BvcbtXv7ePWu16QGoWzYCELS/h # AtQklEOzFfwMKxv9cW/8y7x1Fzpeg9LJsy8b1ZyNf1T+fn7kVqOHp53hWVKUQY9t # W76GlZr/GnbdQNJRSnC0HzNjI3c/7CceWeQIh+00gkoPP/6gHcH1Z3NFhnj0qinp # J4fGGdvGExTDOUmHTaCX4GUT9Z13Vunas1jHOvLAzYIwggboMIIE0KADAgECAhB3 # vQ4Ft1kLth1HYVMeP3XtMA0GCSqGSIb3DQEBCwUAMFMxCzAJBgNVBAYTAkJFMRkw # FwYDVQQKExBHbG9iYWxTaWduIG52LXNhMSkwJwYDVQQDEyBHbG9iYWxTaWduIENv # ZGUgU2lnbmluZyBSb290IFI0NTAeFw0yMDA3MjgwMDAwMDBaFw0zMDA3MjgwMDAw # MDBaMFwxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTIw # MAYDVQQDEylHbG9iYWxTaWduIEdDQyBSNDUgRVYgQ29kZVNpZ25pbmcgQ0EgMjAy # MDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMsg75ceuQEyQ6BbqYoj # /SBerjgSi8os1P9B2BpV1BlTt/2jF+d6OVzA984Ro/ml7QH6tbqT76+T3PjisxlM # g7BKRFAEeIQQaqTWlpCOgfh8qy+1o1cz0lh7lA5tD6WRJiqzg09ysYp7ZJLQ8LRV # X5YLEeWatSyyEc8lG31RK5gfSaNf+BOeNbgDAtqkEy+FSu/EL3AOwdTMMxLsvUCV # 0xHK5s2zBZzIU+tS13hMUQGSgt4T8weOdLqEgJ/SpBUO6K/r94n233Hw0b6nskEz # IHXMsdXtHQcZxOsmd/KrbReTSam35sOQnMa47MzJe5pexcUkk2NvfhCLYc+YVaMk # oog28vmfvpMusgafJsAMAVYS4bKKnw4e3JiLLs/a4ok0ph8moKiueG3soYgVPMLq # 7rfYrWGlr3A2onmO3A1zwPHkLKuU7FgGOTZI1jta6CLOdA6vLPEV2tG0leis1Ult # 5a/dm2tjIF2OfjuyQ9hiOpTlzbSYszcZJBJyc6sEsAnchebUIgTvQCodLm3HadNu # twFsDeCXpxbmJouI9wNEhl9iZ0y1pzeoVdwDNoxuz202JvEOj7A9ccDhMqeC5LYy # AjIwfLWTyCH9PIjmaWP47nXJi8Kr77o6/elev7YR8b7wPcoyPm593g9+m5XEEofn # GrhO7izB36Fl6CSDySrC/blTAgMBAAGjggGtMIIBqTAOBgNVHQ8BAf8EBAMCAYYw # EwYDVR0lBAwwCgYIKwYBBQUHAwMwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4E # FgQUJZ3Q/FkJhmPF7POxEztXHAOSNhEwHwYDVR0jBBgwFoAUHwC/RoAK/Hg5t6W0 # Q9lWULvOljswgZMGCCsGAQUFBwEBBIGGMIGDMDkGCCsGAQUFBzABhi1odHRwOi8v # b2NzcC5nbG9iYWxzaWduLmNvbS9jb2Rlc2lnbmluZ3Jvb3RyNDUwRgYIKwYBBQUH # MAKGOmh0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5jb20vY2FjZXJ0L2NvZGVzaWdu # aW5ncm9vdHI0NS5jcnQwQQYDVR0fBDowODA2oDSgMoYwaHR0cDovL2NybC5nbG9i # YWxzaWduLmNvbS9jb2Rlc2lnbmluZ3Jvb3RyNDUuY3JsMFUGA1UdIAROMEwwQQYJ # KwYBBAGgMgECMDQwMgYIKwYBBQUHAgEWJmh0dHBzOi8vd3d3Lmdsb2JhbHNpZ24u # Y29tL3JlcG9zaXRvcnkvMAcGBWeBDAEDMA0GCSqGSIb3DQEBCwUAA4ICAQAldaAJ # yTm6t6E5iS8Yn6vW6x1L6JR8DQdomxyd73G2F2prAk+zP4ZFh8xlm0zjWAYCImbV # YQLFY4/UovG2XiULd5bpzXFAM4gp7O7zom28TbU+BkvJczPKCBQtPUzosLp1pnQt # pFg6bBNJ+KUVChSWhbFqaDQlQq+WVvQQ+iR98StywRbha+vmqZjHPlr00Bid/XSX # hndGKj0jfShziq7vKxuav2xTpxSePIdxwF6OyPvTKpIz6ldNXgdeysEYrIEtGiH6 # bs+XYXvfcXo6ymP31TBENzL+u0OF3Lr8psozGSt3bdvLBfB+X3Uuora/Nao2Y8nO # ZNm9/Lws80lWAMgSK8YnuzevV+/Ezx4pxPTiLc4qYc9X7fUKQOL1GNYe6ZAvytOH # X5OKSBoRHeU3hZ8uZmKaXoFOlaxVV0PcU4slfjxhD4oLuvU/pteO9wRWXiG7n9dq # cYC/lt5yA9jYIivzJxZPOOhRQAyuku++PX33gMZMNleElaeEFUgwDlInCI2Oor0i # xxnJpsoOqHo222q6YV8RJJWk4o5o7hmpSZle0LQ0vdb5QMcQlzFSOTUpEYck08T7 # qWPLd0jV+mL8JOAEek7Q5G7ezp44UCb0IXFl1wkl1MkHAHq4x/N36MXU4lXQ0x72 # f1LiSY25EXIMiEQmM2YBRN/kMw4h3mKJSAfa9TCCB5kwggWBoAMCAQICDH+jGUtp # n7qIskPg4DANBgkqhkiG9w0BAQsFADBcMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQ # R2xvYmFsU2lnbiBudi1zYTEyMDAGA1UEAxMpR2xvYmFsU2lnbiBHQ0MgUjQ1IEVW # IENvZGVTaWduaW5nIENBIDIwMjAwHhcNMjMwODIzMDg0MjIzWhcNMjQwODIzMDg0 # MjIzWjCB/jEdMBsGA1UEDwwUUHJpdmF0ZSBPcmdhbml6YXRpb24xFTATBgNVBAUT # DDA0MjkuMDM3LjIzNTETMBEGCysGAQQBgjc8AgEDEwJCRTELMAkGA1UEBhMCQkUx # FzAVBgNVBAgTDlZsYWFtcy1CcmFiYW50MRAwDgYDVQQHEwdCZWVyc2VsMRswGQYD # VQQJExJBLiBWYXVjYW1wc2xhYW4gNDIxJTAjBgNVBAoTHEluZXR1bSBSZWFsZG9s # bWVuIEJlbGdpdW0gTlYxDjAMBgNVBAsTBVdQQUFTMSUwIwYDVQQDExxJbmV0dW0g # UmVhbGRvbG1lbiBCZWxnaXVtIE5WMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC # CgKCAgEAz9zO2ny9NoHSdEnF2zFfkTHtLB/oDq80CHB7+7FKCK5aOGYO0Nv/Bg9k # Qc6tHyf/03nK4y4vwxWPIaGcqWe1k1MwvSru5bPbXjS6CnPLnm0OKpHjXCryvvdt # fcyFSZrRPF8wSG6UmYewSEOP8xOUXx2kFcsjrWxHkjvwfrPIKBaCLn/Gldl9MlUc # K8PmPlz0jKMkN6/16Q3R3MqnCfKPIEBkHbEJ3f8F9lRnHq9o2exmfE2GhN7UtBDZ # uN/jzMkPBW7h1AEOZXpzJlUTSMvGJqYGkHX8JxCWwgJWvtZF03dnKWEaJt+3wAOg # DZUj0Yxzz7vsk2Auc+EMwkdlfCSoMDjCv6UmKF7CsLtr6UgDuRR8KK+K7Is+KVbP # a3GEAAuKnXAEdOyGfNmsdyewELrMAlh4fvxcVcLzM9cGgoHo8RU6dczImANeqzm9 # /+LwX3rqem95gkRe8JuJUkBniQVFiQ+6ZvyXzm0L3qCtp0JAsd+n6hCGTR8VzeRY # UDxzmVbnpjBctIEPNT8PqZlFv9zoJxS22X9aZOhBpsuAVtwM5cVt7qR0eCXXPZJk # 9LFUcDCYn/nqi1Qc/IptSjE1ETo9h0GD97Ri4fm2D4ahjsngricSl5oMYbC2PHcn # jOjdd7Ab+UturGdjUvQR/7Z4qjymHJqFA41DPadfBJ6BU+b0IMkCAwEAAaOCAbYw # ggGyMA4GA1UdDwEB/wQEAwIHgDCBnwYIKwYBBQUHAQEEgZIwgY8wTAYIKwYBBQUH # MAKGQGh0dHA6Ly9zZWN1cmUuZ2xvYmFsc2lnbi5jb20vY2FjZXJ0L2dzZ2NjcjQ1 # ZXZjb2Rlc2lnbmNhMjAyMC5jcnQwPwYIKwYBBQUHMAGGM2h0dHA6Ly9vY3NwLmds # b2JhbHNpZ24uY29tL2dzZ2NjcjQ1ZXZjb2Rlc2lnbmNhMjAyMDBVBgNVHSAETjBM # MEEGCSsGAQQBoDIBAjA0MDIGCCsGAQUFBwIBFiZodHRwczovL3d3dy5nbG9iYWxz # aWduLmNvbS9yZXBvc2l0b3J5LzAHBgVngQwBAzAJBgNVHRMEAjAAMEcGA1UdHwRA # MD4wPKA6oDiGNmh0dHA6Ly9jcmwuZ2xvYmFsc2lnbi5jb20vZ3NnY2NyNDVldmNv # ZGVzaWduY2EyMDIwLmNybDATBgNVHSUEDDAKBggrBgEFBQcDAzAfBgNVHSMEGDAW # gBQlndD8WQmGY8Xs87ETO1ccA5I2ETAdBgNVHQ4EFgQUL5AOgixh/ZL7PiP/4x2P # 10jJK7cwDQYJKoZIhvcNAQELBQADggIBAL41K2LQmY2+hWstzMugRhfgZwX+V1PN # jMNef/pd8fyAobNpwnK3kQz8E7QBSPA1c3oWqTSoC5o+vODkxpelyi+whicBKxEn # hY97+T1JOZ5nEJbo2QsHPtFEpKsbW3uPcB29iLcBomNjrEQoomcgsyTiHj+6z2OU # 79uDqJfkUUg7w73fg756VLIpGUo1rWRF6bZh/I6Zjrk+pbL8Su11U1a8H40Xlg8H # cThHQenIGN7AvmbEkZihQQn2jkdDlkk17f+vNw0GpdvNl6Ufu+RiY/ojEljmr6Vg # QmQ6B7FNodDCE6u3xj3iYFV9hyHIkST17QMQj2mV3KQ0tAl4QZZHkjvO1AGvjd3b # VicdJ1EmYMmrP7ovUrujwLZqz3Iux+dWJNShggXzm2NBkD5bgrZPKDvTi9Dd3b0U # IMO88vOo5eMtuolhgozu6Q9EHsuXV+lt/VWO+I0Qgwx/HkFAM99HgVdpXiTkJmZg # vx5C958jaHWk83ybattp7BVrbrzf3FugZhqe0z78n9kACxHW5FhZhDh1vXPUW1yL # HIayt+i0xT7F7lUbuooxyeiOIQYNNXyfbONsDwZDZLbgr2YAxn7y0ZE/9mQ969qE # GDu6XBehyy6p/SKIwVE5ue92rnWhxtQLIezQVGjMOXBIZv/sy+u5HOFQsy5jGjHM # pwzCqJ/r3IiYMYIZ7zCCGesCAQEwbDBcMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQ # R2xvYmFsU2lnbiBudi1zYTEyMDAGA1UEAxMpR2xvYmFsU2lnbiBHQ0MgUjQ1IEVW # IENvZGVTaWduaW5nIENBIDIwMjACDH+jGUtpn7qIskPg4DANBglghkgBZQMEAgEF # AKCBhDAYBgorBgEEAYI3AgEMMQowCKACgAChAoAAMBkGCSqGSIb3DQEJAzEMBgor # BgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3 # DQEJBDEiBCCBwmiF71kith34yWdb6KoKpthz4U38o/ayVgGSnYezyTANBgkqhkiG # 9w0BAQEFAASCAgBMyRDkCP4VKUug3mTM+oH/r6OkyoFH3whVv9oxNMYptUN2ZjnC # oEnc7J/dmmhrMx6MlDG+uwSMVQgkl7NGtpjYBSEl3W5I/DU53BvcqVrfp3904QS0 # QYniIS01wGkD2cP+71Wr5woPyeClASKbVwBILxnzdCNu/H15tKGiY0Mk8dEYiVFN # ywcknJihi4U/cbjq9SJESaBY9504SUZs09FRNr1/ftdISPMv9jrfMGs8W3bmG4wQ # dexA+Rq1ndJg/Zjv5w0FDtE1K/4zAav+6NWVvgQWn2Tf10UjP7CSalSrH/N5gyWF # rtWTFLY1/tussbQlrJxJVhkUjh17SM1MGjosPpEgxMfU13B3O3VM++8wgLXRKCi6 # rLIwCp6hnM4j81vwtSZn/4pQ4u1aEe2g6JRv9aHoSWoc8PcFzRkX8C5AH6+P1e7i # 52vkHUoqcLd5GZlMWc+VplcsnlIKX0StqzOH5xl8Kasx01mzeiYcoKLORrIGiiNk # bIqkQ4H8bcgX++tgXL9KKyrV4EgwjlDTXwhGUWg2P4DOXfVoDHVoLCPN/PHhbTkt # 4QGVzCMjEDWiqG8ZlLt64HVk3o0yX77Fylxlt05Bzf1cBR2uvqv60+97UNw4/xu1 # BtAoZBSrlkGtyDLJyVDBSwF1oi/NX8bi40jTluC2B9EdtQHMeGy0OWN1R6GCFs0w # ghbJBgorBgEEAYI3AwMBMYIWuTCCFrUGCSqGSIb3DQEHAqCCFqYwghaiAgEDMQ0w # CwYJYIZIAWUDBAIBMIHoBgsqhkiG9w0BCRABBKCB2ASB1TCB0gIBAQYLKwYBBAGg # MgIDAQIwMTANBglghkgBZQMEAgEFAAQgz7soIjYF65adwIkor1o9GBKabt2+TImq # a3DZhMSoqe8CFGuVWxOnbcTWMDMsSfaRcqmFD4lgGA8yMDI0MDUxNDEzMjUyOVow # AwIBAaBhpF8wXTELMAkGA1UEBhMCQkUxGTAXBgNVBAoMEEdsb2JhbFNpZ24gbnYt # c2ExMzAxBgNVBAMMKkdsb2JhbHNpZ24gVFNBIGZvciBDb2RlU2lnbjEgLSBSNiAt # IDIwMjMxMaCCElQwggZsMIIEVKADAgECAhABm+reyE1rj/dsOp8uASQWMA0GCSqG # SIb3DQEBCwUAMFsxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52 # LXNhMTEwLwYDVQQDEyhHbG9iYWxTaWduIFRpbWVzdGFtcGluZyBDQSAtIFNIQTM4 # NCAtIEc0MB4XDTIzMTEwNzE3MTM0MFoXDTM0MTIwOTE3MTM0MFowXTELMAkGA1UE # BhMCQkUxGTAXBgNVBAoMEEdsb2JhbFNpZ24gbnYtc2ExMzAxBgNVBAMMKkdsb2Jh # bHNpZ24gVFNBIGZvciBDb2RlU2lnbjEgLSBSNiAtIDIwMjMxMTCCAaIwDQYJKoZI # hvcNAQEBBQADggGPADCCAYoCggGBAOqEN1BoPJWFtUhUcZfzhHLJnYDTCNxZu7/L # TZBpR4nlLNjxqGp+YDdJc5u4mLMU4O+Mk3AgtfUr12YFdT96hFCpUg/g1udv1Bw1 # LuAvKSSjjnclJ+C4831kdQyaQuXGneLYh3OL76CNl34WoMSyRs9gxs8PgVCA3U/p # 5EaiNKc+GMdrtLb7vtqpVn5/nF02PWM0IUvI0qMTGj4vUWh1+X/8cIQRZTMSs0Zl # KISgM8CSne24H4lj0B57LFuwBPS9cmPOsDEhAQJqcrIiLO/rKjsQ1fGa9CaiLPxT # AQR5I2lR012+c4TLm4OIbSDSIM6Bq2oiS3mQQuaCQq8D69TQ2oN6wy1I8c1FkbcR # Qd0X70D8EqKywFmqVJdObcN63YaG1Ds3RzjoAzwxv0wze0Ps8ND/ZaafmD3SxrpZ # ImwQWBHFBMzoopiwHTPQ85Ud+O1xtAtB1WR5orxgLsN6yd5wNxIWPgKPXTgRsASJ # Z4ulLSDbuNb1nPUPvIi/JyzD+SCiwQIDAQABo4IBqDCCAaQwDgYDVR0PAQH/BAQD # AgeAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMB0GA1UdDgQWBBT5Tqu+uPhb/8LH # A/RB7pz41nR9PzBWBgNVHSAETzBNMAgGBmeBDAEEAjBBBgkrBgEEAaAyAR4wNDAy # BggrBgEFBQcCARYmaHR0cHM6Ly93d3cuZ2xvYmFsc2lnbi5jb20vcmVwb3NpdG9y # eS8wDAYDVR0TAQH/BAIwADCBkAYIKwYBBQUHAQEEgYMwgYAwOQYIKwYBBQUHMAGG # LWh0dHA6Ly9vY3NwLmdsb2JhbHNpZ24uY29tL2NhL2dzdHNhY2FzaGEzODRnNDBD # BggrBgEFBQcwAoY3aHR0cDovL3NlY3VyZS5nbG9iYWxzaWduLmNvbS9jYWNlcnQv # Z3N0c2FjYXNoYTM4NGc0LmNydDAfBgNVHSMEGDAWgBTqFsZp5+PLV0U5M6TwQL7Q # w71lljBBBgNVHR8EOjA4MDagNKAyhjBodHRwOi8vY3JsLmdsb2JhbHNpZ24uY29t # L2NhL2dzdHNhY2FzaGEzODRnNC5jcmwwDQYJKoZIhvcNAQELBQADggIBAJX0Z8+T # mkOSgxd21iBVvIn/5F+y5RUat5cRQC4AQb7FPySgG0cHMwRMtLRi/8bu0wzCNKCU # XDeY60T4X/gnCgK+HtEkHSPLLxyrJ3qzqcUvDOTlkPAVJB6jFRn474PoT7toniNv # fT0NcXBhMnxGbvKP0ZzoQ036g+H/xOA+/t5X3wZr82oGgWirDHwq949C/8Bzadsc # pxZPJhlYc+2UXuQaohCCBzI7yp6/3Tl11LyLVD9+UJU0n5I5JFMYg1DUWy9mtHv+ # WynrHsUF/aM9+6Gw8yt5D7FLrMOj2aPcLJwrI5b2eiq7rcVXtoS2Y7NgmBHsxtZm # byKDHIpYA/SP7JxO0N/uzmEh07WVVEk7IVE9oSOFksJb8nqUhJgKjyRWIooE+rSa # iUg1+G/rgYYRU8CTezq01DTMYtY1YY6mUPuIdB7XMTUhHhG/q6NkU45U4nNmpPtm # Y+E3ycRr+yszixHDdJCBg8hPhsrdSpfbfpBQJaFh7IabNlIHyz5iVewzpuW4Gvrd # JC4M+TKJMWo1lf720f8Xiq4jCSshrmLu9+4357DJsxXtdpq3/ef+4WjeRMEKdOGV # yFf7FOseWt+WdcVlGff01Y0hr2O26/TiF0aft9cHbmqdK/7p0nFO0r5PYtNJ1mBf # QON2mSBE2Epcs10a2eKqv01ZABeeYGc6RxKgMIIGWTCCBEGgAwIBAgINAewckkDe # /S5AXXxHdDANBgkqhkiG9w0BAQwFADBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJv # b3QgQ0EgLSBSNjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFs # U2lnbjAeFw0xODA2MjAwMDAwMDBaFw0zNDEyMTAwMDAwMDBaMFsxCzAJBgNVBAYT # AkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTEwLwYDVQQDEyhHbG9iYWxT # aWduIFRpbWVzdGFtcGluZyBDQSAtIFNIQTM4NCAtIEc0MIICIjANBgkqhkiG9w0B # AQEFAAOCAg8AMIICCgKCAgEA8ALiMCP64BvhmnSzr3WDX6lHUsdhOmN8OSN5bXT8 # MeR0EhmW+s4nYluuB4on7lejxDXtszTHrMMM64BmbdEoSsEsu7lw8nKujPeZWl12 # rr9EqHxBJI6PusVP/zZBq6ct/XhOQ4j+kxkX2e4xz7yKO25qxIjw7pf23PMYoEuZ # HA6HpybhiMmg5ZninvScTD9dW+y279Jlz0ULVD2xVFMHi5luuFSZiqgxkjvyen38 # DljfgWrhsGweZYIq1CHHlP5CljvxC7F/f0aYDoc9emXr0VapLr37WD21hfpTmU1b # dO1yS6INgjcZDNCr6lrB7w/Vmbk/9E818ZwP0zcTUtklNO2W7/hn6gi+j0l6/5Cx # 1PcpFdf5DV3Wh0MedMRwKLSAe70qm7uE4Q6sbw25tfZtVv6KHQk+JA5nJsf8sg2g # lLCylMx75mf+pliy1NhBEsFV/W6RxbuxTAhLntRCBm8bGNU26mSuzv31BebiZtAO # BSGssREGIxnk+wU0ROoIrp1JZxGLguWtWoanZv0zAwHemSX5cW7pnF0CTGA8zwKP # Af1y7pLxpxLeQhJN7Kkm5XcCrA5XDAnRYZ4miPzIsk3bZPBFn7rBP1Sj2HYClWxq # jcoiXPYMBOMp+kuwHNM3dITZHWarNHOPHn18XpbWPRmwl+qMUJFtr1eGfhA3HWsa # FN8CAwEAAaOCASkwggElMA4GA1UdDwEB/wQEAwIBhjASBgNVHRMBAf8ECDAGAQH/ # AgEAMB0GA1UdDgQWBBTqFsZp5+PLV0U5M6TwQL7Qw71lljAfBgNVHSMEGDAWgBSu # bAWjkxPioufi1xzWx/B/yGdToDA+BggrBgEFBQcBAQQyMDAwLgYIKwYBBQUHMAGG # Imh0dHA6Ly9vY3NwMi5nbG9iYWxzaWduLmNvbS9yb290cjYwNgYDVR0fBC8wLTAr # oCmgJ4YlaHR0cDovL2NybC5nbG9iYWxzaWduLmNvbS9yb290LXI2LmNybDBHBgNV # HSAEQDA+MDwGBFUdIAAwNDAyBggrBgEFBQcCARYmaHR0cHM6Ly93d3cuZ2xvYmFs # c2lnbi5jb20vcmVwb3NpdG9yeS8wDQYJKoZIhvcNAQEMBQADggIBAH/iiNlXZytC # X4GnCQu6xLsoGFbWTL/bGwdwxvsLCa0AOmAzHznGFmsZQEklCB7km/fWpA2PHpby # hqIX3kG/T+G8q83uwCOMxoX+SxUk+RhE7B/CpKzQss/swlZlHb1/9t6CyLefYdO1 # RkiYlwJnehaVSttixtCzAsw0SEVV3ezpSp9eFO1yEHF2cNIPlvPqN1eUkRiv3I2Z # OBlYwqmhfqJuFSbqtPl/KufnSGRpL9KaoXL29yRLdFp9coY1swJXH4uc/LusTN76 # 3lNMg/0SsbZJVU91naxvSsguarnKiMMSME6yCHOfXqHWmc7pfUuWLMwWaxjN5Fk3 # hgks4kXWss1ugnWl2o0et1sviC49ffHykTAFnM57fKDFrK9RBvARxx0wxVFWYOh8 # lT0i49UKJFMnl4D6SIknLHniPOWbHuOqhIKJPsBK9SH+YhDtHTD89szqSCd8i3VC # f2vL86VrlR8EWDQKie2CUOTRe6jJ5r5IqitV2Y23JSAOG1Gg1GOqg+pscmFKyfpD # xMZXxZ22PLCLsLkcMe+97xTYFEBsIB3CLegLxo1tjLZx7VIh/j72n585Gq6s0i96 # ILH0rKod4i0UnfqWah3GPMrz2Ry/U02kR1l8lcRDQfkl4iwQfoH5DZSnffK1CfXY # YHJAUJUg1ENEvvqglecgWbZ4xqRqqiKbMIIFgzCCA2ugAwIBAgIORea7A4Mzw4Vl # SOb/RVEwDQYJKoZIhvcNAQEMBQAwTDEgMB4GA1UECxMXR2xvYmFsU2lnbiBSb290 # IENBIC0gUjYxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2JhbFNp # Z24wHhcNMTQxMjEwMDAwMDAwWhcNMzQxMjEwMDAwMDAwWjBMMSAwHgYDVQQLExdH # bG9iYWxTaWduIFJvb3QgQ0EgLSBSNjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEG # A1UEAxMKR2xvYmFsU2lnbjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB # AJUH6HPKZvnsFMp7PPcNCPG0RQssgrRIxutbPK6DuEGSMxSkb3/pKszGsIhrxbaJ # 0cay/xTOURQh7ErdG1rG1ofuTToVBu1kZguSgMpE3nOUTvOniX9PeGMIyBJQbUJm # L025eShNUhqKGoC3GYEOfsSKvGRMIRxDaNc9PIrFsmbVkJq3MQbFvuJtMgamHvm5 # 66qjuL++gmNQ0PAYid/kD3n16qIfKtJwLnvnvJO7bVPiSHyMEAc4/2ayd2F+4OqM # PKq0pPbzlUoSB239jLKJz9CgYXfIWHSw1CM69106yqLbnQneXUQtkPGBzVeS+n68 # UARjNN9rkxi+azayOeSsJDa38O+2HBNXk7besvjihbdzorg1qkXy4J02oW9UivFy # Vm4uiMVRQkQVlO6jxTiWm05OWgtH8wY2SXcwvHE35absIQh1/OZhFj931dmRl4QK # bNQCTXTAFO39OfuD8l4UoQSwC+n+7o/hbguyCLNhZglqsQY6ZZZZwPA1/cnaKI0a # EYdwgQqomnUdnjqGBQCe24DWJfncBZ4nWUx2OVvq+aWh2IMP0f/fMBH5hc8zSPXK # bWQULHpYT9NLCEnFlWQaYw55PfWzjMpYrZxCRXluDocZXFSxZba/jJvcE+kNb7gu # 3GduyYsRtYQUigAZcIN5kZeR1BonvzceMgfYFGM8KEyvAgMBAAGjYzBhMA4GA1Ud # DwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSubAWjkxPioufi # 1xzWx/B/yGdToDAfBgNVHSMEGDAWgBSubAWjkxPioufi1xzWx/B/yGdToDANBgkq # hkiG9w0BAQwFAAOCAgEAgyXt6NH9lVLNnsAEoJFp5lzQhN7craJP6Ed41mWYqVuo # PId8AorRbrcWc+ZfwFSY1XS+wc3iEZGtIxg93eFyRJa0lV7Ae46ZeBZDE1ZXs6Kz # O7V33EByrKPrmzU+sQghoefEQzd5Mr6155wsTLxDKZmOMNOsIeDjHfrYBzN2VAAi # KrlNIC5waNrlU/yDXNOd8v9EDERm8tLjvUYAGm0CuiVdjaExUd1URhxN25mW7xoc # BFymFe944Hn+Xds+qkxV/ZoVqW/hpvvfcDDpw+5CRu3CkwWJ+n1jez/QcYF8AOiY # rg54NMMl+68KnyBr3TsTjxKM4kEaSHpzoHdpx7Zcf4LIHv5YGygrqGytXm3ABdJ7 # t+uA/iU3/gKbaKxCXcPu9czc8FB10jZpnOZ7BN9uBmm23goJSFmH63sUYHpkqmlD # 75HHTOwY3WzvUy2MmeFe8nI+z1TIvWfspA9MRf/TuTAjB0yPEL+GltmZWrSZVxyk # zLsViVO6LAUP5MSeGbEYNNVMnbrt9x+vJJUEeKgDu+6B5dpffItKoZB0JaezPkvI # LFa9x8jvOOJckvB595yEunQtYQEgfn7R8k8HWV+LLUNS60YMlOH1Zkd5d9VUWx+t # JDfLRVpOoERIyNiwmcUVhAn21klJwGW45hpxbqCo8YLoRT5s1gLXCmeDBVrJpBAx # ggNJMIIDRQIBATBvMFsxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWdu # IG52LXNhMTEwLwYDVQQDEyhHbG9iYWxTaWduIFRpbWVzdGFtcGluZyBDQSAtIFNI # QTM4NCAtIEc0AhABm+reyE1rj/dsOp8uASQWMAsGCWCGSAFlAwQCAaCCAS0wGgYJ # KoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMCsGCSqGSIb3DQEJNDEeMBwwCwYJYIZI # AWUDBAIBoQ0GCSqGSIb3DQEBCwUAMC8GCSqGSIb3DQEJBDEiBCCWFtNG5H4jHXEL # jRrFim3IheT9xbtEFCLCPpw9FYJHVzCBsAYLKoZIhvcNAQkQAi8xgaAwgZ0wgZow # gZcEIDqIepUbXrkqXuFPbLt2gjelRdAQW/BFEb3iX4KpFtHoMHMwX6RdMFsxCzAJ # BgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMTEwLwYDVQQDEyhH # bG9iYWxTaWduIFRpbWVzdGFtcGluZyBDQSAtIFNIQTM4NCAtIEc0AhABm+reyE1r # j/dsOp8uASQWMA0GCSqGSIb3DQEBCwUABIIBgMopKCEnKnIIAvC1N+yDrOZPtj3F # gZfDKKu+qyBUK1wiF4oeT2Lrv5EjK3eSPEVRJiYKTdNd5+O3f/iRFaWf/YGFoWR4 # m3qIfIYahq99C9IGOAjm5uPQM5Jg4BUgF3h2E5vRs6OnyrSot8ENZxBenZR9RfbU # uCpaYzKcorG10zWdFgnW85JTqesj3wII5ZBKb/S7kWKHFr9GvyJGdtkLkyNfVTla # dHt6+8oL7UTbYKxXsAf+cvQI3oCrXlV8pTF4YioKKLraA7Gfy0KWLCb0aFSYEzn6 # /orfjPeUJIwObL5UhLuiHZzLSY/1W9wF/0DCR29Pqc6N5YXbiFpgeTkNNU2d4HX7 # 88HS7Yhau+Frlc3fHStqsdOO09lSyPuuaPBtl8Vx9n3xIqBptT8TGYfElGFLFcVY # tPU7GyMMvCMfMjT60J71gKGkJvSjsObMS1IRnnyU9GN1f1AQX90GL8ZGp7JXrVtc # /PhJGNUQGMPu67B/NnZSonYV0tiFZRphvG84oQ== # SIG # End signature block |