diff --git a/assets/swagger.json b/assets/swagger.json index 13d4203509..43b23e2a74 100644 --- a/assets/swagger.json +++ b/assets/swagger.json @@ -4039,6 +4039,30 @@ "description": "Whether https should be disabled for an OCI repo.", "name": "insecureOciForceHttp", "in": "query" + }, + { + "type": "string", + "description": "Azure Service Principal Client ID.", + "name": "azureServicePrincipalClientId", + "in": "query" + }, + { + "type": "string", + "description": "Azure Service Principal Client Secret.", + "name": "azureServicePrincipalClientSecret", + "in": "query" + }, + { + "type": "string", + "description": "Azure Service Principal Tenant ID.", + "name": "azureServicePrincipalTenantId", + "in": "query" + }, + { + "type": "string", + "description": "Azure Active Directory Endpoint.", + "name": "azureActiveDirectoryEndpoint", + "in": "query" } ], "responses": { @@ -4946,6 +4970,30 @@ "description": "Whether https should be disabled for an OCI repo.", "name": "insecureOciForceHttp", "in": "query" + }, + { + "type": "string", + "description": "Azure Service Principal Client ID.", + "name": "azureServicePrincipalClientId", + "in": "query" + }, + { + "type": "string", + "description": "Azure Service Principal Client Secret.", + "name": "azureServicePrincipalClientSecret", + "in": "query" + }, + { + "type": "string", + "description": "Azure Service Principal Tenant ID.", + "name": "azureServicePrincipalTenantId", + "in": "query" + }, + { + "type": "string", + "description": "Azure Active Directory Endpoint.", + "name": "azureActiveDirectoryEndpoint", + "in": "query" } ], "responses": { @@ -9519,6 +9567,22 @@ "type": "object", "title": "RepoCreds holds the definition for repository credentials", "properties": { + "azureActiveDirectoryEndpoint": { + "type": "string", + "title": "AzureActiveDirectoryEndpoint specifies the Azure Active Directory endpoint used for Service Principal authentication. If empty will default to https://login.microsoftonline.com" + }, + "azureServicePrincipalClientId": { + "type": "string", + "title": "AzureServicePrincipalClientId specifies the client ID of the Azure Service Principal used to access the repo" + }, + "azureServicePrincipalClientSecret": { + "type": "string", + "title": "AzureServicePrincipalClientSecret specifies the client secret of the Azure Service Principal used to access the repo" + }, + "azureServicePrincipalTenantId": { + "type": "string", + "title": "AzureServicePrincipalTenantId specifies the tenant ID of the Azure Service Principal used to access the repo" + }, "bearerToken": { "type": "string", "title": "BearerToken contains the bearer token used for Git BitBucket Data Center auth at the repo server" @@ -9618,6 +9682,22 @@ "type": "object", "title": "Repository is a repository holding application configurations", "properties": { + "azureActiveDirectoryEndpoint": { + "type": "string", + "title": "AzureActiveDirectoryEndpoint specifies the Azure Active Directory endpoint used for Service Principal authentication. If empty will default to https://login.microsoftonline.com" + }, + "azureServicePrincipalClientId": { + "type": "string", + "title": "AzureServicePrincipalClientId specifies the client ID of the Azure Service Principal used to access the repo" + }, + "azureServicePrincipalClientSecret": { + "type": "string", + "title": "AzureServicePrincipalClientSecret specifies the client secret of the Azure Service Principal used to access the repo" + }, + "azureServicePrincipalTenantId": { + "type": "string", + "title": "AzureServicePrincipalTenantId specifies the tenant ID of the Azure Service Principal used to access the repo" + }, "bearerToken": { "type": "string", "title": "BearerToken contains the bearer token used for Git BitBucket Data Center auth at the repo server" diff --git a/cmd/argocd/commands/repo.go b/cmd/argocd/commands/repo.go index 34ad584145..1067ecbe73 100644 --- a/cmd/argocd/commands/repo.go +++ b/cmd/argocd/commands/repo.go @@ -102,6 +102,12 @@ func NewRepoAddCommand(clientOpts *argocdclient.ClientOptions) *cobra.Command { # Add a private Git repository on Google Cloud Sources via GCP service account credentials argocd repo add https://source.developers.google.com/p/my-google-cloud-project/r/my-repo --gcp-service-account-key-path service-account-key.json + + # Add a private Git repository on Azure Devops via Azure Service Principal credentials + argocd repo add https://dev.azure.com/my-devops-organization/my-devops-project/_git/my-devops-repo --azure-service-principal-client-id 12345678-1234-1234-1234-123456789012 --azure-service-principal-client-secret test --azure-service-principal-tenant-id 12345678-1234-1234-1234-123456789012 + + # Add a private Git repository on Azure Devops via Azure Service Principal credentials when not using default Azure public cloud + argocd repo add https://dev.azure.com/my-devops-organization/my-devops-project/_git/my-devops-repo --azure-service-principal-client-id 12345678-1234-1234-1234-123456789012 --azure-service-principal-client-secret test --azure-service-principal-tenant-id 12345678-1234-1234-1234-123456789012 --azure-active-directory-endpoint https://login.microsoftonline.de ` command := &cobra.Command{ @@ -191,6 +197,10 @@ func NewRepoAddCommand(clientOpts *argocdclient.ClientOptions) *cobra.Command { repoOpts.Repo.NoProxy = repoOpts.NoProxy repoOpts.Repo.ForceHttpBasicAuth = repoOpts.ForceHttpBasicAuth repoOpts.Repo.UseAzureWorkloadIdentity = repoOpts.UseAzureWorkloadIdentity + repoOpts.Repo.AzureServicePrincipalTenantId = repoOpts.AzureServicePrincipalTenantId + repoOpts.Repo.AzureServicePrincipalClientId = repoOpts.AzureServicePrincipalClientId + repoOpts.Repo.AzureServicePrincipalClientSecret = repoOpts.AzureServicePrincipalClientSecret + repoOpts.Repo.AzureActiveDirectoryEndpoint = repoOpts.AzureActiveDirectoryEndpoint repoOpts.Repo.Depth = repoOpts.Depth repoOpts.Repo.WebhookManifestCacheWarmDisabled = repoOpts.WebhookManifestCacheWarmDisabled @@ -226,27 +236,31 @@ func NewRepoAddCommand(clientOpts *argocdclient.ClientOptions) *cobra.Command { // are high that we do not have the given URL pointing to a valid Git // repo anyway. repoAccessReq := repositorypkg.RepoAccessQuery{ - Repo: repoOpts.Repo.Repo, - Type: repoOpts.Repo.Type, - Name: repoOpts.Repo.Name, - Username: repoOpts.Repo.Username, - Password: repoOpts.Repo.Password, - BearerToken: repoOpts.Repo.BearerToken, - SshPrivateKey: repoOpts.Repo.SSHPrivateKey, - TlsClientCertData: repoOpts.Repo.TLSClientCertData, - TlsClientCertKey: repoOpts.Repo.TLSClientCertKey, - Insecure: repoOpts.Repo.IsInsecure(), - EnableOci: repoOpts.Repo.EnableOCI, - GithubAppPrivateKey: repoOpts.Repo.GithubAppPrivateKey, - GithubAppID: repoOpts.Repo.GithubAppId, - GithubAppInstallationID: repoOpts.Repo.GithubAppInstallationId, - GithubAppEnterpriseBaseUrl: repoOpts.Repo.GitHubAppEnterpriseBaseURL, - Proxy: repoOpts.Proxy, - Project: repoOpts.Repo.Project, - GcpServiceAccountKey: repoOpts.Repo.GCPServiceAccountKey, - ForceHttpBasicAuth: repoOpts.Repo.ForceHttpBasicAuth, - UseAzureWorkloadIdentity: repoOpts.Repo.UseAzureWorkloadIdentity, - InsecureOciForceHttp: repoOpts.Repo.InsecureOCIForceHttp, + Repo: repoOpts.Repo.Repo, + Type: repoOpts.Repo.Type, + Name: repoOpts.Repo.Name, + Username: repoOpts.Repo.Username, + Password: repoOpts.Repo.Password, + BearerToken: repoOpts.Repo.BearerToken, + SshPrivateKey: repoOpts.Repo.SSHPrivateKey, + TlsClientCertData: repoOpts.Repo.TLSClientCertData, + TlsClientCertKey: repoOpts.Repo.TLSClientCertKey, + Insecure: repoOpts.Repo.IsInsecure(), + EnableOci: repoOpts.Repo.EnableOCI, + GithubAppPrivateKey: repoOpts.Repo.GithubAppPrivateKey, + GithubAppID: repoOpts.Repo.GithubAppId, + GithubAppInstallationID: repoOpts.Repo.GithubAppInstallationId, + GithubAppEnterpriseBaseUrl: repoOpts.Repo.GitHubAppEnterpriseBaseURL, + Proxy: repoOpts.Proxy, + Project: repoOpts.Repo.Project, + GcpServiceAccountKey: repoOpts.Repo.GCPServiceAccountKey, + ForceHttpBasicAuth: repoOpts.Repo.ForceHttpBasicAuth, + UseAzureWorkloadIdentity: repoOpts.Repo.UseAzureWorkloadIdentity, + InsecureOciForceHttp: repoOpts.Repo.InsecureOCIForceHttp, + AzureServicePrincipalTenantId: repoOpts.Repo.AzureServicePrincipalTenantId, + AzureServicePrincipalClientId: repoOpts.Repo.AzureServicePrincipalClientId, + AzureServicePrincipalClientSecret: repoOpts.Repo.AzureServicePrincipalClientSecret, + AzureActiveDirectoryEndpoint: repoOpts.Repo.AzureActiveDirectoryEndpoint, } _, err = repoIf.ValidateAccess(ctx, &repoAccessReq) errors.CheckError(err) diff --git a/cmd/argocd/commands/repocreds.go b/cmd/argocd/commands/repocreds.go index ed6892f857..4de0a20e85 100644 --- a/cmd/argocd/commands/repocreds.go +++ b/cmd/argocd/commands/repocreds.go @@ -83,6 +83,12 @@ func NewRepoCredsAddCommand(clientOpts *argocdclient.ClientOptions) *cobra.Comma # Add credentials with GCP credentials for all repositories under https://source.developers.google.com/p/my-google-cloud-project/r/ argocd repocreds add https://source.developers.google.com/p/my-google-cloud-project/r/ --gcp-service-account-key-path service-account-key.json + + # Add credentials with Azure Service Principal to use for all repositories under https://dev.azure.com/my-devops-organization + argocd repocreds add https://dev.azure.com/my-devops-organization --azure-service-principal-client-id 12345678-1234-1234-1234-123456789012 --azure-service-principal-client-secret test --azure-service-principal-tenant-id 12345678-1234-1234-1234-123456789012 + + # Add credentials with Azure Service Principal to use for all repositories under https://dev.azure.com/my-devops-organization when not using default Azure public cloud + argocd repocreds add https://dev.azure.com/my-devops-organization --azure-service-principal-client-id 12345678-1234-1234-1234-123456789012 --azure-service-principal-client-secret test --azure-service-principal-tenant-id 12345678-1234-1234-1234-123456789012 --azure-active-directory-endpoint https://login.microsoftonline.de ` command := &cobra.Command{ @@ -201,6 +207,10 @@ func NewRepoCredsAddCommand(clientOpts *argocdclient.ClientOptions) *cobra.Comma command.Flags().BoolVar(&repo.ForceHttpBasicAuth, "force-http-basic-auth", false, "whether to force basic auth when connecting via HTTP") command.Flags().BoolVar(&repo.UseAzureWorkloadIdentity, "use-azure-workload-identity", false, "whether to use azure workload identity for authentication") command.Flags().StringVar(&repo.Proxy, "proxy-url", "", "If provided, this URL will be used to connect via proxy") + command.Flags().StringVar(&repo.AzureServicePrincipalClientId, "azure-service-principal-client-id", "", "client id of the Azure Service Principal") + command.Flags().StringVar(&repo.AzureServicePrincipalClientSecret, "azure-service-principal-client-secret", "", "client secret of the Azure Service Principal") + command.Flags().StringVar(&repo.AzureServicePrincipalTenantId, "azure-service-principal-tenant-id", "", "tenant id of the Azure Service Principal") + command.Flags().StringVar(&repo.AzureActiveDirectoryEndpoint, "azure-active-directory-endpoint", "", "Active Directory endpoint when not using default Azure public cloud (e.g. https://login.microsoftonline.de)") return command } diff --git a/cmd/util/repo.go b/cmd/util/repo.go index 18cb896ca8..101f0c459e 100644 --- a/cmd/util/repo.go +++ b/cmd/util/repo.go @@ -8,27 +8,31 @@ import ( ) type RepoOptions struct { - Repo appsv1.Repository - Upsert bool - SshPrivateKeyPath string //nolint:revive //FIXME(var-naming) - InsecureOCIForceHTTP bool - InsecureIgnoreHostKey bool - InsecureSkipServerVerification bool - TlsClientCertPath string //nolint:revive //FIXME(var-naming) - TlsClientCertKeyPath string //nolint:revive //FIXME(var-naming) - EnableLfs bool - EnableOci bool - GithubAppId int64 - GithubAppInstallationId int64 - GithubAppPrivateKeyPath string - GitHubAppEnterpriseBaseURL string - Proxy string - NoProxy string - GCPServiceAccountKeyPath string - ForceHttpBasicAuth bool //nolint:revive //FIXME(var-naming) - UseAzureWorkloadIdentity bool - Depth int64 - WebhookManifestCacheWarmDisabled bool + Repo appsv1.Repository + Upsert bool + SshPrivateKeyPath string //nolint:revive //FIXME(var-naming) + InsecureOCIForceHTTP bool + InsecureIgnoreHostKey bool + InsecureSkipServerVerification bool + TlsClientCertPath string //nolint:revive //FIXME(var-naming) + TlsClientCertKeyPath string //nolint:revive //FIXME(var-naming) + EnableLfs bool + EnableOci bool + GithubAppId int64 + GithubAppInstallationId int64 + GithubAppPrivateKeyPath string + GitHubAppEnterpriseBaseURL string + Proxy string + NoProxy string + GCPServiceAccountKeyPath string + ForceHttpBasicAuth bool //nolint:revive //FIXME(var-naming) + UseAzureWorkloadIdentity bool + Depth int64 + WebhookManifestCacheWarmDisabled bool + AzureServicePrincipalTenantId string + AzureServicePrincipalClientId string + AzureServicePrincipalClientSecret string + AzureActiveDirectoryEndpoint string } func AddRepoFlags(command *cobra.Command, opts *RepoOptions) { @@ -57,4 +61,8 @@ func AddRepoFlags(command *cobra.Command, opts *RepoOptions) { command.Flags().BoolVar(&opts.InsecureOCIForceHTTP, "insecure-oci-force-http", false, "Use http when accessing an OCI repository") command.Flags().Int64Var(&opts.Depth, "depth", 0, "Specify a custom depth for git clone operations. Unless specified, a full clone is performed using the depth of 0") command.Flags().BoolVar(&opts.WebhookManifestCacheWarmDisabled, "webhook-manifest-cache-warm-disabled", false, "disable manifest cache warming during webhook processing for this repository (recommended for large monorepos with plain YAML manifests)") + command.Flags().StringVar(&opts.AzureServicePrincipalTenantId, "azure-service-principal-tenant-id", "", "tenant id of the Azure Service Principal") + command.Flags().StringVar(&opts.AzureServicePrincipalClientId, "azure-service-principal-client-id", "", "client id of the Azure Service Principal") + command.Flags().StringVar(&opts.AzureServicePrincipalClientSecret, "azure-service-principal-client-secret", "", "client secret of the Azure Service Principal") + command.Flags().StringVar(&opts.AzureActiveDirectoryEndpoint, "azure-active-directory-endpoint", "", "Active Directory endpoint when not using default Azure public cloud (e.g. https://login.microsoftonline.de)") } diff --git a/common/common.go b/common/common.go index 350b97c302..4406da6ef9 100644 --- a/common/common.go +++ b/common/common.go @@ -137,6 +137,9 @@ const ( ChangePasswordSSOTokenMaxAge = time.Minute * 5 // GithubAppCredsExpirationDuration is the default time used to cache the GitHub app credentials GithubAppCredsExpirationDuration = time.Minute * 60 + // AzureServicePrincipalCredsExpirationDuration is the default time used to cache the Azure service principal credentials + // SP tokens are valid for 60 minutes, so cache for 59 minutes to avoid issues with token expiration when taking the cleanup interval of 1 minute into account + AzureServicePrincipalCredsExpirationDuration = time.Minute * 59 // PasswordPatten is the default password patten PasswordPatten = `^.{8,32}$` @@ -297,6 +300,8 @@ const ( EnvEnableGRPCTimeHistogramEnv = "ARGOCD_ENABLE_GRPC_TIME_HISTOGRAM" // EnvGithubAppCredsExpirationDuration controls the caching of Github app credentials. This value is in minutes (default: 60) EnvGithubAppCredsExpirationDuration = "ARGOCD_GITHUB_APP_CREDS_EXPIRATION_DURATION" + // EnvAzureServicePrincipalCredsExpirationDuration controls the caching of Azure service principal credentials. This value is in minutes (default: 59). Any value greater than 59 will be set to 59 minutes + EnvAzureServicePrincipalCredsExpirationDuration = "ARGOCD_AZURE_SERVICE_PRINCIPAL_CREDS_EXPIRATION_DURATION" // EnvHelmIndexCacheDuration controls how the helm repository index file is cached for (default: 0) EnvHelmIndexCacheDuration = "ARGOCD_HELM_INDEX_CACHE_DURATION" // EnvAppConfigPath allows to override the configuration path for repo server diff --git a/docs/assets/repo-add-azure-service-principal.png b/docs/assets/repo-add-azure-service-principal.png new file mode 100644 index 0000000000..ac1f07e0ac Binary files /dev/null and b/docs/assets/repo-add-azure-service-principal.png differ diff --git a/docs/operator-manual/declarative-setup.md b/docs/operator-manual/declarative-setup.md index 40825eabcb..d3247bd875 100644 --- a/docs/operator-manual/declarative-setup.md +++ b/docs/operator-manual/declarative-setup.md @@ -180,7 +180,7 @@ spec: Repository details are stored in secrets. To configure a repo, create a secret which contains repository details. Consider using [bitnami-labs/sealed-secrets](https://github.com/bitnami-labs/sealed-secrets) to store an encrypted secret definition as a Kubernetes manifest. -Each repository must have a `url` field and, depending on whether you connect using HTTPS, SSH, or GitHub App, `username` and `password` (for HTTPS), `sshPrivateKey` (for SSH), or `githubAppPrivateKey` (for GitHub App). +Each repository must have a `url` field and, depending on whether you connect using HTTPS, SSH, GitHub App or Azure Service Principal, `username` and `password` (for HTTPS), `sshPrivateKey` (for SSH), `githubAppPrivateKey` (for GitHub App) or `azureServicePrincipalClientSecret` (for Azure Service Principal). Credentials can be scoped to a project using the optional `project` field. When omitted, the credential will be used as the default for all projects without a scoped credential. > [!WARNING] @@ -296,6 +296,39 @@ Example for Azure Container Registry/ Azure Devops repositories using Azure work Refer to [Azure Container Registry/Azure Repos using Azure Workload Identity](../user-guide/private-repositories.md#azure-container-registryazure-repos-using-azure-workload-identity) +Example for Azure Service Principal: + +```yaml +apiVersion: v1 +kind: Secret +metadata: + name: service-principal-for-azure-public-cloud + namespace: argocd + labels: + argocd.argoproj.io/secret-type: repository +stringData: + type: git + url: https://dev.azure.com/my-devops-organization/my-devops-project/_git/my-devops-repo + azureServicePrincipalClientId: 12345678-1234-1234-1234-123456789012 + azureServicePrincipalTenantId: 12345678-1234-1234-1234-123456789012 + azureServicePrincipalClientSecret: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +--- +apiVersion: v1 +kind: Secret +metadata: + name: service-principal-for-azure-other-cloud + namespace: argocd + labels: + argocd.argoproj.io/secret-type: repository +stringData: + type: git + url: https://dev.azure.com/my-devops-organization/my-devops-project/_git/my-devops-repo + azureActiveDirectoryEndpoint: https://login.microsoftonline.de + azureServicePrincipalClientId: 12345678-1234-1234-1234-123456789012 + azureServicePrincipalTenantId: 12345678-1234-1234-1234-123456789012 + azureServicePrincipalClientSecret: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX +``` + ### Repository Credentials If you want to use the same credentials for multiple repositories, you can configure credential templates. Credential templates can carry the same credentials information as repositories. diff --git a/docs/user-guide/commands/argocd_admin_repo_generate-spec.md b/docs/user-guide/commands/argocd_admin_repo_generate-spec.md index f3e99e75c7..76351e4f69 100644 --- a/docs/user-guide/commands/argocd_admin_repo_generate-spec.md +++ b/docs/user-guide/commands/argocd_admin_repo_generate-spec.md @@ -59,33 +59,37 @@ argocd admin repo generate-spec REPOURL [flags] ### Options ``` - --bearer-token string bearer token to the Git BitBucket Data Center repository - --depth int Specify a custom depth for git clone operations. Unless specified, a full clone is performed using the depth of 0 - --enable-lfs enable git-lfs (Large File Support) on this repository - --enable-oci enable helm-oci (Helm OCI-Based Repository) (only valid for helm type repositories) - --force-http-basic-auth whether to force use of basic auth when connecting repository via HTTP - --gcp-service-account-key-path string service account key for the Google Cloud Platform - --github-app-enterprise-base-url string base url to use when using GitHub Enterprise (e.g. https://ghe.example.com/api/v3 - --github-app-id int id of the GitHub Application - --github-app-installation-id int installation id of the GitHub Application (optional, will be auto-discovered if not provided) - --github-app-private-key-path string private key of the GitHub Application - -h, --help help for generate-spec - --insecure-ignore-host-key disables SSH strict host key checking (deprecated, use --insecure-skip-server-verification instead) - --insecure-oci-force-http Use http when accessing an OCI repository - --insecure-skip-server-verification disables server certificate and host key checks - --name string name of the repository, mandatory for repositories of type helm - --no-proxy string don't access these targets via proxy - -o, --output string Output format. One of: json|yaml (default "yaml") - --password string password to the repository - --project string project of the repository - --proxy string use proxy to access repository - --ssh-private-key-path string path to the private ssh key (e.g. ~/.ssh/id_rsa) - --tls-client-cert-key-path string path to the TLS client cert's key (must be PEM format) - --tls-client-cert-path string path to the TLS client cert (must be PEM format) - --type string type of the repository, "git", "oci" or "helm" (default "git") - --use-azure-workload-identity whether to use azure workload identity for authentication - --username string username to the repository - --webhook-manifest-cache-warm-disabled disable manifest cache warming during webhook processing for this repository (recommended for large monorepos with plain YAML manifests) + --azure-active-directory-endpoint string Active Directory endpoint when not using default Azure public cloud (e.g. https://login.microsoftonline.de) + --azure-service-principal-client-id string client id of the Azure Service Principal + --azure-service-principal-client-secret string client secret of the Azure Service Principal + --azure-service-principal-tenant-id string tenant id of the Azure Service Principal + --bearer-token string bearer token to the Git BitBucket Data Center repository + --depth int Specify a custom depth for git clone operations. Unless specified, a full clone is performed using the depth of 0 + --enable-lfs enable git-lfs (Large File Support) on this repository + --enable-oci enable helm-oci (Helm OCI-Based Repository) (only valid for helm type repositories) + --force-http-basic-auth whether to force use of basic auth when connecting repository via HTTP + --gcp-service-account-key-path string service account key for the Google Cloud Platform + --github-app-enterprise-base-url string base url to use when using GitHub Enterprise (e.g. https://ghe.example.com/api/v3 + --github-app-id int id of the GitHub Application + --github-app-installation-id int installation id of the GitHub Application (optional, will be auto-discovered if not provided) + --github-app-private-key-path string private key of the GitHub Application + -h, --help help for generate-spec + --insecure-ignore-host-key disables SSH strict host key checking (deprecated, use --insecure-skip-server-verification instead) + --insecure-oci-force-http Use http when accessing an OCI repository + --insecure-skip-server-verification disables server certificate and host key checks + --name string name of the repository, mandatory for repositories of type helm + --no-proxy string don't access these targets via proxy + -o, --output string Output format. One of: json|yaml (default "yaml") + --password string password to the repository + --project string project of the repository + --proxy string use proxy to access repository + --ssh-private-key-path string path to the private ssh key (e.g. ~/.ssh/id_rsa) + --tls-client-cert-key-path string path to the TLS client cert's key (must be PEM format) + --tls-client-cert-path string path to the TLS client cert (must be PEM format) + --type string type of the repository, "git", "oci" or "helm" (default "git") + --use-azure-workload-identity whether to use azure workload identity for authentication + --username string username to the repository + --webhook-manifest-cache-warm-disabled disable manifest cache warming during webhook processing for this repository (recommended for large monorepos with plain YAML manifests) ``` ### Options inherited from parent commands diff --git a/docs/user-guide/commands/argocd_repo_add.md b/docs/user-guide/commands/argocd_repo_add.md index 29287b40d7..0c58c1e028 100644 --- a/docs/user-guide/commands/argocd_repo_add.md +++ b/docs/user-guide/commands/argocd_repo_add.md @@ -56,38 +56,48 @@ argocd repo add REPOURL [flags] # Add a private Git repository on Google Cloud Sources via GCP service account credentials argocd repo add https://source.developers.google.com/p/my-google-cloud-project/r/my-repo --gcp-service-account-key-path service-account-key.json + # Add a private Git repository on Azure Devops via Azure Service Principal credentials + argocd repo add https://dev.azure.com/my-devops-organization/my-devops-project/_git/my-devops-repo --azure-service-principal-client-id 12345678-1234-1234-1234-123456789012 --azure-service-principal-client-secret test --azure-service-principal-tenant-id 12345678-1234-1234-1234-123456789012 + + # Add a private Git repository on Azure Devops via Azure Service Principal credentials when not using default Azure public cloud + argocd repo add https://dev.azure.com/my-devops-organization/my-devops-project/_git/my-devops-repo --azure-service-principal-client-id 12345678-1234-1234-1234-123456789012 --azure-service-principal-client-secret test --azure-service-principal-tenant-id 12345678-1234-1234-1234-123456789012 --azure-active-directory-endpoint https://login.microsoftonline.de + ``` ### Options ``` - --bearer-token string bearer token to the Git BitBucket Data Center repository - --depth int Specify a custom depth for git clone operations. Unless specified, a full clone is performed using the depth of 0 - --enable-lfs enable git-lfs (Large File Support) on this repository - --enable-oci enable helm-oci (Helm OCI-Based Repository) (only valid for helm type repositories) - --force-http-basic-auth whether to force use of basic auth when connecting repository via HTTP - --gcp-service-account-key-path string service account key for the Google Cloud Platform - --github-app-enterprise-base-url string base url to use when using GitHub Enterprise (e.g. https://ghe.example.com/api/v3 - --github-app-id int id of the GitHub Application - --github-app-installation-id int installation id of the GitHub Application (optional, will be auto-discovered if not provided) - --github-app-private-key-path string private key of the GitHub Application - -h, --help help for add - --insecure-ignore-host-key disables SSH strict host key checking (deprecated, use --insecure-skip-server-verification instead) - --insecure-oci-force-http Use http when accessing an OCI repository - --insecure-skip-server-verification disables server certificate and host key checks - --name string name of the repository, mandatory for repositories of type helm - --no-proxy string don't access these targets via proxy - --password string password to the repository - --project string project of the repository - --proxy string use proxy to access repository - --ssh-private-key-path string path to the private ssh key (e.g. ~/.ssh/id_rsa) - --tls-client-cert-key-path string path to the TLS client cert's key (must be PEM format) - --tls-client-cert-path string path to the TLS client cert (must be PEM format) - --type string type of the repository, "git", "oci" or "helm" (default "git") - --upsert Override an existing repository with the same name even if the spec differs - --use-azure-workload-identity whether to use azure workload identity for authentication - --username string username to the repository - --webhook-manifest-cache-warm-disabled disable manifest cache warming during webhook processing for this repository (recommended for large monorepos with plain YAML manifests) + --azure-active-directory-endpoint string Active Directory endpoint when not using default Azure public cloud (e.g. https://login.microsoftonline.de) + --azure-service-principal-client-id string client id of the Azure Service Principal + --azure-service-principal-client-secret string client secret of the Azure Service Principal + --azure-service-principal-tenant-id string tenant id of the Azure Service Principal + --bearer-token string bearer token to the Git BitBucket Data Center repository + --depth int Specify a custom depth for git clone operations. Unless specified, a full clone is performed using the depth of 0 + --enable-lfs enable git-lfs (Large File Support) on this repository + --enable-oci enable helm-oci (Helm OCI-Based Repository) (only valid for helm type repositories) + --force-http-basic-auth whether to force use of basic auth when connecting repository via HTTP + --gcp-service-account-key-path string service account key for the Google Cloud Platform + --github-app-enterprise-base-url string base url to use when using GitHub Enterprise (e.g. https://ghe.example.com/api/v3 + --github-app-id int id of the GitHub Application + --github-app-installation-id int installation id of the GitHub Application (optional, will be auto-discovered if not provided) + --github-app-private-key-path string private key of the GitHub Application + -h, --help help for add + --insecure-ignore-host-key disables SSH strict host key checking (deprecated, use --insecure-skip-server-verification instead) + --insecure-oci-force-http Use http when accessing an OCI repository + --insecure-skip-server-verification disables server certificate and host key checks + --name string name of the repository, mandatory for repositories of type helm + --no-proxy string don't access these targets via proxy + --password string password to the repository + --project string project of the repository + --proxy string use proxy to access repository + --ssh-private-key-path string path to the private ssh key (e.g. ~/.ssh/id_rsa) + --tls-client-cert-key-path string path to the TLS client cert's key (must be PEM format) + --tls-client-cert-path string path to the TLS client cert (must be PEM format) + --type string type of the repository, "git", "oci" or "helm" (default "git") + --upsert Override an existing repository with the same name even if the spec differs + --use-azure-workload-identity whether to use azure workload identity for authentication + --username string username to the repository + --webhook-manifest-cache-warm-disabled disable manifest cache warming during webhook processing for this repository (recommended for large monorepos with plain YAML manifests) ``` ### Options inherited from parent commands diff --git a/docs/user-guide/commands/argocd_repocreds_add.md b/docs/user-guide/commands/argocd_repocreds_add.md index 0b67135d99..40cd5e6017 100644 --- a/docs/user-guide/commands/argocd_repocreds_add.md +++ b/docs/user-guide/commands/argocd_repocreds_add.md @@ -32,29 +32,39 @@ argocd repocreds add REPOURL [flags] # Add credentials with GCP credentials for all repositories under https://source.developers.google.com/p/my-google-cloud-project/r/ argocd repocreds add https://source.developers.google.com/p/my-google-cloud-project/r/ --gcp-service-account-key-path service-account-key.json + # Add credentials with Azure Service Principal to use for all repositories under https://dev.azure.com/my-devops-organization + argocd repocreds add https://dev.azure.com/my-devops-organization --azure-service-principal-client-id 12345678-1234-1234-1234-123456789012 --azure-service-principal-client-secret test --azure-service-principal-tenant-id 12345678-1234-1234-1234-123456789012 + + # Add credentials with Azure Service Principal to use for all repositories under https://dev.azure.com/my-devops-organization when not using default Azure public cloud + argocd repocreds add https://dev.azure.com/my-devops-organization --azure-service-principal-client-id 12345678-1234-1234-1234-123456789012 --azure-service-principal-client-secret test --azure-service-principal-tenant-id 12345678-1234-1234-1234-123456789012 --azure-active-directory-endpoint https://login.microsoftonline.de + ``` ### Options ``` - --bearer-token string bearer token to the Git repository - --enable-oci Specifies whether helm-oci support should be enabled for this repo - --force-http-basic-auth whether to force basic auth when connecting via HTTP - --gcp-service-account-key-path string service account key for the Google Cloud Platform - --github-app-enterprise-base-url string base url to use when using GitHub Enterprise (e.g. https://ghe.example.com/api/v3 - --github-app-id int id of the GitHub Application - --github-app-installation-id int installation id of the GitHub Application (optional, will be auto-discovered if not provided) - --github-app-private-key-path string private key of the GitHub Application - -h, --help help for add - --password string password to the repository - --proxy-url string If provided, this URL will be used to connect via proxy - --ssh-private-key-path string path to the private ssh key (e.g. ~/.ssh/id_rsa) - --tls-client-cert-key-path string path to the TLS client cert's key (must be PEM format) - --tls-client-cert-path string path to the TLS client cert (must be PEM format) - --type string type of the repository, "git" or "helm" (default "git") - --upsert Override an existing repository with the same name even if the spec differs - --use-azure-workload-identity whether to use azure workload identity for authentication - --username string username to the repository + --azure-active-directory-endpoint string Active Directory endpoint when not using default Azure public cloud (e.g. https://login.microsoftonline.de) + --azure-service-principal-client-id string client id of the Azure Service Principal + --azure-service-principal-client-secret string client secret of the Azure Service Principal + --azure-service-principal-tenant-id string tenant id of the Azure Service Principal + --bearer-token string bearer token to the Git repository + --enable-oci Specifies whether helm-oci support should be enabled for this repo + --force-http-basic-auth whether to force basic auth when connecting via HTTP + --gcp-service-account-key-path string service account key for the Google Cloud Platform + --github-app-enterprise-base-url string base url to use when using GitHub Enterprise (e.g. https://ghe.example.com/api/v3 + --github-app-id int id of the GitHub Application + --github-app-installation-id int installation id of the GitHub Application (optional, will be auto-discovered if not provided) + --github-app-private-key-path string private key of the GitHub Application + -h, --help help for add + --password string password to the repository + --proxy-url string If provided, this URL will be used to connect via proxy + --ssh-private-key-path string path to the private ssh key (e.g. ~/.ssh/id_rsa) + --tls-client-cert-key-path string path to the TLS client cert's key (must be PEM format) + --tls-client-cert-path string path to the TLS client cert (must be PEM format) + --type string type of the repository, "git" or "helm" (default "git") + --upsert Override an existing repository with the same name even if the spec differs + --use-azure-workload-identity whether to use azure workload identity for authentication + --username string username to the repository ``` ### Options inherited from parent commands diff --git a/docs/user-guide/private-repositories.md b/docs/user-guide/private-repositories.md index 0db3a284b3..d789cd5a60 100644 --- a/docs/user-guide/private-repositories.md +++ b/docs/user-guide/private-repositories.md @@ -242,6 +242,36 @@ stringData: useAzureWorkloadIdentity: "true" ``` +### Azure Devops using Service Principal + +Azure DevOps repositories can be accessed using credentials from a Service Principal. Refer to steps 1,2 and 3 from the [Use service principals and managed identities in Azure DevOps](https://learn.microsoft.com/en-us/azure/devops/integrate/get-started/authentication/service-principal-managed-identity?view=azure-devops) documentation on how to create a service principal and configure access to Azure DevOps. + +> [!NOTE] +> Ensure your service principal has at least `Project Readers` permissions to the `Project` that contains the repository. This is the minimum requirement. + +You can configure access to your Git repository hosted on Azure DevOps with Service Principal by either using the CLI or the UI. + +Using the CLI: + +``` +argocd repo add https://dev.azure.com/my-devops-organization/my-devops-project/_git/my-devops-repo --azure-service-principal-tenant-id 12345678-1234-1234-1234-123456789012 --azure-service-principal-client-id 12345678-1234-1234-1234-123456789012 --azure-service-principal-client-secret test +``` + +> [!NOTE] +> To use an Azure cloud other than the default public cloud using the CLI add `--azure-active-directory-endpoint https://login.microsoftonline.de` flag. + +Using the UI: + +1. Navigate to `Settings/Repositories` + + ![connect repo overview](../assets/repo-add-overview.png) + +2. Click `Connect Repo` button, choose connection method: `Via Azure Service Principal`, enter the URL, Tenant Id, Client Id, Client Secret, and Active Directory Endpoint if not using default Azure public cloud. + + ![connect repo](../assets/repo-add-azure-service-principal.png) + +3. Click `Connect` to test the connection and have the repository added + ## Credential templates You can also set up credentials to serve as templates for connecting repositories, without having to repeat credential configuration. For example, if you setup credential templates for the URL prefix `https://github.com/argoproj`, these credentials will be used for all repositories with this URL as prefix (e.g. `https://github.com/argoproj/argocd-example-apps`) that do not have their own credentials configured. diff --git a/pkg/apiclient/repository/repository.pb.go b/pkg/apiclient/repository/repository.pb.go index f9d9d6a417..d9bce8314b 100644 --- a/pkg/apiclient/repository/repository.pb.go +++ b/pkg/apiclient/repository/repository.pb.go @@ -401,10 +401,18 @@ type RepoAccessQuery struct { // BearerToken contains the bearer token used for Git auth at the repo server BearerToken string `protobuf:"bytes,21,opt,name=bearerToken,proto3" json:"bearerToken,omitempty"` // Whether https should be disabled for an OCI repo - InsecureOciForceHttp bool `protobuf:"varint,22,opt,name=insecureOciForceHttp,proto3" json:"insecureOciForceHttp,omitempty"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + InsecureOciForceHttp bool `protobuf:"varint,22,opt,name=insecureOciForceHttp,proto3" json:"insecureOciForceHttp,omitempty"` + // Azure Service Principal Client ID + AzureServicePrincipalClientId string `protobuf:"bytes,23,opt,name=azureServicePrincipalClientId,proto3" json:"azureServicePrincipalClientId,omitempty"` + // Azure Service Principal Client Secret + AzureServicePrincipalClientSecret string `protobuf:"bytes,24,opt,name=azureServicePrincipalClientSecret,proto3" json:"azureServicePrincipalClientSecret,omitempty"` + // Azure Service Principal Tenant ID + AzureServicePrincipalTenantId string `protobuf:"bytes,25,opt,name=azureServicePrincipalTenantId,proto3" json:"azureServicePrincipalTenantId,omitempty"` + // Azure Active Directory Endpoint + AzureActiveDirectoryEndpoint string `protobuf:"bytes,26,opt,name=azureActiveDirectoryEndpoint,proto3" json:"azureActiveDirectoryEndpoint,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *RepoAccessQuery) Reset() { *m = RepoAccessQuery{} } @@ -587,6 +595,34 @@ func (m *RepoAccessQuery) GetInsecureOciForceHttp() bool { return false } +func (m *RepoAccessQuery) GetAzureServicePrincipalClientId() string { + if m != nil { + return m.AzureServicePrincipalClientId + } + return "" +} + +func (m *RepoAccessQuery) GetAzureServicePrincipalClientSecret() string { + if m != nil { + return m.AzureServicePrincipalClientSecret + } + return "" +} + +func (m *RepoAccessQuery) GetAzureServicePrincipalTenantId() string { + if m != nil { + return m.AzureServicePrincipalTenantId + } + return "" +} + +func (m *RepoAccessQuery) GetAzureActiveDirectoryEndpoint() string { + if m != nil { + return m.AzureActiveDirectoryEndpoint + } + return "" +} + type RepoResponse struct { XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -757,94 +793,99 @@ func init() { } var fileDescriptor_8d38260443475705 = []byte{ - // 1392 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xdf, 0x6e, 0x1b, 0xc5, - 0x17, 0xd6, 0x26, 0x8d, 0x9b, 0x4c, 0x9a, 0xd6, 0x9d, 0x24, 0xed, 0xfe, 0xdc, 0x34, 0xcd, 0x6f, - 0x5b, 0xa2, 0x34, 0x6a, 0xd7, 0x4d, 0x0a, 0xa2, 0x2a, 0x02, 0xc9, 0x4d, 0x4a, 0x6b, 0x11, 0x91, - 0xb2, 0x6d, 0xa9, 0x84, 0x40, 0x68, 0xb2, 0x3e, 0xb1, 0xb7, 0xd9, 0xec, 0x4e, 0x67, 0xc6, 0x6e, - 0x4d, 0xd5, 0x1b, 0x84, 0x10, 0x12, 0xdc, 0x20, 0x04, 0xe2, 0x0e, 0x2e, 0x90, 0x90, 0xe0, 0x12, - 0x89, 0x67, 0xe0, 0x12, 0x89, 0x17, 0x40, 0x15, 0x0f, 0xc1, 0x25, 0x9a, 0x33, 0xeb, 0xf5, 0x3a, - 0xf1, 0x9f, 0x44, 0x4d, 0x73, 0x37, 0x73, 0xce, 0xec, 0xf9, 0xbe, 0xf3, 0xcd, 0x99, 0x33, 0x63, - 0x13, 0x47, 0x82, 0x68, 0x80, 0x28, 0x0a, 0xe0, 0xb1, 0x0c, 0x54, 0x2c, 0x9a, 0x99, 0xa1, 0xcb, - 0x45, 0xac, 0x62, 0x4a, 0xda, 0x96, 0xc2, 0x4c, 0x35, 0x8e, 0xab, 0x21, 0x14, 0x19, 0x0f, 0x8a, - 0x2c, 0x8a, 0x62, 0xc5, 0x54, 0x10, 0x47, 0xd2, 0xac, 0x2c, 0xac, 0x55, 0x03, 0x55, 0xab, 0x6f, - 0xb8, 0x7e, 0xbc, 0x5d, 0x64, 0xa2, 0x1a, 0x73, 0x11, 0x3f, 0xc4, 0xc1, 0x65, 0xbf, 0x52, 0x6c, - 0x5c, 0x2d, 0xf2, 0xad, 0xaa, 0xfe, 0x52, 0x16, 0x19, 0xe7, 0x61, 0xe0, 0xe3, 0xb7, 0xc5, 0xc6, - 0x12, 0x0b, 0x79, 0x8d, 0x2d, 0x15, 0xab, 0x10, 0x81, 0x60, 0x0a, 0x2a, 0x49, 0xb4, 0x9b, 0x03, - 0xa2, 0x21, 0xad, 0x81, 0xf4, 0x9d, 0x26, 0x99, 0xf0, 0x80, 0xc7, 0x25, 0xce, 0xe5, 0x7b, 0x75, - 0x10, 0x4d, 0x4a, 0xc9, 0x11, 0xbd, 0xc8, 0xb6, 0xe6, 0xac, 0x85, 0x31, 0x0f, 0xc7, 0xb4, 0x40, - 0x46, 0x05, 0x34, 0x02, 0x19, 0xc4, 0x91, 0x3d, 0x84, 0xf6, 0x74, 0x4e, 0x6d, 0x72, 0x94, 0x71, - 0xfe, 0x2e, 0xdb, 0x06, 0x7b, 0x18, 0x5d, 0xad, 0x29, 0x9d, 0x25, 0x84, 0x71, 0x7e, 0x47, 0xc4, - 0x0f, 0xc1, 0x57, 0xf6, 0x11, 0x74, 0x66, 0x2c, 0xce, 0x12, 0x39, 0x5a, 0xe2, 0xbc, 0x1c, 0x6d, - 0xc6, 0x1a, 0x54, 0x35, 0x39, 0xb4, 0x40, 0xf5, 0x58, 0xdb, 0x38, 0x53, 0xb5, 0x04, 0x10, 0xc7, - 0xce, 0xbf, 0x16, 0x99, 0x4c, 0xe8, 0xae, 0x82, 0x62, 0x41, 0x98, 0x90, 0xae, 0x92, 0x9c, 0x8c, - 0xeb, 0xc2, 0x37, 0x11, 0xc6, 0x97, 0xd7, 0xdd, 0xb6, 0x3a, 0x6e, 0x4b, 0x1d, 0x1c, 0x7c, 0xec, - 0x57, 0xdc, 0xc6, 0x55, 0x97, 0x6f, 0x55, 0x5d, 0xad, 0xb5, 0x9b, 0xd1, 0xda, 0x6d, 0x69, 0xed, - 0x96, 0xda, 0xc6, 0xbb, 0x18, 0xd6, 0x4b, 0xc2, 0x67, 0xb3, 0x1d, 0xea, 0x97, 0xed, 0xf0, 0xce, - 0x6c, 0xe9, 0x1c, 0x19, 0x37, 0x31, 0xca, 0x51, 0x05, 0x9e, 0xa0, 0x1c, 0x23, 0x5e, 0xd6, 0x44, - 0x67, 0xc8, 0x58, 0x03, 0x84, 0x16, 0xb5, 0x5c, 0xb1, 0x47, 0xd0, 0xdf, 0x36, 0x38, 0x6f, 0x92, - 0x7c, 0x6b, 0xa3, 0x3c, 0x90, 0x3c, 0x8e, 0x24, 0xd0, 0x8b, 0x64, 0x24, 0x50, 0xb0, 0x2d, 0x6d, - 0x6b, 0x6e, 0x78, 0x61, 0x7c, 0x79, 0xd2, 0xcd, 0x6c, 0x6f, 0x22, 0xad, 0x67, 0x56, 0x38, 0x3e, - 0x19, 0xd3, 0x9f, 0xf7, 0xde, 0x63, 0x87, 0x1c, 0xdb, 0x8c, 0x75, 0xaa, 0xb0, 0x29, 0x40, 0x1a, - 0xd9, 0x47, 0xbd, 0x0e, 0xdb, 0xa0, 0x1c, 0x9d, 0xdf, 0x72, 0xe4, 0x04, 0x92, 0xf4, 0x7d, 0x90, - 0xfd, 0xeb, 0xa9, 0x2e, 0x41, 0x44, 0x6d, 0x19, 0xd3, 0xb9, 0xf6, 0x71, 0x26, 0xe5, 0xe3, 0x58, - 0x54, 0x12, 0x84, 0x74, 0x4e, 0x2f, 0x90, 0x09, 0x29, 0x6b, 0x77, 0x44, 0xd0, 0x60, 0x0a, 0xde, - 0x81, 0x66, 0x52, 0x54, 0x9d, 0x46, 0x1d, 0x21, 0x88, 0x24, 0xf8, 0x75, 0x01, 0x28, 0xe3, 0xa8, - 0x97, 0xce, 0xe9, 0x25, 0x72, 0x52, 0x85, 0x72, 0x25, 0x0c, 0x20, 0x52, 0x2b, 0x20, 0xd4, 0x2a, - 0x53, 0xcc, 0xce, 0x61, 0x94, 0xdd, 0x0e, 0xba, 0x48, 0xf2, 0x1d, 0x46, 0x0d, 0x79, 0x14, 0x17, - 0xef, 0xb2, 0xa7, 0x25, 0x3c, 0xd6, 0x59, 0xc2, 0x98, 0x23, 0x31, 0x36, 0xcc, 0x6f, 0x86, 0x8c, - 0x41, 0xc4, 0x36, 0x42, 0x58, 0xf7, 0x03, 0x7b, 0x1c, 0xe9, 0xb5, 0x0d, 0xf4, 0x0a, 0x99, 0x34, - 0x95, 0x5b, 0xd2, 0xaa, 0xa6, 0x79, 0x1e, 0xc3, 0x00, 0xdd, 0x5c, 0xba, 0xae, 0x52, 0x73, 0x79, - 0xd5, 0x9e, 0x98, 0xb3, 0x16, 0x86, 0xbd, 0xac, 0x89, 0x5e, 0x23, 0xa7, 0xdb, 0xd3, 0x48, 0x2a, - 0x16, 0x86, 0x58, 0xda, 0xe5, 0x55, 0xfb, 0x38, 0xae, 0xee, 0xe5, 0xa6, 0x6f, 0x91, 0x42, 0xea, - 0xba, 0x19, 0x29, 0x10, 0x5c, 0x04, 0x12, 0x6e, 0x30, 0x09, 0xf7, 0x45, 0x68, 0x9f, 0x40, 0x52, - 0x7d, 0x56, 0xd0, 0x29, 0x32, 0xc2, 0x45, 0xfc, 0xa4, 0x69, 0xe7, 0x71, 0xa9, 0x99, 0xe8, 0x33, - 0xc4, 0x93, 0x12, 0x3a, 0x69, 0xce, 0x50, 0x32, 0xa5, 0xcb, 0x64, 0xaa, 0xea, 0xf3, 0xbb, 0x20, - 0x1a, 0x81, 0x0f, 0x25, 0xdf, 0x8f, 0xeb, 0x11, 0x6a, 0x4e, 0x71, 0x59, 0x57, 0x1f, 0x75, 0x09, - 0xc5, 0x1a, 0xbd, 0xad, 0x14, 0xbf, 0xc1, 0x64, 0xe0, 0x97, 0xea, 0xaa, 0x66, 0x4f, 0xa2, 0xb0, - 0x5d, 0x3c, 0xf4, 0x3a, 0xb1, 0xeb, 0x12, 0x4a, 0x9f, 0xd4, 0x05, 0x3c, 0x88, 0xc5, 0x56, 0x18, - 0xb3, 0x4a, 0xb9, 0x02, 0x91, 0x0a, 0x54, 0xd3, 0x9e, 0xc2, 0xaf, 0x7a, 0xfa, 0xb5, 0xd6, 0x1b, - 0xc0, 0x04, 0x88, 0x7b, 0xf1, 0x16, 0x44, 0xf6, 0x34, 0xd2, 0xca, 0x9a, 0x74, 0x06, 0xad, 0x5a, - 0x5b, 0xf7, 0x83, 0xb7, 0x5b, 0xf0, 0xf6, 0x29, 0x8c, 0xdc, 0xd5, 0xe7, 0x1c, 0x27, 0xc7, 0xf4, - 0xa1, 0x69, 0x9d, 0x6a, 0xe7, 0x67, 0x8b, 0x9c, 0xd4, 0x86, 0x15, 0x01, 0x4c, 0x81, 0x07, 0x8f, - 0xea, 0x20, 0x15, 0xfd, 0x30, 0x73, 0x8e, 0xc6, 0x97, 0x6f, 0xbf, 0x58, 0x83, 0xf3, 0xd2, 0x3e, - 0x91, 0x9c, 0xc8, 0x53, 0x24, 0x57, 0xe7, 0x12, 0x84, 0x4a, 0xce, 0x7d, 0x32, 0xd3, 0xd5, 0xea, - 0x0b, 0xa8, 0xc8, 0xf5, 0x28, 0x6c, 0xe2, 0x71, 0x1c, 0xf5, 0xda, 0x06, 0xe7, 0x91, 0x21, 0x7a, - 0x9f, 0x57, 0x0e, 0x8b, 0xe8, 0xf2, 0x67, 0xa7, 0x0d, 0xa6, 0x31, 0x26, 0xe5, 0x40, 0xbf, 0xb2, - 0xc8, 0x91, 0xb5, 0x40, 0x2a, 0x3a, 0x9d, 0x6d, 0x81, 0x69, 0xc3, 0x2b, 0xac, 0x1d, 0x14, 0x0b, - 0x0d, 0xe2, 0x9c, 0xfb, 0xf4, 0xaf, 0x7f, 0xbe, 0x19, 0x3a, 0x45, 0xa7, 0xf0, 0xa2, 0x6f, 0x2c, - 0xb5, 0x6f, 0xd5, 0x00, 0xe4, 0x17, 0x43, 0x16, 0xfd, 0xd2, 0x22, 0xc3, 0xb7, 0xa0, 0x27, 0x9b, - 0x03, 0xd3, 0xc4, 0x39, 0x8f, 0x4c, 0xce, 0xd2, 0x33, 0xdd, 0x98, 0x14, 0x9f, 0xea, 0xd9, 0x33, - 0xfa, 0x9d, 0x45, 0x46, 0x6f, 0x81, 0x7a, 0x20, 0x02, 0x05, 0x2f, 0x9f, 0xd2, 0x45, 0xa4, 0x74, - 0x9e, 0xfe, 0xbf, 0x45, 0xe9, 0xb1, 0xc6, 0xbd, 0xdc, 0x8d, 0xd8, 0xb7, 0x16, 0xc9, 0x6b, 0x41, - 0xbd, 0x8c, 0xef, 0x70, 0x76, 0x70, 0xa6, 0xdf, 0x0e, 0xd2, 0x1f, 0x2d, 0x32, 0xad, 0x97, 0xa1, - 0x62, 0x87, 0x4f, 0xce, 0x41, 0x72, 0x33, 0xb4, 0xd0, 0x5b, 0x41, 0xfa, 0x11, 0x19, 0x35, 0xca, - 0x6d, 0xf6, 0x24, 0x95, 0xef, 0x34, 0x6f, 0x4a, 0x67, 0x01, 0x03, 0x3b, 0x74, 0xae, 0x4f, 0xb5, - 0x14, 0x85, 0x0e, 0x59, 0x21, 0xe3, 0x3a, 0xfc, 0xfa, 0x4a, 0xf9, 0x1e, 0xab, 0xee, 0x03, 0xe1, - 0x12, 0x22, 0xcc, 0xd3, 0x0b, 0xfd, 0x10, 0x62, 0x3f, 0xb8, 0xac, 0x74, 0xd8, 0x6d, 0x93, 0x84, - 0x7e, 0xd2, 0xd0, 0xff, 0xed, 0x84, 0x48, 0x5f, 0xa4, 0x85, 0x99, 0x6e, 0xae, 0xb4, 0x5b, 0xee, - 0x29, 0x29, 0xa6, 0x21, 0xbe, 0xb6, 0xc8, 0xc4, 0x2d, 0x50, 0xed, 0xb7, 0x23, 0x3d, 0xd7, 0x25, - 0x72, 0xf6, 0x5d, 0x59, 0x70, 0x7a, 0x2f, 0x48, 0x09, 0xbc, 0x81, 0x04, 0x5e, 0x73, 0xae, 0x74, - 0x27, 0x60, 0x5e, 0x78, 0x18, 0xe7, 0xbe, 0xb7, 0x86, 0x54, 0x2a, 0x26, 0xc2, 0x75, 0x6b, 0x91, - 0x36, 0x90, 0xd2, 0x6d, 0x08, 0xb7, 0x57, 0x6a, 0x4c, 0xa8, 0x9e, 0x52, 0xcf, 0x66, 0xcd, 0xed, - 0xe5, 0x29, 0x09, 0x17, 0x49, 0x2c, 0xd0, 0xf9, 0x7e, 0x2a, 0xd4, 0x20, 0xdc, 0xf6, 0x0d, 0xcc, - 0xf7, 0x16, 0xc9, 0x99, 0xfb, 0x85, 0x9e, 0xdd, 0x89, 0xd8, 0x71, 0xef, 0x1c, 0x60, 0x67, 0x78, - 0xc5, 0xd4, 0xb5, 0xd3, 0xf5, 0xd0, 0x5d, 0xc7, 0xf6, 0xae, 0x9b, 0xe7, 0x0f, 0x16, 0xc9, 0xb7, - 0x28, 0xb4, 0xbe, 0x3d, 0x3c, 0x92, 0xce, 0x60, 0x92, 0xf4, 0x17, 0x8b, 0x4c, 0x1b, 0xfc, 0xce, - 0x0e, 0x71, 0x88, 0x34, 0x93, 0xaa, 0x77, 0xfa, 0xf4, 0x88, 0x84, 0xec, 0x4f, 0x16, 0xc9, 0x99, - 0x0b, 0x7a, 0x37, 0xbb, 0x8e, 0x8b, 0xfb, 0x00, 0xd9, 0x2d, 0x99, 0x6a, 0x2c, 0xf4, 0x39, 0x93, - 0x48, 0xe5, 0x59, 0x7b, 0xd7, 0x7f, 0xb5, 0x48, 0xbe, 0x45, 0xa7, 0xb7, 0x9c, 0x2f, 0x8b, 0xb0, - 0xbb, 0x3f, 0xc2, 0xf4, 0x77, 0x8b, 0x4c, 0x1b, 0x2e, 0x03, 0x2b, 0xe0, 0x65, 0x51, 0x7e, 0x15, - 0x29, 0xbb, 0x85, 0xf9, 0x41, 0xf7, 0x6c, 0x07, 0x71, 0x46, 0x72, 0xab, 0x10, 0x42, 0xef, 0x87, - 0x80, 0xbd, 0xd3, 0x9c, 0xb6, 0x98, 0x79, 0xf3, 0xd6, 0x58, 0xec, 0xf7, 0xd6, 0xd0, 0x3b, 0x59, - 0x23, 0x79, 0x03, 0x91, 0x51, 0x65, 0xdf, 0x60, 0xe7, 0xf7, 0x00, 0x46, 0x25, 0x99, 0x36, 0x48, - 0x3b, 0x37, 0x61, 0xdf, 0x70, 0xc9, 0xa3, 0x65, 0x71, 0x0f, 0x8f, 0x96, 0xa7, 0xe4, 0xf8, 0xfb, - 0x2c, 0x0c, 0xf4, 0xa6, 0x9a, 0x9f, 0xb9, 0xf4, 0xcc, 0xae, 0x4b, 0xa2, 0xfd, 0xf3, 0xb7, 0x0f, - 0xe6, 0x32, 0x62, 0x5e, 0x72, 0xfa, 0xde, 0x95, 0x8d, 0x04, 0x2a, 0xd9, 0xbe, 0xcf, 0x2d, 0x32, - 0xd9, 0x42, 0xc7, 0xa4, 0x5f, 0x8c, 0xc2, 0x35, 0xa4, 0xb0, 0xec, 0x2c, 0x0e, 0x4c, 0x7b, 0x07, - 0x91, 0x1b, 0x37, 0xff, 0x78, 0x3e, 0x6b, 0xfd, 0xf9, 0x7c, 0xd6, 0xfa, 0xfb, 0xf9, 0xac, 0xf5, - 0xc1, 0xeb, 0x7b, 0xfb, 0x67, 0xcb, 0xc7, 0x1f, 0xcc, 0x99, 0xff, 0xa0, 0x36, 0x72, 0xf8, 0x27, - 0xd4, 0xd5, 0xff, 0x02, 0x00, 0x00, 0xff, 0xff, 0xbc, 0x0b, 0xd2, 0x3f, 0x69, 0x13, 0x00, 0x00, + // 1471 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0x5f, 0x6f, 0x13, 0xc7, + 0x16, 0xd7, 0x26, 0x24, 0x24, 0x13, 0x02, 0x66, 0x92, 0xc0, 0x62, 0x42, 0x08, 0x0b, 0x37, 0x0a, + 0x11, 0xac, 0x49, 0xb8, 0x57, 0x17, 0x71, 0x75, 0x2b, 0x39, 0x7f, 0x0a, 0x56, 0xa3, 0x86, 0x1a, + 0x28, 0x52, 0xd5, 0xaa, 0x9a, 0xac, 0x4f, 0xec, 0x25, 0x9b, 0xdd, 0x61, 0x66, 0x6c, 0x70, 0x11, + 0x2f, 0x55, 0x55, 0x55, 0x6a, 0x5f, 0xaa, 0xaa, 0x55, 0xdf, 0xda, 0x87, 0x4a, 0x95, 0xda, 0xf7, + 0x7e, 0x86, 0x3e, 0xb6, 0xea, 0x17, 0xa8, 0x50, 0x3f, 0x44, 0x1f, 0xab, 0x39, 0xb3, 0x5e, 0xaf, + 0x13, 0x7b, 0x9d, 0x88, 0x90, 0xb7, 0x9d, 0x73, 0x8e, 0xcf, 0xef, 0x77, 0x7e, 0x73, 0xf6, 0xcc, + 0x78, 0x89, 0x23, 0x41, 0x34, 0x40, 0x14, 0x04, 0xf0, 0x48, 0xfa, 0x2a, 0x12, 0xcd, 0xd4, 0xa3, + 0xcb, 0x45, 0xa4, 0x22, 0x4a, 0xda, 0x96, 0xfc, 0x74, 0x35, 0x8a, 0xaa, 0x01, 0x14, 0x18, 0xf7, + 0x0b, 0x2c, 0x0c, 0x23, 0xc5, 0x94, 0x1f, 0x85, 0xd2, 0x44, 0xe6, 0xd7, 0xab, 0xbe, 0xaa, 0xd5, + 0x37, 0x5d, 0x2f, 0xda, 0x29, 0x30, 0x51, 0x8d, 0xb8, 0x88, 0x1e, 0xe3, 0xc3, 0x75, 0xaf, 0x52, + 0x68, 0xdc, 0x2c, 0xf0, 0xed, 0xaa, 0xfe, 0xa5, 0x2c, 0x30, 0xce, 0x03, 0xdf, 0xc3, 0xdf, 0x16, + 0x1a, 0x8b, 0x2c, 0xe0, 0x35, 0xb6, 0x58, 0xa8, 0x42, 0x08, 0x82, 0x29, 0xa8, 0xc4, 0xd9, 0xd6, + 0xfa, 0x64, 0x43, 0x5a, 0x7d, 0xe9, 0x3b, 0x4d, 0x32, 0x5e, 0x06, 0x1e, 0x15, 0x39, 0x97, 0xef, + 0xd4, 0x41, 0x34, 0x29, 0x25, 0xc7, 0x74, 0x90, 0x6d, 0xcd, 0x5a, 0xf3, 0xa3, 0x65, 0x7c, 0xa6, + 0x79, 0x32, 0x22, 0xa0, 0xe1, 0x4b, 0x3f, 0x0a, 0xed, 0x01, 0xb4, 0x27, 0x6b, 0x6a, 0x93, 0xe3, + 0x8c, 0xf3, 0xb7, 0xd9, 0x0e, 0xd8, 0x83, 0xe8, 0x6a, 0x2d, 0xe9, 0x0c, 0x21, 0x8c, 0xf3, 0x7b, + 0x22, 0x7a, 0x0c, 0x9e, 0xb2, 0x8f, 0xa1, 0x33, 0x65, 0x71, 0x16, 0xc9, 0xf1, 0x22, 0xe7, 0xa5, + 0x70, 0x2b, 0xd2, 0xa0, 0xaa, 0xc9, 0xa1, 0x05, 0xaa, 0x9f, 0xb5, 0x8d, 0x33, 0x55, 0x8b, 0x01, + 0xf1, 0xd9, 0xf9, 0xdb, 0x22, 0x13, 0x31, 0xdd, 0x55, 0x50, 0xcc, 0x0f, 0x62, 0xd2, 0x55, 0x32, + 0x2c, 0xa3, 0xba, 0xf0, 0x4c, 0x86, 0xb1, 0xa5, 0x0d, 0xb7, 0xad, 0x8e, 0xdb, 0x52, 0x07, 0x1f, + 0x3e, 0xf4, 0x2a, 0x6e, 0xe3, 0xa6, 0xcb, 0xb7, 0xab, 0xae, 0xd6, 0xda, 0x4d, 0x69, 0xed, 0xb6, + 0xb4, 0x76, 0x8b, 0x6d, 0xe3, 0x7d, 0x4c, 0x5b, 0x8e, 0xd3, 0xa7, 0xab, 0x1d, 0xc8, 0xaa, 0x76, + 0x70, 0x77, 0xb5, 0x74, 0x96, 0x8c, 0x99, 0x1c, 0xa5, 0xb0, 0x02, 0xcf, 0x50, 0x8e, 0xa1, 0x72, + 0xda, 0x44, 0xa7, 0xc9, 0x68, 0x03, 0x84, 0x16, 0xb5, 0x54, 0xb1, 0x87, 0xd0, 0xdf, 0x36, 0x38, + 0xff, 0x27, 0xb9, 0xd6, 0x46, 0x95, 0x41, 0xf2, 0x28, 0x94, 0x40, 0xaf, 0x92, 0x21, 0x5f, 0xc1, + 0x8e, 0xb4, 0xad, 0xd9, 0xc1, 0xf9, 0xb1, 0xa5, 0x09, 0x37, 0xb5, 0xbd, 0xb1, 0xb4, 0x65, 0x13, + 0xe1, 0x78, 0x64, 0x54, 0xff, 0xbc, 0xf7, 0x1e, 0x3b, 0xe4, 0xc4, 0x56, 0xa4, 0x4b, 0x85, 0x2d, + 0x01, 0xd2, 0xc8, 0x3e, 0x52, 0xee, 0xb0, 0xf5, 0xab, 0xd1, 0xf9, 0x7d, 0x84, 0x9c, 0x42, 0x92, + 0x9e, 0x07, 0x32, 0xbb, 0x9f, 0xea, 0x12, 0x44, 0xd8, 0x96, 0x31, 0x59, 0x6b, 0x1f, 0x67, 0x52, + 0x3e, 0x8d, 0x44, 0x25, 0x46, 0x48, 0xd6, 0xf4, 0x0a, 0x19, 0x97, 0xb2, 0x76, 0x4f, 0xf8, 0x0d, + 0xa6, 0xe0, 0x2d, 0x68, 0xc6, 0x4d, 0xd5, 0x69, 0xd4, 0x19, 0xfc, 0x50, 0x82, 0x57, 0x17, 0x80, + 0x32, 0x8e, 0x94, 0x93, 0x35, 0xbd, 0x46, 0x4e, 0xab, 0x40, 0xae, 0x04, 0x3e, 0x84, 0x6a, 0x05, + 0x84, 0x5a, 0x65, 0x8a, 0xd9, 0xc3, 0x98, 0x65, 0xaf, 0x83, 0x2e, 0x90, 0x5c, 0x87, 0x51, 0x43, + 0x1e, 0xc7, 0xe0, 0x3d, 0xf6, 0xa4, 0x85, 0x47, 0x3b, 0x5b, 0x18, 0x6b, 0x24, 0xc6, 0x86, 0xf5, + 0x4d, 0x93, 0x51, 0x08, 0xd9, 0x66, 0x00, 0x1b, 0x9e, 0x6f, 0x8f, 0x21, 0xbd, 0xb6, 0x81, 0xde, + 0x20, 0x13, 0xa6, 0x73, 0x8b, 0x5a, 0xd5, 0xa4, 0xce, 0x13, 0x98, 0xa0, 0x9b, 0x4b, 0xf7, 0x55, + 0x62, 0x2e, 0xad, 0xda, 0xe3, 0xb3, 0xd6, 0xfc, 0x60, 0x39, 0x6d, 0xa2, 0xb7, 0xc8, 0xd9, 0xf6, + 0x32, 0x94, 0x8a, 0x05, 0x01, 0xb6, 0x76, 0x69, 0xd5, 0x3e, 0x89, 0xd1, 0xbd, 0xdc, 0xf4, 0x0d, + 0x92, 0x4f, 0x5c, 0x6b, 0xa1, 0x02, 0xc1, 0x85, 0x2f, 0x61, 0x99, 0x49, 0x78, 0x28, 0x02, 0xfb, + 0x14, 0x92, 0xca, 0x88, 0xa0, 0x93, 0x64, 0x88, 0x8b, 0xe8, 0x59, 0xd3, 0xce, 0x61, 0xa8, 0x59, + 0xe8, 0x77, 0x88, 0xc7, 0x2d, 0x74, 0xda, 0xbc, 0x43, 0xf1, 0x92, 0x2e, 0x91, 0xc9, 0xaa, 0xc7, + 0xef, 0x83, 0x68, 0xf8, 0x1e, 0x14, 0x3d, 0x2f, 0xaa, 0x87, 0xa8, 0x39, 0xc5, 0xb0, 0xae, 0x3e, + 0xea, 0x12, 0x8a, 0x3d, 0x7a, 0x57, 0x29, 0xbe, 0xcc, 0xa4, 0xef, 0x15, 0xeb, 0xaa, 0x66, 0x4f, + 0xa0, 0xb0, 0x5d, 0x3c, 0xf4, 0x36, 0xb1, 0xeb, 0x12, 0x8a, 0x1f, 0xd5, 0x05, 0x3c, 0x8a, 0xc4, + 0x76, 0x10, 0xb1, 0x4a, 0xa9, 0x02, 0xa1, 0xf2, 0x55, 0xd3, 0x9e, 0xc4, 0x5f, 0xf5, 0xf4, 0x6b, + 0xad, 0x37, 0x81, 0x09, 0x10, 0x0f, 0xa2, 0x6d, 0x08, 0xed, 0x29, 0xa4, 0x95, 0x36, 0xe9, 0x0a, + 0x5a, 0xbd, 0xb6, 0xe1, 0xf9, 0x6f, 0xb6, 0xe0, 0xed, 0x33, 0x98, 0xb9, 0xab, 0x8f, 0xae, 0x92, + 0x0b, 0x4c, 0xc3, 0xc5, 0xb5, 0xdd, 0x13, 0x7e, 0xe8, 0xf9, 0x9c, 0x05, 0xa6, 0xbf, 0x4a, 0x15, + 0xfb, 0x2c, 0xe2, 0x64, 0x07, 0xd1, 0x75, 0x72, 0x29, 0x23, 0xe0, 0x3e, 0x78, 0x02, 0x94, 0x6d, + 0x63, 0xa6, 0xfe, 0x81, 0x3d, 0x39, 0x3d, 0x80, 0x90, 0x21, 0xa7, 0x73, 0x19, 0x9c, 0x5a, 0x41, + 0x74, 0x99, 0x4c, 0x63, 0x40, 0xd1, 0x53, 0x7e, 0x03, 0x56, 0x7d, 0x01, 0x9e, 0x9e, 0x4d, 0x6b, + 0x61, 0x85, 0x47, 0x7e, 0xa8, 0xec, 0x3c, 0x26, 0xc9, 0x8c, 0x71, 0x4e, 0x92, 0x13, 0x7a, 0xa4, + 0xb4, 0x66, 0x9e, 0xf3, 0xa3, 0x45, 0x4e, 0x6b, 0xc3, 0x8a, 0x00, 0xa6, 0xa0, 0x0c, 0x4f, 0xea, + 0x20, 0x15, 0x7d, 0x3f, 0x35, 0x65, 0xc6, 0x96, 0xee, 0xbe, 0xda, 0xf8, 0x2f, 0x27, 0x53, 0x34, + 0x9e, 0x57, 0x67, 0xc8, 0x70, 0x9d, 0x4b, 0x10, 0x2a, 0x9e, 0x8a, 0xf1, 0x4a, 0xbf, 0xcb, 0x9e, + 0x80, 0x8a, 0xdc, 0x08, 0x83, 0x26, 0x0e, 0xab, 0x91, 0x72, 0xdb, 0xe0, 0x3c, 0x31, 0x44, 0x1f, + 0xf2, 0xca, 0x51, 0x11, 0x5d, 0xfa, 0xe4, 0xac, 0xc1, 0x34, 0xc6, 0x78, 0x5f, 0xe8, 0x17, 0x16, + 0x39, 0xb6, 0xee, 0x4b, 0x45, 0xa7, 0xd2, 0x07, 0x44, 0x72, 0x1c, 0xe4, 0xd7, 0x0f, 0x8b, 0x85, + 0x06, 0x71, 0x2e, 0x7e, 0xfc, 0xc7, 0x5f, 0x5f, 0x0d, 0x9c, 0xa1, 0x93, 0x78, 0x0d, 0x6a, 0x2c, + 0xb6, 0xef, 0x1c, 0x3e, 0xc8, 0xcf, 0x06, 0x2c, 0xfa, 0xb9, 0x45, 0x06, 0xef, 0x40, 0x4f, 0x36, + 0x87, 0xa6, 0x89, 0x73, 0x19, 0x99, 0x5c, 0xa0, 0xe7, 0xbb, 0x31, 0x29, 0x3c, 0xd7, 0xab, 0x17, + 0xf4, 0x1b, 0x8b, 0x8c, 0xdc, 0x01, 0xf5, 0x48, 0xf8, 0x0a, 0x5e, 0x3f, 0xa5, 0xab, 0x48, 0xe9, + 0x32, 0xbd, 0xd4, 0xa2, 0xf4, 0x54, 0xe3, 0x5e, 0xef, 0x46, 0xec, 0x6b, 0x8b, 0xe4, 0xb4, 0xa0, + 0xe5, 0x94, 0xef, 0x68, 0x76, 0x70, 0x3a, 0x6b, 0x07, 0xe9, 0xf7, 0x16, 0x99, 0xd2, 0x61, 0xa8, + 0xd8, 0xd1, 0x93, 0x73, 0x90, 0xdc, 0x34, 0xcd, 0xf7, 0x56, 0x90, 0x7e, 0x40, 0x46, 0x8c, 0x72, + 0x5b, 0x3d, 0x49, 0xe5, 0x3a, 0xcd, 0x5b, 0xd2, 0x99, 0xc7, 0xc4, 0x0e, 0x9d, 0xcd, 0xe8, 0x96, + 0x82, 0xd0, 0x29, 0x2b, 0x64, 0x4c, 0xa7, 0xdf, 0x58, 0x29, 0x3d, 0x60, 0xd5, 0x03, 0x20, 0x5c, + 0x43, 0x84, 0x39, 0x7a, 0x25, 0x0b, 0x21, 0xf2, 0xfc, 0xeb, 0x4a, 0xa7, 0xdd, 0x31, 0x45, 0xe8, + 0x0b, 0x1f, 0x3d, 0xb7, 0x1b, 0x22, 0xb9, 0xaf, 0xe7, 0xa7, 0xbb, 0xb9, 0x92, 0x69, 0xb9, 0xaf, + 0xa2, 0x98, 0x86, 0xf8, 0xd2, 0x22, 0xe3, 0x77, 0x40, 0xb5, 0x6f, 0xd6, 0xf4, 0x62, 0x97, 0xcc, + 0xe9, 0x5b, 0x77, 0xde, 0xe9, 0x1d, 0x90, 0x10, 0xf8, 0x1f, 0x12, 0xf8, 0x8f, 0x73, 0xa3, 0x3b, + 0x01, 0x73, 0xff, 0xc5, 0x3c, 0x0f, 0xcb, 0xeb, 0x48, 0xa5, 0x62, 0x32, 0xdc, 0xb6, 0x16, 0x68, + 0x03, 0x29, 0xdd, 0x85, 0x60, 0x67, 0xa5, 0xc6, 0x84, 0xea, 0x29, 0xf5, 0x4c, 0xda, 0xdc, 0x0e, + 0x4f, 0x48, 0xb8, 0x48, 0x62, 0x9e, 0xce, 0x65, 0xa9, 0x50, 0x83, 0x60, 0xc7, 0x33, 0x30, 0xdf, + 0x5a, 0x64, 0xd8, 0x9c, 0x2f, 0xf4, 0xc2, 0x6e, 0xc4, 0x8e, 0x73, 0xe7, 0x10, 0x27, 0xc3, 0xbf, + 0x4c, 0x5f, 0x3b, 0x5d, 0x5f, 0xba, 0xdb, 0x38, 0xde, 0xf5, 0xf0, 0xfc, 0xce, 0x22, 0xb9, 0x16, + 0x85, 0xd6, 0x6f, 0x8f, 0x8e, 0xa4, 0xd3, 0x9f, 0x24, 0xfd, 0xc9, 0x22, 0x53, 0x06, 0xbf, 0x73, + 0x42, 0x1c, 0x21, 0xcd, 0xb8, 0xeb, 0x9d, 0x8c, 0x19, 0x11, 0x93, 0xfd, 0xc1, 0x22, 0xc3, 0xe6, + 0x80, 0xde, 0xcb, 0xae, 0xe3, 0xe0, 0x3e, 0x44, 0x76, 0x8b, 0xa6, 0x1b, 0xf3, 0x19, 0xef, 0x24, + 0x52, 0x79, 0xd1, 0xde, 0xf5, 0x9f, 0x2d, 0x92, 0x6b, 0xd1, 0xe9, 0x2d, 0xe7, 0xeb, 0x22, 0xec, + 0x1e, 0x8c, 0x30, 0xfd, 0xc5, 0x22, 0x53, 0x86, 0x4b, 0xdf, 0x0e, 0x78, 0x5d, 0x94, 0xff, 0x8d, + 0x94, 0xdd, 0xfc, 0x5c, 0xbf, 0x73, 0xb6, 0x83, 0x38, 0x23, 0xc3, 0xab, 0x10, 0x40, 0xef, 0x8b, + 0x80, 0xbd, 0xdb, 0x9c, 0x8c, 0x98, 0x39, 0x73, 0xd7, 0x58, 0xc8, 0xba, 0x6b, 0xe8, 0x9d, 0xac, + 0x91, 0x9c, 0x81, 0x48, 0xa9, 0x72, 0x60, 0xb0, 0xcb, 0xfb, 0x00, 0xa3, 0x92, 0x4c, 0x19, 0xa4, + 0xdd, 0x9b, 0x70, 0x60, 0xb8, 0xf8, 0xd2, 0xb2, 0xb0, 0x8f, 0x4b, 0xcb, 0x73, 0x72, 0xf2, 0x5d, + 0x16, 0xf8, 0x7a, 0x53, 0xcd, 0x47, 0x00, 0x7a, 0x7e, 0xcf, 0x21, 0xd1, 0xfe, 0x38, 0x90, 0x81, + 0xb9, 0x84, 0x98, 0xd7, 0x9c, 0xcc, 0xb3, 0xb2, 0x11, 0x43, 0xc5, 0xdb, 0xf7, 0xa9, 0x45, 0x26, + 0x5a, 0xe8, 0x58, 0xf4, 0xab, 0x51, 0xb8, 0x85, 0x14, 0x96, 0x9c, 0x85, 0xbe, 0x65, 0xef, 0x22, + 0xb2, 0xbc, 0xf6, 0xeb, 0xcb, 0x19, 0xeb, 0xb7, 0x97, 0x33, 0xd6, 0x9f, 0x2f, 0x67, 0xac, 0xf7, + 0xfe, 0xbb, 0xbf, 0xef, 0x7e, 0x1e, 0xfe, 0xff, 0x4a, 0x7d, 0xa1, 0xdb, 0x1c, 0xc6, 0x4f, 0x74, + 0x37, 0xff, 0x09, 0x00, 0x00, 0xff, 0xff, 0xff, 0x54, 0xba, 0x9b, 0x87, 0x14, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -1964,6 +2005,42 @@ func (m *RepoAccessQuery) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if len(m.AzureActiveDirectoryEndpoint) > 0 { + i -= len(m.AzureActiveDirectoryEndpoint) + copy(dAtA[i:], m.AzureActiveDirectoryEndpoint) + i = encodeVarintRepository(dAtA, i, uint64(len(m.AzureActiveDirectoryEndpoint))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xd2 + } + if len(m.AzureServicePrincipalTenantId) > 0 { + i -= len(m.AzureServicePrincipalTenantId) + copy(dAtA[i:], m.AzureServicePrincipalTenantId) + i = encodeVarintRepository(dAtA, i, uint64(len(m.AzureServicePrincipalTenantId))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xca + } + if len(m.AzureServicePrincipalClientSecret) > 0 { + i -= len(m.AzureServicePrincipalClientSecret) + copy(dAtA[i:], m.AzureServicePrincipalClientSecret) + i = encodeVarintRepository(dAtA, i, uint64(len(m.AzureServicePrincipalClientSecret))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xc2 + } + if len(m.AzureServicePrincipalClientId) > 0 { + i -= len(m.AzureServicePrincipalClientId) + copy(dAtA[i:], m.AzureServicePrincipalClientId) + i = encodeVarintRepository(dAtA, i, uint64(len(m.AzureServicePrincipalClientId))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xba + } if m.InsecureOciForceHttp { i-- if m.InsecureOciForceHttp { @@ -2477,6 +2554,22 @@ func (m *RepoAccessQuery) Size() (n int) { if m.InsecureOciForceHttp { n += 3 } + l = len(m.AzureServicePrincipalClientId) + if l > 0 { + n += 2 + l + sovRepository(uint64(l)) + } + l = len(m.AzureServicePrincipalClientSecret) + if l > 0 { + n += 2 + l + sovRepository(uint64(l)) + } + l = len(m.AzureServicePrincipalTenantId) + if l > 0 { + n += 2 + l + sovRepository(uint64(l)) + } + l = len(m.AzureActiveDirectoryEndpoint) + if l > 0 { + n += 2 + l + sovRepository(uint64(l)) + } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -3857,6 +3950,134 @@ func (m *RepoAccessQuery) Unmarshal(dAtA []byte) error { } } m.InsecureOciForceHttp = bool(v != 0) + case 23: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AzureServicePrincipalClientId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRepository + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRepository + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRepository + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AzureServicePrincipalClientId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 24: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AzureServicePrincipalClientSecret", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRepository + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRepository + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRepository + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AzureServicePrincipalClientSecret = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 25: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AzureServicePrincipalTenantId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRepository + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRepository + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRepository + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AzureServicePrincipalTenantId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 26: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AzureActiveDirectoryEndpoint", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowRepository + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthRepository + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthRepository + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AzureActiveDirectoryEndpoint = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipRepository(dAtA[iNdEx:]) diff --git a/pkg/apis/application/v1alpha1/generated.pb.go b/pkg/apis/application/v1alpha1/generated.pb.go index 644c1fb19a..f7430a79aa 100644 --- a/pkg/apis/application/v1alpha1/generated.pb.go +++ b/pkg/apis/application/v1alpha1/generated.pb.go @@ -4972,792 +4972,801 @@ func init() { } var fileDescriptor_c078c3c476799f44 = []byte{ - // 12552 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7d, 0x70, 0x64, 0xd9, - 0x55, 0x18, 0xee, 0xd7, 0xad, 0x96, 0xba, 0x8f, 0x3e, 0x66, 0x74, 0x67, 0x66, 0x57, 0x33, 0x3b, - 0xbb, 0x1a, 0xde, 0xc2, 0x7a, 0xf9, 0x79, 0xad, 0xc1, 0x63, 0xaf, 0xd9, 0x1f, 0x0b, 0x26, 0x6a, - 0x69, 0x3e, 0x34, 0x23, 0x8d, 0xe4, 0xdb, 0x9a, 0x19, 0x7f, 0xad, 0xed, 0xa7, 0xee, 0x2b, 0xe9, - 0x8d, 0x5e, 0xbf, 0xd7, 0xfb, 0xde, 0x6b, 0x8d, 0x7a, 0x31, 0xc6, 0xc6, 0x36, 0x18, 0x6c, 0xec, - 0x0d, 0xa4, 0x82, 0x49, 0x62, 0xc7, 0x04, 0xf2, 0x51, 0x95, 0xa2, 0x20, 0xf0, 0x07, 0x54, 0x80, - 0xa2, 0x02, 0x14, 0x05, 0x15, 0x12, 0x08, 0x45, 0x80, 0x04, 0x50, 0xec, 0x49, 0x52, 0x50, 0xa9, - 0x0a, 0x55, 0x24, 0xa9, 0x54, 0x6a, 0x92, 0x50, 0xa9, 0xfb, 0x7d, 0xdf, 0x47, 0x4b, 0xad, 0xd1, - 0x93, 0x66, 0x6c, 0xf6, 0xbf, 0xee, 0x7b, 0xce, 0x3b, 0xe7, 0xbe, 0xfb, 0xee, 0x3d, 0xe7, 0xdc, - 0x73, 0xcf, 0x39, 0x17, 0x16, 0x37, 0xdc, 0x78, 0xb3, 0xbb, 0x36, 0xd3, 0x0c, 0xda, 0x17, 0x9d, - 0x70, 0x23, 0xe8, 0x84, 0xc1, 0x5d, 0xf6, 0xe3, 0xad, 0xcd, 0xd6, 0xc5, 0xed, 0xb7, 0x5f, 0xec, - 0x6c, 0x6d, 0x5c, 0x74, 0x3a, 0x6e, 0x74, 0xd1, 0xe9, 0x74, 0x3c, 0xb7, 0xe9, 0xc4, 0x6e, 0xe0, - 0x5f, 0xdc, 0x7e, 0x9b, 0xe3, 0x75, 0x36, 0x9d, 0xb7, 0x5d, 0xdc, 0x20, 0x3e, 0x09, 0x9d, 0x98, - 0xb4, 0x66, 0x3a, 0x61, 0x10, 0x07, 0xe8, 0xdb, 0x35, 0xb5, 0x19, 0x49, 0x8d, 0xfd, 0xf8, 0x50, - 0xb3, 0x35, 0xb3, 0xfd, 0xf6, 0x99, 0xce, 0xd6, 0xc6, 0x0c, 0xa5, 0x36, 0x63, 0x50, 0x9b, 0x91, - 0xd4, 0xce, 0xbd, 0xd5, 0xe8, 0xcb, 0x46, 0xb0, 0x11, 0x5c, 0x64, 0x44, 0xd7, 0xba, 0xeb, 0xec, - 0x1f, 0xfb, 0xc3, 0x7e, 0x71, 0x66, 0xe7, 0xec, 0xad, 0x97, 0xa2, 0x19, 0x37, 0xa0, 0xdd, 0xbb, - 0xd8, 0x0c, 0x42, 0x72, 0x71, 0x3b, 0xd3, 0xa1, 0x73, 0xd7, 0x34, 0x0e, 0xd9, 0x89, 0x89, 0x1f, - 0xb9, 0x81, 0x1f, 0xbd, 0x95, 0x76, 0x81, 0x84, 0xdb, 0x24, 0x34, 0x5f, 0xcf, 0x40, 0xc8, 0xa3, - 0xf4, 0x0e, 0x4d, 0xa9, 0xed, 0x34, 0x37, 0x5d, 0x9f, 0x84, 0x3d, 0xfd, 0x78, 0x9b, 0xc4, 0x4e, - 0xde, 0x53, 0x17, 0xfb, 0x3d, 0x15, 0x76, 0xfd, 0xd8, 0x6d, 0x93, 0xcc, 0x03, 0xef, 0xdc, 0xef, - 0x81, 0xa8, 0xb9, 0x49, 0xda, 0x4e, 0xe6, 0xb9, 0xb7, 0xf7, 0x7b, 0xae, 0x1b, 0xbb, 0xde, 0x45, - 0xd7, 0x8f, 0xa3, 0x38, 0x4c, 0x3f, 0x64, 0xff, 0x3d, 0x0b, 0xc6, 0x67, 0xef, 0x34, 0x66, 0xbb, - 0xf1, 0xe6, 0x5c, 0xe0, 0xaf, 0xbb, 0x1b, 0xe8, 0x45, 0x18, 0x6d, 0x7a, 0xdd, 0x28, 0x26, 0xe1, - 0x4d, 0xa7, 0x4d, 0xa6, 0xac, 0x0b, 0xd6, 0xf3, 0xb5, 0xfa, 0xa9, 0xdf, 0xdc, 0x9d, 0x7e, 0xd3, - 0xfd, 0xdd, 0xe9, 0xd1, 0x39, 0x0d, 0xc2, 0x26, 0x1e, 0xfa, 0x66, 0x18, 0x09, 0x03, 0x8f, 0xcc, - 0xe2, 0x9b, 0x53, 0x25, 0xf6, 0xc8, 0x09, 0xf1, 0xc8, 0x08, 0xe6, 0xcd, 0x58, 0xc2, 0x29, 0x6a, - 0x27, 0x0c, 0xd6, 0x5d, 0x8f, 0x4c, 0x95, 0x93, 0xa8, 0x2b, 0xbc, 0x19, 0x4b, 0xb8, 0xfd, 0xe3, - 0x25, 0x38, 0x31, 0xdb, 0xe9, 0x5c, 0x23, 0x8e, 0x17, 0x6f, 0x36, 0x62, 0x27, 0xee, 0x46, 0x28, - 0x80, 0xe1, 0x88, 0xfd, 0x12, 0x7d, 0xbb, 0x23, 0x9e, 0x1e, 0xe6, 0xf0, 0x07, 0xbb, 0xd3, 0x97, - 0xf7, 0x9a, 0xd1, 0x1b, 0x6e, 0x1c, 0x74, 0xa2, 0xb7, 0x12, 0x7f, 0xc3, 0xf5, 0x09, 0x1b, 0x9f, - 0x4d, 0x46, 0x7d, 0xc6, 0x64, 0x32, 0x17, 0xb4, 0x08, 0x16, 0x6c, 0x68, 0x7f, 0xdb, 0x24, 0x8a, - 0x9c, 0x0d, 0x92, 0x7e, 0xb5, 0x25, 0xde, 0x8c, 0x25, 0x1c, 0x85, 0x80, 0x3c, 0x27, 0x8a, 0x57, - 0x43, 0xc7, 0x8f, 0x5c, 0x3a, 0xb5, 0x57, 0xdd, 0x36, 0x7f, 0xcb, 0xd1, 0x4b, 0xff, 0xdf, 0x0c, - 0xff, 0x40, 0x33, 0xe6, 0x07, 0xd2, 0xeb, 0x81, 0xce, 0x9f, 0x99, 0xed, 0xb7, 0xcd, 0xd0, 0x27, - 0xea, 0x4f, 0xdc, 0xdf, 0x9d, 0x46, 0x8b, 0x19, 0x4a, 0x38, 0x87, 0xba, 0xfd, 0x07, 0x25, 0x80, - 0xd9, 0x4e, 0x67, 0x25, 0x0c, 0xee, 0x92, 0x66, 0x8c, 0x3e, 0x0c, 0x55, 0x4a, 0xaa, 0xe5, 0xc4, - 0x0e, 0x1b, 0xa0, 0xd1, 0x4b, 0xdf, 0x32, 0x18, 0xe3, 0xe5, 0x35, 0xfa, 0xfc, 0x12, 0x89, 0x9d, - 0x3a, 0x12, 0x2f, 0x08, 0xba, 0x0d, 0x2b, 0xaa, 0xc8, 0x87, 0xa1, 0xa8, 0x43, 0x9a, 0x6c, 0x30, - 0x46, 0x2f, 0x2d, 0xce, 0x1c, 0x66, 0xc5, 0xcf, 0xe8, 0x9e, 0x37, 0x3a, 0xa4, 0x59, 0x1f, 0x13, - 0x9c, 0x87, 0xe8, 0x3f, 0xcc, 0xf8, 0xa0, 0x6d, 0xf5, 0xc1, 0xf9, 0x40, 0xde, 0x2c, 0x8c, 0x23, - 0xa3, 0x5a, 0x9f, 0x48, 0x4e, 0x20, 0xf9, 0xdd, 0xed, 0x3f, 0xb5, 0x60, 0x42, 0x23, 0x2f, 0xba, - 0x51, 0x8c, 0x3e, 0x90, 0x19, 0xdc, 0x99, 0xc1, 0x06, 0x97, 0x3e, 0xcd, 0x86, 0xf6, 0xa4, 0x60, - 0x56, 0x95, 0x2d, 0xc6, 0xc0, 0xb6, 0xa1, 0xe2, 0xc6, 0xa4, 0x1d, 0x4d, 0x95, 0x2e, 0x94, 0x9f, - 0x1f, 0xbd, 0x74, 0xad, 0xa8, 0xf7, 0xac, 0x8f, 0x0b, 0xa6, 0x95, 0x05, 0x4a, 0x1e, 0x73, 0x2e, - 0xf6, 0x6f, 0x4f, 0x98, 0xef, 0x47, 0x07, 0x1c, 0xbd, 0x0d, 0x46, 0xa3, 0xa0, 0x1b, 0x36, 0x09, - 0x26, 0x9d, 0x80, 0x2e, 0xb0, 0x32, 0x9d, 0xee, 0x74, 0xe1, 0x37, 0x74, 0x33, 0x36, 0x71, 0xd0, - 0xe7, 0x2c, 0x18, 0x6b, 0x91, 0x28, 0x76, 0x7d, 0xc6, 0x5f, 0x76, 0x7e, 0xf5, 0xd0, 0x9d, 0x97, - 0x8d, 0xf3, 0x9a, 0x78, 0xfd, 0xb4, 0x78, 0x91, 0x31, 0xa3, 0x31, 0xc2, 0x09, 0xfe, 0x54, 0x80, - 0xb5, 0x48, 0xd4, 0x0c, 0xdd, 0x0e, 0xfd, 0x2f, 0x44, 0x8c, 0x12, 0x60, 0xf3, 0x1a, 0x84, 0x4d, - 0x3c, 0xe4, 0x43, 0x85, 0x0a, 0xa8, 0x68, 0x6a, 0x88, 0xf5, 0x7f, 0xe1, 0x70, 0xfd, 0x17, 0x83, - 0x4a, 0x65, 0x9f, 0x1e, 0x7d, 0xfa, 0x2f, 0xc2, 0x9c, 0x0d, 0xfa, 0xe7, 0x16, 0x4c, 0x09, 0x01, - 0x8a, 0x09, 0x1f, 0xd0, 0x3b, 0x9b, 0x6e, 0x4c, 0x3c, 0x37, 0x8a, 0xa7, 0x2a, 0xac, 0x0f, 0x1f, - 0x38, 0x5c, 0x1f, 0xe6, 0x92, 0xd4, 0x31, 0x89, 0xe2, 0xd0, 0x6d, 0x52, 0x1c, 0x3a, 0x0d, 0xea, - 0x17, 0x44, 0xb7, 0xa6, 0xe6, 0xfa, 0xf4, 0x02, 0xf7, 0xed, 0x1f, 0xfa, 0x11, 0x0b, 0xce, 0xf9, - 0x4e, 0x9b, 0x44, 0x1d, 0x87, 0x11, 0x66, 0xe0, 0xba, 0xe7, 0x34, 0xb7, 0x58, 0xf7, 0x87, 0x59, - 0xf7, 0x2f, 0x0e, 0xb6, 0x34, 0xae, 0x86, 0x41, 0xb7, 0x73, 0xc3, 0xf5, 0x5b, 0x75, 0x5b, 0xf4, - 0xe8, 0xdc, 0xcd, 0xbe, 0xa4, 0xf1, 0x1e, 0x6c, 0xd1, 0x4f, 0x58, 0x30, 0x19, 0x84, 0x9d, 0x4d, - 0xc7, 0x27, 0x2d, 0x09, 0x8d, 0xa6, 0x46, 0xd8, 0x3a, 0xfd, 0xe0, 0xe1, 0xc6, 0x72, 0x39, 0x4d, - 0x76, 0x29, 0xf0, 0xdd, 0x38, 0x08, 0x1b, 0x24, 0x8e, 0x5d, 0x7f, 0x23, 0xaa, 0x9f, 0xb9, 0xbf, - 0x3b, 0x3d, 0x99, 0xc1, 0xc2, 0xd9, 0xfe, 0xa0, 0xef, 0x82, 0xd1, 0xa8, 0xe7, 0x37, 0xef, 0xb8, - 0x7e, 0x2b, 0xb8, 0x17, 0x4d, 0x55, 0x8b, 0x58, 0xeb, 0x0d, 0x45, 0x50, 0xac, 0x56, 0xcd, 0x00, - 0x9b, 0xdc, 0xf2, 0x3f, 0x9c, 0x9e, 0x77, 0xb5, 0xa2, 0x3f, 0x9c, 0x9e, 0x4c, 0x7b, 0xb0, 0x45, - 0xdf, 0x6f, 0xc1, 0x78, 0xe4, 0x6e, 0xf8, 0x4e, 0xdc, 0x0d, 0xc9, 0x0d, 0xd2, 0x8b, 0xa6, 0x80, - 0x75, 0xe4, 0xfa, 0x21, 0x47, 0xc5, 0x20, 0x59, 0x3f, 0x23, 0xfa, 0x38, 0x6e, 0xb6, 0x46, 0x38, - 0xc9, 0x37, 0x6f, 0x55, 0xea, 0x69, 0x3d, 0xfa, 0x08, 0x57, 0xa5, 0x5e, 0x01, 0x7d, 0xfb, 0x87, - 0xfe, 0x06, 0x9c, 0xe4, 0x4d, 0xea, 0x33, 0x44, 0x53, 0x63, 0x4c, 0x84, 0x9f, 0xbe, 0xbf, 0x3b, - 0x7d, 0xb2, 0x91, 0x82, 0xe1, 0x0c, 0x36, 0x7a, 0x15, 0xa6, 0x3b, 0x24, 0x6c, 0xbb, 0xf1, 0xb2, - 0xef, 0xf5, 0xa4, 0x62, 0x68, 0x06, 0x1d, 0xd2, 0x12, 0xdd, 0x89, 0xa6, 0xc6, 0x2f, 0x58, 0xcf, - 0x57, 0xeb, 0x6f, 0x16, 0xdd, 0x9c, 0x5e, 0xd9, 0x1b, 0x1d, 0xef, 0x47, 0x0f, 0xfd, 0x86, 0x05, - 0xe7, 0x0c, 0xf9, 0xdd, 0x20, 0xe1, 0xb6, 0xdb, 0x24, 0xb3, 0xcd, 0x66, 0xd0, 0xf5, 0xe3, 0x68, - 0x6a, 0x82, 0x8d, 0xf9, 0xda, 0x51, 0x68, 0x93, 0x24, 0x2b, 0x3d, 0x89, 0xfb, 0xa2, 0x44, 0x78, - 0x8f, 0x9e, 0xda, 0xbf, 0x55, 0x82, 0x93, 0x69, 0xdb, 0x02, 0xfd, 0x23, 0x0b, 0x4e, 0xdc, 0xbd, - 0x17, 0xaf, 0x06, 0x5b, 0xc4, 0x8f, 0xea, 0x3d, 0xaa, 0x01, 0x98, 0x56, 0x1d, 0xbd, 0xd4, 0x2c, - 0xd6, 0x8a, 0x99, 0xb9, 0x9e, 0xe4, 0x72, 0xd9, 0x8f, 0xc3, 0x5e, 0xfd, 0x49, 0xf1, 0x4e, 0x27, - 0xae, 0xdf, 0x59, 0x35, 0xa1, 0x38, 0xdd, 0xa9, 0x73, 0x9f, 0xb1, 0xe0, 0x74, 0x1e, 0x09, 0x74, - 0x12, 0xca, 0x5b, 0xa4, 0xc7, 0x6d, 0x6d, 0x4c, 0x7f, 0xa2, 0x57, 0xa0, 0xb2, 0xed, 0x78, 0x5d, - 0x22, 0x0c, 0xc0, 0xab, 0x87, 0x7b, 0x11, 0xd5, 0x33, 0xcc, 0xa9, 0x7e, 0x5b, 0xe9, 0x25, 0xcb, - 0xfe, 0x9d, 0x32, 0x8c, 0x1a, 0x1f, 0xed, 0x18, 0x8c, 0xda, 0x20, 0x61, 0xd4, 0x2e, 0x15, 0x36, - 0xdf, 0xfa, 0x5a, 0xb5, 0xf7, 0x52, 0x56, 0xed, 0x72, 0x71, 0x2c, 0xf7, 0x34, 0x6b, 0x51, 0x0c, - 0xb5, 0xa0, 0x43, 0x37, 0x81, 0xd4, 0x3a, 0x1a, 0x2a, 0xe2, 0x13, 0x2e, 0x4b, 0x72, 0xf5, 0xf1, - 0xfb, 0xbb, 0xd3, 0x35, 0xf5, 0x17, 0x6b, 0x46, 0xf6, 0x1f, 0x5a, 0x70, 0xda, 0xe8, 0xe3, 0x5c, - 0xe0, 0xb7, 0xd8, 0x16, 0x06, 0x5d, 0x80, 0xa1, 0xb8, 0xd7, 0x91, 0x1b, 0x4d, 0x35, 0x52, 0xab, - 0xbd, 0x0e, 0xc1, 0x0c, 0xf2, 0xb8, 0xef, 0xbf, 0x7e, 0xc4, 0x82, 0x27, 0xf2, 0x05, 0x0c, 0x7a, - 0x0e, 0x86, 0xb9, 0x97, 0x41, 0xbc, 0x9d, 0xfe, 0x24, 0xac, 0x15, 0x0b, 0x28, 0xba, 0x08, 0x35, - 0xa5, 0x1d, 0xc5, 0x3b, 0x4e, 0x0a, 0xd4, 0x9a, 0x56, 0xa9, 0x1a, 0x87, 0x0e, 0x1a, 0xfd, 0x23, - 0x8c, 0x5b, 0x35, 0x68, 0x6c, 0x5b, 0xce, 0x20, 0xf6, 0xef, 0x5b, 0xf0, 0x8d, 0x83, 0x88, 0xbd, - 0xa3, 0xeb, 0x63, 0x03, 0xce, 0xb4, 0xc8, 0xba, 0xd3, 0xf5, 0xe2, 0x24, 0x47, 0xd1, 0xe9, 0xa7, - 0xc5, 0xc3, 0x67, 0xe6, 0xf3, 0x90, 0x70, 0xfe, 0xb3, 0xf6, 0x7f, 0xb0, 0x98, 0x43, 0x40, 0xbe, - 0xd6, 0x31, 0x6c, 0xca, 0xfc, 0xe4, 0xa6, 0x6c, 0xa1, 0xb0, 0x65, 0xda, 0x67, 0x57, 0xf6, 0x43, - 0x16, 0x9c, 0x33, 0xb0, 0x96, 0x9c, 0xb8, 0xb9, 0x79, 0x79, 0xa7, 0x13, 0x92, 0x28, 0xa2, 0x53, - 0xea, 0x69, 0x43, 0x1c, 0xd7, 0x47, 0x05, 0x85, 0xf2, 0x0d, 0xd2, 0xe3, 0xb2, 0xf9, 0x05, 0xa8, - 0xf2, 0x35, 0x17, 0x84, 0xe2, 0x23, 0xa9, 0x77, 0x5b, 0x16, 0xed, 0x58, 0x61, 0x20, 0x1b, 0x86, - 0x99, 0xcc, 0xa5, 0x32, 0x88, 0x9a, 0x09, 0x40, 0xbf, 0xfb, 0x6d, 0xd6, 0x82, 0x05, 0xc4, 0x8e, - 0x12, 0xdd, 0x59, 0x09, 0x09, 0x9b, 0x0f, 0xad, 0x2b, 0x2e, 0xf1, 0x5a, 0x11, 0xdd, 0x30, 0x3a, - 0xbe, 0x1f, 0xc4, 0x62, 0xef, 0x67, 0x6c, 0x18, 0x67, 0x75, 0x33, 0x36, 0x71, 0x28, 0x53, 0xcf, - 0x59, 0x23, 0x1e, 0x1f, 0x51, 0xc1, 0x74, 0x91, 0xb5, 0x60, 0x01, 0xb1, 0xef, 0x97, 0xd8, 0xd6, - 0x54, 0x49, 0x34, 0x72, 0x1c, 0x7e, 0x8d, 0x30, 0xa1, 0x02, 0x56, 0x8a, 0x93, 0xc7, 0xa4, 0xbf, - 0x6f, 0xe3, 0xb5, 0x94, 0x16, 0xc0, 0x85, 0x72, 0xdd, 0xdb, 0xbf, 0xf1, 0xc5, 0x32, 0x4c, 0x27, - 0x1f, 0xc8, 0x28, 0x11, 0xba, 0x99, 0x36, 0x18, 0xa5, 0xbd, 0x81, 0x06, 0x3e, 0x36, 0xf1, 0xfa, - 0xc8, 0xe1, 0xd2, 0x51, 0xca, 0x61, 0x53, 0x4d, 0x94, 0xf7, 0x51, 0x13, 0x73, 0x6a, 0xd4, 0x87, - 0x18, 0xe6, 0x5b, 0x32, 0x2e, 0xc4, 0xb3, 0x2b, 0x61, 0xb0, 0xc1, 0xd6, 0xdc, 0x36, 0xa1, 0x9b, - 0xa9, 0x1c, 0xb7, 0xe0, 0x05, 0x18, 0x8a, 0x62, 0xd2, 0x99, 0xaa, 0x24, 0x65, 0x70, 0x23, 0x26, - 0x1d, 0xcc, 0x20, 0xe8, 0x3b, 0xe0, 0x44, 0xec, 0x84, 0x1b, 0x24, 0x0e, 0xc9, 0xb6, 0xcb, 0xdc, - 0xca, 0x6c, 0x67, 0x5c, 0xab, 0x9f, 0xa2, 0x26, 0xd9, 0x2a, 0x03, 0x61, 0x09, 0xc2, 0x69, 0x5c, - 0xfb, 0xbf, 0x94, 0xe0, 0xc9, 0xe4, 0xf7, 0xd1, 0x5a, 0xf3, 0x3b, 0x13, 0x5a, 0xf3, 0x2d, 0xa6, - 0xd6, 0x7c, 0xb0, 0x3b, 0xfd, 0x54, 0x9f, 0xc7, 0xbe, 0x66, 0x94, 0x2a, 0xba, 0x9a, 0xfa, 0x42, - 0x17, 0x33, 0x5f, 0xe8, 0xe9, 0x3e, 0xef, 0x98, 0xb2, 0x76, 0x9e, 0x83, 0xe1, 0x90, 0x38, 0x51, - 0xe0, 0x8b, 0xef, 0xa4, 0x16, 0x03, 0x66, 0xad, 0x58, 0x40, 0xed, 0xdf, 0xab, 0xa5, 0x07, 0xfb, - 0x2a, 0x77, 0x95, 0x07, 0x21, 0x72, 0x61, 0x88, 0xed, 0xff, 0xb8, 0xd8, 0xb9, 0x71, 0xb8, 0x25, - 0x4a, 0x55, 0x8c, 0x22, 0x5d, 0xaf, 0xd2, 0xaf, 0x46, 0x9b, 0x30, 0x63, 0x81, 0x76, 0xa0, 0xda, - 0x94, 0x3b, 0xad, 0x52, 0x11, 0xde, 0x4e, 0xb1, 0xcf, 0xd2, 0x1c, 0xc7, 0xa8, 0x2e, 0x50, 0xdb, - 0x33, 0xc5, 0x0d, 0x11, 0x28, 0x6f, 0xb8, 0xb1, 0xf8, 0xac, 0x87, 0xdc, 0x78, 0x5f, 0x75, 0x8d, - 0x57, 0x1c, 0xa1, 0x0a, 0xea, 0xaa, 0x1b, 0x63, 0x4a, 0x1f, 0x7d, 0xca, 0x82, 0xd1, 0xa8, 0xd9, - 0x5e, 0x09, 0x83, 0x6d, 0xb7, 0x45, 0x42, 0x61, 0x80, 0x1e, 0x52, 0xec, 0x35, 0xe6, 0x96, 0x24, - 0x41, 0xcd, 0x97, 0x3b, 0x42, 0x34, 0x04, 0x9b, 0x7c, 0xe9, 0xc6, 0xec, 0x49, 0xf1, 0xee, 0xf3, - 0xa4, 0xc9, 0x56, 0x9c, 0xdc, 0x50, 0xb3, 0x99, 0x72, 0x68, 0x83, 0x7c, 0xbe, 0xdb, 0xdc, 0xa2, - 0xeb, 0x4d, 0x77, 0xe8, 0xa9, 0xfb, 0xbb, 0xd3, 0x4f, 0xce, 0xe5, 0xf3, 0xc4, 0xfd, 0x3a, 0xc3, - 0x06, 0xac, 0xd3, 0xf5, 0x3c, 0x4c, 0x5e, 0xed, 0x12, 0xe6, 0x5b, 0x2b, 0x60, 0xc0, 0x56, 0x34, - 0xc1, 0xd4, 0x80, 0x19, 0x10, 0x6c, 0xf2, 0x45, 0xaf, 0xc2, 0x70, 0xdb, 0x89, 0x43, 0x77, 0x47, - 0x38, 0xd4, 0x0e, 0xb9, 0x45, 0x5a, 0x62, 0xb4, 0x34, 0x73, 0x66, 0x05, 0xf0, 0x46, 0x2c, 0x18, - 0xa1, 0x36, 0x54, 0xda, 0x24, 0xdc, 0x20, 0x53, 0xd5, 0x22, 0x4e, 0x1a, 0x96, 0x28, 0x29, 0xcd, - 0xb0, 0x46, 0x2d, 0x2f, 0xd6, 0x86, 0x39, 0x17, 0xf4, 0x0a, 0x54, 0x23, 0xe2, 0x91, 0x26, 0xb5, - 0x9d, 0x6a, 0x8c, 0xe3, 0xdb, 0x07, 0xb4, 0x23, 0xa9, 0xd1, 0xd2, 0x10, 0x8f, 0xf2, 0x05, 0x26, - 0xff, 0x61, 0x45, 0x92, 0x0e, 0x60, 0xc7, 0xeb, 0x6e, 0xb8, 0xfe, 0x14, 0x14, 0x31, 0x80, 0x2b, - 0x8c, 0x56, 0x6a, 0x00, 0x79, 0x23, 0x16, 0x8c, 0xec, 0xff, 0x6c, 0x01, 0x4a, 0x0a, 0xb5, 0x63, - 0x30, 0x98, 0x5f, 0x4d, 0x1a, 0xcc, 0x8b, 0x45, 0x5a, 0x34, 0x7d, 0x6c, 0xe6, 0x5f, 0xac, 0x41, - 0x4a, 0x1d, 0xdc, 0x24, 0x51, 0x4c, 0x5a, 0x6f, 0x88, 0xf0, 0x37, 0x44, 0xf8, 0x1b, 0x22, 0x5c, - 0x89, 0xf0, 0xb5, 0x94, 0x08, 0x7f, 0x97, 0xb1, 0xea, 0x75, 0xe8, 0xc3, 0x87, 0x54, 0x6c, 0x84, - 0xd9, 0x03, 0x03, 0x81, 0x4a, 0x82, 0xeb, 0x8d, 0xe5, 0x9b, 0xb9, 0x32, 0xfb, 0x43, 0x49, 0x99, - 0x7d, 0x58, 0x16, 0x7f, 0x1d, 0xa4, 0xf4, 0x6f, 0x58, 0xf0, 0xe6, 0xa4, 0xf4, 0x92, 0x33, 0x67, - 0x61, 0xc3, 0x0f, 0x42, 0x32, 0xef, 0xae, 0xaf, 0x93, 0x90, 0xf8, 0x4d, 0x12, 0x29, 0xc7, 0x8f, - 0xd5, 0xcf, 0xf1, 0x83, 0xde, 0x01, 0x63, 0x77, 0xa3, 0xc0, 0x5f, 0x09, 0x5c, 0x5f, 0x88, 0x20, - 0xba, 0xe3, 0x38, 0x79, 0x7f, 0x77, 0x7a, 0x8c, 0x8e, 0xa8, 0x6c, 0xc7, 0x09, 0x2c, 0x34, 0x07, - 0x93, 0x77, 0x5f, 0x5d, 0x71, 0x62, 0xc3, 0xd5, 0x20, 0x9d, 0x02, 0xec, 0x64, 0xeb, 0xfa, 0xbb, - 0x53, 0x40, 0x9c, 0xc5, 0xb7, 0xff, 0x6e, 0x09, 0xce, 0xa6, 0x5e, 0x24, 0xf0, 0xbc, 0xa0, 0x1b, - 0xd3, 0x3d, 0x11, 0xfa, 0x92, 0x05, 0x27, 0xdb, 0x49, 0x6f, 0x46, 0x24, 0x7c, 0xe1, 0xef, 0x29, - 0x4c, 0x47, 0xa4, 0xdc, 0x25, 0xf5, 0x29, 0x31, 0x42, 0x27, 0x53, 0x80, 0x08, 0x67, 0xfa, 0x82, - 0x5e, 0x81, 0x5a, 0xdb, 0xd9, 0xb9, 0xd5, 0x69, 0x39, 0xb1, 0xdc, 0xab, 0xf6, 0x77, 0x31, 0x74, - 0x63, 0xd7, 0x9b, 0xe1, 0x41, 0x35, 0x33, 0x0b, 0x7e, 0xbc, 0x1c, 0x36, 0xe2, 0xd0, 0xf5, 0x37, - 0xb8, 0x07, 0x74, 0x49, 0x92, 0xc1, 0x9a, 0xa2, 0xfd, 0x45, 0x2b, 0xad, 0xa4, 0xd4, 0xe8, 0x84, - 0x4e, 0x4c, 0x36, 0x7a, 0xe8, 0x23, 0x50, 0xa1, 0xfb, 0x46, 0x39, 0x2a, 0x77, 0x8a, 0xd4, 0x9c, - 0xc6, 0x97, 0xd0, 0x4a, 0x94, 0xfe, 0x8b, 0x30, 0x67, 0x6a, 0x7f, 0xa9, 0x96, 0x36, 0x16, 0x58, - 0x48, 0xc0, 0x25, 0x80, 0x8d, 0x60, 0x95, 0xb4, 0x3b, 0x1e, 0x1d, 0x16, 0x8b, 0x9d, 0xfe, 0x28, - 0x3f, 0xca, 0x55, 0x05, 0xc1, 0x06, 0x16, 0xfa, 0x01, 0x0b, 0x60, 0x43, 0xce, 0x79, 0x69, 0x08, - 0xdc, 0x2a, 0xf2, 0x75, 0xf4, 0x8a, 0xd2, 0x7d, 0x51, 0x0c, 0xb1, 0xc1, 0x1c, 0x7d, 0xaf, 0x05, - 0xd5, 0x58, 0x76, 0x9f, 0xab, 0xc6, 0xd5, 0x22, 0x7b, 0x22, 0x5f, 0x5a, 0xdb, 0x44, 0x6a, 0x48, - 0x14, 0x5f, 0xf4, 0x7d, 0x16, 0x40, 0xd4, 0xf3, 0x9b, 0x2b, 0x81, 0xe7, 0x36, 0x7b, 0x42, 0x63, - 0xde, 0x2e, 0xd4, 0xd7, 0xa3, 0xa8, 0xd7, 0x27, 0xe8, 0x68, 0xe8, 0xff, 0xd8, 0xe0, 0x8c, 0x3e, - 0x0a, 0xd5, 0x48, 0x4c, 0x37, 0xa1, 0x23, 0x57, 0x8b, 0xf5, 0x38, 0x71, 0xda, 0x42, 0xbc, 0x8a, - 0x7f, 0x58, 0xf1, 0x44, 0x3f, 0x6a, 0xc1, 0x89, 0x4e, 0xd2, 0x87, 0x28, 0xd4, 0x61, 0x71, 0x32, - 0x20, 0xe5, 0xa3, 0xe4, 0xde, 0x96, 0x54, 0x23, 0x4e, 0xf7, 0x82, 0x4a, 0x40, 0x3d, 0x83, 0x97, - 0x3b, 0xdc, 0x9f, 0x39, 0xa2, 0x25, 0xe0, 0xd5, 0x34, 0x10, 0x67, 0xf1, 0xd1, 0x0a, 0x9c, 0xa6, - 0xbd, 0xeb, 0x71, 0xf3, 0x53, 0xaa, 0x97, 0x88, 0x29, 0xc3, 0x6a, 0xfd, 0xbc, 0x98, 0x21, 0xec, - 0x20, 0x24, 0x8d, 0x83, 0x73, 0x9f, 0x44, 0xbf, 0x63, 0xc1, 0x79, 0x97, 0xa9, 0x01, 0xd3, 0x9b, - 0xaf, 0x35, 0x82, 0x38, 0xb2, 0x27, 0x85, 0xca, 0x8a, 0x7e, 0xea, 0xa7, 0xfe, 0x8d, 0xe2, 0x0d, - 0xce, 0x2f, 0xec, 0xd1, 0x25, 0xbc, 0x67, 0x87, 0xd1, 0xb7, 0xc2, 0xb8, 0x5c, 0x17, 0x2b, 0x54, - 0x04, 0x33, 0x45, 0x5b, 0xab, 0x4f, 0xde, 0xdf, 0x9d, 0x1e, 0x5f, 0x35, 0x01, 0x38, 0x89, 0x67, - 0xff, 0xd5, 0x50, 0xe2, 0x08, 0x49, 0x39, 0x38, 0x99, 0xb8, 0x69, 0x4a, 0xff, 0x8f, 0x94, 0x9e, - 0x85, 0x8a, 0x1b, 0xe5, 0x5d, 0xd2, 0xe2, 0x46, 0x35, 0x45, 0xd8, 0x60, 0x4e, 0x8d, 0xd2, 0x49, - 0x27, 0xed, 0x46, 0x15, 0x12, 0xf0, 0x95, 0x22, 0xbb, 0x94, 0x3d, 0xf0, 0x3b, 0x2b, 0xba, 0x36, - 0x99, 0x01, 0xe1, 0x6c, 0x97, 0xd0, 0x77, 0x43, 0x2d, 0x54, 0x31, 0x32, 0xe5, 0x22, 0xb6, 0x6a, - 0x72, 0xda, 0x88, 0xee, 0xa8, 0xd3, 0x21, 0x1d, 0x0d, 0xa3, 0x39, 0xa2, 0x77, 0xc1, 0x84, 0xfa, - 0x33, 0xc7, 0x8e, 0x85, 0xa8, 0x50, 0x2c, 0xd7, 0x9f, 0x10, 0x4f, 0x4d, 0xe0, 0x04, 0x14, 0xa7, - 0xb0, 0x51, 0x08, 0xc3, 0x3c, 0x6e, 0x53, 0x88, 0xb1, 0x43, 0x6e, 0x77, 0xcc, 0xe0, 0x4f, 0xed, - 0x23, 0xe4, 0xad, 0x58, 0x70, 0xb2, 0x3f, 0x5d, 0x4a, 0x9c, 0xf4, 0x19, 0xf2, 0x6e, 0x80, 0x53, - 0xcc, 0xcf, 0x59, 0x30, 0x1a, 0x06, 0x9e, 0xe7, 0xfa, 0x1b, 0x54, 0x36, 0x0b, 0x03, 0xe3, 0xfd, - 0x47, 0xa2, 0xe3, 0x85, 0x10, 0x66, 0xbb, 0x01, 0xac, 0x79, 0x62, 0xb3, 0x03, 0xe8, 0x65, 0x18, - 0x6f, 0x11, 0x8f, 0xd0, 0x67, 0x97, 0x43, 0xba, 0x8f, 0xe3, 0x5e, 0x73, 0x15, 0x27, 0x33, 0x6f, - 0x02, 0x71, 0x12, 0xd7, 0xfe, 0x53, 0x0b, 0xa6, 0xfa, 0x29, 0x20, 0x44, 0xe0, 0x29, 0x29, 0x5d, - 0xd5, 0x57, 0x5c, 0xf6, 0x25, 0x3d, 0x61, 0x43, 0x3c, 0x2b, 0xf8, 0x3c, 0xb5, 0xd2, 0x1f, 0x15, - 0xef, 0x45, 0x07, 0xbd, 0x0f, 0x4e, 0x1a, 0x83, 0x12, 0xa9, 0x51, 0xad, 0xd5, 0x67, 0xa8, 0xc5, - 0x37, 0x9b, 0x82, 0x3d, 0xd8, 0x9d, 0x7e, 0x22, 0xdd, 0x26, 0x34, 0x64, 0x86, 0x8e, 0xfd, 0x93, - 0x99, 0x4f, 0xad, 0x8c, 0x9b, 0x2f, 0x58, 0x19, 0xf7, 0xc9, 0x7b, 0x8e, 0xc2, 0xa0, 0x60, 0x8e, - 0x16, 0x15, 0x94, 0xd2, 0x1f, 0xe7, 0x11, 0x06, 0x31, 0xd8, 0xbf, 0x3d, 0x04, 0x7b, 0xf4, 0x6c, - 0x80, 0xdd, 0xca, 0x81, 0x4f, 0x95, 0x3f, 0x6b, 0xa9, 0xe3, 0x43, 0x2e, 0xb4, 0x5a, 0x47, 0x35, - 0xf6, 0x7c, 0xc3, 0x18, 0xf1, 0x40, 0x1a, 0x25, 0x12, 0x92, 0x07, 0x95, 0xe8, 0xcb, 0x56, 0xf2, - 0x00, 0x94, 0x07, 0x8f, 0xba, 0x47, 0xd6, 0x27, 0xe3, 0x54, 0x95, 0x77, 0x4c, 0x9f, 0xc5, 0xf5, - 0x3b, 0x6f, 0x9d, 0x01, 0x58, 0x77, 0x7d, 0xc7, 0x73, 0x5f, 0xa3, 0xdb, 0xc1, 0x0a, 0xb3, 0x68, - 0x98, 0x89, 0x78, 0x45, 0xb5, 0x62, 0x03, 0xe3, 0xdc, 0xff, 0x0f, 0xa3, 0xc6, 0x9b, 0xe7, 0xc4, - 0xff, 0x9c, 0x36, 0xe3, 0x7f, 0x6a, 0x46, 0xd8, 0xce, 0xb9, 0x77, 0xc1, 0xc9, 0x74, 0x07, 0x0f, - 0xf2, 0xbc, 0xfd, 0xbf, 0x46, 0xd2, 0x27, 0x92, 0xab, 0x24, 0x6c, 0xd3, 0xae, 0xbd, 0xe1, 0xc9, - 0x7b, 0xc3, 0x93, 0xf7, 0x86, 0x27, 0xcf, 0x3c, 0x8c, 0x11, 0x5e, 0xaa, 0x91, 0x63, 0xf2, 0x52, - 0x25, 0xfc, 0x6e, 0xd5, 0xc2, 0xfd, 0x6e, 0xf6, 0xa7, 0x32, 0x47, 0x15, 0xab, 0x21, 0x21, 0x28, - 0x80, 0x8a, 0x1f, 0xb4, 0x88, 0x34, 0xea, 0xaf, 0x17, 0x63, 0xa1, 0xde, 0x0c, 0x5a, 0x46, 0x58, - 0x3e, 0xfd, 0x17, 0x61, 0xce, 0xc7, 0xfe, 0x9f, 0x19, 0xc3, 0xe6, 0x0e, 0xf3, 0x13, 0x6d, 0x13, - 0x3f, 0x46, 0x37, 0x12, 0x56, 0xde, 0xb7, 0xa6, 0x4e, 0xdd, 0xdf, 0xdc, 0x2f, 0x01, 0xeb, 0x1e, - 0xa5, 0x30, 0xc3, 0x48, 0x18, 0x06, 0xe1, 0x67, 0x2d, 0x98, 0x70, 0x12, 0x9c, 0x0a, 0xcb, 0xa8, - 0x31, 0x4f, 0x4c, 0x94, 0x41, 0x9d, 0xb2, 0x15, 0x53, 0xbc, 0xed, 0x4f, 0x0e, 0x43, 0x62, 0xe3, - 0xc0, 0x27, 0xfc, 0x37, 0xc3, 0x48, 0x48, 0x3a, 0xc1, 0x2d, 0xbc, 0x28, 0x5e, 0x5a, 0xa7, 0x75, - 0xf1, 0x66, 0x2c, 0xe1, 0x54, 0xd9, 0x77, 0x9c, 0x78, 0x53, 0x68, 0x71, 0xa5, 0xec, 0x57, 0x9c, - 0x78, 0x13, 0x33, 0x08, 0xb5, 0xf9, 0xe3, 0x44, 0xd0, 0x83, 0x38, 0xdc, 0x57, 0x5d, 0x4c, 0x86, - 0x44, 0xe0, 0x14, 0x36, 0x7a, 0x15, 0x86, 0x36, 0x89, 0xd7, 0x16, 0x73, 0xbe, 0x51, 0xdc, 0x30, - 0xb1, 0x77, 0xbd, 0x46, 0xbc, 0x36, 0x57, 0x01, 0xf4, 0x17, 0x66, 0xac, 0xe8, 0x82, 0xaf, 0x6d, - 0x75, 0xa3, 0x38, 0x68, 0xbb, 0xaf, 0x49, 0x9f, 0xf6, 0x7b, 0x0a, 0x66, 0x7c, 0x43, 0xd2, 0xe7, - 0xce, 0x43, 0xf5, 0x17, 0x6b, 0xce, 0xac, 0x1f, 0x2d, 0x37, 0x64, 0x6b, 0xa5, 0x27, 0x5c, 0xd3, - 0x45, 0xf7, 0x63, 0x5e, 0xd2, 0xe7, 0xfd, 0x50, 0x7f, 0xb1, 0xe6, 0x8c, 0x7a, 0x4a, 0xf0, 0x8c, - 0xb2, 0x3e, 0xdc, 0x2a, 0xb8, 0x0f, 0x5c, 0xe8, 0xe4, 0x0a, 0xa0, 0x67, 0xa1, 0xd2, 0xdc, 0x74, - 0xc2, 0x78, 0x6a, 0x8c, 0x4d, 0x1a, 0xb5, 0x7c, 0xe7, 0x68, 0x23, 0xe6, 0x30, 0xf4, 0x34, 0x94, - 0x43, 0xb2, 0xce, 0x82, 0xd4, 0x8d, 0xf0, 0x38, 0x4c, 0xd6, 0x31, 0x6d, 0x57, 0x06, 0xe9, 0x44, - 0xdf, 0xb8, 0xc9, 0x1f, 0x2f, 0x25, 0x2d, 0xda, 0xe4, 0xc8, 0xf0, 0xf5, 0xd0, 0xec, 0x86, 0x91, - 0x74, 0x85, 0x1a, 0xeb, 0x81, 0x35, 0x63, 0x09, 0x47, 0x1f, 0xb7, 0x60, 0xe4, 0x6e, 0x14, 0xf8, - 0xbe, 0x5a, 0xd8, 0xb7, 0x0b, 0x1e, 0xac, 0xeb, 0x9c, 0xba, 0xee, 0x83, 0x68, 0xc0, 0x92, 0x2f, - 0xed, 0x2e, 0xd9, 0x69, 0x7a, 0xdd, 0x56, 0x26, 0x26, 0xea, 0x32, 0x6f, 0xc6, 0x12, 0x4e, 0x51, - 0x5d, 0x9f, 0xa3, 0x0e, 0x25, 0x51, 0x17, 0x7c, 0x81, 0x2a, 0xe0, 0xf6, 0xcf, 0x55, 0xe1, 0x4c, - 0xee, 0xf2, 0xa1, 0xb6, 0x26, 0xb3, 0xe6, 0xae, 0xb8, 0x1e, 0x91, 0xd1, 0x80, 0xcc, 0xd6, 0xbc, - 0xad, 0x5a, 0xb1, 0x81, 0x81, 0xbe, 0x07, 0xa0, 0xe3, 0x84, 0x4e, 0x9b, 0xa8, 0xa3, 0x8a, 0x43, - 0x9b, 0x74, 0xb4, 0x1f, 0x2b, 0x92, 0xa6, 0x76, 0xd7, 0xa8, 0xa6, 0x08, 0x1b, 0x2c, 0xd1, 0x8b, - 0x30, 0x1a, 0x12, 0x8f, 0x38, 0x11, 0xcb, 0x82, 0x48, 0x27, 0x8b, 0x61, 0x0d, 0xc2, 0x26, 0x1e, - 0x7a, 0x4e, 0x05, 0x4e, 0x0e, 0x25, 0xa3, 0x8a, 0x92, 0xc1, 0x93, 0xe8, 0xf3, 0x16, 0x4c, 0xac, - 0xbb, 0x1e, 0xd1, 0xdc, 0x45, 0x6a, 0xd7, 0xf2, 0xe1, 0x5f, 0xf2, 0x8a, 0x49, 0x57, 0xcb, 0xd0, - 0x44, 0x73, 0x84, 0x53, 0xec, 0xe9, 0x67, 0xde, 0x26, 0x21, 0x13, 0xbe, 0xc3, 0xc9, 0xcf, 0x7c, - 0x9b, 0x37, 0x63, 0x09, 0x47, 0xb3, 0x70, 0xa2, 0xe3, 0x44, 0xd1, 0x5c, 0x48, 0x5a, 0xc4, 0x8f, - 0x5d, 0xc7, 0xe3, 0xb9, 0x54, 0x55, 0x9d, 0x55, 0xb0, 0x92, 0x04, 0xe3, 0x34, 0x3e, 0x7a, 0x2f, - 0x3c, 0xc9, 0x7d, 0x81, 0x4b, 0x6e, 0x14, 0xb9, 0xfe, 0x86, 0x9e, 0x06, 0xc2, 0x25, 0x3a, 0x2d, - 0x48, 0x3d, 0xb9, 0x90, 0x8f, 0x86, 0xfb, 0x3d, 0x8f, 0x5e, 0x80, 0x6a, 0xb4, 0xe5, 0x76, 0xe6, - 0xc2, 0x56, 0xc4, 0xce, 0x01, 0xab, 0xda, 0x01, 0xdf, 0x10, 0xed, 0x58, 0x61, 0xa0, 0x26, 0x8c, - 0xf1, 0x4f, 0xc2, 0x23, 0x3f, 0x85, 0x04, 0x7d, 0x6b, 0x5f, 0x0b, 0x46, 0xe4, 0x5a, 0xcf, 0x60, - 0xe7, 0xde, 0x65, 0x79, 0x2a, 0xc9, 0x0f, 0xd1, 0x6e, 0x1b, 0x64, 0x70, 0x82, 0x68, 0x72, 0x33, - 0x3b, 0x3a, 0xc0, 0x66, 0xf6, 0x45, 0x18, 0xdd, 0xea, 0xae, 0x11, 0x31, 0xf2, 0x42, 0xb0, 0xa9, - 0xd9, 0x77, 0x43, 0x83, 0xb0, 0x89, 0xc7, 0x82, 0x6e, 0x3b, 0xae, 0xf8, 0x17, 0x4d, 0x8d, 0x1b, - 0x41, 0xb7, 0x2b, 0x0b, 0xb2, 0x19, 0x9b, 0x38, 0xb4, 0x6b, 0x74, 0x2c, 0x56, 0x49, 0xc4, 0x72, - 0x6a, 0xe8, 0x70, 0xa9, 0xae, 0x35, 0x24, 0x00, 0x6b, 0x1c, 0xb4, 0x02, 0xa7, 0xe9, 0x9f, 0x06, - 0xcb, 0x35, 0xbf, 0xed, 0x78, 0x6e, 0x8b, 0x47, 0x80, 0x9e, 0x48, 0x7a, 0xb2, 0x1b, 0x39, 0x38, - 0x38, 0xf7, 0x49, 0xfb, 0xc7, 0x4a, 0x49, 0xcb, 0xca, 0x14, 0x61, 0x28, 0xa2, 0x82, 0x2a, 0xbe, - 0xed, 0x84, 0xd2, 0xd2, 0x3b, 0x64, 0x42, 0x9c, 0xa0, 0x7b, 0xdb, 0x09, 0x4d, 0x91, 0xc7, 0x18, - 0x60, 0xc9, 0x09, 0xdd, 0x85, 0xa1, 0xd8, 0x73, 0x0a, 0x4a, 0xb7, 0x35, 0x38, 0x6a, 0xf7, 0xdf, - 0xe2, 0x6c, 0x84, 0x19, 0x0f, 0x74, 0x9e, 0x6e, 0x5b, 0xd7, 0xe4, 0x99, 0xaa, 0xd8, 0x69, 0xae, - 0x45, 0x98, 0xb5, 0xda, 0x7f, 0x6b, 0x3c, 0x47, 0xeb, 0x28, 0x43, 0x00, 0x5d, 0x02, 0xa0, 0x93, - 0x66, 0x25, 0x24, 0xeb, 0xee, 0x8e, 0x30, 0xc4, 0x94, 0x64, 0xbb, 0xa9, 0x20, 0xd8, 0xc0, 0x92, - 0xcf, 0x34, 0xba, 0xeb, 0xf4, 0x99, 0x52, 0xf6, 0x19, 0x0e, 0xc1, 0x06, 0x16, 0x7a, 0x07, 0x0c, - 0xbb, 0x6d, 0x67, 0x43, 0xc5, 0x83, 0x9f, 0xa7, 0x22, 0x6d, 0x81, 0xb5, 0x3c, 0xd8, 0x9d, 0x9e, - 0x50, 0x1d, 0x62, 0x4d, 0x58, 0xe0, 0xa2, 0x9f, 0xb4, 0x60, 0xac, 0x19, 0xb4, 0xdb, 0x81, 0xcf, - 0xfd, 0x06, 0xc2, 0x09, 0x72, 0xf7, 0xa8, 0xcc, 0xa4, 0x99, 0x39, 0x83, 0x19, 0xf7, 0x82, 0xa8, - 0xbc, 0x60, 0x13, 0x84, 0x13, 0xbd, 0x32, 0x25, 0x5f, 0x65, 0x1f, 0xc9, 0xf7, 0x0b, 0x16, 0x4c, - 0xf2, 0x67, 0x0d, 0x77, 0x86, 0xc8, 0x6a, 0x0d, 0x8e, 0xf8, 0xb5, 0x32, 0x1e, 0x1e, 0xe5, 0xd6, - 0xcf, 0xc0, 0x71, 0xb6, 0x93, 0xe8, 0x2a, 0x4c, 0xae, 0x07, 0x61, 0x93, 0x98, 0x03, 0x21, 0xc4, - 0xb6, 0x22, 0x74, 0x25, 0x8d, 0x80, 0xb3, 0xcf, 0xa0, 0xdb, 0xf0, 0x84, 0xd1, 0x68, 0x8e, 0x03, - 0x97, 0xdc, 0xcf, 0x08, 0x6a, 0x4f, 0x5c, 0xc9, 0xc5, 0xc2, 0x7d, 0x9e, 0x4e, 0x0a, 0xc9, 0xda, - 0x00, 0x42, 0xf2, 0x43, 0x70, 0xb6, 0x99, 0x1d, 0x99, 0xed, 0xa8, 0xbb, 0x16, 0x71, 0x39, 0x5e, - 0xad, 0x7f, 0x83, 0x20, 0x70, 0x76, 0xae, 0x1f, 0x22, 0xee, 0x4f, 0x03, 0x7d, 0x04, 0xaa, 0x21, - 0x61, 0x5f, 0x25, 0x12, 0x29, 0x9e, 0x87, 0x74, 0xf3, 0x68, 0x0b, 0x9e, 0x93, 0xd5, 0x9a, 0x49, - 0x34, 0x44, 0x58, 0x71, 0x44, 0xf7, 0x60, 0xa4, 0x43, 0xf7, 0x87, 0x22, 0x57, 0xf3, 0xd0, 0xdb, - 0x3f, 0xc5, 0x9c, 0x1d, 0x9a, 0x19, 0xb5, 0x35, 0x38, 0x13, 0x2c, 0xb9, 0x51, 0x5b, 0xad, 0x19, - 0xb4, 0x3b, 0x81, 0x4f, 0xfc, 0x58, 0x2a, 0x91, 0x09, 0x7e, 0xb2, 0x25, 0x5b, 0xb1, 0x81, 0x91, - 0xd1, 0xe5, 0x1a, 0x6d, 0x6a, 0x72, 0x0f, 0x5d, 0x6e, 0x50, 0xeb, 0xf7, 0x3c, 0x55, 0x36, 0xcc, - 0x9f, 0x7a, 0xc7, 0x8d, 0x37, 0x83, 0x6e, 0x2c, 0xdd, 0x03, 0x42, 0x51, 0x29, 0x65, 0xb3, 0x98, - 0x83, 0x83, 0x73, 0x9f, 0x4c, 0x6b, 0xd6, 0x13, 0x0f, 0xa7, 0x59, 0x4f, 0x0e, 0xa0, 0x59, 0x1b, - 0x70, 0x86, 0xf5, 0x40, 0x58, 0xc9, 0xd2, 0x5b, 0x1b, 0x4d, 0x21, 0xd6, 0x79, 0x95, 0xe6, 0xb4, - 0x98, 0x87, 0x84, 0xf3, 0x9f, 0x3d, 0xf7, 0x9d, 0x30, 0x99, 0x11, 0x72, 0x07, 0xf2, 0xc4, 0xce, - 0xc3, 0x13, 0xf9, 0xe2, 0xe4, 0x40, 0xfe, 0xd8, 0x9f, 0x4b, 0x65, 0x20, 0x18, 0x5b, 0xb4, 0x01, - 0x7c, 0xfb, 0x0e, 0x94, 0x89, 0xbf, 0x2d, 0xb4, 0xeb, 0x95, 0xc3, 0xcd, 0xea, 0xcb, 0xfe, 0x36, - 0x97, 0x86, 0xcc, 0x81, 0x79, 0xd9, 0xdf, 0xc6, 0x94, 0x36, 0xfa, 0x61, 0x2b, 0xb1, 0x81, 0xe0, - 0x27, 0x02, 0x1f, 0x3c, 0x92, 0x3d, 0xe9, 0xc0, 0x7b, 0x0a, 0xfb, 0x5f, 0x95, 0xe0, 0xc2, 0x7e, - 0x44, 0x06, 0x18, 0xbe, 0x67, 0x61, 0x38, 0x62, 0x31, 0x45, 0x42, 0x5d, 0x8d, 0xd2, 0x55, 0xcc, - 0xa3, 0x8c, 0x3e, 0x84, 0x05, 0x08, 0x79, 0x50, 0x6e, 0x3b, 0x1d, 0xe1, 0x28, 0x5e, 0x38, 0x6c, - 0x1a, 0x27, 0xfd, 0xef, 0x78, 0x4b, 0x4e, 0x87, 0xcf, 0x79, 0xa3, 0x01, 0x53, 0x36, 0x28, 0x86, - 0x8a, 0x13, 0x86, 0x8e, 0x0c, 0x60, 0xb9, 0x51, 0x0c, 0xbf, 0x59, 0x4a, 0x92, 0x9f, 0xff, 0x27, - 0x9a, 0x30, 0x67, 0x66, 0xff, 0x68, 0x35, 0x91, 0xf3, 0xc7, 0xa2, 0x92, 0x22, 0x18, 0x16, 0xfe, - 0x61, 0xab, 0xe8, 0xec, 0x59, 0x9e, 0x54, 0xcf, 0x3c, 0x10, 0xa2, 0xe8, 0x89, 0x60, 0x85, 0x3e, - 0x63, 0xb1, 0xd2, 0x22, 0x32, 0x91, 0x52, 0xec, 0xea, 0x8f, 0xa6, 0xd2, 0x89, 0x59, 0xb0, 0x44, - 0x36, 0x62, 0x93, 0xbb, 0x28, 0xa3, 0xc4, 0x76, 0x33, 0xd9, 0x32, 0x4a, 0x6c, 0x77, 0x22, 0xe1, - 0x68, 0x27, 0x27, 0xfa, 0xa8, 0x80, 0x8a, 0x13, 0x03, 0xc4, 0x1b, 0x7d, 0xd9, 0x82, 0x49, 0x37, - 0x1d, 0x46, 0x22, 0xf6, 0xc0, 0x77, 0x8a, 0x71, 0xe6, 0x66, 0xa3, 0x54, 0x94, 0xa1, 0x93, 0x01, - 0xe1, 0x6c, 0x67, 0x50, 0x0b, 0x86, 0x5c, 0x7f, 0x3d, 0x10, 0xe6, 0x5d, 0xfd, 0x70, 0x9d, 0x5a, - 0xf0, 0xd7, 0x03, 0xbd, 0x9a, 0xe9, 0x3f, 0xcc, 0xa8, 0xa3, 0x45, 0x38, 0x2d, 0x33, 0xbb, 0xae, - 0xb9, 0x51, 0x1c, 0x84, 0xbd, 0x45, 0xb7, 0xed, 0xc6, 0xcc, 0x34, 0x2b, 0xd7, 0xa7, 0xa8, 0x7a, - 0xc3, 0x39, 0x70, 0x9c, 0xfb, 0x14, 0x7a, 0x0d, 0x46, 0x64, 0xe8, 0x46, 0xb5, 0x08, 0x7f, 0x42, - 0x76, 0xfe, 0xab, 0xc9, 0xd4, 0x10, 0xb1, 0x1b, 0x92, 0x21, 0xfa, 0xb4, 0x05, 0x13, 0xfc, 0xf7, - 0xb5, 0x5e, 0x8b, 0x67, 0x9a, 0xd6, 0x8a, 0xf0, 0x5b, 0x37, 0x12, 0x34, 0xeb, 0xe8, 0xfe, 0xee, - 0xf4, 0x44, 0xb2, 0x0d, 0xa7, 0xf8, 0xda, 0xff, 0x78, 0x0c, 0xb2, 0xc1, 0x2e, 0xc9, 0xc8, 0x16, - 0xeb, 0xd8, 0x23, 0x5b, 0xee, 0xc2, 0x50, 0xa4, 0x03, 0x3c, 0x0a, 0x58, 0x66, 0x82, 0xab, 0x3e, - 0x7f, 0xef, 0xf9, 0x4d, 0xcc, 0x78, 0xa0, 0xae, 0x8a, 0x82, 0x29, 0x17, 0x74, 0xe4, 0x3f, 0x48, - 0x20, 0x0c, 0xda, 0x81, 0x91, 0x4d, 0x3e, 0x1d, 0xc5, 0x5e, 0x6f, 0xe9, 0xb0, 0xe3, 0x9b, 0x98, - 0xe3, 0x7a, 0xf2, 0x89, 0x06, 0x2c, 0xd9, 0xb1, 0x40, 0x4a, 0x23, 0xd4, 0x8b, 0x0b, 0x92, 0xe2, - 0x92, 0x66, 0x07, 0x8f, 0xf3, 0xfa, 0x30, 0x8c, 0x85, 0xa4, 0x19, 0xf8, 0x4d, 0xd7, 0x23, 0xad, - 0x59, 0x79, 0x12, 0x78, 0x90, 0x74, 0x48, 0xe6, 0x4d, 0xc2, 0x06, 0x0d, 0x9c, 0xa0, 0xc8, 0xd6, - 0x99, 0xaa, 0x9f, 0x40, 0x3f, 0x08, 0x11, 0x07, 0x1f, 0x8b, 0x05, 0x55, 0x6b, 0x60, 0x34, 0xf9, - 0x3a, 0x4b, 0xb6, 0xe1, 0x14, 0x5f, 0xf4, 0x3e, 0x80, 0x60, 0x8d, 0x47, 0x4b, 0xce, 0xc6, 0xe2, - 0x14, 0xe4, 0x20, 0xaf, 0x3a, 0xc1, 0x73, 0xae, 0x25, 0x05, 0x6c, 0x50, 0x43, 0x37, 0x00, 0xf8, - 0xca, 0x59, 0xed, 0x75, 0xe4, 0x86, 0x50, 0xe6, 0xb3, 0x42, 0x43, 0x41, 0x1e, 0xec, 0x4e, 0x67, - 0x7d, 0xce, 0xec, 0x34, 0xcd, 0x78, 0x1c, 0x7d, 0x17, 0x8c, 0x44, 0xdd, 0x76, 0xdb, 0x51, 0x67, - 0x24, 0x05, 0x66, 0x71, 0x73, 0xba, 0x86, 0x60, 0xe4, 0x0d, 0x58, 0x72, 0x44, 0x77, 0xa9, 0x88, - 0x17, 0x12, 0x8a, 0xaf, 0x22, 0x6e, 0xa1, 0x70, 0x4f, 0xe0, 0x3b, 0xe5, 0x2e, 0x06, 0xe7, 0xe0, - 0x3c, 0xd8, 0x9d, 0x7e, 0x22, 0xd9, 0xbe, 0x18, 0x88, 0xbc, 0xea, 0x5c, 0x9a, 0xe8, 0xba, 0x2c, - 0xd4, 0x46, 0x5f, 0x5b, 0x56, 0xf9, 0x79, 0x5e, 0x17, 0x6a, 0x63, 0xcd, 0xfd, 0xc7, 0xcc, 0x7c, - 0x18, 0x2d, 0xc1, 0xa9, 0x66, 0xe0, 0xc7, 0x61, 0xe0, 0x79, 0xbc, 0x98, 0x23, 0xdf, 0x9b, 0xf3, - 0x33, 0x94, 0xa7, 0x44, 0xb7, 0x4f, 0xcd, 0x65, 0x51, 0x70, 0xde, 0x73, 0xd4, 0x26, 0x4f, 0xeb, - 0x87, 0x89, 0x42, 0xe2, 0x0a, 0x12, 0x34, 0x85, 0x84, 0x52, 0x6e, 0xef, 0x7d, 0x34, 0x85, 0x9f, - 0x3c, 0x5d, 0x16, 0x5f, 0xec, 0x1d, 0x30, 0x46, 0x76, 0x62, 0x12, 0xfa, 0x8e, 0x77, 0x0b, 0x2f, - 0xca, 0x03, 0x0b, 0xb6, 0x30, 0x2f, 0x1b, 0xed, 0x38, 0x81, 0x85, 0x6c, 0xe5, 0x25, 0x33, 0x0a, - 0x18, 0x70, 0x2f, 0x99, 0xf4, 0x89, 0xd9, 0x3f, 0x53, 0x4e, 0xd8, 0xac, 0x8f, 0xe4, 0x2c, 0x9b, - 0x95, 0xd5, 0x92, 0xf5, 0xc7, 0x18, 0x40, 0xec, 0xc5, 0x8a, 0xe4, 0xac, 0xc2, 0x05, 0x97, 0x4d, - 0x46, 0x38, 0xc9, 0x17, 0x6d, 0x41, 0x65, 0x33, 0x88, 0x62, 0xb9, 0x43, 0x3b, 0xe4, 0x66, 0xf0, - 0x5a, 0x10, 0xc5, 0xcc, 0xd0, 0x52, 0xaf, 0x4d, 0x5b, 0x22, 0xcc, 0x79, 0xd0, 0xbd, 0x7f, 0xb4, - 0xe9, 0x84, 0xad, 0x44, 0x5c, 0xa9, 0xb2, 0xa7, 0x1b, 0x1a, 0x84, 0x4d, 0x3c, 0xfb, 0xcf, 0xac, - 0xc4, 0xa9, 0xd6, 0x51, 0x1d, 0xfb, 0x7f, 0xcc, 0x4a, 0x96, 0x54, 0x28, 0x15, 0xb1, 0x75, 0x33, - 0xcb, 0x8a, 0xec, 0x5b, 0x9d, 0xc1, 0xfe, 0x61, 0x0b, 0x46, 0xea, 0x4e, 0x73, 0x2b, 0x58, 0x5f, - 0x47, 0x2f, 0x40, 0xb5, 0xd5, 0x0d, 0xcd, 0xea, 0x0e, 0xca, 0x59, 0x35, 0x2f, 0xda, 0xb1, 0xc2, - 0xa0, 0x53, 0x7f, 0xdd, 0x69, 0xca, 0xe2, 0x22, 0x65, 0x3e, 0xf5, 0xaf, 0xb0, 0x16, 0x2c, 0x20, - 0x74, 0xf8, 0xdb, 0xce, 0x8e, 0x7c, 0x38, 0x7d, 0xa4, 0xb6, 0xa4, 0x41, 0xd8, 0xc4, 0xb3, 0x7f, - 0xdd, 0x82, 0xa9, 0xba, 0x13, 0xb9, 0xcd, 0xd9, 0x6e, 0xbc, 0x59, 0x77, 0xe3, 0xb5, 0x6e, 0x73, - 0x8b, 0xc4, 0xbc, 0x08, 0x0d, 0xed, 0x65, 0x37, 0xa2, 0x2b, 0x50, 0xed, 0x98, 0x55, 0x2f, 0x6f, - 0x89, 0x76, 0xac, 0x30, 0xd0, 0x6b, 0x30, 0xda, 0x71, 0xa2, 0xe8, 0x5e, 0x10, 0xb6, 0x30, 0x59, - 0x2f, 0xa6, 0x4c, 0x55, 0x83, 0x34, 0x43, 0x12, 0x63, 0xb2, 0x2e, 0x22, 0x73, 0x34, 0x7d, 0x6c, - 0x32, 0xb3, 0x7f, 0xc0, 0x82, 0xd3, 0x75, 0xe2, 0x84, 0x24, 0x64, 0x55, 0xad, 0xd4, 0x8b, 0xa0, - 0x57, 0xa1, 0x1a, 0xd3, 0x16, 0xda, 0x23, 0xab, 0xd8, 0x1e, 0xb1, 0x98, 0x9a, 0x55, 0x41, 0x1c, - 0x2b, 0x36, 0xf6, 0xe7, 0x2c, 0x38, 0x9b, 0xd7, 0x97, 0x39, 0x2f, 0xe8, 0xb6, 0x1e, 0x45, 0x87, - 0xfe, 0x8e, 0x05, 0x63, 0xec, 0xb8, 0x7e, 0x9e, 0xc4, 0x8e, 0xeb, 0x65, 0x6a, 0x75, 0x5a, 0x03, - 0xd6, 0xea, 0xbc, 0x00, 0x43, 0x9b, 0x41, 0x9b, 0xa4, 0x43, 0x4d, 0xae, 0x05, 0x6d, 0x82, 0x19, - 0x04, 0xbd, 0x8d, 0x4e, 0x42, 0xd7, 0x8f, 0x1d, 0xba, 0x1c, 0xe5, 0x71, 0xc6, 0x09, 0x3e, 0x01, - 0x55, 0x33, 0x36, 0x71, 0xec, 0x7f, 0x51, 0x83, 0x11, 0x11, 0x10, 0x36, 0x70, 0x51, 0x24, 0xe9, - 0xc5, 0x29, 0xf5, 0xf5, 0xe2, 0x44, 0x30, 0xdc, 0x64, 0x85, 0x95, 0x85, 0x85, 0x7e, 0xa3, 0x90, - 0x08, 0x42, 0x5e, 0xab, 0x59, 0x77, 0x8b, 0xff, 0xc7, 0x82, 0x15, 0x7a, 0xdd, 0x82, 0x13, 0xcd, - 0xc0, 0xf7, 0x49, 0x53, 0xdb, 0x8e, 0x43, 0x45, 0x6c, 0x10, 0xe6, 0x92, 0x44, 0xf5, 0x49, 0x70, - 0x0a, 0x80, 0xd3, 0xec, 0xd1, 0xcb, 0x30, 0xce, 0xc7, 0xec, 0x76, 0xe2, 0x0c, 0x46, 0x57, 0x65, - 0x34, 0x81, 0x38, 0x89, 0x8b, 0x66, 0xf8, 0x59, 0x96, 0x28, 0x69, 0x38, 0xac, 0x5d, 0xd5, 0x46, - 0x31, 0x43, 0x03, 0x03, 0x85, 0x80, 0x42, 0xb2, 0x1e, 0x92, 0x68, 0x53, 0x04, 0xcc, 0x31, 0xbb, - 0x75, 0xe4, 0xe1, 0x2a, 0x96, 0xe0, 0x0c, 0x25, 0x9c, 0x43, 0x1d, 0x6d, 0x09, 0x37, 0x42, 0xb5, - 0x08, 0x79, 0x2e, 0x3e, 0x73, 0x5f, 0x6f, 0xc2, 0x34, 0x54, 0x98, 0xea, 0x62, 0xf6, 0x72, 0x99, - 0x67, 0xc9, 0x32, 0xc5, 0x86, 0x79, 0x3b, 0x9a, 0x87, 0x93, 0xa9, 0x32, 0x91, 0x91, 0x38, 0x2b, - 0x51, 0x19, 0x91, 0xa9, 0x02, 0x93, 0x11, 0xce, 0x3c, 0x61, 0xba, 0x98, 0x46, 0xf7, 0x71, 0x31, - 0xf5, 0x54, 0x58, 0x36, 0x3f, 0xc5, 0x78, 0x77, 0x21, 0x03, 0x30, 0x50, 0x0c, 0xf6, 0x0f, 0xa5, - 0x62, 0xb0, 0xc7, 0x59, 0x07, 0x6e, 0x17, 0xd3, 0x81, 0x83, 0x07, 0x5c, 0x3f, 0xca, 0x00, 0xea, - 0xff, 0x61, 0x81, 0xfc, 0xae, 0x73, 0x4e, 0x73, 0x93, 0xd0, 0x29, 0x93, 0x93, 0x6a, 0x63, 0x1d, - 0x28, 0xd5, 0xe6, 0x22, 0xd4, 0xe8, 0x38, 0xf1, 0x47, 0xb9, 0xde, 0x57, 0x1e, 0x90, 0xd9, 0x95, - 0x05, 0xf1, 0x94, 0xc6, 0x41, 0x01, 0x4c, 0x7a, 0x4e, 0x14, 0xb3, 0x1e, 0x34, 0x7a, 0x7e, 0xf3, - 0x21, 0xeb, 0x05, 0xb1, 0xb4, 0xbb, 0xc5, 0x34, 0x21, 0x9c, 0xa5, 0x6d, 0xff, 0x9b, 0x0a, 0x8c, - 0x27, 0x24, 0xe3, 0x01, 0x0d, 0x86, 0x17, 0xa0, 0x2a, 0x75, 0x78, 0xba, 0x6a, 0x9a, 0x52, 0xf4, - 0x0a, 0x83, 0x2a, 0xad, 0x35, 0xad, 0x55, 0xd3, 0x06, 0x8e, 0xa1, 0x70, 0xb1, 0x89, 0xc7, 0x84, - 0x72, 0xec, 0x45, 0x73, 0x9e, 0x4b, 0xfc, 0x98, 0x77, 0xb3, 0x18, 0xa1, 0xbc, 0xba, 0xd8, 0x30, - 0x89, 0x6a, 0xa1, 0x9c, 0x02, 0xe0, 0x34, 0x7b, 0xf4, 0x49, 0x0b, 0xc6, 0x9d, 0x7b, 0x91, 0xae, - 0xfe, 0x2f, 0xa2, 0xad, 0x0f, 0xa9, 0xa4, 0x12, 0x17, 0x0a, 0x70, 0xc7, 0x7e, 0xa2, 0x09, 0x27, - 0x99, 0xa2, 0x2f, 0x58, 0x80, 0xc8, 0x0e, 0x69, 0xca, 0x78, 0x70, 0xd1, 0x97, 0xe1, 0x22, 0x76, - 0xf0, 0x97, 0x33, 0x74, 0xb9, 0x54, 0xcf, 0xb6, 0xe3, 0x9c, 0x3e, 0xa0, 0xeb, 0x80, 0x5a, 0x6e, - 0xe4, 0xac, 0x79, 0x64, 0x2e, 0x68, 0xcb, 0x54, 0x71, 0x71, 0x9e, 0x7e, 0x4e, 0x8c, 0x33, 0x9a, - 0xcf, 0x60, 0xe0, 0x9c, 0xa7, 0xd8, 0x2c, 0x0b, 0x83, 0x9d, 0xde, 0xad, 0xd0, 0x63, 0x5a, 0xc2, - 0x9c, 0x65, 0xa2, 0x1d, 0x2b, 0x0c, 0xfb, 0xcf, 0xcb, 0x6a, 0x29, 0xeb, 0xe4, 0x07, 0xc7, 0x08, - 0xc2, 0xb6, 0x1e, 0x3e, 0x08, 0x5b, 0x47, 0x4a, 0x65, 0x0b, 0x20, 0x24, 0xf2, 0xa5, 0x4b, 0x8f, - 0x28, 0x5f, 0xfa, 0x7b, 0xad, 0x44, 0x65, 0xc2, 0xd1, 0x4b, 0xef, 0x2b, 0x36, 0xf1, 0x62, 0x86, - 0x47, 0x71, 0xa5, 0xf4, 0x4a, 0x2a, 0x78, 0xef, 0x05, 0xa8, 0xae, 0x7b, 0x0e, 0x2b, 0x99, 0xc3, - 0x16, 0xaa, 0x11, 0x61, 0x76, 0x45, 0xb4, 0x63, 0x85, 0x41, 0xa5, 0xbe, 0x41, 0xf4, 0x40, 0x52, - 0xfb, 0xdf, 0x97, 0x61, 0xd4, 0xd0, 0xf8, 0xb9, 0xe6, 0x9b, 0xf5, 0x98, 0x99, 0x6f, 0xa5, 0x03, - 0x98, 0x6f, 0xdf, 0x03, 0xb5, 0xa6, 0xd4, 0x46, 0xc5, 0xdc, 0xe1, 0x90, 0xd6, 0x71, 0x5a, 0x21, - 0xa9, 0x26, 0xac, 0x79, 0xa2, 0xab, 0x89, 0x9c, 0xdc, 0x84, 0x5f, 0x20, 0x2f, 0x69, 0x56, 0x68, - 0xb4, 0xec, 0x33, 0xe9, 0xf8, 0x80, 0xca, 0xfe, 0xf1, 0x01, 0xf6, 0x1f, 0x5a, 0xea, 0xe3, 0x1e, - 0x43, 0xf1, 0xa5, 0xbb, 0xc9, 0xe2, 0x4b, 0x97, 0x0b, 0x19, 0xe6, 0x3e, 0x55, 0x97, 0x7e, 0xc0, - 0x82, 0x67, 0xf6, 0xae, 0x66, 0x8e, 0x9e, 0x85, 0xca, 0x46, 0x18, 0x74, 0x3b, 0x42, 0x07, 0x2b, - 0x3a, 0xac, 0x74, 0x3c, 0xe6, 0x30, 0xba, 0x89, 0xda, 0x72, 0xfd, 0x56, 0x7a, 0x13, 0x75, 0xc3, - 0xf5, 0x5b, 0x98, 0x41, 0x06, 0x28, 0x77, 0x7b, 0x13, 0x46, 0xe6, 0x82, 0x76, 0xdb, 0xf1, 0x5b, - 0xe8, 0x9b, 0x60, 0xa4, 0xc9, 0x7f, 0x0a, 0x7f, 0x1e, 0x3b, 0x38, 0x17, 0x50, 0x2c, 0x61, 0xe8, - 0x3c, 0x0c, 0x39, 0xe1, 0x86, 0xf4, 0xe1, 0xb1, 0x80, 0xbc, 0xd9, 0x70, 0x23, 0xc2, 0xac, 0xd5, - 0xfe, 0x4b, 0x0b, 0x26, 0xe8, 0x23, 0x2e, 0x1b, 0x60, 0x36, 0xb4, 0xcf, 0xc1, 0xb0, 0xd3, 0x8d, - 0x37, 0x83, 0xcc, 0x9e, 0x70, 0x96, 0xb5, 0x62, 0x01, 0xa5, 0x9d, 0x55, 0x15, 0x44, 0x8c, 0xce, - 0xce, 0xd3, 0x75, 0xc5, 0x20, 0xd4, 0xac, 0x8e, 0xba, 0x6b, 0x79, 0x27, 0xb7, 0x0d, 0xde, 0x8c, - 0x25, 0x9c, 0x12, 0x5b, 0x0b, 0x5a, 0x3d, 0x11, 0x66, 0xac, 0x88, 0xd5, 0x83, 0x56, 0x0f, 0x33, - 0x08, 0x7a, 0x1a, 0xca, 0xd1, 0xa6, 0x23, 0x63, 0x04, 0x64, 0xc4, 0x7b, 0xe3, 0xda, 0x2c, 0xa6, - 0xed, 0x2a, 0x81, 0x23, 0xf4, 0xd2, 0xf1, 0xbe, 0xc9, 0x04, 0x8e, 0xd0, 0xb3, 0x7f, 0x76, 0x08, - 0x58, 0xec, 0x8f, 0x13, 0x92, 0xd6, 0x6a, 0xc0, 0x0a, 0x54, 0x1f, 0xe9, 0x11, 0xbb, 0xde, 0x54, - 0x3f, 0xce, 0xc7, 0xec, 0xc6, 0x51, 0x6b, 0xf9, 0xb8, 0x8f, 0x5a, 0xf3, 0x4f, 0xcf, 0x87, 0x1e, - 0xa3, 0xd3, 0x73, 0xfb, 0xb3, 0x16, 0x20, 0x15, 0xc9, 0xa5, 0xc3, 0x5b, 0x2e, 0x42, 0x4d, 0x85, - 0x8e, 0x89, 0xf5, 0xa2, 0x45, 0xb4, 0x04, 0x60, 0x8d, 0x33, 0x80, 0x27, 0xe5, 0x59, 0xa9, 0x3f, - 0xcb, 0x49, 0x59, 0xc2, 0xb4, 0xae, 0x50, 0xa7, 0xf6, 0xaf, 0x96, 0xe0, 0x09, 0x6e, 0xba, 0x2d, - 0x39, 0xbe, 0xb3, 0x41, 0xda, 0xb4, 0x57, 0x83, 0x06, 0x2c, 0x35, 0xe9, 0x16, 0xde, 0x95, 0xd9, - 0x1a, 0x87, 0x95, 0x9d, 0x5c, 0xce, 0x70, 0xc9, 0xb2, 0xe0, 0xbb, 0x31, 0x66, 0xc4, 0x51, 0x04, - 0x55, 0x79, 0x09, 0x97, 0xd0, 0x85, 0x05, 0x31, 0x52, 0x6a, 0x41, 0x58, 0x39, 0x04, 0x2b, 0x46, - 0xd4, 0x94, 0xf1, 0x82, 0xe6, 0x16, 0x5d, 0xf2, 0x69, 0x53, 0x66, 0x51, 0xb4, 0x63, 0x85, 0x61, - 0xb7, 0xe1, 0x84, 0x1c, 0xc3, 0xce, 0x0d, 0xd2, 0xc3, 0x64, 0x9d, 0xea, 0xff, 0xa6, 0x6c, 0x32, - 0xee, 0x05, 0x53, 0xfa, 0x7f, 0xce, 0x04, 0xe2, 0x24, 0xae, 0xac, 0x59, 0x5d, 0xca, 0xaf, 0x59, - 0x6d, 0xff, 0xaa, 0x05, 0x69, 0x03, 0x84, 0x39, 0xe0, 0xcc, 0x4b, 0xbe, 0xfa, 0x15, 0xb3, 0x3f, - 0x40, 0x19, 0xdb, 0x0f, 0xc0, 0xa8, 0x13, 0x53, 0x0b, 0x93, 0x7b, 0x83, 0xca, 0x0f, 0x77, 0x8a, - 0xb9, 0x14, 0xb4, 0xdc, 0x75, 0x97, 0x79, 0x81, 0x4c, 0x72, 0xf6, 0xdf, 0xae, 0x40, 0x6d, 0x3e, - 0xec, 0x1d, 0x3c, 0x6d, 0x2e, 0x9b, 0x14, 0x57, 0x3a, 0x50, 0x52, 0x9c, 0x4c, 0xbb, 0x2b, 0xf7, - 0x4d, 0xbb, 0x93, 0x69, 0x73, 0x43, 0x8f, 0x2a, 0x6d, 0xae, 0xf2, 0x98, 0xa4, 0xcd, 0x0d, 0x3f, - 0x06, 0x69, 0x73, 0x23, 0xc7, 0x9c, 0x36, 0x67, 0xff, 0xb7, 0x21, 0x98, 0xcc, 0xa4, 0x3f, 0xa3, - 0x97, 0x60, 0x4c, 0xad, 0x51, 0x79, 0x00, 0x50, 0x33, 0xc3, 0xe8, 0x35, 0x0c, 0x27, 0x30, 0x07, - 0x10, 0xd4, 0x0b, 0x70, 0x2a, 0x24, 0xaf, 0x76, 0x49, 0x97, 0xcc, 0xae, 0xc7, 0x24, 0x6c, 0x90, - 0x66, 0xe0, 0xb7, 0x78, 0x81, 0xf3, 0x72, 0xfd, 0xc9, 0xfb, 0xbb, 0xd3, 0xa7, 0x70, 0x16, 0x8c, - 0xf3, 0x9e, 0x41, 0x1d, 0x18, 0xf7, 0xcc, 0x9d, 0xab, 0x98, 0xc3, 0x0f, 0xb5, 0xe9, 0x55, 0xb2, - 0x2a, 0xd1, 0x8c, 0x93, 0x0c, 0x92, 0xdb, 0xdf, 0xca, 0x23, 0xda, 0xfe, 0x7e, 0x42, 0x6f, 0x7f, - 0x79, 0x54, 0xda, 0xfb, 0x0b, 0x4e, 0x7f, 0x1f, 0x64, 0xff, 0x7b, 0x98, 0x1d, 0xed, 0xbb, 0xa1, - 0x2a, 0x23, 0x76, 0x07, 0x8a, 0x74, 0x35, 0xe9, 0xf4, 0xd1, 0xec, 0x0f, 0x4a, 0x90, 0xe3, 0xb4, - 0xa1, 0x92, 0x56, 0x5b, 0xfb, 0x09, 0x49, 0x7b, 0x30, 0x8b, 0x1f, 0xed, 0xf0, 0x68, 0x65, 0x6e, - 0xe3, 0xbd, 0xb7, 0x68, 0xa7, 0x93, 0x0e, 0x60, 0x56, 0xfa, 0x4f, 0x05, 0x31, 0x5f, 0x02, 0xd0, - 0x1b, 0x46, 0x61, 0xe9, 0xab, 0xf0, 0x23, 0xbd, 0xaf, 0xc4, 0x06, 0x16, 0x7a, 0x11, 0x46, 0x5d, - 0x3f, 0x8a, 0x1d, 0xcf, 0xbb, 0xe6, 0xfa, 0xb1, 0xb0, 0xfe, 0x95, 0x31, 0xbb, 0xa0, 0x41, 0xd8, - 0xc4, 0x3b, 0xf7, 0x4e, 0xe3, 0xbb, 0x1c, 0xe4, 0x7b, 0x6e, 0xc2, 0xd9, 0xab, 0x6e, 0xac, 0x44, - 0x9b, 0x9a, 0x47, 0x6c, 0x93, 0x27, 0x35, 0x90, 0xd5, 0x57, 0x03, 0x19, 0x69, 0xa8, 0xa5, 0x64, - 0xd6, 0x6c, 0x3a, 0x0d, 0xd5, 0x6e, 0xc2, 0xe9, 0xab, 0x6e, 0x7c, 0xc5, 0xf5, 0xc8, 0x11, 0x32, - 0xf9, 0x95, 0x61, 0x18, 0x33, 0xcb, 0x62, 0x1c, 0x44, 0x5f, 0x7f, 0x8e, 0xee, 0x4e, 0xc4, 0x40, - 0xb8, 0x2a, 0xa4, 0xe2, 0xce, 0xa1, 0x6b, 0x74, 0xe4, 0x0f, 0xae, 0xb1, 0x41, 0xd1, 0x3c, 0xb1, - 0xd9, 0x01, 0x74, 0x0f, 0x2a, 0xeb, 0x2c, 0xa3, 0xb2, 0x5c, 0x44, 0x30, 0x5c, 0xde, 0xe0, 0xeb, - 0x15, 0xc9, 0x73, 0x32, 0x39, 0x3f, 0x6a, 0x54, 0x86, 0xc9, 0x44, 0x7e, 0x23, 0xcf, 0x45, 0x58, - 0x2b, 0x0a, 0xa3, 0x9f, 0x56, 0xa8, 0x3c, 0x84, 0x56, 0x48, 0xc8, 0xe8, 0xe1, 0x47, 0x24, 0xa3, - 0x59, 0x76, 0x6c, 0xbc, 0xc9, 0xb6, 0x3c, 0x22, 0x31, 0x6f, 0x84, 0x0d, 0x82, 0x91, 0x1d, 0x9b, - 0x00, 0xe3, 0x34, 0x3e, 0xfa, 0xa8, 0x92, 0xf2, 0xd5, 0x22, 0x8e, 0xac, 0xcc, 0x19, 0x7d, 0xd4, - 0x02, 0xfe, 0xb3, 0x25, 0x98, 0xb8, 0xea, 0x77, 0x57, 0xae, 0xae, 0x74, 0xd7, 0x3c, 0xb7, 0x79, - 0x83, 0xf4, 0xa8, 0x14, 0xdf, 0x22, 0xbd, 0x85, 0xf9, 0xb4, 0xaf, 0xe7, 0x06, 0x6d, 0xc4, 0x1c, - 0x46, 0xe5, 0xd6, 0xba, 0xeb, 0x6f, 0x90, 0xb0, 0x13, 0xba, 0xe2, 0x34, 0xc9, 0x90, 0x5b, 0x57, - 0x34, 0x08, 0x9b, 0x78, 0x94, 0x76, 0x70, 0xcf, 0x57, 0x35, 0xca, 0x14, 0xed, 0x65, 0xda, 0x88, - 0x39, 0x8c, 0x22, 0xc5, 0x61, 0x57, 0x38, 0x6b, 0x0d, 0xa4, 0x55, 0xda, 0x88, 0x39, 0x4c, 0xf8, - 0x5e, 0x58, 0xac, 0x61, 0x25, 0xe3, 0x7b, 0x61, 0x61, 0x3a, 0x12, 0x4e, 0x51, 0xb7, 0x48, 0x6f, - 0xde, 0x89, 0x9d, 0xb4, 0xeb, 0xe4, 0x06, 0x6f, 0xc6, 0x12, 0xce, 0x0a, 0xad, 0x27, 0x87, 0xe3, - 0x6b, 0xae, 0xd0, 0x7a, 0xb2, 0xfb, 0x7d, 0x5c, 0x7e, 0x5f, 0x2a, 0xc1, 0xd8, 0x1b, 0x97, 0x31, - 0xef, 0x71, 0x19, 0xd8, 0x1d, 0x98, 0xcc, 0xe4, 0xe6, 0x0f, 0x60, 0x01, 0xed, 0x5b, 0x3b, 0xc5, - 0xc6, 0x30, 0x4a, 0x09, 0xcb, 0x42, 0xa3, 0x73, 0x30, 0xc9, 0x17, 0x31, 0xe5, 0xc4, 0x52, 0xad, - 0x55, 0xbd, 0x05, 0x76, 0x6c, 0x7a, 0x3b, 0x0d, 0xc4, 0x59, 0x7c, 0xfb, 0x87, 0x2c, 0x18, 0x4f, - 0x94, 0x4b, 0x28, 0xc8, 0x56, 0x63, 0xab, 0x3c, 0x60, 0xf1, 0xf2, 0x2c, 0x7f, 0xa9, 0xcc, 0xd4, - 0xb1, 0x5e, 0xe5, 0x1a, 0x84, 0x4d, 0x3c, 0xfb, 0xb7, 0xca, 0x50, 0x95, 0xb1, 0x7d, 0x03, 0x74, - 0xe5, 0x33, 0x16, 0x8c, 0xab, 0xa3, 0x6a, 0x76, 0xb6, 0x50, 0x2a, 0x22, 0x7b, 0x93, 0xf6, 0x40, - 0x79, 0xc7, 0xfc, 0xf5, 0x40, 0x6f, 0x1c, 0xb0, 0xc9, 0x0c, 0x27, 0x79, 0xa3, 0xdb, 0x00, 0x51, - 0x2f, 0x8a, 0x49, 0xdb, 0x38, 0xe5, 0xb0, 0x8d, 0x59, 0x36, 0xd3, 0x0c, 0x42, 0x42, 0xe7, 0xd4, - 0xcd, 0xa0, 0x45, 0x1a, 0x0a, 0x53, 0x5b, 0x7a, 0xba, 0x0d, 0x1b, 0x94, 0xd0, 0x6b, 0x2a, 0xb0, - 0x62, 0xa8, 0x08, 0xfd, 0x2e, 0xc7, 0x77, 0x90, 0xc8, 0x8a, 0x43, 0x44, 0x32, 0xd8, 0x3f, 0x5d, - 0x82, 0x93, 0xe9, 0x91, 0x44, 0xef, 0x87, 0x31, 0x39, 0x68, 0x86, 0x13, 0x49, 0x06, 0x54, 0x8e, - 0x61, 0x03, 0xf6, 0x60, 0x77, 0x7a, 0x3a, 0x7b, 0xbb, 0xff, 0x8c, 0x89, 0x82, 0x13, 0xc4, 0x78, - 0x98, 0x83, 0x88, 0xc7, 0xa9, 0xf7, 0x66, 0x3b, 0x1d, 0x11, 0xab, 0x60, 0x84, 0x39, 0x98, 0x50, - 0x9c, 0xc2, 0x46, 0x2b, 0x70, 0xda, 0x68, 0xb9, 0x49, 0xdc, 0x8d, 0xcd, 0xb5, 0x20, 0x94, 0xfb, - 0xd6, 0xf3, 0x3a, 0x7c, 0x3b, 0x8b, 0x83, 0x73, 0x9f, 0xa4, 0x06, 0x52, 0xd3, 0xe9, 0x38, 0x4d, - 0x37, 0xee, 0x89, 0xd3, 0x26, 0x25, 0xce, 0xe7, 0x44, 0x3b, 0x56, 0x18, 0xf6, 0x3f, 0x18, 0x82, - 0x93, 0x3c, 0x5e, 0x99, 0xa8, 0x70, 0x7c, 0xf4, 0x7e, 0xa8, 0x45, 0xb1, 0x13, 0x72, 0x97, 0x95, - 0x75, 0x60, 0xd1, 0xa5, 0x6b, 0x3c, 0x48, 0x22, 0x58, 0xd3, 0x43, 0xef, 0x63, 0x95, 0x01, 0xdd, - 0x68, 0x93, 0x51, 0x2f, 0x3d, 0x9c, 0x43, 0xec, 0x8a, 0xa2, 0x80, 0x0d, 0x6a, 0xe8, 0xdb, 0xa1, - 0xd2, 0xd9, 0x74, 0x22, 0xe9, 0xad, 0x7d, 0x4e, 0xca, 0x89, 0x15, 0xda, 0xf8, 0x60, 0x77, 0xfa, - 0x4c, 0xfa, 0x55, 0x19, 0x00, 0xf3, 0x87, 0x4c, 0x29, 0x3f, 0xb4, 0x8f, 0x94, 0x7f, 0x0e, 0x86, - 0x5b, 0x61, 0xaf, 0x71, 0x6d, 0x36, 0x7d, 0xc1, 0xd3, 0x3c, 0x6b, 0xc5, 0x02, 0x4a, 0x65, 0xd2, - 0x26, 0x67, 0xd9, 0xa2, 0xc8, 0xc3, 0x49, 0xcb, 0xe3, 0x9a, 0x06, 0x61, 0x13, 0x8f, 0x55, 0xe9, - 0x4a, 0x45, 0xb3, 0x8f, 0x1c, 0x41, 0xb6, 0xd3, 0xa0, 0x71, 0xec, 0x97, 0xa1, 0x26, 0xba, 0xba, - 0x1a, 0xa0, 0x97, 0x60, 0x8c, 0x3b, 0x03, 0xeb, 0xa1, 0xe3, 0x37, 0x37, 0xd3, 0x4e, 0x9c, 0x55, - 0x03, 0x86, 0x13, 0x98, 0xf6, 0x12, 0x0c, 0x0d, 0x28, 0x64, 0x07, 0xda, 0x9b, 0xbf, 0x1b, 0xaa, - 0x94, 0x9c, 0xdc, 0xa8, 0x15, 0x41, 0x32, 0x80, 0xaa, 0xbc, 0x19, 0x16, 0xd9, 0x50, 0x76, 0x1d, - 0x19, 0xb5, 0xa4, 0x96, 0xd0, 0x42, 0x14, 0x75, 0xd9, 0xb4, 0xa3, 0x40, 0xf4, 0x2c, 0x94, 0xc9, - 0x4e, 0x27, 0x1d, 0x9e, 0x74, 0x79, 0xa7, 0xe3, 0x86, 0x24, 0xa2, 0x48, 0x64, 0xa7, 0x83, 0xce, - 0x41, 0xc9, 0x6d, 0x89, 0x19, 0x09, 0x02, 0xa7, 0xb4, 0x30, 0x8f, 0x4b, 0x6e, 0xcb, 0xde, 0x81, - 0x9a, 0xba, 0x8a, 0x16, 0x6d, 0x49, 0xd3, 0xca, 0x2a, 0x22, 0x5e, 0x5d, 0xd2, 0xed, 0x63, 0x54, - 0x75, 0x01, 0x74, 0xf1, 0x90, 0xa2, 0x54, 0xf0, 0x05, 0x18, 0x6a, 0x06, 0xa2, 0xec, 0x53, 0x55, - 0x93, 0x61, 0xb6, 0x14, 0x83, 0xd8, 0x77, 0x60, 0xe2, 0x86, 0x1f, 0xdc, 0x63, 0x97, 0xc2, 0xb1, - 0x1a, 0xe8, 0x94, 0xf0, 0x3a, 0xfd, 0x91, 0xb6, 0xe0, 0x19, 0x14, 0x73, 0x98, 0xaa, 0x74, 0x5c, - 0xea, 0x57, 0xe9, 0xd8, 0xfe, 0x98, 0x05, 0x63, 0xca, 0x1b, 0x7b, 0x75, 0x7b, 0x6b, 0xb0, 0x53, - 0x60, 0xa3, 0x3c, 0x47, 0x69, 0x9f, 0xf2, 0x1c, 0xf2, 0xc0, 0xb8, 0xdc, 0xef, 0xc0, 0xd8, 0xfe, - 0x2b, 0x0b, 0x4e, 0xaa, 0x2e, 0x48, 0x9b, 0xe9, 0x25, 0x18, 0x5b, 0xeb, 0xba, 0x5e, 0x4b, 0x16, - 0x77, 0x4f, 0x2d, 0x97, 0xba, 0x01, 0xc3, 0x09, 0x4c, 0x74, 0x09, 0x60, 0xcd, 0xf5, 0x9d, 0xb0, - 0xb7, 0xa2, 0x8d, 0x34, 0xa5, 0xb7, 0xeb, 0x0a, 0x82, 0x0d, 0x2c, 0xf4, 0x11, 0xa8, 0x6e, 0xcb, - 0x38, 0x81, 0x72, 0xa1, 0x55, 0x25, 0xc4, 0x78, 0xe8, 0x95, 0xa0, 0x02, 0x0f, 0x14, 0x47, 0xfb, - 0xf3, 0x65, 0x98, 0x48, 0x56, 0x82, 0x18, 0xc0, 0x83, 0xf2, 0x2c, 0x54, 0x58, 0x71, 0x88, 0xf4, - 0xc4, 0xe2, 0xd5, 0xd8, 0x39, 0x0c, 0x45, 0x30, 0xcc, 0x45, 0x49, 0x31, 0xf7, 0x16, 0xab, 0x4e, - 0x2a, 0x3f, 0x2d, 0x73, 0x62, 0x8b, 0x43, 0x0f, 0xc1, 0x0a, 0x7d, 0xd2, 0x82, 0x91, 0xa0, 0x63, - 0x96, 0xd8, 0x7d, 0x6f, 0x91, 0x55, 0x32, 0x44, 0x2a, 0xba, 0xb0, 0x86, 0xd4, 0xc4, 0x93, 0x93, - 0x41, 0xb2, 0x3e, 0xf7, 0x6d, 0x30, 0x66, 0x62, 0xee, 0x67, 0x10, 0x55, 0x4d, 0x83, 0xe8, 0x33, - 0xe6, 0x94, 0x14, 0x75, 0x40, 0x06, 0x58, 0xec, 0xb7, 0xa0, 0xd2, 0x54, 0x81, 0x97, 0x0f, 0x75, - 0x21, 0x89, 0xaa, 0x93, 0xc7, 0x82, 0x5a, 0x38, 0x35, 0xfb, 0x0f, 0x2d, 0x63, 0x7e, 0x60, 0x12, - 0x2d, 0xb4, 0x50, 0x08, 0xe5, 0x8d, 0xed, 0x2d, 0x61, 0x64, 0x5c, 0x2f, 0x68, 0x78, 0xaf, 0x6e, - 0x6f, 0xe9, 0x15, 0x66, 0xb6, 0x62, 0xca, 0x6c, 0x80, 0xc3, 0x84, 0x44, 0xb9, 0x98, 0xf2, 0xfe, - 0xe5, 0x62, 0xec, 0x2f, 0x94, 0x60, 0x32, 0x33, 0xa9, 0xd0, 0x6b, 0x50, 0x09, 0xe9, 0x5b, 0x8a, - 0xd7, 0x5b, 0x2c, 0xac, 0xc0, 0x4b, 0xb4, 0xd0, 0xd2, 0xca, 0x3b, 0xd9, 0x8e, 0x39, 0x4b, 0x74, - 0x1d, 0x90, 0x0e, 0x0f, 0x56, 0x27, 0x19, 0xfc, 0x95, 0x55, 0x0c, 0xe1, 0x6c, 0x06, 0x03, 0xe7, - 0x3c, 0x85, 0x5e, 0x4e, 0x1f, 0x88, 0xa4, 0x8a, 0xb6, 0xef, 0x75, 0xb6, 0x61, 0xbf, 0x6e, 0x4e, - 0xc1, 0xdb, 0x5a, 0x98, 0x1e, 0x76, 0x73, 0x9a, 0x91, 0xac, 0xe5, 0x41, 0x25, 0xab, 0xfd, 0x4b, - 0x25, 0x18, 0x4f, 0x14, 0x61, 0x46, 0x1e, 0x54, 0x89, 0xc7, 0xce, 0xed, 0xa5, 0xf6, 0x3d, 0xec, - 0x1d, 0x52, 0x4a, 0x4e, 0x5e, 0x16, 0x74, 0xb1, 0xe2, 0xf0, 0x78, 0x44, 0x3b, 0xbe, 0x04, 0x63, - 0xb2, 0x43, 0xef, 0x75, 0xda, 0x5e, 0x7a, 0xf8, 0x2e, 0x1b, 0x30, 0x9c, 0xc0, 0xb4, 0x7f, 0xad, - 0x0c, 0x53, 0x3c, 0xd0, 0xa1, 0xa5, 0x16, 0x83, 0x0a, 0x58, 0xfa, 0x41, 0x5d, 0x2a, 0x9d, 0x0f, - 0xe4, 0xda, 0x61, 0xaf, 0x6c, 0xcc, 0x67, 0x34, 0x50, 0x90, 0xfe, 0x97, 0x52, 0x41, 0xfa, 0x7c, - 0xab, 0xbe, 0x71, 0x44, 0x3d, 0xfa, 0xda, 0x8a, 0xda, 0xff, 0x27, 0x25, 0x38, 0x91, 0xba, 0x0f, - 0x13, 0x7d, 0x3e, 0x79, 0x85, 0x92, 0x55, 0xc4, 0x31, 0xe0, 0x9e, 0x57, 0x24, 0x1e, 0xec, 0x22, - 0xa5, 0x47, 0xb4, 0x54, 0xec, 0xdf, 0x2f, 0xc1, 0x44, 0xf2, 0x22, 0xcf, 0xc7, 0x70, 0xa4, 0xde, - 0x02, 0x35, 0x76, 0x57, 0xdd, 0x0d, 0xd2, 0x93, 0xa7, 0x8d, 0xfc, 0x5a, 0x30, 0xd9, 0x88, 0x35, - 0xfc, 0xb1, 0xb8, 0x9f, 0xca, 0xfe, 0xa7, 0x16, 0x9c, 0xe1, 0x6f, 0x99, 0x9e, 0x87, 0x7f, 0x33, - 0x6f, 0x74, 0x5f, 0x29, 0xb6, 0x83, 0xa9, 0x12, 0xff, 0xfb, 0x8d, 0x2f, 0x35, 0x5e, 0x4e, 0x8b, - 0xde, 0x26, 0xa7, 0xc2, 0x63, 0xd8, 0xd9, 0x03, 0x4d, 0x06, 0xfb, 0xdf, 0x96, 0x60, 0x74, 0x79, - 0x6e, 0x41, 0x89, 0xf0, 0x8b, 0x50, 0x6b, 0x86, 0xc4, 0xd1, 0xee, 0x1f, 0x33, 0x8c, 0x4e, 0x02, - 0xb0, 0xc6, 0xa1, 0xbb, 0x28, 0x1e, 0x86, 0x1a, 0xa5, 0x77, 0x51, 0x3c, 0x4a, 0x35, 0xc2, 0x12, - 0x8e, 0x5e, 0x80, 0x2a, 0x4b, 0x56, 0xbf, 0x15, 0x4a, 0x8d, 0xa3, 0xb7, 0xd6, 0xac, 0x1d, 0x2f, - 0x62, 0x85, 0x41, 0x09, 0xb7, 0x82, 0x66, 0x44, 0x91, 0x53, 0x1e, 0x99, 0x79, 0xda, 0x8c, 0x17, - 0xb1, 0x84, 0xb3, 0x5a, 0xa3, 0xcc, 0x6b, 0x41, 0x91, 0x2b, 0xc9, 0x4e, 0x73, 0xf7, 0x06, 0x45, - 0xd7, 0x38, 0x07, 0xa9, 0x49, 0x9b, 0x4a, 0x18, 0x1d, 0x19, 0x2c, 0x61, 0xd4, 0xfe, 0xfd, 0x32, - 0xd4, 0xb4, 0x53, 0xcd, 0x15, 0x15, 0x5a, 0x0a, 0xb9, 0x42, 0xa2, 0xd1, 0xf3, 0x9b, 0x8a, 0x34, - 0x8f, 0x2a, 0x30, 0x0a, 0xb4, 0x7c, 0xbf, 0x05, 0xa3, 0xae, 0xef, 0xc6, 0xae, 0xc3, 0x7c, 0x83, - 0x42, 0x6e, 0xae, 0x14, 0x54, 0xc1, 0x63, 0x81, 0x53, 0x0e, 0x42, 0xf3, 0xe8, 0x5f, 0x31, 0xc3, - 0x26, 0x67, 0xf4, 0x61, 0x91, 0x9f, 0x58, 0x2e, 0xac, 0xcc, 0x51, 0x35, 0x95, 0x94, 0xd8, 0xa1, - 0x36, 0x76, 0x1c, 0x16, 0x54, 0x1d, 0x0c, 0x53, 0x52, 0xea, 0x2a, 0x23, 0xb5, 0x8b, 0x61, 0xcd, - 0x98, 0x33, 0xb2, 0x23, 0x40, 0xd9, 0xb1, 0x38, 0x60, 0xee, 0xd7, 0x45, 0xa8, 0x39, 0xdd, 0x38, - 0x68, 0xd3, 0x61, 0x12, 0x81, 0x03, 0x3a, 0xbb, 0x4d, 0x02, 0xb0, 0xc6, 0xb1, 0x7f, 0xb4, 0x02, - 0xa9, 0x7a, 0x29, 0x68, 0x07, 0x6a, 0xaa, 0x62, 0x4a, 0x31, 0xb9, 0xd4, 0x7a, 0x46, 0xa9, 0xce, - 0xa8, 0x26, 0xac, 0x99, 0xa1, 0x40, 0xba, 0x59, 0xf9, 0x6a, 0x7f, 0x6f, 0xda, 0xcd, 0x7a, 0xed, - 0x60, 0xa7, 0x6f, 0x74, 0xce, 0x5e, 0xe4, 0x95, 0x32, 0x67, 0xf6, 0xf5, 0xcc, 0x96, 0xf7, 0xf1, - 0xcc, 0x7e, 0x5c, 0x5c, 0x7a, 0x88, 0x49, 0xd4, 0xf5, 0x62, 0x31, 0x2b, 0xde, 0x5d, 0xe0, 0x6a, - 0xe3, 0x84, 0x75, 0xfd, 0x31, 0xfe, 0x1f, 0x1b, 0x4c, 0x93, 0xfe, 0xf3, 0xe1, 0x23, 0xf5, 0x9f, - 0x8f, 0x14, 0xea, 0x3f, 0xbf, 0x04, 0xc0, 0xe6, 0x38, 0xcf, 0x55, 0xa9, 0x32, 0xb7, 0xa6, 0x52, - 0x35, 0x58, 0x41, 0xb0, 0x81, 0x65, 0x7f, 0x0b, 0x24, 0x0b, 0xe8, 0xa1, 0x69, 0x59, 0xaf, 0x8f, - 0x9f, 0x0c, 0xb2, 0x34, 0xe1, 0x44, 0x69, 0xbd, 0x5f, 0xb0, 0xc0, 0xac, 0xf2, 0x87, 0x5e, 0xe5, - 0xe5, 0x04, 0xad, 0x22, 0x4e, 0x9a, 0x0c, 0xba, 0x33, 0x4b, 0x4e, 0x27, 0x15, 0xfd, 0x24, 0x6b, - 0x0a, 0x9e, 0x7b, 0x27, 0x54, 0x25, 0xf4, 0x40, 0x46, 0xf3, 0x47, 0xe1, 0x94, 0x2c, 0x39, 0x22, - 0x0f, 0x85, 0x44, 0x14, 0xc2, 0xf1, 0x64, 0x9c, 0xfc, 0xa2, 0x05, 0x17, 0xd2, 0x1d, 0x88, 0x96, - 0x02, 0xdf, 0x8d, 0x83, 0xb0, 0x41, 0xe2, 0xd8, 0xf5, 0x37, 0x58, 0xd5, 0xe7, 0x7b, 0x4e, 0x28, - 0xaf, 0x3c, 0x63, 0x02, 0xf3, 0x8e, 0x13, 0xfa, 0x98, 0xb5, 0xa2, 0x1e, 0x0c, 0xf3, 0x80, 0x7a, - 0xb1, 0x1b, 0x3a, 0xe4, 0xda, 0xc8, 0x19, 0x0e, 0xbd, 0x1d, 0xe3, 0xc1, 0xfc, 0x58, 0x30, 0xb4, - 0xbf, 0x62, 0x01, 0x5a, 0xde, 0x26, 0x61, 0xe8, 0xb6, 0x8c, 0x14, 0x00, 0x76, 0x79, 0xb0, 0x71, - 0x49, 0xb0, 0x59, 0x10, 0x27, 0x75, 0x79, 0xb0, 0xf1, 0x2f, 0xff, 0xf2, 0xe0, 0xd2, 0xc1, 0x2e, - 0x0f, 0x46, 0xcb, 0x70, 0xa6, 0xcd, 0xb7, 0x73, 0xfc, 0x42, 0x4e, 0xbe, 0xb7, 0x53, 0xb5, 0x1b, - 0xce, 0xde, 0xdf, 0x9d, 0x3e, 0xb3, 0x94, 0x87, 0x80, 0xf3, 0x9f, 0xb3, 0xdf, 0x09, 0x88, 0x87, - 0xc2, 0xce, 0xe5, 0x85, 0xaf, 0xf6, 0x75, 0x77, 0xd8, 0x5f, 0xac, 0xc0, 0x89, 0xd4, 0x85, 0x38, - 0x74, 0x2b, 0x9d, 0x8d, 0x97, 0x3d, 0xb4, 0x1e, 0xcf, 0x76, 0x6f, 0xa0, 0x08, 0x5c, 0x1f, 0x2a, - 0xae, 0xdf, 0xe9, 0xc6, 0xc5, 0x94, 0x8e, 0xe1, 0x9d, 0x58, 0xa0, 0x04, 0x8d, 0xf3, 0x09, 0xfa, - 0x17, 0x73, 0x36, 0x45, 0xc6, 0xf3, 0x26, 0x36, 0x3b, 0x43, 0x8f, 0xc8, 0xdd, 0xf2, 0x71, 0x1d, - 0x5d, 0x5b, 0x29, 0xc2, 0x97, 0x9c, 0x9a, 0x2c, 0x47, 0x1d, 0x7a, 0xf5, 0x33, 0x25, 0x18, 0x35, - 0x3e, 0x1a, 0xfa, 0xf1, 0x64, 0x0d, 0x5c, 0xab, 0xb8, 0x57, 0x62, 0xf4, 0x67, 0x74, 0x95, 0x5b, - 0xfe, 0x4a, 0xcf, 0x65, 0xcb, 0xdf, 0x3e, 0xd8, 0x9d, 0x3e, 0x99, 0x2a, 0x70, 0x9b, 0x28, 0x89, - 0x7b, 0xee, 0xbb, 0xe1, 0x44, 0x8a, 0x4c, 0xce, 0x2b, 0xaf, 0x9a, 0xaf, 0x7c, 0x68, 0xb7, 0x9f, - 0x39, 0x64, 0x3f, 0x45, 0x87, 0x4c, 0x54, 0xac, 0x08, 0x3c, 0x32, 0x80, 0xcf, 0x33, 0xb5, 0xcf, - 0x28, 0x0d, 0x58, 0x98, 0xe6, 0x79, 0xa8, 0x76, 0x02, 0xcf, 0x6d, 0xba, 0xaa, 0x84, 0x3e, 0x2b, - 0x85, 0xb3, 0x22, 0xda, 0xb0, 0x82, 0xa2, 0x7b, 0x50, 0xbb, 0x7b, 0x2f, 0xe6, 0xc7, 0x8d, 0xe2, - 0x48, 0xa3, 0xa8, 0x53, 0x46, 0x65, 0xb4, 0xa8, 0xf3, 0x4c, 0xac, 0x79, 0x21, 0x1b, 0x86, 0x99, - 0x12, 0x94, 0xd9, 0xab, 0xec, 0xb8, 0x85, 0x69, 0xc7, 0x08, 0x0b, 0x88, 0xfd, 0xaf, 0x47, 0xe1, - 0x74, 0xde, 0xad, 0x64, 0xe8, 0x23, 0x30, 0xcc, 0xfb, 0x58, 0xcc, 0xc5, 0x97, 0x79, 0x3c, 0xae, - 0x32, 0x82, 0xa2, 0x5b, 0xec, 0x37, 0x16, 0x3c, 0x05, 0x77, 0xcf, 0x59, 0x13, 0x33, 0xe4, 0x68, - 0xb8, 0x2f, 0x3a, 0x9a, 0xfb, 0xa2, 0xc3, 0xb9, 0x7b, 0xce, 0x1a, 0xda, 0x81, 0xca, 0x86, 0x1b, - 0x13, 0x47, 0x38, 0x69, 0xee, 0x1c, 0x09, 0x73, 0xe2, 0x70, 0x2b, 0x8d, 0xfd, 0xc4, 0x9c, 0x21, - 0xfa, 0xb2, 0x05, 0x27, 0xd6, 0x92, 0x15, 0xb1, 0x84, 0xf0, 0x74, 0x8e, 0xe0, 0xe6, 0xb9, 0x24, - 0x23, 0x7e, 0x7b, 0x76, 0xaa, 0x11, 0xa7, 0xbb, 0x83, 0x3e, 0x61, 0xc1, 0xc8, 0xba, 0xeb, 0x19, - 0x37, 0xdc, 0x1c, 0xc1, 0xc7, 0xb9, 0xc2, 0x18, 0xe8, 0x1d, 0x07, 0xff, 0x1f, 0x61, 0xc9, 0xb9, - 0x9f, 0xa6, 0x1a, 0x3e, 0xac, 0xa6, 0x1a, 0x79, 0x44, 0x9a, 0xea, 0xd3, 0x16, 0xd4, 0xd4, 0x48, - 0x8b, 0xca, 0x42, 0xef, 0x3f, 0xc2, 0x4f, 0xce, 0x3d, 0x53, 0xea, 0x2f, 0xd6, 0xcc, 0xd1, 0xeb, - 0x16, 0x8c, 0x3a, 0xaf, 0x75, 0x43, 0xd2, 0x22, 0xdb, 0x41, 0x27, 0x12, 0x25, 0x7f, 0x5f, 0x29, - 0xbe, 0x33, 0xb3, 0x94, 0xc9, 0x3c, 0xd9, 0x5e, 0xee, 0x44, 0x22, 0xb3, 0x5e, 0x37, 0x60, 0xb3, - 0x0b, 0xe8, 0xfb, 0xb4, 0x1e, 0x87, 0x22, 0x0a, 0xbf, 0xe7, 0xf5, 0x66, 0xa0, 0x42, 0x11, 0x04, - 0x9e, 0x6a, 0x06, 0x7e, 0xec, 0xfa, 0x5d, 0xb2, 0xec, 0x63, 0xd2, 0x09, 0x6e, 0x06, 0xf1, 0x95, - 0xa0, 0xeb, 0xb7, 0x2e, 0x87, 0x61, 0x10, 0xb2, 0xd2, 0x49, 0xc6, 0x7d, 0xc7, 0x73, 0xfd, 0x51, - 0xf1, 0x5e, 0x74, 0x0e, 0x63, 0x33, 0xec, 0x96, 0x60, 0x7a, 0x9f, 0xc1, 0x46, 0x2f, 0xc1, 0x58, - 0x10, 0x6e, 0x38, 0xbe, 0xfb, 0x9a, 0x59, 0x0d, 0x50, 0x19, 0xa4, 0xcb, 0x06, 0x0c, 0x27, 0x30, - 0xcd, 0x32, 0x51, 0xa5, 0x7d, 0xca, 0x44, 0x5d, 0x80, 0xa1, 0x90, 0x74, 0x82, 0xf4, 0xbe, 0x8a, - 0x25, 0xa0, 0x32, 0x08, 0x7a, 0x1a, 0xca, 0x4e, 0xc7, 0x15, 0x4e, 0x46, 0xb5, 0x5d, 0x9c, 0x5d, - 0x59, 0xc0, 0xb4, 0x3d, 0x51, 0xb5, 0xae, 0x72, 0x2c, 0x55, 0xeb, 0xa8, 0xc6, 0x14, 0xc7, 0x68, - 0xc3, 0x5a, 0x63, 0x26, 0x8f, 0xb7, 0xec, 0x2f, 0x94, 0xe1, 0xe9, 0x3d, 0x97, 0x96, 0x0e, 0x61, - 0xb7, 0xf6, 0x08, 0x61, 0x97, 0xc3, 0x53, 0xda, 0x6f, 0x78, 0xca, 0x7d, 0x86, 0xe7, 0x13, 0x54, - 0x62, 0xc8, 0x2a, 0x8a, 0x42, 0x49, 0x1c, 0x32, 0xad, 0xa0, 0x5f, 0x51, 0x46, 0x21, 0x2c, 0x24, - 0x14, 0x6b, 0xbe, 0x74, 0xbb, 0x94, 0x28, 0x91, 0x54, 0x29, 0x42, 0x63, 0xf6, 0xad, 0x64, 0xc8, - 0xc5, 0x44, 0xbf, 0xba, 0x4b, 0xf6, 0x2f, 0x0f, 0xc1, 0xb3, 0x03, 0x28, 0x3a, 0x73, 0x16, 0x5b, - 0x03, 0xce, 0xe2, 0xaf, 0xf1, 0xcf, 0xf4, 0xa9, 0xdc, 0xcf, 0x84, 0x8b, 0xff, 0x4c, 0x7b, 0x7f, - 0x21, 0x76, 0x12, 0xe1, 0x47, 0xa4, 0xd9, 0x0d, 0x79, 0x3a, 0x8f, 0x91, 0x9d, 0xbe, 0x20, 0xda, - 0xb1, 0xc2, 0xa0, 0xdb, 0xdf, 0xa6, 0x43, 0x97, 0xff, 0x48, 0x41, 0x25, 0x71, 0xcc, 0x44, 0x77, - 0x6e, 0x7d, 0xcd, 0xcd, 0x52, 0x09, 0xc0, 0xd9, 0xd8, 0xbf, 0x6e, 0xc1, 0xb9, 0xfe, 0xd6, 0x08, - 0x7a, 0x1b, 0x8c, 0xae, 0xb1, 0xa0, 0xca, 0x25, 0x16, 0x3a, 0x25, 0xa6, 0x0e, 0x7b, 0x5f, 0xdd, - 0x8c, 0x4d, 0x1c, 0x34, 0x07, 0x93, 0x66, 0x34, 0xe6, 0x92, 0x11, 0x73, 0xc5, 0xfc, 0x25, 0xab, - 0x69, 0x20, 0xce, 0xe2, 0xa3, 0x19, 0x80, 0xd8, 0x8d, 0x3d, 0xc2, 0x9f, 0xe6, 0x13, 0x8d, 0x39, - 0x14, 0x57, 0x55, 0x2b, 0x36, 0x30, 0xec, 0xaf, 0x96, 0xf3, 0x5f, 0x83, 0x5b, 0xb9, 0x07, 0x99, - 0xfd, 0x62, 0x6e, 0x97, 0x06, 0x90, 0xd0, 0xe5, 0xe3, 0x96, 0xd0, 0x43, 0xfd, 0x24, 0x34, 0x9a, - 0x87, 0x93, 0xc6, 0x0d, 0xca, 0xbc, 0xa8, 0x12, 0x3f, 0x9c, 0x52, 0x15, 0x11, 0x57, 0x52, 0x70, - 0x9c, 0x79, 0xe2, 0x31, 0x9f, 0xaa, 0xbf, 0x51, 0x82, 0xb3, 0x7d, 0x37, 0x16, 0xc7, 0xa4, 0x81, - 0xcc, 0xcf, 0x3f, 0x74, 0x3c, 0x9f, 0xdf, 0xfc, 0x28, 0x95, 0x7d, 0x3f, 0xca, 0x20, 0xea, 0xfc, - 0x0f, 0x4a, 0x7d, 0x17, 0x0b, 0xdd, 0x88, 0x7e, 0xdd, 0x8e, 0xe4, 0xcb, 0x30, 0xee, 0x74, 0x3a, - 0x1c, 0x8f, 0x65, 0x68, 0xa4, 0xaa, 0xb4, 0xce, 0x9a, 0x40, 0x9c, 0xc4, 0x1d, 0x68, 0x60, 0xff, - 0xc4, 0x82, 0x1a, 0x26, 0xeb, 0x5c, 0xc2, 0xa1, 0xbb, 0x62, 0x88, 0xac, 0x22, 0xae, 0xca, 0xa0, - 0x03, 0x1b, 0xb9, 0xac, 0x10, 0x43, 0xde, 0x60, 0x1f, 0xb6, 0xce, 0x86, 0xba, 0x7e, 0xb8, 0xdc, - 0xff, 0xfa, 0x61, 0xfb, 0x57, 0x6a, 0xf4, 0xf5, 0x3a, 0xc1, 0x5c, 0x48, 0x5a, 0x11, 0xfd, 0xbe, - 0xdd, 0xd0, 0x13, 0x93, 0x44, 0x7d, 0xdf, 0x5b, 0x78, 0x11, 0xd3, 0xf6, 0xc4, 0x39, 0x65, 0xe9, - 0x40, 0x35, 0x2a, 0xcb, 0xfb, 0xd6, 0xa8, 0x7c, 0x19, 0xc6, 0xa3, 0x68, 0x73, 0x25, 0x74, 0xb7, - 0x9d, 0x98, 0xdc, 0x20, 0xb2, 0x80, 0x94, 0xae, 0xd7, 0xd6, 0xb8, 0xa6, 0x81, 0x38, 0x89, 0x8b, - 0xae, 0xc2, 0xa4, 0xae, 0x14, 0x49, 0xc2, 0x98, 0xa5, 0x40, 0xf2, 0x99, 0xa0, 0x8a, 0x03, 0xe9, - 0xda, 0x92, 0x02, 0x01, 0x67, 0x9f, 0xa1, 0x32, 0x37, 0xd1, 0x48, 0x3b, 0x32, 0x9c, 0x94, 0xb9, - 0x09, 0x3a, 0xb4, 0x2f, 0x99, 0x27, 0xd0, 0x12, 0x9c, 0xe2, 0x13, 0x63, 0xb6, 0xd3, 0x31, 0xde, - 0x68, 0x24, 0x79, 0x3f, 0xc1, 0xd5, 0x2c, 0x0a, 0xce, 0x7b, 0x0e, 0xbd, 0x08, 0xa3, 0xaa, 0x79, - 0x61, 0x5e, 0x1c, 0xad, 0x29, 0xd7, 0x9e, 0x22, 0xb3, 0xd0, 0xc2, 0x26, 0x1e, 0x7a, 0x2f, 0x3c, - 0xa9, 0xff, 0xf2, 0x94, 0x7a, 0x7e, 0xee, 0x3c, 0x2f, 0x8a, 0xf0, 0xaa, 0xeb, 0xef, 0xae, 0xe6, - 0xa2, 0xb5, 0x70, 0xbf, 0xe7, 0xd1, 0x1a, 0x9c, 0x53, 0xa0, 0xcb, 0x7e, 0xcc, 0x92, 0x5e, 0x23, - 0x52, 0x77, 0x22, 0x16, 0x41, 0x01, 0xec, 0x3d, 0x6d, 0x41, 0xfd, 0xdc, 0x55, 0x37, 0xbe, 0x96, - 0x87, 0x89, 0x17, 0xf1, 0x1e, 0x54, 0xd0, 0x45, 0xa8, 0x11, 0xdf, 0x59, 0xf3, 0xc8, 0xf2, 0xdc, - 0x82, 0xd8, 0x91, 0xea, 0x2c, 0x09, 0x09, 0xc0, 0x1a, 0x47, 0xc5, 0xf9, 0x8f, 0xf5, 0x8b, 0xf3, - 0x47, 0x2b, 0x70, 0x7a, 0xa3, 0xd9, 0xa1, 0x56, 0xa6, 0xdb, 0x24, 0xb3, 0x4d, 0x16, 0x58, 0x4c, - 0x3f, 0x0c, 0xbf, 0x38, 0x42, 0x25, 0x4c, 0x5d, 0x9d, 0x5b, 0xc9, 0xe0, 0xe0, 0xdc, 0x27, 0x59, - 0x00, 0x7a, 0x18, 0xec, 0xf4, 0xa6, 0x4e, 0xa5, 0x02, 0xd0, 0x69, 0x23, 0xe6, 0x30, 0x74, 0x1d, - 0x10, 0x4b, 0x1a, 0xbc, 0x16, 0xc7, 0x1d, 0x65, 0xd6, 0x4e, 0x9d, 0x4e, 0x96, 0xe4, 0xbc, 0x92, - 0xc1, 0xc0, 0x39, 0x4f, 0x51, 0xab, 0xc7, 0x0f, 0x18, 0xf5, 0xa9, 0x27, 0x93, 0x56, 0xcf, 0x4d, - 0xde, 0x8c, 0x25, 0x1c, 0x7d, 0x00, 0xa6, 0xba, 0x11, 0x61, 0x1b, 0xe6, 0x3b, 0x41, 0xb8, 0xe5, - 0x05, 0x4e, 0x6b, 0x81, 0xdd, 0x73, 0x1c, 0xf7, 0xa6, 0xa6, 0x18, 0xf3, 0x0b, 0xe2, 0xd9, 0xa9, - 0x5b, 0x7d, 0xf0, 0x70, 0x5f, 0x0a, 0xe9, 0x9a, 0xb2, 0x67, 0x07, 0xac, 0x29, 0xbb, 0x02, 0xa7, - 0xa5, 0x5e, 0x5b, 0x9e, 0x5b, 0x50, 0x2f, 0x3d, 0x75, 0x2e, 0x79, 0x71, 0xe2, 0x42, 0x0e, 0x0e, - 0xce, 0x7d, 0xd2, 0xfe, 0x63, 0x0b, 0xc6, 0x95, 0x04, 0x3b, 0x86, 0x24, 0x66, 0x2f, 0x99, 0xc4, - 0x7c, 0xf5, 0xf0, 0x3a, 0x80, 0xf5, 0xbc, 0x4f, 0xaa, 0xcd, 0xcf, 0x4e, 0x00, 0x68, 0x3d, 0xa1, - 0x54, 0xb4, 0xd5, 0x57, 0x45, 0x3f, 0xb6, 0x32, 0x3a, 0xaf, 0x46, 0x68, 0xe5, 0xd1, 0xd6, 0x08, - 0x6d, 0xc0, 0x19, 0x39, 0xa5, 0xf8, 0x91, 0xf2, 0xb5, 0x20, 0x52, 0x22, 0xdf, 0xb8, 0x09, 0x73, - 0x21, 0x0f, 0x09, 0xe7, 0x3f, 0x9b, 0xb0, 0xed, 0x46, 0xf6, 0xb5, 0xed, 0x94, 0x94, 0x5b, 0x5c, - 0x97, 0xf7, 0xd4, 0xa6, 0xa4, 0xdc, 0xe2, 0x95, 0x06, 0xd6, 0x38, 0xf9, 0xaa, 0xae, 0x56, 0x90, - 0xaa, 0x83, 0x03, 0xab, 0x3a, 0x29, 0x74, 0x47, 0xfb, 0x0a, 0x5d, 0x79, 0x74, 0x35, 0xd6, 0xf7, - 0xe8, 0xea, 0x5d, 0x30, 0xe1, 0xfa, 0x9b, 0x24, 0x74, 0x63, 0xd2, 0x62, 0x6b, 0x81, 0x09, 0xe4, - 0xaa, 0x36, 0x74, 0x16, 0x12, 0x50, 0x9c, 0xc2, 0x4e, 0x6a, 0x8a, 0x89, 0x01, 0x34, 0x45, 0x1f, - 0xfd, 0x7c, 0xa2, 0x18, 0xfd, 0x7c, 0xf2, 0xf0, 0xfa, 0x79, 0xf2, 0x48, 0xf5, 0x33, 0x2a, 0x44, - 0x3f, 0x0f, 0xa4, 0xfa, 0x8c, 0x4d, 0xfa, 0xe9, 0x7d, 0x36, 0xe9, 0xfd, 0x94, 0xf3, 0x99, 0x87, - 0x56, 0xce, 0xf9, 0x7a, 0xf7, 0x89, 0x37, 0xf4, 0x6e, 0x11, 0x7a, 0x97, 0x7e, 0xff, 0x16, 0xe9, - 0xc4, 0x9b, 0x53, 0x4f, 0xb1, 0xc9, 0xaa, 0xbe, 0xff, 0x3c, 0x6d, 0xc4, 0x1c, 0x86, 0x62, 0xb8, - 0x70, 0x8f, 0xac, 0x6d, 0x06, 0xc1, 0xd6, 0x92, 0xe3, 0xbb, 0xeb, 0x44, 0xd4, 0xc1, 0xbf, 0xe3, - 0x84, 0x6d, 0x51, 0x83, 0xbc, 0x35, 0x75, 0x9e, 0x75, 0xe1, 0x79, 0xf1, 0xfc, 0x85, 0x3b, 0xfb, - 0xe0, 0xe3, 0x7d, 0x29, 0xda, 0x9f, 0x2e, 0xc1, 0x19, 0xad, 0x34, 0xa9, 0xa8, 0x72, 0xd7, 0xa9, - 0xda, 0x60, 0xf7, 0xd2, 0xf3, 0xb3, 0x78, 0x23, 0x9b, 0x5f, 0xd7, 0x33, 0x50, 0x10, 0x6c, 0x60, - 0xb1, 0xa4, 0x78, 0x12, 0xb2, 0x1b, 0x91, 0xd2, 0x1a, 0x75, 0x4e, 0xb4, 0x63, 0x85, 0x41, 0xbf, - 0x0f, 0xfd, 0x2d, 0x6a, 0xb3, 0xa4, 0x6b, 0xed, 0xcf, 0x69, 0x10, 0x36, 0xf1, 0xd0, 0xf3, 0x9c, - 0x09, 0x93, 0xe6, 0x54, 0xab, 0x8e, 0xf1, 0x1d, 0xaf, 0x12, 0xe0, 0x0a, 0x2a, 0xbb, 0xc3, 0x8a, - 0x36, 0x54, 0xb2, 0xdd, 0x61, 0xe1, 0xad, 0x0a, 0xc3, 0xfe, 0xef, 0x16, 0x9c, 0xcd, 0x1d, 0x8a, - 0x63, 0xb0, 0x94, 0x76, 0x92, 0x96, 0x52, 0xa3, 0xa8, 0xdd, 0xb2, 0xf1, 0x16, 0x7d, 0xac, 0xa6, - 0x7f, 0x67, 0xc1, 0x84, 0xc6, 0x3f, 0x86, 0x57, 0x75, 0x93, 0xaf, 0x5a, 0x9c, 0x63, 0xa0, 0x96, - 0x79, 0xb7, 0x5f, 0x2b, 0x81, 0xba, 0xff, 0x62, 0xb6, 0x19, 0x0f, 0x96, 0x11, 0xd7, 0x83, 0x61, - 0x16, 0xdc, 0x12, 0x15, 0x13, 0xb8, 0x97, 0xe4, 0xcf, 0x02, 0x65, 0xf4, 0x59, 0x23, 0xfb, 0x1b, - 0x61, 0xc1, 0x90, 0xdd, 0xd7, 0x25, 0x97, 0x7a, 0x39, 0x69, 0x0f, 0xa9, 0x25, 0xad, 0x30, 0xa8, - 0x2e, 0x77, 0x9b, 0x81, 0x3f, 0xe7, 0x39, 0x51, 0x24, 0xcc, 0x4b, 0xa5, 0xcb, 0x17, 0x24, 0x00, - 0x6b, 0x1c, 0x16, 0xf7, 0xe2, 0x46, 0x1d, 0xcf, 0xe9, 0x19, 0xee, 0x1f, 0xa3, 0x06, 0x99, 0x02, - 0x61, 0x13, 0xcf, 0x6e, 0xc3, 0x54, 0xf2, 0x25, 0xe6, 0xc9, 0x3a, 0x0b, 0x3e, 0x1f, 0x68, 0x38, - 0x2f, 0x42, 0xcd, 0x61, 0x4f, 0x2d, 0x76, 0x1d, 0x21, 0x13, 0x74, 0x08, 0xb6, 0x04, 0x60, 0x8d, - 0x63, 0x7f, 0x2b, 0x9c, 0xca, 0x19, 0xb3, 0x01, 0x62, 0xfb, 0x7e, 0xa9, 0x04, 0x27, 0x92, 0x4f, - 0x46, 0x2c, 0x3d, 0x93, 0xf7, 0xd9, 0x8d, 0x9a, 0xc1, 0x36, 0x09, 0x7b, 0xb4, 0x1b, 0x56, 0x2a, - 0x3d, 0x33, 0x83, 0x81, 0x73, 0x9e, 0x62, 0x57, 0xd1, 0xb4, 0xd4, 0xab, 0xcb, 0xe9, 0x71, 0xbb, - 0xc8, 0xe9, 0xa1, 0x47, 0xd6, 0x8c, 0x47, 0x52, 0x2c, 0xb1, 0xc9, 0x9f, 0x9a, 0x66, 0x2c, 0xb9, - 0xa4, 0xde, 0x75, 0xbd, 0xd8, 0xf5, 0xc5, 0x2b, 0x8b, 0x89, 0xa3, 0x4c, 0xb3, 0xa5, 0x2c, 0x0a, - 0xce, 0x7b, 0xce, 0xfe, 0xca, 0x10, 0xa8, 0x22, 0x2d, 0x2c, 0x5e, 0xb4, 0xa0, 0x68, 0xdb, 0x83, - 0x26, 0xf9, 0xaa, 0x2f, 0x3d, 0xb4, 0x57, 0x00, 0x17, 0x77, 0xe0, 0x99, 0x9e, 0x7e, 0x35, 0x60, - 0xab, 0x1a, 0x84, 0x4d, 0x3c, 0xda, 0x13, 0xcf, 0xdd, 0x26, 0xfc, 0xa1, 0xe1, 0x64, 0x4f, 0x16, - 0x25, 0x00, 0x6b, 0x1c, 0x56, 0xed, 0xdd, 0x5d, 0x5f, 0x17, 0xde, 0x28, 0x5d, 0xed, 0xdd, 0x5d, - 0x5f, 0xc7, 0x0c, 0xc2, 0x2f, 0x2b, 0x0b, 0xb6, 0xc4, 0x76, 0xc4, 0xb8, 0xac, 0x2c, 0xd8, 0xc2, - 0x0c, 0x42, 0xbf, 0x92, 0x1f, 0x84, 0x6d, 0xc7, 0x73, 0x5f, 0x23, 0x2d, 0xc5, 0x45, 0x6c, 0x43, - 0xd4, 0x57, 0xba, 0x99, 0x45, 0xc1, 0x79, 0xcf, 0xd1, 0x09, 0xdd, 0x09, 0x49, 0xcb, 0x6d, 0xc6, - 0x26, 0x35, 0x48, 0x4e, 0xe8, 0x95, 0x0c, 0x06, 0xce, 0x79, 0x0a, 0xcd, 0xc2, 0x09, 0x59, 0x64, - 0x47, 0x16, 0xa8, 0x1c, 0x4d, 0x56, 0xb9, 0xc3, 0x49, 0x30, 0x4e, 0xe3, 0x53, 0x89, 0xd5, 0x16, - 0x45, 0x93, 0xd9, 0xae, 0xc5, 0x90, 0x58, 0xb2, 0x98, 0x32, 0x56, 0x18, 0xf6, 0xc7, 0xcb, 0x54, - 0xc3, 0xf6, 0xa9, 0x4d, 0x7e, 0x6c, 0xd1, 0xdd, 0xc9, 0x19, 0x39, 0x34, 0xc0, 0x8c, 0x7c, 0x07, - 0x8c, 0xdd, 0x8d, 0x02, 0x5f, 0x45, 0x4e, 0x57, 0xfa, 0x46, 0x4e, 0x1b, 0x58, 0xf9, 0x91, 0xd3, - 0xc3, 0x45, 0x45, 0x4e, 0x8f, 0x3c, 0x64, 0xe4, 0xf4, 0xbf, 0xac, 0x80, 0xba, 0x8d, 0xf6, 0x26, - 0x89, 0xef, 0x05, 0xe1, 0x96, 0xeb, 0x6f, 0xb0, 0x82, 0x31, 0x5f, 0xb6, 0x64, 0xcd, 0x99, 0x45, - 0x33, 0xb3, 0x78, 0xbd, 0xa0, 0x1b, 0x45, 0x13, 0xcc, 0x66, 0x56, 0x0d, 0x46, 0x3c, 0x02, 0x27, - 0x55, 0xdb, 0x46, 0x1c, 0x2e, 0x24, 0x7a, 0x84, 0xbe, 0x1b, 0x40, 0xba, 0xee, 0xd7, 0xa5, 0x04, - 0x5e, 0x28, 0xa6, 0x7f, 0x98, 0xac, 0x6b, 0xfb, 0x76, 0x55, 0x31, 0xc1, 0x06, 0x43, 0xf4, 0x69, - 0x9d, 0x75, 0xcd, 0x53, 0xad, 0x3e, 0x7c, 0x24, 0x63, 0x33, 0x48, 0xce, 0x35, 0x86, 0x11, 0xd7, - 0xdf, 0xa0, 0xf3, 0x44, 0x44, 0x98, 0xbe, 0x39, 0xaf, 0x1e, 0xd9, 0x62, 0xe0, 0xb4, 0xea, 0x8e, - 0xe7, 0xf8, 0x4d, 0x12, 0x2e, 0x70, 0x74, 0xbd, 0x1d, 0x13, 0x0d, 0x58, 0x12, 0xca, 0x5c, 0x99, - 0x5b, 0x19, 0xe4, 0xca, 0xdc, 0x73, 0xdf, 0x09, 0x93, 0x99, 0x8f, 0x79, 0xa0, 0x14, 0xeb, 0x43, - 0x54, 0x22, 0xfb, 0xe5, 0x61, 0xad, 0xb4, 0x6e, 0x06, 0x2d, 0x7e, 0x03, 0x6b, 0xa8, 0xbf, 0xa8, - 0xb0, 0x5f, 0x0b, 0x9c, 0x22, 0x4a, 0xcd, 0x18, 0x8d, 0xd8, 0x64, 0x49, 0xe7, 0x68, 0xc7, 0x09, - 0x89, 0x7f, 0xd4, 0x73, 0x74, 0x45, 0x31, 0xc1, 0x06, 0x43, 0xb4, 0x99, 0xc8, 0x05, 0xbc, 0x72, - 0xf8, 0x5c, 0x40, 0x56, 0x25, 0x36, 0xef, 0xa2, 0xc2, 0xd7, 0x2d, 0x98, 0xf0, 0x13, 0x33, 0xb7, - 0x98, 0xb0, 0xff, 0xfc, 0x55, 0xc1, 0x2f, 0x33, 0x4f, 0xb6, 0xe1, 0x14, 0xff, 0x3c, 0x95, 0x56, - 0x39, 0xa0, 0x4a, 0xd3, 0x37, 0x40, 0x0f, 0xf7, 0xbb, 0x01, 0x1a, 0xf9, 0xea, 0x6a, 0xfe, 0x91, - 0x22, 0x2a, 0xaa, 0x24, 0xee, 0xe5, 0x87, 0x9c, 0x3b, 0xf9, 0xef, 0x98, 0xa9, 0xc2, 0x07, 0xbf, - 0xa2, 0x7d, 0xbc, 0x5f, 0x4a, 0xb1, 0xfd, 0xbf, 0x87, 0xe0, 0xa4, 0x1c, 0x11, 0x99, 0x32, 0x44, - 0xf5, 0x23, 0xe7, 0xab, 0x6d, 0x65, 0xa5, 0x1f, 0xaf, 0x49, 0x00, 0xd6, 0x38, 0xd4, 0x1e, 0xeb, - 0x46, 0x64, 0xb9, 0x43, 0xfc, 0x45, 0x77, 0x2d, 0x12, 0xc7, 0xf4, 0x6a, 0xa1, 0xdc, 0xd2, 0x20, - 0x6c, 0xe2, 0xb1, 0x7c, 0xe6, 0xa6, 0x59, 0x54, 0x44, 0xe7, 0x33, 0x0b, 0x43, 0x55, 0xc2, 0xd1, - 0x8f, 0xe5, 0x5e, 0x96, 0x52, 0x4c, 0xc2, 0x6d, 0x26, 0x53, 0xea, 0x60, 0xb7, 0xa4, 0xa0, 0x7f, - 0x68, 0xc1, 0x19, 0xde, 0x2a, 0x47, 0xf2, 0x56, 0xa7, 0xe5, 0xc4, 0x24, 0x2a, 0xe6, 0x92, 0xbb, - 0x9c, 0xfe, 0x69, 0x6f, 0x7b, 0x1e, 0x5b, 0x9c, 0xdf, 0x1b, 0xf4, 0x79, 0x0b, 0x4e, 0x6c, 0x25, - 0x8a, 0x82, 0x49, 0xd5, 0x71, 0xd8, 0x8a, 0x39, 0x09, 0xa2, 0x7a, 0xa9, 0x25, 0xdb, 0x23, 0x9c, - 0xe6, 0x6e, 0xff, 0xa5, 0x05, 0xa6, 0x18, 0x3d, 0xfe, 0x5a, 0x62, 0x07, 0x37, 0x05, 0xa5, 0x75, - 0x59, 0xe9, 0x6b, 0x5d, 0x3e, 0x0d, 0xe5, 0xae, 0xdb, 0x12, 0xfb, 0x0b, 0x1d, 0x18, 0xb0, 0x30, - 0x8f, 0x69, 0xbb, 0xfd, 0x7f, 0x2b, 0xda, 0x27, 0x21, 0xf2, 0x58, 0xbf, 0x2e, 0x5e, 0xdb, 0x57, - 0xc5, 0x82, 0xf9, 0x9b, 0xdf, 0xce, 0x14, 0x0b, 0x9e, 0x7f, 0xf8, 0x74, 0x65, 0x3e, 0x50, 0xfd, - 0x6a, 0x05, 0x8f, 0xec, 0x5b, 0x2b, 0xb8, 0x4a, 0xb7, 0x62, 0xcc, 0xc9, 0x58, 0x4d, 0x74, 0xae, - 0x7a, 0x4d, 0xb4, 0x3f, 0xd8, 0x9d, 0xae, 0x3f, 0x7c, 0xf7, 0x24, 0x15, 0xac, 0xf8, 0xa0, 0xef, - 0x82, 0x1a, 0xfd, 0xcd, 0xd2, 0xab, 0xc5, 0x66, 0xef, 0x15, 0x25, 0x43, 0x25, 0xa0, 0xd0, 0x1c, - 0x6e, 0xcd, 0x0f, 0x6d, 0x43, 0x8d, 0x22, 0x72, 0xe6, 0x7c, 0x6f, 0xf8, 0x1e, 0x95, 0xec, 0x2c, - 0x01, 0x0f, 0x76, 0xa7, 0xe7, 0x1e, 0x9e, 0xb9, 0x22, 0x83, 0x35, 0x2b, 0x43, 0x75, 0x8e, 0xf6, - 0x53, 0x9d, 0xf6, 0xff, 0x19, 0xd2, 0xf3, 0x5f, 0xd4, 0x99, 0xfe, 0xba, 0x98, 0xff, 0x2f, 0xa5, - 0xe6, 0xff, 0x85, 0xcc, 0xfc, 0x9f, 0xa0, 0x63, 0x96, 0x53, 0xf5, 0xfa, 0xb8, 0x8d, 0x89, 0xfd, - 0x7d, 0x16, 0xcc, 0x8a, 0x7a, 0xb5, 0xeb, 0x86, 0x24, 0x5a, 0x09, 0xbb, 0xbe, 0xeb, 0x6f, 0xb0, - 0x29, 0x5c, 0x35, 0xad, 0xa8, 0x04, 0x18, 0xa7, 0xf1, 0xd1, 0x0b, 0x50, 0xa5, 0xf3, 0xe2, 0x8e, - 0xb3, 0xcd, 0x67, 0xa0, 0x51, 0xdb, 0xb3, 0x21, 0xda, 0xb1, 0xc2, 0x40, 0x9b, 0x70, 0x5e, 0x12, - 0x98, 0x27, 0x1e, 0xa1, 0x2f, 0xc4, 0x02, 0x22, 0xc3, 0x36, 0x4f, 0x57, 0xe0, 0x31, 0x2d, 0xdf, - 0x28, 0x28, 0x9c, 0xc7, 0x7b, 0xe0, 0xe2, 0x3d, 0x29, 0xd9, 0x7f, 0xc4, 0x42, 0x20, 0x8c, 0xea, - 0x13, 0x74, 0xf6, 0x79, 0x6e, 0xdb, 0x95, 0x25, 0x48, 0xd5, 0xec, 0x5b, 0xa4, 0x8d, 0x98, 0xc3, - 0xd0, 0x3d, 0x18, 0x59, 0x73, 0x9a, 0x5b, 0xc1, 0xfa, 0x7a, 0x31, 0x17, 0x88, 0xd5, 0x39, 0x31, - 0x56, 0x7e, 0x7c, 0x44, 0xfc, 0x79, 0xa0, 0x7f, 0x62, 0xc9, 0x8d, 0x5f, 0x5e, 0xc1, 0xee, 0x23, - 0x17, 0x8e, 0x3d, 0xe3, 0xf2, 0x0a, 0x7e, 0x4d, 0xb9, 0x84, 0xdb, 0xbf, 0x57, 0x81, 0x13, 0x32, - 0xa2, 0xed, 0x9a, 0x1b, 0xb1, 0x20, 0x08, 0xf3, 0x1a, 0x87, 0xd2, 0xbe, 0xd7, 0x38, 0x7c, 0x10, - 0xa0, 0x45, 0x3a, 0x5e, 0xd0, 0x63, 0x76, 0xe6, 0xd0, 0x81, 0xed, 0x4c, 0xb5, 0x35, 0x99, 0x57, - 0x54, 0xb0, 0x41, 0x51, 0x94, 0x68, 0xe5, 0xb7, 0x42, 0xa4, 0x4a, 0xb4, 0x1a, 0x37, 0x12, 0x0e, - 0x1f, 0xef, 0x8d, 0x84, 0x2e, 0x9c, 0xe0, 0x5d, 0x54, 0x65, 0x20, 0x1e, 0xa2, 0xda, 0x03, 0x4b, - 0xa4, 0x9b, 0x4f, 0x92, 0xc1, 0x69, 0xba, 0xe6, 0x75, 0x83, 0xd5, 0xe3, 0xbe, 0x6e, 0xf0, 0x2d, - 0x50, 0x93, 0xdf, 0x39, 0x9a, 0xaa, 0xe9, 0x52, 0x45, 0x72, 0x1a, 0x44, 0x58, 0xc3, 0x33, 0x95, - 0x6d, 0xe0, 0x51, 0x55, 0xb6, 0xb1, 0x5f, 0x2f, 0xd3, 0x0d, 0x0a, 0xef, 0xd7, 0x81, 0x6f, 0xeb, - 0xbc, 0x66, 0xdc, 0xd6, 0x79, 0xb0, 0xef, 0x59, 0x4d, 0xdd, 0xea, 0x79, 0x1e, 0x86, 0x62, 0x67, - 0x43, 0xe6, 0xfd, 0x32, 0xe8, 0xaa, 0xb3, 0x11, 0x61, 0xd6, 0x7a, 0x90, 0x8a, 0xd6, 0x2f, 0xc3, - 0x78, 0xe4, 0x6e, 0xf8, 0x4e, 0xdc, 0x0d, 0x89, 0x71, 0x2e, 0xa9, 0xe3, 0x82, 0x4c, 0x20, 0x4e, - 0xe2, 0xa2, 0x4f, 0x58, 0x00, 0x21, 0x51, 0xdb, 0x9f, 0xe1, 0x22, 0xe6, 0x90, 0x12, 0x03, 0x92, - 0xae, 0x59, 0x89, 0x44, 0x6d, 0x7b, 0x0c, 0xb6, 0xf6, 0xa7, 0x2c, 0x98, 0xcc, 0x3c, 0x85, 0x3a, - 0x30, 0xdc, 0x64, 0x77, 0xaa, 0x16, 0x53, 0x85, 0x33, 0x79, 0x3f, 0x2b, 0xd7, 0x63, 0xbc, 0x0d, - 0x0b, 0x3e, 0xf6, 0xaf, 0x8c, 0xc1, 0xe9, 0xc6, 0xdc, 0x92, 0xbc, 0x8b, 0xe9, 0xc8, 0x12, 0x99, - 0xf3, 0x78, 0x1c, 0x5f, 0x22, 0x73, 0x1f, 0xee, 0x9e, 0x91, 0xc8, 0xec, 0x19, 0x89, 0xcc, 0xc9, - 0xac, 0xd2, 0x72, 0x11, 0x59, 0xa5, 0x79, 0x3d, 0x18, 0x24, 0xab, 0xf4, 0xc8, 0x32, 0x9b, 0xf7, - 0xec, 0xd0, 0x81, 0x32, 0x9b, 0x55, 0xda, 0x77, 0x21, 0x49, 0x6c, 0x7d, 0x3e, 0x55, 0x6e, 0xda, - 0xb7, 0x4a, 0xb9, 0xe5, 0x09, 0x9a, 0x42, 0xe9, 0xbd, 0x52, 0x7c, 0x07, 0x06, 0x48, 0xb9, 0x15, - 0x39, 0xa2, 0x66, 0x9a, 0xf7, 0x48, 0x11, 0x69, 0xde, 0x79, 0xdd, 0xd9, 0x37, 0xcd, 0xfb, 0x65, - 0x18, 0x6f, 0x7a, 0x81, 0x4f, 0x56, 0xc2, 0x20, 0x0e, 0x9a, 0x81, 0xbc, 0x4d, 0x5f, 0x5f, 0x46, - 0x6a, 0x02, 0x71, 0x12, 0xb7, 0x5f, 0x8e, 0x78, 0xed, 0xb0, 0x39, 0xe2, 0xf0, 0x88, 0x72, 0xc4, - 0x8d, 0x2c, 0xe8, 0xd1, 0x22, 0xb2, 0xa0, 0xf3, 0xbe, 0xc8, 0x40, 0x59, 0xd0, 0x5f, 0xb0, 0x60, - 0xdc, 0xb9, 0xc7, 0xf6, 0x2d, 0x5c, 0x0a, 0xb3, 0xd3, 0xbe, 0xd1, 0x4b, 0x1f, 0x3a, 0x82, 0x09, - 0x7b, 0xa7, 0xa1, 0xd9, 0xd4, 0x27, 0x59, 0x66, 0x8a, 0xd9, 0x84, 0x93, 0x1d, 0x39, 0x4c, 0xe6, - 0xf4, 0x17, 0x4b, 0xf0, 0x0d, 0xfb, 0x76, 0x01, 0xdd, 0x03, 0x88, 0x9d, 0x0d, 0x31, 0x51, 0xc5, - 0x99, 0xd8, 0x21, 0x43, 0x99, 0x57, 0x25, 0x3d, 0x91, 0xd5, 0xa7, 0xc8, 0x63, 0x83, 0x15, 0x8b, - 0x60, 0x0e, 0xbc, 0x4c, 0x01, 0x6d, 0x1c, 0x78, 0x04, 0x33, 0x08, 0x35, 0x84, 0x42, 0xb2, 0x41, - 0x8d, 0xfb, 0x72, 0xd2, 0x10, 0xc2, 0xac, 0x15, 0x0b, 0x28, 0x7a, 0x11, 0x46, 0x1d, 0xcf, 0xe3, - 0x19, 0x86, 0x24, 0x12, 0xb7, 0x04, 0xeb, 0xb2, 0xb9, 0x1a, 0x84, 0x4d, 0x3c, 0xfb, 0x2f, 0x4a, - 0x30, 0xbd, 0x8f, 0x4c, 0xc9, 0x64, 0x96, 0x57, 0x06, 0xce, 0x2c, 0x17, 0x19, 0x52, 0xc3, 0x7d, - 0x32, 0xa4, 0x5e, 0x84, 0xd1, 0x98, 0x38, 0x6d, 0x11, 0xfc, 0x98, 0xae, 0x06, 0xb9, 0xaa, 0x41, - 0xd8, 0xc4, 0xa3, 0x52, 0x6c, 0xc2, 0x69, 0x36, 0x49, 0x14, 0xc9, 0x14, 0x28, 0xe1, 0x30, 0x2f, - 0x2c, 0xbf, 0x8a, 0x9d, 0x43, 0xcc, 0x26, 0x58, 0xe0, 0x14, 0xcb, 0xf4, 0x80, 0xd7, 0x06, 0x1c, - 0xf0, 0x9f, 0x28, 0xc1, 0xd3, 0x7b, 0x6a, 0xb7, 0x81, 0xb3, 0xd3, 0xba, 0x11, 0x09, 0xd3, 0x13, - 0xe7, 0x56, 0x44, 0x42, 0xcc, 0x20, 0x7c, 0x94, 0x3a, 0x1d, 0x15, 0xb8, 0x5e, 0x7c, 0x3a, 0x27, - 0x1f, 0xa5, 0x04, 0x0b, 0x9c, 0x62, 0xf9, 0xb0, 0xd3, 0xf2, 0xf7, 0x86, 0xe0, 0xd9, 0x01, 0x6c, - 0x80, 0x02, 0xd3, 0x5e, 0x93, 0x29, 0xdd, 0xe5, 0x47, 0x94, 0xd2, 0xfd, 0x70, 0xc3, 0xf5, 0x46, - 0x26, 0xf8, 0x40, 0xe9, 0xb5, 0x3f, 0x55, 0x82, 0x73, 0xfd, 0x0d, 0x16, 0xf4, 0x1d, 0x70, 0x22, - 0x54, 0xa1, 0x86, 0x66, 0x36, 0xf8, 0x29, 0xee, 0x0e, 0x4b, 0x80, 0x70, 0x1a, 0x17, 0xcd, 0x00, - 0x74, 0x9c, 0x78, 0x33, 0xba, 0xbc, 0xe3, 0x46, 0xb1, 0x28, 0x9f, 0x37, 0xc1, 0x0f, 0x71, 0x65, - 0x2b, 0x36, 0x30, 0x28, 0x3b, 0xf6, 0x6f, 0x3e, 0xb8, 0x19, 0xc4, 0xfc, 0x21, 0xbe, 0xf5, 0x3c, - 0x25, 0x2f, 0x9f, 0x34, 0x40, 0x38, 0x8d, 0x4b, 0xd9, 0xb1, 0x30, 0x01, 0xde, 0xd1, 0x21, 0x9d, - 0x3f, 0xbe, 0xa8, 0x5a, 0xb1, 0x81, 0x91, 0xce, 0x73, 0xaf, 0xec, 0x9f, 0xe7, 0x6e, 0xff, 0x7c, - 0x09, 0xce, 0xf6, 0x35, 0x78, 0x07, 0x13, 0x53, 0x8f, 0x5f, 0xae, 0xf9, 0x43, 0xae, 0xb0, 0x03, - 0xe5, 0x28, 0xdb, 0x7f, 0xd2, 0x67, 0xa6, 0x89, 0xfc, 0xe3, 0x87, 0x2f, 0xd5, 0xf2, 0xf8, 0x8d, - 0x67, 0x26, 0xe5, 0x78, 0xe8, 0x00, 0x29, 0xc7, 0xa9, 0x8f, 0x51, 0x19, 0x50, 0x3b, 0xfc, 0xa7, - 0xa1, 0xbe, 0xc3, 0x4b, 0x37, 0xc8, 0x03, 0x1d, 0x36, 0xcc, 0xc3, 0x49, 0xd7, 0x67, 0xd7, 0x09, - 0x37, 0xba, 0x6b, 0xa2, 0xa2, 0x1a, 0x2f, 0x1f, 0xac, 0x12, 0x7e, 0x16, 0x52, 0x70, 0x9c, 0x79, - 0xe2, 0x31, 0x4c, 0x01, 0x7f, 0xb8, 0x21, 0x3d, 0xa0, 0xe4, 0x5e, 0x86, 0x33, 0x72, 0x28, 0x36, - 0x9d, 0x90, 0xb4, 0x84, 0xb2, 0x8d, 0x44, 0x8a, 0xd7, 0x59, 0x9e, 0x26, 0x96, 0x83, 0x80, 0xf3, - 0x9f, 0x63, 0x77, 0xbf, 0x06, 0x1d, 0xb7, 0x29, 0xb6, 0x82, 0xfa, 0xee, 0x57, 0xda, 0x88, 0x39, - 0x4c, 0xeb, 0x8b, 0xda, 0xf1, 0xe8, 0x8b, 0x0f, 0x42, 0x4d, 0x8d, 0x37, 0xcf, 0x95, 0x50, 0x93, - 0x3c, 0x93, 0x2b, 0xa1, 0x66, 0xb8, 0x81, 0x45, 0x67, 0x07, 0xdd, 0xa8, 0xa4, 0x56, 0x2b, 0xe5, - 0x47, 0xdb, 0xed, 0xb7, 0xc3, 0x98, 0xf2, 0x05, 0x0e, 0x7a, 0x03, 0xaf, 0xfd, 0x57, 0x25, 0x48, - 0x5d, 0x32, 0x87, 0x76, 0xa0, 0xd6, 0x0a, 0x7b, 0xbc, 0xb1, 0x98, 0xf2, 0xd5, 0xf3, 0x92, 0x9c, - 0x3e, 0x33, 0x53, 0x4d, 0x58, 0x33, 0x43, 0x1f, 0xe1, 0x15, 0xa2, 0x05, 0xeb, 0x52, 0x11, 0x65, - 0x00, 0x1a, 0x8a, 0x9e, 0x79, 0xb5, 0xa6, 0x6c, 0xc3, 0x06, 0x3f, 0x14, 0x43, 0x6d, 0x53, 0x5e, - 0xa6, 0x57, 0x8c, 0xb8, 0x53, 0x77, 0xf3, 0x71, 0x13, 0x4d, 0xfd, 0xc5, 0x9a, 0x91, 0xfd, 0xc7, - 0x25, 0x38, 0x9d, 0xfc, 0x00, 0xe2, 0x8c, 0xf3, 0xa7, 0x2d, 0x78, 0xd2, 0x73, 0xa2, 0xb8, 0xd1, - 0x65, 0x1b, 0x85, 0xf5, 0xae, 0xb7, 0x9c, 0x2a, 0x2a, 0x7e, 0x58, 0x67, 0x8b, 0x22, 0x9c, 0xbe, - 0x7c, 0xb1, 0xfe, 0xd4, 0xfd, 0xdd, 0xe9, 0x27, 0x17, 0xf3, 0x99, 0xe3, 0x7e, 0xbd, 0x42, 0xaf, - 0x5b, 0x70, 0xb2, 0xd9, 0x0d, 0x43, 0xe2, 0xc7, 0xba, 0xab, 0xfc, 0x2b, 0xde, 0x2c, 0x64, 0x20, - 0x75, 0x07, 0x4f, 0x53, 0x81, 0x3a, 0x97, 0xe2, 0x85, 0x33, 0xdc, 0xed, 0x1f, 0xa4, 0x9a, 0xb3, - 0xef, 0x7b, 0xfe, 0x35, 0xbb, 0x2d, 0xf2, 0xcf, 0x86, 0x61, 0x3c, 0x51, 0x31, 0x3d, 0x71, 0xd8, - 0x67, 0xed, 0x7b, 0xd8, 0xc7, 0x92, 0x12, 0xbb, 0xbe, 0xbc, 0x50, 0xdf, 0x48, 0x4a, 0xec, 0xfa, - 0x04, 0x73, 0x98, 0x18, 0x52, 0xdc, 0xf5, 0xc5, 0xe9, 0xa3, 0x39, 0xa4, 0xb8, 0xeb, 0x63, 0x01, - 0x45, 0x1f, 0xb3, 0x60, 0x8c, 0x2d, 0x3e, 0x71, 0xaa, 0x2a, 0x14, 0xda, 0xf5, 0x02, 0x96, 0xbb, - 0xbc, 0x25, 0x80, 0x85, 0xa1, 0x9a, 0x2d, 0x38, 0xc1, 0x11, 0x7d, 0xd2, 0x82, 0x9a, 0xba, 0xb5, - 0x57, 0x9c, 0x8d, 0x34, 0x8a, 0x2d, 0x48, 0x9f, 0x92, 0x7a, 0xaa, 0x32, 0x38, 0xd6, 0x8c, 0x51, - 0xa4, 0xce, 0x31, 0x47, 0x8e, 0xe6, 0x1c, 0x13, 0x72, 0xce, 0x30, 0xdf, 0x02, 0xb5, 0xb6, 0x48, - 0xf1, 0xe3, 0x47, 0x8b, 0xf2, 0x1e, 0x12, 0xd9, 0x88, 0x35, 0x9c, 0x1a, 0xfb, 0x11, 0x7b, 0xb1, - 0xd8, 0x38, 0x0b, 0x64, 0xc6, 0x7e, 0x43, 0x37, 0x63, 0x13, 0xc7, 0x3c, 0xb8, 0x84, 0x47, 0x7a, - 0x70, 0x39, 0xba, 0xcf, 0xc1, 0x65, 0x03, 0xce, 0x38, 0xdd, 0x38, 0xb8, 0x46, 0x1c, 0x6f, 0x36, - 0x8e, 0x49, 0xbb, 0x13, 0x47, 0xbc, 0xc8, 0xfe, 0x18, 0x73, 0x01, 0xab, 0xc0, 0xb9, 0x06, 0xf1, - 0xd6, 0x33, 0x48, 0x38, 0xff, 0x59, 0xfb, 0x9f, 0x59, 0x70, 0x26, 0x77, 0x2a, 0x3c, 0xbe, 0x29, - 0x0b, 0xf6, 0x8f, 0x54, 0xe0, 0x54, 0xce, 0x7d, 0x0a, 0xa8, 0x67, 0x2e, 0x12, 0xab, 0x88, 0xe8, - 0xbf, 0x64, 0x30, 0x9b, 0xfc, 0x36, 0x39, 0x2b, 0xe3, 0x60, 0xb1, 0x08, 0x3a, 0x1e, 0xa0, 0x7c, - 0xbc, 0xf1, 0x00, 0xc6, 0x5c, 0x1f, 0x7a, 0xa4, 0x73, 0xbd, 0xb2, 0xcf, 0x5c, 0xff, 0x19, 0x0b, - 0xa6, 0xda, 0x7d, 0x2e, 0x49, 0x13, 0xe7, 0x49, 0xb7, 0x8f, 0xe6, 0x0a, 0xb6, 0xfa, 0xf9, 0xfb, - 0xbb, 0xd3, 0x7d, 0xef, 0xa6, 0xc3, 0x7d, 0x7b, 0x65, 0x7f, 0xa5, 0x0c, 0xcc, 0x5e, 0x63, 0x35, - 0xb3, 0x7b, 0xe8, 0xa3, 0xe6, 0xf5, 0x2c, 0x56, 0x51, 0x57, 0x88, 0x70, 0xe2, 0xea, 0x7a, 0x17, - 0x3e, 0x82, 0x79, 0xb7, 0xbd, 0xa4, 0x25, 0x61, 0x69, 0x00, 0x49, 0xe8, 0xc9, 0x7b, 0x70, 0xca, - 0xc5, 0xdf, 0x83, 0x53, 0x4b, 0xdf, 0x81, 0xb3, 0xf7, 0x27, 0x1e, 0x7a, 0x2c, 0x3f, 0xf1, 0xcf, - 0x5b, 0x5c, 0xf0, 0xa4, 0xbe, 0x02, 0x9a, 0x96, 0xe6, 0x06, 0xbf, 0x2e, 0xa3, 0x96, 0x31, 0x35, - 0x9e, 0x87, 0x6a, 0x24, 0xa4, 0xb2, 0x30, 0x49, 0xd8, 0x2e, 0x56, 0x4a, 0x6a, 0xac, 0xa0, 0x68, - 0x06, 0xc0, 0xf1, 0xbc, 0xe0, 0xde, 0xe5, 0x76, 0x27, 0xee, 0x49, 0xc3, 0x84, 0x6e, 0x05, 0x66, - 0x55, 0x2b, 0x36, 0x30, 0xd0, 0x37, 0xc1, 0x08, 0x2f, 0x68, 0xd1, 0x12, 0x1e, 0x9d, 0x51, 0xba, - 0xf8, 0x78, 0xb9, 0x8b, 0x16, 0x96, 0x30, 0x7b, 0x13, 0x8c, 0xbd, 0xc4, 0xc3, 0xdf, 0xbf, 0xbd, - 0xff, 0x95, 0x9a, 0xf6, 0xdf, 0x2f, 0x09, 0x56, 0x7c, 0x6f, 0xa0, 0x43, 0x07, 0xad, 0x03, 0x86, - 0x0e, 0x7e, 0x04, 0xa0, 0x19, 0xb4, 0x3b, 0x74, 0xb7, 0xbc, 0x1a, 0x14, 0xb3, 0xc5, 0x9a, 0x53, - 0xf4, 0xf4, 0x16, 0x4b, 0xb7, 0x61, 0x83, 0x5f, 0x42, 0xa0, 0x97, 0xf7, 0x15, 0xe8, 0x09, 0xd9, - 0x36, 0xb4, 0xb7, 0x6c, 0xb3, 0xff, 0xc2, 0x82, 0x84, 0xad, 0x87, 0x3a, 0x50, 0xa1, 0xdd, 0xed, - 0x09, 0x31, 0xb1, 0x5c, 0x9c, 0x61, 0x49, 0xe5, 0xb3, 0x58, 0x7b, 0xec, 0x27, 0xe6, 0x8c, 0x90, - 0x27, 0xc2, 0x24, 0x0b, 0xd9, 0xf2, 0x98, 0x0c, 0xaf, 0x05, 0xc1, 0x16, 0x0f, 0x21, 0xd2, 0x21, - 0x97, 0xf6, 0x4b, 0x30, 0x99, 0xe9, 0x14, 0xbb, 0xb3, 0x3b, 0x90, 0xfb, 0x76, 0xc3, 0x44, 0x67, - 0x95, 0x25, 0x30, 0x87, 0xd9, 0x3f, 0x65, 0xc1, 0xc9, 0x34, 0x79, 0xf4, 0x05, 0x0b, 0x26, 0xa3, - 0x34, 0xbd, 0xa3, 0x1a, 0x3b, 0x95, 0x2e, 0x91, 0x01, 0xe1, 0x6c, 0x27, 0xec, 0xff, 0x2a, 0x74, - 0xc0, 0x1d, 0xd7, 0x6f, 0x05, 0xf7, 0x94, 0x75, 0x64, 0xf5, 0xb5, 0x8e, 0x5e, 0x80, 0x6a, 0xd4, - 0xdc, 0x24, 0xad, 0xae, 0x97, 0x29, 0x2a, 0xd1, 0x10, 0xed, 0x58, 0x61, 0xb0, 0x1c, 0xfa, 0xae, - 0xd8, 0xad, 0xa6, 0x26, 0xe5, 0xbc, 0x68, 0xc7, 0x0a, 0x03, 0xbd, 0x03, 0xc6, 0x8c, 0x97, 0x94, - 0xf3, 0x92, 0x6d, 0x35, 0x0c, 0xbd, 0x1d, 0xe1, 0x04, 0x16, 0x15, 0x40, 0xca, 0xd2, 0x92, 0x7a, - 0x9a, 0x09, 0x20, 0x25, 0x0e, 0x23, 0x6c, 0x60, 0xb0, 0x8a, 0x15, 0x5e, 0x37, 0x62, 0xe7, 0xc7, - 0xc3, 0xfa, 0xe6, 0x88, 0x39, 0xd1, 0x86, 0x15, 0x14, 0x5d, 0x02, 0x68, 0x3b, 0x7e, 0xd7, 0xf1, - 0xe8, 0x08, 0x09, 0x87, 0x99, 0x5a, 0x86, 0x4b, 0x0a, 0x82, 0x0d, 0x2c, 0xfa, 0xc6, 0xb1, 0xdb, - 0x26, 0xef, 0x0b, 0x7c, 0x19, 0xde, 0xae, 0x43, 0x0a, 0x44, 0x3b, 0x56, 0x18, 0xe8, 0x25, 0x18, - 0x75, 0xfc, 0x16, 0x37, 0x0b, 0x83, 0x50, 0x9c, 0x4c, 0xaa, 0x3d, 0xe7, 0xad, 0x88, 0xcc, 0x6a, - 0x28, 0x36, 0x51, 0xd3, 0xd7, 0x66, 0xc0, 0x80, 0xd7, 0xf3, 0xfd, 0xb9, 0x05, 0x27, 0x74, 0x75, - 0x24, 0xe6, 0x57, 0x4b, 0x38, 0x14, 0xad, 0x7d, 0x1d, 0x8a, 0xc9, 0x4a, 0x24, 0xa5, 0x81, 0x2a, - 0x91, 0x98, 0x45, 0x42, 0xca, 0x7b, 0x16, 0x09, 0xf9, 0x26, 0x18, 0xd9, 0x22, 0x3d, 0xa3, 0x9a, - 0x08, 0xd3, 0x0e, 0x37, 0x78, 0x13, 0x96, 0x30, 0x64, 0xc3, 0x70, 0xd3, 0x51, 0xc5, 0x12, 0xc7, - 0x44, 0x44, 0xda, 0x2c, 0x43, 0x12, 0x10, 0x7b, 0x19, 0x6a, 0xea, 0x28, 0x5f, 0xfa, 0xf7, 0xac, - 0x7c, 0xff, 0xde, 0x40, 0x17, 0xfd, 0xd7, 0xd7, 0x7e, 0xf3, 0xab, 0xcf, 0xbc, 0xe9, 0x77, 0xbf, - 0xfa, 0xcc, 0x9b, 0xfe, 0xe8, 0xab, 0xcf, 0xbc, 0xe9, 0x63, 0xf7, 0x9f, 0xb1, 0x7e, 0xf3, 0xfe, - 0x33, 0xd6, 0xef, 0xde, 0x7f, 0xc6, 0xfa, 0xa3, 0xfb, 0xcf, 0x58, 0x5f, 0xb9, 0xff, 0x8c, 0xf5, - 0xfa, 0x7f, 0x7c, 0xe6, 0x4d, 0xef, 0xfb, 0xf6, 0xbd, 0xc2, 0xf8, 0xb7, 0xdf, 0xce, 0x62, 0xf7, - 0xe9, 0x7a, 0xbe, 0x68, 0x4c, 0xe2, 0x8b, 0x72, 0x3d, 0xff, 0xbf, 0x00, 0x00, 0x00, 0xff, 0xff, - 0x4a, 0xf5, 0xfb, 0xe6, 0x23, 0x06, 0x01, 0x00, + // 12691 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x70, 0x25, 0xd9, + 0x55, 0x98, 0xfb, 0x3d, 0x3d, 0xe9, 0xbd, 0xa3, 0x8f, 0x19, 0xdd, 0x99, 0xd9, 0xd5, 0xcc, 0xce, + 0x8e, 0xc6, 0xbd, 0x78, 0xbd, 0xc4, 0x6b, 0x0d, 0x1e, 0x7b, 0xcd, 0x86, 0x05, 0x13, 0x3d, 0x69, + 0x3e, 0x34, 0x23, 0x8d, 0xe4, 0xfb, 0x34, 0x33, 0xfe, 0x5a, 0xdb, 0xad, 0x7e, 0x57, 0x52, 0x8f, + 0xfa, 0x75, 0xbf, 0xed, 0xee, 0xa7, 0x99, 0xb7, 0x18, 0x63, 0x63, 0x1b, 0x0c, 0x36, 0xf6, 0x06, + 0x52, 0x61, 0x49, 0x62, 0xc7, 0x04, 0xf2, 0x51, 0x95, 0xa2, 0x20, 0xe1, 0x07, 0x54, 0x80, 0xa2, + 0x02, 0x14, 0x05, 0x15, 0x12, 0x08, 0x45, 0x80, 0x04, 0x50, 0xec, 0x49, 0x52, 0x50, 0xa9, 0x0a, + 0x29, 0x92, 0x54, 0x2a, 0x35, 0x21, 0x54, 0xea, 0x7e, 0xdf, 0xee, 0xd7, 0x4f, 0x7a, 0x1a, 0xb5, + 0x34, 0x63, 0xd8, 0x7f, 0xef, 0xdd, 0x73, 0xfa, 0x9c, 0xdb, 0xb7, 0xef, 0x3d, 0xe7, 0xdc, 0x73, + 0xcf, 0x39, 0x17, 0x16, 0x37, 0xbc, 0x64, 0xb3, 0xb3, 0x36, 0xe3, 0x86, 0xad, 0x0b, 0x4e, 0xb4, + 0x11, 0xb6, 0xa3, 0xf0, 0x0e, 0xfb, 0xf1, 0x76, 0xb7, 0x79, 0x61, 0xfb, 0x9d, 0x17, 0xda, 0x5b, + 0x1b, 0x17, 0x9c, 0xb6, 0x17, 0x5f, 0x70, 0xda, 0x6d, 0xdf, 0x73, 0x9d, 0xc4, 0x0b, 0x83, 0x0b, + 0xdb, 0xef, 0x70, 0xfc, 0xf6, 0xa6, 0xf3, 0x8e, 0x0b, 0x1b, 0x24, 0x20, 0x91, 0x93, 0x90, 0xe6, + 0x4c, 0x3b, 0x0a, 0x93, 0x10, 0x7d, 0xab, 0xa6, 0x36, 0x23, 0xa9, 0xb1, 0x1f, 0x1f, 0x71, 0x9b, + 0x33, 0xdb, 0xef, 0x9c, 0x69, 0x6f, 0x6d, 0xcc, 0x50, 0x6a, 0x33, 0x06, 0xb5, 0x19, 0x49, 0xed, + 0xcc, 0xdb, 0x8d, 0xbe, 0x6c, 0x84, 0x1b, 0xe1, 0x05, 0x46, 0x74, 0xad, 0xb3, 0xce, 0xfe, 0xb1, + 0x3f, 0xec, 0x17, 0x67, 0x76, 0xc6, 0xde, 0x7a, 0x31, 0x9e, 0xf1, 0x42, 0xda, 0xbd, 0x0b, 0x6e, + 0x18, 0x91, 0x0b, 0xdb, 0x3d, 0x1d, 0x3a, 0x73, 0x55, 0xe3, 0x90, 0x7b, 0x09, 0x09, 0x62, 0x2f, + 0x0c, 0xe2, 0xb7, 0xd3, 0x2e, 0x90, 0x68, 0x9b, 0x44, 0xe6, 0xeb, 0x19, 0x08, 0x79, 0x94, 0xde, + 0xa5, 0x29, 0xb5, 0x1c, 0x77, 0xd3, 0x0b, 0x48, 0xd4, 0xd5, 0x8f, 0xb7, 0x48, 0xe2, 0xe4, 0x3d, + 0x75, 0xa1, 0xdf, 0x53, 0x51, 0x27, 0x48, 0xbc, 0x16, 0xe9, 0x79, 0xe0, 0xdd, 0x7b, 0x3d, 0x10, + 0xbb, 0x9b, 0xa4, 0xe5, 0xf4, 0x3c, 0xf7, 0xce, 0x7e, 0xcf, 0x75, 0x12, 0xcf, 0xbf, 0xe0, 0x05, + 0x49, 0x9c, 0x44, 0xd9, 0x87, 0xec, 0xbf, 0x67, 0xc1, 0xf8, 0xec, 0xed, 0xc6, 0x6c, 0x27, 0xd9, + 0x9c, 0x0b, 0x83, 0x75, 0x6f, 0x03, 0xbd, 0x00, 0xa3, 0xae, 0xdf, 0x89, 0x13, 0x12, 0xdd, 0x70, + 0x5a, 0x64, 0xca, 0x3a, 0x6f, 0x3d, 0x57, 0xab, 0x9f, 0xf8, 0xb5, 0x9d, 0xe9, 0x37, 0xdd, 0xdf, + 0x99, 0x1e, 0x9d, 0xd3, 0x20, 0x6c, 0xe2, 0xa1, 0x6f, 0x84, 0x91, 0x28, 0xf4, 0xc9, 0x2c, 0xbe, + 0x31, 0x55, 0x62, 0x8f, 0x1c, 0x13, 0x8f, 0x8c, 0x60, 0xde, 0x8c, 0x25, 0x9c, 0xa2, 0xb6, 0xa3, + 0x70, 0xdd, 0xf3, 0xc9, 0x54, 0x39, 0x8d, 0xba, 0xc2, 0x9b, 0xb1, 0x84, 0xdb, 0x3f, 0x5a, 0x82, + 0x63, 0xb3, 0xed, 0xf6, 0x55, 0xe2, 0xf8, 0xc9, 0x66, 0x23, 0x71, 0x92, 0x4e, 0x8c, 0x42, 0x18, + 0x8e, 0xd9, 0x2f, 0xd1, 0xb7, 0xdb, 0xe2, 0xe9, 0x61, 0x0e, 0x7f, 0xb0, 0x33, 0x7d, 0x69, 0xb7, + 0x19, 0xbd, 0xe1, 0x25, 0x61, 0x3b, 0x7e, 0x3b, 0x09, 0x36, 0xbc, 0x80, 0xb0, 0xf1, 0xd9, 0x64, + 0xd4, 0x67, 0x4c, 0x26, 0x73, 0x61, 0x93, 0x60, 0xc1, 0x86, 0xf6, 0xb7, 0x45, 0xe2, 0xd8, 0xd9, + 0x20, 0xd9, 0x57, 0x5b, 0xe2, 0xcd, 0x58, 0xc2, 0x51, 0x04, 0xc8, 0x77, 0xe2, 0x64, 0x35, 0x72, + 0x82, 0xd8, 0xa3, 0x53, 0x7b, 0xd5, 0x6b, 0xf1, 0xb7, 0x1c, 0xbd, 0xf8, 0xd7, 0x66, 0xf8, 0x07, + 0x9a, 0x31, 0x3f, 0x90, 0x5e, 0x0f, 0x74, 0xfe, 0xcc, 0x6c, 0xbf, 0x63, 0x86, 0x3e, 0x51, 0x7f, + 0xe2, 0xfe, 0xce, 0x34, 0x5a, 0xec, 0xa1, 0x84, 0x73, 0xa8, 0xdb, 0xbf, 0x5b, 0x02, 0x98, 0x6d, + 0xb7, 0x57, 0xa2, 0xf0, 0x0e, 0x71, 0x13, 0xf4, 0x51, 0xa8, 0x52, 0x52, 0x4d, 0x27, 0x71, 0xd8, + 0x00, 0x8d, 0x5e, 0xfc, 0xa6, 0xc1, 0x18, 0x2f, 0xaf, 0xd1, 0xe7, 0x97, 0x48, 0xe2, 0xd4, 0x91, + 0x78, 0x41, 0xd0, 0x6d, 0x58, 0x51, 0x45, 0x01, 0x0c, 0xc5, 0x6d, 0xe2, 0xb2, 0xc1, 0x18, 0xbd, + 0xb8, 0x38, 0x73, 0x90, 0x15, 0x3f, 0xa3, 0x7b, 0xde, 0x68, 0x13, 0xb7, 0x3e, 0x26, 0x38, 0x0f, + 0xd1, 0x7f, 0x98, 0xf1, 0x41, 0xdb, 0xea, 0x83, 0xf3, 0x81, 0xbc, 0x51, 0x18, 0x47, 0x46, 0xb5, + 0x3e, 0x91, 0x9e, 0x40, 0xf2, 0xbb, 0xdb, 0x7f, 0x64, 0xc1, 0x84, 0x46, 0x5e, 0xf4, 0xe2, 0x04, + 0x7d, 0xa8, 0x67, 0x70, 0x67, 0x06, 0x1b, 0x5c, 0xfa, 0x34, 0x1b, 0xda, 0xe3, 0x82, 0x59, 0x55, + 0xb6, 0x18, 0x03, 0xdb, 0x82, 0x8a, 0x97, 0x90, 0x56, 0x3c, 0x55, 0x3a, 0x5f, 0x7e, 0x6e, 0xf4, + 0xe2, 0xd5, 0xa2, 0xde, 0xb3, 0x3e, 0x2e, 0x98, 0x56, 0x16, 0x28, 0x79, 0xcc, 0xb9, 0xd8, 0xbf, + 0x31, 0x61, 0xbe, 0x1f, 0x1d, 0x70, 0xf4, 0x0e, 0x18, 0x8d, 0xc3, 0x4e, 0xe4, 0x12, 0x4c, 0xda, + 0x21, 0x5d, 0x60, 0x65, 0x3a, 0xdd, 0xe9, 0xc2, 0x6f, 0xe8, 0x66, 0x6c, 0xe2, 0xa0, 0x2f, 0x58, + 0x30, 0xd6, 0x24, 0x71, 0xe2, 0x05, 0x8c, 0xbf, 0xec, 0xfc, 0xea, 0x81, 0x3b, 0x2f, 0x1b, 0xe7, + 0x35, 0xf1, 0xfa, 0x49, 0xf1, 0x22, 0x63, 0x46, 0x63, 0x8c, 0x53, 0xfc, 0xa9, 0x00, 0x6b, 0x92, + 0xd8, 0x8d, 0xbc, 0x36, 0xfd, 0x2f, 0x44, 0x8c, 0x12, 0x60, 0xf3, 0x1a, 0x84, 0x4d, 0x3c, 0x14, + 0x40, 0x85, 0x0a, 0xa8, 0x78, 0x6a, 0x88, 0xf5, 0x7f, 0xe1, 0x60, 0xfd, 0x17, 0x83, 0x4a, 0x65, + 0x9f, 0x1e, 0x7d, 0xfa, 0x2f, 0xc6, 0x9c, 0x0d, 0xfa, 0x17, 0x16, 0x4c, 0x09, 0x01, 0x8a, 0x09, + 0x1f, 0xd0, 0xdb, 0x9b, 0x5e, 0x42, 0x7c, 0x2f, 0x4e, 0xa6, 0x2a, 0xac, 0x0f, 0x1f, 0x3a, 0x58, + 0x1f, 0xe6, 0xd2, 0xd4, 0x31, 0x89, 0x93, 0xc8, 0x73, 0x29, 0x0e, 0x9d, 0x06, 0xf5, 0xf3, 0xa2, + 0x5b, 0x53, 0x73, 0x7d, 0x7a, 0x81, 0xfb, 0xf6, 0x0f, 0xfd, 0x90, 0x05, 0x67, 0x02, 0xa7, 0x45, + 0xe2, 0xb6, 0xc3, 0x08, 0x33, 0x70, 0xdd, 0x77, 0xdc, 0x2d, 0xd6, 0xfd, 0x61, 0xd6, 0xfd, 0x0b, + 0x83, 0x2d, 0x8d, 0x2b, 0x51, 0xd8, 0x69, 0x5f, 0xf7, 0x82, 0x66, 0xdd, 0x16, 0x3d, 0x3a, 0x73, + 0xa3, 0x2f, 0x69, 0xbc, 0x0b, 0x5b, 0xf4, 0x63, 0x16, 0x4c, 0x86, 0x51, 0x7b, 0xd3, 0x09, 0x48, + 0x53, 0x42, 0xe3, 0xa9, 0x11, 0xb6, 0x4e, 0x3f, 0x7c, 0xb0, 0xb1, 0x5c, 0xce, 0x92, 0x5d, 0x0a, + 0x03, 0x2f, 0x09, 0xa3, 0x06, 0x49, 0x12, 0x2f, 0xd8, 0x88, 0xeb, 0xa7, 0xee, 0xef, 0x4c, 0x4f, + 0xf6, 0x60, 0xe1, 0xde, 0xfe, 0xa0, 0xef, 0x80, 0xd1, 0xb8, 0x1b, 0xb8, 0xb7, 0xbd, 0xa0, 0x19, + 0xde, 0x8d, 0xa7, 0xaa, 0x45, 0xac, 0xf5, 0x86, 0x22, 0x28, 0x56, 0xab, 0x66, 0x80, 0x4d, 0x6e, + 0xf9, 0x1f, 0x4e, 0xcf, 0xbb, 0x5a, 0xd1, 0x1f, 0x4e, 0x4f, 0xa6, 0x5d, 0xd8, 0xa2, 0xef, 0xb5, + 0x60, 0x3c, 0xf6, 0x36, 0x02, 0x27, 0xe9, 0x44, 0xe4, 0x3a, 0xe9, 0xc6, 0x53, 0xc0, 0x3a, 0x72, + 0xed, 0x80, 0xa3, 0x62, 0x90, 0xac, 0x9f, 0x12, 0x7d, 0x1c, 0x37, 0x5b, 0x63, 0x9c, 0xe6, 0x9b, + 0xb7, 0x2a, 0xf5, 0xb4, 0x1e, 0x7d, 0x84, 0xab, 0x52, 0xaf, 0x80, 0xbe, 0xfd, 0x43, 0x7f, 0x03, + 0x8e, 0xf3, 0x26, 0xf5, 0x19, 0xe2, 0xa9, 0x31, 0x26, 0xc2, 0x4f, 0xde, 0xdf, 0x99, 0x3e, 0xde, + 0xc8, 0xc0, 0x70, 0x0f, 0x36, 0x7a, 0x05, 0xa6, 0xdb, 0x24, 0x6a, 0x79, 0xc9, 0x72, 0xe0, 0x77, + 0xa5, 0x62, 0x70, 0xc3, 0x36, 0x69, 0x8a, 0xee, 0xc4, 0x53, 0xe3, 0xe7, 0xad, 0xe7, 0xaa, 0xf5, + 0xb7, 0x8a, 0x6e, 0x4e, 0xaf, 0xec, 0x8e, 0x8e, 0xf7, 0xa2, 0x87, 0x7e, 0xd5, 0x82, 0x33, 0x86, + 0xfc, 0x6e, 0x90, 0x68, 0xdb, 0x73, 0xc9, 0xac, 0xeb, 0x86, 0x9d, 0x20, 0x89, 0xa7, 0x26, 0xd8, + 0x98, 0xaf, 0x1d, 0x86, 0x36, 0x49, 0xb3, 0xd2, 0x93, 0xb8, 0x2f, 0x4a, 0x8c, 0x77, 0xe9, 0xa9, + 0xfd, 0xeb, 0x25, 0x38, 0x9e, 0xb5, 0x2d, 0xd0, 0x3f, 0xb2, 0xe0, 0xd8, 0x9d, 0xbb, 0xc9, 0x6a, + 0xb8, 0x45, 0x82, 0xb8, 0xde, 0xa5, 0x1a, 0x80, 0x69, 0xd5, 0xd1, 0x8b, 0x6e, 0xb1, 0x56, 0xcc, + 0xcc, 0xb5, 0x34, 0x97, 0x4b, 0x41, 0x12, 0x75, 0xeb, 0x4f, 0x8a, 0x77, 0x3a, 0x76, 0xed, 0xf6, + 0xaa, 0x09, 0xc5, 0xd9, 0x4e, 0x9d, 0xf9, 0x9c, 0x05, 0x27, 0xf3, 0x48, 0xa0, 0xe3, 0x50, 0xde, + 0x22, 0x5d, 0x6e, 0x6b, 0x63, 0xfa, 0x13, 0xbd, 0x0c, 0x95, 0x6d, 0xc7, 0xef, 0x10, 0x61, 0x00, + 0x5e, 0x39, 0xd8, 0x8b, 0xa8, 0x9e, 0x61, 0x4e, 0xf5, 0x5b, 0x4a, 0x2f, 0x5a, 0xf6, 0x6f, 0x96, + 0x61, 0xd4, 0xf8, 0x68, 0x47, 0x60, 0xd4, 0x86, 0x29, 0xa3, 0x76, 0xa9, 0xb0, 0xf9, 0xd6, 0xd7, + 0xaa, 0xbd, 0x9b, 0xb1, 0x6a, 0x97, 0x8b, 0x63, 0xb9, 0xab, 0x59, 0x8b, 0x12, 0xa8, 0x85, 0x6d, + 0xba, 0x09, 0xa4, 0xd6, 0xd1, 0x50, 0x11, 0x9f, 0x70, 0x59, 0x92, 0xab, 0x8f, 0xdf, 0xdf, 0x99, + 0xae, 0xa9, 0xbf, 0x58, 0x33, 0xb2, 0x7f, 0xcf, 0x82, 0x93, 0x46, 0x1f, 0xe7, 0xc2, 0xa0, 0xc9, + 0xb6, 0x30, 0xe8, 0x3c, 0x0c, 0x25, 0xdd, 0xb6, 0xdc, 0x68, 0xaa, 0x91, 0x5a, 0xed, 0xb6, 0x09, + 0x66, 0x90, 0xc7, 0x7d, 0xff, 0xf5, 0x43, 0x16, 0x3c, 0x91, 0x2f, 0x60, 0xd0, 0xb3, 0x30, 0xcc, + 0xbd, 0x0c, 0xe2, 0xed, 0xf4, 0x27, 0x61, 0xad, 0x58, 0x40, 0xd1, 0x05, 0xa8, 0x29, 0xed, 0x28, + 0xde, 0x71, 0x52, 0xa0, 0xd6, 0xb4, 0x4a, 0xd5, 0x38, 0x74, 0xd0, 0xe8, 0x1f, 0x61, 0xdc, 0xaa, + 0x41, 0x63, 0xdb, 0x72, 0x06, 0xb1, 0x7f, 0xc7, 0x82, 0x6f, 0x18, 0x44, 0xec, 0x1d, 0x5e, 0x1f, + 0x1b, 0x70, 0xaa, 0x49, 0xd6, 0x9d, 0x8e, 0x9f, 0xa4, 0x39, 0x8a, 0x4e, 0x3f, 0x2d, 0x1e, 0x3e, + 0x35, 0x9f, 0x87, 0x84, 0xf3, 0x9f, 0xb5, 0xff, 0xa3, 0xc5, 0x1c, 0x02, 0xf2, 0xb5, 0x8e, 0x60, + 0x53, 0x16, 0xa4, 0x37, 0x65, 0x0b, 0x85, 0x2d, 0xd3, 0x3e, 0xbb, 0xb2, 0x1f, 0xb0, 0xe0, 0x8c, + 0x81, 0xb5, 0xe4, 0x24, 0xee, 0xe6, 0xa5, 0x7b, 0xed, 0x88, 0xc4, 0x31, 0x9d, 0x52, 0x4f, 0x1b, + 0xe2, 0xb8, 0x3e, 0x2a, 0x28, 0x94, 0xaf, 0x93, 0x2e, 0x97, 0xcd, 0xcf, 0x43, 0x95, 0xaf, 0xb9, + 0x30, 0x12, 0x1f, 0x49, 0xbd, 0xdb, 0xb2, 0x68, 0xc7, 0x0a, 0x03, 0xd9, 0x30, 0xcc, 0x64, 0x2e, + 0x95, 0x41, 0xd4, 0x4c, 0x00, 0xfa, 0xdd, 0x6f, 0xb1, 0x16, 0x2c, 0x20, 0x76, 0x9c, 0xea, 0xce, + 0x4a, 0x44, 0xd8, 0x7c, 0x68, 0x5e, 0xf6, 0x88, 0xdf, 0x8c, 0xe9, 0x86, 0xd1, 0x09, 0x82, 0x30, + 0x11, 0x7b, 0x3f, 0x63, 0xc3, 0x38, 0xab, 0x9b, 0xb1, 0x89, 0x43, 0x99, 0xfa, 0xce, 0x1a, 0xf1, + 0xf9, 0x88, 0x0a, 0xa6, 0x8b, 0xac, 0x05, 0x0b, 0x88, 0x7d, 0xbf, 0xc4, 0xb6, 0xa6, 0x4a, 0xa2, + 0x91, 0xa3, 0xf0, 0x6b, 0x44, 0x29, 0x15, 0xb0, 0x52, 0x9c, 0x3c, 0x26, 0xfd, 0x7d, 0x1b, 0xaf, + 0x66, 0xb4, 0x00, 0x2e, 0x94, 0xeb, 0xee, 0xfe, 0x8d, 0x2f, 0x95, 0x61, 0x3a, 0xfd, 0x40, 0x8f, + 0x12, 0xa1, 0x9b, 0x69, 0x83, 0x51, 0xd6, 0x1b, 0x68, 0xe0, 0x63, 0x13, 0xaf, 0x8f, 0x1c, 0x2e, + 0x1d, 0xa6, 0x1c, 0x36, 0xd5, 0x44, 0x79, 0x0f, 0x35, 0x31, 0xa7, 0x46, 0x7d, 0x88, 0x61, 0xbe, + 0xad, 0xc7, 0x85, 0x78, 0x7a, 0x25, 0x0a, 0x37, 0xd8, 0x9a, 0xdb, 0x26, 0x74, 0x33, 0x95, 0xe3, + 0x16, 0x3c, 0x0f, 0x43, 0x71, 0x42, 0xda, 0x53, 0x95, 0xb4, 0x0c, 0x6e, 0x24, 0xa4, 0x8d, 0x19, + 0x04, 0x7d, 0x1b, 0x1c, 0x4b, 0x9c, 0x68, 0x83, 0x24, 0x11, 0xd9, 0xf6, 0x98, 0x5b, 0x99, 0xed, + 0x8c, 0x6b, 0xf5, 0x13, 0xd4, 0x24, 0x5b, 0x65, 0x20, 0x2c, 0x41, 0x38, 0x8b, 0x6b, 0xff, 0xd7, + 0x12, 0x3c, 0x99, 0xfe, 0x3e, 0x5a, 0x6b, 0x7e, 0x7b, 0x4a, 0x6b, 0xbe, 0xcd, 0xd4, 0x9a, 0x0f, + 0x76, 0xa6, 0x9f, 0xea, 0xf3, 0xd8, 0xd7, 0x8d, 0x52, 0x45, 0x57, 0x32, 0x5f, 0xe8, 0x42, 0xcf, + 0x17, 0x7a, 0xba, 0xcf, 0x3b, 0x66, 0xac, 0x9d, 0x67, 0x61, 0x38, 0x22, 0x4e, 0x1c, 0x06, 0xe2, + 0x3b, 0xa9, 0xc5, 0x80, 0x59, 0x2b, 0x16, 0x50, 0xfb, 0xb7, 0x6b, 0xd9, 0xc1, 0xbe, 0xc2, 0x5d, + 0xe5, 0x61, 0x84, 0x3c, 0x18, 0x62, 0xfb, 0x3f, 0x2e, 0x76, 0xae, 0x1f, 0x6c, 0x89, 0x52, 0x15, + 0xa3, 0x48, 0xd7, 0xab, 0xf4, 0xab, 0xd1, 0x26, 0xcc, 0x58, 0xa0, 0x7b, 0x50, 0x75, 0xe5, 0x4e, + 0xab, 0x54, 0x84, 0xb7, 0x53, 0xec, 0xb3, 0x34, 0xc7, 0x31, 0xaa, 0x0b, 0xd4, 0xf6, 0x4c, 0x71, + 0x43, 0x04, 0xca, 0x1b, 0x5e, 0x22, 0x3e, 0xeb, 0x01, 0x37, 0xde, 0x57, 0x3c, 0xe3, 0x15, 0x47, + 0xa8, 0x82, 0xba, 0xe2, 0x25, 0x98, 0xd2, 0x47, 0x9f, 0xb1, 0x60, 0x34, 0x76, 0x5b, 0x2b, 0x51, + 0xb8, 0xed, 0x35, 0x49, 0x24, 0x0c, 0xd0, 0x03, 0x8a, 0xbd, 0xc6, 0xdc, 0x92, 0x24, 0xa8, 0xf9, + 0x72, 0x47, 0x88, 0x86, 0x60, 0x93, 0x2f, 0xdd, 0x98, 0x3d, 0x29, 0xde, 0x7d, 0x9e, 0xb8, 0x6c, + 0xc5, 0xc9, 0x0d, 0x35, 0x9b, 0x29, 0x07, 0x36, 0xc8, 0xe7, 0x3b, 0xee, 0x16, 0x5d, 0x6f, 0xba, + 0x43, 0x4f, 0xdd, 0xdf, 0x99, 0x7e, 0x72, 0x2e, 0x9f, 0x27, 0xee, 0xd7, 0x19, 0x36, 0x60, 0xed, + 0x8e, 0xef, 0x63, 0xf2, 0x4a, 0x87, 0x30, 0xdf, 0x5a, 0x01, 0x03, 0xb6, 0xa2, 0x09, 0x66, 0x06, + 0xcc, 0x80, 0x60, 0x93, 0x2f, 0x7a, 0x05, 0x86, 0x5b, 0x4e, 0x12, 0x79, 0xf7, 0x84, 0x43, 0xed, + 0x80, 0x5b, 0xa4, 0x25, 0x46, 0x4b, 0x33, 0x67, 0x56, 0x00, 0x6f, 0xc4, 0x82, 0x11, 0x6a, 0x41, + 0xa5, 0x45, 0xa2, 0x0d, 0x32, 0x55, 0x2d, 0xe2, 0xa4, 0x61, 0x89, 0x92, 0xd2, 0x0c, 0x6b, 0xd4, + 0xf2, 0x62, 0x6d, 0x98, 0x73, 0x41, 0x2f, 0x43, 0x35, 0x26, 0x3e, 0x71, 0xa9, 0xed, 0x54, 0x63, + 0x1c, 0xdf, 0x39, 0xa0, 0x1d, 0x49, 0x8d, 0x96, 0x86, 0x78, 0x94, 0x2f, 0x30, 0xf9, 0x0f, 0x2b, + 0x92, 0x74, 0x00, 0xdb, 0x7e, 0x67, 0xc3, 0x0b, 0xa6, 0xa0, 0x88, 0x01, 0x5c, 0x61, 0xb4, 0x32, + 0x03, 0xc8, 0x1b, 0xb1, 0x60, 0x64, 0xff, 0x17, 0x0b, 0x50, 0x5a, 0xa8, 0x1d, 0x81, 0xc1, 0xfc, + 0x4a, 0xda, 0x60, 0x5e, 0x2c, 0xd2, 0xa2, 0xe9, 0x63, 0x33, 0xff, 0x5c, 0x0d, 0x32, 0xea, 0xe0, + 0x06, 0x89, 0x13, 0xd2, 0x7c, 0x43, 0x84, 0xbf, 0x21, 0xc2, 0xdf, 0x10, 0xe1, 0x4a, 0x84, 0xaf, + 0x65, 0x44, 0xf8, 0x7b, 0x8c, 0x55, 0xaf, 0x43, 0x1f, 0x3e, 0xa2, 0x62, 0x23, 0xcc, 0x1e, 0x18, + 0x08, 0x54, 0x12, 0x5c, 0x6b, 0x2c, 0xdf, 0xc8, 0x95, 0xd9, 0x1f, 0x49, 0xcb, 0xec, 0x83, 0xb2, + 0xf8, 0xab, 0x20, 0xa5, 0x7f, 0xd5, 0x82, 0xb7, 0xa6, 0xa5, 0x97, 0x9c, 0x39, 0x0b, 0x1b, 0x41, + 0x18, 0x91, 0x79, 0x6f, 0x7d, 0x9d, 0x44, 0x24, 0x70, 0x49, 0xac, 0x1c, 0x3f, 0x56, 0x3f, 0xc7, + 0x0f, 0x7a, 0x17, 0x8c, 0xdd, 0x89, 0xc3, 0x60, 0x25, 0xf4, 0x02, 0x21, 0x82, 0xe8, 0x8e, 0xe3, + 0xf8, 0xfd, 0x9d, 0xe9, 0x31, 0x3a, 0xa2, 0xb2, 0x1d, 0xa7, 0xb0, 0xd0, 0x1c, 0x4c, 0xde, 0x79, + 0x65, 0xc5, 0x49, 0x0c, 0x57, 0x83, 0x74, 0x0a, 0xb0, 0x93, 0xad, 0x6b, 0xef, 0xcd, 0x00, 0x71, + 0x2f, 0xbe, 0xfd, 0x77, 0x4b, 0x70, 0x3a, 0xf3, 0x22, 0xa1, 0xef, 0x87, 0x9d, 0x84, 0xee, 0x89, + 0xd0, 0x97, 0x2d, 0x38, 0xde, 0x4a, 0x7b, 0x33, 0x62, 0xe1, 0x0b, 0x7f, 0x5f, 0x61, 0x3a, 0x22, + 0xe3, 0x2e, 0xa9, 0x4f, 0x89, 0x11, 0x3a, 0x9e, 0x01, 0xc4, 0xb8, 0xa7, 0x2f, 0xe8, 0x65, 0xa8, + 0xb5, 0x9c, 0x7b, 0x37, 0xdb, 0x4d, 0x27, 0x91, 0x7b, 0xd5, 0xfe, 0x2e, 0x86, 0x4e, 0xe2, 0xf9, + 0x33, 0x3c, 0xa8, 0x66, 0x66, 0x21, 0x48, 0x96, 0xa3, 0x46, 0x12, 0x79, 0xc1, 0x06, 0xf7, 0x80, + 0x2e, 0x49, 0x32, 0x58, 0x53, 0xb4, 0xbf, 0x64, 0x65, 0x95, 0x94, 0x1a, 0x9d, 0xc8, 0x49, 0xc8, + 0x46, 0x17, 0x7d, 0x0c, 0x2a, 0x74, 0xdf, 0x28, 0x47, 0xe5, 0x76, 0x91, 0x9a, 0xd3, 0xf8, 0x12, + 0x5a, 0x89, 0xd2, 0x7f, 0x31, 0xe6, 0x4c, 0xed, 0x2f, 0xd7, 0xb2, 0xc6, 0x02, 0x0b, 0x09, 0xb8, + 0x08, 0xb0, 0x11, 0xae, 0x92, 0x56, 0xdb, 0xa7, 0xc3, 0x62, 0xb1, 0xd3, 0x1f, 0xe5, 0x47, 0xb9, + 0xa2, 0x20, 0xd8, 0xc0, 0x42, 0xdf, 0x67, 0x01, 0x6c, 0xc8, 0x39, 0x2f, 0x0d, 0x81, 0x9b, 0x45, + 0xbe, 0x8e, 0x5e, 0x51, 0xba, 0x2f, 0x8a, 0x21, 0x36, 0x98, 0xa3, 0xef, 0xb6, 0xa0, 0x9a, 0xc8, + 0xee, 0x73, 0xd5, 0xb8, 0x5a, 0x64, 0x4f, 0xe4, 0x4b, 0x6b, 0x9b, 0x48, 0x0d, 0x89, 0xe2, 0x8b, + 0xbe, 0xc7, 0x02, 0x88, 0xbb, 0x81, 0xbb, 0x12, 0xfa, 0x9e, 0xdb, 0x15, 0x1a, 0xf3, 0x56, 0xa1, + 0xbe, 0x1e, 0x45, 0xbd, 0x3e, 0x41, 0x47, 0x43, 0xff, 0xc7, 0x06, 0x67, 0xf4, 0x71, 0xa8, 0xc6, + 0x62, 0xba, 0x09, 0x1d, 0xb9, 0x5a, 0xac, 0xc7, 0x89, 0xd3, 0x16, 0xe2, 0x55, 0xfc, 0xc3, 0x8a, + 0x27, 0xfa, 0x61, 0x0b, 0x8e, 0xb5, 0xd3, 0x3e, 0x44, 0xa1, 0x0e, 0x8b, 0x93, 0x01, 0x19, 0x1f, + 0x25, 0xf7, 0xb6, 0x64, 0x1a, 0x71, 0xb6, 0x17, 0x54, 0x02, 0xea, 0x19, 0xbc, 0xdc, 0xe6, 0xfe, + 0xcc, 0x11, 0x2d, 0x01, 0xaf, 0x64, 0x81, 0xb8, 0x17, 0x1f, 0xad, 0xc0, 0x49, 0xda, 0xbb, 0x2e, + 0x37, 0x3f, 0xa5, 0x7a, 0x89, 0x99, 0x32, 0xac, 0xd6, 0xcf, 0x8a, 0x19, 0xc2, 0x0e, 0x42, 0xb2, + 0x38, 0x38, 0xf7, 0x49, 0xf4, 0x9b, 0x16, 0x9c, 0xf5, 0x98, 0x1a, 0x30, 0xbd, 0xf9, 0x5a, 0x23, + 0x88, 0x23, 0x7b, 0x52, 0xa8, 0xac, 0xe8, 0xa7, 0x7e, 0xea, 0xdf, 0x20, 0xde, 0xe0, 0xec, 0xc2, + 0x2e, 0x5d, 0xc2, 0xbb, 0x76, 0x18, 0x7d, 0x33, 0x8c, 0xcb, 0x75, 0xb1, 0x42, 0x45, 0x30, 0x53, + 0xb4, 0xb5, 0xfa, 0xe4, 0xfd, 0x9d, 0xe9, 0xf1, 0x55, 0x13, 0x80, 0xd3, 0x78, 0xf6, 0x5f, 0x0c, + 0xa5, 0x8e, 0x90, 0x94, 0x83, 0x93, 0x89, 0x1b, 0x57, 0xfa, 0x7f, 0xa4, 0xf4, 0x2c, 0x54, 0xdc, + 0x28, 0xef, 0x92, 0x16, 0x37, 0xaa, 0x29, 0xc6, 0x06, 0x73, 0x6a, 0x94, 0x4e, 0x3a, 0x59, 0x37, + 0xaa, 0x90, 0x80, 0x2f, 0x17, 0xd9, 0xa5, 0xde, 0x03, 0xbf, 0xd3, 0xa2, 0x6b, 0x93, 0x3d, 0x20, + 0xdc, 0xdb, 0x25, 0xf4, 0x9d, 0x50, 0x8b, 0x54, 0x8c, 0x4c, 0xb9, 0x88, 0xad, 0x9a, 0x9c, 0x36, + 0xa2, 0x3b, 0xea, 0x74, 0x48, 0x47, 0xc3, 0x68, 0x8e, 0xe8, 0x3d, 0x30, 0xa1, 0xfe, 0xcc, 0xb1, + 0x63, 0x21, 0x2a, 0x14, 0xcb, 0xf5, 0x27, 0xc4, 0x53, 0x13, 0x38, 0x05, 0xc5, 0x19, 0x6c, 0x14, + 0xc1, 0x30, 0x8f, 0xdb, 0x14, 0x62, 0xec, 0x80, 0xdb, 0x1d, 0x33, 0xf8, 0x53, 0xfb, 0x08, 0x79, + 0x2b, 0x16, 0x9c, 0xec, 0xcf, 0x96, 0x52, 0x27, 0x7d, 0x86, 0xbc, 0x1b, 0xe0, 0x14, 0xf3, 0x0b, + 0x16, 0x8c, 0x46, 0xa1, 0xef, 0x7b, 0xc1, 0x06, 0x95, 0xcd, 0xc2, 0xc0, 0xf8, 0xe0, 0xa1, 0xe8, + 0x78, 0x21, 0x84, 0xd9, 0x6e, 0x00, 0x6b, 0x9e, 0xd8, 0xec, 0x00, 0x7a, 0x09, 0xc6, 0x9b, 0xc4, + 0x27, 0xf4, 0xd9, 0xe5, 0x88, 0xee, 0xe3, 0xb8, 0xd7, 0x5c, 0xc5, 0xc9, 0xcc, 0x9b, 0x40, 0x9c, + 0xc6, 0xb5, 0xff, 0xc8, 0x82, 0xa9, 0x7e, 0x0a, 0x08, 0x11, 0x78, 0x4a, 0x4a, 0x57, 0xf5, 0x15, + 0x97, 0x03, 0x49, 0x4f, 0xd8, 0x10, 0xcf, 0x08, 0x3e, 0x4f, 0xad, 0xf4, 0x47, 0xc5, 0xbb, 0xd1, + 0x41, 0x1f, 0x80, 0xe3, 0xc6, 0xa0, 0xc4, 0x6a, 0x54, 0x6b, 0xf5, 0x19, 0x6a, 0xf1, 0xcd, 0x66, + 0x60, 0x0f, 0x76, 0xa6, 0x9f, 0xc8, 0xb6, 0x09, 0x0d, 0xd9, 0x43, 0xc7, 0xfe, 0xf1, 0x9e, 0x4f, + 0xad, 0x8c, 0x9b, 0xd7, 0xad, 0x1e, 0xf7, 0xc9, 0xfb, 0x0e, 0xc3, 0xa0, 0x60, 0x8e, 0x16, 0x15, + 0x94, 0xd2, 0x1f, 0xe7, 0x11, 0x06, 0x31, 0xd8, 0xbf, 0x31, 0x04, 0xbb, 0xf4, 0x6c, 0x80, 0xdd, + 0xca, 0xbe, 0x4f, 0x95, 0x3f, 0x6f, 0xa9, 0xe3, 0x43, 0x2e, 0xb4, 0x9a, 0x87, 0x35, 0xf6, 0x7c, + 0xc3, 0x18, 0xf3, 0x40, 0x1a, 0x25, 0x12, 0xd2, 0x07, 0x95, 0xe8, 0x2b, 0x56, 0xfa, 0x00, 0x94, + 0x07, 0x8f, 0x7a, 0x87, 0xd6, 0x27, 0xe3, 0x54, 0x95, 0x77, 0x4c, 0x9f, 0xc5, 0xf5, 0x3b, 0x6f, + 0x9d, 0x01, 0x58, 0xf7, 0x02, 0xc7, 0xf7, 0x5e, 0xa5, 0xdb, 0xc1, 0x0a, 0xb3, 0x68, 0x98, 0x89, + 0x78, 0x59, 0xb5, 0x62, 0x03, 0xe3, 0xcc, 0x5f, 0x87, 0x51, 0xe3, 0xcd, 0x73, 0xe2, 0x7f, 0x4e, + 0x9a, 0xf1, 0x3f, 0x35, 0x23, 0x6c, 0xe7, 0xcc, 0x7b, 0xe0, 0x78, 0xb6, 0x83, 0xfb, 0x79, 0xde, + 0xfe, 0x3f, 0x23, 0xd9, 0x13, 0xc9, 0x55, 0x12, 0xb5, 0x68, 0xd7, 0xde, 0xf0, 0xe4, 0xbd, 0xe1, + 0xc9, 0x7b, 0xc3, 0x93, 0x67, 0x1e, 0xc6, 0x08, 0x2f, 0xd5, 0xc8, 0x11, 0x79, 0xa9, 0x52, 0x7e, + 0xb7, 0x6a, 0xe1, 0x7e, 0x37, 0xfb, 0x33, 0x3d, 0x47, 0x15, 0xab, 0x11, 0x21, 0x28, 0x84, 0x4a, + 0x10, 0x36, 0x89, 0x34, 0xea, 0xaf, 0x15, 0x63, 0xa1, 0xde, 0x08, 0x9b, 0x46, 0x58, 0x3e, 0xfd, + 0x17, 0x63, 0xce, 0xc7, 0xfe, 0xdf, 0x3d, 0x86, 0xcd, 0x6d, 0xe6, 0x27, 0xda, 0x26, 0x41, 0x82, + 0xae, 0xa7, 0xac, 0xbc, 0x6f, 0xce, 0x9c, 0xba, 0xbf, 0xb5, 0x5f, 0x02, 0xd6, 0x5d, 0x4a, 0x61, + 0x86, 0x91, 0x30, 0x0c, 0xc2, 0xcf, 0x5b, 0x30, 0xe1, 0xa4, 0x38, 0x15, 0x96, 0x51, 0x63, 0x9e, + 0x98, 0x28, 0x83, 0x3a, 0x63, 0x2b, 0x66, 0x78, 0xdb, 0x9f, 0x1e, 0x86, 0xd4, 0xc6, 0x81, 0x4f, + 0xf8, 0x6f, 0x84, 0x91, 0x88, 0xb4, 0xc3, 0x9b, 0x78, 0x51, 0xbc, 0xb4, 0x4e, 0xeb, 0xe2, 0xcd, + 0x58, 0xc2, 0xa9, 0xb2, 0x6f, 0x3b, 0xc9, 0xa6, 0xd0, 0xe2, 0x4a, 0xd9, 0xaf, 0x38, 0xc9, 0x26, + 0x66, 0x10, 0x6a, 0xf3, 0x27, 0xa9, 0xa0, 0x07, 0x71, 0xb8, 0xaf, 0xba, 0x98, 0x0e, 0x89, 0xc0, + 0x19, 0x6c, 0xf4, 0x0a, 0x0c, 0x6d, 0x12, 0xbf, 0x25, 0xe6, 0x7c, 0xa3, 0xb8, 0x61, 0x62, 0xef, + 0x7a, 0x95, 0xf8, 0x2d, 0xae, 0x02, 0xe8, 0x2f, 0xcc, 0x58, 0xd1, 0x05, 0x5f, 0xdb, 0xea, 0xc4, + 0x49, 0xd8, 0xf2, 0x5e, 0x95, 0x3e, 0xed, 0xf7, 0x15, 0xcc, 0xf8, 0xba, 0xa4, 0xcf, 0x9d, 0x87, + 0xea, 0x2f, 0xd6, 0x9c, 0x59, 0x3f, 0x9a, 0x5e, 0xc4, 0xd6, 0x4a, 0x57, 0xb8, 0xa6, 0x8b, 0xee, + 0xc7, 0xbc, 0xa4, 0xcf, 0xfb, 0xa1, 0xfe, 0x62, 0xcd, 0x19, 0x75, 0x95, 0xe0, 0x19, 0x65, 0x7d, + 0xb8, 0x59, 0x70, 0x1f, 0xb8, 0xd0, 0xc9, 0x15, 0x40, 0xcf, 0x40, 0xc5, 0xdd, 0x74, 0xa2, 0x64, + 0x6a, 0x8c, 0x4d, 0x1a, 0xb5, 0x7c, 0xe7, 0x68, 0x23, 0xe6, 0x30, 0xf4, 0x34, 0x94, 0x23, 0xb2, + 0xce, 0x82, 0xd4, 0x8d, 0xf0, 0x38, 0x4c, 0xd6, 0x31, 0x6d, 0x57, 0x06, 0xe9, 0x44, 0xdf, 0xb8, + 0xc9, 0x1f, 0x2d, 0xa5, 0x2d, 0xda, 0xf4, 0xc8, 0xf0, 0xf5, 0xe0, 0x76, 0xa2, 0x58, 0xba, 0x42, + 0x8d, 0xf5, 0xc0, 0x9a, 0xb1, 0x84, 0xa3, 0x4f, 0x5a, 0x30, 0x72, 0x27, 0x0e, 0x83, 0x40, 0x2d, + 0xec, 0x5b, 0x05, 0x0f, 0xd6, 0x35, 0x4e, 0x5d, 0xf7, 0x41, 0x34, 0x60, 0xc9, 0x97, 0x76, 0x97, + 0xdc, 0x73, 0xfd, 0x4e, 0xb3, 0x27, 0x26, 0xea, 0x12, 0x6f, 0xc6, 0x12, 0x4e, 0x51, 0xbd, 0x80, + 0xa3, 0x0e, 0xa5, 0x51, 0x17, 0x02, 0x81, 0x2a, 0xe0, 0xf6, 0x4f, 0x57, 0xe1, 0x54, 0xee, 0xf2, + 0xa1, 0xb6, 0x26, 0xb3, 0xe6, 0x2e, 0x7b, 0x3e, 0x91, 0xd1, 0x80, 0xcc, 0xd6, 0xbc, 0xa5, 0x5a, + 0xb1, 0x81, 0x81, 0xbe, 0x0b, 0xa0, 0xed, 0x44, 0x4e, 0x8b, 0xa8, 0xa3, 0x8a, 0x03, 0x9b, 0x74, + 0xb4, 0x1f, 0x2b, 0x92, 0xa6, 0x76, 0xd7, 0xa8, 0xa6, 0x18, 0x1b, 0x2c, 0xd1, 0x0b, 0x30, 0x1a, + 0x11, 0x9f, 0x38, 0x31, 0xcb, 0x82, 0xc8, 0x26, 0x8b, 0x61, 0x0d, 0xc2, 0x26, 0x1e, 0x7a, 0x56, + 0x05, 0x4e, 0x0e, 0xa5, 0xa3, 0x8a, 0xd2, 0xc1, 0x93, 0xe8, 0x8b, 0x16, 0x4c, 0xac, 0x7b, 0x3e, + 0xd1, 0xdc, 0x45, 0x6a, 0xd7, 0xf2, 0xc1, 0x5f, 0xf2, 0xb2, 0x49, 0x57, 0xcb, 0xd0, 0x54, 0x73, + 0x8c, 0x33, 0xec, 0xe9, 0x67, 0xde, 0x26, 0x11, 0x13, 0xbe, 0xc3, 0xe9, 0xcf, 0x7c, 0x8b, 0x37, + 0x63, 0x09, 0x47, 0xb3, 0x70, 0xac, 0xed, 0xc4, 0xf1, 0x5c, 0x44, 0x9a, 0x24, 0x48, 0x3c, 0xc7, + 0xe7, 0xb9, 0x54, 0x55, 0x9d, 0x55, 0xb0, 0x92, 0x06, 0xe3, 0x2c, 0x3e, 0x7a, 0x3f, 0x3c, 0xc9, + 0x7d, 0x81, 0x4b, 0x5e, 0x1c, 0x7b, 0xc1, 0x86, 0x9e, 0x06, 0xc2, 0x25, 0x3a, 0x2d, 0x48, 0x3d, + 0xb9, 0x90, 0x8f, 0x86, 0xfb, 0x3d, 0x8f, 0x9e, 0x87, 0x6a, 0xbc, 0xe5, 0xb5, 0xe7, 0xa2, 0x66, + 0xcc, 0xce, 0x01, 0xab, 0xda, 0x01, 0xdf, 0x10, 0xed, 0x58, 0x61, 0x20, 0x17, 0xc6, 0xf8, 0x27, + 0xe1, 0x91, 0x9f, 0x42, 0x82, 0xbe, 0xbd, 0xaf, 0x05, 0x23, 0x72, 0xad, 0x67, 0xb0, 0x73, 0xf7, + 0x92, 0x3c, 0x95, 0xe4, 0x87, 0x68, 0xb7, 0x0c, 0x32, 0x38, 0x45, 0x34, 0xbd, 0x99, 0x1d, 0x1d, + 0x60, 0x33, 0xfb, 0x02, 0x8c, 0x6e, 0x75, 0xd6, 0x88, 0x18, 0x79, 0x21, 0xd8, 0xd4, 0xec, 0xbb, + 0xae, 0x41, 0xd8, 0xc4, 0x63, 0x41, 0xb7, 0x6d, 0x4f, 0xfc, 0x8b, 0xa7, 0xc6, 0x8d, 0xa0, 0xdb, + 0x95, 0x05, 0xd9, 0x8c, 0x4d, 0x1c, 0xda, 0x35, 0x3a, 0x16, 0xab, 0x24, 0x66, 0x39, 0x35, 0x74, + 0xb8, 0x54, 0xd7, 0x1a, 0x12, 0x80, 0x35, 0x0e, 0x5a, 0x81, 0x93, 0xf4, 0x4f, 0x83, 0xe5, 0x9a, + 0xdf, 0x72, 0x7c, 0xaf, 0xc9, 0x23, 0x40, 0x8f, 0xa5, 0x3d, 0xd9, 0x8d, 0x1c, 0x1c, 0x9c, 0xfb, + 0xa4, 0xfd, 0x23, 0xa5, 0xb4, 0x65, 0x65, 0x8a, 0x30, 0x14, 0x53, 0x41, 0x95, 0xdc, 0x72, 0x22, + 0x69, 0xe9, 0x1d, 0x30, 0x21, 0x4e, 0xd0, 0xbd, 0xe5, 0x44, 0xa6, 0xc8, 0x63, 0x0c, 0xb0, 0xe4, + 0x84, 0xee, 0xc0, 0x50, 0xe2, 0x3b, 0x05, 0xa5, 0xdb, 0x1a, 0x1c, 0xb5, 0xfb, 0x6f, 0x71, 0x36, + 0xc6, 0x8c, 0x07, 0x3a, 0x4b, 0xb7, 0xad, 0x6b, 0xf2, 0x4c, 0x55, 0xec, 0x34, 0xd7, 0x62, 0xcc, + 0x5a, 0xed, 0xbf, 0x35, 0x9e, 0xa3, 0x75, 0x94, 0x21, 0x80, 0x2e, 0x02, 0xd0, 0x49, 0xb3, 0x12, + 0x91, 0x75, 0xef, 0x9e, 0x30, 0xc4, 0x94, 0x64, 0xbb, 0xa1, 0x20, 0xd8, 0xc0, 0x92, 0xcf, 0x34, + 0x3a, 0xeb, 0xf4, 0x99, 0x52, 0xef, 0x33, 0x1c, 0x82, 0x0d, 0x2c, 0xf4, 0x2e, 0x18, 0xf6, 0x5a, + 0xce, 0x86, 0x8a, 0x07, 0x3f, 0x4b, 0x45, 0xda, 0x02, 0x6b, 0x79, 0xb0, 0x33, 0x3d, 0xa1, 0x3a, + 0xc4, 0x9a, 0xb0, 0xc0, 0x45, 0x3f, 0x6e, 0xc1, 0x98, 0x1b, 0xb6, 0x5a, 0x61, 0xc0, 0xfd, 0x06, + 0xc2, 0x09, 0x72, 0xe7, 0xb0, 0xcc, 0xa4, 0x99, 0x39, 0x83, 0x19, 0xf7, 0x82, 0xa8, 0xbc, 0x60, + 0x13, 0x84, 0x53, 0xbd, 0x32, 0x25, 0x5f, 0x65, 0x0f, 0xc9, 0xf7, 0xb3, 0x16, 0x4c, 0xf2, 0x67, + 0x0d, 0x77, 0x86, 0xc8, 0x6a, 0x0d, 0x0f, 0xf9, 0xb5, 0x7a, 0x3c, 0x3c, 0xca, 0xad, 0xdf, 0x03, + 0xc7, 0xbd, 0x9d, 0x44, 0x57, 0x60, 0x72, 0x3d, 0x8c, 0x5c, 0x62, 0x0e, 0x84, 0x10, 0xdb, 0x8a, + 0xd0, 0xe5, 0x2c, 0x02, 0xee, 0x7d, 0x06, 0xdd, 0x82, 0x27, 0x8c, 0x46, 0x73, 0x1c, 0xb8, 0xe4, + 0x3e, 0x27, 0xa8, 0x3d, 0x71, 0x39, 0x17, 0x0b, 0xf7, 0x79, 0x3a, 0x2d, 0x24, 0x6b, 0x03, 0x08, + 0xc9, 0x8f, 0xc0, 0x69, 0xb7, 0x77, 0x64, 0xb6, 0xe3, 0xce, 0x5a, 0xcc, 0xe5, 0x78, 0xb5, 0xfe, + 0x66, 0x41, 0xe0, 0xf4, 0x5c, 0x3f, 0x44, 0xdc, 0x9f, 0x06, 0xfa, 0x18, 0x54, 0x23, 0xc2, 0xbe, + 0x4a, 0x2c, 0x52, 0x3c, 0x0f, 0xe8, 0xe6, 0xd1, 0x16, 0x3c, 0x27, 0xab, 0x35, 0x93, 0x68, 0x88, + 0xb1, 0xe2, 0x88, 0xee, 0xc2, 0x48, 0x9b, 0xee, 0x0f, 0x45, 0xae, 0xe6, 0x81, 0xb7, 0x7f, 0x8a, + 0x39, 0x3b, 0x34, 0x33, 0x6a, 0x6b, 0x70, 0x26, 0x58, 0x72, 0xa3, 0xb6, 0x9a, 0x1b, 0xb6, 0xda, + 0x61, 0x40, 0x82, 0x44, 0x2a, 0x91, 0x09, 0x7e, 0xb2, 0x25, 0x5b, 0xb1, 0x81, 0xd1, 0xa3, 0xcb, + 0x35, 0xda, 0xd4, 0xe4, 0x2e, 0xba, 0xdc, 0xa0, 0xd6, 0xef, 0x79, 0xaa, 0x6c, 0x98, 0x3f, 0xf5, + 0xb6, 0x97, 0x6c, 0x86, 0x9d, 0x44, 0xba, 0x07, 0x84, 0xa2, 0x52, 0xca, 0x66, 0x31, 0x07, 0x07, + 0xe7, 0x3e, 0x99, 0xd5, 0xac, 0xc7, 0x1e, 0x4e, 0xb3, 0x1e, 0x1f, 0x40, 0xb3, 0x36, 0xe0, 0x14, + 0xeb, 0x81, 0xb0, 0x92, 0xa5, 0xb7, 0x36, 0x9e, 0x42, 0xac, 0xf3, 0x2a, 0xcd, 0x69, 0x31, 0x0f, + 0x09, 0xe7, 0x3f, 0x7b, 0xe6, 0xdb, 0x61, 0xb2, 0x47, 0xc8, 0xed, 0xcb, 0x13, 0x3b, 0x0f, 0x4f, + 0xe4, 0x8b, 0x93, 0x7d, 0xf9, 0x63, 0x7f, 0x3a, 0x93, 0x81, 0x60, 0x6c, 0xd1, 0x06, 0xf0, 0xed, + 0x3b, 0x50, 0x26, 0xc1, 0xb6, 0xd0, 0xae, 0x97, 0x0f, 0x36, 0xab, 0x2f, 0x05, 0xdb, 0x5c, 0x1a, + 0x32, 0x07, 0xe6, 0xa5, 0x60, 0x1b, 0x53, 0xda, 0xe8, 0x07, 0xad, 0xd4, 0x06, 0x82, 0x9f, 0x08, + 0x7c, 0xf8, 0x50, 0xf6, 0xa4, 0x03, 0xef, 0x29, 0xec, 0x7f, 0x5d, 0x82, 0xf3, 0x7b, 0x11, 0x19, + 0x60, 0xf8, 0x9e, 0x81, 0xe1, 0x98, 0xc5, 0x14, 0x09, 0x75, 0x35, 0x4a, 0x57, 0x31, 0x8f, 0x32, + 0xfa, 0x08, 0x16, 0x20, 0xe4, 0x43, 0xb9, 0xe5, 0xb4, 0x85, 0xa3, 0x78, 0xe1, 0xa0, 0x69, 0x9c, + 0xf4, 0xbf, 0xe3, 0x2f, 0x39, 0x6d, 0x3e, 0xe7, 0x8d, 0x06, 0x4c, 0xd9, 0xa0, 0x04, 0x2a, 0x4e, + 0x14, 0x39, 0x32, 0x80, 0xe5, 0x7a, 0x31, 0xfc, 0x66, 0x29, 0x49, 0x7e, 0xfe, 0x9f, 0x6a, 0xc2, + 0x9c, 0x99, 0xfd, 0xc3, 0xd5, 0x54, 0xce, 0x1f, 0x8b, 0x4a, 0x8a, 0x61, 0x58, 0xf8, 0x87, 0xad, + 0xa2, 0xb3, 0x67, 0x79, 0x52, 0x3d, 0xf3, 0x40, 0x88, 0xa2, 0x27, 0x82, 0x15, 0xfa, 0x9c, 0xc5, + 0x4a, 0x8b, 0xc8, 0x44, 0x4a, 0xb1, 0xab, 0x3f, 0x9c, 0x4a, 0x27, 0x66, 0xc1, 0x12, 0xd9, 0x88, + 0x4d, 0xee, 0xa2, 0x8c, 0x12, 0xdb, 0xcd, 0xf4, 0x96, 0x51, 0x62, 0xbb, 0x13, 0x09, 0x47, 0xf7, + 0x72, 0xa2, 0x8f, 0x0a, 0xa8, 0x38, 0x31, 0x40, 0xbc, 0xd1, 0x57, 0x2c, 0x98, 0xf4, 0xb2, 0x61, + 0x24, 0x62, 0x0f, 0x7c, 0xbb, 0x18, 0x67, 0x6e, 0x6f, 0x94, 0x8a, 0x32, 0x74, 0x7a, 0x40, 0xb8, + 0xb7, 0x33, 0xa8, 0x09, 0x43, 0x5e, 0xb0, 0x1e, 0x0a, 0xf3, 0xae, 0x7e, 0xb0, 0x4e, 0x2d, 0x04, + 0xeb, 0xa1, 0x5e, 0xcd, 0xf4, 0x1f, 0x66, 0xd4, 0xd1, 0x22, 0x9c, 0x94, 0x99, 0x5d, 0x57, 0xbd, + 0x38, 0x09, 0xa3, 0xee, 0xa2, 0xd7, 0xf2, 0x12, 0x66, 0x9a, 0x95, 0xeb, 0x53, 0x54, 0xbd, 0xe1, + 0x1c, 0x38, 0xce, 0x7d, 0x0a, 0xbd, 0x0a, 0x23, 0x32, 0x74, 0xa3, 0x5a, 0x84, 0x3f, 0xa1, 0x77, + 0xfe, 0xab, 0xc9, 0xd4, 0x10, 0xb1, 0x1b, 0x92, 0x21, 0xfa, 0xac, 0x05, 0x13, 0xfc, 0xf7, 0xd5, + 0x6e, 0x93, 0x67, 0x9a, 0xd6, 0x8a, 0xf0, 0x5b, 0x37, 0x52, 0x34, 0xeb, 0xe8, 0xfe, 0xce, 0xf4, + 0x44, 0xba, 0x0d, 0x67, 0xf8, 0xda, 0xff, 0x78, 0x0c, 0x7a, 0x83, 0x5d, 0xd2, 0x91, 0x2d, 0xd6, + 0x91, 0x47, 0xb6, 0xdc, 0x81, 0xa1, 0x58, 0x07, 0x78, 0x14, 0xb0, 0xcc, 0x04, 0x57, 0x7d, 0xfe, + 0xde, 0x0d, 0x5c, 0xcc, 0x78, 0xa0, 0x8e, 0x8a, 0x82, 0x29, 0x17, 0x74, 0xe4, 0x3f, 0x48, 0x20, + 0x0c, 0xba, 0x07, 0x23, 0x9b, 0x7c, 0x3a, 0x8a, 0xbd, 0xde, 0xd2, 0x41, 0xc7, 0x37, 0x35, 0xc7, + 0xf5, 0xe4, 0x13, 0x0d, 0x58, 0xb2, 0x63, 0x81, 0x94, 0x46, 0xa8, 0x17, 0x17, 0x24, 0xc5, 0x25, + 0xcd, 0x0e, 0x1e, 0xe7, 0xf5, 0x51, 0x18, 0x8b, 0x88, 0x1b, 0x06, 0xae, 0xe7, 0x93, 0xe6, 0xac, + 0x3c, 0x09, 0xdc, 0x4f, 0x3a, 0x24, 0xf3, 0x26, 0x61, 0x83, 0x06, 0x4e, 0x51, 0x64, 0xeb, 0x4c, + 0xd5, 0x4f, 0xa0, 0x1f, 0x84, 0x88, 0x83, 0x8f, 0xc5, 0x82, 0xaa, 0x35, 0x30, 0x9a, 0x7c, 0x9d, + 0xa5, 0xdb, 0x70, 0x86, 0x2f, 0xfa, 0x00, 0x40, 0xb8, 0xc6, 0xa3, 0x25, 0x67, 0x13, 0x71, 0x0a, + 0xb2, 0x9f, 0x57, 0x9d, 0xe0, 0x39, 0xd7, 0x92, 0x02, 0x36, 0xa8, 0xa1, 0xeb, 0x00, 0x7c, 0xe5, + 0xac, 0x76, 0xdb, 0x72, 0x43, 0x28, 0xf3, 0x59, 0xa1, 0xa1, 0x20, 0x0f, 0x76, 0xa6, 0x7b, 0x7d, + 0xce, 0xec, 0x34, 0xcd, 0x78, 0x1c, 0x7d, 0x07, 0x8c, 0xc4, 0x9d, 0x56, 0xcb, 0x51, 0x67, 0x24, + 0x05, 0x66, 0x71, 0x73, 0xba, 0x86, 0x60, 0xe4, 0x0d, 0x58, 0x72, 0x44, 0x77, 0xa8, 0x88, 0x17, + 0x12, 0x8a, 0xaf, 0x22, 0x6e, 0xa1, 0x70, 0x4f, 0xe0, 0xbb, 0xe5, 0x2e, 0x06, 0xe7, 0xe0, 0x3c, + 0xd8, 0x99, 0x7e, 0x22, 0xdd, 0xbe, 0x18, 0x8a, 0xbc, 0xea, 0x5c, 0x9a, 0xe8, 0x9a, 0x2c, 0xd4, + 0x46, 0x5f, 0x5b, 0x56, 0xf9, 0x79, 0x4e, 0x17, 0x6a, 0x63, 0xcd, 0xfd, 0xc7, 0xcc, 0x7c, 0x18, + 0x2d, 0xc1, 0x09, 0x37, 0x0c, 0x92, 0x28, 0xf4, 0x7d, 0x5e, 0xcc, 0x91, 0xef, 0xcd, 0xf9, 0x19, + 0xca, 0x53, 0xa2, 0xdb, 0x27, 0xe6, 0x7a, 0x51, 0x70, 0xde, 0x73, 0xd4, 0x26, 0xcf, 0xea, 0x87, + 0x89, 0x42, 0xe2, 0x0a, 0x52, 0x34, 0x85, 0x84, 0x52, 0x6e, 0xef, 0x3d, 0x34, 0x45, 0x90, 0x3e, + 0x5d, 0x16, 0x5f, 0xec, 0x5d, 0x30, 0x46, 0xee, 0x25, 0x24, 0x0a, 0x1c, 0xff, 0x26, 0x5e, 0x94, + 0x07, 0x16, 0x6c, 0x61, 0x5e, 0x32, 0xda, 0x71, 0x0a, 0x0b, 0xd9, 0xca, 0x4b, 0x66, 0x14, 0x30, + 0xe0, 0x5e, 0x32, 0xe9, 0x13, 0xb3, 0x7f, 0xaa, 0x9c, 0xb2, 0x59, 0x1f, 0xc9, 0x59, 0x36, 0x2b, + 0xab, 0x25, 0xeb, 0x8f, 0x31, 0x80, 0xd8, 0x8b, 0x15, 0xc9, 0x59, 0x85, 0x0b, 0x2e, 0x9b, 0x8c, + 0x70, 0x9a, 0x2f, 0xda, 0x82, 0xca, 0x66, 0x18, 0x27, 0x72, 0x87, 0x76, 0xc0, 0xcd, 0xe0, 0xd5, + 0x30, 0x4e, 0x98, 0xa1, 0xa5, 0x5e, 0x9b, 0xb6, 0xc4, 0x98, 0xf3, 0xa0, 0x7b, 0xff, 0x78, 0xd3, + 0x89, 0x9a, 0xa9, 0xb8, 0x52, 0x65, 0x4f, 0x37, 0x34, 0x08, 0x9b, 0x78, 0xf6, 0x1f, 0x5b, 0xa9, + 0x53, 0xad, 0xc3, 0x3a, 0xf6, 0xff, 0x84, 0x95, 0x2e, 0xa9, 0x50, 0x2a, 0x62, 0xeb, 0x66, 0x96, + 0x15, 0xd9, 0xb3, 0x3a, 0x83, 0xfd, 0x83, 0x16, 0x8c, 0xd4, 0x1d, 0x77, 0x2b, 0x5c, 0x5f, 0x47, + 0xcf, 0x43, 0xb5, 0xd9, 0x89, 0xcc, 0xea, 0x0e, 0xca, 0x59, 0x35, 0x2f, 0xda, 0xb1, 0xc2, 0xa0, + 0x53, 0x7f, 0xdd, 0x71, 0x65, 0x71, 0x91, 0x32, 0x9f, 0xfa, 0x97, 0x59, 0x0b, 0x16, 0x10, 0x3a, + 0xfc, 0x2d, 0xe7, 0x9e, 0x7c, 0x38, 0x7b, 0xa4, 0xb6, 0xa4, 0x41, 0xd8, 0xc4, 0xb3, 0x7f, 0xc5, + 0x82, 0xa9, 0xba, 0x13, 0x7b, 0xee, 0x6c, 0x27, 0xd9, 0xac, 0x7b, 0xc9, 0x5a, 0xc7, 0xdd, 0x22, + 0x09, 0x2f, 0x42, 0x43, 0x7b, 0xd9, 0x89, 0xe9, 0x0a, 0x54, 0x3b, 0x66, 0xd5, 0xcb, 0x9b, 0xa2, + 0x1d, 0x2b, 0x0c, 0xf4, 0x2a, 0x8c, 0xb6, 0x9d, 0x38, 0xbe, 0x1b, 0x46, 0x4d, 0x4c, 0xd6, 0x8b, + 0x29, 0x53, 0xd5, 0x20, 0x6e, 0x44, 0x12, 0x4c, 0xd6, 0x45, 0x64, 0x8e, 0xa6, 0x8f, 0x4d, 0x66, + 0xf6, 0xf7, 0x59, 0x70, 0xb2, 0x4e, 0x9c, 0x88, 0x44, 0xac, 0xaa, 0x95, 0x7a, 0x11, 0xf4, 0x0a, + 0x54, 0x13, 0xda, 0x42, 0x7b, 0x64, 0x15, 0xdb, 0x23, 0x16, 0x53, 0xb3, 0x2a, 0x88, 0x63, 0xc5, + 0xc6, 0xfe, 0x82, 0x05, 0xa7, 0xf3, 0xfa, 0x32, 0xe7, 0x87, 0x9d, 0xe6, 0xa3, 0xe8, 0xd0, 0xdf, + 0xb1, 0x60, 0x8c, 0x1d, 0xd7, 0xcf, 0x93, 0xc4, 0xf1, 0xfc, 0x9e, 0x5a, 0x9d, 0xd6, 0x80, 0xb5, + 0x3a, 0xcf, 0xc3, 0xd0, 0x66, 0xd8, 0x22, 0xd9, 0x50, 0x93, 0xab, 0x61, 0x8b, 0x60, 0x06, 0x41, + 0xef, 0xa0, 0x93, 0xd0, 0x0b, 0x12, 0x87, 0x2e, 0x47, 0x79, 0x9c, 0x71, 0x8c, 0x4f, 0x40, 0xd5, + 0x8c, 0x4d, 0x1c, 0xfb, 0x5f, 0xd6, 0x60, 0x44, 0x04, 0x84, 0x0d, 0x5c, 0x14, 0x49, 0x7a, 0x71, + 0x4a, 0x7d, 0xbd, 0x38, 0x31, 0x0c, 0xbb, 0xac, 0xb0, 0xb2, 0xb0, 0xd0, 0xaf, 0x17, 0x12, 0x41, + 0xc8, 0x6b, 0x35, 0xeb, 0x6e, 0xf1, 0xff, 0x58, 0xb0, 0x42, 0xaf, 0x59, 0x70, 0xcc, 0x0d, 0x83, + 0x80, 0xb8, 0xda, 0x76, 0x1c, 0x2a, 0x62, 0x83, 0x30, 0x97, 0x26, 0xaa, 0x4f, 0x82, 0x33, 0x00, + 0x9c, 0x65, 0x8f, 0x5e, 0x82, 0x71, 0x3e, 0x66, 0xb7, 0x52, 0x67, 0x30, 0xba, 0x2a, 0xa3, 0x09, + 0xc4, 0x69, 0x5c, 0x34, 0xc3, 0xcf, 0xb2, 0x44, 0x49, 0xc3, 0x61, 0xed, 0xaa, 0x36, 0x8a, 0x19, + 0x1a, 0x18, 0x28, 0x02, 0x14, 0x91, 0xf5, 0x88, 0xc4, 0x9b, 0x22, 0x60, 0x8e, 0xd9, 0xad, 0x23, + 0x0f, 0x57, 0xb1, 0x04, 0xf7, 0x50, 0xc2, 0x39, 0xd4, 0xd1, 0x96, 0x70, 0x23, 0x54, 0x8b, 0x90, + 0xe7, 0xe2, 0x33, 0xf7, 0xf5, 0x26, 0x4c, 0x43, 0x85, 0xa9, 0x2e, 0x66, 0x2f, 0x97, 0x79, 0x96, + 0x2c, 0x53, 0x6c, 0x98, 0xb7, 0xa3, 0x79, 0x38, 0x9e, 0x29, 0x13, 0x19, 0x8b, 0xb3, 0x12, 0x95, + 0x11, 0x99, 0x29, 0x30, 0x19, 0xe3, 0x9e, 0x27, 0x4c, 0x17, 0xd3, 0xe8, 0x1e, 0x2e, 0xa6, 0xae, + 0x0a, 0xcb, 0xe6, 0xa7, 0x18, 0xef, 0x2d, 0x64, 0x00, 0x06, 0x8a, 0xc1, 0xfe, 0x81, 0x4c, 0x0c, + 0xf6, 0x38, 0xeb, 0xc0, 0xad, 0x62, 0x3a, 0xb0, 0xff, 0x80, 0xeb, 0x47, 0x19, 0x40, 0xfd, 0xbf, + 0x2c, 0x90, 0xdf, 0x75, 0xce, 0x71, 0x37, 0x09, 0x9d, 0x32, 0x39, 0xa9, 0x36, 0xd6, 0xbe, 0x52, + 0x6d, 0x2e, 0x40, 0x8d, 0x8e, 0x13, 0x7f, 0x94, 0xeb, 0x7d, 0xe5, 0x01, 0x99, 0x5d, 0x59, 0x10, + 0x4f, 0x69, 0x1c, 0x14, 0xc2, 0xa4, 0xef, 0xc4, 0x09, 0xeb, 0x41, 0xa3, 0x1b, 0xb8, 0x0f, 0x59, + 0x2f, 0x88, 0xa5, 0xdd, 0x2d, 0x66, 0x09, 0xe1, 0x5e, 0xda, 0xf6, 0xbf, 0xad, 0xc0, 0x78, 0x4a, + 0x32, 0xee, 0xd3, 0x60, 0x78, 0x1e, 0xaa, 0x52, 0x87, 0x67, 0xab, 0xa6, 0x29, 0x45, 0xaf, 0x30, + 0xa8, 0xd2, 0x5a, 0xd3, 0x5a, 0x35, 0x6b, 0xe0, 0x18, 0x0a, 0x17, 0x9b, 0x78, 0x4c, 0x28, 0x27, + 0x7e, 0x3c, 0xe7, 0x7b, 0x24, 0x48, 0x78, 0x37, 0x8b, 0x11, 0xca, 0xab, 0x8b, 0x0d, 0x93, 0xa8, + 0x16, 0xca, 0x19, 0x00, 0xce, 0xb2, 0x47, 0x9f, 0xb6, 0x60, 0xdc, 0xb9, 0x1b, 0xeb, 0xea, 0xff, + 0x22, 0xda, 0xfa, 0x80, 0x4a, 0x2a, 0x75, 0xa1, 0x00, 0x77, 0xec, 0xa7, 0x9a, 0x70, 0x9a, 0x29, + 0x7a, 0xdd, 0x02, 0x44, 0xee, 0x11, 0x57, 0xc6, 0x83, 0x8b, 0xbe, 0x0c, 0x17, 0xb1, 0x83, 0xbf, + 0xd4, 0x43, 0x97, 0x4b, 0xf5, 0xde, 0x76, 0x9c, 0xd3, 0x07, 0x74, 0x0d, 0x50, 0xd3, 0x8b, 0x9d, + 0x35, 0x9f, 0xcc, 0x85, 0x2d, 0x99, 0x2a, 0x2e, 0xce, 0xd3, 0xcf, 0x88, 0x71, 0x46, 0xf3, 0x3d, + 0x18, 0x38, 0xe7, 0x29, 0x36, 0xcb, 0xa2, 0xf0, 0x5e, 0xf7, 0x66, 0xe4, 0x33, 0x2d, 0x61, 0xce, + 0x32, 0xd1, 0x8e, 0x15, 0x86, 0xfd, 0x27, 0x65, 0xb5, 0x94, 0x75, 0xf2, 0x83, 0x63, 0x04, 0x61, + 0x5b, 0x0f, 0x1f, 0x84, 0xad, 0x23, 0xa5, 0x7a, 0x0b, 0x20, 0xa4, 0xf2, 0xa5, 0x4b, 0x8f, 0x28, + 0x5f, 0xfa, 0xbb, 0xad, 0x54, 0x65, 0xc2, 0xd1, 0x8b, 0x1f, 0x28, 0x36, 0xf1, 0x62, 0x86, 0x47, + 0x71, 0x65, 0xf4, 0x4a, 0x26, 0x78, 0xef, 0x79, 0xa8, 0xae, 0xfb, 0x0e, 0x2b, 0x99, 0xc3, 0x16, + 0xaa, 0x11, 0x61, 0x76, 0x59, 0xb4, 0x63, 0x85, 0x41, 0xa5, 0xbe, 0x41, 0x74, 0x5f, 0x52, 0xfb, + 0x3f, 0x94, 0x61, 0xd4, 0xd0, 0xf8, 0xb9, 0xe6, 0x9b, 0xf5, 0x98, 0x99, 0x6f, 0xa5, 0x7d, 0x98, + 0x6f, 0xdf, 0x05, 0x35, 0x57, 0x6a, 0xa3, 0x62, 0xee, 0x70, 0xc8, 0xea, 0x38, 0xad, 0x90, 0x54, + 0x13, 0xd6, 0x3c, 0xd1, 0x95, 0x54, 0x4e, 0x6e, 0xca, 0x2f, 0x90, 0x97, 0x34, 0x2b, 0x34, 0x5a, + 0xef, 0x33, 0xd9, 0xf8, 0x80, 0xca, 0xde, 0xf1, 0x01, 0xf6, 0xef, 0x59, 0xea, 0xe3, 0x1e, 0x41, + 0xf1, 0xa5, 0x3b, 0xe9, 0xe2, 0x4b, 0x97, 0x0a, 0x19, 0xe6, 0x3e, 0x55, 0x97, 0xbe, 0xcf, 0x82, + 0x73, 0xbb, 0x57, 0x33, 0x47, 0xcf, 0x40, 0x65, 0x23, 0x0a, 0x3b, 0x6d, 0xa1, 0x83, 0x15, 0x1d, + 0x56, 0x3a, 0x1e, 0x73, 0x18, 0xdd, 0x44, 0x6d, 0x79, 0x41, 0x33, 0xbb, 0x89, 0xba, 0xee, 0x05, + 0x4d, 0xcc, 0x20, 0x03, 0x94, 0xbb, 0xbd, 0x01, 0x23, 0x73, 0x61, 0xab, 0xe5, 0x04, 0x4d, 0xf4, + 0x16, 0x18, 0x71, 0xf9, 0x4f, 0xe1, 0xcf, 0x63, 0x07, 0xe7, 0x02, 0x8a, 0x25, 0x0c, 0x9d, 0x85, + 0x21, 0x27, 0xda, 0x90, 0x3e, 0x3c, 0x16, 0x90, 0x37, 0x1b, 0x6d, 0xc4, 0x98, 0xb5, 0xda, 0x7f, + 0x66, 0xc1, 0x04, 0x7d, 0xc4, 0x63, 0x03, 0xcc, 0x86, 0xf6, 0x59, 0x18, 0x76, 0x3a, 0xc9, 0x66, + 0xd8, 0xb3, 0x27, 0x9c, 0x65, 0xad, 0x58, 0x40, 0x69, 0x67, 0x55, 0x05, 0x11, 0xa3, 0xb3, 0xf3, + 0x74, 0x5d, 0x31, 0x08, 0x35, 0xab, 0xe3, 0xce, 0x5a, 0xde, 0xc9, 0x6d, 0x83, 0x37, 0x63, 0x09, + 0xa7, 0xc4, 0xd6, 0xc2, 0x66, 0x57, 0x84, 0x19, 0x2b, 0x62, 0xf5, 0xb0, 0xd9, 0xc5, 0x0c, 0x82, + 0x9e, 0x86, 0x72, 0xbc, 0xe9, 0xc8, 0x18, 0x01, 0x19, 0xf1, 0xde, 0xb8, 0x3a, 0x8b, 0x69, 0xbb, + 0x4a, 0xe0, 0x88, 0xfc, 0x6c, 0xbc, 0x6f, 0x3a, 0x81, 0x23, 0xf2, 0xed, 0x7f, 0x3e, 0x04, 0x2c, + 0xf6, 0xc7, 0x89, 0x48, 0x73, 0x35, 0x64, 0x05, 0xaa, 0x0f, 0xf5, 0x88, 0x5d, 0x6f, 0xaa, 0x1f, + 0xe7, 0x63, 0x76, 0xe3, 0xa8, 0xb5, 0x7c, 0xd4, 0x47, 0xad, 0xf9, 0xa7, 0xe7, 0x43, 0x8f, 0xd1, + 0xe9, 0xb9, 0xfd, 0x79, 0x0b, 0x90, 0x8a, 0xe4, 0xd2, 0xe1, 0x2d, 0x17, 0xa0, 0xa6, 0x42, 0xc7, + 0xc4, 0x7a, 0xd1, 0x22, 0x5a, 0x02, 0xb0, 0xc6, 0x19, 0xc0, 0x93, 0xf2, 0x8c, 0xd4, 0x9f, 0xe5, + 0xb4, 0x2c, 0x61, 0x5a, 0x57, 0xa8, 0x53, 0xfb, 0x97, 0x4a, 0xf0, 0x04, 0x37, 0xdd, 0x96, 0x9c, + 0xc0, 0xd9, 0x20, 0x2d, 0xda, 0xab, 0x41, 0x03, 0x96, 0x5c, 0xba, 0x85, 0xf7, 0x64, 0xb6, 0xc6, + 0x41, 0x65, 0x27, 0x97, 0x33, 0x5c, 0xb2, 0x2c, 0x04, 0x5e, 0x82, 0x19, 0x71, 0x14, 0x43, 0x55, + 0x5e, 0xc2, 0x25, 0x74, 0x61, 0x41, 0x8c, 0x94, 0x5a, 0x10, 0x56, 0x0e, 0xc1, 0x8a, 0x11, 0x35, + 0x65, 0xfc, 0xd0, 0xdd, 0xa2, 0x4b, 0x3e, 0x6b, 0xca, 0x2c, 0x8a, 0x76, 0xac, 0x30, 0xec, 0x16, + 0x1c, 0x93, 0x63, 0xd8, 0xbe, 0x4e, 0xba, 0x98, 0xac, 0x53, 0xfd, 0xef, 0xca, 0x26, 0xe3, 0x5e, + 0x30, 0xa5, 0xff, 0xe7, 0x4c, 0x20, 0x4e, 0xe3, 0xca, 0x9a, 0xd5, 0xa5, 0xfc, 0x9a, 0xd5, 0xf6, + 0x2f, 0x59, 0x90, 0x35, 0x40, 0x98, 0x03, 0xce, 0xbc, 0xe4, 0xab, 0x5f, 0x31, 0xfb, 0x7d, 0x94, + 0xb1, 0xfd, 0x10, 0x8c, 0x3a, 0x09, 0xb5, 0x30, 0xb9, 0x37, 0xa8, 0xfc, 0x70, 0xa7, 0x98, 0x4b, + 0x61, 0xd3, 0x5b, 0xf7, 0x98, 0x17, 0xc8, 0x24, 0x67, 0xff, 0xed, 0x0a, 0xd4, 0xe6, 0xa3, 0xee, + 0xfe, 0xd3, 0xe6, 0x7a, 0x93, 0xe2, 0x4a, 0xfb, 0x4a, 0x8a, 0x93, 0x69, 0x77, 0xe5, 0xbe, 0x69, + 0x77, 0x32, 0x6d, 0x6e, 0xe8, 0x51, 0xa5, 0xcd, 0x55, 0x1e, 0x93, 0xb4, 0xb9, 0xe1, 0xc7, 0x20, + 0x6d, 0x6e, 0xe4, 0x88, 0xd3, 0xe6, 0xec, 0xff, 0x31, 0x04, 0x93, 0x3d, 0xe9, 0xcf, 0xe8, 0x45, + 0x18, 0x53, 0x6b, 0x54, 0x1e, 0x00, 0xd4, 0xcc, 0x30, 0x7a, 0x0d, 0xc3, 0x29, 0xcc, 0x01, 0x04, + 0xf5, 0x02, 0x9c, 0x88, 0xc8, 0x2b, 0x1d, 0xd2, 0x21, 0xb3, 0xeb, 0x09, 0x89, 0x1a, 0xc4, 0x0d, + 0x83, 0x26, 0x2f, 0x70, 0x5e, 0xae, 0x3f, 0x79, 0x7f, 0x67, 0xfa, 0x04, 0xee, 0x05, 0xe3, 0xbc, + 0x67, 0x50, 0x1b, 0xc6, 0x7d, 0x73, 0xe7, 0x2a, 0xe6, 0xf0, 0x43, 0x6d, 0x7a, 0x95, 0xac, 0x4a, + 0x35, 0xe3, 0x34, 0x83, 0xf4, 0xf6, 0xb7, 0xf2, 0x88, 0xb6, 0xbf, 0x9f, 0xd2, 0xdb, 0x5f, 0x1e, + 0x95, 0xf6, 0xc1, 0x82, 0xd3, 0xdf, 0x07, 0xd9, 0xff, 0x1e, 0x64, 0x47, 0xfb, 0x5e, 0xa8, 0xca, + 0x88, 0xdd, 0x81, 0x22, 0x5d, 0x4d, 0x3a, 0x7d, 0x34, 0xfb, 0x83, 0x12, 0xe4, 0x38, 0x6d, 0xa8, + 0xa4, 0xd5, 0xd6, 0x7e, 0x4a, 0xd2, 0xee, 0xcf, 0xe2, 0x47, 0xf7, 0x78, 0xb4, 0x32, 0xb7, 0xf1, + 0xde, 0x5f, 0xb4, 0xd3, 0x49, 0x07, 0x30, 0x2b, 0xfd, 0xa7, 0x82, 0x98, 0x2f, 0x02, 0xe8, 0x0d, + 0xa3, 0xb0, 0xf4, 0x55, 0xf8, 0x91, 0xde, 0x57, 0x62, 0x03, 0x0b, 0xbd, 0x00, 0xa3, 0x5e, 0x10, + 0x27, 0x8e, 0xef, 0x5f, 0xf5, 0x82, 0x44, 0x58, 0xff, 0xca, 0x98, 0x5d, 0xd0, 0x20, 0x6c, 0xe2, + 0x9d, 0x79, 0xb7, 0xf1, 0x5d, 0xf6, 0xf3, 0x3d, 0x37, 0xe1, 0xf4, 0x15, 0x2f, 0x51, 0xa2, 0x4d, + 0xcd, 0x23, 0xb6, 0xc9, 0x93, 0x1a, 0xc8, 0xea, 0xab, 0x81, 0x8c, 0x34, 0xd4, 0x52, 0x3a, 0x6b, + 0x36, 0x9b, 0x86, 0x6a, 0xbb, 0x70, 0xf2, 0x8a, 0x97, 0x5c, 0xf6, 0x7c, 0x72, 0x88, 0x4c, 0x7e, + 0x71, 0x18, 0xc6, 0xcc, 0xb2, 0x18, 0xfb, 0xd1, 0xd7, 0x5f, 0xa0, 0xbb, 0x13, 0x31, 0x10, 0x9e, + 0x0a, 0xa9, 0xb8, 0x7d, 0xe0, 0x1a, 0x1d, 0xf9, 0x83, 0x6b, 0x6c, 0x50, 0x34, 0x4f, 0x6c, 0x76, + 0x00, 0xdd, 0x85, 0xca, 0x3a, 0xcb, 0xa8, 0x2c, 0x17, 0x11, 0x0c, 0x97, 0x37, 0xf8, 0x7a, 0x45, + 0xf2, 0x9c, 0x4c, 0xce, 0x8f, 0x1a, 0x95, 0x51, 0x3a, 0x91, 0xdf, 0xc8, 0x73, 0x11, 0xd6, 0x8a, + 0xc2, 0xe8, 0xa7, 0x15, 0x2a, 0x0f, 0xa1, 0x15, 0x52, 0x32, 0x7a, 0xf8, 0x11, 0xc9, 0x68, 0x96, + 0x1d, 0x9b, 0x6c, 0xb2, 0x2d, 0x8f, 0x48, 0xcc, 0x1b, 0x61, 0x83, 0x60, 0x64, 0xc7, 0xa6, 0xc0, + 0x38, 0x8b, 0x8f, 0x3e, 0xae, 0xa4, 0x7c, 0xb5, 0x88, 0x23, 0x2b, 0x73, 0x46, 0x1f, 0xb6, 0x80, + 0xff, 0x7c, 0x09, 0x26, 0xae, 0x04, 0x9d, 0x95, 0x2b, 0x2b, 0x9d, 0x35, 0xdf, 0x73, 0xaf, 0x93, + 0x2e, 0x95, 0xe2, 0x5b, 0xa4, 0xbb, 0x30, 0x9f, 0xf5, 0xf5, 0x5c, 0xa7, 0x8d, 0x98, 0xc3, 0xa8, + 0xdc, 0x5a, 0xf7, 0x82, 0x0d, 0x12, 0xb5, 0x23, 0x4f, 0x9c, 0x26, 0x19, 0x72, 0xeb, 0xb2, 0x06, + 0x61, 0x13, 0x8f, 0xd2, 0x0e, 0xef, 0x06, 0xaa, 0x46, 0x99, 0xa2, 0xbd, 0x4c, 0x1b, 0x31, 0x87, + 0x51, 0xa4, 0x24, 0xea, 0x08, 0x67, 0xad, 0x81, 0xb4, 0x4a, 0x1b, 0x31, 0x87, 0x09, 0xdf, 0x0b, + 0x8b, 0x35, 0xac, 0xf4, 0xf8, 0x5e, 0x58, 0x98, 0x8e, 0x84, 0x53, 0xd4, 0x2d, 0xd2, 0x9d, 0x77, + 0x12, 0x27, 0xeb, 0x3a, 0xb9, 0xce, 0x9b, 0xb1, 0x84, 0xb3, 0x42, 0xeb, 0xe9, 0xe1, 0xf8, 0xba, + 0x2b, 0xb4, 0x9e, 0xee, 0x7e, 0x1f, 0x97, 0xdf, 0x97, 0x4b, 0x30, 0xf6, 0xc6, 0x65, 0xcc, 0xbb, + 0x5c, 0x06, 0x76, 0x1b, 0x26, 0x7b, 0x72, 0xf3, 0x07, 0xb0, 0x80, 0xf6, 0xac, 0x9d, 0x62, 0x63, + 0x18, 0xa5, 0x84, 0x65, 0xa1, 0xd1, 0x39, 0x98, 0xe4, 0x8b, 0x98, 0x72, 0x62, 0xa9, 0xd6, 0xaa, + 0xde, 0x02, 0x3b, 0x36, 0xbd, 0x95, 0x05, 0xe2, 0x5e, 0x7c, 0xfb, 0x07, 0x2c, 0x18, 0x4f, 0x95, + 0x4b, 0x28, 0xc8, 0x56, 0x63, 0xab, 0x3c, 0x64, 0xf1, 0xf2, 0x2c, 0x7f, 0xa9, 0xcc, 0xd4, 0xb1, + 0x5e, 0xe5, 0x1a, 0x84, 0x4d, 0x3c, 0xfb, 0xd7, 0xcb, 0x50, 0x95, 0xb1, 0x7d, 0x03, 0x74, 0xe5, + 0x73, 0x16, 0x8c, 0xab, 0xa3, 0x6a, 0x76, 0xb6, 0x50, 0x2a, 0x22, 0x7b, 0x93, 0xf6, 0x40, 0x79, + 0xc7, 0x82, 0xf5, 0x50, 0x6f, 0x1c, 0xb0, 0xc9, 0x0c, 0xa7, 0x79, 0xa3, 0x5b, 0x00, 0x71, 0x37, + 0x4e, 0x48, 0xcb, 0x38, 0xe5, 0xb0, 0x8d, 0x59, 0x36, 0xe3, 0x86, 0x11, 0xa1, 0x73, 0xea, 0x46, + 0xd8, 0x24, 0x0d, 0x85, 0xa9, 0x2d, 0x3d, 0xdd, 0x86, 0x0d, 0x4a, 0xe8, 0x55, 0x15, 0x58, 0x31, + 0x54, 0x84, 0x7e, 0x97, 0xe3, 0x3b, 0x48, 0x64, 0xc5, 0x01, 0x22, 0x19, 0xec, 0x9f, 0x2c, 0xc1, + 0xf1, 0xec, 0x48, 0xa2, 0x0f, 0xc2, 0x98, 0x1c, 0x34, 0xc3, 0x89, 0x24, 0x03, 0x2a, 0xc7, 0xb0, + 0x01, 0x7b, 0xb0, 0x33, 0x3d, 0xdd, 0x7b, 0xbb, 0xff, 0x8c, 0x89, 0x82, 0x53, 0xc4, 0x78, 0x98, + 0x83, 0x88, 0xc7, 0xa9, 0x77, 0x67, 0xdb, 0x6d, 0x11, 0xab, 0x60, 0x84, 0x39, 0x98, 0x50, 0x9c, + 0xc1, 0x46, 0x2b, 0x70, 0xd2, 0x68, 0xb9, 0x41, 0xbc, 0x8d, 0xcd, 0xb5, 0x30, 0x92, 0xfb, 0xd6, + 0xb3, 0x3a, 0x7c, 0xbb, 0x17, 0x07, 0xe7, 0x3e, 0x49, 0x0d, 0x24, 0xd7, 0x69, 0x3b, 0xae, 0x97, + 0x74, 0xc5, 0x69, 0x93, 0x12, 0xe7, 0x73, 0xa2, 0x1d, 0x2b, 0x0c, 0xfb, 0x1f, 0x0c, 0xc1, 0x71, + 0x1e, 0xaf, 0x4c, 0x54, 0x38, 0x3e, 0xfa, 0x20, 0xd4, 0xe2, 0xc4, 0x89, 0xb8, 0xcb, 0xca, 0xda, + 0xb7, 0xe8, 0xd2, 0x35, 0x1e, 0x24, 0x11, 0xac, 0xe9, 0xa1, 0x0f, 0xb0, 0xca, 0x80, 0x5e, 0xbc, + 0xc9, 0xa8, 0x97, 0x1e, 0xce, 0x21, 0x76, 0x59, 0x51, 0xc0, 0x06, 0x35, 0xf4, 0xad, 0x50, 0x69, + 0x6f, 0x3a, 0xb1, 0xf4, 0xd6, 0x3e, 0x2b, 0xe5, 0xc4, 0x0a, 0x6d, 0x7c, 0xb0, 0x33, 0x7d, 0x2a, + 0xfb, 0xaa, 0x0c, 0x80, 0xf9, 0x43, 0xa6, 0x94, 0x1f, 0xda, 0x43, 0xca, 0x3f, 0x0b, 0xc3, 0xcd, + 0xa8, 0xdb, 0xb8, 0x3a, 0x9b, 0xbd, 0xe0, 0x69, 0x9e, 0xb5, 0x62, 0x01, 0xa5, 0x32, 0x69, 0x93, + 0xb3, 0x6c, 0x52, 0xe4, 0xe1, 0xb4, 0xe5, 0x71, 0x55, 0x83, 0xb0, 0x89, 0xc7, 0xaa, 0x74, 0x65, + 0xa2, 0xd9, 0x47, 0x0e, 0x21, 0xdb, 0x69, 0xd0, 0x38, 0xf6, 0x4b, 0x50, 0x13, 0x5d, 0x5d, 0x0d, + 0xd1, 0x8b, 0x30, 0xc6, 0x9d, 0x81, 0xf5, 0xc8, 0x09, 0xdc, 0xcd, 0xac, 0x13, 0x67, 0xd5, 0x80, + 0xe1, 0x14, 0xa6, 0xbd, 0x04, 0x43, 0x03, 0x0a, 0xd9, 0x81, 0xf6, 0xe6, 0xef, 0x85, 0x2a, 0x25, + 0x27, 0x37, 0x6a, 0x45, 0x90, 0x0c, 0xa1, 0x2a, 0x6f, 0x86, 0x45, 0x36, 0x94, 0x3d, 0x47, 0x46, + 0x2d, 0xa9, 0x25, 0xb4, 0x10, 0xc7, 0x1d, 0x36, 0xed, 0x28, 0x10, 0x3d, 0x03, 0x65, 0x72, 0xaf, + 0x9d, 0x0d, 0x4f, 0xba, 0x74, 0xaf, 0xed, 0x45, 0x24, 0xa6, 0x48, 0xe4, 0x5e, 0x1b, 0x9d, 0x81, + 0x92, 0xd7, 0x14, 0x33, 0x12, 0x04, 0x4e, 0x69, 0x61, 0x1e, 0x97, 0xbc, 0xa6, 0x7d, 0x0f, 0x6a, + 0xea, 0x2a, 0x5a, 0xb4, 0x25, 0x4d, 0x2b, 0xab, 0x88, 0x78, 0x75, 0x49, 0xb7, 0x8f, 0x51, 0xd5, + 0x01, 0xd0, 0xc5, 0x43, 0x8a, 0x52, 0xc1, 0xe7, 0x61, 0xc8, 0x0d, 0x45, 0xd9, 0xa7, 0xaa, 0x26, + 0xc3, 0x6c, 0x29, 0x06, 0xb1, 0x6f, 0xc3, 0xc4, 0xf5, 0x20, 0xbc, 0xcb, 0x2e, 0x85, 0x63, 0x35, + 0xd0, 0x29, 0xe1, 0x75, 0xfa, 0x23, 0x6b, 0xc1, 0x33, 0x28, 0xe6, 0x30, 0x55, 0xe9, 0xb8, 0xd4, + 0xaf, 0xd2, 0xb1, 0xfd, 0x09, 0x0b, 0xc6, 0x94, 0x37, 0xf6, 0xca, 0xf6, 0xd6, 0x60, 0xa7, 0xc0, + 0x46, 0x79, 0x8e, 0xd2, 0x1e, 0xe5, 0x39, 0xe4, 0x81, 0x71, 0xb9, 0xdf, 0x81, 0xb1, 0xfd, 0x17, + 0x16, 0x1c, 0x57, 0x5d, 0x90, 0x36, 0xd3, 0x8b, 0x30, 0xb6, 0xd6, 0xf1, 0xfc, 0xa6, 0x2c, 0xee, + 0x9e, 0x59, 0x2e, 0x75, 0x03, 0x86, 0x53, 0x98, 0xe8, 0x22, 0xc0, 0x9a, 0x17, 0x38, 0x51, 0x77, + 0x45, 0x1b, 0x69, 0x4a, 0x6f, 0xd7, 0x15, 0x04, 0x1b, 0x58, 0xe8, 0x63, 0x50, 0xdd, 0x96, 0x71, + 0x02, 0xe5, 0x42, 0xab, 0x4a, 0x88, 0xf1, 0xd0, 0x2b, 0x41, 0x05, 0x1e, 0x28, 0x8e, 0xf6, 0x17, + 0xcb, 0x30, 0x91, 0xae, 0x04, 0x31, 0x80, 0x07, 0xe5, 0x19, 0xa8, 0xb0, 0xe2, 0x10, 0xd9, 0x89, + 0xc5, 0xab, 0xb1, 0x73, 0x18, 0x8a, 0x61, 0x98, 0x8b, 0x92, 0x62, 0xee, 0x2d, 0x56, 0x9d, 0x54, + 0x7e, 0x5a, 0xe6, 0xc4, 0x16, 0x87, 0x1e, 0x82, 0x15, 0xfa, 0xb4, 0x05, 0x23, 0x61, 0xdb, 0x2c, + 0xb1, 0xfb, 0xfe, 0x22, 0xab, 0x64, 0x88, 0x54, 0x74, 0x61, 0x0d, 0xa9, 0x89, 0x27, 0x27, 0x83, + 0x64, 0x7d, 0xe6, 0x5b, 0x60, 0xcc, 0xc4, 0xdc, 0xcb, 0x20, 0xaa, 0x9a, 0x06, 0xd1, 0xe7, 0xcc, + 0x29, 0x29, 0xea, 0x80, 0x0c, 0xb0, 0xd8, 0x6f, 0x42, 0xc5, 0x55, 0x81, 0x97, 0x0f, 0x75, 0x21, + 0x89, 0xaa, 0x93, 0xc7, 0x82, 0x5a, 0x38, 0x35, 0xfb, 0xf7, 0x2c, 0x63, 0x7e, 0x60, 0x12, 0x2f, + 0x34, 0x51, 0x04, 0xe5, 0x8d, 0xed, 0x2d, 0x61, 0x64, 0x5c, 0x2b, 0x68, 0x78, 0xaf, 0x6c, 0x6f, + 0xe9, 0x15, 0x66, 0xb6, 0x62, 0xca, 0x6c, 0x80, 0xc3, 0x84, 0x54, 0xb9, 0x98, 0xf2, 0xde, 0xe5, + 0x62, 0xec, 0xd7, 0x4b, 0x30, 0xd9, 0x33, 0xa9, 0xd0, 0xab, 0x50, 0x89, 0xe8, 0x5b, 0x8a, 0xd7, + 0x5b, 0x2c, 0xac, 0xc0, 0x4b, 0xbc, 0xd0, 0xd4, 0xca, 0x3b, 0xdd, 0x8e, 0x39, 0x4b, 0x74, 0x0d, + 0x90, 0x0e, 0x0f, 0x56, 0x27, 0x19, 0xfc, 0x95, 0x55, 0x0c, 0xe1, 0x6c, 0x0f, 0x06, 0xce, 0x79, + 0x0a, 0xbd, 0x94, 0x3d, 0x10, 0xc9, 0x14, 0x6d, 0xdf, 0xed, 0x6c, 0xc3, 0x7e, 0xcd, 0x9c, 0x82, + 0xb7, 0xb4, 0x30, 0x3d, 0xe8, 0xe6, 0xb4, 0x47, 0xb2, 0x96, 0x07, 0x95, 0xac, 0xf6, 0xcf, 0x97, + 0x60, 0x3c, 0x55, 0x84, 0x19, 0xf9, 0x50, 0x25, 0x3e, 0x3b, 0xb7, 0x97, 0xda, 0xf7, 0xa0, 0x77, + 0x48, 0x29, 0x39, 0x79, 0x49, 0xd0, 0xc5, 0x8a, 0xc3, 0xe3, 0x11, 0xed, 0xf8, 0x22, 0x8c, 0xc9, + 0x0e, 0xbd, 0xdf, 0x69, 0xf9, 0xd9, 0xe1, 0xbb, 0x64, 0xc0, 0x70, 0x0a, 0xd3, 0xfe, 0xe5, 0x32, + 0x4c, 0xf1, 0x40, 0x87, 0xa6, 0x5a, 0x0c, 0x2a, 0x60, 0xe9, 0xfb, 0x75, 0xa9, 0x74, 0x3e, 0x90, + 0x6b, 0x07, 0xbd, 0xb2, 0x31, 0x9f, 0xd1, 0x40, 0x41, 0xfa, 0x5f, 0xce, 0x04, 0xe9, 0xf3, 0xad, + 0xfa, 0xc6, 0x21, 0xf5, 0xe8, 0xeb, 0x2b, 0x6a, 0xff, 0x9f, 0x94, 0xe0, 0x58, 0xe6, 0x3e, 0x4c, + 0xf4, 0xc5, 0xf4, 0x15, 0x4a, 0x56, 0x11, 0xc7, 0x80, 0xbb, 0x5e, 0x91, 0xb8, 0xbf, 0x8b, 0x94, + 0x1e, 0xd1, 0x52, 0xb1, 0x7f, 0xa7, 0x04, 0x13, 0xe9, 0x8b, 0x3c, 0x1f, 0xc3, 0x91, 0x7a, 0x1b, + 0xd4, 0xd8, 0x5d, 0x75, 0xd7, 0x49, 0x57, 0x9e, 0x36, 0xf2, 0x6b, 0xc1, 0x64, 0x23, 0xd6, 0xf0, + 0xc7, 0xe2, 0x7e, 0x2a, 0xfb, 0x9f, 0x5a, 0x70, 0x8a, 0xbf, 0x65, 0x76, 0x1e, 0xfe, 0xcd, 0xbc, + 0xd1, 0x7d, 0xb9, 0xd8, 0x0e, 0x66, 0x4a, 0xfc, 0xef, 0x35, 0xbe, 0xd4, 0x78, 0x39, 0x29, 0x7a, + 0x9b, 0x9e, 0x0a, 0x8f, 0x61, 0x67, 0xf7, 0x35, 0x19, 0xec, 0x7f, 0x57, 0x82, 0xd1, 0xe5, 0xb9, + 0x05, 0x25, 0xc2, 0x2f, 0x40, 0xcd, 0x8d, 0x88, 0xa3, 0xdd, 0x3f, 0x66, 0x18, 0x9d, 0x04, 0x60, + 0x8d, 0x43, 0x77, 0x51, 0x3c, 0x0c, 0x35, 0xce, 0xee, 0xa2, 0x78, 0x94, 0x6a, 0x8c, 0x25, 0x1c, + 0x3d, 0x0f, 0x55, 0x96, 0xac, 0x7e, 0x33, 0x92, 0x1a, 0x47, 0x6f, 0xad, 0x59, 0x3b, 0x5e, 0xc4, + 0x0a, 0x83, 0x12, 0x6e, 0x86, 0x6e, 0x4c, 0x91, 0x33, 0x1e, 0x99, 0x79, 0xda, 0x8c, 0x17, 0xb1, + 0x84, 0xb3, 0x5a, 0xa3, 0xcc, 0x6b, 0x41, 0x91, 0x2b, 0xe9, 0x4e, 0x73, 0xf7, 0x06, 0x45, 0xd7, + 0x38, 0xfb, 0xa9, 0x49, 0x9b, 0x49, 0x18, 0x1d, 0x19, 0x2c, 0x61, 0xd4, 0xfe, 0x9d, 0x32, 0xd4, + 0xb4, 0x53, 0xcd, 0x13, 0x15, 0x5a, 0x0a, 0xb9, 0x42, 0xa2, 0xd1, 0x0d, 0x5c, 0x45, 0x9a, 0x47, + 0x15, 0x18, 0x05, 0x5a, 0xbe, 0xd7, 0x82, 0x51, 0x2f, 0xf0, 0x12, 0xcf, 0x61, 0xbe, 0x41, 0x21, + 0x37, 0x57, 0x0a, 0xaa, 0xe0, 0xb1, 0xc0, 0x29, 0x87, 0x91, 0x79, 0xf4, 0xaf, 0x98, 0x61, 0x93, + 0x33, 0xfa, 0xa8, 0xc8, 0x4f, 0x2c, 0x17, 0x56, 0xe6, 0xa8, 0x9a, 0x49, 0x4a, 0x6c, 0x53, 0x1b, + 0x3b, 0x89, 0x0a, 0xaa, 0x0e, 0x86, 0x29, 0x29, 0x75, 0x95, 0x91, 0xda, 0xc5, 0xb0, 0x66, 0xcc, + 0x19, 0xd9, 0x31, 0xa0, 0xde, 0xb1, 0xd8, 0x67, 0xee, 0xd7, 0x05, 0xa8, 0x39, 0x9d, 0x24, 0x6c, + 0xd1, 0x61, 0x12, 0x81, 0x03, 0x3a, 0xbb, 0x4d, 0x02, 0xb0, 0xc6, 0xb1, 0x7f, 0xb8, 0x02, 0x99, + 0x7a, 0x29, 0xe8, 0x1e, 0xd4, 0x54, 0xc5, 0x94, 0x62, 0x72, 0xa9, 0xf5, 0x8c, 0x52, 0x9d, 0x51, + 0x4d, 0x58, 0x33, 0x43, 0xa1, 0x74, 0xb3, 0xf2, 0xd5, 0xfe, 0xfe, 0xac, 0x9b, 0xf5, 0xea, 0xfe, + 0x4e, 0xdf, 0xe8, 0x9c, 0xbd, 0xc0, 0x2b, 0x65, 0xce, 0xec, 0xe9, 0x99, 0x2d, 0xef, 0xe1, 0x99, + 0xfd, 0xa4, 0xb8, 0xf4, 0x10, 0x93, 0xb8, 0xe3, 0x27, 0x62, 0x56, 0xbc, 0xb7, 0xc0, 0xd5, 0xc6, + 0x09, 0xeb, 0xfa, 0x63, 0xfc, 0x3f, 0x36, 0x98, 0xa6, 0xfd, 0xe7, 0xc3, 0x87, 0xea, 0x3f, 0x1f, + 0x29, 0xd4, 0x7f, 0x7e, 0x11, 0x80, 0xcd, 0x71, 0x9e, 0xab, 0x52, 0x65, 0x6e, 0x4d, 0xa5, 0x6a, + 0xb0, 0x82, 0x60, 0x03, 0xcb, 0xfe, 0x26, 0x48, 0x17, 0xd0, 0x43, 0xd3, 0xb2, 0x5e, 0x1f, 0x3f, + 0x19, 0x64, 0x69, 0xc2, 0xa9, 0xd2, 0x7a, 0x3f, 0x6b, 0x81, 0x59, 0xe5, 0x0f, 0xbd, 0xc2, 0xcb, + 0x09, 0x5a, 0x45, 0x9c, 0x34, 0x19, 0x74, 0x67, 0x96, 0x9c, 0x76, 0x26, 0xfa, 0x49, 0xd6, 0x14, + 0x3c, 0xf3, 0x6e, 0xa8, 0x4a, 0xe8, 0xbe, 0x8c, 0xe6, 0x8f, 0xc3, 0x09, 0x59, 0x72, 0x44, 0x1e, + 0x0a, 0x89, 0x28, 0x84, 0xa3, 0xc9, 0x38, 0xf9, 0x39, 0x0b, 0xce, 0x67, 0x3b, 0x10, 0x2f, 0x85, + 0x81, 0x97, 0x84, 0x51, 0x83, 0x24, 0x89, 0x17, 0x6c, 0xb0, 0xaa, 0xcf, 0x77, 0x9d, 0x48, 0x5e, + 0x79, 0xc6, 0x04, 0xe6, 0x6d, 0x27, 0x0a, 0x30, 0x6b, 0x45, 0x5d, 0x18, 0xe6, 0x01, 0xf5, 0x62, + 0x37, 0x74, 0xc0, 0xb5, 0x91, 0x33, 0x1c, 0x7a, 0x3b, 0xc6, 0x83, 0xf9, 0xb1, 0x60, 0x68, 0x7f, + 0xd5, 0x02, 0xb4, 0xbc, 0x4d, 0xa2, 0xc8, 0x6b, 0x1a, 0x29, 0x00, 0xec, 0xf2, 0x60, 0xe3, 0x92, + 0x60, 0xb3, 0x20, 0x4e, 0xe6, 0xf2, 0x60, 0xe3, 0x5f, 0xfe, 0xe5, 0xc1, 0xa5, 0xfd, 0x5d, 0x1e, + 0x8c, 0x96, 0xe1, 0x54, 0x8b, 0x6f, 0xe7, 0xf8, 0x85, 0x9c, 0x7c, 0x6f, 0xa7, 0x6a, 0x37, 0x9c, + 0xbe, 0xbf, 0x33, 0x7d, 0x6a, 0x29, 0x0f, 0x01, 0xe7, 0x3f, 0x67, 0xbf, 0x1b, 0x10, 0x0f, 0x85, + 0x9d, 0xcb, 0x0b, 0x5f, 0xed, 0xeb, 0xee, 0xb0, 0xbf, 0x54, 0x81, 0x63, 0x99, 0x0b, 0x71, 0xe8, + 0x56, 0xba, 0x37, 0x5e, 0xf6, 0xc0, 0x7a, 0xbc, 0xb7, 0x7b, 0x03, 0x45, 0xe0, 0x06, 0x50, 0xf1, + 0x82, 0x76, 0x27, 0x29, 0xa6, 0x74, 0x0c, 0xef, 0xc4, 0x02, 0x25, 0x68, 0x9c, 0x4f, 0xd0, 0xbf, + 0x98, 0xb3, 0x29, 0x32, 0x9e, 0x37, 0xb5, 0xd9, 0x19, 0x7a, 0x44, 0xee, 0x96, 0x4f, 0xea, 0xe8, + 0xda, 0x4a, 0x11, 0xbe, 0xe4, 0xcc, 0x64, 0x39, 0xec, 0xd0, 0xab, 0x9f, 0x2a, 0xc1, 0xa8, 0xf1, + 0xd1, 0xd0, 0x8f, 0xa6, 0x6b, 0xe0, 0x5a, 0xc5, 0xbd, 0x12, 0xa3, 0x3f, 0xa3, 0xab, 0xdc, 0xf2, + 0x57, 0x7a, 0xb6, 0xb7, 0xfc, 0xed, 0x83, 0x9d, 0xe9, 0xe3, 0x99, 0x02, 0xb7, 0xa9, 0x92, 0xb8, + 0x67, 0xbe, 0x13, 0x8e, 0x65, 0xc8, 0xe4, 0xbc, 0xf2, 0xaa, 0xf9, 0xca, 0x07, 0x76, 0xfb, 0x99, + 0x43, 0xf6, 0x13, 0x74, 0xc8, 0x44, 0xc5, 0x8a, 0xd0, 0x27, 0x03, 0xf8, 0x3c, 0x33, 0xfb, 0x8c, + 0xd2, 0x80, 0x85, 0x69, 0x9e, 0x83, 0x6a, 0x3b, 0xf4, 0x3d, 0xd7, 0x53, 0x25, 0xf4, 0x59, 0x29, + 0x9c, 0x15, 0xd1, 0x86, 0x15, 0x14, 0xdd, 0x85, 0xda, 0x9d, 0xbb, 0x09, 0x3f, 0x6e, 0x14, 0x47, + 0x1a, 0x45, 0x9d, 0x32, 0x2a, 0xa3, 0x45, 0x9d, 0x67, 0x62, 0xcd, 0x0b, 0xd9, 0x30, 0xcc, 0x94, + 0xa0, 0xcc, 0x5e, 0x65, 0xc7, 0x2d, 0x4c, 0x3b, 0xc6, 0x58, 0x40, 0xec, 0x7f, 0x33, 0x0a, 0x27, + 0xf3, 0x6e, 0x25, 0x43, 0x1f, 0x83, 0x61, 0xde, 0xc7, 0x62, 0x2e, 0xbe, 0xcc, 0xe3, 0x71, 0x85, + 0x11, 0x14, 0xdd, 0x62, 0xbf, 0xb1, 0xe0, 0x29, 0xb8, 0xfb, 0xce, 0x9a, 0x98, 0x21, 0x87, 0xc3, + 0x7d, 0xd1, 0xd1, 0xdc, 0x17, 0x1d, 0xce, 0xdd, 0x77, 0xd6, 0xd0, 0x3d, 0xa8, 0x6c, 0x78, 0x09, + 0x71, 0x84, 0x93, 0xe6, 0xf6, 0xa1, 0x30, 0x27, 0x0e, 0xb7, 0xd2, 0xd8, 0x4f, 0xcc, 0x19, 0xa2, + 0xaf, 0x58, 0x70, 0x6c, 0x2d, 0x5d, 0x11, 0x4b, 0x08, 0x4f, 0xe7, 0x10, 0x6e, 0x9e, 0x4b, 0x33, + 0xe2, 0xb7, 0x67, 0x67, 0x1a, 0x71, 0xb6, 0x3b, 0xe8, 0x53, 0x16, 0x8c, 0xac, 0x7b, 0xbe, 0x71, + 0xc3, 0xcd, 0x21, 0x7c, 0x9c, 0xcb, 0x8c, 0x81, 0xde, 0x71, 0xf0, 0xff, 0x31, 0x96, 0x9c, 0xfb, + 0x69, 0xaa, 0xe1, 0x83, 0x6a, 0xaa, 0x91, 0x47, 0xa4, 0xa9, 0x3e, 0x6b, 0x41, 0x4d, 0x8d, 0xb4, + 0xa8, 0x2c, 0xf4, 0xc1, 0x43, 0xfc, 0xe4, 0xdc, 0x33, 0xa5, 0xfe, 0x62, 0xcd, 0x1c, 0xbd, 0x66, + 0xc1, 0xa8, 0xf3, 0x6a, 0x27, 0x22, 0x4d, 0xb2, 0x1d, 0xb6, 0x63, 0x51, 0xf2, 0xf7, 0xe5, 0xe2, + 0x3b, 0x33, 0x4b, 0x99, 0xcc, 0x93, 0xed, 0xe5, 0x76, 0x2c, 0x32, 0xeb, 0x75, 0x03, 0x36, 0xbb, + 0x80, 0xbe, 0x47, 0xeb, 0x71, 0x28, 0xa2, 0xf0, 0x7b, 0x5e, 0x6f, 0x06, 0x2a, 0x14, 0x41, 0xe0, + 0x29, 0x37, 0x0c, 0x12, 0x2f, 0xe8, 0x90, 0xe5, 0x00, 0x93, 0x76, 0x78, 0x23, 0x4c, 0x2e, 0x87, + 0x9d, 0xa0, 0x79, 0x29, 0x8a, 0xc2, 0x88, 0x95, 0x4e, 0x32, 0xee, 0x3b, 0x9e, 0xeb, 0x8f, 0x8a, + 0x77, 0xa3, 0x73, 0x10, 0x9b, 0x61, 0xa7, 0x04, 0xd3, 0x7b, 0x0c, 0x36, 0x7a, 0x11, 0xc6, 0xc2, + 0x68, 0xc3, 0x09, 0xbc, 0x57, 0xcd, 0x6a, 0x80, 0xca, 0x20, 0x5d, 0x36, 0x60, 0x38, 0x85, 0x69, + 0x96, 0x89, 0x2a, 0xed, 0x51, 0x26, 0xea, 0x3c, 0x0c, 0x45, 0xa4, 0x1d, 0x66, 0xf7, 0x55, 0x2c, + 0x01, 0x95, 0x41, 0xd0, 0xd3, 0x50, 0x76, 0xda, 0x9e, 0x70, 0x32, 0xaa, 0xed, 0xe2, 0xec, 0xca, + 0x02, 0xa6, 0xed, 0xa9, 0xaa, 0x75, 0x95, 0x23, 0xa9, 0x5a, 0x47, 0x35, 0xa6, 0x38, 0x46, 0x1b, + 0xd6, 0x1a, 0x33, 0x7d, 0xbc, 0x65, 0xbf, 0x5e, 0x86, 0xa7, 0x77, 0x5d, 0x5a, 0x3a, 0x84, 0xdd, + 0xda, 0x25, 0x84, 0x5d, 0x0e, 0x4f, 0x69, 0xaf, 0xe1, 0x29, 0xf7, 0x19, 0x9e, 0x4f, 0x51, 0x89, + 0x21, 0xab, 0x28, 0x0a, 0x25, 0x71, 0xc0, 0xb4, 0x82, 0x7e, 0x45, 0x19, 0x85, 0xb0, 0x90, 0x50, + 0xac, 0xf9, 0xd2, 0xed, 0x52, 0xaa, 0x44, 0x52, 0xa5, 0x08, 0x8d, 0xd9, 0xb7, 0x92, 0x21, 0x17, + 0x13, 0xfd, 0xea, 0x2e, 0xd9, 0xbf, 0x30, 0x04, 0xcf, 0x0c, 0xa0, 0xe8, 0xcc, 0x59, 0x6c, 0x0d, + 0x38, 0x8b, 0xbf, 0xce, 0x3f, 0xd3, 0x67, 0x72, 0x3f, 0x13, 0x2e, 0xfe, 0x33, 0xed, 0xfe, 0x85, + 0xd8, 0x49, 0x44, 0x10, 0x13, 0xb7, 0x13, 0xf1, 0x74, 0x1e, 0x23, 0x3b, 0x7d, 0x41, 0xb4, 0x63, + 0x85, 0x41, 0xb7, 0xbf, 0xae, 0x43, 0x97, 0xff, 0x48, 0x41, 0x25, 0x71, 0xcc, 0x44, 0x77, 0x6e, + 0x7d, 0xcd, 0xcd, 0x52, 0x09, 0xc0, 0xd9, 0xd8, 0xbf, 0x62, 0xc1, 0x99, 0xfe, 0xd6, 0x08, 0x7a, + 0x07, 0x8c, 0xae, 0xb1, 0xa0, 0xca, 0x25, 0x16, 0x3a, 0x25, 0xa6, 0x0e, 0x7b, 0x5f, 0xdd, 0x8c, + 0x4d, 0x1c, 0x34, 0x07, 0x93, 0x66, 0x34, 0xe6, 0x92, 0x11, 0x73, 0xc5, 0xfc, 0x25, 0xab, 0x59, + 0x20, 0xee, 0xc5, 0x47, 0x33, 0x00, 0x89, 0x97, 0xf8, 0x84, 0x3f, 0xcd, 0x27, 0x1a, 0x73, 0x28, + 0xae, 0xaa, 0x56, 0x6c, 0x60, 0xd8, 0x5f, 0x2b, 0xe7, 0xbf, 0x06, 0xb7, 0x72, 0xf7, 0x33, 0xfb, + 0xc5, 0xdc, 0x2e, 0x0d, 0x20, 0xa1, 0xcb, 0x47, 0x2d, 0xa1, 0x87, 0xfa, 0x49, 0x68, 0x34, 0x0f, + 0xc7, 0x8d, 0x1b, 0x94, 0x79, 0x51, 0x25, 0x7e, 0x38, 0xa5, 0x2a, 0x22, 0xae, 0x64, 0xe0, 0xb8, + 0xe7, 0x89, 0xc7, 0x7c, 0xaa, 0xfe, 0x6a, 0x09, 0x4e, 0xf7, 0xdd, 0x58, 0x1c, 0x91, 0x06, 0x32, + 0x3f, 0xff, 0xd0, 0xd1, 0x7c, 0x7e, 0xf3, 0xa3, 0x54, 0xf6, 0xfc, 0x28, 0x83, 0xa8, 0xf3, 0xdf, + 0x2d, 0xf5, 0x5d, 0x2c, 0x74, 0x23, 0xfa, 0x97, 0x76, 0x24, 0x5f, 0x82, 0x71, 0xa7, 0xdd, 0xe6, + 0x78, 0x2c, 0x43, 0x23, 0x53, 0xa5, 0x75, 0xd6, 0x04, 0xe2, 0x34, 0xee, 0x40, 0x03, 0xfb, 0x87, + 0x16, 0xd4, 0x30, 0x59, 0xe7, 0x12, 0x0e, 0xdd, 0x11, 0x43, 0x64, 0x15, 0x71, 0x55, 0x06, 0x1d, + 0xd8, 0xd8, 0x63, 0x85, 0x18, 0xf2, 0x06, 0xfb, 0xa0, 0x75, 0x36, 0xd4, 0xf5, 0xc3, 0xe5, 0xfe, + 0xd7, 0x0f, 0xdb, 0x7f, 0x3e, 0x46, 0x5f, 0xaf, 0x1d, 0xce, 0x45, 0xa4, 0x19, 0xd3, 0xef, 0xdb, + 0x89, 0x7c, 0x31, 0x49, 0xd4, 0xf7, 0xbd, 0x89, 0x17, 0x31, 0x6d, 0x4f, 0x9d, 0x53, 0x96, 0xf6, + 0x55, 0xa3, 0xb2, 0xbc, 0x67, 0x8d, 0xca, 0x97, 0x60, 0x3c, 0x8e, 0x37, 0x57, 0x22, 0x6f, 0xdb, + 0x49, 0xc8, 0x75, 0x22, 0x0b, 0x48, 0xe9, 0x7a, 0x6d, 0x8d, 0xab, 0x1a, 0x88, 0xd3, 0xb8, 0xe8, + 0x0a, 0x4c, 0xea, 0x4a, 0x91, 0x24, 0x4a, 0x58, 0x0a, 0x24, 0x9f, 0x09, 0xaa, 0x38, 0x90, 0xae, + 0x2d, 0x29, 0x10, 0x70, 0xef, 0x33, 0x54, 0xe6, 0xa6, 0x1a, 0x69, 0x47, 0x86, 0xd3, 0x32, 0x37, + 0x45, 0x87, 0xf6, 0xa5, 0xe7, 0x09, 0xb4, 0x04, 0x27, 0xf8, 0xc4, 0x98, 0x6d, 0xb7, 0x8d, 0x37, + 0x1a, 0x49, 0xdf, 0x4f, 0x70, 0xa5, 0x17, 0x05, 0xe7, 0x3d, 0x87, 0x5e, 0x80, 0x51, 0xd5, 0xbc, + 0x30, 0x2f, 0x8e, 0xd6, 0x94, 0x6b, 0x4f, 0x91, 0x59, 0x68, 0x62, 0x13, 0x0f, 0xbd, 0x1f, 0x9e, + 0xd4, 0x7f, 0x79, 0x4a, 0x3d, 0x3f, 0x77, 0x9e, 0x17, 0x45, 0x78, 0xd5, 0xf5, 0x77, 0x57, 0x72, + 0xd1, 0x9a, 0xb8, 0xdf, 0xf3, 0x68, 0x0d, 0xce, 0x28, 0xd0, 0xa5, 0x20, 0x61, 0x49, 0xaf, 0x31, + 0xa9, 0x3b, 0x31, 0x8b, 0xa0, 0x00, 0xf6, 0x9e, 0xb6, 0xa0, 0x7e, 0xe6, 0x8a, 0x97, 0x5c, 0xcd, + 0xc3, 0xc4, 0x8b, 0x78, 0x17, 0x2a, 0xe8, 0x02, 0xd4, 0x48, 0xe0, 0xac, 0xf9, 0x64, 0x79, 0x6e, + 0x41, 0xec, 0x48, 0x75, 0x96, 0x84, 0x04, 0x60, 0x8d, 0xa3, 0xe2, 0xfc, 0xc7, 0xfa, 0xc5, 0xf9, + 0xa3, 0x15, 0x38, 0xb9, 0xe1, 0xb6, 0xa9, 0x95, 0xe9, 0xb9, 0x64, 0xd6, 0x65, 0x81, 0xc5, 0xf4, + 0xc3, 0xf0, 0x8b, 0x23, 0x54, 0xc2, 0xd4, 0x95, 0xb9, 0x95, 0x1e, 0x1c, 0x9c, 0xfb, 0x24, 0x0b, + 0x40, 0x8f, 0xc2, 0x7b, 0xdd, 0xa9, 0x13, 0x99, 0x00, 0x74, 0xda, 0x88, 0x39, 0x0c, 0x5d, 0x03, + 0xc4, 0x92, 0x06, 0xaf, 0x26, 0x49, 0x5b, 0x99, 0xb5, 0x53, 0x27, 0xd3, 0x25, 0x39, 0x2f, 0xf7, + 0x60, 0xe0, 0x9c, 0xa7, 0xa8, 0xd5, 0x13, 0x84, 0x8c, 0xfa, 0xd4, 0x93, 0x69, 0xab, 0xe7, 0x06, + 0x6f, 0xc6, 0x12, 0x8e, 0x3e, 0x04, 0x53, 0x9d, 0x98, 0xb0, 0x0d, 0xf3, 0xed, 0x30, 0xda, 0xf2, + 0x43, 0xa7, 0xb9, 0xc0, 0xee, 0x39, 0x4e, 0xba, 0x53, 0x53, 0x8c, 0xf9, 0x79, 0xf1, 0xec, 0xd4, + 0xcd, 0x3e, 0x78, 0xb8, 0x2f, 0x85, 0x6c, 0x4d, 0xd9, 0xd3, 0x03, 0xd6, 0x94, 0x5d, 0x81, 0x93, + 0x52, 0xaf, 0x2d, 0xcf, 0x2d, 0xa8, 0x97, 0x9e, 0x3a, 0x93, 0xbe, 0x38, 0x71, 0x21, 0x07, 0x07, + 0xe7, 0x3e, 0x89, 0xb6, 0xe0, 0x69, 0xe6, 0x63, 0x11, 0x1f, 0x67, 0x25, 0xf2, 0x02, 0xd7, 0x6b, + 0x3b, 0x3e, 0x5f, 0x92, 0x0b, 0xcd, 0xa9, 0xa7, 0x59, 0xd7, 0xde, 0x22, 0x48, 0x3f, 0x3d, 0xbb, + 0x1b, 0x32, 0xde, 0x9d, 0x16, 0xba, 0x0b, 0x6f, 0xde, 0x05, 0x81, 0xab, 0x96, 0xa9, 0x73, 0x8c, + 0xe1, 0x37, 0x0a, 0x86, 0x6f, 0x9e, 0xdd, 0xeb, 0x01, 0xbc, 0x37, 0xcd, 0xbe, 0x6f, 0xb9, 0x4a, + 0x02, 0x87, 0xbd, 0xe5, 0xf4, 0x00, 0x6f, 0x29, 0x91, 0xf1, 0xee, 0xb4, 0xd0, 0x26, 0x9c, 0x65, + 0x08, 0xb3, 0x6e, 0xe2, 0x6d, 0xeb, 0x72, 0x41, 0x97, 0x82, 0x66, 0x3b, 0xf4, 0x82, 0x64, 0xea, + 0x3c, 0xe3, 0xf5, 0x0d, 0x82, 0xd7, 0xd9, 0xd9, 0x5d, 0x70, 0xf1, 0xae, 0x94, 0xec, 0x3f, 0xb0, + 0x60, 0x5c, 0xa9, 0x9f, 0x23, 0xc8, 0x40, 0xf7, 0xd3, 0x19, 0xe8, 0x57, 0x0e, 0xae, 0xc0, 0x59, + 0xcf, 0xfb, 0xe4, 0x49, 0xfd, 0xf7, 0x49, 0x00, 0xad, 0xe4, 0x95, 0x7d, 0x65, 0xf5, 0xb5, 0xaf, + 0x1e, 0x5b, 0x05, 0x9b, 0x57, 0xe0, 0xb5, 0xf2, 0x68, 0x0b, 0xbc, 0x36, 0xe0, 0x94, 0x94, 0x07, + 0x3c, 0x1e, 0xe0, 0x6a, 0x18, 0x2b, 0x7d, 0x6d, 0x5c, 0x63, 0xba, 0x90, 0x87, 0x84, 0xf3, 0x9f, + 0x4d, 0x19, 0xe6, 0x23, 0x7b, 0x1a, 0xe6, 0x4a, 0x45, 0x2d, 0xae, 0xcb, 0x4b, 0x86, 0x33, 0x2a, + 0x6a, 0xf1, 0x72, 0x03, 0x6b, 0x9c, 0x7c, 0x3b, 0xa5, 0x56, 0x90, 0x9d, 0x02, 0xfb, 0xb6, 0x53, + 0xa4, 0xc6, 0x1c, 0xed, 0xab, 0x31, 0xe5, 0xb9, 0xe3, 0x58, 0xdf, 0x73, 0xc7, 0xf7, 0xc0, 0x84, + 0x17, 0x6c, 0x92, 0xc8, 0x4b, 0x48, 0x93, 0xad, 0x05, 0xa6, 0x4d, 0xab, 0xda, 0x4a, 0x5d, 0x48, + 0x41, 0x71, 0x06, 0x3b, 0xad, 0xe6, 0x27, 0x06, 0x50, 0xf3, 0x7d, 0x8c, 0xab, 0x63, 0xc5, 0x18, + 0x57, 0xc7, 0x0f, 0x6e, 0x5c, 0x4d, 0x1e, 0xaa, 0x71, 0x85, 0x0a, 0x31, 0xae, 0x06, 0xb2, 0x5b, + 0x0c, 0x0f, 0xcb, 0xc9, 0x3d, 0x3c, 0x2c, 0xfd, 0x2c, 0xab, 0x53, 0x0f, 0x6d, 0x59, 0xe5, 0x1b, + 0x4d, 0x4f, 0xbc, 0x61, 0x34, 0x15, 0x62, 0x34, 0x3d, 0x03, 0x95, 0x26, 0x69, 0x27, 0x9b, 0x53, + 0x4f, 0xb1, 0xc9, 0xaa, 0xbe, 0xff, 0x3c, 0x6d, 0xc4, 0x1c, 0x86, 0x12, 0x38, 0x7f, 0x97, 0xac, + 0x6d, 0x86, 0xe1, 0xd6, 0x92, 0x13, 0x78, 0xeb, 0x44, 0x5c, 0x62, 0x70, 0xdb, 0x89, 0x5a, 0xa2, + 0x80, 0x7c, 0x73, 0xea, 0x2c, 0xeb, 0xc2, 0x73, 0xe2, 0xf9, 0xf3, 0xb7, 0xf7, 0xc0, 0xc7, 0x7b, + 0x52, 0x7c, 0xc3, 0x9e, 0xfb, 0x7a, 0xb6, 0xe7, 0x3e, 0x5b, 0x82, 0x53, 0xda, 0xe2, 0xa1, 0x7a, + 0xc6, 0x5b, 0xa7, 0x3a, 0x9f, 0xa0, 0x8b, 0x00, 0x3c, 0x0a, 0xc6, 0xa8, 0xa3, 0xa1, 0x2b, 0x89, + 0x28, 0x08, 0x36, 0xb0, 0x58, 0x39, 0x0a, 0x12, 0xb1, 0xbb, 0xc8, 0xb2, 0xe6, 0xd0, 0x9c, 0x68, + 0xc7, 0x0a, 0x83, 0x2e, 0x2e, 0xfa, 0x5b, 0x54, 0x45, 0xca, 0xde, 0x72, 0x31, 0xa7, 0x41, 0xd8, + 0xc4, 0x43, 0xcf, 0x71, 0x26, 0x4c, 0x15, 0x53, 0x93, 0x68, 0x8c, 0xfb, 0x9a, 0x94, 0xf6, 0x55, + 0x50, 0xd9, 0x1d, 0x56, 0x2e, 0xa5, 0xd2, 0xdb, 0x1d, 0x16, 0x58, 0xae, 0x30, 0xec, 0xff, 0x69, + 0xc1, 0xe9, 0xdc, 0xa1, 0x38, 0x02, 0x33, 0xf7, 0x5e, 0xda, 0xcc, 0x6d, 0x14, 0xe5, 0xa7, 0x32, + 0xde, 0xa2, 0x8f, 0xc9, 0xfb, 0xef, 0x2d, 0x98, 0xd0, 0xf8, 0x47, 0xf0, 0xaa, 0x5e, 0xfa, 0x55, + 0x8b, 0x73, 0xc9, 0xd5, 0x7a, 0xde, 0xed, 0x97, 0x4b, 0xa0, 0x6e, 0x9e, 0x99, 0x75, 0x93, 0xc1, + 0x72, 0x51, 0xbb, 0x30, 0xcc, 0xc2, 0xca, 0xe2, 0x62, 0x42, 0x66, 0xd3, 0xfc, 0x59, 0x88, 0x9a, + 0x3e, 0xe5, 0x67, 0x7f, 0x63, 0x2c, 0x18, 0xb2, 0x9b, 0xf2, 0xa4, 0x9c, 0x2e, 0xa7, 0x8d, 0x59, + 0x25, 0x8f, 0x15, 0x06, 0x35, 0xc4, 0x3c, 0x37, 0x0c, 0xe6, 0x7c, 0x27, 0x8e, 0xc5, 0xde, 0x40, + 0x19, 0x62, 0x0b, 0x12, 0x80, 0x35, 0x0e, 0x8b, 0x38, 0xf3, 0xe2, 0xb6, 0xef, 0x74, 0x0d, 0xc7, + 0xab, 0x51, 0xfd, 0x4f, 0x81, 0xb0, 0x89, 0x67, 0xb7, 0x60, 0x2a, 0xfd, 0x12, 0xf3, 0x64, 0x9d, + 0xa5, 0x7d, 0x0c, 0x34, 0x9c, 0x17, 0xa0, 0xe6, 0xb0, 0xa7, 0x16, 0x3b, 0x8e, 0x90, 0x09, 0x3a, + 0xf9, 0x41, 0x02, 0xb0, 0xc6, 0xb1, 0xbf, 0x19, 0x4e, 0xe4, 0x8c, 0xd9, 0x00, 0x51, 0xb5, 0x3f, + 0x5f, 0x82, 0x63, 0xe9, 0x27, 0x63, 0x96, 0x18, 0xcd, 0xfb, 0xec, 0xc5, 0x6e, 0xb8, 0x4d, 0xa2, + 0x2e, 0xed, 0x86, 0x95, 0x49, 0x8c, 0xee, 0xc1, 0xc0, 0x39, 0x4f, 0xb1, 0x4b, 0xa0, 0x9a, 0xea, + 0xd5, 0xe5, 0xf4, 0xb8, 0x55, 0xe4, 0xf4, 0xd0, 0x23, 0x6b, 0x46, 0x02, 0x2a, 0x96, 0xd8, 0xe4, + 0x4f, 0xed, 0x6a, 0x96, 0xd6, 0x55, 0xef, 0x78, 0x7e, 0xe2, 0x05, 0xe2, 0x95, 0xc5, 0xc4, 0x51, + 0x76, 0xf5, 0x52, 0x2f, 0x0a, 0xce, 0x7b, 0xce, 0xfe, 0xea, 0x10, 0xa8, 0xf2, 0x48, 0x2c, 0x52, + 0xbb, 0xa0, 0x38, 0xf7, 0xfd, 0xa6, 0xd7, 0xab, 0x2f, 0x3d, 0xb4, 0x5b, 0xe8, 0x24, 0x77, 0x9d, + 0x9b, 0x67, 0x6c, 0x6a, 0xc0, 0x56, 0x35, 0x08, 0x9b, 0x78, 0xb4, 0x27, 0xbe, 0xb7, 0x4d, 0xf8, + 0x43, 0xc3, 0xe9, 0x9e, 0x2c, 0x4a, 0x00, 0xd6, 0x38, 0xec, 0x9e, 0x05, 0x6f, 0x7d, 0x5d, 0xf8, + 0x81, 0xf5, 0x3d, 0x0b, 0xde, 0xfa, 0x3a, 0x66, 0x10, 0x7e, 0x4d, 0x60, 0xb8, 0x25, 0xf6, 0x92, + 0xc6, 0x35, 0x81, 0xe1, 0x16, 0x66, 0x10, 0xfa, 0x95, 0x82, 0x30, 0x6a, 0x39, 0xbe, 0xf7, 0x2a, + 0x69, 0x2a, 0x2e, 0x62, 0x0f, 0xa9, 0xbe, 0xd2, 0x8d, 0x5e, 0x14, 0x9c, 0xf7, 0x1c, 0x9d, 0xd0, + 0xed, 0x88, 0x34, 0x3d, 0x37, 0x31, 0xa9, 0x41, 0x7a, 0x42, 0xaf, 0xf4, 0x60, 0xe0, 0x9c, 0xa7, + 0xd0, 0x2c, 0x1c, 0x93, 0xe5, 0xad, 0x64, 0x69, 0xd8, 0xd1, 0x74, 0x7d, 0x49, 0x9c, 0x06, 0xe3, + 0x2c, 0x3e, 0x95, 0x58, 0x2d, 0x51, 0xae, 0x9c, 0x6d, 0x39, 0x0d, 0x89, 0x25, 0xcb, 0x98, 0x63, + 0x85, 0x61, 0x7f, 0xb2, 0x4c, 0x35, 0x6c, 0x9f, 0x5b, 0x01, 0x8e, 0x2c, 0xaf, 0x22, 0x3d, 0x23, + 0x87, 0x06, 0x98, 0x91, 0xef, 0x82, 0xb1, 0x3b, 0x71, 0x18, 0xa8, 0x9c, 0x85, 0x4a, 0xdf, 0x9c, + 0x05, 0x03, 0x2b, 0x3f, 0x67, 0x61, 0xb8, 0xa8, 0x9c, 0x85, 0x91, 0x87, 0xcc, 0x59, 0xf8, 0x57, + 0x15, 0x50, 0xf7, 0x40, 0xdf, 0x20, 0xc9, 0xdd, 0x30, 0xda, 0xf2, 0x82, 0x0d, 0x56, 0xaa, 0xe9, + 0x2b, 0x96, 0xac, 0xf6, 0xb4, 0x68, 0xe6, 0xf4, 0xaf, 0x17, 0x74, 0x97, 0x6f, 0x8a, 0xd9, 0xcc, + 0xaa, 0xc1, 0x88, 0xc7, 0xbe, 0x65, 0xaa, 0x4a, 0x89, 0x63, 0xbd, 0x54, 0x8f, 0xd0, 0x77, 0x02, + 0xc8, 0x43, 0xb3, 0x75, 0x29, 0x81, 0x17, 0x8a, 0xe9, 0x1f, 0x26, 0xeb, 0xda, 0xbe, 0x5d, 0x55, + 0x4c, 0xb0, 0xc1, 0x10, 0x7d, 0x56, 0xd7, 0x3b, 0xe0, 0x49, 0x8e, 0x1f, 0x3d, 0x94, 0xb1, 0x19, + 0xa4, 0xda, 0x01, 0x86, 0x11, 0x2f, 0xd8, 0xa0, 0xf3, 0x44, 0xc4, 0x76, 0xbf, 0x35, 0xaf, 0x12, + 0xe0, 0x62, 0xe8, 0x34, 0xeb, 0x8e, 0xef, 0x04, 0x2e, 0x89, 0x16, 0x38, 0xba, 0xde, 0x4b, 0x8b, + 0x06, 0x2c, 0x09, 0xf5, 0x5c, 0x56, 0x5d, 0x19, 0xe4, 0xb2, 0xea, 0x33, 0xdf, 0x0e, 0x93, 0x3d, + 0x1f, 0x73, 0x5f, 0xc5, 0x0d, 0x0e, 0x50, 0x03, 0xf0, 0x17, 0x86, 0xb5, 0xd2, 0xba, 0x11, 0x36, + 0xf9, 0xdd, 0xc7, 0x91, 0xfe, 0xa2, 0xc2, 0x7e, 0x2d, 0x70, 0x8a, 0x28, 0x35, 0x63, 0x34, 0x62, + 0x93, 0x25, 0x9d, 0xa3, 0x6d, 0x27, 0x22, 0xc1, 0x61, 0xcf, 0xd1, 0x15, 0xc5, 0x04, 0x1b, 0x0c, + 0xd1, 0x66, 0x2a, 0x0b, 0xf7, 0xf2, 0xc1, 0xb3, 0x70, 0x59, 0x7d, 0xe6, 0xbc, 0x2b, 0x42, 0x5f, + 0xb3, 0x60, 0x22, 0x48, 0xcd, 0xdc, 0x62, 0x12, 0x6e, 0xf2, 0x57, 0x45, 0x1d, 0xdd, 0xdf, 0x99, + 0x9e, 0x48, 0xb7, 0xe1, 0x0c, 0xff, 0x3c, 0x95, 0x56, 0xd9, 0xa7, 0x4a, 0xd3, 0x77, 0xaf, 0x0f, + 0xf7, 0xbb, 0x7b, 0x1d, 0x05, 0x30, 0xcc, 0xab, 0xc8, 0x8a, 0xb0, 0x9b, 0x03, 0xd6, 0x32, 0x32, + 0x4b, 0xd1, 0x72, 0x7e, 0xbc, 0x05, 0x0b, 0x2e, 0xe8, 0xb6, 0x99, 0xa4, 0x5f, 0xdd, 0x77, 0x16, + 0xe8, 0x78, 0xbf, 0x64, 0x7e, 0xfb, 0xff, 0x0e, 0xc1, 0x71, 0x39, 0x22, 0x32, 0x59, 0x8f, 0xea, + 0x47, 0xce, 0x57, 0xdb, 0xca, 0x4a, 0x3f, 0x5e, 0x95, 0x00, 0xac, 0x71, 0xa8, 0x3d, 0xd6, 0x89, + 0xc9, 0x72, 0x9b, 0x04, 0x8b, 0xde, 0x5a, 0x2c, 0x02, 0x64, 0xd4, 0x42, 0xb9, 0xa9, 0x41, 0xd8, + 0xc4, 0x63, 0x95, 0x04, 0x5c, 0xb3, 0x9c, 0x8f, 0xae, 0x24, 0x20, 0x0c, 0x55, 0x09, 0x47, 0x3f, + 0x92, 0x7b, 0x4d, 0x51, 0x31, 0xa9, 0xee, 0x3d, 0x39, 0x8a, 0xfb, 0xbb, 0x9f, 0x08, 0xfd, 0x43, + 0x0b, 0x4e, 0xf1, 0x56, 0x39, 0x92, 0x37, 0xdb, 0x4d, 0x27, 0x21, 0x71, 0x31, 0xd7, 0x4b, 0xe6, + 0xf4, 0x4f, 0x1f, 0x95, 0xe4, 0xb1, 0xc5, 0xf9, 0xbd, 0x41, 0x5f, 0xb4, 0xe0, 0xd8, 0x56, 0xaa, + 0x1c, 0x9f, 0x54, 0x1d, 0x07, 0xad, 0x55, 0x95, 0x22, 0xaa, 0x97, 0x5a, 0xba, 0x3d, 0xc6, 0x59, + 0xee, 0xf6, 0x9f, 0x59, 0x60, 0x8a, 0xd1, 0xa3, 0xaf, 0xe2, 0xb7, 0x7f, 0x53, 0x50, 0x5a, 0x97, + 0x95, 0xbe, 0xd6, 0xe5, 0xd3, 0x50, 0xee, 0x78, 0x4d, 0xb1, 0xbf, 0xd0, 0x21, 0x39, 0x0b, 0xf3, + 0x98, 0xb6, 0xdb, 0xff, 0xaf, 0xa2, 0x7d, 0x12, 0x22, 0x83, 0xfc, 0x2f, 0xc5, 0x6b, 0x07, 0xaa, + 0x4c, 0x37, 0x7f, 0xf3, 0x5b, 0x3d, 0x65, 0xba, 0xe7, 0x1f, 0xbe, 0x50, 0x00, 0x1f, 0xa8, 0x7e, + 0x55, 0xba, 0x47, 0xf6, 0xac, 0xd2, 0x5d, 0xa5, 0x5b, 0x31, 0xe6, 0x64, 0xac, 0xa6, 0x3a, 0x57, + 0xbd, 0x2a, 0xda, 0x1f, 0xec, 0x4c, 0xd7, 0x1f, 0xbe, 0x7b, 0x92, 0x0a, 0x56, 0x7c, 0xd0, 0x77, + 0x40, 0x8d, 0xfe, 0x66, 0x85, 0x0d, 0xc4, 0x66, 0xef, 0x65, 0x25, 0x43, 0x25, 0xa0, 0xd0, 0xea, + 0x09, 0x9a, 0x1f, 0xda, 0x86, 0x1a, 0x45, 0xe4, 0xcc, 0xf9, 0xde, 0xf0, 0x7d, 0xaa, 0xcc, 0x80, + 0x04, 0x3c, 0xd8, 0x99, 0x9e, 0x7b, 0x78, 0xe6, 0x8a, 0x0c, 0xd6, 0xac, 0x0c, 0xd5, 0x39, 0xda, + 0x4f, 0x75, 0xda, 0x7f, 0x3e, 0xa4, 0xe7, 0xbf, 0xa8, 0xf0, 0xfe, 0x97, 0x62, 0xfe, 0xbf, 0x98, + 0x99, 0xff, 0xe7, 0x7b, 0xe6, 0xff, 0x04, 0x1d, 0xb3, 0x9c, 0x7a, 0xf3, 0x47, 0x6d, 0x4c, 0xec, + 0xed, 0xb3, 0x60, 0x56, 0xd4, 0x2b, 0x1d, 0x2f, 0x22, 0xf1, 0x4a, 0xd4, 0x09, 0xbc, 0x60, 0x83, + 0x4d, 0xe1, 0xaa, 0x69, 0x45, 0xa5, 0xc0, 0x38, 0x8b, 0x8f, 0x9e, 0x87, 0x2a, 0x9d, 0x17, 0xb7, + 0x9d, 0x6d, 0x3e, 0x03, 0x8d, 0xaa, 0xba, 0x0d, 0xd1, 0x8e, 0x15, 0x06, 0xda, 0x84, 0xb3, 0x92, + 0xc0, 0x3c, 0xf1, 0x09, 0x7d, 0x21, 0x16, 0x8a, 0x1c, 0xb5, 0x78, 0xa2, 0x10, 0x8f, 0x26, 0x53, + 0xe7, 0x1d, 0x78, 0x17, 0x5c, 0xbc, 0x2b, 0x25, 0xfb, 0xf7, 0x59, 0xfc, 0x8a, 0x51, 0xf7, 0x85, + 0xce, 0x3e, 0xdf, 0x6b, 0x79, 0xb2, 0xf8, 0xaf, 0x9a, 0x7d, 0x8b, 0xb4, 0x11, 0x73, 0x18, 0xba, + 0x0b, 0x23, 0x6b, 0x8e, 0xbb, 0x15, 0xae, 0xaf, 0x17, 0x73, 0x75, 0x5f, 0x9d, 0x13, 0x63, 0x85, + 0xff, 0x47, 0xc4, 0x9f, 0x07, 0xfa, 0x27, 0x96, 0xdc, 0xf8, 0xb5, 0x31, 0xeb, 0x11, 0x89, 0x37, + 0x85, 0x63, 0xcf, 0xb8, 0x36, 0x86, 0x35, 0x63, 0x09, 0xb7, 0x7f, 0xbb, 0x02, 0xc7, 0x64, 0x2c, + 0xe9, 0x55, 0x2f, 0x66, 0x11, 0x2c, 0xe6, 0x05, 0x2a, 0xa5, 0x3d, 0x2f, 0x50, 0xf9, 0x30, 0x40, + 0x93, 0xb4, 0xfd, 0xb0, 0xcb, 0xec, 0xcc, 0xa1, 0x7d, 0xdb, 0x99, 0x6a, 0x6b, 0x32, 0xaf, 0xa8, + 0x60, 0x83, 0xa2, 0x28, 0x8e, 0xcc, 0xef, 0x63, 0xc9, 0x14, 0x47, 0x36, 0xee, 0x02, 0x1d, 0x3e, + 0xda, 0xbb, 0x40, 0x3d, 0x38, 0xc6, 0xbb, 0xa8, 0x0a, 0xb0, 0x3c, 0x44, 0x9d, 0x15, 0x96, 0xc2, + 0x3a, 0x9f, 0x26, 0x83, 0xb3, 0x74, 0xcd, 0x8b, 0x3e, 0xab, 0x47, 0x7d, 0xd1, 0xe7, 0xdb, 0xa0, + 0x26, 0xbf, 0x73, 0x3c, 0x55, 0xd3, 0x45, 0xc2, 0xe4, 0x34, 0x88, 0xb1, 0x86, 0xf7, 0xd4, 0x94, + 0x82, 0x47, 0x55, 0x53, 0xca, 0x7e, 0xad, 0x4c, 0x37, 0x28, 0xbc, 0x5f, 0xfb, 0xbe, 0x27, 0xf7, + 0xaa, 0x71, 0x4f, 0xee, 0xfe, 0xbe, 0x67, 0x35, 0x73, 0x9f, 0xee, 0x59, 0x18, 0x4a, 0x9c, 0x0d, + 0x99, 0x71, 0xcf, 0xa0, 0xab, 0xce, 0x46, 0x8c, 0x59, 0xeb, 0x7e, 0x6a, 0xc9, 0xbf, 0x04, 0xe3, + 0xb1, 0xb7, 0x11, 0x38, 0x49, 0x27, 0x22, 0xc6, 0xb9, 0xa4, 0x0e, 0xea, 0x32, 0x81, 0x38, 0x8d, + 0x8b, 0x3e, 0x65, 0x01, 0x44, 0x44, 0x6d, 0x7f, 0x86, 0x8b, 0x98, 0x43, 0x4a, 0x0c, 0x48, 0xba, + 0x66, 0x0d, 0x20, 0xb5, 0xed, 0x31, 0xd8, 0xda, 0x9f, 0xb1, 0x60, 0xb2, 0xe7, 0x29, 0xd4, 0x86, + 0x61, 0x97, 0xdd, 0x66, 0x5c, 0x4c, 0xfd, 0xdb, 0xf4, 0xcd, 0xc8, 0x5c, 0x8f, 0xf1, 0x36, 0x2c, + 0xf8, 0xd8, 0xbf, 0x38, 0x06, 0x27, 0x1b, 0x73, 0x4b, 0xf2, 0x16, 0xb4, 0x43, 0x2b, 0x21, 0x90, + 0xc7, 0xe3, 0xe8, 0x4a, 0x08, 0xf4, 0xe1, 0xee, 0x1b, 0x25, 0x04, 0x7c, 0xa3, 0x84, 0x40, 0x3a, + 0x9f, 0xbb, 0x5c, 0x44, 0x3e, 0x77, 0x5e, 0x0f, 0x06, 0xc9, 0xe7, 0x3e, 0xb4, 0x9a, 0x02, 0xbb, + 0x76, 0x68, 0x5f, 0x35, 0x05, 0x54, 0xc1, 0x85, 0x42, 0xd2, 0x47, 0xfb, 0x7c, 0xaa, 0xdc, 0x82, + 0x0b, 0x2a, 0xd9, 0x9d, 0xa7, 0x46, 0x0b, 0xa5, 0xf7, 0x72, 0xf1, 0x1d, 0x18, 0x20, 0xd9, 0x5d, + 0x64, 0x67, 0x9b, 0x05, 0x16, 0x46, 0x8a, 0x28, 0xb0, 0x90, 0xd7, 0x9d, 0x3d, 0x0b, 0x2c, 0xbc, + 0x04, 0xe3, 0xae, 0x1f, 0x06, 0x64, 0x25, 0x0a, 0x93, 0xd0, 0x0d, 0x7d, 0xb1, 0x63, 0xd3, 0xd7, + 0x00, 0x9b, 0x40, 0x9c, 0xc6, 0xed, 0x57, 0x9d, 0xa1, 0x76, 0xd0, 0xea, 0x0c, 0xf0, 0x88, 0xaa, + 0x33, 0x18, 0xf5, 0x07, 0x46, 0x8b, 0xa8, 0x3f, 0x90, 0xf7, 0x45, 0x06, 0xaa, 0x3f, 0xf0, 0xba, + 0x05, 0xe3, 0xce, 0x5d, 0xb6, 0x6f, 0xe1, 0x52, 0x98, 0x9d, 0xf6, 0x8d, 0x5e, 0xfc, 0xc8, 0x21, + 0x4c, 0xd8, 0xdb, 0x0d, 0xcd, 0xa6, 0x3e, 0xc9, 0x72, 0xc2, 0xcc, 0x26, 0x9c, 0xee, 0xc8, 0x41, + 0x6a, 0x16, 0x7c, 0xa9, 0x04, 0x6f, 0xde, 0xb3, 0x0b, 0xe8, 0x2e, 0x40, 0xe2, 0x6c, 0x88, 0x89, + 0x2a, 0xce, 0xc4, 0x0e, 0x18, 0x87, 0xbe, 0x2a, 0xe9, 0x89, 0x7c, 0x5a, 0x45, 0x1e, 0x1b, 0xac, + 0x58, 0xf8, 0x79, 0xe8, 0xf7, 0x94, 0xae, 0xc7, 0xa1, 0x4f, 0x30, 0x83, 0x50, 0x43, 0x28, 0x22, + 0x1b, 0xd4, 0xb8, 0x2f, 0xa7, 0x0d, 0x21, 0xcc, 0x5a, 0xb1, 0x80, 0xa2, 0x17, 0x60, 0xd4, 0xf1, + 0x7d, 0x9e, 0xdb, 0x4b, 0x62, 0x71, 0x3f, 0xb7, 0x2e, 0x58, 0xad, 0x41, 0xd8, 0xc4, 0xb3, 0xff, + 0xb4, 0x04, 0xd3, 0x7b, 0xc8, 0x94, 0x9e, 0x9a, 0x0e, 0x95, 0x81, 0x6b, 0x3a, 0x88, 0xdc, 0xc4, + 0xe1, 0x3e, 0xb9, 0x89, 0x2f, 0xc0, 0x68, 0x42, 0x9c, 0x96, 0x88, 0x5c, 0xcd, 0xd6, 0x61, 0x5d, + 0xd5, 0x20, 0x6c, 0xe2, 0x51, 0x29, 0x36, 0xe1, 0xb8, 0x2e, 0x89, 0x63, 0x99, 0x7c, 0x28, 0x1c, + 0xe6, 0x85, 0x65, 0x36, 0xb2, 0x73, 0x88, 0xd9, 0x14, 0x0b, 0x9c, 0x61, 0x99, 0x1d, 0xf0, 0xda, + 0x80, 0x03, 0xfe, 0x63, 0x25, 0x78, 0x7a, 0x57, 0xed, 0x36, 0x70, 0x5e, 0x68, 0x27, 0x26, 0x51, + 0x76, 0xe2, 0xdc, 0x8c, 0x49, 0x84, 0x19, 0x84, 0x8f, 0x52, 0xbb, 0xad, 0xb2, 0x0e, 0x8a, 0x4f, + 0xa4, 0xe6, 0xa3, 0x94, 0x62, 0x81, 0x33, 0x2c, 0x1f, 0x76, 0x5a, 0xfe, 0xf6, 0x10, 0x3c, 0x33, + 0x80, 0x0d, 0x50, 0x60, 0xc2, 0x79, 0xba, 0x98, 0x42, 0xf9, 0x11, 0x15, 0x53, 0x78, 0xb8, 0xe1, + 0x7a, 0xa3, 0x06, 0xc3, 0x40, 0x89, 0xed, 0x3f, 0x51, 0x82, 0x33, 0xfd, 0x0d, 0x16, 0xf4, 0x6d, + 0x70, 0x2c, 0x52, 0xa1, 0x86, 0x66, 0x1d, 0x86, 0x13, 0xdc, 0x1d, 0x96, 0x02, 0xe1, 0x2c, 0x2e, + 0x9a, 0x01, 0x68, 0x3b, 0xc9, 0x66, 0x7c, 0xe9, 0x9e, 0x17, 0x27, 0xa2, 0x70, 0xe5, 0x04, 0x3f, + 0xc4, 0x95, 0xad, 0xd8, 0xc0, 0xa0, 0xec, 0xd8, 0xbf, 0xf9, 0xf0, 0x46, 0x98, 0xf0, 0x87, 0xf8, + 0xd6, 0xf3, 0x84, 0xbc, 0xf6, 0xd5, 0x00, 0xe1, 0x2c, 0x2e, 0x65, 0xc7, 0xc2, 0x04, 0x78, 0x47, + 0x87, 0x74, 0xe5, 0x86, 0x45, 0xd5, 0x8a, 0x0d, 0x8c, 0x6c, 0x85, 0x89, 0xca, 0xde, 0x15, 0x26, + 0xec, 0x9f, 0x29, 0xc1, 0xe9, 0xbe, 0x06, 0xef, 0x60, 0x62, 0xea, 0xf1, 0xab, 0xf2, 0xf0, 0x90, + 0x2b, 0x6c, 0x5f, 0xd5, 0x01, 0xec, 0x3f, 0xec, 0x33, 0xd3, 0x44, 0xe6, 0xff, 0xc3, 0x17, 0x49, + 0x7a, 0xfc, 0xc6, 0xb3, 0x27, 0xd9, 0x7f, 0x68, 0x1f, 0xc9, 0xfe, 0x99, 0x8f, 0x51, 0x19, 0x50, + 0x3b, 0xfc, 0xe7, 0xa1, 0xbe, 0xc3, 0x4b, 0x37, 0xc8, 0x03, 0x1d, 0x36, 0xcc, 0xc3, 0x71, 0x2f, + 0x60, 0x17, 0x79, 0x37, 0x3a, 0x6b, 0xa2, 0x96, 0x21, 0x2f, 0xdc, 0xad, 0xb2, 0xb5, 0x16, 0x32, + 0x70, 0xdc, 0xf3, 0xc4, 0x63, 0x58, 0x7c, 0xe1, 0xe1, 0x86, 0x74, 0x9f, 0x92, 0x7b, 0x19, 0x4e, + 0xc9, 0xa1, 0xd8, 0x74, 0x22, 0xd2, 0x14, 0xca, 0x36, 0x16, 0xf9, 0x79, 0xa7, 0x79, 0x8e, 0x5f, + 0x0e, 0x02, 0xce, 0x7f, 0x8e, 0xdd, 0xba, 0x1c, 0xb6, 0x3d, 0x57, 0x6c, 0x05, 0xf5, 0xad, 0xcb, + 0xb4, 0x11, 0x73, 0x98, 0xd6, 0x17, 0xb5, 0xa3, 0xd1, 0x17, 0x1f, 0x86, 0x9a, 0x1a, 0x6f, 0x9e, + 0x2b, 0xa1, 0x26, 0x79, 0x4f, 0xae, 0x84, 0x9a, 0xe1, 0x06, 0x16, 0x9d, 0x1d, 0x74, 0xa3, 0x92, + 0x59, 0xad, 0x94, 0x1f, 0x6d, 0xb7, 0xdf, 0x09, 0x63, 0xca, 0x17, 0x38, 0xe8, 0xdd, 0xd7, 0xf6, + 0x5f, 0x94, 0x20, 0x73, 0xbd, 0x23, 0xba, 0x07, 0xb5, 0x66, 0xd4, 0xe5, 0x8d, 0xc5, 0x14, 0x8e, + 0x9f, 0x97, 0xe4, 0xf4, 0x99, 0x99, 0x6a, 0xc2, 0x9a, 0x19, 0xfa, 0x18, 0xaf, 0xcd, 0x2e, 0x58, + 0x97, 0x8a, 0x28, 0xc0, 0xd1, 0x50, 0xf4, 0xcc, 0x4b, 0x6d, 0x65, 0x1b, 0x36, 0xf8, 0xa1, 0x04, + 0x6a, 0x9b, 0xf2, 0x1a, 0xcb, 0x62, 0xc4, 0x9d, 0xba, 0x15, 0x93, 0x9b, 0x68, 0xea, 0x2f, 0xd6, + 0x8c, 0xec, 0x3f, 0x28, 0xc1, 0xc9, 0xf4, 0x07, 0x10, 0x67, 0x9c, 0x3f, 0x69, 0xc1, 0x93, 0xbe, + 0x13, 0x27, 0x8d, 0x0e, 0xdb, 0x28, 0xac, 0x77, 0xfc, 0xe5, 0x4c, 0x39, 0xff, 0x83, 0x3a, 0x5b, + 0x14, 0xe1, 0xec, 0xb5, 0xa7, 0xf5, 0xa7, 0xee, 0xef, 0x4c, 0x3f, 0xb9, 0x98, 0xcf, 0x1c, 0xf7, + 0xeb, 0x15, 0x7a, 0xcd, 0x82, 0xe3, 0x6e, 0x27, 0x8a, 0x48, 0x90, 0xe8, 0xae, 0xf2, 0xaf, 0x78, + 0xa3, 0x90, 0x81, 0xd4, 0x1d, 0x3c, 0x49, 0x05, 0xea, 0x5c, 0x86, 0x17, 0xee, 0xe1, 0x6e, 0x7f, + 0x3f, 0xd5, 0x9c, 0x7d, 0xdf, 0xf3, 0xaf, 0xd8, 0x3d, 0xad, 0x7f, 0x3c, 0x0c, 0xe3, 0xa9, 0xbb, + 0x0a, 0x52, 0x87, 0x7d, 0xd6, 0x9e, 0x87, 0x7d, 0x2c, 0xa3, 0xb4, 0x13, 0x88, 0x7b, 0x04, 0xcd, + 0x8c, 0xd2, 0x4e, 0x40, 0x30, 0x87, 0x89, 0x21, 0xc5, 0x9d, 0x40, 0x9c, 0x3e, 0x9a, 0x43, 0x8a, + 0x3b, 0x01, 0x16, 0x50, 0xf4, 0x09, 0x0b, 0xc6, 0xd8, 0xe2, 0x13, 0xa7, 0xaa, 0x42, 0xa1, 0x5d, + 0x2b, 0x60, 0xb9, 0xcb, 0xfb, 0x39, 0x58, 0x18, 0xaa, 0xd9, 0x82, 0x53, 0x1c, 0xd1, 0xa7, 0x2d, + 0xa8, 0xa9, 0xfb, 0xb2, 0xc5, 0xd9, 0x48, 0xa3, 0xd8, 0xab, 0x20, 0x32, 0x52, 0x4f, 0xd5, 0xe4, + 0xc7, 0x9a, 0x31, 0x8a, 0xd5, 0x39, 0xe6, 0xc8, 0xe1, 0x9c, 0x63, 0x42, 0xce, 0x19, 0xe6, 0xdb, + 0xa0, 0xd6, 0x12, 0xf9, 0x99, 0xfc, 0x68, 0x51, 0xde, 0x00, 0x24, 0x1b, 0xb1, 0x86, 0x53, 0x63, + 0x3f, 0x66, 0x2f, 0x96, 0x18, 0x67, 0x81, 0xcc, 0xd8, 0x6f, 0xe8, 0x66, 0x6c, 0xe2, 0x98, 0x07, + 0x97, 0xf0, 0x48, 0x0f, 0x2e, 0x47, 0xf7, 0x38, 0xb8, 0x6c, 0xc0, 0x29, 0xa7, 0x93, 0x84, 0x57, + 0x89, 0xe3, 0xcf, 0x26, 0x09, 0x69, 0xb5, 0x93, 0x98, 0x5f, 0x6f, 0x31, 0xc6, 0x5c, 0xc0, 0x2a, + 0x70, 0xae, 0x41, 0xfc, 0xf5, 0x1e, 0x24, 0x9c, 0xff, 0xac, 0xfd, 0xcf, 0x2c, 0x38, 0x95, 0x3b, + 0x15, 0x1e, 0xdf, 0x94, 0x05, 0xfb, 0x87, 0x2a, 0x70, 0x22, 0xe7, 0x26, 0x13, 0xd4, 0x35, 0x17, + 0x89, 0x55, 0x44, 0xf4, 0x5f, 0x3a, 0x98, 0x4d, 0x7e, 0x9b, 0x9c, 0x95, 0xb1, 0xbf, 0x58, 0x04, + 0x1d, 0x0f, 0x50, 0x3e, 0xda, 0x78, 0x00, 0x63, 0xae, 0x0f, 0x3d, 0xd2, 0xb9, 0x5e, 0xd9, 0x63, + 0xae, 0xff, 0x94, 0x05, 0x53, 0xad, 0x3e, 0xd7, 0x13, 0x8a, 0xf3, 0xa4, 0x5b, 0x87, 0x73, 0xf9, + 0x61, 0xfd, 0xec, 0xfd, 0x9d, 0xe9, 0xbe, 0xb7, 0x42, 0xe2, 0xbe, 0xbd, 0xb2, 0xbf, 0x5a, 0x06, + 0x66, 0xaf, 0xb1, 0x6a, 0xf5, 0x5d, 0xf4, 0x71, 0xf3, 0x62, 0x24, 0xab, 0xa8, 0xcb, 0x7b, 0x38, + 0x71, 0x75, 0xb1, 0x12, 0x1f, 0xc1, 0xbc, 0x7b, 0x96, 0xb2, 0x92, 0xb0, 0x34, 0x80, 0x24, 0xf4, + 0xe5, 0x0d, 0x54, 0xe5, 0xe2, 0x6f, 0xa0, 0xaa, 0x65, 0x6f, 0x9f, 0xda, 0xfd, 0x13, 0x0f, 0x3d, + 0x96, 0x9f, 0xf8, 0x67, 0x2c, 0x2e, 0x78, 0x32, 0x5f, 0x01, 0x4d, 0x4b, 0x73, 0x83, 0x5f, 0x54, + 0x53, 0xeb, 0x31, 0x35, 0x9e, 0x83, 0x6a, 0x2c, 0xa4, 0xb2, 0x30, 0x49, 0xd8, 0x2e, 0x56, 0x4a, + 0x6a, 0xac, 0xa0, 0x68, 0x06, 0xc0, 0xf1, 0xfd, 0xf0, 0xee, 0xa5, 0x56, 0x3b, 0xe9, 0x4a, 0xc3, + 0x84, 0x6e, 0x05, 0x66, 0x55, 0x2b, 0x36, 0x30, 0xd0, 0x5b, 0x60, 0x84, 0x57, 0x23, 0x69, 0x0a, + 0x8f, 0xce, 0x28, 0x5d, 0x7c, 0xbc, 0x56, 0x49, 0x13, 0x4b, 0x98, 0xbd, 0x09, 0xc6, 0x5e, 0xe2, + 0xe1, 0x6f, 0xbe, 0xdf, 0xfb, 0x32, 0x5b, 0xfb, 0xef, 0x97, 0x04, 0x2b, 0xbe, 0x37, 0xd0, 0xa1, + 0x83, 0xd6, 0x3e, 0x43, 0x07, 0x3f, 0x06, 0xe0, 0x86, 0xad, 0x36, 0xdd, 0x2d, 0xaf, 0x86, 0xc5, + 0x6c, 0xb1, 0xe6, 0x14, 0x3d, 0xbd, 0xc5, 0xd2, 0x6d, 0xd8, 0xe0, 0x97, 0x12, 0xe8, 0xe5, 0x3d, + 0x05, 0x7a, 0x4a, 0xb6, 0x0d, 0xed, 0x2e, 0xdb, 0xec, 0x3f, 0xb5, 0x20, 0x65, 0xeb, 0xa1, 0x36, + 0x54, 0x68, 0x77, 0xbb, 0x42, 0x4c, 0x2c, 0x17, 0x67, 0x58, 0x52, 0xf9, 0x2c, 0xd6, 0x1e, 0xfb, + 0x89, 0x39, 0x23, 0xe4, 0x8b, 0x30, 0xc9, 0x42, 0xb6, 0x3c, 0x26, 0xc3, 0xab, 0x61, 0xb8, 0xc5, + 0x43, 0x88, 0x74, 0xc8, 0xa5, 0xfd, 0x22, 0x4c, 0xf6, 0x74, 0x8a, 0xdd, 0x96, 0x1f, 0xca, 0x7d, + 0xbb, 0x61, 0xa2, 0xb3, 0xb2, 0x20, 0x98, 0xc3, 0xec, 0x9f, 0xb0, 0xe0, 0x78, 0x96, 0x3c, 0x7a, + 0xdd, 0x82, 0xc9, 0x38, 0x4b, 0xef, 0xb0, 0xc6, 0x4e, 0xa5, 0x4b, 0xf4, 0x80, 0x70, 0x6f, 0x27, + 0xec, 0xff, 0x26, 0x74, 0xc0, 0x6d, 0x2f, 0x68, 0x86, 0x77, 0x95, 0x75, 0x64, 0xf5, 0xb5, 0x8e, + 0x9e, 0x87, 0x6a, 0xec, 0x6e, 0x92, 0x66, 0xc7, 0xef, 0x29, 0x2a, 0xd1, 0x10, 0xed, 0x58, 0x61, + 0xb0, 0x1c, 0xfa, 0x8e, 0xd8, 0xad, 0x66, 0x26, 0xe5, 0xbc, 0x68, 0xc7, 0x0a, 0x03, 0xbd, 0x0b, + 0xc6, 0x8c, 0x97, 0x94, 0xf3, 0x92, 0x6d, 0x35, 0x0c, 0xbd, 0x1d, 0xe3, 0x14, 0x16, 0x15, 0x40, + 0xca, 0xd2, 0x92, 0x7a, 0x9a, 0x09, 0x20, 0x25, 0x0e, 0x63, 0x6c, 0x60, 0xb0, 0x8a, 0x15, 0x7e, + 0x27, 0x66, 0xe7, 0xc7, 0xc3, 0xfa, 0xce, 0x96, 0x39, 0xd1, 0x86, 0x15, 0x14, 0x5d, 0x04, 0x68, + 0x39, 0x41, 0xc7, 0xf1, 0xe9, 0x08, 0x09, 0x87, 0x99, 0x5a, 0x86, 0x4b, 0x0a, 0x82, 0x0d, 0x2c, + 0xfa, 0xc6, 0x89, 0xd7, 0x22, 0x1f, 0x08, 0x03, 0x19, 0xde, 0xae, 0x43, 0x0a, 0x44, 0x3b, 0x56, + 0x18, 0xe8, 0x45, 0x18, 0x75, 0x82, 0x26, 0x37, 0x0b, 0xc3, 0x48, 0x9c, 0x4c, 0xaa, 0x3d, 0xe7, + 0xcd, 0x98, 0xcc, 0x6a, 0x28, 0x36, 0x51, 0xb3, 0x17, 0xd6, 0xc0, 0x80, 0x17, 0x63, 0xfe, 0x89, + 0x05, 0xc7, 0x74, 0x69, 0x2b, 0xe6, 0x57, 0x4b, 0x39, 0x14, 0xad, 0x3d, 0x1d, 0x8a, 0xe9, 0x4a, + 0x24, 0xa5, 0x81, 0x2a, 0x91, 0x98, 0x45, 0x42, 0xca, 0xbb, 0x16, 0x09, 0x79, 0x0b, 0x8c, 0x6c, + 0x91, 0xae, 0x51, 0x4d, 0x84, 0x69, 0x87, 0xeb, 0xbc, 0x09, 0x4b, 0x18, 0xb2, 0x61, 0xd8, 0x75, + 0x54, 0x99, 0xd2, 0x31, 0x11, 0x91, 0x36, 0xcb, 0x90, 0x04, 0xc4, 0x5e, 0x86, 0x9a, 0x3a, 0xca, + 0x97, 0xfe, 0x3d, 0x2b, 0xdf, 0xbf, 0x47, 0xd7, 0xb6, 0x11, 0x95, 0xa0, 0xd7, 0x36, 0x8b, 0x65, + 0x10, 0x41, 0x0a, 0xf5, 0xb5, 0x5f, 0xfb, 0xda, 0xb9, 0x37, 0xfd, 0xd6, 0xd7, 0xce, 0xbd, 0xe9, + 0xf7, 0xbf, 0x76, 0xee, 0x4d, 0x9f, 0xb8, 0x7f, 0xce, 0xfa, 0xb5, 0xfb, 0xe7, 0xac, 0xdf, 0xba, + 0x7f, 0xce, 0xfa, 0xfd, 0xfb, 0xe7, 0xac, 0xaf, 0xde, 0x3f, 0x67, 0xbd, 0xf6, 0x9f, 0xce, 0xbd, + 0xe9, 0x03, 0xdf, 0xba, 0x5b, 0x18, 0xff, 0xf6, 0x3b, 0x59, 0xec, 0x3e, 0x5d, 0xcf, 0x17, 0x8c, + 0x49, 0x7c, 0x41, 0xae, 0xe7, 0xff, 0x1f, 0x00, 0x00, 0xff, 0xff, 0x63, 0x16, 0x6c, 0x4b, 0x9d, + 0x09, 0x01, 0x00, } func (m *AWSAuthConfig) Marshal() (dAtA []byte, err error) { @@ -13018,6 +13027,34 @@ func (m *RepoCreds) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + i -= len(m.AzureActiveDirectoryEndpoint) + copy(dAtA[i:], m.AzureActiveDirectoryEndpoint) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AzureActiveDirectoryEndpoint))) + i-- + dAtA[i] = 0x2 + i-- + dAtA[i] = 0x82 + i -= len(m.AzureServicePrincipalTenantId) + copy(dAtA[i:], m.AzureServicePrincipalTenantId) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AzureServicePrincipalTenantId))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xfa + i -= len(m.AzureServicePrincipalClientSecret) + copy(dAtA[i:], m.AzureServicePrincipalClientSecret) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AzureServicePrincipalClientSecret))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xf2 + i -= len(m.AzureServicePrincipalClientId) + copy(dAtA[i:], m.AzureServicePrincipalClientId) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AzureServicePrincipalClientId))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xea i-- if m.InsecureOCIForceHttp { dAtA[i] = 1 @@ -13203,6 +13240,34 @@ func (m *Repository) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + i -= len(m.AzureActiveDirectoryEndpoint) + copy(dAtA[i:], m.AzureActiveDirectoryEndpoint) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AzureActiveDirectoryEndpoint))) + i-- + dAtA[i] = 0x2 + i-- + dAtA[i] = 0x82 + i -= len(m.AzureServicePrincipalTenantId) + copy(dAtA[i:], m.AzureServicePrincipalTenantId) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AzureServicePrincipalTenantId))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xfa + i -= len(m.AzureServicePrincipalClientSecret) + copy(dAtA[i:], m.AzureServicePrincipalClientSecret) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AzureServicePrincipalClientSecret))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xf2 + i -= len(m.AzureServicePrincipalClientId) + copy(dAtA[i:], m.AzureServicePrincipalClientId) + i = encodeVarintGenerated(dAtA, i, uint64(len(m.AzureServicePrincipalClientId))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xea i-- if m.WebhookManifestCacheWarmDisabled { dAtA[i] = 1 @@ -19065,6 +19130,14 @@ func (m *RepoCreds) Size() (n int) { l = len(m.BearerToken) n += 2 + l + sovGenerated(uint64(l)) n += 3 + l = len(m.AzureServicePrincipalClientId) + n += 2 + l + sovGenerated(uint64(l)) + l = len(m.AzureServicePrincipalClientSecret) + n += 2 + l + sovGenerated(uint64(l)) + l = len(m.AzureServicePrincipalTenantId) + n += 2 + l + sovGenerated(uint64(l)) + l = len(m.AzureActiveDirectoryEndpoint) + n += 2 + l + sovGenerated(uint64(l)) return n } @@ -19135,6 +19208,14 @@ func (m *Repository) Size() (n int) { n += 3 n += 2 + sovGenerated(uint64(m.Depth)) n += 3 + l = len(m.AzureServicePrincipalClientId) + n += 2 + l + sovGenerated(uint64(l)) + l = len(m.AzureServicePrincipalClientSecret) + n += 2 + l + sovGenerated(uint64(l)) + l = len(m.AzureServicePrincipalTenantId) + n += 2 + l + sovGenerated(uint64(l)) + l = len(m.AzureActiveDirectoryEndpoint) + n += 2 + l + sovGenerated(uint64(l)) return n } @@ -22297,6 +22378,10 @@ func (this *RepoCreds) String() string { `UseAzureWorkloadIdentity:` + fmt.Sprintf("%v", this.UseAzureWorkloadIdentity) + `,`, `BearerToken:` + fmt.Sprintf("%v", this.BearerToken) + `,`, `InsecureOCIForceHttp:` + fmt.Sprintf("%v", this.InsecureOCIForceHttp) + `,`, + `AzureServicePrincipalClientId:` + fmt.Sprintf("%v", this.AzureServicePrincipalClientId) + `,`, + `AzureServicePrincipalClientSecret:` + fmt.Sprintf("%v", this.AzureServicePrincipalClientSecret) + `,`, + `AzureServicePrincipalTenantId:` + fmt.Sprintf("%v", this.AzureServicePrincipalTenantId) + `,`, + `AzureActiveDirectoryEndpoint:` + fmt.Sprintf("%v", this.AzureActiveDirectoryEndpoint) + `,`, `}`, }, "") return s @@ -22350,6 +22435,10 @@ func (this *Repository) String() string { `InsecureOCIForceHttp:` + fmt.Sprintf("%v", this.InsecureOCIForceHttp) + `,`, `Depth:` + fmt.Sprintf("%v", this.Depth) + `,`, `WebhookManifestCacheWarmDisabled:` + fmt.Sprintf("%v", this.WebhookManifestCacheWarmDisabled) + `,`, + `AzureServicePrincipalClientId:` + fmt.Sprintf("%v", this.AzureServicePrincipalClientId) + `,`, + `AzureServicePrincipalClientSecret:` + fmt.Sprintf("%v", this.AzureServicePrincipalClientSecret) + `,`, + `AzureServicePrincipalTenantId:` + fmt.Sprintf("%v", this.AzureServicePrincipalTenantId) + `,`, + `AzureActiveDirectoryEndpoint:` + fmt.Sprintf("%v", this.AzureActiveDirectoryEndpoint) + `,`, `}`, }, "") return s @@ -47222,6 +47311,134 @@ func (m *RepoCreds) Unmarshal(dAtA []byte) error { } } m.InsecureOCIForceHttp = bool(v != 0) + case 29: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AzureServicePrincipalClientId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AzureServicePrincipalClientId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 30: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AzureServicePrincipalClientSecret", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AzureServicePrincipalClientSecret = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 31: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AzureServicePrincipalTenantId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AzureServicePrincipalTenantId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 32: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AzureActiveDirectoryEndpoint", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AzureActiveDirectoryEndpoint = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -48139,6 +48356,134 @@ func (m *Repository) Unmarshal(dAtA []byte) error { } } m.WebhookManifestCacheWarmDisabled = bool(v != 0) + case 29: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AzureServicePrincipalClientId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AzureServicePrincipalClientId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 30: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AzureServicePrincipalClientSecret", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AzureServicePrincipalClientSecret = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 31: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AzureServicePrincipalTenantId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AzureServicePrincipalTenantId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 32: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AzureActiveDirectoryEndpoint", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AzureActiveDirectoryEndpoint = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/pkg/apis/application/v1alpha1/generated.proto b/pkg/apis/application/v1alpha1/generated.proto index 4274934950..2c3813924d 100644 --- a/pkg/apis/application/v1alpha1/generated.proto +++ b/pkg/apis/application/v1alpha1/generated.proto @@ -1876,6 +1876,18 @@ message RepoCreds { // InsecureOCIForceHttp specifies whether the connection to the repository uses TLS at _all_. If true, no TLS. This flag is applicable for OCI repos only. optional bool insecureOCIForceHttp = 26; + + // AzureServicePrincipalClientId specifies the client ID of the Azure Service Principal used to access the repo + optional string azureServicePrincipalClientId = 29; + + // AzureServicePrincipalClientSecret specifies the client secret of the Azure Service Principal used to access the repo + optional string azureServicePrincipalClientSecret = 30; + + // AzureServicePrincipalTenantId specifies the tenant ID of the Azure Service Principal used to access the repo + optional string azureServicePrincipalTenantId = 31; + + // AzureActiveDirectoryEndpoint specifies the Azure Active Directory endpoint used for Service Principal authentication. If empty will default to https://login.microsoftonline.com + optional string azureActiveDirectoryEndpoint = 32; } // RepositoryList is a collection of Repositories. @@ -1973,6 +1985,18 @@ message Repository { // When set, webhook handlers will only trigger reconciliation for affected applications and skip Redis cache // operations for unaffected ones. Recommended for large monorepos with plain YAML manifests. optional bool webhookManifestCacheWarmDisabled = 28; + + // AzureServicePrincipalClientId specifies the client ID of the Azure Service Principal used to access the repo + optional string azureServicePrincipalClientId = 29; + + // AzureServicePrincipalClientSecret specifies the client secret of the Azure Service Principal used to access the repo + optional string azureServicePrincipalClientSecret = 30; + + // AzureServicePrincipalTenantId specifies the tenant ID of the Azure Service Principal used to access the repo + optional string azureServicePrincipalTenantId = 31; + + // AzureActiveDirectoryEndpoint specifies the Azure Active Directory endpoint used for Service Principal authentication. If empty will default to https://login.microsoftonline.com + optional string azureActiveDirectoryEndpoint = 32; } // A RepositoryCertificate is either SSH known hosts entry or TLS certificate diff --git a/pkg/apis/application/v1alpha1/repository_types.go b/pkg/apis/application/v1alpha1/repository_types.go index 18b0170536..33d74f032f 100644 --- a/pkg/apis/application/v1alpha1/repository_types.go +++ b/pkg/apis/application/v1alpha1/repository_types.go @@ -57,6 +57,14 @@ type RepoCreds struct { BearerToken string `json:"bearerToken,omitempty" protobuf:"bytes,25,opt,name=bearerToken"` // InsecureOCIForceHttp specifies whether the connection to the repository uses TLS at _all_. If true, no TLS. This flag is applicable for OCI repos only. InsecureOCIForceHttp bool `json:"insecureOCIForceHttp,omitempty" protobuf:"bytes,26,opt,name=insecureOCIForceHttp"` //nolint:revive //FIXME(var-naming) + // AzureServicePrincipalClientId specifies the client ID of the Azure Service Principal used to access the repo + AzureServicePrincipalClientId string `json:"azureServicePrincipalClientId,omitempty" protobuf:"bytes,29,opt,name=azureServicePrincipalClientId"` + // AzureServicePrincipalClientSecret specifies the client secret of the Azure Service Principal used to access the repo + AzureServicePrincipalClientSecret string `json:"azureServicePrincipalClientSecret,omitempty" protobuf:"bytes,30,opt,name=azureServicePrincipalClientSecret"` + // AzureServicePrincipalTenantId specifies the tenant ID of the Azure Service Principal used to access the repo + AzureServicePrincipalTenantId string `json:"azureServicePrincipalTenantId,omitempty" protobuf:"bytes,31,opt,name=azureServicePrincipalTenantId"` + // AzureActiveDirectoryEndpoint specifies the Azure Active Directory endpoint used for Service Principal authentication. If empty will default to https://login.microsoftonline.com + AzureActiveDirectoryEndpoint string `json:"azureActiveDirectoryEndpoint,omitempty" protobuf:"bytes,32,opt,name=azureActiveDirectoryEndpoint"` } // Repository is a repository holding application configurations @@ -120,6 +128,14 @@ type Repository struct { // When set, webhook handlers will only trigger reconciliation for affected applications and skip Redis cache // operations for unaffected ones. Recommended for large monorepos with plain YAML manifests. WebhookManifestCacheWarmDisabled bool `json:"webhookManifestCacheWarmDisabled,omitempty" protobuf:"varint,28,opt,name=webhookManifestCacheWarmDisabled"` + // AzureServicePrincipalClientId specifies the client ID of the Azure Service Principal used to access the repo + AzureServicePrincipalClientId string `json:"azureServicePrincipalClientId,omitempty" protobuf:"bytes,29,opt,name=azureServicePrincipalClientId"` + // AzureServicePrincipalClientSecret specifies the client secret of the Azure Service Principal used to access the repo + AzureServicePrincipalClientSecret string `json:"azureServicePrincipalClientSecret,omitempty" protobuf:"bytes,30,opt,name=azureServicePrincipalClientSecret"` + // AzureServicePrincipalTenantId specifies the tenant ID of the Azure Service Principal used to access the repo + AzureServicePrincipalTenantId string `json:"azureServicePrincipalTenantId,omitempty" protobuf:"bytes,31,opt,name=azureServicePrincipalTenantId"` + // AzureActiveDirectoryEndpoint specifies the Azure Active Directory endpoint used for Service Principal authentication. If empty will default to https://login.microsoftonline.com + AzureActiveDirectoryEndpoint string `json:"azureActiveDirectoryEndpoint,omitempty" protobuf:"bytes,32,opt,name=azureActiveDirectoryEndpoint"` } // IsInsecure returns true if the repository has been configured to skip server verification or set to HTTP only @@ -134,7 +150,7 @@ func (repo *Repository) IsLFSEnabled() bool { // HasCredentials returns true when the repository has been configured with any credentials func (repo *Repository) HasCredentials() bool { - return repo.Username != "" || repo.Password != "" || repo.BearerToken != "" || repo.SSHPrivateKey != "" || repo.TLSClientCertData != "" || repo.GithubAppPrivateKey != "" || repo.UseAzureWorkloadIdentity + return repo.Username != "" || repo.Password != "" || repo.BearerToken != "" || repo.SSHPrivateKey != "" || repo.TLSClientCertData != "" || repo.GithubAppPrivateKey != "" || repo.UseAzureWorkloadIdentity || repo.AzureServicePrincipalClientSecret != "" } // CopyCredentialsFromRepo copies all credential information from source repository to receiving repository @@ -173,6 +189,18 @@ func (repo *Repository) CopyCredentialsFromRepo(source *Repository) { if repo.GCPServiceAccountKey == "" { repo.GCPServiceAccountKey = source.GCPServiceAccountKey } + if repo.AzureServicePrincipalClientId == "" { + repo.AzureServicePrincipalClientId = source.AzureServicePrincipalClientId + } + if repo.AzureServicePrincipalClientSecret == "" { + repo.AzureServicePrincipalClientSecret = source.AzureServicePrincipalClientSecret + } + if repo.AzureServicePrincipalTenantId == "" { + repo.AzureServicePrincipalTenantId = source.AzureServicePrincipalTenantId + } + if repo.AzureActiveDirectoryEndpoint == "" { + repo.AzureActiveDirectoryEndpoint = source.AzureActiveDirectoryEndpoint + } repo.InsecureOCIForceHttp = source.InsecureOCIForceHttp repo.ForceHttpBasicAuth = source.ForceHttpBasicAuth repo.UseAzureWorkloadIdentity = source.UseAzureWorkloadIdentity @@ -215,6 +243,18 @@ func (repo *Repository) CopyCredentialsFrom(source *RepoCreds) { if repo.GCPServiceAccountKey == "" { repo.GCPServiceAccountKey = source.GCPServiceAccountKey } + if repo.AzureServicePrincipalClientId == "" { + repo.AzureServicePrincipalClientId = source.AzureServicePrincipalClientId + } + if repo.AzureServicePrincipalClientSecret == "" { + repo.AzureServicePrincipalClientSecret = source.AzureServicePrincipalClientSecret + } + if repo.AzureServicePrincipalTenantId == "" { + repo.AzureServicePrincipalTenantId = source.AzureServicePrincipalTenantId + } + if repo.AzureActiveDirectoryEndpoint == "" { + repo.AzureActiveDirectoryEndpoint = source.AzureActiveDirectoryEndpoint + } if repo.Proxy == "" { repo.Proxy = source.Proxy } @@ -252,6 +292,14 @@ func (repo *Repository) GetGitCreds(store git.CredsStore) git.Creds { if repo.UseAzureWorkloadIdentity { return git.NewAzureWorkloadIdentityCreds(store, workloadidentity.NewWorkloadIdentityTokenProvider()) } + if repo.AzureServicePrincipalClientId != "" && repo.AzureServicePrincipalClientSecret != "" && repo.AzureServicePrincipalTenantId != "" { + creds := git.NewAzureServicePrincipalCreds(repo.AzureServicePrincipalTenantId, repo.AzureServicePrincipalClientId, repo.AzureServicePrincipalClientSecret, store). + WithActiveDirectoryEndpoint(repo.AzureActiveDirectoryEndpoint). + WithClientCert(repo.TLSClientCertData, repo.TLSClientCertKey). + WithProxy(repo.Proxy). + WithNoProxy(repo.NoProxy) + return creds + } return git.NopCreds{} } @@ -351,22 +399,25 @@ func (repo *Repository) StringForLogging() string { // Sanitized returns a copy of the Repository with sensitive information removed. func (repo *Repository) Sanitized() *Repository { return &Repository{ - Repo: repo.Repo, - Type: repo.Type, - Name: repo.Name, - Insecure: repo.IsInsecure(), - EnableLFS: repo.EnableLFS, - EnableOCI: repo.EnableOCI, - Proxy: repo.Proxy, - NoProxy: repo.NoProxy, - Project: repo.Project, - ForceHttpBasicAuth: repo.ForceHttpBasicAuth, - InheritedCreds: repo.InheritedCreds, - GithubAppId: repo.GithubAppId, - GithubAppInstallationId: repo.GithubAppInstallationId, - GitHubAppEnterpriseBaseURL: repo.GitHubAppEnterpriseBaseURL, - UseAzureWorkloadIdentity: repo.UseAzureWorkloadIdentity, - Depth: repo.Depth, + Repo: repo.Repo, + Type: repo.Type, + Name: repo.Name, + Insecure: repo.IsInsecure(), + EnableLFS: repo.EnableLFS, + EnableOCI: repo.EnableOCI, + Proxy: repo.Proxy, + NoProxy: repo.NoProxy, + Project: repo.Project, + ForceHttpBasicAuth: repo.ForceHttpBasicAuth, + InheritedCreds: repo.InheritedCreds, + GithubAppId: repo.GithubAppId, + GithubAppInstallationId: repo.GithubAppInstallationId, + GitHubAppEnterpriseBaseURL: repo.GitHubAppEnterpriseBaseURL, + UseAzureWorkloadIdentity: repo.UseAzureWorkloadIdentity, + AzureActiveDirectoryEndpoint: repo.AzureActiveDirectoryEndpoint, + AzureServicePrincipalClientId: repo.AzureServicePrincipalClientId, + AzureServicePrincipalTenantId: repo.AzureServicePrincipalTenantId, + Depth: repo.Depth, } } diff --git a/pkg/apis/application/v1alpha1/repository_types_test.go b/pkg/apis/application/v1alpha1/repository_types_test.go index 116bde08f7..a6bd115110 100644 --- a/pkg/apis/application/v1alpha1/repository_types_test.go +++ b/pkg/apis/application/v1alpha1/repository_types_test.go @@ -87,6 +87,15 @@ func TestGetGitCreds(t *testing.T) { }, expected: git.NewGoogleCloudCreds("gcp-key", nil), }, + { + name: "Azure Service Principal credentials", + repo: &Repository{ + AzureServicePrincipalClientId: "client-id", + AzureServicePrincipalClientSecret: "client-secret", + AzureServicePrincipalTenantId: "tenant-id", + }, + expected: git.NewAzureServicePrincipalCreds("tenant-id", "client-id", "client-secret", nil), + }, { name: "No credentials", repo: &Repository{}, @@ -130,30 +139,33 @@ func TestGetGitCreds_GitHubApp_InstallationNotFound(t *testing.T) { func TestSanitizedRepository(t *testing.T) { repo := &Repository{ - Repo: "https://github.com/argoproj/argo-cd.git", - Type: "git", - Name: "argo-cd", - Username: "admin", - Password: "super-secret-password", - SSHPrivateKey: "-----BEGIN RSA PRIVATE KEY-----", - BearerToken: "eyJhbGciOiJIUzI1NiJ9", - TLSClientCertData: "cert-data", - TLSClientCertKey: "cert-key", - GCPServiceAccountKey: "gcp-key", - GithubAppPrivateKey: "github-app-key", - Insecure: true, - EnableLFS: true, - EnableOCI: true, - Proxy: "http://proxy:8080", - NoProxy: "localhost", - Project: "default", - ForceHttpBasicAuth: true, - InheritedCreds: true, - GithubAppId: 12345, - GithubAppInstallationId: 67890, - GitHubAppEnterpriseBaseURL: "https://ghe.example.com/api/v3", - UseAzureWorkloadIdentity: true, - Depth: 1, + Repo: "https://github.com/argoproj/argo-cd.git", + Type: "git", + Name: "argo-cd", + Username: "admin", + Password: "super-secret-password", + SSHPrivateKey: "-----BEGIN RSA PRIVATE KEY-----", + BearerToken: "eyJhbGciOiJIUzI1NiJ9", + TLSClientCertData: "cert-data", + TLSClientCertKey: "cert-key", + GCPServiceAccountKey: "gcp-key", + GithubAppPrivateKey: "github-app-key", + Insecure: true, + EnableLFS: true, + EnableOCI: true, + Proxy: "http://proxy:8080", + NoProxy: "localhost", + Project: "default", + ForceHttpBasicAuth: true, + InheritedCreds: true, + GithubAppId: 12345, + GithubAppInstallationId: 67890, + GitHubAppEnterpriseBaseURL: "https://ghe.example.com/api/v3", + UseAzureWorkloadIdentity: true, + AzureServicePrincipalClientId: "client-id", + AzureServicePrincipalClientSecret: "client-secret", + AzureServicePrincipalTenantId: "tenant-id", + Depth: 1, } sanitized := repo.Sanitized() @@ -174,6 +186,8 @@ func TestSanitizedRepository(t *testing.T) { assert.Equal(t, repo.GithubAppInstallationId, sanitized.GithubAppInstallationId) assert.Equal(t, repo.GitHubAppEnterpriseBaseURL, sanitized.GitHubAppEnterpriseBaseURL) assert.Equal(t, repo.UseAzureWorkloadIdentity, sanitized.UseAzureWorkloadIdentity) + assert.Equal(t, repo.AzureServicePrincipalClientId, sanitized.AzureServicePrincipalClientId) + assert.Equal(t, repo.AzureServicePrincipalTenantId, sanitized.AzureServicePrincipalTenantId) assert.Equal(t, repo.Depth, sanitized.Depth) // Sensitive fields must be stripped @@ -185,6 +199,7 @@ func TestSanitizedRepository(t *testing.T) { assert.Empty(t, sanitized.TLSClientCertKey) assert.Empty(t, sanitized.GCPServiceAccountKey) assert.Empty(t, sanitized.GithubAppPrivateKey) + assert.Empty(t, sanitized.AzureServicePrincipalClientSecret) } func TestSanitizedRepositoryPreservesDepthZero(t *testing.T) { diff --git a/server/repository/repository.go b/server/repository/repository.go index 30ff87167d..c4a7dd8096 100644 --- a/server/repository/repository.go +++ b/server/repository/repository.go @@ -686,25 +686,29 @@ func (s *Server) ValidateAccess(ctx context.Context, q *repositorypkg.RepoAccess } repo := &v1alpha1.Repository{ - Repo: q.Repo, - Type: q.Type, - Name: q.Name, - Username: q.Username, - Password: q.Password, - BearerToken: q.BearerToken, - SSHPrivateKey: q.SshPrivateKey, - Insecure: q.Insecure, - TLSClientCertData: q.TlsClientCertData, - TLSClientCertKey: q.TlsClientCertKey, - EnableOCI: q.EnableOci, - GithubAppPrivateKey: q.GithubAppPrivateKey, - GithubAppId: q.GithubAppID, - GithubAppInstallationId: q.GithubAppInstallationID, - GitHubAppEnterpriseBaseURL: q.GithubAppEnterpriseBaseUrl, - Proxy: q.Proxy, - GCPServiceAccountKey: q.GcpServiceAccountKey, - InsecureOCIForceHttp: q.InsecureOciForceHttp, - UseAzureWorkloadIdentity: q.UseAzureWorkloadIdentity, + Repo: q.Repo, + Type: q.Type, + Name: q.Name, + Username: q.Username, + Password: q.Password, + BearerToken: q.BearerToken, + SSHPrivateKey: q.SshPrivateKey, + Insecure: q.Insecure, + TLSClientCertData: q.TlsClientCertData, + TLSClientCertKey: q.TlsClientCertKey, + EnableOCI: q.EnableOci, + GithubAppPrivateKey: q.GithubAppPrivateKey, + GithubAppId: q.GithubAppID, + GithubAppInstallationId: q.GithubAppInstallationID, + GitHubAppEnterpriseBaseURL: q.GithubAppEnterpriseBaseUrl, + Proxy: q.Proxy, + GCPServiceAccountKey: q.GcpServiceAccountKey, + InsecureOCIForceHttp: q.InsecureOciForceHttp, + UseAzureWorkloadIdentity: q.UseAzureWorkloadIdentity, + AzureServicePrincipalClientId: q.AzureServicePrincipalClientId, + AzureServicePrincipalClientSecret: q.AzureServicePrincipalClientSecret, + AzureServicePrincipalTenantId: q.AzureServicePrincipalTenantId, + AzureActiveDirectoryEndpoint: q.AzureActiveDirectoryEndpoint, } // If repo does not have credentials, check if there are credentials stored @@ -737,24 +741,28 @@ func (s *Server) ValidateWriteAccess(ctx context.Context, q *repositorypkg.RepoA } repo := &v1alpha1.Repository{ - Repo: q.Repo, - Type: q.Type, - Name: q.Name, - Username: q.Username, - Password: q.Password, - BearerToken: q.BearerToken, - SSHPrivateKey: q.SshPrivateKey, - Insecure: q.Insecure, - TLSClientCertData: q.TlsClientCertData, - TLSClientCertKey: q.TlsClientCertKey, - EnableOCI: q.EnableOci, - GithubAppPrivateKey: q.GithubAppPrivateKey, - GithubAppId: q.GithubAppID, - GithubAppInstallationId: q.GithubAppInstallationID, - GitHubAppEnterpriseBaseURL: q.GithubAppEnterpriseBaseUrl, - Proxy: q.Proxy, - GCPServiceAccountKey: q.GcpServiceAccountKey, - UseAzureWorkloadIdentity: q.UseAzureWorkloadIdentity, + Repo: q.Repo, + Type: q.Type, + Name: q.Name, + Username: q.Username, + Password: q.Password, + BearerToken: q.BearerToken, + SSHPrivateKey: q.SshPrivateKey, + Insecure: q.Insecure, + TLSClientCertData: q.TlsClientCertData, + TLSClientCertKey: q.TlsClientCertKey, + EnableOCI: q.EnableOci, + GithubAppPrivateKey: q.GithubAppPrivateKey, + GithubAppId: q.GithubAppID, + GithubAppInstallationId: q.GithubAppInstallationID, + GitHubAppEnterpriseBaseURL: q.GithubAppEnterpriseBaseUrl, + Proxy: q.Proxy, + GCPServiceAccountKey: q.GcpServiceAccountKey, + UseAzureWorkloadIdentity: q.UseAzureWorkloadIdentity, + AzureServicePrincipalClientId: q.AzureServicePrincipalClientId, + AzureServicePrincipalClientSecret: q.AzureServicePrincipalClientSecret, + AzureServicePrincipalTenantId: q.AzureServicePrincipalTenantId, + AzureActiveDirectoryEndpoint: q.AzureActiveDirectoryEndpoint, } err := s.testRepo(ctx, repo) diff --git a/server/repository/repository.proto b/server/repository/repository.proto index aaffaaa123..a1714cbdab 100644 --- a/server/repository/repository.proto +++ b/server/repository/repository.proto @@ -95,6 +95,14 @@ message RepoAccessQuery { string bearerToken = 21; // Whether https should be disabled for an OCI repo bool insecureOciForceHttp = 22; + // Azure Service Principal Client ID + string azureServicePrincipalClientId = 23; + // Azure Service Principal Client Secret + string azureServicePrincipalClientSecret = 24; + // Azure Service Principal Tenant ID + string azureServicePrincipalTenantId = 25; + // Azure Active Directory Endpoint + string azureActiveDirectoryEndpoint = 26; } message RepoResponse {} diff --git a/server/repository/repository_test.go b/server/repository/repository_test.go index c98ff4088b..026d686a19 100644 --- a/server/repository/repository_test.go +++ b/server/repository/repository_test.go @@ -284,6 +284,19 @@ func TestRepositoryServer(t *testing.T) { require.NoError(t, err) }) + t.Run("Test_validateWriteAccess", func(t *testing.T) { + repoServerClient := &mocks.RepoServerServiceClient{} + repoServerClient.EXPECT().TestRepository(mock.Anything, mock.Anything).Return(&apiclient.TestRepositoryResponse{}, nil) + repoServerClientset := mocks.Clientset{RepoServerServiceClient: repoServerClient} + + s := NewServer(&repoServerClientset, argoDB, enforcer, nil, appLister, projInformer, testNamespace, settingsMgr, true) + url := "https://test" + _, err := s.ValidateWriteAccess(t.Context(), &repository.RepoAccessQuery{ + Repo: url, + }) + require.NoError(t, err) + }) + t.Run("Test_Get", func(t *testing.T) { repoServerClient := &mocks.RepoServerServiceClient{} repoServerClient.EXPECT().TestRepository(mock.Anything, mock.Anything).Return(&apiclient.TestRepositoryResponse{}, nil) diff --git a/ui/src/app/settings/components/repos-list/repos-list.tsx b/ui/src/app/settings/components/repos-list/repos-list.tsx index 8670a2b56e..15176eff73 100644 --- a/ui/src/app/settings/components/repos-list/repos-list.tsx +++ b/ui/src/app/settings/components/repos-list/repos-list.tsx @@ -82,6 +82,21 @@ interface NewGoogleCloudSourceRepoParams { write: boolean; } +interface NewAzureServicePrincipalRepoParams { + type: string; + name: string; + url: string; + azureServicePrincipalClientId: string; + azureServicePrincipalClientSecret: string; + azureServicePrincipalTenantId: string; + azureActiveDirectoryEndpoint: string; + proxy: string; + noProxy: string; + project?: string; + // write should be true if saving as a write credential. + write: boolean; +} + interface NewSSHRepoCredsParams { url: string; sshPrivateKey: string; @@ -128,11 +143,25 @@ interface NewGoogleCloudSourceRepoCredsParams { write: boolean; } +interface NewAzureServicePrincipalRepoCredsParams { + url: string; + azureServicePrincipalClientId: string; + azureServicePrincipalClientSecret: string; + azureServicePrincipalTenantId: string; + azureActiveDirectoryEndpoint: string; + proxy: string; + noProxy: string; + project?: string; + // write should be true if saving as a write credential. + write: boolean; +} + export enum ConnectionMethod { SSH = 'via SSH', HTTPS = 'via HTTP/HTTPS', GITHUBAPP = 'via GitHub App', - GOOGLECLOUD = 'via Google Cloud' + GOOGLECLOUD = 'via Google Cloud', + AZURESERVICEPRINCIPAL = 'via Azure Service Principal' } export const ReposList = ({match, location}: RouteComponentProps) => { @@ -172,8 +201,15 @@ export const ReposList = ({match, location}: RouteComponentProps) => { {method.toUpperCase()}

)} - items={[ConnectionMethod.SSH, ConnectionMethod.HTTPS, ConnectionMethod.GITHUBAPP, ConnectionMethod.GOOGLECLOUD].map( - (connectMethod: ConnectionMethod.SSH | ConnectionMethod.HTTPS | ConnectionMethod.GITHUBAPP | ConnectionMethod.GOOGLECLOUD) => ({ + items={[ConnectionMethod.SSH, ConnectionMethod.HTTPS, ConnectionMethod.GITHUBAPP, ConnectionMethod.GOOGLECLOUD, ConnectionMethod.AZURESERVICEPRINCIPAL].map( + ( + connectMethod: + | ConnectionMethod.SSH + | ConnectionMethod.HTTPS + | ConnectionMethod.GITHUBAPP + | ConnectionMethod.GOOGLECLOUD + | ConnectionMethod.AZURESERVICEPRINCIPAL + ) => ({ title: connectMethod.toUpperCase(), action: () => { onSelection(connectMethod); @@ -191,7 +227,7 @@ export const ReposList = ({match, location}: RouteComponentProps) => { }; const onChooseDefaultValues = (): FormValues => { - return {type: 'git', ghType: 'GitHub', write: false}; + return {type: 'git', ghType: 'GitHub', azureType: 'Azure Public Cloud', write: false}; }; const onValidateErrors = (params: FormValues): FormErrors => { @@ -233,6 +269,16 @@ export const ReposList = ({match, location}: RouteComponentProps) => { gcpServiceAccountKey: !googleCloudValues.gcpServiceAccountKey && 'GCP service account key is required', depth: googleCloudValues.depth != undefined && googleCloudValues.depth < 0 && 'Depth must be a non-negative number' }; + case ConnectionMethod.AZURESERVICEPRINCIPAL: + const azureServicePrincipalValues = params as NewAzureServicePrincipalRepoParams; + return { + url: + (!azureServicePrincipalValues.url && 'Repository URL is required') || + (credsTemplate && !isHTTPOrHTTPSUrl(azureServicePrincipalValues.url) && 'Not a valid HTTP/HTTPS URL'), + azureServicePrincipalClientId: !azureServicePrincipalValues.azureServicePrincipalClientId && 'Azure Service Principal Client ID is required', + azureServicePrincipalClientSecret: !azureServicePrincipalValues.azureServicePrincipalClientSecret && 'Azure Service Principal Client Secret is required', + azureServicePrincipalTenantId: !azureServicePrincipalValues.azureServicePrincipalTenantId && 'Azure Service Principal Tenant ID is required' + }; } }; @@ -283,6 +329,8 @@ export const ReposList = ({match, location}: RouteComponentProps) => { return connectGitHubAppRepo(params as NewGitHubAppRepoParams); case ConnectionMethod.GOOGLECLOUD: return connectGoogleCloudSourceRepo(params as NewGoogleCloudSourceRepoParams); + case ConnectionMethod.AZURESERVICEPRINCIPAL: + return connectAzureServicePrincipalRepo(params as NewAzureServicePrincipalRepoParams); } }; @@ -313,9 +361,9 @@ export const ReposList = ({match, location}: RouteComponentProps) => { return url.replace('https://', '').replace('oci://', ''); }; - // only connections of git type which is not via GitHub App are updatable + // only connections of git type which are not via GitHub App or Azure Service Principal are updatable const isRepoUpdatable = (repo: models.Repository) => { - return isHTTPOrHTTPSUrl(repo.repo) && repo.type === 'git' && !repo.githubAppID; + return isHTTPOrHTTPSUrl(repo.repo) && repo.type === 'git' && !repo.githubAppID && !repo.azureServicePrincipalClientId; }; // Forces a reload of configured repositories, circumventing the cache @@ -466,7 +514,7 @@ export const ReposList = ({match, location}: RouteComponentProps) => { } }; - // Connect a new repository or create a repository credentials for GitHub App repositories + // Connect a new repository or create a repository credentials for Google Cloud Source repositories const connectGoogleCloudSourceRepo = async (params: NewGoogleCloudSourceRepoParams) => { if (credsTemplate.current) { createGoogleCloudSourceCreds({ @@ -495,6 +543,40 @@ export const ReposList = ({match, location}: RouteComponentProps) => { } }; + // Connect a new repository or create a repository credentials for Azure Service Principal repositories + const connectAzureServicePrincipalRepo = async (params: NewAzureServicePrincipalRepoParams) => { + if (credsTemplate.current) { + createAzureServicePrincipalCreds({ + url: params.url, + azureServicePrincipalClientId: params.azureServicePrincipalClientId, + azureServicePrincipalClientSecret: params.azureServicePrincipalClientSecret, + azureServicePrincipalTenantId: params.azureServicePrincipalTenantId, + azureActiveDirectoryEndpoint: params.azureActiveDirectoryEndpoint, + proxy: params.proxy, + noProxy: params.noProxy, + write: params.write + }); + } else { + setConnecting(true); + try { + if (params.write) { + await services.repos.createAzureServicePrincipalWrite(params); + } else { + await services.repos.createAzureServicePrincipal(params); + } + repoLoader.current.reload(); + setConnectRepo(false); + } catch (e) { + ctx.notifications.show({ + content: , + type: NotificationType.Error + }); + } finally { + setConnecting(false); + } + } + }; + const createHTTPSCreds = async (params: NewHTTPSRepoCredsParams) => { try { if (params.write) { @@ -563,6 +645,23 @@ export const ReposList = ({match, location}: RouteComponentProps) => { } }; + const createAzureServicePrincipalCreds = async (params: NewAzureServicePrincipalRepoCredsParams) => { + try { + if (params.write) { + await services.repocreds.createAzureServicePrincipalWrite(params); + } else { + await services.repocreds.createAzureServicePrincipal(params); + } + credsLoader.current.reload(); + setConnectRepo(false); + } catch (e) { + ctx.notifications.show({ + content: , + type: NotificationType.Error + }); + } + }; + // Remove a repository from the configuration const disconnectRepo = async (repo: string, project: string, write: boolean) => { const confirmed = await ctx.popup.confirm('Disconnect repository', `Are you sure you want to disconnect '${repo}'?`); @@ -1322,6 +1421,59 @@ export const ReposList = ({match, location}: RouteComponentProps) => { )} + {method === ConnectionMethod.AZURESERVICEPRINCIPAL && ( +
+

CONNECT REPO USING AZURE SERVICE PRINCIPAL

+
+ +
+ {formApi.getFormState().values.azureType === 'Azure Other Cloud' && ( +
+ +
+ )} +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ + +
+
+ + +
+
+ +
+
+ +
+
+ )} )} diff --git a/ui/src/app/shared/models.ts b/ui/src/app/shared/models.ts index 469ff734bd..e8c7e91a6e 100644 --- a/ui/src/app/shared/models.ts +++ b/ui/src/app/shared/models.ts @@ -677,6 +677,10 @@ export interface Repository { enableOCI: boolean; useAzureWorkloadIdentity: boolean; depth?: number; + azureServicePrincipalClientId?: string; + azureServicePrincipalClientSecret?: string; + azureServicePrincipalTenantId?: string; + azureActiveDirectoryEndpoint?: string; } export interface RepositoryList extends ItemsList {} diff --git a/ui/src/app/shared/services/repo-service.ts b/ui/src/app/shared/services/repo-service.ts index 1718d9b460..9d3d52559a 100644 --- a/ui/src/app/shared/services/repo-service.ts +++ b/ui/src/app/shared/services/repo-service.ts @@ -64,6 +64,19 @@ export interface GoogleCloudSourceQuery { depth?: number; } +export interface AzureServicePrincipalQuery { + type: string; + name: string; + url: string; + azureActiveDirectoryEndpoint: string; + azureServicePrincipalClientId: string; + azureServicePrincipalClientSecret: string; + azureServicePrincipalTenantId: string; + proxy: string; + noProxy: string; + project?: string; +} + export class RepositoriesService { public list(): Promise { return requests @@ -311,6 +324,42 @@ export class RepositoriesService { .then(res => res.body as models.Repository); } + public createAzureServicePrincipal(q: AzureServicePrincipalQuery): Promise { + return requests + .post('/repositories') + .send({ + type: q.type, + name: q.name, + repo: q.url, + azureServicePrincipalClientId: q.azureServicePrincipalClientId, + azureServicePrincipalClientSecret: q.azureServicePrincipalClientSecret, + azureServicePrincipalTenantId: q.azureServicePrincipalTenantId, + azureActiveDirectoryEndpoint: q.azureActiveDirectoryEndpoint, + proxy: q.proxy, + noProxy: q.noProxy, + project: q.project + }) + .then(res => res.body as models.Repository); + } + + public createAzureServicePrincipalWrite(q: AzureServicePrincipalQuery): Promise { + return requests + .post('/write-repositories') + .send({ + type: q.type, + name: q.name, + repo: q.url, + azureServicePrincipalClientId: q.azureServicePrincipalClientId, + azureServicePrincipalClientSecret: q.azureServicePrincipalClientSecret, + azureServicePrincipalTenantId: q.azureServicePrincipalTenantId, + azureActiveDirectoryEndpoint: q.azureActiveDirectoryEndpoint, + proxy: q.proxy, + noProxy: q.noProxy, + project: q.project + }) + .then(res => res.body as models.Repository); + } + public delete(url: string, project: string): Promise { return requests .delete(`/repositories/${encodeURIComponent(url)}?appProject=${project}`) diff --git a/ui/src/app/shared/services/repocreds-service.ts b/ui/src/app/shared/services/repocreds-service.ts index 01da3cf8ba..afae9f417d 100644 --- a/ui/src/app/shared/services/repocreds-service.ts +++ b/ui/src/app/shared/services/repocreds-service.ts @@ -37,6 +37,16 @@ export interface GoogleCloudSourceCreds { gcpServiceAccountKey: string; } +export interface AzureServicePrincipalCreds { + url: string; + azureActiveDirectoryEndpoint: string; + azureServicePrincipalClientId: string; + azureServicePrincipalClientSecret: string; + azureServicePrincipalTenantId: string; + proxy: string; + noProxy: string; +} + export class RepoCredsService { public list(): Promise { return requests @@ -108,6 +118,20 @@ export class RepoCredsService { .then(res => res.body as models.RepoCreds); } + public createAzureServicePrincipal(creds: AzureServicePrincipalCreds): Promise { + return requests + .post('/repocreds') + .send(creds) + .then(res => res.body as models.RepoCreds); + } + + public createAzureServicePrincipalWrite(creds: AzureServicePrincipalCreds): Promise { + return requests + .post('/write-repocreds') + .send(creds) + .then(res => res.body as models.RepoCreds); + } + public delete(url: string): Promise { return requests .delete(`/repocreds/${encodeURIComponent(url)}`) diff --git a/util/db/repository_secrets.go b/util/db/repository_secrets.go index 27ed83d9a7..3939a218e1 100644 --- a/util/db/repository_secrets.go +++ b/util/db/repository_secrets.go @@ -330,21 +330,25 @@ func secretToRepository(secret *corev1.Secret) (*appsv1.Repository, error) { secretCopy := secret.DeepCopy() repository := &appsv1.Repository{ - Name: string(secretCopy.Data["name"]), - Repo: string(secretCopy.Data["url"]), - Username: string(secretCopy.Data["username"]), - Password: string(secretCopy.Data["password"]), - BearerToken: string(secretCopy.Data["bearerToken"]), - SSHPrivateKey: string(secretCopy.Data["sshPrivateKey"]), - TLSClientCertData: string(secretCopy.Data["tlsClientCertData"]), - TLSClientCertKey: string(secretCopy.Data["tlsClientCertKey"]), - Type: string(secretCopy.Data["type"]), - GithubAppPrivateKey: string(secretCopy.Data["githubAppPrivateKey"]), - GitHubAppEnterpriseBaseURL: string(secretCopy.Data["githubAppEnterpriseBaseUrl"]), - Proxy: string(secretCopy.Data["proxy"]), - NoProxy: string(secretCopy.Data["noProxy"]), - Project: string(secretCopy.Data["project"]), - GCPServiceAccountKey: string(secretCopy.Data["gcpServiceAccountKey"]), + Name: string(secretCopy.Data["name"]), + Repo: string(secretCopy.Data["url"]), + Username: string(secretCopy.Data["username"]), + Password: string(secretCopy.Data["password"]), + BearerToken: string(secretCopy.Data["bearerToken"]), + SSHPrivateKey: string(secretCopy.Data["sshPrivateKey"]), + TLSClientCertData: string(secretCopy.Data["tlsClientCertData"]), + TLSClientCertKey: string(secretCopy.Data["tlsClientCertKey"]), + Type: string(secretCopy.Data["type"]), + GithubAppPrivateKey: string(secretCopy.Data["githubAppPrivateKey"]), + GitHubAppEnterpriseBaseURL: string(secretCopy.Data["githubAppEnterpriseBaseUrl"]), + Proxy: string(secretCopy.Data["proxy"]), + NoProxy: string(secretCopy.Data["noProxy"]), + Project: string(secretCopy.Data["project"]), + GCPServiceAccountKey: string(secretCopy.Data["gcpServiceAccountKey"]), + AzureServicePrincipalClientId: string(secretCopy.Data["azureServicePrincipalClientId"]), + AzureServicePrincipalClientSecret: string(secretCopy.Data["azureServicePrincipalClientSecret"]), + AzureServicePrincipalTenantId: string(secretCopy.Data["azureServicePrincipalTenantId"]), + AzureActiveDirectoryEndpoint: string(secretCopy.Data["azureActiveDirectoryEndpoint"]), } insecureIgnoreHostKey, err := boolOrFalse(secretCopy, "insecureIgnoreHostKey") @@ -451,6 +455,10 @@ func (s *secretsRepositoryBackend) repositoryToSecret(repository *appsv1.Reposit updateSecretBool(secretCopy, "useAzureWorkloadIdentity", repository.UseAzureWorkloadIdentity) updateSecretInt(secretCopy, "depth", repository.Depth) updateSecretBool(secretCopy, "webhookManifestCacheWarmDisabled", repository.WebhookManifestCacheWarmDisabled) + updateSecretString(secretCopy, "azureServicePrincipalClientId", repository.AzureServicePrincipalClientId) + updateSecretString(secretCopy, "azureServicePrincipalClientSecret", repository.AzureServicePrincipalClientSecret) + updateSecretString(secretCopy, "azureServicePrincipalTenantId", repository.AzureServicePrincipalTenantId) + updateSecretString(secretCopy, "azureActiveDirectoryEndpoint", repository.AzureActiveDirectoryEndpoint) addSecretMetadata(secretCopy, s.getSecretType()) return secretCopy @@ -460,19 +468,23 @@ func (s *secretsRepositoryBackend) secretToRepoCred(secret *corev1.Secret) (*app secretCopy := secret.DeepCopy() repository := &appsv1.RepoCreds{ - URL: string(secretCopy.Data["url"]), - Username: string(secretCopy.Data["username"]), - Password: string(secretCopy.Data["password"]), - BearerToken: string(secretCopy.Data["bearerToken"]), - SSHPrivateKey: string(secretCopy.Data["sshPrivateKey"]), - TLSClientCertData: string(secretCopy.Data["tlsClientCertData"]), - TLSClientCertKey: string(secretCopy.Data["tlsClientCertKey"]), - Type: string(secretCopy.Data["type"]), - GithubAppPrivateKey: string(secretCopy.Data["githubAppPrivateKey"]), - GitHubAppEnterpriseBaseURL: string(secretCopy.Data["githubAppEnterpriseBaseUrl"]), - GCPServiceAccountKey: string(secretCopy.Data["gcpServiceAccountKey"]), - Proxy: string(secretCopy.Data["proxy"]), - NoProxy: string(secretCopy.Data["noProxy"]), + URL: string(secretCopy.Data["url"]), + Username: string(secretCopy.Data["username"]), + Password: string(secretCopy.Data["password"]), + BearerToken: string(secretCopy.Data["bearerToken"]), + SSHPrivateKey: string(secretCopy.Data["sshPrivateKey"]), + TLSClientCertData: string(secretCopy.Data["tlsClientCertData"]), + TLSClientCertKey: string(secretCopy.Data["tlsClientCertKey"]), + Type: string(secretCopy.Data["type"]), + GithubAppPrivateKey: string(secretCopy.Data["githubAppPrivateKey"]), + GitHubAppEnterpriseBaseURL: string(secretCopy.Data["githubAppEnterpriseBaseUrl"]), + GCPServiceAccountKey: string(secretCopy.Data["gcpServiceAccountKey"]), + Proxy: string(secretCopy.Data["proxy"]), + NoProxy: string(secretCopy.Data["noProxy"]), + AzureServicePrincipalClientId: string(secretCopy.Data["azureServicePrincipalClientID"]), + AzureServicePrincipalClientSecret: string(secretCopy.Data["azureServicePrincipalClientSecret"]), + AzureServicePrincipalTenantId: string(secretCopy.Data["azureServicePrincipalTenantID"]), + AzureActiveDirectoryEndpoint: string(secretCopy.Data["azureActiveDirectoryEndpoint"]), } enableOCI, err := boolOrFalse(secretCopy, "enableOCI") @@ -540,6 +552,10 @@ func (s *secretsRepositoryBackend) repoCredsToSecret(repoCreds *appsv1.RepoCreds updateSecretString(secretCopy, "noProxy", repoCreds.NoProxy) updateSecretBool(secretCopy, "forceHttpBasicAuth", repoCreds.ForceHttpBasicAuth) updateSecretBool(secretCopy, "useAzureWorkloadIdentity", repoCreds.UseAzureWorkloadIdentity) + updateSecretString(secretCopy, "azureServicePrincipalClientID", repoCreds.AzureServicePrincipalClientId) + updateSecretString(secretCopy, "azureServicePrincipalClientSecret", repoCreds.AzureServicePrincipalClientSecret) + updateSecretString(secretCopy, "azureServicePrincipalTenantID", repoCreds.AzureServicePrincipalTenantId) + updateSecretString(secretCopy, "azureActiveDirectoryEndpoint", repoCreds.AzureActiveDirectoryEndpoint) addSecretMetadata(secretCopy, s.getRepoCredSecretType()) return secretCopy diff --git a/util/git/client.go b/util/git/client.go index 7a3f34c495..11f555482f 100644 --- a/util/git/client.go +++ b/util/git/client.go @@ -412,6 +412,13 @@ func newAuth(repoURL string, creds Creds) (transport.AuthMethod, error) { return nil, fmt.Errorf("failed to get access token from creds: %w", err) } + auth := githttp.TokenAuth{Token: token} + return &auth, nil + case AzureServicePrincipalCreds: + token, err := creds.getAccessToken() + if err != nil { + return nil, fmt.Errorf("failed to get access token from creds: %w", err) + } auth := githttp.TokenAuth{Token: token} return &auth, nil } diff --git a/util/git/creds.go b/util/git/creds.go index 239916234d..162c06e6a6 100644 --- a/util/git/creds.go +++ b/util/git/creds.go @@ -18,6 +18,10 @@ import ( "sync" "time" + "github.com/Azure/azure-sdk-for-go/sdk/azcore" + "github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud" + "github.com/Azure/azure-sdk-for-go/sdk/azcore/policy" + "github.com/Azure/azure-sdk-for-go/sdk/azidentity" giturls "github.com/chainguard-dev/git-urls" "github.com/google/go-github/v69/github" @@ -50,6 +54,8 @@ var ( // installationIdCache caches installation IDs for organizations to avoid redundant API calls. githubInstallationIdCache *gocache.Cache githubInstallationIdCacheMutex sync.RWMutex // For bulk API call coordination + // In memory cache for storing Azure Service Principal tokens + azureServicePrincipalTokenCache *gocache.Cache ) const ( @@ -64,16 +70,30 @@ const ( func init() { githubAppCredsExp := common.GithubAppCredsExpirationDuration if exp := os.Getenv(common.EnvGithubAppCredsExpirationDuration); exp != "" { - if qps, err := strconv.Atoi(exp); err != nil { + if qps, err := strconv.Atoi(exp); err == nil { githubAppCredsExp = time.Duration(qps) * time.Minute } } + azureServicePrincipalCredsExp := common.AzureServicePrincipalCredsExpirationDuration + if exp := os.Getenv(common.EnvAzureServicePrincipalCredsExpirationDuration); exp != "" { + if qps, err := strconv.Atoi(exp); err == nil { + // Azure service principal tokens are valid for 60 minutes + // the cache has a cleanup interval of 1 minute + // cap the expiration duration to 59 minutes to avoid issues with token expiration + if qps > 59 { + log.Warnf("Value in %s is %d, which is greater than maximum 59 minutes allowed. Setting to 59 minutes", common.EnvAzureServicePrincipalCredsExpirationDuration, qps) + qps = 59 + } + azureServicePrincipalCredsExp = time.Duration(qps) * time.Minute + } + } githubAppTokenCache = gocache.New(githubAppCredsExp, 1*time.Minute) // oauth2.TokenSource handles fetching new Tokens once they are expired. The oauth2.TokenSource itself does not expire. googleCloudTokenSource = gocache.New(gocache.NoExpiration, 0) azureTokenCache = gocache.New(gocache.NoExpiration, 0) githubInstallationIdCache = gocache.New(60*time.Minute, 60*time.Minute) + azureServicePrincipalTokenCache = gocache.New(azureServicePrincipalCredsExp, 1*time.Minute) } type NoopCredsStore struct{} @@ -974,3 +994,133 @@ func (creds AzureWorkloadIdentityCreds) GetAzureDevOpsAccessToken() (string, err accessToken, err := creds.getAccessToken(azureDevopsEntraResourceId) // wellknown resourceid of Azure DevOps return accessToken, err } + +var _ Creds = AzureServicePrincipalCreds{} + +// AzureServicePrincipalCreds to authenticate to Azure DevOps using a Service Principal +type AzureServicePrincipalCreds struct { + tenantID string + clientID string + clientSecret string + activeDirectoryEndpoint string + clientCertData string + clientCertKey string + proxy string + noProxy string + store CredsStore +} + +// NewAzureServicePrincipalCreds creates new Azure Service Principal credentials +func NewAzureServicePrincipalCreds(tenantID string, clientID string, clientSecret string, store CredsStore) AzureServicePrincipalCreds { + return AzureServicePrincipalCreds{tenantID: tenantID, clientID: clientID, clientSecret: clientSecret, store: store} +} + +// WithActiveDirectoryEndpoint sets a custom Active Directory endpoint. When not set, the default Azure public cloud is used. +func (a AzureServicePrincipalCreds) WithActiveDirectoryEndpoint(activeDirectoryEndpoint string) AzureServicePrincipalCreds { + if activeDirectoryEndpoint != "" { + a.activeDirectoryEndpoint = activeDirectoryEndpoint + } + return a +} + +// WithClientCert sets the client certificate data and key +func (a AzureServicePrincipalCreds) WithClientCert(data string, key string) AzureServicePrincipalCreds { + if data != "" && key != "" { + a.clientCertData = data + a.clientCertKey = key + } + return a +} + +// WithProxy sets the HTTP/HTTPS proxy used to access the repo +func (a AzureServicePrincipalCreds) WithProxy(proxy string) AzureServicePrincipalCreds { + if proxy != "" { + a.proxy = proxy + } + return a +} + +// WithNoProxy sets a comma separated list of IPs/hostnames that should not use the proxy +func (a AzureServicePrincipalCreds) WithNoProxy(noProxy string) AzureServicePrincipalCreds { + if noProxy != "" { + a.noProxy = noProxy + } + return a +} + +// GetUserInfo doesn't return any user info as they are not present for Azure Service Principals. +func (a AzureServicePrincipalCreds) GetUserInfo(_ context.Context) (string, string, error) { + return workloadidentity.EmptyGuid, "", nil +} + +func (a AzureServicePrincipalCreds) Environ() (io.Closer, []string, error) { + token, err := a.getAccessToken() + if err != nil { + return NopCloser{}, nil, err + } + nonce := a.store.Add("", token) + env := a.store.Environ(nonce) + env = append(env, fmt.Sprintf("%s=Authorization: Bearer %s", bearerAuthHeaderEnv, token)) + + return utilio.NewCloser(func() error { + a.store.Remove(nonce) + return nil + }), env, nil +} + +func (a AzureServicePrincipalCreds) getAccessToken() (string, error) { + // Override the default active directory endpoint if present + activeDirectoryEndpoint := "https://login.microsoftonline.com" + disableInstanceDiscovery := false + if a.activeDirectoryEndpoint != "" { + activeDirectoryEndpoint = a.activeDirectoryEndpoint + disableInstanceDiscovery = true + } + + // Generate cache key for creds + key, err := argoutils.GenerateCacheKey("%s %s %s %s", a.tenantID, a.clientID, a.clientSecret, activeDirectoryEndpoint) + if err != nil { + return "", fmt.Errorf("failed to get get SHA256 hash for Azure Service Principal credentials: %w", err) + } + + t, found := azureServicePrincipalTokenCache.Get(key) + if found { + return t.(string), nil + } + + ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second) + defer cancel() + + opts := azcore.ClientOptions{} + opts.Cloud = cloud.Configuration{ + ActiveDirectoryAuthorityHost: activeDirectoryEndpoint, + } + // Configure HTTP client with proxy if proxy is set + if a.proxy != "" { + opts.Transport = GetRepoHTTPClient(activeDirectoryEndpoint, false, a, a.proxy, a.noProxy) + } + cred, err := azidentity.NewClientSecretCredential(a.tenantID, a.clientID, a.clientSecret, &azidentity.ClientSecretCredentialOptions{ClientOptions: opts, DisableInstanceDiscovery: disableInstanceDiscovery}) + if err != nil { + return "", fmt.Errorf("failed to create Azure client secret credential: %w", err) + } + token, err := cred.GetToken(ctx, policy.TokenRequestOptions{ + Scopes: []string{azureDevopsEntraResourceId}, + }) + if err != nil { + return "", fmt.Errorf("failed to get Azure access token: %w", err) + } + azureServicePrincipalTokenCache.Set(key, token.Token, 0) + return token.Token, nil +} + +func (a AzureServicePrincipalCreds) HasClientCert() bool { + return a.clientCertData != "" && a.clientCertKey != "" +} + +func (a AzureServicePrincipalCreds) GetClientCertData() string { + return a.clientCertData +} + +func (a AzureServicePrincipalCreds) GetClientCertKey() string { + return a.clientCertKey +} diff --git a/util/settings/settings.go b/util/settings/settings.go index 428c3b8aba..7894404362 100644 --- a/util/settings/settings.go +++ b/util/settings/settings.go @@ -326,6 +326,14 @@ type Repository struct { ForceHttpBasicAuth bool `json:"forceHttpBasicAuth,omitempty"` //nolint:revive //FIXME(var-naming) // UseAzureWorkloadIdentity specifies whether to use Azure Workload Identity for authentication UseAzureWorkloadIdentity bool `json:"useAzureWorkloadIdentity,omitempty"` + // AzureActiveDirectoryEndpoint specifies the Azure Active Directory endpoint used for Service Principal authentication. If empty will default to https://login.microsoftonline.com + AzureActiveDirectoryEndpoint string `json:"azureActiveDirectoryEndpoint,omitempty"` + // AzureServicePrincipalClientId specifies the client ID of the Azure Service Principal used to access the repo + AzureServicePrincipalClientId string `json:"azureServicePrincipalClientId,omitempty"` + // AzureServicePrincipalClientSecret specifies the client secret of the Azure Service Principal used to access the repo + AzureServicePrincipalClientSecret string `json:"azureServicePrincipalClientSecret,omitempty"` + // AzureServicePrincipalTenantId specifies the tenant ID of the Azure Service Principal used to access the repo + AzureServicePrincipalTenantId string `json:"azureServicePrincipalTenantId,omitempty"` } // Credential template for accessing repositories @@ -360,6 +368,14 @@ type RepositoryCredentials struct { ForceHttpBasicAuth bool `json:"forceHttpBasicAuth,omitempty"` //nolint:revive //FIXME(var-naming) // UseAzureWorkloadIdentity specifies whether to use Azure Workload Identity for authentication UseAzureWorkloadIdentity bool `json:"useAzureWorkloadIdentity,omitempty"` + // AzureActiveDirectoryEndpoint specifies the Azure Active Directory endpoint used for Service Principal authentication. If empty will default to https://login.microsoftonline.com + AzureActiveDirectoryEndpoint string `json:"azureActiveDirectoryEndpoint,omitempty"` + // AzureServicePrincipalClientId specifies the client ID of the Azure Service Principal used to access the repo + AzureServicePrincipalClientId string `json:"azureServicePrincipalClientId,omitempty"` + // AzureServicePrincipalClientSecret specifies the client secret of the Azure Service Principal used to access the repo + AzureServicePrincipalClientSecret string `json:"azureServicePrincipalClientSecret,omitempty"` + // AzureServicePrincipalTenantId specifies the tenant ID of the Azure Service Principal used to access the repo + AzureServicePrincipalTenantId string `json:"azureServicePrincipalTenantId,omitempty"` } // DeepLink structure