ComplianceDiagnosticAutoLabeling.psm1

Import-Module "$PSScriptRoot\ComplianceDiagnosticUtils.psm1"

function Confirm-AutoLabelingCommandsPresent {
    # Check if AutoLabeling Commands are present
    $command = Get-Command Get-AutoSensitivityLabelRule -ErrorAction SilentlyContinue
    if ($command -eq $null) {
        return $false
    }
    
    $command = Get-Command Get-AutoSensitivityLabelPolicy -ErrorAction SilentlyContinue
    if ($command -eq $null) {
        return $false
    }
    
    return $true
}

function Initialize-AutoSpo{
    $global:alpControlVariables.AutoSpoHarFiles = $null
    $global:alpControlVariables.AutoSpoTdpFiles = $null
    $global:alpControlVariables.AutoSpoFiddlerFiles = $null
}

function Initialize-AutoExo{        
    $global:alpControlVariables.AutoExoEmailFiles = $null
    $global:alpControlVariables.AutoExoEmtdFiles = $null
    $global:alpControlVariables.AutoExoFiddlerFiles = $null
}

function Get-AutoLabelingTabContent ($TabObject){
    [Parameter(Mandatory=$true)]
    [Windows.Controls.TabItem] $TabObject

    GetGlobalAlpRule
    $alpExchangeButton = Get-Button -ButtonName "Exchange AutoLabeling"

    $alpSPOButton = Get-Button -ButtonName "SPO/ODB AutoLabeling" -Margin "10,50,10,10"

    $alpPanelGrid = New-Object Windows.Controls.Grid
    $alpTopTabControl = Get-TopTabControl
    
    $alpPanelGrid.Children.Add($alpTopTabControl.TopTabControl) > $null
    
    $global:ContextScopeVariables.alpOutput = New-Object Windows.Controls.StackPanel

    $outputPanelTemplate = Get-TemplateGrid

    $outputPanelTemplate.Column1.Children.Add($alpExchangeButton) > $null

    $alpDiagnosticTabContent = New-Object Windows.Controls.StackPanel
    $alpDiagnosticTabContent.HorizontalAlignment = [Windows.HorizontalAlignment]::Center
    $alpDiagnosticTabContent.VerticalAlignment = [Windows.VerticalAlignment]::Top
    $alpDiagnosticTabContent.Margin = New-Object Windows.Thickness 0, 70, 0, 0 
    $alpDiagnosticTabContent.Children.Add($global:ContextScopeVariables.alpOutput) > $null

    $scrollViewer = New-Object Windows.Controls.ScrollViewer
    $scrollViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto
    $scrollViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto
    $outputPanelTemplate.Column2.Children.Add($alpDiagnosticTabContent) > $null
    $scrollViewer.Content = $outputPanelTemplate.Grid
    # $alpTopTabControl.DiagnosticsTabItem.Content = $scrollViewer // TODO : revive it after logic is built
    
    $alpExchangeButton.Add_Click({        
    })
   
    $alpSPOButton.Add_Click({
    })
    
    # Collect diagnostic data from user
    $global:alpControlVariables.alpSupportDataTabContent = New-Object Windows.Controls.StackPanel
    $global:alpControlVariables.alpSupportDataTabContent.HorizontalAlignment = [Windows.HorizontalAlignment]::Center

    $global:alpControlVariables.SupportPanelTemplate = Get-TemplateGrid

    $alpEXOSupportButton = Get-Button -ButtonName "Exchange AutoLabeling" -Margin '10,50,10,10' -width 200 -HorizontalAlignment "Left"
    $global:alpControlVariables.SupportPanelTemplate.Column1.Children.Add($alpEXOSupportButton) > $null

    $alpSPOSupportButton = Get-Button -ButtonName "SPO/ODB AutoLabeling" -Margin '10,50,10,10' -width 200 -HorizontalAlignment "Left"
    $global:alpControlVariables.SupportPanelTemplate.Column1.Children.Add($alpSPOSupportButton) > $null
    
    $DiagscrollViewer = New-Object Windows.Controls.ScrollViewer
    $DiagscrollViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto
    $DiagscrollViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto
    $DiagscrollViewer.Content = $global:alpControlVariables.SupportPanelTemplate.Grid
    $alpTopTabControl.GatherSupportDataTabItem.Content = $DiagscrollViewer
    $global:alpControlVariables.SupportPanelTemplate.Column2.Children.Add($global:alpControlVariables.alpSupportDataTabContent ) > $null

    $alpEXOSupportButton.Add_Click({
        Initialize-AutoExo
        Get-alpEXOSupportTemplate
    })

    $alpSPOSupportButton.Add_Click({
        Initialize-AutoSpo
        Get-alpSPOSupportTemplate
    })
    
    #$alpSupportDataTabContent.Children.Add($GetAlpExoExport)

    $TabObject.Content = $alpPanelGrid

}

