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
 
.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 = '\source\repos',
    [switch] $createWorkspaceFolder,
    [ValidateSet('', 'OnPrem', 'Sandbox')]
    [string] $type = "OnPrem"
  )
  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 "no\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 "no\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 "no\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 "no\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 "no\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 "no\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 "no\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 "no\Applications.NO"

        $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\no\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
# AgEAAgEAAgEAAgEAAgEAMCEwCQYFKw4DAhoFAAQUmXmCD7IhVNX704Br/qWWMWBD
# ocmgghH1MIIFbzCCBFegAwIBAgIQSPyTtGBVlI02p8mKidaUFjANBgkqhkiG9w0B
# 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
# CzEOMAwGCisGAQQBgjcCARUwIwYJKoZIhvcNAQkEMRYEFGEpQTjtKTaVtNXuphty
# mexpts3yMA0GCSqGSIb3DQEBAQUABIICADNWXtchHx4NBrS8flWrO19Z1lNTO0v4
# pU4mCHo7d3tdHnShOLQNCgRmgcUfkEfBHsG6nokjlcAMxjf7Mf02KeKedaC3a1Lr
# P46JazU19KPFNbjjaFQtzR3Ery8hSXBXj0KnTsFWVhD5xGPtYfhKkM+suEc5lS8c
# jF93+Ba2XPeZftFENn/oufeiI1bVist2LNecbCNf98N1esdE4Jow6uawsNvwI8FE
# n9kOUdZjsjTjWLk6c9qEsZWKT2lsKlCsCMnjDz9O7LJjU15cjRckMPcHDjJizSdH
# U7byzbKYPc3pK+cXf1Av4+z2c/y6rmxUp4D2sZVd6vE+Xp8SuKToIGiHnW8e05K/
# 4hE0ZsYDpRCDNp62IKSfMQGHF0HrlHRovnVvH/Y69vSXd/DQD1/0X8Ln3WJpt+/h
# pJt38dw3iB40VVR0sxwMH9z8g+jbj29eKaNuGJeNaS/W2qjIi+PKbvPOeudRGEeu
# bh+lOaeSQCX5qLh9JaR1k/AYspGIA7SmZgqbpSw78LLe1dk8/Qkd3c49k7hSH68H
# K+v+O4dn4KEq3/v2tBi2BCaQJ1eTXyrOaKk5mtERZ8ZBIQvE5QNPjLFdW0/qNZbC
# 11OEMF4hBUjejTgDo5pr4Sa/O3yNluOQS4xfypmq2Den6HJIoN6+c2yCxE3nOYRq
# OzVT+REzo3Gg
# SIG # End signature block