Utilities/DLPValidationUtility.ps1


using module "..\CAMP.psm1"
$ExchangeString = "Exchange"
$SharePointString = "SharePoint"
$OneDriveString = "OneDrive"
$TeamsString = "Teams"
$DevicesString = "Devices"

Function Get-DLPPolicyValidation {
    Param
    (
        $SensitiveTypes,
        $Config,
        $LogFile,
        $Name
    )
    $ConfigObjectList = @()
    try {
        $SensitiveTypesWorkloadMapping = @()
        foreach ($SIT in $SensitiveTypes.keys) {
                
            $SensitiveTypesWorkloadMapping += New-Object -TypeName PSObject @{
                Name              = $SIT
                $ExchangeString   = $false
                $SharePointString = $false
                $OneDriveString   = $false
                $TeamsString      = $false
                $DevicesString    = $false
            
            }
        }
        #Getting Custom SIT
        if($($Config["GetDLPCustomSIT"]) -ne "Error")
        {
            $CustomSIT = $($Config["GetDLPCustomSIT"]).Name
            $CustomSITHashTable = @{}
            foreach($SIT in $CustomSIT)
            {
                $CustomSITHashTable[$SIT] = $null
            }

        }

        ForEach ($CompliancePolicy in $Config["GetDlpCompliancePolicy"]) {   
            $PolicySensitiveType = New-Object System.Collections.Generic.HashSet[String]          
            $PolicySensitiveType = Get-PolicySensitiveType -Config $Config -CompliancePolicy $CompliancePolicy -SensitiveTypes $SensitiveTypes
            if($($Config["GetDLPCustomSIT"]) -ne "Error")
            {
                $CustomSensitiveType = Get-PolicySensitiveType -Config $Config -CompliancePolicy $CompliancePolicy -SensitiveTypes $CustomSITHashTable
                $CustomSensitiveTypeText = $null
                foreach ($SIT in $CustomSensitiveType) {
                    if ($null -ne $CustomSensitiveTypeText) {
                        $CustomSensitiveTypeText += ", $SIT"
                    }
                    else {
                        $CustomSensitiveTypeText += "$SIT"
                    }
                }
            }
            if (($CompliancePolicy.Mode -ieq "enable") ) {
                $WorkloadsStatus = Get-AllLocationenabled -CompliancePolicy $CompliancePolicy 
                $EnabledWorkload = $null
                $DisabledWorkload = ""       
                $PolicySensitiveTypeText = $null
                foreach ($Workload in ($WorkloadsStatus.Keys | Sort-Object -CaseSensitive)) {
                    if ($WorkloadsStatus[$Workload] -eq $true) {
                        if ( $null -ne $EnabledWorkload) {
                            $EnabledWorkload += ", $($Workload)"
                        }
                        else {
                            $EnabledWorkload += "$($Workload)"
                        }
                        foreach ($SIT in $PolicySensitiveType) {
                            if ($SITToChange = $SensitiveTypesWorkloadMapping | Where-Object { $_.Name -eq $SIT }) {
                                $SITToChange.$($Workload) = $true
                            }                        
                        }
                                     
                    }
                    else {
                        $DisabledWorkload += "$($Workload) "                 
                    }           
                }
                
                foreach ($SIT in $PolicySensitiveType) {
                    if ($null -ne $PolicySensitiveTypeText) {
                        $PolicySensitiveTypeText += ", $SIT"
                    }
                    else {
                        $PolicySensitiveTypeText += "$SIT"
                    }
                }
            
               
                If ($PolicySensitiveType.Count -ne 0 ) {   
                    $ConfigObject = [CAMPCheckConfig]::new()
                    $Workload = $CompliancePolicy.Workload
                    $ConfigObject.Object = "$($CompliancePolicy.Name)"
                    if($null -eq $CustomSensitiveTypeText)
                    {
                        $ConfigObject.ConfigItem = "$PolicySensitiveTypeText"
                    
                    }
                    else
                    {
                        $ConfigObject.ConfigItem = "$PolicySensitiveTypeText<br><strong>Custom SIT</strong> : $CustomSensitiveTypeText"
                    }
                    $ConfigData = ""
                    $ConfigObjectResult = @{}
                    $ConfigObjectResult = Set-ExchangeNotAllLocationEnabledConfigObject -ConfigObjectResult $ConfigObjectResult -CompliancePolicy $CompliancePolicy
                    $ConfigObjectResult = Set-SharePointNotAllLocationEnabledConfigObject -ConfigObjectResult $ConfigObjectResult -CompliancePolicy $CompliancePolicy
                    $ConfigObjectResult = Set-OneDriveNotAllLocationEnabledConfigObject  -ConfigObjectResult $ConfigObjectResult -CompliancePolicy $CompliancePolicy
                    $ConfigObjectResult = Set-TeamsNotAllLocationEnabledConfigObject  -ConfigObjectResult $ConfigObjectResult -CompliancePolicy $CompliancePolicy
                    $ConfigObjectResult = Set-DevicesNotAllLocationEnabledConfigObject  -ConfigObjectResult $ConfigObjectResult -CompliancePolicy $CompliancePolicy
                    $ConfigData = "<strong>Enabled Workloads </strong>: $($EnabledWorkload)<BR/>"
                    foreach ($ConfigResult in $ConfigObjectResult.keys) {
                        $ConfigData += "<strong>$ConfigResult </strong>: $($ConfigObjectResult[$ConfigResult])<BR/>"
                            
                    }
                    $NotInOrganizationAccessScope = $Config["GetDlpComplianceRule"] | Where-Object {$_.AccessScope -eq "NotInOrganization" -and $_.ParentPolicyName -eq "$($CompliancePolicy.Name)"} 
                    if($null -ne $NotInOrganizationAccessScope)
                    {
                        $ConfigData += "<strong>Access Scope</strong>: For users outside organization<BR/>"
                       
                    }else{
                        $ConfigData += "<strong>Access Scope</strong>: For users inside organization<BR/>"
                    }
                    $ConfigObject.ConfigData = "$ConfigData"
                    $ConfigObject.SetResult([CAMPConfigLevel]::Informational, "Pass")   
                    $ConfigObjectList += $ConfigObject
    
                }
                
            }   
            else {
                If ($PolicySensitiveType.Count -ne 0 ) {   
                    $ConfigObject = [CAMPCheckConfig]::new()
                    $Workload = $CompliancePolicy.Workload
                    $ConfigObject.Object = "$($CompliancePolicy.Name)"
                    $PolicySensitiveTypeText = $null
                    foreach ($SIT in $PolicySensitiveType) {
                        if ($null -ne $PolicySensitiveTypeText) {
                            $PolicySensitiveTypeText += ", $SIT"
                        }
                        else {
                            $PolicySensitiveTypeText += "$SIT"
                        }
                    }
                    if($null -eq $CustomSensitiveTypeText)
                    {
                        $ConfigObject.ConfigItem = "$PolicySensitiveTypeText"
                    
                    }
                    else
                    {
                        $ConfigObject.ConfigItem = "$PolicySensitiveTypeText<br><strong>Custom SIT</strong> : $CustomSensitiveTypeText"
                    }
                    $Mode = $($CompliancePolicy.Mode)
                    if ( $Mode -eq "TestWithoutNotifications") {
                        $Mode = "test without notifications"
                    }
                    elseif ($Mode -eq "Disable") {
                        $Mode = "disabled"
                    }
                    elseif ( $Mode -eq "TestWithNotifications") {
                        $Mode = "test with notifications"
                    }
                   
                    $ConfigObject.ConfigData = "<B>Policy is in $Mode state.<B>"
                    $ConfigObject.SetResult([CAMPConfigLevel]::Informational, "Pass")   
    
                    $ConfigObjectList += $ConfigObject
                }
            }
               
        }
        $ConfigObjectList = Get-SensitiveTypesNotEnabled -SensitiveTypesWorkloadMapping $SensitiveTypesWorkloadMapping -ConfigObjectList $ConfigObjectList -LogFile $LogFile
         
    }
    catch {
        Write-Host "Error:$(Get-Date) There was an issue while running CAMP. Please try running the tool again after some time." -ForegroundColor:Red
        $ErrorMessage = $_.ToString()
        $StackTraceInfo = $_.ScriptStackTrace
        Write-Log -IsError -ErrorMessage $ErrorMessage -StackTraceInfo $StackTraceInfo -LogFile $LogFile -ErrorAction:SilentlyContinue
        
    }
    Return $ConfigObjectList
}

