Devolutions.Ahtola.Sqlite.psm1

# Export Devolutions.Ahtola.Sqlite model types through module-qualified type accelerators.
# CLR types live in Ahtola.PSSqlite (binary assembly Devolutions.Ahtola.PowerShell).
$ExportableTypes = [ordered]@{
    'SqliteDBConfig' = 'Ahtola.PSSqlite.SQLiteDBConfig'
    'SqliteDBSchema' = 'Ahtola.PSSqlite.SqliteDBSchema'
    'SqliteView' = 'Ahtola.PSSqlite.SqliteView'
    'SqliteCheckTableConstraint' = 'Ahtola.PSSqlite.SqliteCheckTableConstraint'
    'SqlitePrimaryKeyTableConstraint' = 'Ahtola.PSSqlite.SqlitePrimaryKeyTableConstraint'
    'SqliteForeignKeyTableConstraint' = 'Ahtola.PSSqlite.SqliteForeignKeyTableConstraint'
    'SqliteIndexConstraint' = 'Ahtola.PSSqlite.SqliteIndexConstraint'
    'SqliteTable' = 'Ahtola.PSSqlite.SqliteTable'
    'SqliteColumn' = 'Ahtola.PSSqlite.SQLiteColumn'
    'SQLiteConstraint' = 'Ahtola.PSSqlite.SQLiteConstraint'
    'DBMigrationMode' = 'Ahtola.PSSqlite.DBMigrationMode'
    'SqliteConstraintType' = 'Ahtola.PSSqlite.SqliteConstraintType'
    'SqliteOrdering' = 'Ahtola.PSSqlite.SqliteOrdering'
    'SqliteTableOption' = 'Ahtola.PSSqlite.SqliteTableOption'
    'SqliteConnection' = 'Ahtola.Data.Sqlite.SqliteConnection'
}

function Get-CurrentModule {
    [OutputType([System.Management.Automation.PSModuleInfo])]
    param()
    $MyInvocation.MyCommand.ScriptBlock.Module
}

$typeAcceleratorsClass = [psobject].Assembly.GetType('System.Management.Automation.TypeAccelerators')
$moduleName = (Get-CurrentModule).Name
$existingTypeAccelerators = $typeAcceleratorsClass::Get

foreach ($typeToExport in $ExportableTypes.Keys) {
    $fullTypeToExport = '{0}.{1}' -f $moduleName, $typeToExport
    $type = $null
    foreach ($assembly in [AppDomain]::CurrentDomain.GetAssemblies()) {
        $type = $assembly.GetType($ExportableTypes[$typeToExport], $false)
        if ($type) {
            break
        }
    }

    if (-not $type) {
        $message = "Unable to register type accelerator '$fullTypeToExport' for '$($ExportableTypes[$typeToExport])' - type not found."
        throw [System.Management.Automation.ErrorRecord]::new(
            [System.InvalidOperationException]::new($message),
            'TypeAcceleratorTypeNotFound',
            [System.Management.Automation.ErrorCategory]::InvalidOperation,
            $fullTypeToExport)
    }

    if ($fullTypeToExport -in $existingTypeAccelerators.Keys) {
        Write-Warning "Overriding type accelerator '$fullTypeToExport' with '$($type.FullName)'."
    }
    else {
        Write-Verbose "Added type accelerator '$fullTypeToExport' for '$($type.FullName)'."
    }

    $null = $typeAcceleratorsClass::Add($fullTypeToExport, $type)
}

$MyInvocation.MyCommand.ScriptBlock.Module.OnRemove = {
    foreach ($typeName in $ExportableTypes.Keys) {
        $fullTypeToExport = '{0}.{1}' -f $moduleName, $typeName
        $null = $typeAcceleratorsClass::Remove($fullTypeToExport)
    }
}.GetNewClosure()

