if ([string]::IsNullOrEmpty($Env:INTELLIJ_TERMINAL_COMMAND_BLOCKS_REWORKED)) {
  return
}

# Do not source the shell integration if shell is launched in not "FullLanguage" mode
if ($ExecutionContext.SessionState.LanguageMode -ne "FullLanguage") {
	return
}

# We require PSReadLine module for our integration, so if it is not loaded for some reason, we can't continue.
if ((Get-Module -Name PSReadLine) -eq $null) {
  return
}

$Global:__JetBrainsIntellijState = @{
  IsInitialized = $false
	IsCommandRunning = $false
	OriginalPSConsoleHostReadLine = $function:PSConsoleHostReadLine
}

function Global:__JetBrainsIntellijOSC([string]$body) {
  return "$([char]0x1B)]1341;$body`a"
}

function Global:__JetBrainsIntellijEncode([string]$value) {
  $Bytes = [System.Text.Encoding]::UTF8.GetBytes($value)
  return [System.BitConverter]::ToString($Bytes).Replace("-", "")
}

$Global:__JetBrainsIntellijTerminalInitialized=$false

if (Test-Path Function:\Prompt) {
  Rename-Item Function:\Prompt Global:__JetBrainsIntellijOriginalPrompt
}
else {
  function Global:__JetBrainsIntellijOriginalPrompt() { return "" }
}

function Global:Prompt() {
  $Success = $Global:?

  $Result = ""
  $CurrentDirectoryParam = if ($pwd.Provider.Name -eq 'FileSystem') {
    ";current_directory=$(Global:__JetBrainsIntellijEncode $pwd.ProviderPath)"
  } else {
    ""
  }
  if ($Global:__JetBrainsIntellijState.IsInitialized -eq $false) {
    $Global:__JetBrainsIntellijState.IsInitialized = $true
    $Result += Global:__JetBrainsIntellijOSC "initialized$CurrentDirectoryParam"
    $Result += Global:__JetBrainsIntellijGetAliases
  }
  elseif ($Global:__JetBrainsIntellijState.IsCommandRunning -eq $true){
    $Global:__JetBrainsIntellijState.IsCommandRunning = $false
    $ExitCode = if ($Success) { 0 } else { 1 }
    $Result += Global:__JetBrainsIntellijOSC "command_finished;exit_code=$ExitCode$CurrentDirectoryParam"
  }

  $Result += Global:__JetBrainsIntellijOSC "prompt_started"
  # It is a hack to restore the state of $Global:? variable
  # So, the original prompt logic will see the real state.
  # The written error won't be shown anywhere thanks to `-ErrorAction ignore`.
  if ($Success -eq $false) {
  	Write-Error "error" -ErrorAction ignore
  }
  $Result += __JetBrainsIntellijOriginalPrompt
  $Result += Global:__JetBrainsIntellijOSC "prompt_finished"

  return $Result
}

function Global:PSConsoleHostReadLine {
  $Command = $Global:__JetBrainsIntellijState.OriginalPSConsoleHostReadLine.Invoke()
  # Do not consider pressing enter without entering the command or pressing Ctrl+C as "command_started"
  if ($Command -ne "") {
    $Global:__JetBrainsIntellijState.IsCommandRunning = $true
    $OSC = Global:__JetBrainsIntellijOSC "command_started;command=$(Global:__JetBrainsIntellijEncode $Command)"
    [Console]::Write($OSC)
  }

  return $Command
}

function Global:__JetBrainsIntellijGetAliases {
  $Aliases = Get-Alias | ForEach-Object { [PSCustomObject]@{ name = $_.Name; definition = $_.Definition } }
  $AliasesJson = $Aliases | ConvertTo-Json -Compress
  $OSC = Global:__JetBrainsIntellijOSC "aliases_received;result=$(Global:__JetBrainsIntellijEncode $AliasesJson)"
  return $OSC
}

function Global:__JetBrainsIntellijSendCompletions {
	$CommandText = ""
	$CursorIndex = 0
	[Microsoft.PowerShell.PSConsoleReadLine]::GetBufferState([ref]$CommandText, [ref]$CursorIndex)

  $ResultObject = $null
	if ($CommandText.Length -eq 0) {
	  # TabExpansion2 will throw if command text is empty, so just return an empty result.
	  $ResultObject = [PSCustomObject]@{
      CommandText = ""
      CursorIndex = 0
      ReplacementIndex = 0
      ReplacementLength = 0
      CompletionMatches = @()
    }
	}
	else {
	  $Completions = $null
  	try {
  	  $Completions = TabExpansion2 -inputScript $CommandText -cursorColumn $CursorIndex
  	}
  	catch {
  	  # Catch all possible exceptions, just in case.
  	  # Because failure here will print an error to the terminal screen.
  	}
    if ($Completions -ne $null) {
      $ResultObject = [PSCustomObject]@{
        CommandText = $CommandText
        CursorIndex = $CursorIndex
        ReplacementIndex = $Completions.ReplacementIndex
        ReplacementLength = $Completions.ReplacementLength
        CompletionMatches = $Completions.CompletionMatches
      }
    }
    else {
      $ResultObject = [PSCustomObject]@{
        CommandText = $CommandText
        CursorIndex = $CursorIndex
        ReplacementIndex = $CursorIndex
        ReplacementLength = 0
        CompletionMatches = @()
      }
    }
	}

  $ResultJson = $ResultObject | ConvertTo-Json -Compress
  $ResultOSC = Global:__JetBrainsIntellijOSC "completion_finished;result=$(Global:__JetBrainsIntellijEncode $ResultJson)"
  Write-Host -NoNewLine $ResultOSC
}