Function Get-NoPolicyRemediationAction {
    [CmdletBinding()]
    Param
    (
        $Name,
        $PendingSensitiveTypes
      
    )
    $RemediationActionScript = ""

    $PendingSensitiveTypesList = $PendingSensitiveTypes.split(",") 
    $LowCountSenstiveinfodetails = ""
    $HighCountSenstiveinfodetails = ""

    foreach ($PendingSensitiveType in $PendingSensitiveTypesList) {
        $PendingSensitiveTypetrim = $PendingSensitiveType.trim() 
        if ( $LowCountSenstiveinfodetails -eq "") {
            $LowCountSenstiveinfodetails += "@{Name =" + [char]34
            $HighCountSenstiveinfodetails += "@{Name =" + [char]34

        }
        else {
            $LowCountSenstiveinfodetails += ",@{Name =" + [char]34
            $HighCountSenstiveinfodetails += ",@{Name =" + [char]34

        }
        $LowCountSenstiveinfodetails += $PendingSensitiveTypetrim + [char]34
        $LowCountSenstiveinfodetails += ";minCount = ""1"""
        $LowCountSenstiveinfodetails += ";maxCount = ""5""}"
        $HighCountSenstiveinfodetails += $PendingSensitiveTypetrim + [char]34
        $HighCountSenstiveinfodetails += ";minCount = ""6""}"
    }
                

    $NewPolicyTemplateData = Get-Content "$PSScriptRoot\..\Templates\NewDLPPolicyTemplate.txt"
    if ($null -eq $NewPolicyTemplateData -or $NewPolicyTemplateData -eq "") {
        Write-Host "$(Get-Date) Template file does not exist/is corrupt in $PSScriptRoot\..\Templates\NewDLPPolicyTemplate.txt. Remediation wont be generated" -ForegroundColor Orange           
    }
    else {
        $NewPolicyTemplateData = $NewPolicyTemplateData.Replace("<NewPolicyName>", "$Name")
        $NewPolicyTemplateData = $NewPolicyTemplateData.Replace("<HighSensitiveInfoDetails>", "$HighCountSenstiveinfodetails")
        $NewPolicyTemplateData = $NewPolicyTemplateData.Replace("<LowSensitiveInfoDetails>", "$LowCountSenstiveinfodetails")
        $LowRuleName = "Low Volume $Name"
        if ($LowRuleName.length -gt 60) { $LowRuleName = $LowRuleName.substring(0, 60) }
        $HighRuleName = "High Volume $Name"
        if ($HighRuleName.length -gt 60) { $HighRuleName = $HighRuleName.substring(0, 60) }
        $NewPolicyTemplateData = $NewPolicyTemplateData.Replace("<HighVolumeRuleName>", "$HighRuleName")
        $NewPolicyTemplateData = $NewPolicyTemplateData.Replace("<LowVolumeRuleName>", "$LowRuleName")
  
        $RemediationActionScript += $NewPolicyTemplateData
        Write-Host "$(Get-Date) Generating Remediation Action for $Name" -ForegroundColor Yellow 
    }
              
    Return $RemediationActionScript
}
Function Get-PolicySensitiveType {
    Param
    (
        $Config,
        $CompliancePolicy,
        $SensitiveTypes
    )
    $PolicySensitiveTypes = New-Object System.Collections.Generic.HashSet[String]          
    foreach ($ComplianceRule in $Config["GetDlpComplianceRule"]) {

        if ($ComplianceRule.Mode -ieq "enforce" -and $CompliancePolicy.name -eq $($ComplianceRule.ParentPolicyName) ) {
            $SensitiveInformationContent = $ComplianceRule.ContentContainsSensitiveInformation

            foreach ($SensitiveType in $($SensitiveTypes.keys)) {
                if ($SensitiveInformationContent.Values -contains $SensitiveType) {
                    if (!$PolicySensitiveTypes.Contains($SensitiveType)) {
                        $PolicySensitiveTypes.Add("$SensitiveType") |  Out-Null 

                    }

                }
                if ($($SensitiveInformationContent.keys) -contains "groups") {
                    foreach ($SensitiveInformationGroupList in $SensitiveInformationContent) {
                        $SensitiveInformationGroups = $SensitiveInformationGroupList["groups"]
                        foreach ($SensitiveInformationGroupDefined in $SensitiveInformationGroups) {
                            $SensitiveInformationGroupDefinedValues = $SensitiveInformationGroupDefined.Values 
                            foreach ($SensitiveInformationGroupValue in $SensitiveInformationGroupDefinedValues) {
                                foreach ($SensitiveInformationGroupVal in $SensitiveInformationGroupValue) {
                                    if ($SensitiveInformationGroupVal.Values -contains $SensitiveType ) {
                                        if (!$PolicySensitiveTypes.Contains($SensitiveType)) {
                                            $PolicySensitiveTypes.Add("$SensitiveType") |  Out-Null 

                                        }
                                    }
      
                                }
     
                            }
                        }
                    }
    
                }
            }
                            

                           
        }
    }

    Return $PolicySensitiveTypes
}

