Private/Refresh.ps1

function Get-OverageRefreshHistory {
    param([hashtable] $Context, [guid] $ModelId)
    $response = Invoke-OverageApi -Context $Context -Method Get -Path "groups/$($Context.WorkspaceId)/datasets/$ModelId/refreshes?`$top=60"
    $property = $response.PSObject.Properties['value']
    if ($null -eq $property -or $property.Value -isnot [array]) {
        throw 'Refresh-history response is missing its entries array. Refresh status is unknown.'
    }
    return $property.Value
}

function Get-OverageModelFreshness {
    [CmdletBinding()]
    param([hashtable] $Context, [guid] $ModelId, [datetime] $NowUtc = (Get-OverageUtcNow))
    $freshness = [pscustomobject] @{
        LastSuccessfulRefreshUtc = $null
        AgeHours = $null
        Status = 'Unknown'
    }
    try { $history = @(Get-OverageRefreshHistory -Context $Context -ModelId $ModelId) }
    catch [System.InvalidOperationException] {
        if ($_.Exception.Data['HttpStatusCode'] -ne 403) { throw }
        Write-Warning 'Cannot read model refresh history without model Write permission. Refresh age is Unknown; usage/debt timestamps will still be checked. No automatic refresh was requested.'
        return $freshness
    }
    $completed = @(foreach ($entry in $history) {
        if ((Get-OptionalProperty $entry 'status') -eq 'Completed') {
            ConvertTo-RefreshUtcTime (Get-OptionalProperty $entry 'endTime')
        }
    })
    if ($completed.Count -eq 0) {
        Write-Warning 'No successful model refresh is recorded in the available history. Refresh age is Unknown; use -Refresh to explicitly request a refresh.'
        return $freshness
    }
    $freshness.LastSuccessfulRefreshUtc = $completed | Sort-Object -Descending | Select-Object -First 1
    $freshness.AgeHours = [math]::Max([double] 0, ($NowUtc - $freshness.LastSuccessfulRefreshUtc).TotalHours)
    $freshness.Status = if ($freshness.AgeHours -gt 12) { 'Stale' } else { 'Recent' }
    if ($freshness.Status -eq 'Stale') {
        Write-Warning "The model's last successful refresh is $([math]::Round($freshness.AgeHours, 2)) hours old (over 12 hours). No automatic refresh is performed; use -Refresh to request one."
    }
    return $freshness
}

function Start-OverageModelRefresh {
    [CmdletBinding(SupportsShouldProcess = $true, ConfirmImpact = 'Medium')]
    param(
        [hashtable] $Context,
        [guid] $ModelId,
        [ValidateRange(0, 7200)] [int] $TimeoutSeconds = 7200,
        [ValidateRange(1, 600)] [int] $PollIntervalSeconds = 10
    )
    if (-not $PSCmdlet.ShouldProcess("semantic model $ModelId in workspace $($Context.WorkspaceId)", 'Refresh semantic model')) {
        return
    }
    $path = "groups/$($Context.WorkspaceId)/datasets/$ModelId/refreshes"
    # An ambiguous submission failure may already have scheduled a refresh.
    # Only a rejected 401 is safe to retry with a replacement token.
    $response = Invoke-OverageApi -Context $Context -Method Post -Path $path -Body '{"notifyOption":"NoNotification"}' -PassThruResponse -NoRetry
    if ([int] $response.StatusCode -ne 202) {
        throw "Refresh submission returned unexpected HTTP $($response.StatusCode). Check model refresh history before resubmitting."
    }
    $location = [string] (@($response.Headers['Location']) | Select-Object -First 1)
    $requestText = [string] (@($response.Headers['x-ms-request-id']) | Select-Object -First 1)
    if ($location -match '/refreshes/([0-9a-fA-F-]{36})(?:\?.*)?$') { $requestText = $Matches[1] }
    $requestId = [guid]::Empty
    if (-not [guid]::TryParse($requestText, [ref] $requestId) -or $requestId -eq [guid]::Empty) {
        throw 'Refresh was accepted, but no trackable request ID was returned. Check model refresh history before resubmitting; no second refresh was requested.'
    }
    Write-Verbose "Requested model refresh $requestId. Waiting for completion."
    $timer = [System.Diagnostics.Stopwatch]::StartNew()
    while ($timer.Elapsed.TotalSeconds -lt $TimeoutSeconds) {
        $history = @(Get-OverageRefreshHistory -Context $Context -ModelId $ModelId)
        $matching = @($history | Where-Object { (Get-OptionalProperty $_ 'requestId') -eq $requestId.ToString('D') })
        if ($matching.Count -gt 1) { throw "Refresh history contains duplicate entries for request $requestId." }
        if ($matching.Count -eq 1) {
            $entry = $matching[0]
            $status = [string] (Get-OptionalProperty $entry 'status')
            if ($status -eq 'Completed') {
                $completedAt = ConvertTo-RefreshUtcTime (Get-OptionalProperty $entry 'endTime')
                Write-Verbose "Model refresh $requestId completed at $($completedAt.ToString('o'))."
                return [pscustomobject] @{ RequestId = $requestId; CompletedAtUtc = $completedAt }
            }
            if ($status -in @('Failed', 'Disabled', 'Cancelled', 'Canceled')) {
                $detail = [string] (Get-OptionalProperty $entry 'serviceExceptionJson')
                throw "Model refresh $requestId ended with status '$status'. $detail No costs were calculated."
            }
            if ($status -notin @('Unknown', 'InProgress', 'NotStarted', 'Queued')) {
                throw "Model refresh $requestId returned unrecognized status '$status'. No costs were calculated."
            }
        }
        $remaining = $TimeoutSeconds - $timer.Elapsed.TotalSeconds
        if ($remaining -gt 0) { Start-Sleep -Seconds ([math]::Min([double] $PollIntervalSeconds, $remaining)) }
    }
    throw "Timed out waiting for model refresh $requestId after $TimeoutSeconds seconds. The refresh was not cancelled and may still be running. Check model refresh history before resubmitting; no costs were calculated."
}

