private/Add-MBSCBBType.ps1

add-type -typedef @"
using System;
using System.Security;
using System.Net;
using System.Collections.Generic;
 
namespace MBS.Agent.Plan
{
    public abstract class BackupPlan {
        public string Name;
        public string ID;
        public string StorageAccount;
        public MBS.Agent.Plan.BackupPlanCommonOption BackupPlanCommonOption;
        public MBS.Agent.Plan.Schedule Schedule;
    }
 
    public abstract class NBFBackupPlan {
        public string Name;
        public string ID;
        public MBS.Agent.StorageAccount StorageAccount;
        public MBS.Agent.Plan.NBFBackupPlanCommonOption BackupPlanCommonOption;
        public MBS.Agent.Plan.NBFIncrementalSchedule Schedule;
        public MBS.Agent.Plan.NBFFullSchedule ForceFullSchedule;
    }
 
    public class BackupPlanCommonOption {
        public bool SyncRepositoryBeforeRun;
        public bool UseServerSideEncryption;
        public MBS.Agent.Plan.EncryptionAlgorithm EncryptionAlgorithm;
        public SecureString EncryptionPassword;
        public bool UseCompression;
        public MBS.Agent.Plan.StorageClass StorageClass;
        public bool SaveBackupPlanConfiguration;
        public TimeSpan StopIfPlanRunsFor;
        public bool RunMissedPlanImmediately;
        public string PreActionCommand;
        public Nullable<bool> PreActionContinueAnyway;
        public string PostActionCommand;
        public Nullable<bool> PostActionRunAnyway;
        public MBS.Agent.Plan.Notification ResultEmailNotification;
        public MBS.Agent.Plan.Notification AddEventToWindowsLog;
        public Nullable<TimeSpan> KeepVersionPeriod;
        public Nullable<int> KeepNumberOfVersion;
        public bool KeepLastVersion;
        public Nullable<TimeSpan> DelayPurgePeriod;
    }
 
    public class NBFBackupPlanCommonOption {
        public bool SyncRepositoryBeforeRun;
        public bool UseServerSideEncryption;
        public MBS.Agent.Plan.EncryptionAlgorithm EncryptionAlgorithm;
        public SecureString EncryptionPassword;
        public bool UseCompression;
        public MBS.Agent.Plan.StorageClass StorageClass;
        public bool FullConsistencyCheck;
        public TimeSpan StopIfPlanRunsFor;
        public bool RunMissedPlanImmediately;
        public string PreActionCommand;
        public Nullable<bool> PreActionContinueAnyway;
        public string PostActionCommand;
        public Nullable<bool> PostActionRunAnyway;
        public MBS.Agent.Plan.Notification ResultEmailNotification;
        public MBS.Agent.Plan.Notification AddEventToWindowsLog;
        public Nullable<TimeSpan> KeepVersionPeriod;
        public int GFSKeepWeekly;
        public int GFSKeepMonthly;
        public int GFSKeepYearly;
        public MBS.Agent.Plan.Month GFSMonthOfTheYear;
    }
 
    public class FileLevelBackupPlan : BackupPlan{
        public MBS.Agent.Plan.Schedule ForceFullSchedule;
        public bool UseBlockLevelBackup;
        public bool UseFastNTFSScan;
        public bool BackupNTFSPermissions;
        public bool ForceUsingVSS;
        public bool UseShareReadWriteModeOnError;
        public string DeleteLocallyDeletedFilesAfter;
        public bool BackupEmptyFolders;
        public string BackupOnlyAfter;
        public bool ExcludeSystemHiddenFiles;
        public string SkipFolder;
        public string IncludeFilesMask;
        public string ExcludeFilesMask;
        public bool IgnoreErrorPathNotFound;
        public bool TrackDeletedFiles;
        public System.Collections.Generic.List<string> BackupFile;
        public System.Collections.Generic.List<string> BackupDirectory;
        public System.Collections.Generic.List<string> ExcludeFile;
        public System.Collections.Generic.List<string> ExcludeDirectory;
        public bool GenerateDetailedReport;
    }
 
    public class NBFFileLevelBackupPlan : NBFBackupPlan{
        public bool BackupNTFSPermissions;
        public bool FastNTFSScan;
        public bool ForceUsingVSS;
        public bool UseShareReadWriteModeOnError;
        public bool BackupEmptyFolders;
        public string BackupOnlyAfter;
        public bool ExcludeSystemHiddenFiles;
        public System.Collections.Generic.List<string> SkipFolder;
        public System.Collections.Generic.List<string> IncludeFilesMask;
        public System.Collections.Generic.List<string> ExcludeFilesMask;
        public bool IgnoreErrorPathNotFound;
        public System.Collections.Generic.List<string> BackupItem;
        public System.Collections.Generic.List<string> ExcludeItem;
        public bool GenerateDetailedReport;
    }
 
    public class ImageBasedBackupPlan : BackupPlan {
        public MBS.Agent.Plan.Schedule ForceFullSchedule;
        public string BackupVolumes;
        public string[] Volumes;
        public bool disableVSS;
        public bool ignoreBadSectors;
        public bool useSystemVSS;
        public bool useSyntheticFull;
        public int prefetchBlockCount;
        public string blockSize;
        public string[] ExcludeItem;
        public bool KeepBitLocker;
        public string[] KeepBitLockerEnableForVolume;
        public string[] KeepBitLockerDisableForVolume;
    }
 
    public class NBFImageBasedBackupPlan : NBFBackupPlan {
        public MBS.Agent.Plan.BackupVolumeType BackupVolumes;
        public System.Collections.Generic.List<MBS.Agent.IBBVolume> Volumes;
        public bool DisableVSS;
        public bool IgnoreBadSectors;
        public bool UseSystemVSS;
        public Nullable<int> PrefetchBlockCount;
        public MBS.Agent.Plan.BlockSize BlockSize;
        public System.Collections.Generic.List<string> ExcludeItem;
        public bool KeepBitLocker;
        public System.Collections.Generic.List<string> KeepBitLockerEnableForVolume;
        public System.Collections.Generic.List<string> KeepBitLockerDisableForVolume;
        public MBS.Agent.Plan.RestoreVerificationMode RestoreVerificationMode;
    }
 
