Public/SEPPMailAPI-TemplateInclude.ps1

<#
.SYNOPSIS
Manage template include items.
 
.DESCRIPTION
Provides cmdlets for listing, reading, adding, updating and removing inline or
attachment entries of SEPPmail templates.
#>


function Find-SMATemplateInclude {
    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $false, HelpMessage = 'Show list with template include names only')]
        [switch]$list,

        [Parameter(Mandatory = $true, HelpMessage = 'Limit output to a specific template')]
        [string]$template,

        [Parameter(Mandatory = $false, HelpMessage = 'Also return base64 encoded data of inlines and attachments')]
        [switch]$withData,

        [Parameter(Mandatory = $true, HelpMessage = 'Type of the include (inline or attachment)')]
        [ValidateSet('inline', 'attachment')]
        [string]$type,

        [Parameter(Mandatory = $false)]
        [string]$SMAHost = $Script:activeCfg.SMAHost,

        [Parameter(Mandatory = $false)]
        [int]$SMAPort = $Script:activeCfg.SMAPort,

        [Parameter(Mandatory = $false)]
        [string]$SMAVersion = $Script:activeCfg.SMAPIVersion,

        [Parameter(Mandatory = $false)]
        [System.Management.Automation.PSCredential]$SMACred = $Script:activeCfg.SMACred,

        [Parameter(Mandatory = $false)]
        [switch]$SMASkipCertCheck = $Script:activeCfg.SMAskipCertCheck
    )

    begin {
        if (-not (verifyVars -VarList $Script:requiredVarList)) {
            throw $missingVarsMessage
        }
    }

    process {
        $uriPath = 'mailsystem/template/{0}/{1}' -f $template, $type
        $queryParams = @{}
        if ($list) { $queryParams.list = $true }
        if ($withData) { $queryParams.withData = $true }

        $smaParams = @{ Host = $SMAHost; Port = $SMAPort; Version = $SMAVersion }
        $uri = if ($queryParams.Count) {
            New-SMAQueryString -uriPath $uriPath -qParam $queryParams @smaParams
        } else {
            New-SMAQueryString -uriPath $uriPath @smaParams
        }

        $tmp = Invoke-SMARestMethod @{
            Uri = $uri
            Method = 'GET'
            Cred = $SMACred
            SkipCertCheck = $SMASkipCertCheck
        }

        if ($list) {
            foreach ($item in $tmp) { ConvertFrom-SMAPIFormat -inputobject $item }
        } else {
            $values = $tmp.Psobject.properties.value
            foreach ($item in $values) { ConvertFrom-SMAPIFormat -inputobject $item }
        }
    }
}

function Add-SMATemplateInclude {
    [CmdletBinding(SupportsShouldProcess)]
    param (
        [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true, HelpMessage = 'The template name')]
        [string]$template,

        [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)]
        [ValidateSet('inline', 'attachment')]
        [string]$type,

        [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)]
        [string]$fileName,

        [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)]
        [string]$fileData,

        [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)]
        [string]$contentType,

        [Parameter(Mandatory = $false, ValueFromPipelineByPropertyName = $true)]
        [string]$contentId,

        [Parameter(Mandatory = $false)]
        [string]$SMAHost = $Script:activeCfg.SMAHost,

        [Parameter(Mandatory = $false)]
        [int]$SMAPort = $Script:activeCfg.SMAPort,

        [Parameter(Mandatory = $false)]
        [string]$SMAVersion = $Script:activeCfg.SMAPIVersion,

        [Parameter(Mandatory = $false)]
        [System.Management.Automation.PSCredential]$SMACred = $Script:activeCfg.SMACred,

        [Parameter(Mandatory = $false)]
        [switch]$SMASkipCertCheck = $Script:activeCfg.SMAskipCertCheck
    )

    begin {
        if (-not (verifyVars -VarList $Script:requiredVarList)) {
            throw $missingVarsMessage
        }

        $uriPath = 'mailsystem/template/{0}/{1}' -f $template, $type
        $smaParams = @{ Host = $SMAHost; Port = $SMAPort; Version = $SMAVersion }
        $uri = New-SMAQueryString -uriPath $uriPath @smaParams
    }

    process {
        $bodyHt = @{
            fileName = $fileName
            fileData = $fileData
            contentType = $contentType
        }

        if ($PSBoundParameters.ContainsKey('contentId')) {
            $bodyHt.contentID = $contentId
        }

        $body = $bodyHt | ConvertTo-Json

        if ($PSCmdlet.ShouldProcess($template, 'Add template include')) {
            $tmp = Invoke-SMARestMethod @{
                Uri = $uri
                Method = 'POST'
                Body = $body
                Cred = $SMACred
                SkipCertCheck = $SMASkipCertCheck
            }

            if ($tmp) {
                return $tmp.message
            }
        }
    }
}