# SIG # Begin signature block
# MII2cgYJKoZIhvcNAQcCoII2YzCCNl8CAQExDTALBglghkgBZQMEAgEwdwYKKwYB
# BAGCNwIBBKBpMGcwNAYKKwYBBAGCNwIBHjAmAgMBAAAEEB/MO2BZSwhOtyTSxil+
# 81ECAQACAQACAQACAQACAQAwLzALBglghkgBZQMEAgEEIF5mk8Y+5Tn4G6AQcMQR
# JLMIJ7Runfrk+GdOV6/WOC6qoIIbTDCCBcwwggO0oAMCAQICEFSY0tHUWxmVSBN5
# yBHAh5kwDQYJKoZIhvcNAQEMBQAwdzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1p
# Y3Jvc29mdCBDb3Jwb3JhdGlvbjFIMEYGA1UEAxM/TWljcm9zb2Z0IElkZW50aXR5
# IFZlcmlmaWNhdGlvbiBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDIwMB4X
# DTIwMDQxNjE4MzYxNloXDTQ1MDQxNjE4NDQ0MFowdzELMAkGA1UEBhMCVVMxHjAc
# BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjFIMEYGA1UEAxM/TWljcm9zb2Z0
# IElkZW50aXR5IFZlcmlmaWNhdGlvbiBSb290IENlcnRpZmljYXRlIEF1dGhvcml0
# eSAyMDIwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAs5EqB4MGZ/2e
# neDHwLek5kIEfw+m21/71VrXRaD7dwvwgPOmbVpNeVPYoIaEV0Ugx6JU+8eiv4rH
# bjXzohXEL07jSoWWSQ3/vpnYFPa8JwfuQpsr9QuSBuT9aRNlqJFy8piE64M9DuTX
# cRJIIcsN7fZHSbeb+cnHF7aET/+4rJrXc2dJheOGvTdA0CWG1N61wm1iatWpeLwt
# b0n55WwUFP0Ux9NlFjfey268XimN/WKbFSzWBea5iTIzo2LH19ZSZwjELvRWK54L
# h8zsp7SmqusFzRlXpToLBCcckWeeLWItLx6+2sAgywQZyjP7ib6Y4nKgcjW+eeGc
# g2/kbRdvkPM9AIZ1OI7Q4Emau9vT+DDK1VeIaE1y079tf3HY/b0NrpJkSLdbb3km
# tc2blSGE0e8PMj17V4zzRQdMfOBeGA41dottnss2dKsF+OBzXTJWlGeXJQrGNT2U
# l+fBRIuA/cH49HQZ5TD2BvshVz4GHItrFYYnSXuCk8pZ6HVH6D849MdTeaC2tOJc
# Ue+9XzjBE+Z4DJVaLsVAWSjMDyTA7LoJdyOZOKa2HNrHuiC21zfYfzevCOM7cdtu
# cxt9mXKw5IYzWXS1FgB7UG3GhhPa/cQ5gj0kAJpg2rqUwAVRLDSsUJkTh7uzBYCy
# TTACXLgmg120Y3PvriOVT2AovjfVW6UCAwEAAaNUMFIwDgYDVR0PAQH/BAQDAgGG
# MA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMh+0mqFKhvKGZgEByfPUBBPaKii
# MBAGCSsGAQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBDAUAA4ICAQCvat3mGectlEMZ
# TsvpUJVkpQORAoviNoA7FaJSwhYZtmpaXXRDMPSb/2B0CbEhHpAWbcUkj1xmiGP0
# T8x98hJMQBCLAZ/aqciu8pUbz50F60k+dKBoW+VWLGUcgn5T2lbZRhd5kkXEEDYI
# UikXyy+m8n7UaSSKHo+wcw3MHEqrsqrtp5FjAWQiqDK4fjIos2dzLZG03DEBC/dH
# Cqbx10rtVmDELAije0CwvHQnUofWvojdN4qJbmeIHfXJXaD+tqs6gNcalzwXNiJB
# HqxN1YPmPDi9TzDpVKnTtgTDMnZhu7AYxSsYs8CA1beVsF5RTSL87Fiq6NiUtKUu
# 7ZLe5xh8IVfdVWP3v23NH9Kmdyhwx+JbOlsI0ltOyACWs+GDNq+GCmVcdPbq7Hpq
# dKDwS+7vlKOsUPKH7dc6MIPJ+31XvuXj+EHK5WSus6PsWOyFmszvuerzVhi5XHOa
# r8V3F4NZ2zcaGHJUpUHStiN1o0Oa5Xd8lnm3QY2/7NyAoJ/Rd3VYXzUT4CUaZwt9
# ziX6BwrkYSHY1BzlB8Y2mfSW0MYV/k7N166LndsW/QTGkr3UiOapo6q792Q4O1/M
# DNA1vnQZA6bFqkyiYTaCPh3zK7yXXdtLeDst9TvvYCPo9ewLIzaVr5hmv1PTe7hp
# SiqWZmnElMb0X26smHiIgAZcorLtojCCBqowggSSoAMCAQICEzMABcdmLnX1LsBf
# ZuAAAAAFx2YwDQYJKoZIhvcNAQEMBQAwWjELMAkGA1UEBhMCVVMxHjAcBgNVBAoT
# FU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjErMCkGA1UEAxMiTWljcm9zb2Z0IElEIFZl
# cmlmaWVkIENTIEFPQyBDQSAwMzAeFw0yNjA5MDEyMDU3MzJaFw0yNjA5MDQyMDU3
# MzJaMGwxCzAJBgNVBAYTAkNBMRUwEwYDVQQIHgwAUQB1AOkAYgBlAGMxEjAQBgNV
# BAcTCUxhdmFsdHJpZTEYMBYGA1UEChMPRGV2b2x1dGlvbnMgSW5jMRgwFgYDVQQD
# Ew9EZXZvbHV0aW9ucyBJbmMwggGiMA0GCSqGSIb3DQEBAQUAA4IBjwAwggGKAoIB
# gQCOx23GEkZOOmNlgWgIs5IHV+Wvgr5lrZ6p6jbsN4dzJWY8NGfTSXAeIGXpKuiP
# 6ZSmRenvNm2a0vxfqYpuK8n/JJs/QQdoWGYHSRsBCBcrv2PR+JkH+R5IeJeCU48C
# dplcG5edx0R7jIcWp96qG6l59V54ii/ExNX1vPHG7NHBfHaVImjuDwAKL7c1jp7I
# sOnzTR2IPbW+yfoKKnD3L3oiBs+AhecHwny1D/uPM2DXgmL6oF38gtNbBL5wY4ku
# yoOeN5GE0QLbjYusAaMdy3DKvEiKshHPU7JieC5MY6w41Q2QpBP3G7BMZEuFogm/
# 6WMMLiFzQQesvigW7xK3Cee7pZV9iVMBMrDlDvyTl9WMsVo7jXtgm0DxFKCFlw/I
# ymHUFToGkx3FdRVKTda5DdGvBE9wcjwVJGhzsCjbXP58EUH2bLlOCcOMtpnNMEM5
# 6Sp+HT0+ncT+ryTWlcLGmZKN8HLr9Iz3V4/t2ygOb7oKbr5syn3cHu4XCmrlA6wW
# PKUCAwEAAaOCAdUwggHRMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMDwG
# A1UdJQQ1MDMGCisGAQQBgjdhAQAGCCsGAQUFBwMDBhsrBgEEAYI3YYGIgLEFgoX5
# gFL4yJBqgdOiwFUwHQYDVR0OBBYEFHzQqfs+HnNInT5OS09v8kbf7AamMB8GA1Ud
# IwQYMBaAFKRDDH92WqWF5z6NKA8MF6JFaXDGMGcGA1UdHwRgMF4wXKBaoFiGVmh0
# dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUyMElE
# JTIwVmVyaWZpZWQlMjBDUyUyMEFPQyUyMENBJTIwMDMuY3JsMHQGCCsGAQUFBwEB
# BGgwZjBkBggrBgEFBQcwAoZYaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9w
# cy9jZXJ0cy9NaWNyb3NvZnQlMjBJRCUyMFZlcmlmaWVkJTIwQ1MlMjBBT0MlMjBD
# QSUyMDAzLmNydDBUBgNVHSAETTBLMEkGBFUdIAAwQTA/BggrBgEFBQcCARYzaHR0
# cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRt
# MA0GCSqGSIb3DQEBDAUAA4ICAQBupVT/1gwre0AYqAunJNFdWCH5pACO4fOxVo9R
# jPCzE+XIqhqhok/TZqgVyx7dwHRQuo0dlAhJbuCbIXiV38Z6HfKL2y4f7b0kpBSe
# M+nGMe97pBf7xQdKhTz+BqsGDLa7HwYrkPM0tIyqr53gqxHMPsXV35zO0C3xRrLm
# X4FPeZRwsyPCBT15KAl5gy4GK2KTdfuowZOSFo6uzyvtTxhMxLVDPwvxHwUpN0au
# hHJZT1Rri04hKCUBqhks1LLBOng8F6DGkV9R9uZvNmHVl7MXUu+V9PexPdZWUfOc
# wa5hHEtz+tkLuMKu1SbTihCZk6R6jn2itITR7fc/fQpM5Kpwl9NipPjQxz6t4WnR
# o8qhx82tTkHc+a9cm+ee7tgC/f5C4AJUYzhTZEX4AptBzPFjyh/oPcUU0n6tCIEk
# 5FtNwzllsZf5oPLkYLhQWTVc5bavkA4a/jEc45r3Q8/6kADIvKEqLPtfL8GtGyaa
# PC7zypfmJ422Ii8TfbaDm/uLG/5HRuV725bb5k7N80pIOujjZjy1e0ylIAJHFGDv
# uv5paEwD8AqULthxRvRWNg/eItf4QgCnoeA40E9AOtFX4hJOC98joV11AlT5SZbV
# IGcbsjBJc3DLQFtzAnaqD108d1I9AU/8gDCo38qefsnLwKbuIQm3+Inh84Bcerzn
# 5oUgkjCCBygwggUQoAMCAQICEzMAAAAYDeuRVamKAJgAAAAAABgwDQYJKoZIhvcN
# AQEMBQAwYzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
# dGlvbjE0MDIGA1UEAxMrTWljcm9zb2Z0IElEIFZlcmlmaWVkIENvZGUgU2lnbmlu
# ZyBQQ0EgMjAyMTAeFw0yNjAzMjYxODExMzJaFw0zMTAzMjYxODExMzJaMFoxCzAJ
# BgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKzApBgNV
# BAMTIk1pY3Jvc29mdCBJRCBWZXJpZmllZCBDUyBBT0MgQ0EgMDMwggIiMA0GCSqG
# SIb3DQEBAQUAA4ICDwAwggIKAoICAQDIgNpgNFaiif2VWeWP5I6PnFXxJ/lB37fJ
# R55GCvR7GLZBMkBijbiKVwgpBI3xM5nf484znH/qncJ+OCq6y3jgnQW+R8Zd7U+7
# LjlrmcskalzSQ0ghMxEpnBW8/HHs2V8ZJzQk6HP+SDsbvsL7LdlH/eO2l4mknhDB
# wr0Z/Q966TvEth5b8kCxj1vqiV4YNthLGRqZR9u2fK/yBMWu83p6O4uo2Edg++gE
# ew5IL7vnnnKFqmSh/R9vPJy3WF1YcZewAUx8sXZNUnx3ZhVg59l2LpitPiwzE6FM
# qIsqaEvVe3MzuFd2a/uWDZH6VbDyUiRK78mIg1DQYA9zDEyyBFcNI+nxVSzglvL6
# u7PRuNqgcV3sf6ELxw89ysQM/Z4R1hRFWXRpyOWKKAKtfBHTk0UnNiPcxmLMMYs8
# jeUjOidfVPjTIry/UVwnwxdlkK85cZfBEMYZ/DBNOwdomP459Y1n8izKkbhsa+p4
# lw+cQVxATBFx9ggR79HhryT7HDmpPLvkJvBZ4wW4CW32UT2SMyDe28nIOU3m+hfH
# lVeKcLBQcym5VoRDjIcCVI7uqgGW2PNME0cfei8zCwCy6HCsssJWFS7eg/YbFhnA
# TJcyWfMrkNuAbMfMN8Npg8crS6jVVowyD0GG5zdgi+uQVcSK/638mA1xEYK3pnIo
# QgO09uuDBwIDAQABo4IB3DCCAdgwDgYDVR0PAQH/BAQDAgGGMBAGCSsGAQQBgjcV
# AQQDAgEAMB0GA1UdDgQWBBSkQwx/dlqlhec+jSgPDBeiRWlwxjBUBgNVHSAETTBL
# MEkGBFUdIAAwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
# L3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMBkGCSsGAQQBgjcUAgQMHgoAUwB1
# AGIAQwBBMBIGA1UdEwEB/wQIMAYBAf8CAQAwHwYDVR0jBBgwFoAU2UEpsA8PY2zv
# adf1zSmepEhqMOYwcAYDVR0fBGkwZzBloGOgYYZfaHR0cDovL3d3dy5taWNyb3Nv
# ZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwSUQlMjBWZXJpZmllZCUyMENv
# ZGUlMjBTaWduaW5nJTIwUENBJTIwMjAyMS5jcmwwfQYIKwYBBQUHAQEEcTBvMG0G
# CCsGAQUFBzAChmFodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRz
# L01pY3Jvc29mdCUyMElEJTIwVmVyaWZpZWQlMjBDb2RlJTIwU2lnbmluZyUyMFBD
# QSUyMDIwMjEuY3J0MA0GCSqGSIb3DQEBDAUAA4ICAQBxxyBW+X6mhdRiSwD9PMMW
# cGUAnx5/QUwnNvZdFGEX+4DRDIr9WCh4C87wHtw+lg1D3uzK10DstPX0LFLBFAC3
# vWMYX4ImXwoLhoR0xlN8mUdorJ3bgnpCJWuI1531Z1rCwPuUrSkBxfOIGDk3p2EC
# b3Ho/xHi5PRSR/OUrWuQHwXiaXMTuXu3IRLezwVkZpFmNwYRD57R9Nx2F/yM7tzO
# Y0Hh0hGCaYEK38/6FrS0SXadXWyDUCfn5XOGACRjUCnHx+JQUG0f4SHD+iblpAI0
# gl+ZHnVmdXXxHTZeTa0CYCIhFxKP2922s0g6zLmeiV13LWUmtt/UF7TrWXpMi2/0
# UNniaDoH7rnPGRV5xVX8uXy4sZii4aswzqPM7Y7+mzcranqZ8EjZk5gjLhQ3A2sZ
# aprlOu8CaRmyfcIiVH7zVfgAvm81MWXFziAf7my7QOvnyEFPGddq8MSfPtfRyw/U
# q3uH6KpoaJNIfPYH6fceZSi53Rat1A9grExq3ROjhhSpTcchuBItAMNVPxoKNbUm
# +iR/X3XkL+9WQginjyHe+hXLclY8vAGXFD1p40PqMIpAYsmEJBFKW9df4//1N5oQ
# Dr/FY9IBJl/oSS979i5rtT7NZz9KvYraCPRBGs0QCy+sWvgQa0coM70QJVLeVwmS
# xUO/0od0w9Qry7bSLrxGoDCCB54wggWGoAMCAQICEzMAAAAHh6M0o3uljhwAAAAA
# AAcwDQYJKoZIhvcNAQEMBQAwdzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jv
# c29mdCBDb3Jwb3JhdGlvbjFIMEYGA1UEAxM/TWljcm9zb2Z0IElkZW50aXR5IFZl
# cmlmaWNhdGlvbiBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAyMDIwMB4XDTIx
# MDQwMTIwMDUyMFoXDTM2MDQwMTIwMTUyMFowYzELMAkGA1UEBhMCVVMxHjAcBgNV
# BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE0MDIGA1UEAxMrTWljcm9zb2Z0IElE
# IFZlcmlmaWVkIENvZGUgU2lnbmluZyBQQ0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEB
# BQADggIPADCCAgoCggIBALLwwK8ZiCji3VR6TElsaQhVCbRS/3pK+MHrJSj3Zxd3
# KU3rlfL3qrZilYKJNqztA9OQacr1AwoNcHbKBLbsQAhBnIB34zxf52bDpIO3NJlf
# IaTE/xrweLoQ71lzCHkD7A4As1Bs076Iu+mA6cQzsYYH/Cbl1icwQ6C65rU4V9NQ
# hNUwgrx9rGQ//h890Q8JdjLLw0nV+ayQ2Fbkd242o9kH82RZsH3HEyqjAB5a8+Ae
# 2nPIPc8sZU6ZE7iRrRZywRmrKDp5+TcmJX9MRff241UaOBs4NmHOyke8oU1TYrkx
# h+YeHgfWo5tTgkoSMoayqoDpHOLJs+qG8Tvh8SnifW2Jj3+ii11TS8/FGngEaNAW
# rbyfNrC69oKpRQXY9bGH6jn9NEJv9weFxhTwyvx9OJLXmRGbAUXN1U9nf4lXezky
# 6Uh/cgjkVd6CGUAf0K+Jw+GE/5VpIVbcNr9rNE50Sbmy/4RTCEGvOq3GhjITbCa4
# crCzTTHgYYjHs1NbOc6brH+eKpWLtr+bGecy9CrwQyx7S/BfYJ+ozst7+yZtG2wR
# 461uckFu0t+gCwLdN0A6cFtSRtR8bvxVFyWwTtgMMFRuBa3vmUOTnfKLsLefRaQc
# VTgRnzeLzdpt32cdYKp+dhr2ogc+qM6K4CBI5/j4VFyC4QFeUP2YAidLtvpXRRo3
# AgMBAAGjggI1MIICMTAOBgNVHQ8BAf8EBAMCAYYwEAYJKwYBBAGCNxUBBAMCAQAw
# HQYDVR0OBBYEFNlBKbAPD2Ns72nX9c0pnqRIajDmMFQGA1UdIARNMEswSQYEVR0g
# ADBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3Bz
# L0RvY3MvUmVwb3NpdG9yeS5odG0wGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEw
# DwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBTIftJqhSobyhmYBAcnz1AQT2io
# ojCBhAYDVR0fBH0wezB5oHegdYZzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3Br
# aW9wcy9jcmwvTWljcm9zb2Z0JTIwSWRlbnRpdHklMjBWZXJpZmljYXRpb24lMjBS
# b290JTIwQ2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDIwLmNybDCBwwYIKwYB
# BQUHAQEEgbYwgbMwgYEGCCsGAQUFBzAChnVodHRwOi8vd3d3Lm1pY3Jvc29mdC5j
# b20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMElkZW50aXR5JTIwVmVyaWZpY2F0
# aW9uJTIwUm9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAyMC5jcnQw
# LQYIKwYBBQUHMAGGIWh0dHA6Ly9vbmVvY3NwLm1pY3Jvc29mdC5jb20vb2NzcDAN
# BgkqhkiG9w0BAQwFAAOCAgEAfyUqnv7Uq+rdZgrbVyNMul5skONbhls5fccPlmIb
# zi+OwVdPQ4H55v7VOInnmezQEeW4LqK0wja+fBznANbXLB0KrdMCbHQpbLvG6UA/
# Xv2pfpVIE1CRFfNF4XKO8XYEa3oW8oVH+KZHgIQRIwAbyFKQ9iyj4aOWeAzwk+f9
# E5StNp5T8FG7/VEURIVWArbAzPt9ThVN3w1fAZkF7+YU9kbq1bCR2YD+MtunSQ1R
# ft6XG7b4e0ejRA7mB2IoX5hNh3UEauY0byxNRG+fT2MCEhQl9g2i2fs6VOG19CNe
# p7SquKaBjhWmirYyANb0RJSLWjinMLXNOAga10n8i9jqeprzSMU5ODmrMCJE12xS
# /NWShg/tuLjAsKP6SzYZ+1Ry358ZTFcx0FS/mx2vSoU8s8HRvy+rnXqyUJ9HBqS0
# DErVLjQwK8VtsBdekBmdTbQVoCgPCqr+PDPB3xajYnzevs7eidBsM71PINK2BoE2
# UfMwxCCX3mccFgx6UsQeRSdVVVNSyALQe6PT12418xon2iDGE81OGCreLzDcMAZn
# rUAx4XQLUz6ZTl65yPUiOh3k7Yww94lDf+8oG2oZmDh5O1Qe38E+M3vhKwmzIeoB
# 1dVLlz4i3IpaDcR+iuGjH2TdaC1ZOmBXiCRKJLj4DT2uhJ04ji+tHD6n58vhavFI
# rmcxghqAMIIafAIBATBxMFoxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNyb3Nv
# ZnQgQ29ycG9yYXRpb24xKzApBgNVBAMTIk1pY3Jvc29mdCBJRCBWZXJpZmllZCBD
# UyBBT0MgQ0EgMDMCEzMABcdmLnX1LsBfZuAAAAAFx2YwCwYJYIZIAWUDBAIBoEww
# GQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwLwYJKoZIhvcNAQkEMSIEIHipkEYV
# G/YIIh/pbT69OPXXUgx5BKZkCwoRnd23xr0RMA0GCSqGSIb3DQEBCwUABIIBgGGl
# vSlnRDZwpgeKSs/s/WbOQdaZIUEbRH1uZGmH3OrENL2nlAEP/Z/7cY5zRTZMVGjq
# oAP3GCwSL9ig21dXWYMSz1Bkt82nwo0H6rHTRFQAirjt/JGAcBjUTdWdHk50hjuX
# UcXq8P2xQrudQOiOsVqlYSObf8fKKAV+MJ/BiBmwwCGdp6wAfXkDoxr2jbCKXDjS
# kKY09s/Xe/kDEmQiXiDl7qRb99Wm7Ig/ez9coQ3ZrmJ6IO5hJWQmpsTQl1GJo2hS
# RK9/FzN43b7s8/aIzcOm5Vm8IlyOT1DateLtCCBeDBtXadUp49w/stCb60Kj4f6M
# vC8vZTFeqZp8NW/oaKoyE1Chsglg/ep5wZEt7q2uwTpa2jK7fwnaJrDuG81q6CNb
# O004IuSbc0Mp2eIPHQhAaMjjPVnMQ+CuzucomHnSFlafAexws5z0wd5Hfegiggo4
# uLNvQPNQJLXJDlAN+IrBxBNMHW0ub/DgUZJt+9KDLLGqy/KUZwUgp63vDR8z26GC
# GBQwghgQBgorBgEEAYI3AwMBMYIYADCCF/wGCSqGSIb3DQEHAqCCF+0wghfpAgED
# MQ8wDQYJYIZIAWUDBAIBBQAwggFiBgsqhkiG9w0BCRABBKCCAVEEggFNMIIBSQIB
# AQYKKwYBBAGEWQoDATAxMA0GCWCGSAFlAwQCAQUABCCw3LlXSuy9OIntKYTL5EEY
# zDRjQWO7Gw3RxZJ6P+9VHQIGaoRI+yHmGBMyMDI2MDkwMzEzMDkwMS45OTlaMASA
# AgH0oIHhpIHeMIHbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQ
# MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
# MSUwIwYDVQQLExxNaWNyb3NvZnQgQW1lcmljYSBPcGVyYXRpb25zMScwJQYDVQQL
# Ex5uU2hpZWxkIFRTUyBFU046QTUwMC0wNUUwLUQ5NDcxNTAzBgNVBAMTLE1pY3Jv
# c29mdCBQdWJsaWMgUlNBIFRpbWUgU3RhbXBpbmcgQXV0aG9yaXR5oIIPITCCB4Iw
# ggVqoAMCAQICEzMAAAAF5c8P/2YuyYcAAAAAAAUwDQYJKoZIhvcNAQEMBQAwdzEL
# MAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjFIMEYG
# A1UEAxM/TWljcm9zb2Z0IElkZW50aXR5IFZlcmlmaWNhdGlvbiBSb290IENlcnRp
# ZmljYXRlIEF1dGhvcml0eSAyMDIwMB4XDTIwMTExOTIwMzIzMVoXDTM1MTExOTIw
# NDIzMVowYTELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh
# dGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFB1YmxpYyBSU0EgVGltZXN0YW1waW5n
# IENBIDIwMjAwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCefOdSY/3g
# xZ8FfWO1BiKjHB7X55cz0RMFvWVGR3eRwV1wb3+yq0OXDEqhUhxqoNv6iYWKjkMc
# LhEFxvJAeNcLAyT+XdM5i2CgGPGcb95WJLiw7HzLiBKrxmDj1EQB/mG5eEiRBEp7
# dDGzxKCnTYocDOcRr9KxqHydajmEkzXHOeRGwU+7qt8Md5l4bVZrXAhK+WSk5Cih
# NQsWbzT1nRliVDwunuLkX1hyIWXIArCfrKM3+RHh+Sq5RZ8aYyik2r8HxT+l2hmR
# llBvE2Wok6IEaAJanHr24qoqFM9WLeBUSudz+qL51HwDYyIDPSQ3SeHtKog0ZubD
# k4hELQSxnfVYXdTGncaBnB60QrEuazvcob9n4yR65pUNBCF5qeA4QwYnilBkfnme
# AjRN3LVuLr0g0FXkqfYdUmj1fFFhH8k8YBozrEaXnsSL3kdTD01X+4LfIWOuFzTz
# uoslBrBILfHNj8RfOxPgjuwNvE6YzauXi4orp4Sm6tF245DaFOSYbWFK5ZgG6cUY
# 2/bUq3g3bQAqZt65KcaewEJ3ZyNEobv35Nf6xN6FrA6jF9447+NHvCjeWLCQZ3M8
# lgeCcnnhTFtyQX3XgCoc6IRXvFOcPVrr3D9RPHCMS6Ckg8wggTrtIVnY8yjbvGOU
# sAdZbeXUIQAWMs0d3cRDv09SvwVRd61evQIDAQABo4ICGzCCAhcwDgYDVR0PAQH/
# BAQDAgGGMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRraSg6NS9IY0DPe9iv
# Sek+2T3bITBUBgNVHSAETTBLMEkGBFUdIAAwQTA/BggrBgEFBQcCARYzaHR0cDov
# L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMBMG
# A1UdJQQMMAoGCCsGAQUFBwMIMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMA8G
# A1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUyH7SaoUqG8oZmAQHJ89QEE9oqKIw
# gYQGA1UdHwR9MHsweaB3oHWGc2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lv
# cHMvY3JsL01pY3Jvc29mdCUyMElkZW50aXR5JTIwVmVyaWZpY2F0aW9uJTIwUm9v
# dCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAyMC5jcmwwgZQGCCsGAQUF
# BwEBBIGHMIGEMIGBBggrBgEFBQcwAoZ1aHR0cDovL3d3dy5taWNyb3NvZnQuY29t
# L3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBJZGVudGl0eSUyMFZlcmlmaWNhdGlv
# biUyMFJvb3QlMjBDZXJ0aWZpY2F0ZSUyMEF1dGhvcml0eSUyMDIwMjAuY3J0MA0G
# CSqGSIb3DQEBDAUAA4ICAQBfiHbHfm21WhV150x4aPpO4dhEmSUVpbixNDmv6Tvu
# IHv1xIs174bNGO/ilWMm+Jx5boAXrJxagRhHQtiFprSjMktTliL4sKZyt2i+SXnc
# M23gRezzsoOiBhv14YSd1Klnlkzvgs29XNjT+c8hIfPRe9rvVCMPiH7zPZcw5nNj
# thDQ+zD563I1nUJ6y59TbXWsuyUsqw7wXZoGzZwijWT5oc6GvD3HDokJY401uhnj
# 3ubBhbkR83RbfMvmzdp3he2bvIUztSOuFzRqrLfEvsPkVHYnvH1wtYyrt5vShiKh
# eGpXa2AWpsod4OJyT4/y0dggWi8g/tgbhmQlZqDUf3UqUQsZaLdIu/XSjgoZqDja
# mzCPJtOLi2hBwL+KsCh0Nbwc21f5xvPSwym0Ukr4o5sCcMUcSy6TEP7uMV8RX0eH
# /4JLEpGyae6Ki8JYg5v4fsNGif1OXHJ2IWG+7zyjTDfkmQ1snFOTgyEX8qBpefQb
# F0fx6URrYiarjmBprwP6ZObwtZXJ23jK3Fg/9uqM3j0P01nzVygTppBabzxPAh/h
# Hhhls6kwo3QLJ6No803jUsZcd4JQxiYHHc+Q/wAMcPUnYKv/q2O444LO1+n6j01z
# 5mggCSlRwD9faBIySAcA9S8h22hIAcRQqIGEjolCK9F6nK9ZyX4lhthsGHumaABd
# WzCCB5cwggV/oAMCAQICEzMAAABWfo+dWAiO6WAAAAAAAFYwDQYJKoZIhvcNAQEM
# BQAwYTELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
# bjEyMDAGA1UEAxMpTWljcm9zb2Z0IFB1YmxpYyBSU0EgVGltZXN0YW1waW5nIENB
# IDIwMjAwHhcNMjUxMDIzMjA0NjUxWhcNMjYxMDIyMjA0NjUxWjCB2zELMAkGA1UE
# BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc
# BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjElMCMGA1UECxMcTWljcm9zb2Z0
# IEFtZXJpY2EgT3BlcmF0aW9uczEnMCUGA1UECxMeblNoaWVsZCBUU1MgRVNOOkE1
# MDAtMDVFMC1EOTQ3MTUwMwYDVQQDEyxNaWNyb3NvZnQgUHVibGljIFJTQSBUaW1l
# IFN0YW1waW5nIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
# ggIBALSln5v7pdNu/3fEZW/DJ/4NEFL7y6mNlbMt7SPFNrRUrKU2aJmTg9wR0/C5
# Efka4TCYG9VYwChTcrGivXC0l4nzxkiAazwoLPT+MtuJayRJq1ekOc+AZqjISD62
# YRL2Z1qQkuBzu42Enov58Zgu/9RK/peS4Nz5ksW/HdiFXAEcUsNQeJsQelyNJ5Hp
# fcGtXWG9sHxqaH62hZsWTsU/XjYbeCx9EQUlbnm2umTaY0v9ILX5u6oiIsj+qej0
# c002zJ1arB51f3f61tMx8fkPkDWecFKipk2SQfYVPOd/tqV+aw3yt9rjWPf1gTgJ
# s26oKRHUJG4jGr1DMlA0oZsnCL4B3UJ0ttO7E4/DPpCS97TnWoT7j6jMLGggoHX8
# MEMdDvUynuxUr2wBGLNQJ5XQpfyhxmQjlb1Dao8i9dCS3tP/hg/f8p6lxlhaVzo2
# rp72f3CkToYzeDOXuscdG9poqnD4ouP4otmYXimpZSRE+wipaRUobN8MoOhf36I0
# MULz521g+DcsepYY1o8JqC3MesNRUgrWrywpct9wS0UpU1OKilMWmvHe2DexKqZ/
# VztEmNLpjryhV61h+68ZfvYmonIrXZ005LAJ0Y73pHSk95YO5UTH5n2VPL1zYjdF
# GCc0/RI6o0ZtLjf4dKF8T4TXz2KnhW8j1xhsc2mFM+s8d6k3AgMBAAGjggHLMIIB
# xzAdBgNVHQ4EFgQUvrYz8rurWf4eRrMi78s9R/hTSFowHwYDVR0jBBgwFoAUa2ko
# OjUvSGNAz3vYr0npPtk92yEwbAYDVR0fBGUwYzBhoF+gXYZbaHR0cDovL3d3dy5t
# aWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwUHVibGljJTIwUlNB
# JTIwVGltZXN0YW1waW5nJTIwQ0ElMjAyMDIwLmNybDB5BggrBgEFBQcBAQRtMGsw
# aQYIKwYBBQUHMAKGXWh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2Vy
# dHMvTWljcm9zb2Z0JTIwUHVibGljJTIwUlNBJTIwVGltZXN0YW1waW5nJTIwQ0El
# MjAyMDIwLmNydDAMBgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMI
# MA4GA1UdDwEB/wQEAwIHgDBmBgNVHSAEXzBdMFEGDCsGAQQBgjdMg30BATBBMD8G
# CCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0RvY3Mv
# UmVwb3NpdG9yeS5odG0wCAYGZ4EMAQQCMA0GCSqGSIb3DQEBDAUAA4ICAQAOA6gF
# xLDtuo/y2uxYJ/0In4rfMbmXpKmee/mHvrB/4UU2xBIxmK2YLKsEf5VFHyghaW2R
# fJrGmT0CTkeGGFBFPF8oy65/GNYwkpqMYfZe7VokqHPyRQcN+eiQJsxhsXgQNhFk
# sUbk69QLmXup2GjfP8LRZIh3LPIDGncVwbOg8VYcruWJ4Sz0JH7pipt5RX7cBO6Y
# nle39ZbJJpYLAugHkhgsxj2VIAr3B+U7/0Hvc+2yCJkg90rs4TiMGj/nikE2H+u0
# 4n8iSpFkEnRn0wOinLuNZPCweqDyvjC5NY28cSucD6i0i+tsYytOEgVxxCUhJ7Bb
# dM8VpMT/5YHo9Q8alJ5q2BHZMb8ykhyAKhVkmbpf+YSPrycbxT4bDUARJOHErpQ5
# CUKXHVYv4Jn/5hxTmIQwY7GtebOC/trAYpd11f0/EYkeukPMWL0y0VsXdnVbKzqA
# sJ7FOFiHogtCYpwr9VixxIe0Ms6/UUq+JCiS1naTWC4YI5KI05hJAIxTu++Ld8Qe
# 3p27yBdBjrFdfcZwlM6vRBisrdIDLmqYSpTYyfmk6Y1jGQxqPhjirJ6fdx5n7Zpd
# EsqdxffjN8vsuliRlGaCGSattu4w44xJ3baVK4fQXT3VSH1SQ/wLvNUc4dOVBwIr
# 6K0NzrPDxCxyIIjnfU1s23YJhs3CC7f3XVUBETGCB0YwggdCAgEBMHgwYTELMAkG
# A1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UE
# AxMpTWljcm9zb2Z0IFB1YmxpYyBSU0EgVGltZXN0YW1waW5nIENBIDIwMjACEzMA
# AABWfo+dWAiO6WAAAAAAAFYwDQYJYIZIAWUDBAIBBQCgggSfMBEGCyqGSIb3DQEJ
# EAIPMQIFADAaBgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwHAYJKoZIhvcNAQkF
# MQ8XDTI2MDkwMzEzMDkwMVowLwYJKoZIhvcNAQkEMSIEIFA/s0DvPX8ieodRj9hN
# ALfr8WMvFQwjWDwn3q23j4O3MIG5BgsqhkiG9w0BCRACLzGBqTCBpjCBozCBoAQg
# tgwzJU2k4/CVd4k4OV56XuAkh+tNeN2fl/aOTQYDDKgwfDBlpGMwYTELMAkGA1UE
# BhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMp
# TWljcm9zb2Z0IFB1YmxpYyBSU0EgVGltZXN0YW1waW5nIENBIDIwMjACEzMAAABW
# fo+dWAiO6WAAAAAAAFYwggNhBgsqhkiG9w0BCRACEjGCA1AwggNMoYIDSDCCA0Qw
# ggIsAgEBMIIBCaGB4aSB3jCB2zELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp
# bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
# b3JhdGlvbjElMCMGA1UECxMcTWljcm9zb2Z0IEFtZXJpY2EgT3BlcmF0aW9uczEn
# MCUGA1UECxMeblNoaWVsZCBUU1MgRVNOOkE1MDAtMDVFMC1EOTQ3MTUwMwYDVQQD
# EyxNaWNyb3NvZnQgUHVibGljIFJTQSBUaW1lIFN0YW1waW5nIEF1dGhvcml0eaIj
# CgEBMAcGBSsOAwIaAxUA/3P3KRUqkFmAXl4IMkSdmW72BBGgZzBlpGMwYTELMAkG
# A1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UE
# AxMpTWljcm9zb2Z0IFB1YmxpYyBSU0EgVGltZXN0YW1waW5nIENBIDIwMjAwDQYJ
# KoZIhvcNAQELBQACBQDuQ99dMCIYDzIwMjYwOTAzMTE1ODIxWhgPMjAyNjA5MDQx
# MTU4MjFaMHcwPQYKKwYBBAGEWQoEATEvMC0wCgIFAO5D310CAQAwCgIBAAICASYC
# Af8wBwIBAAICEn8wCgIFAO5FMN0CAQAwNgYKKwYBBAGEWQoEAjEoMCYwDAYKKwYB
# BAGEWQoDAqAKMAgCAQACAwehIKEKMAgCAQACAwGGoDANBgkqhkiG9w0BAQsFAAOC
# AQEAMI0ZmSSANimvk26qDSnDi2/DKj1QYvuJnDjR/Iz7zhq1Frp4anwk+NxLRsK5
# 06yqRiQpTnC9sm8WUaISdLxsdH83OXP5MaWO5r/XC3w3YSqBckDyRlowgLsAX+kN
# aUxqRR9ncGsIabIzkadDhX0s0R8lhaSb3s07sZ7Ye9cBUeLd9ItJd4Nu8ciA5N+B
# N1iyXdOju4IuDroGmhRCC8BhuIgxZsawm+/nSvfQ7+fqDp1Z4yaA2+D24hAy04Sk
# Y2RF9zS4+IwrfIrnBOpedbvKfncvK/kwSx5MO1+rkUpkgTuPDwQLv1ASNI1F2ej1
# zVBn+sUzG9JU3KaVeEm+sTJcPTANBgkqhkiG9w0BAQEFAASCAgA8xPHegm2/iq/z
# MSkRkIlvFIKDpXk+627cYRjPVYzU3XQHRKTlecVEIbXPEdThfdnllDfKb7929RUP
# q+eCy3ioR0uY3uCoCGv2SUiHFkgkBOgkZIXzyRF7bifwft5GbQg3/fqB21GUSd9o
# WxeVUF2gfzoULJs1XWkim/9CUG5hJ6pYvfwa/yIcn7cJNTwc1Kn4gmeuwMoDKWl/
# yctMkIxzZ1a4vEQ7YxrSMwJkDesdx1MsjLnVx9BgLpXatB5kIfHYnK54y5MLUcdu
# FkbiOf3C1rsROlI6vFwbQK0uQ2eZ5hKNwzGfD+3mtMwI0UtzVvqg/Q1R4SGpMfND
# UZxfwTNMPSz841aW6B+QHKjTw8AG9e+hBDhCqmCkR58mp8RA/zkAPGhZGTjzhsqy
# d8GZLpzunnBT+pNCeMC4aVsdmbMCdUwFBuB+WOYeQqxf5uhicpUhOe6ncZahJpqL
# Kx5XLC8pkf7iMmGViS2eYMyAdB71lDjP11ui5tvLk/JPTs5yFKezahenFSTnMCVT
# 3R27X+db6Ugz+j7UZ/L7VJvVABmSrEQ8I6v/u8EvkknH5QRYdS+50IkvDBdDEAzr
# AXDNCdyIgHvYODfqLjZTIFQl0HkUW9703v8eHHCgjIz6WOMlQG1YaeCJxoW7MiDZ
# PMgnPzfXmt/BwDOAfwBDHdKvQssGXg==
# SIG # End signature block