AzStackHci.DiagnosticSettings.psd1

#
# Module manifest for module 'AzStackHci.DiagnosticSettings'
#
# Generated by: Microsoft Corporation.
#
# Generated on: September 25th 2026.
#

@{

    # Script module or binary module file associated with this manifest.
    RootModule = 'AzStackHci.DiagnosticSettings.psm1'

    # Version number of this module.
    ModuleVersion = '0.7.0'

    # Supported PSEditions of this module (Desktop, Core, CoreCLR, etc.)
    CompatiblePSEditions = @('Desktop', 'Core')

    # ID used to uniquely identify this module.
    GUID = '741476f0-267c-4a20-9830-c8478444638e'

    # Author of this module.
    Author = 'Microsoft Corporation'

    # Company or vendor of this module.
    CompanyName = 'Microsoft Corporation'

    # Copyright statement for this module.
    Copyright = '(c) 2026 Microsoft Corporation. All rights reserved.'

    # Description of the functionality provided by this module.
    Description = 'Microsoft Azure Local - Diagnostics settings and connectivity tests support module'

    # Minimum version of the Windows PowerShell engine required by this module.
    PowerShellVersion = '5.1'

    # Name of the Windows PowerShell host required by this module.
    # PowerShellHostName = ''

    # Minimum version of the Windows PowerShell host required by this module.
    # PowerShellHostVersion = ''

    # Minimum version of Microsoft .NET Framework required by this module. This prerequisite is valid for the PowerShell Desktop edition only.
    # DotNetFrameworkVersion = ''

    # Minimum version of the common language runtime (CLR) required by this module. This prerequisite is valid for the PowerShell Desktop edition only.
    # CLRVersion = ''

    # Processor architecture (None, X86, Amd64) required by this module.
    # ProcessorArchitecture = ''

    # Modules that must be imported into the global environment prior to importing this module
    #RequiredModules = ''

    # Assemblies that must be loaded prior to importing this module
    # RequiredAssemblies = @()

    # Script files (.ps1) that are run in the caller's environment prior to importing this module.
    # ScriptsToProcess = @()

    # Type files (.ps1xml) to be loaded when importing this module
    # TypesToProcess = @()

    # Format files (.ps1xml) to be loaded when importing this module
    # FormatsToProcess = @()

    # Modules to import as nested modules of the module specified in RootModule/ModuleToProcess
    # IMPORTANT: .ps1 files listed here are dot-sourced into the root module scope.
    # Private (internal) helpers are listed first, then Public (exported) functions.
    NestedModules = @(
        # Constants and module state initialization (loaded first)
        'Private\AzStackHci.Constants.ps1',

        # Private helpers (loaded after constants - order matters)
        'Private\AzStackHci.Artifact.Helpers.ps1',
        'Private\AzStackHci.MemoryDump.Helpers.ps1',
        'Private\AzStackHci.Connectivity.Helpers.ps1',
        'Private\AzStackHci.Layer7.Helpers.ps1',
        'Private\AzStackHci.DNS.Helpers.ps1',
        'Private\AzStackHci.WildcardAndSubdomain.Helpers.ps1',
        'Private\AzStackHci.ParallelLayer7.Helpers.ps1',
        'Private\AzStackHci.ConnectivityCluster.Helpers.ps1',
        'Private\AzStackHci.HardwareOEM.Helpers.ps1',
        'Private\AzStackHci.ModuleManagement.Helpers.ps1',
        'Private\AzStackHci.Network.Helpers.ps1',
        'Private\AzStackHci.Results.Helpers.ps1',
        'Private\AzStackHci.SecurityBaseline.Helpers.ps1',
        'Private\AzStackHci.Defender.Helpers.ps1',
        'Private\AzStackHci.OsConfigReport.Helpers.ps1',
        'Private\AzStackHci.Utility.Helpers.ps1',
        'Private\AzStackHci.VMCheckpointHealth.Assessment.ps1',
        'Private\AzStackHci.VMCheckpointHealth.Collection.ps1',
        'Private\AzStackHci.VMCheckpointHealth.Policy.ps1',
        'Private\AzStackHci.VMCheckpointHealth.Rendering.ps1',
        'Private\AzStackHci.VMCheckpointHealth.Storage.ps1',

        # Public exported functions
        'Public\AzStackHci.MemoryDumpSettings.ps1',
        'Public\AzStackHci.PageFileSettings.ps1',
        'Public\AzStackHci.UserModeCrashDumpSettings.ps1',
        'Public\AzStackHci.SSLInspection.ps1',
        'Public\AzStackHci.ClusterPerformance.ps1',
        'Public\AzStackHci.ConnectivityTests.ps1',
        'Public\AzStackHci.OsConfigSettings.ps1',
        'Public\AzStackHci.PrivateLinkScope.ps1',
        'Public\AzStackHci.DiagnosticArtifacts.ps1',
        'Public\AzStackHci.VMCheckpointHealth.ps1'
    )

    # Functions to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no functions to export.
    FunctionsToExport = @(
        'Get-AzStackHciMemoryDumpSettings',
        'Set-AzStackHciMemoryDumpSettings',
        'Restore-AzStackHciMemoryDumpSettings',
        'Get-AzStackHciPageFileSettings',
        'Restore-AzStackHciPageFileSettings',
        'Set-AzStackHciPageFileSettings',
        'Set-AzStackHciPageFileSettingsMinimal',
        'Get-AzStackHciUserModeCrashDumpSettings',
        'Set-AzStackHciUserModeCrashDumpSettings',
        'Restore-AzStackHciUserModeCrashDumpSettings',
        'Test-AzStackHciSSLInspection',
        'Send-ClusterPerformanceHistory',
        'Test-AzureLocalConnectivity',
        'Test-Layer7Connectivity',
        'Test-TCPConnectivity',
        'Get-AzStackHciOsConfigSettings',
        'Test-ArcMachinePrivateLinkScopeEnabled',
        'Remove-AzStackHciDiagnosticArtifact',
        'Get-AzStackHciVMCheckpointHealth'
    )

    # Cmdlets to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no cmdlets to export.
    CmdletsToExport = @()

    # Variables to export from this module
    # Set to empty array to prevent leaking internal script-scoped variables to consumers
    VariablesToExport = @()

    # Aliases to export from this module, for best performance, do not use wildcards and do not delete the entry, use an empty array if there are no aliases to export.
    # AliasesToExport = '*'

    # DSC resources to export from this module
    # DscResourcesToExport = @()

    # List of all modules packaged with this module
    # ModuleList = @()

    # List of all files packaged with this module
    # FileList = @()

    # Private data to pass to the module specified in RootModule/ModuleToProcess. This may also contain a PSData hashtable with additional module metadata used by PowerShell.
    PrivateData = @{

        PSData = @{

            # Tags applied to this module. These help with module discovery in online galleries.
            Tags = @('Microsoft', 'AzStackHci', 'Diagnostic', 'Settings', 'Connectivity', 'AzureLocal')

            # A URL to the license for this module.
            LicenseUri = 'https://github.com/Azure/AzureLocal-Supportability/blob/main/LICENSE'

            # A URL to the main website for this project.
            ProjectUri = 'https://github.com/Azure/AzureLocal-Supportability'

            # A URL to an icon representing this module.
            # IconUri = ''

            # ReleaseNotes of this module — full history in CHANGELOG.md shipped with the module
            ReleaseNotes = @'
## v0.7.0
 
- OSConfig schema 1.4 adds SecurityBaselineHealth/DefenderHealth, baseline/ASR tabs and evidence in reports, PassThru and HealthSummaryOnly. Deltas warn; missing evidence never passes.
- Read-only LSA rights, nine local-account/SAM fallbacks and Schannel TLS/DTLS minima extend coverage. Collects configured policy limits, not password ages/secrets; no policy/authentication changes.
- Exact Base64 REG_BINARY comparison preserves bytes. Multi-string, hardened-path and local-lockout comparisons retain types/values.
- Stored security data is supporting, not effective evidence. Suppress known empty merged-export noise; retain rejected bytes. Complexity/reversible-password/anonymous-lookup gaps and blank NTP expectations remain unevaluated.
- Defender/ASR separates findings from coverage, preserves NotConfigured and validates attribution without enforcement/writer inference.
- Query cluster metadata once; improve responsive summaries, themes and links. Retain partial-node/copy-back errors and fatal stage context; contain Drift Control/GPO failures.
- Connectivity schema 1.2 adds redirect disposition/reason/origin/target and diagnostic TCP/DNS evidence. Advisory redirects warn; raw failures remain. DNS diagnostics never replace Layer-7 health. IP text prefers IPv4, with IPv6 fallback.
- Manual tests honor inventory ports/Arc Gateway, reuse results and skip unmatched hosts. Refresh bundled endpoints.
- Downloads validate transfers and share one retry deadline. WebException transport recovery preserves trust/access/protocol exclusions. Unavailable speed does not abort reports.
 
## v0.6.9
 
- OSConfig schema 1.3 reports component evidence; partial healthy evidence is SKIPPED.
- Layer 7 retries transient connection failures once.
- Test-ArcMachinePrivateLinkScopeEnabled validates full Arc machine IDs and queries the encoded subscription instead of relying on the active Az context.
- Reconciles Get-AzStackHciVMCheckpointHealth through upstream v0.2.33: bounded historic jobs with explicit incomplete coverage, evidence-incomplete report totals, corrected VmEvents example, VM-associated ImageStore AVHDX classification, aggregate attached-chain size, and all v0.2.32 identity/event/artifact/confidence improvements.
- Initializes StrictMode cleanup and fallback state before exception-prone proxy parsing, range-probe, TLS-request, diagnostic-upload, preference-restoration, and cluster page-file paths. Normal single-proxy connectivity tests now reach download testing and final HTML/CSV report-location output.
- Separates canonical reports and restore backups into typed Reports and Backups folders. Report producers warn about recognized artifacts older than 180 days without deleting them. Remove-AzStackHciDiagnosticArtifact provides explicit WhatIf/ShouldProcess cleanup; backups require explicit selection, valid checksums, 730-day age by default, and retention of at least five newest valid files. Restore prefers typed backup folders and falls back to the legacy root. ACLs are unchanged.
- Page-file backups now use a versioned SHA-256 payload; restore validates path, filename, schema, target, and sizes before mutation. Unsigned legacy backups require -AllowLegacyUnsignedBackup, and page-file restore reports rollback outcome.
- Page-file, memory-dump, and user-mode crash-dump cluster restores now return one result per target node with AttemptedNodeCount, ReturnedNodeCount, and Complete telemetry; failed apply operations include rollback telemetry.
- Connectivity fan-out, checkpoint diagnostic and ownership fan-outs, and OS-config Drift Control collection now use a shared 30-minute deadline, stop timed-out jobs, preserve completed evidence, and report incomplete outcomes explicitly.
- Introduces Get-AzStackHciVMCheckpointHealth, a read-only checkpoint, differencing-disk, Hyper-V Replica, storage, event, and VSS health assessment with TXT, CSV, HTML, telemetry, debug-log, and ZIP artifacts.
- The command indexes events by VM identity, identifies the audited VM in event CSV rows, guarantees event CSV artifacts for early exits, classifies cluster-role/Hyper-V inventory mismatches explicitly, and distinguishes VHD topology completeness from file-metadata completeness.
- CSVs reporting IncompatibleFileSystemFilter receive conditional read-only validation guidance for CSV state, cross-node minifilters, and recent Failover Clustering events. FileSystemReFs alone remains expected, and the report does not instruct operators to unload a filter.
- Base disks use Disk age while Checkpoint age is reserved for attached AVHDX layers; per-VM TXT tables show VM-attributed events and summarize node-wide context separately; CSVs include CollectedAsConcern plus typed classification/disposition. Replica advisories remain explicit in OK prose, sustained fleet-only 15268 context is linked inside storage health, and housekeeping distinguishes unreferenced VM-folder disks from owner/folder mismatches without filename-based ownership inference. This command is supported and tested only with Windows PowerShell 5.1; invoking it from PowerShell 7 fails with an actionable runtime message.
- Test-AzureLocalConnectivity now warns when -ForceGitHubEndpointsUpdate is used WITHOUT -NoAutoUpdate (the GitHub endpoint refresh is already attempted by default, so the switch is a no-op on its own) — mirrors the existing -InstallMissingModuleOnNodes guidance.
- Get-AzStackHciOsConfigSettings pending-reboot detection regex tightened to require both "reboot" and "pending" so it can never accidentally match the "No pending reboot" line.
- Cluster -PassThru JSONReportPath is now derived with [IO.Path]::ChangeExtension, so it always carries a .json extension and can never accidentally equal ReportPath.
- Output handling is hardened so -NoOutput state does not affect later calls, machine-level verbose/debug preferences do not leak into module output, and normal progress remains visible. Test-ArcMachinePrivateLinkScopeEnabled now also confirms when the Arc machine uses the expected public endpoints with no Private Link Scope assigned.
- Get-AzStackHciOsConfigSettings aligns HTML and -PassThru health outcomes: detected domain GPOs and Arc Agent version drift are warnings, complete local-only GPO evidence passes, and unavailable or N/A GPO evidence is shown as Unknown and skipped rather than reported as healthy.
- Pending reboot warnings now propagate through each affected node's HTML section, Events & Reboots sub-tab, and node tab. JSON and -PassThru expose typed trigger reasons under PendingRebootHealth.Details[] and every Nodes[].PendingReboot entry; the additive OS-config health-summary schema advances from 1.1 to 1.2.
- OSConfig CSV evidence is array-normalized for Windows PowerShell 5.1 single-row correctness. Power Plan consistency now measures agreement only; NTP-source and installed-program differences are warnings. Missing Drift Control is emitted as SKIPPED with node details, and StabilityEvents adds a uniform Details alias while preserving Events. Schema remains 1.2 before release.
- Connectivity HTML summaries now classify findings and distinguish configuration gaps from connectivity failures. OSConfig summaries wrap on mobile. Contracts are unchanged.
 
## v0.6.8
 
Focus: make the -PassThru object contracts robust for consumption by other modules (e.g. AzStack.Insights). SchemaVersion bumps 1.0 -> 1.1 (additive only — new fields, nothing removed or renamed).
 
### Get-AzStackHciOsConfigSettings — predictable -ExportPath + first-class output location + opt-in inventory
- -ExportPath is the destination root, created if missing. Node and Cluster runs create <ExportPath>\<ClusterOrNodeName>-<yyyyMMdd-HHmmss>\ instead of rewriting the caller's leaf as a sibling folder.
- New default root = C:\ProgramData\AzStackHci.DiagnosticSettings (always writable on a locked-down Azure Local node, unlike C:\Temp). The automatic mirror of the HTML + JSON reports to ProgramData is retained.
- New -PassThru properties: OutputDirectory (the resolved run folder) and DataCollectionDirectory (<OutputDirectory>\Data-Collection, or null when no on-disk data was written), alongside HTMLReportPath / JSONReportPath. All four are null in -HealthSummaryOnly mode.
- New -IncludeInventoryData switch (default OFF): nests per-node InstalledPrograms / WindowsFeatures / Hotfixes / DriverVersions under each Nodes[] entry so consumers get typed data without parsing CSVs. Default OFF keeps casual -PassThru calls lightweight.
- Deep PSCustomObject normalization makes live results behave like JSON round-trips. Inventory strings and placeholder values are normalized; key order and on-disk JSON are preserved.
 
### Test-AzureLocalConnectivity — -PassThru reshaped into a structured object
- -PassThru returns a PSCustomObject with run-level properties and per-URL .Results, matching JSON and replacing ArrayList NoteProperties. Filtering .Results preserves run-level fields.
- SchemaVersion ("1.1") added to the connectivity object + JSON summary (parity with OsConfig).
- Cluster -PassThru unified: -Scope Cluster -PassThru returns the same structured shape, nesting each node's structured object (flat run-level fields + Detections + .Results) under .Nodes[]. The internal HTML/CSV cluster report is unchanged.
- BREAKING for anything that read the old container NoteProperties or iterated the return as rows. The module's own tests + Helpers\Compare-*Performance.ps1 / automated-test-all-azure-regions.ps1 were updated to read run-level data from $r.<field> and rows from $r.Results.
 
## v0.6.7 (recap)
 
Connectivity gained HEAD/GET selection, process-isolated parallel tests, cluster fan-out, and per-row MachineName. OSConfig gained the versioned health-summary contract and -HealthSummaryOnly. See CHANGELOG.md for details.
 
For full version history (including v0.6.7 detail, v0.6.6 and earlier) see CHANGELOG.md shipped with this module.
'@


            # External dependent modules of this module
            # ExternalModuleDependencies = ''

        } # End of PSData hashtable

    } # End of PrivateData hashtable

    # HelpInfo URI of this module
    HelpInfoURI = 'https://github.com/Azure/AzureLocal-Supportability/blob/main/TSG/Networking/Arc-Gateway-Outbound-Connectivity/Troubleshoot-Outbound-Connectivity.md'

    # Default prefix for commands exported from this module. Override the default prefix using Import-Module -Prefix.
    # DefaultCommandPrefix = ''

}
# Generated by: Microsoft Corporation.
# SIG # Begin signature block
# MIInRAYJKoZIhvcNAQcCoIInNTCCJzECAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCACz58rVpnY+woY
# WqSf/OZyUo9NQ2oHJUCtpwCoJ2y2CaCCDLowggX1MIID3aADAgECAhMzAAACHU0Z
# 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
# 1cY2L4A7GTQG1h32HHAvfQESWP0xghngMIIZ3AIBATBuMFcxCzAJBgNVBAYTAlVT
# MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jv
# c29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMjQCEzMAAAIdTRnITtcPV0gAAAAAAh0w
# DQYJYIZIAWUDBAIBBQCggZAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwLwYJ
# KoZIhvcNAQkEMSIEIGPASMyjGe2h7rDyxnrBOvuEzKU3BEMr4UQ8TX84WPycMEIG
# CisGAQQBgjcCAQwxNDAyoBSAEgBNAGkAYwByAG8AcwBvAGYAdKEagBhodHRwOi8v
# d3d3Lm1pY3Jvc29mdC5jb20wDQYJKoZIhvcNAQEBBQAEggEAQMeSAlO8iGczJBQb
# VSaqsZFIbugYh3besyqe+yC6Cpr7KEheQO3eHu6TDsfNloQJRRT+fZxYLAHIhVY1
# mWRIwW0a8re8YlOiEZQrUndMqoO5iOtWCA/DHQxdbNZophjS7r6Ao2JYq6auM9c2
# gzg1CkSz5MR8Y0aDm9gb+axQLxri/8zk1SN0sPhvvxSYpKMgW4Bt03zh4vjWVDHz
# bpVzbPPCvAYZHRh2u5gKPpOBUV+clA+KzcE/a7oJucF6UJCCcTcMYFz0AVffBxaD
# pFgr5paqk5Puy2QiOqwom+0J/cllzwHFalJ+l+vN8qHhGZw/AsEBesBjMpNS7USY
# s6NbGKGCF7AwghesBgorBgEEAYI3AwMBMYIXnDCCF5gGCSqGSIb3DQEHAqCCF4kw
# gheFAgEDMQ8wDQYJYIZIAWUDBAIBBQAwggFaBgsqhkiG9w0BCRABBKCCAUkEggFF
# MIIBQQIBAQYKKwYBBAGEWQoDATAxMA0GCWCGSAFlAwQCAQUABCDod741IC0IubNx
# 208h3BgRjKI70iIupy+bkBhrGx47VgIGaq6vYH7rGBMyMDI2MDkyNTE3MTEwNi45
# MjdaMASAAgH0oIHZpIHWMIHTMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu
# Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
# cmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25zIExp
# bWl0ZWQxJzAlBgNVBAsTHm5TaGllbGQgVFNTIEVTTjo0MzFBLTA1RTAtRDk0NzEl
# MCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaCCEf4wggcoMIIF
# EKADAgECAhMzAAACHUvAkoc4hX45AAEAAAIdMA0GCSqGSIb3DQEBCwUAMHwxCzAJ
# BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
# MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jv
# c29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4XDTI1MDgxNDE4NDgzM1oXDTI2MTEx
# MzE4NDgzM1owgdMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw
# DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
# LTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEn
# MCUGA1UECxMeblNoaWVsZCBUU1MgRVNOOjQzMUEtMDVFMC1EOTQ3MSUwIwYDVQQD
# ExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIICIjANBgkqhkiG9w0BAQEF
# AAOCAg8AMIICCgKCAgEAorSgaAA8oOl4ph574zw29egUN8DDepRHLX8FM1zHNJmX
# G6KrSqUKwzcKafopuYdPTETTCvb9aJfESuAU0iGNUFI/D6R0kvdfpe2oPX+E3sbT
# QvGi4JPH5qdIYUaJ45V/4bqe8eNvbWzpC+ZKjH193DeiI1XAI918JoQmBhlEXo/T
# on1721luZJgincsf5LjMY3jX84WyXUSX3dsS7h/7xVI+w1yjg7pa+0y3o/me2Tsv
# 6UJUdSTQap5ORGSfCnclnP1z3IiiWIWr3Vo7aIPWsgJzq3m5GxpxUHCQk8qzUhk5
# 0y/uB+LGE3WIK2C77iy9iFsSfSLUnyMEzGRDW9mXHT4PH7Ozz6CHqQEiNvwcHqlv
# lCh1pHQh1NXQSAqOoVBs5mi6easf6yxWTfe5DrR79503r8pU6VqC2Y9XMRU4wH9Q
# bYXYsIUZ33Jmndy22W1LBDAbxBPQHCBlncGDU3BgdhVUVLe80mggFO98FdkWho67
# w4kPdCTRkvdvkY8PrQYE/nQjHXCa0g7LcMttZb6ejMHfQ+tUWXv6+nZ4Ynkr2Oka
# xclFCw4RIYNMWD26AWbQj/WEdzga18fKtw66L5gzXPza6jFBfPJeKE3H8QAuwpir
# mH4ms+5nUjNNQOmNgqJn0U1+3Yn7ClswD79YN0r3fdbYBMDApBZJpNlK7q7HXRsC
# AwEAAaOCAUkwggFFMB0GA1UdDgQWBBSEWfBxNEamZtXm8gl92Yq80jfxXTAfBgNV
# HSMEGDAWgBSfpxVdAF5iXYP05dJlpxtTNRnpcjBfBgNVHR8EWDBWMFSgUqBQhk5o
# dHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3NvZnQlMjBU
# aW1lLVN0YW1wJTIwUENBJTIwMjAxMCgxKS5jcmwwbAYIKwYBBQUHAQEEYDBeMFwG
# CCsGAQUFBzAChlBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRz
# L01pY3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNydDAMBgNV
# HRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIH
# gDANBgkqhkiG9w0BAQsFAAOCAgEAkdweB4yxvLspLKq0D+miyD4Q0EcxVFpNZuJx
# iR54gWRkeTDDuymNeB03JhlsBpbwSYJ5uZSgDBCvwHED2VL8lJpFlOprJzxsXWC2
# NTfA+O+PO5Fk5jw6LHh6jeBADDEdQAx3Hqi7Zm0JwvQ93z5f6dtxkm29WqOcHYXR
# XfAQwy1hSrLXyfeblqR66jpP/9n0fCkWU4ggsUjQpQ2Ngj1DV09J4Y3y7p9Nd81+
# Xs6qYo++7RKm8qiB/5NDeigOLjlAeFgiEXIRUJW+mJyqpQw+OORlaqcFjR8Hu0G+
# /7bMdek68YX+kPpDBk7Ue+I/xgiYJ1xcDRBn/vczLtN72+RIlD4UgXYLuBSCk//p
# DEPX5z39Cr+rkc6E4Y28FPk4BhloAyvp628P4xfElQY8TcxraUbZShypocE6ny95
# D1K1BkltZmrHVKCxmglnuOlM15NKIrXFlXCzdqpCtIwQ417wNAVF/QDPvzzbumPd
# Ti6fb0tLbScYobV6zvbBsMsKEME4Tj1b9oIXC8dybJq4nbboEXYpRwi1QAbpSNrn
# +PxGW9uf1q63FnMJu4gm3Oh63njW/iVf723quzyHrSijWMgY0HiRiHQi0Jyu0h8M
# dhRUp7mxbmLQckPiOFwAlIaUN/k725y/aLWpkRU6fqmLlEOyH5WpyLd23AYy9r8v
# +Qoba6swggdxMIIFWaADAgECAhMzAAAAFcXna54Cm0mZAAAAAAAVMA0GCSqGSIb3
# DQEBCwUAMIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4G
# A1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTIw
# MAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAx
# MDAeFw0yMTA5MzAxODIyMjVaFw0zMDA5MzAxODMyMjVaMHwxCzAJBgNVBAYTAlVT
# MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQK
# ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1l
# LVN0YW1wIFBDQSAyMDEwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
# 5OGmTOe0ciELeaLL1yR5vQ7VgtP97pwHB9KpbE51yMo1V/YBf2xK4OK9uT4XYDP/
# XE/HZveVU3Fa4n5KWv64NmeFRiMMtY0Tz3cywBAY6GB9alKDRLemjkZrBxTzxXb1
# hlDcwUTIcVxRMTegCjhuje3XD9gmU3w5YQJ6xKr9cmmvHaus9ja+NSZk2pg7uhp7
# M62AW36MEBydUv626GIl3GoPz130/o5Tz9bshVZN7928jaTjkY+yOSxRnOlwaQ3K
# Ni1wjjHINSi947SHJMPgyY9+tVSP3PoFVZhtaDuaRr3tpK56KTesy+uDRedGbsoy
# 1cCGMFxPLOJiss254o2I5JasAUq7vnGpF1tnYN74kpEeHT39IM9zfUGaRnXNxF80
# 3RKJ1v2lIH1+/NmeRd+2ci/bfV+AutuqfjbsNkz2K26oElHovwUDo9Fzpk03dJQc
# NIIP8BDyt0cY7afomXw/TNuvXsLz1dhzPUNOwTM5TI4CvEJoLhDqhFFG4tG9ahha
# YQFzymeiXtcodgLiMxhy16cg8ML6EgrXY28MyTZki1ugpoMhXV8wdJGUlNi5UPkL
# iWHzNgY1GIRH29wb0f2y1BzFa/ZcUlFdEtsluq9QBXpsxREdcu+N+VLEhReTwDwV
# 2xo3xwgVGD94q0W29R6HXtqPnhZyacaue7e3PmriLq0CAwEAAaOCAd0wggHZMBIG
# CSsGAQQBgjcVAQQFAgMBAAEwIwYJKwYBBAGCNxUCBBYEFCqnUv5kxJq+gpE8RjUp
# zxD/LwTuMB0GA1UdDgQWBBSfpxVdAF5iXYP05dJlpxtTNRnpcjBcBgNVHSAEVTBT
# MFEGDCsGAQQBgjdMg30BATBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jv
# c29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wEwYDVR0lBAwwCgYI
# KwYBBQUHAwgwGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGG
# MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU1fZWy4/oolxiaNE9lJBb186a
# GMQwVgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3Br
# aS9jcmwvcHJvZHVjdHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3JsMFoGCCsG
# AQUFBwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0cDovL3d3dy5taWNyb3NvZnQuY29t
# L3BraS9jZXJ0cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcnQwDQYJKoZIhvcN
# AQELBQADggIBAJ1VffwqreEsH2cBMSRb4Z5yS/ypb+pcFLY+TkdkeLEGk5c9MTO1
# OdfCcTY/2mRsfNB1OW27DzHkwo/7bNGhlBgi7ulmZzpTTd2YurYeeNg2LpypglYA
# A7AFvonoaeC6Ce5732pvvinLbtg/SHUB2RjebYIM9W0jVOR4U3UkV7ndn/OOPcbz
# aN9l9qRWqveVtihVJ9AkvUCgvxm2EhIRXT0n4ECWOKz3+SmJw7wXsFSFQrP8DJ6L
# GYnn8AtqgcKBGUIZUnWKNsIdw2FzLixre24/LAl4FOmRsqlb30mjdAy87JGA0j3m
# Sj5mO0+7hvoyGtmW9I/2kQH2zsZ0/fZMcm8Qq3UwxTSwethQ/gpY3UA8x1RtnWN0
# SCyxTkctwRQEcb9k+SS+c23Kjgm9swFXSVRk2XPXfx5bRAGOWhmRaw2fpCjcZxko
# JLo4S5pu+yFUa2pFEUep8beuyOiJXk+d0tBMdrVXVAmxaQFEfnyhYWxz/gq77EFm
# PWn9y8FBSX5+k77L+DvktxW/tM4+pTFRhLy/AsGConsXHRWJjXD+57XQKBqJC482
# 2rpM+Zv/Cuk0+CQ1ZyvgDbjmjJnW4SLq8CdCPSWU5nR0W2rRnj7tfqAxM328y+l7
# vzhwRNGQ8cirOoo6CGJ/2XBjU02N7oJtpQUQwXEGahC0HVUzWLOhcGbyoYIDWTCC
# AkECAQEwggEBoYHZpIHWMIHTMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGlu
# Z3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBv
# cmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25zIExp
# bWl0ZWQxJzAlBgNVBAsTHm5TaGllbGQgVFNTIEVTTjo0MzFBLTA1RTAtRDk0NzEl
# MCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaIjCgEBMAcGBSsO
# AwIaAxUAuoO+BKbfXzqyfi9GLEdWHkCLeT+ggYMwgYCkfjB8MQswCQYDVQQGEwJV
# UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE
# ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGlt
# ZS1TdGFtcCBQQ0EgMjAxMDANBgkqhkiG9w0BAQsFAAIFAO5hFjUwIhgPMjAyNjA5
# MjUxNTQ4MDVaGA8yMDI2MDkyNjE1NDgwNVowdzA9BgorBgEEAYRZCgQBMS8wLTAK
# AgUA7mEWNQIBADAKAgEAAgIkoAIB/zAHAgEAAgITSzAKAgUA7mJntQIBADA2Bgor
# BgEEAYRZCgQCMSgwJjAMBgorBgEEAYRZCgMCoAowCAIBAAIDB6EgoQowCAIBAAID
# AYagMA0GCSqGSIb3DQEBCwUAA4IBAQBQ2SMrPTaKsYpD3Q7O3cAE/7JuYgeQtHox
# T3tHb6xrv4nBznRqwUDdcbmog0M0e6mU5KAPRT0Hk47mLUnDo9Bhtr9mKcSV2PgV
# xudyxBVgtE/j75ByngAmrZWGZ0//rNZnURFNSNlC3JiSqPp8jHHWaAEskCUhQTmF
# iHL79sFJ+6KnvyK9pKRLCgYCskEJ7xtM9lJ1yEZosawTXUUWTaQ5NNEfcvo81FON
# Ah23gzQq5vEJ7FH3QfkxchDrnasU8J6qx80bun4BxqVJUkjjNua8MwiTFQCA83Tc
# AUxWovJdycFnr45fWrSQ8YcF1qSLSJ4Rd53ggDypLZtMUt2aOHd1MYIEDTCCBAkC
# AQEwgZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV
# BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQG
# A1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTACEzMAAAIdS8CShziF
# fjkAAQAAAh0wDQYJYIZIAWUDBAIBBQCgggFKMBoGCSqGSIb3DQEJAzENBgsqhkiG
# 9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQgrvFK4YQNAOkbHjdZeaPZlh5YRM/cATXZ
# BXauLNbkP5IwgfoGCyqGSIb3DQEJEAIvMYHqMIHnMIHkMIG9BCCxtpXMXEiLJzrq
# M77ep4rTNwrMOj6gpWN9hZvpj5QFUTCBmDCBgKR+MHwxCzAJBgNVBAYTAlVTMRMw
# EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
# aWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0
# YW1wIFBDQSAyMDEwAhMzAAACHUvAkoc4hX45AAEAAAIdMCIEIHO4TvD3SjLJFMKx
# u/GuMpOFJfthSBHHSNK3w26JeZ0OMA0GCSqGSIb3DQEBCwUABIICABUpHJ5DICiv
# Nhx+91h84YQH9BaPRsPKTofTHSb+unKBTkseKhSo9LU+uSN3ccIS7GE+db1qKYt4
# NslSyn05LO1U3YMbdu18ulDHA+ttWkDlYK2thbeUB141Q34gesUbROPxBWLJsRTI
# 2nRCDMAxAbPh6A+Pt1Y8CBdazjF6SGOXegRa5wkZFFpLEZjaw0pi6aTsFBYqaeRF
# XQ8/HK4XoZ4iv345OmR+QLkouC42H1RmCq6AP1htpRAyQKobg79WXN4lW39K0IBS
# Y/METvLn9V33qiNp8mF4OE53f4n/s38g22uWL3qKnCk4YcL42wlSwuX+m9+Sy39A
# VPxzzsS0UPmeaNeyiURvNMePPPBYRxthtCJc6by0xFi6HoEzmLvYgdvah4qpfn0e
# o3VXVHqZmA9GT6PMtIRJ1zh41BPJf8ySZRZxiU+qG6prCcsN5dnIiUT8Gywssqiu
# JgOy34qBoLfyVPKOiYLpBB7jPdFNEfhUUEzZJySNXgEdRgInzgcdHLRnM3SAnKWq
# gnoagC7ujj9i98IsDJhQFd2tZ+IZtKqUKymWLTEDvt1SV04thJRZyWOlkYTVy3Fm
# JFXwaRAth/v+/I612Q9X1VoWcB0LJJxtePLdlckDVKbBBRoJyO/kAcjw0//YapjT
# 7l857WM9I/kXorV9d83Cdc0gLE1sVdbE
# SIG # End signature block