Extensions/Publish-BCDevExtensions.ps1

function Publish-BCDevExtensions {
    Param(
        [Parameter(Mandatory = $true)] [String]$ContainerName,
        [Parameter(Mandatory = $false)] [System.Management.Automation.PSCredential]$Credential = (New-Object System.Management.Automation.PSCredential -argumentList "ADMIN", (ConvertTo-SecureString -String "P@ssword1" -AsPlainText -Force)),
        [Parameter(Mandatory = $false)] [ValidateSet('bricklead', 'primus-by-bricklead')] [string]$DevOpsSignature = 'bricklead',
        [Parameter(Mandatory = $false)] [ValidateSet("AppSource", "Master", "Release-Candidate")] [string]$SourceApp = 'Release-Candidate'
    )
    
    # Select Extension to Insert
    $TempJson = "$env:TEMP\$([Guid]::NewGuid().ToString()).json"
    Get-ToolFile -SourceURl "https://bribcextension.blob.core.windows.net/devops/availability/$DevOpsSignature/available-extensions.json" -destination $TempJson
    $ExtensionList = (Get-Content $TempJson | ConvertFrom-Json).extension
    $AppList = $(foreach ($Ext in $ExtensionList) { $Ext.Name }) | Sort-Object
    Remove-Item $TempJson -Force -ErrorAction SilentlyContinue
    $AddExtensions = Get-ToolFromList -Values $AppList

    # Publish Extensions
    if (($AddExtensions.Length) -gt 0) {
        Write-Host
        Write-Host "Searching $SourceApp Extensions" -ForegroundColor Yellow
        $AppsFolder = "$($bcContainerHelperConfig.hostHelperFolder)\Extensions\$ContainerName\Apps"
        New-ToolDirectory -Path $AppsFolder
        $bcContainerHelperConfig.TrustedNuGetFeeds = @(
            [PSCustomObject]@{ "url"      = "$(Get-BCDevRef -type nuget -DevOpsSignature $DevOpsSignature -SourceApp $SourceApp)";
                               "token"    = "$(Get-BCDevRef -type nugetToken -DevOpsSignature $DevOpsSignature -SourceApp AppSource)";
                               "patterns" = @("*")
            }
        )
        foreach ($Extension in $AddExtensions) {
            $PackageId = ($ExtensionList | Where-Object { $_.name -eq $Extension } ).AppID
            Download-BcNuGetPackageToFolder -packageName $PackageId -downloadDependencies allButMicrosoft -folder $AppsFolder
        }
        $AppFiles = @()
        foreach ($Files in (Get-Item "$AppsFolder\*.app")) {
            $AppFiles += $Files.FullName
        }
        Write-Host "Sorting $($AppFiles.Length) extensions..." -ForegroundColor Yellow
        $AppFiles = Sort-AppFilesByDependencies -appFiles $AppFiles
        $AppFiles | ForEach-Object { Write-Host $_.split('\')[-1] }
        Write-Host
        Write-Host "Publishing extensions..." -ForegroundColor Yellow
        foreach ($Files in $AppFiles) {
            try {
                Publish-BcContainerApp -containerName $ContainerName -appfile $Files -useDevEndpoint -syncMode ForceSync -install -credential $Credential
            }
            catch {
                Write-Host "$Files not installed." -ForegroundColor Red
            }
        }
    }
}
Export-ModuleMember Publish-BCDevExtensions
# SIG # Begin signature block
# MIIn2wYJKoZIhvcNAQcCoIInzDCCJ8gCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCA9TROnmfOxB2gf
# Cv/LVfb3UeewuoJa23HFedikjvPgTaCCIOwwggWNMIIEdaADAgECAhAOmxiO+dAt
# 5+/bUOIIQBhaMA0GCSqGSIb3DQEBDAUAMGUxCzAJBgNVBAYTAlVTMRUwEwYDVQQK
# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xJDAiBgNV
# BAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0yMjA4MDEwMDAwMDBa
# Fw0zMTExMDkyMzU5NTlaMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2Vy
# dCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lD
# ZXJ0IFRydXN0ZWQgUm9vdCBHNDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
# ggIBAL/mkHNo3rvkXUo8MCIwaTPswqclLskhPfKK2FnC4SmnPVirdprNrnsbhA3E
# MB/zG6Q4FutWxpdtHauyefLKEdLkX9YFPFIPUh/GnhWlfr6fqVcWWVVyr2iTcMKy
# unWZanMylNEQRBAu34LzB4TmdDttceItDBvuINXJIB1jKS3O7F5OyJP4IWGbNOsF
# xl7sWxq868nPzaw0QF+xembud8hIqGZXV59UWI4MK7dPpzDZVu7Ke13jrclPXuU1
# 5zHL2pNe3I6PgNq2kZhAkHnDeMe2scS1ahg4AxCN2NQ3pC4FfYj1gj4QkXCrVYJB
# MtfbBHMqbpEBfCFM1LyuGwN1XXhm2ToxRJozQL8I11pJpMLmqaBn3aQnvKFPObUR
# WBf3JFxGj2T3wWmIdph2PVldQnaHiZdpekjw4KISG2aadMreSx7nDmOu5tTvkpI6
# nj3cAORFJYm2mkQZK37AlLTSYW3rM9nF30sEAMx9HJXDj/chsrIRt7t/8tWMcCxB
# YKqxYxhElRp2Yn72gLD76GSmM9GJB+G9t+ZDpBi4pncB4Q+UDCEdslQpJYls5Q5S
# UUd0viastkF13nqsX40/ybzTQRESW+UQUOsxxcpyFiIJ33xMdT9j7CFfxCBRa2+x
# q4aLT8LWRV+dIPyhHsXAj6KxfgommfXkaS+YHS312amyHeUbAgMBAAGjggE6MIIB
# NjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTs1+OC0nFdZEzfLmc/57qYrhwP
# TzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzAOBgNVHQ8BAf8EBAMC
# AYYweQYIKwYBBQUHAQEEbTBrMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdp
# Y2VydC5jb20wQwYIKwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNv
# bS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcnQwRQYDVR0fBD4wPDA6oDigNoY0
# aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNzdXJlZElEUm9vdENB
# LmNybDARBgNVHSAECjAIMAYGBFUdIAAwDQYJKoZIhvcNAQEMBQADggEBAHCgv0Nc
# Vec4X6CjdBs9thbX979XB72arKGHLOyFXqkauyL4hxppVCLtpIh3bb0aFPQTSnov
# Lbc47/T/gLn4offyct4kvFIDyE7QKt76LVbP+fT3rDB6mouyXtTP0UNEm0Mh65Zy
# oUi0mcudT6cGAxN3J0TU53/oWajwvy8LpunyNDzs9wPHh6jSTEAZNUZqaVSwuKFW
# juyk1T3osdz9HNj0d1pcVIxv76FQPfx2CWiEn2/K2yCNNWAcAgPLILCsWKAOQGPF
# mCLBsln1VWvPJ6tsds5vIy30fnFqI2si/xK4VC0nftg62fC2h5b9W9FcrBjDTZ9z
# twGpn1eqXijiuZQwgga0MIIEnKADAgECAhANx6xXBf8hmS5AQyIMOkmGMA0GCSqG
# SIb3DQEBCwUAMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMx
# GTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNVBAMTGERpZ2lDZXJ0IFRy
# dXN0ZWQgUm9vdCBHNDAeFw0yNTA1MDcwMDAwMDBaFw0zODAxMTQyMzU5NTlaMGkx
# CzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjFBMD8GA1UEAxM4
# RGlnaUNlcnQgVHJ1c3RlZCBHNCBUaW1lU3RhbXBpbmcgUlNBNDA5NiBTSEEyNTYg
# MjAyNSBDQTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC0eDHTCphB
# cr48RsAcrHXbo0ZodLRRF51NrY0NlLWZloMsVO1DahGPNRcybEKq+RuwOnPhof6p
# vF4uGjwjqNjfEvUi6wuim5bap+0lgloM2zX4kftn5B1IpYzTqpyFQ/4Bt0mAxAHe
# HYNnQxqXmRinvuNgxVBdJkf77S2uPoCj7GH8BLuxBG5AvftBdsOECS1UkxBvMgEd
# gkFiDNYiOTx4OtiFcMSkqTtF2hfQz3zQSku2Ws3IfDReb6e3mmdglTcaarps0wjU
# jsZvkgFkriK9tUKJm/s80FiocSk1VYLZlDwFt+cVFBURJg6zMUjZa/zbCclF83bR
# VFLeGkuAhHiGPMvSGmhgaTzVyhYn4p0+8y9oHRaQT/aofEnS5xLrfxnGpTXiUOeS
# LsJygoLPp66bkDX1ZlAeSpQl92QOMeRxykvq6gbylsXQskBBBnGy3tW/AMOMCZIV
# NSaz7BX8VtYGqLt9MmeOreGPRdtBx3yGOP+rx3rKWDEJlIqLXvJWnY0v5ydPpOjL
# 6s36czwzsucuoKs7Yk/ehb//Wx+5kMqIMRvUBDx6z1ev+7psNOdgJMoiwOrUG2Zd
# SoQbU2rMkpLiQ6bGRinZbI4OLu9BMIFm1UUl9VnePs6BaaeEWvjJSjNm2qA+sdFU
# eEY0qVjPKOWug/G6X5uAiynM7Bu2ayBjUwIDAQABo4IBXTCCAVkwEgYDVR0TAQH/
# BAgwBgEB/wIBADAdBgNVHQ4EFgQU729TSunkBnx6yuKQVvYv1Ensy04wHwYDVR0j
# BBgwFoAU7NfjgtJxXWRM3y5nP+e6mK4cD08wDgYDVR0PAQH/BAQDAgGGMBMGA1Ud
# JQQMMAoGCCsGAQUFBwMIMHcGCCsGAQUFBwEBBGswaTAkBggrBgEFBQcwAYYYaHR0
# cDovL29jc3AuZGlnaWNlcnQuY29tMEEGCCsGAQUFBzAChjVodHRwOi8vY2FjZXJ0
# cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkUm9vdEc0LmNydDBDBgNVHR8E
# PDA6MDigNqA0hjJodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVz
# dGVkUm9vdEc0LmNybDAgBgNVHSAEGTAXMAgGBmeBDAEEAjALBglghkgBhv1sBwEw
# DQYJKoZIhvcNAQELBQADggIBABfO+xaAHP4HPRF2cTC9vgvItTSmf83Qh8WIGjB/
# T8ObXAZz8OjuhUxjaaFdleMM0lBryPTQM2qEJPe36zwbSI/mS83afsl3YTj+IQhQ
# E7jU/kXjjytJgnn0hvrV6hqWGd3rLAUt6vJy9lMDPjTLxLgXf9r5nWMQwr8Myb9r
# EVKChHyfpzee5kH0F8HABBgr0UdqirZ7bowe9Vj2AIMD8liyrukZ2iA/wdG2th9y
# 1IsA0QF8dTXqvcnTmpfeQh35k5zOCPmSNq1UH410ANVko43+Cdmu4y81hjajV/gx
# dEkMx1NKU4uHQcKfZxAvBAKqMVuqte69M9J6A47OvgRaPs+2ykgcGV00TYr2Lr3t
# y9qIijanrUR3anzEwlvzZiiyfTPjLbnFRsjsYg39OlV8cipDoq7+qNNjqFzeGxcy
# tL5TTLL4ZaoBdqbhOhZ3ZRDUphPvSRmMThi0vw9vODRzW6AxnJll38F0cuJG7uEB
# YTptMSbhdhGQDpOXgpIUsWTjd6xpR6oaQf/DJbg3s6KCLPAlZ66RzIg9sC+NJpud
# /v4+7RWsWCiKi9EOLLHfMR2ZyJ/+xhCx9yHbxtl5TPau1j/1MIDpMPx0LckTetiS
# uEtQvLsNz3Qbp7wGWqbIiOWCnb5WqxL3/BAPvIXKUjPSxyZsq8WhbaM2tszWkPZP
# ubdcMIIGvzCCBKegAwIBAgIRAIFOQhehKX/tWszUF/iRrXUwDQYJKoZIhvcNAQEL
# BQAwUzELMAkGA1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExKTAn
# BgNVBAMTIEdsb2JhbFNpZ24gQ29kZSBTaWduaW5nIFJvb3QgUjQ1MB4XDTI0MDYx
# OTAzMjUxMVoXDTM4MDcyODAwMDAwMFowWTELMAkGA1UEBhMCQkUxGTAXBgNVBAoT
# EEdsb2JhbFNpZ24gbnYtc2ExLzAtBgNVBAMTJkdsb2JhbFNpZ24gR0NDIFI0NSBD
# b2RlU2lnbmluZyBDQSAyMDIwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC
# AgEA1kJN+eNPxiP0bB2BpjD3SD3P0OWN5SAilgdENV0Gzw8dcGDmJlT6UyNgAqhf
# AgL3jsluPal4Bb2O9U8ZJJl8zxEWmx97a9Kje2hld6vYsSw/03IGMlxbrFBnLCVN
# VgY2/MFiTH19hhaVml1UulDQsH+iRBnp1m5sPhPCnxHUXzRbUWgxYwr4W9Deullf
# Ma+JaDhAPgjoU2dOY7Yhju/djYVBVZ4cvDfclaDEcacfG6VJbgogWX6Jo1gVlwAl
# ad/ewmpQZU5T+2uhnxgeig5fVF694FvP8gwE0t4IoRAm97Lzei7CjpbBP86l2vRZ
# KIw3ZaExlguOpHZ3FUmEZoIl50MKd1KxmVFC/6Gy3ZzS3BjZwYapQB1Bl2KGvKj/
# osdjFwb9Zno2lAEgiXgfkPR7qVJOak9UBiqAr57HUEL6ZQrjAfSxbqwOqOOBGag4
# yJ4DKIakdKdHlX5yWip7FWocxGnmsL5AGZnL0n1VTiKcEOChW8OzLnqLxN7xSx+M
# KHkwRX9sE7Y9LP8tSooq7CgPLcrUnJiKSm1aNiwv37rL4kFKCHcYiK01YZQS86Ry
# 6+42nqdRJ5E896IazPyH5ZfhUYdp6SLMg8C3D0VsB+FDT9SMSs7PY7G1pBB6+Q0M
# KLBrNP4haCdv7Pj6JoRbdULNiSZ5WZ1rq2NxYpAlDQgg8f8CAwEAAaOCAYYwggGC
# MA4GA1UdDwEB/wQEAwIBhjATBgNVHSUEDDAKBggrBgEFBQcDAzASBgNVHRMBAf8E
# CDAGAQH/AgEAMB0GA1UdDgQWBBTas43AJJCja3fTDKBZ3SFnZHYLeDAfBgNVHSME
# GDAWgBQfAL9GgAr8eDm3pbRD2VZQu86WOzCBkwYIKwYBBQUHAQEEgYYwgYMwOQYI
# KwYBBQUHMAGGLWh0dHA6Ly9vY3NwLmdsb2JhbHNpZ24uY29tL2NvZGVzaWduaW5n
# cm9vdHI0NTBGBggrBgEFBQcwAoY6aHR0cDovL3NlY3VyZS5nbG9iYWxzaWduLmNv
# bS9jYWNlcnQvY29kZXNpZ25pbmdyb290cjQ1LmNydDBBBgNVHR8EOjA4MDagNKAy
# hjBodHRwOi8vY3JsLmdsb2JhbHNpZ24uY29tL2NvZGVzaWduaW5ncm9vdHI0NS5j
# cmwwLgYDVR0gBCcwJTAIBgZngQwBBAEwCwYJKwYBBAGgMgEyMAwGCisGAQQBoDIK
# BAIwDQYJKoZIhvcNAQELBQADggIBADIQ5LwXpYMQQJ3Tqf0nz0VyqcUfSzNZbywy
# MXlxhNY2Z9WrdPzU8gY6brXWy/FCg5a9fd6VLBrtauNBHKbIiTHCWWyJvCojA1lQ
# R0n9b1MOKijMSFTv8yMYW5I2TryjY9TD+wAPgNEgwsrllrrwmluqpCV6Gdv623tT
# T/m2o9lj1XVfAaUo27YYKRRleZzbtOuImBRTUGAxDGazUeNuySkmZPAU0XN4xISN
# PhSlklmreUFG6jTPgXZGOpF4GXO+/gb118GEOaBwTAo1AF7YKjAkHzJ3tuF837NG
# QeH6bY3j4wufL0DZpToNZMm+jNEayWUgOuIA+k56ITdBcJmdUB+Ze3WQdHNNRaVO
# WH/ddmqQWIlmk2Sj/lT3Tarr5SDuddeIsh0MPLyhkqBW5Ef8Zw/qeCnfj6PH2eMx
# eKcLKZRrHCddISeH4qPvyECQLlwXKCXTAUQXq4DafJSoWyP8IJ6bkaGQ/7MN5XJE
# LEcV89SRcib58gXjAWf3abXeBbb+KJCMf6EpO7cs2mQiaZbE9NNXDSqFxrtoaKyL
# 8VJLZG6quLfsTRQc+qgUOM7sJevkYt01+bh7B10bQ2cCCGs9vyUjg4GWcwfu/lha
# PDfaoNtf0pw6RpKcxCYcCTDaJeQOHZBz1B6HTmmEgZHNZX7nNfqDgGrTNB1Gp3gI
# pngyJWZ6MIIG6zCCBNOgAwIBAgIMNY0DQ6d8EhhRyrkRMA0GCSqGSIb3DQEBCwUA
# MFkxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMS8wLQYD
# VQQDEyZHbG9iYWxTaWduIEdDQyBSNDUgQ29kZVNpZ25pbmcgQ0EgMjAyMDAeFw0y
# NTEwMjIxMDQyMjlaFw0yODExMjYwODE1NTlaMFkxCzAJBgNVBAYTAkZSMREwDwYD
# VQQIEwhNb3JiaWhhbjEPMA0GA1UEBxMGVmFubmVzMRIwEAYDVQQKEwlCUklDS0xF
# QUQxEjAQBgNVBAMTCUJSSUNLTEVBRDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCC
# AgoCggIBANH89CNXVaQCYu+kwBql0qfG+mWCRiSqIDm3iUF0uI/stq3PhOE8raxs
# xH48emVu5EYVNAQ4UqjA7hCNw+qVChf0PQdJaHbyXNDroEihVT73VwMfL+8FcxjW
# 6sXDmtp4NJJtQHUD3CQpIz74FE/2MydGQ5ZyM+IzXZdqvCmSeoMI5PWnhJHUfHTM
# rI4t4xOwacRCP1sl6FtIZ0vT/hl7BO3lFonKuKb5RL+0uxAoKnjLxbisNK5uRqN4
# A6Gg5swExkG1wqeZBgw2Ay+C4g4J/m21YO7FWkfJposKvwnS+Im+qLljm3wwnu1G
# Bxo9i8bODiDQaG+xfda0huvffYGeSKm4t1y0Cgoy1PkxwxATGEQAvDERT0K1JmVn
# VQO4SaZ0nOR/AFydlCvzsHzWN5KfX3pn4S3+OyVEHyjS7u2FYLgeuw9Vkj3IimWn
# fp7CpZPO9Ild6DkeNcC/fABHHxJ5hSnt6c2D1ilpnAaTdUwnlEqydxQilOCQCY5V
# 54xF+5rV9M6bSnwVMqRUI24Dys8Q2brf+LMoqOkF2qDLTfjDaHEAc2fNMVwtEjyC
# oHninq8aEOwSjAdNYoM4N0e+FfBvhWDGG7eJ/BYap6i5m/+kX2uRGG/fDm16RP4A
# CO76ZrQWoAYuYSfBe31thpSQirSljx+KeyIw01PwZDBJtOA07G3tAgMBAAGjggGx
# MIIBrTAOBgNVHQ8BAf8EBAMCB4AwgZsGCCsGAQUFBwEBBIGOMIGLMEoGCCsGAQUF
# BzAChj5odHRwOi8vc2VjdXJlLmdsb2JhbHNpZ24uY29tL2NhY2VydC9nc2djY3I0
# NWNvZGVzaWduY2EyMDIwLmNydDA9BggrBgEFBQcwAYYxaHR0cDovL29jc3AuZ2xv
# YmFsc2lnbi5jb20vZ3NnY2NyNDVjb2Rlc2lnbmNhMjAyMDBWBgNVHSAETzBNMEEG
# CSsGAQQBoDIBMjA0MDIGCCsGAQUFBwIBFiZodHRwczovL3d3dy5nbG9iYWxzaWdu
# LmNvbS9yZXBvc2l0b3J5LzAIBgZngQwBBAEwCQYDVR0TBAIwADBFBgNVHR8EPjA8
# MDqgOKA2hjRodHRwOi8vY3JsLmdsb2JhbHNpZ24uY29tL2dzZ2NjcjQ1Y29kZXNp
# Z25jYTIwMjAuY3JsMBMGA1UdJQQMMAoGCCsGAQUFBwMDMB8GA1UdIwQYMBaAFNqz
# jcAkkKNrd9MMoFndIWdkdgt4MB0GA1UdDgQWBBScz5MAsOazFIMc9PQAOwyeYtJX
# XTANBgkqhkiG9w0BAQsFAAOCAgEAjxOP7JLAHE5dd+OgTzQY/k50WPn9XxxyIzMY
# 1OHJh7qC4CGHk+3N7f/Vp6hwFgNEjgK/EcAbL8BZILFyaRCskMT5yEPh4m+IF8/O
# 1WxUUrItXs7R0VRkh2L4fGaEKgH33W1C5Y9WgLn3Su7zXCyHEuYOFMsEReKheVVc
# sbSle4330aoKp6oiaifjdhr91uMu3Ta1FlG9prlrzVoz/d8EHJu3LAmZzLv53JQ0
# SrjPQrb53KXEOST7opxyCIDZZ090Ji3oThd7TNy+SID7BDkh+ea+HZJTjY/3FuLu
# yFhRxWtIJ6PCMx6a4UDgw2qGcKTlXb71hD7QJJspwWEYftG1hRjf0zMiJk8F4EYb
# 6Xn36uItedM6ETJ4YVisjt79HeYowJQkm/OajZyUrTYs8e9EWkKjO58cSrpFKMgi
# yess0dcvYEz0TZdWTKzhItNtV52r+qtkL7StsLV8JVx1pG/hiHghICrGfaNlYmPk
# a6aDJn/vwJfDvyAgCYCOkIGeFUTbHcBrurdbWR+Ycv4kzeEGsVtRwCCrj8A/Kep5
# T3vTzM3rvXzDqoO5GkO4sfO7fUbyru2EuxNpCHSEPMYARxVKsKF1LSgIJOvoFCC/
# O5j7n9IvnxIPUZohrNBbd9C3jWcm42veAe/zTAKr+Jm2mxhUyi+cJwA3Nb9YJLfI
# hc+McqowggbtMIIE1aADAgECAhAIT9wzT35FTtvDD4/5khg1MA0GCSqGSIb3DQEB
# CwUAMGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjFBMD8G
# A1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBUaW1lU3RhbXBpbmcgUlNBNDA5NiBT
# SEEyNTYgMjAyNSBDQTEwHhcNMjYwODA1MDAwMDAwWhcNMzcxMTA0MjM1OTU5WjBj
# MQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xOzA5BgNVBAMT
# MkRpZ2lDZXJ0IFNIQTI1NiBSU0E0MDk2IFRpbWVzdGFtcCBSZXNwb25kZXIgMjAy
# NiAxMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAtnum8sn+zUr41JtM
# ZbP9OMYw+HwJDpG5xkIu/lqcfNYmMX81YmsUiHLbh9ykpeWBGKTLhYBrAN9Tdg/Q
# EzG32XcObmgIblnr0CoQ3WSAeDZ6nH6X6VkFyYkJw3QBJREwvm4UhLzSxmwPA7cF
# KRTEOMsmEEj6qJk/dqLEAL+oQYuOwE2UuiX1Vnul8YReIyWd4kgLn9gq6LNXM0Up
# lkR6jL/QHxmb6fMoGBJYbnaUI7XD6cKDpekK2SVMld4iDbzeHDtOaaxldH5IxuNu
# sQ69nd8/ZXEiB5Hbxj3RlK13cX1W4DlFXKdv/CEhM8Cj1vvlmvhNroyPdRGbbpBl
# gyf8Wdu5N6ByhFwURn0U6ozlPoxN22v+fviUhP+6DR547OZnpBMWDfei1f5sVGwi
# iW/KQTWOK97g+4RJpPzPNV4VYMAwO2jM2Aty2QYPVmOQTJm0msuXnJrSbl2gf9Jy
# lpkJlWXqk1Q4LJsxz+TELoQCZIljbgvTJgoPU2R12ydv8i1UqL/adelA0y7U9Pmm
# tbze9Xx3rtajC5SzQd1jgfwAwsa90v9YcSPdmeoyoBBA/27cCL237l5DTYYPDLQ4
# ON3OLTGWnvRb6jDrf/T75gMRfUzSLCBQfBusm9+mSWRlC/Df6S/e9Q8i13CuhzOT
# 2Jx+V/nlbXM4QoBwlUAhelwwJT0CAwEAAaOCAZUwggGRMAwGA1UdEwEB/wQCMAAw
# HQYDVR0OBBYEFBTJY4owLtRK+26U8+bjQH717M3iMB8GA1UdIwQYMBaAFO9vU0rp
# 5AZ8esrikFb2L9RJ7MtOMA4GA1UdDwEB/wQEAwIHgDAWBgNVHSUBAf8EDDAKBggr
# BgEFBQcDCDCBlQYIKwYBBQUHAQEEgYgwgYUwJAYIKwYBBQUHMAGGGGh0dHA6Ly9v
# Y3NwLmRpZ2ljZXJ0LmNvbTBdBggrBgEFBQcwAoZRaHR0cDovL2NhY2VydHMuZGln
# aWNlcnQuY29tL0RpZ2lDZXJ0VHJ1c3RlZEc0VGltZVN0YW1waW5nUlNBNDA5NlNI
# QTI1NjIwMjVDQTEuY3J0MF8GA1UdHwRYMFYwVKBSoFCGTmh0dHA6Ly9jcmwzLmRp
# Z2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRHNFRpbWVTdGFtcGluZ1JTQTQwOTZT
# SEEyNTYyMDI1Q0ExLmNybDAgBgNVHSAEGTAXMAgGBmeBDAEEAjALBglghkgBhv1s
# BwEwDQYJKoZIhvcNAQELBQADggIBAI3FOmEenVIK35msCYB+fShAsWvSYvLBItoN
# dAgQ2jIqrGsVsluXMJU/+mRebBc52s6lbKAvOVPXaizmKkMLLflEEKDZQx4CkS2t
# 8aHPjkXha3hYZ010htFa3dhNgmalH5vuWvh3tTCf4frTS7gPtGc4Z/xaPhQ2AB1m
# R8eEe/WbH0RWHvVIl6VwQ3+g5FKNfN2N/DWJkf13w2H+2GfqEfbd35Ww8CvoYBjL
# NIDTadcPWdgsjsiOaK/7EsKJgLjUNIVgvcaFOLLQ/GlrA+0ZHJoFUbOr5SJN8zyk
# PspXIXlpDJY/gqFUZRROeab9GVgmhbdOJcD/63RhxPahFUGbckRONqMe6DYAv6/m
# OG0pWd3cPStsdcS7buj5DyniwRY8yooMH6ptx5vpP/pZzBPBeZD2U4IsthyxB5Ja
# a8qrOkB5z160TXiM5ADMspZ0TfD9MJoq0tFpFPssKRFhWeEDYPvcUuN7U7lvcdHl
# 4ezQ3NT/7Ffs1sR1yh/LRbdZ3B3Vc6q2WmD8mDC0p9kzl2o73iVtS946IkEj7FkR
# sZGww1teYxERROC745xrtjvcw9ZyyUjHZWGRIpJeMNsPquCDf0fkyHtB+J4AiNZq
# CQk23rxh+KbpyMTNVKItJ5l92Svl20U9NbqMBOVYl1h54NEYLJq1/xHWFKPNK903
# zJZA9P2DMYIGRTCCBkECAQEwaTBZMQswCQYDVQQGEwJCRTEZMBcGA1UEChMQR2xv
# YmFsU2lnbiBudi1zYTEvMC0GA1UEAxMmR2xvYmFsU2lnbiBHQ0MgUjQ1IENvZGVT
# aWduaW5nIENBIDIwMjACDDWNA0OnfBIYUcq5ETANBglghkgBZQMEAgEFAKCBhDAY
# BgorBgEEAYI3AgEMMQowCKACgAChAoAAMBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3
# AgEEMBwGCisGAQQBgjcCAQsxDjAMBgorBgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEi
# BCBSdcgrNqN5A1fJz/lAuNzQhrI7yiODgKYBeoCUcz+/UTANBgkqhkiG9w0BAQEF
# AASCAgAd24x6x+ufUFZbQJ2w27/lpdq130kRolZYJ2PirjAmnYsWtT6r/BbFayb/
# L9rxZg0Q9NosuYXg2deQj1GWO28TkyzfTdTM0gZbARYChJkKr3kKEVHhj3tb2PIc
# HePS83fs2EUq4nRzAvR+cFCI5x96JTt9r5ucvl3EXUH3QsVSoat6BIE0751KS5Na
# 3e8sT7wH+cG7RiPuZMjYrWfCeWirw02ZPodLbYhowmXxct27jrqX2VFV8Qj4awW1
# k7EDFaSMrXSQnKqvAgXp3IZCo0pPQoyMoyvz0i3RZb+RGnlSyEJVdofZ781ea1qe
# ODIElmCTujeg3ZXhVT/ewg3d3ePte+eKOWd+UPdwE7Mbx0ugoJl8as5SA9Qiuv3b
# BdhODQsq7HAfH6vDtkBQkQkfcFFaL0Mwi+peDYzu7xztUjCpZYcD2ltHoH4Rzt/r
# Q2ig5lrPajsMxP/xM3H9I3aWUl8MIeiu9WR4W3mht3rPwSob1h6sq1Wbs9924IZC
# nQzVWgz3xsZmZqU53YwThxKXGCNywI/iTmvXm8xmZz5+luU98BL8GpyUdXw6gVwv
# nOYGLsVoDFxWDtrOiGC1KtXxXkBQV1rTAGpWN/HeyAwydUCym84N8MfhizGThFJQ
# c9TSVFFXw3BjtAuseS+p1Qg7h3/fFKNxfgohwQ0tqOeeL2ND2aGCAyYwggMiBgkq
# hkiG9w0BCQYxggMTMIIDDwIBATB9MGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5E
# aWdpQ2VydCwgSW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBUaW1l
# U3RhbXBpbmcgUlNBNDA5NiBTSEEyNTYgMjAyNSBDQTECEAhP3DNPfkVO28MPj/mS
# GDUwDQYJYIZIAWUDBAIBBQCgaTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwG
# CSqGSIb3DQEJBTEPFw0yNjEwMjcwOTQ5MDRaMC8GCSqGSIb3DQEJBDEiBCD7e/Dq
# LWAsvIpos4ECpshdZeOFA43c2LQQZo7VVYfFGzANBgkqhkiG9w0BAQEFAASCAgCC
# /HQbcRHUZ3n/3pue6/9I2UHOeRMgME/1WIM7m22PIayyHU1glb31hO6CKvksD1IC
# XoyONk3JzEvvJXg19itfjamvm8SSDfVFux1d57WMKFbUMYrAdz9UR1FpUMf8x+xK
# r5JGS7aXelfl1vC85oDOm50tZyS7gQTUf6xNkaI3B+V7b/5lEoSQu0jdqSsExYQI
# x4Mfu2u3PjxbbUws4RqhNMNIHnZG84iwUMGBumcy0hVKPVtMxouDUDINWDz+zGVi
# HAPDnJLmCaC3D4KtmPvuWSVDXDPyIy62wSn5J88WqwFE0iNUstOJ1MEn9Ysk+qDB
# 96kQXIyzMiCc/rKK6BYZNO0An3gC5JgUOrwzKs9OxIIAcrcEkhicia1cqCMO6CQs
# J4skkT4c3ycqNK0JPVMb2P777ftOtcp+CNuFLJDxlwWoyMPOlUvodlCUT1a9RDZm
# kk12CtWq+SguUutWMm/fIrpWsqbIPJtyech1zNBHkYACoWw7n8NxfUsAUWlB0lxK
# 7owMkCl5knttvx3XyWSWC3o0H6hbp6mhE016bVyP6PV6g8ARJ4iPBaf/K1gbwSw3
# oF1vXJDPCoMwoTXR8SmZSUTHW9UuCHpICHrrVb1aZbvHaYPNRotz/7hFbkDWilZ/
# imEoYXhqwXbOQQdzLmWCUqxZ+DbPfkSsetA1CtHi4A==
# SIG # End signature block