Function Get-SensitiveTypesNotEnabled {
    Param
    (
        $SensitiveTypesWorkloadMapping,
        $LogFile,
        $ConfigObjectList
    )   

     
    $PendingSensitiveType = $null
    $PartialCoveredSIT = $null
    $PartialCoveredWorkload = $null
    foreach ($SensitiveTypes in $SensitiveTypesWorkloadMapping) {
        if (($SensitiveTypes.$ExchangeString -eq $false ) -and ($SensitiveTypes.$SharePointString -eq $false ) -and 
            ($SensitiveTypes.$TeamsString -eq $false ) -and ($SensitiveTypes.$OneDriveString -eq $false ) -and ($SensitiveTypes.$DevicesString -eq $false ) ) {
            $PendingSensitiveType = Get-PartialSIT -PartialCoveredSIT $PendingSensitiveType -SensitiveTypesName $($SensitiveTypes.Name)

        }
        else {

            if ($SensitiveTypes.$ExchangeString -eq $false ) {
                $PartialCoveredSIT = Get-PartialSIT -PartialCoveredSIT $PartialCoveredSIT -SensitiveTypesName $($SensitiveTypes.Name)
                $PartialCoveredWorkload = Get-PartialSITWorkLoad -PartialCoveredWorkload $PartialCoveredWorkload -WorkloadName $ExchangeString
            }
    
            if ($SensitiveTypes.$SharePointString -eq $false ) {
                $PartialCoveredSIT = Get-PartialSIT -PartialCoveredSIT $PartialCoveredSIT -SensitiveTypesName $($SensitiveTypes.Name)
                $PartialCoveredWorkload = Get-PartialSITWorkLoad -PartialCoveredWorkload $PartialCoveredWorkload -WorkloadName $SharePointString
    
            } 
            if ($SensitiveTypes.$OneDriveString -eq $false ) {
                $PartialCoveredSIT = Get-PartialSIT -PartialCoveredSIT $PartialCoveredSIT -SensitiveTypesName $($SensitiveTypes.Name)
                $PartialCoveredWorkload = Get-PartialSITWorkLoad -PartialCoveredWorkload $PartialCoveredWorkload -WorkloadName $OneDriveString
            }
            if ($SensitiveTypes.$TeamsString -eq $false ) {
                $PartialCoveredSIT = Get-PartialSIT -PartialCoveredSIT $PartialCoveredSIT -SensitiveTypesName $($SensitiveTypes.Name)
                $PartialCoveredWorkload = Get-PartialSITWorkLoad -PartialCoveredWorkload $PartialCoveredWorkload -WorkloadName $TeamsString
            }
            if ($SensitiveTypes.$DevicesString -eq $false ) {
                $PartialCoveredSIT = Get-PartialSIT -PartialCoveredSIT $PartialCoveredSIT -SensitiveTypesName $($SensitiveTypes.Name)
                $PartialCoveredWorkload = Get-PartialSITWorkLoad -PartialCoveredWorkload $PartialCoveredWorkload -WorkloadName $DevicesString
            }
    
        }

        
     
        
    }
   

   
    if ($null -ne $PartialCoveredSIT) {
        $ConfigObject = [CAMPCheckConfig]::new()
        $ConfigObject.Object = "<B>Policy defined but not protected on 1 or more workloads<B>"
        $ConfigObject.ConfigItem = "$PartialCoveredSIT"
        $ConfigObject.ConfigData = "<b>Affected Workloads</B> : $PartialCoveredWorkload"
        $ConfigObject.SetResult([CAMPConfigLevel]::Ok, "Fail")            
        $ConfigObjectList += $ConfigObject
    }
    if ($null -ne $PendingSensitiveType) { 
                   
        $ConfigObject = [CAMPCheckConfig]::new()
        $ConfigObject.Object = "<B>No active policy defined<B>"
        $ConfigObject.ConfigItem = "$PendingSensitiveType"
        $ConfigObject.ConfigData = "<b>Affected Workloads</B> : $ExchangeString, $SharePointString, $TeamsString, $OneDriveString, $DevicesString"
        $ConfigObject.InfoText ="It is recommended that you set up DLP policies that block access for users external to your organization for all Sensitive Information Types on all workloads."
        try {
            $ConfigObject.RemediationAction = Get-NoPolicyRemediationAction -Name $Name -PendingSensitiveTypes $PendingSensitiveType -ErrorAction:SilentlyContinue        
        }
        catch {
            Write-Host "Warning:$(Get-Date) There was an issue in generating remediation script. Please review the script closely before running the same." -ForegroundColor:Yellow
            $ErrorMessage = $_.ToString()
            $StackTraceInfo = $_.ScriptStackTrace
            Write-Log -IsError -ErrorMessage $ErrorMessage -StackTraceInfo $StackTraceInfo -LogFile $LogFile -ErrorAction:SilentlyContinue
        }
        $ConfigObject.SetResult([CAMPConfigLevel]::Ok, "Fail")            
        $ConfigObjectList += $ConfigObject
    }
    
    Return $ConfigObjectList
}
function Get-PartialSIT {
    Param
    (
        $PartialCoveredSIT,
        $SensitiveTypesName

    )
    if ((@($PartialCoveredSIT) -like "*$SensitiveTypesName*").Count -le 0) { 
        if ($null -eq $PartialCoveredSIT) {
            $PartialCoveredSIT += "$SensitiveTypesName"
        
        }
        else {            
            $PartialCoveredSIT += ", $SensitiveTypesName" 
        } 
    }
    return $PartialCoveredSIT
}
function Get-PartialSITWorkLoad {
    Param
    (
        $PartialCoveredWorkload,
        $WorkloadName

    )
    if ((@($PartialCoveredWorkload) -like "*$WorkloadName*").Count -le 0) {
        if ($null -eq $PartialCoveredWorkload) {
            $PartialCoveredWorkload += $WorkloadName
            
        }
        else {            
            $PartialCoveredWorkload += ", $WorkloadName" 
        } 
    }
    return $PartialCoveredWorkload
}


