# Import the helper functions

Import-Module $PSScriptRoot\..\..\Misc\helper.psm1 -Verbose:$false

function Get-TargetResource
{
	[CmdletBinding()]
	[OutputType([System.Collections.Hashtable])]
	param
	(
		[parameter(Mandatory = $true)]
		[System.String]
		$Category
	)

	#Write-Verbose "Use this cmdlet to deliver information about command processing."

	#Write-Debug "Use this cmdlet to write debug information while troubleshooting."


	<#
	$returnValue = @{
		Category = [System.String]
		Keypad = [System.String]
		Numlock = [System.String]		
		Fastboot = [System.String]
		FnLock = [System.String]
		FullScreenLogo = [System.String]
		FnLockMode = [System.String]
		Password = [System.String]
		SecurePassword = [System.String]
		PathToKey = [System.String]
		WarningsAndErr = [System.String]
		PowerWarn = [System.String]
		PntDevice = [System.String]
		ExternalHotKey = [System.String]
		PostF2Key = [System.String]
		PostF12Key = [System.String]
		PostHelpDeskKey = [System.String]
		RptKeyErr = [System.String]
		ExtPostTime = [System.String]
		SignOfLifeIndication = [System.String]
		WyseP25Access = [System.String]
	}

	$returnValue
	#>

   # Check if module DellBIOSprovider is already loaded. If not, load it.
   try{
    $bool = Confirm-DellPSDrive -verbose
    }
    catch 
    {
        write-Verbose $_
        $msg = "Get-TargetResource: $($_.Exception.Message)"
        Write-DellEventLog -Message $msg -EventID 1 -EntryType 'Error'
        write-Verbose "Exiting Get-TargetResource"
        return
    }
    if ($bool) {                      
        Write-Verbose "Dell PS-Drive DellSmbios is found."
    }
    else{
        $Message = “Get-TargetResource: Module DellBiosProvider was imported correctly."
        Write-DellEventLog -Message $Message -EventID 2 
    }

    $Get = get-childitem -path @("DellSmbios:\" + $Category)
     # Removing Verbose and Debug from output
    $PSBoundParameters.Remove("Verbose") | out-null
    $PSBoundParameters.Remove("Debug") | out-null

  
    $out = @{}   
    $Get | foreach-Object {$out.Add($_.Attribute, $_.CurrentValue)}
    $out.add('Category', $Category )
    $out
}


function Set-TargetResource
{
	[CmdletBinding()]
	param
	(
		[parameter(Mandatory = $true)]
		[System.String]
		$Category,

		[ValidateSet("Enabled","Disabled")]
		[System.String]
		$BiosConnect,
		
		[ValidateSet("Enabled","Disabled")]
		[System.String]
		$EnableSupportAssistOSRecovery,		
		
		[System.UInt32]
		$AutoOSRecoveryThreshold,

		[System.String]
		$Password,

		[System.String]
		$SecurePassword,

		[System.String]
		$PathToKey
	)

    if (-not(CheckModuleLoaded)) {
        Write-Verbose -Message 'Required module DellBiosProvider does not exist. Exiting.'
        return $true
    }

    $DellPSDrive = get-psdrive -name Dellsmbios
    if ( !$DellPSDrive)
    {
        $Message = "Drive DellSmbios is not found. Exiting."
        Write-Verbose $Message
        Write-DellEventLog -Message $Message -EventID 3 -EntryType "Error"
        return $true
    }
    $attributes_desired = $PSBoundParameters
    $atts = $attributes_desired

    $pathToCategory = $DellPSDrive.Name + ':\' + $atts["Category"]
    
    Dir $pathToCategory -verbose

    $atts.Remove("Verbose") | out-null
    $atts.Remove("Category") | out-null
    $atts.Remove("Debug") | out-null
    $securePwd=$atts["SecurePassword"]
    $passwordSet=$atts["Password"]
    $atts.Remove("Password") | Out-Null
    $atts.Remove("SecurePassword") | Out-Null
    $pathToKey=$atts["PathToKey"]
	if(-Not [string]::IsNullOrEmpty($pathToKey))
	{  
		if(Test-Path $pathToKey)
		{
		$key=Get-Content $pathToKey
		}
		else
		{
		$key=""
		}
	}
    $atts.Remove("PathToKey") | Out-Null
    
    #foreach($a in Import-Csv((Get-DellBIOSEncryptionKey)))
    #{
   # $key+=$a
   # }
    $atts.Keys | foreach-object { 
                   # $atts[$_]
                    $path = $pathToCategory + '\' + $($_)
                    $value = $atts[$_]
		    if(-Not [string]::IsNullOrEmpty($securePwd))
		    {                
			$pasvar=ConvertTo-SecureString $securePwd.ToString() -Key $key
            Set-Item  -path $path -value $value -verbose -ErrorVariable ev -ErrorAction SilentlyContinue -PasswordSecure $pasvar
		    }

		    elseif(-Not [string]::IsNullOrEmpty($passwordSet))
		    {
			Set-Item  -path $path -value $value -verbose -ErrorVariable ev -ErrorAction SilentlyContinue -Password $passwordSet
		    }

		    else
		    {
			Set-Item  -path $path -value $value -verbose -ErrorVariable ev -ErrorAction SilentlyContinue
		    }
                    if ( $ev) { 
                        $cmdline = $ExecutionContext.InvokeCommand.ExpandString($ev.InvocationInfo.Line)
                        $Message = "An error occured in executing " + $cmdline + "`nError message: $($ev.ErrorDetails)"
                        Write-Verbose $Message
                        Write-DellEventLog -Message $Message -EventID 5 -EntryType "Error"
                    }
                    
                 }


}


function Test-TargetResource
{
	[CmdletBinding()]
	[OutputType([System.Boolean])]
	param
	(
		[parameter(Mandatory = $true)]
		[System.String]
		$Category,

		[ValidateSet("Enabled","Disabled")]
		[System.String]
		$BiosConnect,
		
		[ValidateSet("Enabled","Disabled")]
		[System.String]
		$EnableSupportAssistOSRecovery,		
		
		[System.UInt32]
		$AutoOSRecoveryThreshold,

		[System.String]
		$Password,

		[System.String]
		$SecurePassword,

		[System.String]
		$PathToKey
	)
    $Get = Get-TargetResource $PSBoundParameters['Category'] -verbose

    New-DellEventLog
 
    $PSBoundParameters.Remove("Verbose") | out-null
    $PSBoundParameters.Remove("Debug") | out-null
    $PSBoundParameters.Remove("Category") | out-null
    $PSBoundParameters.Remove("Password") | out-null
    $PSBoundParameters.Remove("SecurePassword") | out-null

    $attributes_desired = $PSBoundParameters

    $bool = $true

    foreach ($config_att in  $PSBoundParameters.GetEnumerator())
    {
        if ($Get.ContainsKey($config_att.Key)) {
            $currentvalue = $Get[$config_att.Key]
            $currentvalue_nospace = $currentvalue -replace " ", ""
            if ($config_att.Value -ne $currentvalue_nospace){
                $bool = $false
                $drift  = "`nCurrentValue: $currentvalue_nospace`nDesiredValue: $($config_att.value)"
                $message = "Configuration is drifted in category $Category for $($config_att.Key). $drift"
                write-verbose $message
                Write-DellEventLog -Message $message -EventID 4 -EntryType Warning
            
            }
            else {
                write-Debug "Configuration is same for $config_att."
            }
    }
    else
    {
        $message = "Unsupported attribute $($config_att)"
        Write-Verbose $message
    }
   }
   return $bool
}


Export-ModuleMember -Function *-TargetResource


# SIG # Begin signature block
# MIIVqgYJKoZIhvcNAQcCoIIVmzCCFZcCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDYqO4WLoQtYjTw
# hij3bs46ASFRkIPgjQ13FiklqFPuvqCCCiMwggTCMIIDqqADAgECAhAiNl3Koo7M
# bamHXZYvcHGpMA0GCSqGSIb3DQEBCwUAMH8xCzAJBgNVBAYTAlVTMR0wGwYDVQQK
# ExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEfMB0GA1UECxMWU3ltYW50ZWMgVHJ1c3Qg
# TmV0d29yazEwMC4GA1UEAxMnU3ltYW50ZWMgQ2xhc3MgMyBTSEEyNTYgQ29kZSBT
# aWduaW5nIENBMB4XDTE4MDkyNzAwMDAwMFoXDTIxMDkyNjIzNTk1OVowWjELMAkG
# A1UEBhMCVVMxDjAMBgNVBAgMBVRleGFzMRMwEQYDVQQHDApSb3VuZCBSb2NrMRIw
# EAYDVQQKDAlEZWxsIEluYy4xEjAQBgNVBAMMCURlbGwgSW5jLjCCASIwDQYJKoZI
# hvcNAQEBBQADggEPADCCAQoCggEBAK2E5sUV7O7RXKt547mMdmq27CulgmONL6w3
# 2c5gs7vQsH3KWy9Q5rQ83MEPnRncZy71Alrky1G3dV3d1CxH7kH8xfu+YOUR+OVo
# VOFgkoT4tY2xST2B+WfS1jXJKzj5VQuOTn/f2Qie3mA02e3/YlTAMUmOqi4a2gNH
# 3r/de81Yj3e/DqzFV5rWrTfdZ7SQNoWVKA/cVu5KrPdXPjqMpRMxnjP4WPzs6eR0
# 4ONH6tvUNWP6PCrRxg5EIpKhbW0DZxvp1VqXDCyQLe98cjgbgD+0pUDrBGa3pxB3
# iJVBvZ5WI/OL0KxlvFtWrdEjIxTnwmq8pqp8i99v3u4LxrQEtZ0CAwEAAaOCAV0w
# ggFZMAkGA1UdEwQCMAAwDgYDVR0PAQH/BAQDAgeAMCsGA1UdHwQkMCIwIKAeoByG
# Gmh0dHA6Ly9zdi5zeW1jYi5jb20vc3YuY3JsMGEGA1UdIARaMFgwVgYGZ4EMAQQB
# MEwwIwYIKwYBBQUHAgEWF2h0dHBzOi8vZC5zeW1jYi5jb20vY3BzMCUGCCsGAQUF
# BwICMBkMF2h0dHBzOi8vZC5zeW1jYi5jb20vcnBhMBMGA1UdJQQMMAoGCCsGAQUF
# BwMDMFcGCCsGAQUFBwEBBEswSTAfBggrBgEFBQcwAYYTaHR0cDovL3N2LnN5bWNk
# LmNvbTAmBggrBgEFBQcwAoYaaHR0cDovL3N2LnN5bWNiLmNvbS9zdi5jcnQwHwYD
# VR0jBBgwFoAUljtT8Hkzl699g+8uK8zKt4YecmYwHQYDVR0OBBYEFNKZNdkAeaso
# MvcuUOlErixyOmzRMA0GCSqGSIb3DQEBCwUAA4IBAQBujEZqs+dJwHwXRBl4HNxI
# uOlp7kvlwIMdR+prfX31DALJEEn6qGHHpTMJaIVULHjqindsIDBuANm6fLTWuEPN
# bE1W5hd/XdOTKuWJaluAStl32Q0gdsc2nQLVo9KS6b3yJeTFWquDMg0oJrUcQS5n
# vxpKfKsukni83wb8dZxXTehzj6TcHdSqMPiU6KxfYB3+PcOfp00obHqOeRDuE8mB
# LupPJdUCbK+cq15n+o//wOi6dvoEu3xqJ3lGVDBN1MwbulMbYMt0UDonmn16Tkhj
# 80WP5zL65G9kbLD0Vifp4uddXjcHrwu4WEggab49TtcPNayPEofQXRdoHcmx5Tyh
# MIIFWTCCBEGgAwIBAgIQPXjX+XZJYLJhffTwHsqGKjANBgkqhkiG9w0BAQsFADCB
# yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
# ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
# U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
# ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
# aG9yaXR5IC0gRzUwHhcNMTMxMjEwMDAwMDAwWhcNMjMxMjA5MjM1OTU5WjB/MQsw
# CQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNV
# BAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxMDAuBgNVBAMTJ1N5bWFudGVjIENs
# YXNzIDMgU0hBMjU2IENvZGUgU2lnbmluZyBDQTCCASIwDQYJKoZIhvcNAQEBBQAD
# ggEPADCCAQoCggEBAJeDHgAWryyx0gjE12iTUWAecfbiR7TbWE0jYmq0v1obUfej
# DRh3aLvYNqsvIVDanvPnXydOC8KXyAlwk6naXA1OpA2RoLTsFM6RclQuzqPbROlS
# Gz9BPMpK5KrA6DmrU8wh0MzPf5vmwsxYaoIV7j02zxzFlwckjvF7vjEtPW7ctZlC
# n0thlV8ccO4XfduL5WGJeMdoG68ReBqYrsRVR1PZszLWoQ5GQMWXkorRU6eZW4U1
# V9Pqk2JhIArHMHckEU1ig7a6e2iCMe5lyt/51Y2yNdyMK29qclxghJzyDJRewFZS
# AEjM0/ilfd4v1xPkOKiE1Ua4E4bCG53qWjjdm9sCAwEAAaOCAYMwggF/MC8GCCsG
# AQUFBwEBBCMwITAfBggrBgEFBQcwAYYTaHR0cDovL3MyLnN5bWNiLmNvbTASBgNV
# HRMBAf8ECDAGAQH/AgEAMGwGA1UdIARlMGMwYQYLYIZIAYb4RQEHFwMwUjAmBggr
# BgEFBQcCARYaaHR0cDovL3d3dy5zeW1hdXRoLmNvbS9jcHMwKAYIKwYBBQUHAgIw
# HBoaaHR0cDovL3d3dy5zeW1hdXRoLmNvbS9ycGEwMAYDVR0fBCkwJzAloCOgIYYf
# aHR0cDovL3MxLnN5bWNiLmNvbS9wY2EzLWc1LmNybDAdBgNVHSUEFjAUBggrBgEF
# BQcDAgYIKwYBBQUHAwMwDgYDVR0PAQH/BAQDAgEGMCkGA1UdEQQiMCCkHjAcMRow
# GAYDVQQDExFTeW1hbnRlY1BLSS0xLTU2NzAdBgNVHQ4EFgQUljtT8Hkzl699g+8u
# K8zKt4YecmYwHwYDVR0jBBgwFoAUf9Nlp8Ld7LvwMAnzQzn6Aq8zMTMwDQYJKoZI
# hvcNAQELBQADggEBABOFGh5pqTf3oL2kr34dYVP+nYxeDKZ1HngXI9397BoDVTn7
# cZXHZVqnjjDSRFph23Bv2iEFwi5zuknx0ZP+XcnNXgPgiZ4/dB7X9ziLqdbPuzUv
# M1ioklbRyE07guZ5hBb8KLCxR/Mdoj7uh9mmf6RWpT+thC4p3ny8qKqjPQQB6rqT
# og5QIikXTIfkOhFf1qQliZsFay+0yQFMJ3sLrBkFIqBgFT/ayftNTI/7cmd3/SeU
# x7o1DohJ/o39KK9KEr0Ns5cF3kQMFfo2KwPcwVAB8aERXRTl4r0nS1S+K4ReD6bD
# dAUK75fDiSKxH3fzvc1D1PFMqT+1i4SvZPLQFCExggrdMIIK2QIBATCBkzB/MQsw
# CQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNV
# BAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxMDAuBgNVBAMTJ1N5bWFudGVjIENs
# YXNzIDMgU0hBMjU2IENvZGUgU2lnbmluZyBDQQIQIjZdyqKOzG2ph12WL3BxqTAN
# BglghkgBZQMEAgEFAKCBrDAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgor
# BgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG9w0BCQQxIgQg+wgMKjzf
# VYNL8n+FugjYL1DgvUeLdZlTwLrQD5H2WngwQAYKKwYBBAGCNwIBDDEyMDCgFoAU
# AEQAZQBsAGwALAAgAEkAbgBjAC6hFoAUaHR0cDovL3d3dy5kZWxsLmNvbSAwDQYJ
# KoZIhvcNAQEBBQAEggEAQrjqZScqACBQIxUwd1jt+9+5mxlzcscAJ2FIkK8emd6M
# UxDNXa13MGtUeBJh77T2ERT5m2xFvhgV4bsovlKjxBMdzgRqeV4xtllUyPtQbi+/
# i8A6lCqgfCtmaoOf6PDnM1DvQGPO8h1cmI5xrXH6FKzbQpQWG8ETpAnefaXm4Uhk
# 1MRDIZ37BAH+wim+s8mH+C1xJtR7MzQ/DQvAEDCflVQeREjzrgorufDAKM/Qm/Nj
# EDtOwXBheA7AfK0N227HgqxlxSIbFC5d6YZoUF1vhZezPIkyOIRKhPWJbOq0Luyv
# UJMy+gYQBmIvbEcm46WtCMaSiL8Dj3YKRtWyVpA+U6GCCGswgghnBgorBgEEAYI3
# AwMBMYIIVzCCCFMGCSqGSIb3DQEHAqCCCEQwgghAAgEDMQ8wDQYJYIZIAWUDBAIB
# BQAwggEPBgsqhkiG9w0BCRABBKCB/wSB/DCB+QIBAQYKKwYBBAGyMQIBATAxMA0G
# CWCGSAFlAwQCAQUABCBu1VHg86FcEBue8cepgKnLKggsrYKsYVHqT5jc0kUKcgIV
# AMb1RhMQBNnNf4NYdOeUuv+bHgQ2GA8yMDE5MDQyMjA2MDE1NlqggYykgYkwgYYx
# CzAJBgNVBAYTAkdCMRswGQYDVQQIExJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNV
# BAcTB1NhbGZvcmQxGjAYBgNVBAoTEUNPTU9ETyBDQSBMaW1pdGVkMSwwKgYDVQQD
# EyNDT01PRE8gU0hBLTI1NiBUaW1lIFN0YW1waW5nIFNpZ25lcqCCBKAwggScMIID
# hKADAgECAhBOsIePzCQ1NrLYyfe/OVV3MA0GCSqGSIb3DQEBCwUAMIGVMQswCQYD
# VQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w
# HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93
# d3cudXNlcnRydXN0LmNvbTEdMBsGA1UEAxMUVVROLVVTRVJGaXJzdC1PYmplY3Qw
# HhcNMTUxMjMxMDAwMDAwWhcNMTkwNzA5MTg0MDM2WjCBhjELMAkGA1UEBhMCR0Ix
# GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEa
# MBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxLDAqBgNVBAMTI0NPTU9ETyBTSEEt
# MjU2IFRpbWUgU3RhbXBpbmcgU2lnbmVyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
# MIIBCgKCAQEAzrx0t3CAT17zP5iqLsvUEgEjNWkLIrzm/QlsKOQTEqy7ui3l1d0i
# 7nO2LPjSpHHnSSV4qyW3kBCgm4t3Jt1A6kGj/YjNcqaJO1BXHHolJCICUUA1Z4ox
# aQ3lOXNJOZuVAYVS8isUiZpOBKS8QK45pt1AAuA6df49fVWUW/FOJHzIuFgZysDa
# vlgTmuYc59HBO/Bdj0kIIZ7Q877W1GZPXHI2e8OC05gIlK+rRE8YxxTaFrEeMg4S
# OMC1PHbsdVAAIAQRGe3G/99O/giBJzFPcXRuAwxwJ4FVappDkqR/2/0/xRceQbvO
# 6Kd/jJX5/X/4YYiJAD7/CwHb/dW1pOSREQIDAQABo4H0MIHxMB8GA1UdIwQYMBaA
# FNrtZHQUnBQ8q92Zqb1bKE2LPMnYMB0GA1UdDgQWBBR9v5HXp2xaR2ZEe5DUjpBy
# QY8XwjAOBgNVHQ8BAf8EBAMCBsAwDAYDVR0TAQH/BAIwADAWBgNVHSUBAf8EDDAK
# BggrBgEFBQcDCDBCBgNVHR8EOzA5MDegNaAzhjFodHRwOi8vY3JsLnVzZXJ0cnVz
# dC5jb20vVVROLVVTRVJGaXJzdC1PYmplY3QuY3JsMDUGCCsGAQUFBwEBBCkwJzAl
# BggrBgEFBQcwAYYZaHR0cDovL29jc3AudXNlcnRydXN0LmNvbTANBgkqhkiG9w0B
# AQsFAAOCAQEAULD131+tM9zDU1hYvMITdXsgHVTKuj9QP7qK9GsJY8BbXYvWdRpz
# vYv/R/EV3FEWIxky5m6STdHGLloeiEIUyXLl1whQimr1ZEBWriTjYZcVQvAsSK6D
# 5jU8i1vCj66OzDRSNOD7/sr9sSRo0aQRIxAG/bLCJCfH1+lKHI8/Ps/t63V5bI5f
# 9yG2UOYloc1mlBJsv9uzrofYaANyIALCftqU83IHPFfoVSTnBaAdxIEBgksfPw+d
# M5vwT8yd1oWBz8vn/Urpkrj3DXJzLel3+W+PKHo+Hr0IhtyNHhFf91u7h3bGnkxU
# YdBn25OE2jGHA5Lnn+Ppz1pWyGjgUkmUXDGCAnEwggJtAgEBMIGqMIGVMQswCQYD
# VQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w
# HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93
# d3cudXNlcnRydXN0LmNvbTEdMBsGA1UEAxMUVVROLVVTRVJGaXJzdC1PYmplY3QC
# EE6wh4/MJDU2stjJ9785VXcwDQYJYIZIAWUDBAIBBQCggZgwGgYJKoZIhvcNAQkD
# MQ0GCyqGSIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0xOTA0MjIwNjAxNTZaMCsG
# CyqGSIb3DQEJEAIMMRwwGjAYMBYEFDZSfU+iamj560WW8dmauywOp236MC8GCSqG
# SIb3DQEJBDEiBCC85FRzczUxB/gD1AW5E3+MBWhgNXuKWLES08/jiJjWRjANBgkq
# hkiG9w0BAQEFAASCAQCTNYo/KyIHG6vrevP0cP1cqEqjV+MTEREqPJueZmnUxsjE
# geQBRNn1Ckz51sNu42BGjsBk7l19o0Y+jO1tqM7fchcRnw9Z0MgUrKoWuVnGohfk
# /2sVOnXKj6INXkq4kgFU8TarItm5zvXfUiyvgIk/dhuvEaesa4yHtHzRUwRQlnXS
# gNuFeWz167AiofNFynwYS94vnEbbSNOg/eEHo6RCOtJBR+19thqu3nM9IIFLWemg
# 91LEcioTS/StUtbXCJI5Kmn6w5637EWPUpch3Nn7xV+D/vVHz5bztqljWoZgR/gY
# 2+J81ZA3UJ//+TulxuQbUCndj/dI2qQ5JZxQ0Mcz
# SIG # End signature block