function Get-alpSPOSupportTemplate(){

    $blueColor = [System.Windows.Media.Color]::FromRgb(63, 119, 206)
    $redColor = [System.Windows.Media.Color]::FromRgb(200, 10, 10)
    $supportDataHeader = Show-Text -Text "AutoLabeling Sharepoint/ODB Support Data Template" -Color $blueColor -fontSize 20

    $tableGrid = Get-Table -columns 4 -rows 14

    $AffectedDoc = Show-Text -Text "Affected File Path" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left" -ShowHelp $true
    $AffectedDoc.ToolTip = Get-ToolTip -Text "Navigate to the document library on Browser `n Select the file `n Click on the ... dots `n Select 'Details' option `n A panel opens on the right `n Scroll to Bottom `n Click on copy icon beside path"
    Add-ControlToTableAt -TableObj $tableGrid -row 0 -column 1 -Control $AffectedDoc

    $global:alpControlVariables.AffectedDocPath = Get-TextBox -Width 400 -Margin "0,0,10,0" -HorizontalAlignment "Left"
    Add-ControlToTableAt -TableObj $tableGrid -row 0 -column 2 -Control $global:alpControlVariables.AffectedDocPath

    $global:alpControlVariables.AffectedDocError = Show-Text -Text "Could not find the document. Please make sure that a valid path is provided." -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left" -Color $redColor
    $global:alpControlVariables.AffectedDocError.Visibility = [Windows.Visibility]::Hidden
    Add-ControlToTableAt -TableObj $tableGrid -row 0 -column 3 -Control $global:alpControlVariables.AffectedDocError 

    $scopedPolicyLabel = Show-Text -Text "Impacted Policy" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left"
    Add-ControlToTableAt -TableObj $tableGrid -row 1 -column 1 -Control $scopedPolicyLabel

    $global:alpControlVariables.scopedPolicyComboboxSPO = Get-ComboBox -Margin "0,0,10,0" -Width 400 -HorizontalAlignment "Left"
    $global:alpControlVariables.scopedPolicyComboboxSPO.ItemsSource = $global:ContextScopeVariables.alpPolicyDropDown
    Add-ControlToTableAt -TableObj $tableGrid -row 1 -column 2 -Control $global:alpControlVariables.scopedPolicyComboboxSPO

    $dateTimeLabel = Show-Text -Text "Date & Time of issue (UTC)" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left"
    Add-ControlToTableAt -TableObj $tableGrid -row 2 -column 1 -Control $dateTimeLabel

    $dateTimeButton = Get-Button -ButtonName "Select date & Time" -Margin "0,0,10,0" -HorizontalAlignment "Left" -height 30 -width 220
    Add-ControlToTableAt -TableObj $tableGrid -row 2 -column 2 -Control $dateTimeButton

    $global:ContextScopeVariables["AlpSPODateTimeLabel"] = Show-Text -Text "UTC Date Time" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left"
    Add-ControlToTableAt -TableObj $tableGrid -row 2 -column 3 -Control $global:ContextScopeVariables["AlpSPODateTimeLabel"]
    
    $dateTimeButton.Add_Click({
        $global:ContextScopeVariables.DateTimeProp = "AlpSPODateTime"
        $global:ContextScopeVariables["AlpSPODateTime"] = ""
        Get-DateTimePickerDialog 
    })

    $global:alpControlVariables.scopedPolicyComboboxSPO.add_SelectionChanged({
        if ($global:alpControlVariables.scopedPolicyComboboxSPO.SelectedItem -ne $null){
            $selectedRule = $global:ContextScopeVariables.alpRules|?{$_.ParentPolicyName -eq $global:alpControlVariables.scopedPolicyComboboxSPO.SelectedItem}
            if ($selectedRule.GetType().Name -eq "PSObject")
            {
                $selectedRuleName = @( $selectedRule.Name )
            }
            else
            {
                $selectedRuleName = $selectedRule.Name
            }
            
            $global:alpControlVariables.ImpactedRuleComboboxSPO.ItemsSource = $selectedRuleName
        }
    })

    $ImpactedRule = Show-Text -Text "Impacted Rule" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left"
    Add-ControlToTableAt -TableObj $tableGrid -row 3 -column 1 -Control $ImpactedRule

    $global:alpControlVariables.ImpactedRuleComboboxSPO = Get-ComboBox -Margin "0,0,10,0" -Width 400 -HorizontalAlignment "Left"
    $global:alpControlVariables.ImpactedRuleComboboxSPO.ItemsSource = $global:ContextScopeVariables.alpRuleDropDown
    #$global:alpControlVariables.ImpactedLabelCombobox.SelectionMode = "Multiple"
    Add-ControlToTableAt -TableObj $tableGrid -row 3 -column 2 -Control $global:alpControlVariables.ImpactedRuleComboboxSPO
    
    $global:alpControlVariables.ImpactedRuleComboboxSPO.add_SelectionChanged({
        if ($global:alpControlVariables.ImpactedRuleComboboxSPO.SelectedItem -ne $null){
            $selectedRule = $global:ContextScopeVariables.alpRules|?{$_.Name -eq $global:alpControlVariables.ImpactedRuleComboboxSPO.SelectedItem}
            $global:alpControlVariables.scopedPolicyComboboxSPO.Text = $selectedRule.ParentPolicyName
        }
    })

    $BrowseSimHarLabel1 = Show-Text -Text "If Simulation Issue" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left"
    Add-ControlToTableAt -TableObj $tableGrid -row 4 -column 1 -Control $BrowseSimHarLabel1
    
    $BrowseSimHarLabel2 = Show-Text -Text "Please gather while loading Simulation page" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left"
    Add-ControlToTableAt -TableObj $tableGrid -row 4 -column 2 -Control $BrowseSimHarLabel2
    
    $BrowseSimHarLabel = Show-Text -Text "Network Trace (.har)" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left"
    Add-ControlToTableAt -TableObj $tableGrid -row 5 -column 1 -Control $BrowseSimHarLabel

    $BrowseSimHarButton = Get-FileButton `
        -GlobalScopeName "alpControlVariables" `
        -GlobalVariableName "AutoSpoHarLabel" `
        -GlobalFileListName "AutoSpoHarFiles" `
        -ButtonName "Browse Simulation .har file" `
        -Margin "0,0,10,0" `
        -HorizontalAlignment "Left" `
        -height 30 `
        -width 220 `
        -VerticalAlignment "Center"
    Add-ControlToTableAt -TableObj $tableGrid -row 5 -column 2 -Control $BrowseSimHarButton

    $global:alpControlVariables.AutoSpoHarLabel = Show-Text -Text "Attached Simulation Har File" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" 
    $SimHarFilesScrollViewer = New-Object Windows.Controls.ScrollViewer
    $SimHarFilesScrollViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto
    $SimHarFilesScrollViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto
    $SimHarFilesScrollViewer.Content = $global:alpControlVariables.AutoSpoHarLabel
    Add-ControlToTableAt -TableObj $tableGrid -row 6 -column 2 -Control $SimHarFilesScrollViewer

    $docSiteIdlabel = Show-Text -Text "Site ID (GUID) of document" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left" -ShowHelp $true
    $docSiteIdlabel.ToolTip = Get-ToolTip -Text "Populate the Document Path field`nThen a link would be shown beside this text box`nUse that link to get the siteId`ncopy the GUID between<d:Id ...></d:Id>"
    Add-ControlToTableAt -TableObj $tableGrid -row 7 -column 1 -Control $docSiteIdlabel
    
    $global:alpControlVariables.docSiteId = Get-TextBox -Width 400 -Margin "0,0,10,0" -HorizontalAlignment "Left"
    Add-ControlToTableAt -TableObj $tableGrid -row 7 -column 2 -Control $global:alpControlVariables.docSiteId

    $global:alpControlVariables.docSiteIdHelp = Show-Text -Text "Help" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left"
    Add-ControlToTableAt -TableObj $tableGrid -row 7 -column 3 -Control $global:alpControlVariables.docSiteIdHelp
    $global:alpControlVariables.docSiteIdHelp.Visibility = [Windows.Visibility]::Hidden

    $reportSMTP = Show-Text -Text "Test-DlpPolicies Report Email address" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left"
    Add-ControlToTableAt -TableObj $tableGrid -row 8 -column 1 -Control $reportSMTP

    $global:alpControlVariables.reportSmtp = Get-TextBox -Width 400 -Margin "0,0,10,0" -HorizontalAlignment "Left"
    Add-ControlToTableAt -TableObj $tableGrid -row 8 -column 2 -Control $global:alpControlVariables.reportSmtp

    $TestDlpPoliciesButton = Get-Button -ButtonName "Run Test-DlpPolicies" -Margin "0,0,10,0" -HorizontalAlignment "Left" -height 30 -width 220
    Add-ControlToTableAt -TableObj $tableGrid -row 8 -column 3 -Control $TestDlpPoliciesButton

    $global:alpControlVariables.AffectedDocPath.Add_TextChanged({
        $FileUrl = $global:alpControlVariables.AffectedDocPath.Text -replace ":w:/r/", ""
        $siteUrl = $FileUrl -replace "(https?://.+?\.sharepoint\.com|https?://.+?\.sharepoint-df\.com|https?://(1drv|onedrive)\.live\.com)/([^/]+)/([^/]+)/([^/]+/)*[^/]+(\.\w+)?(\?[^#]*)?(#.*)?$", '$1/$3/$4'
        $apiLink = "$siteUrl/_api/site/id"
        if($siteUrl){
            $global:alpControlVariables.docSiteIdHelp.Text = ""
            $global:alpControlVariables.docSiteIdHelp.Inlines.Clear()
            # Add regular text to the tooltip
            $global:alpControlVariables.docSiteIdHelp.Inlines.Add("Click the following link to get the site id between <d:Id> tags `n")

            # Create a Hyperlink
            $hyperlink = New-Object Windows.Documents.Hyperlink
            $hyperlink.Inlines.Add("Click Here For SiteID")
            $hyperlink.NavigateUri = $apiLink
            $hyperlink.Add_RequestNavigate({
                Start-Process $args.Uri.AbsoluteUri
            })

            # Add the Hyperlink to the TextBlock
            $global:alpControlVariables.docSiteIdHelp.Inlines.Add($hyperlink)
            $global:alpControlVariables.docSiteIdHelp.Visibility = [Windows.Visibility]::Visible
        }else{
            $global:alpControlVariables.docSiteIdHelp.Visibility = [Windows.Visibility]::Hidden
        }
    })

    $TestDlpPoliciesButton.Add_Click({
        if ($global:alpControlVariables.AffectedDocPath.Text -eq $null)
        {
            [System.Windows.MessageBox]::Show("Please enter the affected doc path in SPO/ODB.","Error",0,0)
            return
        }
        
        if ($global:alpControlVariables.reportSmtp.Text -eq $null)
        {
            [System.Windows.MessageBox]::Show("Please enter the email the report has to be sent to.","Error",0,0)
            return
        }
        
        if ($global:alpControlVariables.docSiteId.Text -eq $null)
        {
            [System.Windows.MessageBox]::Show("Please enter the Site ID (GUID) of the document.","Error",0,0)
            return
        }

        $global:alpControlVariables.AffectedDocError.Visibility = [Windows.Visibility]::Hidden
        $v = $global:alpControlVariables.AffectedDocPath.Text
        $FileUrl = $v -replace ":w:/r/", ""
        $siteUrl = $FileUrl -replace "(https?://.+?\.sharepoint\.com|https?://.+?\.sharepoint-df\.com|https?://(1drv|onedrive)\.live\.com)/([^/]+)/([^/]+)/([^/]+/)*[^/]+(\.\w+)?(\?[^#]*)?(#.*)?$", '$1/$3/$4'
        $siteId = $global:alpControlVariables.docSiteId.Text

        $workload = "SPO"
        if($FileUrl -like "*-my.sharepoint*")
        {
            $workload = "ODB"
        }

        $pattern = "(?<=\%7B)(.*?)(?=\%7D)"
        $pattern1 = "(?<=\{)(.*?)(?=\})"
        
        if ($FileUrl -match $pattern) {
            $matchesR = [regex]::Matches($FileUrl, $pattern)
            $match = $matchesR[0].Value
            #Write-Host "Id" -NoNewLine -ForegroundColor Blue; Write-Host " $match" -ForegroundColor Cyan
            $id = $match
        }elseif($FileUrl -match $pattern1){
            $matchesR = [regex]::Matches($FileUrl, $pattern1)
            $match = $matchesR[0].Value
            #Write-Host "Id" -NoNewLine -ForegroundColor Blue; Write-Host " $match" -ForegroundColor Cyan
            $id = $match
        }

        if(!$siteUrl){ 
            $global:alpControlVariables.AffectedDocError.Visibility = [Windows.Visibility]::Visible
        }
        else{

            $scriptBlock = {
                param($siteId, $FileUrl, $workload, $reportAddr)
                $res = Test-DlpPolicies -SiteId $siteId -FileUrl $FileUrl -Workload $workload -SendReportTo $reportAddr
                return $res
            }
            $ps = [powershell]::Create().AddScript($scriptBlock)
            $ps.AddArgument($siteId)
            $ps.AddArgument($FileUrl)
            $ps.AddArgument($workload)
            $ps.AddArgument($global:alpControlVariables.reportSmtp.Text)

            $global:alpControlVariables.TDPResult = Get-ExoCmdletResult -ps $ps
            if($global:alpControlVariables.TDPResult.Message.Contains("Unable to find the file")){
                $global:alpControlVariables.AffectedDocError.Visibility = [Windows.Visibility]::Visible
            }elseif($global:alpControlVariables.TDPResult.Message.Contains("request is accepted")){
                $global:alpControlVariables.AutoSpoTdpLabel.Text = "A Report has been sent to the above email address with subject 'Test-DlpPolicies on File'. `nPlease download it and attach here."
            }
        }
    })

    $TDPLabel = Show-Text -Text "Attach Test-DlpPolicy Report" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left"
    Add-ControlToTableAt -TableObj $tableGrid -row 9 -column 1 -Control $TDPLabel

    $TDPButton = Get-FileButton `
        -GlobalScopeName "alpControlVariables" `
        -GlobalVariableName "AutoSpoTdpLabel" `
        -GlobalFileListName "AutoSpoTdpFiles" `
        -ButtonName "Browse Test-DlpPolicy Report" `
        -Margin "0,0,10,0" `
        -HorizontalAlignment "Left" `
        -height 30 `
        -width 220 `
        -VerticalAlignment "Center"
        
    Add-ControlToTableAt -TableObj $tableGrid -row 9 -column 2 -Control $TDPButton

    $global:alpControlVariables.AutoSpoTdpLabel = Show-Text -Text "Attached Test-DlpPolicies Report" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" 
    $TDPscrollViewer = New-Object Windows.Controls.ScrollViewer
    $TDPscrollViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto
    $TDPscrollViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto
    $TDPscrollViewer.Content = $global:alpControlVariables.AutoSpoTdpLabel
    Add-ControlToTableAt -TableObj $tableGrid -row 10 -column 2 -Control $TDPscrollViewer

    $BrowseAttachLabel = Show-Text -Text "Attach Screenshot/ Fiddler / Other info?" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left"
    Add-ControlToTableAt -TableObj $tableGrid -row 11 -column 1 -Control $BrowseAttachLabel

    $BrowseAttachButton = Get-FileButton `
        -GlobalScopeName "alpControlVariables" `
        -GlobalVariableName "AutoSpoFiddlerLabel" `
        -GlobalFileListName "AutoSpoFiddlerFiles" `
        -ButtonName "Browse Supporting Files" `
        -Margin "0,0,10,0" `
        -HorizontalAlignment "Left" `
        -height 30 `
        -width 220 `
        -VerticalAlignment "Center"
        
    Add-ControlToTableAt -TableObj $tableGrid -row 11 -column 2 -Control $BrowseAttachButton

    $global:alpControlVariables.AutoSpoFiddlerLabel = Show-Text -Text "Attached Files" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" 
    $FilesScrollViewer = New-Object Windows.Controls.ScrollViewer
    $FilesScrollViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto
    $FilesScrollViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto
    $FilesScrollViewer.Content = $global:alpControlVariables.AutoSpoFiddlerLabel
    Add-ControlToTableAt -TableObj $tableGrid -row 12 -column 2 -Control $FilesScrollViewer

    $AdditionalDoc = Show-Text -Text "Additional file paths" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left"
    Add-ControlToTableAt -TableObj $tableGrid -row 13 -column 1 -Control $AdditionalDoc

    $global:alpControlVariables.AdditionalPaths = Get-TextBox -Width 400 -height 150 -Margin "0,0,10,0" -HorizontalAlignment "Left"
    $global:alpControlVariables.AdditionalPaths.AcceptsReturn = $true
    $global:alpControlVariables.AdditionalPaths.TextWrapping = "Wrap"
    Add-ControlToTableAt -TableObj $tableGrid -row 13 -column 2 -Control $global:alpControlVariables.AdditionalPaths

    $tableGrid.Margin = New-Object System.Windows.Thickness(10,30,10,10)
    $tableGrid.HorizontalAlignment = "Center"
    $tableGrid.ColumnDefinitions[2].Width = 410
    
    $global:alpControlVariables.alpSupportDataTabContent.Children.Clear()
    $global:alpControlVariables.alpSupportDataTabContent.Children.Add($supportDataHeader) > $null
    $global:alpControlVariables.alpSupportDataTabContent.Children.Add($tableGrid) > $null
   
    $GetAlpSPOExport = Get-Button -ButtonName "Export Support Data" 
    $GetAlpSPOExport.Margin = New-Object System.Windows.Thickness(10,50,10,10)
    $global:alpControlVariables.alpSupportDataTabContent.Children.Add($GetAlpSPOExport) > $null

    $GetAlpSPOExport.Add_Click({
    
        # Create a new SaveFileDialog object
        $Folder = Get-ExportFolder("ExportedAutoLabelingSPOData")
        if (!$Folder) {
            return
        }
        $filePath = $Folder + "\"+"AutoLabelingPolicyExport.Json"
            
        $supportData=@{}
        $supportData["AlpPolicy"] = $global:ContextScopeVariables.alpPolicy
        $supportData["AlpRule"] = $global:ContextScopeVariables.alpRules
        $supportData["FilePath"] = $global:alpControlVariables.AffectedDocPath.Text
        $supportData["ImpactedRule"] = $global:alpControlVariables.ImpactedRuleComboboxSPO.Text
        $supportData["ScopedPolicy"] = $global:alpControlVariables.scopedPolicyComboboxSPO.Text
        $supportData["AdditionalFilePaths"] = $global:alpControlVariables.AdditionalPaths.Text
        $supportData["ComplianceProperties"] = $global:alpControlVariables.TDPResult
        # $supportData["Forests"] = Get-ForestInfo
        $supportData["DateTime"] = $global:ContextScopeVariables["AlpSPODateTime"]

        try {
            # Copy the files to the destination folder
            $supportData["TestDlpPoliciesReportFiles"] = Get-FileName($global:alpControlVariables.AutoSpoTdpFiles)
            foreach ($file in $global:alpControlVariables.AutoSpoTdpFiles) {
                Copy-Item $file $Folder -Force
            }

            # Copy the files to the destination folder
            $supportData["SupportingFiles"] = Get-FileName($global:alpControlVariables.AutoSpoFiddlerFiles)
            foreach ($file in $global:alpControlVariables.AutoSpoFiddlerFiles) {
                Copy-Item $file $Folder -Force
            }
            
            # Copy the files to the destination folder
            $supportData["SimulationHarFiles"] = Get-FileName($global:alpControlVariables.AutoSpoHarFiles)
            foreach ($file in $global:alpControlVariables.AutoSpoHarFiles) {
                Copy-Item $file $Folder -Force
            }

            # Zip the destination folder
            CleanAndShowFolder -Folder $Folder -supportData $supportData -filePath $filePath
        }
        catch {
            [System.Windows.MessageBox]::Show("Failed to create zip file. Error message: $_", "Error", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error)
        }
    })
}

