public/ValidateAuthAndSchema.ps1

# Test auth, upsert (for non auth code flows), preview

<#
.Synopsis
Script to test connection authentication using the GCS API.
 
.Description
This script test the connection authentication by calling the GCS API and stores the result in a JSON file.
 
.Parameter ConnectionId
Mandatory parameter specifying the ConnectionId for which the authentication metadata is to be upserted.
 
.Parameter Path
Mandatory parameter specifying the path.
 
.Parameter AuthenticationKind
Mandatory parameter specifying the authentication kind.
 
.Parameter Username
Optional parameter specifying the username. Required if the authentication kind is basic or Windows.
 
.Parameter Password
Optional parameter specifying the password. Required if the authentication kind is basic or Windows.
 
.Parameter ClientId
Optional parameter specifying the client id. Required if the authentication kind is oauth2 or oauth2.client_credentials.
 
.Parameter ClientSecret
Optional parameter specifying the client secret. Required if the authentication kind is oauth2 or oauth2.client_credentials.
 
.Parameter OAuthNonce
Optional parameter specifying the OAuth nonce. Required if the authentication kind is oauth2.
 
.Parameter AdminInputs
Optional parameter specifying the admin inputs. Required if the connector is an OpenApi connector.
 
.Parameter AuthEndpoint
Optional parameter specifying the auth endpoint. Required if the connector is an OpenApi connector and the authentication kind is oauth2 or oauth2.client_credentials.
 
.Parameter TokenEndpoint
Optional parameter specifying the token endpoint. Required if the connector is an OpenApi connector and the authentication kind is oauth2 or oauth2.client_credentials.
 
.Parameter RefreshEndpoint
Optional parameter specifying the refresh endpoint. Required if the connector is an OpenApi connector and the authentication kind is oauth2 or oauth2.client_credentials.
 
.Parameter Scope
Optional parameter specifying the scope. Required if the connector is an OpenApi connector and the authentication kind is oauth2 or oauth2.client_credentials.
 
.Parameter Resource
Optional parameter specifying the resource. Required if the connector is an OpenApi connector and the authentication kind is oauth2.client_credentials.
 
.Parameter OutputFile
Optional parameter specifying the output file location for logging. If not provided, the default filename based on the command type and timestamp will be used.
 
.Parameter TenantId
Optional parameter specifying the TenantId for which the connection information is to be retrieved.
 
.Parameter Torus
Optional switch parameter to indicate if Torus is being used.
 
#>

function ValidateAuthAndSchema {
    param(
        # Connection Id
        [Parameter(Mandatory=$true)]
        [string]
        $ConnectionId,

        # Path
        [Parameter(Mandatory=$true)]
        [string]
        $DatasourcePath,

        # Authentication kind
        [Parameter(Mandatory=$true)]
        [string]
        $AuthenticationKind
        
    )
    try{
        switch ($AuthenticationKind) {
            "basic"
            {
                $Username = Read-Host "Username"
                $PasswordSecureString = Read-Host "Password" -AsSecureString
                $bstr = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($PasswordSecureString)
                $Password = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($bstr)
                [System.Runtime.InteropServices.Marshal]::ZeroFreeBSTR($bstr)
            }
            "oauth2.client_credentials"
            {
                $ClientId = Read-Host "Client id"
                $ClientSecret = Read-Host "Client secret"
                $TokenEndpoint = Read-Host "Token endpoint"
                $Scope = Read-Host "Scopes (Press enter if there are no scope options)"
                $Resource = Read-Host "Resources (Press enter if there are no resource options)"
            }
        }


        $OAuthNonce = 165
        Test-Authentication -ConnectionId $ConnectionId -Path $DatasourcePath -AuthenticationKind $AuthenticationKind -Username $Username -Password $Password -ClientId $ClientId -ClientSecret $ClientSecret -OAuthNonce $OAuthNonce -TokenEndpoint $TokenEndpoint -Scope $Scope -Resource $Resource

        Write-Host "Test auth succeeded"

        if($AuthenticationKind -ne "oauth2" -and $AuthenticationKind -ne "oauth2.client_credentials"){
            Upsert-Authentication -ConnectionId $ConnectionId -Path $DatasourcePath -AuthenticationKind $AuthenticationKind -Username $Username -Password $Password -ClientId $ClientId -ClientSecret $ClientSecret -TokenEndpoint $TokenEndpoint -Scope $Scope -Resource $Resource
        }

        $PreviewOutputFile = "PreviewData_$($ConnectionId)"
        Write-Host "Generating preview"
        Evaluate-PreviewData -ConnectionId $ConnectionId -OutputFile $PreviewOutputFile
    }
    catch{
        Write-Error "Error happend while execution ValidateAuthAndSchema. Error = $_"
    }

}