    public class NBFImageBasedBackupPlanCBB : NBFBackupPlan {
        public MBS.Agent.Plan.BackupVolumeType BackupVolumes;
        public System.Collections.Generic.List<MBS.Agent.IBBVolumeCBB> Volumes;
        public bool DisableVSS;
        public bool IgnoreBadSectors;
        public bool UseSystemVSS;
        public Nullable<int> PrefetchBlockCount;
        public MBS.Agent.Plan.BlockSize BlockSize;
        public MBS.Agent.Plan.RestoreVerificationMode RestoreVerificationMode;
    }
 
    public class HyperVBackupPlan : BackupPlan {
        public MBS.Agent.Plan.Schedule ForceFullSchedule;
        public string BackupVM;
        public string[] VirtualMachine;
    }
 
    public class MSSQLBackupPlan : BackupPlan {
        public MBS.Agent.Plan.Schedule DiffSchedule;
        public MBS.Agent.Plan.Schedule TLogSchedule;
        public string InstanceName;
        public bool useSSL;
        public bool useWinauth;
        public string UserName;
        public string Password;
        public string DBSelectionType;
        public string[] Databases;
        public bool CopyOnly;
        public bool Verify;
    }
 
    public class Schedule {
        public MBS.Agent.Plan.ScheduleFrequency Frequency;
        public Nullable<DateTime> At;
        public int DayOfMonth;
        public System.DayOfWeek[] DayOfWeek;
        public Nullable<MBS.Agent.Plan.WeekNumber> WeekNumber;
        public TimeSpan OccursFrom;
        public TimeSpan OccursTo;
        public TimeSpan OccursEvery;
        public int RepeatInterval;
        public DateTime RepeatStartDate;
    }
 
    public class NBFIncrementalSchedule {
        public MBS.Agent.Plan.NBFScheduleFrequency Frequency;
        public Nullable<DateTime> At;
        public int DayOfMonth;
        public System.DayOfWeek[] DayOfWeek;
        public Nullable<MBS.Agent.Plan.WeekNumber> WeekNumber;
        public TimeSpan OccursFrom;
        public TimeSpan OccursTo;
        public TimeSpan OccursEvery;
    }
 
    public class NBFFullSchedule {
        public MBS.Agent.Plan.NBFScheduleFrequency Frequency;
        public int DayOfMonth;
        public System.DayOfWeek[] DayOfWeek;
        public Nullable<MBS.Agent.Plan.WeekNumber> WeekNumber;
    }
 
    public class RestorePlanCommonOption {
        public bool SyncRepositoryBeforeRun;
        public SecureString EncryptionPassword;
        public TimeSpan StopIfPlanRunsFor;
        public string PreActionCommand;
        public Nullable<bool> PreActionContinueAnyway;
        public string PostActionCommand;
        public Nullable<bool> PostActionRunAnyway;
        public MBS.Agent.Plan.Notification ResultEmailNotification;
        public MBS.Agent.Plan.Notification AddEventToWindowsLog;
    }
 
    public enum WeekNumber
    {
        First,
        Second,
        Third,
        Fourth,
        Penultimate,
        Last
    }
 
    public enum RestoreVerificationMode
    {
        DoNotRun,
        RunForFull,
        RunForIncremental,
        RunForFullAndIncremental
    }
 
    public enum BlockSize
    {
        K1024 = 1024,
        K512 = 512,
        K256 = 256,
        K128 = 128
    }
 
    public enum Month
    {
        NotSet = 0,
        January = 1,
        February = 2,
        March = 3,
        April = 4,
        May = 5,
        June = 6,
        July = 7,
        August = 8,
        September = 9,
        October = 10,
        November = 11,
        December = 12
    }
 
    public enum DatabaseSelectionType
    {
        All,
        User,
        SelectedDB
    }
 
    public enum BackupVolumeType
    {
        AllVolumes,
        FixedVolumes,
        SystemRequired,
        SelectedVolumes
    }
 
    public enum BackupVMType
    {
        All,
        OnlyRunning,
        SelectedVM
    }
 
    public enum Period
    {
        day,
        week,
        month,
        year
    }
 
    public enum EncryptionAlgorithm
    {
        AES128,
        AES192,
        AES256
    }
     
    public enum StorageClass
    {
        Standard,
        IntelligentTiering,
        StandardIA,
        OneZoneIA,
        Glacier,
        GlacierInstantRetrieval,
        GlacierDeepArchive
    }
 
    public enum StorageClassCBB
    {
        STANDARD,
        INTELLIGENT_TIERING,
        STANDARD_IA,
        ONEZONE_IA,
        GLACIER,
        GLACIER_IR,
        DEEP_ARCHIVE
    }
 
    public enum Notification
    {
        off,
        errorOnly,
        on
    }
 
    public enum ScheduleFrequency
    {
        Once,
        Daily,
        Weekly,
        Monthly,
        DayofMonth,
        Realtime
    }
 
    public enum NBFScheduleFrequency
    {
        Once,
        Daily,
        Weekly,
        Monthly,
        DayofMonth
    }
 
    public enum GlacierRestoreType
    {
        Expedited,
        Standard,
        Bulk
    }
 
    public enum RestoreVolumeType
    {
        AllVolumes,
        SelectedVolume
    }
 
    public enum VirtualDiskType
    {
        VHDdynamic,
        VHDfixed,
        VHDXdynamic,
        Raw,
        Rawsparse,
        Tar,
        Tgz,
        VDIdynamic,
        VDIfixed,
        VMDKdynamic,
        VMDKfixed
    }
}
 
