ObjectHandling/Export-NavContainerObjects.ps1
|
<#
.Synopsis Export objects from a Nav container .Description Creates a session to the Nav container and launch the Export-NavApplicationObjects Cmdlet to export object .Parameter containerName Name of the container for which you want to enter a session .Parameter objectsFolder The folder to which the objects are exported (needs to be shared with the container) NOTE: The content of this folder will be deleted. .Parameter sqlCredential Credentials for the SQL admin user if using NavUserPassword authentication. User will be prompted if not provided .Parameter filter Specifies which objects to export (default is modified=Yes) .Parameter exportTo Specifies how you want to export objects, one of ('txt folder','txt folder (new syntax)','txt file','txt file (new syntax)','fob file') .Parameter exportToNewSyntax Specifies whether or not to export objects in new syntax (default is true) .Parameter includeSystemObjects Include the includeSystemObjects switch to include the system objects in the export .Example Export-NavContainerObject -containerName test -objectsFolder c:\programdata\bccontainerhelper\objects .Example Export-NavContainerObject -containerName test -objectsFolder c:\programdata\bccontainerhelper\objects -sqlCredential (get-credential -credential 'sa') -filter "" #> function Export-NavContainerObjects { Param ( [string] $containerName = $bcContainerHelperConfig.defaultContainerName, [Parameter(Mandatory=$true)] [string] $objectsFolder, [Parameter(Mandatory=$false)] [string] $filter = "modified=Yes", [Parameter(Mandatory=$false)] [PSCredential] $sqlCredential = $null, [ValidateSet('txt folder','txt folder (new syntax)','txt file','txt file (new syntax)','fob file')] [string] $exportTo = 'txt folder (new syntax)', [Obsolete("exportToNewSyntax is obsolete, please use exportTo instead")] [switch] $exportToNewSyntax = $true, [switch] $includeSystemObjects, [switch] $PreserveFormatting ) $telemetryScope = InitTelemetryScope -name $MyInvocation.InvocationName -parameterValues $PSBoundParameters -includeParameters @() try { AssumeNavContainer -containerOrImageName $containerName -functionName $MyInvocation.MyCommand.Name if (!$exportToNewSyntax) { $exportTo = 'txt folder' } if ("$objectsFolder" -eq "$($bcContainerHelperConfig.hostHelperFolder)" -or "$objectsFolder" -eq "$($bcContainerHelperConfig.hostHelperFolder)\") { throw "The folder specified in ObjectsFolder will be erased, you cannot specify $bcContainerHelperConfig.hostHelperFolder" } $sqlCredential = Get-DefaultSqlCredential -containerName $containerName -sqlCredential $sqlCredential -doNotAskForCredential $containerObjectsFolder = Get-NavContainerPath -containerName $containerName -path $objectsFolder -throw $navversion = Get-NavContainerNavversion -containerOrImageName $containerName $version = [System.Version]($navversion.split('-')[0]) $ignoreSystemObjects = ($version.Major -ge 14 -and !$includeSystemObjects) if ($version.Major -lt 9) { $PreserveFormatting = $true } Invoke-ScriptInNavContainer -containerName $containerName -ScriptBlock { Param($filter, $objectsFolder, [System.Management.Automation.PSCredential]$sqlCredential, $exportTo, $ignoreSystemObjects, $preserveFormatting) if ($exportTo -eq 'fob file') { $objectsFile = "$objectsFolder\objects.fob" } else { $objectsFile = "$objectsFolder\objects.txt" } if (Test-Path $objectsFolder -PathType Container) { Get-ChildItem -Path $objectsFolder -Include * | Remove-Item -Recurse -Force } else { New-Item -Path $objectsFolder -ItemType Directory -Force -ErrorAction Ignore | Out-Null } if ($ignoreSystemObjects) { if ($filter) { if (!($filter.StartsWith('Id=', 'CurrentCultureIgnoreCase') -or $filter.ToLowerInvariant().Contains(';id='))) { $filter += ";Id=1..1999999999" } } else { $filter = "Id=1..1999999999" } } $filterStr = "" if ($filter) { $filterStr = " with filter '$filter'" } if ($exportTo.Contains('(new syntax)')) { Write-Host "Export Objects$filterStr (new syntax) to $objectsFile (container path)" } else { Write-Host "Export Objects$filterStr to $objectsFile (container path)" } $customConfigFile = Join-Path (Get-Item "C:\Program Files\Microsoft Dynamics NAV\*\Service").FullName "CustomSettings.config" [xml]$customConfig = [System.IO.File]::ReadAllText($customConfigFile) $databaseServer = $customConfig.SelectSingleNode("//appSettings/add[@key='DatabaseServer']").Value $databaseInstance = $customConfig.SelectSingleNode("//appSettings/add[@key='DatabaseInstance']").Value $databaseName = $customConfig.SelectSingleNode("//appSettings/add[@key='DatabaseName']").Value if ($databaseInstance) { $databaseServer += "\$databaseInstance" } $params = @{ 'ExportTxtSkipUnlicensed' = $true } if ($sqlCredential) { $params += @{ 'Username' = $sqlCredential.UserName; 'Password' = ([System.Runtime.InteropServices.Marshal]::PtrToStringBSTR([System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($sqlCredential.Password))) } } if ($exportTo.Contains('(new syntax)')) { $params += @{ 'ExportToNewSyntax' = $true } } Export-NAVApplicationObject @params -DatabaseName $databaseName ` -Path $objectsFile ` -DatabaseServer $databaseServer ` -Force ` -Filter "$filter" | Out-Null if ($exportTo.Contains("folder")) { Write-Host "Split $objectsFile to $objectsFolder (container paths)" if ((Test-Path $objectsFile) -and ((Get-Item -Path $objectsFile).Length -gt 0)) { if ([System.Text.Encoding]::Default.BodyName -eq "utf-8") { $cp = (Get-Culture).TextInfo.OEMCodePage $encoding = [System.Text.Encoding]::GetEncoding($cp) Write-Host "Converting objects file from OEM($cp) to UTF8 before splitting" $content = [System.IO.File]::ReadAllText($objectsFile, $encoding ) [System.IO.File]::WriteAllText($objectsFile, $content, [System.Text.Encoding]::UTF8 ) } $preserveFormattingParam = @{} if ($preserveFormatting) { $preserveFormattingParam = @{ "PreserveFormatting" = $true } } Split-NAVApplicationObjectFile -Source $objectsFile ` -Destination $objectsFolder @preserveFormattingParam if ([System.Text.Encoding]::Default.BodyName -eq "utf-8") { Write-Host "Converting object files from UTF8 to OEM($cp) after splitting" Get-ChildItem -Path (Join-Path $objectsFolder "*.txt") | ForEach-Object { $content = [System.IO.File]::ReadAllText($_.FullName,[System.Text.Encoding]::UTF8 ) [System.IO.File]::WriteAllText($_.FullName, $content, $encoding ) } } } Remove-Item -Path $objectsFile -Force -ErrorAction Ignore } } -ArgumentList $filter, $containerObjectsFolder, $sqlCredential, $exportTo, $ignoreSystemObjects, $preserveFormatting } catch { TrackException -telemetryScope $telemetryScope -errorRecord $_ throw } finally { TrackTrace -telemetryScope $telemetryScope } } Export-ModuleMember -Function Export-NavContainerObjects # SIG # Begin signature block # MIInQgYJKoZIhvcNAQcCoIInMzCCJy8CAQExDzANBglghkgBZQMEAgEFADB5Bgor # BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG # KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCC2BujkVDLZpuIY # dChxxPcpvlNQo/fo5sBwHkEyj92tjaCCDLowggX1MIID3aADAgECAhMzAAACHU0Z # yE7XD1dIAAAAAAIdMA0GCSqGSIb3DQEBCwUAMFcxCzAJBgNVBAYTAlVTMR4wHAYD # VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBD # b2RlIFNpZ25pbmcgUENBIDIwMjQwHhcNMjYwNDE2MTg1OTQzWhcNMjcwNDE1MTg1 # OTQzWjB0MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE # BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYD # VQQDExVNaWNyb3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IB # DwAwggEKAoIBAQDQvewXxx9gZZFC6Ys1WBay8BJ8kGA4JQnH5CMafqOASlTpK9H8 # o5ZXTXt0caVQTNMUPt445wXYD+dFtaKWTwDn1I52oUSrC9vJin1Gsqt+zyKJL5Dg # 3eQXbQNR61DmMy20GLTIO3SFed9Rfi/ophgCLGFLDR3r0KvHjwMb/jYWS0celV/4 # Lz27LfAekm8v9E5IXaeiXbAUYZKK090n4CVl3JBtbN+9DtI9SNu/yjvozW52/u7R # X/Ttpa/KDlpuokZ+Zcbvmtd9ur9gFLvZzh41o9MsE/clQtdaFWGvuo6Jua/ntpgk # ey3E5/vBFe+MJPG6phdnuo6r57ZudCudiI1bAgMBAAGjggGbMIIBlzAOBgNVHQ8B # Af8EBAMCB4AwHwYDVR0lBBgwFgYKKwYBBAGCN0wIAQYIKwYBBQUHAwMwHQYDVR0O # BBYEFH6QuMwqcPG0hQlQ6c5jCtTTLrVeMEUGA1UdEQQ+MDykOjA4MR4wHAYDVQQL # ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xFjAUBgNVBAUTDTIzMDAxMis1MDc1NTkw # HwYDVR0jBBgwFoAUf1k/VCHarU/vBeXmo9ctBpQSCDEwYAYDVR0fBFkwVzBVoFOg # UYZPaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWljcm9zb2Z0 # JTIwQ29kZSUyMFNpZ25pbmclMjBQQ0ElMjAyMDI0LmNybDBtBggrBgEFBQcBAQRh # MF8wXQYIKwYBBQUHMAKGUWh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMv # Y2VydHMvTWljcm9zb2Z0JTIwQ29kZSUyMFNpZ25pbmclMjBQQ0ElMjAyMDI0LmNy # dDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4ICAQBKTbYOjzwTG/DXGaz9 # s6+fQeaTtDcFmMY+5UyVFCyj7Pv+5i37qfX8lSL/tBIfYQfWsMuBQlfZurJD6r4H # VJ2CeH+1fgiq8dcHdVKoZ3Sa2qXoX3cq9iS8cVb06B7+5/XJ7I0OxHH9fDsvJ3T3 # w5V/ZtAIFmLrl+P0CtG+92uzRsn0nTbdFjOkLMLWPLAU3THohKRlSEMgFJpPkm5n # 5UAZ35xX6FWCrDLsSKb555bTifwa8mJBwdlof0bmfYidH+dxZ1FdDxvLnNl9zeKs # A4kejaaIqqIPguhwAti5Ql7BlTNoJNwxCvBmqW2MQLnCkYN/VVUsR3V2x/rcTNzo # Bf/Z/SpROvdaA2ZOOd1uioXJt3tdLQ7vHpqpib0KfWr/FWXW10q38VxfCnRQBqzb # SuztR7nEMuzX7Ck+B/XaPDXd1qh72+QYyB0Z2VzWmO9zsnb9Uq/dwu8LGeQqnyu6 # 7SDGACvnXii2fb9+US492VTnXSnFKyqwgzUyFMtZK1/sHYTv6bG4TtQUygQxTN+Z # V+aJIlKO2MqZ7bKrAnOzS9m6NgoTdWOq11bTOZwKlIEV/EhV9SWkDmdpR/hPPT2v # 6TEj4F8PT/zHjRezIU5c/DGlt/VhY/pK0XkJtEyMmmS1BMtjU/rqBZVMIm3dnxQs # /TBByr+Cf8Z1r7aifQVQ+WSqzjCCBr0wggSloAMCAQICEzMAAAA5O7Y3Gb8GHWcA # AAAAADkwDQYJKoZIhvcNAQEMBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpX # YXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg # Q29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBSb290IENlcnRpZmljYXRl # IEF1dGhvcml0eSAyMDExMB4XDTI0MDgwODIwNTQxOFoXDTM2MDMyMjIyMTMwNFow # VzELMAkGA1UEBhMCVVMxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEo # MCYGA1UEAxMfTWljcm9zb2Z0IENvZGUgU2lnbmluZyBQQ0EgMjAyNDCCAiIwDQYJ # KoZIhvcNAQEBBQADggIPADCCAgoCggIBANgBnB7jOMeqlRYHNa265v4IY9fH8TKh # emHfPINe1gpLaV3dhg324WwH06LcHbpnsBukCDNitryo0dtS/EW6I/yEL/bLSY8h # KpbfQuWusBPr9qazYcDxCW/qnjb5JsI1s8bNOg3bVATvQVL4tcf03aTycsz8QeCd # M0l/yHRObJ9QqazM1r6VPEOJ7LL+uEEb73w6QCuhs89a1uv1zerOYMnsneRRwCbp # yW11IcggU0cRKDDq1pjVJzIbIF6+oiXXbReOsgeI8zu1FyQfK0fVkaya8SmVHQ/t # Of23mZ4W9k0Ri22QW9p3UgSC5OUDktKxxcCmGL6tXLfOGSWHIIV4YrTJTT6PNty5 # REojHJuZHArkF9VnHTERWoTjAzfI3kP+5b4alUdhgAZ7ttOu1bVnXfHaqPYl2rPs # 20ji03LOVWsh/radgE17es5hL+t6lV0eVHrVhsssROWJuz2MXMCt7iw7lFPG9LXK # Gjsmonn2gotGdHIuEg5JnJMJVmixd5LRlkmgYRZKzhxSCwyoGIq0PhaA7Y+VPct5 # pCHkijcIIDm0nlkK+0KyepolcqGm0T/GYQRMhHJlGOOmVQop36wUVUYklUy++vDW # eEgEo4s7hxN6mIbf2MSIQ/iIfMZgJxC69oukMUXCrOC3SkE/xIkgpfl22MM1itkZ # 35nNXkMolU1lAgMBAAGjggFOMIIBSjAOBgNVHQ8BAf8EBAMCAYYwEAYJKwYBBAGC # NxUBBAMCAQAwHQYDVR0OBBYEFH9ZP1Qh2q1P7wXl5qPXLQaUEggxMBkGCSsGAQQB # gjcUAgQMHgoAUwB1AGIAQwBBMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU # ci06AjGQQ7kUBU7h6qfHMdEjiTQwWgYDVR0fBFMwUTBPoE2gS4ZJaHR0cDovL2Ny # bC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWljUm9vQ2VyQXV0MjAx # MV8yMDExXzAzXzIyLmNybDBeBggrBgEFBQcBAQRSMFAwTgYIKwYBBQUHMAKGQmh0 # dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0MjAx # MV8yMDExXzAzXzIyLmNydDANBgkqhkiG9w0BAQwFAAOCAgEAFJQfOChP7onn6fLI # MKrSlN1WYKwDFgAddymOUO3FrM8d7B/W/iQ6DxXsDn7D5W4wMwYeLystcEqfkjz4 # NURRgazyMu5yRzQh4LqjA4tStTcJh1opExo7nn5PuPBYnbu0+THSuVHTe0VTTPVh # ily/piFrDo3axQ9P4C+Ol5yet+2gTfekICS5xS+cYfSIvgn0JksVBVMYVI5QFu/q # hnLhsEFEUzG8fvv0hjgkO+lkpV9ty6GkN4vdnd7ya6Q6aR9y34aiM1qmxaxBi6OU # nyNl6fkuun/diTFnYDLTppOkr/mg5WSfCiDVMNCxtj4wPKC5OmHm1DQIt/MNokbb # H3UGsFP1QbzsLocuSqLCvH09Io3fDPTmscR9Y75G4qX7RTX8AdBPo0I6OEojf39z # uFZt0qOHm65YWQE69cZM2ueE1MB05dNNgHK9gTE7zKvK/fg8B2qjW88MT/WF5V5u # vZGtqa9FSL2RazArA+rDPuf6JGYz4HpgMZHB4S6szWSKYBv0VisCzfxgeU+dquXW # 9bd0auYlOB58DPcOYKdc3Se94g+xL4pcEhbB54JOgAkwYTu/9dLeH2pDqeJZAABV # DWRQCaXfO5LgyKwKCLYXpigrZYCjUSBcr+Ve8PFWMhVTQl0v4q8J/AUmQN5W4n10 # 1cY2L4A7GTQG1h32HHAvfQESWP0xghneMIIZ2gIBATBuMFcxCzAJBgNVBAYTAlVT # MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jv # c29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMjQCEzMAAAIdTRnITtcPV0gAAAAAAh0w # DQYJYIZIAWUDBAIBBQCgga4wGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYK # KwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIH3P4rG1 # yAmVuPuoFFfPm7ssbUhIr2jsjjDglLtCxgJ+MEIGCisGAQQBgjcCAQwxNDAyoBSA # EgBNAGkAYwByAG8AcwBvAGYAdKEagBhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20w # DQYJKoZIhvcNAQEBBQAEggEAI5NDkjyoiz9496z0QJjb1IP3lzo1zSt9y9WODoeK # +fONx/ve/wzcJNdA2CPYvzLjYkR2lq39++gUuiYwWW17paAdXEt5HH2W5jFg4k3n # FKKX86aRft8tpY5L8T/G7+yvxbhrco/QGAKDazqPKyjHD8Kia8Cw2BfBtUGYtyjU # EMXjv54sAUK5lSZouQ6hreeXdEoiISflV7Cdd4moR4t3zw8m6v1xIVgnH1C0mNvn # X4J40JSSah93R1mPvtVVFZMJwnqkp7ZTNcl31SHjul3/vYhcQS8ifhqCirl5nda8 # xjNhPpsgknjeDURY/VJazyhkMtm5HHiBl/bv4Tn+hvrzhqGCF5AwgheMBgorBgEE # AYI3AwMBMYIXfDCCF3gGCSqGSIb3DQEHAqCCF2kwghdlAgEDMQ8wDQYJYIZIAWUD # BAIBBQAwggFOBgsqhkiG9w0BCRABBKCCAT0EggE5MIIBNQIBAQYKKwYBBAGEWQoD # ATAxMA0GCWCGSAFlAwQCAQUABCDybld5ZnVQWuLcvbLqoe8+enRaiLQHdXr1rLXa # s6W0VgIGaeddUxpXGA8yMDI2MDQyNzA5MDI1NFowBIACAfSggdGkgc4wgcsxCzAJ # BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k # MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJTAjBgNVBAsTHE1pY3Jv # c29mdCBBbWVyaWNhIE9wZXJhdGlvbnMxJzAlBgNVBAsTHm5TaGllbGQgVFNTIEVT # TjpBNDAwLTA1RTAtRDk0NzElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAg # U2VydmljZaCCEeowggcgMIIFCKADAgECAhMzAAACKPClh9fzyB5AAAEAAAIoMA0G # CSqGSIb3DQEBCwUAMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9u # MRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRp # b24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4XDTI2 # MDIxOTE5NDAwNloXDTI3MDUxNzE5NDAwNlowgcsxCzAJBgNVBAYTAlVTMRMwEQYD # VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy # b3NvZnQgQ29ycG9yYXRpb24xJTAjBgNVBAsTHE1pY3Jvc29mdCBBbWVyaWNhIE9w # ZXJhdGlvbnMxJzAlBgNVBAsTHm5TaGllbGQgVFNTIEVTTjpBNDAwLTA1RTAtRDk0 # NzElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZTCCAiIwDQYJ # KoZIhvcNAQEBBQADggIPADCCAgoCggIBAK6O9uT+ypwJJF5lol8K5/U3BFxzteSe # ETrCQuh+Q2PWbEQCDfmrLbFwWOCNqu1W8DT1bxAdynIypVJc5PE0cmyaTSo/YIMu # 9QC6VaDtpLmgE5GkRfWjPefRHac+p4fQgcrXMnGPFodbbUBu5nRn7AzdZg3OQGVw # eZV7TdkbuuWTbyHvavk/kwTwUakWZhbkeXumwpuAsR+tgCK2m22xv6xmwFQj6Ewq # Xi4slii0rJm/V7A4iKcF9FTxCiyK+Oh9oF7NR/011X6IataHfbVadKwrcD8mXoYu # 1tJZdwlZQuBvG6qehs8r5iUHfXvhMxZOBfhhaMbujQ63P+mMc0IoFsHvzx3KeEt0 # ZjoHTwT37hIatGmy3LiIkc7J0cIDkziLnJhHCx2636Ca/EilPzI1clyMkKDS87ya # /+cVj1bK2/aqYK0IUWK8ZRapTbT+xR5GihBkaJA4lCfT3kKPeKwiy9E/wpTuE38Q # MjwdWxv80/MwUu9HOetGePRM6cOI5NRydjCaT5d+hLWjCyRwIILAedsLTQPnzPzf # LsrlkkHvjmFyfgITadHd7pEayvjbLmq23ox3P+zsxOcNLZSZUdZfVf8dl7dSVfyC # P+3rcvnTEg+qREIER0zUAM1RpJ+j05CIpv9uPV2JkIZN8QNQEEuinWaGTAgXzZ9q # mVXZu6xn5TiRAgMBAAGjggFJMIIBRTAdBgNVHQ4EFgQUqsmljPjy3Oi69WQFW2EB # IWlD3cMwHwYDVR0jBBgwFoAUn6cVXQBeYl2D9OXSZacbUzUZ6XIwXwYDVR0fBFgw # VjBUoFKgUIZOaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jcmwvTWlj # cm9zb2Z0JTIwVGltZS1TdGFtcCUyMFBDQSUyMDIwMTAoMSkuY3JsMGwGCCsGAQUF # BwEBBGAwXjBcBggrBgEFBQcwAoZQaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3Br # aW9wcy9jZXJ0cy9NaWNyb3NvZnQlMjBUaW1lLVN0YW1wJTIwUENBJTIwMjAxMCgx # KS5jcnQwDAYDVR0TAQH/BAIwADAWBgNVHSUBAf8EDDAKBggrBgEFBQcDCDAOBgNV # HQ8BAf8EBAMCB4AwDQYJKoZIhvcNAQELBQADggIBAJDo18uatFqGBW2BaDfzcZpL # Tt8fKh3puFxQ423a1637oFo24fSvsAGRUeF46nEF2tSs4RhURoiKL10rdy5ks2an # WJQDH9VuY5liXvHP602uMJaquDWNCarShEHyIThAmnA2EY/ruhjmG5ghTQPiWEOh # qGp+Aomf/QGT71QoM/DleVRiat4WYmWP1hDNw896nwzEFfGH9jkju9B5FpblKO2I # tA4tGTeCC+toOzlJ/j0wlXr8HDFcLau9R8QVfpJQOiioogT02BUhGrRFm7s63SLQ # iz4e88/SEHorA7EyDVJYo59O0Wlal2jwwm+AoIeQ+lcTOCms/6nIge47uBVGVJOx # tgEUuHbIh3+K0zi5gvRH7ZJIEFOlJJG2Gsa4SYSUjkEIczHMyD+iodI/BkAgCQzY # LjHGLRK3uoy4D6b5nMViR+gXjVChImf4eOqGpZhDSb9I738qclEklTAx3lOIyeNn # 4T8MmJSvLm52JbJCm9+PaFAUjR2OFqGgBcNrN4RyIsXa4SdO6v1R+NzA66f+gxj5 # Qt+2c6LaMosyut5XT3tqTPP8nGmcOBglT+2BTt9B+WDsiqIv37Tbvr6OhAejbWZV # 5jlgPwqH+RRpjomb85Mzzwbt69PP+qdG6bGi9OMxK2+lsAc1GGZJN0g9NXfYLK7E # MpL9XlrmLAD5/1WIGj7CMIIHcTCCBVmgAwIBAgITMwAAABXF52ueAptJmQAAAAAA # FTANBgkqhkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp # bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw # b3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0 # aG9yaXR5IDIwMTAwHhcNMjEwOTMwMTgyMjI1WhcNMzAwOTMwMTgzMjI1WjB8MQsw # CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u # ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNy # b3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDCCAiIwDQYJKoZIhvcNAQEBBQADggIP # ADCCAgoCggIBAOThpkzntHIhC3miy9ckeb0O1YLT/e6cBwfSqWxOdcjKNVf2AX9s # SuDivbk+F2Az/1xPx2b3lVNxWuJ+Slr+uDZnhUYjDLWNE893MsAQGOhgfWpSg0S3 # po5GawcU88V29YZQ3MFEyHFcUTE3oAo4bo3t1w/YJlN8OWECesSq/XJprx2rrPY2 # vjUmZNqYO7oaezOtgFt+jBAcnVL+tuhiJdxqD89d9P6OU8/W7IVWTe/dvI2k45GP # sjksUZzpcGkNyjYtcI4xyDUoveO0hyTD4MmPfrVUj9z6BVWYbWg7mka97aSueik3 # rMvrg0XnRm7KMtXAhjBcTyziYrLNueKNiOSWrAFKu75xqRdbZ2De+JKRHh09/SDP # c31BmkZ1zcRfNN0Sidb9pSB9fvzZnkXftnIv231fgLrbqn427DZM9ituqBJR6L8F # A6PRc6ZNN3SUHDSCD/AQ8rdHGO2n6Jl8P0zbr17C89XYcz1DTsEzOUyOArxCaC4Q # 6oRRRuLRvWoYWmEBc8pnol7XKHYC4jMYctenIPDC+hIK12NvDMk2ZItboKaDIV1f # MHSRlJTYuVD5C4lh8zYGNRiER9vcG9H9stQcxWv2XFJRXRLbJbqvUAV6bMURHXLv # jflSxIUXk8A8FdsaN8cIFRg/eKtFtvUeh17aj54WcmnGrnu3tz5q4i6tAgMBAAGj # ggHdMIIB2TASBgkrBgEEAYI3FQEEBQIDAQABMCMGCSsGAQQBgjcVAgQWBBQqp1L+ # ZMSavoKRPEY1Kc8Q/y8E7jAdBgNVHQ4EFgQUn6cVXQBeYl2D9OXSZacbUzUZ6XIw # XAYDVR0gBFUwUzBRBgwrBgEEAYI3TIN9AQEwQTA/BggrBgEFBQcCARYzaHR0cDov # L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMBMG # A1UdJQQMMAoGCCsGAQUFBwMIMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsG # A1UdDwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP6KJc # YmjRPZSQW9fOmhjEMFYGA1UdHwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9z # b2Z0LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIz # LmNybDBaBggrBgEFBQcBAQROMEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWlj # cm9zb2Z0LmNvbS9wa2kvY2VydHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3J0 # MA0GCSqGSIb3DQEBCwUAA4ICAQCdVX38Kq3hLB9nATEkW+Geckv8qW/qXBS2Pk5H # ZHixBpOXPTEztTnXwnE2P9pkbHzQdTltuw8x5MKP+2zRoZQYIu7pZmc6U03dmLq2 # HnjYNi6cqYJWAAOwBb6J6Gngugnue99qb74py27YP0h1AdkY3m2CDPVtI1TkeFN1 # JFe53Z/zjj3G82jfZfakVqr3lbYoVSfQJL1AoL8ZthISEV09J+BAljis9/kpicO8 # F7BUhUKz/AyeixmJ5/ALaoHCgRlCGVJ1ijbCHcNhcy4sa3tuPywJeBTpkbKpW99J # o3QMvOyRgNI95ko+ZjtPu4b6MhrZlvSP9pEB9s7GdP32THJvEKt1MMU0sHrYUP4K # WN1APMdUbZ1jdEgssU5HLcEUBHG/ZPkkvnNtyo4JvbMBV0lUZNlz138eW0QBjloZ # kWsNn6Qo3GcZKCS6OEuabvshVGtqRRFHqfG3rsjoiV5PndLQTHa1V1QJsWkBRH58 # oWFsc/4Ku+xBZj1p/cvBQUl+fpO+y/g75LcVv7TOPqUxUYS8vwLBgqJ7Fx0ViY1w # /ue10CgaiQuPNtq6TPmb/wrpNPgkNWcr4A245oyZ1uEi6vAnQj0llOZ0dFtq0Z4+ # 7X6gMTN9vMvpe784cETRkPHIqzqKOghif9lwY1NNje6CbaUFEMFxBmoQtB1VM1iz # oXBm8qGCA00wggI1AgEBMIH5oYHRpIHOMIHLMQswCQYDVQQGEwJVUzETMBEGA1UE # CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z # b2Z0IENvcnBvcmF0aW9uMSUwIwYDVQQLExxNaWNyb3NvZnQgQW1lcmljYSBPcGVy # YXRpb25zMScwJQYDVQQLEx5uU2hpZWxkIFRTUyBFU046QTQwMC0wNUUwLUQ5NDcx # JTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2WiIwoBATAHBgUr # DgMCGgMVAHWtuYWTNLuoArU5q/TwBSeFs0hSoIGDMIGApH4wfDELMAkGA1UEBhMC # VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV # BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRp # bWUtU3RhbXAgUENBIDIwMTAwDQYJKoZIhvcNAQELBQACBQDtmRs2MCIYDzIwMjYw # NDI2MjMxNjA2WhgPMjAyNjA0MjcyMzE2MDZaMHQwOgYKKwYBBAGEWQoEATEsMCow # CgIFAO2ZGzYCAQAwBwIBAAICEhUwBwIBAAICFDowCgIFAO2abLYCAQAwNgYKKwYB # BAGEWQoEAjEoMCYwDAYKKwYBBAGEWQoDAqAKMAgCAQACAwehIKEKMAgCAQACAwGG # oDANBgkqhkiG9w0BAQsFAAOCAQEADpn6EA3nVzT6EG4fLDYgGzEJ1P+KAEjehuMW # qyR7CIA/ioB1G++0UPLrxVsyVkjzNoUIIw2StBQ43y8VIg+e6/ZCu7TBFeNrjOAV # ncoQHf499DrWzbLPvkHXqyjSxmaX/YCIxI3dm0p8XxMwbxIUrQO/4a528vUmHfrf # nRNZFWdaH7aHt3C7tj1pCM2PKgLs8XFyHDD7cVQyN84gGbeWlP6ljvp2xDnHdQiv # zye1C4gCxxc2t9muKvfOVdRMtXxzv1Y7QleEhxI0VaOmvKbCMvdleidUJ0CSTQ9e # Nsa3FJKTmRHDA/voOYhJhgKPwO9JToHuT3BuHowaRPPYlslfBjGCBA0wggQJAgEB # MIGTMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH # EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNV # BAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMzAAACKPClh9fzyB5A # AAEAAAIoMA0GCWCGSAFlAwQCAQUAoIIBSjAaBgkqhkiG9w0BCQMxDQYLKoZIhvcN # AQkQAQQwLwYJKoZIhvcNAQkEMSIEIJlrTdx2rfql4VAtHR9ooncQaqrK4LrzK+fW # gRQ7UP2uMIH6BgsqhkiG9w0BCRACLzGB6jCB5zCB5DCBvQQgVbGKRlFgY1/igRVk # rV5Pjkf7cZDf+rFXvlXC4G36ItcwgZgwgYCkfjB8MQswCQYDVQQGEwJVUzETMBEG # A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj # cm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFt # cCBQQ0EgMjAxMAITMwAAAijwpYfX88geQAABAAACKDAiBCB5PviDUfUbmAASPqi8 # FLBhKmy3+Mpxw8oMi1Uk4RPlADANBgkqhkiG9w0BAQsFAASCAgBl26Hsos9UUqJG # gFjbz6Zh6AXN+VeGBeZrbn3soqocQauAYK2/lM608R8aKSgcqBcwWJ73T357u/rD # ZEgQXjectYQb048OWZ3k3HDpKm1YuWdnADpbyz64Q5TUiWc2B0W2UEekYEecIgpM # BCfNjmPttkrHrsOHe22JfyJfz8NbBQexnA49q43SNw/IHq1FlRcgcHFKwSaS9x24 # KS5/f2B4PNfX+H3VehUo/E1f8cQxd7sPsTBFkgC/8gPb4IJVwhQiwJq+SPIs9yBa # yQ5oTToB2RQyU5OG04iJ0QxTnngnCHJlb+evgArxwrCTokYXJRvsarYd4cBwcStO # qps1dPi4IviEp11WVkSpGG2QKCDmLcvFUI9l673fS604nGrl8h8LfWi0YN0yFowq # 6tOtKmpxceksOmYQWLPn+GT8e0GmcMSbyqav3RyUJ9bk2bkHqjUyi8/viCzk13JR # Hr/GoYZF/wrxKX2bnbLI5fIms3u8PAnwEjMgmS8EqaS2JalBeq+phKZyWB/qOHhb # B87r6rXGvi3WzRS0mlPXiZtbD4uzmWFkFnL38Zu1NybkQLJU5M3gXDF2mIuB4lxp # 9NTfAMsAWKq67VhUt81ndx9QNuT8JqZ2k6Qe13uesgVyXTl375Asznhuy72JVYVx # kLv5nbAVzEQBYgqR/OgCw1SYAETnPg== # SIG # End signature block |