@@ -1,5 +1,5 @@
#
# Fido v1.39 - Feature ISO Downloader, for retail Windows images and UEFI Shell
# Fido v1.45 - Feature ISO Downloader, for retail Windows images and UEFI Shell
# Copyright © 2019-2023 Pete Batard <pete@akeo.ie>
# Command line support: Copyright © 2021 flx5
# ConvertTo-ImageSource: Copyright © 2016 Chris Carter
@@ -24,7 +24,7 @@
#region Parameters
param (
# (Optional) The title to display on the application window.
[ string ] $AppTitle = " Fido - Retail Windows ISO Downloader " ,
[ string ] $AppTitle = " Fido - Feature ISO Downloader " ,
# (Optional) '|' separated UI localization strings.
[ string ] $LocData ,
# (Optional) Path to a file that should be used for the UI icon.
@@ -43,11 +43,9 @@ param(
# (Optional) Specify Windows architecture [Toggles commandline mode]
[ string ] $Arch ,
# (Optional) Only display the download URL [Toggles commandline mode]
[ switch ] $GetUrl = $F alse ,
[ switch ] $GetUrl = $f alse ,
# (Optional) Increase verbosity
[ switch ] $Verbose = $F alse ,
# (Optional) Disable the progress bar
[ switch ] $DisableProgress = $False
[ switch ] $Verbose = $f alse
)
#endregion
@@ -55,42 +53,78 @@ try {
[ Console ] :: OutputEncoding = [ System.Text.Encoding ] :: UTF8
} catch { }
$Cmd = $F alse
$Cmd = $f alse
if ( $Win -or $Rel -or $Ed -or $Lang -or $Arch -or $GetUrl ) {
$Cmd = $T rue
$Cmd = $t rue
}
# Return a decimal Windows version that we can then check for platform support.
# Note that because we don't want to have to support this script on anything
# other than Windows, this call returns 0.0 for PowerShell running on Linux/Mac.
function Get-Platform-Version ( )
{
$version = 0.0
$platform = [ string][System.Environment ] :: OSVersion . Platform
# This will filter out non Windows platforms
if ( $platform . StartsWith ( " Win " ) ) {
# Craft a decimal numeric version of Windows
$version = [ System.Environment ] :: OSVersion . Version . Major * 1.0 + [ System.Environment ] :: OSVersion . Version . Minor * 0.1
}
return $version
}
$winver = Get-Platform -Version
# The default TLS for Windows 8.x doesn't work with Microsoft's servers so we must force it
if ( $winver -lt 10.0 ) {
[ Net.ServicePointManager ] :: SecurityProtocol = [ Net.SecurityProtocolType ] :: Tls -bor [ Net.SecurityProtocolType ] :: Tls11 -bor [ Net.SecurityProtocolType ] :: Tls12
}
#region Assembly Types
$code = @"
[ D l l I m p o r t ( " s h e l l 3 2 . d l l " , C h a r S e t = C h a r S e t . A u t o , S e t L a s t E r r o r = t r u e , B e s t F i t M a p p i n g = f a l s e , T h r o w O n U n m a p p a b l e C h a r = t r u e ) ]
i n t e r n a l s t a t i c e x t e r n i n t E x t r a c t I c o n E x ( s t r i n g s F i l e , i n t i I n d e x , o u t I n t P t r p i L a r g e V e r s i o n , o u t I n t P t r p i S m a l l V e r s i o n , i n t a m o u n t I c o n s ) ;
[ D l l I m p o r t ( " u s e r 3 2 . d l l " ) ]
p u b l i c s t a t i c e x t e r n b o o l S h o w W i n d o w ( I n t P t r h a n d l e , i n t s t a t e ) ;
$Drawing_Assembly = " System.Drawing "
# PowerShell 7 altered the name of the Drawing assembly...
if ( $host . version -ge " 7.0 " ) {
$Drawing_Assembly + = " .Common "
}
/ / E x t r a c t a n i c o n f r o m a D L L
p u b l i c s t a t i c I c o n E x t r a c t I c o n ( s t r i n g f i l e , i n t n u m b e r , b o o l l a r g e I c o n )
{
I n t P t r l a r g e , s m a l l ;
E x t r a c t I c o n E x ( f i l e , n u m b e r , o u t l a r g e , o u t s m a l l , 1 ) ;
t r y {
r e t u r n I c o n . F r o m H a n d l e ( l a r g e I c o n ? l a r g e : s m a l l ) ;
} c a t c h {
r e t u r n n u l l ;
$Signature = @ {
Namespace = " WinAPI "
Name = " Utils "
Language = " CSharp "
UsingNamespace = " System.Runtime " , " System.IO " , " System.Text " , " System.Drawing " , " System.Globalization "
ReferencedAssemblies = $Drawing_Assembly
ErrorAction = " Stop "
WarningAction = " Ignore "
MemberDefinition = @"
[ D l l I m p o r t ( " s h e l l 3 2 . d l l " , C h a r S e t = C h a r S e t . A u t o , S e t L a s t E r r o r = t r u e , B e s t F i t M a p p i n g = f a l s e , T h r o w O n U n m a p p a b l e C h a r = t r u e ) ]
i n t e r n a l s t a t i c e x t e r n i n t E x t r a c t I c o n E x ( s t r i n g s F i l e , i n t i I n d e x , o u t I n t P t r p i L a r g e V e r s i o n , o u t I n t P t r p i S m a l l V e r s i o n , i n t a m o u n t I c o n s ) ;
[ D l l I m p o r t ( " u s e r 3 2 . d l l " ) ]
p u b l i c s t a t i c e x t e r n b o o l S h o w W i n d o w ( I n t P t r h a n d l e , i n t s t a t e ) ;
/ / E x t r a c t a n i c o n f r o m a D L L
p u b l i c s t a t i c I c o n E x t r a c t I c o n ( s t r i n g f i l e , i n t n u m b e r , b o o l l a r g e I c o n ) {
I n t P t r l a r g e , s m a l l ;
E x t r a c t I c o n E x ( f i l e , n u m b e r , o u t l a r g e , o u t s m a l l , 1 ) ;
t r y {
r e t u r n I c o n . F r o m H a n d l e ( l a r g e I c o n ? l a r g e : s m a l l ) ;
} c a t c h {
r e t u r n n u l l ;
}
}
}
"@
}
if ( ! $Cmd ) {
Write-Host Please Wait . . .
$Drawing_Assembly = " System.Drawing "
# PowerShell 7 altered the name of the Drawing assembly...
if ( $host . version -ge " 7.0 " ) {
$Drawing_Assembly + = " .Common "
if ( ! ( " WinAPI.Utils " -as [ type ] ) )
{
Add-Type @Signature
}
Add-Type -ErrorAction Stop -WarningAction Ignore -IgnoreWarnings -MemberDefinition $code -Namespace Gui -UsingNamespace System . Runtime , System . IO , System . Text , System . Drawing , System . Globalization -ReferencedAssemblies $Drawing_Assembly -Name Utils
Add-Type -AssemblyName PresentationFramework
# Hide the powershell window: https://stackoverflow.com/a/27992426/1069307
[ Gui .Utils] :: ShowWindow ( ( [ System.Diagnostics.Process ] :: GetCurrentProcess ( ) | Get-Process ) . MainWindowHandle , 0 ) | Out-Null
[ WinAPI .Utils] :: ShowWindow ( ( [ System.Diagnostics.Process ] :: GetCurrentProcess ( ) | Get-Process ) . MainWindowHandle , 0 ) | Out-Null
}
#endregion
@@ -275,15 +309,6 @@ $WindowsVersions = @(
@ ( " Windows 8.1 KN " , ( $ko + 62 ) )
)
) ,
@ (
@ ( " Windows 7 " , " WIN7 " ) ,
@ (
" with SP1 (build 7601) " ,
@ ( " Windows 7 Ultimate " , 0 ) ,
@ ( " Windows 7 Professional " , 1 ) ,
@ ( " Windows 7 Home Premium " , 2 )
)
) ,
@ (
@ ( " UEFI Shell 2.2 " , " UEFI_SHELL 2.2 " ) ,
@ (
@@ -313,49 +338,13 @@ $WindowsVersions = @(
)
) ,
@ (
@ ( " UEFI Shell 2.0 " , " UEFI_SHELL 2.0 " ) ,
@ ( " UEFI Shell 2.0 " , " UEFI_SHELL 2.0 " ) ,
@ (
" 4.632 [20100426] " ,
@ ( " Release " , 0 )
)
)
)
$Windows7Versions = @ (
# 0: Windows 7 Ultimate
@ (
# Need a dummy to prevent PS from coalescing single array entries
@ ( " " ) ,
@ ( " English (US) " , " en-us " ,
@ (
@ ( " x64 " , " https://download.microsoft.com/download/5/1/9/5195A765-3A41-4A72-87D8-200D897CBE21/7601.24214.180801-1700.win7sp1_ldr_escrow_CLIENT_ULTIMATE_x64FRE_en-us.iso " ) ,
@ ( " x86 " , " https://download.microsoft.com/download/1/E/6/1E6B4803-DD2A-49DF-8468-69C0E6E36218/7601.24214.180801-1700.win7sp1_ldr_escrow_CLIENT_ULTIMATE_x86FRE_en-us.iso " )
)
)
) ,
# 1: Windows 7 Profesional
@ (
@ ( " " ) ,
@ ( " English (US) " , " en-us " ,
@ (
@ ( " x64 " , " https://download.microsoft.com/download/0/6/3/06365375-C346-4D65-87C7-EE41F55F736B/7601.24214.180801-1700.win7sp1_ldr_escrow_CLIENT_PROFESSIONAL_x64FRE_en-us.iso " ) ,
@ ( " x86 " , " https://download.microsoft.com/download/C/0/6/C067D0CD-3785-4727-898E-60DC3120BB14/7601.24214.180801-1700.win7sp1_ldr_escrow_CLIENT_PROFESSIONAL_x86FRE_en-us.iso " )
)
)
) ,
# 2: Windows 7 Home Premium
@ (
@ ( " " ) ,
@ ( " English (US) " , " en-us " ,
@ (
@ ( " x64 " , " https://download.microsoft.com/download/E/A/8/EA804D86-C3DF-4719-9966-6A66C9306598/7601.24214.180801-1700.win7sp1_ldr_escrow_CLIENT_HOMEPREMIUM_x64FRE_en-us.iso " ) ,
@ ( " x86 " , " https://download.microsoft.com/download/E/D/A/EDA6B508-7663-4E30-86F9-949932F443D0/7601.24214.180801-1700.win7sp1_ldr_escrow_CLIENT_HOMEPREMIUM_x86FRE_en-us.iso " )
)
)
)
)
#endregion
#region Functions
@@ -405,9 +394,9 @@ function Select-Language([string]$LangName)
( $SysLocale . StartsWith ( " tr " ) -and $LangName -like " *Turk* " ) -or `
( $SysLocale . StartsWith ( " uk " ) -and $LangName -like " *Ukrain* " ) -or `
( $SysLocale . StartsWith ( " vi " ) -and $LangName -like " *Vietnam* " ) ) {
return $T rue
return $t rue
}
return $F alse
return $f alse
}
function Add-Entry([int]$pos , [ string ] $Name , [ array ] $Items , [ string ] $DisplayName )
@@ -500,7 +489,7 @@ function ConvertTo-ImageSource
function Throw-Error([object]$Req , [ string ] $Alt )
{
$Err = $ ( GetElementById -Request $Req -Id " errorModalMessage " ) . innerText -replace " <[^>]+> " -replace " \s+ " , " "
if ( -not $Err ) {
if ( ! $Err ) {
$Err = $Alt
} else {
$Err = [ System.Text.Encoding ] :: UTF8 . GetString ( [ byte[]][char[] ] $Err )
@@ -511,7 +500,7 @@ function Throw-Error([object]$Req, [string]$Alt)
# Translate a message string
function Get-Translation([string]$Text )
{
if ( -not $English -contains $Text ) {
if ( ! ( $English -contains $Text ) ) {
Write-Host " Error: ' $Text ' is not a translatable string "
return " (Untranslated) "
}
@@ -549,7 +538,7 @@ function Error([string]$ErrorMessage)
if ( ! $Cmd ) {
$XMLForm . Title = $ ( Get-Translation ( " Error " ) ) + " : " + $ErrorMessage
Refresh-Control ( $XMLForm )
$XMLGrid . Children [ 2 * $script:Stage + 1 ] . IsEnabled = $T rue
$XMLGrid . Children [ 2 * $script:Stage + 1 ] . IsEnabled = $t rue
$UserInput = [ System.Windows.MessageBox ] :: Show ( $XMLForm . Title , $ ( Get-Translation ( " Error " ) ) , " OK " , " Error " )
$script:ExitCode = $script:Stage - -
} else {
@@ -617,30 +606,25 @@ if ($Cmd) {
# Localization
$EnglishMessages = " en-US|Version|Release|Edition|Language|Architecture|Download|Continue|Back|Close|Cancel|Error|Please wait...| " +
" Download using a browser|Temporarily banned by Microsoft for requesting too many downloads - Please try again later.. .| " +
" PowerShell 3.0 or later is required to run this script.|Do you want to go online and download it? "
" Download using a browser|Download of Windows ISOs is unavailable due to Microsoft having altered their website to prevent it .| " +
" PowerShell 3.0 or later is required to run this script.|Do you want to go online and download it?| " +
" This feature is not available on this platform. "
[ string[] ] $English = $EnglishMessages . Split ( '|' )
[ string[] ] $Localized = $null
if ( $LocData -and ( -not $LocData . StartsWith ( " en-US " ) ) ) {
if ( $LocData -and ! $LocData . StartsWith ( " en-US " ) ) {
$Localized = $LocData . Split ( '|' )
if ( $Localized . Length -ne $English . Length ) {
Write-Host " Error: Missing or extra translated messages provided ( $ ( $Localized . Length) / $( $English . Length ) ) "
exit 101
# Adjust the $Localized array if we have more or fewer strings than in $EnglishMessages
if ($Localized . Length -lt $English . Length ) {
while ( $Localized . Length -ne $English . Length ) {
$Localized + = $English [ $Localized . Length ]
}
} elseif ( $Localized . Length -gt $English . Length ) {
$Localized = $LocData . Split ( '|' ) [ 0 . . ( $English . Length - 1 ) ]
}
$Locale = $Localized [ 0 ]
}
$QueryLocale = $Locale
# Make sure PowerShell 3.0 or later is used (for Invoke-WebRequest)
if ( $PSVersionTable . PSVersion . Major -lt 3 ) {
Write-Host Error : PowerShell 3.0 or later is required to run this script .
$Msg = " $( Get-Translation ( $English [ 15 ] ) ) `n $( Get-Translation ( $English [ 16 ] ) ) "
if ( [ System.Windows.MessageBox ] :: Show ( $Msg , $ ( Get-Translation ( " Error " ) ) , " YesNo " , " Error " ) -eq " Yes " ) {
Start-Process -FilePath https : / / www . microsoft . com / download / details . aspx ? id = 34595
}
exit 102
}
# Convert a size in bytes to a human readable string
function Size-To-Human-Readable([uint64]$size )
{
@@ -654,7 +638,8 @@ function Size-To-Human-Readable([uint64]$size)
}
# Check if the locale we want is available - Fall back to en-US otherwise
function Check-Locale {
function Check-Locale
{
try {
$url = " https://www.microsoft.com/ " + $QueryLocale + " /software-download/ "
if ( $Verbosity -ge 2 ) {
@@ -712,7 +697,15 @@ function Get-Windows-Languages([int]$SelectedVersion, [int]$SelectedEdition)
} else {
# Microsoft download protection now requires the sessionId to be whitelisted through vlscppe.microsoft.com/tags
$url = " https://vlscppe.microsoft.com/tags?org_id=y6jn8c31&session_id= " + $SessionId
Invoke-WebRequest -UseBasicParsing -MaximumRedirection 0 -UserAgent $UserAgent $url | Out-Null
if ( $Verbosity -ge 2 ) {
Write-Host Querying $url
}
try {
Invoke-WebRequest -UseBasicParsing -MaximumRedirection 0 -UserAgent $UserAgent $url | Out-Null
} catch {
Error ( $_ . Exception . Message )
return @ ( )
}
$url = " https://www.microsoft.com/ " + $QueryLocale + " /api/controls/contentinclude/html "
$url + = " ?pageId= " + $RequestData [ " GetLangs " ] [ 0 ]
$url + = " &host=www.microsoft.com "
@@ -731,7 +724,8 @@ function Get-Windows-Languages([int]$SelectedVersion, [int]$SelectedEdition)
if ( $r -match " errorModalMessage " ) {
Throw-Error -Req $r -Alt " Could not retrieve languages from server "
}
$pattern = '(?s)<select id="product-languages">(.*)?</select>'
$r = $r -replace " `n " -replace " `r "
$pattern = '.*<select id="product-languages"[^>]*>(.*)</select>.*'
$html = [ regex ] :: Match ( $r , $pattern ) . Groups [ 1 ] . Value
# Go through an XML conversion to keep all PowerShells happy...
$html = $html . Replace ( " selected value " , " value " )
@@ -782,7 +776,7 @@ function Get-Windows-Download-Links([int]$SelectedVersion, [int]$SelectedRelease
$xml = New-Object System . Xml . XmlDocument
if ( $Verbosity -ge 2 ) {
Write-Host Querying $url
}
}
$xml . Load ( $url )
$sep = " "
$archs = " "
@@ -814,26 +808,15 @@ function Get-Windows-Download-Links([int]$SelectedVersion, [int]$SelectedRelease
try {
$Is64 = [ Environment ] :: Is64BitOperatingSystem
# Must add a referer for POST requests , else Microsoft's servers will deny them
# Must add a referer for this request, else Microsoft's servers will deny i t
$ref = " https://www.microsoft.com/software-download/windows11 "
$w r = [ System.Net.WebRequest ] :: Create ( $url )
# Windows 7 PowerShell doesn't support 'Invoke-WebRequest -Headers @{"Referer" = $ref}'
# (produces "The 'Referer' header must be modified using the appropriate property or method")
# so we use StreamReader() with GetResponseStream() and do this whole gymkhana instead...
$wr . Method = " POST "
$wr . Referer = $ref
$wr . UserAgent = $UserAgent
$wr . ContentLength = 0
$sr = New-Object System . IO . StreamReader ( $wr . GetResponse ( ) . GetResponseStream ( ) )
$r = $sr . ReadToEnd ( )
$r = Invoke-WebRequest -Method Post -Headers @ { " Referer " = $ref } -UseBasicParsing -UserAgent $UserAgent -WebSession $Session $url
if ( $r -match " errorModalMessage " ) {
$regex = New-Object Text . RegularExpressions . Regex '<p id="errorModalMessage">(.+?)<\/p>'
$m = $regex . Match ( $r )
# Make the typical error message returned by Microsoft's servers more presentable
$Alt = $m . Groups [ 1 ] -replace " <[^>]+> " -replace " \s+ " , " "
$Alt + = " " + $SessionId
if ( -not $Alt ) {
$Alt = [ regex ] :: Match ( $r , '<p id="errorModalMessage">(.+?)<\/p>' ) . Groups [ 1 ] . Value -replace " <[^>]+> " -replace " \s+ " , " " -replace " \?\?\? " , " - "
if ( ! $Alt ) {
$Alt = " Could not retrieve architectures from server "
} else {
$Alt + = " " + $SessionId + " . "
}
Throw-Error -Req $r -Alt $Alt
}
@@ -850,7 +833,7 @@ function Get-Windows-Download-Links([int]$SelectedVersion, [int]$SelectedRelease
foreach ( $var in $xml . inputs . input ) {
$json = $var . value | ConvertFrom-Json ;
if ( $json ) {
if ( ( $Is64 -and $json . DownloadType -eq " x64 " ) -or ( -not $Is64 -and $json . DownloadType -eq " x86 " ) ) {
if ( ( $Is64 -and $json . DownloadType -eq " x64 " ) -or ( ! $Is64 -and $json . DownloadType -eq " x86 " ) ) {
$script:SelectedIndex = $i
}
$links + = @ ( New-Object PsObject -Property @ { Type = $json . DownloadType ; Link = $json . Uri } )
@@ -872,7 +855,7 @@ function Get-Windows-Download-Links([int]$SelectedVersion, [int]$SelectedRelease
function Process-Download-Link([string]$Url )
{
try {
if ( $PipeName -and -not $Check . IsChecked ) {
if ( $PipeName -and ! $Check . IsChecked ) {
Send-Message -PipeName $PipeName -Message $Url
} else {
if ( $Cmd ) {
@@ -883,10 +866,7 @@ function Process-Download-Link([string]$Url)
$tmp_size = [ uint64 ] :: Parse ( $str_size )
$Size = Size-To -Human -Readable $tmp_size
Write-Host " Downloading ' $File ' ( $Size )... "
if ( $DisableProgress ) {
$ProgressPreference = 'SilentlyContinue'
}
Invoke-WebRequest -UseBasicParsing -Uri $Url -OutFile $File
Start-BitsTransfer -Source $Url -Destination $File
} else {
Write-Host Download Link : $Url
Start-Process -FilePath $Url
@@ -907,6 +887,12 @@ if ($Cmd) {
$winLanguageName = $null
$winLink = $null
# Windows 7 and non Windows platforms are too much of a liability
if ( $winver -le 6.1 ) {
Error ( Get-Translation ( " This feature is not available on this platform. " ) )
exit 403
}
$i = 0
$Selected = " "
if ( $Win -eq " List " ) {
@@ -1065,7 +1051,7 @@ $XMLForm.Title = $AppTitle
if ( $Icon ) {
$XMLForm . Icon = $Icon
} else {
$XMLForm . Icon = [ Gui .Utils] :: ExtractIcon ( " shell32 .dll" , -41 , $true ) | ConvertTo-ImageSource
$XMLForm . Icon = [ WinAPI .Utils] :: ExtractIcon ( " imageres .dll" , -5205 , $true ) | ConvertTo-ImageSource
}
if ( $Locale . StartsWith ( " ar " ) -or $Locale . StartsWith ( " fa " ) -or $Locale . StartsWith ( " he " ) ) {
$XMLForm . FlowDirection = " RightToLeft "
@@ -1074,6 +1060,12 @@ $WindowsVersionTitle.Text = Get-Translation("Version")
$Continue . Content = Get-Translation ( " Continue " )
$Back . Content = Get-Translation ( " Close " )
# Windows 7 and non Windows platforms are too much of a liability
if ( $winver -le 6.1 ) {
Error ( Get-Translation ( " This feature is not available on this platform. " ) )
exit 403
}
# Populate the Windows versions
$i = 0
$versions = @ ( )
@@ -1087,9 +1079,9 @@ $WindowsVersion.DisplayMemberPath = "Version"
# Button Action
$Continue . add_click ( {
$script:Stage + +
$XMLGrid . Children [ 2 * $Stage + 1 ] . IsEnabled = $F alse
$Continue . IsEnabled = $F alse
$Back . IsEnabled = $F alse
$XMLGrid . Children [ 2 * $Stage + 1 ] . IsEnabled = $f alse
$Continue . IsEnabled = $f alse
$Back . IsEnabled = $f alse
Refresh-Control ( $Continue )
Refresh-Control ( $Back )
@@ -1098,7 +1090,7 @@ $Continue.add_click({
1 { # Windows Version selection
$XMLForm . Title = Get-Translation ( $English [ 12 ] )
Refresh-Control ( $XMLForm )
if ( $WindowsVersion . SelectedValue . Version . StartsWith ( " Windows " ) -and $WindowsVersion . SelectedValue . Version -ne " Windows 7 " ) {
if ( $WindowsVersion . SelectedValue . Version . StartsWith ( " Windows " ) ) {
Check-Locale
}
$releases = Get-Windows -Releases $WindowsVersion . SelectedValue . Index
@@ -1157,9 +1149,9 @@ $Continue.add_click({
$XMLForm . Close ( )
}
}
$Continue . IsEnabled = $T rue
$Continue . IsEnabled = $t rue
if ( $Stage -ge 0 ) {
$Back . IsEnabled = $T rue
$Back . IsEnabled = $t rue
}
} )
@@ -1169,7 +1161,7 @@ $Back.add_click({
} else {
$XMLGrid . Children . RemoveAt ( 2 * $Stage + 3 )
$XMLGrid . Children . RemoveAt ( 2 * $Stage + 2 )
$XMLGrid . Children [ 2 * $Stage + 1 ] . IsEnabled = $T rue
$XMLGrid . Children [ 2 * $Stage + 1 ] . IsEnabled = $t rue
$dh2 = $dh
if ( $Stage -eq 4 -and $PipeName ) {
$Check . Visibility = " Collapsed "
@@ -1194,17 +1186,17 @@ $Back.add_click({
} )
# Display the dialog
$XMLForm . Add_Loaded ( { $XMLForm . Activate ( ) } )
$XMLForm . Add_Loaded ( { $XMLForm . Activate ( ) } )
$XMLForm . ShowDialog ( ) | Out-Null
# Clean up & exit
exit $ExitCode
# SIG # Begin signature block
# MIIkWQ YJKoZIhvcNAQcCoIIkSj CCJEY CAQExDzANBglghkgBZQMEAgEFADB5Bgor
# MIIkWA YJKoZIhvcNAQcCoIIkST CCJEU CAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCB4DCsid0Hcotrs
# wgTJd2lY28Qu5omAVl5T1mk2BP1C1 qCCElkwggVvMIIEV6ADAgECAhBI/JO0YFWU
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCCMJv431qiE9xy1
# 2Km7MvT+QN0u+/w5ek1xMY9QLEDXQ qCCElkwggVvMIIEV6ADAgECAhBI/JO0YFWU
# jTanyYqJ1pQWMA0GCSqGSIb3DQEBDAUAMHsxCzAJBgNVBAYTAkdCMRswGQYDVQQI
# DBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoM
# EUNvbW9kbyBDQSBMaW1pdGVkMSEwHwYDVQQDDBhBQUEgQ2VydGlmaWNhdGUgU2Vy
@@ -1302,97 +1294,97 @@ exit $ExitCode
# QTYOb9goARWPNlkKbyF9bndu5kLWIlZcOS7IIznOcS4y1J5ZJewBRH4kbuNfCbSl
# HMZS/rmpFprXXFdje6TRXwgvBs6UOR1zTe5ycumyo5FYBVEFGR1Ps6ZC3z62yLPk
# pb5YSma1/ut/KplOxOnK74ELd/vTS2i10qmsqP5+m+U2jznmCEwm8g8V1mg94acL
# iyM9uR5+U3y6OrVRkMnG9K9ZuTGCEVY wghFS AgEBMGwwVzELMAkGA1UEBhMCR0Ix
# iyM9uR5+U3y6OrVRkMnG9K9ZuTGCEVU wghFR AgEBMGwwVzELMAkGA1UEBhMCR0Ix
# GDAWBgNVBAoTD1NlY3RpZ28gTGltaXRlZDEuMCwGA1UEAxMlU2VjdGlnbyBQdWJs
# aWMgQ29kZSBTaWduaW5nIENBIEVWIFIzNgIRAL+xUAG79ZLUlip3l+pzb6MwDQYJ
# YIZIAWUDBAIBBQCgfDAQBgorBgEEAYI3AgEMMQIwADAZBgkqhkiG9w0BCQMxDAYK
# KwYBBAGCNwIBBDAcBgorBgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG
# 9w0BCQQxIgQgZJjDDP2YWPPmGrEuHBNI0duArydubM/gmnG4BcpOG8c wDQYJKoZI
# hvcNAQEBBQAEggIAeMyrcbmpsFeC8p7Hw21CgIxWszJ1tkiFmVcEuf5TU5NSUwYA
# NsT/TaKGDc0mn313EiA3OM2yBwWdJFQsF0O87carfF3FXoKNU90f/IbyzhiOuGXo
# sT2LeKGy57hdmi+j0pcf1DorfKKQ3XQ45RI1USCedKBxaC0ZVGl1PCHogtxxwvyG
# tV5J90NS0ztTtuL2M2JCBobE6v7p6AWxkffzb97JygXY8yKc5E7XWuUEtU7Lkv6t
# bARG9idcAi151yNkReF+iZh1ZrS7+awhnWqmzxJ1XTf2lvZObl7YfK7CekLtjxzO
# M1Q1iLRzbIeMX8B9Z0S6TUtKDPAzWiIKUUWBaad/ojG3uZl7fA6WEgB2mt0CQNOG
# UAre5uYpqTpvNXCksAYcjmYmQcd2NenXSq4gnIbiPQdFXl/AMpFE127Cd7R7H/vP
# 6a4mbsfuPuQD9sHK79hGVl86iiCq00Jur3asfbV1RGKCJZTiQXzmXRaHD8Ce8a0h
# 2PmukEnTDNJv1t3gKMojBmT7KDXS8v6idRXVnovGrf0+0WXOCau3nBWfBAZB8A8r
# GUS0k9JyqilE6aAE8no59wqvXIDMKLLP6Br8czBcTIAaAoMAjvfJeYCsNJZH5ICz
# wEPxpQyGLzL/Z2LzdNUFs+j9m1zQ7a4d2ln5G5vDa/Qbs5IwGm4PRix2tqy hgg49
# MIIOOQ YKKwYBBAGCNwMDATGCDik wgg4l BgkqhkiG9w0BBwKggg4W MIIOEg IBAzEN
# MAsGCWCGSAFlAwQCATCCAQ8 GCyqGSIb3DQEJEAEEoIH/ BIH8 MIH5 AgEBBgtghkgB
# hvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUABCDJlO4Qu/KVPQXhqzZUwkQuxnuXzr+y
# ALuw9uhTw5x50QIVAI5lXv0dlojOQ5uU1re1l1WZ0wZjGA8yMDIzMDEwODIyMDQ0
# NFowAwIBHqCBhqSBgzCBgDELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVj
# IENvcnBvcmF0aW9uMR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMTEw
# LwYDVQQDEyhTeW1hbnRlYyBTSEEyNTYgVGltZVN0YW1waW5nIFNpZ25lciAtIEcz
# oIIKizCCBTgwggQgoAMCAQICEHsFsdRJaFFE98mJ0pwZnRIwDQYJKoZIhvcNAQEL
# BQAwgb0xC zAJ BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0G
# A1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDIwMDgg
# VmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE4MDYGA1UE
# AxMvVmVyaVNpZ24gVW5pdmVyc2FsIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
# dHkwHhcN MTY wMTEyM DAwMDAwWhcNMzEw MTE xMjM1OTU5WjB3MQswCQYDVQQGEwJV
# UzEd MBs GA1UEChMU U3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFu
# dGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5bWFudGVjIFNIQTI1NiBUaW1l
# U3RhbXBpbmcgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC7WZ1Z
# VU+djHJdGoGi61XzsAGtPHGsMo8Fa4aaJwAyl2pNyWQUSym7wtkpuS7sY7Phzz8L
# VpD4Yht+66YH4t5/Xm1AONSRBudBfHkcy8utG7/YlZHz8O5s+K2WOS5/wSe4eDnF
# hKXt7a+Hjs6Nx23q0pi1Oh8eOZ3D9Jqo9IThxNF8ccYGKbQ/5IMNJsN7CD5N+Qq3
# M0n/yjvU9bKbS+GImRr1wOkzFNbfx4Dbke7+vJJXcnf0zajM/gn1kze+lYhqxdz0
# sUvUzugJkV+1hHk1inisGTKPI8EyQRtZDqk+scz51ivvt9jk1R1tETqS9pPJnONI
# 7rtTDtQ2l4Z4xaE3AgMBAAGjggF3MIIBczAOBgNVHQ8BAf8EBAMCAQYwEgYDVR0T
# AQH/B AgwBgEB/wIBADBmBgNVHSAEXzBdMFsGC2CGSAGG+EUBBxcDMEwwIwYIKwYB
# BQUHAgEWF2h0dHBzOi8vZC5zeW1jYi5jb20vY3BzMCUGCCsGAQUFBwICMBkaF2h 0
# dHBzOi8vZC5zeW1jYi5jb20vcnBhMC4GCCsGAQUFBwEBBCIwIDAeBggrBgEFBQcw
# AYYSaHR0cDovL3Muc3ltY2QuY29tMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9z
# LnN5bWNiLmNvbS91bml2ZXJzYWwtcm9vdC5jcmwwEwYDVR0lBAwwCgYIKwYBBQUH
# AwgwKAYDVR0RBCEwH6QdMBsxGTAXBgNVBAMTEFRpbWVTdGFtcC0yMDQ4LTMwHQYD
# VR0OBBYEFK9j1sqjToVy4Ke8QfMpojh/gHViMB8GA1UdIwQYMBaAFLZ3+mlIR59T
# EtXC6gcydgfRlwcZMA0GCSqGSIb3DQEBCwUAA4IBAQB16rAt1TQZXDJF/g7h1E+m
# eMFv1+rd3E/zociBiPenjxXmQCmt5l30otlWZIRxMCrdHmEXZiBWBpgZjV1x8viX
# vAn9HJFHyeLojQP7zJAv1gpsTjPs1rSTyEyQY0g5QCHE3dZuiZg8tZiX6KkGtwnJ
# j1NXQZAv4R5NTtzKEHhsQm7wtsX4YVxS9U72a433Snq+8839A9fZ9gOoD+NT9wp1
# 7MZ1LqpmhQSZt/gGV+HGDvbor9rsmxgfqrnjOgC/zoqUywHbnsc4uw9Sq9HjlANg
# Ck2g/idtFDL8P5dA4b+ZidvkORS92uTTw+orWrOVWFUEfcea7CMDjYUq0v+uqWGB
# MIIFSzCCBDOgAwIBAgIQe9Tlr7rMBz+hASMEIkFNEjANBgkqhkiG9w0BAQsFADB3
# MQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAd
# BgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5bWFudGVj
# IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwHhcNMTcxMjIzMDAwMDAwWhcNMjkwMz Iy
# MjM1OTU5WjCBgDELMAk GA1UEB hMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBv
# cmF0aW9uMR8wHQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMTEwLwYDVQQD
# EyhTeW1hbnRlYyBTSEEyNTYgVGltZVN0YW1waW5nIFNpZ25lciAtIEczMIIBIjAN
# BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArw6Kqvjcv2l7VBdxRwm9jTyB+HQV
# d2eQnP3eTgKeS3b25TY+ZdUkIG0w+d0dg+k/J0ozTm0WiuSNQI0iqr6nCxvSB7Y8
# tRokKPgbclE9yAmIJgg6+fpDI3VHcAyzX1uPCB1ySFdlTa8CPED39N0yOJM/5Sym
# 81kjy4DeE035EMmqChhsVWFX0fECLMS1q/JsI9KfDQ8ZbK2FYmn9ToXBilIxq1vY
# yXRS41dsIr9Vf2/KBqs/SrcidmXs7DbylpWBJiz9u5iqATjTryVAmwlT8ClXhVhe
# 6oVIQSGH5d600yaye0BTWHmOUjEGTZQDRcTOPAPstwDyOiLFtG/l77CKmwIDAQAB
# o4IBxzCCAcMwDAYDVR0TAQH/BAIwADBmBgNVHSAEXzBdMFsGC2CGSAGG+EUBBxcD
# MEwwIwYIKwYBBQUHAgEWF2h0dHBzOi8vZC5zeW1jYi5jb20vY3BzMCUGCCsGA QUF
# BwICMBkaF2h0dHBzOi8vZC5zeW1jYi5jb20vcnBhMEAGA1UdHwQ5MDcwNaAzoDGG
# L2h0dHA6Ly90cy1jcmwud3Muc3ltYW50ZWMuY29tL3NoYTI1Ni10c3MtY2EuY3Js
# MBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIHgDB3BggrBgE F
# BQcBAQRrMGkwKgYIKwYBBQUHMAGGHmh0dHA6Ly90cy1vY3NwLndzLnN5bWFudGVj
# LmNvbTA7BggrBgEFBQcwAoYvaHR0cDovL3RzLWFpYS53cy5zeW1hbnRlYy5jb20v
# c2hhMjU2LXRzcy1jYS5jZXIwKAYDVR0RBCEwH6QdMBsxGTAXBgNVBAMTEFRpbWVT
# dGFtcC0yMDQ4LTYwHQYDVR0OBBYEFKUTAamfhcwbbhYeXzsxqnk2AHsdMB8GA1Ud
# IwQYMBaAFK9j1sqjToVy4Ke8QfMpojh/gHViMA0GCSqGSIb3DQEBCwUAA4IBAQBG
# nq/wuKJfoplIz6gnSyHNsrmmcnBjL+NVKXs5Rk7nfmUGWIu8V4qSDQjYELo2JPoK
# e/s702K/SpQV5oLbilRt/yj+Z89xP+YzCdmiWRD0Hkr+Zcze1GvjUil1AEorpczL
# m+ipTfe0F1mSQcO3P4bm9sB/RDxGXBda46Q71Wkm1SF94YBnfmKst04uFZrlnCOv
# WxHqcalB+Q15OKmhDc+0sdo+mnrHIsV0zd9HCYbE/JElshuW6YUI6N3qdGBuYKVW
# eg3IRFjc5vlIFJ7lv94AvXexmBRyFCTfxxEsHwA/w0sUxmcczB4Go5BfXFSLPuMz
# W4IPxbeGAk5xn+lmRT92MYICWjCCAlYCAQEwgYswdzELMAkGA1UEBhMCVVMxHTAb
# BgNVBAo TFF N5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZTeW1hbnRlYyBU
# cnVzdCBOZXR3b3JrMSgwJgYDVQQDEx9TeW1hbnRlYyBTSEEyNTYgVGltZVN0YW1w
# aW5nIENBAhB71OWvuswHP6EBIwQiQU0SMAsGCWCGSAFlAwQCAaCBpDAaBgkqhkiG
# 9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkFMQ8XDTIzMDEwODIyMDQ0
# NFowLwYJKoZIhvcNAQkEMSIEIJCXdWNCvCOkl1MVXUM64ID5Hk3rlqG10XOEU4X6
# lgIdMDcGCyqGSIb3DQEJEAIvMSgwJjAkMCIEIMR0znYAfQI5Tg2l5N58FMaA+eKC
# ATz+9lPvXbcf32H4MAsGCSqGSIb3DQEBAQSCAQCIgN/3Y1woMyQD3RfjYoePc1VS
# M3RbvhneaXXr6LSxRh/MJd04waviGo0j/8hdoMzmyDBTVJdGuY7K2jZGFg82y5H6
# qQAcgkTT0KyXTkT6MwjBor1nRG5IY/20NXtXIOfN3KmRQnZy+lLH3rXguxEEFObw
# DNHTB3sAAxaJdJQhKKqw1cuExubwLEzKbU+HFvNavyd3iTf3Free1eYQYmO5LliK
# SYWJ4CbawK2qu0U/e5xznALGZ5NdJ3tZAFK3w0ZF0W9m6CfNW0TmjG6ae8RF4J+4
# SWGCh2KrY4PVhyKxKiB3z5rCHYGkCrNJJdlOkoaUVBa/MQ+SildBrHvnhZZ1
# 9w0BCQQxIgQgU6kfzXtqFM95UYOKG40MSFBPYFNCnkglZ4Ymhc2Oyf0 wDQYJKoZI
# hvcNAQEBBQAEggIAoMhK/l7p5OwearMs4gke3tH8HQgc5U2/TTyo2EVwH5wO8UqS
# vkzWS94vWlzm2J+h/nZYBgHKQ6wGPxMVUxQb7IzwOmLL1WJESwybRV6RjdOgbOjX
# H1zxAjYGXAHvupUDY4BxEI3QCH+2zWyBVyzjQpcJvYFdcf4YhlbDTS1A+TgZ/nCj
# X6j4Fe8dxyM/Gsa9kA9Ar6Ogip1uaYD8/rILhAUEoL+OblbQo6aTz48Z5ibmFYHR
# QdoIscQ1TzZPAlKvcXkswIxICIYP52V7ooJH08TnE8wxQ5U9aT8K/BqfpGNtKI78
# 2XydZifpOuU7mVNgPH+q509Qz28pINGspTCfbxnzEZDf+mGC+pbokQxNv2ZjKUYB
# Nf9BBgUJgaVRJBLHvaOHGhZaRu1Fbd0ykpJLd9EAEgAKCV5+SkpcaqOqDDaMEwJL
# rGcD7TkF1U0hyW4ZPq5ICsHjzjnXsy+MMkjfYYhi03ZpJJw696F9Pq3M/fXemT9e
# PMKLoOXPZefAOTyGcFVUdSL9ctxboRKVRl1z/94r1bqN4LiHng99CF+pazPtDa4e
# E7QgGkKYYAaH2t2LGxxXFH8/ifg2EvOMWlqT0JFKD6K6s/j6jKI+Ucr7h3OSbhqc
# R8MY+vshQdFpxD2aYLOAPhwg8vUcBeqYfNUNxXVoYBJuaKbr/hqS8pAEjUO hgg48
# MIIOOA YKKwYBBAGCNwMDATGCDig wgg4k BgkqhkiG9w0BBwKggg4V MIIOEQ IBAzEN
# MAsGCWCGSAFlAwQCATCCAQ4 GCyqGSIb3DQEJEAEEoIH+ BIH7 MIH4 AgEBBgtghkgB
# hvhFAQcXAzAxMA0GCWCGSAFlAwQCAQUABCAPk/eUEWByIigDrAkGcyON/txivadC
# G8BK3lF8ZDGmCQIUDt7R6LryZ+2Z9cbYbrHVRuYf3PEYDzIwMjMwNDE0MTA0MjE4
# WjADAgEeoIGGpIGDMIGAMQswCQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMg
# Q29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxMTAv
# BgNVBAMTKFN5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgU2lnbmVyIC0gRzOg
# ggqLMIIFODCCBCCgAwIBAgIQewWx1EloUUT3yYnSnBmdEjANBgkqhkiG9w0BAQsF
# ADCBvTELMAkGA1UEBhMCVVMxF zAV BgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYD
# VQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBW
# ZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQD
# Ey9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
# eTAeFw0xNjAx MTI wMDAwMDBaFw0z MTA xMTEyMzU5NTlaMHcxCzAJBgNVBAYTAlVT
# MR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEf MB0 GA1UECxMW U3ltYW50
# ZWMgVHJ1c3QgTmV0d29yazEoMCYGA1UEAxMfU3ltYW50ZWMgU0hBMjU2IFRpbWVT
# dGFtcGluZyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALtZnVlV
# T52Mcl0agaLrVfOwAa08cawyjwVrhponADKXak3JZBRLKbvC2Sm5Luxjs+HPPwtW
# kPhiG37rpgfi3n9ebUA41JEG50F8eRzLy60bv9iVkfPw7mz4rZY5Ln/BJ7h4OcWE
# pe3tr4eOzo3HberSmLU6Hx45ncP0mqj0hOHE0XxxxgYptD/kgw0mw3sIPk35Crcz
# Sf/KO9T1sptL4YiZGvXA6TMU1t/HgNuR7v68kldyd/TNqMz+CfWTN76ViGrF3PSx
# S9TO6AmRX7WEeTWKeKwZMo8jwTJBG1kOqT6xzPnWK++32OTVHW0ROpL2k8mc40ju
# u1MO1DaXhnjFoTcCAwEAAaOCAXcwggFzMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMB
# Af8ECDAG AQH/AgEAMGYGA1UdIARfMF0wWwYLYIZIAYb4RQEHFwMwTDAjBggrBgEF
# BQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNvbS9jcHMwJQYIKwYBBQUHAgIwGRoXaHR 0
# cHM6Ly9kLnN5bWNiLmNvbS9ycGEwLgYIKwYBBQUHAQEEIjAgMB4GCCsGAQUFBzAB
# hhJodHRwOi8vcy5zeW1jZC5jb20wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL3Mu
# c3ltY2IuY29tL3VuaXZlcnNhbC1yb290LmNybDATBgNVHSUEDDAKBggrBgEFBQcD
# CDAoBgNVHREEITAfpB0wGzEZMBcGA1UEAxMQVGltZVN0YW1wLTIwNDgtMzAdBgNV
# HQ4EFgQUr2PWyqNOhXLgp7xB8ymiOH+AdWIwHwYDVR0jBBgwFoAUtnf6aUhHn1MS
# 1cLqBzJ2B9GXBxkwDQYJKoZIhvcNAQELBQADggEBAHXqsC3VNBlcMkX+DuHUT6Z4
# wW/X6t3cT/OhyIGI96ePFeZAKa3mXfSi2VZkhHEwKt0eYRdmIFYGmBmNXXHy+Je8
# Cf0ckUfJ4uiNA/vMkC/WCmxOM+zWtJPITJBjSDlAIcTd1m6JmDy1mJfoqQa3CcmP
# U1dBkC/hHk1O3MoQeGxCbvC2xfhhXFL1TvZrjfdKer7zzf0D19n2A6gP41P3CnXs
# xnUuqmaFBJm3+AZX4cYO9uiv2uybGB+queM6AL/OipTLAduexzi7D1Kr0eOUA2AK
# TaD+J20UMvw/l0Dhv5mJ2+Q5FL3a5NPD6itas5VYVQR9x5rsIwONhSrS/66pYYEw
# ggVLMIIEM6ADAgECAhB71OWvuswHP6EBIwQiQU0SMA0GCSqGSIb3DQEBCwUAMHcx
# CzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0G
# A1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazEoMCYGA1UEAxMfU3ltYW50ZWMg
# U0hBMjU2IFRpbWVTdGFtcGluZyBDQTAeFw0xNzEyMjMwMDAwMDBaFw0yOTAzMj Iy
# MzU5NTlaMIGAMQswCQYDVQQGEwJVUzEdMBs GA1UEC hMUU3ltYW50ZWMgQ29ycG9y
# YXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxMTAvBgNVBAMT
# KFN5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBpbmcgU2lnbmVyIC0gRzMwggEiMA0G
# CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvDoqq+Ny/aXtUF3FHCb2NPIH4dBV3
# Z5Cc/d5OAp5LdvblNj5l1SQgbTD53R2D6T8nSjNObRaK5I1AjSKqvqcLG9IHtjy1
# GiQo+BtyUT3ICYgmCDr5+kMjdUdwDLNfW48IHXJIV2VNrwI8QPf03TI4kz/lLKbz
# WSPLgN4TTfkQyaoKGGxVYVfR8QIsxLWr8mwj0p8NDxlsrYViaf1OhcGKUjGrW9jJ
# dFLjV2wiv1V/b8oGqz9KtyJ2ZezsNvKWlYEmLP27mKoBONOvJUCbCVPwKVeFWF7q
# hUhBIYfl3rTTJrJ7QFNYeY5SMQZNlANFxM48A+y3API6IsW0b+XvsIqbAgMBAAGj
# ggHHMIIBwzAMBgNVHRMBAf8EAjAAMGYGA1UdIARfMF0wWwYLYIZIAYb4RQEHFwMw
# TDAjBggrBgEFBQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNvbS9jcHMwJQYIKwYBB QUH
# AgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwQAYDVR0fBDkwNzA1oDOgMYYv
# aHR0cDovL3RzLWNybC53cy5zeW1hbnRlYy5jb20vc2hhMjU2LXRzcy1jYS5jcmww
# FgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgwDgYDVR0PAQH/BAQDAgeAMHcGCCsGAQU F
# BwEBBGswaTAqBggrBgEFBQcwAYYeaHR0cDovL3RzLW9jc3Aud3Muc3ltYW50ZWMu
# Y29tMDsGCCsGAQUFBzAChi9odHRwOi8vdHMtYWlhLndzLnN5bWFudGVjLmNvbS9z
# aGEyNTYtdHNzLWNhLmNlcjAoBgNVHREEITAfpB0wGzEZMBcGA1UEAxMQVGltZVN0
# YW1wLTIwNDgtNjAdBgNVHQ4EFgQUpRMBqZ+FzBtuFh5fOzGqeTYAex0wHwYDVR0j
# BBgwFoAUr2PWyqNOhXLgp7xB8ymiOH+AdWIwDQYJKoZIhvcNAQELBQADggEBAEae
# r/C4ol+imUjPqCdLIc2yuaZycGMv41UpezlGTud+ZQZYi7xXipINCNgQujYk+gp7
# +zvTYr9KlBXmgtuKVG3/KP5nz3E/5jMJ2aJZEPQeSv5lzN7Ua+NSKXUASiulzMub
# 6KlN97QXWZJBw7c/hub2wH9EPEZcF1rjpDvVaSbVIX3hgGd+Yqy3Ti4VmuWcI69b
# EepxqUH5DXk4qaENz7Sx2j6aescixXTN30cJhsT8kSWyG5bphQjo3ep0YG5gpVZ6
# DchEWNzm+UgUnuW/3gC9d7GYFHIUJN/HESwfAD/DSxTGZxzMHgajkF9cVIs+4zNb
# gg/Ft4YCTnGf6WZFP3YxggJaMIICVgIBATCBizB3MQswCQYDVQQGEwJVUzEdMBsG
# A1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAd BgNVBAs TFl N5bWFudGVjIFRy
# dXN0IE5ldHdvcmsxKDAmBgNVBAMTH1N5bWFudGVjIFNIQTI1NiBUaW1lU3RhbXBp
# bmcgQ0ECEHvU5a+6zAc/oQEjBCJBTRIwCwYJYIZIAWUDBAIBoIGkMBoGCSqGSIb3
# DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcNMjMwNDE0MTA0MjE4
# WjAvBgkqhkiG9w0BCQQxIgQgSRmRX32ZtvpctsTQsO6ZmUJ/MJA07g0cGrMcieDX
# XE4wNwYLKoZIhvcNAQkQAi8xKDAmMCQwIgQgxHTOdgB9AjlODaXk3nwUxoD54oIB
# PP72U+9dtx/fYfgwCwYJKoZIhvcNAQEBBIIBAJmHrI1rxYP3Tn0turyB5Nt12cQj
# OJ3WvJtAGrW6uT2EJp2xWIYcf9lYPz35+ar/OGTh0WgV+Ci62lY8C+D4V+3BRPTe
# 2NAD6PR+sNj/NocG0A+BT+4agepoXxOjBCsNlDxi+qxb42alJUuf/G9zz+G+HLuO
# rVNSf0E97W+8iGyHv1QvJ+KMO9nppMPdSpjOXPu/pKsAMjmds5n8R7OSW6vFkIkt
# 9INEVTJHzMrSkE0DNRKmh2NBkSJOJn+5gNfINmhJ8LtKvuRhuW+7NvpBoKqsepBz
# E8lsh852z2vlN1kD7XAw1yDw4hTaJJrtA5V3q593/svRL5j9N+stc2dY2C0=
# SIG # End signature block