namespace MBS.Agent
{
    public class License {
        public string User;
        public string ID;
    }
 
    public class StorageAccount {
        public string ID;
        public string Type;
        public string SGCloudTypeValue;
        public string BackupPath;
        public string Bucket;
        public string BucketID;
        public string DisplayName;
        public bool ForceSharing;
        public bool IsRestoreOnly;
        public string SGAccountID;
        public string SGEndPoint;
        public string SGFolderPath;
        public string SGHttpsEndPoint;
        public int SignatureVersion;
        public string Path;
        public bool UseSSL;
    }
 
    public class StorageAccountContent {
        public MBS.Agent.StorageAccountContentType Type;
        public string Name;
        public string FullName;
        public Nullable<DateTime> Date;
        public long Size;
        public bool IsCompressed;
        public bool IsEncrypted;
        public FileVersions[] Versions;
    }
 
    public class TestStorageAccountResult {
        public string Name;
        public string HostName;
        public int RemotePort;
        public IPAddress RemoteAddress;
        public bool TestSucceeded;
    }
 
    public class FileVersions {
        public DateTime Date;
        public long Size;
        public bool IsCompressed;
        public bool IsEncrypted;
 
    }
    public enum StorageAccountContentType
    {
        Folder,
        File,
        Disk
    }
 
    public class CLIResult
    {
        public string[] Result;
        public string[] Warnings;
        public string[] Errors;
    }
 
    public class CLIRawResult
    {
        public string stdout;
        public string stderr;
        public int ExitCode;
    }
 
    public class IBBBackup
    {
        public string Name;
        public DateTime DateUTC;
        public string Type;
        public bool Encrypted;
        public MBS.Agent.IBBBackupDisk[] Disks;
    }
 
    public class IBBBackupDisk : IBBDisk
    {
        public string BackupType;
        public Nullable<DateTime> Date;
    }
 
    public class IBBDisk
    {
        public int Disk;
        public string Type;
        public long Capacity;
        public string Model;
        public string Id;
        public System.Collections.Generic.List<MBS.Agent.IBBVolume> Volumes;
    }
 
    public class IBBDiskV6
    {
        public int DiskNumber;
        public string DriveType;
        public long Capacity;
        public string Model;
        public string DiskId;
        public System.Collections.Generic.List<MBS.Agent.IBBVolumeV6> Volumes;
    }
 
    public class IBBVolume
    {
        public string[] MountPoints;
        public bool Supported;
        public bool RequiredBySystem;
        public string DriveType;
        public string FileSystemType;
        public string WindowsVolumeIdentity;
        public long Length;
        public long UsedSpace;
        public string Label;
        public bool IsBoot;
        public bool IsActive;
        public Nullable<bool> IsBitLocker;
    }
 
    public class IBBVolumeCBB : IBBVolume
    {
        public MBS.Agent.IBBVolumeBackupOptionsCBB BackupOptions;
    }
 
    public class IBBVolumeBackupOptionsCBB
    {
        public bool UseVss;
        public System.Collections.Generic.List<MBS.Agent.IBBVolumeBackupOptionsExcludeRulesCBB> ExcludeRules;
        public bool KeepBitLocker;
    }
 
    public class IBBVolumeBackupOptionsExcludeRulesCBB
    {
        public string Folder;
        public string Mask;
        public bool Recursive;
        public bool DeleteFolder;
    }
 
    public class IBBVolumeV6
    {
        public string[] MountPoints;
        public bool Supported;
        public bool RequiredBySystem;
        public string DriveType;
        public string FileSystemType;
        public string WindowsVolumeIdentity;
        public long Length;
        public long UsedSpace;
    }
}
 
namespace MBS.PSModule
{
    public class Settings
    {
        public string CBBPath;
        public string CBBProgramData;
        public bool SkipCompression;
        public bool SkipEncryption;
        public bool SkipStorageClass;
        public bool SkipSSE;
        public bool SkipVSS;
    }
}
 
"@