function Get-alpEXOSupportTemplate(){

    $blueColor = [System.Windows.Media.Color]::FromRgb(63, 119, 206)
    $supportDataHeader = Show-Text -Text "AutoLabeling Exchagne Support Data Template" -Color $blueColor -fontSize 20

    $tableGrid = Get-Table -columns 4 -rows 11

    $AffectedClient = Show-Text -Text "Affected Client" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left"
    Add-ControlToTableAt -TableObj $tableGrid -row 0 -column 1 -Control $AffectedClient


    $AffectedClientCombo = @('Outlook For Web','Outlook Windows application', "Outlook Mobile")
    $global:alpControlVariables.AffectedClientComboboxExo = Get-ComboBox  -Margin "0,5,10,5" -Width 400 -HorizontalAlignment "Left"
    $global:alpControlVariables.AffectedClientComboboxExo.ItemsSource = $AffectedClientCombo
    Add-ControlToTableAt -TableObj $tableGrid -row 0 -column 2 -Control $global:alpControlVariables.AffectedClientComboboxExo

    $ImpactedUserSMTP = Show-Text -Text "Impacted User/Group SMTP" -IsBold $false -margin "0,0,10,0" -VerticalAlignment "Center" -HorizontalAlignment "Left"
    Add-ControlToTableAt -TableObj $tableGrid -row 1 -column 1 -Control $ImpactedUserSMTP

    $global:alpControlVariables.ImpactedUserTextBoxExo = Get-TextBox -Width 400 -Margin "0,0,10,0" -HorizontalAlignment "Left"
    Add-ControlToTableAt -TableObj $tableGrid -row 1 -column 2 -Control $global:alpControlVariables.ImpactedUserTextBoxExo

    $dateTimeLabel = Show-Text -Text "Date & Time of issue (UTC)" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left"
    Add-ControlToTableAt -TableObj $tableGrid -row 2 -column 1 -Control $dateTimeLabel

    $dateTimeButton = Get-Button -ButtonName "Select date & Time" -Margin "0,0,10,0" -HorizontalAlignment "Left" -height 30 -width 220
    Add-ControlToTableAt -TableObj $tableGrid -row 2 -column 2 -Control $dateTimeButton

    $global:ContextScopeVariables["AlpEXODateTimeLabel"] = Show-Text -Text "UTC Date Time" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left"
    Add-ControlToTableAt -TableObj $tableGrid -row 2 -column 3 -Control $global:ContextScopeVariables["AlpEXODateTimeLabel"]
    
    $dateTimeButton.Add_Click({
        $global:ContextScopeVariables.DateTimeProp = "AlpEXODateTime"
        $global:ContextScopeVariables["AlpEXODateTime"] = ""
        Get-DateTimePickerDialog 
    })

    $scopedPolicyLabel = Show-Text -Text "Impacted Policy" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left"
    Add-ControlToTableAt -TableObj $tableGrid -row 3 -column 1 -Control $scopedPolicyLabel

    $global:alpControlVariables.scopedPolicyComboboxExo = Get-ComboBox -Margin "0,0,10,0" -Width 400 -HorizontalAlignment "Left"
    $global:alpControlVariables.scopedPolicyComboboxExo.ItemsSource = $global:ContextScopeVariables.alpPolicyDropDown
    Add-ControlToTableAt -TableObj $tableGrid -row 3 -column 2 -Control $global:alpControlVariables.scopedPolicyComboboxExo
    
    $global:alpControlVariables.scopedPolicyComboboxExo.add_SelectionChanged({
        if ($global:alpControlVariables.scopedPolicyComboboxExo.SelectedItem -ne $null){
            $selectedRule = $global:ContextScopeVariables.alpRules|?{$_.ParentPolicyName -eq $global:alpControlVariables.scopedPolicyComboboxExo.SelectedItem}
            if ($selectedRule.GetType().Name -eq "PSObject")
            {
                $selectedRuleName = @( $selectedRule.Name )
            }
            else
            {
                $selectedRuleName = $selectedRule.Name
            }
            
            $global:alpControlVariables.ImpactedRuleComboboxExo.ItemsSource = $selectedRuleName
        }
    })
    
    $ImpactedRule = Show-Text -Text "Impacted Rule" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left"
    Add-ControlToTableAt -TableObj $tableGrid -row 4 -column 1 -Control $ImpactedRule

    $global:alpControlVariables.ImpactedRuleComboboxExo = Get-ComboBox -Margin "0,0,10,0" -Width 400 -HorizontalAlignment "Left"
    $global:alpControlVariables.ImpactedRuleComboboxExo.ItemsSource = $global:ContextScopeVariables.alpRuleDropDown
    #$global:alpControlVariables.ImpactedLabelCombobox.SelectionMode = "Multiple"
    Add-ControlToTableAt -TableObj $tableGrid -row 4 -column 2 -Control $global:alpControlVariables.ImpactedRuleComboboxExo
    
    $global:alpControlVariables.ImpactedRuleComboboxExo.add_SelectionChanged({
        if ($global:alpControlVariables.ImpactedRuleComboboxExo.SelectedItem -ne $null){
            $selectedRule = $global:ContextScopeVariables.alpRules|?{$_.Name -eq $global:alpControlVariables.ImpactedRuleComboboxExo.SelectedItem}
            $global:alpControlVariables.scopedPolicyComboboxExo.Text = $selectedRule.ParentPolicyName
        }
    })

    $SampleEmailLabel = Show-Text -Text "Sample Email file (.eml)" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left"
    Add-ControlToTableAt -TableObj $tableGrid -row 5 -column 1 -Control $SampleEmailLabel

    $SampleEmailButton = Get-FileButton `
        -GlobalScopeName "alpControlVariables" `
        -GlobalVariableName "AutoExoEmailLabel" `
        -GlobalFileListName "AutoExoEmailFiles" `
        -ButtonName "Browse Sample Email" `
        -Margin "0,0,10,0" `
        -HorizontalAlignment "Left" `
        -height 30 `
        -width 220 `
        -VerticalAlignment "Center"
    
    Add-ControlToTableAt -TableObj $tableGrid -row 5 -column 2 -Control $SampleEmailButton

    $global:alpControlVariables.AutoExoEmailLabel = Show-Text -Text "Attached Sample Email" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" 
    $SampleEmailscrollViewer = New-Object Windows.Controls.ScrollViewer
    $SampleEmailscrollViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto
    $SampleEmailscrollViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto
    $SampleEmailscrollViewer.Content = $global:alpControlVariables.AutoExoEmailLabel
    Add-ControlToTableAt -TableObj $tableGrid -row 6 -column 2 -Control $SampleEmailscrollViewer

    $global:alpControlVariables.EMTDLabel = Show-Text -Text "Extended Message Trace Detail" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" -ShowHelp $true
    $global:alpControlVariables.EMTDLabel.ToolTip = Get-ToolTip -Text "Follow instructions from below page`nhttps://learn.microsoft.com/en-us/exchange/monitoring/trace-an-email-message/message-trace-modern-eac#open-message-trace"
    Add-ControlToTableAt -TableObj $tableGrid -row 7 -column 1 -Control $global:alpControlVariables.EMTDLabel

    $EMTDButton = Get-FileButton `
        -GlobalScopeName "alpControlVariables" `
        -GlobalVariableName "AutoExoEmtdLabel" `
        -GlobalFileListName "AutoExoEmtdFiles" `
        -ButtonName "Browse EMTD" `
        -Margin "0,0,10,0" `
        -HorizontalAlignment "Left" `
        -height 30 `
        -width 220 `
        -VerticalAlignment "Center"
    Add-ControlToTableAt -TableObj $tableGrid -row 7 -column 2 -Control $EMTDButton

    $global:alpControlVariables.AutoExoEmtdLabel = Show-Text -Text "Attached EMTD" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" 
    $EMTDscrollViewer = New-Object Windows.Controls.ScrollViewer
    $EMTDscrollViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto
    $EMTDscrollViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto
    $EMTDscrollViewer.Content = $global:alpControlVariables.AutoExoEmtdLabel
    Add-ControlToTableAt -TableObj $tableGrid -row 8 -column 2 -Control $EMTDscrollViewer

    $BrowseAttachLabel = Show-Text -Text "Attach Screenshot/ Fiddler / Other info?" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left"
    Add-ControlToTableAt -TableObj $tableGrid -row 9 -column 1 -Control $BrowseAttachLabel

    $BrowseAttachButton = Get-FileButton `
        -GlobalScopeName "alpControlVariables" `
        -GlobalVariableName "AutoExoFiddlerLabel" `
        -GlobalFileListName "AutoExoFiddlerFiles" `
        -ButtonName "Browse Supporting Files" `
        -Margin "0,0,10,0" `
        -HorizontalAlignment "Left" `
        -height 30 `
        -width 220 `
        -VerticalAlignment "Center"

    Add-ControlToTableAt -TableObj $tableGrid -row 9 -column 2 -Control $BrowseAttachButton

    $global:alpControlVariables.AutoExoFiddlerLabel = Show-Text -Text "Attached Files" -IsBold $false -margin "0,0,10,0" -HorizontalAlignment "Left" 
    $FilesScrollViewer = New-Object Windows.Controls.ScrollViewer
    $FilesScrollViewer.VerticalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto
    $FilesScrollViewer.HorizontalScrollBarVisibility = [Windows.Controls.ScrollBarVisibility]::Auto
    $FilesScrollViewer.Content = $global:alpControlVariables.AutoExoFiddlerLabel
    Add-ControlToTableAt -TableObj $tableGrid -row 10 -column 2 -Control $FilesScrollViewer
    #$alpSupportDataTabContent.Children.Add($global:alpControlVariables.AutoExoFiddlerLabel)

    $tableGrid.Margin = New-Object System.Windows.Thickness(10,30,10,10)
    $tableGrid.HorizontalAlignment = "Center"
    $tableGrid.ColumnDefinitions[2].Width = 410
    
    $global:alpControlVariables.alpSupportDataTabContent.Children.Clear()
    $global:alpControlVariables.alpSupportDataTabContent.Children.Add($supportDataHeader) > $null
    $global:alpControlVariables.alpSupportDataTabContent.Children.Add($tableGrid) > $null
   
    $GetAlpExoExport = Get-Button -ButtonName "Export Support Data" 
    $GetAlpExoExport.Margin = New-Object System.Windows.Thickness(10,50,10,10)
    $global:alpControlVariables.alpSupportDataTabContent.Children.Add($GetAlpExoExport) > $null
    
    $GetAlpExoExport.Add_Click({
    
        # Create a new SaveFileDialog object
        $Folder = Get-ExportFolder("ExportedAutoLabelingEXOData")
        if (!$Folder) {
            return
        }
        $filePath = $Folder + "\"+"AutoLabelingPolicyExport.Json"
        
        $supportData=@{}
        $supportData["AlpPolicy"] = $global:ContextScopeVariables.alpPolicy
        $supportData["AlpRule"] = $global:ContextScopeVariables.alpRules
        $supportData["ImpactedClient"] = $global:alpControlVariables.AffectedClientComboboxExo.SelectedItem
        $supportData["ImpactedUser"] = $global:alpControlVariables.ImpactedUserTextBoxExo.Text
        $supportData["ImpactedRule"] = $global:alpControlVariables.ImpactedRuleComboboxExo.SelectedItem
        $supportData["ScopedPolicy"] = $global:alpControlVariables.scopedPolicyComboboxExo.SelectedItem
        #$supportData["Forests"] = Get-ForestInfo
        $supportData["DateTime"] = $global:ContextScopeVariables["AlpExoDateTime"]

        try {
            # Copy the files to the destination folder
            $supportData["ExtendedMessageTraceFiles"] = Get-FileName($global:alpControlVariables.AutoExoEmtdFiles)
            foreach ($file in $global:alpControlVariables.AutoExoEmtdFiles) {
                Copy-Item $file $Folder -Force
            }

            # Copy the files to the destination folder
            $supportData["SupportingFiles"] = Get-FileName($global:alpControlVariables.AutoExoFiddlerFiles)
            foreach ($file in $global:alpControlVariables.AutoExoFiddlerFiles) {
                Copy-Item $file $Folder -Force
            }

            # Copy the files to the destination folder
            $supportData["ReproFiles"] = Get-FileName($global:alpControlVariables.AutoExoEmailFiles)
            foreach ($file in $global:alpControlVariables.AutoExoEmailFiles) {
                Copy-Item $file $Folder -Force
            }

            CleanAndShowFolder -Folder $Folder -supportData $supportData -filePath $filePath
        }
        catch {
            [System.Windows.MessageBox]::Show("Failed to create zip file. Error message: $_", "Error", [System.Windows.MessageBoxButton]::OK, [System.Windows.MessageBoxImage]::Error)
        }
    })
}


