ISEScriptRunner.psm1


function Enable-ISEScriptRunner {
    <#
    .SYNOPSIS
    Add ScriptRunner ISE Add-on Tool to the ISE profile of the current user.
    .DESCRIPTION
    Add ScriptRunner ISE Add-on Tool to the ISE profile of the current user.
    The ScriptRunner ISE Add-on Tool is automatically loaded at the startup of the Windows PowerShell ISE.
    The Windows PowerShell ISE is created, if it does not exist.
    #>


    [CmdletBinding()]
    param()

    Test-WindowsPowerShellISE -FunctionName "Enable-ISEScriptRunner"
    if (Get-ItemProperty -Path 'HKLM:\SOFTWARE\ScriptRunner\Service\General' -ErrorAction SilentlyContinue) {
        throw "The Cmdlet 'Enable-ISEScriptRunner' can not be executed at the ScriptRunner Service Host."
    }
    #create “Current user, Windows PowerShell ISE” profile, if not exists
    if (!(Test-Path $profile))
    { New-Item -Type file -Path $profile -Force }

    [String]$iseProfile = Get-Content -Path $profile
    if ($null -eq $iseProfile) {
        [String]$iseProfile = [String]::Empty
    }
    if (!$iseProfile.Contains("Start-ISEScriptRunner")) {
        Add-Content -Path $profile -Value "`r`nStart-ISEScriptRunner" -Force
    }
    else {
        Write-Warning "`"$($profile)`" already contains `"Start-ISEScriptRunner`"."
    }
}

function Disable-ISEScriptRunner {
    <#
    .SYNOPSIS
    Remove ScriptRunner ISE Add-on Tool from the ISE profile of the current user.
    .DESCRIPTION
    Add ScriptRunner ISE Add-on Tool to the ISE profile of the current user.
    The ScriptRunner ISE Add-on Tool is not loaded at the startup of the Windows PowerShell ISE anymore.
    #>


    [CmdletBinding()]
    param()

    Test-WindowsPowerShellISE -FunctionName "Disable-ISEScriptRunner"

    if ((Test-Path $profile)) {
        # remove ScriptRunner type from profile
        [string]$iseProfile = Get-Content -Path "$profile" | Select-String -Pattern 'Start-ISEScriptRunner' -NotMatch | Out-String
        Set-Content -Path "$profile" -Value $iseProfile
    }
    else {
        Write-Warning "A ISE UserProfile `"$($profile)`" does not exist, no changes necessary."
    }
}

function Test-WindowsPowerShellISE {
    <#
    .SYNOPSIS
    Ensure running from Windows PowerShell ISE console pane.
    .DESCRIPTION
    Ensure running from Windows PowerShell ISE console pane.
    .PARAMETER FunctionName
    The name of the calling function.
    #>


    [CmdletBinding()]
    param ([string]$FunctionName)

    if ($Host.Name -ne "Windows PowerShell ISE Host") {
        $errorMsg = "The CmdLet {0} requires a Windows PowerShell ISE Host." -f $FunctionName
        throw $errorMsg
    }
}

function Reset-SRXEnv {
    <#
    .SYNOPSIS
    Reset global ScriptRunner PowerShell Host Environment Variable $SRXEnv.
    .DESCRIPTION
    Reset global ScriptRunner PowerShell Host Environment Variable $SRXEnv.
    #>

    [CmdletBinding()]
    param ()

    [psobject].Assembly.GetType('System.Management.Automation.TypeAccelerators')::Add('PSSession', [System.Management.Automation.Runspaces.PSSession])
    $me = whoami
    $ipaddress = '127.0.0.1'
    if (Get-Command -Name 'Get-NetIPAddress' -ErrorAction SilentlyContinue) {
        $ipaddress = Get-NetIPAddress -AddressFamily IPv4 -ErrorAction SilentlyContinue | Select-Object -First 1 -ExpandProperty 'IPAddress' -ErrorAction SilentlyContinue
    }
    $cmdPath = $PSCommandPath
    if ([string]::IsNullOrEmpty($cmdPath)) {
        $cmdPath = Join-Path -Path (Get-Location).Path -ChildPath 'myScript.ps1'
    }

    $Global:SRXEnv = @{
        ReportEmail      = ''
        ResultEmail      = ''
        ResultHtml       = ''
        ResultList       = New-Object -TypeName 'System.Collections.ArrayList'
        ResultList2      = New-Object -TypeName 'System.Collections.ArrayList'
        ResultMessage    = ''
        ResultObjectJSON = $null
        SRXActionID      = 42
        SRXCommandPath   = $cmdPath
        SRXDisplayName   = 'Name of the current Action'
        SRXFilterValue   = ''
        SRXStarted       = Get-Date
        SRXStartedBy     = $me
        SRXStartedIP     = $ipaddress
        SRXStartedReason = "TicketID $((Get-Date).ToString('yyyyMMdd-fff'))"
        SRXStartedVia    = "Interactive by `"$($me)`" ($($Host.Name))"
    }
    Write-Verbose ($Global:SRXEnv | Out-String)
}
Export-ModuleMember -Function 'Enable-ISEScriptRunner', 'Disable-ISEScriptRunner', 'Reset-SRXEnv'