Function Get-AllLocationenabled {
    Param
    (
        $CompliancePolicy
    )
    $ExchangeLocation = $CompliancePolicy.ExchangeLocation
    $SharePointLocation = $CompliancePolicy.SharePointLocation
    $OneDriveLocation = $CompliancePolicy.OneDriveLocation
    $TeamsLocation = $CompliancePolicy.TeamsLocation
    $EndpointDlpLocation = $CompliancePolicy.EndpointDlpLocation   
    $WorkloadsStatus = @{}
    $WorkloadsStatus[$ExchangeString] = $false
    $WorkloadsStatus[$SharePointString] = $false
    $WorkloadsStatus[$OneDriveString] = $false
    $WorkloadsStatus[$TeamsString] = $false
    $WorkloadsStatus[$DevicesString] = $false
    if ((@($ExchangeLocation) -like 'All').Count -gt 0) {
        $WorkloadsStatus[$ExchangeString] = $true
    }
    if ((@($SharePointLocation) -like 'All').Count -gt 0) {
        $WorkloadsStatus[$SharePointString] = $true
    }
    if ((@($OneDriveLocation) -like 'All').Count -gt 0) {
        $WorkloadsStatus[$OneDriveString] = $true
    }
    if ((@($TeamsLocation) -like 'All').Count -gt 0) {
        $WorkloadsStatus[$TeamsString] = $true
    }
    if ((@($EndpointDlpLocation) -like 'All').Count -gt 0) {
        $WorkloadsStatus[$DevicesString] = $true
    }

    Return $WorkloadsStatus

    
}


Function Set-ExchangeNotAllLocationEnabledConfigObject {
    Param
    (
        
        $ConfigObjectResult,
        $CompliancePolicy
    )

    $ExchangeLocation = $CompliancePolicy.ExchangeLocation
    $ExchangeSenderException = $CompliancePolicy.ExchangeSenderException
    $ExchangeSenderMemberOf = $CompliancePolicy.ExchangeSenderMemberOf
    $ExchangeSenderMemberOfException = $CompliancePolicy.ExchangeSenderMemberOfException

    if (((@($ExchangeLocation) -like 'All').Count -lt 1)) {          
        if (@($ExchangeLocation).count -ne 0) {
            
            $ConfigObjectResult["Included Exchange Groups"] += "$ExchangeLocation " 
                    
        }
    }

    if ($ExchangeSenderMemberOf.count -ne 0) {
    
        if ($ConfigObjectResult.contains("Included Exchange Groups")) {
            $ConfigObjectResult["Included Exchange Groups"] += ", $ExchangeSenderMemberOf " 
        }
        else {
            $ConfigObjectResult["Included Exchange Groups"] = "$ExchangeSenderMemberOf " 

        }

    }
    if (($ExchangeSenderMemberOfException.count -ne 0) -or ($ExchangeSenderException.count -ne 0) ) {
        
        $ConfigObjectResult["Excluded Exchange Groups"] += "$ExchangeSenderMemberOfException $ExchangeSenderException " 

    }
    Return $ConfigObjectResult
                               
}

function Set-SharePointNotAllLocationEnabledConfigObject {
    Param
    (
        $ConfigObjectResult,
        $CompliancePolicy
     
    )
    $SharePointLocation = $CompliancePolicy.SharePointLocation
    $SharePointLocationException = $CompliancePolicy.SharePointLocationException
    $SharePointOnPremisesLocationException = $CompliancePolicy.SharePointOnPremisesLocationException

    if (((@($SharePointLocation) -like 'All').Count -lt 1)) {  
        if (@($SharePointLocation).count -ne 0) {
            
            $ConfigObjectResult["Included SP Sites"] += "$SharePointLocation " 
        }
    }
    
    if (($SharePointLocationException.count -ne 0) -or ($SharePointOnPremisesLocationException.count -ne 0)) { 
        
        $ConfigObjectResult["Excluded SP Sites"] += "$SharePointLocationException $SharePointOnPremisesLocationException " 
    }
    
    Return $ConfigObjectResult
                               
}