function Set-SMATemplateInclude {
    [CmdletBinding(SupportsShouldProcess)]
    param (
        [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true, ValueFromPipeline = $true, Position = 0, HelpMessage = 'Name of the includes you want to delete')]
        [string[]]$name,

        [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true, HelpMessage = 'The template name')]
        [string]$template,

        [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)]
        [ValidateSet('inline', 'attachment')]
        [string]$type,

        [Parameter(Mandatory = $false)]
        [string]$SMAHost = $Script:activeCfg.SMAHost,

        [Parameter(Mandatory = $false)]
        [int]$SMAPort = $Script:activeCfg.SMAPort,

        [Parameter(Mandatory = $false)]
        [string]$SMAVersion = $Script:activeCfg.SMAPIVersion,

        [Parameter(Mandatory = $false)]
        [System.Management.Automation.PSCredential]$SMACred = $Script:activeCfg.SMACred,

        [Parameter(Mandatory = $false)]
        [switch]$SMASkipCertCheck = $Script:activeCfg.SMAskipCertCheck
    )

    begin {
        if (-not (verifyVars -VarList $Script:requiredVarList)) {
            throw $missingVarsMessage
        }
    }

    process {
        $uriPath = 'mailsystem/template/{0}/{1}' -f $template, $type
        $smaParams = @{ Host = $SMAHost; Port = $SMAPort; Version = $SMAVersion }
        $uri = New-SMAQueryString -uriPath $uriPath @smaParams
        $body = $name | ConvertTo-Json

        if ($PSCmdlet.ShouldProcess($template, 'Update template include')) {
            $tmp = Invoke-SMARestMethod @{
                Uri = $uri
                Method = 'PUT'
                Body = $body
                Cred = $SMACred
                SkipCertCheck = $SMASkipCertCheck
            }

            if ($tmp) {
                return $tmp.psobject.Properties.Value
            }
        }
    }
}

function Remove-SMATemplateInclude {
    [CmdletBinding(DefaultParameterSetName = 'Default', SupportsShouldProcess)]
    param (
        [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true, ValueFromPipeline = $true, ParameterSetName = 'Default', Position = 0, HelpMessage = 'Name of the includes you want to delete')]
        [string[]]$name,

        [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true, HelpMessage = 'The template name')]
        [string]$template,

        [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)]
        [ValidateSet('inline', 'attachment')]
        [string]$type,

        [Parameter(Mandatory = $false)]
        [string]$SMAHost = $Script:activeCfg.SMAHost,

        [Parameter(Mandatory = $false)]
        [int]$SMAPort = $Script:activeCfg.SMAPort,

        [Parameter(Mandatory = $false)]
        [string]$SMAVersion = $Script:activeCfg.SMAPIVersion,

        [Parameter(Mandatory = $false)]
        [System.Management.Automation.PSCredential]$SMACred = $Script:activeCfg.SMACred,

        [Parameter(Mandatory = $false)]
        [switch]$SMASkipCertCheck = $Script:activeCfg.SMAskipCertCheck
    )

    begin {
        if (-not (verifyVars -VarList $Script:requiredVarList)) {
            throw $missingVarsMessage
        }
    }

    process {
        $uriPath = 'mailsystem/template/{0}/{1}' -f $template, $type
        $smaParams = @{ Host = $SMAHost; Port = $SMAPort; Version = $SMAVersion }
        $uri = New-SMAQueryString -uriPath $uriPath @smaParams
        $body = $name | ConvertTo-Json

        if ($PSCmdlet.ShouldProcess($template, 'Remove template include')) {
            $tmp = Invoke-SMARestMethod @{
                Uri = $uri
                Method = 'DELETE'
                Body = $body
                Cred = $SMACred
                SkipCertCheck = $SMASkipCertCheck
            }

            if ($tmp) {
                return $tmp.psobject.Properties.Value
            }
        }
    }
}