Set-PSReadLineKeyHandler -Chord 'F12,e' -ScriptBlock {
	Global:__JetBrainsIntellijSendCompletions
}
# SIG # Begin signature block
# MIIpoAYJKoZIhvcNAQcCoIIpkTCCKY0CAQExDTALBglghkgBZQMEAgEweQYKKwYB
# BAGCNwIBBKBrMGkwNAYKKwYBBAGCNwIBHjAmAgMBAAAEEB/MO2BZSwhOtyTSxil+
# 81ECAQACAQACAQACAQACAQAwMTANBglghkgBZQMEAgEFAAQgkX5gfotQjKzvzOYl
# Cp3qE2ldf27XauzX+HD5FyFVZFiggg4JMIIGtzCCBJ+gAwIBAgIQB2Asv251eUAD
# glbwrYde1jANBgkqhkiG9w0BAQwFADBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMM
# RGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQD
# ExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwHhcNMjMwMjE0MDAwMDAwWhcNMzMw
# MjEzMjM1OTU5WjBwMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIElu
# Yy4xSDBGBgNVBAMTP0RpZ2lDZXJ0IFRydXN0ZWQgRzQgQ29kZSBTaWduaW5nIEV1
# cm9wZSBSU0E0MDk2IFNIQTM4NCAyMDIzIENBMTCCAiIwDQYJKoZIhvcNAQEBBQAD
# ggIPADCCAgoCggIBAK/M63p6cQzFK8iIb4EA1jkqmULJtwPvV8p5XVaj1AnSeUBg
# Mc3z+9lc+6KHxZnts0e1iJmE5aZRlPRl5/Ku7NlvBVtZbvmxdfm0ku6RCtxOB+AG
# mexDPu8CJ9Q9O8dqISPY4kavx1xXR9JoxTq0SU51fiEu+63lt0F2VRb/YHL1B3/5
# Fx/0qIYcjudZeQEByQrRE4AOpZO/aZJei6jT3PBK++nqWnCWYP0sfGSW9gAwuO7M
# 6FdHLU5yLWl89p6OWmM3jSGgjNz9OYcYD+giEUofoYvHD6Utu+SdbWAW7L33dhQ6
# 6k74MU2bDnD0AXlPFUy+qOf6PhLYGnmKym12dwjRkx2g1NTC9skPb36jtXG+jjaV
# pVsS0jlL1UiB0iRSBcttj56RBHYOh2TkiTjXCc2PEW16ewhIaEGSkG6XMNiqb7Gy
# 8mMZAJo5YXmrw3Ed3mGo/to2DAhXf2bSaKs+1+3nY7FZ0ra1kerY4pJwp83n6ax8
# AtNm55BJYxUZ482yvP4dIj6HjCabb6S+PXStO8OiYusP56K70ixaHL5KDVt8HfZI
# z3sl89Hc2TW8Ap4th5IcMQLJkHnqHOCZOaBBqmGLXogjD9qBZqrqEZ7FyIhfJaKQ
# VCFoG5eIjM/bjslNB1nGDgmceYnC7/6PCMuRnfpuEuxCNCkO7p57NchlppHjAgMB
# AAGjggFZMIIBVTASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBT69DbjOUhY
# 4boDpXUcRxhtX9ZhFjAfBgNVHSMEGDAWgBTs1+OC0nFdZEzfLmc/57qYrhwPTzAO
# BgNVHQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUHAwMwdwYIKwYBBQUHAQEE
# azBpMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wQQYIKwYB
# BQUHMAKGNWh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0
# ZWRSb290RzQuY3J0MEMGA1UdHwQ8MDowOKA2oDSGMmh0dHA6Ly9jcmwzLmRpZ2lj
# ZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3JsMBwGA1UdIAQVMBMwBwYF
# Z4EMAQMwCAYGZ4EMAQQBMA0GCSqGSIb3DQEBDAUAA4ICAQCimOO0oKisz8g5qVWH
# T7Djbx6HCAUqvZOTFJc1H81yOOlzt4a6LtPwclHMCrNih7+TuzzWjQVvNCSVT8Sx
# sDYgP0ISnFx61N2j1ubujz8isItnWTvL+4WsFj7Mb9IDI8XyeOz7LCwExRRSRIry
# GwNyJgxRpTJxy37FrxjlTyp99gJmlJjG4cJggtw3Umo/i6wYRLLczhXuxyDuo+m9
# MmSmb4gNO24v+Qi0qM4vsLCRtvEWZsjO6k94vdAXdOKpOKx7qhr7H+HQaqBieanC
# EGi5KwjcGijrWe62BegSOt/QwZkDoUX64YoATYYpYQkfhMrVNLj+zu7RcMVQZ1Cs
# CquYU10dvslcnYK+xuUexUJ97CR1E7tV2IqgroBccejuiWKwzhKuA3T6FEjGdOSV
# nv4rq7cxlfTA5Zpx0YhVDcwfdvRiMG9LSzadMYuPMa4v1LVL3Cfi/tPtpqkrpo1F
# hARTVkFz0TTP8I5q3GE+8zlQmt1MWDQ4IfdAxxWWbsfk7G6OuMQfyiJK+WOB1Orm
# +hh+MjwcBdzlGazZ454WW+TyTPMc6PV7g0KsGpGhrkhc1rXxoL5BVmXl0ZP6c3Qv
# Co/R2o2gt1+UEiMhQFAc9gqAYnQegKoPFInnCPV6kpoZ1uqTi7x53UWiHEGV4k0Y
# jfnyuQWP3YrxSuA7QdwcGPUTOjCCB0owggUyoAMCAQICEAg+oTiEvf/Ojl2dXK0u
# +94wDQYJKoZIhvcNAQELBQAwcDELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lD
# ZXJ0LCBJbmMuMUgwRgYDVQQDEz9EaWdpQ2VydCBUcnVzdGVkIEc0IENvZGUgU2ln
# bmluZyBFdXJvcGUgUlNBNDA5NiBTSEEzODQgMjAyMyBDQTEwHhcNMjUwODI2MDAw
# MDAwWhcNMjgwODI1MjM1OTU5WjCBmzETMBEGCysGAQQBgjc8AgEDEwJDWjEdMBsG
# A1UEDwwUUHJpdmF0ZSBPcmdhbml6YXRpb24xETAPBgNVBAUTCDI2NTAyMjc1MQsw
# CQYDVQQGEwJDWjEPMA0GA1UEBxMGUHJhZ3VlMRkwFwYDVQQKExBKZXRCcmFpbnMg
# cy5yLm8uMRkwFwYDVQQDExBKZXRCcmFpbnMgcy5yLm8uMIICIjANBgkqhkiG9w0B
# AQEFAAOCAg8AMIICCgKCAgEAqZKaFkS+uECz+dpb19DnKoU+ZsNEyg/xJmOkI0h9
# 36AkpzIIA8pjBSBFAIlsZuRb87PSd1FON2EX/veQ4NBzp6jQWq8En8eTSYy0QR10
# Nr6n+FFdNqX3KD1qmQMUV3vGli8af/by+f1/m9k2w2Nfh6qxy6aw1Ez9Hbr5oH+o
# 6PCszPkdSgWh3eOypq8zabpPuZZwmH8CNSPMAxLb78vopabs8Nhr03fmO5ksxzgC
# 6i/y9prBoXk/y05BvuBJhkldWkJHTigVhMcIUaE3tmVWb2u8BSW0lRh9wq1u1fHu
# Vj/AwyBCAx06SE6drLiEMTWpPzd37N8PIPMabce1NpWLA5t958IwWY4EdBQfBa4R
# bBVnocoF1G70kT7CqIhnkaQwqjjePtVTUYl0S+yuTk6bHfjz3EWN+16Vtg4kR11x
# sg2lrphTgMdMevMaFxqr/lgw7Owmcb5tSoQMOVAzOEMTE0juDCrRADjdEB4xxOfg
# +v3DZcOavru1qRpQenVmvUHCDgeG/Ivjib73lLLtIyxyvRPoJOX72mihSH2pA6h/
# D1DsqisvfGSRgX6MkggQPHHwCS6X07TApwsYKnBw/T2ttxV8kJwOi+UdzQABQMHy
# SucLC1rOrbkEtiZF6Dst9S/SDm6xrYNmzjUf7475El3vJj13jhHD5kE1Xx86htcH
# uXcCAwEAAaOCAbIwggGuMB8GA1UdIwQYMBaAFPr0NuM5SFjhugOldRxHGG1f1mEW
# MB0GA1UdDgQWBBQ8pDHZkGU6ehH6QCnluo8K/DvlczA9BgNVHSAENjA0MDIGBWeB
# DAEDMCkwJwYIKwYBBQUHAgEWG2h0dHA6Ly93d3cuZGlnaWNlcnQuY29tL0NQUzAO
# BgNVHQ8BAf8EBAMCB4AwEwYDVR0lBAwwCgYIKwYBBQUHAwMwYgYDVR0fBFswWTBX
# oFWgU4ZRaHR0cDovL2NybC5kaWdpY2VydC5ldS9EaWdpQ2VydFRydXN0ZWRHNENv
# ZGVTaWduaW5nRXVyb3BlUlNBNDA5NlNIQTM4NDIwMjNDQTEuY3JsMIGYBggrBgEF
# BQcBAQSBizCBiDAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZGlnaWNlcnQuZXUw
# YQYIKwYBBQUHMAKGVWh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmV1L0RpZ2lDZXJ0
# VHJ1c3RlZEc0Q29kZVNpZ25pbmdFdXJvcGVSU0E0MDk2U0hBMzg0MjAyM0NBMS5j
# cnQwCQYDVR0TBAIwADANBgkqhkiG9w0BAQsFAAOCAgEAb7POsoLTMcXLaNkg3bbD
# /HIYKCvzlfaQeWob2E5ldon3DGQSOl8yp8r5ea0hIFfxDoJphBRqY7lI4+HxHiCg
# um3pobeAxfJDSxTbY88Jo257fAeUsPc0dsruJ17Xy1oxv4Xos/dMNXxW7rtE4NOu
# MgH9ay1rYRwlqZk/5yozEvB4CDxhXTPzT5yynIqorJCh0DroL70bhf3IyhGd6jcg
# ow9xBghZm/lwsY4VCJz7oNCGSUDKmgVlgr75GA/t74SEJ3an4WHvyapT7Tc5Erae
# Zi7d4JuefP2jGbwaIuwCLj5DWwQJiODtM0vWJMWtm+m/ldI5pSZ8yhIc2yeNtnjq
# Rd1h88q8veP+3fWxhaLIUqXVnPQFTjhx1dcPZqcXCWzcIiljDGaopqu1B9jC/m+Z
# ZUm0fCiKH38hb+8D8k7lJWTJqqOySeGD2uZmUQAG1SvTuuDl9xcQXjG/PS/XuJkV
# u0wpSyQ2MAjdm+HsUatb55FSvn0VuPixS7Ju3c0lXJLs7ejnBeNgjpIgX8yahqYh
# KkamIN/eT3JAI7As6OhX4a3gabY6pa9EsTC+BL580+jpyxE6ejaBiWAFXNu1qXpA
# B8wwUk26/CnIX3zaan0o8WmfN+aJfOyPk9mzgbDg6J6CSSZqN8mG0ozvAGbZKDQI
# h5J763XgAWzrCPfJYewpO8sxghrvMIIa6wIBATCBhDBwMQswCQYDVQQGEwJVUzEX
# MBUGA1UEChMORGlnaUNlcnQsIEluYy4xSDBGBgNVBAMTP0RpZ2lDZXJ0IFRydXN0
# ZWQgRzQgQ29kZSBTaWduaW5nIEV1cm9wZSBSU0E0MDk2IFNIQTM4NCAyMDIzIENB
# MQIQCD6hOIS9/86OXZ1crS773jALBglghkgBZQMEAgGggcQwGQYJKoZIhvcNAQkD
# MQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJ
# KoZIhvcNAQkEMSIEIJQ4i6wcz2CrY4sHYknoUVoQYRy4cYm3YOShlduYxoi3MFgG
# CisGAQQBgjcCAQwxSjBIoEaARABjAG8AbQBtAGEAbgBkAC0AYgBsAG8AYwBrAC0A
# cwB1AHAAcABvAHIAdAAtAHIAZQB3AG8AcgBrAGUAZAAuAHAAcwAxMA0GCSqGSIb3
# DQEBAQUABIICAF5qoYn6T9QBzOI+6/p7vz0ZQpNThcuyruiBe/czcHUyrZdHvCzp
# zG2htT3+DfWfSMwKQffYzKeW7akADXv6QXoC3+JvxgWZfEnfk90DhPL2v51Q0f6h
# 7TrR+YllU5bgiztk2BmmkOl+OubQcDK48YmQK4zh9XszWMhBU5ZpXbY48+p3vjhM
# nMs6Bh2Fc5R7+99AfPPcPeE0QTbz9JmAc75sZ1m6Xdyr3mdLYp0f5RIZpUEJoUcO
# OTN4SNN2/sj17QXlcyF8tFVqd64kOhVCLSwUR4xng6KqNOR8EqUZrv0tAKDuKb7V
# yGxHg3lePpmW37Cl9Xbx4iTj8mw+KFPzpB9cjTcq69uh3mMJcWHMU+jtUtGQPna6
# F+gppIA4G03MShOkz+81uaJTp4PxupUsuLFPupW+yxR5HcajaMhm8F0oiCZKYJcB
# kNcFBP0uMRtXgTFcFhfNc0P+MBaRtwx0uIjId/xtyq1nooNhv6On8T5z/hCIUk14
# 56yEcrQ3fqirpHcJw2NDdedn4FN3aPzbWx4Xp+RoereyikNFVfdLAEBBoy0qR9zz
# c6/WgV33M/A8iBkJBgQJUeX/F5ljAb9wbec5BICNQLcVp+FaIbai3br8V2xNdkv6
# dH4WmMwaBt3UuT3L+l/kOVwCwVmpWYd1SkG0QqNWCbRCPewzo1J1qE+uoYIXdjCC
# F3IGCisGAQQBgjcDAwExghdiMIIXXgYJKoZIhvcNAQcCoIIXTzCCF0sCAQMxDzAN
# BglghkgBZQMEAgEFADB3BgsqhkiG9w0BCRABBKBoBGYwZAIBAQYJYIZIAYb9bAcB
# MDEwDQYJYIZIAWUDBAIBBQAEIPb1EpEBhVAKPWKBzTfb+HF1qoEAQ8PfO8Kx9qbK
# v7QNAhBd8NxKiYgWEcS89BFxizTyGA8yMDI2MDMwNDE4MzI0NlqgghM6MIIG7TCC
# BNWgAwIBAgIQCoDvGEuN8QWC0cR2p5V0aDANBgkqhkiG9w0BAQsFADBpMQswCQYD
# VQQGEwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xQTA/BgNVBAMTOERpZ2lD
# ZXJ0IFRydXN0ZWQgRzQgVGltZVN0YW1waW5nIFJTQTQwOTYgU0hBMjU2IDIwMjUg
# Q0ExMB4XDTI1MDYwNDAwMDAwMFoXDTM2MDkwMzIzNTk1OVowYzELMAkGA1UEBhMC
# VVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJEaWdpQ2VydCBT
# SEEyNTYgUlNBNDA5NiBUaW1lc3RhbXAgUmVzcG9uZGVyIDIwMjUgMTCCAiIwDQYJ
# KoZIhvcNAQEBBQADggIPADCCAgoCggIBANBGrC0Sxp7Q6q5gVrMrV7pvUf+GcAoB
# 38o3zBlCMGMyqJnfFNZx+wvA69HFTBdwbHwBSOeLpvPnZ8ZN+vo8dE2/pPvOx/Vj
# 8TchTySA2R4QKpVD7dvNZh6wW2R6kSu9RJt/4QhguSssp3qome7MrxVyfQO9sMx6
# ZAWjFDYOzDi8SOhPUWlLnh00Cll8pjrUcCV3K3E0zz09ldQ//nBZZREr4h/GI6Dx
# b2UoyrN0ijtUDVHRXdmncOOMA3CoB/iUSROUINDT98oksouTMYFOnHoRh6+86Ltc
# 5zjPKHW5KqCvpSduSwhwUmotuQhcg9tw2YD3w6ySSSu+3qU8DD+nigNJFmt6LAHv
# H3KSuNLoZLc1Hf2JNMVL4Q1OpbybpMe46YceNA0LfNsnqcnpJeItK/DhKbPxTTuG
# oX7wJNdoRORVbPR1VVnDuSeHVZlc4seAO+6d2sC26/PQPdP51ho1zBp+xUIZkpSF
# A8vWdoUoHLWnqWU3dCCyFG1roSrgHjSHlq8xymLnjCbSLZ49kPmk8iyyizNDIXj/
# /cOgrY7rlRyTlaCCfw7aSUROwnu7zER6EaJ+AliL7ojTdS5PWPsWeupWs7NpChUk
# 555K096V1hE0yZIXe+giAwW00aHzrDchIc2bQhpp0IoKRR7YufAkprxMiXAJQ1XC
# mnCfgPf8+3mnAgMBAAGjggGVMIIBkTAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBTk
# O/zyMe39/dfzkXFjGVBDz2GM6DAfBgNVHSMEGDAWgBTvb1NK6eQGfHrK4pBW9i/U
# SezLTjAOBgNVHQ8BAf8EBAMCB4AwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgwgZUG
# CCsGAQUFBwEBBIGIMIGFMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2Vy
# dC5jb20wXQYIKwYBBQUHMAKGUWh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9E
# aWdpQ2VydFRydXN0ZWRHNFRpbWVTdGFtcGluZ1JTQTQwOTZTSEEyNTYyMDI1Q0Ex
# LmNydDBfBgNVHR8EWDBWMFSgUqBQhk5odHRwOi8vY3JsMy5kaWdpY2VydC5jb20v
# RGlnaUNlcnRUcnVzdGVkRzRUaW1lU3RhbXBpbmdSU0E0MDk2U0hBMjU2MjAyNUNB
# MS5jcmwwIAYDVR0gBBkwFzAIBgZngQwBBAIwCwYJYIZIAYb9bAcBMA0GCSqGSIb3
# DQEBCwUAA4ICAQBlKq3xHCcEua5gQezRCESeY0ByIfjk9iJP2zWLpQq1b4URGnwW
# BdEZD9gBq9fNaNmFj6Eh8/YmRDfxT7C0k8FUFqNh+tshgb4O6Lgjg8K8elC4+oWC
# qnU/ML9lFfim8/9yJmZSe2F8AQ/UdKFOtj7YMTmqPO9mzskgiC3QYIUP2S3HQvHG
# 1FDu+WUqW4daIqToXFE/JQ/EABgfZXLWU0ziTN6R3ygQBHMUBaB5bdrPbF6MRYs0
# 3h4obEMnxYOX8VBRKe1uNnzQVTeLni2nHkX/QqvXnNb+YkDFkxUGtMTaiLR9wjxU
# xu2hECZpqyU1d0IbX6Wq8/gVutDojBIFeRlqAcuEVT0cKsb+zJNEsuEB7O7/cuvT
# QasnM9AWcIQfVjnzrvwiCZ85EE8LUkqRhoS3Y50OHgaY7T/lwd6UArb+BOVAkg2o
# Ovol/DJgddJ35XTxfUlQ+8Hggt8l2Yv7roancJIFcbojBcxlRcGG0LIhp6GvReQG
# gMgYxQbV1S3CrWqZzBt1R9xJgKf47CdxVRd/ndUlQ05oxYy2zRWVFjF7mcr4C34M
# j3ocCVccAvlKV9jEnstrniLvUxxVZE/rptb7IRE2lskKPIJgbaP5t2nGj/ULLi49
# xTcBZU8atufk+EMF/cWuiC7POGT75qaL6vdCvHlshtjdNXOCIUjsarfNZzCCBrQw
# ggScoAMCAQICEA3HrFcF/yGZLkBDIgw6SYYwDQYJKoZIhvcNAQELBQAwYjELMAkG
# A1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRp
# Z2ljZXJ0LmNvbTEhMB8GA1UEAxMYRGlnaUNlcnQgVHJ1c3RlZCBSb290IEc0MB4X
# DTI1MDUwNzAwMDAwMFoXDTM4MDExNDIzNTk1OVowaTELMAkGA1UEBhMCVVMxFzAV
# BgNVBAoTDkRpZ2lDZXJ0LCBJbmMuMUEwPwYDVQQDEzhEaWdpQ2VydCBUcnVzdGVk
# IEc0IFRpbWVTdGFtcGluZyBSU0E0MDk2IFNIQTI1NiAyMDI1IENBMTCCAiIwDQYJ
# KoZIhvcNAQEBBQADggIPADCCAgoCggIBALR4MdMKmEFyvjxGwBysddujRmh0tFEX
# nU2tjQ2UtZmWgyxU7UNqEY81FzJsQqr5G7A6c+Gh/qm8Xi4aPCOo2N8S9SLrC6Kb
# ltqn7SWCWgzbNfiR+2fkHUiljNOqnIVD/gG3SYDEAd4dg2dDGpeZGKe+42DFUF0m
# R/vtLa4+gKPsYfwEu7EEbkC9+0F2w4QJLVSTEG8yAR2CQWIM1iI5PHg62IVwxKSp
# O0XaF9DPfNBKS7Zazch8NF5vp7eaZ2CVNxpqumzTCNSOxm+SAWSuIr21Qomb+zzQ
# WKhxKTVVgtmUPAW35xUUFREmDrMxSNlr/NsJyUXzdtFUUt4aS4CEeIY8y9IaaGBp
# PNXKFifinT7zL2gdFpBP9qh8SdLnEut/GcalNeJQ55IuwnKCgs+nrpuQNfVmUB5K
# lCX3ZA4x5HHKS+rqBvKWxdCyQEEGcbLe1b8Aw4wJkhU1JrPsFfxW1gaou30yZ46t
# 4Y9F20HHfIY4/6vHespYMQmUiote8ladjS/nJ0+k6MvqzfpzPDOy5y6gqztiT96F
# v/9bH7mQyogxG9QEPHrPV6/7umw052AkyiLA6tQbZl1KhBtTasySkuJDpsZGKdls
# jg4u70EwgWbVRSX1Wd4+zoFpp4Ra+MlKM2baoD6x0VR4RjSpWM8o5a6D8bpfm4CL
# KczsG7ZrIGNTAgMBAAGjggFdMIIBWTASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1Ud
# DgQWBBTvb1NK6eQGfHrK4pBW9i/USezLTjAfBgNVHSMEGDAWgBTs1+OC0nFdZEzf
# Lmc/57qYrhwPTzAOBgNVHQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUHAwgw
# dwYIKwYBBQUHAQEEazBpMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2Vy
# dC5jb20wQQYIKwYBBQUHMAKGNWh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9E
# aWdpQ2VydFRydXN0ZWRSb290RzQuY3J0MEMGA1UdHwQ8MDowOKA2oDSGMmh0dHA6
# Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3JsMCAG
# A1UdIAQZMBcwCAYGZ4EMAQQCMAsGCWCGSAGG/WwHATANBgkqhkiG9w0BAQsFAAOC
# AgEAF877FoAc/gc9EXZxML2+C8i1NKZ/zdCHxYgaMH9Pw5tcBnPw6O6FTGNpoV2V
# 4wzSUGvI9NAzaoQk97frPBtIj+ZLzdp+yXdhOP4hCFATuNT+ReOPK0mCefSG+tXq
# GpYZ3essBS3q8nL2UwM+NMvEuBd/2vmdYxDCvwzJv2sRUoKEfJ+nN57mQfQXwcAE
# GCvRR2qKtntujB71WPYAgwPyWLKu6RnaID/B0ba2H3LUiwDRAXx1Neq9ydOal95C
# HfmTnM4I+ZI2rVQfjXQA1WSjjf4J2a7jLzWGNqNX+DF0SQzHU0pTi4dBwp9nEC8E
# AqoxW6q17r0z0noDjs6+BFo+z7bKSBwZXTRNivYuve3L2oiKNqetRHdqfMTCW/Nm
# KLJ9M+MtucVGyOxiDf06VXxyKkOirv6o02OoXN4bFzK0vlNMsvhlqgF2puE6Fndl
# ENSmE+9JGYxOGLS/D284NHNboDGcmWXfwXRy4kbu4QFhOm0xJuF2EZAOk5eCkhSx
# ZON3rGlHqhpB/8MluDezooIs8CVnrpHMiD2wL40mm53+/j7tFaxYKIqL0Q4ssd8x
# HZnIn/7GELH3IdvG2XlM9q7WP/UwgOkw/HQtyRN62JK4S1C8uw3PdBunvAZapsiI
# 5YKdvlarEvf8EA+8hcpSM9LHJmyrxaFtoza2zNaQ9k+5t1wwggWNMIIEdaADAgEC
# AhAOmxiO+dAt5+/bUOIIQBhaMA0GCSqGSIb3DQEBDAUAMGUxCzAJBgNVBAYTAlVT
# MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
# b20xJDAiBgNVBAMTG0RpZ2lDZXJ0IEFzc3VyZWQgSUQgUm9vdCBDQTAeFw0yMjA4
# MDEwMDAwMDBaFw0zMTExMDkyMzU5NTlaMGIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK
# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xITAfBgNV
# BAMTGERpZ2lDZXJ0IFRydXN0ZWQgUm9vdCBHNDCCAiIwDQYJKoZIhvcNAQEBBQAD
# ggIPADCCAgoCggIBAL/mkHNo3rvkXUo8MCIwaTPswqclLskhPfKK2FnC4SmnPVir
# dprNrnsbhA3EMB/zG6Q4FutWxpdtHauyefLKEdLkX9YFPFIPUh/GnhWlfr6fqVcW
# WVVyr2iTcMKyunWZanMylNEQRBAu34LzB4TmdDttceItDBvuINXJIB1jKS3O7F5O
# yJP4IWGbNOsFxl7sWxq868nPzaw0QF+xembud8hIqGZXV59UWI4MK7dPpzDZVu7K
# e13jrclPXuU15zHL2pNe3I6PgNq2kZhAkHnDeMe2scS1ahg4AxCN2NQ3pC4FfYj1
# gj4QkXCrVYJBMtfbBHMqbpEBfCFM1LyuGwN1XXhm2ToxRJozQL8I11pJpMLmqaBn
# 3aQnvKFPObURWBf3JFxGj2T3wWmIdph2PVldQnaHiZdpekjw4KISG2aadMreSx7n
# DmOu5tTvkpI6nj3cAORFJYm2mkQZK37AlLTSYW3rM9nF30sEAMx9HJXDj/chsrIR
# t7t/8tWMcCxBYKqxYxhElRp2Yn72gLD76GSmM9GJB+G9t+ZDpBi4pncB4Q+UDCEd
# slQpJYls5Q5SUUd0viastkF13nqsX40/ybzTQRESW+UQUOsxxcpyFiIJ33xMdT9j
# 7CFfxCBRa2+xq4aLT8LWRV+dIPyhHsXAj6KxfgommfXkaS+YHS312amyHeUbAgMB
# AAGjggE6MIIBNjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTs1+OC0nFdZEzf
# Lmc/57qYrhwPTzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzAOBgNV
# HQ8BAf8EBAMCAYYweQYIKwYBBQUHAQEEbTBrMCQGCCsGAQUFBzABhhhodHRwOi8v
# b2NzcC5kaWdpY2VydC5jb20wQwYIKwYBBQUHMAKGN2h0dHA6Ly9jYWNlcnRzLmRp
# Z2ljZXJ0LmNvbS9EaWdpQ2VydEFzc3VyZWRJRFJvb3RDQS5jcnQwRQYDVR0fBD4w
# PDA6oDigNoY0aHR0cDovL2NybDMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0QXNzdXJl
# ZElEUm9vdENBLmNybDARBgNVHSAECjAIMAYGBFUdIAAwDQYJKoZIhvcNAQEMBQAD
# ggEBAHCgv0NcVec4X6CjdBs9thbX979XB72arKGHLOyFXqkauyL4hxppVCLtpIh3
# bb0aFPQTSnovLbc47/T/gLn4offyct4kvFIDyE7QKt76LVbP+fT3rDB6mouyXtTP
# 0UNEm0Mh65ZyoUi0mcudT6cGAxN3J0TU53/oWajwvy8LpunyNDzs9wPHh6jSTEAZ
# NUZqaVSwuKFWjuyk1T3osdz9HNj0d1pcVIxv76FQPfx2CWiEn2/K2yCNNWAcAgPL
# ILCsWKAOQGPFmCLBsln1VWvPJ6tsds5vIy30fnFqI2si/xK4VC0nftg62fC2h5b9
# W9FcrBjDTZ9ztwGpn1eqXijiuZQxggN8MIIDeAIBATB9MGkxCzAJBgNVBAYTAlVT
# MRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjFBMD8GA1UEAxM4RGlnaUNlcnQgVHJ1
# c3RlZCBHNCBUaW1lU3RhbXBpbmcgUlNBNDA5NiBTSEEyNTYgMjAyNSBDQTECEAqA
# 7xhLjfEFgtHEdqeVdGgwDQYJYIZIAWUDBAIBBQCggdEwGgYJKoZIhvcNAQkDMQ0G
# CyqGSIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yNjAzMDQxODMyNDZaMCsGCyqG
# SIb3DQEJEAIMMRwwGjAYMBYEFN1iMKyGCi0wa9o4sWh5UjAH+0F+MC8GCSqGSIb3
# DQEJBDEiBCDOiMvR5Y5HpqsWoHRn42UKwiUpo0d6FXHmDorjdcZIzDA3BgsqhkiG
# 9w0BCRACLzEoMCYwJDAiBCBKoD+iLNdchMVck4+CjmdrnK7Ksz/jbSaaozTxRhEK
# MzANBgkqhkiG9w0BAQEFAASCAgCxDj+zilJ6ITl8JCAC/fmg17e4pDc/rIiS7ptV
# Ne4T8jErKpeI3wlWcnjB9jVLyjgGQYs8RH+Et41tNScxMHT9WNjxk+Ku3+NQN05r
# JwDBAWQ00zCcz+liqCTlYIEOiB+nPkhtN+366rV6ZStpfZrRWp+NmEqtYvjZwGB7
# 0c2ORGzD9owf+vV0Nt5KlTOOsYRDPele/zGFcGWJDJHQd4nzYUvzYsbq7HxTnt7g
# dPZFAK72A8Wksw+sFeRH3H8GPdHAus2X1tfLAWPSdy0vWk5vyhoKBhA75GN7vI52
# +wYE7TgB+Kgg+wRREU2AWqCmrOO4LfM3lMNis2V/YXXrDzcj4sYqy8OqI19ll11s
# HZIah2u4I1NPy5Pw/ey1R3EUADzVFEjMPTYqloH5/NIIerNXzcT4kOOr8uIYgq9V
# mm0L31i0c8v3+XqCuIZtu5/f4kf9sXgY6kk0T75OrGgfydD/AND4oQ1OtkugWL8S
# CfKKfoRl83aUlS/kaxTu01piHG4Ptmziaj7nUA0BTEJzCPkUaMoaPQPaS03MgxnM
# h0ojTcQ2WFBqKyGhbA5A8xmmd5bWTrlfxaMj5AZe3MbMewDzdgoz31V2babYS4e3
# quKIJeshWD7vZbrYD7PQk9Z9iR6qRuwuetOnpMqxO2XDLe0W8mri5pTeASHrP5Pj
# 9FkIaQ==
# SIG # End signature block
