Expand-AllZipFilesInFolder.ps1

# Version 1.0.0.0
function Expand-AllZipFilesInFolder {
  <#
 
.SYNOPSIS
  Expands all zip files in subfolders for this version to be able to access the AL files
.DESCRIPTION
  Expands all zip files in subfolders for this version to be able to access the AL files
.PARAMETER version
  The version for the artificates to download
.PARAMETER zipRootFolder
  The root folder for version files. Default value is 'C:\bcartifacts.cache\onprem\'
.PARAMETER rootWorkspaceFolder
  The root folder in the user profile to create the workspace file in Default value is '\source\repos'
.PARAMETER createWorkspaceFolder
  Create workspace file
.PARAMETER type
  the eviroment type 'OnPrem' or 'Sandbox
.PARAMETER country
  the country code 'no', 'w1', 'us' etc
 
.EXAMPLE
  Expand-AllZipFilesInFolder -version '17.4.21491.21531'
.EXAMPLE
  This will get highest version in the folder
  Expand-AllZipFilesInFolder -version '17.*'
.EXAMPLE
  This will get highest version in the folder and create workspace file in the bruker profile folder ("$env:USERPROFILE" ('\source\repos\SystemBaseAndTestsV')
  Expand-AllZipFilesInFolder -version '17.*' $createWorkspaceFolder $rootWorkspaceFolder = '\repos'
#>

  [CmdletBinding()]
  param(
    [string] $version,
    [string] $zipRootFolder = '',
    [string] $rootWorkspaceFolder = '\repos',
    [switch] $createWorkspaceFolder,
    [ValidateSet('', 'OnPrem', 'Sandbox')]
    [string] $type = "OnPrem",
    $country = 'no'
  )
  PROCESS {
    try { 
      if (($type -eq "OnPrem") -and ([string]::IsNullOrEmpty( $zipRootFolder))) {
        $zipRootFolder = 'C:\bcartifacts.cache\onprem\'
      }
      else {
        $zipRootFolder = 'C:\bcartifacts.cache\sandbox\'
      }
      $zipRootFolderTable = Join-Path -Path $zipRootFolder -ChildPath $version -Resolve | Sort-Object Name -Descending
      Write-Host "Overview of versions folder" 
      $zipRootFolderTable | Format-Table | Out-String | Write-Host
      $zipRootFolder = Join-Path -Path $zipRootFolder -ChildPath $version -Resolve | Sort-Object Name -Descending | Select-Object -First 1
      $zipInputFolder = Join-Path $zipRootFolder "$country\Applications\BaseApp\Source"
      if (([System.IO.Directory]::Exists($zipInputFolder))) {
        
        $zipFiles = Get-ChildItem $zipInputFolder -Filter 'Base Application.Source.zip'
        foreach ($zipFile in $zipFiles) {
          $zipOutPutFolderExtended = $zipInputFolder + "\" + $zipFile.BaseName
          Expand-Archive -Path $zipFile.FullName -DestinationPath $zipOutPutFolderExtended -Force
        }
      
        $zipInputFolder = $zipInputFolder = Join-Path $zipRootFolder "$country\Applications\BaseApp\Test\"
        $zipFiles = Get-ChildItem $zipInputFolder -Filter *.zip
        foreach ($zipFile in $zipFiles) {
          $zipOutPutFolderExtended = $zipInputFolder + "\" + $zipFile.BaseName
          Expand-Archive -Path $zipFile.FullName -DestinationPath $zipOutPutFolderExtended -Force
        }

        $zipInputFolder = $zipInputFolder = Join-Path $zipRootFolder "$country\Applications\System Application\Source"
        $zipFiles = Get-ChildItem $zipInputFolder -Filter *.zip
        foreach ($zipFile in $zipFiles) {
          $zipOutPutFolderExtended = $zipInputFolder + "\" + $zipFile.BaseName
          Expand-Archive -Path $zipFile.FullName -DestinationPath $zipOutPutFolderExtended -Force
        }
      
        $zipInputFolder = $zipInputFolder = Join-Path $zipRootFolder "$country\Applications\System Application\Test"
        $zipFiles = Get-ChildItem $zipInputFolder -Filter *.zip
        foreach ($zipFile in $zipFiles) {
          $zipOutPutFolderExtended = $zipInputFolder + "\" + $zipFile.BaseName
          Expand-Archive -Path $zipFile.FullName -DestinationPath $zipOutPutFolderExtended -Force
        }
      
        $zipInputFolder = $zipInputFolder = Join-Path $zipRootFolder "$country\Applications\Application\Source"
        $zipFiles = Get-ChildItem $zipInputFolder -Filter *.zip
        foreach ($zipFile in $zipFiles) {
          $zipOutPutFolderExtended = $zipInputFolder + "\" + $zipFile.BaseName
          Expand-Archive -Path $zipFile.FullName -DestinationPath $zipOutPutFolderExtended -Force
        }
      
        $zipInputFolder = $zipInputFolder = Join-Path $zipRootFolder "$country\Applications\APIV2\Test"
        $zipFiles = Get-ChildItem $zipInputFolder -Filter *.zip
        foreach ($zipFile in $zipFiles) {
          $zipOutPutFolderExtended = $zipInputFolder + "\" + $zipFile.BaseName
          Expand-Archive -Path $zipFile.FullName -DestinationPath $zipOutPutFolderExtended -Force
        }
      
        $zipInputFolder = $zipInputFolder = Join-Path $zipRootFolder "$country\Applications\APIV2\Source"
        $zipFiles = Get-ChildItem $zipInputFolder -Filter *.zip
        foreach ($zipFile in $zipFiles) {
          $zipOutPutFolderExtended = $zipInputFolder + "\" + $zipFile.BaseName
          Expand-Archive -Path $zipFile.FullName -DestinationPath $zipOutPutFolderExtended -Force
        }
      }
      else {
        $zipInputFolder = Join-Path $zipRootFolder ("$country\Applications." + $country.ToUpper())

        $zipFiles = Get-ChildItem $zipInputFolder -Filter *.zip
        foreach ($zipFile in $zipFiles) {
          $zipOutPutFolderExtended = $zipInputFolder + "\" + $zipFile.BaseName
          Expand-Archive -Path $zipFile.FullName -DestinationPath $zipOutPutFolderExtended -Force
        }
      }
      if ($createWorkspaceFolder) {
        $versionFolderName = Split-Path $zipRootFolder -Leaf 
        $fileFullPath = Join-Path $env:USERPROFILE $rootWorkspaceFolder
        $fileFullPath = Join-Path $fileFullPath ('SystemBaseAndTestsV' + $versionFolderName + '.code-workspace')
        $folderArry = $fileFullPath.Split("\")
        $folderArry.Count
        $folderName = ''
        for ($i = 0; $i -lt ($folderArry.Length - 2); $i++) { 
          $folderName += '..\'
        }
        if ($type -eq "OnPrem") {
          $typeFolder = 'onprem'
        }
        else {
          $typeFolder = 'sandbox'
        }
        $folderName += "bcartifacts.cache\$typeFolder\$versionFolderName\$country\Applications"
        $jsonBase = @{}
        $list = New-Object System.Collections.ArrayList
        $list.Add(@{"path" = "$folderName"; })
        $jsonBase.Add("folders", $list)
        $jsonBase | ConvertTo-Json -Depth 10 | Out-File $fileFullPath
      }
    }
    catch [Exception] {
      "Expand-AllZipFilesInFolder :`n`n " + $_.Exception
    }
    finally {
      # Clean up after Expand-AllZipFilesInFolder
    }
  }
}
Export-ModuleMember -Function Expand-AllZipFilesInFolder


# SIG # Begin signature block
# MIIVlQYJKoZIhvcNAQcCoIIVhjCCFYICAQExCzAJBgUrDgMCGgUAMGkGCisGAQQB
# gjcCAQSgWzBZMDQGCisGAQQBgjcCAR4wJgIDAQAABBAfzDtgWUsITrck0sYpfvNR
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQU5fZYkvl8ddDULwlIPFIXc2PL
# ghGgghH1MIIFbzCCBFegAwIBAgIQSPyTtGBVlI02p8mKidaUFjANBgkqhkiG9w0B
# AQwFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVy
# MRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEh
# MB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTIxMDUyNTAwMDAw
# MFoXDTI4MTIzMTIzNTk1OVowVjELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1NlY3Rp
# Z28gTGltaXRlZDEtMCsGA1UEAxMkU2VjdGlnbyBQdWJsaWMgQ29kZSBTaWduaW5n
# IFJvb3QgUjQ2MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAjeeUEiIE
# JHQu/xYjApKKtq42haxH1CORKz7cfeIxoFFvrISR41KKteKW3tCHYySJiv/vEpM7
# fbu2ir29BX8nm2tl06UMabG8STma8W1uquSggyfamg0rUOlLW7O4ZDakfko9qXGr
# YbNzszwLDO/bM1flvjQ345cbXf0fEj2CA3bm+z9m0pQxafptszSswXp43JJQ8mTH
# qi0Eq8Nq6uAvp6fcbtfo/9ohq0C/ue4NnsbZnpnvxt4fqQx2sycgoda6/YDnAdLv
# 64IplXCN/7sVz/7RDzaiLk8ykHRGa0c1E3cFM09jLrgt4b9lpwRrGNhx+swI8m2J
# mRCxrds+LOSqGLDGBwF1Z95t6WNjHjZ/aYm+qkU+blpfj6Fby50whjDoA7NAxg0P
# OM1nqFOI+rgwZfpvx+cdsYN0aT6sxGg7seZnM5q2COCABUhA7vaCZEao9XOwBpXy
# bGWfv1VbHJxXGsd4RnxwqpQbghesh+m2yQ6BHEDWFhcp/FycGCvqRfXvvdVnTyhe
# Be6QTHrnxvTQ/PrNPjJGEyA2igTqt6oHRpwNkzoJZplYXCmjuQymMDg80EY2NXyc
# uu7D1fkKdvp+BRtAypI16dV60bV/AK6pkKrFfwGcELEW/MxuGNxvYv6mUKe4e7id
# FT/+IAx1yCJaE5UZkADpGtXChvHjjuxf9OUCAwEAAaOCARIwggEOMB8GA1UdIwQY
# MBaAFKARCiM+lvEH7OKvKe+CpX/QMKS0MB0GA1UdDgQWBBQy65Ka/zWWSC8oQEJw
# IDaRXBeF5jAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zATBgNVHSUE
# DDAKBggrBgEFBQcDAzAbBgNVHSAEFDASMAYGBFUdIAAwCAYGZ4EMAQQBMEMGA1Ud
# HwQ8MDowOKA2oDSGMmh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL0FBQUNlcnRpZmlj
# YXRlU2VydmljZXMuY3JsMDQGCCsGAQUFBwEBBCgwJjAkBggrBgEFBQcwAYYYaHR0
# cDovL29jc3AuY29tb2RvY2EuY29tMA0GCSqGSIb3DQEBDAUAA4IBAQASv6Hvi3Sa
# mES4aUa1qyQKDKSKZ7g6gb9Fin1SB6iNH04hhTmja14tIIa/ELiueTtTzbT72ES+
# BtlcY2fUQBaHRIZyKtYyFfUSg8L54V0RQGf2QidyxSPiAjgaTCDi2wH3zUZPJqJ8
# ZsBRNraJAlTH/Fj7bADu/pimLpWhDFMpH2/YGaZPnvesCepdgsaLr4CnvYFIUoQx
# 2jLsFeSmTD1sOXPUC4U5IOCFGmjhp0g4qdE2JXfBjRkWxYhMZn0vY86Y6GnfrDyo
# XZ3JHFuu2PMvdM+4fvbXg50RlmKarkUT2n/cR/vfw1Kf5gZV6Z2M8jpiUbzsJA8p
# 1FiAhORFe1rYMIIGGjCCBAKgAwIBAgIQYh1tDFIBnjuQeRUgiSEcCjANBgkqhkiG
# 9w0BAQwFADBWMQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVk
# MS0wKwYDVQQDEyRTZWN0aWdvIFB1YmxpYyBDb2RlIFNpZ25pbmcgUm9vdCBSNDYw
# HhcNMjEwMzIyMDAwMDAwWhcNMzYwMzIxMjM1OTU5WjBUMQswCQYDVQQGEwJHQjEY
# MBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMSswKQYDVQQDEyJTZWN0aWdvIFB1Ymxp
# YyBDb2RlIFNpZ25pbmcgQ0EgUjM2MIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIB
# igKCAYEAmyudU/o1P45gBkNqwM/1f/bIU1MYyM7TbH78WAeVF3llMwsRHgBGRmxD
# eEDIArCS2VCoVk4Y/8j6stIkmYV5Gej4NgNjVQ4BYoDjGMwdjioXan1hlaGFt4Wk
# 9vT0k2oWJMJjL9G//N523hAm4jF4UjrW2pvv9+hdPX8tbbAfI3v0VdJiJPFy/7Xw
# iunD7mBxNtecM6ytIdUlh08T2z7mJEXZD9OWcJkZk5wDuf2q52PN43jc4T9OkoXZ
# 0arWZVeffvMr/iiIROSCzKoDmWABDRzV/UiQ5vqsaeFaqQdzFf4ed8peNWh1OaZX
# nYvZQgWx/SXiJDRSAolRzZEZquE6cbcH747FHncs/Kzcn0Ccv2jrOW+LPmnOyB+t
# AfiWu01TPhCr9VrkxsHC5qFNxaThTG5j4/Kc+ODD2dX/fmBECELcvzUHf9shoFvr
# n35XGf2RPaNTO2uSZ6n9otv7jElspkfK9qEATHZcodp+R4q2OIypxR//YEb3fkDn
# 3UayWW9bAgMBAAGjggFkMIIBYDAfBgNVHSMEGDAWgBQy65Ka/zWWSC8oQEJwIDaR
# XBeF5jAdBgNVHQ4EFgQUDyrLIIcouOxvSK4rVKYpqhekzQwwDgYDVR0PAQH/BAQD
# AgGGMBIGA1UdEwEB/wQIMAYBAf8CAQAwEwYDVR0lBAwwCgYIKwYBBQUHAwMwGwYD
# VR0gBBQwEjAGBgRVHSAAMAgGBmeBDAEEATBLBgNVHR8ERDBCMECgPqA8hjpodHRw
# Oi8vY3JsLnNlY3RpZ28uY29tL1NlY3RpZ29QdWJsaWNDb2RlU2lnbmluZ1Jvb3RS
# NDYuY3JsMHsGCCsGAQUFBwEBBG8wbTBGBggrBgEFBQcwAoY6aHR0cDovL2NydC5z
# ZWN0aWdvLmNvbS9TZWN0aWdvUHVibGljQ29kZVNpZ25pbmdSb290UjQ2LnA3YzAj
# BggrBgEFBQcwAYYXaHR0cDovL29jc3Auc2VjdGlnby5jb20wDQYJKoZIhvcNAQEM
# BQADggIBAAb/guF3YzZue6EVIJsT/wT+mHVEYcNWlXHRkT+FoetAQLHI1uBy/YXK
# ZDk8+Y1LoNqHrp22AKMGxQtgCivnDHFyAQ9GXTmlk7MjcgQbDCx6mn7yIawsppWk
# vfPkKaAQsiqaT9DnMWBHVNIabGqgQSGTrQWo43MOfsPynhbz2Hyxf5XWKZpRvr3d
# MapandPfYgoZ8iDL2OR3sYztgJrbG6VZ9DoTXFm1g0Rf97Aaen1l4c+w3DC+IkwF
# kvjFV3jS49ZSc4lShKK6BrPTJYs4NG1DGzmpToTnwoqZ8fAmi2XlZnuchC4NPSZa
# PATHvNIzt+z1PHo35D/f7j2pO1S8BCysQDHCbM5Mnomnq5aYcKCsdbh0czchOm8b
# kinLrYrKpii+Tk7pwL7TjRKLXkomm5D1Umds++pip8wH2cQpf93at3VDcOK4N7Ew
# oIJB0kak6pSzEu4I64U6gZs7tS/dGNSljf2OSSnRr7KWzq03zl8l75jy+hOds9TW
# SenLbjBQUGR96cFr6lEUfAIEHVC1L68Y1GGxx4/eRI82ut83axHMViw1+sVpbPxg
# 51Tbnio1lB93079WPFnYaOvfGAA0e0zcfF/M9gXr+korwQTh2Prqooq2bYNMvUoU
# KD85gnJ+t0smrWrb8dee2CvYZXD5laGtaAxOfy/VKNmwuWuAh9kcMIIGYDCCBMig
# AwIBAgIRANm8nd1n4WvloMcEQ5z43dkwDQYJKoZIhvcNAQEMBQAwVDELMAkGA1UE
# BhMCR0IxGDAWBgNVBAoTD1NlY3RpZ28gTGltaXRlZDErMCkGA1UEAxMiU2VjdGln
# byBQdWJsaWMgQ29kZSBTaWduaW5nIENBIFIzNjAeFw0yMTEwMjIwMDAwMDBaFw0y
# NDEwMjEyMzU5NTlaMEcxCzAJBgNVBAYTAk5PMQ4wDAYDVQQIDAVWaWtlbjETMBEG
# A1UECgwKRHluYXBybyBBUzETMBEGA1UEAwwKRHluYXBybyBBUzCCAiIwDQYJKoZI
# hvcNAQEBBQADggIPADCCAgoCggIBAODd7SFuO0KPfAVdjt1o/NGqrIZXT7qOqrrL
# jI+cheKE/mCHJXFyHWAXgvNz5h++mTAG4bHGDYMYGplt+S3INAm2lnkh3kxerfLP
# +kmjaiQ/cT4nXomJkpAXnlVaoSXcJDcWDBDsmkD1+lFjE9nbEdeJOvQ4Q72Cn7OH
# sXthZchhiVJfPP0wywFG/uQsCMXgOqUFJwrpvOLOIqTUTH4+ZiwelFeGq4T+CEtF
# ic8rL8f6/lYotRv1MoRYsmV7iDnrY7e1drswAiv8bQNi842LfQ62uSCS4cYHpPOt
# b3rbqZHzTuL2o9Nqz2NcffwG4mkrKyYiWCvOKKg868z7/jc8uiMSt500SiJyjQA9
# zM0pqH1EbWIUBufpJuSc0TqnxxI0DG9z3m5xGV5Sydz5zfHVWhXP/nXtsf+8dAIT
# 1zUEC4HfMtVO/X3NVaZYmYwpmAuscVJCxdm786XLMTe3Nh18v1RdTn28uxr0JnoR
# wsmPRoYyJkUb3nbh1q+xMHv75QV3KPlfTe1UwpEs7K9YnOfpXLcJhn0u13ENN5Sm
# FNznnfkGxP0jSI5MZ3f2EI7ks1TsjZNeTSznW94hQz36Ttehm8y7uL5ew4jajYeW
# 6OUu/zGhJCpZNP2Hfyi0f06ISyJFWkog1Q3G0udZhUYf31pJ6G42ZxqS5ihdPLmG
# 1dYLGWd9AgMBAAGjggG4MIIBtDAfBgNVHSMEGDAWgBQPKssghyi47G9IritUpimq
# F6TNDDAdBgNVHQ4EFgQUx2vSVcLaMddlQfJKC3538TBe1ecwDgYDVR0PAQH/BAQD
# AgeAMAwGA1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwMwEQYJYIZIAYb4
# QgEBBAQDAgQQMEoGA1UdIARDMEEwNQYMKwYBBAGyMQECAQMCMCUwIwYIKwYBBQUH
# AgEWF2h0dHBzOi8vc2VjdGlnby5jb20vQ1BTMAgGBmeBDAEEATBJBgNVHR8EQjBA
# MD6gPKA6hjhodHRwOi8vY3JsLnNlY3RpZ28uY29tL1NlY3RpZ29QdWJsaWNDb2Rl
# U2lnbmluZ0NBUjM2LmNybDB5BggrBgEFBQcBAQRtMGswRAYIKwYBBQUHMAKGOGh0
# dHA6Ly9jcnQuc2VjdGlnby5jb20vU2VjdGlnb1B1YmxpY0NvZGVTaWduaW5nQ0FS
# MzYuY3J0MCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5zZWN0aWdvLmNvbTAaBgNV
# HREEEzARgQ9wb3N0QGR5bmFwcm8ubm8wDQYJKoZIhvcNAQEMBQADggGBAAe6J7g+
# cJ7iWZ1DyGKy/2Ber7rIqOeiLi16R3xz8l21++ruItAygqW3JBtLj5cAxCAgJJZe
# XlShKQh+fuoSxIWEWCpMC0k8865hZIhjzfX/TKdF4Bs4VsJqha72j412IITjNNnf
# ZxfZninStkY2wA1M7D7YZUYEqnN+9UO8iEVO4SY8aKIm4YCXI5LlpDoonXGqY/yA
# YBUvMRGutUNBoNWToY8xHeavrEZ/S5CUOzaeRByG9NMYtbfLJjV5APo1Aup0hZWj
# 424wSAWt8tkc+wErO/s1yMZqU8lw/ucqXB2WirvJr4zeJMh3RywOscJfxg8WONu0
# UVlHkly6DGurGpqM1ekFIFXVko/RPuaoIhsuTpO9rZTDTcZ5tNej3jzk8scDqOSo
# SsgrEDE3XeVXlyZD2p6P2XJzoSdZwfsHRlY/Ji0gyB9dBuxicOmcKk1fxvVgcjm6
# 6wjiMHOrZa2JiIxYtBVGinEEMU83eyq0deVNO1DqZcuLGAyGH4p96dKEYDGCAwow
# ggMGAgEBMGkwVDELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1NlY3RpZ28gTGltaXRl
# ZDErMCkGA1UEAxMiU2VjdGlnbyBQdWJsaWMgQ29kZSBTaWduaW5nIENBIFIzNgIR
# ANm8nd1n4WvloMcEQ5z43dkwCQYFKw4DAhoFAKB4MBgGCisGAQQBgjcCAQwxCjAI
# oAKAAKECgAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIB
# CzEOMAwGCisGAQQBgjcCARUwIwYJKoZIhvcNAQkEMRYEFE95qoyJI1mFqYH5+mOw
# DtoLhg18MA0GCSqGSIb3DQEBAQUABIICAHHjS6TJtqkrN4UoaUPYCWbh1wF+o7JE
# DcHaN7HbhNBKDBnABB0OwvdPxKJxNjGrKAcjPxPbYnl4WDMyLRp1kkhmwILZBbFT
# Maz7UWRFC9t+IKu8NnjjL04DYD/rX3xzMXHacE7v6pzEuXYVuX5ssxkD07ct8e0U
# THD8vPQNzoQXxjwwBd3NhpIDaYQ1sBzT31OhLWYcuF9yAspUd/zUUM5ucN97DocI
# oLpErGnyC9KaRvTcUlCI0xrbv1g1hDZlieI/CtitnFc2TeJoT7+kS7hFiw3WbucG
# TwQgiExA930ZtdEKvx+JEwUvu6+FuPL/JIdS+V3uCuVXqGFxxVr1Xuv4koqPtRbJ
# txJV5stXkTnxN+le0w2qTuPUzVJKKHiER1sgvMyfmFb5JzHSGvVGJjWuqDHW4ymV
# P/EN6liMaum2a4O9+wE2QvQ9zm3u7G1KTfiumvs7eiQztsmJu/pRi+hroSv2k/8J
# UQMJ11TxRFKvoHZ4JUNKWGGGvZYXTWyFBg/bnullI7UcB+shvRDHQ7e0gpfO1xTK
# V2xsjCkCD0clKe2gaFLUjSbGO8jJ2rYcE796uk84HBGy/rg41Q0nuZ/SnXRQxQHb
# yKWkJXBzfuHe8pJr5aj5f8FFpCDLkmke208ABHvUPfUnAfcRHBOpM8MXuxz3yFO6
# fLN1g2OJLzB2
# SIG # End signature block