# SIG # Begin signature block
# MIIoBgYJKoZIhvcNAQcCoIIn9zCCJ/MCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCACBBsLZ2orZZNM
# M2wRsOScuureESWjec39I1hGakNf16CCDYUwggYDMIID66ADAgECAhMzAAADri01
# UchTj1UdAAAAAAOuMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD
# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
# b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p
# bmcgUENBIDIwMTEwHhcNMjMxMTE2MTkwODU5WhcNMjQxMTE0MTkwODU5WjB0MQsw
# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy
# b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
# AQD0IPymNjfDEKg+YyE6SjDvJwKW1+pieqTjAY0CnOHZ1Nj5irGjNZPMlQ4HfxXG
# yAVCZcEWE4x2sZgam872R1s0+TAelOtbqFmoW4suJHAYoTHhkznNVKpscm5fZ899
# QnReZv5WtWwbD8HAFXbPPStW2JKCqPcZ54Y6wbuWV9bKtKPImqbkMcTejTgEAj82
# 6GQc6/Th66Koka8cUIvz59e/IP04DGrh9wkq2jIFvQ8EDegw1B4KyJTIs76+hmpV
# M5SwBZjRs3liOQrierkNVo11WuujB3kBf2CbPoP9MlOyyezqkMIbTRj4OHeKlamd
# WaSFhwHLJRIQpfc8sLwOSIBBAgMBAAGjggGCMIIBfjAfBgNVHSUEGDAWBgorBgEE
# AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQUhx/vdKmXhwc4WiWXbsf0I53h8T8w
# VAYDVR0RBE0wS6RJMEcxLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh
# dGlvbnMgTGltaXRlZDEWMBQGA1UEBRMNMjMwMDEyKzUwMTgzNjAfBgNVHSMEGDAW
# gBRIbmTlUAXTgqoXNzcitW2oynUClTBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8v
# d3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0EyMDExXzIw
# MTEtMDctMDguY3JsMGEGCCsGAQUFBwEBBFUwUzBRBggrBgEFBQcwAoZFaHR0cDov
# L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0EyMDEx
# XzIwMTEtMDctMDguY3J0MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggIB
# AGrJYDUS7s8o0yNprGXRXuAnRcHKxSjFmW4wclcUTYsQZkhnbMwthWM6cAYb/h2W
# 5GNKtlmj/y/CThe3y/o0EH2h+jwfU/9eJ0fK1ZO/2WD0xi777qU+a7l8KjMPdwjY
# 0tk9bYEGEZfYPRHy1AGPQVuZlG4i5ymJDsMrcIcqV8pxzsw/yk/O4y/nlOjHz4oV
# APU0br5t9tgD8E08GSDi3I6H57Ftod9w26h0MlQiOr10Xqhr5iPLS7SlQwj8HW37
# ybqsmjQpKhmWul6xiXSNGGm36GarHy4Q1egYlxhlUnk3ZKSr3QtWIo1GGL03hT57
# xzjL25fKiZQX/q+II8nuG5M0Qmjvl6Egltr4hZ3e3FQRzRHfLoNPq3ELpxbWdH8t
# Nuj0j/x9Crnfwbki8n57mJKI5JVWRWTSLmbTcDDLkTZlJLg9V1BIJwXGY3i2kR9i
# 5HsADL8YlW0gMWVSlKB1eiSlK6LmFi0rVH16dde+j5T/EaQtFz6qngN7d1lvO7uk
# 6rtX+MLKG4LDRsQgBTi6sIYiKntMjoYFHMPvI/OMUip5ljtLitVbkFGfagSqmbxK
# 7rJMhC8wiTzHanBg1Rrbff1niBbnFbbV4UDmYumjs1FIpFCazk6AADXxoKCo5TsO
# zSHqr9gHgGYQC2hMyX9MGLIpowYCURx3L7kUiGbOiMwaMIIHejCCBWKgAwIBAgIK
# YQ6Q0gAAAAAAAzANBgkqhkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNV
# BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
# c29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlm
# aWNhdGUgQXV0aG9yaXR5IDIwMTEwHhcNMTEwNzA4MjA1OTA5WhcNMjYwNzA4MjEw
# OTA5WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE
# BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYD
# VQQDEx9NaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQSAyMDExMIICIjANBgkqhkiG
# 9w0BAQEFAAOCAg8AMIICCgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGfQhsqa+la
# UKq4BjgaBEm6f8MMHt03a8YS2AvwOMKZBrDIOdUBFDFC04kNeWSHfpRgJGyvnkmc
# 6Whe0t+bU7IKLMOv2akrrnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13YxC4D
# dato88tt8zpcoRb0RrrgOGSsbmQ1eKagYw8t00CT+OPeBw3VXHmlSSnnDb6gE3e+
# lD3v++MrWhAfTVYoonpy4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nk
# kDstrjNYxbc+/jLTswM9sbKvkjh+0p2ALPVOVpEhNSXDOW5kf1O6nA+tGSOEy/S6
# A4aN91/w0FK/jJSHvMAhdCVfGCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmd
# X4jiJV3TIUs+UsS1Vz8kA/DRelsv1SPjcF0PUUZ3s/gA4bysAoJf28AVs70b1FVL
# 5zmhD+kjSbwYuER8ReTBw3J64HLnJN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zd
# sGbiwZeBe+3W7UvnSSmnEyimp31ngOaKYnhfsi+E11ecXL93KCjx7W3DKI8sj0A3
# T8HhhUSJxAlMxdSlQy90lfdu+HggWCwTXWCVmj5PM4TasIgX3p5O9JawvEagbJjS
# 4NaIjAsCAwEAAaOCAe0wggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRI
# bmTlUAXTgqoXNzcitW2oynUClTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTAL
# BgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToCMZBD
# uRQFTuHqp8cx0SOJNDBaBgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsLm1pY3Jv
# c29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFf
# MDNfMjIuY3JsMF4GCCsGAQUFBwEBBFIwUDBOBggrBgEFBQcwAoZCaHR0cDovL3d3
# dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFf
# MDNfMjIuY3J0MIGfBgNVHSAEgZcwgZQwgZEGCSsGAQQBgjcuAzCBgzA/BggrBgEF
# BQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1h
# cnljcHMuaHRtMEAGCCsGAQUFBwICMDQeMiAdAEwAZQBnAGEAbABfAHAAbwBsAGkA
# YwB5AF8AcwB0AGEAdABlAG0AZQBuAHQALiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn
# 8oalmOBUeRou09h0ZyKbC5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+vj/oCso7
# v0epo/Np22O/IjWll11lhJB9i0ZQVdgMknzSGksc8zxCi1LQsP1r4z4HLimb5j0b
# pdS1HXeUOeLpZMlEPXh6I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6VoCo/
# KmtYSWMfCWluWpiW5IP0wI/zRive/DvQvTXvbiWu5a8n7dDd8w6vmSiXmE0OPQvy
# CInWH8MyGOLwxS3OW560STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBp
# mLJZiWhub6e3dMNABQamASooPoI/E01mC8CzTfXhj38cbxV9Rad25UAqZaPDXVJi
# hsMdYzaXht/a8/jyFqGaJ+HNpZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYb
# BL7fQccOKO7eZS/sl/ahXJbYANahRr1Z85elCUtIEJmAH9AAKcWxm6U/RXceNcbS
# oqKfenoi+kiVH6v7RyOA9Z74v2u3S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sL
# gOppO6/8MO0ETI7f33VtY5E90Z1WTk+/gFcioXgRMiF670EKsT/7qMykXcGhiJtX
# cVZOSEXAQsmbdlsKgEhr/Xmfwb1tbWrJUnMTDXpQzTGCGdcwghnTAgEBMIGVMH4x
# CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt
# b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01p
# Y3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMTECEzMAAAOuLTVRyFOPVR0AAAAA
# A64wDQYJYIZIAWUDBAIBBQCggeYwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQw
# HAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIMT4
# 9g9m/iLRbm2x8nSYY61y8t9yMbvwSb6Cc0ktCxeEMHoGCisGAQQBgjcCAQwxbDBq
# oEyASgBNAGkAYwByAG8AcwBvAGYAdAAuAEcAcgBhAHAAaAAuAEMAbwBuAG4AZQBj
# AHQAbwByAHMALgBDAG0AZABsAGUAdAAuAGQAbABsoRqAGGh0dHA6Ly93d3cubWlj
# cm9zb2Z0LmNvbTANBgkqhkiG9w0BAQEFAASCAQDqF47m3G4R6RpL+T6ZUe7Xq/LW
# OrE8zS0DRqZlrr1p2MBcruP7uHdPXZkAJBIHHqScFaSdqimgPluHru3iJlH9E6wj
# E/6//x7irppVE0LLqWQexGgkV0YHIy/ZR8NPoR6Nc9dmWueXN5rzYVOYIuhbdix/
# fiB1JBLHGwr3jHrTmeCoy/ihSUv/bqE9cGNRDIvK9ZSqe+E3FDHxVTCDxU0FqcPd
# AcgosXXHjfN8ZN/WsBINJxgIXX+e4Fg8TGjZdKMPnR6xa0h9CMV2lSEOqmtNSKG0
# VuYy16OPPEc+1t6qDcyMeiMlVNXc3N6CN4xxsZqcuGoLzfCsmCxBaLzQmO59oYIX
# KTCCFyUGCisGAQQBgjcDAwExghcVMIIXEQYJKoZIhvcNAQcCoIIXAjCCFv4CAQMx
# DzANBglghkgBZQMEAgEFADCCAVkGCyqGSIb3DQEJEAEEoIIBSASCAUQwggFAAgEB
# BgorBgEEAYRZCgMBMDEwDQYJYIZIAWUDBAIBBQAEIEqtzFS9kRnMcY6BrAy7tjue
# EP+Rifw+iAVJjfOGRHHMAgZmVxWPqiIYEzIwMjQwNjA1MDQwNjE0LjgyMlowBIAC
# AfSggdikgdUwgdIxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw
# DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
# LTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEm
# MCQGA1UECxMdVGhhbGVzIFRTUyBFU046OEQ0MS00QkY3LUIzQjcxJTAjBgNVBAMT
# HE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2WgghF4MIIHJzCCBQ+gAwIBAgIT
# MwAAAePfvZuaHGiDIgABAAAB4zANBgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJV
# UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE
# ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGlt
# ZS1TdGFtcCBQQ0EgMjAxMDAeFw0yMzEwMTIxOTA3MjlaFw0yNTAxMTAxOTA3Mjla
# MIHSMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
# UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYDVQQL
# EyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25zIExpbWl0ZWQxJjAkBgNVBAsT
# HVRoYWxlcyBUU1MgRVNOOjhENDEtNEJGNy1CM0I3MSUwIwYDVQQDExxNaWNyb3Nv
# ZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
# CgKCAgEAvqQNaB5Gn5/FIFQPo3/K4QmleCDMF40bkoHwz0BshZ4SiQmA6CGUyDwm
# aqQ2wHhaXU0RdHtwvq+U8KxYYsyHKqaxxC7fr/yHZvHpNTgzx1VkR3pXhT6X2Cm1
# 75UX3WQ4jfl86onp5AMzBIFDlz0SU8VSKNMDvNXtjk9FitLgUv2nj3hOJ0KkEQfk
# 3oA7m7zA0D+Mo73hmR+OC7uwsXxJR2tzUZE0STYX3UvenFH7fYWy5BNmLyGq2sWk
# Q5HFvJKCJAE/dwft8+V43U3KeExF/pPtcLUvQ9HIrL0xnpMFau7Yd5aK+TEi57Wc
# tBv87+fSPZBV3jZl/QCtcH9WrniBDwki9QfRxu/JYzw+iaEWLqrYXuF7jeOGvHK+
# fVeLWnAc5WxsfbpjEMpNbGXbSF9At3PPhFVOjxwVEx1ALGUqRKehw9ap9X/gfkA9
# I9eTSvwJz9wya9reDgS+6kXgSttI7RQ2cJG/tQPGVIaLCIaSafLneaq0Bns0t4+E
# W3B/GnoBMiiOXwleOvf5udBZQIMJ3k5qnnh8Z4ZhTwrE6iGbPrTgGBPXh7exFYAG
# lb6hdhILIVDdJlDf8s1NVvL0Q2y4SHZQhApZTuW/tyGsGscIPDSMz5bA6NhRLtjE
# wCFpLI5qGlu50Au9FRelCEQsWg7q07H/rqHOqCNJM4Rjem7joEUCAwEAAaOCAUkw
# ggFFMB0GA1UdDgQWBBSxrg1mvjUVt6Fnxj56nabZiJipAzAfBgNVHSMEGDAWgBSf
# pxVdAF5iXYP05dJlpxtTNRnpcjBfBgNVHR8EWDBWMFSgUqBQhk5odHRwOi8vd3d3
# Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3NvZnQlMjBUaW1lLVN0YW1w
# JTIwUENBJTIwMjAxMCgxKS5jcmwwbAYIKwYBBQUHAQEEYDBeMFwGCCsGAQUFBzAC
# hlBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29m
# dCUyMFRpbWUtU3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNydDAMBgNVHRMBAf8EAjAA
# MBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG
# 9w0BAQsFAAOCAgEAt76bLqnU08wRbW3vRrxjaEbGPqyINK6UYCzhTGaR/PEwCJzi
# PT4ZM9sfGTX3eZDQVE9r121tFtp7NXQYuQSxRZMYXa0/pawN2Xn+UPjBRDvoCsU5
# 6dwKkrmy8TSw7QXKGskdnEwsI5yW93q8Ag86RkBiKEEf9FdzHNuKWI4Kv//fDtES
# ewu46n/u+VckCwbOYl6wE//QRGrGMq509a4EbP+p1GUm06Xme/01mTIuKDgPmHL2
# nYRzXNqi2IuIecn2aWwkRxQOFiPw+dicmOOwLG/7InNqjZpQeIhDMxsWr4zTxzy4
# ER/6zfthtlDtcAXHB7YRUkBTClaOa0ndvfNJZMyYVa6cWvZouTq9V5LS7UzIR8S/
# 7RsOT43eOawLBsuQz0VoOLurYe1SffPqTsCcRNzbx0C8t/+KipStVhPAGttEfhdU
# US9ohD6Lt6wNCJxZbV0IMD8nfE6gIQJXrzrXWOuJqN91WDyjRan4UKDkIBS2yWA4
# W6JhQuBzGerOSY/aLnxkRrSubgtnKYcHOwgxTTIya5WYCRjFt0QOLleqVki6k+mq
# YPr98uMPi5vRIQS206mDSenStr8w0J+/+1WEm3PnCCIQgpf6zhqRrAt9j7XrEMHr
# g2bQegaz8bLzbe6UibgbKtRyk1nGde8To5kyMj9XUCBICDxT+F4xa5lNZVQwggdx
# MIIFWaADAgECAhMzAAAAFcXna54Cm0mZAAAAAAAVMA0GCSqGSIb3DQEBCwUAMIGI
# MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVk
# bW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQDEylN
# aWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAxMDAeFw0yMTA5
# MzAxODIyMjVaFw0zMDA5MzAxODMyMjVaMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQI
# EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv
# ZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBD
# QSAyMDEwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5OGmTOe0ciEL
# eaLL1yR5vQ7VgtP97pwHB9KpbE51yMo1V/YBf2xK4OK9uT4XYDP/XE/HZveVU3Fa
# 4n5KWv64NmeFRiMMtY0Tz3cywBAY6GB9alKDRLemjkZrBxTzxXb1hlDcwUTIcVxR
# MTegCjhuje3XD9gmU3w5YQJ6xKr9cmmvHaus9ja+NSZk2pg7uhp7M62AW36MEByd
# Uv626GIl3GoPz130/o5Tz9bshVZN7928jaTjkY+yOSxRnOlwaQ3KNi1wjjHINSi9
# 47SHJMPgyY9+tVSP3PoFVZhtaDuaRr3tpK56KTesy+uDRedGbsoy1cCGMFxPLOJi
# ss254o2I5JasAUq7vnGpF1tnYN74kpEeHT39IM9zfUGaRnXNxF803RKJ1v2lIH1+
# /NmeRd+2ci/bfV+AutuqfjbsNkz2K26oElHovwUDo9Fzpk03dJQcNIIP8BDyt0cY
# 7afomXw/TNuvXsLz1dhzPUNOwTM5TI4CvEJoLhDqhFFG4tG9ahhaYQFzymeiXtco
# dgLiMxhy16cg8ML6EgrXY28MyTZki1ugpoMhXV8wdJGUlNi5UPkLiWHzNgY1GIRH
# 29wb0f2y1BzFa/ZcUlFdEtsluq9QBXpsxREdcu+N+VLEhReTwDwV2xo3xwgVGD94
# q0W29R6HXtqPnhZyacaue7e3PmriLq0CAwEAAaOCAd0wggHZMBIGCSsGAQQBgjcV
# AQQFAgMBAAEwIwYJKwYBBAGCNxUCBBYEFCqnUv5kxJq+gpE8RjUpzxD/LwTuMB0G
# A1UdDgQWBBSfpxVdAF5iXYP05dJlpxtTNRnpcjBcBgNVHSAEVTBTMFEGDCsGAQQB
# gjdMg30BATBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20v
# cGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wEwYDVR0lBAwwCgYIKwYBBQUHAwgw
# GQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB
# /wQFMAMBAf8wHwYDVR0jBBgwFoAU1fZWy4/oolxiaNE9lJBb186aGMQwVgYDVR0f
# BE8wTTBLoEmgR4ZFaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJv
# ZHVjdHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3JsMFoGCCsGAQUFBwEBBE4w
# TDBKBggrBgEFBQcwAoY+aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0
# cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcnQwDQYJKoZIhvcNAQELBQADggIB
# AJ1VffwqreEsH2cBMSRb4Z5yS/ypb+pcFLY+TkdkeLEGk5c9MTO1OdfCcTY/2mRs
# fNB1OW27DzHkwo/7bNGhlBgi7ulmZzpTTd2YurYeeNg2LpypglYAA7AFvonoaeC6
# Ce5732pvvinLbtg/SHUB2RjebYIM9W0jVOR4U3UkV7ndn/OOPcbzaN9l9qRWqveV
# tihVJ9AkvUCgvxm2EhIRXT0n4ECWOKz3+SmJw7wXsFSFQrP8DJ6LGYnn8AtqgcKB
# GUIZUnWKNsIdw2FzLixre24/LAl4FOmRsqlb30mjdAy87JGA0j3mSj5mO0+7hvoy
# GtmW9I/2kQH2zsZ0/fZMcm8Qq3UwxTSwethQ/gpY3UA8x1RtnWN0SCyxTkctwRQE
# cb9k+SS+c23Kjgm9swFXSVRk2XPXfx5bRAGOWhmRaw2fpCjcZxkoJLo4S5pu+yFU
# a2pFEUep8beuyOiJXk+d0tBMdrVXVAmxaQFEfnyhYWxz/gq77EFmPWn9y8FBSX5+
# k77L+DvktxW/tM4+pTFRhLy/AsGConsXHRWJjXD+57XQKBqJC4822rpM+Zv/Cuk0
# +CQ1ZyvgDbjmjJnW4SLq8CdCPSWU5nR0W2rRnj7tfqAxM328y+l7vzhwRNGQ8cir
# Ooo6CGJ/2XBjU02N7oJtpQUQwXEGahC0HVUzWLOhcGbyoYIC1DCCAj0CAQEwggEA
# oYHYpIHVMIHSMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
# A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS0w
# KwYDVQQLEyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25zIExpbWl0ZWQxJjAk
# BgNVBAsTHVRoYWxlcyBUU1MgRVNOOjhENDEtNEJGNy1CM0I3MSUwIwYDVQQDExxN
# aWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNloiMKAQEwBwYFKw4DAhoDFQA9iJe7
# w5FDiG8py4TsYrQI6DFaeqCBgzCBgKR+MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQI
# EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv
# ZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBD
# QSAyMDEwMA0GCSqGSIb3DQEBBQUAAgUA6gok1TAiGA8yMDI0MDYwNTA3NDIxM1oY
# DzIwMjQwNjA2MDc0MjEzWjB0MDoGCisGAQQBhFkKBAExLDAqMAoCBQDqCiTVAgEA
# MAcCAQACAgTDMAcCAQACAiiPMAoCBQDqC3ZVAgEAMDYGCisGAQQBhFkKBAIxKDAm
# MAwGCisGAQQBhFkKAwKgCjAIAgEAAgMHoSChCjAIAgEAAgMBhqAwDQYJKoZIhvcN
# AQEFBQADgYEAV2mQWE5pIXcpK6KoKFzEblnQRr+FZVxZPmlBAl82qpKOAteUlQf4
# VJWL8/MKFNfXoizqyU2Ab/GouFY4HWk2vw1ZGiDiN4XCUj9sR6fn91RPLbnEN+Gn
# cZInUofCu1mxmGaf0Pe8kWmbH0XSnKZCpEml2464ravjpSXpMKDeT4UxggQNMIIE
# CQIBATCBkzB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
# A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYw
# JAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMAITMwAAAePfvZua
# HGiDIgABAAAB4zANBglghkgBZQMEAgEFAKCCAUowGgYJKoZIhvcNAQkDMQ0GCyqG
# SIb3DQEJEAEEMC8GCSqGSIb3DQEJBDEiBCDsm2ZAdJHyUyr53WaljO5fVjmJnF0B
# YqToDMvZfRP2NjCB+gYLKoZIhvcNAQkQAi8xgeowgecwgeQwgb0EIDPUI6vlsP5k
# 90SBCNa9wha4MlxBt2Crw12PTHIy5iYqMIGYMIGApH4wfDELMAkGA1UEBhMCVVMx
# EzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoT
# FU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUt
# U3RhbXAgUENBIDIwMTACEzMAAAHj372bmhxogyIAAQAAAeMwIgQgQ4S5BC10qteE
# v26u2S+fzBTGpUBr/i0XVDqO8O/lLZcwDQYJKoZIhvcNAQELBQAEggIAPxlfK/fn
# gj5FJIy4p8pTw0ge4724lTiQ7fZTz3qwA6ge7gVOlCVjAdWBj1G5xH3iJPMZD47b
# 9jPxmMIfd+q7o+9dNmBzDlJtaBwcroUgX3JXb9K1sxMAJ9mmrzcoXjm3cMbjy2QI
# os1ScWbae9UngzCXIbr8EAYYAKkaUL3QiSWCmx6SqI4IDeYa3ahYyfoxoOIbtXm1
# OrEBNtHnWvr7shZsOg60ECTYVO91SYUnXBBDmiT/3o3g5KumeyjonmpTOk9EJXBU
# wVvsCGMthYaRb3GEC8bs9IlEE0A3IyQZX8cvXLt9TmS+aE82tyY6Ikks3Uq/kpck
# fR7W0xRAwDNkUELvKTOLwpF+/JVXqKaT5mIuxZhCZ7deEu9DsbEkXZ9GH/nSG877
# MZh3ZMpnxAPOaMYDvsVQwCU1gmaxW3x1ccT7B5S+cyJzUmgbC3rhR1Zt3xsm8vc8
# nScZkNR5ZDFCnw8vvTMse/IRDt6sJAhOKunsdKFCND+hV4ttuqV+lQxRTW/8+vsb
# DuAzB3ficLYirQA2i88B2y8eo3gMlEQVeEilSp0yAJNyqrUpHRVZ6lXoIAV68BXh
# lsNLFYJnHuhEXkf9LpfUVbrK5BZIRchPG33NgFeYN+/uZm8hqwOUOCfJKNiQmv0N
# fdQAIs26Sgxm65eme2ud0fmKfUEVYyVUMHo=
# SIG # End signature block