# SIG # Begin signature block
# MII9KwYJKoZIhvcNAQcCoII9HDCCPRgCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAG+YjDgaIfudrq
# PLx0Chf1tug6LVKcElu0R4Oih6+eQ6CCIfAwggXMMIIDtKADAgECAhBUmNLR1FsZ
# lUgTecgRwIeZMA0GCSqGSIb3DQEBDAUAMHcxCzAJBgNVBAYTAlVTMR4wHAYDVQQK
# ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xSDBGBgNVBAMTP01pY3Jvc29mdCBJZGVu
# dGl0eSBWZXJpZmljYXRpb24gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAy
# MDAeFw0yMDA0MTYxODM2MTZaFw00NTA0MTYxODQ0NDBaMHcxCzAJBgNVBAYTAlVT
# MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xSDBGBgNVBAMTP01pY3Jv
# c29mdCBJZGVudGl0eSBWZXJpZmljYXRpb24gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRo
# b3JpdHkgMjAyMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALORKgeD
# Bmf9np3gx8C3pOZCBH8Ppttf+9Va10Wg+3cL8IDzpm1aTXlT2KCGhFdFIMeiVPvH
# or+Kx24186IVxC9O40qFlkkN/76Z2BT2vCcH7kKbK/ULkgbk/WkTZaiRcvKYhOuD
# PQ7k13ESSCHLDe32R0m3m/nJxxe2hE//uKya13NnSYXjhr03QNAlhtTetcJtYmrV
# qXi8LW9J+eVsFBT9FMfTZRY33stuvF4pjf1imxUs1gXmuYkyM6Nix9fWUmcIxC70
# ViueC4fM7Ke0pqrrBc0ZV6U6CwQnHJFnni1iLS8evtrAIMsEGcoz+4m+mOJyoHI1
# vnnhnINv5G0Xb5DzPQCGdTiO0OBJmrvb0/gwytVXiGhNctO/bX9x2P29Da6SZEi3
# W295JrXNm5UhhNHvDzI9e1eM80UHTHzgXhgONXaLbZ7LNnSrBfjgc10yVpRnlyUK
# xjU9lJfnwUSLgP3B+PR0GeUw9gb7IVc+BhyLaxWGJ0l7gpPKWeh1R+g/OPTHU3mg
# trTiXFHvvV84wRPmeAyVWi7FQFkozA8kwOy6CXcjmTimthzax7ogttc32H83rwjj
# O3HbbnMbfZlysOSGM1l0tRYAe1BtxoYT2v3EOYI9JACaYNq6lMAFUSw0rFCZE4e7
# swWAsk0wAly4JoNdtGNz764jlU9gKL431VulAgMBAAGjVDBSMA4GA1UdDwEB/wQE
# AwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTIftJqhSobyhmYBAcnz1AQ
# T2ioojAQBgkrBgEEAYI3FQEEAwIBADANBgkqhkiG9w0BAQwFAAOCAgEAr2rd5hnn
# LZRDGU7L6VCVZKUDkQKL4jaAOxWiUsIWGbZqWl10QzD0m/9gdAmxIR6QFm3FJI9c
# Zohj9E/MffISTEAQiwGf2qnIrvKVG8+dBetJPnSgaFvlVixlHIJ+U9pW2UYXeZJF
# xBA2CFIpF8svpvJ+1Gkkih6PsHMNzBxKq7Kq7aeRYwFkIqgyuH4yKLNncy2RtNwx
# AQv3Rwqm8ddK7VZgxCwIo3tAsLx0J1KH1r6I3TeKiW5niB31yV2g/rarOoDXGpc8
# FzYiQR6sTdWD5jw4vU8w6VSp07YEwzJ2YbuwGMUrGLPAgNW3lbBeUU0i/OxYqujY
# lLSlLu2S3ucYfCFX3VVj979tzR/SpncocMfiWzpbCNJbTsgAlrPhgzavhgplXHT2
# 6ux6anSg8Evu75SjrFDyh+3XOjCDyft9V77l4/hByuVkrrOj7FjshZrM77nq81YY
# uVxzmq/FdxeDWds3GhhyVKVB0rYjdaNDmuV3fJZ5t0GNv+zcgKCf0Xd1WF81E+Al
# GmcLfc4l+gcK5GEh2NQc5QfGNpn0ltDGFf5Ozdeui53bFv0ExpK91IjmqaOqu/dk
# ODtfzAzQNb50GQOmxapMomE2gj4d8yu8l13bS3g7LfU772Aj6PXsCyM2la+YZr9T
# 03u4aUoqlmZpxJTG9F9urJh4iIAGXKKy7aIwggalMIIEjaADAgECAhMzAAdbGEDf
# TgkXlXTxAAAAB1sYMA0GCSqGSIb3DQEBDAUAMFoxCzAJBgNVBAYTAlVTMR4wHAYD
# VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAMTIk1pY3Jvc29mdCBJ
# RCBWZXJpZmllZCBDUyBFT0MgQ0EgMDQwHhcNMjYxMDAxMDI1MDE5WhcNMjYxMDA0
# MDI1MDE5WjBnMQswCQYDVQQGEwJVUzELMAkGA1UECBMCbmQxEzARBgNVBAcTCldl
# c3QgRmFyZ28xGjAYBgNVBAoTEUNhbWVyb24gQmF0dGFnbGVyMRowGAYDVQQDExFD
# YW1lcm9uIEJhdHRhZ2xlcjCCAaIwDQYJKoZIhvcNAQEBBQADggGPADCCAYoCggGB
# ALVoOcv+l3IwxEApp8l09TPrsNALwfZgh9Fq2DPFwPAODX3D4adBG9TwaG+9WhUz
# sKgj3ICTmmW5RMqkERpPqxbWgWpyH11k5wv1MtLM4DN28sq+GgdFOHiifMzEaZBe
# szBknSx9GoX8KqsmLlr/ihXJ8EePbgGPTzpzc7Y/zUtwJxgo4J7FCPvKwp1hwm+b
# 55pz/3EjdVOW8xH+L3yj0cRfEmXiVMPlz/v/3cObU1H/v3tHNDOFQTYb7oUYdvAD
# vuwQv8uO75S+T9B9ZLKq6KCTGOBJL8RIm8lMgus2osbraofB10Ta60UZXGIuph3S
# 5v/3YrXMLL4pZYTRzOg1QBwVxm0vIuOANpoTrSOz+cu46JbllR7ztp4MRokIDc1u
# /1fT/fZ88Qby0gH9qZats619otwnZ1cCZVXqlNPjunYblf0NxpguejrRGfoL8hOE
# g3g9QRZ4qPAl6ge4ektG5p1QhrrfwPzXG1FVXSpK3wz0GT9rU3b1DSCyX3LU8Aeh
# 7wIDAQABo4IB1TCCAdEwDAYDVR0TAQH/BAIwADAOBgNVHQ8BAf8EBAMCB4AwPAYD
# VR0lBDUwMwYKKwYBBAGCN2EBAAYIKwYBBQUHAwMGGysGAQQBgjdhgpCMjhjwj9wE
# gfC73D+ByYzTEzAdBgNVHQ4EFgQUEB2TH85lgaBpjWqWpUWcJncgK08wHwYDVR0j
# BBgwFoAUmvFUd3UMhxY3RqCs3nn59H/BeOkwZwYDVR0fBGAwXjBcoFqgWIZWaHR0
# cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwSUQl
# MjBWZXJpZmllZCUyMENTJTIwRU9DJTIwQ0ElMjAwNC5jcmwwdAYIKwYBBQUHAQEE
# aDBmMGQGCCsGAQUFBzAChlhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3Bz
# L2NlcnRzL01pY3Jvc29mdCUyMElEJTIwVmVyaWZpZWQlMjBDUyUyMEVPQyUyMENB
# JTIwMDQuY3J0MFQGA1UdIARNMEswSQYEVR0gADBBMD8GCCsGAQUFBwIBFjNodHRw
# Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0w
# DQYJKoZIhvcNAQEMBQADggIBACw5WA5GTU/3h+1vi/q8rC97QBcMfueg0oqMiEg1
# E123nAksZOfJQTe6gWUqa/sWuHvno+hpV8OPTC2FhLlD6nc9OMNmt6IE/eYIDtFv
# pzLIg5t11T8NRLpYMINhhezLFmy8ExtA0F4d0qMPzXqIZRnfON3skT6iwm1oZIbV
# y0We+ScjAgVFjcCrCeUeZbmQCBG9qIhzmWazMQTt0KDDsCDF14bDmTLLhRsbkNKh
# HOYToMRfndhof+Rn0ZrYMXt5eCqhkmaXrMK7NBwqXO2jT6n1/3I7tva+xME8Na6B
# Vuu+PcdaQa35GpigYQvJJvqyuV+3Xq9rIXR+TPQyK1249VJL/npb7Pk8yYncLY5t
# qTODKIQqCi7V8tuFr3uTmD3TYdsOlAAFodmLzcoYEc4HG7cHy36n3milM6pz8U3K
# ZQ8f8Uk1CdSubDxd65JDLWeEcYdWU3agZJaUmIzJgljj0uO6TWThMPXnZ0pcwHwP
# QcuQs6Xty4trf0dSaMGRRZS7pvL1mHYlBapOIitmDHiph4SuFnIigpX0EX69zDny
# 4jS7H13t1aFvPBYx6+9aRnlmSAMUpZCKqiFopMrIQa8Rn0AyL6RPuJ1RRem7kkgU
# v6YmvCYJAs46yoWVAlop/2f+lhG9Zd71QjuVI+sed6Hoe100E8QKwF6JW0KDX+fu
# oxsrMIIGpTCCBI2gAwIBAgITMwAHWxhA304JF5V08QAAAAdbGDANBgkqhkiG9w0B
# AQwFADBaMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0
# aW9uMSswKQYDVQQDEyJNaWNyb3NvZnQgSUQgVmVyaWZpZWQgQ1MgRU9DIENBIDA0
# MB4XDTI2MTAwMTAyNTAxOVoXDTI2MTAwNDAyNTAxOVowZzELMAkGA1UEBhMCVVMx
# CzAJBgNVBAgTAm5kMRMwEQYDVQQHEwpXZXN0IEZhcmdvMRowGAYDVQQKExFDYW1l
# cm9uIEJhdHRhZ2xlcjEaMBgGA1UEAxMRQ2FtZXJvbiBCYXR0YWdsZXIwggGiMA0G
# CSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQC1aDnL/pdyMMRAKafJdPUz67DQC8H2
# YIfRatgzxcDwDg19w+GnQRvU8GhvvVoVM7CoI9yAk5pluUTKpBEaT6sW1oFqch9d
# ZOcL9TLSzOAzdvLKvhoHRTh4onzMxGmQXrMwZJ0sfRqF/CqrJi5a/4oVyfBHj24B
# j086c3O2P81LcCcYKOCexQj7ysKdYcJvm+eac/9xI3VTlvMR/i98o9HEXxJl4lTD
# 5c/7/93Dm1NR/797RzQzhUE2G+6FGHbwA77sEL/Lju+Uvk/QfWSyquigkxjgSS/E
# SJvJTILrNqLG62qHwddE2utFGVxiLqYd0ub/92K1zCy+KWWE0czoNUAcFcZtLyLj
# gDaaE60js/nLuOiW5ZUe87aeDEaJCA3Nbv9X0/32fPEG8tIB/amWrbOtfaLcJ2dX
# AmVV6pTT47p2G5X9DcaYLno60Rn6C/IThIN4PUEWeKjwJeoHuHpLRuadUIa638D8
# 1xtRVV0qSt8M9Bk/a1N29Q0gsl9y1PAHoe8CAwEAAaOCAdUwggHRMAwGA1UdEwEB
# /wQCMAAwDgYDVR0PAQH/BAQDAgeAMDwGA1UdJQQ1MDMGCisGAQQBgjdhAQAGCCsG
# AQUFBwMDBhsrBgEEAYI3YYKQjI4Y8I/cBIHwu9w/gcmM0xMwHQYDVR0OBBYEFBAd
# kx/OZYGgaY1qlqVFnCZ3ICtPMB8GA1UdIwQYMBaAFJrxVHd1DIcWN0agrN55+fR/
# wXjpMGcGA1UdHwRgMF4wXKBaoFiGVmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9w
# a2lvcHMvY3JsL01pY3Jvc29mdCUyMElEJTIwVmVyaWZpZWQlMjBDUyUyMEVPQyUy
# MENBJTIwMDQuY3JsMHQGCCsGAQUFBwEBBGgwZjBkBggrBgEFBQcwAoZYaHR0cDov
# L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBJRCUy
# MFZlcmlmaWVkJTIwQ1MlMjBFT0MlMjBDQSUyMDA0LmNydDBUBgNVHSAETTBLMEkG
# BFUdIAAwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3Br
# aW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMA0GCSqGSIb3DQEBDAUAA4ICAQAsOVgO
# Rk1P94ftb4v6vKwve0AXDH7noNKKjIhINRNdt5wJLGTnyUE3uoFlKmv7Frh756Po
# aVfDj0wthYS5Q+p3PTjDZreiBP3mCA7Rb6cyyIObddU/DUS6WDCDYYXsyxZsvBMb
# QNBeHdKjD816iGUZ3zjd7JE+osJtaGSG1ctFnvknIwIFRY3AqwnlHmW5kAgRvaiI
# c5lmszEE7dCgw7AgxdeGw5kyy4UbG5DSoRzmE6DEX53YaH/kZ9Ga2DF7eXgqoZJm
# l6zCuzQcKlzto0+p9f9yO7b2vsTBPDWugVbrvj3HWkGt+RqYoGELySb6srlft16v
# ayF0fkz0MitduPVSS/56W+z5PMmJ3C2ObakzgyiEKgou1fLbha97k5g902HbDpQA
# BaHZi83KGBHOBxu3B8t+p95opTOqc/FNymUPH/FJNQnUrmw8XeuSQy1nhHGHVlN2
# oGSWlJiMyYJY49Ljuk1k4TD152dKXMB8D0HLkLOl7cuLa39HUmjBkUWUu6by9Zh2
# JQWqTiIrZgx4qYeErhZyIoKV9BF+vcw58uI0ux9d7dWhbzwWMevvWkZ5ZkgDFKWQ
# iqohaKTKyEGvEZ9AMi+kT7idUUXpu5JIFL+mJrwmCQLOOsqFlQJaKf9n/pYRvWXe
# 9UI7lSPrHneh6HtdNBPECsBeiVtCg1/n7qMbKzCCBygwggUQoAMCAQICEzMAAAAX
# J0UJC4uHr8YAAAAAABcwDQYJKoZIhvcNAQEMBQAwYzELMAkGA1UEBhMCVVMxHjAc
# BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjE0MDIGA1UEAxMrTWljcm9zb2Z0
# IElEIFZlcmlmaWVkIENvZGUgU2lnbmluZyBQQ0EgMjAyMTAeFw0yNjAzMjYxODEx
# MzFaFw0zMTAzMjYxODExMzFaMFoxCzAJBgNVBAYTAlVTMR4wHAYDVQQKExVNaWNy
# b3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAMTIk1pY3Jvc29mdCBJRCBWZXJpZmll
# ZCBDUyBFT0MgQ0EgMDQwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCC
# x2T+Aw9mKgGVzJ+Tq0PMn49G3itIsYpbx7ClLSRHFe1RELdPcZ1sIqWOhsSfy6yy
# qEapClGH9Je9FXA1cQgZvvpQbkg+QInVLr/0EPrVBCwrM96lbRI2PxNeCwXG9Lsy
# W2hG6KQgintDmNCBo4zpDIr377plVdSliZm6UB7rHwmvBnR02QT6tnrqWq2ihzB6
# lRJVTEzuh0OafzIMeMnYM0+x+ve5EOLHdfiq+HXiMf9Jb7YLHtYgyHIiJA7bTWLq
# FSLGaTh7ZlbxbsLXA91OOroEpv7OjzFuu3tkpC9FflA4Dp2Euq4+qPmxUqfGp+TX
# 0gLRJp9NJOzzILjcTD3rkFFFbxUv1xyg6avivFDLtoKBhM2Td138umE1pNOacanu
# SYtPHIeQHmB6haFi64avLBLwTTAm/Rbit860cFXR72wq+5Qh4hSmezHqKXERWPpV
# Be+APrJ4Iqc+aPeMmIkoCWZQO22HnLNFUFSXjiwyIbgvlH/LIAJEqTafTzxDZgKh
# lLU7zr6gwsq3WNpcYQI6NuxWnwh3VVDDyF7onQqKs5Ll7bleVN0Y8VvqgE45ppyB
# bvwqN/Run5fMCCRz3aYMY0kZhKO92eP7t4zHqZ5bQMAgZ0tE2Pz/jb0wiykUF/Pc
# oOqqk3vVLiRDYst6vd3GEMNzMpUUvQcvBG46+COIbwIDAQABo4IB3DCCAdgwDgYD
# VR0PAQH/BAQDAgGGMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBSa8VR3dQyH
# FjdGoKzeefn0f8F46TBUBgNVHSAETTBLMEkGBFUdIAAwQTA/BggrBgEFBQcCARYz
# aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnku
# aHRtMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMBIGA1UdEwEB/wQIMAYBAf8C
# AQAwHwYDVR0jBBgwFoAU2UEpsA8PY2zvadf1zSmepEhqMOYwcAYDVR0fBGkwZzBl
# oGOgYYZfaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9z
# b2Z0JTIwSUQlMjBWZXJpZmllZCUyMENvZGUlMjBTaWduaW5nJTIwUENBJTIwMjAy
# MS5jcmwwfQYIKwYBBQUHAQEEcTBvMG0GCCsGAQUFBzAChmFodHRwOi8vd3d3Lm1p
# Y3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMElEJTIwVmVyaWZp
# ZWQlMjBDb2RlJTIwU2lnbmluZyUyMFBDQSUyMDIwMjEuY3J0MA0GCSqGSIb3DQEB
# DAUAA4ICAQCQdVoZ/U0m38l2iKaZFlsxavptpoOLyaR1a9ZK2TSF1kOnFJhMDse6
# KkCgsveoiEjXTVc6Xt86IKHn76Nk5qZB0BXv2iMRQ2giAJmYvZcmstoZqfB2M3Kd
# 5wnJhUJOtF/b6HsqSelY6nhrF06zor1lDmDQixBZcLB9zR1+RKQso1jekNxYuUk+
# HaN3k1S57qk0O//YbkwU0mELCW04N5vICMZx5T5c7Nq/7uLvbVhCdD7f2bZpA4U7
# vOkB1ooB4AaER3pjoJ0Mad5LFyi6Na9p9Zu/hrLeOjU5FItS5YxsqvlfXxAThJ17
# 6CmkYstKRmytSHZ7JhKRfV6e9Zftk/ODb/CK4pGVAVqsOf4337bQGrOHHCQ3IvN9
# gmnUuDh8JdvbheoWPHxIN1GB5sUiY584tXN7xdD8LCSsRqJvQ8e7a3gZWTgViugR
# s1QWq+N0G9Nje6JHlN1CjJehge+H5PGktJja+juGEr0P+ukSkcL6qaZxFQTh3SDI
# 71lvW++3bl/Ezd6SO8N9Udw+reoyvRHCyTiSsplZQSBTVJdPmo3qCpGuyHFtPo5C
# Bn3/FPTiqJd3M9BHoqKd0G9Kmg6fGcAvFwnLNXA2kov727wRljL3ypfqL7iAT/Yn
# pxul6RwHRlcOf9dDGg1RRvr92NP/CWVXIb68geR2rvU/NsfmtjF1wDCCB54wggWG
# oAMCAQICEzMAAAAHh6M0o3uljhwAAAAAAAcwDQYJKoZIhvcNAQEMBQAwdzELMAkG
# A1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjFIMEYGA1UE
# AxM/TWljcm9zb2Z0IElkZW50aXR5IFZlcmlmaWNhdGlvbiBSb290IENlcnRpZmlj
# YXRlIEF1dGhvcml0eSAyMDIwMB4XDTIxMDQwMTIwMDUyMFoXDTM2MDQwMTIwMTUy
# MFowYzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
# bjE0MDIGA1UEAxMrTWljcm9zb2Z0IElEIFZlcmlmaWVkIENvZGUgU2lnbmluZyBQ
# Q0EgMjAyMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALLwwK8ZiCji
# 3VR6TElsaQhVCbRS/3pK+MHrJSj3Zxd3KU3rlfL3qrZilYKJNqztA9OQacr1AwoN
# cHbKBLbsQAhBnIB34zxf52bDpIO3NJlfIaTE/xrweLoQ71lzCHkD7A4As1Bs076I
# u+mA6cQzsYYH/Cbl1icwQ6C65rU4V9NQhNUwgrx9rGQ//h890Q8JdjLLw0nV+ayQ
# 2Fbkd242o9kH82RZsH3HEyqjAB5a8+Ae2nPIPc8sZU6ZE7iRrRZywRmrKDp5+Tcm
# JX9MRff241UaOBs4NmHOyke8oU1TYrkxh+YeHgfWo5tTgkoSMoayqoDpHOLJs+qG
# 8Tvh8SnifW2Jj3+ii11TS8/FGngEaNAWrbyfNrC69oKpRQXY9bGH6jn9NEJv9weF
# xhTwyvx9OJLXmRGbAUXN1U9nf4lXezky6Uh/cgjkVd6CGUAf0K+Jw+GE/5VpIVbc
# Nr9rNE50Sbmy/4RTCEGvOq3GhjITbCa4crCzTTHgYYjHs1NbOc6brH+eKpWLtr+b
# Gecy9CrwQyx7S/BfYJ+ozst7+yZtG2wR461uckFu0t+gCwLdN0A6cFtSRtR8bvxV
# FyWwTtgMMFRuBa3vmUOTnfKLsLefRaQcVTgRnzeLzdpt32cdYKp+dhr2ogc+qM6K
# 4CBI5/j4VFyC4QFeUP2YAidLtvpXRRo3AgMBAAGjggI1MIICMTAOBgNVHQ8BAf8E
# BAMCAYYwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFNlBKbAPD2Ns72nX9c0p
# nqRIajDmMFQGA1UdIARNMEswSQYEVR0gADBBMD8GCCsGAQUFBwIBFjNodHRwOi8v
# d3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wGQYJ
# KwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSME
# GDAWgBTIftJqhSobyhmYBAcnz1AQT2ioojCBhAYDVR0fBH0wezB5oHegdYZzaHR0
# cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0JTIwSWRl
# bnRpdHklMjBWZXJpZmljYXRpb24lMjBSb290JTIwQ2VydGlmaWNhdGUlMjBBdXRo
# b3JpdHklMjAyMDIwLmNybDCBwwYIKwYBBQUHAQEEgbYwgbMwgYEGCCsGAQUFBzAC
# hnVodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29m
# dCUyMElkZW50aXR5JTIwVmVyaWZpY2F0aW9uJTIwUm9vdCUyMENlcnRpZmljYXRl
# JTIwQXV0aG9yaXR5JTIwMjAyMC5jcnQwLQYIKwYBBQUHMAGGIWh0dHA6Ly9vbmVv
# Y3NwLm1pY3Jvc29mdC5jb20vb2NzcDANBgkqhkiG9w0BAQwFAAOCAgEAfyUqnv7U
# q+rdZgrbVyNMul5skONbhls5fccPlmIbzi+OwVdPQ4H55v7VOInnmezQEeW4LqK0
# wja+fBznANbXLB0KrdMCbHQpbLvG6UA/Xv2pfpVIE1CRFfNF4XKO8XYEa3oW8oVH
# +KZHgIQRIwAbyFKQ9iyj4aOWeAzwk+f9E5StNp5T8FG7/VEURIVWArbAzPt9ThVN
# 3w1fAZkF7+YU9kbq1bCR2YD+MtunSQ1Rft6XG7b4e0ejRA7mB2IoX5hNh3UEauY0
# byxNRG+fT2MCEhQl9g2i2fs6VOG19CNep7SquKaBjhWmirYyANb0RJSLWjinMLXN
# OAga10n8i9jqeprzSMU5ODmrMCJE12xS/NWShg/tuLjAsKP6SzYZ+1Ry358ZTFcx
# 0FS/mx2vSoU8s8HRvy+rnXqyUJ9HBqS0DErVLjQwK8VtsBdekBmdTbQVoCgPCqr+
# PDPB3xajYnzevs7eidBsM71PINK2BoE2UfMwxCCX3mccFgx6UsQeRSdVVVNSyALQ
# e6PT12418xon2iDGE81OGCreLzDcMAZnrUAx4XQLUz6ZTl65yPUiOh3k7Yww94lD
# f+8oG2oZmDh5O1Qe38E+M3vhKwmzIeoB1dVLlz4i3IpaDcR+iuGjH2TdaC1ZOmBX
# iCRKJLj4DT2uhJ04ji+tHD6n58vhavFIrmcxghqRMIIajQIBATBxMFoxCzAJBgNV
# BAYTAlVTMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKzApBgNVBAMT
# Ik1pY3Jvc29mdCBJRCBWZXJpZmllZCBDUyBFT0MgQ0EgMDQCEzMAB1sYQN9OCReV
# dPEAAAAHWxgwDQYJYIZIAWUDBAIBBQCgXjAQBgorBgEEAYI3AgEMMQIwADAZBgkq
# hkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAvBgkqhkiG9w0BCQQxIgQg2Lr7IpTSFcLS
# BhjG8v/z0cAQ8YxgtRiJd67uMsRT0yUwDQYJKoZIhvcNAQEBBQAEggGAX66aQon9
# 8PQCAisaZQZsuhAhxjGIR3VEGCCfWqN6PSCmy7nfhJEVUaRnaCFixy58YXRg55Ur
# t/2HVhsZb2Z1uFcVBWNLq6/Ag5Wa3GxVvFIgz0l/+PseCDK/c131kJAlumLbIpfv
# tHJ9Z3agYgo5HrkFABzBF8axZRobHmZSSSPJJwTX2tkST+X2vOm1F4W6b5y12mLr
# ajBbs40jNeW8z6R0EbaAJ3miE6B6sFBuQ4S3DWlrWRgeKdTOpDW2PBusOMF02/Ci
# sKSZaMULRaV1wJD3pf9Ewy+dxWKLOADAuryKHHARlA43ZjBRwNLh+p9iK7SXU+gk
# uzLUKY1DqORKfpJor4ecGtPat6jQABcaac/Nh4Xc0e51QRVqz94t5gnRkBB541K9
# yG+fG4enWSGJLfRsGEYi+HMKv+JvnKmHDwK720lIoLzlNjWFob6i6vi4FmkcwYEa
# NbS06JymP+w1IZqupgDpHfYIhhT78gQvu61rq0E3Ao5qO9iguoMxyjAdoYIYETCC
# GA0GCisGAQQBgjcDAwExghf9MIIX+QYJKoZIhvcNAQcCoIIX6jCCF+YCAQMxDzAN
# BglghkgBZQMEAgEFADCCAWIGCyqGSIb3DQEJEAEEoIIBUQSCAU0wggFJAgEBBgor
# BgEEAYRZCgMBMDEwDQYJYIZIAWUDBAIBBQAEIOiOqGnma5zb+uzEztG5tnv2t5Ip
# hKzjqBCjOxXm/vnuAgZqqXgn1AUYEzIwMjYxMDAyMTcwMzI1LjQxMVowBIACAfSg
# geGkgd4wgdsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD
# VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJTAj
# BgNVBAsTHE1pY3Jvc29mdCBBbWVyaWNhIE9wZXJhdGlvbnMxJzAlBgNVBAsTHm5T
# aGllbGQgVFNTIEVTTjo3RDAwLTA1RTAtRDk0NzE1MDMGA1UEAxMsTWljcm9zb2Z0
# IFB1YmxpYyBSU0EgVGltZSBTdGFtcGluZyBBdXRob3JpdHmggg8hMIIHgjCCBWqg
# AwIBAgITMwAAAAXlzw//Zi7JhwAAAAAABTANBgkqhkiG9w0BAQwFADB3MQswCQYD
# VQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMUgwRgYDVQQD
# Ez9NaWNyb3NvZnQgSWRlbnRpdHkgVmVyaWZpY2F0aW9uIFJvb3QgQ2VydGlmaWNh
# dGUgQXV0aG9yaXR5IDIwMjAwHhcNMjAxMTE5MjAzMjMxWhcNMzUxMTE5MjA0MjMx
# WjBhMQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
# MTIwMAYDVQQDEylNaWNyb3NvZnQgUHVibGljIFJTQSBUaW1lc3RhbXBpbmcgQ0Eg
# MjAyMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJ5851Jj/eDFnwV9
# Y7UGIqMcHtfnlzPREwW9ZUZHd5HBXXBvf7KrQ5cMSqFSHGqg2/qJhYqOQxwuEQXG
# 8kB41wsDJP5d0zmLYKAY8Zxv3lYkuLDsfMuIEqvGYOPURAH+Ybl4SJEESnt0MbPE
# oKdNihwM5xGv0rGofJ1qOYSTNcc55EbBT7uq3wx3mXhtVmtcCEr5ZKTkKKE1CxZv
# NPWdGWJUPC6e4uRfWHIhZcgCsJ+sozf5EeH5KrlFnxpjKKTavwfFP6XaGZGWUG8T
# ZaiTogRoAlqcevbiqioUz1Yt4FRK53P6ovnUfANjIgM9JDdJ4e0qiDRm5sOTiEQt
# BLGd9Vhd1MadxoGcHrRCsS5rO9yhv2fjJHrmlQ0EIXmp4DhDBieKUGR+eZ4CNE3c
# tW4uvSDQVeSp9h1SaPV8UWEfyTxgGjOsRpeexIveR1MPTVf7gt8hY64XNPO6iyUG
# sEgt8c2PxF87E+CO7A28TpjNq5eLiiunhKbq0XbjkNoU5JhtYUrlmAbpxRjb9tSr
# eDdtACpm3rkpxp7AQndnI0Shu/fk1/rE3oWsDqMX3jjv40e8KN5YsJBnczyWB4Jy
# eeFMW3JBfdeAKhzohFe8U5w9WuvcP1E8cIxLoKSDzCCBOu0hWdjzKNu8Y5SwB1lt
# 5dQhABYyzR3dxEO/T1K/BVF3rV69AgMBAAGjggIbMIICFzAOBgNVHQ8BAf8EBAMC
# AYYwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFGtpKDo1L0hjQM972K9J6T7Z
# PdshMFQGA1UdIARNMEswSQYEVR0gADBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3
# Lm1pY3Jvc29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wEwYDVR0l
# BAwwCgYIKwYBBQUHAwgwGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwDwYDVR0T
# AQH/BAUwAwEB/zAfBgNVHSMEGDAWgBTIftJqhSobyhmYBAcnz1AQT2ioojCBhAYD
# VR0fBH0wezB5oHegdYZzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9j
# cmwvTWljcm9zb2Z0JTIwSWRlbnRpdHklMjBWZXJpZmljYXRpb24lMjBSb290JTIw
# Q2VydGlmaWNhdGUlMjBBdXRob3JpdHklMjAyMDIwLmNybDCBlAYIKwYBBQUHAQEE
# gYcwgYQwgYEGCCsGAQUFBzAChnVodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtp
# b3BzL2NlcnRzL01pY3Jvc29mdCUyMElkZW50aXR5JTIwVmVyaWZpY2F0aW9uJTIw
# Um9vdCUyMENlcnRpZmljYXRlJTIwQXV0aG9yaXR5JTIwMjAyMC5jcnQwDQYJKoZI
# hvcNAQEMBQADggIBAF+Idsd+bbVaFXXnTHho+k7h2ESZJRWluLE0Oa/pO+4ge/XE
# izXvhs0Y7+KVYyb4nHlugBesnFqBGEdC2IWmtKMyS1OWIviwpnK3aL5JedwzbeBF
# 7POyg6IGG/XhhJ3UqWeWTO+Czb1c2NP5zyEh89F72u9UIw+IfvM9lzDmc2O2END7
# MPnrcjWdQnrLn1Ntday7JSyrDvBdmgbNnCKNZPmhzoa8PccOiQljjTW6GePe5sGF
# uRHzdFt8y+bN2neF7Zu8hTO1I64XNGqst8S+w+RUdie8fXC1jKu3m9KGIqF4aldr
# YBamyh3g4nJPj/LR2CBaLyD+2BuGZCVmoNR/dSpRCxlot0i79dKOChmoONqbMI8m
# 04uLaEHAv4qwKHQ1vBzbV/nG89LDKbRSSvijmwJwxRxLLpMQ/u4xXxFfR4f/gksS
# kbJp7oqLwliDm/h+w0aJ/U5ccnYhYb7vPKNMN+SZDWycU5ODIRfyoGl59BsXR/Hp
# RGtiJquOYGmvA/pk5vC1lcnbeMrcWD/26ozePQ/TWfNXKBOmkFpvPE8CH+EeGGWz
# qTCjdAsno2jzTeNSxlx3glDGJgcdz5D/AAxw9Sdgq/+rY7jjgs7X6fqPTXPmaCAJ
# KVHAP19oEjJIBwD1LyHbaEgBxFCogYSOiUIr0Xqcr1nJfiWG2GwYe6ZoAF1bMIIH
# lzCCBX+gAwIBAgITMwAAAFXZ3WkmKPn44gAAAAAAVTANBgkqhkiG9w0BAQwFADBh
# MQswCQYDVQQGEwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTIw
# MAYDVQQDEylNaWNyb3NvZnQgUHVibGljIFJTQSBUaW1lc3RhbXBpbmcgQ0EgMjAy
# MDAeFw0yNTEwMjMyMDQ2NDlaFw0yNjEwMjIyMDQ2NDlaMIHbMQswCQYDVQQGEwJV
# UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE
# ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSUwIwYDVQQLExxNaWNyb3NvZnQgQW1l
# cmljYSBPcGVyYXRpb25zMScwJQYDVQQLEx5uU2hpZWxkIFRTUyBFU046N0QwMC0w
# NUUwLUQ5NDcxNTAzBgNVBAMTLE1pY3Jvc29mdCBQdWJsaWMgUlNBIFRpbWUgU3Rh
# bXBpbmcgQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
# vbkfkh5ZSLP0MCUWafaw/KZoVZu9iQx8r5JwhZvdrUi86UjCCFQONjQanrIxGF9h
# RGIZLQZ50gHrLC+4fpUEJff5t04VwByWC2/bWOuk6NmaTh9JpPZDcGzNR95Qlryj
# fEjtl+gxj12zNPEdADPplVfzt8cYRWFBx/Fbfch08k6P9p7jX2q1jFPbUxWYJ+xO
# yGC1aKhDGY5b+8wL39v6qC0HFIx/v3y+bep+aEXooK8VoeWK+szfaFjXo8YTcvQ8
# UL4szu9HFTuZNv6vvoJ7Ju+o5aTj51sph+0+FXW38TlL/rDBd5ia79jskLtOeHbD
# jkbljilwzegcxv9i49F05ZrS/5ELZCCY1VaqO7EOLKVaxxdAO5oy1vb0Bx0ZRVX1
# mxFjYzay2EC051k6yGJHm58y1oe2IKRa/SM1+BTGse6vHNi5Q2d5ZnoR9AOAUDDw
# JIIqRI4rZz2MSinh11WrXTG9urF2uoyd5Ve+8hxes9ABeP2PYQKlXYTAxvdaeanD
# TQ/vwmnM+yTcWzrVm84Z38XVFw4G7p/ZNZ2nscvv6uru2AevXcyV1t8ha7iWmhhg
# TWBNBrViuDlc3iPvOz2SVPbPeqhyY/NXwNZCAgc2H5pOztu6MwQxDIjte3XM/FkK
# BxHofS2abNT/0HG+xZtFqUJDaxgbJa6lN1zh7spjuQ8CAwEAAaOCAcswggHHMB0G
# A1UdDgQWBBRWBF8QbdwIA/DIv6nJFsrB16xltjAfBgNVHSMEGDAWgBRraSg6NS9I
# Y0DPe9ivSek+2T3bITBsBgNVHR8EZTBjMGGgX6BdhltodHRwOi8vd3d3Lm1pY3Jv
# c29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3NvZnQlMjBQdWJsaWMlMjBSU0ElMjBU
# aW1lc3RhbXBpbmclMjBDQSUyMDIwMjAuY3JsMHkGCCsGAQUFBwEBBG0wazBpBggr
# BgEFBQcwAoZdaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9N
# aWNyb3NvZnQlMjBQdWJsaWMlMjBSU0ElMjBUaW1lc3RhbXBpbmclMjBDQSUyMDIw
# MjAuY3J0MAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgwDgYD
# VR0PAQH/BAQDAgeAMGYGA1UdIARfMF0wUQYMKwYBBAGCN0yDfQEBMEEwPwYIKwYB
# BQUHAgEWM2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvRG9jcy9SZXBv
# c2l0b3J5Lmh0bTAIBgZngQwBBAIwDQYJKoZIhvcNAQEMBQADggIBAFIe4ZJUe9qU
# KcWeWypchB58fXE/ZIWv2D5XP5/k/tB7LCN9BvmNSVKZ3VeclQM978wfEvuvdMQS
# Uv6Y20boIM8DK1K1IU9cP21MG0ExiHxaqjrikf2qbfrXIip4Ef3v2bNYKQxCxN3S
# czp1SX0H7uqK2L5OhfDEiXf15iou5hh+EPaaqp49czNQpJDOR/vfJghUc/qcslDP
# hoCZpZx8b2ODvywGQNXwqlbsmCS24uGmEkQ3UH5JUeN6c91yasVchS78riMrm6R9
# ZpAiO5pfNKMGU2MLm1A3pp098DcbFTAc95Hh6Qvkh//28F/Xe2bMFb6DL7Sw0ZO9
# 5v0gv0ZTyJfxS/LCxfraeEII9FSFOKAMEp1zNFSs2ue0GGjBt9yEEMUwvxq9ExFz
# 0aZzYm8ivJfffpIVDnX/+rVRTYcxIkQyFYslIhYlWF9SjCw5r49qakjMRNh8W9O7
# aaoolSVZleQZjGt0K8JzMlyp6hp2lbW6XqRx2cOHbbxJDxmENzohGUziI13lI2g2
# Bf5qibfC4bKNRpJo9lbE8HUbY0qJiE8u3SU8eDQaySPXOEhJjxRCQwwOvejYmBG5
# P7CckQNBSnnl12+FKRKgPoj0Mv+z5OMhj9z2MtpbnHLAkep0odQClEyyCG/uR5tK
# 5rW6mZH5Oq56UWS0NI6NV1JGS7Jri6jFMYIHQzCCBz8CAQEweDBhMQswCQYDVQQG
# EwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQDEylN
# aWNyb3NvZnQgUHVibGljIFJTQSBUaW1lc3RhbXBpbmcgQ0EgMjAyMAITMwAAAFXZ
# 3WkmKPn44gAAAAAAVTANBglghkgBZQMEAgEFAKCCBJwwEQYLKoZIhvcNAQkQAg8x
# AgUAMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAcBgkqhkiG9w0BCQUxDxcN
# MjYxMDAyMTcwMzI1WjAvBgkqhkiG9w0BCQQxIgQgI1U5ckZ0Cf3j+zL+550kjprj
# EvkVISSVzHAFgcvG/XUwgbkGCyqGSIb3DQEJEAIvMYGpMIGmMIGjMIGgBCDYuTyX
# ZIZiu799/v4PaqsmeSzBxh0rqkYq7sYYavj+zTB8MGWkYzBhMQswCQYDVQQGEwJV
# UzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNy
# b3NvZnQgUHVibGljIFJTQSBUaW1lc3RhbXBpbmcgQ0EgMjAyMAITMwAAAFXZ3Wkm
# KPn44gAAAAAAVTCCA14GCyqGSIb3DQEJEAISMYIDTTCCA0mhggNFMIIDQTCCAikC
# AQEwggEJoYHhpIHeMIHbMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv
# bjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0
# aW9uMSUwIwYDVQQLExxNaWNyb3NvZnQgQW1lcmljYSBPcGVyYXRpb25zMScwJQYD
# VQQLEx5uU2hpZWxkIFRTUyBFU046N0QwMC0wNUUwLUQ5NDcxNTAzBgNVBAMTLE1p
# Y3Jvc29mdCBQdWJsaWMgUlNBIFRpbWUgU3RhbXBpbmcgQXV0aG9yaXR5oiMKAQEw
# BwYFKw4DAhoDFQAdO1QBgmW/tuBZV5EGjhfsV4cN6qBnMGWkYzBhMQswCQYDVQQG
# EwJVUzEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQDEylN
# aWNyb3NvZnQgUHVibGljIFJTQSBUaW1lc3RhbXBpbmcgQ0EgMjAyMDANBgkqhkiG
# 9w0BAQsFAAIFAO5qYAIwIhgPMjAyNjEwMDIxNjUzMjJaGA8yMDI2MTAwMzE2NTMy
# MlowdDA6BgorBgEEAYRZCgQBMSwwKjAKAgUA7mpgAgIBADAHAgEAAgIKRDAHAgEA
# AgIS1TAKAgUA7muxggIBADA2BgorBgEEAYRZCgQCMSgwJjAMBgorBgEEAYRZCgMC
# oAowCAIBAAIDB6EgoQowCAIBAAIDAYagMA0GCSqGSIb3DQEBCwUAA4IBAQBgM5OU
# oOGnq31iaQUJPxBK5AVFDD93NSG+P2LCRIO1+Yus2FukQ7ssQ29bOh56ZA5AjjHe
# MagbGfJDviN80uCRd7n3Pgei9Y1dPoX1vvokzvXo5GV2MjAOq1ecBmNw32NJPeQH
# QkNWSrLiaSpePhhiqoPjCbkC5DNCRZEBxnPGI6gqCsibb5VrLYsnf1xJ/1TGNmTa
# Khj18jYNQiz9W6pG/LnEjftwv4wBpk7Z8zVZE3FIK9iLbGYSDHC/W+nPlXeOXg2P
# gkIA2fMIhICsF0DM/ENToxEJXVbjSQ8IZsi3N1GLKPzqIY+N7gr0B7kPQSVY1uzf
# BvB2X4IPLoYiCFHOMA0GCSqGSIb3DQEBAQUABIICAFhTmZ/bMZfMOA/0NDlkOk7J
# rPTLjB39B08fpwzU09Mkn1pnWVZ7+fBGfnXdE2uHVmJ7XI/CW0GCXNrnsSZ4zQkz
# 8vd6SdxibYXu9PhuAzCD5AYDt9nUTZcpgjEMgTShzfgfYrlRVbHh9WsnI3zed7gL
# Df8uP/ZMvETGkHZuqrC03nMHXw27k7Q4fn/mCIRcBuTFKAQyVrm2FBEJl0HGKBx5
# Hv/DBU6g9D80G85tfVDJLuWXA1cIP9KsTby/Qyl74+z54cupLtHX51wFU3AYexCB
# I3TBbBo6nNtdMvck/+3oJLXybuOgM2xua/TWpoEHKLcFeKh/8iVslx3GRdf5jhiv
# E6A3iVT7qC5ZvlR6wk3TIAJOkCf/7g1QPpX2grKXiL+6yn1EIULUTleRW3mRXvFp
# NG1D4h4Zg3tjIkkFDNMd2KMcVocZGMy0IOjEz+KwdgrtfkVFqTh04uDNT/CzYCjA
# nuV/0+y5nYek5++sP7GATQi21gwn9fIkqul7jGCamV11PQ6WoHs1hXZxnOPmlPPM
# X2ZvGSBd4DEA8OcXahdV3SVpS34WUQKQwO3al8oO0TQba4HxW8VW+Yl2B2uRfFq2
# GPyfItKt7yGGWFWfCJrmeID7qETTBjELh2d8q8UMDPhP8GdrGygpOe2+Oqmn0Ybo
# CFfONXPhnoEFWPxLwGYY
# SIG # End signature block