From 435b8ea2a72acc034811487ab347e4625c29b3aa Mon Sep 17 00:00:00 2001 From: Florian Hopfner Date: Sun, 28 Jan 2024 16:41:33 +0100 Subject: [PATCH 01/15] Update to C# language version 10.0 --- 2LCS/2LCS.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2LCS/2LCS.csproj b/2LCS/2LCS.csproj index 1bca626..4fcc4de 100644 --- a/2LCS/2LCS.csproj +++ b/2LCS/2LCS.csproj @@ -23,7 +23,7 @@ true true true - 8.0 + 10.0 From e5035ac44785a717191e92266d6d54de23adfd37 Mon Sep 17 00:00:00 2001 From: Florian Hopfner Date: Sun, 28 Jan 2024 18:59:46 +0100 Subject: [PATCH 02/15] Add asset library objects --- 2LCS/Enumerations.cs | 2 + 2LCS/JsonObjects.cs | 1439 ++++++++++++++++++++++-------------------- 2 files changed, 769 insertions(+), 672 deletions(-) diff --git a/2LCS/Enumerations.cs b/2LCS/Enumerations.cs index a95fd18..efa7679 100644 --- a/2LCS/Enumerations.cs +++ b/2LCS/Enumerations.cs @@ -156,5 +156,7 @@ public enum CrmGetIdStatus { CrmVersion = 1, CrmStatus = 2 } public struct PauseReasons { public const string Other = "Other"; public const string Holidays = "Holidays"; public const string UpComingGoLive = "UpComingGoLive"; public const string PendingUpgrade = "PendingUpgrade"; public const string IssueDuringValidation = "IssueDuringValidation"; public const string PendingValidation = "PendingValidation"; public const string CustomizationConflict = "CustomizationConflict"; public const string IsvReadiness = "IsvReadiness"; public const string DisableFeatureDegradation = "DisableFeatureDegradation"; public const string UpdateExtraSandboxLater = "UpdateExtraSandboxLater"; } public enum CDSSelectionValidationResult { Unknown = 0, Success = 1, Warning = 2, Error = 3 }; + + public enum AssetFileType { Model = 1, ProcessDataPackage = 4, SoftwareDeployablePackage = 10, GERConfiguration = 12, DataPackage = 15, PowerBIReportModel = 19, ECommercePackage = 26, NuGetPackage = 27, RetailSelfServicePackage = 28, CommerceCloudScaleUnitExtension = 29 } #endregion } \ No newline at end of file diff --git a/2LCS/JsonObjects.cs b/2LCS/JsonObjects.cs index 5165721..045a513 100644 --- a/2LCS/JsonObjects.cs +++ b/2LCS/JsonObjects.cs @@ -1,673 +1,768 @@ -using System.Collections.Generic; - -namespace LCS.JsonObjects -{ - public class BuildInfoDetails - { - public List BuildInfoTreeView { get; set; } - public string BuildVersion { get; set; } - public string InstalledPlatformBuild { get; set; } - } - - public class BuildInfoEnvironment - { - public string Label { get; set; } - public int Value { get; set; } - } - - public class BuildInfoTreeView - { - public string Description { get; set; } - public string Id { get; set; } - public string InstallationInfoType { get; set; } - public string InstalledDate { get; set; }//Todo - public string Layer { get; set; } - public string ModelName { get; set; } - public string ModuleName { get; set; } - public string ParentId { get; set; } - public string Version { get; set; } - } - - public class CloudHostedInstance - { - public string ActivityId { get; set; } - public string AzureSubscriptionId { get; set; } - public string BuildInfo { get; set; } - public string BuildNumber { get; set; } - public bool CanApplyUpdatesToUpgradeEnvironment { get; set; } - public bool CanCleanup { get; set; } - public bool CanDeallocate { get; set; } - public bool CanDelete { get; set; } - public bool CanDeleteCheMetadata { get; set; } - public bool CanDseCreateStaging { get; set; } - public bool CanEdit { get; set; } - public bool CanEnableDR { get; set; } - public bool CanFailback { get; set; } - public bool CanFailover { get; set; } - public bool CanMarkUpgradeComplete { get; set; } - public bool CanRestart { get; set; } - public bool CanRollbackUpgradeEnvironment { get; set; } - public bool CanShowAzureConnector { get; set; } - public bool CanShowLoginButton { get; set; } - public bool CanShowNavigationLinks { get; set; } - public bool CanShowRdp { get; set; } - public bool CanShowSqlEnableAccess { get; set; } - public bool CanShowStagingEnvironmentId { get; set; } - public bool CanShowTrialLink { get; set; } - public bool CanStart { get; set; } - public bool CanStop { get; set; } - public bool CanUpgradeEnvironmentDatabase { get; set; } - public string CatalogName { get; set; } - public object ClientInstances { get; set; } - public string[] CloudServiceNames { get; set; } - public string CloudStorageLocation { get; set; } - public string CloudStorageLocationLabel { get; set; } - public string ConnectorId { get; set; } - public string ConnectorName { get; set; } - public Credentials[] ContosoCredentials { get; set; } - public string CurrentApplicationBuildVersion { get; set; } - public string CurrentApplicationReleaseName { get; set; } - public string CurrentPlatformReleaseName { get; set; } - public string CurrentPlatformVersion { get; set; } - public string DeployedBy { get; set; } - public string DeployedOn { get; set; }//Todo - public string DeploymentAction { get; set; } - public int DeploymentErrorCode { get; set; } - public string DeploymentId { get; set; } - public DeploymentState DeploymentState { get; set; } - public string DeploymentStatus { get; set; } - public object DevOpsDetails { get; set; } - public string DevTestEnvironmentType { get; set; } - public string DisasterRecoveryLocation { get; set; } - public string DisasterRecoveryLocationLabel { get; set; } - public string DisplayName { get; set; } - public string EnvironmentAdmin { get; set; } - public EnvironmentCDSDetails EnvironmentCDSDetails { get; set; } - public string EnvironmentId { get; set; } - public string EnvironmentName { get; set; } - public EnvironmentNotifications EnvironmentNotifications { get; set; } - public object Errors { get; set; } - public bool HasStagingEnvironment { get; set; } - public string InstanceId { get; set; } - public Instance[] Instances { get; set; } - public DeploymentAction InternalDeploymentAction { get; set; } - public DeploymentStatus InternalDeploymentStatus { get; set; } - public bool IsARMTopology { get; set; } - public bool IsDiagnosticsEnabledEnvironment { get; set; } - public bool IsEnableMaintenanceMode { get; set; } - public bool IsGuidelinesLinkVisible { get; set; } - public bool IsHistoryVisible { get; set; } - public bool IsInitialDeploymentState { get; set; } - public bool IsMaintainVisible { get; set; } - public bool IsManualUpgradeInProgress { get; set; } - public bool IsNotificationListVisible { get; set; } - public bool IsPreparationFailed { get; set; } - public bool IsSandboxUpgradeEnvironment { get; set; } - public bool IsStagingDeploymentFailed { get; set; } - public bool IsStagingDeploymentSucceeded { get; set; } - public bool IsUpgradeSelfServeCancelledOrCompleted { get; set; } - public bool IsUpgradeSelfServeInProgress { get; set; } - public bool IsUpgradeTimeExpired { get; set; } - public string JITDetailsText { get; set; } - public string JITErrorText { get; set; } - public JITOptions[] JITOptions { get; set; } - public string JITOptionsText { get; set; } - public bool JITRequestAccessEnabledState { get; set; } - public object JITRequestActivityId { get; set; } - public string LicenseLink { get; set; } - public Credentials[] LocalCredentials { get; set; } - public object Location { get; set; } - public object LogOnDetails { get; set; } - public Navigationlink[] NavigationLinks { get; set; } - public string ProductName { get; set; } - public string ProductRegisteredName { get; set; } - public object RdsFarmAccessRdp { get; set; } - public object RdsWebAccessCertificate { get; set; } - public object RdsWebAccessLink { get; set; } - public RefinedEnvironmentType RefinedEnvironmentType { get; set; } - public string ResourceGroupName { get; set; } - public SaasEnvironmentType SaasEnvironmentType { get; set; } - public object ServiceIds { get; set; } - public bool ShowJITExpiryWithReasonForAccess { get; set; } - public bool ShowRetailComponents { get; set; } - public bool ShowSslCertRotateWarning { get; set; } - public bool ShowUpgradeEnvironmentDetails { get; set; } - public Credentials[] SqlAzureCredentials { get; set; } - public System.Guid StagingActivityId { get; set; } - public string StagingDeployedBy { get; set; } - public string StagingDeployedOn { get; set; }//Todo - public string StagingEnvironmentAdministrator { get; set; } - public string StagingEnvironmentId { get; set; } - public string StagingPrimaryRegion { get; set; } - public string StagingSecondaryRegion { get; set; } - public string StagingTargetVersion { get; set; } - public string TimeForUpgradeText { get; set; } - public string TopologyDescription { get; set; } - public string TopologyDisplayName { get; set; } - public string TopologyId { get; set; } - public string TopologyName { get; set; } - public string TopologyType { get; set; } - public string TopologyVersion { get; set; } - public UpgradeEnvironmentStatus UpgradeEnvironmentStatus { get; set; } - public int VirtualMachineCount { get; set; } - public object Warnings { get; set; } - } - - public class Credentials - { - public string CredentialInfoKey { get; set; } - public string DeploymentItemName { get; set; } - public string InstanceName { get; set; } - public bool IsCredentialKeyVaultUri { get; set; } - public bool IsPasswordExpired { get; set; } - public string Password { get; set; } - public string PasswordExpiryTime { get; set; } - public object ReasonForAccess { get; set; } - public object ReasonForAccessDetails { get; set; } - public string SymbolicName { get; set; } - public string UserName { get; set; } - } - - public class CustomLink - { - public string Link { get; set; } - public string LinkLabel { get; set; } - } - - public class DeployablePackage - { - public string AppVersion { get; set; } - public string Description { get; set; } - public string EstimatedDuration { get; set; } - public int FileAssetDisplayVersion { get; set; } - public int LcsEnvironmentActionId { get; set; } - public string LcsEnvironmentId { get; set; } - public string ModifiedBy { get; set; } - public string ModifiedDate { get; set; }//Todo - public string Name { get; set; } - public string PackageId { get; set; } - public string PackageType { get; set; } - public string PlatformVersion { get; set; } - public string Publisher { get; set; } - public string Scope { get; set; } - } - - public class DynamicPaging - { - public int ItemsRequested { get; set; } - public int StartPosition { get; set; } - } - - public class ExportedInstance - { - public string BuildInfo { get; set; } - public string CurrentApplicationBuildVersion { get; set; } - public string CurrentApplicationReleaseName { get; set; } - public string CurrentPlatformReleaseName { get; set; } - public string CurrentPlatformVersion { get; set; } - public string DeploymentStatus { get; set; } - public string EnvironmentId { get; set; } - public string HostingType { get; set; } - public string InstanceName { get; set; } - public string Organization { get; set; } - public string ProjectId { get; set; } - public string ProjectName { get; set; } - public string TopologyName { get; set; } - public string TopologyType { get; set; } - public string TopologyVersion { get; set; } - } - - public class ExportedUser - { - public string Organization { get; set; } - public string ProjectId { get; set; } - public string ProjectName { get; set; } - public string UserName { get; set; } - public string Email { get; set; } - public string OrganizationName { get; set; } - public string UserRoleDisplayName { get; set; } - public string FunctionalRoleDisplayName { get; set; } - public string AllowContactByMicrosoft { get; set; } - public string InvitedByName { get; set; } - public string InvitedByOrganisation { get; set; } - public string CreatedDate { get; set; } - public string InvitationStatusDisplayText { get; set; } - } - - public class Hotfix - { - public object Area { get; set; } - public string AXVersion { get; set; } - public int BugNumber { get; set; } - public string ConfigKeys { get; set; } - public string Countries { get; set; } - public string CUInfo { get; set; } - public string DB { get; set; } - public string DeliverableType { get; set; } - public string FeatureReference { get; set; } - public object HtmlAttributes { get; set; } - public string Industries { get; set; } - public int KBNumber { get; set; } - public string Modules { get; set; } - public string PageType { get; set; } - public string Problem { get; set; } - public string ReleasedDate { get; set; }//Todo - public string SearchContext { get; set; } - public string Solution { get; set; } - public string Substatus { get; set; } - public string Title { get; set; } - public string Type { get; set; } - public string Url { get; set; } - } - - public class Instance - { - public Dictionary Credentials { get; set; } - public string DeploymentStatus { get; set; } - public string DisplayName { get; set; } - public string ItemName { get; set; } - public string Location { get; set; } - public string MachineName { get; set; } - public string RDPConnectionDetails { get; set; } - } - - public class InvitedBy - { - public object ADOauthCode { get; set; } - public string ADUserId { get; set; } - public List AllEmails { get; set; } - public List AlternateEmails { get; set; } - public int CreatedBy { get; set; } - public string CreatedDate { get; set; }//Todo - public string DisplayName { get; set; } - public string Email { get; set; } - public string FirstName { get; set; } - public bool HasPscs { get; set; } - public bool IsDefaultProfile { get; set; } - public int LanguagePreference { get; set; } - public string LastName { get; set; } - public string MiddleName { get; set; } - public Organization Organization { get; set; } - public string Puid { get; set; } - public int Role { get; set; } - public object RoleDisplayText { get; set; } - public int UserId { get; set; } - public int UserProfileId { get; set; } - } - - public class LcsProject - { - public string CreatedByUserName { get; set; } - public string Description { get; set; } - public int Id { get; set; } - public string Name { get; set; } - public string OrganizationName { get; set; } - public LCS.Product ProductId { get; set; } - public ProductVersionId ProductVersionId { get; set; } - public ProjectType ProjectTypeId { get; set; } - public string RequestEmailInvited { get; set; } - public bool RequestPending { get; set; } - public bool RequestSentToAlternativeEmail { get; set; } - public SolutionRequestStatus SolutionRequestStatus { get; set; } - public bool Favorite { get; set; } - public string SharepointSite { get; set; } - public string TfsProjectName { get; set; } - public string TfsServerSite { get; set; } - } - - public class Navigationlink - { - public string DisplayName { get; set; } - public string NavigationUri { get; set; } - } - - public class NetworkSecurityGroup - { - public string Name { get; set; } - public List Rules { get; set; } - } - - public class NSGRule - { - public string Expiration { get; set; }//Todo - public string IpOrCidr { get; set; } - public string Name { get; set; } - public string Service { get; set; } - } - - public class Organization - { - public string ADTenantId { get; set; } - public string Country { get; set; } - public string CountryCode { get; set; } - public string DataBoundary { get; set; } - public int ExternalId { get; set; } - public bool IsTemporary { get; set; } - public object LicenseSerialNumber { get; set; } - public string Name { get; set; } - public int OrgId { get; set; } - public string TelemetryId { get; set; } - public OrganizationType Type { get; set; } - } - - public class PackagesData - { - public int PagingType { get; set; } - public List Results { get; set; } - public int StartIndex { get; set; } - public int TotalCount { get; set; } - } - - public class Product - { - public LCS.Product ProductId { get; set; } - public string ProductName { get; set; } - public ProductVersionId ProductVersion { get; set; } - public string ProductVersionName { get; set; } - } - - public class ProjectData - { - public UserCapabilities Capabilities { get; set; } - public string CreatedDate { get; set; }//Todo - public object CurrentPhase { get; set; } - public int CurrentPhaseId { get; set; } - public string Description { get; set; } - public int Id { get; set; } - public Industry IndustryId { get; set; } - public string IndustryName { get; set; } - public int MethodologyId { get; set; } - public object MethodologyName { get; set; } - public int MethodologyStatus { get; set; } - public string Name { get; set; } - public string OrganizationName { get; set; } - public OrganizationType OrgType { get; set; } - public Product Product { get; set; } - public ProjectType ProjectTypeId { get; set; } - public bool RequestPending { get; set; } - public ProjectSettings Settings { get; set; } - } - - public class ProjectInstance - { - public List CheInstances { get; set; } - public int LcsProjectId { get; set; } - public List SaasInstances { get; set; } - } - - public class ProjectsData - { - public int PagingType { get; set; } - public List Results { get; set; } - public int StartIndex { get; set; } - public int TotalCount { get; set; } - } - - public class ProjectSettings - { - public bool IsOnPremTfsEnabled { get; set; } - public IssueStorage IssueStorageType { get; set; } - public string SharepointSite { get; set; } - public System.Guid TfsProjectId { get; set; } - public string TfsProjectName { get; set; } - public string TfsServerSite { get; set; } - } - - public class PagingParameters - { - public DynamicPaging DynamicPaging { get; set; } - public object Filtering { get; set; } - } - - public class ProjectUser - { - public bool? AllowContactByMicrosoft { get; set; } - public int? CreatedBy { get; set; } - public string CreatedDate { get; set; }//Todo - public int? FunctionalRole { get; set; } - public string FunctionalRoleDisplayText { get; set; } - public string InvitationEmail { get; set; } - public int InvitationStatus { get; set; } - public string InvitationStatusDisplayText { get; set; } - public InvitedBy InvitedBy { get; set; } - public bool IsOwner { get; set; } - public string LocalCreatedDate { get; set; } - public string LocalModifiedDate { get; set; } - public int? ModifiedBy { get; set; } - public string ModifiedDate { get; set; }//Todo - public int ProjectId { get; set; } - public int ProjectUserId { get; set; } - public int SystemRoleId { get; set; } - public string UserLastAccess { get; set; }//Todo - public UserProfile UserProfile { get; set; } - public int UserProfileId { get; set; } - public int UserRole { get; set; } - public string UserRoleDisplayText { get; set; } - public object UserRoleTypeDisplayText { get; set; } - } - - public class ProjectUsersData - { - public int PagingType { get; set; } - public List Results { get; set; } - public int StartIndex { get; set; } - public int TotalCount { get; set; } - } - - public class RDPConnectionDetails - { - public string Address { get; set; } - public string Domain { get; set; } - public string Machine { get; set; } - public string Password { get; set; } - public string Port { get; set; } - public string Username { get; set; } - } - - public class Response - { - public object ActivityId { get; set; } - public object Data { get; set; } - public int ErrorCode { get; set; } - public object ErrorList { get; set; } - public string Message { get; set; } - public string MessageTitle { get; set; } - public bool Success { get; set; } - } - - public class HostedDeploymentInstance - { - public string AzureSubscriptionId { get; set; } - public object BuildNumber { get; set; } - public object CatalogName { get; set; } - public int ConnectorId { get; set; } - public DeploymentEnvironmentType DeploymentEnvironmentType { get; set; } - public string DeploymentHealthSummary { get; set; } - public int DeploymentSkuId { get; set; } - public string DeploymentSkuType { get; set; } - public bool EnableDeleteEnvironmentDashboardButton { get; set; } - public bool EnableRefreshEnvironmentHealthStateButton { get; set; } - public string EnvironmentId { get; set; } - public string InstanceId { get; set; } - public bool IsAvailableForConfiguration { get; set; } - public bool IsDeployed { get; set; } - public bool IsDiagnosticsEnabled { get; set; } - public bool IsFreeTier1Suppressed { get; set; } - public bool IsHealthy { get; set; } - public bool IsNotConfigured { get; set; } - public bool IsTopologyLoadError { get; set; } - public bool IsTopologySignedOff { get; set; } - public bool ShowFullDetailsLink { get; set; } - public bool ShowLastUpdateReceivedDate { get; set; } - public bool ShowReconfigureOption { get; set; } - public object TopologyDisplayName { get; set; } - public object TopologyId { get; set; } - public object TopologyName { get; set; } - public object TopologyType { get; set; } - public object TopologyVersion { get; set; } - } - - public class HostedInstance - { - public List DeploymentInstances { get; set; } - public string DeploymentSkuName { get; set; } - public int DisplayOrder { get; set; } - public object TopologyName { get; set; } - } - - public class UserCapabilities - { - public bool IsDriRole { get; set; } - public bool IsDseRole { get; set; } - public bool IsEnvironmentAdmin { get; set; } - public bool IsNonMaintainUserRole { get; set; } - public bool IsNonPrivilegedDseRole { get; set; } - public bool IsPrivilegedDseRole { get; set; } - public bool IsProjectOwner { get; set; } - public int UserRole { get; set; } - public string UserRoleDisplayText { get; set; } - } - - public class UserProfile - { - public object ADOauthCode { get; set; } - public string ADUserId { get; set; } - public List AllEmails { get; set; } - public List AlternateEmails { get; set; } - public int CreatedBy { get; set; } - public string CreatedDate { get; set; }//Todo - public string DisplayName { get; set; } - public string Email { get; set; } - public string FirstName { get; set; } - public bool HasPscs { get; set; } - public bool IsDefaultProfile { get; set; } - public int LanguagePreference { get; set; } - public string LastName { get; set; } - public string MiddleName { get; set; } - public Organization Organization { get; set; } - public string Puid { get; set; } - public int Role { get; set; } - public object RoleDisplayText { get; set; } - public int UserId { get; set; } - public int UserProfileId { get; set; } - } - - public class Plan - { - public string ServicePlanName { get; set; } - public string ServicePlanId { get; set; } - public string DisplayAssignedDate { get; set; } - public string AssignedDateTime { get; set; } - public int PrepaidUnitsEnabled { get; set; } - public string PlanStatus { get; set; } - } - - public class PlanData - { - public string TenantName { get; set; } - public string TenantId { get; set; } - public List Plans { get; set; } - } - - public class UpcomingCalendarViewModels - { - public int LcsProjectId { get; set; } - public string LcsProjectName { get; set; } - public string OrganizationName { get; set; } - public string EnvironmentName { get; set; } - public int StatusEnum { get; set; } - public int EventNameEnum { get; set; } - public int CalendarId { get; set; } - public string UtcStartDateTime { get; set; } - public string EnvironmentId { get; set; } - public string Month { get; set; } - public string Date { get; set; } - public string Time { get; set; } - public int DownTimeInMinutes { get; set; } - public string EventName { get; set; } - public string Status { get; set; } - public bool IsModified { get; set; } - public int WorkflowInstanceId { get; set; } - } - - public class JITOptions - { - public string Label { get; set; } - public string Value { get; set; } - } - - public class ServiceToRestart - { - public string Label { get; set; } - public string Value { get; set; } - } - - public class ServiceRestartResponseData - { - public string ActivityId { get; set; } - public string ErrorCode { get; set; } - public object errorList { get; set; } - public bool isSuccessful { get; set; } - public string Message { get; set; } - public string MessageTitle { get; set; } - } - - public class ActionDetails - { - public string ActionStatusText { get; set; } - public string ActionType { get; set; } - public int ActionTypeId { get; set; } - public string CompletionDate { get; set; } - public int Id { get; set; } - public bool IsPostServicing { get; set; } - public string Name { get; set; } - public string PackageAssetId { get; set; } - public string PackageType { get; set; } - public int ServicingAction { get; set; } - public string StartDate { get; set; } - public LcsEnvironmentActionStatus Status { get; set; } - public string EnvironmentName { get; set; } - } - - public class EnvironmentHistoryDetailsData - { - public int PagingType { get; set; } - public List Results { get; set; } - public int StartIndex { get; set; } - public int TotalCount { get; set; } - } - - public class ValidateSandboxServicingData - { - public string PlatformRelease { get; set; } - public string ApplicationRelease { get; set; } - } - - public class EnvironmentCDSDetails - { - public string AdditionalInfoMessage { get; set; } - public object AdditionalResourceLinks { get; set; } - public bool AllowCDSResume { get; set; } - public bool AllowDualWriteSetup { get; set; } - public bool AllowNewCDSConfiguration { get; set; } - public string CDSEnvironmentId { get; set; } - public object CdsInfoMisMatchMessage { get; set; } - public object CdsInfoMissingOnNonCHEMessage { get; set; } - public string CDSInstanceName { get; set; } - public string CDSInstanceUri { get; set; } - public object CurrentConfigurationState { get; set; } - public object DisplayErrorMessage { get; set; } - public bool IsCDSInstanceConfigured { get; set; } - public bool ShowCdsInfoMisMatchMessage { get; set; } - public bool ShowCdsInfoMissingOnCHEMessage { get; set; } - public bool ShowCdsInfoMissingOnNonCHEMessage { get; set; } - public bool ShowProvisioningResumedMessage { get; set; } - public bool ShowProvisioningTriggeredMessage { get; set; } - } - - public class EnvironmentNotifications - { - public object EnvironmentNotificationDetails { get; set; } - public bool ShowEnvironmentNotifications { get; set; } - } +using System.Collections.Generic; + +namespace LCS.JsonObjects +{ + + public class Asset + { + public string Id { get; set; } + public string Name { get; set; } + public string FileName { get; set; } + public string FileDescription { get; set; } + public int SizeByte { get; set; } + public int State { get; set; } + public int Scope { get; set; } + public int CommitStatus { get; set; } + public string FileLocation { get; set; } + public int FileType { get; set; } + public string ModifiedDate { get; set; } + public string CreatedDate { get; set; } + public int Version { get; set; } + public bool IsMockData { get; set; } + public string ParentFileAssetId { get; set; } + public string ArtifactId { get; set; } + } + + public class AssetData + { + public int Category { get; set; } + public int AssetKind { get; set; } + public string AssetTypeName { get; set; } + public string AssetTypePluralName { get; set; } + public string AssetTypeNameLowercase { get; set; } + public string AssetTypePluralNameLowercase { get; set; } + public string Product { get; set; } + public string ProductVersion { get; set; } + public string ComponentId { get; set; } + public bool IsImportBtnVisible { get; set; } + public bool IsSaveToMyLibraryBtnVisible { get; set; } + public List Assets { get; set; } + public bool IsEditBtnVisible { get; set; } + public bool IsDeleteBtnVisible { get; set; } + public bool IsGoldBuildBtnVisible { get; set; } + public bool IsVersionBtnVisible { get; set; } + public bool IsAddBtnVisible { get; set; } + } + + public class AssetVersion + { + public string Id { get; set; } + public string FileName { get; set; } + public string FileDescription { get; set; } + public string DisplaySize { get; set; } + public int CommitStatus { get; set; } + public int State { get; set; } + public int Scope { get; set; } + public string FileLocation { get; set; } + public int Version { get; set; } + public int FileType { get; set; } + public string CreatedByName { get; set; } + public string ModifiedByName { get; set; } + public bool IsGoldBuild { get; set; } + public string DataPackageApplicationDetails { get; set; } + public int ValidationStatus { get; set; } + public string AadTenantId { get; set; } + public string ValidationStatusText { get; set; } + public string NextValidationDate { get; set; } + public int NumValidationAttempts { get; set; } + public int NumTenantTaggingAttempts { get; set; } + public string ReleaseDetailsAssetId { get; set; } + public bool IsMockData { get; set; } + public string ReleaseDetailsLink { get; set; } + public string ParentAssetId { get; set; } + public bool IsInvalid { get; set; } + public string DisplayValidationSymbol { get; set; } + public string DisplayModifiedDate { get; set; } + public string DisplayCreatedDate { get; set; } + public string DisplayId { get; set; } + public string Name { get; set; } + public string Description { get; set; } + public string DisplayScope { get; set; } + public string DisplayState { get; set; } + public string Location { get; set; } + public bool IsAbsoluteLocation { get; set; } + public bool CanDelete { get; set; } + public bool CanUpdate { get; set; } + public bool CanPublish { get; set; } + public bool CanNavigate { get; set; } + public string DisplayVersion { get; set; } + public int OriginalScope { get; set; } + public string TelemetryId { get; set; } + public int CreatedBy { get; set; } + public string CreatedDate { get; set; } + public int ModifiedBy { get; set; } + public string ModifiedDate { get; set; } + public string LocalCreatedDate { get; set; } + public string LocalModifiedDate { get; set; } + } + + + public class BuildInfoDetails + { + public List BuildInfoTreeView { get; set; } + public string BuildVersion { get; set; } + public string InstalledPlatformBuild { get; set; } + } + + public class BuildInfoEnvironment + { + public string Label { get; set; } + public int Value { get; set; } + } + + public class BuildInfoTreeView + { + public string Description { get; set; } + public string Id { get; set; } + public string InstallationInfoType { get; set; } + public string InstalledDate { get; set; }//Todo + public string Layer { get; set; } + public string ModelName { get; set; } + public string ModuleName { get; set; } + public string ParentId { get; set; } + public string Version { get; set; } + } + + public class CloudHostedInstance + { + public string ActivityId { get; set; } + public string AzureSubscriptionId { get; set; } + public string BuildInfo { get; set; } + public string BuildNumber { get; set; } + public bool CanApplyUpdatesToUpgradeEnvironment { get; set; } + public bool CanCleanup { get; set; } + public bool CanDeallocate { get; set; } + public bool CanDelete { get; set; } + public bool CanDeleteCheMetadata { get; set; } + public bool CanDseCreateStaging { get; set; } + public bool CanEdit { get; set; } + public bool CanEnableDR { get; set; } + public bool CanFailback { get; set; } + public bool CanFailover { get; set; } + public bool CanMarkUpgradeComplete { get; set; } + public bool CanRestart { get; set; } + public bool CanRollbackUpgradeEnvironment { get; set; } + public bool CanShowAzureConnector { get; set; } + public bool CanShowLoginButton { get; set; } + public bool CanShowNavigationLinks { get; set; } + public bool CanShowRdp { get; set; } + public bool CanShowSqlEnableAccess { get; set; } + public bool CanShowStagingEnvironmentId { get; set; } + public bool CanShowTrialLink { get; set; } + public bool CanStart { get; set; } + public bool CanStop { get; set; } + public bool CanUpgradeEnvironmentDatabase { get; set; } + public string CatalogName { get; set; } + public object ClientInstances { get; set; } + public string[] CloudServiceNames { get; set; } + public string CloudStorageLocation { get; set; } + public string CloudStorageLocationLabel { get; set; } + public string ConnectorId { get; set; } + public string ConnectorName { get; set; } + public Credentials[] ContosoCredentials { get; set; } + public string CurrentApplicationBuildVersion { get; set; } + public string CurrentApplicationReleaseName { get; set; } + public string CurrentPlatformReleaseName { get; set; } + public string CurrentPlatformVersion { get; set; } + public string DeployedBy { get; set; } + public string DeployedOn { get; set; }//Todo + public string DeploymentAction { get; set; } + public int DeploymentErrorCode { get; set; } + public string DeploymentId { get; set; } + public DeploymentState DeploymentState { get; set; } + public string DeploymentStatus { get; set; } + public object DevOpsDetails { get; set; } + public string DevTestEnvironmentType { get; set; } + public string DisasterRecoveryLocation { get; set; } + public string DisasterRecoveryLocationLabel { get; set; } + public string DisplayName { get; set; } + public string EnvironmentAdmin { get; set; } + public EnvironmentCDSDetails EnvironmentCDSDetails { get; set; } + public string EnvironmentId { get; set; } + public string EnvironmentName { get; set; } + public EnvironmentNotifications EnvironmentNotifications { get; set; } + public object Errors { get; set; } + public bool HasStagingEnvironment { get; set; } + public string InstanceId { get; set; } + public Instance[] Instances { get; set; } + public DeploymentAction InternalDeploymentAction { get; set; } + public DeploymentStatus InternalDeploymentStatus { get; set; } + public bool IsARMTopology { get; set; } + public bool IsDiagnosticsEnabledEnvironment { get; set; } + public bool IsEnableMaintenanceMode { get; set; } + public bool IsGuidelinesLinkVisible { get; set; } + public bool IsHistoryVisible { get; set; } + public bool IsInitialDeploymentState { get; set; } + public bool IsMaintainVisible { get; set; } + public bool IsManualUpgradeInProgress { get; set; } + public bool IsNotificationListVisible { get; set; } + public bool IsPreparationFailed { get; set; } + public bool IsSandboxUpgradeEnvironment { get; set; } + public bool IsStagingDeploymentFailed { get; set; } + public bool IsStagingDeploymentSucceeded { get; set; } + public bool IsUpgradeSelfServeCancelledOrCompleted { get; set; } + public bool IsUpgradeSelfServeInProgress { get; set; } + public bool IsUpgradeTimeExpired { get; set; } + public string JITDetailsText { get; set; } + public string JITErrorText { get; set; } + public JITOptions[] JITOptions { get; set; } + public string JITOptionsText { get; set; } + public bool JITRequestAccessEnabledState { get; set; } + public object JITRequestActivityId { get; set; } + public string LicenseLink { get; set; } + public Credentials[] LocalCredentials { get; set; } + public object Location { get; set; } + public object LogOnDetails { get; set; } + public Navigationlink[] NavigationLinks { get; set; } + public string ProductName { get; set; } + public string ProductRegisteredName { get; set; } + public object RdsFarmAccessRdp { get; set; } + public object RdsWebAccessCertificate { get; set; } + public object RdsWebAccessLink { get; set; } + public RefinedEnvironmentType RefinedEnvironmentType { get; set; } + public string ResourceGroupName { get; set; } + public SaasEnvironmentType SaasEnvironmentType { get; set; } + public object ServiceIds { get; set; } + public bool ShowJITExpiryWithReasonForAccess { get; set; } + public bool ShowRetailComponents { get; set; } + public bool ShowSslCertRotateWarning { get; set; } + public bool ShowUpgradeEnvironmentDetails { get; set; } + public Credentials[] SqlAzureCredentials { get; set; } + public System.Guid StagingActivityId { get; set; } + public string StagingDeployedBy { get; set; } + public string StagingDeployedOn { get; set; }//Todo + public string StagingEnvironmentAdministrator { get; set; } + public string StagingEnvironmentId { get; set; } + public string StagingPrimaryRegion { get; set; } + public string StagingSecondaryRegion { get; set; } + public string StagingTargetVersion { get; set; } + public string TimeForUpgradeText { get; set; } + public string TopologyDescription { get; set; } + public string TopologyDisplayName { get; set; } + public string TopologyId { get; set; } + public string TopologyName { get; set; } + public string TopologyType { get; set; } + public string TopologyVersion { get; set; } + public UpgradeEnvironmentStatus UpgradeEnvironmentStatus { get; set; } + public int VirtualMachineCount { get; set; } + public object Warnings { get; set; } + } + + public class Credentials + { + public string CredentialInfoKey { get; set; } + public string DeploymentItemName { get; set; } + public string InstanceName { get; set; } + public bool IsCredentialKeyVaultUri { get; set; } + public bool IsPasswordExpired { get; set; } + public string Password { get; set; } + public string PasswordExpiryTime { get; set; } + public object ReasonForAccess { get; set; } + public object ReasonForAccessDetails { get; set; } + public string SymbolicName { get; set; } + public string UserName { get; set; } + } + + public class CustomLink + { + public string Link { get; set; } + public string LinkLabel { get; set; } + } + + public class DeployablePackage + { + public string AppVersion { get; set; } + public string Description { get; set; } + public string EstimatedDuration { get; set; } + public int FileAssetDisplayVersion { get; set; } + public int LcsEnvironmentActionId { get; set; } + public string LcsEnvironmentId { get; set; } + public string ModifiedBy { get; set; } + public string ModifiedDate { get; set; }//Todo + public string Name { get; set; } + public string PackageId { get; set; } + public string PackageType { get; set; } + public string PlatformVersion { get; set; } + public string Publisher { get; set; } + public string Scope { get; set; } + } + + public class DynamicPaging + { + public int ItemsRequested { get; set; } + public int StartPosition { get; set; } + } + + public class ExportedInstance + { + public string BuildInfo { get; set; } + public string CurrentApplicationBuildVersion { get; set; } + public string CurrentApplicationReleaseName { get; set; } + public string CurrentPlatformReleaseName { get; set; } + public string CurrentPlatformVersion { get; set; } + public string DeploymentStatus { get; set; } + public string EnvironmentId { get; set; } + public string HostingType { get; set; } + public string InstanceName { get; set; } + public string Organization { get; set; } + public string ProjectId { get; set; } + public string ProjectName { get; set; } + public string TopologyName { get; set; } + public string TopologyType { get; set; } + public string TopologyVersion { get; set; } + } + + public class ExportedUser + { + public string Organization { get; set; } + public string ProjectId { get; set; } + public string ProjectName { get; set; } + public string UserName { get; set; } + public string Email { get; set; } + public string OrganizationName { get; set; } + public string UserRoleDisplayName { get; set; } + public string FunctionalRoleDisplayName { get; set; } + public string AllowContactByMicrosoft { get; set; } + public string InvitedByName { get; set; } + public string InvitedByOrganisation { get; set; } + public string CreatedDate { get; set; } + public string InvitationStatusDisplayText { get; set; } + } + + public class Hotfix + { + public object Area { get; set; } + public string AXVersion { get; set; } + public int BugNumber { get; set; } + public string ConfigKeys { get; set; } + public string Countries { get; set; } + public string CUInfo { get; set; } + public string DB { get; set; } + public string DeliverableType { get; set; } + public string FeatureReference { get; set; } + public object HtmlAttributes { get; set; } + public string Industries { get; set; } + public int KBNumber { get; set; } + public string Modules { get; set; } + public string PageType { get; set; } + public string Problem { get; set; } + public string ReleasedDate { get; set; }//Todo + public string SearchContext { get; set; } + public string Solution { get; set; } + public string Substatus { get; set; } + public string Title { get; set; } + public string Type { get; set; } + public string Url { get; set; } + } + + public class Instance + { + public Dictionary Credentials { get; set; } + public string DeploymentStatus { get; set; } + public string DisplayName { get; set; } + public string ItemName { get; set; } + public string Location { get; set; } + public string MachineName { get; set; } + public string RDPConnectionDetails { get; set; } + } + + public class InvitedBy + { + public object ADOauthCode { get; set; } + public string ADUserId { get; set; } + public List AllEmails { get; set; } + public List AlternateEmails { get; set; } + public int CreatedBy { get; set; } + public string CreatedDate { get; set; }//Todo + public string DisplayName { get; set; } + public string Email { get; set; } + public string FirstName { get; set; } + public bool HasPscs { get; set; } + public bool IsDefaultProfile { get; set; } + public int LanguagePreference { get; set; } + public string LastName { get; set; } + public string MiddleName { get; set; } + public Organization Organization { get; set; } + public string Puid { get; set; } + public int Role { get; set; } + public object RoleDisplayText { get; set; } + public int UserId { get; set; } + public int UserProfileId { get; set; } + } + + public class LcsProject + { + public string CreatedByUserName { get; set; } + public string Description { get; set; } + public int Id { get; set; } + public string Name { get; set; } + public string OrganizationName { get; set; } + public LCS.Product ProductId { get; set; } + public ProductVersionId ProductVersionId { get; set; } + public ProjectType ProjectTypeId { get; set; } + public string RequestEmailInvited { get; set; } + public bool RequestPending { get; set; } + public bool RequestSentToAlternativeEmail { get; set; } + public SolutionRequestStatus SolutionRequestStatus { get; set; } + public bool Favorite { get; set; } + public string SharepointSite { get; set; } + public string TfsProjectName { get; set; } + public string TfsServerSite { get; set; } + } + + public class Navigationlink + { + public string DisplayName { get; set; } + public string NavigationUri { get; set; } + } + + public class NetworkSecurityGroup + { + public string Name { get; set; } + public List Rules { get; set; } + } + + public class NSGRule + { + public string Expiration { get; set; }//Todo + public string IpOrCidr { get; set; } + public string Name { get; set; } + public string Service { get; set; } + } + + public class Organization + { + public string ADTenantId { get; set; } + public string Country { get; set; } + public string CountryCode { get; set; } + public string DataBoundary { get; set; } + public int ExternalId { get; set; } + public bool IsTemporary { get; set; } + public object LicenseSerialNumber { get; set; } + public string Name { get; set; } + public int OrgId { get; set; } + public string TelemetryId { get; set; } + public OrganizationType Type { get; set; } + } + + public class PackagesData + { + public int PagingType { get; set; } + public List Results { get; set; } + public int StartIndex { get; set; } + public int TotalCount { get; set; } + } + + public class Product + { + public LCS.Product ProductId { get; set; } + public string ProductName { get; set; } + public ProductVersionId ProductVersion { get; set; } + public string ProductVersionName { get; set; } + } + + public class ProjectData + { + public UserCapabilities Capabilities { get; set; } + public string CreatedDate { get; set; }//Todo + public object CurrentPhase { get; set; } + public int CurrentPhaseId { get; set; } + public string Description { get; set; } + public int Id { get; set; } + public Industry IndustryId { get; set; } + public string IndustryName { get; set; } + public int MethodologyId { get; set; } + public object MethodologyName { get; set; } + public int MethodologyStatus { get; set; } + public string Name { get; set; } + public string OrganizationName { get; set; } + public OrganizationType OrgType { get; set; } + public Product Product { get; set; } + public ProjectType ProjectTypeId { get; set; } + public bool RequestPending { get; set; } + public ProjectSettings Settings { get; set; } + } + + public class ProjectInstance + { + public List CheInstances { get; set; } + public int LcsProjectId { get; set; } + public List SaasInstances { get; set; } + } + + public class ProjectsData + { + public int PagingType { get; set; } + public List Results { get; set; } + public int StartIndex { get; set; } + public int TotalCount { get; set; } + } + + public class ProjectSettings + { + public bool IsOnPremTfsEnabled { get; set; } + public IssueStorage IssueStorageType { get; set; } + public string SharepointSite { get; set; } + public System.Guid TfsProjectId { get; set; } + public string TfsProjectName { get; set; } + public string TfsServerSite { get; set; } + } + + public class PagingParameters + { + public DynamicPaging DynamicPaging { get; set; } + public object Filtering { get; set; } + } + + public class ProjectUser + { + public bool? AllowContactByMicrosoft { get; set; } + public int? CreatedBy { get; set; } + public string CreatedDate { get; set; }//Todo + public int? FunctionalRole { get; set; } + public string FunctionalRoleDisplayText { get; set; } + public string InvitationEmail { get; set; } + public int InvitationStatus { get; set; } + public string InvitationStatusDisplayText { get; set; } + public InvitedBy InvitedBy { get; set; } + public bool IsOwner { get; set; } + public string LocalCreatedDate { get; set; } + public string LocalModifiedDate { get; set; } + public int? ModifiedBy { get; set; } + public string ModifiedDate { get; set; }//Todo + public int ProjectId { get; set; } + public int ProjectUserId { get; set; } + public int SystemRoleId { get; set; } + public string UserLastAccess { get; set; }//Todo + public UserProfile UserProfile { get; set; } + public int UserProfileId { get; set; } + public int UserRole { get; set; } + public string UserRoleDisplayText { get; set; } + public object UserRoleTypeDisplayText { get; set; } + } + + public class ProjectUsersData + { + public int PagingType { get; set; } + public List Results { get; set; } + public int StartIndex { get; set; } + public int TotalCount { get; set; } + } + + public class RDPConnectionDetails + { + public string Address { get; set; } + public string Domain { get; set; } + public string Machine { get; set; } + public string Password { get; set; } + public string Port { get; set; } + public string Username { get; set; } + } + + public class Response + { + public object ActivityId { get; set; } + public object Data { get; set; } + public int ErrorCode { get; set; } + public object ErrorList { get; set; } + public string Message { get; set; } + public string MessageTitle { get; set; } + public bool Success { get; set; } + } + + public class HostedDeploymentInstance + { + public string AzureSubscriptionId { get; set; } + public object BuildNumber { get; set; } + public object CatalogName { get; set; } + public int ConnectorId { get; set; } + public DeploymentEnvironmentType DeploymentEnvironmentType { get; set; } + public string DeploymentHealthSummary { get; set; } + public int DeploymentSkuId { get; set; } + public string DeploymentSkuType { get; set; } + public bool EnableDeleteEnvironmentDashboardButton { get; set; } + public bool EnableRefreshEnvironmentHealthStateButton { get; set; } + public string EnvironmentId { get; set; } + public string InstanceId { get; set; } + public bool IsAvailableForConfiguration { get; set; } + public bool IsDeployed { get; set; } + public bool IsDiagnosticsEnabled { get; set; } + public bool IsFreeTier1Suppressed { get; set; } + public bool IsHealthy { get; set; } + public bool IsNotConfigured { get; set; } + public bool IsTopologyLoadError { get; set; } + public bool IsTopologySignedOff { get; set; } + public bool ShowFullDetailsLink { get; set; } + public bool ShowLastUpdateReceivedDate { get; set; } + public bool ShowReconfigureOption { get; set; } + public object TopologyDisplayName { get; set; } + public object TopologyId { get; set; } + public object TopologyName { get; set; } + public object TopologyType { get; set; } + public object TopologyVersion { get; set; } + } + + public class HostedInstance + { + public List DeploymentInstances { get; set; } + public string DeploymentSkuName { get; set; } + public int DisplayOrder { get; set; } + public object TopologyName { get; set; } + } + + public class UserCapabilities + { + public bool IsDriRole { get; set; } + public bool IsDseRole { get; set; } + public bool IsEnvironmentAdmin { get; set; } + public bool IsNonMaintainUserRole { get; set; } + public bool IsNonPrivilegedDseRole { get; set; } + public bool IsPrivilegedDseRole { get; set; } + public bool IsProjectOwner { get; set; } + public int UserRole { get; set; } + public string UserRoleDisplayText { get; set; } + } + + public class UserProfile + { + public object ADOauthCode { get; set; } + public string ADUserId { get; set; } + public List AllEmails { get; set; } + public List AlternateEmails { get; set; } + public int CreatedBy { get; set; } + public string CreatedDate { get; set; }//Todo + public string DisplayName { get; set; } + public string Email { get; set; } + public string FirstName { get; set; } + public bool HasPscs { get; set; } + public bool IsDefaultProfile { get; set; } + public int LanguagePreference { get; set; } + public string LastName { get; set; } + public string MiddleName { get; set; } + public Organization Organization { get; set; } + public string Puid { get; set; } + public int Role { get; set; } + public object RoleDisplayText { get; set; } + public int UserId { get; set; } + public int UserProfileId { get; set; } + } + + public class Plan + { + public string ServicePlanName { get; set; } + public string ServicePlanId { get; set; } + public string DisplayAssignedDate { get; set; } + public string AssignedDateTime { get; set; } + public int PrepaidUnitsEnabled { get; set; } + public string PlanStatus { get; set; } + } + + public class PlanData + { + public string TenantName { get; set; } + public string TenantId { get; set; } + public List Plans { get; set; } + } + + public class UpcomingCalendarViewModels + { + public int LcsProjectId { get; set; } + public string LcsProjectName { get; set; } + public string OrganizationName { get; set; } + public string EnvironmentName { get; set; } + public int StatusEnum { get; set; } + public int EventNameEnum { get; set; } + public int CalendarId { get; set; } + public string UtcStartDateTime { get; set; } + public string EnvironmentId { get; set; } + public string Month { get; set; } + public string Date { get; set; } + public string Time { get; set; } + public int DownTimeInMinutes { get; set; } + public string EventName { get; set; } + public string Status { get; set; } + public bool IsModified { get; set; } + public int WorkflowInstanceId { get; set; } + } + + public class JITOptions + { + public string Label { get; set; } + public string Value { get; set; } + } + + public class ServiceToRestart + { + public string Label { get; set; } + public string Value { get; set; } + } + + public class ServiceRestartResponseData + { + public string ActivityId { get; set; } + public string ErrorCode { get; set; } + public object errorList { get; set; } + public bool isSuccessful { get; set; } + public string Message { get; set; } + public string MessageTitle { get; set; } + } + + public class ActionDetails + { + public string ActionStatusText { get; set; } + public string ActionType { get; set; } + public int ActionTypeId { get; set; } + public string CompletionDate { get; set; } + public int Id { get; set; } + public bool IsPostServicing { get; set; } + public string Name { get; set; } + public string PackageAssetId { get; set; } + public string PackageType { get; set; } + public int ServicingAction { get; set; } + public string StartDate { get; set; } + public LcsEnvironmentActionStatus Status { get; set; } + public string EnvironmentName { get; set; } + } + + public class EnvironmentHistoryDetailsData + { + public int PagingType { get; set; } + public List Results { get; set; } + public int StartIndex { get; set; } + public int TotalCount { get; set; } + } + + public class ValidateSandboxServicingData + { + public string PlatformRelease { get; set; } + public string ApplicationRelease { get; set; } + } + + public class EnvironmentCDSDetails + { + public string AdditionalInfoMessage { get; set; } + public object AdditionalResourceLinks { get; set; } + public bool AllowCDSResume { get; set; } + public bool AllowDualWriteSetup { get; set; } + public bool AllowNewCDSConfiguration { get; set; } + public string CDSEnvironmentId { get; set; } + public object CdsInfoMisMatchMessage { get; set; } + public object CdsInfoMissingOnNonCHEMessage { get; set; } + public string CDSInstanceName { get; set; } + public string CDSInstanceUri { get; set; } + public object CurrentConfigurationState { get; set; } + public object DisplayErrorMessage { get; set; } + public bool IsCDSInstanceConfigured { get; set; } + public bool ShowCdsInfoMisMatchMessage { get; set; } + public bool ShowCdsInfoMissingOnCHEMessage { get; set; } + public bool ShowCdsInfoMissingOnNonCHEMessage { get; set; } + public bool ShowProvisioningResumedMessage { get; set; } + public bool ShowProvisioningTriggeredMessage { get; set; } + } + + public class EnvironmentNotifications + { + public object EnvironmentNotificationDetails { get; set; } + public bool ShowEnvironmentNotifications { get; set; } + } } \ No newline at end of file From 5427317f2bccacd4ba7b0e242f5256d1f0c78ab2 Mon Sep 17 00:00:00 2001 From: Florian Hopfner Date: Sun, 28 Jan 2024 19:01:01 +0100 Subject: [PATCH 03/15] Expose HttpClient for extensions --- 2LCS/HttpClientHelper.cs | 1827 +++++++++++++++++++------------------- 1 file changed, 920 insertions(+), 907 deletions(-) diff --git a/2LCS/HttpClientHelper.cs b/2LCS/HttpClientHelper.cs index 744b6fb..c6a4c4d 100644 --- a/2LCS/HttpClientHelper.cs +++ b/2LCS/HttpClientHelper.cs @@ -1,907 +1,920 @@ -using HtmlAgilityPack; -using LCS.Cache; -using LCS.JsonObjects; -using LCS.Utils; -using Newtonsoft.Json; -using Newtonsoft.Json.Linq; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net; -using System.Net.Http; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading.Tasks; - -namespace LCS -{ - internal sealed class HttpClientHelper : IDisposable - { - private readonly HttpClient _httpClient; - private bool _disposed; - private StringContent _stringContent; - - internal HttpClientHelper(CookieContainer cookieContainer) - { - //Use Tls1.2 as default transport layer - ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; - - CookieContainer = cookieContainer; - var httpClientHandler = new HttpClientHandler - { - CookieContainer = CookieContainer, - AllowAutoRedirect = true, - UseCookies = true, - AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate - }; - - _httpClient = new HttpClient(httpClientHandler) - { - Timeout = TimeSpan.FromMinutes(5) - }; - - _httpClient.DefaultRequestHeaders.Add("Accept", "*/*"); - _httpClient.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate, br"); - _httpClient.DefaultRequestHeaders.Add("Accept-Language", "en-US,en;q=0.9"); - _httpClient.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3872.0 Safari/537.36 Edg/78.0.244.0"); - _httpClient.DefaultRequestHeaders.Add("X-Requested-With", "XMLHttpRequest"); - _httpClient.DefaultRequestHeaders.Add("cache-control", "no-cache"); - _httpClient.DefaultRequestHeaders.Add("TimezoneOffset", GetTimeZoneOffsetInMinutes()); - } - - public CookieContainer CookieContainer { get; } - public string LcsDiagUrl { get; set; } - public string LcsProjectId { get; set; } - public string LcsUpdateUrl { get; set; } - public string LcsUrl { get; set; } - public ProjectType LcsProjectTypeId { get; set; } - - public void ChangeLcsProjectId(string value) - { - LcsProjectId = value; - var cookiesLcs = CookieContainer.GetCookies(new Uri(LcsUrl)); - var cookiesUpdateLcs = CookieContainer.GetCookies(new Uri(LcsUpdateUrl)); - foreach (Cookie cookie in cookiesLcs) - { - if (cookie.Name == "lcspid") - { - cookie.Expired = true; - } - } - foreach (Cookie cookie in cookiesUpdateLcs) - { - if (cookie.Name == "lcspid") - { - cookie.Expired = true; - } - } - - if (string.IsNullOrEmpty(LcsProjectId)) return; - CookieContainer.Add(new Uri(LcsUrl), new Cookie("lcspid", LcsProjectId)); - CookieContainer.Add(new Uri(LcsUpdateUrl), new Cookie("lcspid", LcsProjectId)); - Properties.Settings.Default.cookie = CookieContainer.GetCookieHeader(new Uri(LcsUrl)).Replace(';', ','); - Properties.Settings.Default.Save(); - } - - /// - /// Dispose - /// - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - - public string GetEnvironmentDetailsUrl(CloudHostedInstance instance) - { - return $"{LcsUrl}/V2/EnvironmentDetailsV3New/{LcsProjectId}?EnvironmentId={instance.EnvironmentId}&IsDiagnosticsEnabledEnvironment={instance.IsDiagnosticsEnabledEnvironment}"; - } - - public void SetRequestVerificationToken(string url) - { - if (!_httpClient.DefaultRequestHeaders.Contains("__RequestVerificationToken")) - { - var getResponse = _httpClient.GetAsync(url).Result; - getResponse.EnsureSuccessStatusCode(); - var html = getResponse.Content.ReadAsStringAsync().Result; - HtmlDocument doc = new HtmlDocument(); - doc.LoadHtml(html); - var node = doc.DocumentNode.SelectSingleNode("//input[@name='__RequestVerificationToken']"); - if (node == null) return; - var token = node.Attributes["value"].Value; - _httpClient.DefaultRequestHeaders.Add("__RequestVerificationToken", token); - } - } - - internal async Task AddNsgRule(CloudHostedInstance instance, string ruleName, string ipOrCidr) - { - string parameters, url; - if(GetDeploymentEnvironmentTypeInfo(instance.EnvironmentId) == DeploymentEnvironmentType.MicrosoftManagedServiceFabric) - { - parameters = $"lcsEnvironmentId={instance.EnvironmentId}&newRuleName={ruleName}&newRuleIpOrCidr={ipOrCidr}&newRuleService=AzureSQL"; - url = $"{LcsUrl}/EnvironmentServicingV2/SFAddNetworkSecurityRule/{LcsProjectId}"; - } - else - { - parameters = $"lcsEnvironmentId={instance.EnvironmentId}&newRuleName={ruleName}&newRuleIpOrCidr={ipOrCidr}&newRuleService=RDP"; - url = $"{LcsUrl}/Environment/AddNetworkSecurityRule/{LcsProjectId}"; - } - using (_stringContent = new StringContent(parameters, Encoding.UTF8, "application/x-www-form-urlencoded")) - { - SetRequestVerificationToken($"{LcsUrl}/V2"); - var result = await _httpClient.PostAsync(url, _stringContent); - result.EnsureSuccessStatusCode(); - var responseBody = result.Content.ReadAsStringAsync().Result; - var response = JsonConvert.DeserializeObject(responseBody); - return response.Success; - } - } - - internal string ApplyPackage(CloudHostedInstance instance, DeployablePackage package) - { - StringBuilder log = new StringBuilder(); - package.LcsEnvironmentId = instance.EnvironmentId; - var validationResponse = ValidateSandboxServicing(package); - - if (validationResponse.Success && !string.IsNullOrEmpty(validationResponse.Data.ToString())) - { - string platformRelease; - try - { - var releaseVersion = JsonConvert.DeserializeObject(validationResponse.Data.ToString()); - platformRelease = releaseVersion.PlatformRelease; - } - catch - { - platformRelease = validationResponse.Data.ToString(); - } - log.AppendLine($"{instance.DisplayName}: Package deployment validation successful."); - var deploymentResponse = StartSandboxServicing(package, platformRelease); - log.AppendLine($"{instance.DisplayName}: {deploymentResponse.Message}"); - log.AppendLine(); - } - else - { - log.AppendLine($"{instance.DisplayName}: Package deployment validation failed."); - log.AppendLine($"{instance.DisplayName}: {validationResponse.Message}"); - log.AppendLine(); - } - return log.ToString(); - } - - internal async Task DeleteEnvironment(CloudHostedInstance instance) - { - var parameters = $"delete=&ActivityId={instance.ActivityId}&ProductName={WebUtility.UrlEncode(instance.ProductName)}&TopologyName={instance.TopologyName}&TopologyInstanceId={instance.InstanceId}&AzureSubscriptionId={instance.AzureSubscriptionId}&EnvironmentGroup=0&EnvironmentId={instance.EnvironmentId}&PreserveCustomerSignOff=false"; - using (_stringContent = new StringContent(parameters, Encoding.UTF8, "application/x-www-form-urlencoded")) - { - SetRequestVerificationToken($"{LcsUrl}/V2"); - var result = await _httpClient.PostAsync($"{LcsUrl}/Environment/DeleteEnvironment/{LcsProjectId}", _stringContent); - result.EnsureSuccessStatusCode(); - var responseBody = result.Content.ReadAsStringAsync().Result; - var response = JsonConvert.DeserializeObject(responseBody); - return response.Success; - } - } - - internal async Task DeleteNsgRule(CloudHostedInstance instance, string rule) - { - string url; - if(GetDeploymentEnvironmentTypeInfo(instance.EnvironmentId) == DeploymentEnvironmentType.MicrosoftManagedServiceFabric) - { - url = $"{LcsUrl}/EnvironmentServicingV2/SFDeleteNetworkSecurityRules/{LcsProjectId}"; - } - else - { - url = $"{LcsUrl}/Environment/DeleteNetworkSecurityRules/{LcsProjectId}"; - } - var parameters = $"lcsEnvironmentId={instance.EnvironmentId}&rulesToDelete%5B%5D={rule}"; - using (_stringContent = new StringContent(parameters, Encoding.UTF8, "application/x-www-form-urlencoded")) - { - SetRequestVerificationToken($"{LcsUrl}/V2"); - var result = await _httpClient.PostAsync(url, _stringContent); - result.EnsureSuccessStatusCode(); - var responseBody = result.Content.ReadAsStringAsync().Result; - var response = JsonConvert.DeserializeObject(responseBody); - if (response.Success) - { - return $"Successfully deleted firewall rule {rule} for instance {instance.DisplayName}"; - } - else - { - return $"Could not delete firewall rule {rule} for instance {instance.DisplayName}"; - } - } - } - - internal async Task> GetAllProjectsAsync() - { - const int numberOfProjectsRequested = 50; - int numberOfProjectReturned; - var allProjects = new List(); - var pageNumber = 0; - SetRequestVerificationToken($"{LcsUrl}/V2"); - do - { - pageNumber++; - var pagingParams = new PagingParameters() - { - DynamicPaging = new DynamicPaging() - { - StartPosition = pageNumber * numberOfProjectsRequested - numberOfProjectsRequested, - ItemsRequested = numberOfProjectsRequested - } - }; - var pagingParamsJson = JsonConvert.SerializeObject(pagingParams, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto }); - - using (_stringContent = new StringContent(pagingParamsJson, Encoding.UTF8, "application/json")) - { - var result = await _httpClient.PostAsync($"{LcsUrl}/RainierProject/AllProjectsList", _stringContent); - result.EnsureSuccessStatusCode(); - - var responseBody = await result.Content.ReadAsStringAsync(); - var response = JsonConvert.DeserializeObject(responseBody); - if (response.Success && response.Data != null) - { - var projects = JsonConvert.DeserializeObject(response.Data.ToString()).Results; - numberOfProjectReturned = projects.Count; - allProjects.AddRange(projects); - } - else - { - numberOfProjectReturned = 0; - } - } - } - while (numberOfProjectReturned == numberOfProjectsRequested); - return allProjects; - } - - internal List GetAllProjectUsers() - { - const int numberOfUsersRequested = 50; - int numberOfUsersReturned; - var allUsers = new List(); - var pageNumber = 0; - SetRequestVerificationToken($"{LcsUrl}/V2"); - do - { - pageNumber++; - var pagingParams = new PagingParameters() - { - DynamicPaging = new DynamicPaging() - { - StartPosition = pageNumber * numberOfUsersRequested - numberOfUsersRequested, - ItemsRequested = numberOfUsersRequested - } - }; - var pagingParamsJson = JsonConvert.SerializeObject(pagingParams, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto }); - - using (_stringContent = new StringContent(pagingParamsJson, Encoding.UTF8, "application/json")) - { - var result = _httpClient.PostAsync($"{LcsUrl}/RainierProjectUser/RetrieveProjectUsers/{LcsProjectId}", _stringContent).Result; - result.EnsureSuccessStatusCode(); - - var responseBody = result.Content.ReadAsStringAsync().Result; - var response = JsonConvert.DeserializeObject(responseBody); - if (response.Success && response.Data != null) - { - var users = JsonConvert.DeserializeObject(response.Data.ToString()).Results; - numberOfUsersReturned = users.Count; - allUsers.AddRange(users); - } - else - { - numberOfUsersReturned = 0; - } - } - } - while (numberOfUsersReturned == numberOfUsersRequested); - return allUsers; - } - - internal List GetAvailableHotfixes(string envId, int hotfixesType) - { - try - { - var result = _httpClient.GetAsync($"{LcsUpdateUrl}/cloudupdate/Results/{LcsProjectId}?query=&countries=&industries=&configKeys=&modules=&e={envId}&page=&t={hotfixesType}&_={DateTimeOffset.Now.ToUnixTimeSeconds()}").Result; - result.EnsureSuccessStatusCode(); - var responseBody = result.Content.ReadAsStringAsync().Result; - var response = JsonConvert.DeserializeObject(responseBody); - if (!response.Success || response.Data == null) return null; - var jObject = JObject.Parse(response.Data.ToString()); - var allResults = jObject.SelectToken("AllResults"); - var kbs = JsonConvert.DeserializeObject>(allResults.ToString()); - foreach (var kb in kbs) - { - kb.Url = $"{URIHandler.LCS_FIX_URL}/Issue/Details/{LcsProjectId}?kb={kb.KBNumber}&bugId={kb.BugNumber}"; - kb.Solution = RemoveUnwantedTags(kb.Solution); - kb.Title = RemoveUnwantedTags(kb.Title); - } - return kbs; - } - catch - { - return null; - } - } - - internal int GetBuildInfoEnvironmentId(CloudHostedInstance instance) - { - var result = _httpClient.GetAsync(GetEnvironmentBuildInfoIdUrl(instance)).Result; - result.EnsureSuccessStatusCode(); - var responseBody = result.Content.ReadAsStringAsync().Result; - var environments = JsonConvert.DeserializeObject>(responseBody); - if (environments != null && environments.Count > 0) - { - return environments.First().Value; - } - else - { - return 0; - } - } - - internal async Task> GetCheInstancesAsync() - { - var result = await _httpClient.GetAsync($"{LcsUrl}/DeploymentPortal/GetDeployementDetails/{LcsProjectId}?_={DateTimeOffset.Now.ToUnixTimeSeconds()}"); - var list = new List(); - if (!result.IsSuccessStatusCode) return list; - result.EnsureSuccessStatusCode(); - - var responseBody = await result.Content.ReadAsStringAsync(); - responseBody = responseBody.TrimStart('('); - responseBody = responseBody.TrimEnd(')'); - - try - { - var cloudHostedInstancesUnsorted = JsonConvert.DeserializeObject>(responseBody); - if (cloudHostedInstancesUnsorted != null) - { - list.AddRange(cloudHostedInstancesUnsorted.Values.OrderBy(x => x.InstanceId)); - } - } - catch - { - return list; - } - return list; - } - - internal async Task> GetCheInstancesV2Async() - { - var result = await _httpClient.GetAsync($"{LcsUrl}/DeploymentPortal/GetAllCheDeploymentsMetadata/{LcsProjectId}?filterBy=null&filterValue=null&?_={DateTimeOffset.Now.ToUnixTimeSeconds()}"); - result.EnsureSuccessStatusCode(); - - var responseBody = await result.Content.ReadAsStringAsync(); - var response = JsonConvert.DeserializeObject(responseBody); - - var list = new List(); - if (response.Success) - { - if (response.Data == null) return list; - - var settings = new JsonSerializerSettings - { - NullValueHandling = NullValueHandling.Ignore, - MissingMemberHandling = MissingMemberHandling.Ignore - }; - var cloudHostedInstancesUnsorted = JsonConvert.DeserializeObject>(response.Data.ToString(), settings); - if (cloudHostedInstancesUnsorted != null) - { - list.AddRange(cloudHostedInstancesUnsorted.Values.OrderBy(x => x.InstanceId)); - } - return list; - } - return list; - } - - internal Dictionary GetCredentials(string environmentId, string itemName) - { - Dictionary credentialsDic; - - if (CacheUtil.IsCachingEnabled()) - { - credentialsDic = CredentialsCacheHelper.GetCredentialsCache(environmentId); - - if (credentialsDic != null) - return credentialsDic; - } - - var result = _httpClient.GetAsync($"{LcsUrl}/DeploymentPortal/GetCredentials/{LcsProjectId}?environmentId={environmentId}&deploymentItemName={itemName}&_={DateTimeOffset.Now.ToUnixTimeSeconds()}").Result; - result.EnsureSuccessStatusCode(); - var responseBody = result.Content.ReadAsStringAsync().Result; - var response = JsonConvert.DeserializeObject(responseBody); - - if (response.Success && response.Data != null) - { - credentialsDic = JsonConvert.DeserializeObject>(response.Data.ToString()); - - if (CacheUtil.IsCachingEnabled()) - CredentialsCacheHelper.AddCredentialsCache(environmentId, credentialsDic); - - return credentialsDic; - } - - return null; - } - - internal string GetDiagEnvironmentId(CloudHostedInstance instance) - { - var result = _httpClient.GetAsync($"{LcsUrl}/Environment/GetDiagEnvironmentId/{LcsProjectId}?environmentId={instance.EnvironmentId}&_={DateTimeOffset.Now.ToUnixTimeSeconds()}").Result; - result.EnsureSuccessStatusCode(); - var responseBody = result.Content.ReadAsStringAsync().Result; - var response = JsonConvert.DeserializeObject(responseBody); - return response.Success && response.Data != null ? response.Data.ToString() : null; - } - - internal BuildInfoDetails GetEnvironmentBuildInfoDetails(CloudHostedInstance instance, string environmentId) - { - var result = _httpClient.GetAsync(GetEnvironmentBuildInfoDetailsUrl(instance, environmentId.ToString())).Result; - result.EnsureSuccessStatusCode(); - var responseBody = result.Content.ReadAsStringAsync().Result; - var response = JsonConvert.DeserializeObject(responseBody); - if (response != null) - { - response.BuildInfoTreeView.RemoveAll(x => x.ParentId == null); - } - return response; - } - - internal string GetEnvironmentBuildInfoDetailsUrl(CloudHostedInstance instance, string environmentId) - { - return $"{LcsDiagUrl}/BuildInfo/GetEnvironmentBuildInfoDetails/{LcsProjectId}?lcsEnvironmentId={instance.EnvironmentId}&environmentId={environmentId}&_={DateTimeOffset.Now.ToUnixTimeSeconds()}"; - } - - internal string GetEnvironmentBuildInfoIdUrl(CloudHostedInstance instance) - { - return $"{LcsDiagUrl}/BuildInfo/GetEnvironments/{LcsProjectId}?lcsEnvironmentId={instance.EnvironmentId}&environmentId=0&_={DateTimeOffset.Now.ToUnixTimeSeconds()}"; - } - - internal NetworkSecurityGroup GetNetworkSecurityGroup(CloudHostedInstance instance) - { - try - { - string url; - if(GetDeploymentEnvironmentTypeInfo(instance.EnvironmentId) == DeploymentEnvironmentType.MicrosoftManagedServiceFabric) - { - url = $"{LcsUrl}/EnvironmentServicingV2/SFGetNetworkSecurityGroup/{LcsProjectId}?lcsEnvironmentId={instance.EnvironmentId}&_={DateTimeOffset.Now.ToUnixTimeSeconds()}"; - } - else - { - url = $"{LcsUrl}/Environment/GetNetworkSecurityGroup/{LcsProjectId}?lcsEnvironmentId={instance.EnvironmentId}&_={DateTimeOffset.Now.ToUnixTimeSeconds()}"; - } - - var result = _httpClient.GetAsync(url).Result; - result.EnsureSuccessStatusCode(); - var responseBody = result.Content.ReadAsStringAsync().Result; - var response = JsonConvert.DeserializeObject(responseBody); - if (!response.Success || response.Data == null) return null; - var settings = new JsonSerializerSettings - { - NullValueHandling = NullValueHandling.Ignore, - MissingMemberHandling = MissingMemberHandling.Ignore - }; - var NSG = JsonConvert.DeserializeObject(response.Data.ToString(), settings); - return NSG; - } - catch - { - return null; - } - } - - internal List GetPagedDeployablePackageList(CloudHostedInstance instance) - { - const int numberOfPackagesRequested = 50; - int numberOfPackagesReturned; - var packageList = new List(); - var pageNumber = 0; - SetRequestVerificationToken($"{LcsUrl}/V2"); - do - { - pageNumber++; - var pagingParams = new PagingParameters() - { - DynamicPaging = new DynamicPaging() - { - StartPosition = pageNumber * numberOfPackagesRequested - numberOfPackagesRequested, - ItemsRequested = numberOfPackagesRequested - } - }; - var pagingParamsJson = JsonConvert.SerializeObject(pagingParams, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto }); - - using (_stringContent = new StringContent(pagingParamsJson, Encoding.UTF8, "application/json")) - { - var result = _httpClient.PostAsync(GetPagedDeployablePackageListUrl(instance), _stringContent).Result; - result.EnsureSuccessStatusCode(); - - var responseBody = result.Content.ReadAsStringAsync().Result; - var response = JsonConvert.DeserializeObject(responseBody); - if (response.Success && response.Data != null) - { - var packages = JsonConvert.DeserializeObject(response.Data.ToString()).Results; - numberOfPackagesReturned = packages.Count; - packageList.AddRange(packages); - } - else - { - numberOfPackagesReturned = 0; - } - } - } - while (numberOfPackagesReturned == numberOfPackagesRequested); - return packageList; - } - - internal string GetPagedDeployablePackageListUrl(CloudHostedInstance instance) - { - return $"{LcsUrl}/Environment/GetPagedDeployablePackageList/{LcsProjectId}?lcsEnvironmentActionId=2&lcsEnvironmentId={instance.EnvironmentId}"; - } - - internal List GetRdpConnectionDetails(CloudHostedInstance instance) - { - var list = new List(); - - //check RDP availability - foreach (var vm in instance.Instances) - { - var result = _httpClient.GetAsync($"{LcsUrl}/DeploymentPortal/IsRdpResourceAvailable/{LcsProjectId}/?topologyInstanceId={instance.InstanceId}&virtualMachineInstanceName={vm.MachineName}&deploymentItemName={vm.ItemName}&azureSubscriptionId={instance.AzureSubscriptionId}&group=0&isARMTopology={instance.IsARMTopology}&nsgWarningDisplayed=true&_={DateTimeOffset.Now.ToUnixTimeSeconds()}").Result; - result.EnsureSuccessStatusCode(); - var responseBody = result.Content.ReadAsStringAsync().Result; - var rdpPresentResponse = JsonConvert.DeserializeObject(responseBody); - if (!rdpPresentResponse.Success) continue; - _httpClient.DefaultRequestHeaders.Remove("Accept"); - _httpClient.DefaultRequestHeaders.Remove("X-Requested-With"); - _httpClient.DefaultRequestHeaders.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"); - _httpClient.DefaultRequestHeaders.Add("Upgrade-Insecure-Requests", "1"); - - result = _httpClient.GetAsync($"{LcsUrl}/DeploymentPortal/IsRdpResourceAvailable/{LcsProjectId}/?topologyInstanceId={instance.InstanceId}&virtualMachineInstanceName={vm.MachineName}&deploymentItemName={vm.ItemName}&azureSubscriptionId={instance.AzureSubscriptionId}&group=0&isARMTopology={instance.IsARMTopology}&nsgWarningDisplayed=true&_={DateTimeOffset.Now.ToUnixTimeSeconds()}&isDownloadEnabled=True").Result; - result.EnsureSuccessStatusCode(); - responseBody = result.Content.ReadAsStringAsync().Result; - var line1 = responseBody.Split('\r', '\n').FirstOrDefault(); - if (line1 == null) continue; - var splited = line1.Split(':'); - - _httpClient.DefaultRequestHeaders.Remove("Accept"); - _httpClient.DefaultRequestHeaders.Add("Accept", "*/*"); - _httpClient.DefaultRequestHeaders.Add("X-Requested-With", "XMLHttpRequest"); - _httpClient.DefaultRequestHeaders.Remove("Upgrade-Insecure-Requests"); - - vm.Credentials = GetCredentials(instance.EnvironmentId, vm.ItemName); - - var localAdmin = vm.Credentials.Where(x => x.Key.Contains("Local admin")).ToDictionary(x => x.Key, x => x.Value); - if (localAdmin.Count == 1) - { - var adminUsername = localAdmin.First().Key.Split('\\')[1]; - var adminDomain = localAdmin.First().Key.Split('\\')[0].Split('-')[2]; - var adminPassword = localAdmin.First().Value; - var rdp = new RDPConnectionDetails - { - Address = splited[2], - Port = splited[3], - Domain = adminDomain, - Username = adminUsername, - Password = adminPassword, - Machine = vm.MachineName - }; - list.Add(rdp); - } - var localUser = vm.Credentials.Where(x => x.Key.Contains("Local user")).ToDictionary(x => x.Key, x => x.Value); - if (localUser.Count == 1) - { - var userUsername = localUser.First().Key.Split('\\')[1]; - var userDomain = localUser.First().Key.Split('\\')[0].Split('-')[2]; - var userPassword = localUser.First().Value; - var rdp = new RDPConnectionDetails - { - Address = splited[2], - Port = splited[3], - Domain = userDomain, - Username = userUsername, - Password = userPassword, - Machine = vm.MachineName - }; - list.Add(rdp); - } - } - return list; - } - - internal ProjectData GetProject(string projectId) - { - var result = _httpClient.GetAsync($"{LcsUrl}/RainierProject/GetProject/{projectId}?_={DateTimeOffset.Now.ToUnixTimeSeconds()}").Result; - result.EnsureSuccessStatusCode(); - - var responseBody = result.Content.ReadAsStringAsync().Result; - var response = JsonConvert.DeserializeObject(responseBody); - return !response.Success - ? null - : response.Data == null ? null : JsonConvert.DeserializeObject(response.Data.ToString()); - } - - internal async Task GetHostedDeploymentDetailAsync(HostedDeploymentInstance instance) - { - if (instance.DeploymentEnvironmentType != DeploymentEnvironmentType.MicrosoftManagedServiceFabric) - { - return await GetHostedDeploymentDetailAsync(await _httpClient.GetAsync($"{LcsUrl}/SaaSDeployment/GetDeploymentDetail/{LcsProjectId}/?environmentId={instance.EnvironmentId}&_={DateTimeOffset.Now.ToUnixTimeSeconds()}")); - } - else - { - return await GetHostedDeploymentDetailAsync(await _httpClient.GetAsync($"{LcsUrl}/ServiceFabricDeployment/GetEnvironmentDetails/{LcsProjectId}/?environmentId={instance.EnvironmentId}&_={DateTimeOffset.Now.ToUnixTimeSeconds()}")); - } - } - - private async Task GetHostedDeploymentDetailAsync(HttpResponseMessage result) - { - result.EnsureSuccessStatusCode(); - - var responseBody = await result.Content.ReadAsStringAsync(); - var response = JsonConvert.DeserializeObject(responseBody); - return !response.Success - ? null - : response.Data == null ? null : JsonConvert.DeserializeObject(response.Data.ToString()); - } - - internal async Task> GetHostedInstancesAsync() - { - if (LcsProjectTypeId != ProjectType.ServiceFabricImplementation) - { - return await GetHostedInstancesAsync(await _httpClient.GetAsync($"{LcsUrl}/SaasDeployment/GetDeploymentSummary/{LcsProjectId}?_={DateTimeOffset.Now.ToUnixTimeSeconds()}")); - } - else - { - return await GetHostedInstancesAsync(await _httpClient.GetAsync($"{LcsUrl}/ServiceFabricDeployment/GetDeploymentSummary/{LcsProjectId}?_={DateTimeOffset.Now.ToUnixTimeSeconds()}")); - } - } - - private async Task> GetHostedInstancesAsync(HttpResponseMessage result) - { - result.EnsureSuccessStatusCode(); - - var responseBody = await result.Content.ReadAsStringAsync(); - var response = JsonConvert.DeserializeObject(responseBody); - var settings = new JsonSerializerSettings - { - NullValueHandling = NullValueHandling.Ignore, - MissingMemberHandling = MissingMemberHandling.Ignore - }; - var list = new List(); - if (!response.Success) return list; - { - if (response.Data == null) return list; - var instances = JsonConvert.DeserializeObject>(response.Data.ToString(), settings); - if (instances == null) return list; - - instances = instances.OrderBy(x => x.DisplayOrder).ToList();//Sort according to display order - - foreach (var item in instances) - { - foreach (var instance in item.DeploymentInstances) - { - if (!instance.IsDeployed) continue; - var details = await GetHostedDeploymentDetailAsync(instance); - if (details != null) - { - list.Add(details); - } - } - } - } - return list; - } - - internal Response StartSandboxServicing(DeployablePackage package, string platformVersion) - { - var parameters = $"package[PackageId]={package.PackageId}&package[Name]={package.Name}&package[Description]={package.Description}&package[packageType]={package.PackageType}&package[ModifiedDate]={package.ModifiedDate}&package[ModifiedBy]={package.ModifiedBy}&package[Publisher]={package.Publisher}&package[Scope]={package.Scope}&package[LcsEnvironmentActionId]={package.LcsEnvironmentActionId}&package[LcsEnvironmentId]={package.LcsEnvironmentId}&package[FileAssetDisplayVersion]={package.FileAssetDisplayVersion}&package[PlatformVersion]={package.PlatformVersion}&package[AppVersion]={package.AppVersion}&package[EstimatedDuration]={package.EstimatedDuration}&platformReleaseName={platformVersion}"; - using (_stringContent = new StringContent(parameters, Encoding.UTF8, "application/x-www-form-urlencoded")) - { - SetRequestVerificationToken($"{LcsUrl}/V2"); - var result = _httpClient.PostAsync($"{LcsUrl}/Environment/StartSandboxServicing/{LcsProjectId}", _stringContent).Result; - result.EnsureSuccessStatusCode(); - var responseBody = result.Content.ReadAsStringAsync().Result; - return JsonConvert.DeserializeObject(responseBody); - } - } - - internal async Task StartStopDeployment(CloudHostedInstance instance, string action) - { - var parameters = $"{action}=&ActivityId={instance.ActivityId}&ProductName={WebUtility.UrlEncode(instance.ProductName)}&TopologyName={instance.TopologyName}&TopologyInstanceId={instance.InstanceId}&AzureSubscriptionId={instance.AzureSubscriptionId}&EnvironmentGroup=0&EnvironmentId={instance.EnvironmentId}"; - using (_stringContent = new StringContent(parameters, Encoding.UTF8, "application/x-www-form-urlencoded")) - { - SetRequestVerificationToken($"{LcsUrl}/V2"); - var result = await _httpClient.PostAsync($"{LcsUrl}/DeploymentPortal/StartStopDeployment/{LcsProjectId}", _stringContent); - result.EnsureSuccessStatusCode(); - var responseBody = result.Content.ReadAsStringAsync().Result; - return responseBody == "true"; - } - } - - internal Response ValidateSandboxServicing(DeployablePackage package) - { - var parameters = $"package[PackageId]={package.PackageId}&package[Name]={package.Name}&package[Description]={package.Description}&package[packageType]={package.PackageType}&package[ModifiedDate]={package.ModifiedDate}&package[ModifiedBy]={package.ModifiedBy}&package[Publisher]={package.Publisher}&package[Scope]={package.Scope}&package[LcsEnvironmentActionId]={package.LcsEnvironmentActionId}&package[LcsEnvironmentId]={package.LcsEnvironmentId}&package[FileAssetDisplayVersion]={package.FileAssetDisplayVersion}&package[PlatformVersion]={package.PlatformVersion}&package[AppVersion]={package.AppVersion}&package[EstimatedDuration]={package.EstimatedDuration}"; - using (_stringContent = new StringContent(parameters, Encoding.UTF8, "application/x-www-form-urlencoded")) - { - SetRequestVerificationToken($"{LcsUrl}/V2"); - var result = _httpClient.PostAsync($"{LcsUrl}/Environment/ValidateSandboxServicing/{LcsProjectId}", _stringContent).Result; - result.EnsureSuccessStatusCode(); - var responseBody = result.Content.ReadAsStringAsync().Result; - return JsonConvert.DeserializeObject(responseBody); - } - } - - private static string RemoveUnwantedTags(string data) - { - if (string.IsNullOrEmpty(data)) return string.Empty; - - var document = new HtmlDocument(); - document.LoadHtml(data); - var acceptableTags = new string[] { };// { "strong", "em", "u"}; - var nodes = new Queue(document.DocumentNode.SelectNodes("./*|./text()")); - while (nodes.Count > 0) - { - var node = nodes.Dequeue(); - var parentNode = node.ParentNode; - if (acceptableTags.Contains(node.Name) || node.Name == "#text") continue; - var childNodes = node.SelectNodes("./*|./text()"); - if (childNodes != null) - { - foreach (var child in childNodes) - { - nodes.Enqueue(child); - parentNode.InsertBefore(child, node); - } - } - parentNode.RemoveChild(node); - } - var result = document.DocumentNode.InnerHtml; - result = Regex.Replace(result, @" |\r\n|\t|\n|\r", " "); - result = Regex.Replace(result, @""", "\""); - return result; - } - - internal PlanData RetrieveTenantPlans() - { - var result = _httpClient.GetAsync($"{LcsUrl}/RainierProject/RetrieveTenantPlans/{LcsProjectId}?_={DateTimeOffset.Now.ToUnixTimeSeconds()}").Result; - result.EnsureSuccessStatusCode(); - - var responseBody = result.Content.ReadAsStringAsync().Result; - var response = JsonConvert.DeserializeObject(responseBody); - return !response.Success - ? null - : response.Data == null ? null : JsonConvert.DeserializeObject(response.Data.ToString()); - } - - internal async Task> GetUpcomingCalendarsAsync() - { - try - { - var result = await _httpClient.GetAsync($"{LcsUrl}/RainierSettings/GetUpcomingCalendars/{LcsProjectId}/?id={LcsProjectId}&_={DateTimeOffset.Now.ToUnixTimeSeconds()}"); - result.EnsureSuccessStatusCode(); - - var responseBody = await result.Content.ReadAsStringAsync(); - dynamic response = JsonConvert.DeserializeObject(responseBody); - return !response.Success - ? null - : response.Data == null ? null : JsonConvert.DeserializeObject>(response.Data.UpcomingCalendarViewModels.ToString()); - } - catch - { - return null; - } - } - - internal string GetTimeZoneOffsetInMinutes() - { - var offset = -TimeZoneInfo.Local.GetUtcOffset(DateTime.Now);//reverse sign - return offset.TotalMinutes.ToString(); - } - - internal DeploymentEnvironmentType GetDeploymentEnvironmentTypeInfo(string environmentId) - { - var result = _httpClient.GetAsync($"{LcsUrl}/Environment/GetDeploymentEnvironmentTypeInfo/{LcsProjectId}?environmentId={environmentId}&_={DateTimeOffset.Now.ToUnixTimeSeconds()}").Result; - result.EnsureSuccessStatusCode(); - var responseBody = result.Content.ReadAsStringAsync().Result; - var response = JsonConvert.DeserializeObject(responseBody); - if (response.Success && response.Data != null) - { - Enum.TryParse(response.Data.ToString(), out DeploymentEnvironmentType envType); - return envType; - } - else - { - return DeploymentEnvironmentType.MicrosoftManagedIaas; - } - } - - internal List GetServicesToRestart() - { - var result = _httpClient.GetAsync($"{LcsUrl}/EnvironmentServicingV2/GetServicesToRestart/{LcsProjectId}?_={DateTimeOffset.Now.ToUnixTimeSeconds()}").Result; - result.EnsureSuccessStatusCode(); - var responseBody = result.Content.ReadAsStringAsync().Result; - var response = JsonConvert.DeserializeObject(responseBody); - return !response.Success - ? null - : response.Data == null ? null : JsonConvert.DeserializeObject>(response.Data.ToString()); - } - - internal ServiceRestartResponseData RestartService(CloudHostedInstance instance, string serviceTorestart) - { - var parameters = $"lcsEnvironmentId={instance.EnvironmentId}&axServiceName={serviceTorestart}"; - using (_stringContent = new StringContent(parameters, Encoding.UTF8, "application/x-www-form-urlencoded")) - { - SetRequestVerificationToken($"{LcsUrl}/V2"); - var result = _httpClient.PostAsync($"{LcsUrl}/EnvironmentServicingV2/RestartService/{LcsProjectId}", _stringContent).Result; - result.EnsureSuccessStatusCode(); - var responseBody = result.Content.ReadAsStringAsync().Result; - var response = JsonConvert.DeserializeObject(responseBody); - return !response.Success - ? null - : response.Data == null ? null : JsonConvert.DeserializeObject(response.Data.ToString()); - } - } - - internal async Task GetOngoingActionDetailsAsync(CloudHostedInstance instance) - { - var result = await _httpClient.GetAsync($"{LcsUrl}/Environment/GetOngoingActionDetails/{LcsProjectId}?environmentId={instance.EnvironmentId}"); - result.EnsureSuccessStatusCode(); - var responseBody = await result.Content.ReadAsStringAsync(); - var response = JsonConvert.DeserializeObject(responseBody); - return !response.Success - ? null - : response.Data == null ? null : JsonConvert.DeserializeObject(response.Data.ToString()); - } - - internal async Task> GetEnvironmentHistoryDetailsAsync(CloudHostedInstance instance) - { - const int historyItemsCount = 40; - - var pagingParams = new PagingParameters() - { - DynamicPaging = new DynamicPaging() - { - StartPosition = 0, - ItemsRequested = historyItemsCount - } - }; - var pagingParamsJson = JsonConvert.SerializeObject(pagingParams, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto }); - - using (_stringContent = new StringContent(pagingParamsJson, Encoding.UTF8, "application/json")) - { - SetRequestVerificationToken($"{LcsUrl}/V2"); - var result = await _httpClient.PostAsync($"{LcsUrl}/Environment/GetEnvironmentHistoryDetails/{LcsProjectId}?environmentId={instance.EnvironmentId}&_={DateTimeOffset.Now.ToUnixTimeSeconds()}", _stringContent); - result.EnsureSuccessStatusCode(); - var settings = new JsonSerializerSettings - { - NullValueHandling = NullValueHandling.Ignore, - MissingMemberHandling = MissingMemberHandling.Ignore - }; - - var responseBody = await result.Content.ReadAsStringAsync(); - var response = JsonConvert.DeserializeObject(responseBody); - if (response.Success) - { - var data = JsonConvert.DeserializeObject(response.Data.ToString(), settings); - if (data != null) - { - return data.Results; - } - } - return null; - } - } - - /// - /// Dispose - /// - /// enable dispose - private void Dispose(bool disposing) - { - if (_disposed) return; - _disposed = true; - if (disposing) - { - _httpClient?.Dispose(); - } - } - } -} +using HtmlAgilityPack; +using LCS.Cache; +using LCS.JsonObjects; +using LCS.Utils; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net; +using System.Net.Http; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; + +namespace LCS +{ + internal sealed class HttpClientHelper : IDisposable + { + private readonly HttpClient _httpClient; + private bool _disposed; + private StringContent _stringContent; + + internal HttpClientHelper(CookieContainer cookieContainer) + { + //Use Tls1.2 as default transport layer + ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; + + CookieContainer = cookieContainer; + var httpClientHandler = new HttpClientHandler + { + CookieContainer = CookieContainer, + AllowAutoRedirect = true, + UseCookies = true, + AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate + }; + + _httpClient = new HttpClient(httpClientHandler) + { + Timeout = TimeSpan.FromMinutes(5) + }; + + _httpClient.DefaultRequestHeaders.Add("Accept", "*/*"); + _httpClient.DefaultRequestHeaders.Add("Accept-Encoding", "gzip, deflate, br"); + _httpClient.DefaultRequestHeaders.Add("Accept-Language", "en-US,en;q=0.9"); + _httpClient.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3872.0 Safari/537.36 Edg/78.0.244.0"); + _httpClient.DefaultRequestHeaders.Add("X-Requested-With", "XMLHttpRequest"); + _httpClient.DefaultRequestHeaders.Add("cache-control", "no-cache"); + _httpClient.DefaultRequestHeaders.Add("TimezoneOffset", GetTimeZoneOffsetInMinutes()); + } + + public CookieContainer CookieContainer { get; } + public string LcsDiagUrl { get; set; } + public string LcsProjectId { get; set; } + public string LcsUpdateUrl { get; set; } + public string LcsUrl { get; set; } + public ProjectType LcsProjectTypeId { get; set; } + + /// + /// Exposes the internal http client. + /// + /// The internal http client. + /// + /// This should be considered a temporary solution until this class can be refactored into task specific classes. + /// It allows extension methods to access the http client. It should not be used otherwise. + /// + public HttpClient GetHttpClient() + { + return _httpClient; + } + + public void ChangeLcsProjectId(string value) + { + LcsProjectId = value; + var cookiesLcs = CookieContainer.GetCookies(new Uri(LcsUrl)); + var cookiesUpdateLcs = CookieContainer.GetCookies(new Uri(LcsUpdateUrl)); + foreach (Cookie cookie in cookiesLcs) + { + if (cookie.Name == "lcspid") + { + cookie.Expired = true; + } + } + foreach (Cookie cookie in cookiesUpdateLcs) + { + if (cookie.Name == "lcspid") + { + cookie.Expired = true; + } + } + + if (string.IsNullOrEmpty(LcsProjectId)) return; + CookieContainer.Add(new Uri(LcsUrl), new Cookie("lcspid", LcsProjectId)); + CookieContainer.Add(new Uri(LcsUpdateUrl), new Cookie("lcspid", LcsProjectId)); + Properties.Settings.Default.cookie = CookieContainer.GetCookieHeader(new Uri(LcsUrl)).Replace(';', ','); + Properties.Settings.Default.Save(); + } + + /// + /// Dispose + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + public string GetEnvironmentDetailsUrl(CloudHostedInstance instance) + { + return $"{LcsUrl}/V2/EnvironmentDetailsV3New/{LcsProjectId}?EnvironmentId={instance.EnvironmentId}&IsDiagnosticsEnabledEnvironment={instance.IsDiagnosticsEnabledEnvironment}"; + } + + public void SetRequestVerificationToken(string url) + { + if (!_httpClient.DefaultRequestHeaders.Contains("__RequestVerificationToken")) + { + var getResponse = _httpClient.GetAsync(url).Result; + getResponse.EnsureSuccessStatusCode(); + var html = getResponse.Content.ReadAsStringAsync().Result; + HtmlDocument doc = new HtmlDocument(); + doc.LoadHtml(html); + var node = doc.DocumentNode.SelectSingleNode("//input[@name='__RequestVerificationToken']"); + if (node == null) return; + var token = node.Attributes["value"].Value; + _httpClient.DefaultRequestHeaders.Add("__RequestVerificationToken", token); + } + } + + internal async Task AddNsgRule(CloudHostedInstance instance, string ruleName, string ipOrCidr) + { + string parameters, url; + if(GetDeploymentEnvironmentTypeInfo(instance.EnvironmentId) == DeploymentEnvironmentType.MicrosoftManagedServiceFabric) + { + parameters = $"lcsEnvironmentId={instance.EnvironmentId}&newRuleName={ruleName}&newRuleIpOrCidr={ipOrCidr}&newRuleService=AzureSQL"; + url = $"{LcsUrl}/EnvironmentServicingV2/SFAddNetworkSecurityRule/{LcsProjectId}"; + } + else + { + parameters = $"lcsEnvironmentId={instance.EnvironmentId}&newRuleName={ruleName}&newRuleIpOrCidr={ipOrCidr}&newRuleService=RDP"; + url = $"{LcsUrl}/Environment/AddNetworkSecurityRule/{LcsProjectId}"; + } + using (_stringContent = new StringContent(parameters, Encoding.UTF8, "application/x-www-form-urlencoded")) + { + SetRequestVerificationToken($"{LcsUrl}/V2"); + var result = await _httpClient.PostAsync(url, _stringContent); + result.EnsureSuccessStatusCode(); + var responseBody = result.Content.ReadAsStringAsync().Result; + var response = JsonConvert.DeserializeObject(responseBody); + return response.Success; + } + } + + internal string ApplyPackage(CloudHostedInstance instance, DeployablePackage package) + { + StringBuilder log = new StringBuilder(); + package.LcsEnvironmentId = instance.EnvironmentId; + var validationResponse = ValidateSandboxServicing(package); + + if (validationResponse.Success && !string.IsNullOrEmpty(validationResponse.Data.ToString())) + { + string platformRelease; + try + { + var releaseVersion = JsonConvert.DeserializeObject(validationResponse.Data.ToString()); + platformRelease = releaseVersion.PlatformRelease; + } + catch + { + platformRelease = validationResponse.Data.ToString(); + } + log.AppendLine($"{instance.DisplayName}: Package deployment validation successful."); + var deploymentResponse = StartSandboxServicing(package, platformRelease); + log.AppendLine($"{instance.DisplayName}: {deploymentResponse.Message}"); + log.AppendLine(); + } + else + { + log.AppendLine($"{instance.DisplayName}: Package deployment validation failed."); + log.AppendLine($"{instance.DisplayName}: {validationResponse.Message}"); + log.AppendLine(); + } + return log.ToString(); + } + + internal async Task DeleteEnvironment(CloudHostedInstance instance) + { + var parameters = $"delete=&ActivityId={instance.ActivityId}&ProductName={WebUtility.UrlEncode(instance.ProductName)}&TopologyName={instance.TopologyName}&TopologyInstanceId={instance.InstanceId}&AzureSubscriptionId={instance.AzureSubscriptionId}&EnvironmentGroup=0&EnvironmentId={instance.EnvironmentId}&PreserveCustomerSignOff=false"; + using (_stringContent = new StringContent(parameters, Encoding.UTF8, "application/x-www-form-urlencoded")) + { + SetRequestVerificationToken($"{LcsUrl}/V2"); + var result = await _httpClient.PostAsync($"{LcsUrl}/Environment/DeleteEnvironment/{LcsProjectId}", _stringContent); + result.EnsureSuccessStatusCode(); + var responseBody = result.Content.ReadAsStringAsync().Result; + var response = JsonConvert.DeserializeObject(responseBody); + return response.Success; + } + } + + internal async Task DeleteNsgRule(CloudHostedInstance instance, string rule) + { + string url; + if(GetDeploymentEnvironmentTypeInfo(instance.EnvironmentId) == DeploymentEnvironmentType.MicrosoftManagedServiceFabric) + { + url = $"{LcsUrl}/EnvironmentServicingV2/SFDeleteNetworkSecurityRules/{LcsProjectId}"; + } + else + { + url = $"{LcsUrl}/Environment/DeleteNetworkSecurityRules/{LcsProjectId}"; + } + var parameters = $"lcsEnvironmentId={instance.EnvironmentId}&rulesToDelete%5B%5D={rule}"; + using (_stringContent = new StringContent(parameters, Encoding.UTF8, "application/x-www-form-urlencoded")) + { + SetRequestVerificationToken($"{LcsUrl}/V2"); + var result = await _httpClient.PostAsync(url, _stringContent); + result.EnsureSuccessStatusCode(); + var responseBody = result.Content.ReadAsStringAsync().Result; + var response = JsonConvert.DeserializeObject(responseBody); + if (response.Success) + { + return $"Successfully deleted firewall rule {rule} for instance {instance.DisplayName}"; + } + else + { + return $"Could not delete firewall rule {rule} for instance {instance.DisplayName}"; + } + } + } + + internal async Task> GetAllProjectsAsync() + { + const int numberOfProjectsRequested = 50; + int numberOfProjectReturned; + var allProjects = new List(); + var pageNumber = 0; + SetRequestVerificationToken($"{LcsUrl}/V2"); + do + { + pageNumber++; + var pagingParams = new PagingParameters() + { + DynamicPaging = new DynamicPaging() + { + StartPosition = pageNumber * numberOfProjectsRequested - numberOfProjectsRequested, + ItemsRequested = numberOfProjectsRequested + } + }; + var pagingParamsJson = JsonConvert.SerializeObject(pagingParams, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto }); + + using (_stringContent = new StringContent(pagingParamsJson, Encoding.UTF8, "application/json")) + { + var result = await _httpClient.PostAsync($"{LcsUrl}/RainierProject/AllProjectsList", _stringContent); + result.EnsureSuccessStatusCode(); + + var responseBody = await result.Content.ReadAsStringAsync(); + var response = JsonConvert.DeserializeObject(responseBody); + if (response.Success && response.Data != null) + { + var projects = JsonConvert.DeserializeObject(response.Data.ToString()).Results; + numberOfProjectReturned = projects.Count; + allProjects.AddRange(projects); + } + else + { + numberOfProjectReturned = 0; + } + } + } + while (numberOfProjectReturned == numberOfProjectsRequested); + return allProjects; + } + + internal List GetAllProjectUsers() + { + const int numberOfUsersRequested = 50; + int numberOfUsersReturned; + var allUsers = new List(); + var pageNumber = 0; + SetRequestVerificationToken($"{LcsUrl}/V2"); + do + { + pageNumber++; + var pagingParams = new PagingParameters() + { + DynamicPaging = new DynamicPaging() + { + StartPosition = pageNumber * numberOfUsersRequested - numberOfUsersRequested, + ItemsRequested = numberOfUsersRequested + } + }; + var pagingParamsJson = JsonConvert.SerializeObject(pagingParams, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto }); + + using (_stringContent = new StringContent(pagingParamsJson, Encoding.UTF8, "application/json")) + { + var result = _httpClient.PostAsync($"{LcsUrl}/RainierProjectUser/RetrieveProjectUsers/{LcsProjectId}", _stringContent).Result; + result.EnsureSuccessStatusCode(); + + var responseBody = result.Content.ReadAsStringAsync().Result; + var response = JsonConvert.DeserializeObject(responseBody); + if (response.Success && response.Data != null) + { + var users = JsonConvert.DeserializeObject(response.Data.ToString()).Results; + numberOfUsersReturned = users.Count; + allUsers.AddRange(users); + } + else + { + numberOfUsersReturned = 0; + } + } + } + while (numberOfUsersReturned == numberOfUsersRequested); + return allUsers; + } + + internal List GetAvailableHotfixes(string envId, int hotfixesType) + { + try + { + var result = _httpClient.GetAsync($"{LcsUpdateUrl}/cloudupdate/Results/{LcsProjectId}?query=&countries=&industries=&configKeys=&modules=&e={envId}&page=&t={hotfixesType}&_={DateTimeOffset.Now.ToUnixTimeSeconds()}").Result; + result.EnsureSuccessStatusCode(); + var responseBody = result.Content.ReadAsStringAsync().Result; + var response = JsonConvert.DeserializeObject(responseBody); + if (!response.Success || response.Data == null) return null; + var jObject = JObject.Parse(response.Data.ToString()); + var allResults = jObject.SelectToken("AllResults"); + var kbs = JsonConvert.DeserializeObject>(allResults.ToString()); + foreach (var kb in kbs) + { + kb.Url = $"{URIHandler.LCS_FIX_URL}/Issue/Details/{LcsProjectId}?kb={kb.KBNumber}&bugId={kb.BugNumber}"; + kb.Solution = RemoveUnwantedTags(kb.Solution); + kb.Title = RemoveUnwantedTags(kb.Title); + } + return kbs; + } + catch + { + return null; + } + } + + internal int GetBuildInfoEnvironmentId(CloudHostedInstance instance) + { + var result = _httpClient.GetAsync(GetEnvironmentBuildInfoIdUrl(instance)).Result; + result.EnsureSuccessStatusCode(); + var responseBody = result.Content.ReadAsStringAsync().Result; + var environments = JsonConvert.DeserializeObject>(responseBody); + if (environments != null && environments.Count > 0) + { + return environments.First().Value; + } + else + { + return 0; + } + } + + internal async Task> GetCheInstancesAsync() + { + var result = await _httpClient.GetAsync($"{LcsUrl}/DeploymentPortal/GetDeployementDetails/{LcsProjectId}?_={DateTimeOffset.Now.ToUnixTimeSeconds()}"); + var list = new List(); + if (!result.IsSuccessStatusCode) return list; + result.EnsureSuccessStatusCode(); + + var responseBody = await result.Content.ReadAsStringAsync(); + responseBody = responseBody.TrimStart('('); + responseBody = responseBody.TrimEnd(')'); + + try + { + var cloudHostedInstancesUnsorted = JsonConvert.DeserializeObject>(responseBody); + if (cloudHostedInstancesUnsorted != null) + { + list.AddRange(cloudHostedInstancesUnsorted.Values.OrderBy(x => x.InstanceId)); + } + } + catch + { + return list; + } + return list; + } + + internal async Task> GetCheInstancesV2Async() + { + var result = await _httpClient.GetAsync($"{LcsUrl}/DeploymentPortal/GetAllCheDeploymentsMetadata/{LcsProjectId}?filterBy=null&filterValue=null&?_={DateTimeOffset.Now.ToUnixTimeSeconds()}"); + result.EnsureSuccessStatusCode(); + + var responseBody = await result.Content.ReadAsStringAsync(); + var response = JsonConvert.DeserializeObject(responseBody); + + var list = new List(); + if (response.Success) + { + if (response.Data == null) return list; + + var settings = new JsonSerializerSettings + { + NullValueHandling = NullValueHandling.Ignore, + MissingMemberHandling = MissingMemberHandling.Ignore + }; + var cloudHostedInstancesUnsorted = JsonConvert.DeserializeObject>(response.Data.ToString(), settings); + if (cloudHostedInstancesUnsorted != null) + { + list.AddRange(cloudHostedInstancesUnsorted.Values.OrderBy(x => x.InstanceId)); + } + return list; + } + return list; + } + + internal Dictionary GetCredentials(string environmentId, string itemName) + { + Dictionary credentialsDic; + + if (CacheUtil.IsCachingEnabled()) + { + credentialsDic = CredentialsCacheHelper.GetCredentialsCache(environmentId); + + if (credentialsDic != null) + return credentialsDic; + } + + var result = _httpClient.GetAsync($"{LcsUrl}/DeploymentPortal/GetCredentials/{LcsProjectId}?environmentId={environmentId}&deploymentItemName={itemName}&_={DateTimeOffset.Now.ToUnixTimeSeconds()}").Result; + result.EnsureSuccessStatusCode(); + var responseBody = result.Content.ReadAsStringAsync().Result; + var response = JsonConvert.DeserializeObject(responseBody); + + if (response.Success && response.Data != null) + { + credentialsDic = JsonConvert.DeserializeObject>(response.Data.ToString()); + + if (CacheUtil.IsCachingEnabled()) + CredentialsCacheHelper.AddCredentialsCache(environmentId, credentialsDic); + + return credentialsDic; + } + + return null; + } + + internal string GetDiagEnvironmentId(CloudHostedInstance instance) + { + var result = _httpClient.GetAsync($"{LcsUrl}/Environment/GetDiagEnvironmentId/{LcsProjectId}?environmentId={instance.EnvironmentId}&_={DateTimeOffset.Now.ToUnixTimeSeconds()}").Result; + result.EnsureSuccessStatusCode(); + var responseBody = result.Content.ReadAsStringAsync().Result; + var response = JsonConvert.DeserializeObject(responseBody); + return response.Success && response.Data != null ? response.Data.ToString() : null; + } + + internal BuildInfoDetails GetEnvironmentBuildInfoDetails(CloudHostedInstance instance, string environmentId) + { + var result = _httpClient.GetAsync(GetEnvironmentBuildInfoDetailsUrl(instance, environmentId.ToString())).Result; + result.EnsureSuccessStatusCode(); + var responseBody = result.Content.ReadAsStringAsync().Result; + var response = JsonConvert.DeserializeObject(responseBody); + if (response != null) + { + response.BuildInfoTreeView.RemoveAll(x => x.ParentId == null); + } + return response; + } + + internal string GetEnvironmentBuildInfoDetailsUrl(CloudHostedInstance instance, string environmentId) + { + return $"{LcsDiagUrl}/BuildInfo/GetEnvironmentBuildInfoDetails/{LcsProjectId}?lcsEnvironmentId={instance.EnvironmentId}&environmentId={environmentId}&_={DateTimeOffset.Now.ToUnixTimeSeconds()}"; + } + + internal string GetEnvironmentBuildInfoIdUrl(CloudHostedInstance instance) + { + return $"{LcsDiagUrl}/BuildInfo/GetEnvironments/{LcsProjectId}?lcsEnvironmentId={instance.EnvironmentId}&environmentId=0&_={DateTimeOffset.Now.ToUnixTimeSeconds()}"; + } + + internal NetworkSecurityGroup GetNetworkSecurityGroup(CloudHostedInstance instance) + { + try + { + string url; + if(GetDeploymentEnvironmentTypeInfo(instance.EnvironmentId) == DeploymentEnvironmentType.MicrosoftManagedServiceFabric) + { + url = $"{LcsUrl}/EnvironmentServicingV2/SFGetNetworkSecurityGroup/{LcsProjectId}?lcsEnvironmentId={instance.EnvironmentId}&_={DateTimeOffset.Now.ToUnixTimeSeconds()}"; + } + else + { + url = $"{LcsUrl}/Environment/GetNetworkSecurityGroup/{LcsProjectId}?lcsEnvironmentId={instance.EnvironmentId}&_={DateTimeOffset.Now.ToUnixTimeSeconds()}"; + } + + var result = _httpClient.GetAsync(url).Result; + result.EnsureSuccessStatusCode(); + var responseBody = result.Content.ReadAsStringAsync().Result; + var response = JsonConvert.DeserializeObject(responseBody); + if (!response.Success || response.Data == null) return null; + var settings = new JsonSerializerSettings + { + NullValueHandling = NullValueHandling.Ignore, + MissingMemberHandling = MissingMemberHandling.Ignore + }; + var NSG = JsonConvert.DeserializeObject(response.Data.ToString(), settings); + return NSG; + } + catch + { + return null; + } + } + + internal List GetPagedDeployablePackageList(CloudHostedInstance instance) + { + const int numberOfPackagesRequested = 50; + int numberOfPackagesReturned; + var packageList = new List(); + var pageNumber = 0; + SetRequestVerificationToken($"{LcsUrl}/V2"); + do + { + pageNumber++; + var pagingParams = new PagingParameters() + { + DynamicPaging = new DynamicPaging() + { + StartPosition = pageNumber * numberOfPackagesRequested - numberOfPackagesRequested, + ItemsRequested = numberOfPackagesRequested + } + }; + var pagingParamsJson = JsonConvert.SerializeObject(pagingParams, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto }); + + using (_stringContent = new StringContent(pagingParamsJson, Encoding.UTF8, "application/json")) + { + var result = _httpClient.PostAsync(GetPagedDeployablePackageListUrl(instance), _stringContent).Result; + result.EnsureSuccessStatusCode(); + + var responseBody = result.Content.ReadAsStringAsync().Result; + var response = JsonConvert.DeserializeObject(responseBody); + if (response.Success && response.Data != null) + { + var packages = JsonConvert.DeserializeObject(response.Data.ToString()).Results; + numberOfPackagesReturned = packages.Count; + packageList.AddRange(packages); + } + else + { + numberOfPackagesReturned = 0; + } + } + } + while (numberOfPackagesReturned == numberOfPackagesRequested); + return packageList; + } + + internal string GetPagedDeployablePackageListUrl(CloudHostedInstance instance) + { + return $"{LcsUrl}/Environment/GetPagedDeployablePackageList/{LcsProjectId}?lcsEnvironmentActionId=2&lcsEnvironmentId={instance.EnvironmentId}"; + } + + internal List GetRdpConnectionDetails(CloudHostedInstance instance) + { + var list = new List(); + + //check RDP availability + foreach (var vm in instance.Instances) + { + var result = _httpClient.GetAsync($"{LcsUrl}/DeploymentPortal/IsRdpResourceAvailable/{LcsProjectId}/?topologyInstanceId={instance.InstanceId}&virtualMachineInstanceName={vm.MachineName}&deploymentItemName={vm.ItemName}&azureSubscriptionId={instance.AzureSubscriptionId}&group=0&isARMTopology={instance.IsARMTopology}&nsgWarningDisplayed=true&_={DateTimeOffset.Now.ToUnixTimeSeconds()}").Result; + result.EnsureSuccessStatusCode(); + var responseBody = result.Content.ReadAsStringAsync().Result; + var rdpPresentResponse = JsonConvert.DeserializeObject(responseBody); + if (!rdpPresentResponse.Success) continue; + _httpClient.DefaultRequestHeaders.Remove("Accept"); + _httpClient.DefaultRequestHeaders.Remove("X-Requested-With"); + _httpClient.DefaultRequestHeaders.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"); + _httpClient.DefaultRequestHeaders.Add("Upgrade-Insecure-Requests", "1"); + + result = _httpClient.GetAsync($"{LcsUrl}/DeploymentPortal/IsRdpResourceAvailable/{LcsProjectId}/?topologyInstanceId={instance.InstanceId}&virtualMachineInstanceName={vm.MachineName}&deploymentItemName={vm.ItemName}&azureSubscriptionId={instance.AzureSubscriptionId}&group=0&isARMTopology={instance.IsARMTopology}&nsgWarningDisplayed=true&_={DateTimeOffset.Now.ToUnixTimeSeconds()}&isDownloadEnabled=True").Result; + result.EnsureSuccessStatusCode(); + responseBody = result.Content.ReadAsStringAsync().Result; + var line1 = responseBody.Split('\r', '\n').FirstOrDefault(); + if (line1 == null) continue; + var splited = line1.Split(':'); + + _httpClient.DefaultRequestHeaders.Remove("Accept"); + _httpClient.DefaultRequestHeaders.Add("Accept", "*/*"); + _httpClient.DefaultRequestHeaders.Add("X-Requested-With", "XMLHttpRequest"); + _httpClient.DefaultRequestHeaders.Remove("Upgrade-Insecure-Requests"); + + vm.Credentials = GetCredentials(instance.EnvironmentId, vm.ItemName); + + var localAdmin = vm.Credentials.Where(x => x.Key.Contains("Local admin")).ToDictionary(x => x.Key, x => x.Value); + if (localAdmin.Count == 1) + { + var adminUsername = localAdmin.First().Key.Split('\\')[1]; + var adminDomain = localAdmin.First().Key.Split('\\')[0].Split('-')[2]; + var adminPassword = localAdmin.First().Value; + var rdp = new RDPConnectionDetails + { + Address = splited[2], + Port = splited[3], + Domain = adminDomain, + Username = adminUsername, + Password = adminPassword, + Machine = vm.MachineName + }; + list.Add(rdp); + } + var localUser = vm.Credentials.Where(x => x.Key.Contains("Local user")).ToDictionary(x => x.Key, x => x.Value); + if (localUser.Count == 1) + { + var userUsername = localUser.First().Key.Split('\\')[1]; + var userDomain = localUser.First().Key.Split('\\')[0].Split('-')[2]; + var userPassword = localUser.First().Value; + var rdp = new RDPConnectionDetails + { + Address = splited[2], + Port = splited[3], + Domain = userDomain, + Username = userUsername, + Password = userPassword, + Machine = vm.MachineName + }; + list.Add(rdp); + } + } + return list; + } + + internal ProjectData GetProject(string projectId) + { + var result = _httpClient.GetAsync($"{LcsUrl}/RainierProject/GetProject/{projectId}?_={DateTimeOffset.Now.ToUnixTimeSeconds()}").Result; + result.EnsureSuccessStatusCode(); + + var responseBody = result.Content.ReadAsStringAsync().Result; + var response = JsonConvert.DeserializeObject(responseBody); + return !response.Success + ? null + : response.Data == null ? null : JsonConvert.DeserializeObject(response.Data.ToString()); + } + + internal async Task GetHostedDeploymentDetailAsync(HostedDeploymentInstance instance) + { + if (instance.DeploymentEnvironmentType != DeploymentEnvironmentType.MicrosoftManagedServiceFabric) + { + return await GetHostedDeploymentDetailAsync(await _httpClient.GetAsync($"{LcsUrl}/SaaSDeployment/GetDeploymentDetail/{LcsProjectId}/?environmentId={instance.EnvironmentId}&_={DateTimeOffset.Now.ToUnixTimeSeconds()}")); + } + else + { + return await GetHostedDeploymentDetailAsync(await _httpClient.GetAsync($"{LcsUrl}/ServiceFabricDeployment/GetEnvironmentDetails/{LcsProjectId}/?environmentId={instance.EnvironmentId}&_={DateTimeOffset.Now.ToUnixTimeSeconds()}")); + } + } + + private async Task GetHostedDeploymentDetailAsync(HttpResponseMessage result) + { + result.EnsureSuccessStatusCode(); + + var responseBody = await result.Content.ReadAsStringAsync(); + var response = JsonConvert.DeserializeObject(responseBody); + return !response.Success + ? null + : response.Data == null ? null : JsonConvert.DeserializeObject(response.Data.ToString()); + } + + internal async Task> GetHostedInstancesAsync() + { + if (LcsProjectTypeId != ProjectType.ServiceFabricImplementation) + { + return await GetHostedInstancesAsync(await _httpClient.GetAsync($"{LcsUrl}/SaasDeployment/GetDeploymentSummary/{LcsProjectId}?_={DateTimeOffset.Now.ToUnixTimeSeconds()}")); + } + else + { + return await GetHostedInstancesAsync(await _httpClient.GetAsync($"{LcsUrl}/ServiceFabricDeployment/GetDeploymentSummary/{LcsProjectId}?_={DateTimeOffset.Now.ToUnixTimeSeconds()}")); + } + } + + private async Task> GetHostedInstancesAsync(HttpResponseMessage result) + { + result.EnsureSuccessStatusCode(); + + var responseBody = await result.Content.ReadAsStringAsync(); + var response = JsonConvert.DeserializeObject(responseBody); + var settings = new JsonSerializerSettings + { + NullValueHandling = NullValueHandling.Ignore, + MissingMemberHandling = MissingMemberHandling.Ignore + }; + var list = new List(); + if (!response.Success) return list; + { + if (response.Data == null) return list; + var instances = JsonConvert.DeserializeObject>(response.Data.ToString(), settings); + if (instances == null) return list; + + instances = instances.OrderBy(x => x.DisplayOrder).ToList();//Sort according to display order + + foreach (var item in instances) + { + foreach (var instance in item.DeploymentInstances) + { + if (!instance.IsDeployed) continue; + var details = await GetHostedDeploymentDetailAsync(instance); + if (details != null) + { + list.Add(details); + } + } + } + } + return list; + } + + internal Response StartSandboxServicing(DeployablePackage package, string platformVersion) + { + var parameters = $"package[PackageId]={package.PackageId}&package[Name]={package.Name}&package[Description]={package.Description}&package[packageType]={package.PackageType}&package[ModifiedDate]={package.ModifiedDate}&package[ModifiedBy]={package.ModifiedBy}&package[Publisher]={package.Publisher}&package[Scope]={package.Scope}&package[LcsEnvironmentActionId]={package.LcsEnvironmentActionId}&package[LcsEnvironmentId]={package.LcsEnvironmentId}&package[FileAssetDisplayVersion]={package.FileAssetDisplayVersion}&package[PlatformVersion]={package.PlatformVersion}&package[AppVersion]={package.AppVersion}&package[EstimatedDuration]={package.EstimatedDuration}&platformReleaseName={platformVersion}"; + using (_stringContent = new StringContent(parameters, Encoding.UTF8, "application/x-www-form-urlencoded")) + { + SetRequestVerificationToken($"{LcsUrl}/V2"); + var result = _httpClient.PostAsync($"{LcsUrl}/Environment/StartSandboxServicing/{LcsProjectId}", _stringContent).Result; + result.EnsureSuccessStatusCode(); + var responseBody = result.Content.ReadAsStringAsync().Result; + return JsonConvert.DeserializeObject(responseBody); + } + } + + internal async Task StartStopDeployment(CloudHostedInstance instance, string action) + { + var parameters = $"{action}=&ActivityId={instance.ActivityId}&ProductName={WebUtility.UrlEncode(instance.ProductName)}&TopologyName={instance.TopologyName}&TopologyInstanceId={instance.InstanceId}&AzureSubscriptionId={instance.AzureSubscriptionId}&EnvironmentGroup=0&EnvironmentId={instance.EnvironmentId}"; + using (_stringContent = new StringContent(parameters, Encoding.UTF8, "application/x-www-form-urlencoded")) + { + SetRequestVerificationToken($"{LcsUrl}/V2"); + var result = await _httpClient.PostAsync($"{LcsUrl}/DeploymentPortal/StartStopDeployment/{LcsProjectId}", _stringContent); + result.EnsureSuccessStatusCode(); + var responseBody = result.Content.ReadAsStringAsync().Result; + return responseBody == "true"; + } + } + + internal Response ValidateSandboxServicing(DeployablePackage package) + { + var parameters = $"package[PackageId]={package.PackageId}&package[Name]={package.Name}&package[Description]={package.Description}&package[packageType]={package.PackageType}&package[ModifiedDate]={package.ModifiedDate}&package[ModifiedBy]={package.ModifiedBy}&package[Publisher]={package.Publisher}&package[Scope]={package.Scope}&package[LcsEnvironmentActionId]={package.LcsEnvironmentActionId}&package[LcsEnvironmentId]={package.LcsEnvironmentId}&package[FileAssetDisplayVersion]={package.FileAssetDisplayVersion}&package[PlatformVersion]={package.PlatformVersion}&package[AppVersion]={package.AppVersion}&package[EstimatedDuration]={package.EstimatedDuration}"; + using (_stringContent = new StringContent(parameters, Encoding.UTF8, "application/x-www-form-urlencoded")) + { + SetRequestVerificationToken($"{LcsUrl}/V2"); + var result = _httpClient.PostAsync($"{LcsUrl}/Environment/ValidateSandboxServicing/{LcsProjectId}", _stringContent).Result; + result.EnsureSuccessStatusCode(); + var responseBody = result.Content.ReadAsStringAsync().Result; + return JsonConvert.DeserializeObject(responseBody); + } + } + + private static string RemoveUnwantedTags(string data) + { + if (string.IsNullOrEmpty(data)) return string.Empty; + + var document = new HtmlDocument(); + document.LoadHtml(data); + var acceptableTags = new string[] { };// { "strong", "em", "u"}; + var nodes = new Queue(document.DocumentNode.SelectNodes("./*|./text()")); + while (nodes.Count > 0) + { + var node = nodes.Dequeue(); + var parentNode = node.ParentNode; + if (acceptableTags.Contains(node.Name) || node.Name == "#text") continue; + var childNodes = node.SelectNodes("./*|./text()"); + if (childNodes != null) + { + foreach (var child in childNodes) + { + nodes.Enqueue(child); + parentNode.InsertBefore(child, node); + } + } + parentNode.RemoveChild(node); + } + var result = document.DocumentNode.InnerHtml; + result = Regex.Replace(result, @" |\r\n|\t|\n|\r", " "); + result = Regex.Replace(result, @""", "\""); + return result; + } + + internal PlanData RetrieveTenantPlans() + { + var result = _httpClient.GetAsync($"{LcsUrl}/RainierProject/RetrieveTenantPlans/{LcsProjectId}?_={DateTimeOffset.Now.ToUnixTimeSeconds()}").Result; + result.EnsureSuccessStatusCode(); + + var responseBody = result.Content.ReadAsStringAsync().Result; + var response = JsonConvert.DeserializeObject(responseBody); + return !response.Success + ? null + : response.Data == null ? null : JsonConvert.DeserializeObject(response.Data.ToString()); + } + + internal async Task> GetUpcomingCalendarsAsync() + { + try + { + var result = await _httpClient.GetAsync($"{LcsUrl}/RainierSettings/GetUpcomingCalendars/{LcsProjectId}/?id={LcsProjectId}&_={DateTimeOffset.Now.ToUnixTimeSeconds()}"); + result.EnsureSuccessStatusCode(); + + var responseBody = await result.Content.ReadAsStringAsync(); + dynamic response = JsonConvert.DeserializeObject(responseBody); + return !response.Success + ? null + : response.Data == null ? null : JsonConvert.DeserializeObject>(response.Data.UpcomingCalendarViewModels.ToString()); + } + catch + { + return null; + } + } + + internal string GetTimeZoneOffsetInMinutes() + { + var offset = -TimeZoneInfo.Local.GetUtcOffset(DateTime.Now);//reverse sign + return offset.TotalMinutes.ToString(); + } + + internal DeploymentEnvironmentType GetDeploymentEnvironmentTypeInfo(string environmentId) + { + var result = _httpClient.GetAsync($"{LcsUrl}/Environment/GetDeploymentEnvironmentTypeInfo/{LcsProjectId}?environmentId={environmentId}&_={DateTimeOffset.Now.ToUnixTimeSeconds()}").Result; + result.EnsureSuccessStatusCode(); + var responseBody = result.Content.ReadAsStringAsync().Result; + var response = JsonConvert.DeserializeObject(responseBody); + if (response.Success && response.Data != null) + { + Enum.TryParse(response.Data.ToString(), out DeploymentEnvironmentType envType); + return envType; + } + else + { + return DeploymentEnvironmentType.MicrosoftManagedIaas; + } + } + + internal List GetServicesToRestart() + { + var result = _httpClient.GetAsync($"{LcsUrl}/EnvironmentServicingV2/GetServicesToRestart/{LcsProjectId}?_={DateTimeOffset.Now.ToUnixTimeSeconds()}").Result; + result.EnsureSuccessStatusCode(); + var responseBody = result.Content.ReadAsStringAsync().Result; + var response = JsonConvert.DeserializeObject(responseBody); + return !response.Success + ? null + : response.Data == null ? null : JsonConvert.DeserializeObject>(response.Data.ToString()); + } + + internal ServiceRestartResponseData RestartService(CloudHostedInstance instance, string serviceTorestart) + { + var parameters = $"lcsEnvironmentId={instance.EnvironmentId}&axServiceName={serviceTorestart}"; + using (_stringContent = new StringContent(parameters, Encoding.UTF8, "application/x-www-form-urlencoded")) + { + SetRequestVerificationToken($"{LcsUrl}/V2"); + var result = _httpClient.PostAsync($"{LcsUrl}/EnvironmentServicingV2/RestartService/{LcsProjectId}", _stringContent).Result; + result.EnsureSuccessStatusCode(); + var responseBody = result.Content.ReadAsStringAsync().Result; + var response = JsonConvert.DeserializeObject(responseBody); + return !response.Success + ? null + : response.Data == null ? null : JsonConvert.DeserializeObject(response.Data.ToString()); + } + } + + internal async Task GetOngoingActionDetailsAsync(CloudHostedInstance instance) + { + var result = await _httpClient.GetAsync($"{LcsUrl}/Environment/GetOngoingActionDetails/{LcsProjectId}?environmentId={instance.EnvironmentId}"); + result.EnsureSuccessStatusCode(); + var responseBody = await result.Content.ReadAsStringAsync(); + var response = JsonConvert.DeserializeObject(responseBody); + return !response.Success + ? null + : response.Data == null ? null : JsonConvert.DeserializeObject(response.Data.ToString()); + } + + internal async Task> GetEnvironmentHistoryDetailsAsync(CloudHostedInstance instance) + { + const int historyItemsCount = 40; + + var pagingParams = new PagingParameters() + { + DynamicPaging = new DynamicPaging() + { + StartPosition = 0, + ItemsRequested = historyItemsCount + } + }; + var pagingParamsJson = JsonConvert.SerializeObject(pagingParams, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto }); + + using (_stringContent = new StringContent(pagingParamsJson, Encoding.UTF8, "application/json")) + { + SetRequestVerificationToken($"{LcsUrl}/V2"); + var result = await _httpClient.PostAsync($"{LcsUrl}/Environment/GetEnvironmentHistoryDetails/{LcsProjectId}?environmentId={instance.EnvironmentId}&_={DateTimeOffset.Now.ToUnixTimeSeconds()}", _stringContent); + result.EnsureSuccessStatusCode(); + var settings = new JsonSerializerSettings + { + NullValueHandling = NullValueHandling.Ignore, + MissingMemberHandling = MissingMemberHandling.Ignore + }; + + var responseBody = await result.Content.ReadAsStringAsync(); + var response = JsonConvert.DeserializeObject(responseBody); + if (response.Success) + { + var data = JsonConvert.DeserializeObject(response.Data.ToString(), settings); + if (data != null) + { + return data.Results; + } + } + return null; + } + } + + /// + /// Dispose + /// + /// enable dispose + private void Dispose(bool disposing) + { + if (_disposed) return; + _disposed = true; + if (disposing) + { + _httpClient?.Dispose(); + } + } + } +} From c4536f069af2f1bf5f9c3751bd8958a6bbd1f6b6 Mon Sep 17 00:00:00 2001 From: Florian Hopfner Date: Sun, 28 Jan 2024 19:01:42 +0100 Subject: [PATCH 04/15] Add asset library extension to HttpClientHelper --- .../HttpClientHelperAssetLibraryExtension.cs | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 2LCS/AssetLibrary/HttpClientHelperAssetLibraryExtension.cs diff --git a/2LCS/AssetLibrary/HttpClientHelperAssetLibraryExtension.cs b/2LCS/AssetLibrary/HttpClientHelperAssetLibraryExtension.cs new file mode 100644 index 0000000..31e207b --- /dev/null +++ b/2LCS/AssetLibrary/HttpClientHelperAssetLibraryExtension.cs @@ -0,0 +1,40 @@ +using LCS.JsonObjects; +using Newtonsoft.Json; +using Newtonsoft.Json.Linq; +using System; +using System.Collections.Generic; + +namespace LCS.AssetLibrary; + +internal static class HttpClientHelperAssetLibraryExtension +{ + internal static string GetGetSharedAssetsUrl(this HttpClientHelper httpClientHelper, + AssetFileType assetFileType) + { + return $"{httpClientHelper.LcsUrl}/FileAsset/GetSharedAssets/?assetKind={((int)assetFileType)}&_={DateTimeOffset.Now.ToUnixTimeSeconds()}"; + } + + internal static List GetSharedAssetList(this HttpClientHelper httpClientHelper, + AssetFileType assetFileType) + { + var assetList = new List(); + + var url = httpClientHelper.GetGetSharedAssetsUrl(assetFileType); + var result = httpClientHelper.GetHttpClient().GetAsync(url).Result; + result.EnsureSuccessStatusCode(); + + var responseBody = result.Content.ReadAsStringAsync().Result; + var response = JsonConvert.DeserializeObject(responseBody); + if (response.Success && response.Data != null) + { + var responseData = response.Data as JToken; + if (responseData != null) + { + var assetData = responseData[0].ToObject(); + assetList = assetData.Assets; + } + } + + return assetList; + } +} From 561f9fcca63e43be5c56dc77a3a3bb987aff7e4d Mon Sep 17 00:00:00 2001 From: Florian Hopfner Date: Sun, 28 Jan 2024 19:05:00 +0100 Subject: [PATCH 05/15] Add experimental NuGet packages export --- 2LCS/Forms/MainForm.Designer.cs | 41 +++++++++++++++++++++++++++------ 2LCS/Forms/MainForm.cs | 6 +++++ 2LCS/Forms/MainForm.resx | 2 +- 3 files changed, 41 insertions(+), 8 deletions(-) diff --git a/2LCS/Forms/MainForm.Designer.cs b/2LCS/Forms/MainForm.Designer.cs index 87aac91..646a682 100644 --- a/2LCS/Forms/MainForm.Designer.cs +++ b/2LCS/Forms/MainForm.Designer.cs @@ -109,6 +109,7 @@ private void InitializeComponent() logoutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); cookieToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); parametersToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); tabControl = new System.Windows.Forms.TabControl(); cheTabPage = new System.Windows.Forms.TabPage(); saasTabPage = new System.Windows.Forms.TabPage(); @@ -179,7 +180,9 @@ private void InitializeComponent() notifyIcon = new System.Windows.Forms.NotifyIcon(components); notifyIconContextMenu = new System.Windows.Forms.ContextMenuStrip(components); notifyIconMenuClose = new System.Windows.Forms.ToolStripMenuItem(); - aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + exportAssetLibraryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + sharedAssetLibraryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + nuGetPackagesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); ((System.ComponentModel.ISupportInitialize)cheDataGridView).BeginInit(); cheInstanceContextMenu.SuspendLayout(); mainMenuStrip.SuspendLayout(); @@ -674,7 +677,7 @@ private void InitializeComponent() // // exportToolStripMenuItem // - exportToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { exportProjectDataToolStripMenuItem1, exportListOfUsersToolStripMenuItem, exportListOfInstancesForAllProjectsToolStripMenuItem, exportUpdateScheduleForAllProjectsToolStripMenuItem, exportListOfEnvChangesToolStripMenuItem }); + exportToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { exportProjectDataToolStripMenuItem1, exportListOfUsersToolStripMenuItem, exportListOfInstancesForAllProjectsToolStripMenuItem, exportUpdateScheduleForAllProjectsToolStripMenuItem, exportListOfEnvChangesToolStripMenuItem, exportAssetLibraryToolStripMenuItem }); exportToolStripMenuItem.Enabled = false; exportToolStripMenuItem.Name = "exportToolStripMenuItem"; exportToolStripMenuItem.Size = new System.Drawing.Size(66, 24); @@ -807,6 +810,13 @@ private void InitializeComponent() parametersToolStripMenuItem.Text = "Parameters"; parametersToolStripMenuItem.Click += ParametersToolStripMenuItem_Click; // + // aboutToolStripMenuItem + // + aboutToolStripMenuItem.Name = "aboutToolStripMenuItem"; + aboutToolStripMenuItem.Size = new System.Drawing.Size(64, 24); + aboutToolStripMenuItem.Text = "About"; + aboutToolStripMenuItem.Click += aboutToolStripMenuItem_Click; + // // tabControl // tabControl.Controls.Add(cheTabPage); @@ -1358,12 +1368,26 @@ private void InitializeComponent() notifyIconMenuClose.Text = "Close 2LCS"; notifyIconMenuClose.Click += NotifyIconMenuClose_Click; // - // aboutToolStripMenuItem + // exportAssetLibraryToolStripMenuItem // - aboutToolStripMenuItem.Name = "aboutToolStripMenuItem"; - aboutToolStripMenuItem.Size = new System.Drawing.Size(64, 24); - aboutToolStripMenuItem.Text = "About"; - aboutToolStripMenuItem.Click += aboutToolStripMenuItem_Click; + exportAssetLibraryToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { sharedAssetLibraryToolStripMenuItem }); + exportAssetLibraryToolStripMenuItem.Name = "exportAssetLibraryToolStripMenuItem"; + exportAssetLibraryToolStripMenuItem.Size = new System.Drawing.Size(445, 26); + exportAssetLibraryToolStripMenuItem.Text = "Export asset library"; + // + // sharedAssetLibraryToolStripMenuItem + // + sharedAssetLibraryToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { nuGetPackagesToolStripMenuItem }); + sharedAssetLibraryToolStripMenuItem.Name = "sharedAssetLibraryToolStripMenuItem"; + sharedAssetLibraryToolStripMenuItem.Size = new System.Drawing.Size(224, 26); + sharedAssetLibraryToolStripMenuItem.Text = "Shared asset library"; + // + // nuGetPackagesToolStripMenuItem + // + nuGetPackagesToolStripMenuItem.Name = "nuGetPackagesToolStripMenuItem"; + nuGetPackagesToolStripMenuItem.Size = new System.Drawing.Size(224, 26); + nuGetPackagesToolStripMenuItem.Text = "NuGet packages"; + nuGetPackagesToolStripMenuItem.Click += nuGetPackagesToolStripMenuItem_Click; // // MainForm // @@ -1550,6 +1574,9 @@ private void InitializeComponent() private System.Windows.Forms.ToolStripMenuItem currentProjectUsersExportMenuItem; private System.Windows.Forms.ToolStripMenuItem allProjectUsersExportMenuItem; private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem exportAssetLibraryToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem sharedAssetLibraryToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem nuGetPackagesToolStripMenuItem; } } diff --git a/2LCS/Forms/MainForm.cs b/2LCS/Forms/MainForm.cs index 7444ab1..fbeb5e5 100644 --- a/2LCS/Forms/MainForm.cs +++ b/2LCS/Forms/MainForm.cs @@ -20,6 +20,7 @@ using Xceed.Words.NET; using static LCS.NativeMethods; using System.Globalization; +using LCS.AssetLibrary; namespace LCS.Forms { @@ -2552,6 +2553,11 @@ private void aboutToolStripMenuItem_Click(object sender, EventArgs e) About2LCS about2LCS = new About2LCS(); about2LCS.ShowDialog(); } + + private void nuGetPackagesToolStripMenuItem_Click(object sender, EventArgs e) + { + _httpClientHelper.GetSharedAssetList(AssetFileType.NuGetPackage); + } } public static class StringExtension diff --git a/2LCS/Forms/MainForm.resx b/2LCS/Forms/MainForm.resx index 43397f6..29f31ad 100644 --- a/2LCS/Forms/MainForm.resx +++ b/2LCS/Forms/MainForm.resx @@ -18,7 +18,7 @@ System.Resources.ResXResourceReader, System.Windows.Forms, ... System.Resources.ResXResourceWriter, System.Windows.Forms, ... this is my long stringthis is a comment - Blue + Blue [base64 mime encoded serialized .NET Framework object] From 76c363ceadc4259ba5586257327b3b81f71aade7 Mon Sep 17 00:00:00 2001 From: Florian Hopfner Date: Mon, 29 Jan 2024 18:55:51 +0100 Subject: [PATCH 06/15] Add GetSharedAssetVersionList request to asset library HttpClientHelper extension --- .../HttpClientHelperAssetLibraryExtension.cs | 53 +++++++++++++++---- 1 file changed, 44 insertions(+), 9 deletions(-) diff --git a/2LCS/AssetLibrary/HttpClientHelperAssetLibraryExtension.cs b/2LCS/AssetLibrary/HttpClientHelperAssetLibraryExtension.cs index 31e207b..d231c9d 100644 --- a/2LCS/AssetLibrary/HttpClientHelperAssetLibraryExtension.cs +++ b/2LCS/AssetLibrary/HttpClientHelperAssetLibraryExtension.cs @@ -3,18 +3,28 @@ using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; +using System.Net.Http; +using System.Text; namespace LCS.AssetLibrary; internal static class HttpClientHelperAssetLibraryExtension { - internal static string GetGetSharedAssetsUrl(this HttpClientHelper httpClientHelper, + internal static string GetGetSharedAssetsUrl( + this HttpClientHelper httpClientHelper, AssetFileType assetFileType) { return $"{httpClientHelper.LcsUrl}/FileAsset/GetSharedAssets/?assetKind={((int)assetFileType)}&_={DateTimeOffset.Now.ToUnixTimeSeconds()}"; } - internal static List GetSharedAssetList(this HttpClientHelper httpClientHelper, + internal static string GetGetFileAssetVersionsUrl( + this HttpClientHelper httpClientHelper) + { + return $"{httpClientHelper.LcsUrl}/FileAsset/GetFileAssetVersions"; + } + + internal static List GetSharedAssetList( + this HttpClientHelper httpClientHelper, AssetFileType assetFileType) { var assetList = new List(); @@ -25,16 +35,41 @@ internal static List GetSharedAssetList(this HttpClientHelper httpClientH var responseBody = result.Content.ReadAsStringAsync().Result; var response = JsonConvert.DeserializeObject(responseBody); - if (response.Success && response.Data != null) + if (response.Success + && response.Data != null + && response.Data is JToken responseData) { - var responseData = response.Data as JToken; - if (responseData != null) - { - var assetData = responseData[0].ToObject(); - assetList = assetData.Assets; - } + var assetData = responseData[0].ToObject(); + assetList = assetData.Assets; } return assetList; } + + internal static List GetSharedAssetVersionList( + this HttpClientHelper httpClientHelper, + string parentFileAssetId) + { + var assetVersionList = new List(); + + var url = httpClientHelper.GetGetFileAssetVersionsUrl(); + var stringContent = new StringContent( + $"parentFileAssetId={parentFileAssetId}", + Encoding.UTF8, + "application/x-www-form-urlencoded"); + httpClientHelper.SetRequestVerificationToken($"{httpClientHelper.LcsUrl}/V2"); + var result = httpClientHelper.GetHttpClient().PostAsync(url, stringContent).Result; + result.EnsureSuccessStatusCode(); + + var responseBody = result.Content.ReadAsStringAsync().Result; + var response = JsonConvert.DeserializeObject(responseBody); + if (response.Success + && response.Data != null + && response.Data is JToken responseData) + { + assetVersionList = responseData.ToObject>(); + } + + return assetVersionList; + } } From 975cb29cfbffb1586ef3b9f9a9081b3ea872112d Mon Sep 17 00:00:00 2001 From: Florian Hopfner Date: Mon, 29 Jan 2024 18:56:16 +0100 Subject: [PATCH 07/15] Add class for exporting asset versions --- 2LCS/AssetLibrary/AssetVersionForExport.cs | 54 ++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 2LCS/AssetLibrary/AssetVersionForExport.cs diff --git a/2LCS/AssetLibrary/AssetVersionForExport.cs b/2LCS/AssetLibrary/AssetVersionForExport.cs new file mode 100644 index 0000000..e26f530 --- /dev/null +++ b/2LCS/AssetLibrary/AssetVersionForExport.cs @@ -0,0 +1,54 @@ +namespace LCS.AssetLibrary; + +public class AssetVersionForExport +{ + public string Id { get; set; } + public string AssetName { get; set; } + public string FileName { get; set; } + public string FileDescription { get; set; } + public string DisplaySize { get; set; } + public int CommitStatus { get; set; } + public int State { get; set; } + public int Scope { get; set; } + public string FileLocation { get; set; } + public int Version { get; set; } + public int FileType { get; set; } + public string CreatedByName { get; set; } + public string ModifiedByName { get; set; } + public bool IsGoldBuild { get; set; } + public string DataPackageApplicationDetails { get; set; } + public int ValidationStatus { get; set; } + public string AadTenantId { get; set; } + public string ValidationStatusText { get; set; } + public string NextValidationDate { get; set; } + public int NumValidationAttempts { get; set; } + public int NumTenantTaggingAttempts { get; set; } + public string ReleaseDetailsAssetId { get; set; } + public bool IsMockData { get; set; } + public string ReleaseDetailsLink { get; set; } + public string ParentAssetId { get; set; } + public bool IsInvalid { get; set; } + public string DisplayValidationSymbol { get; set; } + public string DisplayModifiedDate { get; set; } + public string DisplayCreatedDate { get; set; } + public string DisplayId { get; set; } + public string Name { get; set; } + public string Description { get; set; } + public string DisplayScope { get; set; } + public string DisplayState { get; set; } + public string Location { get; set; } + public bool IsAbsoluteLocation { get; set; } + public bool CanDelete { get; set; } + public bool CanUpdate { get; set; } + public bool CanPublish { get; set; } + public bool CanNavigate { get; set; } + public string DisplayVersion { get; set; } + public int OriginalScope { get; set; } + public string TelemetryId { get; set; } + public int CreatedBy { get; set; } + public string CreatedDate { get; set; } + public int ModifiedBy { get; set; } + public string ModifiedDate { get; set; } + public string LocalCreatedDate { get; set; } + public string LocalModifiedDate { get; set; } +} From 59943a4f4de030bf70e9404a06615c94a53a049c Mon Sep 17 00:00:00 2001 From: Florian Hopfner Date: Mon, 29 Jan 2024 18:56:55 +0100 Subject: [PATCH 08/15] Update LCS JSON object class for assets --- 2LCS/JsonObjects.cs | 41 +++++++++++++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/2LCS/JsonObjects.cs b/2LCS/JsonObjects.cs index 045a513..c980871 100644 --- a/2LCS/JsonObjects.cs +++ b/2LCS/JsonObjects.cs @@ -6,21 +6,42 @@ namespace LCS.JsonObjects public class Asset { public string Id { get; set; } - public string Name { get; set; } public string FileName { get; set; } public string FileDescription { get; set; } - public int SizeByte { get; set; } + public int CommitStatus { get; set; } public int State { get; set; } public int Scope { get; set; } - public int CommitStatus { get; set; } - public string FileLocation { get; set; } - public int FileType { get; set; } - public string ModifiedDate { get; set; } - public string CreatedDate { get; set; } public int Version { get; set; } - public bool IsMockData { get; set; } - public string ParentFileAssetId { get; set; } - public string ArtifactId { get; set; } + public int FileType { get; set; } + public string CreatedByName { get; set; } + public string ModifiedByName { get; set; } + public bool IsGoldBuild { get; set; } + public int ValidationStatus { get; set; } + public string AadTenantId { get; set; } + public string ValidationStatusText { get; set; } + public string ReleaseDetailsAssetId { get; set; } + public string ReleaseDetailsLink { get; set; } + public string ParentAssetId { get; set; } + public bool IsInvalid { get; set; } + public string DisplayValidationSymbol { get; set; } + public string DisplayModifiedDate { get; set; } + public string DisplayCreatedDate { get; set; } + public string DisplayId { get; set; } + public string Name { get; set; } + public string Description { get; set; } + public string DisplayScope { get; set; } + public string DisplayState { get; set; } + public string Location { get; set; } + public bool IsAbsoluteLocation { get; set; } + public bool CanDelete { get; set; } + public bool CanUpdate { get; set; } + public bool CanPublish { get; set; } + public bool CanNavigate { get; set; } + public string DisplayVersion { get; set; } + public int OriginalScope { get; set; } + public string DisplayOriginalScope { get; set; } + public string LocalCreatedDate { get; set; } + public string LocalModifiedDate { get; set; } } public class AssetData From 0b228c2b2de4e2d5defb0e9d60579ad89fa95742 Mon Sep 17 00:00:00 2001 From: Florian Hopfner Date: Mon, 29 Jan 2024 18:57:13 +0100 Subject: [PATCH 09/15] Add AutoMapper dependency --- 2LCS/2LCS.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/2LCS/2LCS.csproj b/2LCS/2LCS.csproj index 4fcc4de..4c3478c 100644 --- a/2LCS/2LCS.csproj +++ b/2LCS/2LCS.csproj @@ -82,6 +82,7 @@ + 30.0.1 From d5a082879c67d0b9abdf67d396bacee54a0b9d27 Mon Sep 17 00:00:00 2001 From: Florian Hopfner Date: Mon, 29 Jan 2024 18:57:52 +0100 Subject: [PATCH 10/15] Add export of NuGet package asset versions to csv file --- 2LCS/Forms/MainForm.cs | 46 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/2LCS/Forms/MainForm.cs b/2LCS/Forms/MainForm.cs index fbeb5e5..93bb442 100644 --- a/2LCS/Forms/MainForm.cs +++ b/2LCS/Forms/MainForm.cs @@ -21,6 +21,7 @@ using static LCS.NativeMethods; using System.Globalization; using LCS.AssetLibrary; +using AutoMapper; namespace LCS.Forms { @@ -2556,7 +2557,50 @@ private void aboutToolStripMenuItem_Click(object sender, EventArgs e) private void nuGetPackagesToolStripMenuItem_Click(object sender, EventArgs e) { - _httpClientHelper.GetSharedAssetList(AssetFileType.NuGetPackage); + var assets = _httpClientHelper.GetSharedAssetList(AssetFileType.NuGetPackage); + + // for each asset in 50 latest assets + // get the asset versions + // compile all versions into one list that includes the asset name + // sort the list by asset name and version + + var assetVersionsForExportList = new List(); + var config = new MapperConfiguration(cfg => cfg.CreateMap()); + var mapper = config.CreateMapper(); + assets + .Take(2) + .ToList() + .ForEach(asset => + { + var assetVersions = _httpClientHelper.GetSharedAssetVersionList(asset.ParentAssetId); + assetVersionsForExportList.AddRange(assetVersions + .Select(assetVersion => mapper.Map(assetVersion)) + .Select(assetVersionForExport => + { + assetVersionForExport.AssetName = asset.Name; + return assetVersionForExport; + })); + }); + + SaveFileDialog saveFile = new() + { + FileName = "D365FO NuGet Packages.csv", + Filter = "CSV files (*.csv)|*.csv|All files (*.*)|*.*" + }; + + if (saveFile.ShowDialog() == DialogResult.OK) + { + try + { + using StreamWriter sw = new(saveFile.FileName, false, Encoding.Unicode); + var csv = new CsvWriter(sw, CultureInfo.CurrentCulture); + csv.WriteRecords(assetVersionsForExportList); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message); + } + } } } From 82c1c8af294548f0a9b4dba94daf687d8e830a8d Mon Sep 17 00:00:00 2001 From: Florian Hopfner Date: Tue, 30 Jan 2024 18:42:05 +0100 Subject: [PATCH 11/15] Add ReleaseNotes to AssetVersionForExport object --- 2LCS/AssetLibrary/AssetVersionForExport.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/2LCS/AssetLibrary/AssetVersionForExport.cs b/2LCS/AssetLibrary/AssetVersionForExport.cs index e26f530..1cbb15b 100644 --- a/2LCS/AssetLibrary/AssetVersionForExport.cs +++ b/2LCS/AssetLibrary/AssetVersionForExport.cs @@ -2,8 +2,10 @@ public class AssetVersionForExport { - public string Id { get; set; } public string AssetName { get; set; } + public string ReleaseNotes { get; set; } + + public string Id { get; set; } public string FileName { get; set; } public string FileDescription { get; set; } public string DisplaySize { get; set; } From 2424b8c51ed7377294fa22874b18a6306647c2a0 Mon Sep 17 00:00:00 2001 From: Florian Hopfner Date: Tue, 30 Jan 2024 18:42:54 +0100 Subject: [PATCH 12/15] Add GetAssetReleaseDetails capability to asset library extension to HttpClientHelper --- .../HttpClientHelperAssetLibraryExtension.cs | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/2LCS/AssetLibrary/HttpClientHelperAssetLibraryExtension.cs b/2LCS/AssetLibrary/HttpClientHelperAssetLibraryExtension.cs index d231c9d..0e9f1b7 100644 --- a/2LCS/AssetLibrary/HttpClientHelperAssetLibraryExtension.cs +++ b/2LCS/AssetLibrary/HttpClientHelperAssetLibraryExtension.cs @@ -23,6 +23,13 @@ internal static string GetGetFileAssetVersionsUrl( return $"{httpClientHelper.LcsUrl}/FileAsset/GetFileAssetVersions"; } + internal static string GetDownloadReleaseDetailsForAssetUrl( + this HttpClientHelper httpClientHelper, + string releaseDetailsLink) + { + return $"{httpClientHelper.LcsUrl}{releaseDetailsLink}&_={DateTimeOffset.Now.ToUnixTimeSeconds()}"; + } + internal static List GetSharedAssetList( this HttpClientHelper httpClientHelper, AssetFileType assetFileType) @@ -72,4 +79,31 @@ internal static List GetSharedAssetVersionList( return assetVersionList; } + + internal static string GetAssetReleaseDetails( + this HttpClientHelper httpClientHelper, + string releaseDetailsLink) + { + if (string.IsNullOrEmpty(releaseDetailsLink)) + { + return string.Empty; + } + + var url = httpClientHelper.GetDownloadReleaseDetailsForAssetUrl(releaseDetailsLink); + var result = httpClientHelper.GetHttpClient().GetAsync(url).Result; + result.EnsureSuccessStatusCode(); + + var responseBody = result.Content.ReadAsStringAsync().Result; + var response = JsonConvert.DeserializeObject(responseBody); + if (response.Success + && response.Data != null + && response.Data is JToken responseData) + { + var releaseNotesLink = responseData["RedirectLink"].ToString(); + var releaseNotes = httpClientHelper.GetHttpClient().GetAsync(releaseNotesLink).Result; + return releaseNotes.Content.ReadAsStringAsync().Result; + } + + return string.Empty; + } } From 064f6bac5755d59b562e89e17c6307970ca46cc5 Mon Sep 17 00:00:00 2001 From: Florian Hopfner Date: Tue, 30 Jan 2024 18:45:55 +0100 Subject: [PATCH 13/15] Add release notes to NuGet packages export --- 2LCS/Forms/MainForm.cs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/2LCS/Forms/MainForm.cs b/2LCS/Forms/MainForm.cs index 93bb442..49f80fc 100644 --- a/2LCS/Forms/MainForm.cs +++ b/2LCS/Forms/MainForm.cs @@ -2565,10 +2565,11 @@ private void nuGetPackagesToolStripMenuItem_Click(object sender, EventArgs e) // sort the list by asset name and version var assetVersionsForExportList = new List(); - var config = new MapperConfiguration(cfg => cfg.CreateMap()); + var config = new MapperConfiguration( + cfg => cfg.CreateMap()); var mapper = config.CreateMapper(); assets - .Take(2) + .Take(4) .ToList() .ForEach(asset => { @@ -2578,6 +2579,9 @@ private void nuGetPackagesToolStripMenuItem_Click(object sender, EventArgs e) .Select(assetVersionForExport => { assetVersionForExport.AssetName = asset.Name; + assetVersionForExport.ReleaseNotes = + _httpClientHelper.GetAssetReleaseDetails( + assetVersionForExport.ReleaseDetailsLink); return assetVersionForExport; })); }); From 99155496aadcd491ebdcce86ee8892d97e3c3577 Mon Sep 17 00:00:00 2001 From: Florian Hopfner Date: Sat, 17 Feb 2024 18:25:38 +0100 Subject: [PATCH 14/15] Rework NuGet packages export - use version information from last line of file description instead of release notes - add a form to do the export, which enables date filters and progress information - limit exported data to relevant information --- .../AssetLibrarySearch.Designer.cs | 229 +++ 2LCS/AssetLibrary/AssetLibrarySearch.cs | 92 + 2LCS/AssetLibrary/AssetLibrarySearch.resx | 1828 +++++++++++++++++ 2LCS/AssetLibrary/AssetVersionForExport.cs | 46 +- 2LCS/Forms/MainForm.Designer.cs | 42 +- 2LCS/Forms/MainForm.cs | 54 +- 2LCS/JsonObjects.cs | 9 +- 7 files changed, 2179 insertions(+), 121 deletions(-) create mode 100644 2LCS/AssetLibrary/AssetLibrarySearch.Designer.cs create mode 100644 2LCS/AssetLibrary/AssetLibrarySearch.cs create mode 100644 2LCS/AssetLibrary/AssetLibrarySearch.resx diff --git a/2LCS/AssetLibrary/AssetLibrarySearch.Designer.cs b/2LCS/AssetLibrary/AssetLibrarySearch.Designer.cs new file mode 100644 index 0000000..b946168 --- /dev/null +++ b/2LCS/AssetLibrary/AssetLibrarySearch.Designer.cs @@ -0,0 +1,229 @@ +namespace LCS.AssetLibrary +{ + partial class AssetLibrarySearch + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AssetLibrarySearch)); + assetsCreatedAfter = new System.Windows.Forms.DateTimePicker(); + assetsCreatedBefore = new System.Windows.Forms.DateTimePicker(); + assetsCreatedAfterLabel = new System.Windows.Forms.Label(); + assetsCreatedBeforeLabel = new System.Windows.Forms.Label(); + nugetPackagesFilesGroup = new System.Windows.Forms.GroupBox(); + searchApplicationVersionLabel = new System.Windows.Forms.Label(); + searchPlatformVersionLabel = new System.Windows.Forms.Label(); + searchApplicationVersion = new System.Windows.Forms.TextBox(); + searchPlatformVersion = new System.Windows.Forms.TextBox(); + searchNameOrDescriptionLabel = new System.Windows.Forms.Label(); + searchNameOrDescription = new System.Windows.Forms.TextBox(); + search = new System.Windows.Forms.Button(); + assetExportProgress = new System.Windows.Forms.ProgressBar(); + assetExportProgressNumberOfMax = new System.Windows.Forms.Label(); + assetExportProgressAssetName = new System.Windows.Forms.Label(); + nugetPackagesFilesGroup.SuspendLayout(); + SuspendLayout(); + // + // assetsCreatedAfter + // + assetsCreatedAfter.Location = new System.Drawing.Point(157, 12); + assetsCreatedAfter.Name = "assetsCreatedAfter"; + assetsCreatedAfter.Size = new System.Drawing.Size(250, 27); + assetsCreatedAfter.TabIndex = 0; + // + // assetsCreatedBefore + // + assetsCreatedBefore.Location = new System.Drawing.Point(583, 12); + assetsCreatedBefore.Name = "assetsCreatedBefore"; + assetsCreatedBefore.Size = new System.Drawing.Size(250, 27); + assetsCreatedBefore.TabIndex = 1; + assetsCreatedBefore.Value = new System.DateTime(2024, 2, 17, 14, 36, 55, 0); + // + // assetsCreatedAfterLabel + // + assetsCreatedAfterLabel.AutoSize = true; + assetsCreatedAfterLabel.Location = new System.Drawing.Point(12, 17); + assetsCreatedAfterLabel.Name = "assetsCreatedAfterLabel"; + assetsCreatedAfterLabel.Size = new System.Drawing.Size(139, 20); + assetsCreatedAfterLabel.TabIndex = 2; + assetsCreatedAfterLabel.Text = "Assets created after"; + // + // assetsCreatedBeforeLabel + // + assetsCreatedBeforeLabel.AutoSize = true; + assetsCreatedBeforeLabel.Location = new System.Drawing.Point(425, 17); + assetsCreatedBeforeLabel.Name = "assetsCreatedBeforeLabel"; + assetsCreatedBeforeLabel.Size = new System.Drawing.Size(152, 20); + assetsCreatedBeforeLabel.TabIndex = 3; + assetsCreatedBeforeLabel.Text = "Assets created before"; + // + // nugetPackagesFilesGroup + // + nugetPackagesFilesGroup.Controls.Add(searchApplicationVersionLabel); + nugetPackagesFilesGroup.Controls.Add(searchPlatformVersionLabel); + nugetPackagesFilesGroup.Controls.Add(searchApplicationVersion); + nugetPackagesFilesGroup.Controls.Add(searchPlatformVersion); + nugetPackagesFilesGroup.Location = new System.Drawing.Point(12, 87); + nugetPackagesFilesGroup.Name = "nugetPackagesFilesGroup"; + nugetPackagesFilesGroup.Size = new System.Drawing.Size(821, 99); + nugetPackagesFilesGroup.TabIndex = 4; + nugetPackagesFilesGroup.TabStop = false; + nugetPackagesFilesGroup.Text = "NuGet packages files"; + nugetPackagesFilesGroup.Visible = false; + // + // searchApplicationVersionLabel + // + searchApplicationVersionLabel.AutoSize = true; + searchApplicationVersionLabel.Location = new System.Drawing.Point(6, 62); + searchApplicationVersionLabel.Name = "searchApplicationVersionLabel"; + searchApplicationVersionLabel.Size = new System.Drawing.Size(137, 20); + searchApplicationVersionLabel.TabIndex = 3; + searchApplicationVersionLabel.Text = "Application version"; + // + // searchPlatformVersionLabel + // + searchPlatformVersionLabel.AutoSize = true; + searchPlatformVersionLabel.Location = new System.Drawing.Point(6, 29); + searchPlatformVersionLabel.Name = "searchPlatformVersionLabel"; + searchPlatformVersionLabel.Size = new System.Drawing.Size(117, 20); + searchPlatformVersionLabel.TabIndex = 2; + searchPlatformVersionLabel.Text = "Platform version"; + // + // searchApplicationVersion + // + searchApplicationVersion.Location = new System.Drawing.Point(145, 59); + searchApplicationVersion.Name = "searchApplicationVersion"; + searchApplicationVersion.Size = new System.Drawing.Size(250, 27); + searchApplicationVersion.TabIndex = 1; + searchApplicationVersion.Text = "10.0.1725.159"; + // + // searchPlatformVersion + // + searchPlatformVersion.Location = new System.Drawing.Point(145, 26); + searchPlatformVersion.Name = "searchPlatformVersion"; + searchPlatformVersion.Size = new System.Drawing.Size(250, 27); + searchPlatformVersion.TabIndex = 0; + searchPlatformVersion.Text = "7.0.7068.158"; + // + // searchNameOrDescriptionLabel + // + searchNameOrDescriptionLabel.AutoSize = true; + searchNameOrDescriptionLabel.Location = new System.Drawing.Point(12, 48); + searchNameOrDescriptionLabel.Name = "searchNameOrDescriptionLabel"; + searchNameOrDescriptionLabel.Size = new System.Drawing.Size(145, 20); + searchNameOrDescriptionLabel.TabIndex = 5; + searchNameOrDescriptionLabel.Text = "Name or description"; + searchNameOrDescriptionLabel.Visible = false; + // + // searchNameOrDescription + // + searchNameOrDescription.Location = new System.Drawing.Point(157, 45); + searchNameOrDescription.Name = "searchNameOrDescription"; + searchNameOrDescription.Size = new System.Drawing.Size(250, 27); + searchNameOrDescription.TabIndex = 6; + searchNameOrDescription.Visible = false; + // + // search + // + search.Location = new System.Drawing.Point(373, 288); + search.Name = "search"; + search.Size = new System.Drawing.Size(94, 29); + search.TabIndex = 7; + search.Text = "Search"; + search.UseVisualStyleBackColor = true; + search.Click += search_Click; + // + // assetExportProgress + // + assetExportProgress.Location = new System.Drawing.Point(239, 192); + assetExportProgress.Name = "assetExportProgress"; + assetExportProgress.Size = new System.Drawing.Size(367, 29); + assetExportProgress.TabIndex = 8; + // + // assetExportProgressNumberOfMax + // + assetExportProgressNumberOfMax.Location = new System.Drawing.Point(335, 224); + assetExportProgressNumberOfMax.Name = "assetExportProgressNumberOfMax"; + assetExportProgressNumberOfMax.Size = new System.Drawing.Size(169, 20); + assetExportProgressNumberOfMax.TabIndex = 9; + assetExportProgressNumberOfMax.Text = " "; + assetExportProgressNumberOfMax.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; + // + // assetExportProgressAssetName + // + assetExportProgressAssetName.AutoSize = true; + assetExportProgressAssetName.Location = new System.Drawing.Point(335, 244); + assetExportProgressAssetName.Name = "assetExportProgressAssetName"; + assetExportProgressAssetName.Size = new System.Drawing.Size(169, 20); + assetExportProgressAssetName.TabIndex = 10; + assetExportProgressAssetName.Text = " "; + assetExportProgressAssetName.TextAlign = System.Drawing.ContentAlignment.TopCenter; + // + // AssetLibrarySearch + // + AutoScaleDimensions = new System.Drawing.SizeF(8F, 20F); + AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + ClientSize = new System.Drawing.Size(841, 329); + Controls.Add(assetExportProgressAssetName); + Controls.Add(assetExportProgressNumberOfMax); + Controls.Add(assetExportProgress); + Controls.Add(search); + Controls.Add(searchNameOrDescription); + Controls.Add(searchNameOrDescriptionLabel); + Controls.Add(nugetPackagesFilesGroup); + Controls.Add(assetsCreatedBeforeLabel); + Controls.Add(assetsCreatedAfterLabel); + Controls.Add(assetsCreatedBefore); + Controls.Add(assetsCreatedAfter); + Icon = (System.Drawing.Icon)resources.GetObject("$this.Icon"); + Name = "AssetLibrarySearch"; + Text = "Asset library search"; + Load += AssetLibrarySearch_Load; + nugetPackagesFilesGroup.ResumeLayout(false); + nugetPackagesFilesGroup.PerformLayout(); + ResumeLayout(false); + PerformLayout(); + } + + #endregion + + private System.Windows.Forms.DateTimePicker assetsCreatedAfter; + private System.Windows.Forms.DateTimePicker assetsCreatedBefore; + private System.Windows.Forms.Label assetsCreatedAfterLabel; + private System.Windows.Forms.Label assetsCreatedBeforeLabel; + private System.Windows.Forms.GroupBox nugetPackagesFilesGroup; + private System.Windows.Forms.Label searchApplicationVersionLabel; + private System.Windows.Forms.Label searchPlatformVersionLabel; + private System.Windows.Forms.TextBox searchApplicationVersion; + private System.Windows.Forms.TextBox searchPlatformVersion; + private System.Windows.Forms.Label searchNameOrDescriptionLabel; + private System.Windows.Forms.TextBox searchNameOrDescription; + private System.Windows.Forms.Button search; + private System.Windows.Forms.ProgressBar assetExportProgress; + private System.Windows.Forms.Label assetExportProgressNumberOfMax; + private System.Windows.Forms.Label assetExportProgressAssetName; + } +} \ No newline at end of file diff --git a/2LCS/AssetLibrary/AssetLibrarySearch.cs b/2LCS/AssetLibrary/AssetLibrarySearch.cs new file mode 100644 index 0000000..451edfb --- /dev/null +++ b/2LCS/AssetLibrary/AssetLibrarySearch.cs @@ -0,0 +1,92 @@ +using AutoMapper; +using CsvHelper; +using LCS.JsonObjects; +using System; +using System.Collections.Generic; +using System.Data; +using System.Globalization; +using System.IO; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace LCS.AssetLibrary; + +public partial class AssetLibrarySearch : Form +{ + private HttpClientHelper _httpClientHelper; + + internal AssetLibrarySearch(HttpClientHelper httpClientHelper) + { + InitializeComponent(); + _httpClientHelper = httpClientHelper; + } + + private void AssetLibrarySearch_Load(object sender, EventArgs e) + { + assetsCreatedAfter.Value = DateTime.Now.AddMonths(-6); + assetsCreatedBefore.Value = DateTime.Now; + } + + private void search_Click(object sender, EventArgs e) + { + Cursor.Current = Cursors.WaitCursor; + + var assets = _httpClientHelper.GetSharedAssetList(AssetFileType.NuGetPackage); + + var assetVersionsForExportList = new List(); + + var config = new MapperConfiguration( + cfg => cfg.CreateMap()); + var mapper = config.CreateMapper(); + + // linear with progress, only assets in date range + assetExportProgress.Maximum = assets.Count; + assetExportProgress.Value = 0; + foreach (var asset in assets) + { + assetExportProgress.Value++; + assetExportProgressNumberOfMax.Text = $"{assetExportProgress.Value} of {assetExportProgress.Maximum}"; + assetExportProgressAssetName.Text = asset.Name; + var assetVersions = _httpClientHelper.GetSharedAssetVersionList(asset.ParentAssetId) + .Where(assetVersion => assetVersion.CreatedDate >= assetsCreatedAfter.Value + && assetVersion.CreatedDate <= assetsCreatedBefore.Value); + if (assetVersions.Any() == false) + { + break; + } + assetVersionsForExportList.AddRange(assetVersions + .Select(assetVersion => + { + var fileDescription = assetVersion.FileDescription.Split('\n').Last(); + assetVersion.ApplicationOrPlatformVersion = fileDescription; + return mapper.Map(assetVersion); + })); +; } + + Cursor.Current = Cursors.Default; + assetExportProgress.Value = 0; + assetExportProgressNumberOfMax.Text = string.Empty; + assetExportProgressAssetName.Text = string.Empty; + + SaveFileDialog saveFile = new() + { + FileName = "D365FO NuGet Packages.csv", + Filter = "CSV files (*.csv)|*.csv|All files (*.*)|*.*" + }; + + if (saveFile.ShowDialog() == DialogResult.OK) + { + try + { + using StreamWriter sw = new(saveFile.FileName, false, Encoding.Unicode); + var csv = new CsvWriter(sw, CultureInfo.CurrentCulture); + csv.WriteRecords(assetVersionsForExportList); + } + catch (Exception ex) + { + MessageBox.Show(ex.Message); + } + } + } +} diff --git a/2LCS/AssetLibrary/AssetLibrarySearch.resx b/2LCS/AssetLibrary/AssetLibrarySearch.resx new file mode 100644 index 0000000..d6d9b27 --- /dev/null +++ b/2LCS/AssetLibrary/AssetLibrarySearch.resx @@ -0,0 +1,1828 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAYAgIAAAAEAIAAoCAEAZgAAAEBAAAABACAAKEIAAI4IAQAwMAAAAQAgAKglAAC2SgEAICAAAAEA + IACoEAAAXnABABgYAAABACAAiAkAAAaBAQAQEAAAAQAgAGgEAACOigEAKAAAAIAAAAAAAQAAAQAgAAAA + AAAACAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAACwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAHAAAACgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAAAD/AAAALwAA + AAAAAADwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAD/AAAA4AAA + AGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAQAAAANAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAPwAAAP8AAACAAAAAIAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAACvAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAABAAAABAAAAAAAAAAAAAAABQAAAAbwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAA8AAAD/AAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnwAAAP8AAAD/AAAA/wAA + AA8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAMAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABfAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvAAAAcAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAI8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD/AAAArgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAA + AGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7wAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAEAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAfgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAALAAAABQAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7wAAAHAAAAAAAAAAEAAA + AHAAAADgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAAAAAAAAAAAA + AG8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAOAAAAD/AAAALwAAAAAAAACQAAAAQAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAgAAAA/wAAAAAAAAAAAAAAAAAAAAAAAACeAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI8AAAD/AAAA/wAAAP8AAAD/AAAA3wAA + AE8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATgAA + AAAAAAAAAAAAAAAAAAAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbwAA + AP8AAACQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAANAAAAD/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAgAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAACAAAAD/AAAAbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAA/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAEAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAA/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAArwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADfAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAgAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAD/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAA + AP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAQAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AH8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAAAAD/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAM8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAADwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8AAABwAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbwAA + AEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAArwAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACPAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/AAAAQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AF8AAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH8AAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArwAA + AEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACfAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG8AAABAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAQAAAAgAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAzwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/wAAAPAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAP8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAQAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH8AAAD/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAADgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAN8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAADAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + APAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAAD/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAAbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAwAAAAoAAAAP8AAAB/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAfwAAAP8AAACgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAABgAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAPwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAA + ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAA + AP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AMAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAABAAAAA8AAAAN8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADfAAAA8AAA + AEAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAP8AAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAfgAAAAAAAAAAAAAAfgAAAMAAAAAQAAAA8AAA + AL8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvwAAAPAAAAAQAAAAwAAAAH4AAAAAAAAAAAAA + AH4AAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAALwAAAP8AAACQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAYAAAANAAAAD/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP8AAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAA + AH4AAAAAAAAAAAAAAAAAAAAAAAAAjgAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP8AAACOAAAAAAAAAAAAAAAAAAAAAAAAAH4AAADAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAngAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACPAAAA/wAA + AP8AAAD/AAAA/wAAAN8AAABPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAE4AAAAAAAAAAAAAAAAAAAAAAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAH4AAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA0AAAAAAAAAAAAAAAbwAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA0AAAAP8AAAAvAAAAAAAA + AJAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAfgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAADAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAALAAAABQAAAAAAAA + AAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/wAAAFAAAAAAAAAAEAAAAHAAAADgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG8AAACQAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD/AAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnwAAAP8AAAD/AAAA0AAA + ANAAAAD/AAAA/wAAAJ8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH4AAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAArgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAADAAAAAjgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAC/AAAA/wAAAJAAAABAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAJAAAAD/AAAAvwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACOAAAAwAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAACPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD/AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAD/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACvAAAA/wAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAA/wAAAK8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8AAABwAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAA + AGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAYAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + APAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAC/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAP8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvwAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJ8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAADAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAIAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAK8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABvAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAADwAAAP8AAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAADfAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAA + AP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADfAAAAMAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAQAAAANAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAPwAAAP8AAACAAAAAIAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAK8AAABgAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAK8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACAAAAA/wAA + AC8AAAAAAAAA8AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAcAAAAAAAAAAAAAAA/wAA + AOAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAALAAAAD/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD/AAAAcAAAAKAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAQAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL8AAABAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAvwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAA + AP8AAAAwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAA + ADAAAAD/AAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAPAAAADPAAAAAAAAAAAAAAD/AAAAEAAAAAAAAAAAAAAAAAAA + AAAAAABAAAAAgAAAALAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAsAAA + AIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAD/AAAAAAAAAAAAAADPAAAA8AAAACAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAnwAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAJ8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAKAAAAD/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAADgAAAAEAAAAGAAAACwAAAA/wAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH8AAAD/AAAAsAAAAGAAAAAQAAAA4AAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAKAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAEAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAFAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO8AAAD/AAAAPwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAP8AAADvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP8AAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAABAAAAAIAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + ANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAA + AAAAAAAAAAAAAAAAAEAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAPwAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/wAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAEAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACfAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABAAAAAnwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP8AAAAAAAAAAAAAAAAAAAAAAAAAIAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD/AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAA + AP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAACAAAAD/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAADwAAAK8AAAB/AAAAbwAAAL8AAABvAAAArwAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAIAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAQAAA + AEAAAAAAAAAAAAAAAAAAAAAgAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8AAAD/AAAA4AAAAJAAAABwAAAAQAAAAEAAAABAAAAAMAAA + AEAAAABAAAAAcAAAAJAAAADgAAAA/wAAAE8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAIAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvwAAAEAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAC/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAB/AAAAQAAAAFAAAAAgAAAAPwAAAPAAAAAgAAAAEAAAAP8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAADgAAAAYAAA + ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYAAA + AOAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD/AAAAEAAAACAAAADwAAAAPwAAACAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAQAAAA/wAA + AAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP8AAADAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADAAAAA/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAA + AP8AAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACvAAAAYAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAACvAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG8AAAD/AAAAIAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAgAAAA/wAAAG8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAN8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAgAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAN8AAABQAAAA/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD/AAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAA + AP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/wAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD/AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAvwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAIAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + ACAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL8AAACAAAAAzwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP8AAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAIAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAADPAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD/AAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAP8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + ABAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACvAAAA/wAA + AEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAA/wAA + AK8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAABAAAAAMAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAA + AEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAI4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvwAAAP8AAACQAAAAQAAAABAAAAAAAAAAAAAA + AAAAAAAAAAAAEAAAAEAAAACQAAAA/wAAAL8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAjgAAAMAAAABAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG8AAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAA + AG8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AMAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACfAAAA/wAAAP8AAADQAAAA0AAAAP8AAAD/AAAAnwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAA + AMAAAAAQAAAA4AAAAO8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAADvAAAA4AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAQAAAA/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAgAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAQAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAYAAAAGAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAB+AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAAAMAAAAAAAAAAsAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAACAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAMAAAAB+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AH4AAADAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAB+AAAAAAAA + AAAAAAAAAAAAAAAAAI4AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD/AAAAjgAAAAAAAAAAAAAAAAAAAAAAAAB+AAAAwAAAAAAAAAAAAAAAQAAAAH8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8AAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAE8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AH8AAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAB+AAAAAAAAAAAAAAB+AAAAwAAAABAAAADwAAAAvwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC/AAAA8AAAABAAAADAAAAAfgAAAAAAAAAAAAAAfgAA + AMAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAA + ABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAA/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AMAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAABAAAAA8AAAAN8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADfAAAA8AAA + AEAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAABgAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAMAAAAKAAAAD/AAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAH8AAAD/AAAAoAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAYAAA + AAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAA + AP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAACAAAAAQAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AK8AAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABAAAAArwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAB/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAB/AAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAQAAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH8AAABAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAfwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAfwAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAEAAAAB/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACvAAAAQAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAK8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAA8AAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAABwAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAA + AP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + ALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAEAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAD/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAH8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8AAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAE8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AH8AAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAA + AP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAIAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD/AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAADgAAAA7wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO8AAADgAAAAEAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAA/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG8AAACQAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAG8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD/AAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAD/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP8AAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAgAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAzwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAgAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAP8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADPAAAAQAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP8AAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAEAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAD/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAACQAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAA/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAIAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG8AAAD/AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAgAAAA/wAAAG8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAP8AAAAAAAAAAAAA + AAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD/AAAAwAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAwAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAD/AAAAEAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAACAAAAA/AAAA8AAAACAAAAAQAAAA/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAOAAAABgAAAAEAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABgAAAA4AAA + AP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP8AAAAQAAAAIAAAAPAAAAA/AAAAIAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAA + AEAAAAAAAAAAAAAAAAAAAAAgAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAE8AAAD/AAAA4AAAAJAAAABwAAAAQAAAAEAAAABAAAAAQAAA + AEAAAABAAAAAcAAAAJAAAADgAAAA/wAAAE8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAIAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAA/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAA8AAACvAAAAfwAAAH8AAAB/AAAAfwAAAK8AAAAPAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAA + ACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAQAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAEAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAD/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + APAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAA/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAQAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAgAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAP8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA7wAAAP8AAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAA/wAA + AO8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAKAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAEAAA + AGAAAACwAAAA/wAAAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAH8AAAD/AAAAsAAAAGAAAAAQAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAA + AKAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + ACAAAADwAAAAzwAAAAAAAAAAAAAA/wAAABAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAACwAAAA/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAALAAAACAAAAAQAAAAAAAAAAAAAAAAAAA + AAAAAAAQAAAA/wAAAAAAAAAAAAAAzwAAAPAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAA/wAAADAAAABAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAMAAAAP8AAABAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////// + ////////////////////////////////////////////////j/j//////////////////Cf2P/////// + //////////H394f////////////////n9mfj////////////////3/AP+f///////////////8////v/ + ///////////////v///z////////////////5///8////////////////+f///P///////////////+f + ///5////////////////P////P//////////////43////5D/////////////9j/////Cf////////// + //+e//gP/73/////////////v//Dw//8/////////////7//n/j//P////////////8//z/+f/7///// + ////////f/7//z/+f////////////n/8//+//3////////////7//f//n/9/////////////P/n//9/8 + /////////////4/7///P8f/////////////v8///7/P/////////////7/P//+/z/////////////+/z + ///v8//////////////v8///7/P/////////////7/P//+/z/////////////+/z///v8///////8A// + //+P+///z/H//////+/3////P/n//9/8///////v9////v/5//+f/3//////7/f///5//P//v/9///// + /4/x////f/5//z/+f////Pw//D8//z//P/5//v////tx//+O3/+//5/4//z////zB///4M//v//Dw//8 + ////55////nn/57/+A//vf///8//////8//Y/////wn///+f//////n/43////5D////f//////+//+/ + ///8/////3///////v//3///+f////+f//AP//n//+f///P/////z/+Dwf/z///n///z/////8/+P/x/ + 8///7///8//////f/P//P/v//8////v/////n/n//5/5///f8A/5/////7/z///P/f//5/fn4/////8/ + 5///5/z///H394f/////f8////P+///8IAY//////3/f///7/v///4/w//////5/n///+f5//7/v9/3/ + ///+/7////3/f/4f7/f4f///8P+////9/w/4zw/w8x///+//P////P/34+B//gfH///v/z////z/98/j + ///H8///7/9////+//ef//////n//+//f////v/3n//////5///v/3////7/99//////+///7/9////+ + //fP//////P//+//P////P/3z//////z///v/z////z/95//////+f//8P+////9/w8///AP//z///7/ + v////f9Of/8AAP/+c//+f5////n+AP/8P/w//wH//3/f///7/jn/8f//j/+c//9/z///8/5//8f//+P/ + /v//P+f//+f8f/+f///5//5//7/z///P/P//P////P//f/+f+f//n/j//n////5//z//3/z//z/5//z/ + ////P/+//8/+P/x/8f/5/////5//n//P/4PB//D/8//////P/z//n//wD//4P/f/////7/x//3////// + /j/n/////+f8//9///////4/7//////3/P//n//////5f8//////8/7//8//////83/f//////v+///n + n///+eZ/n//////5/n//8wf//+DO/5//////+f9///tx//+O3v+///////3/f//8/D/8PzD/v//////9 + /w////+P8f/v/z///////P/3////7/f/7/8///////z/9////+/3/+//P//////8//f////v9//v/z// + /////P/3////8A//7/8///////z/9////////+//P//////8//f////////v/z///////P/3//////// + 7/8///////z/9/////////D/v//////9/w/////////+/7///////f9//////////v+f//////n/f/// + //////5/n//////5/n//////////f9//////+/7//////////3/P//////P+//////////8/7//////3 + /P//////////P+f/////5/z//////////j/3/////+/8f/////////z/8//////P/z/////////5//n/ + ////n/+f/////////f/8/////z//v/////////z//n////5//z/////////+//8////8//9///////// + /n//n///+f/+f/////////9//8f//+P//v//////////Of/x//+P/5z//////////4D//D/8P/8B//// + ///////Of/8AAP/+c////////////z//8A///P////////////+f//////n/////////////z//////z + /////////////8//////8//////////////f//////v/////////////n//////5/////////////5// + ////+f/////////////P4///x/P/////////////4+B//gfH//////////////jPD/DzH/////////// + ///+H+/3+H///////////////7/v9/3/////////////////7/f///////////////////AP//////// + /////////////////////////////////////////////////////////////ygAAABAAAAAgAAAAAEA + IAAAAAAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAJAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAFQAAACwAAAASAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAA5AAAAO8AAAAAAAAAAAAAAKQAAAAEAAAAEAAA + AFQAAAAgAAAAAAAAAI8AAAD/AAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAMAAAAAAAAAAAAAAAAAAA + AAAAAAD/AAAA/wAAAMMAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAA + AM8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAAVAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAQAAAD/AAAAFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/wAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAsAAAAQAAAAAQAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAJAAAACAAAABIAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAAOAAAACsAAAD/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAADTAAAAAAAA + AFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL8AAAD/AAAA/wAAAPMAAAA6AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD/AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAA + AP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAMQAAAA0AAAAAAAAAAAAAAAgAAAAjAAA + AP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXwAAAFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8gAAAHAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAsAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHgAAABeAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAD/AAAAAAAA + AAAAAAAAAAAAAAAAAKMAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAA/wAA + AAAAAAAAAAAAAAAAAAAAAAD/AAAAqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAADnAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAOwAAAAAAAAAAAAAAAAAAAAAAAAAswAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAA5wAAACAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADsAAAAAAAAAAAAAAAAAAAAAAAAAJ8AAAAoAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAD/AAAAAAAAAAAAAAAAAAAAAAAA + AKMAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAA/wAAAAAAAAAAAAAAAAAA + AAAAAAD/AAAAqAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAA/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFwAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfAAA + AF4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAANAAAAIwAAAD/AAAAAAAA + AAAAAAAAAAAAAAAAAP8AAACMAAAANAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOYAAAB4AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAMAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAAPwAAAKAAAAAwAAAA9AAA + ALsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALsAAAD0AAAAMAAAAKAAAAA/AAAAoAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAA + AMwAAAA0AAAAAAAAAAAAAAAgAAAAjAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXwAA + AFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAPgAA + AAAAAABuAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP8AAABuAAAAAAAAAD4AAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAwwAAAP8AAAD/AAAA8wAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP8AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACgAAAAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAKAAAAAAAAAAAAAAAAAAAAAAAAAALAAA + ADgAAAArAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD/AAAAzwAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAwAAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAMAAA + AAAAAAAAAAAAAAAAAAAAAAAsAAAAQAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAIAAAACAAAABIAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAABuAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAGMAAAD/AAAA/wAAAP8AAAD/AAAAYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABuAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAVAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAIAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAA/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAogAAAP8AAABcAAAAFAAAAAAAAAAAAAAAFAAAAFwAAAD/AAAAogAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + ABQAAADPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAA + AFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAIgAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD0AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAoAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAALsAAAAAAAAAAAAAAAAAAAAAAAAAogAAAIgAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAAKIAAAAAAAAAAAAAAAAAAAAAAAAAuwAA + ADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAADkAAAA7wAAAAAAAAAAAAAA/wAA + AP8AAAD/AAAA/wAAACAAAAAAAAAAjwAAAP8AAABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAHwAAAAEAAAAAAAA + ACgAAACQAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAsAAAAEgAAAAAAAAABAAAAHwAAAAQAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAA + AAAAAAAAAAAAAAAAAGMAAABcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAXAAAAGMAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAEAAAAdAAA + AP8AAAAAAAAA5AAAACAAAABsAAAAsAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAA/wAAALAAAABsAAAAIAAA + AOQAAAAAAAAA/wAAAHQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAA + AAAAAAAEAAAA7AAAAF4AAAAAAAAAAAAAADYAAAD/AAAAGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAGwAAAP8AAAA2AAAAAAAAAAAAAABeAAAA7AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP8AAAAAAAAAmAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACYAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAADQAAAD7AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD7AAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD/AAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAABQAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAABwAAAA/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAYwAAAFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcAAAAYwAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAA + ADQAAABwAAAA9gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZwAAAMcAAADHAAAA2wAA + AMMAAABnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD2AAAAcAAAADQAAACYAAAABAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/wAAAAAAAAD7AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYAAAD/AAAApAAA + AFgAAAAsAAAAIAAAABwAAAAsAAAAWAAAAKQAAAD/AAAANgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP8AAAD7AAAAAAAAAOwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANAAAALsAAAAAAAAAAAAA + AAAAAAAAAAAAogAAAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAA + AKIAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAJIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP8AAACIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAIgAAAD/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABeAAAAdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAiAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAP8AAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAHAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAQAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKIAAAD/AAAAXAAA + ABQAAAAAAAAAAAAAABQAAABcAAAA/wAAAKIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAABuAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAGMAAAD/AAAA/wAAAP8AAAD/AAAAYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAByAAAA/wAAADYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAcAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAD/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAA2AAAA5AAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAA/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAADYAAACIAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAiAAAADYAAAAAAAAAAAAAAAAAAAAAAAAA/wAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAoAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAD/AAAAGwAAAAAAAAAAAAAAAAAA + AAAAAAD/AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAD/AAAAAAAAAAAAAAAAAAAAAAAAABsAAABsAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAPgAAAAAAAABuAAAA/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAABuAAAAAAAAAD4AAADgAAAAsAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAApAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAA/AAAAoAAA + ADAAAAD0AAAAuwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuwAAAPQAAAAwAAAAoAAA + AD8AAACgAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAZwAAAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AFgAAABnAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADQAAACMAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAjAAA + ADQAAAAAAAAAAAAAAAAAAAAwAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMcAAAAsAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAsAAAAxwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAA + AAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAADLAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAMsAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAywAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAADLAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMcAAAAsAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAsAAAAxwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAABnAAAAWAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAGcAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + ALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABsAAAAGwAAAAAAAAAAAAAAAAAAAAAAAAD/AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAD/AAAAAAAA + AAAAAAAAAAAAAAAAABsAAABsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAANgAAAIgAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACIAAAANgAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAOQAAAA2AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD/AAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAcAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANgAAAOQAAAAEAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAQAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAABwAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAA/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHQAAABeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD/AAAAiAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAACIAAAA/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXgAAAHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAA7AAAAAAAAAD7AAAA/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADYAAAD/AAAApAAAAFgAAAAsAAAAIAAAACAAAAAsAAAAWAAA + AKQAAAD/AAAANgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD7AAAAAAAAAOwAAAAEAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAQAAACYAAAANAAAAHAAAAD2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnAAAAxwAA + AMsAAADLAAAAxwAAAGcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPYAAABwAAAANAAA + AJgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AP8AAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAD7AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD7AAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAOwAAABeAAAAAAAAAAAAAAA2AAAA/wAAABsAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABsAAAD/AAAANgAAAAAAAAAAAAAAXgAAAOwAAAAEAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAdAAAAP8AAAAAAAAA5AAA + ACAAAABsAAAAsAAAAP8AAAAAAAAAAAAAAAAAAAAAAAAA/wAAALAAAABsAAAAIAAAAOQAAAAAAAAA/wAA + AHQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAQAAAAfAAAAAQAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAA + AAAAAAAEAAAAfAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAA + AP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////////jx////////4wR////////PD + 7///////8//P///////x/8///////4f/4f//////D//y//////9/wf5//////n8Y/n/////+/n5/f/// + //7+/z9//////zz/PP//////vP+8//////+8/7z///w//zz/PP//+9/+/v8/f/7jx37+fn9//A/wPn8Y + /n/5P/yff8H+f/P//88P//L/5///55f/4f/z+B/P+f/P//Phh8/z/8//98/z7/PD7//nn/nn+MEf/++/ + /ffiPEf/zz/884g8Ef+/P/z9GP8Y/79//v1///7/v3/+/T///P+/P/z9P//8/88//PB/gf4P77/99PwA + Pyfnn/nn+P8f5/fP8+/z/8/z8+GH3+f/5/vz+B/Hz//z4+f//+ef//nn8///x5//+ef5P/yPv//99/wP + 8A8///zz/uPHPz///P3/+9+/P//8/f/8P78///z9////vz///P3////PP//88////++///33////55// + +ef////nn//55////8fP//Pj////3+f/5/v////P8//P8////+f4/x/n////5PwAPyf////wf4H+D/// + //8///z//////z///P//////f//+//////8Y/xj//////4g8Ef//////473H////////w/////////// + //8oAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAASAAAACQAAAAAAAAAAAAA + ABUAAABNAAAAGwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAGUAAADGAAAAAAAA + AC8AAAAqAAAAHgAAAEsAAAAAAAAApwAAAI4AAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAPgAA + AAAAAAAAAAAAAAAAACwAAAD/AAAA/wAAAKwAAAAAAAAAAAAAAAAAAABEAAAAEAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAEAAAAhwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQAAAAEQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAACAAAACkAAAAhAAAA1QAAACUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAADpAAAAMQAAACcAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAIAAAAPAAAAE0AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAHcAAABBAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzAAAAjQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AJMAAAD/AAAA/wAAAMcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABrAAAAUgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB0AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA/wAAAF4AAAAKAAAABgAAAEAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACwAAAATgAAAAAAAAAAAAAAAAAAAAAAAAAtAAAAwAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAsQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAA8QAAAJ4AAAAAAAAAAAAAAAAAAAChAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAmgAA + ADcAAAAAAAAAAAAAAFYAAAD/AAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAABMAAAAAAAAAAAAAAAUAAACQAAAACAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAdAAAADMAAAAAAAAAAAAAAAAAAAB6AAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH8AAAD/AAAA/wAAAIAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAJ4AAAAAAAAAAAAAAAAAAACiAAAAEAAA + AAAAAAAAAAAAAAAAAAAAAAACAAAAmwAAADcAAAAAAAAAAAAAAFcAAAD/AAAACAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAAAAAAUAAAAzgAAAAAAAAAAAAAAAAAA + AAAAAADPAAAAFAAAAAAAAAAAAAAAEgAAAAAAAAAAAAAAAAAAAAAAAACCAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAuAAAAvwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADwAAABmAAAAWgAAAG4AAAC8AAAAcgAA + AAAAAAAAAAAAAAAAAAAAAABzAAAAvAAAAG4AAABaAAAAZgAAADwAAAAAAAAAAAAAAAAAAAB0AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAGAAAAAKAAAABgAAAEEAAAD/AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAArQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAM8AAAAAAAAA5gAA + AJoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJsAAADmAAAAAAAAANAAAABYAAAAAAAA + AAAAAAAzAAAAjQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJEAAAD/AAAA/wAAAMYAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAABqAAAAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuAAAAUAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABSAAAALgAAAAAAAAAIAAAAOwAAAFEAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAHMAAABBAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAA/AAAAHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAAIgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAZAAAAQAAAAAAAAAAAAAAACAAAACgAAAAeAAAA1AAAADAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADmAAAALQAAACcAAAAOAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAQAAAA2gAAAFgAAAAAAAAAAAAAAAAAAAAAAAAA1gAAAI4AAACIAAAAiAAA + AI4AAADVAAAAAAAAAAAAAAAAAAAAAAAAAFgAAADcAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAhAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSAAAAEAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9AAAAigAAAAAAAAAAAAAAAAAAACcAAADuAAAANAAA + AA4AAAABAAAAAQAAAA4AAAA0AAAA7QAAACcAAAAAAAAAAAAAAAAAAACHAAAAPgAAAAAAAAAAAAAAAAAA + AAAAAAAHAAAAPQAAAAAAAAAAAAAAAAAAAG4AAAD/AAAA/wAAAOEAAAAAAAAAAAAAAAAAAABCAAAAEAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACHAAAAAAAAAAAAAAAAAAAAAAAA + ANgAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAANcAAAAAAAAAAAAAAAAAAAAAAAAAiAAA + AAAAAAAAAAAAAAAAAAAAAAAJAAAATgAAAGYAAADGAAAANQAAAC0AAAAAAAAAAAAAAEoAAAAaAAAApgAA + AI8AAABXAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH8AAAD/AAAAAAAA + AAAAAAAAAAAAXQAAAG0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG0AAABcAAAAAAAA + AAAAAAAAAAAA/wAAAIAAAAAAAAAACgAAAGMAAAD6AAAAAAAAALUAAACTAAAA/wAAAFkAAAAAAAAAAAAA + AEYAAAD/AAAAnwAAALUAAAAAAAAA+gAAAGMAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAsAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACKAAAASwAAACsAAAAAAAAAAAAAAI4AAAA5AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAOQAAAI4AAAAAAAAAAAAAACwAAABMAAAACgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAfwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACZAAAAZQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABiAAAAGgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAAsAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACaAAAA/wAA + AGkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AGcAAAD/AAAAGgAAABoAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAH8AAAD/AAAAAAAAAAAAAAAAAAAAXQAA + AG0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG0AAABcAAAAAAAAAAAAAAAAAAAA/wAA + AOIAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAALkAAADhAAAA6gAAALsAAABPAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAGIAAABMAAAACgAAAAAAAAAAAAAAAAAAAAAAAACHAAAAAAAA + AAAAAAAAAAAAAAAAANkAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAANcAAAAAAAAAAAAA + AAAAAABPAAAAtAAAAAAAAABmAAAAAAAAAAAAAAAAAAAAAAAAAE4AAADZAAAAeQAAADIAAAAaAAAAGAAA + ADEAAAB5AAAA2AAAAFIAAAAAAAAAAAAAAAAAAAAAAAAAZwAAAAAAAAAsAAAAYwAAAAAAAAAAAAAAAAAA + AAAAAAA9AAAAigAAAAAAAAAAAAAAAAAAACQAAADvAAAANAAAAA4AAAABAAAAAQAAAA4AAAA0AAAA7gAA + ACcAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAAHkAAAAUAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAHgAAAD+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+gAA + AAkAAAAAAAAAAAAAAAAAAAAQAAAA2gAAAFgAAAAAAAAAAAAAAAAAAAAAAAAA1gAAAI8AAACJAAAAiQAA + AI8AAADWAAAAAAAAAAAAAAAAAAAAAAAAAJ8AAAC0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+AAAATgAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAABOAAAA/gAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAEcAAAAAAAAAAAAAAAAAAAA/AAAAHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADOAAAAzgAAAAAAAAAAAAAAAAAA + AE4AAAB5AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAeAAA + AFIAAAAAAAAAAAAAAAAAAACOAAAAtQAAAAIAAAAAAAAAAAAAAAAAAAAuAAAAUAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADVAAAAZwAA + AAAAAAAAAAAAAAAAANkAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAFAAAANgAAAAAAAAAAAAAAAAAAAA5AAAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAA + AM4AAAAAAAAA5QAAAJoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJoAAADlAAAAAAAA + AP8AAAD/AAAAAAAAAAAAAAAAAAAAUAAAAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHkAAABPAAAAAAAAAAAAAAAAAAAA/wAAAEAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAADwAAABlAAAAWgAAAG0AAAC/AAAAdAAAAAAAAAAAAAAAAAAAAAAAAAB2AAAAuwAA + AG4AAABaAAAApQAAADsAAAAxAAAAAAAAAAAAAAAAAAAAuQAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEAAAC9AAAAAAAAAAAAAAAAAAAAMQAA + AAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAAAAAATAAAAzQAAAAAAAAAAAAAAAAAA + AAAAAADOAAAAFAAAAAAAAAAAAAAAkQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4wAAABoAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoAAADiAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AH8AAAD/AAAA/wAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAfwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4wAA + ABoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + ABoAAADjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPwAAAAIAAAA0AAAAAAAA + AAAAAAAAAAAAuQAAADIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAADIAAAC5AAAAAAAAAAAAAAAAAAAANQAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AD8AAAD/AAAAAAAAAAAAAAAAAAAAUAAAAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHkAAABQAAAAAAAAAAAAAAAAAAAA/wAAAEAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAACDAAAAPQAAAAAAAAAAAAAAAAAAANkAAAAUAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAANkAAAAAAAAAAAAAAAAAAAA5AAAAhAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAC1AAAAjQAAAAAAAAAAAAAAAAAAAE4AAAB5AAAAAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAeQAAAE4AAAAAAAAAAAAA + AAAAAACOAAAAtQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAD+AAAATgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAABOAAAA/gAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAD5AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAA/gAAAHkAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAA + AHkAAAD+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+gAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABiAAAALgAAAAAAAABpAAAAAAAAAAAAAAAAAAAAAAAAAE4AAADZAAAAeQAAADIAAAAaAAAAGgAA + ADIAAAB5AAAA2QAAAE4AAAAAAAAAAAAAAAAAAAAAAAAAaQAAAAAAAAArAAAAYwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAKAAAASgAAAGUAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAA + ALkAAADjAAAA4wAAALkAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAGUAAABLAAAACgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAABkAAAAaAAAA/wAAAGkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGYAAAD/AAAAGgAA + ABkAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAZQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAABiAAAAGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAKAAAASgAAAC4AAAAAAAAAAAAAAI0AAAA9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOQAA + AI0AAAAAAAAAAAAAACwAAABMAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAAGIAAAD5AAAAAAAAALUAAACDAAAA/wAAADQAAAAAAAAAAAAA + ADEAAAD/AAAAgwAAALgAAAAAAAAA+QAAAGMAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAAAARwAAAAIAAAAAAAAAPwAA + AAIAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAEAAABGAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAD8AAAB/AAAAfwAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////+Mf/AAD////iEf8AAP///84c/wAA////z/z/AAD///8H/D8AAP// + /h/+HwAA///+fh+fAAD///78D98AAP///vnn3wAA////OeMfAAD///8x858AAP/D/znjHwAA+zze+eff + AADwPA78D98AAOT/Jn4fnwAAz//yH/4fAADP5/MH/D8AAMeB48/8/wAAzgBzzhz/AADefnvAwP8AAJz/ + ORDCPwAAfP8+M/MfAAA9/75//58AAHz/Pj//BwAAnP84/A/DAADefnLwA9MAAM4Ad+Px+QAAx4Hnx/j9 + AADP5/OP/HEAAM//85/+cwAA5P8nP/85AADwPAc//zoAAPs83z//PgAA/8PfP/8+AAD//8c//zoAAP// + 5z//OQAA///zn/5zAAD//+OP/HEAAP//78f4/QAA///n4/H5AAD///LwA9MAAP//8PwPwwAA///4P/8H + AAD///5//58AAP///jPzHwAA////EMI/AAD////E6P8AAP////4f/wAAKAAAACAAAABAAAAAAQAgAAAA + AACAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkAAAB0AAAAXgAAACsAAAAqAAAAVgAA + AHkAAAAnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAQwAAAAAAAAAAAAAA/wAA + AP8AAAAAAAAAAAAAADsAAAAhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQAAAEAAAACqAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAiQAAAFUAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAABYAAAA/wAA + AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAHAAAAAPAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfgAA + AAAAAAAAAAAAAAAAAAAAAAByAAAA/wAAAP8AAACgAAAAAAAAAAAAAAAAAAAAAAAAAJ4AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAClAAAAAAAAAAAAAAAAAAAAAAAAAOEAAAAZAAAAEQAAAMIAAAAjAAAAAAAAAAAAAAAAAAAAyQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAACUAAAD/AAAAAAAAAAAAAAC2AAAAQAAAAAAAAAAAAAAAKwAAAMoAAAAAAAAAAAAA + AP8AAAA1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAQgAAANoAAADaAAAAQgAA + AAQAAAAAAAAABAAAAAAAAAAAAAAAJQAAAP8AAAAAAAAAAAAAALgAAABBAAAAAAAAAAAAAAArAAAAywAA + AAAAAAAAAAAA/wAAADYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAABLAAAAPAAAAJ4AAACZAAAAAAAA + AAAAAACaAAAAngAAADwAAABLAAAADQAAAAAAAAClAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAaAAAAEQAA + AMUAAAAgAAAAAAAAAAAAAAAAAAAAyQAAAAAAAAAAAAAAAAAAAAAAAAAJAAAAngAAAAAAAAD1AAAASgAA + AAAAAAAAAAAAAAAAAAAAAABLAAAA9QAAAAAAAACfAAAACQAAAH4AAAAAAAAAAAAAAAAAAAAAAAAAcAAA + AP8AAAD/AAAAmQAAAAAAAAAAAAAAAAAAAAAAAACeAAAAAAAAAAAAAAAAAAAAAAAAAGcAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoAAAADAAAAFwAAAD/AAAAFAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAbwAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAUQAA + AJEAAAAAAAAAAAAAAAAAAACVAAAAmQAAAJkAAACVAAAAAAAAAAAAAAAAAAAAkgAAAFEAAAAAAAAADAAA + AD8AAACpAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAigAAAFMAAAAPAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAACJAAAAAAAAAAAAAAAAAAAA/QAAAHgAAAAxAAAAMQAAAHgAAAD8AAAAAAAAAAAAAAAAAAAAiQAA + AAAAAAAAAAAAGgAAAGIAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAABdAAAAJAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAKgAAAP8AAAAAAAAAAAAAAHMAAABrAAAAAgAAAAAAAAAAAAAAAgAAAGsAAAByAAAAAAAA + AAAAAAD/AAAAKwAAADYAAADQAAAAcwAAAP8AAAD/AAAAAAAAAAAAAAD/AAAA/wAAAH8AAADQAAAANgAA + AAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAA/wAAAAcAAAAAAAAAAAAAAAAAAAAAAAAABwAA + AP8AAAAAAAAAAAAAAAAAAACGAAAAYwAAAAAAAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAbAAAAAAAA + AAAAAAA4AAAAMgAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAD/AAAABwAAAAAAAAAAAAAAAAAA + AAAAAAAHAAAA/wAAAAAAAAAAAAAAAAAAANQAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAANoAAACAAAAAMgAAAAAAAAAAAAAAKgAAAP8AAAAAAAAAAAAAAHMAAABrAAAAAgAA + AAAAAAAAAAAAAgAAAGsAAAByAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAADJAAAA8gAA + APcAAADIAAAAAAAAAAAAAAAAAAAAAAAAANoAAAA4AAAANgAAAAAAAAAAAAAAiQAAAAAAAAAAAAAAAAAA + AP4AAAB4AAAAMQAAADEAAAB4AAAA/AAAAAAAAAAAAAAAxQAAAAAAAAAAAAAAAAAAAAAAAACxAAAApAAA + AEgAAAAXAAAAFgAAAEgAAACkAAAAsQAAAAAAAAAAAAAAAAAAAAAAAADQAAAABAAAAAAAAABRAAAAkQAA + AAAAAAAAAAAAAAAAAJYAAACZAAAAmQAAAJUAAAAAAAAAAAAAAAAAAADvAAAAAAAAAAAAAAAAAAAAsQAA + AJIAAAAPAAAAAAAAAAAAAAAAAAAAAAAAAA8AAACSAAAAsQAAAAAAAAAAAAAAAAAAAFkAAAAgAAAAAAAA + AGcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJUAAAB9AAAAAAAA + AAAAAACkAAAADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAACkAAAAAAAAAAAAAAAVAAAA7QAA + AAcAAAAAAAAACQAAAJ0AAAAAAAAA9AAAAEoAAAAAAAAAAAAAAAAAAAAAAAAASgAAAPsAAAAAAAAA/wAA + AAAAAAAAAAAAyQAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAADIAAAAAAAA + AAAAAAD/AAAAMwAAAAAAAAAAAAAADQAAAEoAAAA8AAAAnQAAAJ0AAAAAAAAAAAAAAJkAAACeAAAAXwAA + AJkAAAAAAAAAAAAAAAAAAADzAAAAFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFgAA + APcAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAQQAAANoAAADaAAAAQgAA + AAQAAAAjAAAAUwAAAAAAAAAAAAAAAAAAAPMAAAAXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAXAAAA8gAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAcAAAAqAAAA/wAAAAAAAAAAAAAAyQAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAEgAAADJAAAAAAAAAAAAAAD/AAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAADrAAAAGQAAAAAAAAAAAAAApAAAAA8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAPAAAApAAAAAAAAAAAAAAAFQAAAOwAAAAHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAFkAAAAAAAAAAAAAAAAAAACxAAAAkgAA + AA8AAAAAAAAAAAAAAAAAAAAAAAAADwAAAJIAAACxAAAAAAAAAAAAAAAAAAAAWQAAACAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAzwAAAAAAAAAAAAAAAAAA + AAAAAACxAAAApAAAAEgAAAAXAAAAFwAAAEgAAACkAAAAsQAAAAAAAAAAAAAAAAAAAAAAAADQAAAABAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2AAAANwAA + ANkAAAAAAAAAAAAAAAAAAAAAAAAAyQAAAPMAAADzAAAAyQAAAAAAAAAAAAAAAAAAAAAAAADZAAAAOAAA + ADYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAyAAAAgAAAANkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2QAA + AIAAAAAyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAyAAAANwAAAAAAAAAAAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAVAAAAAAAA + AAAAAAA4AAAAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2AAAAzwAAAFkAAADrAAAA/wAAAAAAAAAAAAAA/wAA + AOwAAABdAAAAzwAAADYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAAAAAcAAAAxAAAAcgAA + AHIAAAAyAAAABwAAAB8AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAD//8A///+Zn///H4///h/H//7w9//+ + 8Hf//mZn6BZmZ8GC8HeTyPD3v/wfx5w5H4+4HZmfMYwGD3POb2dzzn/jMYzw8bgbwDycO48cv/mfmJPL + P8zBhz/O6Ac/zv/jP8z/8Z+Y//OPHP/zwDz/+PDx//x/4//+b2f//wYP//+AHygAAAAYAAAAMAAAAAEA + IAAAAAAAYAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAADAAAAIAAAAGcAAABdAAAAwAAAAGkAAABlAAAAKgAAAAQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAegAA + AAAAAAAAAAAAQAAAAAAAAAAAAAAAdwAAACUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAC6AAAA3gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxQAA + ANwAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AKIAAAAAAAAAAAAAAAAAAAD3AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAC8AAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIQAAAAAAAAAAAAAABEAAAC7AAAAEAAA + AKEAAABAAAAAAAAAAAAAAACaAAAAAAAAAAAAAAAAAAAAAQAAABQAAAARAAAAQAAAAMEAAADBAAAAQAAA + ABEAAAAUAAAAAQAAAE4AAADRAAAAAAAAAIQAAAB9AAAABQAAAGUAAACpAAAAAAAAAMAAAABfAAAAAAAA + AAAAAAABAAAALAAAAEwAAACwAAAAmAAAAAAAAAAAAAAAmQAAALAAAABMAAAALAAAALMAAAAAAAAAAAAA + AAAAAAD/AAAAngAAAP8AAAAAAAAAAAAAAAAAAADOAAAAAAAAAAAAAAAcAAAARgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAARgAAAG8AAAAJAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAA + AAAAAABhAAAAAAAAAAAAAAArAAAAgAAAAAAAAAAAAAAAAAAAAGgAAABoAAAAAAAAAAAAAAAAAAAAgAAA + AC4AAABsAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwQAAAIEAAAAEAAAAAAAAAAAAAAB3AAAAgwAA + AAAAAAAjAAAA8gAAAG8AAABvAAAA8QAAACIAAAAAAAAAgwAAAHgAAAA7AAAAogAAAJIAAABZAAAA/wAA + AIsAAAB0AAAApwAAAEAAAAAAAAAAAAAAAAAAAAB/AAAAAAAAAAAAAADyAAAAKgAAAAEAAAAAAAAALQAA + APUAAAAAAAAAAAAAAH4AAABRAAAAAAAAAL4AAAAnAAAAAAAAAB0AAADIAAAAAAAAACYAAAArAAAAAAAA + AAAAAAAXAAAAAAAAAAAAAAD/AAAACgAAAAAAAAAAAAAACQAAAP8AAAAAAAAAAAAAAIMAAAC6AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAADGAAAAKwAAAAAAAACzAAAAkQAAAAAAAAB0AAAAkAAA + ACIAAAAiAAAAkAAAAHMAAAAAAAAAtwAAAP8AAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAAAAAAAAAAA + AAAAAABkAAAAJgAAADAAAAA2AAAAhwAAAAAAAAAAAAAAdAAAAK8AAACvAAAAcwAAAAAAAAAAAAAAQgAA + AAAAAAAAAAAAUgAAAKkAAAAzAAAAEQAAADMAAACnAAAAVgAAAAAAAAAAAAAAAAAAAGIAAAAxAAAAPwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvAAAAAAAAAAAAAAAqQAAAB4AAAAAAAAAAAAA + AAAAAAAeAAAApwAAAAAAAAAAAAAAfgAAAHkAAAADAAAAWgAAACwAAADjAAAAEwAAAAAAAAAAAAAAFAAA + AP8AAACeAAAAQAAAAAAAAAD/AAAAMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAAP8AAAAAAAAAAAAA + AI4AAAAAAAAABAAAADEAAABEAAAAkAAAAAAAAAAAAAAAkQAAAIcAAAAkAAAAAAAAAAAAAAD/AAAAEQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAEQAAAP8AAAAAAAAAAAAAADoAAAAAAAAAAAAAAAEAAAAAAAAAEQAA + AFoAAABaAAAAEQAAAB0AAAByAAAAAAAAAAAAAAD/AAAAMwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAA + AP8AAAAAAAAAAAAAAI4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAB1AAAAgAAA + AAAAAAAAAAAAqgAAAB4AAAAAAAAAAAAAAAAAAAAeAAAAqQAAAAAAAAAAAAAAfgAAAHkAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAABgAAAAAAAAAAAAAAAAAAAATgAAAKoAAAAzAAAAEQAA + ADMAAACpAAAAUgAAAAAAAAAAAAAAAAAAAGIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAvAAAAJAAAAGcAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAABkAAAAJgAA + ADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKwAAAMQAAABnAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGQAAADGAAAAKwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACsAAAAkAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAB9AAAAAAAA + ACUAAAArAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAvAAAAZAAAAHcAAACMAAAAPAAAAI0AAAB4AAAAZAAAAC8AAAAAAAAAAAAAAAD/8AcA//NnAP/j + 4wD/7jsA/+wbAIAEEwAGDjsAP8d7ADnD4wAgQAcAYmSTAGZn8QAgTjgAMNgOAD/ZzAAGE+YAhjPmANAz + 5gD/GcwA/zgOAP+OOAD/x/EA/+XTAP/wBwAoAAAAEAAAACAAAAABACAAAAAAAEAEAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAA1AAAAXQAAAG0AAAB/AAAAUgAA + AD0AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVAAAA7AAAAAAAAAAAAAAAAAAA + AAAAAAD6AAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtgAAAAAAAAAAAAAA/wAA + AP8AAAAAAAAAAAAAAMcAAAAAAAAAAwAAACsAAABPAAAArAAAAKwAAABPAAAAKwAAAIsAAAAAAAAAAAAA + APEAAADcAAAACQAAAAAAAACVAAAAAAAAAC8AAAAoAAAAaAAAAAAAAAAAAAAAaAAAACgAAADWAAAAAAAA + AAAAAADoAAAA9AAAAAAAAAAAAAAAuwAAAAAAAACLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAArAAA + ALQAAAAAAAAAAAAAAAAAAAAAAAAAqAAAADUAAAAAAAAAuwAAAAAAAACZAAAA0QAAANEAAACZAAAAAAAA + AKkAAACuAAAA8AAAAG0AAACEAAAA5AAAAIkAAAAaAAAAAAAAAAAAAAAAAAAA/wAAAB0AAAAdAAAA/wAA + AAAAAABEAAAARwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6gAAABcAAADoAAAAAAAAAD4AAAC2AAAAtgAA + AFUAAAAAAAAAnQAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAABTAAAAggAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAArgAAACUAAAAlAAAArgAAAAAAAAAAAAAAwQAAACYAAABtAAAAtQAA + AAAAAAAAAAAA/wAAAG8AAAAAAAAA/wAAACUAAAAAAAAAAAAAACUAAAD/AAAAAAAAAFgAAAABAAAAGgAA + AEEAAABSAAAAUwAAAJcAAAAcAAAAAAAAAP8AAAAlAAAAAAAAAAAAAAAlAAAA/wAAAAAAAABYAAAAAAAA + AAAAAAACAAAAFgAAABYAAAAlAAAAngAAAAAAAAAAAAAAsAAAACUAAAAlAAAArgAAAAAAAAAAAAAAwQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAFwAAADsAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAA + AFMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAXAAAA6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AOoAAAAXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABcAAABSAAAAwQAAAFgAAABYAAAAwQAA + AFMAAAAXAAAAAP4BAAD+eQAA/s0AAADFAAAYzQAAfnkAAEIBAADCfAAAQs4AAH+GAAAZMgAAATIAAMGG + AAD5zgAA/PwAAP4BAAA= + + + \ No newline at end of file diff --git a/2LCS/AssetLibrary/AssetVersionForExport.cs b/2LCS/AssetLibrary/AssetVersionForExport.cs index 1cbb15b..279b917 100644 --- a/2LCS/AssetLibrary/AssetVersionForExport.cs +++ b/2LCS/AssetLibrary/AssetVersionForExport.cs @@ -1,56 +1,26 @@ -namespace LCS.AssetLibrary; +using System; + +namespace LCS.AssetLibrary; public class AssetVersionForExport { - public string AssetName { get; set; } - public string ReleaseNotes { get; set; } + public string ApplicationOrPlatformVersion { get; set; } + public string Name { get; set; } public string Id { get; set; } public string FileName { get; set; } - public string FileDescription { get; set; } - public string DisplaySize { get; set; } - public int CommitStatus { get; set; } - public int State { get; set; } - public int Scope { get; set; } - public string FileLocation { get; set; } - public int Version { get; set; } + public string DisplayVersion { get; set; } public int FileType { get; set; } public string CreatedByName { get; set; } public string ModifiedByName { get; set; } - public bool IsGoldBuild { get; set; } - public string DataPackageApplicationDetails { get; set; } - public int ValidationStatus { get; set; } - public string AadTenantId { get; set; } - public string ValidationStatusText { get; set; } - public string NextValidationDate { get; set; } - public int NumValidationAttempts { get; set; } - public int NumTenantTaggingAttempts { get; set; } public string ReleaseDetailsAssetId { get; set; } - public bool IsMockData { get; set; } public string ReleaseDetailsLink { get; set; } public string ParentAssetId { get; set; } public bool IsInvalid { get; set; } - public string DisplayValidationSymbol { get; set; } - public string DisplayModifiedDate { get; set; } - public string DisplayCreatedDate { get; set; } - public string DisplayId { get; set; } - public string Name { get; set; } public string Description { get; set; } - public string DisplayScope { get; set; } - public string DisplayState { get; set; } public string Location { get; set; } - public bool IsAbsoluteLocation { get; set; } - public bool CanDelete { get; set; } - public bool CanUpdate { get; set; } - public bool CanPublish { get; set; } - public bool CanNavigate { get; set; } - public string DisplayVersion { get; set; } - public int OriginalScope { get; set; } - public string TelemetryId { get; set; } public int CreatedBy { get; set; } - public string CreatedDate { get; set; } + public DateTime CreatedDate { get; set; } public int ModifiedBy { get; set; } - public string ModifiedDate { get; set; } - public string LocalCreatedDate { get; set; } - public string LocalModifiedDate { get; set; } + public DateTime ModifiedDate { get; set; } } diff --git a/2LCS/Forms/MainForm.Designer.cs b/2LCS/Forms/MainForm.Designer.cs index 646a682..b2109a9 100644 --- a/2LCS/Forms/MainForm.Designer.cs +++ b/2LCS/Forms/MainForm.Designer.cs @@ -180,9 +180,7 @@ private void InitializeComponent() notifyIcon = new System.Windows.Forms.NotifyIcon(components); notifyIconContextMenu = new System.Windows.Forms.ContextMenuStrip(components); notifyIconMenuClose = new System.Windows.Forms.ToolStripMenuItem(); - exportAssetLibraryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - sharedAssetLibraryToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - nuGetPackagesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + exportListOfNuGetPackagesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); ((System.ComponentModel.ISupportInitialize)cheDataGridView).BeginInit(); cheInstanceContextMenu.SuspendLayout(); mainMenuStrip.SuspendLayout(); @@ -677,7 +675,7 @@ private void InitializeComponent() // // exportToolStripMenuItem // - exportToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { exportProjectDataToolStripMenuItem1, exportListOfUsersToolStripMenuItem, exportListOfInstancesForAllProjectsToolStripMenuItem, exportUpdateScheduleForAllProjectsToolStripMenuItem, exportListOfEnvChangesToolStripMenuItem, exportAssetLibraryToolStripMenuItem }); + exportToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { exportProjectDataToolStripMenuItem1, exportListOfUsersToolStripMenuItem, exportListOfInstancesForAllProjectsToolStripMenuItem, exportUpdateScheduleForAllProjectsToolStripMenuItem, exportListOfEnvChangesToolStripMenuItem, exportListOfNuGetPackagesToolStripMenuItem }); exportToolStripMenuItem.Enabled = false; exportToolStripMenuItem.Name = "exportToolStripMenuItem"; exportToolStripMenuItem.Size = new System.Drawing.Size(66, 24); @@ -833,7 +831,7 @@ private void InitializeComponent() cheTabPage.Controls.Add(cheDataGridView); cheTabPage.Location = new System.Drawing.Point(4, 29); cheTabPage.Name = "cheTabPage"; - cheTabPage.Padding = new System.Windows.Forms.Padding(3, 3, 3, 3); + cheTabPage.Padding = new System.Windows.Forms.Padding(3); cheTabPage.Size = new System.Drawing.Size(1307, 756); cheTabPage.TabIndex = 0; cheTabPage.Text = "Cloud-hosted instances"; @@ -844,8 +842,8 @@ private void InitializeComponent() saasTabPage.Controls.Add(saasDataGridView); saasTabPage.Location = new System.Drawing.Point(4, 29); saasTabPage.Name = "saasTabPage"; - saasTabPage.Padding = new System.Windows.Forms.Padding(3, 3, 3, 3); - saasTabPage.Size = new System.Drawing.Size(1307, 741); + saasTabPage.Padding = new System.Windows.Forms.Padding(3); + saasTabPage.Size = new System.Drawing.Size(1307, 756); saasTabPage.TabIndex = 1; saasTabPage.Text = "MS-hosted environments"; saasTabPage.UseVisualStyleBackColor = true; @@ -866,7 +864,7 @@ private void InitializeComponent() saasDataGridView.Name = "saasDataGridView"; saasDataGridView.ReadOnly = true; saasDataGridView.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.AutoSizeToAllHeaders; - saasDataGridView.Size = new System.Drawing.Size(1301, 735); + saasDataGridView.Size = new System.Drawing.Size(1301, 750); saasDataGridView.TabIndex = 1; saasDataGridView.ColumnHeaderMouseClick += SaasDataGridView_ColumnHeaderMouseClick; saasDataGridView.MouseDown += DataGridView_MouseDown; @@ -1368,26 +1366,12 @@ private void InitializeComponent() notifyIconMenuClose.Text = "Close 2LCS"; notifyIconMenuClose.Click += NotifyIconMenuClose_Click; // - // exportAssetLibraryToolStripMenuItem + // exportListOfNuGetPackagesToolStripMenuItem // - exportAssetLibraryToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { sharedAssetLibraryToolStripMenuItem }); - exportAssetLibraryToolStripMenuItem.Name = "exportAssetLibraryToolStripMenuItem"; - exportAssetLibraryToolStripMenuItem.Size = new System.Drawing.Size(445, 26); - exportAssetLibraryToolStripMenuItem.Text = "Export asset library"; - // - // sharedAssetLibraryToolStripMenuItem - // - sharedAssetLibraryToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { nuGetPackagesToolStripMenuItem }); - sharedAssetLibraryToolStripMenuItem.Name = "sharedAssetLibraryToolStripMenuItem"; - sharedAssetLibraryToolStripMenuItem.Size = new System.Drawing.Size(224, 26); - sharedAssetLibraryToolStripMenuItem.Text = "Shared asset library"; - // - // nuGetPackagesToolStripMenuItem - // - nuGetPackagesToolStripMenuItem.Name = "nuGetPackagesToolStripMenuItem"; - nuGetPackagesToolStripMenuItem.Size = new System.Drawing.Size(224, 26); - nuGetPackagesToolStripMenuItem.Text = "NuGet packages"; - nuGetPackagesToolStripMenuItem.Click += nuGetPackagesToolStripMenuItem_Click; + exportListOfNuGetPackagesToolStripMenuItem.Name = "exportListOfNuGetPackagesToolStripMenuItem"; + exportListOfNuGetPackagesToolStripMenuItem.Size = new System.Drawing.Size(455, 26); + exportListOfNuGetPackagesToolStripMenuItem.Text = "Export list of NuGet packages from shared asset library"; + exportListOfNuGetPackagesToolStripMenuItem.Click += exportListOfNuGetPackagesToolStripMenuItem_Click; // // MainForm // @@ -1574,9 +1558,7 @@ private void InitializeComponent() private System.Windows.Forms.ToolStripMenuItem currentProjectUsersExportMenuItem; private System.Windows.Forms.ToolStripMenuItem allProjectUsersExportMenuItem; private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem exportAssetLibraryToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem sharedAssetLibraryToolStripMenuItem; - private System.Windows.Forms.ToolStripMenuItem nuGetPackagesToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem exportListOfNuGetPackagesToolStripMenuItem; } } diff --git a/2LCS/Forms/MainForm.cs b/2LCS/Forms/MainForm.cs index 49f80fc..6b786ec 100644 --- a/2LCS/Forms/MainForm.cs +++ b/2LCS/Forms/MainForm.cs @@ -2555,56 +2555,10 @@ private void aboutToolStripMenuItem_Click(object sender, EventArgs e) about2LCS.ShowDialog(); } - private void nuGetPackagesToolStripMenuItem_Click(object sender, EventArgs e) - { - var assets = _httpClientHelper.GetSharedAssetList(AssetFileType.NuGetPackage); - - // for each asset in 50 latest assets - // get the asset versions - // compile all versions into one list that includes the asset name - // sort the list by asset name and version - - var assetVersionsForExportList = new List(); - var config = new MapperConfiguration( - cfg => cfg.CreateMap()); - var mapper = config.CreateMapper(); - assets - .Take(4) - .ToList() - .ForEach(asset => - { - var assetVersions = _httpClientHelper.GetSharedAssetVersionList(asset.ParentAssetId); - assetVersionsForExportList.AddRange(assetVersions - .Select(assetVersion => mapper.Map(assetVersion)) - .Select(assetVersionForExport => - { - assetVersionForExport.AssetName = asset.Name; - assetVersionForExport.ReleaseNotes = - _httpClientHelper.GetAssetReleaseDetails( - assetVersionForExport.ReleaseDetailsLink); - return assetVersionForExport; - })); - }); - - SaveFileDialog saveFile = new() - { - FileName = "D365FO NuGet Packages.csv", - Filter = "CSV files (*.csv)|*.csv|All files (*.*)|*.*" - }; - - if (saveFile.ShowDialog() == DialogResult.OK) - { - try - { - using StreamWriter sw = new(saveFile.FileName, false, Encoding.Unicode); - var csv = new CsvWriter(sw, CultureInfo.CurrentCulture); - csv.WriteRecords(assetVersionsForExportList); - } - catch (Exception ex) - { - MessageBox.Show(ex.Message); - } - } + private void exportListOfNuGetPackagesToolStripMenuItem_Click(object sender, EventArgs e) + { + using var form = new AssetLibrarySearch(_httpClientHelper); + form.ShowDialog(); } } diff --git a/2LCS/JsonObjects.cs b/2LCS/JsonObjects.cs index c980871..7e1a2ec 100644 --- a/2LCS/JsonObjects.cs +++ b/2LCS/JsonObjects.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; namespace LCS.JsonObjects { @@ -67,6 +68,8 @@ public class AssetData public class AssetVersion { + public string ApplicationOrPlatformVersion { get; set; } + public string Id { get; set; } public string FileName { get; set; } public string FileDescription { get; set; } @@ -110,9 +113,9 @@ public class AssetVersion public int OriginalScope { get; set; } public string TelemetryId { get; set; } public int CreatedBy { get; set; } - public string CreatedDate { get; set; } + public DateTime CreatedDate { get; set; } public int ModifiedBy { get; set; } - public string ModifiedDate { get; set; } + public DateTime ModifiedDate { get; set; } public string LocalCreatedDate { get; set; } public string LocalModifiedDate { get; set; } } From 7e7a9c7f297f865c633b7da3dffcdb74f82a8e8f Mon Sep 17 00:00:00 2001 From: Florian Hopfner Date: Sat, 17 Feb 2024 18:35:46 +0100 Subject: [PATCH 15/15] Fix issue with user export A new type of Microsoft added users named "Service provider" have no SystemRoleId, which breaks the parsing of the payload received from LCS. --- 2LCS/JsonObjects.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2LCS/JsonObjects.cs b/2LCS/JsonObjects.cs index 7e1a2ec..5c2c398 100644 --- a/2LCS/JsonObjects.cs +++ b/2LCS/JsonObjects.cs @@ -556,7 +556,7 @@ public class ProjectUser public string ModifiedDate { get; set; }//Todo public int ProjectId { get; set; } public int ProjectUserId { get; set; } - public int SystemRoleId { get; set; } + public int? SystemRoleId { get; set; } public string UserLastAccess { get; set; }//Todo public UserProfile UserProfile { get; set; } public int UserProfileId { get; set; }