function GetGlobalAlpRule {
    [System.Windows.Input.Mouse]::SetCursor([System.Windows.Input.Cursors]::Wait)
    if($global:ContextScopeVariables.alpRules -and $global:ContextScopeVariables.alpPolicy){
        return 
    }
    
    Write-Host "Getting Autolabeling policies in your organization."
    $global:ContextScopeVariables.alpPolicy = Get-AutoSensitivityLabelPolicy -IncludeTestModeResults $true -IncludeProgressFeedback
    
    if ($global:ContextScopeVariables.alpPolicy -ne $null)
    {
        if ($global:ContextScopeVariables.alpPolicy.GetType().Name -eq "PSObject")
        {
            $global:ContextScopeVariables.alpPolicyDropDown = @( $global:ContextScopeVariables.alpPolicy.Name )
        }
        else
        {
            $global:ContextScopeVariables.alpPolicyDropDown = $global:ContextScopeVariables.alpPolicy.Name
        }
    }
    
    Write-Host "Getting Autolabeling rules in your organization."
    $global:ContextScopeVariables.alpRules = Get-AutoSensitivityLabelRule
    
    if ($global:ContextScopeVariables.alpRules -ne $null)
    {
        if ($global:ContextScopeVariables.alpRules.GetType().Name -eq "PSObject")
        {
            $global:ContextScopeVariables.alpRuleDropDown = @( $global:ContextScopeVariables.alpRules.Name )
        }
        else
        {
            $global:ContextScopeVariables.alpRuleDropDown = $global:ContextScopeVariables.alpRules.Name
        }
    }
    
    [System.Windows.Input.Mouse]::SetCursor([System.Windows.Input.Cursors]::Arrow)
}