# SIG # Begin signature block
# MIIVyAYJKoZIhvcNAQcCoIIVuTCCFbUCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDvRsMf4dnzQgCr
# WHl4txFI17jNhh65vRFYgGaJS6R+daCCEgQwggVvMIIEV6ADAgECAhBI/JO0YFWU
# jTanyYqJ1pQWMA0GCSqGSIb3DQEBDAUAMHsxCzAJBgNVBAYTAkdCMRswGQYDVQQI
# DBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoM
# EUNvbW9kbyBDQSBMaW1pdGVkMSEwHwYDVQQDDBhBQUEgQ2VydGlmaWNhdGUgU2Vy
# dmljZXMwHhcNMjEwNTI1MDAwMDAwWhcNMjgxMjMxMjM1OTU5WjBWMQswCQYDVQQG
# EwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMS0wKwYDVQQDEyRTZWN0aWdv
# IFB1YmxpYyBDb2RlIFNpZ25pbmcgUm9vdCBSNDYwggIiMA0GCSqGSIb3DQEBAQUA
# A4ICDwAwggIKAoICAQCN55QSIgQkdC7/FiMCkoq2rjaFrEfUI5ErPtx94jGgUW+s
# hJHjUoq14pbe0IdjJImK/+8Skzt9u7aKvb0Ffyeba2XTpQxpsbxJOZrxbW6q5KCD
# J9qaDStQ6Utbs7hkNqR+Sj2pcaths3OzPAsM79szV+W+NDfjlxtd/R8SPYIDdub7
# P2bSlDFp+m2zNKzBenjcklDyZMeqLQSrw2rq4C+np9xu1+j/2iGrQL+57g2extme
# me/G3h+pDHazJyCh1rr9gOcB0u/rgimVcI3/uxXP/tEPNqIuTzKQdEZrRzUTdwUz
# T2MuuC3hv2WnBGsY2HH6zAjybYmZELGt2z4s5KoYsMYHAXVn3m3pY2MeNn9pib6q
# RT5uWl+PoVvLnTCGMOgDs0DGDQ84zWeoU4j6uDBl+m/H5x2xg3RpPqzEaDux5mcz
# mrYI4IAFSEDu9oJkRqj1c7AGlfJsZZ+/VVscnFcax3hGfHCqlBuCF6yH6bbJDoEc
# QNYWFyn8XJwYK+pF9e+91WdPKF4F7pBMeufG9ND8+s0+MkYTIDaKBOq3qgdGnA2T
# OglmmVhcKaO5DKYwODzQRjY1fJy67sPV+Qp2+n4FG0DKkjXp1XrRtX8ArqmQqsV/
# AZwQsRb8zG4Y3G9i/qZQp7h7uJ0VP/4gDHXIIloTlRmQAOka1cKG8eOO7F/05QID
# AQABo4IBEjCCAQ4wHwYDVR0jBBgwFoAUoBEKIz6W8Qfs4q8p74Klf9AwpLQwHQYD
# VR0OBBYEFDLrkpr/NZZILyhAQnAgNpFcF4XmMA4GA1UdDwEB/wQEAwIBhjAPBgNV
# HRMBAf8EBTADAQH/MBMGA1UdJQQMMAoGCCsGAQUFBwMDMBsGA1UdIAQUMBIwBgYE
# VR0gADAIBgZngQwBBAEwQwYDVR0fBDwwOjA4oDagNIYyaHR0cDovL2NybC5jb21v
# ZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNAYIKwYBBQUHAQEE
# KDAmMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5jb21vZG9jYS5jb20wDQYJKoZI
# hvcNAQEMBQADggEBABK/oe+LdJqYRLhpRrWrJAoMpIpnuDqBv0WKfVIHqI0fTiGF
# OaNrXi0ghr8QuK55O1PNtPvYRL4G2VxjZ9RAFodEhnIq1jIV9RKDwvnhXRFAZ/ZC
# J3LFI+ICOBpMIOLbAffNRk8monxmwFE2tokCVMf8WPtsAO7+mKYulaEMUykfb9gZ
# pk+e96wJ6l2CxouvgKe9gUhShDHaMuwV5KZMPWw5c9QLhTkg4IUaaOGnSDip0TYl
# d8GNGRbFiExmfS9jzpjoad+sPKhdnckcW67Y8y90z7h+9teDnRGWYpquRRPaf9xH
# +9/DUp/mBlXpnYzyOmJRvOwkDynUWICE5EV7WtgwggYaMIIEAqADAgECAhBiHW0M
# UgGeO5B5FSCJIRwKMA0GCSqGSIb3DQEBDAUAMFYxCzAJBgNVBAYTAkdCMRgwFgYD
# VQQKEw9TZWN0aWdvIExpbWl0ZWQxLTArBgNVBAMTJFNlY3RpZ28gUHVibGljIENv
# ZGUgU2lnbmluZyBSb290IFI0NjAeFw0yMTAzMjIwMDAwMDBaFw0zNjAzMjEyMzU5
# NTlaMFQxCzAJBgNVBAYTAkdCMRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0ZWQxKzAp
# BgNVBAMTIlNlY3RpZ28gUHVibGljIENvZGUgU2lnbmluZyBDQSBSMzYwggGiMA0G
# CSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCbK51T+jU/jmAGQ2rAz/V/9shTUxjI
# ztNsfvxYB5UXeWUzCxEeAEZGbEN4QMgCsJLZUKhWThj/yPqy0iSZhXkZ6Pg2A2NV
# DgFigOMYzB2OKhdqfWGVoYW3haT29PSTahYkwmMv0b/83nbeECbiMXhSOtbam+/3
# 6F09fy1tsB8je/RV0mIk8XL/tfCK6cPuYHE215wzrK0h1SWHTxPbPuYkRdkP05Zw
# mRmTnAO5/arnY83jeNzhP06ShdnRqtZlV59+8yv+KIhE5ILMqgOZYAENHNX9SJDm
# +qxp4VqpB3MV/h53yl41aHU5pledi9lCBbH9JeIkNFICiVHNkRmq4TpxtwfvjsUe
# dyz8rNyfQJy/aOs5b4s+ac7IH60B+Ja7TVM+EKv1WuTGwcLmoU3FpOFMbmPj8pz4
# 4MPZ1f9+YEQIQty/NQd/2yGgW+ufflcZ/ZE9o1M7a5Jnqf2i2/uMSWymR8r2oQBM
# dlyh2n5HirY4jKnFH/9gRvd+QOfdRrJZb1sCAwEAAaOCAWQwggFgMB8GA1UdIwQY
# MBaAFDLrkpr/NZZILyhAQnAgNpFcF4XmMB0GA1UdDgQWBBQPKssghyi47G9IritU
# pimqF6TNDDAOBgNVHQ8BAf8EBAMCAYYwEgYDVR0TAQH/BAgwBgEB/wIBADATBgNV
# HSUEDDAKBggrBgEFBQcDAzAbBgNVHSAEFDASMAYGBFUdIAAwCAYGZ4EMAQQBMEsG
# A1UdHwREMEIwQKA+oDyGOmh0dHA6Ly9jcmwuc2VjdGlnby5jb20vU2VjdGlnb1B1
# YmxpY0NvZGVTaWduaW5nUm9vdFI0Ni5jcmwwewYIKwYBBQUHAQEEbzBtMEYGCCsG
# AQUFBzAChjpodHRwOi8vY3J0LnNlY3RpZ28uY29tL1NlY3RpZ29QdWJsaWNDb2Rl
# U2lnbmluZ1Jvb3RSNDYucDdjMCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5zZWN0
# aWdvLmNvbTANBgkqhkiG9w0BAQwFAAOCAgEABv+C4XdjNm57oRUgmxP/BP6YdURh
# w1aVcdGRP4Wh60BAscjW4HL9hcpkOTz5jUug2oeunbYAowbFC2AKK+cMcXIBD0Zd
# OaWTsyNyBBsMLHqafvIhrCymlaS98+QpoBCyKppP0OcxYEdU0hpsaqBBIZOtBajj
# cw5+w/KeFvPYfLF/ldYpmlG+vd0xqlqd099iChnyIMvY5HexjO2AmtsbpVn0OhNc
# WbWDRF/3sBp6fWXhz7DcML4iTAWS+MVXeNLj1lJziVKEoroGs9Mlizg0bUMbOalO
# hOfCipnx8CaLZeVme5yELg09Jlo8BMe80jO37PU8ejfkP9/uPak7VLwELKxAMcJs
# zkyeiaerlphwoKx1uHRzNyE6bxuSKcutisqmKL5OTunAvtONEoteSiabkPVSZ2z7
# 6mKnzAfZxCl/3dq3dUNw4rg3sTCggkHSRqTqlLMS7gjrhTqBmzu1L90Y1KWN/Y5J
# KdGvspbOrTfOXyXvmPL6E52z1NZJ6ctuMFBQZH3pwWvqURR8AgQdULUvrxjUYbHH
# j95Ejza63zdrEcxWLDX6xWls/GDnVNueKjWUH3fTv1Y8Wdho698YADR7TNx8X8z2
# Bev6SivBBOHY+uqiirZtg0y9ShQoPzmCcn63Syatatvx157YK9hlcPmVoa1oDE5/
# L9Uo2bC5a4CH2RwwggZvMIIE16ADAgECAhBIqMP3CCLHOHtOKuaWNyeFMA0GCSqG
# SIb3DQEBDAUAMFQxCzAJBgNVBAYTAkdCMRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0
# ZWQxKzApBgNVBAMTIlNlY3RpZ28gUHVibGljIENvZGUgU2lnbmluZyBDQSBSMzYw
# HhcNMjYwNDE1MDAwMDAwWhcNMjcwNzE0MjM1OTU5WjBmMQswCQYDVQQGEwJERTEP
# MA0GA1UECAwGQmF5ZXJuMSIwIAYDVQQKDBlTRVBQbWFpbCBEZXV0c2NobGFuZCBH
# bWJIMSIwIAYDVQQDDBlTRVBQbWFpbCBEZXV0c2NobGFuZCBHbWJIMIICIjANBgkq
# hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvAFzE8MbJpvQt+IdIh1M+bKYsJBFDk4b
# 9ySe25IrCi00B9o5XmQtIw42MqyIKbUq1tDARtp9KTQedEP9W+rflAF2l+0Z046J
# kiqumU9/enbqWLDyln1aS/p7HOgwZFMhnsR9zH0MfFckiklUmkzJO+vmzYAK7ZmD
# xajNLJs0gkGRU2/BecAx/TSvLXMaKONsKZCyMKQCnwo1mCY/tFl5EgUz7YQFrPOR
# BQGfQke/hkdBfQDqNRsi/J6+KhJWc6LvgQihdRg/INQbQsTxlow18NWvyFsjjueH
# 7kG6HR4YKfbv07xgrsIh8xvq9ZJ1SBhLXmkg4SdoQGASjqR6o3keAX+bDRFf+hml
# WWJp/FqVHR5QomF3vbK2/bbz4jAclYSPx/sPasNJ0YnKFkgmowZ7Ysa0KA0/egBg
# tI4gJ+8V7zrqIVEG3rMQh9KCdMnJqP2aM9o4gUzQvE1M4x606liX9EWwdLLS+fe7
# 9o+Fzo5oH4wBE/En6hQQkzseHHu+TXCDd6zUUZ/PlTK0gTaDIRXt6UzPNqJ4RiRC
# W2pNFcPt078qqVTuwKUXoE4ufxGgXKFrZlCYST/9eG1TnW2oq19nz8A333GCsL3g
# poNIKvfmDyGMMNzvx2aeqn2v6e75z8kH19iGSNZ51xT+WgS9F1aIvjz08/T7XAv7
# iDPF1/gPIp8CAwEAAaOCAakwggGlMB8GA1UdIwQYMBaAFA8qyyCHKLjsb0iuK1Sm
# KaoXpM0MMB0GA1UdDgQWBBS30/Tq+alF3j2BY5up8n5zpAU23DAOBgNVHQ8BAf8E
# BAMCB4AwDAYDVR0TAQH/BAIwADATBgNVHSUEDDAKBggrBgEFBQcDAzBKBgNVHSAE
# QzBBMDUGDCsGAQQBsjEBAgEDAjAlMCMGCCsGAQUFBwIBFhdodHRwczovL3NlY3Rp
# Z28uY29tL0NQUzAIBgZngQwBBAEwSQYDVR0fBEIwQDA+oDygOoY4aHR0cDovL2Ny
# bC5zZWN0aWdvLmNvbS9TZWN0aWdvUHVibGljQ29kZVNpZ25pbmdDQVIzNi5jcmww
# eQYIKwYBBQUHAQEEbTBrMEQGCCsGAQUFBzAChjhodHRwOi8vY3J0LnNlY3RpZ28u
# Y29tL1NlY3RpZ29QdWJsaWNDb2RlU2lnbmluZ0NBUjM2LmNydDAjBggrBgEFBQcw
# AYYXaHR0cDovL29jc3Auc2VjdGlnby5jb20wHgYDVR0RBBcwFYETc3VwcG9ydEBz
# ZXBwbWFpbC5jaDANBgkqhkiG9w0BAQwFAAOCAYEAi7fmb5UYoemWG3CC4K2UZWVr
# R6GOfi8gbJKgjPbKO4zrCrU/x6cOdyp6scKZfUEGFDf8KH6pP4pAQv1Hsbi49gU2
# kxoUWLlCiipn05qJY663DHx9hlStej/ZdEatou0wyCDiG5xD7kmG+1t6iLyyCBgE
# B88tJpzTjI61qXmBTS/FGEOAsB4SDEW1ngA7bc5FOv4IUKA43hp8M+N3GeYFzDqw
# JELYEfVVYheBW3o7q4VrCdfFEuaQihOtvfDfYpP6ANgekNn8HdsMT8rx9D1I50Rl
# i/qQFo2BOuPyb2SIQPzJvCs5wgi5qgp1nHiN6igumu2Cz7BmGjOazGUgCSUY5Qwy
# E8+F+R2tVM+2O15rfX01+e56ZfojBEiEjMwfPHs3fa3V3gokWWNwUMkton/v0R/n
# l2zjmOr2okohOINZEDh9frg21zUCN5ZD8Y4zQWuiJLCvvvBZs0JR4c9xl2k2wtw/
# QLPhGU69zM3smGpRoLE8M6zvUvSU7jXjvefazUniMYIDGjCCAxYCAQEwaDBUMQsw
# CQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMSswKQYDVQQDEyJT
# ZWN0aWdvIFB1YmxpYyBDb2RlIFNpZ25pbmcgQ0EgUjM2AhBIqMP3CCLHOHtOKuaW
# NyeFMA0GCWCGSAFlAwQCAQUAoIGEMBgGCisGAQQBgjcCAQwxCjAIoAKAAKECgAAw
# GQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisG
# AQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIMnGTupfWlrYTfslE+a7fL9E4ul10BnQ
# gh5Jmban4ZamMA0GCSqGSIb3DQEBAQUABIICAHcjoVRIBZcmGUIeSIK5V9AwzHtS
# pgiN3TEKzJT+NfOvQWCq/P7eu5Xvay6b+4c9x1CxvhAwD3sVOGgXX3b+FdYW0vjw
# WVoqG5MFbPGIdDpwqzU69RKKOcpz0q19WODUJM/tMZpXbdDHzL9Hs5ZqHVtVCHeL
# KUMz6nZabrqD/KJTo8beZL3414hfom4m5AuRVfdhZUEz0W5uODPDo50xjV/qdZ4/
# bWVZVZDi1HeXZHZV3DO3MlHp0WoLsqHbO5teFWmm1Lu7e3PIp+EIC9GyYDiUruQK
# 2b4TdWJAH7cdFoCgvjG9u5uQPsa2XIimAdLtmYb5BzaG/nPXV7Er4yqGOSXWo/nL
# 9tpz97ctuidi2UXzsXUiVJBlreEJHjpKYb4TCkParE/NJB1xO1Zl5YD8iikMNBDx
# aZ4SkM9XMs7qoTWQ0omLU+fxegSNDZKWWAyM84YZhEB5tCk7MR9Q9De+61skRH9N
# 2xnpQPkX7nzvwHcF0/Jao4njLc4RV5swHJzKvuS2Agdb1VambWyWUgwlJiPPkZmO
# flOnfGb2t9jzU84gLhc9mAwYGxvIajWppraWsyaBTS3jDUSzcC57rZ9LfjWQ6E/n
# XI+uL6t71TI5+aWdxqfpK2iAlUzR9fi7+9eM82Lw04sgKMcRPJZjG5qj/DMICb2d
# 9SHgTVqw97G+X6gF
# SIG # End signature block