public/Set-AppVentiXPublishingTask.ps1
|
<#
.SYNOPSIS Updates the properties of an AppVentiX publishing task. .DESCRIPTION The Set-AppVentiXPublishingTask function is used to update the properties of an existing AppVentiX publishing task. It allows you to modify the ID, MachineGroupFriendlyname, Group, and Priority of the task. Every run also brings the task up to date with the RelativePath element, which holds the package path relative to the Content Share. Piping Get-AppVentiXPublishingTask into this function without any other parameter therefore adds the missing relative paths. Tasks can be piped in, and the Publishing Tasks file is read once and saved once for the whole pipeline. .PARAMETER Id Specifies the ID of the publishing task to be updated. The ID must be a valid GUID. Accepts the Id of the objects returned by Get-AppVentiXPublishingTask from the pipeline. .PARAMETER MachineGroupFriendlyname Specifies the friendly name of the machine group associated with the publishing task. If this parameter is not provided, the machine group friendly name will not be changed. .PARAMETER Group Specifies the group name associated with the publishing task. The group name should contain the domain name and the group name, e.g., "DOMAIN.LOCAL\GROUP". If this parameter is not provided, the group name will not be changed. .PARAMETER Priority Specifies the priority of the publishing task. If this parameter is not provided, the priority will not be changed. .PARAMETER ConfigShare Specifies the configuration share path. If this parameter is not provided, the default configuration share path will be used. .EXAMPLE Set-AppVentiXPublishingTask -Id "12345678-1234-1234-1234-1234567890AB" -MachineGroupFriendlyname "MyMachineGroup" -Group "DOMAIN\GROUP" -Priority 1 -ConfigShare "\\fileserver.domain.local\config" This example updates the properties of the publishing task with the specified ID. It changes the machine group friendly name to "MyMachineGroup", the group name to "DOMAIN\GROUP", the priority to 1, and uses the specified configuration share path. .EXAMPLE Get-AppVentiXPublishingTask | Set-AppVentiXPublishingTask This example adds the missing relative path to every user publishing task, without changing anything else. .EXAMPLE Set-AppVentiXPublishingTask -Id "12345678-1234-1234-1234-1234567890AB" This example adds the missing relative path to the publishing task with the specified ID. .LINK Get-AppVentiXPublishingTask .LINK Update-AppVentiXPublishingTaskPath .LINK New-AppVentiXPublishingTask .LINK Remove-AppVentiXPublishingTask .LINK Copy-AppVentiXPublishingTask .LINK Export-AppVentiXPublishingTaskReport .LINK Get-AppVentiXMachineGroup .NOTES Function : Set-AppVentiXPublishingTask Author : John Billekens Copyright: (c) John Billekens Consultancy & AppVentiX Version : 2026.804.1515 Requires : Valid AppVentiX license #> function Set-AppVentiXPublishingTask { [CmdletBinding()] param ( [Parameter(Mandatory, ValueFromPipelineByPropertyName)] [ValidateScript({ if ( [guid]::TryParse("$_", $([ref][guid]::Empty)) ) { $true } else { throw [System.Management.Automation.ValidationMetadataException] "The ID '${_}' is not a valid GUID." } })] [ValidateNotNullOrEmpty()] [String]$Id, [Parameter()] [String[]]$MachineGroupFriendlyname, [Parameter()] [ValidateScript({ $invalidGroups = $_ | Where-Object { $_ -notmatch '^.*\.*$' } if ($invalidGroups) { throw "The following group names are invalid: $($invalidGroups -join ', ')" } return $true })] [String[]]$Group, [Parameter()] [int]$Priority, [Alias('Config', 'Share', 'AppVentixConfigShare')] [Parameter(DontShow)] [ValidateNotNullOrEmpty()] [String]$ConfigShare = $Script:AppVentix.ConfigShare ) begin { $isLicensed = Test-AppVentiXIsLicensed -ConfigShare $ConfigShare if (-not $isLicensed) { Write-Warning "AppVentiX is not licensed. Please provide a valid license to use this function." return } $publishingTasksFullname = Join-Path -Path $ConfigShare -ChildPath $Script:AppVentiX.PublishingTasksFilename Write-Verbose "Reading data from $($publishingTasksFullname)" $publishingTasksXml = New-Object -TypeName System.Xml.XmlDocument try { $publishingTasksXml.Load($publishingTasksFullname) } catch { Write-Verbose "Could not load the Publishing Tasks file, $($_.Exception.Message)" if (Test-Path -Path $publishingTasksFullname) { Write-Warning "The Publishing Tasks file exists but is not accessible!" throw "The Publishing Tasks file exists but is not accessible!" } else { Write-Warning "The Publishing Tasks file does not yet exists, creating a new file!" } } $publishingTasksXml = Format-AppVentiXPublishingTasksXml -XmlDocument $publishingTasksXml $anyChanged = $false $changedTasks = @() } process { if (-not $isLicensed) { return } $isChanged = $false $publishingTask = $publishingTasksXml.SelectSingleNode("//Task[Id='$($Id)']") Write-Verbose "Function needs to change Group: $($PSBoundParameters.ContainsKey("Group"))" Write-Verbose "Function needs to change MachineGroupFriendlyname: $($PSBoundParameters.ContainsKey("MachineGroupFriendlyname"))" Write-Verbose "Function needs to change Priority: $($PSBoundParameters.ContainsKey("Priority"))" if (($publishingTask | Measure-Object).Count -eq 1) { if ($PSBoundParameters.ContainsKey("Group") -and (-not ([String]::IsNullOrEmpty($Group)) -or $Group.Count -gt 0)) { Write-Verbose "Group was changed to `"$($Group -join ', ')`"" $groupSID = @() $NewADGroup = @() foreach ($ADGroup in $Group) { if ($ADGroup -ieq "Everyone") { $ADGroup = "Everyone" Write-Verbose "Group value is `"$ADGroup`", which is valid." } elseif ($ADGroup -notmatch '^([\w-]+\.){1,}[\w-]+\\.+$') { Write-Warning "The parameter -Group should contain the fully qualified domain name and the groupname, e.g. `"DOMAIN.LOCAL\GROUP`"" Write-Warning "Falling back on default (user dns) value: `"$($env:USERDNSDOMAIN)\$ADGroup`"" try { if ($ADGroup -like "*\*") { $null, $ADGroup = "$ADGroup".split('\') } $ADGroup = "$($env:USERDNSDOMAIN)\$ADGroup" Write-Verbose "Group value modified to: `"$ADGroup`"" } catch { $ADGroup = "$($env:USERDNSDOMAIN)\$ADGroup" Write-Verbose "Group value modified to: `"$ADGroup`", but an error occurred: $($_.Exception.Message)" } if ($ADGroup -notmatch '^([\w-]+\.){1,}[\w-]+\\.+$') { throw "Cannot determine fully qualified domain name for group `"$ADGroup`"! Please specify the fully qualified domain name and the groupname, e.g. `"DOMAIN.LOCAL\GROUP`"" } } else { Write-Verbose "Group value is valid: `"$ADGroup`"" } $NewADGroup += $ADGroup Write-Verbose "Continuing with Group value: `"$ADGroup`"" } $CurrentADGroup = @($publishingTask.SelectNodes("Group")) if ($CurrentADGroup.Count -gt 0) { foreach ($adGrp in $CurrentADGroup) { Write-Verbose "Removing ADGroup element with value `"$($adGrp.InnerText)`" from the publishing task" $null = $publishingTask.RemoveChild($adGrp) } Write-Verbose "Removed ADGroup element from the publishing task" } else { Write-Warning "No ADGroup element found in the publishing task" } $CurrentADGroupSID = @($publishingTask.SelectNodes("ADGroupSID")) if ($CurrentADGroupSID.Count -gt 0) { foreach ($adGrpSID in $CurrentADGroupSID) { Write-Verbose "Removing ADGroupSID element with value `"$($adGrpSID.InnerText)`" from the publishing task" $null = $publishingTask.RemoveChild($adGrpSID) } Write-Verbose "Removed ADGroupSID element from the publishing task" } else { Write-Warning "No ADGroupSID element found in the publishing task" } if ($NewADGroup.Count -gt 0) { Write-Verbose "Setting $($NewADGroup.Count) new Group values" foreach ($ADGroup in $NewADGroup) { Write-Verbose "Setting Group to `"$ADGroup`"" $null = $($publishingTask.AppendChild($publishingTasksXml.CreateElement("Group"))).AppendChild($publishingTasksXml.CreateTextNode($ADGroup)) try { if ($ADGroup -ieq "everyone") { $groupSID = '23-23-23-23' Write-Verbose "Everyone group detected, using SID `"$groupSID`"" } else { $groupSID = '' Write-Verbose "Retrieving the SID for group `"$ADGroup`"" $groupSID = Get-GroupSID -GroupName $ADGroup -ErrorAction Stop if ([String]::IsNullOrEmpty($groupSID)) { Write-Warning "Could not retrieve the SID for group `"$ADGroup`"." $groupSID = "" } else { Write-Verbose "The SID for group `"$ADGroup`" is `"$groupSID`"" } } } catch { Write-Verbose "Could not retrieve the SID for group `"$ADGroup`", $($_.Exception.Message)" $groupSID = "" } $null = $($publishingTask.AppendChild($publishingTasksXml.CreateElement("ADGroupSID"))).AppendChild($publishingTasksXml.CreateTextNode($groupSID)) } Write-Verbose "Group was changed to `"$($NewADGroup -join ', ')`"" } else { Write-Warning "No Group value provided to set in the publishing task" } $isChanged = $true } else { Write-Verbose "Group was not changed" } if ($PSBoundParameters.ContainsKey("MachineGroupFriendlyname") -and (-not ([String]::IsNullOrEmpty($MachineGroupFriendlyname)) -or $MachineGroupFriendlyname.Count -gt 0)) { # A parameter keeps its value across pipeline items, so resolve into a local. $newMachineGroupFriendlyname = $MachineGroupFriendlyname Write-Verbose "MachineGroupFriendlyname was changed to `"$newMachineGroupFriendlyname`"" Write-Verbose "Checking the machine group `"$newMachineGroupFriendlyname`"" if (([String]::IsNullOrEmpty($newMachineGroupFriendlyname)) -or $newMachineGroupFriendlyname.Count -eq 0 -or ($newMachineGroupFriendlyname -contains 'All Machine Groups')) { $newMachineGroupFriendlyname = @('All Machine Groups') $MachineGroup = 'All' } else { try { $machineGroupData = @() foreach ($mg in $MachineGroupFriendlyname) { $machineGroupResult = Get-AppVentiXMachineGroup -Name $mg -ConfigShare $ConfigShare if ($null -eq $machineGroupResult.FriendlyName -or $machineGroupResult.FriendlyName -notlike $mg) { throw "Machine group `"$mg`" not found!" } else { $machineGroupData += $machineGroupResult } } } catch { Write-Error $_ throw "Error retrieving machine group(s) `"$($MachineGroupFriendlyname -join ', ')`": $($_.Exception.Message)" } $newMachineGroupFriendlyname = @($machineGroupData | Select-Object -ExpandProperty FriendlyName) $machineGroup = @($machineGroupData | Select-Object -ExpandProperty GroupName) } #$adGroupSID = @($publishingTask.SelectNodes("ADGroupSID")) $CurrentMachineGroupFriendlyname = @($publishingTask.SelectNodes("MachineGroupFriendlyname")) $CurrentMachineGroup = @($publishingTask.SelectNodes("MachineGroup")) if ($CurrentMachineGroupFriendlyname.Count -gt 0) { foreach ($mgfn in $CurrentMachineGroupFriendlyname) { Write-Verbose "Removing MachineGroupFriendlyname element with value `"$($mgfn.InnerText)`" from the publishing task" $null = $publishingTask.RemoveChild($mgfn) } Write-Verbose "Removed MachineGroupFriendlyname element from the publishing task" } else { Write-Warning "No MachineGroupFriendlyname element found in the publishing task" } if ($CurrentMachineGroup.Count -gt 0) { foreach ($mg in $CurrentMachineGroup) { Write-Verbose "Removing MachineGroup element with value `"$($mg.InnerText)`" from the publishing task" $null = $publishingTask.RemoveChild($mg) } Write-Verbose "Removed MachineGroup element from the publishing task" } else { Write-Warning "No MachineGroup element found in the publishing task" } if ($newMachineGroupFriendlyname.Count -gt 0) { foreach ($mgfn in $newMachineGroupFriendlyname) { $null = $($publishingTask.AppendChild($publishingTasksXml.CreateElement("MachineGroupFriendlyname"))).AppendChild($publishingTasksXml.CreateTextNode($mgfn)) Write-Verbose "MachineGroupFriendlyname set to '$mgfn'" } } if ($MachineGroup.Count -gt 0) { foreach ($mg in $MachineGroup) { $null = $($publishingTask.AppendChild($publishingTasksXml.CreateElement("MachineGroup"))).AppendChild($publishingTasksXml.CreateTextNode($mg)) Write-Verbose "MachineGroup set to '$mg'" } } Write-Verbose "MachineGroupFriendlyname was changed to `"$($newMachineGroupFriendlyname -join ', ')`"" $isChanged = $true } else { Write-Verbose "MachineGroupFriendlyname was not changed" } if ($PSBoundParameters.ContainsKey("Priority") -and $Priority -ge 0) { $publishingTask.Priority = $Priority Write-Verbose "Priority was changed to `"$Priority`"" $isChanged = $true } else { Write-Verbose "Priority was not changed" } $taskFullPath = "$($publishingTask.Path)" if (Test-AppVentiXPathIsAbsolute -Path $taskFullPath) { $taskRelativePath = ConvertTo-AppVentiXRelativePackagePath -Path $taskFullPath -ConfigShare $ConfigShare -WarningAction SilentlyContinue if ($taskRelativePath -ieq $taskFullPath) { Write-Verbose "The package is not located in a Content Share, no relative path is stored" } elseif ("$($publishingTask.RelativePath)" -cne $taskRelativePath) { Set-AppVentiXRelativePathElement -TaskElement $publishingTask -RelativePath $taskRelativePath -Confirm:$false Write-Verbose "RelativePath set to `"$taskRelativePath`"" $isChanged = $true } else { Write-Verbose "RelativePath is already up to date" } } else { Write-Verbose "The task does not hold a full path, run Update-AppVentiXPublishingTaskPath to repair it" } if ($isChanged) { $changedTasks += [PSCustomObject]@{ Name = "$($publishingTask.Name)"; Path = "$($publishingTask.Path)" } $anyChanged = $true } else { Write-Verbose "No changes were made to the Publishing Task with ID `"$Id`"" } } elseif (($publishingTask | Measure-Object).Count -gt 1) { # Non terminating: a terminating error would drop the changes of the earlier tasks. Write-Error "Multiple Publishing Tasks with ID `"$Id`" found while expecting only one!" } else { Write-Error "The Publishing Task with ID `"$Id`" does not exist!" } } end { if (-not $isLicensed) { return } if (-not $anyChanged) { Write-Verbose "No changes were made, the Publishing Tasks file is unchanged" return } Write-Verbose "Saving the Publishing Tasks file" try { $publishingTasksXml.Save($publishingTasksFullname) } catch { Write-Error "Could not save the Publishing Tasks file, $($_.Exception.Message)" throw "Could not save the Publishing Tasks file, $($_.Exception.Message)" } foreach ($changedTask in $changedTasks) { Write-AppVentiXLogEntry -Feature Application -Action $($MyInvocation.MyCommand.Name) -Details "Changed the Publishing Task, Package name: `"$($changedTask.Name)`", Path: `"$($changedTask.Path)`"" -ConfigShare $ConfigShare } } } # SIG # Begin signature block # MII5zAYJKoZIhvcNAQcCoII5vTCCObkCAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCLqk1B6W/Txgkb # RNc1szO2zWdhTm8XbjB8ugZJvIq4z6CCIfAwggXMMIIDtKADAgECAhBUmNLR1FsZ # lUgTecgRwIeZMA0GCSqGSIb3DQEBDAUAMHcxCzAJBgNVBAYTAlVTMR4wHAYDVQQK # ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xSDBGBgNVBAMTP01pY3Jvc29mdCBJZGVu # dGl0eSBWZXJpZmljYXRpb24gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAy # MDAeFw0yMDA0MTYxODM2MTZaFw00NTA0MTYxODQ0NDBaMHcxCzAJBgNVBAYTAlVT # MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xSDBGBgNVBAMTP01pY3Jv # c29mdCBJZGVudGl0eSBWZXJpZmljYXRpb24gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRo # b3JpdHkgMjAyMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALORKgeD # Bmf9np3gx8C3pOZCBH8Ppttf+9Va10Wg+3cL8IDzpm1aTXlT2KCGhFdFIMeiVPvH # or+Kx24186IVxC9O40qFlkkN/76Z2BT2vCcH7kKbK/ULkgbk/WkTZaiRcvKYhOuD # PQ7k13ESSCHLDe32R0m3m/nJxxe2hE//uKya13NnSYXjhr03QNAlhtTetcJtYmrV # qXi8LW9J+eVsFBT9FMfTZRY33stuvF4pjf1imxUs1gXmuYkyM6Nix9fWUmcIxC70 # ViueC4fM7Ke0pqrrBc0ZV6U6CwQnHJFnni1iLS8evtrAIMsEGcoz+4m+mOJyoHI1 # vnnhnINv5G0Xb5DzPQCGdTiO0OBJmrvb0/gwytVXiGhNctO/bX9x2P29Da6SZEi3 # W295JrXNm5UhhNHvDzI9e1eM80UHTHzgXhgONXaLbZ7LNnSrBfjgc10yVpRnlyUK # xjU9lJfnwUSLgP3B+PR0GeUw9gb7IVc+BhyLaxWGJ0l7gpPKWeh1R+g/OPTHU3mg # trTiXFHvvV84wRPmeAyVWi7FQFkozA8kwOy6CXcjmTimthzax7ogttc32H83rwjj # O3HbbnMbfZlysOSGM1l0tRYAe1BtxoYT2v3EOYI9JACaYNq6lMAFUSw0rFCZE4e7 # swWAsk0wAly4JoNdtGNz764jlU9gKL431VulAgMBAAGjVDBSMA4GA1UdDwEB/wQE # AwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTIftJqhSobyhmYBAcnz1AQ # T2ioojAQBgkrBgEEAYI3FQEEAwIBADANBgkqhkiG9w0BAQwFAAOCAgEAr2rd5hnn # LZRDGU7L6VCVZKUDkQKL4jaAOxWiUsIWGbZqWl10QzD0m/9gdAmxIR6QFm3FJI9c # Zohj9E/MffISTEAQiwGf2qnIrvKVG8+dBetJPnSgaFvlVixlHIJ+U9pW2UYXeZJF # xBA2CFIpF8svpvJ+1Gkkih6PsHMNzBxKq7Kq7aeRYwFkIqgyuH4yKLNncy2RtNwx # AQv3Rwqm8ddK7VZgxCwIo3tAsLx0J1KH1r6I3TeKiW5niB31yV2g/rarOoDXGpc8 # FzYiQR6sTdWD5jw4vU8w6VSp07YEwzJ2YbuwGMUrGLPAgNW3lbBeUU0i/OxYqujY # lLSlLu2S3ucYfCFX3VVj979tzR/SpncocMfiWzpbCNJbTsgAlrPhgzavhgplXHT2 # 6ux6anSg8Evu75SjrFDyh+3XOjCDyft9V77l4/hByuVkrrOj7FjshZrM77nq81YY # uVxzmq/FdxeDWds3GhhyVKVB0rYjdaNDmuV3fJZ5t0GNv+zcgKCf0Xd1WF81E+Al # GmcLfc4l+gcK5GEh2NQc5QfGNpn0ltDGFf5Ozdeui53bFv0ExpK91IjmqaOqu/dk # ODtfzAzQNb50GQOmxapMomE2gj4d8yu8l13bS3g7LfU772Aj6PXsCyM2la+YZr9T # 03u4aUoqlmZpxJTG9F9urJh4iIAGXKKy7aIwggalMIIEjaADAgECAhMzAARMPmfq # aSg6w6caAAAABEw+MA0GCSqGSIb3DQEBDAUAMFoxCzAJBgNVBAYTAlVTMR4wHAYD # VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAMTIk1pY3Jvc29mdCBJ # RCBWZXJpZmllZCBDUyBBT0MgQ0EgMDMwHhcNMjYwODA1MTQyMTUyWhcNMjYwODA4 # MTQyMTUyWjBoMQswCQYDVQQGEwJOTDEWMBQGA1UECBMNTm9vcmQtSG9sbGFuZDEP # MA0GA1UEBxMGSGVpbG9vMRcwFQYDVQQKEw5BcHBWZW50aVggQi5WLjEXMBUGA1UE # AxMOQXBwVmVudGlYIEIuVi4wggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIB # gQC3MkD6rXjKM5qmyvZ0cPvNWQWhnN+XfxSiAC42MJoclF2U1um+TjcWk2H54VLj # ZYu6cGHVXW2DZMEswIbSGiGm5ogn7TzZtPIJ73lZnp7J3HD4PwMpbB4GDCw9epH2 # IkOeSweKYD0HQpecIzxmGF5j9/8bIWJZbYwTB/76rzi/+63HkCnubYD6CcrxQ8qT # Jo1wrTIUKaPouKIhFAO+y7nMnldIECa+9lhWAOY2r8epK6IzbLNc9Id9b34KrCaU # VHbZXN7GtPktzMF5g/jve2Pjli0/M6goIDOh0/nt2UpshvObNU1dfdaK/vbgtnXc # LG6qDI76JIdzsXma3f6edo9/oj+Cq6ECXez5Ie4PZj0Zlvj8YC296kcQIQNR4EmJ # 1dOCFM/GhpExxnI+633wyeqVDz30K6Qgn5E9THPsFX5pn8hrZrym247PPf+qfy/k # NW9iz6Z/tSGEGajj64gbRMAJ4BMggOV4HizFAkKCwr9giIpkf6PvZI5KJh6K6Xvc # fsUCAwEAAaOCAdQwggHQMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMDsG # A1UdJQQ0MDIGCisGAQQBgjdhAQAGCCsGAQUFBwMDBhorBgEEAYI3YaL8yC6uh9F6 # gZ2lyVCBwcKCJzAdBgNVHQ4EFgQUB0cGX1gt721eztA0RMr/pjOFwhowHwYDVR0j # BBgwFoAUpEMMf3ZapYXnPo0oDwwXokVpcMYwZwYDVR0fBGAwXjBcoFqgWIZWaHR0 # cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwSUQl # MjBWZXJpZmllZCUyMENTJTIwQU9DJTIwQ0ElMjAwMy5jcmwwdAYIKwYBBQUHAQEE # aDBmMGQGCCsGAQUFBzAChlhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3Bz # L2NlcnRzL01pY3Jvc29mdCUyMElEJTIwVmVyaWZpZWQlMjBDUyUyMEFPQyUyMENB # JTIwMDMuY3J0MFQGA1UdIARNMEswSQYEVR0gADBBMD8GCCsGAQUFBwIBFjNodHRw # Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0w # DQYJKoZIhvcNAQEMBQADggIBAGDG9X6XuMGtOGO7Eu5QLHtNHaNnOxa7XuFZMn0l # 79+g6tLURxq64Ta9roFKDYZJnfrbff4oJX9+T3cGaoEKLoYScPRuKJSkA3PY19GL # tTwvz6MVBpFv8AGBtUOGCrvmSfoOunI9XY3V6yPgvTE8UH8OYZGgQ1EcLWdaabDf # b2YZr2SsPtSTn8icC1bc+slByHsJPD4tcEIJCOZNTML87uE/Cq9tVQcEe3NAho+p # GcKX38UNUtQ16Z55r7FPt54TXon+7Dko1sf+nbIUELeQVnufEvoJYVhu6+dhIKMF # RlPhwwbu/v5tnJyLk/TTc1IUVHi2MFXkeNTHdkDeOTwzqxgxrSd6Q3RUiaQq9HVy # B3WiWOHAemiwyD58C/VDLbudXtnZ9tMkf5qq3tIJvHz4L/M9pqPBE3sOmFsHcjWP # P+2FqJKgp5+U/IGkjSK760UPUAA7RoiGXdMR3J7Zu/74Pv9nOveVkE59AilgmDQv # jzZ3z2WlmiXM0oiagxfAsnFiT9pEAwpbGnLxuhn/czMuZ4Ec8iB7eQ/k4zrEYzSR # 31vOHto080ygXqlCxeMILxHVH6SQmlG2ErsC5Uk+evBQ8MT3E+cifFod0bxIAv7u # EY72aEcLdpx/S6BFQh8T00rmlMcL4NngBv1ojOWX7+pIjZ2hwFnUKKDW7WmlQhns # 3vWEMIIGpTCCBI2gAwIBAgITMwAETD5n6mkoOsOnGgAAAARMPjANBgkqhkiG9w0B # AQwFADBaMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0 # aW9uMSswKQYDVQQDEyJNaWNyb3NvZnQgSUQgVmVyaWZpZWQgQ1MgQU9DIENBIDAz # MB4XDTI2MDgwNTE0MjE1MloXDTI2MDgwODE0MjE1MlowaDELMAkGA1UEBhMCTkwx # FjAUBgNVBAgTDU5vb3JkLUhvbGxhbmQxDzANBgNVBAcTBkhlaWxvbzEXMBUGA1UE # ChMOQXBwVmVudGlYIEIuVi4xFzAVBgNVBAMTDkFwcFZlbnRpWCBCLlYuMIIBojAN # BgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAtzJA+q14yjOapsr2dHD7zVkFoZzf # l38UogAuNjCaHJRdlNbpvk43FpNh+eFS42WLunBh1V1tg2TBLMCG0hohpuaIJ+08 # 2bTyCe95WZ6eydxw+D8DKWweBgwsPXqR9iJDnksHimA9B0KXnCM8ZhheY/f/GyFi # WW2MEwf++q84v/utx5Ap7m2A+gnK8UPKkyaNcK0yFCmj6LiiIRQDvsu5zJ5XSBAm # vvZYVgDmNq/HqSuiM2yzXPSHfW9+CqwmlFR22VzexrT5LczBeYP473tj45YtPzOo # KCAzodP57dlKbIbzmzVNXX3Wiv724LZ13CxuqgyO+iSHc7F5mt3+nnaPf6I/gquh # Al3s+SHuD2Y9GZb4/GAtvepHECEDUeBJidXTghTPxoaRMcZyPut98MnqlQ899Cuk # IJ+RPUxz7BV+aZ/Ia2a8ptuOzz3/qn8v5DVvYs+mf7UhhBmo4+uIG0TACeATIIDl # eB4sxQJCgsK/YIiKZH+j72SOSiYeiul73H7FAgMBAAGjggHUMIIB0DAMBgNVHRMB # Af8EAjAAMA4GA1UdDwEB/wQEAwIHgDA7BgNVHSUENDAyBgorBgEEAYI3YQEABggr # BgEFBQcDAwYaKwYBBAGCN2Gi/MgurofReoGdpclQgcHCgicwHQYDVR0OBBYEFAdH # Bl9YLe9tXs7QNETK/6YzhcIaMB8GA1UdIwQYMBaAFKRDDH92WqWF5z6NKA8MF6JF # aXDGMGcGA1UdHwRgMF4wXKBaoFiGVmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9w # a2lvcHMvY3JsL01pY3Jvc29mdCUyMElEJTIwVmVyaWZpZWQlMjBDUyUyMEFPQyUy # MENBJTIwMDMuY3JsMHQGCCsGAQUFBwEBBGgwZjBkBggrBgEFBQcwAoZYaHR0cDov # L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBJRCUy # MFZlcmlmaWVkJTIwQ1MlMjBBT0MlMjBDQSUyMDAzLmNydDBUBgNVHSAETTBLMEkG # BFUdIAAwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3Br # aW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMA0GCSqGSIb3DQEBDAUAA4ICAQBgxvV+ # l7jBrThjuxLuUCx7TR2jZzsWu17hWTJ9Je/foOrS1EcauuE2va6BSg2GSZ36233+ # KCV/fk93BmqBCi6GEnD0biiUpANz2NfRi7U8L8+jFQaRb/ABgbVDhgq75kn6Drpy # PV2N1esj4L0xPFB/DmGRoENRHC1nWmmw329mGa9krD7Uk5/InAtW3PrJQch7CTw+ # LXBCCQjmTUzC/O7hPwqvbVUHBHtzQIaPqRnCl9/FDVLUNemeea+xT7eeE16J/uw5 # KNbH/p2yFBC3kFZ7nxL6CWFYbuvnYSCjBUZT4cMG7v7+bZyci5P003NSFFR4tjBV # 5HjUx3ZA3jk8M6sYMa0nekN0VImkKvR1cgd1oljhwHposMg+fAv1Qy27nV7Z2fbT # JH+aqt7SCbx8+C/zPaajwRN7DphbB3I1jz/thaiSoKeflPyBpI0iu+tFD1AAO0aI # hl3TEdye2bv++D7/Zzr3lZBOfQIpYJg0L482d89lpZolzNKImoMXwLJxYk/aRAMK # Wxpy8boZ/3MzLmeBHPIge3kP5OM6xGM0kd9bzh7aNPNMoF6pQsXjCC8R1R+kkJpR # thK7AuVJPnrwUPDE9xPnInxaHdG8SAL+7hGO9mhHC3acf0ugRUIfE9NK5pTHC+DZ # 4Ab9aIzll+/qSI2docBZ1Cig1u1ppUIZ7N71hDCCBygwggUQoAMCAQICEzMAAAAY # DeuRVamKAJgAAAAAABgwDQYJKoZIhvcNAQEMBQAwYzELMAkGA1UEBhMCVVMxHjAc # BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE0MDIGA1UEAxMrTWljcm9zb2Z0 # IElEIFZlcmlmaWVkIENvZGUgU2lnbmluZyBQQ0EgMjAyMTAeFw0yNjAzMjYxODEx # MzJaFw0zMTAzMjYxODExMzJaMFoxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAMTIk1pY3Jvc29mdCBJRCBWZXJpZmll # ZCBDUyBBT0MgQ0EgMDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDI # gNpgNFaiif2VWeWP5I6PnFXxJ/lB37fJR55GCvR7GLZBMkBijbiKVwgpBI3xM5nf # 484znH/qncJ+OCq6y3jgnQW+R8Zd7U+7LjlrmcskalzSQ0ghMxEpnBW8/HHs2V8Z # JzQk6HP+SDsbvsL7LdlH/eO2l4mknhDBwr0Z/Q966TvEth5b8kCxj1vqiV4YNthL # GRqZR9u2fK/yBMWu83p6O4uo2Edg++gEew5IL7vnnnKFqmSh/R9vPJy3WF1YcZew # AUx8sXZNUnx3ZhVg59l2LpitPiwzE6FMqIsqaEvVe3MzuFd2a/uWDZH6VbDyUiRK # 78mIg1DQYA9zDEyyBFcNI+nxVSzglvL6u7PRuNqgcV3sf6ELxw89ysQM/Z4R1hRF # WXRpyOWKKAKtfBHTk0UnNiPcxmLMMYs8jeUjOidfVPjTIry/UVwnwxdlkK85cZfB # EMYZ/DBNOwdomP459Y1n8izKkbhsa+p4lw+cQVxATBFx9ggR79HhryT7HDmpPLvk # JvBZ4wW4CW32UT2SMyDe28nIOU3m+hfHlVeKcLBQcym5VoRDjIcCVI7uqgGW2PNM # E0cfei8zCwCy6HCsssJWFS7eg/YbFhnATJcyWfMrkNuAbMfMN8Npg8crS6jVVowy # D0GG5zdgi+uQVcSK/638mA1xEYK3pnIoQgO09uuDBwIDAQABo4IB3DCCAdgwDgYD # VR0PAQH/BAQDAgGGMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBSkQwx/dlql # hec+jSgPDBeiRWlwxjBUBgNVHSAETTBLMEkGBFUdIAAwQTA/BggrBgEFBQcCARYz # aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnku # aHRtMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMBIGA1UdEwEB/wQIMAYBAf8C # AQAwHwYDVR0jBBgwFoAU2UEpsA8PY2zvadf1zSmepEhqMOYwcAYDVR0fBGkwZzBl # oGOgYYZfaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9z # b2Z0JTIwSUQlMjBWZXJpZmllZCUyMENvZGUlMjBTaWduaW5nJTIwUENBJTIwMjAy # MS5jcmwwfQYIKwYBBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1p # Y3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMElEJTIwVmVyaWZp # ZWQlMjBDb2RlJTIwU2lnbmluZyUyMFBDQSUyMDIwMjEuY3J0MA0GCSqGSIb3DQEB # DAUAA4ICAQBxxyBW+X6mhdRiSwD9PMMWcGUAnx5/QUwnNvZdFGEX+4DRDIr9WCh4 # C87wHtw+lg1D3uzK10DstPX0LFLBFAC3vWMYX4ImXwoLhoR0xlN8mUdorJ3bgnpC # JWuI1531Z1rCwPuUrSkBxfOIGDk3p2ECb3Ho/xHi5PRSR/OUrWuQHwXiaXMTuXu3 # IRLezwVkZpFmNwYRD57R9Nx2F/yM7tzOY0Hh0hGCaYEK38/6FrS0SXadXWyDUCfn # 5XOGACRjUCnHx+JQUG0f4SHD+iblpAI0gl+ZHnVmdXXxHTZeTa0CYCIhFxKP2922 # s0g6zLmeiV13LWUmtt/UF7TrWXpMi2/0UNniaDoH7rnPGRV5xVX8uXy4sZii4asw # zqPM7Y7+mzcranqZ8EjZk5gjLhQ3A2sZaprlOu8CaRmyfcIiVH7zVfgAvm81MWXF # ziAf7my7QOvnyEFPGddq8MSfPtfRyw/Uq3uH6KpoaJNIfPYH6fceZSi53Rat1A9g # rExq3ROjhhSpTcchuBItAMNVPxoKNbUm+iR/X3XkL+9WQginjyHe+hXLclY8vAGX # FD1p40PqMIpAYsmEJBFKW9df4//1N5oQDr/FY9IBJl/oSS979i5rtT7NZz9KvYra # CPRBGs0QCy+sWvgQa0coM70QJVLeVwmSxUO/0od0w9Qry7bSLrxGoDCCB54wggWG # oAMCAQICEzMAAAAHh6M0o3uljhwAAAAAAAcwDQYJKoZIhvcNAQEMBQAwdzELMAkG # A1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjFIMEYGA1UE # AxM/TWljcm9zb2Z0IElkZW50aXR5IFZlcmlmaWNhdGlvbiBSb290IENlcnRpZmlj # YXRlIEF1dGhvcml0eSAyMDIwMB4XDTIxMDQwMTIwMDUyMFoXDTM2MDQwMTIwMTUy # MFowYzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv # bjE0MDIGA1UEAxMrTWljcm9zb2Z0IElEIFZlcmlmaWVkIENvZGUgU2lnbmluZyBQ # Q0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALLwwK8ZiCji # 3VR6TElsaQhVCbRS/3pK+MHrJSj3Zxd3KU3rlfL3qrZilYKJNqztA9OQacr1AwoN # cHbKBLbsQAhBnIB34zxf52bDpIO3NJlfIaTE/xrweLoQ71lzCHkD7A4As1Bs076I # u+mA6cQzsYYH/Cbl1icwQ6C65rU4V9NQhNUwgrx9rGQ//h890Q8JdjLLw0nV+ayQ # 2Fbkd242o9kH82RZsH3HEyqjAB5a8+Ae2nPIPc8sZU6ZE7iRrRZywRmrKDp5+Tcm # JX9MRff241UaOBs4NmHOyke8oU1TYrkxh+YeHgfWo5tTgkoSMoayqoDpHOLJs+qG # 8Tvh8SnifW2Jj3+ii11TS8/FGngEaNAWrbyfNrC69oKpRQXY9bGH6jn9NEJv9weF # xhTwyvx9OJLXmRGbAUXN1U9nf4lXezky6Uh/cgjkVd6CGUAf0K+Jw+GE/5VpIVbc # Nr9rNE50Sbmy/4RTCEGvOq3GhjITbCa4crCzTTHgYYjHs1NbOc6brH+eKpWLtr+b # Gecy9CrwQyx7S/BfYJ+ozst7+yZtG2wR461uckFu0t+gCwLdN0A6cFtSRtR8bvxV # FyWwTtgMMFRuBa3vmUOTnfKLsLefRaQcVTgRnzeLzdpt32cdYKp+dhr2ogc+qM6K # 4CBI5/j4VFyC4QFeUP2YAidLtvpXRRo3AgMBAAGjggI1MIICMTAOBgNVHQ8BAf8E # BAMCAYYwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFNlBKbAPD2Ns72nX9c0p # nqRIajDmMFQGA1UdIARNMEswSQYEVR0gADBBMD8GCCsGAQUFBwIBFjNodHRwOi8v # d3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wGQYJ # KwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSME # GDAWgBTIftJqhSobyhmYBAcnz1AQT2ioojCBhAYDVR0fBH0wezB5oHegdYZzaHR0 # cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwSWRl # bnRpdHklMjBWZXJpZmljYXRpb24lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRo # b3JpdHklMjAyMDIwLmNybDCBwwYIKwYBBQUHAQEEgbYwgbMwgYEGCCsGAQUFBzAC # hnVodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29m # dCUyMElkZW50aXR5JTIwVmVyaWZpY2F0aW9uJTIwUm9vdCUyMENlcnRpZmljYXRl # JTIwQXV0aG9yaXR5JTIwMjAyMC5jcnQwLQYIKwYBBQUHMAGGIWh0dHA6Ly9vbmVv # Y3NwLm1pY3Jvc29mdC5jb20vb2NzcDANBgkqhkiG9w0BAQwFAAOCAgEAfyUqnv7U # q+rdZgrbVyNMul5skONbhls5fccPlmIbzi+OwVdPQ4H55v7VOInnmezQEeW4LqK0 # wja+fBznANbXLB0KrdMCbHQpbLvG6UA/Xv2pfpVIE1CRFfNF4XKO8XYEa3oW8oVH # +KZHgIQRIwAbyFKQ9iyj4aOWeAzwk+f9E5StNp5T8FG7/VEURIVWArbAzPt9ThVN # 3w1fAZkF7+YU9kbq1bCR2YD+MtunSQ1Rft6XG7b4e0ejRA7mB2IoX5hNh3UEauY0 # byxNRG+fT2MCEhQl9g2i2fs6VOG19CNep7SquKaBjhWmirYyANb0RJSLWjinMLXN # OAga10n8i9jqeprzSMU5ODmrMCJE12xS/NWShg/tuLjAsKP6SzYZ+1Ry358ZTFcx # 0FS/mx2vSoU8s8HRvy+rnXqyUJ9HBqS0DErVLjQwK8VtsBdekBmdTbQVoCgPCqr+ # PDPB3xajYnzevs7eidBsM71PINK2BoE2UfMwxCCX3mccFgx6UsQeRSdVVVNSyALQ # e6PT12418xon2iDGE81OGCreLzDcMAZnrUAx4XQLUz6ZTl65yPUiOh3k7Yww94lD # f+8oG2oZmDh5O1Qe38E+M3vhKwmzIeoB1dVLlz4i3IpaDcR+iuGjH2TdaC1ZOmBX # iCRKJLj4DT2uhJ04ji+tHD6n58vhavFIrmcxghcyMIIXLgIBATBxMFoxCzAJBgNV # BAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAMT # Ik1pY3Jvc29mdCBJRCBWZXJpZmllZCBDUyBBT0MgQ0EgMDMCEzMABEw+Z+ppKDrD # pxoAAAAETD4wDQYJYIZIAWUDBAIBBQCgXjAQBgorBgEEAYI3AgEMMQIwADAZBgkq # hkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAvBgkqhkiG9w0BCQQxIgQg5A2rcp8qiO3/ # VGCuwk+Ygcj+48HXYz0LMIAiW3TH73kwDQYJKoZIhvcNAQEBBQAEggGAC+jiVcrY # T+ZcrxqL5wDOVZKyDMI7CaxFjx6eyuUsN6vj6Dze7uH2FANyuT3uaRWF11Zr/Yay # +Ru41iRunjeXsrBI2Ps7ZKo3/p55A8Xh3zyJSKoE/X62smHEOVGR/QI55aWnHQ49 # SQehog/Q+Z6OLJEpgM9fFOABaeb5KWJ5ry5faU4l5ROSx9sy9L4kAhhlMZLtrixD # JSbEY0MqH4vUSG/mBzGVKpIle6YKHbdMni2kvoiNJcexaQvhoxRtXfIa6Kljq2+v # q+e+0Uqr+WHZcslNMLIj85cjoJ/3w2UhoWnN8TK5CKLqBVF9utKjT5vyEFiHYwRG # yvhTJqEQqi4GkbMUV5lU5xiJbKqUvB3hm9cqYZhKIvf3jFug7gf1I3wFPYlwvnmK # jXIwIzbfJU+EyNO6gklq7JHww1nhgADnHn8Cro3Mcij5uPrb7XUwdjkW1pLj7Ert # 7BH963Gaf1eWQQRIjWwQ6ddaMu62opGAMa0wcocbxmGCLNAstyKcBJTmoYIUsjCC # FK4GCisGAQQBgjcDAwExghSeMIIUmgYJKoZIhvcNAQcCoIIUizCCFIcCAQMxDzAN # BglghkgBZQMEAgEFADCCAWoGCyqGSIb3DQEJEAEEoIIBWQSCAVUwggFRAgEBBgor # BgEEAYRZCgMBMDEwDQYJYIZIAWUDBAIBBQAEIFsyuagEcv//7ktC38H4gbVoP57b # 7HFogmyHdLTOw6J/AgZqcNO9nN8YEzIwMjYwODA2MTgyNjI0LjI3NlowBIACAfSg # gemkgeYwgeMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD # VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLTAr # BgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEnMCUG # A1UECxMeblNoaWVsZCBUU1MgRVNOOjdCMUEtMDVFMC1EOTQ3MTUwMwYDVQQDEyxN # aWNyb3NvZnQgUHVibGljIFJTQSBUaW1lIFN0YW1waW5nIEF1dGhvcml0eaCCDykw # ggeCMIIFaqADAgECAhMzAAAABeXPD/9mLsmHAAAAAAAFMA0GCSqGSIb3DQEBDAUA # MHcxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x # SDBGBgNVBAMTP01pY3Jvc29mdCBJZGVudGl0eSBWZXJpZmljYXRpb24gUm9vdCBD # ZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAyMDAeFw0yMDExMTkyMDMyMzFaFw0zNTEx # MTkyMDQyMzFaMGExCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y # cG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBQdWJsaWMgUlNBIFRpbWVzdGFt # cGluZyBDQSAyMDIwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAnnzn # UmP94MWfBX1jtQYioxwe1+eXM9ETBb1lRkd3kcFdcG9/sqtDlwxKoVIcaqDb+omF # io5DHC4RBcbyQHjXCwMk/l3TOYtgoBjxnG/eViS4sOx8y4gSq8Zg49REAf5huXhI # kQRKe3Qxs8Sgp02KHAznEa/Ssah8nWo5hJM1xznkRsFPu6rfDHeZeG1Wa1wISvlk # pOQooTULFm809Z0ZYlQ8Lp7i5F9YciFlyAKwn6yjN/kR4fkquUWfGmMopNq/B8U/ # pdoZkZZQbxNlqJOiBGgCWpx69uKqKhTPVi3gVErnc/qi+dR8A2MiAz0kN0nh7SqI # NGbmw5OIRC0EsZ31WF3Uxp3GgZwetEKxLms73KG/Z+MkeuaVDQQheangOEMGJ4pQ # ZH55ngI0Tdy1bi69INBV5Kn2HVJo9XxRYR/JPGAaM6xGl57Ei95HUw9NV/uC3yFj # rhc087qLJQawSC3xzY/EXzsT4I7sDbxOmM2rl4uKK6eEpurRduOQ2hTkmG1hSuWY # BunFGNv21Kt4N20AKmbeuSnGnsBCd2cjRKG79+TX+sTehawOoxfeOO/jR7wo3liw # kGdzPJYHgnJ54UxbckF914AqHOiEV7xTnD1a69w/UTxwjEugpIPMIIE67SFZ2PMo # 27xjlLAHWW3l1CEAFjLNHd3EQ79PUr8FUXetXr0CAwEAAaOCAhswggIXMA4GA1Ud # DwEB/wQEAwIBhjAQBgkrBgEEAYI3FQEEAwIBADAdBgNVHQ4EFgQUa2koOjUvSGNA # z3vYr0npPtk92yEwVAYDVR0gBE0wSzBJBgRVHSAAMEEwPwYIKwYBBQUHAgEWM2h0 # dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvRG9jcy9SZXBvc2l0b3J5Lmh0 # bTATBgNVHSUEDDAKBggrBgEFBQcDCDAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMA # QTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFMh+0mqFKhvKGZgEByfPUBBP # aKiiMIGEBgNVHR8EfTB7MHmgd6B1hnNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v # cGtpb3BzL2NybC9NaWNyb3NvZnQlMjBJZGVudGl0eSUyMFZlcmlmaWNhdGlvbiUy # MFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMjAuY3JsMIGUBggr # BgEFBQcBAQSBhzCBhDCBgQYIKwYBBQUHMAKGdWh0dHA6Ly93d3cubWljcm9zb2Z0 # LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwSWRlbnRpdHklMjBWZXJpZmlj # YXRpb24lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDIwLmNy # dDANBgkqhkiG9w0BAQwFAAOCAgEAX4h2x35ttVoVdedMeGj6TuHYRJklFaW4sTQ5 # r+k77iB79cSLNe+GzRjv4pVjJviceW6AF6ycWoEYR0LYhaa0ozJLU5Yi+LCmcrdo # vkl53DNt4EXs87KDogYb9eGEndSpZ5ZM74LNvVzY0/nPISHz0Xva71QjD4h+8z2X # MOZzY7YQ0Psw+etyNZ1CesufU211rLslLKsO8F2aBs2cIo1k+aHOhrw9xw6JCWON # NboZ497mwYW5EfN0W3zL5s3ad4Xtm7yFM7Ujrhc0aqy3xL7D5FR2J7x9cLWMq7eb # 0oYioXhqV2tgFqbKHeDick+P8tHYIFovIP7YG4ZkJWag1H91KlELGWi3SLv10o4K # Gag42pswjybTi4toQcC/irAodDW8HNtX+cbz0sMptFJK+KObAnDFHEsukxD+7jFf # EV9Hh/+CSxKRsmnuiovCWIOb+H7DRon9TlxydiFhvu88o0w35JkNbJxTk4MhF/Kg # aXn0GxdH8elEa2Imq45gaa8D+mTm8LWVydt4ytxYP/bqjN49D9NZ81coE6aQWm88 # TwIf4R4YZbOpMKN0CyejaPNN41LGXHeCUMYmBx3PkP8ADHD1J2Cr/6tjuOOCztfp # +o9Nc+ZoIAkpUcA/X2gSMkgHAPUvIdtoSAHEUKiBhI6JQivRepyvWcl+JYbYbBh7 # pmgAXVswggefMIIFh6ADAgECAhMzAAAAWXzacemNXvXAAAAAAABZMA0GCSqGSIb3 # DQEBDAUAMGExCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y # YXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBQdWJsaWMgUlNBIFRpbWVzdGFtcGlu # ZyBDQSAyMDIwMB4XDTI2MDEwODE4NTkwMVoXDTI3MDEwNzE4NTkwMVowgeMxCzAJ # BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k # MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLTArBgNVBAsTJE1pY3Jv # c29mdCBJcmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEnMCUGA1UECxMeblNoaWVs # ZCBUU1MgRVNOOjdCMUEtMDVFMC1EOTQ3MTUwMwYDVQQDEyxNaWNyb3NvZnQgUHVi # bGljIFJTQSBUaW1lIFN0YW1waW5nIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEB # BQADggIPADCCAgoCggIBAKYu5/40eEX+hT+5jFa146bid3dA4LnXYntvkP3CGw4L # GARFhnvLMSJ/VtsubzDaeFnm7yb2KSM70WmHQprdCVqpvUH7l0uB4jNw7urLoAR9 # kKHLE0VlMlDStDSxUBI3qwsdrjvdmvV0k+9/njuDEiSlzJTf7Dowd1K3bO4beRya # FhR+Y8tymECOqlOAffYrG2wZdVM51+QSBSe+PEykr8C6OnnqSipuF8fZvCb6/huk # 0Zm6ZwsaixSHIAT2IEGvS7c63Im8jV3a8R0K6i2yiw0NNlnTSpwy/Zfv7iwsLBwh # fbjBTn+XOl6mPzDXQQ3V+SRP9xXbGKOsBTxzGid7aKAHw3o4Ahl9UGWLH9kNP3VU # okE6JYkjlfpuUGZ6gQyqDewfxD4VoYIlopt4HZ0xQvqajuJx+cr8LR/IZ56gLLmw # yMzde5+vtjBoilry/gSZwVGwgkvkIgpKPBQHGsSB0y3szr7Y7wEb6v0yZal1XUvW # nnz3inTaSWsCFrLPVwVmXy3ncY5/d25VpOkht+m697GWNbvsNOhAOHRaftE9j/hh # koM6RsyJfBLnhqMcA/wcavf5oj5NeyRQdGZeLKcls9csKS3sBUzPidxx2iiNH9CP # aDq/bLJEOXasYohXMnRinu+fUk81s8VO7DQSF6ffn5oqSHoV8lf1Ax6u+kdShb8B # AgMBAAGjggHLMIIBxzAdBgNVHQ4EFgQUj5bnC18D0vlnSRhCOiODGGuXNnYwHwYD # VR0jBBgwFoAUa2koOjUvSGNAz3vYr0npPtk92yEwbAYDVR0fBGUwYzBhoF+gXYZb # aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIw # UHVibGljJTIwUlNBJTIwVGltZXN0YW1waW5nJTIwQ0ElMjAyMDIwLmNybDB5Bggr # BgEFBQcBAQRtMGswaQYIKwYBBQUHMAKGXWh0dHA6Ly93d3cubWljcm9zb2Z0LmNv # bS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwUHVibGljJTIwUlNBJTIwVGltZXN0 # YW1waW5nJTIwQ0ElMjAyMDIwLmNydDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQM # MAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIHgDBmBgNVHSAEXzBdMFEGDCsGAQQB # gjdMg30BATBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v # cGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wCAYGZ4EMAQQCMA0GCSqGSIb3DQEB # DAUAA4ICAQBEMhzC/ZcjpG/zURE7z2Yp5vrUxUjsE5Xa3t/2RGvESwvbmsk3bLHh # SFAajgo2XQ8xoGDP3sUhKCLPeICSbkVv6V8sSp8fJ8Jos6yrawf2YVis8tcV+OO7 # U9S6JGPQzpmPncfzQc4ne1fqZ4+HiKabIDEoFdddQT2Egkk9fzxCY/EZ52avJ27d # SfrI/IDmyn9V10O3iQpg2F+C9vNTrk7nVgoDoHa9+Q3pYr0IHGnSmt5irgGT436z # o5WnXP8FxMhswH1aiyiSZiVzhor10C9C52cP3C8/PEoMKUXstLjoPO0TMkeW/1Fr # 186KXD45QRgBo0xImgtWTdzWFnlD+p7+iDBIuSrNcRXDRYuq/aYZaDhWSI0SYdPI # WVh5XvXuWA31a8oQ0SO+oPa3Nk80k0864wiiyJ1KsbSnaaefg9vspeghrpY8ljCw # xfCUtx5HQRNgAJOI8IKACK4d014Mk0hlRO0lQVRHegqIg29K6Xqkc360W2ZJGUcs # tlKokkVj6KAHjGyrLRPzepYfiZUJq4gXyxbpvKb1XJ2FN2682aUoNXo9RyRK1ch0 # f66k6+yj88kzvuC7+vJWtNDs/UpIM6Hhm0kU64JUJ7MMEQcAc7kpft7Gm7YeRK+o # KgqUgYXCfmzbX8nJXJZnPa8ADWVsIqsuNAxCI0CZXkULofqo5Be6zzGCA9QwggPQ # AgEBMHgwYTELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh # dGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFB1YmxpYyBSU0EgVGltZXN0YW1waW5n # IENBIDIwMjACEzMAAABZfNpx6Y1e9cAAAAAAAFkwDQYJYIZIAWUDBAIBBQCgggEt # MBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQglXDm # IjfhGrviNTbuh706r3YbcUgFALhI+vVjI2iLe/kwgd0GCyqGSIb3DQEJEAIvMYHN # MIHKMIHHMIGgBCDLRbqx24bpscXEJ+Hjj9xrcUVw7R8OyyMfSB2YGK3+vDB8MGWk # YzBhMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u # MTIwMAYDVQQDEylNaWNyb3NvZnQgUHVibGljIFJTQSBUaW1lc3RhbXBpbmcgQ0Eg # MjAyMAITMwAAAFl82nHpjV71wAAAAAAAWTAiBCB1aX40x4EirkYBwb/Wmi2daEK/ # eiVzxDo2pRHu17MaFjANBgkqhkiG9w0BAQsFAASCAgAbcusH6cV3biUkYztZYGkX # XgkD+diHlmZs8BpLhlKR3bKoJ6ZOHrQ9k0Xy+gHEAaLF2EjttAsOaMrnsm4+hQf/ # lWr5ayTF8tz27C5z16REzRRGPVrMYcJWcGyaPcHfvvdKdUlou36Yd/scX/Drdb1d # xLedb4qi4uT2waVLzlgKHmu7NAoMfQvIGyxtujiHnlf7Di6U0AdtRSoHz27nJqWu # J5AFFluV0+3+Ih0zocZZrEr/mrCeG8iYjMPAyCR03dOi83kffsr+yYM3DBjre0Wy # Zy/AO3wN/zgGmmgikeqI6ZS2c+jS5LaZcTvr3OTJd66OrYiqo2cfNOX2Wz9vSROw # vbObULKk7dqL2s4mp7xQsf4aFtPATbB4etFkRcX7Gtl+oJegmhc7d0lB1CycRIOQ # ovlAgd9romGdzGJkjW4PfQlDoWi/15IIFVFHH4GDf5ZQNOCs9qMcyTyby8ZWNAOa # /o2+cf3ksZ/fq7xAg5gO7DcNr0JtcJ6Hnv48hnZrcr0OOGdZyZ3KpCjyxqijEYW5 # Oh3djvwvcxrCLnqtAo/JUqDx/q0AvXLtSSkjnCNrvVNNHrMv3Bi+hGdD2mtUe+Mw # eqaX5ox5kBQRxdiLaevPu2b8yAOmO/k7DivCvHFNyOtT2LNIdbL0RUMvUOpDaQIm # CEOw4+lH/x3V/NeAzitvEQ== # SIG # End signature block |