Export-ModuleMember -Function *


# SIG # Begin signature block
# MIIoLgYJKoZIhvcNAQcCoIIoHzCCKBsCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDvu6eYxAw+Dqre
# mKgmYt+81f5W20ATMvb2nc0ny3RWe6CCDXYwggX0MIID3KADAgECAhMzAAADrzBA
# DkyjTQVBAAAAAAOvMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD
# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
# b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p
# bmcgUENBIDIwMTEwHhcNMjMxMTE2MTkwOTAwWhcNMjQxMTE0MTkwOTAwWjB0MQsw
# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy
# b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
# AQDOS8s1ra6f0YGtg0OhEaQa/t3Q+q1MEHhWJhqQVuO5amYXQpy8MDPNoJYk+FWA
# hePP5LxwcSge5aen+f5Q6WNPd6EDxGzotvVpNi5ve0H97S3F7C/axDfKxyNh21MG
# 0W8Sb0vxi/vorcLHOL9i+t2D6yvvDzLlEefUCbQV/zGCBjXGlYJcUj6RAzXyeNAN
# xSpKXAGd7Fh+ocGHPPphcD9LQTOJgG7Y7aYztHqBLJiQQ4eAgZNU4ac6+8LnEGAL
# go1ydC5BJEuJQjYKbNTy959HrKSu7LO3Ws0w8jw6pYdC1IMpdTkk2puTgY2PDNzB
# tLM4evG7FYer3WX+8t1UMYNTAgMBAAGjggFzMIIBbzAfBgNVHSUEGDAWBgorBgEE
# AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQURxxxNPIEPGSO8kqz+bgCAQWGXsEw
# RQYDVR0RBD4wPKQ6MDgxHjAcBgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEW
# MBQGA1UEBRMNMjMwMDEyKzUwMTgyNjAfBgNVHSMEGDAWgBRIbmTlUAXTgqoXNzci
# tW2oynUClTBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8vd3d3Lm1pY3Jvc29mdC5j
# b20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0EyMDExXzIwMTEtMDctMDguY3JsMGEG
# CCsGAQUFBwEBBFUwUzBRBggrBgEFBQcwAoZFaHR0cDovL3d3dy5taWNyb3NvZnQu
# Y29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0EyMDExXzIwMTEtMDctMDguY3J0
# MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggIBAISxFt/zR2frTFPB45Yd
# mhZpB2nNJoOoi+qlgcTlnO4QwlYN1w/vYwbDy/oFJolD5r6FMJd0RGcgEM8q9TgQ
# 2OC7gQEmhweVJ7yuKJlQBH7P7Pg5RiqgV3cSonJ+OM4kFHbP3gPLiyzssSQdRuPY
# 1mIWoGg9i7Y4ZC8ST7WhpSyc0pns2XsUe1XsIjaUcGu7zd7gg97eCUiLRdVklPmp
# XobH9CEAWakRUGNICYN2AgjhRTC4j3KJfqMkU04R6Toyh4/Toswm1uoDcGr5laYn
# TfcX3u5WnJqJLhuPe8Uj9kGAOcyo0O1mNwDa+LhFEzB6CB32+wfJMumfr6degvLT
# e8x55urQLeTjimBQgS49BSUkhFN7ois3cZyNpnrMca5AZaC7pLI72vuqSsSlLalG
# OcZmPHZGYJqZ0BacN274OZ80Q8B11iNokns9Od348bMb5Z4fihxaBWebl8kWEi2O
# PvQImOAeq3nt7UWJBzJYLAGEpfasaA3ZQgIcEXdD+uwo6ymMzDY6UamFOfYqYWXk
# ntxDGu7ngD2ugKUuccYKJJRiiz+LAUcj90BVcSHRLQop9N8zoALr/1sJuwPrVAtx
# HNEgSW+AKBqIxYWM4Ev32l6agSUAezLMbq5f3d8x9qzT031jMDT+sUAoCw0M5wVt
# CUQcqINPuYjbS1WgJyZIiEkBMIIHejCCBWKgAwIBAgIKYQ6Q0gAAAAAAAzANBgkq
# hkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
# EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
# bjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
# IDIwMTEwHhcNMTEwNzA4MjA1OTA5WhcNMjYwNzA4MjEwOTA5WjB+MQswCQYDVQQG
# EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG
# A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQg
# Q29kZSBTaWduaW5nIFBDQSAyMDExMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
# CgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGfQhsqa+laUKq4BjgaBEm6f8MMHt03
# a8YS2AvwOMKZBrDIOdUBFDFC04kNeWSHfpRgJGyvnkmc6Whe0t+bU7IKLMOv2akr
# rnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13YxC4Ddato88tt8zpcoRb0Rrrg
# OGSsbmQ1eKagYw8t00CT+OPeBw3VXHmlSSnnDb6gE3e+lD3v++MrWhAfTVYoonpy
# 4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nkkDstrjNYxbc+/jLTswM9
# sbKvkjh+0p2ALPVOVpEhNSXDOW5kf1O6nA+tGSOEy/S6A4aN91/w0FK/jJSHvMAh
# dCVfGCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmdX4jiJV3TIUs+UsS1Vz8k
# A/DRelsv1SPjcF0PUUZ3s/gA4bysAoJf28AVs70b1FVL5zmhD+kjSbwYuER8ReTB
# w3J64HLnJN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zdsGbiwZeBe+3W7UvnSSmn
# Eyimp31ngOaKYnhfsi+E11ecXL93KCjx7W3DKI8sj0A3T8HhhUSJxAlMxdSlQy90
# lfdu+HggWCwTXWCVmj5PM4TasIgX3p5O9JawvEagbJjS4NaIjAsCAwEAAaOCAe0w
# ggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRIbmTlUAXTgqoXNzcitW2o
# ynUClTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYwDwYD
# VR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToCMZBDuRQFTuHqp8cx0SOJNDBa
# BgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2Ny
# bC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNfMjIuY3JsMF4GCCsG
# AQUFBwEBBFIwUDBOBggrBgEFBQcwAoZCaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
# L3BraS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNfMjIuY3J0MIGfBgNV
# HSAEgZcwgZQwgZEGCSsGAQQBgjcuAzCBgzA/BggrBgEFBQcCARYzaHR0cDovL3d3
# dy5taWNyb3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1hcnljcHMuaHRtMEAGCCsG
# AQUFBwICMDQeMiAdAEwAZQBnAGEAbABfAHAAbwBsAGkAYwB5AF8AcwB0AGEAdABl
# AG0AZQBuAHQALiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn8oalmOBUeRou09h0ZyKb
# C5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+vj/oCso7v0epo/Np22O/IjWll11l
# hJB9i0ZQVdgMknzSGksc8zxCi1LQsP1r4z4HLimb5j0bpdS1HXeUOeLpZMlEPXh6
# I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6VoCo/KmtYSWMfCWluWpiW5IP0
# wI/zRive/DvQvTXvbiWu5a8n7dDd8w6vmSiXmE0OPQvyCInWH8MyGOLwxS3OW560
# STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBpmLJZiWhub6e3dMNABQam
# ASooPoI/E01mC8CzTfXhj38cbxV9Rad25UAqZaPDXVJihsMdYzaXht/a8/jyFqGa
# J+HNpZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYbBL7fQccOKO7eZS/sl/ah
# XJbYANahRr1Z85elCUtIEJmAH9AAKcWxm6U/RXceNcbSoqKfenoi+kiVH6v7RyOA
# 9Z74v2u3S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sLgOppO6/8MO0ETI7f33Vt
# Y5E90Z1WTk+/gFcioXgRMiF670EKsT/7qMykXcGhiJtXcVZOSEXAQsmbdlsKgEhr
# /Xmfwb1tbWrJUnMTDXpQzTGCGg4wghoKAgEBMIGVMH4xCzAJBgNVBAYTAlVTMRMw
# EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
# aWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNp
# Z25pbmcgUENBIDIwMTECEzMAAAOvMEAOTKNNBUEAAAAAA68wDQYJYIZIAWUDBAIB
# BQCggbAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEO
# MAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIPC5hy3VIwmO8xDNcppdMNX5
# lgMtUKQPXdFWejZwjklTMEQGCisGAQQBgjcCAQwxNjA0oBSAEgBNAGkAYwByAG8A
# cwBvAGYAdKEcgBpodHRwczovL3d3dy5taWNyb3NvZnQuY29tIDANBgkqhkiG9w0B
# AQEFAASCAQC9TeI6G+XmTkV2EEbSMQvWfny69GomrNFySa/4p/Xsxgb+Af8vpqnD
# GXwnFUrKgpRBRhU50bL0pCibFN5zMbUonyXQybgpk+iXimLWQw9ZHIb4ZtGB6EyL
# 1mIyyELNqU4oRqPa9OxWq0i2SI+6SLvmZul1jqbcTEIH6QkgD//Z+XFPoHYWc9bo
# z2NyVa35SuukE3N5gxtJR98DCpTKNvJ8/0MrPLz/+iLnyTieAkqPit6sKVYKZ7ic
# S001ilcHfWF+hJQsYZLRPPW3rEOv/+tg8V7cCgLiobwHap39x4UN8OA+S2kC5Euw
# 9W237SqzPswMLX6pcWazaAqIt5amx8nMoYIXljCCF5IGCisGAQQBgjcDAwExgheC
# MIIXfgYJKoZIhvcNAQcCoIIXbzCCF2sCAQMxDzANBglghkgBZQMEAgEFADCCAVEG
# CyqGSIb3DQEJEAEEoIIBQASCATwwggE4AgEBBgorBgEEAYRZCgMBMDEwDQYJYIZI
# AWUDBAIBBQAEIEaDWO7rBoQNF7Lb2b20R0xSsYCxTkYq9big4UqujYTdAgZmMrlc
# AXoYEjIwMjQwNTA5MTkwNTIwLjc2WjAEgAIB9KCB0aSBzjCByzELMAkGA1UEBhMC
# VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV
# BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjElMCMGA1UECxMcTWljcm9zb2Z0IEFt
# ZXJpY2EgT3BlcmF0aW9uczEnMCUGA1UECxMeblNoaWVsZCBUU1MgRVNOOkE0MDAt
# MDVFMC1EOTQ3MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNl
# oIIR7TCCByAwggUIoAMCAQICEzMAAAHs4CukgtCRUoAAAQAAAewwDQYJKoZIhvcN
# AQELBQAwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV
# BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQG
# A1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwHhcNMjMxMjA2MTg0
# NTM4WhcNMjUwMzA1MTg0NTM4WjCByzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh
# c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD
# b3Jwb3JhdGlvbjElMCMGA1UECxMcTWljcm9zb2Z0IEFtZXJpY2EgT3BlcmF0aW9u
# czEnMCUGA1UECxMeblNoaWVsZCBUU1MgRVNOOkE0MDAtMDVFMC1EOTQ3MSUwIwYD
# VQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNlMIICIjANBgkqhkiG9w0B
# AQEFAAOCAg8AMIICCgKCAgEAsEf0bgk24MVFlZv1XbpdtrsHRGZtCKABbOqCK9/V
# SvyLT/NHJ/vE5rT+u4mmweA5gCifRh+nSRoRDyaWOL0ykUjsK0TcVSCqDz3lBd3+
# FchxHKP7tUFGnZcA9d9jbmQsW54ejItpSxu6Q77M2ajBu0tzAotm5Np77RinXgCC
# /h++4C+K9NU0lm+67BNiW9T/zemP1tQqg4tfyG9/80all7eM8b3SBnD40uGSskBB
# d0hGQKuFyI4sqMDx2qjW2cXX9pFjv2o3X01PObfd+AlwIp29KPrkPSrWijS1VXDX
# +UKUuH+vzLFzryBbgmDEXSg46Zr6MAHi/tY9u2wsQgaQ0B61pHz82af1/m7fQuxO
# YTz+h1UaKgWEe7tYFH+RhKvua9RwNI2o59EOjr32HJBNB3Tr+ilmvrAJiRuzw702
# Wnu+4aJs8eiD6oIFaTWbgpO/Un1ZpyrvRefFAJ1OfE6gxxMxrEJzFECrLUt845+k
# lNDSxBTQnrZbmipKlg0VSxFm7t9vSBId7alz138ukYf8Am8HvUgiSKKrQXsQaz8k
# GANl2s9XyvcrE7MdJAPVdScFVeOCGvXPjMLQEerKinQIEaP27P17vILmvCw3uils
# rve+HvZhlu2TvJ2qwxawE9RFxhw7nsoEir79iu8AfJQIDBiY+9wkL6/o6qFsMel3
# cnkCAwEAAaOCAUkwggFFMB0GA1UdDgQWBBT0WtBHZP4r9cIWELFfFIBH+EyFhjAf
# BgNVHSMEGDAWgBSfpxVdAF5iXYP05dJlpxtTNRnpcjBfBgNVHR8EWDBWMFSgUqBQ
# hk5odHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3NvZnQl
# MjBUaW1lLVN0YW1wJTIwUENBJTIwMjAxMCgxKS5jcmwwbAYIKwYBBQUHAQEEYDBe
# MFwGCCsGAQUFBzAChlBodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2Nl
# cnRzL01pY3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNydDAM
# BgNVHRMBAf8EAjAAMBYGA1UdJQEB/wQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQE
# AwIHgDANBgkqhkiG9w0BAQsFAAOCAgEAkrzEpDEq745Qz2oPAEW9DhawELUizA6T
# dFGNxY7z4cBig664sZp7jH465lY0atbvCIZA7xhf2332xU6/iAJw0noPEwfc3xv+
# Mm5J7qKZJW3ho27ezC8aX4aJQhEchHNtDzGSic/Ur837jtZ+ca6yzi/JtJ5r+ZAX
# L/stQFyeUHC4nJoXtiKd/w+uxHeqD6kCNN5g42GktTUIQTbbue8Dyl2dRKDU6AZP
# GwOvN/cNdfW/mvVk6KiLJHURqD+cYwyL/pnNLwR4WRpCVb3yIZuAKfM6bQu8VQJc
# tI3jr+XVBjAmIGY76E5oHeOW6gMLp3Zj5Rrq+3pXlmHnS0H+7Ny+fqn2mP8RIf/b
# qNe0pzP4B1UhgM7563hoTqwdi7XSqFUnuS22KYoV3LQ3u+omLS/pocVzxKc3Wt2y
# ZYT0zkNyjhGQKVREQaOcpbVozwlpV8cgqZeY4/Z2NJ33dO9W3pp6LvAN61Ga3YCi
# GrrbB+0hzojnm2RqjbvuttrybWt3gGLAgGsQHAfQYiT5Wu12nfaq02HU+OVZQmE7
# QUmOKFUbHnUgA7/fY7/4mCABstWwsrbmtKP0Kr/Xqyps0Ak1TF2g3NuQ0y3DBia0
# bmtytMYr3bZ6AXsc1Sa+sl6jPgWtsISFUbxnK4gZCl9BSRXlu69vV1/pNHuA5xuo
# gRykI3nOlTcwggdxMIIFWaADAgECAhMzAAAAFcXna54Cm0mZAAAAAAAVMA0GCSqG
# SIb3DQEBCwUAMIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQ
# MA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9u
# MTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkg
# MjAxMDAeFw0yMTA5MzAxODIyMjVaFw0zMDA5MzAxODMyMjVaMHwxCzAJBgNVBAYT
# AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD
# VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBU
# aW1lLVN0YW1wIFBDQSAyMDEwMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC
# AgEA5OGmTOe0ciELeaLL1yR5vQ7VgtP97pwHB9KpbE51yMo1V/YBf2xK4OK9uT4X
# YDP/XE/HZveVU3Fa4n5KWv64NmeFRiMMtY0Tz3cywBAY6GB9alKDRLemjkZrBxTz
# xXb1hlDcwUTIcVxRMTegCjhuje3XD9gmU3w5YQJ6xKr9cmmvHaus9ja+NSZk2pg7
# uhp7M62AW36MEBydUv626GIl3GoPz130/o5Tz9bshVZN7928jaTjkY+yOSxRnOlw
# aQ3KNi1wjjHINSi947SHJMPgyY9+tVSP3PoFVZhtaDuaRr3tpK56KTesy+uDRedG
# bsoy1cCGMFxPLOJiss254o2I5JasAUq7vnGpF1tnYN74kpEeHT39IM9zfUGaRnXN
# xF803RKJ1v2lIH1+/NmeRd+2ci/bfV+AutuqfjbsNkz2K26oElHovwUDo9Fzpk03
# dJQcNIIP8BDyt0cY7afomXw/TNuvXsLz1dhzPUNOwTM5TI4CvEJoLhDqhFFG4tG9
# ahhaYQFzymeiXtcodgLiMxhy16cg8ML6EgrXY28MyTZki1ugpoMhXV8wdJGUlNi5
# UPkLiWHzNgY1GIRH29wb0f2y1BzFa/ZcUlFdEtsluq9QBXpsxREdcu+N+VLEhReT
# wDwV2xo3xwgVGD94q0W29R6HXtqPnhZyacaue7e3PmriLq0CAwEAAaOCAd0wggHZ
# MBIGCSsGAQQBgjcVAQQFAgMBAAEwIwYJKwYBBAGCNxUCBBYEFCqnUv5kxJq+gpE8
# RjUpzxD/LwTuMB0GA1UdDgQWBBSfpxVdAF5iXYP05dJlpxtTNRnpcjBcBgNVHSAE
# VTBTMFEGDCsGAQQBgjdMg30BATBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1p
# Y3Jvc29mdC5jb20vcGtpb3BzL0RvY3MvUmVwb3NpdG9yeS5odG0wEwYDVR0lBAww
# CgYIKwYBBQUHAwgwGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwCwYDVR0PBAQD
# AgGGMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU1fZWy4/oolxiaNE9lJBb
# 186aGMQwVgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDovL2NybC5taWNyb3NvZnQuY29t
# L3BraS9jcmwvcHJvZHVjdHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3JsMFoG
# CCsGAQUFBwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0cDovL3d3dy5taWNyb3NvZnQu
# Y29tL3BraS9jZXJ0cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcnQwDQYJKoZI
# hvcNAQELBQADggIBAJ1VffwqreEsH2cBMSRb4Z5yS/ypb+pcFLY+TkdkeLEGk5c9
# MTO1OdfCcTY/2mRsfNB1OW27DzHkwo/7bNGhlBgi7ulmZzpTTd2YurYeeNg2Lpyp
# glYAA7AFvonoaeC6Ce5732pvvinLbtg/SHUB2RjebYIM9W0jVOR4U3UkV7ndn/OO
# PcbzaN9l9qRWqveVtihVJ9AkvUCgvxm2EhIRXT0n4ECWOKz3+SmJw7wXsFSFQrP8
# DJ6LGYnn8AtqgcKBGUIZUnWKNsIdw2FzLixre24/LAl4FOmRsqlb30mjdAy87JGA
# 0j3mSj5mO0+7hvoyGtmW9I/2kQH2zsZ0/fZMcm8Qq3UwxTSwethQ/gpY3UA8x1Rt
# nWN0SCyxTkctwRQEcb9k+SS+c23Kjgm9swFXSVRk2XPXfx5bRAGOWhmRaw2fpCjc
# ZxkoJLo4S5pu+yFUa2pFEUep8beuyOiJXk+d0tBMdrVXVAmxaQFEfnyhYWxz/gq7
# 7EFmPWn9y8FBSX5+k77L+DvktxW/tM4+pTFRhLy/AsGConsXHRWJjXD+57XQKBqJ
# C4822rpM+Zv/Cuk0+CQ1ZyvgDbjmjJnW4SLq8CdCPSWU5nR0W2rRnj7tfqAxM328
# y+l7vzhwRNGQ8cirOoo6CGJ/2XBjU02N7oJtpQUQwXEGahC0HVUzWLOhcGbyoYID
# UDCCAjgCAQEwgfmhgdGkgc4wgcsxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNo
# aW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
# cG9yYXRpb24xJTAjBgNVBAsTHE1pY3Jvc29mdCBBbWVyaWNhIE9wZXJhdGlvbnMx
# JzAlBgNVBAsTHm5TaGllbGQgVFNTIEVTTjpBNDAwLTA1RTAtRDk0NzElMCMGA1UE
# AxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaIjCgEBMAcGBSsOAwIaAxUA
# jhz7YFXc/RFtIjzS/wV6iaKlTH+ggYMwgYCkfjB8MQswCQYDVQQGEwJVUzETMBEG
# A1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWlj
# cm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFt
# cCBQQ0EgMjAxMDANBgkqhkiG9w0BAQsFAAIFAOnnGhQwIhgPMjAyNDA1MDkwOTQ3
# MDBaGA8yMDI0MDUxMDA5NDcwMFowdzA9BgorBgEEAYRZCgQBMS8wLTAKAgUA6eca
# FAIBADAKAgEAAgIamQIB/zAHAgEAAgIT2TAKAgUA6ehrlAIBADA2BgorBgEEAYRZ
# CgQCMSgwJjAMBgorBgEEAYRZCgMCoAowCAIBAAIDB6EgoQowCAIBAAIDAYagMA0G
# CSqGSIb3DQEBCwUAA4IBAQBxqnQCOf4IQW7ryRrXAGxcS/+tgR3BST06tO3ZLeRD
# ym+FnSFB7H6rc6wc7pUva4Hf6q/GyAe27sAzJr6Mpj1+HKPXMIuu8E1mAL86j0sh
# Hl+tl1pbN3L87TO3vc5WTU4brvDyyr4fwoB9j/OAvTWDAQlRriQIUdK8VSIuJ97K
# SNtJi87XclIYyH/5SBXSRTrTIS6X+uNeJFGp2Hk5LO19CJabbqDCMayJg3Pl8xRp
# HhZh/vJ4wGDuHIffNR7QiWeXoAhivCu6rEZUbkpCT+R9jlqF7ASxyCbj27ou4Fkg
# g1/79CT+HPlOy+25AGwLC1U48Zvmxm78YpB7Ts17kLzAMYIEDTCCBAkCAQEwgZMw
# fDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl
# ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMd
# TWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTACEzMAAAHs4CukgtCRUoAAAQAA
# AewwDQYJYIZIAWUDBAIBBQCgggFKMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRAB
# BDAvBgkqhkiG9w0BCQQxIgQgn9G/oCDjw+pq7xdtlpi+VbTb+iVSixEHAgjgo35P
# B0kwgfoGCyqGSIb3DQEJEAIvMYHqMIHnMIHkMIG9BCAnCeb1an03yIcdtUAQWysq
# P8XIkCF2qDFlC3owBNUKgzCBmDCBgKR+MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQI
# EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv
# ZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBD
# QSAyMDEwAhMzAAAB7OArpILQkVKAAAEAAAHsMCIEIGQh6IMcj+iVfERrRwKNOOJ/
# oFh4sQCnRdR7v1CA3b16MA0GCSqGSIb3DQEBCwUABIICAEJBxWBFFgRgdBZNFxRQ
# z1IPeAX5pFrCXhN0nHi/ARtQ2zU0ibooKY8F4KCf/j7Qo7BCAk3ZZPBXCnrqVagM
# hYgfdL/zVgJND0TGpUoJAy3dCTV8djtX2jI7a4eLcNCYLJBQwP1k0RVPrnRyB42Q
# BFzWAYhQ0LrJ/qUO8eCe9P3N5jPsKUOWKEKa8rGx79jXGuQlQ5/3nvGMjn2trnu1
# UfRHHbZwMUaiim3w5HVwiF9MBA67B5arH3k5QwNALMhbJDGkQrXL+VXfdUDWGob8
# LhDXFmpp0e5/uc2sv/gOqVdwoptu3/jRf/OflHYwgDovLhGP9djZOSZSc6qGSNGp
# urIyVUskZh4Tbo9ePVRexJGP2DjeQXfMKCLJXZQjNju0khfDMzXRy2KYt79910+B
# csyYRMegSv0z+Vr8UAOEZaqt8vpSgAp/+l7fuSuzA7u2RL7RNnD2zsj74EkxalfW
# QFd2qQdSAFwF7UatuT/Ay3Z8EoNwsa42f1DoYRfS16nVVA8ImajDFK4ydWVE1wPi
# Hdqf52zjywC/Whz5ZTyqxmtqYlIg0xIFmvIHVMz6NFYf9zhMDb/RkEFTi/N3ZtRg
# YYarsoYwsdk4FdU7MfEUQ355kZzWGwWSwOwe54mNjEJkuC8G8yR+ehwbwpNr8LQP
# fIeUAFSeN/yX5w0Nf4Kq7xoa
# SIG # End signature block