# SIG # Begin signature block
# MIInWgYJKoZIhvcNAQcCoIInSzCCJ0cCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCA1KNWjdjASUORt
# eVZHxqAVFubWqKqezxt+uMD/Z/geT6CCEekwggVvMIIEV6ADAgECAhBI/JO0YFWU
# jTanyYqJ1pQWMA0GCSqGSIb3DQEBDAUAMHsxCzAJBgNVBAYTAkdCMRswGQYDVQQI
# DBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoM
# EUNvbW9kbyBDQSBMaW1pdGVkMSEwHwYDVQQDDBhBQUEgQ2VydGlmaWNhdGUgU2Vy
# dmljZXMwHhcNMjEwNTI1MDAwMDAwWhcNMjgxMjMxMjM1OTU5WjBWMQswCQYDVQQG
# EwJHQjEYMBYGA1UEChMPU2VjdGlnbyBMaW1pdGVkMS0wKwYDVQQDEyRTZWN0aWdv
# IFB1YmxpYyBDb2RlIFNpZ25pbmcgUm9vdCBSNDYwggIiMA0GCSqGSIb3DQEBAQUA
# A4ICDwAwggIKAoICAQCN55QSIgQkdC7/FiMCkoq2rjaFrEfUI5ErPtx94jGgUW+s
# hJHjUoq14pbe0IdjJImK/+8Skzt9u7aKvb0Ffyeba2XTpQxpsbxJOZrxbW6q5KCD
# J9qaDStQ6Utbs7hkNqR+Sj2pcaths3OzPAsM79szV+W+NDfjlxtd/R8SPYIDdub7
# P2bSlDFp+m2zNKzBenjcklDyZMeqLQSrw2rq4C+np9xu1+j/2iGrQL+57g2extme
# me/G3h+pDHazJyCh1rr9gOcB0u/rgimVcI3/uxXP/tEPNqIuTzKQdEZrRzUTdwUz
# T2MuuC3hv2WnBGsY2HH6zAjybYmZELGt2z4s5KoYsMYHAXVn3m3pY2MeNn9pib6q
# RT5uWl+PoVvLnTCGMOgDs0DGDQ84zWeoU4j6uDBl+m/H5x2xg3RpPqzEaDux5mcz
# mrYI4IAFSEDu9oJkRqj1c7AGlfJsZZ+/VVscnFcax3hGfHCqlBuCF6yH6bbJDoEc
# QNYWFyn8XJwYK+pF9e+91WdPKF4F7pBMeufG9ND8+s0+MkYTIDaKBOq3qgdGnA2T
# OglmmVhcKaO5DKYwODzQRjY1fJy67sPV+Qp2+n4FG0DKkjXp1XrRtX8ArqmQqsV/
# AZwQsRb8zG4Y3G9i/qZQp7h7uJ0VP/4gDHXIIloTlRmQAOka1cKG8eOO7F/05QID
# AQABo4IBEjCCAQ4wHwYDVR0jBBgwFoAUoBEKIz6W8Qfs4q8p74Klf9AwpLQwHQYD
# VR0OBBYEFDLrkpr/NZZILyhAQnAgNpFcF4XmMA4GA1UdDwEB/wQEAwIBhjAPBgNV
# HRMBAf8EBTADAQH/MBMGA1UdJQQMMAoGCCsGAQUFBwMDMBsGA1UdIAQUMBIwBgYE
# VR0gADAIBgZngQwBBAEwQwYDVR0fBDwwOjA4oDagNIYyaHR0cDovL2NybC5jb21v
# ZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNAYIKwYBBQUHAQEE
# KDAmMCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5jb21vZG9jYS5jb20wDQYJKoZI
# hvcNAQEMBQADggEBABK/oe+LdJqYRLhpRrWrJAoMpIpnuDqBv0WKfVIHqI0fTiGF
# OaNrXi0ghr8QuK55O1PNtPvYRL4G2VxjZ9RAFodEhnIq1jIV9RKDwvnhXRFAZ/ZC
# J3LFI+ICOBpMIOLbAffNRk8monxmwFE2tokCVMf8WPtsAO7+mKYulaEMUykfb9gZ
# pk+e96wJ6l2CxouvgKe9gUhShDHaMuwV5KZMPWw5c9QLhTkg4IUaaOGnSDip0TYl
# d8GNGRbFiExmfS9jzpjoad+sPKhdnckcW67Y8y90z7h+9teDnRGWYpquRRPaf9xH
# +9/DUp/mBlXpnYzyOmJRvOwkDynUWICE5EV7WtgwggYaMIIEAqADAgECAhBiHW0M
# UgGeO5B5FSCJIRwKMA0GCSqGSIb3DQEBDAUAMFYxCzAJBgNVBAYTAkdCMRgwFgYD
# VQQKEw9TZWN0aWdvIExpbWl0ZWQxLTArBgNVBAMTJFNlY3RpZ28gUHVibGljIENv
# ZGUgU2lnbmluZyBSb290IFI0NjAeFw0yMTAzMjIwMDAwMDBaFw0zNjAzMjEyMzU5
# NTlaMFQxCzAJBgNVBAYTAkdCMRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0ZWQxKzAp
# BgNVBAMTIlNlY3RpZ28gUHVibGljIENvZGUgU2lnbmluZyBDQSBSMzYwggGiMA0G
# CSqGSIb3DQEBAQUAA4IBjwAwggGKAoIBgQCbK51T+jU/jmAGQ2rAz/V/9shTUxjI
# ztNsfvxYB5UXeWUzCxEeAEZGbEN4QMgCsJLZUKhWThj/yPqy0iSZhXkZ6Pg2A2NV
# DgFigOMYzB2OKhdqfWGVoYW3haT29PSTahYkwmMv0b/83nbeECbiMXhSOtbam+/3
# 6F09fy1tsB8je/RV0mIk8XL/tfCK6cPuYHE215wzrK0h1SWHTxPbPuYkRdkP05Zw
# mRmTnAO5/arnY83jeNzhP06ShdnRqtZlV59+8yv+KIhE5ILMqgOZYAENHNX9SJDm
# +qxp4VqpB3MV/h53yl41aHU5pledi9lCBbH9JeIkNFICiVHNkRmq4TpxtwfvjsUe
# dyz8rNyfQJy/aOs5b4s+ac7IH60B+Ja7TVM+EKv1WuTGwcLmoU3FpOFMbmPj8pz4
# 4MPZ1f9+YEQIQty/NQd/2yGgW+ufflcZ/ZE9o1M7a5Jnqf2i2/uMSWymR8r2oQBM
# dlyh2n5HirY4jKnFH/9gRvd+QOfdRrJZb1sCAwEAAaOCAWQwggFgMB8GA1UdIwQY
# MBaAFDLrkpr/NZZILyhAQnAgNpFcF4XmMB0GA1UdDgQWBBQPKssghyi47G9IritU
# pimqF6TNDDAOBgNVHQ8BAf8EBAMCAYYwEgYDVR0TAQH/BAgwBgEB/wIBADATBgNV
# HSUEDDAKBggrBgEFBQcDAzAbBgNVHSAEFDASMAYGBFUdIAAwCAYGZ4EMAQQBMEsG
# A1UdHwREMEIwQKA+oDyGOmh0dHA6Ly9jcmwuc2VjdGlnby5jb20vU2VjdGlnb1B1
# YmxpY0NvZGVTaWduaW5nUm9vdFI0Ni5jcmwwewYIKwYBBQUHAQEEbzBtMEYGCCsG
# AQUFBzAChjpodHRwOi8vY3J0LnNlY3RpZ28uY29tL1NlY3RpZ29QdWJsaWNDb2Rl
# U2lnbmluZ1Jvb3RSNDYucDdjMCMGCCsGAQUFBzABhhdodHRwOi8vb2NzcC5zZWN0
# aWdvLmNvbTANBgkqhkiG9w0BAQwFAAOCAgEABv+C4XdjNm57oRUgmxP/BP6YdURh
# w1aVcdGRP4Wh60BAscjW4HL9hcpkOTz5jUug2oeunbYAowbFC2AKK+cMcXIBD0Zd
# OaWTsyNyBBsMLHqafvIhrCymlaS98+QpoBCyKppP0OcxYEdU0hpsaqBBIZOtBajj
# cw5+w/KeFvPYfLF/ldYpmlG+vd0xqlqd099iChnyIMvY5HexjO2AmtsbpVn0OhNc
# WbWDRF/3sBp6fWXhz7DcML4iTAWS+MVXeNLj1lJziVKEoroGs9Mlizg0bUMbOalO
# hOfCipnx8CaLZeVme5yELg09Jlo8BMe80jO37PU8ejfkP9/uPak7VLwELKxAMcJs
# zkyeiaerlphwoKx1uHRzNyE6bxuSKcutisqmKL5OTunAvtONEoteSiabkPVSZ2z7
# 6mKnzAfZxCl/3dq3dUNw4rg3sTCggkHSRqTqlLMS7gjrhTqBmzu1L90Y1KWN/Y5J
# KdGvspbOrTfOXyXvmPL6E52z1NZJ6ctuMFBQZH3pwWvqURR8AgQdULUvrxjUYbHH
# j95Ejza63zdrEcxWLDX6xWls/GDnVNueKjWUH3fTv1Y8Wdho698YADR7TNx8X8z2
# Bev6SivBBOHY+uqiirZtg0y9ShQoPzmCcn63Syatatvx157YK9hlcPmVoa1oDE5/
# L9Uo2bC5a4CH2RwwggZUMIIEvKADAgECAhBQGj1MeADxcRs/FOU26uyrMA0GCSqG
# SIb3DQEBDAUAMFQxCzAJBgNVBAYTAkdCMRgwFgYDVQQKEw9TZWN0aWdvIExpbWl0
# ZWQxKzApBgNVBAMTIlNlY3RpZ28gUHVibGljIENvZGUgU2lnbmluZyBDQSBSMzYw
# HhcNMjExMjAzMDAwMDAwWhcNMjQxMjAyMjM1OTU5WjBYMQswCQYDVQQGEwJVUzEV
# MBMGA1UECAwMUGVubnN5bHZhbmlhMRgwFgYDVQQKDA9NU1BCeXRlcywgQ29ycC4x
# GDAWBgNVBAMMD01TUEJ5dGVzLCBDb3JwLjCCAiIwDQYJKoZIhvcNAQEBBQADggIP
# ADCCAgoCggIBAKNUOYUGihQGjTJdJ6k5Fm3+6QJGhj2wUbubiiqxJeqmW6616o5e
# ExwiGSxPOqafJzOJNq0XOigb3OQhtdIR4bG38+JghFt8rZe/DxBmPBZDR9bD1hrk
# 9vY714QhqvhIlUDXHnDUc9pnVGFfI945hRgaFHL77GQAEFyMvjNupOvT674/E8rI
# gYKMQBwY0cqiuRQwr3FnRMmNhd8/5mqrZGglDT1JizOnpfFVgNJ0x4ev7mPYIF6T
# rFGPwHsOOujzydmGgqvtGASEuz74A6arzYrhbjXv8XsEdT2tz6hHIpMwsgWMk6BD
# KDCsSIl5oEmVbQNXKrC0k62/XpbWRd+i350k07kl1bdV+nbi1K62TyS+7eVxehC1
# gFp+Knob1aqAJD9sPBLdbN3E4FOB/rvOLP1i2IxAcTGirAyRkkUriD4LUSWO6pju
# Qv2V4ZU/+K/3ZLXYCbIflzpDq6z9FmazK5csv99Coslv9s6lm9s1RRxgRBj5sn1q
# Xe/5l0VbF7tG/cgBvt8aJBD0u8knujI17lDy1TGA77r/KKj65xSsxC6nm0RA9pTw
# 0tz5OQ4ABYrH6TpdUBJz8m8cFgPipvyohN0RdE7InB3Nao11L1UHlnnL0SG1z5qQ
# YU7BhvfiSu44pSY9/uTPmAPlNIj3MO5utjfMD+MX9u86d8h/DWwrvQZzAgMBAAGj
# ggGcMIIBmDAfBgNVHSMEGDAWgBQPKssghyi47G9IritUpimqF6TNDDAdBgNVHQ4E
# FgQU7XGG9N0fpUpnonmgh6+IzR3lGj0wDgYDVR0PAQH/BAQDAgeAMAwGA1UdEwEB
# /wQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwMwEQYJYIZIAYb4QgEBBAQDAgQQMEoG
# A1UdIARDMEEwNQYMKwYBBAGyMQECAQMCMCUwIwYIKwYBBQUHAgEWF2h0dHBzOi8v
# c2VjdGlnby5jb20vQ1BTMAgGBmeBDAEEATBJBgNVHR8EQjBAMD6gPKA6hjhodHRw
# Oi8vY3JsLnNlY3RpZ28uY29tL1NlY3RpZ29QdWJsaWNDb2RlU2lnbmluZ0NBUjM2
# LmNybDB5BggrBgEFBQcBAQRtMGswRAYIKwYBBQUHMAKGOGh0dHA6Ly9jcnQuc2Vj
# dGlnby5jb20vU2VjdGlnb1B1YmxpY0NvZGVTaWduaW5nQ0FSMzYuY3J0MCMGCCsG
# AQUFBzABhhdodHRwOi8vb2NzcC5zZWN0aWdvLmNvbTANBgkqhkiG9w0BAQwFAAOC
# AYEAhLlUlrWxmB3MSCX9LcaY3p6jCnaeFR4chgRmhjdH+Gy5UyFpEq1/3X/Pv2Ih
# GGnX0uVbXsQ90D/CwFk7bXCFUUblu4ldzNqjmnf+lcTtv/WJR9FTS9t79WdiWbuN
# /YIEXVDERUGPC7v55aaJvXJbDS+4vYeJPAHl2xsvbARWui1nwBLOSVGTGk6T2Q6s
# BnlHFToFc4UFtMhYUMf8L03jypocNGM9z6yamsOANd/dXt582U5DD0g7SVS2pyHD
# Ot7UvVq6769TGZNwq9s1tFwQjm3IGz4DIO1ADMwoGLzqqalYQ1xq2JAqUq41hSlN
# YHecLTjAOTwA81wv71XbZdARR0DfmpqdzdKkTbVucWhJFWL7clDQ0WzfAx1/ZsjR
# t6X9p+XuLnJPMD3V5swX52ZCcB6LY3FyK7kgwNseH+Xqo+Ln7OtAs3Bwa/Cm9lbL
# xYs8wkDitxFnpKFstyE7EE+wtEJkyszfLqjkmUCw/hjzX6I40hahbPCxaxdlv8+3
# drczMYIUxzCCFMMCAQEwaDBUMQswCQYDVQQGEwJHQjEYMBYGA1UEChMPU2VjdGln
# byBMaW1pdGVkMSswKQYDVQQDEyJTZWN0aWdvIFB1YmxpYyBDb2RlIFNpZ25pbmcg
# Q0EgUjM2AhBQGj1MeADxcRs/FOU26uyrMA0GCWCGSAFlAwQCAQUAoHwwEAYKKwYB
# BAGCNwIBDDECMAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGC
# NwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEINezWFeeKfwSbld6
# 6cS3ROAEfz3SUMMF5run0+BNukcOMA0GCSqGSIb3DQEBAQUABIICABzwyNym1vUb
# RhH9UT0FKVWHZHb7lL1k7SGzHuBPrG9lQdDCOSa1i0mnbydrR/XV8YlSYAM4hUBU
# mX38MK/0kBGIbGlDzNAZe7szEYJUyD4quClindyTPB3UJrK1p6MH8VprxGuXEWXp
# RaBs/+GI9ggO0LoV1FQVrN9bZR3OdBgZDOG7KtdO10CCjBWd2unQLHZrkVoqaiMe
# s+deWn2RHCofYaBIUMVgPpEw4B9iYWGhztmNBEhc4nnbUY6LKjkdMKhL+dHwy8zw
# aJyiwzJt8eCi6d7CNMUnp8iUApSKpawQrRgYIT939+LdzEuGPONZo3cMYlyNx/5n
# 5zAx+KVcyKc836YriT7ZpiJSN60e7Xa5CLGZ9o7aOsCnfsLifVkXyTutNiB/diy1
# cIXdiG52zxQBzx03DwMs2ktQJrgDQVEzIwtOdcACFFBqAHfXPtnl5iFnWtGZqM5N
# YxcGWkVrf5hz6e3WQ3+dKQLje7TSDzPxiwPi+N42sYV57Er2r91FWB50NiAMbbRq
# Ufg3t1tCGF09GIluAS+v2bvj4vRpPnepKBpeNK8bteNqw0SuMnNIvE8OVNlC4Dki
# uwf8hcugtWuN2LlwrxBKl7AO5EKw8WBB1mUWky4GN1a2eh8eWKnKebsApXma3c8U
# TCpw9k6wjZRR/VZx6FnJEDGn47JwJ1DFoYIRsjCCEa4GCisGAQQBgjcDAwExghGe
# MIIRmgYJKoZIhvcNAQcCoIIRizCCEYcCAQMxDzANBglghkgBZQMEAgEFADB3Bgsq
# hkiG9w0BCRABBKBoBGYwZAIBAQYJYIZIAYb9bAcBMDEwDQYJYIZIAWUDBAIBBQAE
# ILl0LVWTfY6NfFvR+BgF+GLsu/ulKIXEmr35p8G13rMIAhADLfdTUcP3n/bY/6g7
# j3VJGA8yMDIyMDYxMDIwMTEzMFqggg18MIIGxjCCBK6gAwIBAgIQCnpKiJ7JmUKQ
# BmM4TYaXnTANBgkqhkiG9w0BAQsFADBjMQswCQYDVQQGEwJVUzEXMBUGA1UEChMO
# RGlnaUNlcnQsIEluYy4xOzA5BgNVBAMTMkRpZ2lDZXJ0IFRydXN0ZWQgRzQgUlNB
# NDA5NiBTSEEyNTYgVGltZVN0YW1waW5nIENBMB4XDTIyMDMyOTAwMDAwMFoXDTMz
# MDMxNDIzNTk1OVowTDELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRpZ2lDZXJ0LCBJ
# bmMuMSQwIgYDVQQDExtEaWdpQ2VydCBUaW1lc3RhbXAgMjAyMiAtIDIwggIiMA0G
# CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC5KpYjply8X9ZJ8BWCGPQz7sxcbOPg
# JS7SMeQ8QK77q8TjeF1+XDbq9SWNQ6OB6zhj+TyIad480jBRDTEHukZu6aNLSOiJ
# QX8Nstb5hPGYPgu/CoQScWyhYiYB087DbP2sO37cKhypvTDGFtjavOuy8YPRn80J
# xblBakVCI0Fa+GDTZSw+fl69lqfw/LH09CjPQnkfO8eTB2ho5UQ0Ul8PUN7UWSxE
# dMAyRxlb4pguj9DKP//GZ888k5VOhOl2GJiZERTFKwygM9tNJIXogpThLwPuf4UC
# yYbh1RgUtwRF8+A4vaK9enGY7BXn/S7s0psAiqwdjTuAaP7QWZgmzuDtrn8oLsKe
# 4AtLyAjRMruD+iM82f/SjLv3QyPf58NaBWJ+cCzlK7I9Y+rIroEga0OJyH5fsBrd
# Gb2fdEEKr7mOCdN0oS+wVHbBkE+U7IZh/9sRL5IDMM4wt4sPXUSzQx0jUM2R1y+d
# +/zNscGnxA7E70A+GToC1DGpaaBJ+XXhm+ho5GoMj+vksSF7hmdYfn8f6CvkFLIW
# 1oGhytowkGvub3XAsDYmsgg7/72+f2wTGN/GbaR5Sa2Lf2GHBWj31HDjQpXonrub
# S7LitkE956+nGijJrWGwoEEYGU7tR5thle0+C2Fa6j56mJJRzT/JROeAiylCcvd5
# st2E6ifu/n16awIDAQABo4IBizCCAYcwDgYDVR0PAQH/BAQDAgeAMAwGA1UdEwEB
# /wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgwIAYDVR0gBBkwFzAIBgZngQwB
# BAIwCwYJYIZIAYb9bAcBMB8GA1UdIwQYMBaAFLoW2W1NhS9zKXaaL3WMaiCPnshv
# MB0GA1UdDgQWBBSNZLeJIf5WWESEYafqbxw2j92vDTBaBgNVHR8EUzBRME+gTaBL
# hklodHRwOi8vY3JsMy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRSU0E0
# MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3JsMIGQBggrBgEFBQcBAQSBgzCBgDAk
# BggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMFgGCCsGAQUFBzAC
# hkxodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRUcnVzdGVkRzRS
# U0E0MDk2U0hBMjU2VGltZVN0YW1waW5nQ0EuY3J0MA0GCSqGSIb3DQEBCwUAA4IC
# AQANLSN0ptH1+OpLmT8B5PYM5K8WndmzjJeCKZxDbwEtqzi1cBG/hBmLP13lhk++
# kzreKjlaOU7YhFmlvBuYquhs79FIaRk4W8+JOR1wcNlO3yMibNXf9lnLocLqTHbK
# odyhK5a4m1WpGmt90fUCCU+C1qVziMSYgN/uSZW3s8zFp+4O4e8eOIqf7xHJMUpY
# tt84fMv6XPfkU79uCnx+196Y1SlliQ+inMBl9AEiZcfqXnSmWzWSUHz0F6aHZE8+
# RokWYyBry/J70DXjSnBIqbbnHWC9BCIVJXAGcqlEO2lHEdPu6cegPk8QuTA25POq
# aQmoi35komWUEftuMvH1uzitzcCTEdUyeEpLNypM81zctoXAu3AwVXjWmP5UbX9x
# qUgaeN1Gdy4besAzivhKKIwSqHPPLfnTI/KeGeANlCig69saUaCVgo4oa6TOnXbe
# qXOqSGpZQ65f6vgPBkKd3wZolv4qoHRbY2beayy4eKpNcG3wLPEHFX41tOa1DKKZ
# pdcVazUOhdbgLMzgDCS4fFILHpl878jIxYxYaa+rPeHPzH0VrhS/inHfypex2Efq
# HIXgRU4SHBQpWMxv03/LvsEOSm8gnK7ZczJZCOctkqEaEf4ymKZdK5fgi9OczG21
# Da5HYzhHF1tvE9pqEG4fSbdEW7QICodaWQR2EaGndwITHDCCBq4wggSWoAMCAQIC
# EAc2N7ckVHzYR6z9KGYqXlswDQYJKoZIhvcNAQELBQAwYjELMAkGA1UEBhMCVVMx
# FTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNv
# bTEhMB8GA1UEAxMYRGlnaUNlcnQgVHJ1c3RlZCBSb290IEc0MB4XDTIyMDMyMzAw
# MDAwMFoXDTM3MDMyMjIzNTk1OVowYzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkRp
# Z2lDZXJ0LCBJbmMuMTswOQYDVQQDEzJEaWdpQ2VydCBUcnVzdGVkIEc0IFJTQTQw
# OTYgU0hBMjU2IFRpbWVTdGFtcGluZyBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
# ADCCAgoCggIBAMaGNQZJs8E9cklRVcclA8TykTepl1Gh1tKD0Z5Mom2gsMyD+Vr2
# EaFEFUJfpIjzaPp985yJC3+dH54PMx9QEwsmc5Zt+FeoAn39Q7SE2hHxc7Gz7iuA
# hIoiGN/r2j3EF3+rGSs+QtxnjupRPfDWVtTnKC3r07G1decfBmWNlCnT2exp39mQ
# h0YAe9tEQYncfGpXevA3eZ9drMvohGS0UvJ2R/dhgxndX7RUCyFobjchu0CsX7Le
# Sn3O9TkSZ+8OpWNs5KbFHc02DVzV5huowWR0QKfAcsW6Th+xtVhNef7Xj3OTrCw5
# 4qVI1vCwMROpVymWJy71h6aPTnYVVSZwmCZ/oBpHIEPjQ2OAe3VuJyWQmDo4EbP2
# 9p7mO1vsgd4iFNmCKseSv6De4z6ic/rnH1pslPJSlRErWHRAKKtzQ87fSqEcazjF
# KfPKqpZzQmiftkaznTqj1QPgv/CiPMpC3BhIfxQ0z9JMq++bPf4OuGQq+nUoJEHt
# Qr8FnGZJUlD0UfM2SU2LINIsVzV5K6jzRWC8I41Y99xh3pP+OcD5sjClTNfpmEpY
# PtMDiP6zj9NeS3YSUZPJjAw7W4oiqMEmCPkUEBIDfV8ju2TjY+Cm4T72wnSyPx4J
# duyrXUZ14mCjWAkBKAAOhFTuzuldyF4wEr1GnrXTdrnSDmuZDNIztM2xAgMBAAGj
# ggFdMIIBWTASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBS6FtltTYUvcyl2
# mi91jGogj57IbzAfBgNVHSMEGDAWgBTs1+OC0nFdZEzfLmc/57qYrhwPTzAOBgNV
# HQ8BAf8EBAMCAYYwEwYDVR0lBAwwCgYIKwYBBQUHAwgwdwYIKwYBBQUHAQEEazBp
# MCQGCCsGAQUFBzABhhhodHRwOi8vb2NzcC5kaWdpY2VydC5jb20wQQYIKwYBBQUH
# MAKGNWh0dHA6Ly9jYWNlcnRzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydFRydXN0ZWRS
# b290RzQuY3J0MEMGA1UdHwQ8MDowOKA2oDSGMmh0dHA6Ly9jcmwzLmRpZ2ljZXJ0
# LmNvbS9EaWdpQ2VydFRydXN0ZWRSb290RzQuY3JsMCAGA1UdIAQZMBcwCAYGZ4EM
# AQQCMAsGCWCGSAGG/WwHATANBgkqhkiG9w0BAQsFAAOCAgEAfVmOwJO2b5ipRCIB
# fmbW2CFC4bAYLhBNE88wU86/GPvHUF3iSyn7cIoNqilp/GnBzx0H6T5gyNgL5Vxb
# 122H+oQgJTQxZ822EpZvxFBMYh0MCIKoFr2pVs8Vc40BIiXOlWk/R3f7cnQU1/+r
# T4osequFzUNf7WC2qk+RZp4snuCKrOX9jLxkJodskr2dfNBwCnzvqLx1T7pa96kQ
# sl3p/yhUifDVinF2ZdrM8HKjI/rAJ4JErpknG6skHibBt94q6/aesXmZgaNWhqsK
# RcnfxI2g55j7+6adcq/Ex8HBanHZxhOACcS2n82HhyS7T6NJuXdmkfFynOlLAlKn
# N36TU6w7HQhJD5TNOXrd/yVjmScsPT9rp/Fmw0HNT7ZAmyEhQNC3EyTN3B14OuSe
# reU0cZLXJmvkOHOrpgFPvT87eK1MrfvElXvtCl8zOYdBeHo46Zzh3SP9HSjTx/no
# 8Zhf+yvYfvJGnXUsHicsJttvFXseGYs2uJPU5vIXmVnKcPA3v5gA3yAWTyf7YGcW
# oWa63VXAOimGsJigK+2VQbc61RWYMbRiCQ8KvYHZE/6/pNHzV9m8BPqC3jLfBInw
# AM1dwvnQI38AC+R2AibZ8GV2QqYphwlHK+Z/GqSFD/yYlvZVVCsfgPrA8g4r5db7
# qS9EFUrnEw4d2zc4GqEr9u3WfPwxggN2MIIDcgIBATB3MGMxCzAJBgNVBAYTAlVT
# MRcwFQYDVQQKEw5EaWdpQ2VydCwgSW5jLjE7MDkGA1UEAxMyRGlnaUNlcnQgVHJ1
# c3RlZCBHNCBSU0E0MDk2IFNIQTI1NiBUaW1lU3RhbXBpbmcgQ0ECEAp6SoieyZlC
# kAZjOE2Gl50wDQYJYIZIAWUDBAIBBQCggdEwGgYJKoZIhvcNAQkDMQ0GCyqGSIb3
# DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yMjA2MTAyMDExMzBaMCsGCyqGSIb3DQEJ
# EAIMMRwwGjAYMBYEFIUI84ZRXLPTB322tLfAfxtKXkHeMC8GCSqGSIb3DQEJBDEi
# BCCB+9uSlcgogAaFczsXEcvrlfFO3i9hR2oQhMdUK9seSjA3BgsqhkiG9w0BCRAC
# LzEoMCYwJDAiBCCdppAVw0nGwYl4Rbo1gq1wyI+kKTvbar6cK9JTknnmOzANBgkq
# hkiG9w0BAQEFAASCAgAfMJYX8X9VhdD1sA40HMNZcMyolu/r7O3ZsvP8L3vqF9au
# c6yPFY+/nQ08o/aNISe47FXM8GOHFhXyyl8JDs3YPC+wFs+cShFifkDuAPe8wfnW
# Kpa8o4ZA7rAO1+M64E8zjJBWTJOEc7j9hQVkegcsHxBQYlnYpBXTikFDKQ+xo45C
# ZosxXSVbWgeuZo6Ap8EJH5m85K/04W48CnzJQLu4EKOpHT1+0hZBOOfFFgVl8cak
# F99GMw37JOjhoRmZgt/+Q0DZlYVXjGCbpAjtmFqVOadcPBX6Fej7V4JOr57l0Nea
# IjWlo4Lg7EeoOAZ/p7xZSXMzI8D3X1fx94UP1C6EGhvDgPpTKZDqAX6aC45Mb5tr
# JkSaz/JWgrRJhLD7x/feArIGdACwfSyQmw5lMDUhjYKUGWWaxrPEc84BWZiWSeZP
# Pce1vJr0KDsRfRk9odBe+EelhMZUsNECDEWc0GbcKl3kfJP5/WgplLpzrwfTxFCN
# GGxjyC6r9Wo7xNGUSbo+JPbeAIb9aAflWxXdWeiri6Cmaz3M/a7hEZbowah+Dufr
# M3+0eoZqasetcZBh/UMDTO7GxER8GyU/VJWJZ0KGZJhVgCVOUVGHGCJMbiW9ImA6
# YXK/Nn40Z5CfTa0yXO+dycr/xf6v5+/wEhW9ed1jCtvlsmcXFvkVUL8YLTRIiQ==
# SIG # End signature block