function Set-TeamsNotAllLocationEnabledConfigObject { 
    Param
    (
        $ConfigObjectResult,
        $CompliancePolicy
    )

    $TeamsLocation = $CompliancePolicy.TeamsLocation
    $TeamsLocationException = $CompliancePolicy.TeamsLocationException
   
    if (((@($TeamsLocation) -like 'All').Count -lt 1)) {  
        if (@($TeamsLocation).count -ne 0) {
            
            $ConfigObjectResult["Included Teams Account"] += "$TeamsLocation" 
        }
    }
   
    if (($TeamsLocationException.count -ne 0)) {
        
        $ConfigObjectResult["Excluded Teams Account"] += "$TeamsLocationException" 
    }
    Return $ConfigObjectResult
                               
}
function Set-OneDriveNotAllLocationEnabledConfigObject {
    Param
    (
        $ConfigObject,
        $PolicySensitiveType,
        $CompliancePolicy
        
    )
    $OneDriveLocation = $CompliancePolicy.OneDriveLocation
    $OneDriveLocationException = $CompliancePolicy.OneDriveLocationException
    $ExceptIfOneDriveSharedByMemberOf = $CompliancePolicy.ExceptIfOneDriveSharedByMemberOf

    if (((@($OneDriveLocation) -like 'All').Count -lt 1)) {  
        if (@($OneDriveLocation).count -ne 0) {
            
            $ConfigObjectResult["Included OneDrive Account"] += "$OneDriveLocation" 
        }

    }
 
    if (($OneDriveLocationException.count -ne 0) -or ($ExceptIfOneDriveSharedByMemberOf.count -ne 0)) {
        
        $ConfigObjectResult["Excluded OneDrive Account"] += "$OneDriveLocationException $ExceptIfOneDriveSharedByMemberOf" 
        
    }
    Return $ConfigObjectResult
                               
}
function Set-DevicesNotAllLocationEnabledConfigObject {
    Param
    (
        $ConfigObject,
        $PolicySensitiveType,
        $CompliancePolicy
        
    )
    $EndpointDlpLocation = $CompliancePolicy.EndpointDlpLocation
    $EndpointDlpLocationException = $CompliancePolicy.EndpointDlpLocationException

    if (((@($EndpointDlpLocation) -like 'All').Count -lt 1)) {  
        if (@($EndpointDlpLocation).count -ne 0) {
            
            $ConfigObjectResult["Included Devices User/Groups"] += "$EndpointDlpLocation" 
        }

    }
 
    if (($EndpointDlpLocationException.count -ne 0)) {
        
        $ConfigObjectResult["Excluded Devices User/Groups"] += "$EndpointDlpLocationException" 
        
    }
    Return $ConfigObjectResult
                               
}
# SIG # Begin signature block
# MIIlygYJKoZIhvcNAQcCoIIluzCCJbcCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCC1UJ0X7GbeTG63
# 8z5lcowa1rZlYPf8mlQaEpvPdKW5RKCCC5YwggT7MIID46ADAgECAhMzAAAE4qOH
# mdFtQCqWAAEAAATiMA0GCSqGSIb3DQEBCwUAMHkxCzAJBgNVBAYTAlVTMRMwEQYD
# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
# b3NvZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jvc29mdCBUZXN0aW5nIFBD
# QSAyMDEwMB4XDTIxMDkwMjE5MjYyN1oXDTIyMDkwMTE5MjYyN1owfDELMAkGA1UE
# BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc
# BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdQ29kZSBTaWdu
# IFRlc3QgKERPIE5PVCBUUlVTVCkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
# AoIBAQC08O5FqM6i91zE1YIK4epCwArU+0xTEScHJ0Vfy32sK+Xf3dM/vHm1iLfc
# 7hhDNwVxfHvaHgjNYC2Qr2cff4F40aShGrc6xyIdmcSiygICYGQrF7FWKQ4thEdX
# HuAMiuVYZQ9Jo+vxOXRJTSa3zsFFrbkCOgun7Vu9UeFxOQT1ByNomsxky0gCRu+P
# YdaqnbOyxNsnCDaGUUHp+D1EpBv4Cdrgy9o359Z4nFUyUm4MVMjpG6jC2n8dPonw
# hAcbjIvyJzA1v88jVCMfDrHt0AkIHN69J4wahtOrJeERgXjklilV0hMRwkVkfpnJ
# 18aw7NqWsDi4ekmBd2EL6d+HljzNAgMBAAGjggF3MIIBczATBgNVHSUEDDAKBggr
# BgEFBQcDAzAdBgNVHQ4EFgQUCekP9tRzR3NLSbCNG+oPPWd/nuYwRQYDVR0RBD4w
# PKQ6MDgxHjAcBgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEWMBQGA1UEBRMN
# MjMwMDcyKzQ2NzYwNTAfBgNVHSMEGDAWgBS/ZaKrb3WjTkWWVwXPOYf0wBUcHDBc
# BgNVHR8EVTBTMFGgT6BNhktodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3Bz
# L2NybC9NaWNyb3NvZnQlMjBUZXN0aW5nJTIwUENBJTIwMjAxMCgxKS5jcmwwaQYI
# KwYBBQUHAQEEXTBbMFkGCCsGAQUFBzAChk1odHRwOi8vd3d3Lm1pY3Jvc29mdC5j
# b20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRlc3RpbmclMjBQQ0ElMjAyMDEw
# KDEpLmNydDAMBgNVHRMBAf8EAjAAMA0GCSqGSIb3DQEBCwUAA4IBAQCTxe9mJYSi
# GUIIw4imC+gePdQLAeeMTTa8Uwa406/66Su7fVZTGNFMpLwofA1WfxvAX4+5+U+J
# aFJod4KyAdUngWtPlyPmkR0kXQ6mTxvqMFEih/s0mRyW6dHMHrCezmY//89C5zau
# E3LBcI4gqAQ2ZabPxj2+j6+Er8StKv07PigCuM4M16DIQUAY6kNgnate4WoiiQSu
# mXhMiwtUh6jgSnTpOqpNfXk+YJxNoqHH8qqyW7FcQ88jyoxM4LYdAQVN3eYD7eJn
# xfW2nWIbDRaZpBkv9N1t8yObWcyC/YrRLuq3QLqpll20Y1eFsm+gypEoiERqpPUT
# 3p7K5897ABKoMIIGkzCCBHugAwIBAgITMwAAAC01ekaIyQdx2AAAAAAALTANBgkq
# hkiG9w0BAQsFADCBkDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
# EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
# bjE6MDgGA1UEAxMxTWljcm9zb2Z0IFRlc3RpbmcgUm9vdCBDZXJ0aWZpY2F0ZSBB
# dXRob3JpdHkgMjAxMDAeFw0yMDEyMTAyMDQzMjBaFw0zNTA2MTcyMTA0MTFaMHkx
# CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt
# b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1p
# Y3Jvc29mdCBUZXN0aW5nIFBDQSAyMDEwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
# MIIBCgKCAQEAvzxggau+7P/XF2PypkLRE2KcsBfOukYaeyIuVXOaVLnG1NHKmP53
# Rw2OnfBezPhU7/LPKtRi8ak0CgTXxQWG8hD1TdOWCGaF2wJ9GNzieiOnmildrnkY
# zwxj8Br/gampQz+pC7lR8bNIOvxELl8RxVY6/8oOzYgIwf3H1fU+7+pOG3KLI71F
# N54fcMGnybggc+3zbD2LIQXPdxL+odwH6Q1beAlsMlUQR9A3yMf3+nP+RjTkVhao
# N2RT1jX7w4C2jraGkaEQ1sFK9uN61BEKst4unhCX4IGuEl2IAV3MpMQoUpxg8Arm
# iK9L6VeK7KMPNx4p9l0h09faXQ7JTtuNbQIDAQABo4IB+jCCAfYwDgYDVR0PAQH/
# BAQDAgGGMBIGCSsGAQQBgjcVAQQFAgMBAAEwIwYJKwYBBAGCNxUCBBYEFOqfXzO2
# 0F+erestpsECu0A4y+e1MB0GA1UdDgQWBBS/ZaKrb3WjTkWWVwXPOYf0wBUcHDBU
# BgNVHSAETTBLMEkGBFUdIAAwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNy
# b3NvZnQuY29tL3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMBkGCSsGAQQBgjcU
# AgQMHgoAUwB1AGIAQwBBMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUowEE
# fjCIM+u5MZzK64V2Z/xltNEwWQYDVR0fBFIwUDBOoEygSoZIaHR0cDovL2NybC5t
# aWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWljVGVzUm9vQ2VyQXV0XzIw
# MTAtMDYtMTcuY3JsMIGNBggrBgEFBQcBAQSBgDB+ME0GCCsGAQUFBzAChkFodHRw
# Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Rlc1Jvb0NlckF1dF8y
# MDEwLTA2LTE3LmNydDAtBggrBgEFBQcwAYYhaHR0cDovL29uZW9jc3AubWljcm9z
# b2Z0LmNvbS9vY3NwMA0GCSqGSIb3DQEBCwUAA4ICAQAntNCFsp7MD6QqU3PVbdrX
# MQDI9v9jyPYBEbUYktrctPmvJuj8Snm9wWewiAN5Zc81NQVYjuKDBpb1un4SWVCb
# 4PDVPZ0J87tGzYe9dOJ30EYGeiIaaStkLLmLOYAM6oInIqIwVyIk2SE/q2lGt8Ov
# wcZevNmPkVYjk6nyJi5EdvS6ciPRmW9bRWRT4pWU8bZIQL938LE4lHOQAixrAQiW
# es5Szp2U85E0nLdaDr5w/I28J/Z1+4zW1Nao1prVCOqrosnoNUfVf1kvswfW3FY2
# l1PiAYp8sGyO57GaztXdBoEOBcDLedfcPra9+NLdEF36NkE0g+9dbokFY7KxhUJ8
# WpMiCmN4yj9LKFLvQbctGMJJY9EwHFifm2pgaiaafKF1Gyz+NruJzEEgpysMo/f9
# AVBQ/qCdPQQGEWp3QDIaef4ts9QTx+RmDKCBDMTFLgFmmhbtUY0JWjLkKn7soz/L
# IcDUle/p5TiFD4VhfZnAcvYQHXfuslnyp+yuhWzASnAQNnOIO6fc1JFIwkDkcM+k
# /TspfAajzHooSAwXkrOWrjRDV6wI0YzMVHrEyQ0hZ5NnIXbL3lrTkOPjf3NBu1na
# SNEaySduStDbFVjV3TXoENEnZiugJKYSwmhzoYHM1ngipN5rNdqJiK5ukp6E8LDz
# i3l5/7XctJQY3+ZgHDJosjGCGYowghmGAgEBMIGQMHkxCzAJBgNVBAYTAlVTMRMw
# EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
# aWNyb3NvZnQgQ29ycG9yYXRpb24xIzAhBgNVBAMTGk1pY3Jvc29mdCBUZXN0aW5n
# IFBDQSAyMDEwAhMzAAAE4qOHmdFtQCqWAAEAAATiMA0GCWCGSAFlAwQCAQUAoIGu
# MBkGCSqGSIb3DQEJAzEMBgorBgEEAYI3AgEEMBwGCisGAQQBgjcCAQsxDjAMBgor
# BgEEAYI3AgEVMC8GCSqGSIb3DQEJBDEiBCA12SZzsiXp7IJkqjK0cj4YFDqPwZgl
# XZJoaa5qS2JgCjBCBgorBgEEAYI3AgEMMTQwMqAUgBIATQBpAGMAcgBvAHMAbwBm
# AHShGoAYaHR0cDovL3d3dy5taWNyb3NvZnQuY29tMA0GCSqGSIb3DQEBAQUABIIB
# ACekDfWxgKCQ5cGrg81ZoZpE6C2tHkOlW1v04xEjhMdkpN2fclms0LmPrRkzPstg
# 3g4IgHboOCMWbVyFPBvDLkk874kjn+51R2jcrdTUFxArw29SAhavKJ3ADgOlzdRJ
# qrQ3refw/X7BiVnqeIugZUZ4Lih3y1CG8AtW/Ts6JnRb1bGA4KqTinNRE+z2krsd
# YS5+Eo+OX5ezUY+fYYn2LNBiEczYrtzlO7J5AcO7dHKKsvJo9kROjXSvTb1uHBTh
# UO4Q9q2T356bh88HFRrfyrkSHbk8AGhJgc4Ms75Aeuf4lf3FR/iVbVuRsFYc2VU6
# NkLTWstioIMMXdBKdjwA5wmhghcZMIIXFQYKKwYBBAGCNwMDATGCFwUwghcBBgkq
# hkiG9w0BBwKgghbyMIIW7gIBAzEPMA0GCWCGSAFlAwQCAQUAMIIBWQYLKoZIhvcN
# AQkQAQSgggFIBIIBRDCCAUACAQEGCisGAQQBhFkKAwEwMTANBglghkgBZQMEAgEF
# AAQgD4vc/m5mrXmA8p9CccXUE0RGK6MA9+XG7cgFouGc0q0CBmKeAn6EURgTMjAy
# MjA2MTAwNDExMzYuMTI1WjAEgAIB9KCB2KSB1TCB0jELMAkGA1UEBhMCVVMxEzAR
# BgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1p
# Y3Jvc29mdCBDb3Jwb3JhdGlvbjEtMCsGA1UECxMkTWljcm9zb2Z0IElyZWxhbmQg
# T3BlcmF0aW9ucyBMaW1pdGVkMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjpBMjQw
# LTRCODItMTMwRTElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgU2Vydmlj
# ZaCCEWgwggcUMIIE/KADAgECAhMzAAABjXpVLnh0mSq3AAEAAAGNMA0GCSqGSIb3
# DQEBCwUAMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYD
# VQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAk
# BgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMB4XDTIxMTAyODE5
# Mjc0NVoXDTIzMDEyNjE5Mjc0NVowgdIxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpX
# YXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg
# Q29ycG9yYXRpb24xLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJhdGlv
# bnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVzIFRTUyBFU046QTI0MC00QjgyLTEz
# MEUxJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2UwggIiMA0G
# CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDaNEgtmD47pTt0ty7AE8wH7S0lTPTA
# cuonl/soldCxPNZOgANQxhXjFVmen2Y9NaiNQn+Xc7hep6AsM124UA5tyK2svJjk
# cOzEB9QbX/ZiKVxKRI/oJwypZ+xLBQsZfnOWxUocnu2/CDbrLp4uSVR0UymKrb3h
# Pi4lB1d3k7uYXLS9WRoY8bE1YttnEo3Ooq0WdZDuMy1nTle9p+QhZms1MW/wYakC
# Ue1GxnUDwoOjogNIZU1lldtCz587Aw4an8HOh3x/VgjwZvag3+bHZxy90av2Vrnl
# Bl5Wwzst9NoQ9DFuABwuBYOUg9yZPNwGSwTMs5CxKkHOyo9pYj3KRXDmh+auQUox
# ulBPkQySLay4mhUznEaB1lae3+3PTTG5s9IoWLgHggwVQH2ZwA1Sr1wdouwdsMn4
# BSxU7SqdWPDNc9gl5HsL8HxfRSXpSQh2mVmadxBlIErfJlDL6gay4kpcUCrcGXFP
# qQO6Fhi87uK0us95jSSe63WsqTGib66Lq8J22EJ+cCLKSfJELaWSerPPzHWYORDl
# Do7H2nr+V24W6lIky2CwI8318i+t+mkwMUi9GhQuwc50smOtGWLxyjkz69mZ/bSh
# PFi5fMzS1tG6sQnJwHlkxvDOewUfKY6SDLHw54WddXdxqvjm56MjUHWKpQNt5I3G
# e9zO46FynPBpyQIDAQABo4IBNjCCATIwHQYDVR0OBBYEFHjMkW6Hn0bClO5KO7hJ
# Nx+WKGaTMB8GA1UdIwQYMBaAFJ+nFV0AXmJdg/Tl0mWnG1M1GelyMF8GA1UdHwRY
# MFYwVKBSoFCGTmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01p
# Y3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNybDBsBggrBgEF
# BQcBAQRgMF4wXAYIKwYBBQUHMAKGUGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9w
# a2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVGltZS1TdGFtcCUyMFBDQSUyMDIwMTAo
# MSkuY3J0MAwGA1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwgwDQYJKoZI
# hvcNAQELBQADggIBADWvc7PSUSrdW+l0WWHdgHFziGdiQAvJg8Nr0U7heCrCQGbw
# uxv6Ure1sYaCmLpAlsreIzcErQ5sFzBFolULEYsa2vonP2FG6ZHIXyjifbLdiIq/
# iiUHE2MVKFIZz0Tb0mZWMGYuCZ+NGo9z/asPbmrijDi4Detz16SJq5+AaFxIB16T
# +X6QBJvOiE63/nPb4iWBPh7dq5JTO3YYAp8pkHTZkMZYop4JjekQuPW26HrJ+s4k
# 88ic7hlktbe+Apq+0vx7oUlnImgMUx7Ann2gQv4Ard7YzYjggUT2fotVLxtL1Rsx
# Qy+sCVc3lkzYjwZ0cH1Nt8jXtab/1R/iq7nzw8k3u8ImP2z4rFmpdzmwZJwuCqI+
# ohts1MT78ARn95OLFz1guBPIypqRkjn3AaqOs41BJju7RUQOQQTqKTP4VIVEorOn
# JJvRZOAy9bGwu9uc3wAKYhI+cEdhmgayw8Avt+gYYoUt0AFNALY9fX1aOt/KuyEd
# 2KpKUKymogYFPFFoe3I8yujcH/bqA98KXcwLesLc0arjEacgcNkZKLNSYaDxORAC
# WhV1Tl0nW/3XSCPFrFpStoaE/wi20TRFadTldGn+wZo2YNwzBvIe5KloWyfdDbU7
# OK0/gGc3m2msdqeAALuOh7jOYueZGcCJRz2xGpDZuawwC9Smw7yeU4WaIzUvMIIH
# cTCCBVmgAwIBAgITMwAAABXF52ueAptJmQAAAAAAFTANBgkqhkiG9w0BAQsFADCB
# iDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl
# ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMp
# TWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IDIwMTAwHhcNMjEw
# OTMwMTgyMjI1WhcNMzAwOTMwMTgzMjI1WjB8MQswCQYDVQQGEwJVUzETMBEGA1UE
# CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z
# b2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQ
# Q0EgMjAxMDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOThpkzntHIh
# C3miy9ckeb0O1YLT/e6cBwfSqWxOdcjKNVf2AX9sSuDivbk+F2Az/1xPx2b3lVNx
# WuJ+Slr+uDZnhUYjDLWNE893MsAQGOhgfWpSg0S3po5GawcU88V29YZQ3MFEyHFc
# UTE3oAo4bo3t1w/YJlN8OWECesSq/XJprx2rrPY2vjUmZNqYO7oaezOtgFt+jBAc
# nVL+tuhiJdxqD89d9P6OU8/W7IVWTe/dvI2k45GPsjksUZzpcGkNyjYtcI4xyDUo
# veO0hyTD4MmPfrVUj9z6BVWYbWg7mka97aSueik3rMvrg0XnRm7KMtXAhjBcTyzi
# YrLNueKNiOSWrAFKu75xqRdbZ2De+JKRHh09/SDPc31BmkZ1zcRfNN0Sidb9pSB9
# fvzZnkXftnIv231fgLrbqn427DZM9ituqBJR6L8FA6PRc6ZNN3SUHDSCD/AQ8rdH
# GO2n6Jl8P0zbr17C89XYcz1DTsEzOUyOArxCaC4Q6oRRRuLRvWoYWmEBc8pnol7X
# KHYC4jMYctenIPDC+hIK12NvDMk2ZItboKaDIV1fMHSRlJTYuVD5C4lh8zYGNRiE
# R9vcG9H9stQcxWv2XFJRXRLbJbqvUAV6bMURHXLvjflSxIUXk8A8FdsaN8cIFRg/
# eKtFtvUeh17aj54WcmnGrnu3tz5q4i6tAgMBAAGjggHdMIIB2TASBgkrBgEEAYI3
# FQEEBQIDAQABMCMGCSsGAQQBgjcVAgQWBBQqp1L+ZMSavoKRPEY1Kc8Q/y8E7jAd
# BgNVHQ4EFgQUn6cVXQBeYl2D9OXSZacbUzUZ6XIwXAYDVR0gBFUwUzBRBgwrBgEE
# AYI3TIN9AQEwQTA/BggrBgEFBQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
# L3BraW9wcy9Eb2NzL1JlcG9zaXRvcnkuaHRtMBMGA1UdJQQMMAoGCCsGAQUFBwMI
# MBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1UdDwQEAwIBhjAPBgNVHRMB
# Af8EBTADAQH/MB8GA1UdIwQYMBaAFNX2VsuP6KJcYmjRPZSQW9fOmhjEMFYGA1Ud
# HwRPME0wS6BJoEeGRWh0dHA6Ly9jcmwubWljcm9zb2Z0LmNvbS9wa2kvY3JsL3By
# b2R1Y3RzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNybDBaBggrBgEFBQcBAQRO
# MEwwSgYIKwYBBQUHMAKGPmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2kvY2Vy
# dHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3J0MA0GCSqGSIb3DQEBCwUAA4IC
# AQCdVX38Kq3hLB9nATEkW+Geckv8qW/qXBS2Pk5HZHixBpOXPTEztTnXwnE2P9pk
# bHzQdTltuw8x5MKP+2zRoZQYIu7pZmc6U03dmLq2HnjYNi6cqYJWAAOwBb6J6Gng
# ugnue99qb74py27YP0h1AdkY3m2CDPVtI1TkeFN1JFe53Z/zjj3G82jfZfakVqr3
# lbYoVSfQJL1AoL8ZthISEV09J+BAljis9/kpicO8F7BUhUKz/AyeixmJ5/ALaoHC
# gRlCGVJ1ijbCHcNhcy4sa3tuPywJeBTpkbKpW99Jo3QMvOyRgNI95ko+ZjtPu4b6
# MhrZlvSP9pEB9s7GdP32THJvEKt1MMU0sHrYUP4KWN1APMdUbZ1jdEgssU5HLcEU
# BHG/ZPkkvnNtyo4JvbMBV0lUZNlz138eW0QBjloZkWsNn6Qo3GcZKCS6OEuabvsh
# VGtqRRFHqfG3rsjoiV5PndLQTHa1V1QJsWkBRH58oWFsc/4Ku+xBZj1p/cvBQUl+
# fpO+y/g75LcVv7TOPqUxUYS8vwLBgqJ7Fx0ViY1w/ue10CgaiQuPNtq6TPmb/wrp
# NPgkNWcr4A245oyZ1uEi6vAnQj0llOZ0dFtq0Z4+7X6gMTN9vMvpe784cETRkPHI
# qzqKOghif9lwY1NNje6CbaUFEMFxBmoQtB1VM1izoXBm8qGCAtcwggJAAgEBMIIB
# AKGB2KSB1TCB0jELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAO
# BgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEt
# MCsGA1UECxMkTWljcm9zb2Z0IElyZWxhbmQgT3BlcmF0aW9ucyBMaW1pdGVkMSYw
# JAYDVQQLEx1UaGFsZXMgVFNTIEVTTjpBMjQwLTRCODItMTMwRTElMCMGA1UEAxMc
# TWljcm9zb2Z0IFRpbWUtU3RhbXAgU2VydmljZaIjCgEBMAcGBSsOAwIaAxUAgHOV
# kz1NE0Pg+C2ktZBmRI9hVwmggYMwgYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UE
# CBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9z
# b2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQ
# Q0EgMjAxMDANBgkqhkiG9w0BAQUFAAIFAOZNHhYwIhgPMjAyMjA2MTAwOTM0MTRa
# GA8yMDIyMDYxMTA5MzQxNFowdzA9BgorBgEEAYRZCgQBMS8wLTAKAgUA5k0eFgIB
# ADAKAgEAAgIdVwIB/zAHAgEAAgIRzTAKAgUA5k5vlgIBADA2BgorBgEEAYRZCgQC
# MSgwJjAMBgorBgEEAYRZCgMCoAowCAIBAAIDB6EgoQowCAIBAAIDAYagMA0GCSqG
# SIb3DQEBBQUAA4GBAGiKOoSIHojLow6Kkkk/r8LP2tciPzd5Fcn59o9TzAHigCqU
# X0CLxuNOhMw4d1cTQ1Hg8fCGoQeJbp/bo3xnxexQfLG9VtVchL/SniDTItMMoE/T
# eeel3JS/b1VrDVlVCtFI9rsAkF8wm17k/QUiT7/cVfGyBqeKBwLahSEL89O4MYIE
# DTCCBAkCAQEwgZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
# EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
# bjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTACEzMAAAGN
# elUueHSZKrcAAQAAAY0wDQYJYIZIAWUDBAIBBQCgggFKMBoGCSqGSIb3DQEJAzEN
# BgsqhkiG9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQgV2bnplSHGMFPUHFrk0Wlfkdz
# oJL+7cJ82xWNo6/JkEAwgfoGCyqGSIb3DQEJEAIvMYHqMIHnMIHkMIG9BCCelhEz
# +h1eQMCfN/a50vnr1bxx8ZODBW56dDy20hjNfzCBmDCBgKR+MHwxCzAJBgNVBAYT
# AlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYD
# VQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBU
# aW1lLVN0YW1wIFBDQSAyMDEwAhMzAAABjXpVLnh0mSq3AAEAAAGNMCIEILN626OK
# Bt4JaSLIIVTruoAzcAN6skUU95hFTq72KiiCMA0GCSqGSIb3DQEBCwUABIICAD74
# qibLjZ7Cpe90gK5KrxLVArN4A7jfKRjQE45kMHolSBkmEPT27MGIZ6hzRXoO83J9
# CQ298JHgGn2OJvj5kIqC0/z/w6L1eLrOs9gBC/aOQANBTbVVi6RGTM4yVl4D4r3w
# Z86QY/cMoApNdU73Kh5bVKb0QkoxyOXoIZ88PDsdpVfexAnY1v3SXOIvNx4tZTQK
# Yc8fV0rTTqkBLVMNietS/W0qXIxtiKSzrRE32Q4pYCHadl0zOJrFdXMS1L/MKDl9
# JK548L84yunFIGGob/XNSmIKZ/kZ7rt82eSWtpKkHEGkHZMjggdOuh74vFbU2y5v
# iRzy5aXSpj4kBocc7SzAGpMyJDh6y0KLBpbE3L5xrFcAzkDeus6587+v2pZw/1m4
# wAQxo1b3+Wiwk9+/9mM77pBfMfHIzHubBufTQdD6eHGf9FjGV99I99AfCd3WH6Rz
# 8HbHkCQspek2NmpXL3/qqcdqBYJai8tzsCtwvBluFvhvE/fT4AhZIbwSKqjbXSgM
# xFkQR/bi6i6EV6hnj75Kw9g1WPK52hhDkqbjs3wkWAyrdp4Ae9+d98pDmaV5T8Bv
# YZ0AVWFY8l202qtqH/dsHLAJKh6rZvbdRyuSnHsnmx6GFpfIHAwEX1A0uqxmHL5Y
# Twxdjg70NUdOwf/48hhdGxaF9EmzsRZBmXPHsxNn
# SIG # End signature block