# SIG # Begin signature block
# MIIoSAYJKoZIhvcNAQcCoIIoOTCCKDUCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCD/1LwIRFFT/um3
# xHA0LuPdgUrob47cqIXbYCCsmFLHvaCCDbUwggawMIIEmKADAgECAhAIrUCyYNKc
# TJ9ezam9k67ZMA0GCSqGSIb3DQEBDAUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK
# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV
# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDAeFw0yMTA0MjkwMDAwMDBaFw0z
# NjA0MjgyMzU5NTlaMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg
# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg
# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
# ggIKAoICAQDVtC9C0CiteLdd1TlZG7GIQvUzjOs9gZdwxbvEhSYwn6SOaNhc9es0
# JAfhS0/TeEP0F9ce2vnS1WcaUk8OoVf8iJnBkcyBAz5NcCRks43iCH00fUyAVxJr
# Q5qZ8sU7H/Lvy0daE6ZMswEgJfMQ04uy+wjwiuCdCcBlp/qYgEk1hz1RGeiQIXhF
# LqGfLOEYwhrMxe6TSXBCMo/7xuoc82VokaJNTIIRSFJo3hC9FFdd6BgTZcV/sk+F
# LEikVoQ11vkunKoAFdE3/hoGlMJ8yOobMubKwvSnowMOdKWvObarYBLj6Na59zHh
# 3K3kGKDYwSNHR7OhD26jq22YBoMbt2pnLdK9RBqSEIGPsDsJ18ebMlrC/2pgVItJ
# wZPt4bRc4G/rJvmM1bL5OBDm6s6R9b7T+2+TYTRcvJNFKIM2KmYoX7BzzosmJQay
# g9Rc9hUZTO1i4F4z8ujo7AqnsAMrkbI2eb73rQgedaZlzLvjSFDzd5Ea/ttQokbI
# YViY9XwCFjyDKK05huzUtw1T0PhH5nUwjewwk3YUpltLXXRhTT8SkXbev1jLchAp
# QfDVxW0mdmgRQRNYmtwmKwH0iU1Z23jPgUo+QEdfyYFQc4UQIyFZYIpkVMHMIRro
# OBl8ZhzNeDhFMJlP/2NPTLuqDQhTQXxYPUez+rbsjDIJAsxsPAxWEQIDAQABo4IB
# WTCCAVUwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUaDfg67Y7+F8Rhvv+
# YXsIiGX0TkIwHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0P
# AQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMDMHcGCCsGAQUFBwEBBGswaTAk
# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAC
# hjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9v
# dEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5j
# b20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAcBgNVHSAEFTATMAcGBWeBDAED
# MAgGBmeBDAEEATANBgkqhkiG9w0BAQwFAAOCAgEAOiNEPY0Idu6PvDqZ01bgAhql
# +Eg08yy25nRm95RysQDKr2wwJxMSnpBEn0v9nqN8JtU3vDpdSG2V1T9J9Ce7FoFF
# UP2cvbaF4HZ+N3HLIvdaqpDP9ZNq4+sg0dVQeYiaiorBtr2hSBh+3NiAGhEZGM1h
# mYFW9snjdufE5BtfQ/g+lP92OT2e1JnPSt0o618moZVYSNUa/tcnP/2Q0XaG3Ryw
# YFzzDaju4ImhvTnhOE7abrs2nfvlIVNaw8rpavGiPttDuDPITzgUkpn13c5Ubdld
# AhQfQDN8A+KVssIhdXNSy0bYxDQcoqVLjc1vdjcshT8azibpGL6QB7BDf5WIIIJw
# 8MzK7/0pNVwfiThV9zeKiwmhywvpMRr/LhlcOXHhvpynCgbWJme3kuZOX956rEnP
# LqR0kq3bPKSchh/jwVYbKyP/j7XqiHtwa+aguv06P0WmxOgWkVKLQcBIhEuWTatE
# QOON8BUozu3xGFYHKi8QxAwIZDwzj64ojDzLj4gLDb879M4ee47vtevLt/B3E+bn
# KD+sEq6lLyJsQfmCXBVmzGwOysWGw/YmMwwHS6DTBwJqakAwSEs0qFEgu60bhQji
# WQ1tygVQK+pKHJ6l/aCnHwZ05/LWUpD9r4VIIflXO7ScA+2GRfS0YW6/aOImYIbq
# yK+p/pQd52MbOoZWeE4wggb9MIIE5aADAgECAhAKJP1KmIX7+jQowyMbCSwIMA0G
# CSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwg
# SW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBDb2RlIFNpZ25pbmcg
# UlNBNDA5NiBTSEEzODQgMjAyMSBDQTEwHhcNMjIwODIzMDAwMDAwWhcNMjUwOTE4
# MjM1OTU5WjCBgTELMAkGA1UEBhMCREUxEjAQBgNVBAcTCUV0dGxpbmdlbjEjMCEG
# A1UEChMaU2NyaXB0UnVubmVyIFNvZnR3YXJlIEdtYkgxFDASBgNVBAsTC0RldmVs
# b3BtZW50MSMwIQYDVQQDExpTY3JpcHRSdW5uZXIgU29mdHdhcmUgR21iSDCCAaIw
# DQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGBAKcqyjEj0fwOK50z5/Bat6McHeK2
# 7HiTb0WvAGgTVstcYSMC9GSBNh77X3gMGzIf4bFFFt5FXVoC3MgxXXhYWBVDXr4k
# 3reQ5t9Nm9p4n/lQYsVQ4v4lnBeki8kv9dlRBZdHeAWZ47pQW3JWSVkP1XUQqR16
# uc3wPHL8UjLuPmVl1lbyxyXMHIXilCNIIA1OilNJ37fy/RXYtUkqrkPtU1fV4keu
# At+owdH7NrSaxjxo0Ok4xF4gXvxRbJojWi9Rp5hPV6qFaCFsYx4t3QqSeQ/xKPp9
# 3CDBsJz1myLhdDwd5Iji8U/QvLV+qTLcebGj76ojylB9lPyyrqUfZ/8eMgxNvagp
# Etmd/RBcv/DS/YKeFOJuA92Y56cP2eNCK0oopTj6Lg5TmIynUjAnnpKfyavmp9s9
# lXMbr/0WnNSxrOK2VQ77A30EsRBXwxdMwKHoQAVGL1mRW/xOuaseKpaaekRIEI5e
# Z7PLG5pwvp80SICcYgx/aBwSK9AWdXBZ4UxHzQIDAQABo4ICBjCCAgIwHwYDVR0j
# BBgwFoAUaDfg67Y7+F8Rhvv+YXsIiGX0TkIwHQYDVR0OBBYEFFvNKs/rU+6pAev0
# BPScCQIVWvvrMA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzCB
# tQYDVR0fBIGtMIGqMFOgUaBPhk1odHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGln
# aUNlcnRUcnVzdGVkRzRDb2RlU2lnbmluZ1JTQTQwOTZTSEEzODQyMDIxQ0ExLmNy
# bDBToFGgT4ZNaHR0cDovL2NybDQuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3Rl
# ZEc0Q29kZVNpZ25pbmdSU0E0MDk2U0hBMzg0MjAyMUNBMS5jcmwwPgYDVR0gBDcw
# NTAzBgZngQwBBAEwKTAnBggrBgEFBQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5j
# b20vQ1BTMIGUBggrBgEFBQcBAQSBhzCBhDAkBggrBgEFBQcwAYYYaHR0cDovL29j
# c3AuZGlnaWNlcnQuY29tMFwGCCsGAQUFBzAChlBodHRwOi8vY2FjZXJ0cy5kaWdp
# Y2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRDb2RlU2lnbmluZ1JTQTQwOTZTSEEz
# ODQyMDIxQ0ExLmNydDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4ICAQBe
# i1jojgcQsTbWf2VsHA+uV7M5TQzxqPMjEOGuYVfMMQ0gmLsdhFMkPsNgoa8Irhi1
# MfHYjcUFpPFNfKqmsRGnd4ZSvjLWbJoh6aysQA/BavnCDaf4+jdZpTKdW1s9B9eP
# HW06mvsXyLje88jBKGJGGFbv/vgB/OKSb4t9LgLTDUFNC8aRW7DTxqR07OyMVtSq
# g2SnoGAIm8WvzH5+tUgXOOXap3Kd31LGWjwnoANRrCGBwrJPkDUGag27tXRjv9KU
# X+3/yevBS6EIIr6fAkWinsH1wzXiZdaOVhclIFrxhwPLdR6IgFT+dm2TCErMLB68
# lZok/8pxQAS0M6vUvbYucCQqS423Ok9720mT2UTJiO6rdSe3glaNuHnELKipQMWS
# Dg4yXXAYjYLjRCNEUEQpd1RJSap3xgTFfxtmTDTSAuq6vhSkz7ZRwfloQ4UiPMX/
# 750Kl7S5GM0zRLzZbHUCtTsfzBCiaamJnO/ZnNCYi1GlL9U4kkZxBiIylUOYSJOi
# 6JXFPCCj4V8VXOjBPxP/Pl5+EAAW7wuCE3DR1aOIVVsVOyVDYmCWdBz0dMo4BIIL
# VQX9R38ttEoqm5LRl7KvtisZMrGvGkn0hzzbN6Ec/3TbgbvIv29QSP0S/kNKqeNy
# HSbAF863Yx3+8lccinkQP8dAfbm/laiVOfpQbEOAazGCGekwghnlAgEBMH0waTEL
# MAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMUEwPwYDVQQDEzhE
# aWdpQ2VydCBUcnVzdGVkIEc0IENvZGUgU2lnbmluZyBSU0E0MDk2IFNIQTM4NCAy
# MDIxIENBMQIQCiT9SpiF+/o0KMMjGwksCDANBglghkgBZQMEAgEFAKB8MBAGCisG
# AQQBgjcCAQwxAjAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQB
# gjcCAQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCDBn5rgZpzGFBeT
# wqnh+giODhTz45fpeKihrPduFOuQ6zANBgkqhkiG9w0BAQEFAASCAYAtNQ0anMAV
# sheCXAn7kubQsuQSGiMdoxTwoJi/3C4VrKJjHW2D2mcTceg4s6+S5W11VvE/oRZL
# vtm3Gj5OxPn7Y2AQgBxNY9/mLzgW3Fc9WTTXe4Ayez1/mdu38i9v1zMyP4vIC0+A
# H3jaqzt68hX7/cnnTDevLlFUkQiCIss5u0jGHVHjqaNjwIVXX0L8LxYVIHJNvz/K
# vwymgkcPtECWPl+ppHqAJX48PyjdRvaiWVkETbyQzxvrfwimOiJLU2DVPVPBd76A
# O9YzdZz0EdpeMq8PlsNfSNPG1P12mrqs49tyQlaEfr2dsivAZSeF/VNQ/oBirBt/
# CMpwJc1C6cqfWzJyjS8W3fLr2M27qO+ABfaHZHjEnWKNXJEtuz2eEKXoFJ6zkB5E
# 2O7+yYjzPtgXZq6mRlWJefO2nd07IvZ1h+OBi7nc1c6dkfUxgoFDn4B3CZhKJJJb
# +4iHMd3NnRUL9PkxMF8AxAnu8B85Zhj7K5cVKNXGFIHTRo+H0Cg4+AChghc/MIIX
# OwYKKwYBBAGCNwMDATGCFyswghcnBgkqhkiG9w0BBwKgghcYMIIXFAIBAzEPMA0G
# CWCGSAFlAwQCAQUAMHcGCyqGSIb3DQEJEAEEoGgEZjBkAgEBBglghkgBhv1sBwEw
# MTANBglghkgBZQMEAgEFAAQgnj0OTsDnKDpqNK8RVSEGJrW602NiJp4ME32s7rMr
# OlICEB5F6bpWJpOGTt2GQ23lyHMYDzIwMjMwOTE1MTQyNDM3WqCCEwkwggbCMIIE
# qqADAgECAhAFRK/zlJ0IOaa/2z9f5WEWMA0GCSqGSIb3DQEBCwUAMGMxCzAJBgNV
# BAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNl
# cnQgVHJ1c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwHhcN
# MjMwNzE0MDAwMDAwWhcNMzQxMDEzMjM1OTU5WjBIMQswCQYDVQQGEwJVUzEXMBUG
# A1UEChMORGlnaUNlcnQsIEluYy4xIDAeBgNVBAMTF0RpZ2lDZXJ0IFRpbWVzdGFt
# cCAyMDIzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAo1NFhx2Djlus
# PlSzI+DPn9fl0uddoQ4J3C9Io5d6OyqcZ9xiFVjBqZMRp82qsmrdECmKHmJjadNY
# nDVxvzqX65RQjxwg6seaOy+WZuNp52n+W8PWKyAcwZeUtKVQgfLPywemMGjKg0La
# /H8JJJSkghraarrYO8pd3hkYhftF6g1hbJ3+cV7EBpo88MUueQ8bZlLjyNY+X9pD
# 04T10Mf2SC1eRXWWdf7dEKEbg8G45lKVtUfXeCk5a+B4WZfjRCtK1ZXO7wgX6oJk
# Tf8j48qG7rSkIWRw69XloNpjsy7pBe6q9iT1HbybHLK3X9/w7nZ9MZllR1WdSiQv
# rCuXvp/k/XtzPjLuUjT71Lvr1KAsNJvj3m5kGQc3AZEPHLVRzapMZoOIaGK7vEEb
# eBlt5NkP4FhB+9ixLOFRr7StFQYU6mIIE9NpHnxkTZ0P387RXoyqq1AVybPKvNfE
# O2hEo6U7Qv1zfe7dCv95NBB+plwKWEwAPoVpdceDZNZ1zY8SdlalJPrXxGshuugf
# NJgvOuprAbD3+yqG7HtSOKmYCaFxsmxxrz64b5bV4RAT/mFHCoz+8LbH1cfebCTw
# v0KCyqBxPZySkwS0aXAnDU+3tTbRyV8IpHCj7ArxES5k4MsiK8rxKBMhSVF+BmbT
# O77665E42FEHypS34lCh8zrTioPLQHsCAwEAAaOCAYswggGHMA4GA1UdDwEB/wQE
# AwIHgDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMCAGA1Ud
# IAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATAfBgNVHSMEGDAWgBS6FtltTYUv
# cyl2mi91jGogj57IbzAdBgNVHQ4EFgQUpbbvE+fvzdBkodVWqWUxo97V40kwWgYD
# VR0fBFMwUTBPoE2gS4ZJaHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0
# VHJ1c3RlZEc0UlNBNDA5NlNIQTI1NlRpbWVTdGFtcGluZ0NBLmNybDCBkAYIKwYB
# BQUHAQEEgYMwgYAwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNv
# bTBYBggrBgEFBQcwAoZMaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0RpZ2lD
# ZXJ0VHJ1c3RlZEc0UlNBNDA5NlNIQTI1NlRpbWVTdGFtcGluZ0NBLmNydDANBgkq
# hkiG9w0BAQsFAAOCAgEAgRrW3qCptZgXvHCNT4o8aJzYJf/LLOTN6l0ikuyMIgKp
# uM+AqNnn48XtJoKKcS8Y3U623mzX4WCcK+3tPUiOuGu6fF29wmE3aEl3o+uQqhLX
# J4Xzjh6S2sJAOJ9dyKAuJXglnSoFeoQpmLZXeY/bJlYrsPOnvTcM2Jh2T1a5UsK2
# nTipgedtQVyMadG5K8TGe8+c+njikxp2oml101DkRBK+IA2eqUTQ+OVJdwhaIcW0
# z5iVGlS6ubzBaRm6zxbygzc0brBBJt3eWpdPM43UjXd9dUWhpVgmagNF3tlQtVCM
# r1a9TMXhRsUo063nQwBw3syYnhmJA+rUkTfvTVLzyWAhxFZH7doRS4wyw4jmWOK2
# 2z75X7BC1o/jF5HRqsBV44a/rCcsQdCaM0qoNtS5cpZ+l3k4SF/Kwtw9Mt911jZn
# Won49qfH5U81PAC9vpwqbHkB3NpE5jreODsHXjlY9HxzMVWggBHLFAx+rrz+pOt5
# Zapo1iLKO+uagjVXKBbLafIymrLS2Dq4sUaGa7oX/cR3bBVsrquvczroSUa31X/M
# tjjA2Owc9bahuEMs305MfR5ocMB3CtQC4Fxguyj/OOVSWtasFyIjTvTs0xf7UGv/
# B3cfcZdEQcm4RtNsMnxYL2dHZeUbc7aZ+WssBkbvQR7w8F/g29mtkIBEr4AQQYow
# ggauMIIElqADAgECAhAHNje3JFR82Ees/ShmKl5bMA0GCSqGSIb3DQEBCwUAMGIx
# CzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
# dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBH
# NDAeFw0yMjAzMjMwMDAwMDBaFw0zNzAzMjIyMzU5NTlaMGMxCzAJBgNVBAYTAlVT
# MRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQgVHJ1
# c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0EwggIiMA0GCSqG
# SIb3DQEBAQUAA4ICDwAwggIKAoICAQDGhjUGSbPBPXJJUVXHJQPE8pE3qZdRodbS
# g9GeTKJtoLDMg/la9hGhRBVCX6SI82j6ffOciQt/nR+eDzMfUBMLJnOWbfhXqAJ9
# /UO0hNoR8XOxs+4rgISKIhjf69o9xBd/qxkrPkLcZ47qUT3w1lbU5ygt69OxtXXn
# HwZljZQp09nsad/ZkIdGAHvbREGJ3HxqV3rwN3mfXazL6IRktFLydkf3YYMZ3V+0
# VAshaG43IbtArF+y3kp9zvU5EmfvDqVjbOSmxR3NNg1c1eYbqMFkdECnwHLFuk4f
# sbVYTXn+149zk6wsOeKlSNbwsDETqVcplicu9Yemj052FVUmcJgmf6AaRyBD40Nj
# gHt1biclkJg6OBGz9vae5jtb7IHeIhTZgirHkr+g3uM+onP65x9abJTyUpURK1h0
# QCirc0PO30qhHGs4xSnzyqqWc0Jon7ZGs506o9UD4L/wojzKQtwYSH8UNM/STKvv
# mz3+DrhkKvp1KCRB7UK/BZxmSVJQ9FHzNklNiyDSLFc1eSuo80VgvCONWPfcYd6T
# /jnA+bIwpUzX6ZhKWD7TA4j+s4/TXkt2ElGTyYwMO1uKIqjBJgj5FBASA31fI7tk
# 42PgpuE+9sJ0sj8eCXbsq11GdeJgo1gJASgADoRU7s7pXcheMBK9Rp6103a50g5r
# mQzSM7TNsQIDAQABo4IBXTCCAVkwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4E
# FgQUuhbZbU2FL3MpdpovdYxqII+eyG8wHwYDVR0jBBgwFoAU7NfjgtJxXWRM3y5n
# P+e6mK4cD08wDgYDVR0PAQH/BAQDAgGGMBMGA1UdJQQMMAoGCCsGAQUFBwMIMHcG
# CCsGAQUFBwEBBGswaTAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQu
# Y29tMEEGCCsGAQUFBzAChjVodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGln
# aUNlcnRUcnVzdGVkUm9vdEc0LmNydDBDBgNVHR8EPDA6MDigNqA0hjJodHRwOi8v
# Y3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNybDAgBgNV
# HSAEGTAXMAgGBmeBDAEEAjALBglghkgBhv1sBwEwDQYJKoZIhvcNAQELBQADggIB
# AH1ZjsCTtm+YqUQiAX5m1tghQuGwGC4QTRPPMFPOvxj7x1Bd4ksp+3CKDaopafxp
# wc8dB+k+YMjYC+VcW9dth/qEICU0MWfNthKWb8RQTGIdDAiCqBa9qVbPFXONASIl
# zpVpP0d3+3J0FNf/q0+KLHqrhc1DX+1gtqpPkWaeLJ7giqzl/Yy8ZCaHbJK9nXzQ
# cAp876i8dU+6WvepELJd6f8oVInw1YpxdmXazPByoyP6wCeCRK6ZJxurJB4mwbfe
# Kuv2nrF5mYGjVoarCkXJ38SNoOeY+/umnXKvxMfBwWpx2cYTgAnEtp/Nh4cku0+j
# Sbl3ZpHxcpzpSwJSpzd+k1OsOx0ISQ+UzTl63f8lY5knLD0/a6fxZsNBzU+2QJsh
# IUDQtxMkzdwdeDrknq3lNHGS1yZr5Dhzq6YBT70/O3itTK37xJV77QpfMzmHQXh6
# OOmc4d0j/R0o08f56PGYX/sr2H7yRp11LB4nLCbbbxV7HhmLNriT1ObyF5lZynDw
# N7+YAN8gFk8n+2BnFqFmut1VwDophrCYoCvtlUG3OtUVmDG0YgkPCr2B2RP+v6TR
# 81fZvAT6gt4y3wSJ8ADNXcL50CN/AAvkdgIm2fBldkKmKYcJRyvmfxqkhQ/8mJb2
# VVQrH4D6wPIOK+XW+6kvRBVK5xMOHds3OBqhK/bt1nz8MIIFjTCCBHWgAwIBAgIQ
# DpsYjvnQLefv21DiCEAYWjANBgkqhkiG9w0BAQwFADBlMQswCQYDVQQGEwJVUzEV
# MBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29t
# MSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMjIwODAx
# MDAwMDAwWhcNMzExMTA5MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMM
# RGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQD
# ExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqGSIb3DQEBAQUAA4IC
# DwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEppz1Yq3aa
# za57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+n6lXFllV
# cq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYyktzuxeTsiT
# +CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw2Vbuyntd
# 463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQjdjUN6QuBX2I9YI+
# EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/CNdaSaTC5qmgZ92k
# J7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtmmnTK3kse5w5j
# rubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3IbKyEbe7
# f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEPlAwhHbJU
# KSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98THU/Y+wh
# X8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t9dmpsh3lGwIDAQAB
# o4IBOjCCATYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5n
# P+e6mK4cD08wHwYDVR0jBBgwFoAUReuir/SSy4IxLVGLp6chnfNtyA8wDgYDVR0P
# AQH/BAQDAgGGMHkGCCsGAQUFBwEBBG0wazAkBggrBgEFBQcwAYYYaHR0cDovL29j
# c3AuZGlnaWNlcnQuY29tMEMGCCsGAQUFBzAChjdodHRwOi8vY2FjZXJ0cy5kaWdp
# Y2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3J0MEUGA1UdHwQ+MDww
# OqA4oDaGNGh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJ
# RFJvb3RDQS5jcmwwEQYDVR0gBAowCDAGBgRVHSAAMA0GCSqGSIb3DQEBDAUAA4IB
# AQBwoL9DXFXnOF+go3QbPbYW1/e/Vwe9mqyhhyzshV6pGrsi+IcaaVQi7aSId229
# GhT0E0p6Ly23OO/0/4C5+KH38nLeJLxSA8hO0Cre+i1Wz/n096wwepqLsl7Uz9FD
# RJtDIeuWcqFItJnLnU+nBgMTdydE1Od/6Fmo8L8vC6bp8jQ87PcDx4eo0kxAGTVG
# amlUsLihVo7spNU96LHc/RzY9HdaXFSMb++hUD38dglohJ9vytsgjTVgHAIDyyCw
# rFigDkBjxZgiwbJZ9VVrzyerbHbObyMt9H5xaiNrIv8SuFQtJ37YOtnwtoeW/VvR
# XKwYw02fc7cBqZ9Xql4o4rmUMYIDdjCCA3ICAQEwdzBjMQswCQYDVQQGEwJVUzEX
# MBUGA1UEChMORGlnaUNlcnQsIEluYy4xOzA5BgNVBAMTMkRpZ2lDZXJ0IFRydXN0
# ZWQgRzQgUlNBNDA5NiBTSEEyNTYgVGltZVN0YW1waW5nIENBAhAFRK/zlJ0IOaa/
# 2z9f5WEWMA0GCWCGSAFlAwQCAQUAoIHRMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0B
# CRABBDAcBgkqhkiG9w0BCQUxDxcNMjMwOTE1MTQyNDM3WjArBgsqhkiG9w0BCRAC
# DDEcMBowGDAWBBRm8CsywsLJD4JdzqqKycZPGZzPQDAvBgkqhkiG9w0BCQQxIgQg
# +0gu7w13cEgF/YVi7Cez0M4aC8vXW5bc/6vZetT3QRowNwYLKoZIhvcNAQkQAi8x
# KDAmMCQwIgQg0vbkbe10IszR1EBXaEE2b4KK2lWarjMWr00amtQMeCgwDQYJKoZI
# hvcNAQEBBQAEggIAClL/Hc2xIIx4Nz+wOEQpuMzHT2qCshhp92qBKjO5QHxuaajM
# UDy+YfieRigA4v1Y/o9un6FYbBSqfYHv3PKvAr4+qK6GL4TkxgcNp5i1YwdLleze
# /0Dkkh1lDpE/4+R2zkRkmk+hT11Wgo4vLVzMOXibFCRCdfKlV41/xbV9+e/MGgyi
# juSXix9d5OcQ1WXEKKPspfw7idm2Rozr8H0mYUXGCJyLq7r0YqWomy7ZvBN6FTi6
# 6xXZcWeOokEttJKWr3Msam14a3orGRr6PmzcuDw9zCiUg+0qcgZsbHCgWdmho4BL
# p9k7csBW2jHSKwh3BVhJ2Hym+fmJ5Ax1BL/U9CiEzQxJW3xxU+1xMARJSQj9C+Tv
# oQyikuoW54tofSMLqrIP5zqSwU0TzM4HjRUvGSue7du7k2UG5OudL1q3bbwdEYN2
# uAfPlbWFlhMNbcD05slGNLhivbFyQ1Sj2BKnEyRo0E6WfKGTaTYo2b7CChvTYWoE
# 2bxBMUGDUpAP8HwbPkBqVBMKAlisf90udu9xK9/ujIC4uXiS2hRddf3RWWxWItj/
# zD3HWTbZMyr5WjA0315UVI71w5y8EbCD48Gs9udj4BPyBDiIJBHtJfuBAJaQ6DDu
# akZ22P6qhG3zhv8oZ8IxipJkcyB0K65S9pIVY3IjJqA/03QtK5CIFfzkBCw=
# SIG # End signature block