Functions_v7/Import-XurrentData.ps1

function Import-XurrentData
{
<#
.SYNOPSIS
    Imports data into Xurrent via the asynchronous import mechanism of the API.
 
.DESCRIPTION
    Converts a PowerShell object array into a CSV file and uploads it to the Xurrent
    API endpoint /import. Waits asynchronously for the import to complete and outputs
    error details if the import fails.
 
    With -NoUpload, the CSV file is only created and returned without uploading.
 
.PARAMETER Environment
    The Xurrent connection name. Mandatory. Supports tab completion.
 
.PARAMETER Type
    The target data type (XurrentDataTypes enum). Mandatory.
 
.PARAMETER InputObject
    The array of objects to be imported. Mandatory.
 
.PARAMETER Path
    Directory for the temporary CSV file. Default: $env:TEMP.
 
.PARAMETER NoUpload
    When set, the CSV file is created but not uploaded. Useful for debugging.
    Default: $script:ImportNoUpload (configurable via Set-XurrentAPITools).
 
.OUTPUTS
    Nothing (on successful import) or String (file path when -NoUpload is set).
 
.EXAMPLE
    Import-XurrentData -Environment $env -Type people -InputObject $peopleArray
 
    Imports an array of people objects into Xurrent.
 
.EXAMPLE
    Import-XurrentData -Environment $env -Type services -InputObject $data -NoUpload
 
    Creates only the CSV file without uploading it.
 
.NOTES
    Alias: Import-4meData
    Requires PowerShell 7.2+.
    The import polls every 10 seconds until completion.
    Import results (successes/errors) are written via Write-Information.
#>

    [CmdletBinding()]
    param (
        [Parameter(Mandatory = $true)]
        [ValidateScript({ $null -ne $script:XurrentAuth.$_ })]
        [ArgumentCompleter({
                param ($cmd,
                    $param,
                    $wordToComplete)
                $script:XurrentAuth.keys -like "$wordToComplete*"
            })]
        [string]$Environment,
        [Parameter(Mandatory = $true)]
        [XurrentDataTypes]$Type,
        [Parameter(Mandatory = $true)]
        [System.Array]$InputObject,
        [ValidateScript({ (Get-Item $_) -is [System.IO.DirectoryInfo] })]
        [IO.FileInfo]$Path = $env:TEMP,
        [switch]$NoUpload = $script:ImportNoUpload
    )
    Write-Verbose -Message "import $($Type)"
    $Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding $False
    $FilePath = Join-Path -Path $Path -ChildPath "import_$($Type).csv"
    Write-Verbose -Message "create importfile $($FilePath)"
    [System.IO.File]::WriteAllLines($FilePath, ($InputObject | ConvertTo-Csv -NoTypeInformation), $Utf8NoBomEncoding)
    if ($NoUpload -eq $true)
    {
        return $FilePath
    }
    
    Write-Verbose -Message "upload $($FilePath)"
    $body = @{
        type = $Type
        file = Get-Item $FilePath
    }
    $token = Invoke-RestMethod -Method Post -Uri "$($script:XurrentAuth.$Environment.URL)/import" -Headers $script:XurrentAuth.$Environment.header -Form $body -ErrorAction Stop -Verbose:$false
    
    $Import = Invoke-RestMethod -Method get -Uri "$($script:XurrentAuth.$Environment.URL)/import/$($token.token)" -Headers $script:XurrentAuth.$Environment.header -Verbose:$false
    while ($Import.state -eq "queued" -or $Import.state -eq "processing")
    {
        $Import = Invoke-RestMethod -Method get -Uri "$($script:XurrentAuth.$Environment.URL)/import/$($token.token)" -Headers $script:XurrentAuth.$Environment.header -Verbose:$false
        if ($Import.state -eq "error")
        {
            throw "$($Import.message)"
        }
        Start-Sleep -Seconds 10
    }
    Write-Information -Message "$($Type) import result: $($Import.results -join ' ')"
    if ($Import.results.errors -ne 0)
    {
        Write-ERROR -Message "$($Import.results.errors) errors occurred. Logfile: $($Import.logfile)"
    }
    return
}
# SIG # Begin signature block
# MIIcBQYJKoZIhvcNAQcCoIIb9jCCG/ICAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAEYFlakz6H/tsR
# Jj091m4FE0ukyysTuaq0pSe+YfKB4KCCFlcwggMZMIICAaADAgECAhBTsDLlq7ih
# jUMiaCh1sMC2MA0GCSqGSIb3DQEBBQUAMBQxEjAQBgNVBAMMCVJvbWFuIEVuejAe
# Fw0yNjA3MjgxOTE4MjRaFw0yNzA3MjgxOTM4MjRaMBQxEjAQBgNVBAMMCVJvbWFu
# IEVuejCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAO4pOygmDC1kxUIZ
# /O1Oe/BvnKjnfvzmQrvVKcWt74bijqJn3yFr6ZNEg/M95vDmEWIEoMg4bHiLkwVX
# rundAwMDbTo6UOeioucldqhx8Fj6viN9Z5W/PoKowb7nIFMixFCFEyQ0eh9bOEZO
# /PMUYzxwd+3fADG83Q6tQyjnOPOs0aNpL0o/f4/MEcmIkzdMd2i/jIzxxpBqZtGW
# PIPkqtzhQWJ395Re8Lxvxs9olR3hVShKjAlFcM4uig3YmHeC4Jmlsz95QCvWb1XU
# Dg9D1dthHTy3lzU8cY7wsuYaaQ7b59Kne7nme8YWAO7Ln5AXuGr5SKJbE1vJcE7+
# sk/GN30CAwEAAaNnMGUwDgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUF
# BwMDMB8GA1UdIwQYMBaAFOwMoMvLXATUqlKKsXyxtAqVvg8XMB0GA1UdDgQWBBSR
# foegWMSQ38KCL4FxM1s+xM2GkzANBgkqhkiG9w0BAQUFAAOCAQEApzbbPh0Dplls
# IxgO5monL2F/YZrfpGa3onb1Jr7J9fiWDJpmbCiILjLQgis3DesvfHMbqdgczOYh
# VUZ+9bBFbuQFp8FviRq1+XM2KPRtDoO5WOHdr1+UexiuCetPR61gh/Gksob6VQgF
# jfyFcPDwzJ+FoO5MGI/7RWV1BHqJy/cLyIAkpaGFjbFR6Jk9PjBuC38atQ54UFkS
# eZf3N4jqJ34nPme1QWpiqx8XVMf21KH32HBUl8BY8V03zUmxCb0Lye6uGRF5JM8y
# HIHQ5myZCZQYsEztsj6d4RJmGJ+dbZLz0ot/mnXiR9ck+sLsDR8oVjqboP73YX1G
# 8yyTvxF88jCCBY0wggR1oAMCAQICEA6bGI750C3n79tQ4ghAGFowDQYJKoZIhvcN
# AQEMBQAwZTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcG
# A1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTEkMCIGA1UEAxMbRGlnaUNlcnQgQXNzdXJl
# ZCBJRCBSb290IENBMB4XDTIyMDgwMTAwMDAwMFoXDTMxMTEwOTIzNTk1OVowYjEL
# MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
# LmRpZ2ljZXJ0LmNvbTEhMB8GA1UEAxMYRGlnaUNlcnQgVHJ1c3RlZCBSb290IEc0
# MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAv+aQc2jeu+RdSjwwIjBp
# M+zCpyUuySE98orYWcLhKac9WKt2ms2uexuEDcQwH/MbpDgW61bGl20dq7J58soR
# 0uRf1gU8Ug9SH8aeFaV+vp+pVxZZVXKvaJNwwrK6dZlqczKU0RBEEC7fgvMHhOZ0
# O21x4i0MG+4g1ckgHWMpLc7sXk7Ik/ghYZs06wXGXuxbGrzryc/NrDRAX7F6Zu53
# yEioZldXn1RYjgwrt0+nMNlW7sp7XeOtyU9e5TXnMcvak17cjo+A2raRmECQecN4
# x7axxLVqGDgDEI3Y1DekLgV9iPWCPhCRcKtVgkEy19sEcypukQF8IUzUvK4bA3Vd
# eGbZOjFEmjNAvwjXWkmkwuapoGfdpCe8oU85tRFYF/ckXEaPZPfBaYh2mHY9WV1C
# doeJl2l6SPDgohIbZpp0yt5LHucOY67m1O+SkjqePdwA5EUlibaaRBkrfsCUtNJh
# besz2cXfSwQAzH0clcOP9yGyshG3u3/y1YxwLEFgqrFjGESVGnZifvaAsPvoZKYz
# 0YkH4b235kOkGLimdwHhD5QMIR2yVCkliWzlDlJRR3S+Jqy2QXXeeqxfjT/JvNNB
# ERJb5RBQ6zHFynIWIgnffEx1P2PsIV/EIFFrb7GrhotPwtZFX50g/KEexcCPorF+
# CiaZ9eRpL5gdLfXZqbId5RsCAwEAAaOCATowggE2MA8GA1UdEwEB/wQFMAMBAf8w
# HQYDVR0OBBYEFOzX44LScV1kTN8uZz/nupiuHA9PMB8GA1UdIwQYMBaAFEXroq/0
# ksuCMS1Ri6enIZ3zbcgPMA4GA1UdDwEB/wQEAwIBhjB5BggrBgEFBQcBAQRtMGsw
# JAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBDBggrBgEFBQcw
# AoY3aHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNzdXJlZElE
# Um9vdENBLmNydDBFBgNVHR8EPjA8MDqgOKA2hjRodHRwOi8vY3JsMy5kaWdpY2Vy
# dC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3JsMBEGA1UdIAQKMAgwBgYE
# VR0gADANBgkqhkiG9w0BAQwFAAOCAQEAcKC/Q1xV5zhfoKN0Gz22Ftf3v1cHvZqs
# oYcs7IVeqRq7IviHGmlUIu2kiHdtvRoU9BNKei8ttzjv9P+Aufih9/Jy3iS8UgPI
# TtAq3votVs/59PesMHqai7Je1M/RQ0SbQyHrlnKhSLSZy51PpwYDE3cnRNTnf+hZ
# qPC/Lwum6fI0POz3A8eHqNJMQBk1RmppVLC4oVaO7KTVPeix3P0c2PR3WlxUjG/v
# oVA9/HYJaISfb8rbII01YBwCA8sgsKxYoA5AY8WYIsGyWfVVa88nq2x2zm8jLfR+
# cWojayL/ErhULSd+2DrZ8LaHlv1b0VysGMNNn3O3AamfV6peKOK5lDCCBrQwggSc
# oAMCAQICEA3HrFcF/yGZLkBDIgw6SYYwDQYJKoZIhvcNAQELBQAwYjELMAkGA1UE
# BhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2lj
# ZXJ0LmNvbTEhMB8GA1UEAxMYRGlnaUNlcnQgVHJ1c3RlZCBSb290IEc0MB4XDTI1
# MDUwNzAwMDAwMFoXDTM4MDExNDIzNTk1OVowaTELMAkGA1UEBhMCVVMxFzAVBgNV
# BAoTDkRpZ2lDZXJ0LCBJbmMuMUEwPwYDVQQDEzhEaWdpQ2VydCBUcnVzdGVkIEc0
# IFRpbWVTdGFtcGluZyBSU0E0MDk2IFNIQTI1NiAyMDI1IENBMTCCAiIwDQYJKoZI
# hvcNAQEBBQADggIPADCCAgoCggIBALR4MdMKmEFyvjxGwBysddujRmh0tFEXnU2t
# jQ2UtZmWgyxU7UNqEY81FzJsQqr5G7A6c+Gh/qm8Xi4aPCOo2N8S9SLrC6Kbltqn
# 7SWCWgzbNfiR+2fkHUiljNOqnIVD/gG3SYDEAd4dg2dDGpeZGKe+42DFUF0mR/vt
# La4+gKPsYfwEu7EEbkC9+0F2w4QJLVSTEG8yAR2CQWIM1iI5PHg62IVwxKSpO0Xa
# F9DPfNBKS7Zazch8NF5vp7eaZ2CVNxpqumzTCNSOxm+SAWSuIr21Qomb+zzQWKhx
# KTVVgtmUPAW35xUUFREmDrMxSNlr/NsJyUXzdtFUUt4aS4CEeIY8y9IaaGBpPNXK
# FifinT7zL2gdFpBP9qh8SdLnEut/GcalNeJQ55IuwnKCgs+nrpuQNfVmUB5KlCX3
# ZA4x5HHKS+rqBvKWxdCyQEEGcbLe1b8Aw4wJkhU1JrPsFfxW1gaou30yZ46t4Y9F
# 20HHfIY4/6vHespYMQmUiote8ladjS/nJ0+k6MvqzfpzPDOy5y6gqztiT96Fv/9b
# H7mQyogxG9QEPHrPV6/7umw052AkyiLA6tQbZl1KhBtTasySkuJDpsZGKdlsjg4u
# 70EwgWbVRSX1Wd4+zoFpp4Ra+MlKM2baoD6x0VR4RjSpWM8o5a6D8bpfm4CLKczs
# G7ZrIGNTAgMBAAGjggFdMIIBWTASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQW
# BBTvb1NK6eQGfHrK4pBW9i/USezLTjAfBgNVHSMEGDAWgBTs1+OC0nFdZEzfLmc/
# 57qYrhwPTzAOBgNVHQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUHAwgwdwYI
# KwYBBQUHAQEEazBpMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5j
# b20wQQYIKwYBBQUHMAKGNWh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdp
# Q2VydFRydXN0ZWRSb290RzQuY3J0MEMGA1UdHwQ8MDowOKA2oDSGMmh0dHA6Ly9j
# cmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3JsMCAGA1Ud
# IAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATANBgkqhkiG9w0BAQsFAAOCAgEA
# F877FoAc/gc9EXZxML2+C8i1NKZ/zdCHxYgaMH9Pw5tcBnPw6O6FTGNpoV2V4wzS
# UGvI9NAzaoQk97frPBtIj+ZLzdp+yXdhOP4hCFATuNT+ReOPK0mCefSG+tXqGpYZ
# 3essBS3q8nL2UwM+NMvEuBd/2vmdYxDCvwzJv2sRUoKEfJ+nN57mQfQXwcAEGCvR
# R2qKtntujB71WPYAgwPyWLKu6RnaID/B0ba2H3LUiwDRAXx1Neq9ydOal95CHfmT
# nM4I+ZI2rVQfjXQA1WSjjf4J2a7jLzWGNqNX+DF0SQzHU0pTi4dBwp9nEC8EAqox
# W6q17r0z0noDjs6+BFo+z7bKSBwZXTRNivYuve3L2oiKNqetRHdqfMTCW/NmKLJ9
# M+MtucVGyOxiDf06VXxyKkOirv6o02OoXN4bFzK0vlNMsvhlqgF2puE6FndlENSm
# E+9JGYxOGLS/D284NHNboDGcmWXfwXRy4kbu4QFhOm0xJuF2EZAOk5eCkhSxZON3
# rGlHqhpB/8MluDezooIs8CVnrpHMiD2wL40mm53+/j7tFaxYKIqL0Q4ssd8xHZnI
# n/7GELH3IdvG2XlM9q7WP/UwgOkw/HQtyRN62JK4S1C8uw3PdBunvAZapsiI5YKd
# vlarEvf8EA+8hcpSM9LHJmyrxaFtoza2zNaQ9k+5t1wwggbtMIIE1aADAgECAhAK
# gO8YS43xBYLRxHanlXRoMA0GCSqGSIb3DQEBCwUAMGkxCzAJBgNVBAYTAlVTMRcw
# FQYDVQQKEw5EaWdpQ2VydCwgSW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3Rl
# ZCBHNCBUaW1lU3RhbXBpbmcgUlNBNDA5NiBTSEEyNTYgMjAyNSBDQTEwHhcNMjUw
# NjA0MDAwMDAwWhcNMzYwOTAzMjM1OTU5WjBjMQswCQYDVQQGEwJVUzEXMBUGA1UE
# ChMORGlnaUNlcnQsIEluYy4xOzA5BgNVBAMTMkRpZ2lDZXJ0IFNIQTI1NiBSU0E0
# MDk2IFRpbWVzdGFtcCBSZXNwb25kZXIgMjAyNSAxMIICIjANBgkqhkiG9w0BAQEF
# AAOCAg8AMIICCgKCAgEA0EasLRLGntDqrmBWsytXum9R/4ZwCgHfyjfMGUIwYzKo
# md8U1nH7C8Dr0cVMF3BsfAFI54um8+dnxk36+jx0Tb+k+87H9WPxNyFPJIDZHhAq
# lUPt281mHrBbZHqRK71Em3/hCGC5KyyneqiZ7syvFXJ9A72wzHpkBaMUNg7MOLxI
# 6E9RaUueHTQKWXymOtRwJXcrcTTPPT2V1D/+cFllESviH8YjoPFvZSjKs3SKO1QN
# UdFd2adw44wDcKgH+JRJE5Qg0NP3yiSyi5MxgU6cehGHr7zou1znOM8odbkqoK+l
# J25LCHBSai25CFyD23DZgPfDrJJJK77epTwMP6eKA0kWa3osAe8fcpK40uhktzUd
# /Yk0xUvhDU6lvJukx7jphx40DQt82yepyekl4i0r8OEps/FNO4ahfvAk12hE5FVs
# 9HVVWcO5J4dVmVzix4A77p3awLbr89A90/nWGjXMGn7FQhmSlIUDy9Z2hSgctaep
# ZTd0ILIUbWuhKuAeNIeWrzHKYueMJtItnj2Q+aTyLLKLM0MheP/9w6CtjuuVHJOV
# oIJ/DtpJRE7Ce7vMRHoRon4CWIvuiNN1Lk9Y+xZ66lazs2kKFSTnnkrT3pXWETTJ
# khd76CIDBbTRofOsNyEhzZtCGmnQigpFHti58CSmvEyJcAlDVcKacJ+A9/z7eacC
# AwEAAaOCAZUwggGRMAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFOQ7/PIx7f391/OR
# cWMZUEPPYYzoMB8GA1UdIwQYMBaAFO9vU0rp5AZ8esrikFb2L9RJ7MtOMA4GA1Ud
# DwEB/wQEAwIHgDAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDCBlQYIKwYBBQUHAQEE
# gYgwgYUwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBdBggr
# BgEFBQcwAoZRaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0VHJ1
# c3RlZEc0VGltZVN0YW1waW5nUlNBNDA5NlNIQTI1NjIwMjVDQTEuY3J0MF8GA1Ud
# HwRYMFYwVKBSoFCGTmh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRy
# dXN0ZWRHNFRpbWVTdGFtcGluZ1JTQTQwOTZTSEEyNTYyMDI1Q0ExLmNybDAgBgNV
# HSAEGTAXMAgGBmeBDAEEAjALBglghkgBhv1sBwEwDQYJKoZIhvcNAQELBQADggIB
# AGUqrfEcJwS5rmBB7NEIRJ5jQHIh+OT2Ik/bNYulCrVvhREafBYF0RkP2AGr181o
# 2YWPoSHz9iZEN/FPsLSTwVQWo2H62yGBvg7ouCODwrx6ULj6hYKqdT8wv2UV+Kbz
# /3ImZlJ7YXwBD9R0oU62PtgxOao872bOySCILdBghQ/ZLcdC8cbUUO75ZSpbh1oi
# pOhcUT8lD8QAGB9lctZTTOJM3pHfKBAEcxQFoHlt2s9sXoxFizTeHihsQyfFg5fx
# UFEp7W42fNBVN4ueLaceRf9Cq9ec1v5iQMWTFQa0xNqItH3CPFTG7aEQJmmrJTV3
# Qhtfparz+BW60OiMEgV5GWoBy4RVPRwqxv7Mk0Sy4QHs7v9y69NBqycz0BZwhB9W
# OfOu/CIJnzkQTwtSSpGGhLdjnQ4eBpjtP+XB3pQCtv4E5UCSDag6+iX8MmB10nfl
# dPF9SVD7weCC3yXZi/uuhqdwkgVxuiMFzGVFwYbQsiGnoa9F5AaAyBjFBtXVLcKt
# apnMG3VH3EmAp/jsJ3FVF3+d1SVDTmjFjLbNFZUWMXuZyvgLfgyPehwJVxwC+UpX
# 2MSey2ueIu9THFVkT+um1vshETaWyQo8gmBto/m3acaP9QsuLj3FNwFlTxq25+T4
# QwX9xa6ILs84ZPvmpovq90K8eWyG2N01c4IhSOxqt81nMYIFBDCCBQACAQEwKDAU
# MRIwEAYDVQQDDAlSb21hbiBFbnoCEFOwMuWruKGNQyJoKHWwwLYwDQYJYIZIAWUD
# BAIBBQCggYQwGAYKKwYBBAGCNwIBDDEKMAigAoAAoQKAADAZBgkqhkiG9w0BCQMx
# DAYKKwYBBAGCNwIBBDAcBgorBgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkq
# hkiG9w0BCQQxIgQgqWCfCf9N1ohrXdrCCwnGHs3fZfTp8Lu/bdmqyWy9NBwwDQYJ
# KoZIhvcNAQEBBQAEggEA02YhxmHYn8gKVwpsIblRng8hUzi5Lu9l26VYZ29jyuli
# /Ch82w8suQbIK43S1AAVQgQ4StgMhv+VOwcdf7zNlbt3g/NkAxWHPhEzEY6H3dwz
# jOVZSUdywTAbyST0Jd+8KHYo+urOEnxy063yDvdjEFDFtXFk5a/jF8av6kMhx85D
# Pp2A7yfXLN+iEnimw44OLnuwTo/0z/YHLJCYeSgXiWJgehkD065KMqkxLKCeMNJy
# 7idRkWMY3ekH0sUiswuLvywPNYnpHWqzigzpu8vsDufUMiv9Zc3Yu3AsTciS63p7
# msXelbBgi4ThTGwOFtKfDkQh/YhRLUSuRgLRL1cE+qGCAyYwggMiBgkqhkiG9w0B
# CQYxggMTMIIDDwIBATB9MGkxCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5EaWdpQ2Vy
# dCwgSW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1c3RlZCBHNCBUaW1lU3RhbXBp
# bmcgUlNBNDA5NiBTSEEyNTYgMjAyNSBDQTECEAqA7xhLjfEFgtHEdqeVdGgwDQYJ
# YIZIAWUDBAIBBQCgaTAYBgkqhkiG9w0BCQMxCwYJKoZIhvcNAQcBMBwGCSqGSIb3
# DQEJBTEPFw0yNjA3MjgxOTMzNTdaMC8GCSqGSIb3DQEJBDEiBCD5mfkUmW5OUW6E
# j8D64IAqBGbvgiHIqfwIUBIlsvUk6TANBgkqhkiG9w0BAQEFAASCAgBwVYumt52Q
# krzLh9ScOBmQkweT4hxc5p+ZnSydIJFXqWNlsrUdBrYoiIElaydF3WIDizv+X0FS
# IDeflOm8iTLm9a3/iLpYLrKXgRSXqxFXnOaOR6+j1P+SlGTC+yJWquk6qk5+spwb
# pI8FzzqFQ4ajDcX9ZAdUT9u4uYt1rKqaWfF9+Les0pfmD7hV/xCTKpBEe+r3Zq2/
# 7R5+etrHxp8pSqDtB96fdIx6s+Z2zh/jtEcYNi7ypdh/HeUv9w118gPfa4SlVrS5
# e6ZwDi0OiZIbxEYwmsv2+w8C97WvPiOAF3thKzNpH9LA28N/lC0Dv+C2aMhV7BGH
# +gZMwZw93vuhNNbc7BVghVaFwzdDMrFxMwmXEADxl8yfM/n6JhdkGljqoecVZkWm
# sdLlEbLixfv9/h485/1pflMJlEavco6VB6Ko6bSKiCkTAS03Yj6ORKmu+Z5nYb6R
# v31cSHmDgT1N0mZ2M78Cy6ZIizA6LRhz+fwySz/+A0+KqxSYwpk1/8CzCUWoYPnw
# 1Jbfwe6D1WA0mRkuAHN2BltCHlkx7Y/mBzsWDeirU7Xc+tMTz3KS2bK+7OPp0EvX
# Yd6VTT4TROnWf39DpsU9VPexyV721iRC8YzNsprvMgbJ1Tv59bHJfgM283Kc38t/
# zpYeOTX49GVu9Lti/cglED4OpV9DKR7uFA==
# SIG # End signature block