From 57daeced9d303188f29ff928d798cd4f39d9cdf1 Mon Sep 17 00:00:00 2001 From: Trent Clarke Date: Wed, 30 Oct 2024 20:42:21 +1100 Subject: [PATCH 01/27] Expose Provisioning States via Cache interface (#48115) --- lib/auth/authclient/api.go | 4 ++++ lib/cache/cache.go | 14 ++++++++++++++ lib/services/provisioningstates.go | 10 +++++++--- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/lib/auth/authclient/api.go b/lib/auth/authclient/api.go index efc4eab13b54d..2d4ebe3204e6a 100644 --- a/lib/auth/authclient/api.go +++ b/lib/auth/authclient/api.go @@ -34,6 +34,7 @@ import ( integrationpb "github.com/gravitational/teleport/api/gen/proto/go/teleport/integration/v1" kubewaitingcontainerpb "github.com/gravitational/teleport/api/gen/proto/go/teleport/kubewaitingcontainer/v1" machineidv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/machineid/v1" + provisioningv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/provisioning/v1" userprovisioningpb "github.com/gravitational/teleport/api/gen/proto/go/teleport/userprovisioning/v2" userspb "github.com/gravitational/teleport/api/gen/proto/go/teleport/users/v1" usertasksv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/usertasks/v1" @@ -1231,6 +1232,9 @@ type Cache interface { ListStaticHostUsers(ctx context.Context, pageSize int, startKey string) ([]*userprovisioningpb.StaticHostUser, string, error) // GetStaticHostUser returns a static host user by name. GetStaticHostUser(ctx context.Context, name string) (*userprovisioningpb.StaticHostUser, error) + + // GetProvisioningState gets a specific provisioning state + GetProvisioningState(context.Context, services.DownstreamID, services.ProvisioningStateID) (*provisioningv1.PrincipalState, error) } type NodeWrapper struct { diff --git a/lib/cache/cache.go b/lib/cache/cache.go index e9273cfb0e8a8..2c3013e9b0d37 100644 --- a/lib/cache/cache.go +++ b/lib/cache/cache.go @@ -44,6 +44,7 @@ import ( dbobjectv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/dbobject/v1" kubewaitingcontainerpb "github.com/gravitational/teleport/api/gen/proto/go/teleport/kubewaitingcontainer/v1" notificationsv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/notifications/v1" + provisioningv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/provisioning/v1" userprovisioningpb "github.com/gravitational/teleport/api/gen/proto/go/teleport/userprovisioning/v2" userspb "github.com/gravitational/teleport/api/gen/proto/go/teleport/users/v1" usertasksv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/usertasks/v1" @@ -3544,3 +3545,16 @@ func (c *Cache) GetAccessGraphSettings(ctx context.Context) (*clusterconfigpb.Ac } return rg.reader.GetAccessGraphSettings(ctx) } + +func (c *Cache) GetProvisioningState(ctx context.Context, downstream services.DownstreamID, id services.ProvisioningStateID) (*provisioningv1.PrincipalState, error) { + ctx, span := c.Tracer.Start(ctx, "cache/GetProvisioningState") + defer span.End() + + rg, err := readCollectionCache(c, c.collections.provisioningStates) + if err != nil { + return nil, trace.Wrap(err) + } + defer rg.Release() + + return rg.reader.GetProvisioningState(ctx, downstream, id) +} diff --git a/lib/services/provisioningstates.go b/lib/services/provisioningstates.go index e51e4b9b782fc..8d1e1c0de5497 100644 --- a/lib/services/provisioningstates.go +++ b/lib/services/provisioningstates.go @@ -33,12 +33,16 @@ type DownstreamID string // disambiguated by a DownstreamID when queried or updated. type ProvisioningStateID string -// DownstreamProvisioningStates defines an interface for managing principal -// provisioning state records scoped by a target downstream receiver. -type DownstreamProvisioningStates interface { +type DownstreamProvisioningStateGetter interface { // GetProvisioningState fetches a single provisioning state record for a given // downstream and principal, GetProvisioningState(context.Context, DownstreamID, ProvisioningStateID) (*provisioningv1.PrincipalState, error) +} + +// DownstreamProvisioningStates defines an interface for managing principal +// provisioning state records scoped by a target downstream receiver. +type DownstreamProvisioningStates interface { + DownstreamProvisioningStateGetter // ListProvisioningStates lists all provisioning state records for a given // downstream receiver. From 3a33aab52d232aa7f6bc41cc64d700fdb3b4268d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafa=C5=82=20Cie=C5=9Blak?= Date: Wed, 30 Oct 2024 10:54:28 +0100 Subject: [PATCH 02/27] Align label sorting in Connect with what Web UI does (#48086) * Move TransformCommandLabels from lib/web/ui to lib/ui * Prepare labels in lib/teleterm same way as in lib/web --- lib/teleterm/apiserver/handler/handler.go | 23 +++++------ .../apiserver/handler/handler_apps.go | 20 ++------- .../apiserver/handler/handler_databases.go | 12 +----- .../apiserver/handler/handler_kubes.go | 31 +++----------- .../apiserver/handler/handler_servers.go | 21 ++-------- lib/ui/labels.go | 10 +++++ lib/ui/labels_test.go | 16 ++++++++ lib/web/ui/labels.go | 33 --------------- lib/web/ui/labels_test.go | 41 ------------------- lib/web/ui/server.go | 6 +-- 10 files changed, 54 insertions(+), 159 deletions(-) delete mode 100644 lib/web/ui/labels.go delete mode 100644 lib/web/ui/labels_test.go diff --git a/lib/teleterm/apiserver/handler/handler.go b/lib/teleterm/apiserver/handler/handler.go index c6a2efdc16043..8225992d78ba9 100644 --- a/lib/teleterm/apiserver/handler/handler.go +++ b/lib/teleterm/apiserver/handler/handler.go @@ -23,6 +23,7 @@ import ( api "github.com/gravitational/teleport/gen/proto/go/teleport/lib/teleterm/v1" "github.com/gravitational/teleport/lib/teleterm/daemon" + "github.com/gravitational/teleport/lib/ui" ) // New creates an instance of Handler @@ -59,17 +60,13 @@ type Handler struct { Config } -// sortedLabels is a sort wrapper that sorts labels by name -type APILabels []*api.Label - -func (s APILabels) Len() int { - return len(s) -} - -func (s APILabels) Less(i, j int) bool { - return s[i].Name < s[j].Name -} - -func (s APILabels) Swap(i, j int) { - s[i], s[j] = s[j], s[i] +func makeAPILabels(uiLabels []ui.Label) []*api.Label { + apiLabels := make([]*api.Label, 0, len(uiLabels)) + for _, uiLabel := range uiLabels { + apiLabels = append(apiLabels, &api.Label{ + Name: uiLabel.Name, + Value: uiLabel.Value, + }) + } + return apiLabels } diff --git a/lib/teleterm/apiserver/handler/handler_apps.go b/lib/teleterm/apiserver/handler/handler_apps.go index c8eb7ca0e4263..80645291c041a 100644 --- a/lib/teleterm/apiserver/handler/handler_apps.go +++ b/lib/teleterm/apiserver/handler/handler_apps.go @@ -18,13 +18,13 @@ package handler import ( "context" - "sort" "github.com/gravitational/trace" "github.com/gravitational/teleport/api/types" api "github.com/gravitational/teleport/gen/proto/go/teleport/lib/teleterm/v1" "github.com/gravitational/teleport/lib/teleterm/clusters" + "github.com/gravitational/teleport/lib/ui" ) // GetApps gets apps with filters and returns paginated results @@ -77,14 +77,7 @@ func newAPIApp(clusterApp clusters.App) *api.App { }) } - apiLabels := APILabels{} - for name, value := range app.GetAllLabels() { - apiLabels = append(apiLabels, &api.Label{ - Name: name, - Value: value, - }) - } - sort.Sort(apiLabels) + apiLabels := makeAPILabels(ui.MakeLabelsWithoutInternalPrefixes(app.GetAllLabels())) return &api.App{ Uri: clusterApp.URI.String(), @@ -103,14 +96,7 @@ func newAPIApp(clusterApp clusters.App) *api.App { func newSAMLIdPServiceProviderAPIApp(clusterApp clusters.SAMLIdPServiceProvider) *api.App { provider := clusterApp.Provider - apiLabels := APILabels{} - for name, value := range provider.GetAllLabels() { - apiLabels = append(apiLabels, &api.Label{ - Name: name, - Value: value, - }) - } - sort.Sort(apiLabels) + apiLabels := makeAPILabels(ui.MakeLabelsWithoutInternalPrefixes(provider.GetAllLabels())) // Keep in sync with lib/web/ui/app.go. return &api.App{ diff --git a/lib/teleterm/apiserver/handler/handler_databases.go b/lib/teleterm/apiserver/handler/handler_databases.go index 681181b17395b..1fb22011d44c2 100644 --- a/lib/teleterm/apiserver/handler/handler_databases.go +++ b/lib/teleterm/apiserver/handler/handler_databases.go @@ -20,12 +20,12 @@ package handler import ( "context" - "sort" "github.com/gravitational/trace" api "github.com/gravitational/teleport/gen/proto/go/teleport/lib/teleterm/v1" "github.com/gravitational/teleport/lib/teleterm/clusters" + "github.com/gravitational/teleport/lib/ui" ) // GetDatabases gets databases with filters and returns paginated results @@ -84,15 +84,7 @@ func (s *Handler) ListDatabaseUsers(ctx context.Context, req *api.ListDatabaseUs } func newAPIDatabase(db clusters.Database) *api.Database { - apiLabels := APILabels{} - for name, value := range db.GetAllLabels() { - apiLabels = append(apiLabels, &api.Label{ - Name: name, - Value: value, - }) - } - - sort.Sort(apiLabels) + apiLabels := makeAPILabels(ui.MakeLabelsWithoutInternalPrefixes(db.GetAllLabels())) return &api.Database{ Uri: db.URI.String(), diff --git a/lib/teleterm/apiserver/handler/handler_kubes.go b/lib/teleterm/apiserver/handler/handler_kubes.go index 6642d49e19b71..0a2f3389cfcbf 100644 --- a/lib/teleterm/apiserver/handler/handler_kubes.go +++ b/lib/teleterm/apiserver/handler/handler_kubes.go @@ -20,7 +20,6 @@ package handler import ( "context" - "sort" "github.com/gravitational/trace" @@ -74,22 +73,11 @@ func (s *Handler) ListKubernetesResources(ctx context.Context, req *api.ListKube } func newAPIKube(kube clusters.Kube) *api.Kube { - apiLabels := APILabels{} - for name, value := range kube.KubernetesCluster.GetStaticLabels() { - apiLabels = append(apiLabels, &api.Label{ - Name: name, - Value: value, - }) - } - - for name, cmd := range kube.KubernetesCluster.GetDynamicLabels() { - apiLabels = append(apiLabels, &api.Label{ - Name: name, - Value: cmd.GetResult(), - }) - } - - sort.Sort(apiLabels) + staticLabels := kube.KubernetesCluster.GetStaticLabels() + dynamicLabels := kube.KubernetesCluster.GetDynamicLabels() + apiLabels := makeAPILabels( + ui.MakeLabelsWithoutInternalPrefixes(staticLabels, ui.TransformCommandLabels(dynamicLabels)), + ) return &api.Kube{ Name: kube.KubernetesCluster.GetName(), @@ -99,14 +87,7 @@ func newAPIKube(kube clusters.Kube) *api.Kube { } func newApiKubeResource(resource *types.KubernetesResourceV1, kubeCluster string, resourceURI uri.ResourceURI) *api.KubeResource { - uiLabels := ui.MakeLabelsWithoutInternalPrefixes(resource.GetStaticLabels()) - apiLabels := APILabels{} - for _, uiLabel := range uiLabels { - apiLabels = append(apiLabels, &api.Label{ - Name: uiLabel.Name, - Value: uiLabel.Value, - }) - } + apiLabels := makeAPILabels(ui.MakeLabelsWithoutInternalPrefixes(resource.GetStaticLabels())) return &api.KubeResource{ Uri: resourceURI.AppendKube(kubeCluster).AppendKubeResourceNamespace(resource.GetName()).String(), diff --git a/lib/teleterm/apiserver/handler/handler_servers.go b/lib/teleterm/apiserver/handler/handler_servers.go index 17230d0e1e529..ac21e9082c31b 100644 --- a/lib/teleterm/apiserver/handler/handler_servers.go +++ b/lib/teleterm/apiserver/handler/handler_servers.go @@ -20,12 +20,12 @@ package handler import ( "context" - "sort" "github.com/gravitational/trace" api "github.com/gravitational/teleport/gen/proto/go/teleport/lib/teleterm/v1" "github.com/gravitational/teleport/lib/teleterm/clusters" + "github.com/gravitational/teleport/lib/ui" ) // GetServers accepts parameterized input to enable searching, sorting, and pagination @@ -47,24 +47,11 @@ func (s *Handler) GetServers(ctx context.Context, req *api.GetServersRequest) (* } func newAPIServer(server clusters.Server) *api.Server { - apiLabels := APILabels{} serverLabels := server.GetStaticLabels() - for name, value := range serverLabels { - apiLabels = append(apiLabels, &api.Label{ - Name: name, - Value: value, - }) - } - serverCmdLabels := server.GetCmdLabels() - for name, cmd := range serverCmdLabels { - apiLabels = append(apiLabels, &api.Label{ - Name: name, - Value: cmd.GetResult(), - }) - } - - sort.Sort(apiLabels) + apiLabels := makeAPILabels( + ui.MakeLabelsWithoutInternalPrefixes(serverLabels, ui.TransformCommandLabels(serverCmdLabels)), + ) return &api.Server{ Uri: server.URI.String(), diff --git a/lib/ui/labels.go b/lib/ui/labels.go index 1da4c91498064..8b123a580705c 100644 --- a/lib/ui/labels.go +++ b/lib/ui/labels.go @@ -87,3 +87,13 @@ func (s sortedLabels) Less(i, j int) bool { func (s sortedLabels) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +func TransformCommandLabels(commandLabels map[string]types.CommandLabel) map[string]string { + labels := make(map[string]string, len(commandLabels)) + + for name, cmd := range commandLabels { + labels[name] = cmd.GetResult() + } + + return labels +} diff --git a/lib/ui/labels_test.go b/lib/ui/labels_test.go index e86704ccce794..02fb7223ae241 100644 --- a/lib/ui/labels_test.go +++ b/lib/ui/labels_test.go @@ -22,6 +22,8 @@ import ( "testing" "github.com/stretchr/testify/require" + + "github.com/gravitational/teleport/api/types" ) func TestMakeLabels(t *testing.T) { @@ -142,3 +144,17 @@ func TestMakeLabels(t *testing.T) { }) } } + +func TestTransformCommandLabels(t *testing.T) { + commandLabels := map[string]types.CommandLabel{ + "label1": &types.CommandLabelV2{ + Result: "value1", + }, + } + labels := TransformCommandLabels(commandLabels) + expected := map[string]string{ + "label1": "value1", + } + + require.Equal(t, expected, labels) +} diff --git a/lib/web/ui/labels.go b/lib/web/ui/labels.go deleted file mode 100644 index bb94474ab0b18..0000000000000 --- a/lib/web/ui/labels.go +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Teleport - * Copyright (C) 2023 Gravitational, Inc. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package ui - -import ( - "github.com/gravitational/teleport/api/types" -) - -func transformCommandLabels(commandLabels map[string]types.CommandLabel) map[string]string { - labels := make(map[string]string, len(commandLabels)) - - for name, cmd := range commandLabels { - labels[name] = cmd.GetResult() - } - - return labels -} diff --git a/lib/web/ui/labels_test.go b/lib/web/ui/labels_test.go deleted file mode 100644 index 296d91f4fd6af..0000000000000 --- a/lib/web/ui/labels_test.go +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Teleport - * Copyright (C) 2023 Gravitational, Inc. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package ui - -import ( - "testing" - - "github.com/stretchr/testify/require" - - "github.com/gravitational/teleport/api/types" -) - -func TestTransformCommandLabels(t *testing.T) { - commandLabels := map[string]types.CommandLabel{ - "label1": &types.CommandLabelV2{ - Result: "value1", - }, - } - labels := transformCommandLabels(commandLabels) - expected := map[string]string{ - "label1": "value1", - } - - require.Equal(t, expected, labels) -} diff --git a/lib/web/ui/server.go b/lib/web/ui/server.go index af1adf66d3190..df68f3bcff277 100644 --- a/lib/web/ui/server.go +++ b/lib/web/ui/server.go @@ -71,7 +71,7 @@ type AWSMetadata struct { func MakeServer(clusterName string, server types.Server, logins []string, requiresRequest bool) Server { serverLabels := server.GetStaticLabels() serverCmdLabels := server.GetCmdLabels() - uiLabels := ui.MakeLabelsWithoutInternalPrefixes(serverLabels, transformCommandLabels(serverCmdLabels)) + uiLabels := ui.MakeLabelsWithoutInternalPrefixes(serverLabels, ui.TransformCommandLabels(serverCmdLabels)) uiServer := Server{ Kind: server.GetKind(), @@ -131,7 +131,7 @@ type KubeCluster struct { func MakeKubeCluster(cluster types.KubeCluster, accessChecker services.AccessChecker, requiresRequest bool) KubeCluster { staticLabels := cluster.GetStaticLabels() dynamicLabels := cluster.GetDynamicLabels() - uiLabels := ui.MakeLabelsWithoutInternalPrefixes(staticLabels, transformCommandLabels(dynamicLabels)) + uiLabels := ui.MakeLabelsWithoutInternalPrefixes(staticLabels, ui.TransformCommandLabels(dynamicLabels)) kubeUsers, kubeGroups := getAllowedKubeUsersAndGroupsForCluster(accessChecker, cluster) return KubeCluster{ Kind: cluster.GetKind(), @@ -166,7 +166,7 @@ func MakeKubeClusters(clusters []types.KubeCluster, accessChecker services.Acces for _, cluster := range clusters { staticLabels := cluster.GetStaticLabels() dynamicLabels := cluster.GetDynamicLabels() - uiLabels := ui.MakeLabelsWithoutInternalPrefixes(staticLabels, transformCommandLabels(dynamicLabels)) + uiLabels := ui.MakeLabelsWithoutInternalPrefixes(staticLabels, ui.TransformCommandLabels(dynamicLabels)) kubeUsers, kubeGroups := getAllowedKubeUsersAndGroupsForCluster(accessChecker, cluster) From caa2aac084e688858c6f7241917d2e05996ca0ae Mon Sep 17 00:00:00 2001 From: Paul Gottschling Date: Wed, 30 Oct 2024 10:11:05 -0400 Subject: [PATCH 03/27] Remove nested tabs from docs pages (#47862) * Remove nested tabs from docs pages Closes #35870 Used the following command to find nested tabs: ``` $ find docs/pages -name "*.mdx" -exec awk ' /0) print FILENAME ":" lines}' {} \; ``` Edit the following guides: - **Connect your Client intro:** Remove branching between Community Edition and Teleport Enterprise. The only difference was the assumption that Community Edition users would only have a GitHub connector available. But if users must ask their administrator for an SSO connector name anyway, we don't need to specify the connector name here. - **GUI clients:** Use separate H4s to describe using a local proxy server and getting remote host information. - **Self-Signed Certs:** Don't use tabs to explain the difference in syntax between using `--set` and a values file in Helm. Instead, use inline prose. - **Locking:** Explain both the CAP and static config file in the "Self-Hosted" tab. - **AWS Helm deployment:** Remove the Community Edition tab in Step 5 and explain how to disable the `enterprise` field using a YAML comment - **Kubernetes AWS auto-discovery:** Collapse `aws-auth` and `eks create-access-entry` instructions into a single passage of text. * Update docs/pages/connect-your-client/introduction.mdx --------- Co-authored-by: marie --- .../access-controls/guides/locking.mdx | 79 ++++++------ .../deploy-a-cluster/helm-deployments/aws.mdx | 116 ++---------------- .../management/admin/self-signed-certs.mdx | 54 ++++---- .../pages/connect-your-client/gui-clients.mdx | 82 +++++-------- .../connect-your-client/introduction.mdx | 53 ++------ .../auto-discovery/kubernetes/aws.mdx | 94 ++++++-------- .../reference/architecture/architecture.mdx | 2 +- 7 files changed, 148 insertions(+), 332 deletions(-) diff --git a/docs/pages/admin-guides/access-controls/guides/locking.mdx b/docs/pages/admin-guides/access-controls/guides/locking.mdx index c71bd5f3e6313..69567f86022f3 100644 --- a/docs/pages/admin-guides/access-controls/guides/locking.mdx +++ b/docs/pages/admin-guides/access-controls/guides/locking.mdx @@ -194,51 +194,27 @@ the last known locks. This decision strategy is encoded as one of the two modes: The cluster-wide mode defaults to `best_effort`. You can set up the default locking mode via API or CLI using a `cluster_auth_preference` resource or static -configuration file: +configuration file. - - - - Create a YAML file called `cap.yaml` or get the existing file using - `tctl get cap`. - - ```yaml - kind: cluster_auth_preference - metadata: - name: cluster-auth-preference - spec: - locking_mode: best_effort - version: v2 - ``` - - Create a resource: - - ```code - $ tctl create -f cap.yaml - # cluster auth preference has been updated - ``` - - - Edit `/etc/teleport.yaml` on the Auth Server: +If your Auth Service configuration (`/etc/teleport.yaml` by default) contains +an `auth_service.authentication` section, edit the Teleport configuration +file to contain the following: - ```yaml - auth_service: - authentication: - locking_mode: best_effort - ``` +```yaml +auth_service: + authentication: + locking_mode: best_effort +``` - Restart the Auth Server for the change to take effect. - - +Restart or redeploy the Auth Service for the change to take effect. - - +If not, edit your cluster authentication preference resource: -The cluster-wide mode defaults to `best_effort`. You can set up the default -locking mode via API or CLI using a `cluster_auth_preference` resource: +```code +$ tctl edit cap +``` -Create a YAML file called `cap.yaml` or get the existing file using -`tctl get cap`. +Adjust the file in your editor to include the following: ```yaml kind: cluster_auth_preference @@ -249,15 +225,32 @@ spec: version: v2 ``` -Create a resource: +Save and close your editor to apply your changes. + + + + +The cluster-wide mode defaults to `best_effort`. You can set up the default +locking mode via API or CLI using a `cluster_auth_preference` resource: ```code -$ tctl create -f cap.yaml -# cluster auth preference has been updated +$ tctl edit cap ``` - +Adjust the file in your editor to include the following: + +```yaml +kind: cluster_auth_preference +metadata: + name: cluster-auth-preference +spec: + locking_mode: best_effort +version: v2 +``` + +Save and close your editor to apply your changes. + It is also possible to configure the locking mode for a particular role: diff --git a/docs/pages/admin-guides/deploy-a-cluster/helm-deployments/aws.mdx b/docs/pages/admin-guides/deploy-a-cluster/helm-deployments/aws.mdx index b3aadada628cd..de375be78b5df 100644 --- a/docs/pages/admin-guides/deploy-a-cluster/helm-deployments/aws.mdx +++ b/docs/pages/admin-guides/deploy-a-cluster/helm-deployments/aws.mdx @@ -290,11 +290,9 @@ Edit your `aws-values.yaml` file (created below) to refer to the name of your se ## Step 5/7. Set values to configure the cluster - - - -Before you can install Teleport in your Kubernetes cluster, you will need to -create a secret that contains your Teleport license information. +If you run Teleport Enterprise, you will need to create a secret that contains +your Teleport license information before you can install Teleport in your +Kubernetes cluster. (!docs/pages/includes//enterprise/obtainlicense.mdx!) @@ -305,105 +303,9 @@ this secret as long as your file is named `license.pem`. $ kubectl -n create secret generic license --from-file=license.pem ``` - - - - Next, configure the `teleport-cluster` Helm chart to use the `aws` mode. Create a file called `aws-values.yaml` and write the values you've chosen above to it: - - - - - -```yaml -chartMode: aws -clusterName: # Name of your cluster. Use the FQDN you intend to configure in DNS below. -proxyListenerMode: multiplex -aws: - region: # AWS region - backendTable: # DynamoDB table to use for the Teleport backend - auditLogTable: # DynamoDB table to use for the Teleport audit log (must be different to the backend table) - auditLogMirrorOnStdout: false # Whether to mirror audit log entries to stdout in JSON format (useful for external log collectors) - sessionRecordingBucket: # S3 bucket to use for Teleport session recordings - backups: true # Whether or not to turn on DynamoDB backups - dynamoAutoScaling: false # Whether Teleport should configure DynamoDB's autoscaling. -highAvailability: - replicaCount: 2 # Number of replicas to configure - certManager: - enabled: true # Enable cert-manager support to get TLS certificates - issuerName: letsencrypt-production # Name of the cert-manager Issuer to use (as configured above) -# If you are running Kubernetes 1.23 or above, disable PodSecurityPolicies -podSecurityPolicy: - enabled: false -``` - -If using an AWS PCA with cert-manager, you will need to -[ensure you set](../../../reference/helm-reference/teleport-cluster.mdx) -`highAvailability.certManager.addCommonName: true` in your values file. You will also need to get the certificate authority -certificate for the CA (`aws acm-pca get-certificate-authority-certificate --certificate-authority-arn `), -upload the full certificate chain to a secret, and -[reference the secret](../../../reference/helm-reference/teleport-cluster.mdx) -with `tls.existingCASecretName` in the values file. - - - -```yaml -chartMode: aws -clusterName: # Name of your cluster. Use the FQDN you intend to configure in DNS below. -proxyListenerMode: multiplex -service: - type: ClusterIP -aws: - region: # AWS region - backendTable: # DynamoDB table to use for the Teleport backend - auditLogTable: # DynamoDB table to use for the Teleport audit log (must be different to the backend table) - auditLogMirrorOnStdout: false # Whether to mirror audit log entries to stdout in JSON format (useful for external log collectors) - sessionRecordingBucket: # S3 bucket to use for Teleport session recordings - backups: true # Whether or not to turn on DynamoDB backups - dynamoAutoScaling: false # Whether Teleport should configure DynamoDB's autoscaling. -highAvailability: - replicaCount: 2 # Number of replicas to configure -ingress: - enabled: true - spec: - ingressClassName: alb -annotations: - ingress: - alb.ingress.kubernetes.io/target-type: ip - alb.ingress.kubernetes.io/backend-protocol: HTTPS - alb.ingress.kubernetes.io/scheme: internet-facing - alb.ingress.kubernetes.io/load-balancer-attributes: idle_timeout.timeout_seconds=350 - alb.ingress.kubernetes.io/healthcheck-protocol: HTTPS - alb.ingress.kubernetes.io/success-codes: 200,301,302 - # Replace with your AWS certificate ARN - alb.ingress.kubernetes.io/certificate-arn: "" -# If you are running Kubernetes 1.23 or above, disable PodSecurityPolicies -podSecurityPolicy: - enabled: false -``` - -To use an internal AWS application load balancer (as opposed to an internet-facing ALB), you should -edit the `alb.ingress.kubernetes.io/scheme` annotation: - - ```yaml - alb.ingress.kubernetes.io/scheme: internal - ``` - -To automatically redirect HTTP requests on port 80 to HTTPS requests on port 443, you -can also optionally provide these two values under `annotations.ingress`: - - ```yaml - alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS": 443}]' - alb.ingress.kubernetes.io/ssl-redirect: '443' - ``` - - - - - - ```yaml @@ -423,7 +325,9 @@ highAvailability: certManager: enabled: true # Enable cert-manager support to get TLS certificates issuerName: letsencrypt-production # Name of the cert-manager Issuer to use (as configured above) -enterprise: true # Indicate that this is a Teleport Enterprise deployment +# Indicate that this is a Teleport Enterprise deployment. Set to false for +# Teleport Community Edition. +enterprise: true # If you are running Kubernetes 1.23 or above, disable PodSecurityPolicies podSecurityPolicy: enabled: false @@ -455,7 +359,9 @@ aws: dynamoAutoScaling: false # Whether Teleport should configure DynamoDB's autoscaling. highAvailability: replicaCount: 2 # Number of replicas to configure -enterprise: true # Indicate that this is a Teleport Enterprise deployment +# Indicate that this is a Teleport Enterprise deployment. Set to false for +# Teleport Community Edition. +enterprise: true ingress: enabled: true spec: @@ -493,10 +399,6 @@ can also optionally provide these two values under `annotations.ingress`: - - - - Install the chart with the values from your `aws-values.yaml` file using this command: ```code diff --git a/docs/pages/admin-guides/management/admin/self-signed-certs.mdx b/docs/pages/admin-guides/management/admin/self-signed-certs.mdx index 2c7d4d89d52e2..0bdf021076e7d 100644 --- a/docs/pages/admin-guides/management/admin/self-signed-certs.mdx +++ b/docs/pages/admin-guides/management/admin/self-signed-certs.mdx @@ -110,37 +110,37 @@ running Teleport: via the `teleport` CLI, using a Helm chart, or via systemd: If you are using the `teleport-cluster` Helm chart, set [extraArgs](../../../reference/helm-reference/teleport-cluster.mdx) - to include the extra argument: `--insecure`: - - - ```yaml - extraArgs: - - "--insecure" - ``` - - - ```code - $ --set "extraArgs={--insecure}" + to include the extra argument: `--insecure`. + + Here is an example of the field within a values file: + + ```yaml + extraArgs: + - "--insecure" + ``` + + When using the `--set` flag, use the following syntax: + + + ```text + --set "extraArgs={--insecure}" ``` - - - If you are using the `teleport-kube-agent` chart, set the [insecureSkipProxyTLSVerify](../../../reference/helm-reference/teleport-kube-agent.mdx) - flag to `true`: - - - ```yaml - insecureSkipProxyTLSVerify: true - ``` - - - ```code - $ --set insecureSkipProxyTLSVerify=true - ``` - - + flag to `true`. + + In a values file, this would appear as follows: + + ```yaml + insecureSkipProxyTLSVerify: true + ``` + + When using the `--set` flag, use the following syntax: + + ```text + --set insecureSkipProxyTLSVerify=true + ``` diff --git a/docs/pages/connect-your-client/gui-clients.mdx b/docs/pages/connect-your-client/gui-clients.mdx index 50917aafcf0a6..30bc8ef8b727e 100644 --- a/docs/pages/connect-your-client/gui-clients.mdx +++ b/docs/pages/connect-your-client/gui-clients.mdx @@ -19,11 +19,32 @@ work with Teleport. ### Get connection information - - +Get information about the host and port where your database is available so you +can configure your GUI client to access the database. + +#### Using a local proxy server + +Use the `tsh proxy db` command to start a local TLS proxy your GUI database +client will be connecting to. This command requires that you use Teleport +Enterprise (Cloud) or, if self-hosting Teleport, have enabled [TLS +routing](../admin-guides/management/operations/tls-routing.mdx) mode. + +Run a command similar to the following:: + +```code +$ tsh proxy db +Started DB proxy on 127.0.0.1:61740 + +Use following credentials to connect to the proxy: + ca_file=/Users/r0mant/.tsh/keys/root.gravitational.io/certs.pem + cert_file=/Users/r0mant/.tsh/keys/root.gravitational.io/alice-db/root/-x509.pem + key_file=/Users/r0mant/.tsh/keys/root.gravitational.io/alice +``` + +Use the displayed local proxy host/port and credentials paths when configuring +your GUI client below. When entering the hostname, use `localhost` rather than +`127.0.0.1`. - - Starting the local database proxy with the `--tunnel` flag will create an authenticated tunnel that you can use to connect to your database instances. You won't need to configure any credentials when connecting to this tunnel. @@ -46,30 +67,11 @@ $ tsh proxy db --db-user=my-database-user --db-name=my-schema --tunnel - -If you're using Teleport in [TLS routing](../admin-guides/management/operations/tls-routing.mdx) -mode where each database protocol is multiplexed on the same web proxy port, use -the following command to start a local TLS proxy your GUI database client will -be connecting to: - -```code -$ tsh proxy db -Started DB proxy on 127.0.0.1:61740 - -Use following credentials to connect to the proxy: - ca_file=/Users/r0mant/.tsh/keys/root.gravitational.io/certs.pem - cert_file=/Users/r0mant/.tsh/keys/root.gravitational.io/alice-db/root/-x509.pem - key_file=/Users/r0mant/.tsh/keys/root.gravitational.io/alice -``` +#### Using a remote host and port -Use the displayed local proxy host/port and credentials paths when configuring -your GUI client below. When entering the hostname, use `localhost` rather than -`127.0.0.1`. - - -If you're not using TLS routing, run the following command to see the database -connection information: +If you are self-hosting Teleport and not using [TLS +routing](../admin-guides/management/operations/tls-routing.mdx), run the +following command to see the database connection information: ```code # View configuration for the database you're logged in to. @@ -94,32 +96,6 @@ Key: /Users/alice/.tsh/keys/teleport.example.com/alice The displayed `CA`, `Cert`, and `Key` files are used to connect through pgAdmin 4, MySQL Workbench, and other graphical database clients that support mutual TLS authentication. - - - - - - -Use the following command to start a local TLS proxy your GUI database client -will be connecting to: - -```code -$ tsh proxy db -Started DB proxy on 127.0.0.1:61740 - -Use following credentials to connect to the proxy: - ca_file=/Users/r0mant/.tsh/keys/root.gravitational.io/certs.pem - cert_file=/Users/r0mant/.tsh/keys/root.gravitational.io/alice-db/root/-x509.pem - key_file=/Users/r0mant/.tsh/keys/root.gravitational.io/alice -``` - -Use the displayed local proxy host/port and credentials paths when configuring -your GUI client below. When entering the hostname, use `localhost` rather than -`127.0.0.1`. - - - - ## MongoDB Compass diff --git a/docs/pages/connect-your-client/introduction.mdx b/docs/pages/connect-your-client/introduction.mdx index 233e5c2fe4e3e..fe2529ffc5bcc 100644 --- a/docs/pages/connect-your-client/introduction.mdx +++ b/docs/pages/connect-your-client/introduction.mdx @@ -15,53 +15,12 @@ Teleport, and includes links to more detailed documentation at the end. [downloading](https://goteleport.com/download/) and installing `tsh`, sign in to your Teleport cluster: - - -```code -$ tsh login --proxy= --user= -Enter password for Teleport user alice: -Tap any security key -> Profile URL: https://teleport.example.com:443 - Logged in as: alice - Cluster: example.com - Roles: access - Logins: ubuntu, ec2-user - Kubernetes: enabled - Valid until: 2022-11-01 22:37:05 -0500 CDT [valid for 12h0m0s] - Extensions: permit-agent-forwarding, permit-port-forwarding, permit-pty, private-key-policy -``` - - - - -```code -$ tsh login --proxy= --auth=github -If browser window does not open automatically, open it by clicking on the link: - http://127.0.0.1:49927/1d80e257-ec61-4ed2-9403-784f8d35b2fe -> Profile URL: https://teleport.example.com:443 - Logged in as: user@example.com - Cluster: example.com - Roles: access - Logins: ubuntu, ec2-user - Kubernetes: enabled - Valid until: 2022-11-01 22:37:05 -0500 CDT [valid for 12h0m0s] - Extensions: permit-agent-forwarding, permit-port-forwarding, permit-pty, private-key-policy -``` - -Depending on how Teleport was configured for your network, you may not need -the additional flags `--auth`. Your administrator should provide the details -required for your particular use case. - - - - +Authenticate to Teleport as a local user with `tsh login` by +assigning to your Teleport username: - - - ```code $ tsh login --proxy= --user= Enter password for Teleport user alice: @@ -77,7 +36,11 @@ Tap any security key ``` - + + +Authenticate to Teleport as a single sign-on (SSO) user by running `tsh login` +and assigning the `auth` flag to the name of your authentication connector, if +implemented by your administrators: ```code $ tsh login --proxy= --auth= @@ -97,8 +60,6 @@ Depending on how Teleport was configured for your network, you may not need the additional flags `--auth`. Your administrator should provide the details required for your particular use case. - - diff --git a/docs/pages/enroll-resources/auto-discovery/kubernetes/aws.mdx b/docs/pages/enroll-resources/auto-discovery/kubernetes/aws.mdx index 92d2f6ac9c52c..1d16e399667ee 100644 --- a/docs/pages/enroll-resources/auto-discovery/kubernetes/aws.mdx +++ b/docs/pages/enroll-resources/auto-discovery/kubernetes/aws.mdx @@ -137,11 +137,26 @@ subjects: ### IAM mapping - - +If you cluster includes the `aws-auth` config map, edit the `configmap/aws-auth` +in the `kube-system` namespace and append the following to `mapRoles`. Replace +`{teleport_aws_iam_role}` with the appropriate IAM role that Teleport Kubernetes +Service will use. This step will link the Teleport IAM role into the Kubernetes +RBAC group `teleport`, allowing Teleport Kubernetes Service to forward requests +into the cluster: + +```yaml +apiVersion: v1 +data: + mapRoles: | + - groups: + - teleport + rolearn: {teleport_aws_iam_role} # e.g. arn:aws:iam::222222222222:role/teleport-role + username: teleport +``` -Create an EKS access entry to link the -to the Kubernetes Group `teleport` we created in the previous step. +Otherwise, create an EKS access entry to link the to the Kubernetes Group +`teleport` we created in the previous step: ```code $ aws eks create-access-entry \ @@ -155,28 +170,6 @@ $ aws eks create-access-entry \ } ``` - - - - -Finally, edit the `configmap/aws-auth` in the `kube-system` namespace and append -the following to `mapRoles`. Replace `{teleport_aws_iam_role}` with the -appropriate IAM role that Teleport Kubernetes Service will use. -This step will link the Teleport IAM role into the Kubernetes RBAC group `teleport`, -allowing Teleport Kubernetes Service to forward requests into the cluster. - -```yaml -apiVersion: v1 -data: - mapRoles: | - - groups: - - teleport - rolearn: {teleport_aws_iam_role} # e.g. arn:aws:iam::222222222222:role/teleport-role - username: teleport -``` - - - At this point, the Teleport IAM role already has the minimum permissions to forward requests to the cluster. @@ -215,13 +208,29 @@ service means granting administrator-level permissions on the Kubernetes cluster To follow least privilege principle we do not recommend using this method in production. +If your cluster contains an `aws-auth` config map, you can use this to associate +the Teleport IAM role with the `system:masters` RBAC group. Edit the +`configmap/aws-auth` in the `kube-system` namespace and append the following to +`mapRoles`: +```yaml +apiVersion: v1 +data: + mapRoles: | + ... + - groups: + - system:masters + rolearn: {teleport_aws_iam_role} # e.g. arn:aws:iam::222222222222:role/teleport-role + username: teleport +``` - - +Replace `{teleport_aws_iam_role}` with the appropriate IAM role that +Teleport Kubernetes Service is using. -Create an EKS access entry and Access Policy to link the -to the cluster wide policy `arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy` (equivalent of `cluster-admin` `ClusterRole`). +Otherwise, create an EKS access entry and Access Policy to link the to the cluster wide +policy `arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy` +(equivalent of `cluster-admin` `ClusterRole`): ```code $ aws eks create-access-entry \ @@ -246,31 +255,6 @@ $ aws eks associate-access-policy \ ``` - - - - -To associate the Teleport IAM role with the `system:masters` RBAC group, -edit the `configmap/aws-auth` in the `kube-system` namespace and append -the following to `mapRoles`. - -```yaml -apiVersion: v1 -data: - mapRoles: | - ... - - groups: - - system:masters - rolearn: {teleport_aws_iam_role} # e.g. arn:aws:iam::222222222222:role/teleport-role - username: teleport -``` - -Please replace `{teleport_aws_iam_role}` with the appropriate IAM role that -Teleport Kubernetes Service is using. - - - - At this point, the Teleport IAM role already has the minimum permissions to forward requests to the cluster. diff --git a/docs/pages/reference/architecture/architecture.mdx b/docs/pages/reference/architecture/architecture.mdx index bab8bbee62285..7400da6f4dfc4 100644 --- a/docs/pages/reference/architecture/architecture.mdx +++ b/docs/pages/reference/architecture/architecture.mdx @@ -93,7 +93,7 @@ about the architecture of Teleport Agent features: Teleport cluster ensures that Agents run the most up-to-date version of the `teleport` binary. - [Automatically discovering Kubernetes - applications](../../reference/architecture//kubernetes-applications-architecture.mdx): + applications](../../reference/architecture/kubernetes-applications-architecture.mdx): The Teleport Discovery Service queries your Kubernetes cluster and registers applications with the Teleport Auth Service. - [Session recordings](session-recording.mdx): Teleport Agents record user From c76b3731805c7fe14f1bf761a4e3bb21d664dbb1 Mon Sep 17 00:00:00 2001 From: Paul Gottschling Date: Wed, 30 Oct 2024 10:11:56 -0400 Subject: [PATCH 04/27] Fix grammar in the Usage/Billing guide (#48093) --- docs/pages/usage-billing.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/usage-billing.mdx b/docs/pages/usage-billing.mdx index 3465c5a84bbc7..266ca04fd9d11 100644 --- a/docs/pages/usage-billing.mdx +++ b/docs/pages/usage-billing.mdx @@ -126,7 +126,7 @@ which starts on the subscription start date and ends on each monthly anniversary thereafter. If you recreate a single resource more than once an hour, this will affect the -hourly average. For example, if were to create then delete 10 servers three +hourly average. For example, if you were to create then delete 10 servers three times in one hour, Teleport would display 10 servers at any given time. However, for the entire hour, Teleport would report 30 protected servers. From 4c83f8dddd7cf529c999ca247ef69c91e79d40d2 Mon Sep 17 00:00:00 2001 From: Paul Gottschling Date: Wed, 30 Oct 2024 10:12:30 -0400 Subject: [PATCH 05/27] Edit the Agent service reference intro (#47497) Closes #47256 Avoid the impression that there is a dedicated Teleport SSH Service reference guide by editing the introduction to the Agent Service Reference section. Service-specific references are not very popular and date from a time when Teleport users would focus on an "Access" product for a specific type of resource. Rather than add an SSH Service reference, point users to the general Teleport configuration reference. The remaining service-specific reference guides are legacy documentation. While there is a case to be made for merging them into more popular documentation pages, that is outside the scope of this change. --- docs/pages/reference/agent-services/agent-services.mdx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/pages/reference/agent-services/agent-services.mdx b/docs/pages/reference/agent-services/agent-services.mdx index 25b82604a4d4b..5e3a911bde225 100644 --- a/docs/pages/reference/agent-services/agent-services.mdx +++ b/docs/pages/reference/agent-services/agent-services.mdx @@ -4,7 +4,9 @@ h1: Agent Service References description: Includes guides to use while using the SSH Service, Database Service, and other Teleport Agent services. --- -Use these reference guides to configure and run the SSH Service, Database -Service, and other Teleport Agent services. +Use these reference guides to configure and run Teleport Agent services. For a +comprehensive list of options you can configure when running the `teleport` +binary, including all options for Agent services, consult the [Teleport +Configuration Reference](../config.mdx). (!toc!) From 489bebd2581bd9d4f0131428462407f8eb72e1a7 Mon Sep 17 00:00:00 2001 From: Erik Tate Date: Wed, 30 Oct 2024 11:05:39 -0400 Subject: [PATCH 06/27] adding an ending step to host user upsert that removes any expirations or password locks for managed teleport users (#47774) --- integration/hostuser_test.go | 88 ++++++++++++++++++++++++++++++++++++ lib/srv/usermgmt.go | 60 ++++++++++++++++++------ lib/srv/usermgmt_linux.go | 7 ++- lib/srv/usermgmt_test.go | 4 ++ lib/utils/host/hostusers.go | 77 +++++++++++++++++++++++++++++++ 5 files changed, 221 insertions(+), 15 deletions(-) diff --git a/integration/hostuser_test.go b/integration/hostuser_test.go index 23f385d045c4d..242908525cdf3 100644 --- a/integration/hostuser_test.go +++ b/integration/hostuser_test.go @@ -513,6 +513,94 @@ func TestRootHostUsers(t *testing.T) { require.NoError(t, err) assert.Equal(t, expectedShell, userShells[namedShellUser]) }) + + t.Run("Test expiration removal", func(t *testing.T) { + expiredUser := "expired-user" + backendExpiredUser := "backend-expired-user" + t.Cleanup(func() { cleanupUsersAndGroups([]string{expiredUser, backendExpiredUser}, []string{"test-group"}) }) + + defaultBackend, err := srv.DefaultHostUsersBackend() + require.NoError(t, err) + + backend := &hostUsersBackendWithExp{HostUsersBackend: defaultBackend} + users := srv.NewHostUsers(context.Background(), presence, "host_uuid", srv.WithHostUsersBackend(backend)) + + // Make sure the backend actually creates expired users + err = backend.CreateUser("backend-expired-user", nil, host.UserOpts{}) + require.NoError(t, err) + + hasExpirations, _, err := host.UserHasExpirations(backendExpiredUser) + require.NoError(t, err) + require.True(t, hasExpirations) + + // Upsert a new user which should have the expirations removed + _, err = users.UpsertUser(expiredUser, services.HostUsersInfo{ + Mode: services.HostUserModeKeep, + }) + require.NoError(t, err) + + hasExpirations, _, err = host.UserHasExpirations(expiredUser) + require.NoError(t, err) + require.False(t, hasExpirations) + + // Expire existing user so we can test that updates also remove expirations + expireUser := func(username string) error { + chageBin, err := exec.LookPath("chage") + require.NoError(t, err) + + cmd := exec.Command(chageBin, "-E", "1", "-I", "1", "-M", "1", username) + return cmd.Run() + } + require.NoError(t, expireUser(expiredUser)) + hasExpirations, _, err = host.UserHasExpirations(expiredUser) + require.NoError(t, err) + require.True(t, hasExpirations) + + // Update user without any changes + _, err = users.UpsertUser(expiredUser, services.HostUsersInfo{ + Mode: services.HostUserModeKeep, + }) + require.NoError(t, err) + + hasExpirations, _, err = host.UserHasExpirations(expiredUser) + require.NoError(t, err) + require.False(t, hasExpirations) + + // Reinstate expirations again + require.NoError(t, expireUser(expiredUser)) + hasExpirations, _, err = host.UserHasExpirations(expiredUser) + require.NoError(t, err) + require.True(t, hasExpirations) + + // Update user with changes + _, err = users.UpsertUser(expiredUser, services.HostUsersInfo{ + Mode: services.HostUserModeKeep, + Groups: []string{"test-group"}, + }) + require.NoError(t, err) + + hasExpirations, _, err = host.UserHasExpirations(expiredUser) + require.NoError(t, err) + require.False(t, hasExpirations) + }) +} + +type hostUsersBackendWithExp struct { + srv.HostUsersBackend +} + +func (u *hostUsersBackendWithExp) CreateUser(name string, groups []string, opts host.UserOpts) error { + if err := u.HostUsersBackend.CreateUser(name, groups, opts); err != nil { + return trace.Wrap(err) + } + + chageBin, err := exec.LookPath("chage") + if err != nil { + return trace.Wrap(err) + } + + cmd := exec.Command(chageBin, "-E", "1", "-I", "1", "-M", "1", name) + return cmd.Run() } func TestRootLoginAsHostUser(t *testing.T) { diff --git a/lib/srv/usermgmt.go b/lib/srv/usermgmt.go index 81cbd81a12ff2..77dec5c37d0fd 100644 --- a/lib/srv/usermgmt.go +++ b/lib/srv/usermgmt.go @@ -42,27 +42,54 @@ import ( "github.com/gravitational/teleport/lib/utils/host" ) -// NewHostUsers initialize a new HostUsers object -func NewHostUsers(ctx context.Context, storage services.PresenceInternal, uuid string) HostUsers { - //nolint:staticcheck // SA4023. False positive on macOS. - backend, err := newHostUsersBackend() - switch { - case trace.IsNotImplemented(err), trace.IsNotFound(err): - slog.DebugContext(ctx, "Skipping host user management", "error", err) - return nil - case err != nil: //nolint:staticcheck // linter fails on non-linux system as only linux implementation returns useful values. - slog.WarnContext(ctx, "Error making new HostUsersBackend", "error", err) - return nil +type HostUsersOpt = func(hostUsers *HostUserManagement) + +// WithHostUsersBackend injects a custom backend to be used within HostUserManagement +func WithHostUsersBackend(backend HostUsersBackend) HostUsersOpt { + return func(hostUsers *HostUserManagement) { + hostUsers.backend = backend } +} + +// DefaultHostUsersBackend returns the default HostUsersBackend for the host operating system +func DefaultHostUsersBackend() (HostUsersBackend, error) { + return newHostUsersBackend() +} + +// NewHostUsers initialize a new HostUsers object +func NewHostUsers(ctx context.Context, storage services.PresenceInternal, uuid string, opts ...HostUsersOpt) HostUsers { + // handle fields that must be specified or aren't configurable cancelCtx, cancelFunc := context.WithCancel(ctx) - return &HostUserManagement{ + hostUsers := &HostUserManagement{ log: slog.With(teleport.ComponentKey, teleport.ComponentHostUsers), - backend: backend, ctx: cancelCtx, cancel: cancelFunc, storage: storage, userGrace: time.Second * 30, } + + // set configurable fields that don't have to be specified + for _, opt := range opts { + opt(hostUsers) + } + + // set default values for required fields that don't have to be specified + if hostUsers.backend == nil { + //nolint:staticcheck // SA4023. False positive on macOS. + backend, err := newHostUsersBackend() + switch { + case trace.IsNotImplemented(err), trace.IsNotFound(err): + slog.DebugContext(ctx, "Skipping host user management", "error", err) + return nil + case err != nil: //nolint:staticcheck // linter fails on non-linux system as only linux implementation returns useful values. + slog.WarnContext(ctx, "Error making new HostUsersBackend", "error", err) + return nil + } + + hostUsers.backend = backend + } + + return hostUsers } func NewHostSudoers(uuid string) HostSudoers { @@ -113,7 +140,10 @@ type HostUsersBackend interface { // CreateHomeDirectory creates the users home directory and copies in /etc/skel CreateHomeDirectory(userHome string, uid, gid string) error // GetDefaultHomeDirectory returns the default home directory path for the given user - GetDefaultHomeDirectory(user string) (string, error) + GetDefaultHomeDirectory(name string) (string, error) + // RemoveExpirations removes any sort of password or account expiration from the user + // that may have been placed by password policies. + RemoveExpirations(name string) error } type userCloser struct { @@ -436,6 +466,7 @@ func (u *HostUserManagement) UpsertUser(name string, ui services.HostUsersInfo) } } + defer u.backend.RemoveExpirations(name) if hostUser == nil { if err := u.createUser(name, ui); err != nil { return nil, trace.Wrap(err) @@ -450,6 +481,7 @@ func (u *HostUserManagement) UpsertUser(name string, ui services.HostUsersInfo) } } + // attempt to remove password expirations from managed users if they've been added return closer, nil } diff --git a/lib/srv/usermgmt_linux.go b/lib/srv/usermgmt_linux.go index 3626a599beb72..c6ba42ba35d8a 100644 --- a/lib/srv/usermgmt_linux.go +++ b/lib/srv/usermgmt_linux.go @@ -51,7 +51,7 @@ type HostSudoersProvisioningBackend struct { // newHostUsersBackend initializes a new OS specific HostUsersBackend func newHostUsersBackend() (HostUsersBackend, error) { var missing []string - for _, requiredBin := range []string{"usermod", "useradd", "getent", "groupadd", "visudo"} { + for _, requiredBin := range []string{"usermod", "useradd", "getent", "groupadd", "visudo", "chage"} { if _, err := exec.LookPath(requiredBin); err != nil { missing = append(missing, requiredBin) } @@ -283,3 +283,8 @@ func (u *HostUsersProvisioningBackend) CreateHomeDirectory(userHome, uidS, gidS return nil } + +func (u *HostUsersProvisioningBackend) RemoveExpirations(username string) error { + _, err := host.RemoveUserExpirations(username) + return trace.Wrap(err) +} diff --git a/lib/srv/usermgmt_test.go b/lib/srv/usermgmt_test.go index fb07adddf6a34..1a1908e0f431d 100644 --- a/lib/srv/usermgmt_test.go +++ b/lib/srv/usermgmt_test.go @@ -184,6 +184,10 @@ func (*testHostUserBackend) CheckSudoers(contents []byte) error { return errors.New("invalid") } +func (*testHostUserBackend) RemoveExpirations(user string) error { + return nil +} + // WriteSudoersFile implements HostUsersBackend func (tm *testHostUserBackend) WriteSudoersFile(user string, entries []byte) error { entry := strings.TrimSpace(string(entries)) diff --git a/lib/utils/host/hostusers.go b/lib/utils/host/hostusers.go index 563d5c8de23f2..3123d1a5d8879 100644 --- a/lib/utils/host/hostusers.go +++ b/lib/utils/host/hostusers.go @@ -19,6 +19,7 @@ package host import ( + "bufio" "bytes" "errors" "os" @@ -195,6 +196,82 @@ func GetAllUsers() ([]string, int, error) { return users, -1, nil } +// UserHasExpirations determines if the given username has an expired password, inactive password, or expired account +// by parsing the output of 'chage -l '. +func UserHasExpirations(username string) (bool bool, exitCode int, err error) { + chageBin, err := exec.LookPath("chage") + if err != nil { + return false, -1, trace.NotFound("cannot find chage binary: %s", err) + } + + stdout := new(bytes.Buffer) + stderr := new(bytes.Buffer) + cmd := exec.Command(chageBin, "-l", username) + cmd.Stdout = stdout + cmd.Stderr = stderr + if err := cmd.Run(); err != nil { + return false, cmd.ProcessState.ExitCode(), trace.WrapWithMessage(err, "running chage: %s", stderr.String()) + } + + scanner := bufio.NewScanner(stdout) + for scanner.Scan() { + line := scanner.Text() + if line == "" { + // ignore empty lines + continue + } + + key, value, validLine := strings.Cut(line, ":") + if !validLine { + return false, -1, trace.Errorf("chage output invalid") + } + + if strings.TrimSpace(value) == "never" { + continue + } + + switch strings.TrimSpace(key) { + case "Password expires", "Password inactive", "Account expires": + return true, 0, nil + } + } + + return false, cmd.ProcessState.ExitCode(), nil +} + +// RemoveUserExpirations uses chage to remove any future or past expirations associated with the given username. It also uses usermod to remove any account locks that may have been placed. +func RemoveUserExpirations(username string) (exitCode int, err error) { + chageBin, err := exec.LookPath("chage") + if err != nil { + return -1, trace.NotFound("cannot find chage binary: %s", err) + } + + usermodBin, err := exec.LookPath("usermod") + if err != nil { + return -1, trace.NotFound("cannot find usermod binary: %s", err) + } + + // remove all expirations from user + // chage -E -1 -I -1 + cmd := exec.Command(chageBin, "-E", "-1", "-I", "-1", "-M", "-1", username) + var errs []error + if err := cmd.Run(); err != nil { + errs = append(errs, trace.Wrap(err, "removing expirations with chage")) + } + + // unlock user password if locked + cmd = exec.Command(usermodBin, "-U", username) + if err := cmd.Run(); err != nil { + errs = append(errs, trace.Wrap(err, "removing lock with usermod")) + } + + if len(errs) > 0 { + return cmd.ProcessState.ExitCode(), trace.NewAggregate(errs...) + } + + return cmd.ProcessState.ExitCode(), nil +} + var ErrInvalidSudoers = errors.New("visudo: invalid sudoers file") // CheckSudoers tests a suders file using `visudo`. The contents From e3e621134e669d2a9ada73d3319c3d7f3c2c3a69 Mon Sep 17 00:00:00 2001 From: Grzegorz Zdunek Date: Wed, 30 Oct 2024 16:14:10 +0100 Subject: [PATCH 07/27] Remove deprecated grpc-js `start()` method calls (#48114) --- web/packages/teleterm/src/services/tshdEvents/index.ts | 2 -- web/packages/teleterm/src/sharedProcess/sharedProcess.ts | 2 -- 2 files changed, 4 deletions(-) diff --git a/web/packages/teleterm/src/services/tshdEvents/index.ts b/web/packages/teleterm/src/services/tshdEvents/index.ts index a8744d9a7c576..f33638c1c709a 100644 --- a/web/packages/teleterm/src/services/tshdEvents/index.ts +++ b/web/packages/teleterm/src/services/tshdEvents/index.ts @@ -85,8 +85,6 @@ async function createServer( return logger.error(error.message); } - server.start(); - const resolvedAddress = requestedAddress.startsWith('tcp:') ? `localhost:${port}` : requestedAddress; diff --git a/web/packages/teleterm/src/sharedProcess/sharedProcess.ts b/web/packages/teleterm/src/sharedProcess/sharedProcess.ts index 1b9be627d8f3e..134c80338de36 100644 --- a/web/packages/teleterm/src/sharedProcess/sharedProcess.ts +++ b/web/packages/teleterm/src/sharedProcess/sharedProcess.ts @@ -89,8 +89,6 @@ async function initializeServer( if (error) { return logger.error(error.message); } - - server.start(); }); } catch (e) { logger.error('Could not start shared server', e); From 83333c4145c9e5e6816759cbcd7643dbb59b6a23 Mon Sep 17 00:00:00 2001 From: Zac Bergquist Date: Wed, 30 Oct 2024 09:21:02 -0600 Subject: [PATCH 08/27] Extend resource access request validation checks (#48079) In #46780 we put a cap on the total number of resources that can be requested in a single request, which helps avoid situations where a large access request can exceed resource size limits and break request listing. This change expands on the validations by also checking that the sum of the lengths of all of the requested IDs stays below a reasonable limit. --- lib/services/access_request.go | 10 ++++++++++ lib/services/access_request_test.go | 13 ++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/lib/services/access_request.go b/lib/services/access_request.go index 4de491ecdcc05..9a62cc22c11f7 100644 --- a/lib/services/access_request.go +++ b/lib/services/access_request.go @@ -46,6 +46,7 @@ import ( const ( maxAccessRequestReasonSize = 4096 maxResourcesPerRequest = 300 + maxResourcesLength = 2048 // A day is sometimes 23 hours, sometimes 25 hours, usually 24 hours. day = 24 * time.Hour @@ -1157,6 +1158,7 @@ func (m *RequestValidator) Validate(ctx context.Context, req types.AccessRequest // deduplicate requested resource IDs var deduplicated []types.ResourceID seen := make(map[string]struct{}) + resourcesLen := 0 for _, resource := range req.GetRequestedResourceIDs() { id := types.ResourceIDToString(resource) if _, isDuplicate := seen[id]; isDuplicate { @@ -1164,9 +1166,17 @@ func (m *RequestValidator) Validate(ctx context.Context, req types.AccessRequest } seen[id] = struct{}{} deduplicated = append(deduplicated, resource) + resourcesLen += len(id) } req.SetRequestedResourceIDs(deduplicated) + // In addition to capping the maximum number of resources in a single request, + // we also need to ensure that the sum of the resource IDs in the request doesn't + // get too big. + if resourcesLen > maxResourcesLength { + return trace.BadParameter("access request exceeds maximum length: try reducing the number of resources in the request") + } + // determine the roles which should be requested for a resource access // request, and write them to the request if err := m.setRolesForResourceRequest(ctx, req); err != nil { diff --git a/lib/services/access_request_test.go b/lib/services/access_request_test.go index e413c8e66f3bf..5c40d17115ee9 100644 --- a/lib/services/access_request_test.go +++ b/lib/services/access_request_test.go @@ -2158,7 +2158,7 @@ func (mcg mockClusterGetter) GetRemoteCluster(ctx context.Context, clusterName s return nil, trace.NotFound("remote cluster %q was not found", clusterName) } -func TestValidateDuplicateRequestedResources(t *testing.T) { +func TestValidateResourceRequestSizeLimits(t *testing.T) { g := &mockGetter{ roles: make(map[string]types.Role), userStates: make(map[string]*userloginstate.UserLoginState), @@ -2220,6 +2220,17 @@ func TestValidateDuplicateRequestedResources(t *testing.T) { require.Len(t, req.GetRequestedResourceIDs(), 2) require.Equal(t, "/someCluster/node/resource1", types.ResourceIDToString(req.GetRequestedResourceIDs()[0])) require.Equal(t, "/someCluster/node/resource2", types.ResourceIDToString(req.GetRequestedResourceIDs()[1])) + + var requestedResourceIDs []types.ResourceID + for i := 0; i < 200; i++ { + requestedResourceIDs = append(requestedResourceIDs, types.ResourceID{ + ClusterName: "someCluster", + Kind: "node", + Name: "resource" + strconv.Itoa(i), + }) + } + req.SetRequestedResourceIDs(requestedResourceIDs) + require.ErrorContains(t, ValidateAccessRequestForUser(context.Background(), clock, g, req, identity, ExpandVars(true)), "access request exceeds maximum length") } func TestValidateAccessRequestClusterNames(t *testing.T) { From ffeb49f73d74fa02f6f6741ecc45e6893c7f31a7 Mon Sep 17 00:00:00 2001 From: Zac Bergquist Date: Wed, 30 Oct 2024 09:23:26 -0600 Subject: [PATCH 09/27] Update wasm-pack to 0.13.1 (#44218) --- build.assets/versions.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.assets/versions.mk b/build.assets/versions.mk index 08af10d8855a0..e33a06dcffe9d 100644 --- a/build.assets/versions.mk +++ b/build.assets/versions.mk @@ -10,7 +10,7 @@ NODE_VERSION ?= 20.18.0 # Run lint-rust check locally before merging code after you bump this. RUST_VERSION ?= 1.81.0 -WASM_PACK_VERSION ?= 0.12.1 +WASM_PACK_VERSION ?= 0.13.1 LIBBPF_VERSION ?= 1.2.2 LIBPCSCLITE_VERSION ?= 1.9.9-teleport From af117a3b7efeb0dcd7df9344c56d81892ab6f2b4 Mon Sep 17 00:00:00 2001 From: Grzegorz Zdunek Date: Wed, 30 Oct 2024 16:49:09 +0100 Subject: [PATCH 10/27] Prevent expanding/collapsing a notification when clicking the action button (#48074) * Prevent expanding/collapsing a notification when clicking the action button * Add a test --- web/packages/design/src/Alert/Alert.tsx | 2 +- .../Notification/Notification.test.tsx | 49 +++++++++++++++++++ .../components/Notification/Notification.tsx | 17 ++++++- 3 files changed, 65 insertions(+), 3 deletions(-) create mode 100644 web/packages/shared/components/Notification/Notification.test.tsx diff --git a/web/packages/design/src/Alert/Alert.tsx b/web/packages/design/src/Alert/Alert.tsx index c674aff2b1b79..68c5487b7788e 100644 --- a/web/packages/design/src/Alert/Alert.tsx +++ b/web/packages/design/src/Alert/Alert.tsx @@ -134,7 +134,7 @@ interface Props { export interface Action { content: React.ReactNode; href?: string; - onClick?: () => void; + onClick?: (event: React.MouseEvent) => void; } export interface AlertProps diff --git a/web/packages/shared/components/Notification/Notification.test.tsx b/web/packages/shared/components/Notification/Notification.test.tsx new file mode 100644 index 0000000000000..f5c8ee823d6b2 --- /dev/null +++ b/web/packages/shared/components/Notification/Notification.test.tsx @@ -0,0 +1,49 @@ +/** + * Teleport + * Copyright (C) 2024 Gravitational, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +import { render } from 'design/utils/testing'; +import { fireEvent, screen } from '@testing-library/react'; + +import { Notification } from './Notification'; + +test('click on action button does not expand or collapse notification', async () => { + const description = 'An error happened'; + + render( + {}} + /> + ); + + fireEvent.click(screen.getByText('Retry')); + + // Check if the text still has the initial, "collapsed" style (look at shortTextCss). + expect(screen.getByText(description)).toHaveStyleRule( + '-webkit-line-clamp', + '3' + ); +}); diff --git a/web/packages/shared/components/Notification/Notification.tsx b/web/packages/shared/components/Notification/Notification.tsx index 56c374302a170..27347693f2052 100644 --- a/web/packages/shared/components/Notification/Notification.tsx +++ b/web/packages/shared/components/Notification/Notification.tsx @@ -227,6 +227,8 @@ const NotificationBody = ({ const longerTextCss = isExpanded ? textCss : shortTextCss; const hasListOrDescription = !!content.list || !!content.description; + const { action } = content; + return ( <> {/* Note: an empty element would still generate a flex gap, so we @@ -237,9 +239,20 @@ const NotificationBody = ({ {content.description} )} - {content.action && ( + {action && ( - + { + // Prevents toggling the isExpanded flag. + event.stopPropagation(); + action.onClick?.(event); + }, + }} + /> )} From 6dc63a04db2a7aed868f50aeb5cd843e28c849a2 Mon Sep 17 00:00:00 2001 From: Sakshyam Shah Date: Wed, 30 Oct 2024 12:34:37 -0400 Subject: [PATCH 11/27] prevent saml service provider from deletion if referenced by ic plugin (#48063) --- .../local/saml_idp_service_provider.go | 36 +++++++++++- .../local/saml_idp_service_provider_test.go | 58 +++++++++++++++++++ 2 files changed, 91 insertions(+), 3 deletions(-) diff --git a/lib/services/local/saml_idp_service_provider.go b/lib/services/local/saml_idp_service_provider.go index 60e43f9b2319f..da99ef05d8ad0 100644 --- a/lib/services/local/saml_idp_service_provider.go +++ b/lib/services/local/saml_idp_service_provider.go @@ -51,7 +51,10 @@ const ( // SAMLIdPServiceProviderService manages IdP service providers in the Backend. type SAMLIdPServiceProviderService struct { - svc generic.Service[types.SAMLIdPServiceProvider] + svc generic.Service[types.SAMLIdPServiceProvider] + // backend is used to spawn Plugins storage service so that + // it can be queried from the SAML service. + backend backend.Backend log logrus.FieldLogger httpClient *http.Client } @@ -81,8 +84,9 @@ func NewSAMLIdPServiceProviderService(b backend.Backend, opts ...SAMLIdPOption) } samlSPService := &SAMLIdPServiceProviderService{ - svc: *svc, - log: logrus.WithFields(logrus.Fields{teleport.ComponentKey: "saml-idp"}), + svc: *svc, + backend: b, + log: logrus.WithFields(logrus.Fields{teleport.ComponentKey: "saml-idp"}), } for _, opt := range opts { @@ -198,6 +202,9 @@ func (s *SAMLIdPServiceProviderService) UpdateSAMLIdPServiceProvider(ctx context // DeleteSAMLIdPServiceProvider removes the specified SAML IdP service provider resource. func (s *SAMLIdPServiceProviderService) DeleteSAMLIdPServiceProvider(ctx context.Context, name string) error { + if err := spReferencedByAWSICPlugin(ctx, s.backend, name); err != nil { + return trace.Wrap(err) + } return s.svc.DeleteResource(ctx, name) } @@ -397,3 +404,26 @@ func genTeleportSPSSODescriptor(attributeMapping []*types.SAMLAttributeMapping) }, } } + +// spReferencedByAWSICPlugin returns a BadParameter error if the serviceProviderName +// is referenced in the AWS Identity Center plugin. +func spReferencedByAWSICPlugin(ctx context.Context, bk backend.Backend, serviceProviderName string) error { + pluginService := NewPluginsService(bk) + plugins, err := pluginService.GetPlugins(ctx, false /* withSecrets */) + if err != nil { + return trace.Wrap(err) + } + + for _, p := range plugins { + pluginV1, ok := p.(*types.PluginV1) + if !ok { + continue + } + + if pluginV1.Spec.GetAwsIc().SamlIdpServiceProviderName == serviceProviderName { + return trace.BadParameter("cannot delete SAML service provider currently referenced by AWS Identity Center integration %q", pluginV1.GetName()) + } + } + + return nil +} diff --git a/lib/services/local/saml_idp_service_provider_test.go b/lib/services/local/saml_idp_service_provider_test.go index b5917167b8d31..aafdedba9a5da 100644 --- a/lib/services/local/saml_idp_service_provider_test.go +++ b/lib/services/local/saml_idp_service_provider_test.go @@ -589,3 +589,61 @@ func TestCreateSAMLIdPServiceProvider_GetTeleportSPSSODescriptor(t *testing.T) { index, _ := GetTeleportSPSSODescriptor(ed.SPSSODescriptors) require.Equal(t, 3, index) } + +func TestDeleteSAMLServiceProviderWhenReferencedByPlugin(t *testing.T) { + ctx := context.Background() + backend, err := memory.New(memory.Config{ + Context: ctx, + Clock: clockwork.NewFakeClock(), + }) + require.NoError(t, err) + samlService, err := NewSAMLIdPServiceProviderService(backend) + require.NoError(t, err) + pluginService := NewPluginsService(backend) + + sp, err := types.NewSAMLIdPServiceProvider( + types.Metadata{ + Name: "sp", + }, + types.SAMLIdPServiceProviderSpecV1{ + EntityDescriptor: newEntityDescriptor("sp"), + EntityID: "sp", + }) + require.NoError(t, err) + require.NoError(t, samlService.CreateSAMLIdPServiceProvider(ctx, sp)) + + // service provider should not be deleted when referenced by the plugin. + require.NoError(t, pluginService.CreatePlugin(ctx, newPlugin(t, sp.GetName()))) + err = samlService.DeleteSAMLIdPServiceProvider(ctx, sp.GetName()) + require.ErrorContains(t, err, "referenced by AWS Identity Center integration") + + // service provider should be deleted once the referenced plugin itself is deleted. + require.NoError(t, pluginService.DeletePlugin(ctx, types.PluginTypeAWSIdentityCenter)) + require.NoError(t, samlService.DeleteSAMLIdPServiceProvider(ctx, sp.GetName())) +} + +func newPlugin(t *testing.T, serviceProviderName string) *types.PluginV1 { + t.Helper() + return &types.PluginV1{ + Metadata: types.Metadata{ + Name: types.PluginTypeAWSIdentityCenter, + Labels: map[string]string{ + types.HostedPluginLabel: "true", + }, + }, + Spec: types.PluginSpecV1{ + Settings: &types.PluginSpecV1_AwsIc{ + AwsIc: &types.PluginAWSICSettings{ + IntegrationName: "test-integration", + Region: "test-region", + Arn: "test-arn", + AccessListDefaultOwners: []string{"user1", "user2"}, + ProvisioningSpec: &types.AWSICProvisioningSpec{ + BaseUrl: "https://example.com", + }, + SamlIdpServiceProviderName: serviceProviderName, + }, + }, + }, + } +} From 043411c5fa681531ddd1496343fcab75c24b757f Mon Sep 17 00:00:00 2001 From: Steven Martin Date: Wed, 30 Oct 2024 12:45:26 -0400 Subject: [PATCH 12/27] docs: update cloud networking on proxy service (#47506) * docs: update cloud networking on proxy service * docs: update verbiage for networking Co-authored-by: Paul Gottschling * docs: update cloud-hosted public address * docs: update verbiage for app access for networking * docs: update verbiage for public address for networks with cloud Co-authored-by: Paul Gottschling * docs: clarify app configuration * docs: update cloud-hosted explanation for public address --------- Co-authored-by: Paul Gottschling --- docs/pages/reference/networking.mdx | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/docs/pages/reference/networking.mdx b/docs/pages/reference/networking.mdx index 9ec9a7d923f91..ffd3c64a1aeef 100644 --- a/docs/pages/reference/networking.mdx +++ b/docs/pages/reference/networking.mdx @@ -36,21 +36,9 @@ following use cases: -All Teleport services (e.g., the Application Service and Database Service) have -an optional `public_addr` property that you can modify in each service's -configuration file. The public address can take an IP or a DNS name. It can also -be a list of values: - -```yaml -public_addr: ["service-one.example.com", "service-two.example.com"] -``` +On Teleport Enterprise (Cloud) the Teleport agent services always +connect using reverse tunnels so there is no need to set a public address for a agent. -Specifying a public address for a Teleport agent may be useful in the -following use cases: - -- You have multiple identical services behind a load balancer. -- You want Teleport to issue an SSH certificate for the service with additional - principals, e.g., host names. From 3922335948dd113eeeec22910753618f2297c1bb Mon Sep 17 00:00:00 2001 From: Bernard Kim Date: Wed, 30 Oct 2024 09:50:19 -0700 Subject: [PATCH 13/27] Extend email plugin settings api (#48048) * Extend email plugin settings api * Update tctl collections cmd * Update AllPluginTupes list * Add starttlsPolicy to docs * Include start TLS policy configuration * Add port validation rule * Fix test * Address feedback - Set enum 0 as UNSPECIFIED - Update enum names * Use string instead of enum --- api/proto/teleport/legacy/types/types.proto | 41 + api/types/plugin.go | 68 + api/types/plugin_test.go | 246 + api/types/types.pb.go | 5230 ++++++++++------- .../ssh-approval-email.mdx | 7 +- integrations/access/email/app.go | 3 +- integrations/access/email/config.go | 16 + tool/tctl/common/collection.go | 3 + .../components/Validation/rules.test.ts | 15 + .../shared/components/Validation/rules.ts | 17 + .../src/services/integrations/types.ts | 8 +- 11 files changed, 3590 insertions(+), 2064 deletions(-) diff --git a/api/proto/teleport/legacy/types/types.proto b/api/proto/teleport/legacy/types/types.proto index 84c235be5120e..26088d6da27fd 100644 --- a/api/proto/teleport/legacy/types/types.proto +++ b/api/proto/teleport/legacy/types/types.proto @@ -6236,6 +6236,8 @@ message PluginSpecV1 { PluginDatadogAccessSettings datadog = 15; // PluginAWSICSettings holds settings for AWSICSettings PluginAWSICSettings aws_ic = 16; + // Settings for the Email Access Request plugin + PluginEmailSettings email = 17; } // generation contains a unique ID that should: @@ -6576,6 +6578,45 @@ message AWSICProvisioningSpec { string bearer_token = 2; } +// PluginEmailSettings holds the settings for an Email Access Request plugin. +message PluginEmailSettings { + option (gogoproto.equal) = true; + + // Sender specifies the email sender. + string sender = 1; + // FallbackRecipient specifies the default recipient. + string fallback_recipient = 2; + + // Spec configures the mail service settings. + oneof spec { + // MailgunSpec configures Mailgun service settings. + MailgunSpec mailgun_spec = 3; + // SmtpSpec configures generic SMTP service settings. + SMTPSpec smtp_spec = 4; + } +} + +// MailgunSpec holds Mailgun-specific settings. +message MailgunSpec { + option (gogoproto.equal) = true; + + // Domain specifies the Mailgun sending domain. + string domain = 1; +} + +// SMTPSpec holds a generic SMTP service specific settings. +message SMTPSpec { + option (gogoproto.equal) = true; + + // Host specifies the SMTP service host name. + string host = 1; + // Port specifies the SMTP service port number. + int32 port = 2; + // StartTLSPolicy specifies the SMTP start TLS policy used to send emails over + // SMTP. + string start_tls_policy = 3; +} + message PluginBootstrapCredentialsV1 { oneof credentials { PluginOAuth2AuthorizationCodeCredentials oauth2_authorization_code = 1; diff --git a/api/types/plugin.go b/api/types/plugin.go index 535933d3017f2..b0fca5eba8a51 100644 --- a/api/types/plugin.go +++ b/api/types/plugin.go @@ -43,6 +43,7 @@ var AllPluginTypes = []PluginType{ PluginTypeSCIM, PluginTypeDatadog, PluginTypeAWSIdentityCenter, + PluginTypeEmail, } const ( @@ -78,6 +79,8 @@ const ( PluginTypeDatadog = "datadog" // PluginTypeAWSIdentityCenter indicates AWS Identity Center plugin PluginTypeAWSIdentityCenter = "aws-identity-center" + // PluginTypeEmail indicates an Email Access Request plugin + PluginTypeEmail = "email" ) // PluginSubkind represents the type of the plugin, e.g., access request, MDM etc. @@ -356,6 +359,20 @@ func (p *PluginV1) CheckAndSetDefaults() error { if err := settings.AwsIc.CheckAndSetDefaults(); err != nil { return trace.Wrap(err) } + case *PluginSpecV1_Email: + if settings.Email == nil { + return trace.BadParameter("missing Email settings") + } + if err := settings.Email.CheckAndSetDefaults(); err != nil { + return trace.Wrap(err) + } + staticCreds := p.Credentials.GetStaticCredentialsRef() + if staticCreds == nil { + return trace.BadParameter("Email plugin must be used with the static credentials ref type") + } + if len(staticCreds.Labels) == 0 { + return trace.BadParameter("labels must be specified") + } default: return nil } @@ -522,6 +539,8 @@ func (p *PluginV1) GetType() PluginType { return PluginTypeDatadog case *PluginSpecV1_AwsIc: return PluginTypeAWSIdentityCenter + case *PluginSpecV1_Email: + return PluginTypeEmail default: return PluginTypeUnknown } @@ -740,6 +759,55 @@ func (c *AWSICProvisioningSpec) CheckAndSetDefaults() error { return nil } +func (c *PluginEmailSettings) CheckAndSetDefaults() error { + if c.Sender == "" { + return trace.BadParameter("sender must be set") + } + if c.FallbackRecipient == "" { + return trace.BadParameter("fallback_recipient must be set") + } + + switch spec := c.GetSpec().(type) { + case *PluginEmailSettings_MailgunSpec: + if c.GetMailgunSpec() == nil { + return trace.BadParameter("missing Mailgun Spec") + } + if err := c.GetMailgunSpec().CheckAndSetDefaults(); err != nil { + return trace.Wrap(err) + } + case *PluginEmailSettings_SmtpSpec: + if c.GetSmtpSpec() == nil { + return trace.BadParameter("missing SMTP Spec") + } + if err := c.GetSmtpSpec().CheckAndSetDefaults(); err != nil { + return trace.Wrap(err) + } + default: + return trace.BadParameter("unknown email spec: %T", spec) + } + return nil +} + +func (c *MailgunSpec) CheckAndSetDefaults() error { + if c.Domain == "" { + return trace.BadParameter("domain must be set") + } + return nil +} + +func (c *SMTPSpec) CheckAndSetDefaults() error { + if c.Host == "" { + return trace.BadParameter("host must be set") + } + if c.Port == 0 { + return trace.BadParameter("port must be set") + } + if c.StartTlsPolicy == "" { + return trace.BadParameter("start TLS policy must be set") + } + return nil +} + // GetCode returns the status code func (c PluginStatusV1) GetCode() PluginStatusCode { return c.Code diff --git a/api/types/plugin_test.go b/api/types/plugin_test.go index 84dfe525cb645..87d3d6182675b 100644 --- a/api/types/plugin_test.go +++ b/api/types/plugin_test.go @@ -1090,3 +1090,249 @@ func TestPluginAWSICSettings(t *testing.T) { }) } } + +func TestPluginEmailSettings(t *testing.T) { + defaultSettings := func() *PluginSpecV1_Email { + return &PluginSpecV1_Email{ + Email: &PluginEmailSettings{ + Sender: "example-sender@goteleport.com", + FallbackRecipient: "example-recipient@goteleport.com", + }, + } + } + validMailgunSpec := func() *PluginEmailSettings_MailgunSpec { + return &PluginEmailSettings_MailgunSpec{ + MailgunSpec: &MailgunSpec{ + Domain: "sandbox.mailgun.org", + }, + } + } + validSMTPSpec := func() *PluginEmailSettings_SmtpSpec { + return &PluginEmailSettings_SmtpSpec{ + SmtpSpec: &SMTPSpec{ + Host: "smtp.example.com", + Port: 587, + StartTlsPolicy: "mandatory", + }, + } + } + + testCases := []struct { + name string + mutateSettings func(*PluginEmailSettings) + creds *PluginCredentialsV1 + assertErr require.ErrorAssertionFunc + }{ + { + name: "no email spec", + assertErr: func(t require.TestingT, err error, args ...any) { + require.True(t, trace.IsBadParameter(err)) + require.Contains(t, err.Error(), "unknown email spec") + }, + }, + { + name: "(mailgun) no mailgun spec", + mutateSettings: func(s *PluginEmailSettings) { + s.Spec = &PluginEmailSettings_MailgunSpec{} + }, + assertErr: func(t require.TestingT, err error, args ...any) { + require.True(t, trace.IsBadParameter(err)) + require.Contains(t, err.Error(), "missing Mailgun Spec") + }, + }, + { + name: "(mailgun) no mailgun domain", + mutateSettings: func(s *PluginEmailSettings) { + s.Spec = &PluginEmailSettings_MailgunSpec{ + MailgunSpec: &MailgunSpec{ + Domain: "", + }, + } + }, + assertErr: func(t require.TestingT, err error, args ...any) { + require.True(t, trace.IsBadParameter(err)) + require.Contains(t, err.Error(), "domain must be set") + }, + }, + { + name: "(mailgun) no credentials", + mutateSettings: func(s *PluginEmailSettings) { + s.Spec = validMailgunSpec() + }, + assertErr: func(t require.TestingT, err error, args ...any) { + require.True(t, trace.IsBadParameter(err)) + require.Contains(t, err.Error(), "must be used with the static credentials ref type") + }, + }, + { + name: "(mailgun) no credentials label", + mutateSettings: func(s *PluginEmailSettings) { + s.Spec = validMailgunSpec() + }, + creds: &PluginCredentialsV1{ + Credentials: &PluginCredentialsV1_StaticCredentialsRef{ + StaticCredentialsRef: &PluginStaticCredentialsRef{ + Labels: map[string]string{}, + }, + }, + }, + assertErr: func(t require.TestingT, err error, args ...any) { + require.True(t, trace.IsBadParameter(err)) + require.Contains(t, err.Error(), "labels must be specified") + }, + }, + { + name: "(mailgun) valid settings", + mutateSettings: func(s *PluginEmailSettings) { + s.Spec = validMailgunSpec() + }, + creds: &PluginCredentialsV1{ + Credentials: &PluginCredentialsV1_StaticCredentialsRef{ + StaticCredentialsRef: &PluginStaticCredentialsRef{ + Labels: map[string]string{ + "label1": "value1", + }, + }, + }, + }, + assertErr: func(t require.TestingT, err error, args ...any) { + require.NoError(t, err) + }, + }, + { + name: "(smtp) no smtp spec", + mutateSettings: func(s *PluginEmailSettings) { + s.Spec = &PluginEmailSettings_SmtpSpec{} + }, + assertErr: func(t require.TestingT, err error, args ...any) { + require.True(t, trace.IsBadParameter(err)) + require.Contains(t, err.Error(), "missing SMTP Spec") + }, + }, + { + name: "(smtp) no smtp host", + mutateSettings: func(s *PluginEmailSettings) { + s.Spec = &PluginEmailSettings_SmtpSpec{ + SmtpSpec: &SMTPSpec{}, + } + }, + assertErr: func(t require.TestingT, err error, args ...any) { + require.True(t, trace.IsBadParameter(err)) + require.Contains(t, err.Error(), "host must be set") + }, + }, + { + name: "(smtp) no smtp port", + mutateSettings: func(s *PluginEmailSettings) { + s.Spec = &PluginEmailSettings_SmtpSpec{ + SmtpSpec: &SMTPSpec{ + Host: "smtp.example.com", + }, + } + }, + assertErr: func(t require.TestingT, err error, args ...any) { + require.True(t, trace.IsBadParameter(err)) + require.Contains(t, err.Error(), "port must be set") + }, + }, + { + name: "(smtp) no start TLS policy", + mutateSettings: func(s *PluginEmailSettings) { + s.Spec = &PluginEmailSettings_SmtpSpec{ + SmtpSpec: &SMTPSpec{ + Host: "smtp.example.com", + Port: 587, + }, + } + }, + assertErr: func(t require.TestingT, err error, args ...any) { + require.True(t, trace.IsBadParameter(err)) + require.Contains(t, err.Error(), "start TLS policy must be set") + }, + }, + { + name: "(smtp) no credentials", + mutateSettings: func(s *PluginEmailSettings) { + s.Spec = validSMTPSpec() + }, + assertErr: func(t require.TestingT, err error, args ...any) { + require.True(t, trace.IsBadParameter(err)) + require.Contains(t, err.Error(), "must be used with the static credentials ref type") + }, + }, + { + name: "(smtp) no credentials label", + mutateSettings: func(s *PluginEmailSettings) { + s.Spec = validSMTPSpec() + }, + creds: &PluginCredentialsV1{ + Credentials: &PluginCredentialsV1_StaticCredentialsRef{ + &PluginStaticCredentialsRef{ + Labels: map[string]string{}, + }, + }, + }, + assertErr: func(t require.TestingT, err error, args ...any) { + require.True(t, trace.IsBadParameter(err)) + require.Contains(t, err.Error(), "labels must be specified") + }, + }, + { + name: "(smtp) valid settings", + mutateSettings: func(s *PluginEmailSettings) { + s.Spec = validSMTPSpec() + }, + creds: &PluginCredentialsV1{ + Credentials: &PluginCredentialsV1_StaticCredentialsRef{ + &PluginStaticCredentialsRef{ + Labels: map[string]string{ + "label1": "value1", + }, + }, + }, + }, + assertErr: func(t require.TestingT, err error, args ...any) { + require.NoError(t, err) + }, + }, + { + name: "(smtp) change start TLS policy", + mutateSettings: func(s *PluginEmailSettings) { + s.Spec = &PluginEmailSettings_SmtpSpec{ + SmtpSpec: &SMTPSpec{ + Host: "smtp.example.com", + Port: 587, + StartTlsPolicy: "opportunistic", + }, + } + }, + creds: &PluginCredentialsV1{ + Credentials: &PluginCredentialsV1_StaticCredentialsRef{ + &PluginStaticCredentialsRef{ + Labels: map[string]string{ + "label1": "value1", + }, + }, + }, + }, + assertErr: func(t require.TestingT, err error, args ...any) { + require.NoError(t, err) + }, + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + settings := defaultSettings() + if tc.mutateSettings != nil { + tc.mutateSettings(settings.Email) + } + + plugin := NewPluginV1( + Metadata{Name: "uut"}, + PluginSpecV1{Settings: settings}, + tc.creds) + tc.assertErr(t, plugin.CheckAndSetDefaults()) + }) + } +} diff --git a/api/types/types.pb.go b/api/types/types.pb.go index 40aae2aaf43ae..278c915a132a4 100644 --- a/api/types/types.pb.go +++ b/api/types/types.pb.go @@ -1227,7 +1227,7 @@ func (x OktaAssignmentSpecV1_OktaAssignmentStatus) String() string { } func (OktaAssignmentSpecV1_OktaAssignmentStatus) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{326, 0} + return fileDescriptor_9198ee693835762e, []int{329, 0} } // OktaAssignmentTargetType is the type of Okta object that an assignment is targeting. @@ -1259,7 +1259,7 @@ func (x OktaAssignmentTargetV1_OktaAssignmentTargetType) String() string { } func (OktaAssignmentTargetV1_OktaAssignmentTargetType) EnumDescriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{327, 0} + return fileDescriptor_9198ee693835762e, []int{330, 0} } type KeepAlive struct { @@ -15573,6 +15573,7 @@ type PluginSpecV1 struct { // *PluginSpecV1_Scim // *PluginSpecV1_Datadog // *PluginSpecV1_AwsIc + // *PluginSpecV1_Email Settings isPluginSpecV1_Settings `protobuf_oneof:"settings"` // generation contains a unique ID that should: // - Be created by the backend on plugin creation. @@ -15670,6 +15671,9 @@ type PluginSpecV1_Datadog struct { type PluginSpecV1_AwsIc struct { AwsIc *PluginAWSICSettings `protobuf:"bytes,16,opt,name=aws_ic,json=awsIc,proto3,oneof" json:"aws_ic,omitempty"` } +type PluginSpecV1_Email struct { + Email *PluginEmailSettings `protobuf:"bytes,17,opt,name=email,proto3,oneof" json:"email,omitempty"` +} func (*PluginSpecV1_SlackAccessPlugin) isPluginSpecV1_Settings() {} func (*PluginSpecV1_Opsgenie) isPluginSpecV1_Settings() {} @@ -15686,6 +15690,7 @@ func (*PluginSpecV1_EntraId) isPluginSpecV1_Settings() {} func (*PluginSpecV1_Scim) isPluginSpecV1_Settings() {} func (*PluginSpecV1_Datadog) isPluginSpecV1_Settings() {} func (*PluginSpecV1_AwsIc) isPluginSpecV1_Settings() {} +func (*PluginSpecV1_Email) isPluginSpecV1_Settings() {} func (m *PluginSpecV1) GetSettings() isPluginSpecV1_Settings { if m != nil { @@ -15799,6 +15804,13 @@ func (m *PluginSpecV1) GetAwsIc() *PluginAWSICSettings { return nil } +func (m *PluginSpecV1) GetEmail() *PluginEmailSettings { + if x, ok := m.GetSettings().(*PluginSpecV1_Email); ok { + return x.Email + } + return nil +} + // XXX_OneofWrappers is for the internal use of the proto package. func (*PluginSpecV1) XXX_OneofWrappers() []interface{} { return []interface{}{ @@ -15817,6 +15829,7 @@ func (*PluginSpecV1) XXX_OneofWrappers() []interface{} { (*PluginSpecV1_Scim)(nil), (*PluginSpecV1_Datadog)(nil), (*PluginSpecV1_AwsIc)(nil), + (*PluginSpecV1_Email)(nil), } } @@ -16867,6 +16880,192 @@ func (m *AWSICProvisioningSpec) XXX_DiscardUnknown() { var xxx_messageInfo_AWSICProvisioningSpec proto.InternalMessageInfo +// PluginEmailSettings holds the settings for an Email Access Request plugin. +type PluginEmailSettings struct { + // Sender specifies the email sender. + Sender string `protobuf:"bytes,1,opt,name=sender,proto3" json:"sender,omitempty"` + // FallbackRecipient specifies the default recipient. + FallbackRecipient string `protobuf:"bytes,2,opt,name=fallback_recipient,json=fallbackRecipient,proto3" json:"fallback_recipient,omitempty"` + // Spec configures the mail service settings. + // + // Types that are valid to be assigned to Spec: + // + // *PluginEmailSettings_MailgunSpec + // *PluginEmailSettings_SmtpSpec + Spec isPluginEmailSettings_Spec `protobuf_oneof:"spec"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *PluginEmailSettings) Reset() { *m = PluginEmailSettings{} } +func (m *PluginEmailSettings) String() string { return proto.CompactTextString(m) } +func (*PluginEmailSettings) ProtoMessage() {} +func (*PluginEmailSettings) Descriptor() ([]byte, []int) { + return fileDescriptor_9198ee693835762e, []int{286} +} +func (m *PluginEmailSettings) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *PluginEmailSettings) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_PluginEmailSettings.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *PluginEmailSettings) XXX_Merge(src proto.Message) { + xxx_messageInfo_PluginEmailSettings.Merge(m, src) +} +func (m *PluginEmailSettings) XXX_Size() int { + return m.Size() +} +func (m *PluginEmailSettings) XXX_DiscardUnknown() { + xxx_messageInfo_PluginEmailSettings.DiscardUnknown(m) +} + +var xxx_messageInfo_PluginEmailSettings proto.InternalMessageInfo + +type isPluginEmailSettings_Spec interface { + isPluginEmailSettings_Spec() + Equal(interface{}) bool + MarshalTo([]byte) (int, error) + Size() int +} + +type PluginEmailSettings_MailgunSpec struct { + MailgunSpec *MailgunSpec `protobuf:"bytes,3,opt,name=mailgun_spec,json=mailgunSpec,proto3,oneof" json:"mailgun_spec,omitempty"` +} +type PluginEmailSettings_SmtpSpec struct { + SmtpSpec *SMTPSpec `protobuf:"bytes,4,opt,name=smtp_spec,json=smtpSpec,proto3,oneof" json:"smtp_spec,omitempty"` +} + +func (*PluginEmailSettings_MailgunSpec) isPluginEmailSettings_Spec() {} +func (*PluginEmailSettings_SmtpSpec) isPluginEmailSettings_Spec() {} + +func (m *PluginEmailSettings) GetSpec() isPluginEmailSettings_Spec { + if m != nil { + return m.Spec + } + return nil +} + +func (m *PluginEmailSettings) GetMailgunSpec() *MailgunSpec { + if x, ok := m.GetSpec().(*PluginEmailSettings_MailgunSpec); ok { + return x.MailgunSpec + } + return nil +} + +func (m *PluginEmailSettings) GetSmtpSpec() *SMTPSpec { + if x, ok := m.GetSpec().(*PluginEmailSettings_SmtpSpec); ok { + return x.SmtpSpec + } + return nil +} + +// XXX_OneofWrappers is for the internal use of the proto package. +func (*PluginEmailSettings) XXX_OneofWrappers() []interface{} { + return []interface{}{ + (*PluginEmailSettings_MailgunSpec)(nil), + (*PluginEmailSettings_SmtpSpec)(nil), + } +} + +// MailgunSpec holds Mailgun-specific settings. +type MailgunSpec struct { + // Domain specifies the Mailgun sending domain. + Domain string `protobuf:"bytes,1,opt,name=domain,proto3" json:"domain,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *MailgunSpec) Reset() { *m = MailgunSpec{} } +func (m *MailgunSpec) String() string { return proto.CompactTextString(m) } +func (*MailgunSpec) ProtoMessage() {} +func (*MailgunSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_9198ee693835762e, []int{287} +} +func (m *MailgunSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *MailgunSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_MailgunSpec.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *MailgunSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_MailgunSpec.Merge(m, src) +} +func (m *MailgunSpec) XXX_Size() int { + return m.Size() +} +func (m *MailgunSpec) XXX_DiscardUnknown() { + xxx_messageInfo_MailgunSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_MailgunSpec proto.InternalMessageInfo + +// SMTPSpec holds a generic SMTP service specific settings. +type SMTPSpec struct { + // Host specifies the SMTP service host name. + Host string `protobuf:"bytes,1,opt,name=host,proto3" json:"host,omitempty"` + // Port specifies the SMTP service port number. + Port int32 `protobuf:"varint,2,opt,name=port,proto3" json:"port,omitempty"` + // StartTLSPolicy specifies the SMTP start TLS policy used to send emails over + // SMTP. + StartTlsPolicy string `protobuf:"bytes,3,opt,name=start_tls_policy,json=startTlsPolicy,proto3" json:"start_tls_policy,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SMTPSpec) Reset() { *m = SMTPSpec{} } +func (m *SMTPSpec) String() string { return proto.CompactTextString(m) } +func (*SMTPSpec) ProtoMessage() {} +func (*SMTPSpec) Descriptor() ([]byte, []int) { + return fileDescriptor_9198ee693835762e, []int{288} +} +func (m *SMTPSpec) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SMTPSpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_SMTPSpec.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *SMTPSpec) XXX_Merge(src proto.Message) { + xxx_messageInfo_SMTPSpec.Merge(m, src) +} +func (m *SMTPSpec) XXX_Size() int { + return m.Size() +} +func (m *SMTPSpec) XXX_DiscardUnknown() { + xxx_messageInfo_SMTPSpec.DiscardUnknown(m) +} + +var xxx_messageInfo_SMTPSpec proto.InternalMessageInfo + type PluginBootstrapCredentialsV1 struct { // Types that are valid to be assigned to Credentials: // @@ -16883,7 +17082,7 @@ func (m *PluginBootstrapCredentialsV1) Reset() { *m = PluginBootstrapCre func (m *PluginBootstrapCredentialsV1) String() string { return proto.CompactTextString(m) } func (*PluginBootstrapCredentialsV1) ProtoMessage() {} func (*PluginBootstrapCredentialsV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{286} + return fileDescriptor_9198ee693835762e, []int{289} } func (m *PluginBootstrapCredentialsV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -16983,7 +17182,7 @@ func (m *PluginIdSecretCredential) Reset() { *m = PluginIdSecretCredenti func (m *PluginIdSecretCredential) String() string { return proto.CompactTextString(m) } func (*PluginIdSecretCredential) ProtoMessage() {} func (*PluginIdSecretCredential) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{287} + return fileDescriptor_9198ee693835762e, []int{290} } func (m *PluginIdSecretCredential) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17026,7 +17225,7 @@ func (m *PluginOAuth2AuthorizationCodeCredentials) Reset() { func (m *PluginOAuth2AuthorizationCodeCredentials) String() string { return proto.CompactTextString(m) } func (*PluginOAuth2AuthorizationCodeCredentials) ProtoMessage() {} func (*PluginOAuth2AuthorizationCodeCredentials) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{288} + return fileDescriptor_9198ee693835762e, []int{291} } func (m *PluginOAuth2AuthorizationCodeCredentials) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17084,7 +17283,7 @@ func (m *PluginStatusV1) Reset() { *m = PluginStatusV1{} } func (m *PluginStatusV1) String() string { return proto.CompactTextString(m) } func (*PluginStatusV1) ProtoMessage() {} func (*PluginStatusV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{289} + return fileDescriptor_9198ee693835762e, []int{292} } func (m *PluginStatusV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17187,7 +17386,7 @@ func (m *PluginGitlabStatusV1) Reset() { *m = PluginGitlabStatusV1{} } func (m *PluginGitlabStatusV1) String() string { return proto.CompactTextString(m) } func (*PluginGitlabStatusV1) ProtoMessage() {} func (*PluginGitlabStatusV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{290} + return fileDescriptor_9198ee693835762e, []int{293} } func (m *PluginGitlabStatusV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17231,7 +17430,7 @@ func (m *PluginEntraIDStatusV1) Reset() { *m = PluginEntraIDStatusV1{} } func (m *PluginEntraIDStatusV1) String() string { return proto.CompactTextString(m) } func (*PluginEntraIDStatusV1) ProtoMessage() {} func (*PluginEntraIDStatusV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{291} + return fileDescriptor_9198ee693835762e, []int{294} } func (m *PluginEntraIDStatusV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17285,7 +17484,7 @@ func (m *PluginOktaStatusV1) Reset() { *m = PluginOktaStatusV1{} } func (m *PluginOktaStatusV1) String() string { return proto.CompactTextString(m) } func (*PluginOktaStatusV1) ProtoMessage() {} func (*PluginOktaStatusV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{292} + return fileDescriptor_9198ee693835762e, []int{295} } func (m *PluginOktaStatusV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17333,7 +17532,7 @@ func (m *PluginOktaStatusDetailsSSO) Reset() { *m = PluginOktaStatusDeta func (m *PluginOktaStatusDetailsSSO) String() string { return proto.CompactTextString(m) } func (*PluginOktaStatusDetailsSSO) ProtoMessage() {} func (*PluginOktaStatusDetailsSSO) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{293} + return fileDescriptor_9198ee693835762e, []int{296} } func (m *PluginOktaStatusDetailsSSO) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17390,7 +17589,7 @@ func (m *PluginOktaStatusDetailsAppGroupSync) Reset() { *m = PluginOktaS func (m *PluginOktaStatusDetailsAppGroupSync) String() string { return proto.CompactTextString(m) } func (*PluginOktaStatusDetailsAppGroupSync) ProtoMessage() {} func (*PluginOktaStatusDetailsAppGroupSync) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{294} + return fileDescriptor_9198ee693835762e, []int{297} } func (m *PluginOktaStatusDetailsAppGroupSync) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17444,7 +17643,7 @@ func (m *PluginOktaStatusDetailsUsersSync) Reset() { *m = PluginOktaStat func (m *PluginOktaStatusDetailsUsersSync) String() string { return proto.CompactTextString(m) } func (*PluginOktaStatusDetailsUsersSync) ProtoMessage() {} func (*PluginOktaStatusDetailsUsersSync) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{295} + return fileDescriptor_9198ee693835762e, []int{298} } func (m *PluginOktaStatusDetailsUsersSync) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17487,7 +17686,7 @@ func (m *PluginOktaStatusDetailsSCIM) Reset() { *m = PluginOktaStatusDet func (m *PluginOktaStatusDetailsSCIM) String() string { return proto.CompactTextString(m) } func (*PluginOktaStatusDetailsSCIM) ProtoMessage() {} func (*PluginOktaStatusDetailsSCIM) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{296} + return fileDescriptor_9198ee693835762e, []int{299} } func (m *PluginOktaStatusDetailsSCIM) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17549,7 +17748,7 @@ func (m *PluginOktaStatusDetailsAccessListsSync) Reset() { func (m *PluginOktaStatusDetailsAccessListsSync) String() string { return proto.CompactTextString(m) } func (*PluginOktaStatusDetailsAccessListsSync) ProtoMessage() {} func (*PluginOktaStatusDetailsAccessListsSync) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{297} + return fileDescriptor_9198ee693835762e, []int{300} } func (m *PluginOktaStatusDetailsAccessListsSync) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17597,7 +17796,7 @@ func (m *PluginCredentialsV1) Reset() { *m = PluginCredentialsV1{} } func (m *PluginCredentialsV1) String() string { return proto.CompactTextString(m) } func (*PluginCredentialsV1) ProtoMessage() {} func (*PluginCredentialsV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{298} + return fileDescriptor_9198ee693835762e, []int{301} } func (m *PluginCredentialsV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17708,7 +17907,7 @@ func (m *PluginOAuth2AccessTokenCredentials) Reset() { *m = PluginOAuth2 func (m *PluginOAuth2AccessTokenCredentials) String() string { return proto.CompactTextString(m) } func (*PluginOAuth2AccessTokenCredentials) ProtoMessage() {} func (*PluginOAuth2AccessTokenCredentials) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{299} + return fileDescriptor_9198ee693835762e, []int{302} } func (m *PluginOAuth2AccessTokenCredentials) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17749,7 +17948,7 @@ func (m *PluginBearerTokenCredentials) Reset() { *m = PluginBearerTokenC func (m *PluginBearerTokenCredentials) String() string { return proto.CompactTextString(m) } func (*PluginBearerTokenCredentials) ProtoMessage() {} func (*PluginBearerTokenCredentials) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{300} + return fileDescriptor_9198ee693835762e, []int{303} } func (m *PluginBearerTokenCredentials) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17791,7 +17990,7 @@ func (m *PluginStaticCredentialsRef) Reset() { *m = PluginStaticCredenti func (m *PluginStaticCredentialsRef) String() string { return proto.CompactTextString(m) } func (*PluginStaticCredentialsRef) ProtoMessage() {} func (*PluginStaticCredentialsRef) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{301} + return fileDescriptor_9198ee693835762e, []int{304} } func (m *PluginStaticCredentialsRef) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17833,7 +18032,7 @@ func (m *PluginListV1) Reset() { *m = PluginListV1{} } func (m *PluginListV1) String() string { return proto.CompactTextString(m) } func (*PluginListV1) ProtoMessage() {} func (*PluginListV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{302} + return fileDescriptor_9198ee693835762e, []int{305} } func (m *PluginListV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17876,7 +18075,7 @@ type PluginStaticCredentialsV1 struct { func (m *PluginStaticCredentialsV1) Reset() { *m = PluginStaticCredentialsV1{} } func (*PluginStaticCredentialsV1) ProtoMessage() {} func (*PluginStaticCredentialsV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{303} + return fileDescriptor_9198ee693835762e, []int{306} } func (m *PluginStaticCredentialsV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -17922,7 +18121,7 @@ func (m *PluginStaticCredentialsSpecV1) Reset() { *m = PluginStaticCrede func (m *PluginStaticCredentialsSpecV1) String() string { return proto.CompactTextString(m) } func (*PluginStaticCredentialsSpecV1) ProtoMessage() {} func (*PluginStaticCredentialsSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{304} + return fileDescriptor_9198ee693835762e, []int{307} } func (m *PluginStaticCredentialsSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18024,7 +18223,7 @@ func (m *PluginStaticCredentialsBasicAuth) Reset() { *m = PluginStaticCr func (m *PluginStaticCredentialsBasicAuth) String() string { return proto.CompactTextString(m) } func (*PluginStaticCredentialsBasicAuth) ProtoMessage() {} func (*PluginStaticCredentialsBasicAuth) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{305} + return fileDescriptor_9198ee693835762e, []int{308} } func (m *PluginStaticCredentialsBasicAuth) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18070,7 +18269,7 @@ func (m *PluginStaticCredentialsOAuthClientSecret) Reset() { func (m *PluginStaticCredentialsOAuthClientSecret) String() string { return proto.CompactTextString(m) } func (*PluginStaticCredentialsOAuthClientSecret) ProtoMessage() {} func (*PluginStaticCredentialsOAuthClientSecret) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{306} + return fileDescriptor_9198ee693835762e, []int{309} } func (m *PluginStaticCredentialsOAuthClientSecret) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18113,7 +18312,7 @@ type SAMLIdPServiceProviderV1 struct { func (m *SAMLIdPServiceProviderV1) Reset() { *m = SAMLIdPServiceProviderV1{} } func (*SAMLIdPServiceProviderV1) ProtoMessage() {} func (*SAMLIdPServiceProviderV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{307} + return fileDescriptor_9198ee693835762e, []int{310} } func (m *SAMLIdPServiceProviderV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18184,7 +18383,7 @@ func (m *SAMLIdPServiceProviderSpecV1) Reset() { *m = SAMLIdPServiceProv func (m *SAMLIdPServiceProviderSpecV1) String() string { return proto.CompactTextString(m) } func (*SAMLIdPServiceProviderSpecV1) ProtoMessage() {} func (*SAMLIdPServiceProviderSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{308} + return fileDescriptor_9198ee693835762e, []int{311} } func (m *SAMLIdPServiceProviderSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18231,7 +18430,7 @@ func (m *SAMLAttributeMapping) Reset() { *m = SAMLAttributeMapping{} } func (m *SAMLAttributeMapping) String() string { return proto.CompactTextString(m) } func (*SAMLAttributeMapping) ProtoMessage() {} func (*SAMLAttributeMapping) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{309} + return fileDescriptor_9198ee693835762e, []int{312} } func (m *SAMLAttributeMapping) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18273,7 +18472,7 @@ func (m *IdPOptions) Reset() { *m = IdPOptions{} } func (m *IdPOptions) String() string { return proto.CompactTextString(m) } func (*IdPOptions) ProtoMessage() {} func (*IdPOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{310} + return fileDescriptor_9198ee693835762e, []int{313} } func (m *IdPOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18315,7 +18514,7 @@ func (m *IdPSAMLOptions) Reset() { *m = IdPSAMLOptions{} } func (m *IdPSAMLOptions) String() string { return proto.CompactTextString(m) } func (*IdPSAMLOptions) ProtoMessage() {} func (*IdPSAMLOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{311} + return fileDescriptor_9198ee693835762e, []int{314} } func (m *IdPSAMLOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18365,7 +18564,7 @@ func (m *KubernetesResourceV1) Reset() { *m = KubernetesResourceV1{} } func (m *KubernetesResourceV1) String() string { return proto.CompactTextString(m) } func (*KubernetesResourceV1) ProtoMessage() {} func (*KubernetesResourceV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{312} + return fileDescriptor_9198ee693835762e, []int{315} } func (m *KubernetesResourceV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18407,7 +18606,7 @@ func (m *KubernetesResourceSpecV1) Reset() { *m = KubernetesResourceSpec func (m *KubernetesResourceSpecV1) String() string { return proto.CompactTextString(m) } func (*KubernetesResourceSpecV1) ProtoMessage() {} func (*KubernetesResourceSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{313} + return fileDescriptor_9198ee693835762e, []int{316} } func (m *KubernetesResourceSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18453,7 +18652,7 @@ func (m *ClusterMaintenanceConfigV1) Reset() { *m = ClusterMaintenanceCo func (m *ClusterMaintenanceConfigV1) String() string { return proto.CompactTextString(m) } func (*ClusterMaintenanceConfigV1) ProtoMessage() {} func (*ClusterMaintenanceConfigV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{314} + return fileDescriptor_9198ee693835762e, []int{317} } func (m *ClusterMaintenanceConfigV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18495,7 +18694,7 @@ func (m *ClusterMaintenanceConfigSpecV1) Reset() { *m = ClusterMaintenan func (m *ClusterMaintenanceConfigSpecV1) String() string { return proto.CompactTextString(m) } func (*ClusterMaintenanceConfigSpecV1) ProtoMessage() {} func (*ClusterMaintenanceConfigSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{315} + return fileDescriptor_9198ee693835762e, []int{318} } func (m *ClusterMaintenanceConfigSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18541,7 +18740,7 @@ func (m *AgentUpgradeWindow) Reset() { *m = AgentUpgradeWindow{} } func (m *AgentUpgradeWindow) String() string { return proto.CompactTextString(m) } func (*AgentUpgradeWindow) ProtoMessage() {} func (*AgentUpgradeWindow) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{316} + return fileDescriptor_9198ee693835762e, []int{319} } func (m *AgentUpgradeWindow) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18588,7 +18787,7 @@ func (m *ScheduledAgentUpgradeWindow) Reset() { *m = ScheduledAgentUpgra func (m *ScheduledAgentUpgradeWindow) String() string { return proto.CompactTextString(m) } func (*ScheduledAgentUpgradeWindow) ProtoMessage() {} func (*ScheduledAgentUpgradeWindow) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{317} + return fileDescriptor_9198ee693835762e, []int{320} } func (m *ScheduledAgentUpgradeWindow) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18631,7 +18830,7 @@ func (m *AgentUpgradeSchedule) Reset() { *m = AgentUpgradeSchedule{} } func (m *AgentUpgradeSchedule) String() string { return proto.CompactTextString(m) } func (*AgentUpgradeSchedule) ProtoMessage() {} func (*AgentUpgradeSchedule) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{318} + return fileDescriptor_9198ee693835762e, []int{321} } func (m *AgentUpgradeSchedule) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18674,7 +18873,7 @@ type UserGroupV1 struct { func (m *UserGroupV1) Reset() { *m = UserGroupV1{} } func (*UserGroupV1) ProtoMessage() {} func (*UserGroupV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{319} + return fileDescriptor_9198ee693835762e, []int{322} } func (m *UserGroupV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18716,7 +18915,7 @@ func (m *UserGroupSpecV1) Reset() { *m = UserGroupSpecV1{} } func (m *UserGroupSpecV1) String() string { return proto.CompactTextString(m) } func (*UserGroupSpecV1) ProtoMessage() {} func (*UserGroupSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{320} + return fileDescriptor_9198ee693835762e, []int{323} } func (m *UserGroupSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18760,7 +18959,7 @@ func (m *OktaImportRuleSpecV1) Reset() { *m = OktaImportRuleSpecV1{} } func (m *OktaImportRuleSpecV1) String() string { return proto.CompactTextString(m) } func (*OktaImportRuleSpecV1) ProtoMessage() {} func (*OktaImportRuleSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{321} + return fileDescriptor_9198ee693835762e, []int{324} } func (m *OktaImportRuleSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18804,7 +19003,7 @@ func (m *OktaImportRuleMappingV1) Reset() { *m = OktaImportRuleMappingV1 func (m *OktaImportRuleMappingV1) String() string { return proto.CompactTextString(m) } func (*OktaImportRuleMappingV1) ProtoMessage() {} func (*OktaImportRuleMappingV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{322} + return fileDescriptor_9198ee693835762e, []int{325} } func (m *OktaImportRuleMappingV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18847,7 +19046,7 @@ type OktaImportRuleV1 struct { func (m *OktaImportRuleV1) Reset() { *m = OktaImportRuleV1{} } func (*OktaImportRuleV1) ProtoMessage() {} func (*OktaImportRuleV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{323} + return fileDescriptor_9198ee693835762e, []int{326} } func (m *OktaImportRuleV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18895,7 +19094,7 @@ func (m *OktaImportRuleMatchV1) Reset() { *m = OktaImportRuleMatchV1{} } func (m *OktaImportRuleMatchV1) String() string { return proto.CompactTextString(m) } func (*OktaImportRuleMatchV1) ProtoMessage() {} func (*OktaImportRuleMatchV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{324} + return fileDescriptor_9198ee693835762e, []int{327} } func (m *OktaImportRuleMatchV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18938,7 +19137,7 @@ type OktaAssignmentV1 struct { func (m *OktaAssignmentV1) Reset() { *m = OktaAssignmentV1{} } func (*OktaAssignmentV1) ProtoMessage() {} func (*OktaAssignmentV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{325} + return fileDescriptor_9198ee693835762e, []int{328} } func (m *OktaAssignmentV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -18992,7 +19191,7 @@ func (m *OktaAssignmentSpecV1) Reset() { *m = OktaAssignmentSpecV1{} } func (m *OktaAssignmentSpecV1) String() string { return proto.CompactTextString(m) } func (*OktaAssignmentSpecV1) ProtoMessage() {} func (*OktaAssignmentSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{326} + return fileDescriptor_9198ee693835762e, []int{329} } func (m *OktaAssignmentSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19036,7 +19235,7 @@ func (m *OktaAssignmentTargetV1) Reset() { *m = OktaAssignmentTargetV1{} func (m *OktaAssignmentTargetV1) String() string { return proto.CompactTextString(m) } func (*OktaAssignmentTargetV1) ProtoMessage() {} func (*OktaAssignmentTargetV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{327} + return fileDescriptor_9198ee693835762e, []int{330} } func (m *OktaAssignmentTargetV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19081,7 +19280,7 @@ type IntegrationV1 struct { func (m *IntegrationV1) Reset() { *m = IntegrationV1{} } func (*IntegrationV1) ProtoMessage() {} func (*IntegrationV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{328} + return fileDescriptor_9198ee693835762e, []int{331} } func (m *IntegrationV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19126,7 +19325,7 @@ func (m *IntegrationSpecV1) Reset() { *m = IntegrationSpecV1{} } func (m *IntegrationSpecV1) String() string { return proto.CompactTextString(m) } func (*IntegrationSpecV1) ProtoMessage() {} func (*IntegrationSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{329} + return fileDescriptor_9198ee693835762e, []int{332} } func (m *IntegrationSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19233,7 +19432,7 @@ func (m *AWSOIDCIntegrationSpecV1) Reset() { *m = AWSOIDCIntegrationSpec func (m *AWSOIDCIntegrationSpecV1) String() string { return proto.CompactTextString(m) } func (*AWSOIDCIntegrationSpecV1) ProtoMessage() {} func (*AWSOIDCIntegrationSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{330} + return fileDescriptor_9198ee693835762e, []int{333} } func (m *AWSOIDCIntegrationSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19279,7 +19478,7 @@ func (m *AzureOIDCIntegrationSpecV1) Reset() { *m = AzureOIDCIntegration func (m *AzureOIDCIntegrationSpecV1) String() string { return proto.CompactTextString(m) } func (*AzureOIDCIntegrationSpecV1) ProtoMessage() {} func (*AzureOIDCIntegrationSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{331} + return fileDescriptor_9198ee693835762e, []int{334} } func (m *AzureOIDCIntegrationSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19340,7 +19539,7 @@ func (m *HeadlessAuthentication) Reset() { *m = HeadlessAuthentication{} func (m *HeadlessAuthentication) String() string { return proto.CompactTextString(m) } func (*HeadlessAuthentication) ProtoMessage() {} func (*HeadlessAuthentication) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{332} + return fileDescriptor_9198ee693835762e, []int{335} } func (m *HeadlessAuthentication) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19397,7 +19596,7 @@ func (m *WatchKind) Reset() { *m = WatchKind{} } func (m *WatchKind) String() string { return proto.CompactTextString(m) } func (*WatchKind) ProtoMessage() {} func (*WatchKind) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{333} + return fileDescriptor_9198ee693835762e, []int{336} } func (m *WatchKind) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19447,7 +19646,7 @@ func (m *WatchStatusV1) Reset() { *m = WatchStatusV1{} } func (m *WatchStatusV1) String() string { return proto.CompactTextString(m) } func (*WatchStatusV1) ProtoMessage() {} func (*WatchStatusV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{334} + return fileDescriptor_9198ee693835762e, []int{337} } func (m *WatchStatusV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19488,7 +19687,7 @@ func (m *WatchStatusSpecV1) Reset() { *m = WatchStatusSpecV1{} } func (m *WatchStatusSpecV1) String() string { return proto.CompactTextString(m) } func (*WatchStatusSpecV1) ProtoMessage() {} func (*WatchStatusSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{335} + return fileDescriptor_9198ee693835762e, []int{338} } func (m *WatchStatusSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19538,7 +19737,7 @@ func (m *ServerInfoV1) Reset() { *m = ServerInfoV1{} } func (m *ServerInfoV1) String() string { return proto.CompactTextString(m) } func (*ServerInfoV1) ProtoMessage() {} func (*ServerInfoV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{336} + return fileDescriptor_9198ee693835762e, []int{339} } func (m *ServerInfoV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19580,7 +19779,7 @@ func (m *ServerInfoSpecV1) Reset() { *m = ServerInfoSpecV1{} } func (m *ServerInfoSpecV1) String() string { return proto.CompactTextString(m) } func (*ServerInfoSpecV1) ProtoMessage() {} func (*ServerInfoSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{337} + return fileDescriptor_9198ee693835762e, []int{340} } func (m *ServerInfoSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19637,7 +19836,7 @@ func (m *JamfSpecV1) Reset() { *m = JamfSpecV1{} } func (m *JamfSpecV1) String() string { return proto.CompactTextString(m) } func (*JamfSpecV1) ProtoMessage() {} func (*JamfSpecV1) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{338} + return fileDescriptor_9198ee693835762e, []int{341} } func (m *JamfSpecV1) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19702,7 +19901,7 @@ func (m *JamfInventoryEntry) Reset() { *m = JamfInventoryEntry{} } func (m *JamfInventoryEntry) String() string { return proto.CompactTextString(m) } func (*JamfInventoryEntry) ProtoMessage() {} func (*JamfInventoryEntry) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{339} + return fileDescriptor_9198ee693835762e, []int{342} } func (m *JamfInventoryEntry) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19759,7 +19958,7 @@ type MessageWithHeader struct { func (m *MessageWithHeader) Reset() { *m = MessageWithHeader{} } func (*MessageWithHeader) ProtoMessage() {} func (*MessageWithHeader) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{340} + return fileDescriptor_9198ee693835762e, []int{343} } func (m *MessageWithHeader) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19823,7 +20022,7 @@ func (m *AWSMatcher) Reset() { *m = AWSMatcher{} } func (m *AWSMatcher) String() string { return proto.CompactTextString(m) } func (*AWSMatcher) ProtoMessage() {} func (*AWSMatcher) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{341} + return fileDescriptor_9198ee693835762e, []int{344} } func (m *AWSMatcher) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19868,7 +20067,7 @@ func (m *AssumeRole) Reset() { *m = AssumeRole{} } func (m *AssumeRole) String() string { return proto.CompactTextString(m) } func (*AssumeRole) ProtoMessage() {} func (*AssumeRole) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{342} + return fileDescriptor_9198ee693835762e, []int{345} } func (m *AssumeRole) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19930,7 +20129,7 @@ func (m *InstallerParams) Reset() { *m = InstallerParams{} } func (m *InstallerParams) String() string { return proto.CompactTextString(m) } func (*InstallerParams) ProtoMessage() {} func (*InstallerParams) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{343} + return fileDescriptor_9198ee693835762e, []int{346} } func (m *InstallerParams) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -19973,7 +20172,7 @@ func (m *AWSSSM) Reset() { *m = AWSSSM{} } func (m *AWSSSM) String() string { return proto.CompactTextString(m) } func (*AWSSSM) ProtoMessage() {} func (*AWSSSM) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{344} + return fileDescriptor_9198ee693835762e, []int{347} } func (m *AWSSSM) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20016,7 +20215,7 @@ func (m *AzureInstallerParams) Reset() { *m = AzureInstallerParams{} } func (m *AzureInstallerParams) String() string { return proto.CompactTextString(m) } func (*AzureInstallerParams) ProtoMessage() {} func (*AzureInstallerParams) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{345} + return fileDescriptor_9198ee693835762e, []int{348} } func (m *AzureInstallerParams) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20070,7 +20269,7 @@ func (m *AzureMatcher) Reset() { *m = AzureMatcher{} } func (m *AzureMatcher) String() string { return proto.CompactTextString(m) } func (*AzureMatcher) ProtoMessage() {} func (*AzureMatcher) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{346} + return fileDescriptor_9198ee693835762e, []int{349} } func (m *AzureMatcher) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20125,7 +20324,7 @@ func (m *GCPMatcher) Reset() { *m = GCPMatcher{} } func (m *GCPMatcher) String() string { return proto.CompactTextString(m) } func (*GCPMatcher) ProtoMessage() {} func (*GCPMatcher) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{347} + return fileDescriptor_9198ee693835762e, []int{350} } func (m *GCPMatcher) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20171,7 +20370,7 @@ func (m *KubernetesMatcher) Reset() { *m = KubernetesMatcher{} } func (m *KubernetesMatcher) String() string { return proto.CompactTextString(m) } func (*KubernetesMatcher) ProtoMessage() {} func (*KubernetesMatcher) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{348} + return fileDescriptor_9198ee693835762e, []int{351} } func (m *KubernetesMatcher) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20213,7 +20412,7 @@ func (m *OktaOptions) Reset() { *m = OktaOptions{} } func (m *OktaOptions) String() string { return proto.CompactTextString(m) } func (*OktaOptions) ProtoMessage() {} func (*OktaOptions) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{349} + return fileDescriptor_9198ee693835762e, []int{352} } func (m *OktaOptions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20255,7 +20454,7 @@ func (m *AccessGraphSync) Reset() { *m = AccessGraphSync{} } func (m *AccessGraphSync) String() string { return proto.CompactTextString(m) } func (*AccessGraphSync) ProtoMessage() {} func (*AccessGraphSync) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{350} + return fileDescriptor_9198ee693835762e, []int{353} } func (m *AccessGraphSync) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20301,7 +20500,7 @@ func (m *AccessGraphAWSSync) Reset() { *m = AccessGraphAWSSync{} } func (m *AccessGraphAWSSync) String() string { return proto.CompactTextString(m) } func (*AccessGraphAWSSync) ProtoMessage() {} func (*AccessGraphAWSSync) Descriptor() ([]byte, []int) { - return fileDescriptor_9198ee693835762e, []int{351} + return fileDescriptor_9198ee693835762e, []int{354} } func (m *AccessGraphAWSSync) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -20676,6 +20875,9 @@ func init() { proto.RegisterType((*PluginDatadogAccessSettings)(nil), "types.PluginDatadogAccessSettings") proto.RegisterType((*PluginAWSICSettings)(nil), "types.PluginAWSICSettings") proto.RegisterType((*AWSICProvisioningSpec)(nil), "types.AWSICProvisioningSpec") + proto.RegisterType((*PluginEmailSettings)(nil), "types.PluginEmailSettings") + proto.RegisterType((*MailgunSpec)(nil), "types.MailgunSpec") + proto.RegisterType((*SMTPSpec)(nil), "types.SMTPSpec") proto.RegisterType((*PluginBootstrapCredentialsV1)(nil), "types.PluginBootstrapCredentialsV1") proto.RegisterType((*PluginIdSecretCredential)(nil), "types.PluginIdSecretCredential") proto.RegisterType((*PluginOAuth2AuthorizationCodeCredentials)(nil), "types.PluginOAuth2AuthorizationCodeCredentials") @@ -20751,1822 +20953,1831 @@ func init() { func init() { proto.RegisterFile("teleport/legacy/types/types.proto", fileDescriptor_9198ee693835762e) } var fileDescriptor_9198ee693835762e = []byte{ - // 29031 bytes of a gzipped FileDescriptorProto + // 29184 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6b, 0x70, 0x1c, 0x49, 0x7a, 0x20, 0x36, 0xdd, 0x8d, 0x47, 0xe3, 0xc3, 0xab, 0x91, 0x00, 0x49, 0x10, 0x33, 0x64, 0x73, 0x6a, 0x66, 0x38, 0xe4, 0xec, 0x0c, 0xb9, 0x04, 0x77, 0xb8, 0x3b, 0x3b, 0xaf, 0x6d, 0x3c, 0x48, 0x36, 0x09, 0x82, 0xd8, 0x6a, 0x90, 0xdc, 0xd1, 0x3e, 0x6a, 0x0b, 0xdd, 0x09, 0xa0, 0x86, 0xdd, 0x5d, 0xbd, 0x55, 0xd5, 0x24, 0xb1, 0xba, 0xf3, 0x49, 0x77, 0xd2, 0xc9, 0x0a, 0x59, 0xaf, 0xb3, - 0x74, 0xda, 0x73, 0xe8, 0x64, 0x85, 0xec, 0xb3, 0x15, 0xe7, 0x38, 0x85, 0x2d, 0x59, 0x61, 0xfb, - 0x14, 0xd6, 0x49, 0x17, 0x0a, 0x59, 0xa1, 0x70, 0x9c, 0x14, 0xb6, 0xfc, 0x5a, 0x2b, 0x20, 0xcb, - 0xf2, 0x0f, 0x1b, 0x11, 0x8e, 0x90, 0x7c, 0x11, 0x7e, 0xec, 0x85, 0xee, 0x1c, 0xf9, 0xe5, 0x97, - 0x55, 0x99, 0xd5, 0xd5, 0x40, 0x63, 0x86, 0xab, 0x13, 0x27, 0xf4, 0x87, 0x44, 0x7f, 0xf9, 0x7d, - 0x5f, 0x56, 0xbe, 0xbf, 0xfc, 0xf2, 0x7b, 0xc0, 0x8b, 0x11, 0x6f, 0xf2, 0x8e, 0x1f, 0x44, 0x97, - 0x9b, 0x7c, 0xc7, 0xad, 0xef, 0x5d, 0x8e, 0xf6, 0x3a, 0x3c, 0x94, 0xff, 0x5e, 0xea, 0x04, 0x7e, - 0xe4, 0xb3, 0x61, 0xfc, 0xb1, 0x30, 0xb7, 0xe3, 0xef, 0xf8, 0x08, 0xb9, 0x2c, 0xfe, 0x92, 0x85, - 0x0b, 0x67, 0x77, 0x7c, 0x7f, 0xa7, 0xc9, 0x2f, 0xe3, 0xaf, 0xad, 0xee, 0xf6, 0xe5, 0x46, 0x37, - 0x70, 0x23, 0xcf, 0x6f, 0x53, 0x79, 0x39, 0x5d, 0x1e, 0x79, 0x2d, 0x1e, 0x46, 0x6e, 0xab, 0xd3, - 0x8f, 0xc1, 0xe3, 0xc0, 0xed, 0x74, 0x78, 0x40, 0xb5, 0x2f, 0x5c, 0x8c, 0x3f, 0xd0, 0x8d, 0x22, - 0x41, 0x29, 0x98, 0x5f, 0x7e, 0x74, 0x45, 0xff, 0x49, 0xa8, 0x6f, 0x64, 0xb7, 0x45, 0x31, 0x4c, - 0x71, 0xb6, 0x7e, 0xae, 0x00, 0x63, 0xb7, 0x39, 0xef, 0x54, 0x9a, 0xde, 0x23, 0xce, 0x5e, 0x82, - 0xa1, 0x75, 0xb7, 0xc5, 0xe7, 0x73, 0xe7, 0x72, 0x17, 0xc6, 0x96, 0xa6, 0x0f, 0xf6, 0xcb, 0xe3, - 0x21, 0x0f, 0x1e, 0xf1, 0xc0, 0x69, 0xbb, 0x2d, 0x6e, 0x63, 0x21, 0xfb, 0x14, 0x8c, 0x89, 0xff, - 0xc3, 0x8e, 0x5b, 0xe7, 0xf3, 0x79, 0xc4, 0x9c, 0x3c, 0xd8, 0x2f, 0x8f, 0xb5, 0x15, 0xd0, 0x4e, - 0xca, 0x59, 0x15, 0x46, 0x57, 0x9f, 0x74, 0xbc, 0x80, 0x87, 0xf3, 0x43, 0xe7, 0x72, 0x17, 0xc6, - 0x17, 0x17, 0x2e, 0xc9, 0xb6, 0x5e, 0x52, 0x6d, 0xbd, 0xb4, 0xa9, 0x3a, 0x63, 0x69, 0xf6, 0x77, - 0xf6, 0xcb, 0xcf, 0x1d, 0xec, 0x97, 0x47, 0xb9, 0x24, 0xf9, 0x89, 0x3f, 0x2a, 0xe7, 0x6c, 0x45, - 0xcf, 0xde, 0x81, 0xa1, 0xcd, 0xbd, 0x0e, 0x9f, 0x1f, 0x3b, 0x97, 0xbb, 0x30, 0xb5, 0x78, 0xf6, - 0x92, 0x1c, 0x9e, 0xf8, 0xe3, 0x93, 0xbf, 0x04, 0xd6, 0x52, 0xf1, 0x60, 0xbf, 0x3c, 0x24, 0x50, - 0x6c, 0xa4, 0x62, 0x6f, 0xc0, 0xc8, 0x4d, 0x3f, 0x8c, 0xaa, 0x2b, 0xf3, 0x80, 0x9f, 0x7c, 0xe2, - 0x60, 0xbf, 0x3c, 0xb3, 0xeb, 0x87, 0x91, 0xe3, 0x35, 0x5e, 0xf7, 0x5b, 0x5e, 0xc4, 0x5b, 0x9d, - 0x68, 0xcf, 0x26, 0x24, 0xeb, 0x09, 0x4c, 0x1a, 0xfc, 0xd8, 0x38, 0x8c, 0xde, 0x5b, 0xbf, 0xbd, - 0x7e, 0xf7, 0xc1, 0x7a, 0xe9, 0x39, 0x56, 0x84, 0xa1, 0xf5, 0xbb, 0x2b, 0xab, 0xa5, 0x1c, 0x1b, - 0x85, 0x42, 0x65, 0x63, 0xa3, 0x94, 0x67, 0x13, 0x50, 0x5c, 0xa9, 0x6c, 0x56, 0x96, 0x2a, 0xb5, - 0xd5, 0x52, 0x81, 0xcd, 0xc2, 0xf4, 0x83, 0xea, 0xfa, 0xca, 0xdd, 0x07, 0x35, 0x67, 0x65, 0xb5, - 0x76, 0x7b, 0xf3, 0xee, 0x46, 0x69, 0x88, 0x4d, 0x01, 0xdc, 0xbe, 0xb7, 0xb4, 0x6a, 0xaf, 0xaf, - 0x6e, 0xae, 0xd6, 0x4a, 0xc3, 0x6c, 0x0e, 0x4a, 0x8a, 0xc4, 0xa9, 0xad, 0xda, 0xf7, 0xab, 0xcb, - 0xab, 0xa5, 0x91, 0x5b, 0x43, 0xc5, 0x42, 0x69, 0xc8, 0x1e, 0x5d, 0xe3, 0x6e, 0xc8, 0xab, 0x2b, - 0xd6, 0xbf, 0x57, 0x80, 0xe2, 0x1d, 0x1e, 0xb9, 0x0d, 0x37, 0x72, 0xd9, 0x0b, 0xc6, 0xf8, 0x60, - 0x13, 0xb5, 0x81, 0x79, 0xa9, 0x77, 0x60, 0x86, 0x0f, 0xf6, 0xcb, 0xb9, 0x37, 0xf4, 0x01, 0x79, - 0x1b, 0xc6, 0x57, 0x78, 0x58, 0x0f, 0xbc, 0x8e, 0x98, 0x34, 0xf3, 0x05, 0x44, 0x3b, 0x7d, 0xb0, - 0x5f, 0x3e, 0xd1, 0x48, 0xc0, 0x5a, 0x87, 0xe8, 0xd8, 0xac, 0x0a, 0x23, 0x6b, 0xee, 0x16, 0x6f, - 0x86, 0xf3, 0xc3, 0xe7, 0x0a, 0x17, 0xc6, 0x17, 0x9f, 0xa7, 0x41, 0x50, 0x1f, 0x78, 0x49, 0x96, - 0xae, 0xb6, 0xa3, 0x60, 0x6f, 0x69, 0xee, 0x60, 0xbf, 0x5c, 0x6a, 0x22, 0x40, 0xef, 0x60, 0x89, - 0xc2, 0x6a, 0xc9, 0xc4, 0x18, 0x39, 0x72, 0x62, 0x9c, 0xf9, 0x9d, 0xfd, 0x72, 0x4e, 0x0c, 0x18, - 0x4d, 0x8c, 0x84, 0x9f, 0x39, 0x45, 0x16, 0xa1, 0x68, 0xf3, 0x47, 0x5e, 0x28, 0x5a, 0x56, 0xc4, - 0x96, 0x9d, 0x3c, 0xd8, 0x2f, 0xb3, 0x80, 0x60, 0xda, 0x67, 0xc4, 0x78, 0x0b, 0x6f, 0xc1, 0xb8, - 0xf6, 0xd5, 0xac, 0x04, 0x85, 0x87, 0x7c, 0x4f, 0xf6, 0xb0, 0x2d, 0xfe, 0x64, 0x73, 0x30, 0xfc, - 0xc8, 0x6d, 0x76, 0xa9, 0x4b, 0x6d, 0xf9, 0xe3, 0xf3, 0xf9, 0xcf, 0xe5, 0x6e, 0x0d, 0x15, 0x47, - 0x4b, 0x45, 0x3b, 0x5f, 0x5d, 0xb1, 0xfe, 0xce, 0x10, 0x14, 0x6d, 0x5f, 0x2e, 0x44, 0x76, 0x11, - 0x86, 0x6b, 0x91, 0x1b, 0xa9, 0x61, 0x9a, 0x3d, 0xd8, 0x2f, 0x4f, 0x8b, 0x45, 0xca, 0xb5, 0xfa, - 0x25, 0x86, 0x40, 0xdd, 0xd8, 0x75, 0x43, 0x35, 0x5c, 0x88, 0xda, 0x11, 0x00, 0x1d, 0x15, 0x31, - 0xd8, 0x79, 0x18, 0xba, 0xe3, 0x37, 0x38, 0x8d, 0x18, 0x3b, 0xd8, 0x2f, 0x4f, 0xb5, 0xfc, 0x86, - 0x8e, 0x88, 0xe5, 0xec, 0x75, 0x18, 0x5b, 0xee, 0x06, 0x01, 0x6f, 0x8b, 0xb9, 0x3e, 0x84, 0xc8, - 0x53, 0x07, 0xfb, 0x65, 0xa8, 0x4b, 0xa0, 0xe3, 0x35, 0xec, 0x04, 0x41, 0x0c, 0x43, 0x2d, 0x72, - 0x83, 0x88, 0x37, 0xe6, 0x87, 0x07, 0x1a, 0x06, 0xb1, 0x3e, 0x67, 0x42, 0x49, 0x92, 0x1e, 0x06, - 0xe2, 0xc4, 0x6e, 0xc2, 0xf8, 0x8d, 0xc0, 0xad, 0xf3, 0x0d, 0x1e, 0x78, 0x7e, 0x03, 0xc7, 0xb7, - 0xb0, 0x74, 0xfe, 0x60, 0xbf, 0x7c, 0x72, 0x47, 0x80, 0x9d, 0x0e, 0xc2, 0x13, 0xea, 0xef, 0xec, - 0x97, 0x8b, 0x2b, 0xb4, 0x65, 0xda, 0x3a, 0x29, 0xfb, 0xba, 0x18, 0x9c, 0x30, 0xc2, 0xae, 0xe5, - 0x8d, 0xf9, 0xd1, 0x23, 0x3f, 0xd1, 0xa2, 0x4f, 0x3c, 0xd9, 0x74, 0xc3, 0xc8, 0x09, 0x24, 0x5d, - 0xea, 0x3b, 0x75, 0x96, 0xec, 0x2e, 0x14, 0x6b, 0xf5, 0x5d, 0xde, 0xe8, 0x36, 0x39, 0x4e, 0x99, - 0xf1, 0xc5, 0x53, 0x34, 0xa9, 0xd5, 0x78, 0xaa, 0xe2, 0xa5, 0x05, 0xe2, 0xcd, 0x42, 0x82, 0xe8, - 0xf3, 0x49, 0x61, 0x7d, 0xbe, 0xf8, 0xad, 0x9f, 0x2f, 0x3f, 0xf7, 0x7d, 0x7f, 0x78, 0xee, 0x39, - 0xeb, 0x3f, 0xcb, 0x43, 0x29, 0xcd, 0x84, 0x6d, 0xc3, 0xe4, 0xbd, 0x4e, 0xc3, 0x8d, 0xf8, 0x72, - 0xd3, 0xe3, 0xed, 0x28, 0xc4, 0x49, 0x72, 0x78, 0x9b, 0x5e, 0xa6, 0x7a, 0xe7, 0xbb, 0x48, 0xe8, - 0xd4, 0x25, 0x65, 0xaa, 0x55, 0x26, 0xdb, 0xa4, 0x9e, 0x1a, 0x6e, 0xe0, 0x21, 0xce, 0xb0, 0xe3, - 0xd5, 0x23, 0xb7, 0xfe, 0x3e, 0xf5, 0x10, 0x5b, 0x9a, 0x40, 0xed, 0xc6, 0xd6, 0x1e, 0xce, 0xcc, - 0xc1, 0x27, 0x90, 0x20, 0xc9, 0x98, 0x40, 0x02, 0x6c, 0xfd, 0x6f, 0x39, 0x98, 0xb2, 0x79, 0xe8, - 0x77, 0x83, 0x3a, 0xbf, 0xc9, 0xdd, 0x06, 0x0f, 0xc4, 0xf4, 0xbf, 0xed, 0xb5, 0x1b, 0xb4, 0xa6, - 0x70, 0xfa, 0x3f, 0xf4, 0xda, 0xfa, 0xd6, 0x8d, 0xe5, 0xec, 0xd3, 0x30, 0x5a, 0xeb, 0x6e, 0x21, - 0x6a, 0x3e, 0xd9, 0x01, 0xc2, 0xee, 0x96, 0x93, 0x42, 0x57, 0x68, 0xec, 0x32, 0x8c, 0xde, 0xe7, - 0x41, 0x98, 0xec, 0x86, 0x78, 0x34, 0x3c, 0x92, 0x20, 0x9d, 0x80, 0xb0, 0xd8, 0x8d, 0x64, 0x47, - 0xa6, 0x43, 0x6d, 0x3a, 0xb5, 0x0f, 0x26, 0x53, 0xa5, 0x45, 0x10, 0x7d, 0xaa, 0x28, 0x2c, 0xeb, - 0x27, 0xf3, 0x50, 0x5a, 0x71, 0x23, 0x77, 0xcb, 0x0d, 0xa9, 0x3f, 0xef, 0x5f, 0x15, 0x7b, 0xbc, - 0xd6, 0x50, 0xdc, 0xe3, 0xc5, 0x97, 0x7f, 0xe4, 0xe6, 0xbd, 0x92, 0x6e, 0xde, 0xb8, 0x38, 0x61, - 0xa9, 0x79, 0x49, 0xa3, 0xde, 0x3d, 0xba, 0x51, 0x25, 0x6a, 0x54, 0x51, 0x35, 0x2a, 0x69, 0x0a, - 0x7b, 0x17, 0x86, 0x6a, 0x1d, 0x5e, 0xa7, 0x4d, 0x44, 0x9d, 0x0b, 0x66, 0xe3, 0x04, 0xc2, 0xfd, - 0xab, 0x4b, 0x13, 0xc4, 0x66, 0x28, 0xec, 0xf0, 0xba, 0x8d, 0x64, 0xda, 0xa2, 0xf9, 0xcf, 0x0b, - 0x30, 0x97, 0x45, 0xa6, 0xb7, 0x63, 0xe4, 0x90, 0x76, 0x5c, 0x80, 0xa2, 0x38, 0xc2, 0xc5, 0xb1, - 0x88, 0xdb, 0xc5, 0xd8, 0xd2, 0x84, 0xf8, 0xe4, 0x5d, 0x82, 0xd9, 0x71, 0x29, 0x7b, 0x29, 0x96, - 0x08, 0x8a, 0x09, 0x3f, 0x92, 0x08, 0x94, 0x1c, 0x20, 0xc6, 0x5a, 0x2d, 0x61, 0x14, 0x1c, 0x92, - 0x6e, 0x51, 0xe0, 0x64, 0xac, 0x03, 0x82, 0x18, 0xc7, 0x8c, 0x3a, 0x14, 0x56, 0xa1, 0xa8, 0x9a, - 0x35, 0x3f, 0x81, 0x8c, 0x66, 0x52, 0x9d, 0x74, 0xff, 0xaa, 0x1c, 0xcc, 0x06, 0xfd, 0xd6, 0xd9, - 0x28, 0x1c, 0x76, 0x15, 0x8a, 0x1b, 0x81, 0xff, 0x64, 0xaf, 0xba, 0x12, 0xce, 0x4f, 0x9e, 0x2b, - 0x5c, 0x18, 0x5b, 0x3a, 0x75, 0xb0, 0x5f, 0x9e, 0xed, 0x08, 0x98, 0xe3, 0x35, 0xf4, 0x93, 0x36, - 0x46, 0xbc, 0x35, 0x54, 0xcc, 0x95, 0xf2, 0xb7, 0x86, 0x8a, 0xf9, 0x52, 0x41, 0x8a, 0x17, 0xb7, - 0x86, 0x8a, 0x43, 0xa5, 0xe1, 0x5b, 0x43, 0xc5, 0x61, 0x14, 0x38, 0xc6, 0x4a, 0x70, 0x6b, 0xa8, - 0x38, 0x5e, 0x9a, 0x30, 0x4e, 0x7b, 0x64, 0x10, 0xf9, 0x75, 0xbf, 0x69, 0x17, 0xee, 0xd9, 0x55, - 0x7b, 0x64, 0xb9, 0xb2, 0xcc, 0x83, 0xc8, 0x2e, 0x54, 0x1e, 0xd4, 0xec, 0xc9, 0x95, 0xbd, 0xb6, - 0xdb, 0xf2, 0xea, 0xf2, 0xe8, 0xb4, 0x0b, 0x37, 0x96, 0x37, 0xac, 0x0a, 0x4c, 0x25, 0x6d, 0x59, - 0xf3, 0xc2, 0x88, 0x5d, 0x86, 0x31, 0x05, 0x11, 0x1b, 0x5d, 0x21, 0xb3, 0xd5, 0x76, 0x82, 0x63, - 0xfd, 0x76, 0x1e, 0x20, 0x29, 0x79, 0x46, 0xd7, 0xc2, 0x67, 0x8d, 0xb5, 0x70, 0x22, 0xbd, 0x16, - 0xfa, 0xae, 0x02, 0xf6, 0x3e, 0x8c, 0x08, 0xb1, 0xa0, 0xab, 0x44, 0xa2, 0x53, 0x69, 0x52, 0x2c, - 0xbc, 0x7f, 0x75, 0x69, 0x8a, 0x88, 0x47, 0x42, 0x84, 0xd8, 0x44, 0xa6, 0x2d, 0xa3, 0x9f, 0x1b, - 0x4d, 0x06, 0x83, 0x16, 0xd0, 0x05, 0x88, 0x07, 0x94, 0x3a, 0x14, 0x57, 0x46, 0x47, 0x0d, 0x72, - 0x5c, 0xca, 0x4e, 0x83, 0x18, 0x70, 0xea, 0xd4, 0xd1, 0x83, 0xfd, 0x72, 0xa1, 0x1b, 0x78, 0x38, - 0x09, 0xd8, 0x65, 0xa0, 0x69, 0x40, 0x1d, 0x28, 0x66, 0xdf, 0x4c, 0xdd, 0x75, 0xea, 0x3c, 0x88, - 0x92, 0x1e, 0x9f, 0xcf, 0xa9, 0xd9, 0xc2, 0x3a, 0x60, 0x4e, 0x95, 0xf9, 0x21, 0x9c, 0x06, 0x17, - 0x32, 0x7b, 0xe5, 0x92, 0x81, 0x2a, 0xc5, 0xc8, 0x73, 0xea, 0x54, 0x6a, 0xc8, 0x32, 0xa7, 0x47, - 0xa4, 0x34, 0x2b, 0x60, 0x57, 0x41, 0xcc, 0x50, 0xea, 0x7d, 0xa0, 0x7a, 0x2a, 0x0f, 0x6a, 0x4b, - 0x27, 0x88, 0xd3, 0xa4, 0xfb, 0x58, 0x27, 0x17, 0xd8, 0xec, 0x6d, 0x10, 0x53, 0x98, 0xfa, 0x9d, - 0x11, 0xd1, 0x8d, 0xe5, 0x8d, 0xe5, 0xa6, 0xdf, 0x6d, 0xd4, 0xbe, 0xb8, 0x96, 0x10, 0xef, 0xd4, - 0x3b, 0x3a, 0xf1, 0x8d, 0xe5, 0x0d, 0xf6, 0x36, 0x0c, 0x57, 0xbe, 0xd9, 0x0d, 0x38, 0xc9, 0x27, - 0x13, 0xaa, 0x4e, 0x01, 0x5b, 0x3a, 0x45, 0x84, 0xd3, 0xae, 0xf8, 0xa9, 0xcb, 0x75, 0x58, 0x2e, - 0x6a, 0xde, 0x5c, 0xab, 0x91, 0xec, 0xc1, 0x52, 0xdd, 0xb2, 0xb9, 0xa6, 0x7d, 0x76, 0x64, 0xb4, - 0x5a, 0x50, 0xb1, 0xcb, 0x90, 0xaf, 0xac, 0xe0, 0x8d, 0x68, 0x7c, 0x71, 0x4c, 0x55, 0xbb, 0xb2, - 0x34, 0x47, 0x24, 0x13, 0xae, 0xbe, 0x0c, 0xf2, 0x95, 0x15, 0xb6, 0x04, 0xc3, 0x77, 0xf6, 0x6a, - 0x5f, 0x5c, 0xa3, 0xcd, 0x6c, 0x56, 0xcd, 0x6b, 0x01, 0xbb, 0x8b, 0xcb, 0x3e, 0x4c, 0xbe, 0xb8, - 0xb5, 0x17, 0x7e, 0xa3, 0xa9, 0x7f, 0x31, 0xa2, 0xb1, 0x0d, 0x18, 0xab, 0x34, 0x5a, 0x5e, 0xfb, - 0x5e, 0xc8, 0x83, 0xf9, 0x71, 0xe4, 0x33, 0x9f, 0xfa, 0xee, 0xb8, 0x7c, 0x69, 0xfe, 0x60, 0xbf, - 0x3c, 0xe7, 0x8a, 0x9f, 0x4e, 0x37, 0xe4, 0x81, 0xc6, 0x2d, 0x61, 0xc2, 0x36, 0x00, 0xee, 0xf8, - 0xed, 0x1d, 0xbf, 0x12, 0x35, 0xdd, 0x30, 0xb5, 0x3d, 0x26, 0x05, 0xb1, 0xf8, 0x70, 0xa2, 0x25, - 0x60, 0x8e, 0x2b, 0x80, 0x1a, 0x43, 0x8d, 0x07, 0xbb, 0x0e, 0x23, 0x77, 0x03, 0xb7, 0xde, 0xe4, - 0xf3, 0x93, 0xc8, 0x6d, 0x8e, 0xb8, 0x49, 0xa0, 0x6a, 0xe9, 0x3c, 0x31, 0x2c, 0xf9, 0x08, 0xd6, - 0xaf, 0x29, 0x12, 0x71, 0xe1, 0x01, 0xb0, 0xde, 0x39, 0x99, 0x71, 0x49, 0xf8, 0x94, 0x7e, 0x49, - 0x48, 0x16, 0xfd, 0xb2, 0xdf, 0x6a, 0xb9, 0xed, 0x06, 0xd2, 0xde, 0x5f, 0xd4, 0xee, 0x0e, 0xd6, - 0x37, 0x60, 0xa6, 0xa7, 0xb3, 0x8e, 0xb8, 0xdf, 0xbd, 0x07, 0xd3, 0x2b, 0x7c, 0xdb, 0xed, 0x36, - 0xa3, 0xf8, 0x24, 0x91, 0x4b, 0x14, 0x6f, 0x5a, 0x0d, 0x59, 0xe4, 0xa8, 0xe3, 0xc3, 0x4e, 0x23, - 0x5b, 0xef, 0xc2, 0xa4, 0xd1, 0x7c, 0x71, 0x55, 0xa8, 0x74, 0x1b, 0x5e, 0x84, 0x03, 0x99, 0x4b, - 0xae, 0x0a, 0xae, 0x00, 0xe2, 0x70, 0xd9, 0x09, 0x82, 0xf5, 0xef, 0xeb, 0xd2, 0x0a, 0xed, 0x44, - 0xe2, 0x5a, 0x4d, 0xfb, 0x41, 0x2e, 0x91, 0x9d, 0x7a, 0xf6, 0x83, 0x78, 0x37, 0xb8, 0x28, 0xd7, - 0x66, 0xbe, 0x67, 0x6d, 0x8e, 0xd3, 0x48, 0x14, 0xdc, 0xc7, 0xa1, 0x5c, 0x91, 0xf1, 0x4c, 0x2d, - 0x7c, 0xf4, 0x99, 0xfa, 0x3e, 0x4c, 0xdc, 0x71, 0xdb, 0xee, 0x0e, 0x6f, 0x88, 0x16, 0xc8, 0xbd, - 0x67, 0x6c, 0xe9, 0xf9, 0x83, 0xfd, 0xf2, 0xa9, 0x96, 0x84, 0x63, 0x2b, 0xf5, 0x49, 0x64, 0x10, - 0xb0, 0x2b, 0x6a, 0x65, 0x0f, 0x67, 0xac, 0xec, 0x49, 0xaa, 0x7d, 0x18, 0x57, 0x36, 0xad, 0x67, - 0xeb, 0x37, 0xc6, 0xb0, 0x8d, 0xec, 0x75, 0x18, 0xb1, 0xf9, 0x8e, 0x38, 0x6a, 0x72, 0xc9, 0x20, - 0x05, 0x08, 0xd1, 0x3b, 0x46, 0xe2, 0xa0, 0x9c, 0xc1, 0x1b, 0xe1, 0xae, 0xb7, 0x1d, 0x51, 0xef, - 0xc4, 0x72, 0x06, 0x81, 0x35, 0x39, 0x83, 0x20, 0xe6, 0x75, 0x56, 0xc2, 0xc4, 0xee, 0x67, 0xaf, - 0xd4, 0xa8, 0xd3, 0x54, 0x0f, 0xdb, 0x2b, 0xda, 0x36, 0x12, 0x18, 0x52, 0x82, 0xc0, 0x66, 0xd7, - 0x60, 0xac, 0x52, 0xaf, 0xfb, 0x5d, 0xed, 0xce, 0x28, 0xd7, 0xad, 0x04, 0x9a, 0x2a, 0x92, 0x04, - 0x95, 0xd5, 0x60, 0x7c, 0x55, 0x5c, 0xb4, 0xbc, 0x65, 0xb7, 0xbe, 0xab, 0x3a, 0x49, 0xed, 0x61, - 0x5a, 0x49, 0xb2, 0x72, 0x39, 0x02, 0xeb, 0x02, 0xa8, 0x2b, 0x19, 0x34, 0x5c, 0xb6, 0x09, 0xe3, - 0x35, 0x5e, 0x0f, 0x78, 0x54, 0x8b, 0xfc, 0x80, 0xa7, 0xb6, 0x64, 0xad, 0x64, 0xe9, 0xac, 0xba, - 0xeb, 0x85, 0x08, 0x74, 0x42, 0x01, 0xd5, 0xb9, 0x6a, 0xc8, 0x52, 0x68, 0x6f, 0xf9, 0xc1, 0xde, - 0xca, 0x12, 0x6d, 0xd3, 0xc9, 0x99, 0x2e, 0xc1, 0xba, 0xd0, 0x2e, 0x20, 0x8d, 0x2d, 0x53, 0x68, - 0x97, 0x58, 0x38, 0x52, 0x2b, 0x35, 0x94, 0xad, 0x68, 0xd3, 0x9e, 0x4e, 0x7a, 0x19, 0xc1, 0xda, - 0x48, 0x35, 0x42, 0x94, 0xcc, 0x8c, 0x91, 0x22, 0x2c, 0xd6, 0x01, 0xa6, 0x46, 0x4d, 0x0a, 0xba, - 0x4d, 0x1e, 0x86, 0xb4, 0x97, 0x9f, 0x4e, 0x0d, 0x7e, 0x82, 0xb0, 0xf4, 0x0a, 0x31, 0x3f, 0xa3, - 0xa6, 0x01, 0xdd, 0xd3, 0x44, 0xa1, 0x56, 0x4f, 0x06, 0x6f, 0xf6, 0x16, 0xc0, 0xea, 0x93, 0x88, - 0x07, 0x6d, 0xb7, 0x19, 0xeb, 0xc1, 0x50, 0xf5, 0xc3, 0x09, 0x6a, 0x0e, 0xb4, 0x86, 0xcc, 0x96, - 0x61, 0xb2, 0x12, 0x86, 0xdd, 0x16, 0xb7, 0xfd, 0x26, 0xaf, 0xd8, 0xeb, 0xb8, 0xef, 0x8f, 0x2d, - 0x9d, 0x39, 0xd8, 0x2f, 0x9f, 0x76, 0xb1, 0xc0, 0x09, 0xfc, 0x26, 0x77, 0xdc, 0x40, 0x9f, 0xdd, - 0x26, 0x0d, 0xbb, 0x0b, 0x70, 0xb7, 0xc3, 0xdb, 0x35, 0xee, 0x06, 0xf5, 0xdd, 0xd4, 0x36, 0x9f, - 0x14, 0x2c, 0xbd, 0x40, 0x2d, 0x9c, 0xf3, 0x3b, 0xbc, 0x1d, 0x22, 0x4c, 0xff, 0xaa, 0x04, 0x93, - 0x3d, 0x80, 0xe9, 0x6a, 0xe5, 0xce, 0x86, 0xdf, 0xf4, 0xea, 0x7b, 0x24, 0x39, 0x4d, 0xa1, 0x76, - 0xf0, 0x24, 0x71, 0x4d, 0x95, 0xca, 0xed, 0xc9, 0x73, 0x5b, 0x4e, 0x07, 0xa1, 0x0e, 0xc9, 0x4f, - 0x69, 0x2e, 0xec, 0x03, 0x31, 0x07, 0x43, 0x21, 0x0c, 0x6e, 0xba, 0x3b, 0xe1, 0xfc, 0xb4, 0xa1, - 0xed, 0xaa, 0x3c, 0xa8, 0x5d, 0xd2, 0x4a, 0xa5, 0x98, 0xb2, 0x20, 0x27, 0x22, 0x42, 0x9d, 0xc8, - 0xdd, 0x09, 0xcd, 0x89, 0x18, 0x63, 0xb3, 0x5b, 0x00, 0x2b, 0x7e, 0xbd, 0xdb, 0xe2, 0xed, 0x68, - 0x65, 0x69, 0xbe, 0x64, 0x5e, 0x05, 0xe2, 0x82, 0x64, 0x6b, 0x6b, 0xf8, 0x75, 0x63, 0x26, 0x6a, - 0xd4, 0x0b, 0xef, 0x41, 0x29, 0xfd, 0x21, 0xc7, 0x54, 0x60, 0x4d, 0x96, 0xa6, 0xb4, 0xd6, 0xaf, - 0x3e, 0xf1, 0xc2, 0x28, 0xb4, 0xbe, 0xd7, 0x58, 0x81, 0x62, 0x77, 0xb8, 0xcd, 0xf7, 0x36, 0x02, - 0xbe, 0xed, 0x3d, 0xa1, 0xcd, 0x0c, 0x77, 0x87, 0x87, 0x7c, 0xcf, 0xe9, 0x20, 0x54, 0xdf, 0x1d, - 0x62, 0x54, 0xf6, 0x19, 0x28, 0xde, 0xbe, 0x53, 0xbb, 0xcd, 0xf7, 0xaa, 0x2b, 0x74, 0x50, 0x49, - 0xb2, 0x56, 0xe8, 0x08, 0x52, 0x63, 0xae, 0xc5, 0x98, 0xd6, 0x52, 0xb2, 0x13, 0x8a, 0x9a, 0x97, - 0x9b, 0xdd, 0x30, 0xe2, 0x41, 0x75, 0x45, 0xaf, 0xb9, 0x2e, 0x81, 0xa9, 0x7d, 0x29, 0x46, 0xb5, - 0xfe, 0x55, 0x1e, 0x77, 0x41, 0x31, 0xe1, 0xab, 0xed, 0x30, 0x72, 0xdb, 0x75, 0x1e, 0x33, 0xc0, - 0x09, 0xef, 0x11, 0x34, 0x35, 0xe1, 0x13, 0x64, 0xb3, 0xea, 0xfc, 0xc0, 0x55, 0x8b, 0x2a, 0x95, - 0xe6, 0xa2, 0xba, 0xa2, 0xab, 0x57, 0x03, 0x82, 0xa6, 0xaa, 0x4c, 0x90, 0xd9, 0x79, 0x18, 0xad, - 0x56, 0xee, 0x54, 0xba, 0xd1, 0x2e, 0xee, 0xc1, 0x45, 0x29, 0x9f, 0x8b, 0xd9, 0xea, 0x76, 0xa3, - 0x5d, 0x5b, 0x15, 0xb2, 0xcb, 0x78, 0xef, 0x69, 0xf3, 0x48, 0xaa, 0x61, 0xe9, 0xd0, 0x0d, 0x25, - 0x28, 0x75, 0xed, 0x11, 0x20, 0xf6, 0x1a, 0x0c, 0xdf, 0xdf, 0x58, 0xae, 0xae, 0xd0, 0xc5, 0x19, - 0x4f, 0xa2, 0x47, 0x9d, 0xba, 0xf9, 0x25, 0x12, 0x85, 0xad, 0xc2, 0x54, 0x8d, 0xd7, 0xbb, 0x81, - 0x17, 0xed, 0xdd, 0x08, 0xfc, 0x6e, 0x27, 0x9c, 0x1f, 0xc5, 0x3a, 0x70, 0xa5, 0x87, 0x54, 0xe2, - 0xec, 0x60, 0x91, 0x46, 0x9d, 0x22, 0xb2, 0x7e, 0x33, 0x97, 0x6c, 0x93, 0xec, 0xbc, 0x21, 0xd6, - 0xa0, 0xee, 0x46, 0x88, 0x35, 0xba, 0xee, 0x06, 0x05, 0x1c, 0x1b, 0xd8, 0x72, 0x37, 0x8c, 0xfc, - 0xd6, 0x6a, 0xbb, 0xd1, 0xf1, 0xbd, 0x76, 0x84, 0x54, 0xb2, 0xf3, 0xad, 0x83, 0xfd, 0xf2, 0xd9, - 0x3a, 0x96, 0x3a, 0x9c, 0x8a, 0x9d, 0x14, 0x97, 0x0c, 0xea, 0x8f, 0x31, 0x1e, 0xd6, 0xef, 0xe6, - 0x8d, 0xe3, 0x4d, 0x7c, 0x9e, 0xcd, 0x3b, 0x4d, 0xaf, 0x8e, 0x37, 0x7a, 0x6c, 0x68, 0x3c, 0xab, - 0xf0, 0xf3, 0x82, 0xa4, 0x54, 0xf6, 0x90, 0xc9, 0x3b, 0x83, 0x9a, 0x7d, 0x01, 0x26, 0x84, 0xa4, - 0x41, 0x3f, 0xc3, 0xf9, 0x3c, 0x76, 0xf6, 0x0b, 0xa8, 0x85, 0x0b, 0x79, 0x10, 0xb3, 0x31, 0x44, - 0x14, 0x9d, 0x82, 0x35, 0x60, 0x7e, 0x33, 0x70, 0xdb, 0xa1, 0x17, 0xad, 0xb6, 0xeb, 0xc1, 0x1e, - 0x4a, 0x46, 0xab, 0x6d, 0x77, 0xab, 0xc9, 0x1b, 0xd8, 0xdc, 0xe2, 0xd2, 0x85, 0x83, 0xfd, 0xf2, - 0xcb, 0x91, 0xc4, 0x71, 0x78, 0x8c, 0xe4, 0x70, 0x89, 0xa5, 0x71, 0xee, 0xcb, 0x49, 0x48, 0x52, - 0xaa, 0x5b, 0xf1, 0x11, 0x46, 0x0a, 0x09, 0x28, 0x49, 0xc5, 0xa3, 0x21, 0xf6, 0x30, 0xfd, 0x33, - 0x75, 0x02, 0xeb, 0xff, 0xce, 0x25, 0x07, 0x30, 0x7b, 0x07, 0xc6, 0x69, 0xc5, 0x68, 0xf3, 0x02, - 0x77, 0x50, 0xb5, 0xbc, 0x52, 0x23, 0xab, 0xa3, 0x8b, 0x7b, 0x7f, 0x65, 0x79, 0x4d, 0x9b, 0x1b, - 0x78, 0xef, 0x77, 0xeb, 0xcd, 0x34, 0x95, 0x42, 0x13, 0x93, 0x60, 0x73, 0xad, 0x66, 0xf6, 0x0a, - 0x4e, 0x82, 0xa8, 0x19, 0x66, 0x74, 0x83, 0x86, 0xfc, 0xf1, 0x1b, 0xfe, 0x3f, 0xe4, 0xb2, 0xce, - 0x79, 0xb6, 0x04, 0x93, 0x0f, 0xfc, 0xe0, 0x21, 0x8e, 0xaf, 0xd6, 0x09, 0x38, 0xf2, 0x8f, 0x55, - 0x41, 0xba, 0x41, 0x26, 0x89, 0xfe, 0x6d, 0x5a, 0x6f, 0x98, 0xdf, 0x96, 0xe2, 0x60, 0x10, 0x88, - 0x71, 0x88, 0x39, 0xc6, 0xab, 0x03, 0xc7, 0x21, 0xf9, 0x04, 0x63, 0x0a, 0xeb, 0xe8, 0xd6, 0x7f, - 0x99, 0xd3, 0xcf, 0x73, 0xd1, 0xc9, 0x2b, 0x7e, 0xcb, 0xf5, 0xda, 0x5a, 0x73, 0xe4, 0xc3, 0x12, - 0x42, 0xd3, 0x5f, 0xa2, 0x21, 0xb3, 0xab, 0x50, 0x94, 0xbf, 0xe2, 0xbd, 0x16, 0xb5, 0x5a, 0x44, - 0x68, 0x1e, 0x14, 0x0a, 0xb1, 0x67, 0x64, 0x0a, 0xc7, 0x1d, 0x99, 0xdf, 0xc8, 0xe9, 0x47, 0xf1, - 0x47, 0x3d, 0x6c, 0x52, 0x87, 0x4c, 0xfe, 0x38, 0x87, 0xcc, 0xc7, 0x6e, 0xc2, 0xf7, 0xe5, 0x60, - 0x5c, 0xd3, 0x52, 0x88, 0x36, 0x6c, 0x04, 0xfe, 0x87, 0xbc, 0x1e, 0x99, 0x6d, 0xe8, 0x48, 0x60, - 0xaa, 0x0d, 0x31, 0xea, 0xc7, 0x68, 0x83, 0xf5, 0x67, 0x39, 0xba, 0x23, 0x0d, 0xbc, 0xcd, 0x9b, - 0x5b, 0x72, 0xfe, 0x38, 0x47, 0xe4, 0x17, 0x60, 0xd8, 0xe6, 0x0d, 0x2f, 0xa4, 0xfb, 0xcd, 0x8c, - 0x7e, 0x1f, 0xc3, 0x82, 0x44, 0x6e, 0x0a, 0xc4, 0x4f, 0xfd, 0x7c, 0xc3, 0x72, 0x21, 0xc8, 0x56, - 0xc3, 0xeb, 0x4d, 0xfe, 0xc4, 0x93, 0x8b, 0x91, 0x8e, 0x5a, 0x3c, 0xde, 0xbc, 0xd0, 0xd9, 0x16, - 0x25, 0x24, 0x51, 0xeb, 0x0b, 0xcf, 0xa0, 0xb1, 0x3e, 0x00, 0x48, 0xaa, 0x64, 0xb7, 0xa1, 0x44, - 0xb3, 0xc1, 0x6b, 0xef, 0x48, 0x41, 0x8a, 0xfa, 0xa0, 0x7c, 0xb0, 0x5f, 0x7e, 0xbe, 0x1e, 0x97, - 0x91, 0xd4, 0xa9, 0xf1, 0xed, 0x21, 0xb4, 0xfe, 0xc3, 0x3c, 0xe4, 0x2b, 0x38, 0x20, 0xb7, 0xf9, - 0x5e, 0xe4, 0x6e, 0x5d, 0xf7, 0x9a, 0xc6, 0x62, 0x7a, 0x88, 0x50, 0x67, 0xdb, 0x33, 0xd4, 0x15, - 0x1a, 0xb2, 0x58, 0x4c, 0xb7, 0x83, 0xad, 0x37, 0x91, 0x50, 0x5b, 0x4c, 0x0f, 0x83, 0xad, 0x37, - 0xd3, 0x64, 0x31, 0x22, 0xb3, 0x60, 0x44, 0x2e, 0x2c, 0x9a, 0x83, 0x70, 0xb0, 0x5f, 0x1e, 0x91, - 0xeb, 0xcf, 0xa6, 0x12, 0x76, 0x1a, 0x0a, 0xb5, 0x8d, 0x75, 0xda, 0x01, 0x51, 0x2d, 0x18, 0x76, - 0xda, 0xb6, 0x80, 0x89, 0x3a, 0xd7, 0x56, 0x2a, 0x1b, 0xa8, 0x08, 0x18, 0x4e, 0xea, 0x6c, 0x36, - 0xdc, 0x4e, 0x5a, 0x15, 0x10, 0x23, 0xb2, 0x77, 0x61, 0xfc, 0xf6, 0xca, 0xf2, 0x4d, 0x3f, 0x94, - 0xbb, 0xd7, 0x48, 0x32, 0xf9, 0x1f, 0x36, 0xea, 0x0e, 0x6a, 0xe2, 0xd3, 0xc7, 0x80, 0x86, 0x6f, - 0xfd, 0x60, 0x1e, 0xc6, 0x35, 0x3d, 0x19, 0xfb, 0x0c, 0x3d, 0x90, 0xe6, 0x8c, 0x1b, 0x80, 0x86, - 0x21, 0x4a, 0xa5, 0x52, 0xa5, 0xe5, 0x37, 0x38, 0x3d, 0x97, 0x26, 0x0a, 0x8c, 0xfc, 0x20, 0x0a, - 0x8c, 0xb7, 0x00, 0xe4, 0x1c, 0xc0, 0x4f, 0xd6, 0xc4, 0x09, 0xcd, 0x4e, 0x42, 0x1f, 0x97, 0x04, - 0x99, 0xdd, 0x87, 0xd9, 0xcd, 0xa0, 0x1b, 0x46, 0xb5, 0xbd, 0x30, 0xe2, 0x2d, 0xc1, 0x6d, 0xc3, - 0xf7, 0x9b, 0x34, 0xff, 0x5e, 0x3e, 0xd8, 0x2f, 0x9f, 0x8b, 0x44, 0xb1, 0x13, 0x62, 0x39, 0x7e, - 0x80, 0xd3, 0xf1, 0x7d, 0x5d, 0xad, 0x91, 0xc5, 0xc0, 0xb2, 0x61, 0x42, 0x57, 0x8a, 0x88, 0x93, - 0x85, 0x1e, 0x93, 0x48, 0xd5, 0xad, 0x9d, 0x2c, 0xf4, 0x95, 0xbd, 0x8f, 0x5b, 0x26, 0x89, 0xf5, - 0x19, 0x5d, 0x21, 0x37, 0xe8, 0xc2, 0xb6, 0xfe, 0x66, 0x2e, 0xd9, 0x46, 0xee, 0x5f, 0x61, 0x6f, - 0xc3, 0x88, 0x7c, 0xbc, 0xa3, 0x37, 0xce, 0x13, 0xf1, 0xa5, 0x56, 0x7f, 0xd9, 0x93, 0x9a, 0xf0, - 0xdf, 0x97, 0x0f, 0xfc, 0xcf, 0xd9, 0x44, 0x12, 0x2b, 0xd1, 0x4d, 0x7d, 0x9a, 0xe2, 0x8e, 0xea, - 0xe2, 0x2b, 0x59, 0x4a, 0x74, 0xeb, 0xb7, 0x86, 0x60, 0xca, 0x44, 0xd3, 0x5f, 0xf8, 0x72, 0x03, - 0xbd, 0xf0, 0x7d, 0x01, 0x8a, 0xa2, 0x3f, 0xbc, 0x3a, 0x57, 0x12, 0xd9, 0xcb, 0xf8, 0xb4, 0x40, - 0x30, 0xe3, 0xe5, 0x1a, 0xe4, 0x70, 0x88, 0x3b, 0xae, 0x1d, 0x53, 0xb1, 0x45, 0xed, 0x19, 0xaa, - 0x90, 0x08, 0x29, 0xea, 0x19, 0x4a, 0x5f, 0x0f, 0xf1, 0x83, 0xd4, 0x1b, 0x30, 0x22, 0xe4, 0xfb, - 0x58, 0x05, 0x83, 0x5f, 0x29, 0x44, 0xff, 0x94, 0x89, 0x8a, 0x44, 0x62, 0x0f, 0xa0, 0xb8, 0xe6, - 0x86, 0x51, 0x8d, 0xf3, 0xf6, 0x00, 0x6f, 0xf7, 0x65, 0xea, 0xaa, 0x59, 0x7c, 0x18, 0x0f, 0x39, - 0x6f, 0xa7, 0x1e, 0x5f, 0x63, 0x66, 0xec, 0xab, 0x00, 0xcb, 0x7e, 0x3b, 0x0a, 0xfc, 0xe6, 0x9a, - 0xbf, 0x33, 0x3f, 0x82, 0x77, 0xdf, 0xb3, 0xa9, 0x01, 0x48, 0x10, 0xe4, 0xf5, 0x37, 0x56, 0xf0, - 0xd4, 0x65, 0x81, 0xd3, 0xf4, 0x77, 0xf4, 0x75, 0x90, 0xe0, 0xb3, 0xeb, 0x50, 0x52, 0x8a, 0x85, - 0x7b, 0x9d, 0x9d, 0x00, 0x27, 0xc8, 0x68, 0x22, 0x79, 0xf0, 0x27, 0x91, 0xd3, 0x25, 0xb8, 0xbe, - 0x53, 0xa6, 0x69, 0xd8, 0x57, 0xe0, 0x54, 0x1a, 0xa6, 0x46, 0xb9, 0x98, 0xc8, 0xe4, 0x3a, 0xbb, - 0x8c, 0x79, 0xdf, 0x8f, 0x85, 0xf5, 0x9d, 0x3c, 0x9c, 0xea, 0xd3, 0x58, 0xb1, 0x1e, 0xf0, 0xb8, - 0xd6, 0xd6, 0x43, 0xea, 0x94, 0x96, 0x36, 0x47, 0xe7, 0x20, 0x4f, 0x07, 0xdc, 0xd0, 0x52, 0xe9, - 0x60, 0xbf, 0x3c, 0x61, 0x8c, 0x63, 0xbe, 0xba, 0xc2, 0x6e, 0xc1, 0x90, 0x18, 0xa2, 0x01, 0x9e, - 0xce, 0x95, 0x4e, 0x69, 0x2a, 0xf2, 0xf4, 0xe9, 0x83, 0x43, 0x87, 0x3c, 0xd8, 0x67, 0xa0, 0xb0, - 0xb9, 0xb9, 0x86, 0x73, 0xa7, 0x80, 0x6d, 0x9f, 0x8c, 0xa2, 0xa6, 0x31, 0x55, 0x27, 0x05, 0xed, - 0xa5, 0xd8, 0xd2, 0x42, 0xa0, 0xb3, 0x2f, 0xa5, 0x4c, 0x7a, 0x5e, 0x3b, 0x7c, 0xa0, 0x07, 0xb7, - 0xf0, 0xf9, 0x18, 0x86, 0x35, 0xd6, 0xcf, 0xe6, 0x93, 0x35, 0x7c, 0xdd, 0x6b, 0x46, 0x3c, 0x60, - 0x0b, 0x72, 0x49, 0x26, 0xc2, 0x99, 0x1d, 0xff, 0x66, 0xf3, 0xc9, 0xfa, 0x96, 0xac, 0xe2, 0x85, - 0xfc, 0x9a, 0xb6, 0x90, 0x0b, 0xb8, 0x90, 0xa7, 0xfa, 0x2e, 0xd9, 0xd7, 0x32, 0xe6, 0x25, 0x2e, - 0xc4, 0x8c, 0xb9, 0xf7, 0x32, 0x4c, 0xae, 0xfb, 0xab, 0x4f, 0xa2, 0x18, 0x51, 0x2c, 0xc0, 0xa2, - 0x6d, 0x02, 0x05, 0xc7, 0xbb, 0xcd, 0x06, 0x0f, 0x36, 0x77, 0xdd, 0xb6, 0xf1, 0x76, 0x6d, 0xf7, - 0xc0, 0x05, 0xee, 0x3a, 0x7f, 0x6c, 0xe2, 0x8e, 0x4a, 0xdc, 0x34, 0xdc, 0xfa, 0xfe, 0xbc, 0xea, - 0x8c, 0xfb, 0x8b, 0xcf, 0xe8, 0x1b, 0xe9, 0x9b, 0xc6, 0x1b, 0xe9, 0x6c, 0xac, 0xdd, 0x8d, 0x1f, - 0xfc, 0x17, 0x8f, 0xb0, 0x13, 0xf8, 0x1f, 0x87, 0x61, 0x42, 0x47, 0x17, 0xfd, 0x50, 0x69, 0x34, - 0x02, 0xbd, 0x1f, 0xdc, 0x46, 0x23, 0xb0, 0x11, 0x6a, 0x98, 0x05, 0x14, 0x0e, 0x35, 0x0b, 0xf8, - 0x1a, 0x8c, 0x2d, 0xb7, 0x1a, 0xc6, 0x63, 0xa5, 0x95, 0xf1, 0x79, 0x97, 0x62, 0x24, 0xb9, 0x16, - 0x62, 0xa5, 0x65, 0xbd, 0xd5, 0xe8, 0x7d, 0xa2, 0x4c, 0x58, 0x1a, 0x16, 0x05, 0xc3, 0x1f, 0xc7, - 0xa2, 0xe0, 0x1a, 0x8c, 0xdd, 0x0b, 0xf9, 0x66, 0xb7, 0xdd, 0xe6, 0x4d, 0x9c, 0x56, 0x45, 0x29, - 0xeb, 0x77, 0x43, 0xee, 0x44, 0x08, 0xd5, 0x3f, 0x20, 0x46, 0xd5, 0x07, 0x78, 0xf4, 0x90, 0x01, - 0xbe, 0x0a, 0xc5, 0x0d, 0xce, 0x03, 0xec, 0xd3, 0xf1, 0x44, 0xa4, 0xeb, 0x70, 0x1e, 0x38, 0xa2, - 0x63, 0x0d, 0x4b, 0x03, 0x42, 0x34, 0xcc, 0x13, 0x26, 0x06, 0x34, 0x4f, 0x60, 0x2f, 0xc2, 0x44, - 0xa7, 0xbb, 0xd5, 0xf4, 0xea, 0xc8, 0x97, 0xec, 0x1a, 0xec, 0x71, 0x09, 0x13, 0x6c, 0x43, 0xf6, - 0x25, 0x98, 0xc4, 0x3b, 0x4e, 0x3c, 0xe5, 0xa6, 0x8c, 0x57, 0x3d, 0xa3, 0x4c, 0x4a, 0x3a, 0x75, - 0x01, 0x72, 0x32, 0xcc, 0x6f, 0x4c, 0x46, 0x0b, 0x35, 0x98, 0x32, 0x47, 0xf2, 0x29, 0x3c, 0xee, - 0xc5, 0xa6, 0x16, 0xc5, 0xd2, 0xd8, 0xad, 0xa1, 0x22, 0x94, 0xc6, 0xa5, 0x91, 0x85, 0x0d, 0x1b, - 0x71, 0x9b, 0x6c, 0x76, 0xbb, 0xbb, 0xc5, 0x83, 0x36, 0x8f, 0x78, 0x48, 0x97, 0x80, 0xd0, 0x1e, - 0xaa, 0x74, 0x3a, 0xa1, 0xf5, 0x9f, 0xe6, 0x61, 0xb4, 0xf2, 0xa0, 0x56, 0x6d, 0x6f, 0xfb, 0xf8, - 0x44, 0x17, 0xbf, 0xcc, 0xe8, 0x4f, 0x74, 0xf1, 0xcb, 0x8c, 0xfe, 0x1e, 0x73, 0x39, 0xe3, 0x1a, - 0x87, 0x56, 0xbc, 0xda, 0x35, 0xce, 0xb8, 0x80, 0x26, 0x8f, 0x54, 0x85, 0x01, 0x1e, 0xa9, 0x62, - 0x3d, 0xe2, 0xd0, 0xd1, 0x7a, 0xc4, 0xb7, 0x61, 0xbc, 0xda, 0x8e, 0xf8, 0x4e, 0x90, 0xcc, 0xf4, - 0xf8, 0x4a, 0x19, 0x83, 0x75, 0xd1, 0x5e, 0xc3, 0x16, 0xd3, 0x48, 0xea, 0x2e, 0x63, 0x9d, 0x25, - 0x4e, 0x23, 0xa9, 0xe2, 0x4c, 0xe9, 0x03, 0x14, 0xa2, 0xb5, 0x92, 0x9a, 0x23, 0xca, 0x10, 0x40, - 0x0a, 0x9f, 0x53, 0x89, 0xf2, 0x5e, 0x74, 0xec, 0xd2, 0x4c, 0xb6, 0x21, 0x80, 0xf5, 0x43, 0x79, - 0x18, 0xaf, 0x74, 0x3a, 0xcf, 0xb8, 0x39, 0xd6, 0xe7, 0x8c, 0xed, 0x55, 0xdd, 0x85, 0xe2, 0x76, - 0x0d, 0x64, 0x89, 0xf5, 0x4b, 0x79, 0x98, 0x4e, 0x51, 0xe8, 0x5f, 0x9f, 0x1b, 0xd0, 0x08, 0x2b, - 0x3f, 0xa0, 0x11, 0x56, 0x61, 0x30, 0x23, 0xac, 0xa1, 0x8f, 0xb3, 0x65, 0xbe, 0x0a, 0x85, 0x4a, - 0xa7, 0x93, 0x7e, 0xcc, 0xed, 0x74, 0xee, 0x5f, 0x95, 0xf7, 0x59, 0xb7, 0xd3, 0xb1, 0x05, 0x86, - 0xb1, 0x8f, 0x8d, 0x0c, 0xb8, 0x8f, 0x59, 0x6f, 0xc0, 0x18, 0xf2, 0x42, 0xd3, 0xa7, 0x73, 0x80, - 0x8b, 0x99, 0xac, 0x9e, 0x8c, 0xba, 0x68, 0x99, 0xff, 0x8b, 0x1c, 0x0c, 0xe3, 0xef, 0x67, 0x74, - 0x8e, 0x2d, 0x1a, 0x73, 0xac, 0xa4, 0xcd, 0xb1, 0x41, 0x66, 0xd7, 0x3f, 0x2c, 0x00, 0x2c, 0xdf, - 0xb5, 0x6b, 0x52, 0xed, 0xc1, 0xae, 0xc3, 0xb4, 0xdb, 0x6c, 0xfa, 0x8f, 0x79, 0xc3, 0xf1, 0x03, - 0x6f, 0xc7, 0x6b, 0xcb, 0x9e, 0x53, 0x2f, 0x8c, 0x66, 0x91, 0xfe, 0xee, 0x40, 0x45, 0x77, 0x65, - 0x89, 0xce, 0xa7, 0xc5, 0xa3, 0x5d, 0xbf, 0xa1, 0x2e, 0x70, 0x06, 0x1f, 0x2a, 0xca, 0xe0, 0x73, - 0x47, 0x96, 0xe8, 0x7c, 0x76, 0xf1, 0x42, 0xaa, 0xe4, 0x47, 0x83, 0x0f, 0x15, 0x65, 0xf0, 0x91, - 0xb7, 0xd8, 0x90, 0xad, 0xc1, 0x0c, 0x42, 0x9c, 0x7a, 0xc0, 0x1b, 0xbc, 0x1d, 0x79, 0x6e, 0x33, - 0xa4, 0x2b, 0x3f, 0x2a, 0x87, 0x7a, 0x0a, 0xf5, 0x2b, 0x0f, 0x16, 0x2e, 0x27, 0x65, 0xec, 0x12, - 0x8c, 0xb6, 0xdc, 0x27, 0x8e, 0xbb, 0x23, 0xdf, 0xda, 0x27, 0xe5, 0x15, 0x91, 0x40, 0xfa, 0x86, - 0xdd, 0x72, 0x9f, 0x54, 0x76, 0xb8, 0x68, 0x05, 0x7f, 0xd2, 0xf1, 0x43, 0xad, 0x15, 0x23, 0x49, - 0x2b, 0x52, 0x45, 0x7a, 0x2b, 0xa8, 0x88, 0x5a, 0x61, 0xfd, 0x3f, 0xc3, 0x38, 0xb5, 0x69, 0x13, - 0x20, 0xf3, 0xb0, 0x5c, 0x86, 0x79, 0xd8, 0x5b, 0xa0, 0x1d, 0x71, 0xba, 0x6a, 0x4f, 0x3b, 0xe0, - 0xf5, 0x6b, 0x61, 0x82, 0xcc, 0x1e, 0xa6, 0x0d, 0xc5, 0x0a, 0xb8, 0x72, 0x5e, 0x4a, 0xcf, 0xab, - 0xa7, 0x62, 0x23, 0x76, 0x13, 0x58, 0xb5, 0x8d, 0xaf, 0x59, 0xbc, 0xf6, 0xd0, 0xeb, 0xdc, 0xe7, - 0x81, 0xb7, 0xbd, 0x47, 0xe3, 0x82, 0x42, 0x94, 0x47, 0xa5, 0x4e, 0xf8, 0xd0, 0xeb, 0x88, 0x7b, - 0xa3, 0xb7, 0xbd, 0x67, 0x67, 0xd0, 0xb0, 0xf7, 0x61, 0xd4, 0xe6, 0x8f, 0x03, 0x2f, 0x52, 0xe6, - 0x0f, 0x53, 0xb1, 0x96, 0x03, 0xa1, 0x72, 0x88, 0x02, 0xf9, 0x43, 0x5f, 0xac, 0x54, 0xce, 0x16, - 0xe5, 0x29, 0x25, 0xcd, 0x1c, 0x26, 0x93, 0xd6, 0x56, 0x1e, 0xd4, 0xfa, 0x1d, 0x52, 0xec, 0x22, - 0x0c, 0xe3, 0x51, 0x47, 0x02, 0x1c, 0xba, 0x0d, 0xa0, 0xc0, 0xa3, 0x9f, 0xc3, 0x88, 0xc1, 0xce, - 0x02, 0xc4, 0xcf, 0x45, 0xe1, 0x7c, 0x11, 0x45, 0x2b, 0x0d, 0x92, 0x3e, 0xa7, 0xc7, 0x8e, 0x75, - 0x4e, 0xaf, 0x41, 0xc9, 0xe6, 0xdf, 0xe8, 0x7a, 0x01, 0x6f, 0x54, 0x3a, 0xf8, 0x26, 0x11, 0xce, - 0x03, 0x4e, 0xb0, 0x73, 0x07, 0xfb, 0xe5, 0x17, 0x02, 0x2a, 0x73, 0xdc, 0x8e, 0x7c, 0xca, 0x30, - 0x66, 0x77, 0x9a, 0x92, 0xbd, 0x05, 0x43, 0x62, 0x47, 0x20, 0x93, 0x32, 0xa5, 0xdb, 0x4d, 0x36, - 0x09, 0x79, 0xd3, 0xae, 0xfb, 0xc6, 0x54, 0x45, 0x92, 0xef, 0x9e, 0x99, 0xd6, 0x2f, 0xe5, 0xe1, - 0xa5, 0xf8, 0x10, 0xbc, 0x1b, 0xd4, 0x2a, 0x77, 0xd6, 0xaa, 0x8d, 0x0d, 0xba, 0x33, 0x6e, 0x04, - 0xfe, 0x23, 0xaf, 0xc1, 0x83, 0xfb, 0x57, 0x8e, 0xd8, 0xc2, 0xd7, 0xe4, 0xf2, 0x91, 0x0a, 0xe7, - 0xbc, 0x61, 0xd0, 0xa2, 0xc9, 0x1a, 0x64, 0x73, 0xd3, 0xe9, 0xf4, 0xe8, 0x9f, 0x6f, 0x3e, 0x67, - 0x27, 0x0c, 0xd8, 0xdf, 0xcc, 0xc1, 0xc9, 0xec, 0x0f, 0x21, 0x3d, 0x42, 0x59, 0xdd, 0x57, 0xfa, - 0x7c, 0xed, 0xd2, 0xab, 0x07, 0xfb, 0xe5, 0x97, 0x42, 0xb7, 0xd5, 0x74, 0xbc, 0x86, 0xac, 0xcd, - 0xab, 0x73, 0xa7, 0x43, 0x08, 0x46, 0xbd, 0x7d, 0x6a, 0xfa, 0x3c, 0xa8, 0x9d, 0x7c, 0x3e, 0xb7, - 0x04, 0x50, 0x54, 0x3a, 0x3d, 0xeb, 0x57, 0x73, 0xa0, 0x4d, 0xed, 0xa2, 0xcd, 0x1b, 0x5e, 0xc0, - 0xeb, 0x11, 0xed, 0xe6, 0xe4, 0x8e, 0x23, 0x61, 0x29, 0xfb, 0x25, 0x84, 0xb1, 0xf7, 0x60, 0x94, - 0x76, 0x1d, 0xdc, 0xb8, 0x93, 0x25, 0x41, 0xda, 0x42, 0xe9, 0xb7, 0xd5, 0xb3, 0x63, 0x29, 0x22, - 0x71, 0x2b, 0xba, 0xf5, 0x60, 0x73, 0xb9, 0xe9, 0x7a, 0xad, 0x90, 0x4e, 0x3f, 0xec, 0xd6, 0x0f, - 0x1f, 0x47, 0x4e, 0x1d, 0xa1, 0xfa, 0xad, 0x28, 0x46, 0xb5, 0x6e, 0x28, 0x65, 0xe5, 0x11, 0x46, - 0x78, 0x65, 0x18, 0xbe, 0x9f, 0x28, 0x2d, 0x96, 0xc6, 0x0e, 0xf6, 0xcb, 0x72, 0xba, 0xd8, 0x12, - 0x6e, 0xfd, 0x48, 0x0e, 0xa6, 0xcc, 0xf9, 0xc4, 0x2e, 0xc1, 0x08, 0xb9, 0xc2, 0xe4, 0x50, 0x39, - 0x23, 0x7a, 0x61, 0x44, 0x3a, 0xc1, 0x18, 0xae, 0x2f, 0x84, 0x25, 0xce, 0x6f, 0xe2, 0x40, 0x87, - 0x17, 0x9e, 0xdf, 0x75, 0x09, 0xb2, 0x55, 0x19, 0xb3, 0x84, 0xf0, 0x1e, 0x76, 0x9b, 0x91, 0xae, - 0xb3, 0x0f, 0x10, 0x62, 0x53, 0x89, 0xb5, 0x0c, 0x23, 0x72, 0x2f, 0x49, 0x19, 0xff, 0xe4, 0x8e, - 0x61, 0xfc, 0x63, 0xed, 0xe7, 0x00, 0x6a, 0xb5, 0x9b, 0xb7, 0xf9, 0xde, 0x86, 0xeb, 0x05, 0xf8, - 0xc8, 0x84, 0xfb, 0xf6, 0x6d, 0x5a, 0x5c, 0x13, 0xf4, 0xc8, 0x24, 0xf7, 0xf8, 0x87, 0x7c, 0xcf, - 0x78, 0x64, 0x52, 0xa8, 0x78, 0x38, 0x04, 0xde, 0x23, 0x37, 0xe2, 0x82, 0x30, 0x8f, 0x84, 0xf2, - 0x70, 0x90, 0xd0, 0x14, 0xa5, 0x86, 0xcc, 0xbe, 0x0a, 0x53, 0xc9, 0xaf, 0xf8, 0xa9, 0x6c, 0x2a, - 0x5e, 0xc0, 0x66, 0xe1, 0xd2, 0xd9, 0x83, 0xfd, 0xf2, 0x82, 0xc6, 0x35, 0xfd, 0x88, 0x96, 0x62, - 0x66, 0xfd, 0x42, 0x0e, 0x1f, 0x88, 0x55, 0x03, 0xcf, 0xc3, 0x50, 0x6c, 0xd2, 0x38, 0x41, 0xbb, - 0x8e, 0xf9, 0x1c, 0x80, 0xe5, 0xec, 0x25, 0x28, 0x24, 0x2d, 0xc1, 0xbd, 0xda, 0x6c, 0x81, 0x28, - 0x65, 0x37, 0x60, 0x74, 0xa0, 0x6f, 0xc6, 0xa5, 0x91, 0xf1, 0xad, 0x8a, 0x1a, 0x47, 0xe1, 0xd6, - 0x83, 0xcd, 0x4f, 0xee, 0x28, 0xfc, 0x78, 0x1e, 0xa6, 0x45, 0xbf, 0x56, 0xba, 0xd1, 0xae, 0x1f, - 0x78, 0xd1, 0xde, 0x33, 0xab, 0xdd, 0x7a, 0xc7, 0x10, 0x8d, 0x17, 0xd4, 0x29, 0xa3, 0xb7, 0x6d, - 0x20, 0x25, 0xd7, 0x7f, 0x3d, 0x0c, 0xb3, 0x19, 0x54, 0xec, 0x75, 0x43, 0x01, 0x3d, 0xaf, 0x5c, - 0x5d, 0xbf, 0xb3, 0x5f, 0x9e, 0x50, 0xe8, 0x9b, 0x89, 0xeb, 0xeb, 0xa2, 0x69, 0x6d, 0x21, 0x7b, - 0x0a, 0xf5, 0xd1, 0xba, 0xb5, 0x85, 0x69, 0x63, 0x71, 0x11, 0x86, 0x6d, 0xbf, 0xc9, 0x95, 0x85, - 0x11, 0x4a, 0x18, 0x81, 0x00, 0x18, 0x2f, 0xaa, 0x02, 0xc0, 0x6e, 0xc2, 0xa8, 0xf8, 0xe3, 0x8e, - 0xdb, 0xa1, 0xb7, 0x02, 0x16, 0x5f, 0xce, 0x10, 0xda, 0xf1, 0xda, 0x3b, 0xfa, 0xfd, 0xac, 0xc9, - 0x9d, 0x96, 0xdb, 0x31, 0x44, 0x21, 0x89, 0x68, 0xdc, 0xf3, 0x8a, 0xfd, 0xef, 0x79, 0xb9, 0x23, - 0xef, 0x79, 0xdb, 0x00, 0x35, 0x6f, 0xa7, 0xed, 0xb5, 0x77, 0x2a, 0xcd, 0x1d, 0x72, 0x18, 0xbe, - 0xd8, 0x7f, 0x14, 0x2e, 0x25, 0xc8, 0x38, 0x71, 0x9f, 0xc7, 0x07, 0x3d, 0x09, 0x73, 0xdc, 0xe6, - 0x8e, 0xe1, 0xd8, 0xa0, 0x71, 0x66, 0xeb, 0x00, 0x95, 0x7a, 0xe4, 0x3d, 0x12, 0x53, 0x38, 0x24, - 0xb9, 0x45, 0x7d, 0xf2, 0x72, 0xe5, 0x36, 0xdf, 0xab, 0xf1, 0x28, 0x79, 0x1a, 0x71, 0x11, 0x55, - 0xac, 0x04, 0xc3, 0x6a, 0x3d, 0xe1, 0xc0, 0x3a, 0x70, 0xa2, 0xd2, 0x68, 0x78, 0xa2, 0x0d, 0x6e, - 0x13, 0xdf, 0xfa, 0x78, 0x03, 0x59, 0x4f, 0x64, 0xb3, 0xbe, 0x48, 0xac, 0x5f, 0x74, 0x63, 0x2a, - 0x27, 0x92, 0x64, 0xe9, 0x6a, 0xb2, 0x19, 0x5b, 0x35, 0x98, 0x32, 0x1b, 0x6f, 0x3a, 0x3a, 0x4f, - 0x40, 0xd1, 0xae, 0x55, 0x9c, 0xda, 0xcd, 0xca, 0x95, 0x52, 0x8e, 0x95, 0x60, 0x82, 0x7e, 0x2d, - 0x3a, 0x8b, 0x6f, 0x5e, 0x2b, 0xe5, 0x0d, 0xc8, 0x9b, 0x57, 0x16, 0x4b, 0x85, 0x85, 0xfc, 0x7c, - 0x2e, 0xe5, 0x63, 0x34, 0x5a, 0x2a, 0x4a, 0x25, 0x98, 0xf5, 0xcb, 0x39, 0x28, 0xaa, 0x6f, 0x67, - 0xd7, 0xa0, 0x50, 0xab, 0xdd, 0x4c, 0x79, 0x05, 0x25, 0xa7, 0x8c, 0xdc, 0x4f, 0xc3, 0x50, 0x37, - 0xfd, 0x14, 0x04, 0x82, 0x6e, 0x73, 0xad, 0x46, 0xc2, 0x81, 0xa2, 0x4b, 0x36, 0x6f, 0x49, 0x97, - 0xe1, 0x2a, 0x71, 0x0d, 0x0a, 0xb7, 0x1e, 0x6c, 0xd2, 0xad, 0x42, 0xd1, 0x25, 0xfb, 0xa9, 0xa4, - 0xfb, 0xf0, 0xb1, 0xbe, 0xcb, 0x0b, 0x02, 0xcb, 0x86, 0x71, 0x6d, 0x22, 0xcb, 0x43, 0xb7, 0xe5, - 0xc7, 0xde, 0xbd, 0x74, 0xe8, 0x0a, 0x88, 0x4d, 0x25, 0x42, 0x46, 0x58, 0xf3, 0xeb, 0x6e, 0x93, - 0x4e, 0x6f, 0x94, 0x11, 0x9a, 0x02, 0x60, 0x4b, 0xb8, 0xf5, 0x9b, 0x39, 0x28, 0xa1, 0x24, 0x85, - 0xa6, 0x9b, 0xfe, 0x43, 0xde, 0xbe, 0x7f, 0x85, 0xbd, 0xa1, 0x96, 0x5c, 0x2e, 0x56, 0x38, 0x0c, - 0xe3, 0x92, 0x4b, 0xbd, 0x58, 0xd0, 0xb2, 0xd3, 0x1c, 0xa8, 0xf3, 0x83, 0x3b, 0x5e, 0x1e, 0xe1, - 0x40, 0x5d, 0x86, 0x61, 0xfc, 0x1c, 0xda, 0x1c, 0xf1, 0xcb, 0x23, 0x01, 0xb0, 0x25, 0x5c, 0xdb, - 0x9b, 0x7e, 0x32, 0xdf, 0xd3, 0x86, 0xc5, 0x4f, 0x94, 0xf3, 0xa2, 0xd9, 0xb8, 0x81, 0xf6, 0xeb, - 0x0f, 0x60, 0x2e, 0xdd, 0x25, 0xa8, 0x0c, 0xaa, 0xc0, 0xb4, 0x09, 0x57, 0x7a, 0xa1, 0x53, 0x99, - 0x75, 0xdd, 0x5f, 0xb4, 0xd3, 0xf8, 0xd6, 0xff, 0x9a, 0x83, 0x31, 0xfc, 0xd3, 0xee, 0x36, 0xd1, - 0x84, 0xa6, 0xf2, 0xa0, 0x46, 0x8a, 0x5f, 0x5d, 0x98, 0x73, 0x1f, 0x87, 0x0e, 0xe9, 0x86, 0x8d, - 0x3d, 0x26, 0x46, 0x26, 0x52, 0xa9, 0xd1, 0x55, 0xca, 0x91, 0x98, 0x54, 0xaa, 0x7e, 0xc3, 0x14, - 0x29, 0x21, 0xa3, 0xe1, 0xdd, 0x83, 0x9a, 0x98, 0x7e, 0xfa, 0x9b, 0x36, 0xd2, 0xf9, 0x4d, 0xd3, - 0xf0, 0x4e, 0xa2, 0xe1, 0x93, 0xf6, 0x83, 0x5a, 0xc5, 0x5e, 0x37, 0x9e, 0xb4, 0xc5, 0x37, 0x1a, - 0x76, 0xe2, 0x84, 0x64, 0xfd, 0x13, 0x48, 0x77, 0x20, 0x1d, 0x78, 0xc7, 0x5c, 0x1b, 0x6f, 0xc3, - 0x70, 0xa5, 0xd9, 0xf4, 0x1f, 0xd3, 0x2e, 0xa1, 0x74, 0x53, 0x71, 0xff, 0xc9, 0xf3, 0x0c, 0xd5, - 0x2b, 0x86, 0x43, 0x96, 0x00, 0xb0, 0x65, 0x18, 0xab, 0x3c, 0xa8, 0x55, 0xab, 0x2b, 0x9b, 0x9b, - 0xd2, 0xf9, 0xa4, 0xb0, 0xf4, 0x8a, 0xea, 0x1f, 0xcf, 0x6b, 0x38, 0xe9, 0x57, 0xd5, 0x44, 0x7e, - 0x4f, 0xe8, 0xd8, 0xbb, 0x00, 0xb7, 0x7c, 0xaf, 0x2d, 0xd5, 0x49, 0xd4, 0xf8, 0x33, 0x07, 0xfb, - 0xe5, 0xf1, 0x0f, 0x7d, 0xaf, 0x4d, 0xfa, 0x27, 0xf1, 0xed, 0x09, 0x92, 0xad, 0xfd, 0x2d, 0x7a, - 0x7a, 0xc9, 0x97, 0x66, 0x31, 0xc3, 0x49, 0x4f, 0x6f, 0xf9, 0x3d, 0x16, 0x31, 0x0a, 0x8d, 0xb5, - 0x60, 0xba, 0xd6, 0xdd, 0xd9, 0xe1, 0x62, 0x67, 0x27, 0x05, 0xca, 0x08, 0xdd, 0x71, 0xe3, 0x90, - 0x1f, 0xf2, 0x3e, 0x22, 0x6e, 0x29, 0xe1, 0xd2, 0xeb, 0x62, 0x22, 0x7f, 0x7b, 0xbf, 0x4c, 0xaf, - 0xb5, 0x42, 0x54, 0x0b, 0x15, 0x7d, 0xaf, 0xfa, 0x24, 0xcd, 0x9b, 0xdd, 0x85, 0x91, 0x1b, 0x5e, - 0x74, 0xb3, 0xbb, 0x45, 0xce, 0x14, 0x2f, 0x1e, 0xb2, 0x68, 0x24, 0xa2, 0x7c, 0x2e, 0xd8, 0xf1, - 0xa2, 0xdd, 0xae, 0x6e, 0xce, 0x4e, 0x6c, 0xd8, 0x03, 0x28, 0x2e, 0x7b, 0x41, 0xbd, 0xc9, 0x97, - 0xab, 0x74, 0xf6, 0xbf, 0x74, 0x08, 0x4b, 0x85, 0x2a, 0xfb, 0xa5, 0x8e, 0xbf, 0xea, 0x9e, 0x2e, - 0x0b, 0x28, 0x0c, 0xf6, 0x6f, 0xe7, 0xe0, 0xf9, 0xf8, 0xeb, 0x2b, 0x3b, 0xbc, 0x1d, 0xdd, 0x71, - 0xa3, 0xfa, 0x2e, 0x0f, 0xa8, 0x97, 0xc6, 0x0e, 0xeb, 0xa5, 0xcf, 0xf7, 0xf4, 0xd2, 0x85, 0xa4, - 0x97, 0x5c, 0xc1, 0xcc, 0x69, 0x49, 0x6e, 0xbd, 0x7d, 0x76, 0x58, 0xad, 0xcc, 0x01, 0x48, 0xde, - 0x7f, 0xc8, 0x19, 0xef, 0x95, 0x43, 0x1a, 0x9c, 0x20, 0x93, 0x11, 0x7d, 0xfc, 0xdb, 0xb0, 0x02, - 0x8b, 0xa1, 0xec, 0xb6, 0xf2, 0x5c, 0x92, 0x52, 0xc9, 0xb9, 0x43, 0x78, 0x4b, 0x6f, 0xa6, 0xd9, - 0x43, 0x7c, 0x14, 0xe5, 0x68, 0xaf, 0xb9, 0x5b, 0x24, 0x88, 0x1c, 0x31, 0xda, 0x6b, 0x6e, 0x32, - 0xda, 0x4d, 0x37, 0x3d, 0xda, 0x6b, 0xee, 0x16, 0x5b, 0x96, 0xee, 0x96, 0xd2, 0x37, 0xef, 0xec, - 0x61, 0xdc, 0x96, 0x37, 0xe4, 0xc9, 0x9c, 0xe1, 0x76, 0xf9, 0x65, 0x18, 0xab, 0x75, 0xdc, 0x3a, - 0x6f, 0x7a, 0xdb, 0x11, 0x3d, 0x08, 0xbe, 0x7c, 0x08, 0xab, 0x18, 0x97, 0x1e, 0x93, 0xd4, 0x4f, - 0xfd, 0x9a, 0x14, 0xe3, 0x88, 0x2f, 0xdc, 0xdc, 0xb8, 0x33, 0x3f, 0x7d, 0xe4, 0x17, 0x6e, 0x6e, - 0xdc, 0x21, 0x99, 0xa3, 0xd3, 0x32, 0x64, 0x8e, 0x8d, 0x3b, 0xac, 0x03, 0x53, 0x9b, 0x3c, 0x08, - 0xdc, 0x6d, 0x3f, 0x68, 0x49, 0x85, 0x9d, 0xf4, 0xf7, 0xb8, 0x78, 0x18, 0x3f, 0x83, 0x40, 0x6a, - 0x6a, 0x23, 0x05, 0x73, 0xd2, 0x5a, 0xbe, 0x14, 0x7f, 0xeb, 0xd7, 0x0a, 0x70, 0xaa, 0xcf, 0x57, - 0xb2, 0x75, 0xb5, 0x2b, 0xe6, 0x0c, 0xcd, 0x6a, 0x1f, 0xf4, 0x4b, 0x47, 0x6e, 0x94, 0x6b, 0x50, - 0x5a, 0xbd, 0x8d, 0xe2, 0xb4, 0xd4, 0x79, 0x2f, 0x57, 0xd4, 0x79, 0x82, 0xda, 0x3f, 0xfe, 0x10, - 0x4d, 0xd8, 0x94, 0xae, 0xbc, 0x6e, 0xf8, 0x6a, 0xf6, 0x50, 0x2e, 0x7c, 0x7f, 0x1e, 0x86, 0xf0, - 0x6c, 0x4b, 0x45, 0xa8, 0xc9, 0x1d, 0x2b, 0x42, 0xcd, 0x17, 0x60, 0x62, 0xf5, 0xb6, 0xbc, 0xec, - 0xde, 0x74, 0xc3, 0x5d, 0xda, 0x79, 0xf1, 0x45, 0x98, 0x3f, 0x74, 0xe8, 0x6e, 0xbc, 0xeb, 0x1a, - 0x62, 0xa5, 0x41, 0xc1, 0xee, 0xc1, 0xac, 0xfc, 0x36, 0x6f, 0xdb, 0xab, 0xcb, 0x40, 0x17, 0x9e, - 0xdb, 0xa4, 0x6d, 0xf8, 0xa5, 0x83, 0xfd, 0x72, 0x99, 0x3f, 0x44, 0xe3, 0x3c, 0x2a, 0x77, 0x42, - 0x44, 0xd0, 0xad, 0xf4, 0x32, 0xe8, 0x75, 0xef, 0x7b, 0x7b, 0x0c, 0x2b, 0x14, 0xb5, 0x89, 0xba, - 0x05, 0xae, 0x44, 0xb2, 0x7e, 0x75, 0x18, 0x16, 0xfa, 0xef, 0xa0, 0xec, 0x8b, 0xe6, 0x00, 0x9e, - 0x3f, 0x72, 0xcf, 0x3d, 0x7a, 0x0c, 0xbf, 0x04, 0x73, 0xab, 0xed, 0x88, 0x07, 0x9d, 0xc0, 0x53, - 0xf1, 0x16, 0x6e, 0xfa, 0xa1, 0x32, 0x86, 0x44, 0xab, 0x44, 0x1e, 0x97, 0x93, 0x5e, 0x12, 0x4d, - 0x33, 0x35, 0x56, 0x99, 0x1c, 0xd8, 0x2a, 0x4c, 0x69, 0xf0, 0x66, 0x77, 0x87, 0x64, 0x06, 0xf9, - 0xf4, 0xa0, 0xf1, 0x6c, 0x76, 0x75, 0x4b, 0xb1, 0x14, 0xd1, 0xc2, 0x2f, 0x14, 0x68, 0x5a, 0xbc, - 0x04, 0x85, 0x5a, 0x77, 0x8b, 0xa6, 0x83, 0xbc, 0x1c, 0x18, 0x07, 0x89, 0x28, 0x65, 0x9f, 0x03, - 0xb0, 0x79, 0xc7, 0x0f, 0xbd, 0xc8, 0x0f, 0xf6, 0x74, 0xb7, 0x9d, 0x20, 0x86, 0x9a, 0x96, 0xc5, - 0x0a, 0xca, 0x6e, 0xc2, 0x74, 0xf2, 0xeb, 0xee, 0xe3, 0x36, 0x29, 0x53, 0xc7, 0xa4, 0x16, 0x23, - 0x21, 0x77, 0x7c, 0x51, 0xa6, 0x1f, 0x8d, 0x29, 0x32, 0xb6, 0x08, 0xc5, 0x07, 0x7e, 0xf0, 0x70, - 0x5b, 0x0c, 0xd4, 0x50, 0x72, 0x78, 0x3f, 0x26, 0x98, 0x7e, 0x48, 0x29, 0x3c, 0x31, 0xe7, 0x57, - 0xdb, 0x8f, 0xbc, 0xc0, 0x6f, 0xb7, 0x78, 0x3b, 0xd2, 0x5f, 0xcb, 0x79, 0x02, 0x36, 0x1c, 0x26, - 0x13, 0xb0, 0xb8, 0xab, 0x57, 0xea, 0x91, 0x1f, 0xd0, 0x53, 0xb9, 0x1c, 0x6e, 0x01, 0x30, 0x86, - 0x5b, 0x00, 0x44, 0x27, 0xda, 0x7c, 0x9b, 0x9e, 0x0d, 0xb0, 0x13, 0x03, 0xbe, 0x6d, 0x78, 0x83, - 0xf2, 0x6d, 0x21, 0x7c, 0xd8, 0x7c, 0x1b, 0x15, 0x0c, 0x46, 0x10, 0xa5, 0xed, 0x1e, 0xd5, 0x14, - 0xa1, 0x59, 0xbf, 0x33, 0xd6, 0x77, 0xde, 0x8a, 0xdd, 0xfe, 0x78, 0xf3, 0x76, 0xcd, 0x1d, 0x60, - 0xde, 0xbe, 0x1e, 0xdb, 0x2b, 0xeb, 0x2e, 0xd0, 0x08, 0xd1, 0x8f, 0x1b, 0x89, 0xb3, 0xf0, 0x8b, - 0xc5, 0xe3, 0x4c, 0x22, 0xea, 0xa4, 0xfc, 0xa0, 0x9d, 0x54, 0x18, 0xa8, 0x93, 0xd8, 0x12, 0x4c, - 0xc6, 0x61, 0xb8, 0x36, 0xdc, 0xc8, 0xd8, 0x9b, 0xe2, 0xd8, 0x69, 0x4e, 0xc7, 0x8d, 0xf4, 0xbd, - 0xc9, 0x24, 0x61, 0xef, 0xc0, 0x38, 0x19, 0xed, 0x23, 0x87, 0xe1, 0xc4, 0x6c, 0x52, 0x59, 0xf8, - 0xa7, 0xe8, 0x75, 0x74, 0xb1, 0x24, 0x37, 0xbc, 0x0e, 0x6f, 0x7a, 0x6d, 0x5e, 0x43, 0x6d, 0x3d, - 0xcd, 0x18, 0x5c, 0x92, 0x1d, 0x2a, 0x71, 0xa4, 0x22, 0xdf, 0xd0, 0xd3, 0x19, 0x44, 0xe9, 0xc9, - 0x3a, 0x7a, 0xac, 0xc9, 0x2a, 0xad, 0x96, 0x82, 0x35, 0x7f, 0xc7, 0x53, 0x76, 0x9a, 0xca, 0x6a, - 0x29, 0x70, 0x9a, 0x02, 0x9a, 0xb2, 0x5a, 0x92, 0xa8, 0xe2, 0x26, 0x21, 0x7e, 0x54, 0x57, 0xe8, - 0x89, 0x0a, 0x6f, 0x12, 0x48, 0x64, 0x1a, 0xc7, 0x4a, 0x24, 0x55, 0xcd, 0x6a, 0xcb, 0xf5, 0x9a, - 0xe4, 0xe9, 0x9a, 0x54, 0xc3, 0x05, 0x34, 0x5d, 0x0d, 0xa2, 0xb2, 0x3a, 0x4c, 0xd8, 0x7c, 0x7b, - 0x23, 0xf0, 0x23, 0x5e, 0x8f, 0x78, 0x83, 0xa4, 0x27, 0x75, 0x81, 0x58, 0xf2, 0x7d, 0x29, 0x19, - 0x2e, 0xbd, 0xf1, 0x3b, 0xfb, 0xe5, 0xdc, 0xb7, 0xf7, 0xcb, 0x20, 0x40, 0xd2, 0xf2, 0xfa, 0x60, - 0xbf, 0x7c, 0x4a, 0x8c, 0x7f, 0x47, 0x11, 0xeb, 0x47, 0x8c, 0xce, 0x94, 0x7d, 0xaf, 0xd8, 0x74, - 0xe3, 0x2e, 0x49, 0x2a, 0x9b, 0xe8, 0x53, 0xd9, 0x9b, 0x99, 0x95, 0x95, 0xb5, 0xde, 0xce, 0xac, - 0x34, 0xb3, 0x12, 0xf6, 0x2e, 0x8c, 0x2f, 0x57, 0x97, 0xfd, 0xf6, 0xb6, 0xb7, 0x53, 0xbb, 0x59, - 0x41, 0x11, 0x8c, 0xac, 0xee, 0xeb, 0x9e, 0x53, 0x47, 0xb8, 0x13, 0xee, 0xba, 0x86, 0xf3, 0x55, - 0x82, 0xcf, 0x6e, 0xc0, 0x94, 0xfa, 0x69, 0xf3, 0xed, 0x7b, 0x76, 0x15, 0x25, 0x2f, 0xe5, 0xea, - 0x10, 0x73, 0x10, 0x1d, 0xd1, 0x0d, 0x74, 0x89, 0x3c, 0x45, 0x26, 0x26, 0xe3, 0x0a, 0xef, 0x34, - 0xfd, 0x3d, 0xf1, 0x79, 0x9b, 0x1e, 0x0f, 0x50, 0xd6, 0xa2, 0xc9, 0xd8, 0x88, 0x4b, 0x9c, 0xc8, - 0x33, 0xb6, 0xdb, 0x14, 0x11, 0x5b, 0x87, 0x19, 0x9a, 0xe2, 0xf7, 0xbd, 0xd0, 0xdb, 0xf2, 0x9a, - 0x5e, 0xb4, 0x87, 0x52, 0x16, 0x49, 0x21, 0x6a, 0x5d, 0x3c, 0x8a, 0x4b, 0x35, 0x66, 0xbd, 0xa4, - 0xd6, 0x2f, 0xe7, 0xe1, 0x85, 0xc3, 0x6e, 0x1c, 0xac, 0x66, 0x6e, 0x66, 0x17, 0x06, 0xb8, 0xa5, - 0x1c, 0xbd, 0x9d, 0xad, 0xc2, 0xd4, 0xdd, 0x60, 0xc7, 0x6d, 0x7b, 0xdf, 0xc4, 0x9b, 0x64, 0x6c, - 0xbc, 0x85, 0x9d, 0xe1, 0x6b, 0x25, 0xe6, 0x6c, 0x4f, 0x11, 0x2d, 0x3c, 0xa2, 0x6d, 0xee, 0xa3, - 0xba, 0x01, 0x5d, 0x83, 0xb1, 0x65, 0xbf, 0x1d, 0xf1, 0x27, 0x51, 0xca, 0xe9, 0x55, 0x02, 0xd3, - 0x2e, 0x50, 0x0a, 0xd5, 0xfa, 0x57, 0x79, 0x38, 0x73, 0xa8, 0xc8, 0xcd, 0x36, 0xcd, 0x5e, 0xbb, - 0x38, 0x88, 0x9c, 0x7e, 0x74, 0xb7, 0x2d, 0xf6, 0xd8, 0x19, 0x1d, 0x69, 0x65, 0xbf, 0xf0, 0xdf, - 0xe6, 0xa8, 0x93, 0x3e, 0x0d, 0xa3, 0x58, 0x55, 0xdc, 0x45, 0x52, 0x1b, 0x85, 0xbb, 0xb0, 0x67, - 0x6a, 0xa3, 0x24, 0x1a, 0xbb, 0x0a, 0xc5, 0x65, 0xb7, 0xd9, 0xd4, 0x5c, 0x82, 0xf1, 0x26, 0x51, - 0x47, 0x58, 0xca, 0x2c, 0x4d, 0x21, 0xb2, 0xb7, 0x00, 0xe4, 0xdf, 0xda, 0x59, 0x81, 0x9b, 0x25, - 0x91, 0xa5, 0x8e, 0x0b, 0x0d, 0x19, 0x03, 0x09, 0xd6, 0xfd, 0xd8, 0xe9, 0x50, 0x06, 0x12, 0x14, - 0x00, 0x23, 0x90, 0xa0, 0x00, 0x58, 0xbf, 0x52, 0x80, 0xb3, 0x87, 0xdf, 0x1b, 0xd9, 0x3d, 0x73, - 0x08, 0x5e, 0x1b, 0xe8, 0xb6, 0x79, 0xf4, 0x18, 0xa8, 0xb0, 0x9c, 0xb2, 0x43, 0x2e, 0xf4, 0x1a, - 0xc3, 0x7f, 0x67, 0xbf, 0xac, 0xd9, 0x3a, 0xde, 0xf2, 0xbd, 0xb6, 0xf6, 0x36, 0xf1, 0x0d, 0x80, - 0x5a, 0xe4, 0x46, 0x5e, 0xfd, 0xd6, 0x83, 0xdb, 0x2a, 0x6a, 0xc5, 0xb5, 0xc1, 0xbe, 0x2c, 0xa1, - 0x93, 0xfb, 0x0a, 0xf9, 0xe1, 0x20, 0xd4, 0xf9, 0xf0, 0xf1, 0x43, 0xe3, 0x66, 0x9c, 0x20, 0x2f, - 0x7c, 0x1e, 0x4a, 0x69, 0x52, 0x76, 0x1e, 0x86, 0xf0, 0x03, 0x34, 0x8b, 0xfe, 0x14, 0x07, 0x2c, - 0x5f, 0xb8, 0x43, 0x73, 0x07, 0xbd, 0xa4, 0xf1, 0x41, 0xdc, 0xd4, 0xc1, 0x91, 0x97, 0xb4, 0x7c, - 0x4f, 0xef, 0xd5, 0xc3, 0xa5, 0x88, 0xac, 0x3f, 0xcf, 0xc1, 0xe9, 0xbe, 0x37, 0x72, 0xb6, 0x61, - 0x0e, 0xd8, 0x2b, 0x47, 0x5d, 0xe1, 0x8f, 0x1c, 0xab, 0x85, 0x1f, 0x55, 0x73, 0xff, 0x3d, 0x98, - 0xa8, 0x75, 0xb7, 0xd2, 0x97, 0x2c, 0x19, 0xc3, 0x40, 0x83, 0xeb, 0x27, 0x98, 0x8e, 0x2f, 0xda, - 0xaf, 0x5e, 0xfc, 0xc9, 0xb2, 0x44, 0xb3, 0xb2, 0x8a, 0xdd, 0xf8, 0x7a, 0xbd, 0xc4, 0x4d, 0x22, - 0xeb, 0x97, 0xf2, 0xd9, 0xb7, 0x55, 0x71, 0xbb, 0x3f, 0xc6, 0x6d, 0xf5, 0xc6, 0xf2, 0xc6, 0xd1, - 0x6d, 0xff, 0xa7, 0xaa, 0xed, 0xf8, 0x00, 0x4a, 0x3b, 0x9e, 0x52, 0x28, 0xd2, 0x03, 0xa8, 0xda, - 0x1d, 0x43, 0xf3, 0x01, 0x54, 0x21, 0xb3, 0x37, 0x61, 0x6c, 0xcd, 0x97, 0x0e, 0xdc, 0xaa, 0xc5, - 0xd2, 0xcf, 0x4d, 0x01, 0xf5, 0xed, 0x31, 0xc6, 0x14, 0x77, 0x0b, 0x73, 0xe0, 0x95, 0x31, 0x19, - 0xde, 0x2d, 0x52, 0xd3, 0xc5, 0x54, 0xbb, 0x99, 0x64, 0xd6, 0x7f, 0x32, 0x0c, 0xd6, 0xd1, 0x4a, - 0x03, 0xf6, 0x81, 0xd9, 0x77, 0x97, 0x06, 0x56, 0x37, 0x0c, 0xb4, 0xe5, 0x56, 0xba, 0x0d, 0x8f, - 0xb7, 0xeb, 0xa6, 0xf7, 0x35, 0xc1, 0xf4, 0x2d, 0x50, 0xe1, 0x7d, 0x14, 0x67, 0xa8, 0x85, 0xff, - 0xaa, 0x90, 0x2c, 0xb5, 0xd4, 0xd1, 0x98, 0xfb, 0x08, 0x47, 0x23, 0xbb, 0x0d, 0x25, 0x1d, 0xa2, - 0xbd, 0x84, 0xa2, 0xe4, 0x62, 0x30, 0x4a, 0x7d, 0x54, 0x0f, 0xa1, 0x79, 0xbe, 0x16, 0x06, 0x3f, - 0x5f, 0x13, 0xf1, 0x1d, 0xeb, 0x1f, 0xea, 0x15, 0xdf, 0xd3, 0x0e, 0x8f, 0x1a, 0xba, 0xf2, 0xd6, - 0x0e, 0xe9, 0xd0, 0x1a, 0x36, 0xbd, 0xb5, 0x33, 0x0e, 0x2e, 0x1d, 0x5d, 0x39, 0x9c, 0xe3, 0x4f, - 0xcd, 0xdf, 0x32, 0x76, 0x38, 0x97, 0xf4, 0x59, 0x0e, 0xe7, 0x31, 0x89, 0x38, 0x00, 0xed, 0x6e, - 0x5b, 0x46, 0xac, 0x1d, 0x4d, 0x0e, 0xc0, 0xa0, 0xdb, 0x76, 0xd2, 0x51, 0x6b, 0x63, 0x44, 0xeb, - 0x47, 0xf3, 0x30, 0x25, 0x37, 0x5c, 0xf9, 0x94, 0xf1, 0xcc, 0x3e, 0x13, 0xbd, 0x6d, 0x3c, 0x13, - 0xa9, 0x10, 0x3d, 0x7a, 0xd3, 0x06, 0x7a, 0x24, 0xda, 0x05, 0xd6, 0x4b, 0xc3, 0x6c, 0x98, 0xd0, - 0xa1, 0x87, 0xbf, 0x0f, 0x5d, 0x49, 0xa2, 0x39, 0xd1, 0x79, 0x87, 0x8f, 0x74, 0xa1, 0x6d, 0xf0, - 0xb0, 0x7e, 0x24, 0x0f, 0x93, 0xda, 0xa3, 0xfe, 0x33, 0xdb, 0xf1, 0x9f, 0x37, 0x3a, 0x7e, 0x3e, - 0x76, 0xfa, 0x88, 0x5b, 0x36, 0x50, 0xbf, 0x77, 0x61, 0xa6, 0x87, 0x24, 0x6d, 0x1b, 0x91, 0x1b, - 0xc4, 0x36, 0xe2, 0xf5, 0xde, 0xd0, 0x30, 0x32, 0xc2, 0x72, 0x1c, 0x28, 0x40, 0x8f, 0x45, 0xf3, - 0xe3, 0x79, 0x98, 0xa3, 0x5f, 0x18, 0x4b, 0x4d, 0x4a, 0x1c, 0xcf, 0xec, 0x58, 0x54, 0x8c, 0xb1, - 0x28, 0x9b, 0x63, 0xa1, 0x35, 0xb0, 0xff, 0x90, 0x58, 0x3f, 0x00, 0x30, 0xdf, 0x8f, 0x60, 0x60, - 0xdf, 0xca, 0xc4, 0x73, 0x25, 0x3f, 0x80, 0xe7, 0xca, 0x1a, 0x94, 0xb0, 0x2a, 0x8a, 0x96, 0x14, - 0x8a, 0x7b, 0x6b, 0x21, 0xb9, 0x24, 0xca, 0x80, 0x77, 0x14, 0xbd, 0x29, 0x4c, 0x5d, 0x5c, 0x7b, - 0x28, 0xd9, 0x2f, 0xe4, 0x60, 0x0a, 0x81, 0xab, 0x8f, 0x78, 0x3b, 0x42, 0x66, 0x43, 0xe4, 0x68, - 0x11, 0xbf, 0x22, 0xd5, 0xa2, 0xc0, 0x6b, 0xef, 0xd0, 0x33, 0xd2, 0x16, 0x3d, 0x23, 0xbd, 0x23, - 0x9f, 0xbf, 0x2e, 0xd5, 0xfd, 0xd6, 0xe5, 0x9d, 0xc0, 0x7d, 0xe4, 0x49, 0x7b, 0x15, 0xb7, 0x79, - 0x39, 0x09, 0xf0, 0xdf, 0xf1, 0x52, 0x21, 0xfb, 0x89, 0x15, 0x3e, 0xd1, 0xc9, 0x0f, 0xe5, 0x58, - 0x6d, 0xfa, 0x7e, 0x6d, 0x7e, 0x11, 0xfb, 0x1e, 0x38, 0x25, 0x63, 0x98, 0x88, 0x6b, 0x9a, 0xd7, - 0xee, 0xfa, 0xdd, 0x70, 0xc9, 0xad, 0x3f, 0x14, 0xb2, 0x9a, 0x74, 0x16, 0xc3, 0x96, 0xd7, 0xe3, - 0x42, 0x67, 0x4b, 0x96, 0x1a, 0xce, 0xb1, 0xd9, 0x0c, 0xd8, 0x4d, 0x98, 0x91, 0x45, 0x95, 0x6e, - 0xe4, 0xd7, 0xea, 0x6e, 0xd3, 0x6b, 0xef, 0xe0, 0x81, 0x50, 0x94, 0xe7, 0x91, 0xdb, 0x8d, 0x7c, - 0x27, 0x94, 0x70, 0xfd, 0xba, 0xdd, 0x43, 0xc4, 0xaa, 0x30, 0x6d, 0x73, 0xb7, 0x71, 0xc7, 0x7d, - 0xb2, 0xec, 0x76, 0xdc, 0xba, 0xb8, 0xbc, 0x17, 0xf1, 0xc9, 0x15, 0x4f, 0xe5, 0x80, 0xbb, 0x0d, - 0xa7, 0xe5, 0x3e, 0x71, 0xea, 0x54, 0x68, 0xea, 0x5d, 0x0d, 0xba, 0x98, 0x95, 0xd7, 0x8e, 0x59, - 0x8d, 0xa5, 0x59, 0x79, 0xed, 0xfe, 0xac, 0x12, 0x3a, 0xc5, 0x6a, 0xd3, 0x0d, 0x76, 0x78, 0x24, - 0xcd, 0x3d, 0xe1, 0x5c, 0xee, 0x42, 0x4e, 0x63, 0x15, 0x61, 0x99, 0x83, 0xa6, 0x9f, 0x69, 0x56, - 0x1a, 0x9d, 0x98, 0x79, 0x0f, 0x02, 0x2f, 0xe2, 0x7a, 0x0b, 0xc7, 0xf1, 0xb3, 0xb0, 0xff, 0xd1, - 0x50, 0xb6, 0x5f, 0x13, 0x7b, 0x28, 0x13, 0x6e, 0x5a, 0x23, 0x27, 0x7a, 0xb8, 0x65, 0xb7, 0xb2, - 0x87, 0x32, 0xe6, 0xa6, 0xb7, 0x73, 0x12, 0xdb, 0xa9, 0x71, 0xeb, 0xd3, 0xd0, 0x1e, 0x4a, 0xb6, - 0x2e, 0x3a, 0x2d, 0xe2, 0x6d, 0x31, 0xa3, 0xc9, 0xdc, 0x75, 0x0a, 0x3f, 0xed, 0x65, 0xb2, 0xd9, - 0x2a, 0x05, 0xaa, 0xd8, 0xc9, 0x30, 0x7e, 0x4d, 0x13, 0xb3, 0xbf, 0x06, 0xd3, 0xf7, 0x42, 0x7e, - 0xbd, 0xba, 0x51, 0x53, 0x21, 0x4f, 0x50, 0x43, 0x34, 0xb5, 0x78, 0xe5, 0x88, 0x4d, 0xe7, 0x92, - 0x4e, 0x83, 0x71, 0xf6, 0xe5, 0xb8, 0x75, 0x43, 0xee, 0x6c, 0x7b, 0x9d, 0x30, 0x8e, 0x1f, 0xa5, - 0x8f, 0x5b, 0xaa, 0x2a, 0xeb, 0x26, 0xcc, 0xf4, 0xb0, 0x61, 0x53, 0x00, 0x02, 0xe8, 0xdc, 0x5b, - 0xaf, 0xad, 0x6e, 0x96, 0x9e, 0x63, 0x25, 0x98, 0xc0, 0xdf, 0xab, 0xeb, 0x95, 0xa5, 0xb5, 0xd5, - 0x95, 0x52, 0x8e, 0xcd, 0xc0, 0x24, 0x42, 0x56, 0xaa, 0x35, 0x09, 0xca, 0xcb, 0x28, 0xcb, 0x76, - 0x49, 0x2e, 0xdd, 0x48, 0x2c, 0x00, 0x3c, 0x53, 0xac, 0xbf, 0x97, 0x87, 0xd3, 0xea, 0x58, 0xe1, - 0x91, 0x10, 0xc1, 0xbc, 0xf6, 0xce, 0x33, 0x7e, 0x3a, 0x5c, 0x37, 0x4e, 0x87, 0x97, 0x53, 0x27, - 0x75, 0xaa, 0x95, 0x87, 0x1c, 0x11, 0xbf, 0x31, 0x06, 0x67, 0x0e, 0xa5, 0x62, 0x5f, 0x14, 0xa7, - 0xb9, 0xc7, 0xdb, 0x51, 0xb5, 0xd1, 0xe4, 0x9b, 0x5e, 0x8b, 0xfb, 0xdd, 0x88, 0xcc, 0xab, 0x5f, - 0x42, 0xa5, 0x0c, 0x16, 0x3a, 0x5e, 0xa3, 0xc9, 0x9d, 0x48, 0x16, 0x1b, 0xd3, 0xad, 0x97, 0x5a, - 0xb0, 0x8c, 0x73, 0x7e, 0x54, 0xdb, 0x11, 0x0f, 0x1e, 0xa1, 0x09, 0x57, 0xcc, 0xf2, 0x21, 0xe7, - 0x1d, 0xc7, 0x15, 0xa5, 0x8e, 0x47, 0xc5, 0x26, 0xcb, 0x1e, 0x6a, 0x76, 0x5d, 0x63, 0xb9, 0x2c, - 0xae, 0x70, 0x77, 0xdc, 0x27, 0x64, 0x53, 0x42, 0x21, 0xf4, 0x62, 0x96, 0xd2, 0x9f, 0xb3, 0xe5, - 0x3e, 0xb1, 0x7b, 0x49, 0xd8, 0x57, 0xe1, 0x04, 0x1d, 0x40, 0xe4, 0x8f, 0xaf, 0x5a, 0x2c, 0xbd, - 0xfd, 0x5f, 0x3d, 0xd8, 0x2f, 0x9f, 0x52, 0xc1, 0x07, 0x55, 0x04, 0x86, 0xac, 0x56, 0x67, 0x73, - 0x61, 0x9b, 0xe2, 0x40, 0x4e, 0x75, 0xc7, 0x1d, 0x1e, 0x86, 0xca, 0xd1, 0x88, 0xae, 0x37, 0x7a, - 0x67, 0x3a, 0x2d, 0x59, 0x6e, 0xf7, 0xa5, 0x64, 0x37, 0x61, 0xea, 0x01, 0xdf, 0xd2, 0xc7, 0x67, - 0x24, 0xde, 0xaa, 0x4a, 0x8f, 0xf9, 0x56, 0xff, 0xc1, 0x49, 0xd1, 0x31, 0x0f, 0x95, 0xbc, 0x4f, - 0xf6, 0xd6, 0xbc, 0x30, 0xe2, 0x6d, 0x1e, 0x60, 0x9c, 0x97, 0x51, 0xdc, 0x0c, 0xe6, 0x13, 0x09, - 0xd9, 0x2c, 0x5f, 0x7a, 0xf1, 0x60, 0xbf, 0x7c, 0x46, 0x7a, 0xec, 0x35, 0x09, 0xee, 0xa4, 0x32, - 0x66, 0xf4, 0x72, 0x65, 0x5f, 0x87, 0x69, 0xdb, 0xef, 0x46, 0x5e, 0x7b, 0xa7, 0x16, 0x05, 0x6e, - 0xc4, 0x77, 0xe4, 0x81, 0x94, 0x04, 0x94, 0x49, 0x95, 0xd2, 0xfb, 0xa0, 0x04, 0x3a, 0x21, 0x41, - 0x8d, 0x13, 0xc1, 0x24, 0x60, 0x5f, 0x83, 0x29, 0xe9, 0x89, 0x1d, 0x57, 0x30, 0x66, 0x44, 0xfb, - 0x36, 0x0b, 0xef, 0x5f, 0x21, 0x13, 0x00, 0x84, 0x66, 0x55, 0x90, 0xe2, 0xc6, 0xbe, 0x4c, 0x9d, - 0xb5, 0xe1, 0xb5, 0x77, 0xe2, 0x69, 0x0c, 0xd8, 0xf3, 0x6f, 0x24, 0x5d, 0xd2, 0x11, 0x9f, 0xab, - 0xa6, 0x71, 0x1f, 0x7b, 0xa6, 0x5e, 0x3e, 0x2c, 0x82, 0x33, 0x95, 0x30, 0xf4, 0xc2, 0x88, 0x9c, - 0x10, 0x56, 0x9f, 0xf0, 0x7a, 0x57, 0x20, 0x8b, 0x8b, 0x22, 0x0f, 0xa4, 0x11, 0xec, 0xf0, 0xd2, - 0xa5, 0x83, 0xfd, 0xf2, 0x6b, 0x2e, 0x22, 0x3a, 0xe4, 0xb7, 0xe0, 0x70, 0x85, 0xea, 0x3c, 0x96, - 0xb8, 0x5a, 0x1b, 0x0e, 0x67, 0xca, 0xbe, 0x06, 0x27, 0x97, 0xdd, 0x90, 0x57, 0xdb, 0x21, 0x6f, - 0x87, 0x5e, 0xe4, 0x3d, 0xe2, 0xd4, 0xa9, 0x78, 0xf8, 0x15, 0x31, 0xb7, 0x88, 0x55, 0x77, 0x43, - 0xb1, 0x30, 0x63, 0x14, 0x87, 0x06, 0x45, 0xab, 0xa6, 0x0f, 0x17, 0x66, 0xc3, 0x54, 0xad, 0x76, - 0x73, 0xc5, 0x73, 0xe3, 0x75, 0x35, 0x89, 0xfd, 0xf5, 0x1a, 0xea, 0x67, 0xc2, 0x5d, 0xa7, 0xe1, - 0xb9, 0xf1, 0x82, 0xea, 0xd3, 0x59, 0x29, 0x0e, 0xd6, 0x7e, 0x0e, 0x4a, 0xe9, 0xa1, 0x64, 0x5f, - 0x82, 0x31, 0x69, 0x0c, 0xc4, 0xc3, 0x5d, 0x72, 0x4c, 0x56, 0xb6, 0x25, 0x31, 0xdc, 0x24, 0x22, - 0xa7, 0x20, 0x69, 0x6a, 0xc4, 0x75, 0xbb, 0x05, 0x74, 0x0a, 0x52, 0x44, 0xac, 0x01, 0x13, 0x72, - 0xb4, 0x38, 0x46, 0x93, 0x22, 0x9b, 0xd0, 0x17, 0xf5, 0xd5, 0x41, 0x45, 0x29, 0xfe, 0xf8, 0xf4, - 0x43, 0x73, 0x42, 0x22, 0x18, 0x55, 0x18, 0x5c, 0x97, 0x00, 0x8a, 0x8a, 0xd0, 0x3a, 0x0d, 0xa7, - 0xfa, 0x7c, 0xb3, 0xf5, 0x08, 0x9f, 0x83, 0xfb, 0xd4, 0xc8, 0xbe, 0x04, 0x73, 0x48, 0xb8, 0xec, - 0xb7, 0xdb, 0xbc, 0x1e, 0xe1, 0x76, 0xa4, 0x54, 0xa8, 0x05, 0x69, 0x73, 0x20, 0xdb, 0x5b, 0x8f, - 0x11, 0x9c, 0xb4, 0x26, 0x35, 0x93, 0x83, 0xf5, 0x33, 0x79, 0x98, 0xa7, 0x1d, 0xce, 0xe6, 0x75, - 0x3f, 0x68, 0x3c, 0xfb, 0x27, 0xea, 0xaa, 0x71, 0xa2, 0xbe, 0x14, 0x47, 0xa2, 0xc8, 0x6a, 0xe4, - 0x21, 0x07, 0xea, 0x2f, 0xe5, 0xe0, 0x85, 0xc3, 0x88, 0x44, 0xef, 0xc4, 0xd1, 0xb3, 0xc6, 0x7a, - 0xa2, 0x64, 0x75, 0x60, 0x16, 0x07, 0x74, 0x79, 0x97, 0xd7, 0x1f, 0x86, 0x37, 0xfd, 0x30, 0x42, - 0xb3, 0xf4, 0x7c, 0x9f, 0x07, 0xcb, 0xd7, 0x33, 0x1f, 0x2c, 0x4f, 0xca, 0x59, 0x56, 0x47, 0x1e, - 0x32, 0xbe, 0xd7, 0x43, 0xbe, 0x17, 0xda, 0x59, 0xac, 0xd1, 0xbc, 0xb8, 0xd2, 0x8d, 0x76, 0x37, - 0x02, 0xbe, 0xcd, 0x03, 0xde, 0xae, 0xf3, 0x4f, 0x98, 0x79, 0xb1, 0xd9, 0xb8, 0x81, 0x34, 0x18, - 0xff, 0x74, 0x12, 0xe6, 0xb2, 0xc8, 0x44, 0xbf, 0x68, 0x97, 0xe6, 0x74, 0xea, 0xb3, 0xbf, 0x95, - 0x83, 0x89, 0x1a, 0xaf, 0xfb, 0xed, 0xc6, 0x75, 0x34, 0x0b, 0xa1, 0xde, 0x71, 0xa4, 0xd0, 0x20, - 0xe0, 0xce, 0x76, 0xca, 0x5e, 0xe4, 0x3b, 0xfb, 0xe5, 0x2f, 0x0c, 0x76, 0x57, 0xad, 0xfb, 0x18, - 0x4d, 0x22, 0xc2, 0xd0, 0xdc, 0x71, 0x15, 0xf8, 0xc2, 0x63, 0x54, 0xca, 0x96, 0x60, 0x92, 0x96, - 0xab, 0xaf, 0x07, 0x4f, 0x93, 0xc1, 0x3a, 0x54, 0x41, 0x8f, 0xfe, 0xd1, 0x20, 0x61, 0x57, 0xa1, - 0x70, 0x6f, 0xf1, 0x3a, 0x8d, 0x81, 0x0a, 0x6e, 0x7e, 0x6f, 0xf1, 0x3a, 0xaa, 0xc3, 0xc4, 0x15, - 0x63, 0xb2, 0xbb, 0x68, 0x58, 0x6a, 0xdc, 0x5b, 0xbc, 0xce, 0xfe, 0x06, 0x9c, 0x58, 0xf1, 0x42, - 0xaa, 0x42, 0x1a, 0xba, 0x37, 0xd0, 0xbd, 0x6b, 0xa4, 0xcf, 0xec, 0xfd, 0x6c, 0xe6, 0xec, 0x7d, - 0xb1, 0x11, 0x33, 0x71, 0xa4, 0x15, 0x7d, 0x23, 0x1d, 0x24, 0x2e, 0xbb, 0x1e, 0xf6, 0x21, 0x4c, - 0xa1, 0xee, 0x1c, 0x6d, 0xff, 0x31, 0xbc, 0xef, 0x68, 0x9f, 0x9a, 0x3f, 0x9d, 0x59, 0xf3, 0x82, - 0x74, 0x12, 0x47, 0x0f, 0x02, 0x0c, 0x05, 0x6c, 0xdc, 0xfa, 0x0d, 0xce, 0xec, 0x16, 0x4c, 0x93, - 0xf8, 0x75, 0x77, 0x7b, 0x73, 0x97, 0xaf, 0xb8, 0x7b, 0x64, 0x64, 0x81, 0x37, 0x3a, 0x92, 0xd9, - 0x1c, 0x7f, 0xdb, 0x89, 0x76, 0xb9, 0xd3, 0x70, 0x0d, 0x41, 0x25, 0x45, 0xc8, 0xbe, 0x17, 0xc6, - 0xd7, 0xfc, 0xba, 0x90, 0xbc, 0x71, 0x67, 0x90, 0x76, 0x17, 0x1f, 0x60, 0x72, 0x2d, 0x09, 0x4e, - 0x89, 0x53, 0xdf, 0xd9, 0x2f, 0xbf, 0x7d, 0xdc, 0x49, 0xa3, 0x55, 0x60, 0xeb, 0xb5, 0xb1, 0x65, - 0x28, 0x3e, 0xe0, 0x5b, 0xa2, 0xb5, 0xe9, 0xc4, 0x3b, 0x0a, 0x4c, 0x66, 0x55, 0xf4, 0xcb, 0x30, - 0xab, 0x22, 0x18, 0x0b, 0x60, 0x06, 0xfb, 0x67, 0xc3, 0x0d, 0xc3, 0xc7, 0x7e, 0xd0, 0xc0, 0x08, - 0xeb, 0xfd, 0x4c, 0x3a, 0x16, 0x33, 0x3b, 0xff, 0x05, 0xd9, 0xf9, 0x1d, 0x8d, 0x83, 0x2e, 0x40, - 0xf6, 0xb0, 0x67, 0x5f, 0x87, 0x29, 0xf2, 0x6c, 0xbe, 0x73, 0xbd, 0x82, 0xab, 0x72, 0xc2, 0x70, - 0x92, 0x33, 0x0b, 0xa5, 0x94, 0x4a, 0x8e, 0xd2, 0x4a, 0x03, 0xe5, 0xb4, 0xb6, 0x5d, 0xf3, 0xd5, - 0x4c, 0x27, 0x61, 0x1b, 0x30, 0xbe, 0xc2, 0x1f, 0x79, 0x75, 0x8e, 0x8e, 0x3c, 0x64, 0x44, 0x1b, - 0x67, 0x0e, 0x49, 0x4a, 0xa4, 0x2e, 0xa6, 0x81, 0x00, 0xe9, 0x16, 0x64, 0x5a, 0x4d, 0xc6, 0x88, - 0xec, 0x1a, 0x14, 0xaa, 0x2b, 0x1b, 0x64, 0x43, 0xab, 0x7c, 0x63, 0xaa, 0x8d, 0x0d, 0x95, 0x67, - 0x01, 0x8d, 0xa0, 0xbc, 0x86, 0x61, 0x81, 0x5b, 0x5d, 0xd9, 0x60, 0xdb, 0x30, 0x89, 0x1d, 0x70, - 0x93, 0xbb, 0xb2, 0x6f, 0xa7, 0xfb, 0xf4, 0xed, 0xa5, 0xcc, 0xbe, 0x9d, 0x97, 0x7d, 0xbb, 0x4b, - 0xd4, 0x46, 0xe0, 0x78, 0x9d, 0xad, 0x10, 0x69, 0x29, 0x99, 0x85, 0x0a, 0x77, 0xbe, 0xb9, 0x86, - 0x46, 0x1e, 0x24, 0xd2, 0xaa, 0xdc, 0x17, 0x71, 0xfc, 0xf5, 0xbe, 0x26, 0xfa, 0xbd, 0x7c, 0xd8, - 0xe7, 0x61, 0xe8, 0xee, 0xc3, 0xc8, 0x9d, 0x9f, 0x31, 0xfa, 0x51, 0x80, 0x54, 0xf3, 0x51, 0x0b, - 0xe9, 0x3f, 0x34, 0xc2, 0x08, 0x21, 0x8d, 0x18, 0x8a, 0x9b, 0x6e, 0xd0, 0x78, 0xec, 0x06, 0xe8, - 0x4d, 0x39, 0x6b, 0xb0, 0xd0, 0x4a, 0xe4, 0x50, 0xec, 0x12, 0x20, 0xe5, 0x62, 0xa9, 0xb3, 0x60, - 0xdf, 0x03, 0xa7, 0x43, 0x6f, 0xa7, 0xed, 0x46, 0xdd, 0x80, 0x3b, 0x6e, 0x73, 0xc7, 0x0f, 0xbc, - 0x68, 0xb7, 0xe5, 0x84, 0x5d, 0x2f, 0xe2, 0xf3, 0x73, 0x46, 0xea, 0xcb, 0x9a, 0xc2, 0xab, 0x28, - 0xb4, 0x9a, 0xc0, 0xb2, 0x4f, 0x85, 0xd9, 0x05, 0xec, 0xcb, 0x30, 0xa9, 0x6f, 0xc9, 0xe1, 0xfc, - 0x89, 0x73, 0x85, 0x0b, 0x53, 0xf1, 0xc5, 0x23, 0xbd, 0x81, 0xab, 0x90, 0x91, 0xda, 0x09, 0x11, - 0x9a, 0x21, 0x23, 0x35, 0x5e, 0x71, 0x32, 0x29, 0x56, 0x9a, 0xb5, 0x67, 0x68, 0xc6, 0x52, 0x2f, - 0xdf, 0xb9, 0x5e, 0xb1, 0x47, 0x37, 0xaa, 0xf7, 0x6b, 0x4d, 0x3f, 0xb2, 0xfe, 0x8b, 0x1c, 0x6e, - 0xe2, 0xec, 0x35, 0x8c, 0x7e, 0x12, 0x3f, 0xe7, 0xa1, 0xfe, 0xd6, 0xed, 0xa4, 0xe2, 0x0d, 0x4b, - 0x14, 0xf6, 0x3a, 0x8c, 0x5c, 0x77, 0xeb, 0x3c, 0x52, 0x8f, 0xae, 0x88, 0xbc, 0x8d, 0x10, 0x5d, - 0xd9, 0x2b, 0x71, 0x84, 0x7c, 0x29, 0x27, 0x77, 0x25, 0xc9, 0x8e, 0xba, 0x5c, 0x51, 0x6f, 0xae, - 0x28, 0x5f, 0xd2, 0xa2, 0xd0, 0xd2, 0xa7, 0xa6, 0xec, 0x93, 0x33, 0x39, 0x58, 0x7f, 0x9a, 0x4b, - 0x76, 0x25, 0xf6, 0x2a, 0x0c, 0xd9, 0x1b, 0xf1, 0xf7, 0x4b, 0x0f, 0xc9, 0xd4, 0xe7, 0x23, 0x02, - 0xfb, 0x32, 0x9c, 0xd0, 0xf8, 0xf4, 0x18, 0x4b, 0xbf, 0x82, 0x0e, 0x7c, 0xda, 0x97, 0x64, 0x5b, - 0x4c, 0x67, 0xf3, 0x40, 0x61, 0x3a, 0x29, 0x58, 0xe1, 0x6d, 0x4f, 0xf2, 0xd6, 0x1a, 0xab, 0xf3, - 0x6e, 0x20, 0x42, 0xba, 0xb1, 0x59, 0x1c, 0xa4, 0xff, 0x9e, 0xf5, 0xeb, 0x39, 0x63, 0xb7, 0x89, - 0xd3, 0x50, 0xe6, 0x8e, 0x48, 0x43, 0xf9, 0x16, 0x40, 0xa5, 0x1b, 0xf9, 0xab, 0xed, 0xc0, 0x6f, - 0x4a, 0x2d, 0x0a, 0x85, 0xdc, 0x46, 0xdd, 0x30, 0x47, 0xb0, 0xe1, 0x66, 0x14, 0x23, 0x67, 0xda, - 0x95, 0x17, 0x3e, 0xaa, 0x5d, 0xb9, 0xf5, 0xbb, 0x39, 0x63, 0x8d, 0x0a, 0x29, 0x91, 0xa6, 0xa2, - 0x6e, 0xf6, 0xd3, 0xf1, 0x1e, 0x39, 0x61, 0xd3, 0xd7, 0x77, 0x48, 0x85, 0xc6, 0xfe, 0xcd, 0x1c, - 0x9c, 0x94, 0x06, 0xda, 0xeb, 0xdd, 0xd6, 0x16, 0x0f, 0xee, 0xbb, 0x4d, 0xaf, 0x21, 0xbd, 0x54, - 0xa5, 0x00, 0x7c, 0xa1, 0x77, 0xc1, 0x67, 0xe3, 0xcb, 0x8b, 0xaa, 0x34, 0x18, 0x77, 0xda, 0x58, - 0xe8, 0x3c, 0x8a, 0x4b, 0xf5, 0x8b, 0x6a, 0x36, 0xbd, 0xf5, 0xcb, 0x39, 0x78, 0xf1, 0xc8, 0x5a, - 0xd8, 0x65, 0x18, 0x55, 0xb1, 0xce, 0x73, 0xd8, 0xf1, 0x68, 0x2c, 0xd9, 0x1b, 0xe7, 0x5c, 0x61, - 0xb1, 0xaf, 0xc0, 0x09, 0x9d, 0xd5, 0x66, 0xe0, 0x7a, 0x7a, 0x44, 0xf1, 0x8c, 0xaf, 0x8e, 0x04, - 0x4a, 0x5a, 0x5a, 0xcb, 0x66, 0x62, 0xfd, 0x7f, 0x39, 0x2d, 0x31, 0xed, 0x33, 0x2a, 0xc3, 0x5f, - 0x33, 0x64, 0x78, 0x15, 0x77, 0x2e, 0x6e, 0x95, 0x28, 0xcb, 0xbc, 0x77, 0x4d, 0x6b, 0x46, 0xbf, - 0x08, 0xf8, 0xa1, 0x3c, 0x8c, 0xdf, 0x0b, 0x79, 0x20, 0x1f, 0x72, 0x3f, 0x59, 0xf1, 0xc5, 0xe2, - 0x76, 0x0d, 0x14, 0x01, 0xea, 0x8f, 0x73, 0xa8, 0xe0, 0xd7, 0x29, 0x44, 0x6f, 0x68, 0xc9, 0xa8, - 0xb0, 0x37, 0x30, 0x0d, 0x15, 0x42, 0x65, 0xe0, 0xa1, 0x35, 0x33, 0x2f, 0x1d, 0x26, 0x27, 0x5c, - 0x63, 0x5f, 0x80, 0xe1, 0x7b, 0xa8, 0xae, 0x34, 0x23, 0x12, 0xc4, 0xfc, 0xb1, 0x50, 0x6e, 0xd2, - 0xdd, 0xd0, 0x0c, 0x96, 0x24, 0x09, 0x59, 0x0d, 0x46, 0x97, 0x03, 0x8e, 0x69, 0x66, 0x87, 0x06, - 0xf7, 0xa7, 0xad, 0x4b, 0x92, 0xb4, 0x3f, 0x2d, 0x71, 0xb2, 0x7e, 0x3a, 0x0f, 0x2c, 0x69, 0x23, - 0xe6, 0x54, 0x09, 0x9f, 0xd9, 0x41, 0x7f, 0xdf, 0x18, 0xf4, 0x33, 0x3d, 0x83, 0x2e, 0x9b, 0x37, - 0xd0, 0xd8, 0xff, 0x66, 0x0e, 0x4e, 0x66, 0x13, 0xb2, 0x97, 0x60, 0xe4, 0xee, 0xe6, 0x86, 0x0a, - 0x6a, 0x41, 0x4d, 0xf1, 0x3b, 0xa8, 0x2b, 0xb0, 0xa9, 0x88, 0xbd, 0x01, 0x23, 0x5f, 0xb4, 0x97, - 0xc5, 0x39, 0xa4, 0x45, 0xed, 0xfe, 0x46, 0xe0, 0xd4, 0xcd, 0xa3, 0x88, 0x90, 0xf4, 0xb1, 0x2d, - 0x3c, 0xb5, 0xb1, 0xfd, 0xf1, 0x3c, 0x4c, 0x57, 0xea, 0x75, 0x1e, 0x86, 0x42, 0xda, 0xe1, 0x61, - 0xf4, 0xcc, 0x0e, 0x6c, 0x76, 0xb8, 0x0a, 0xa3, 0x6d, 0x03, 0x8d, 0xea, 0x6f, 0xe7, 0xe0, 0x84, - 0xa2, 0x7a, 0xe4, 0xf1, 0xc7, 0x9b, 0xbb, 0x01, 0x0f, 0x77, 0xfd, 0x66, 0x63, 0xe0, 0xd4, 0x00, - 0x42, 0xd0, 0xc3, 0x78, 0xbf, 0xfa, 0xab, 0xfe, 0x36, 0x42, 0x0c, 0x41, 0x4f, 0xc6, 0x04, 0xbe, - 0x0c, 0xa3, 0x95, 0x4e, 0x27, 0xf0, 0x1f, 0xc9, 0x65, 0x4f, 0xe1, 0xd0, 0x5c, 0x09, 0x32, 0xdc, - 0x91, 0x25, 0x48, 0x7c, 0xc6, 0x0a, 0x6f, 0xcb, 0x40, 0x5f, 0x93, 0xf2, 0x33, 0x1a, 0xbc, 0xad, - 0xcb, 0xe2, 0x58, 0x6e, 0xd5, 0x80, 0x6d, 0x04, 0x7e, 0xcb, 0x8f, 0x78, 0x43, 0xb6, 0x07, 0xbd, - 0xb8, 0x8f, 0x0c, 0x0c, 0xb4, 0xe9, 0x45, 0x4d, 0x23, 0x30, 0x50, 0x24, 0x00, 0xb6, 0x84, 0x5b, - 0xff, 0xd7, 0x30, 0x4c, 0xe8, 0xbd, 0xc3, 0x2c, 0x19, 0xef, 0xdb, 0x0f, 0xf4, 0x50, 0x02, 0x2e, - 0x42, 0x6c, 0x2a, 0x49, 0xe2, 0x70, 0xe4, 0x8f, 0x8c, 0xc3, 0xf1, 0x00, 0x26, 0x37, 0x02, 0x1f, - 0xe3, 0xb6, 0xc9, 0xf4, 0xe3, 0x72, 0x2b, 0x9c, 0xd5, 0xee, 0x9d, 0x62, 0x20, 0xf1, 0x3d, 0x14, - 0x25, 0xfb, 0x0e, 0x61, 0x3b, 0xe9, 0xe4, 0xe4, 0x26, 0x1f, 0x69, 0x6a, 0xe1, 0x86, 0x14, 0x7c, - 0x31, 0x36, 0xb5, 0x10, 0x10, 0xd3, 0xd4, 0x42, 0x40, 0xf4, 0xb5, 0x36, 0xfc, 0xb4, 0xd6, 0x1a, - 0xfb, 0xe9, 0x1c, 0x8c, 0x57, 0xda, 0x6d, 0x8a, 0xef, 0x71, 0x84, 0x6b, 0xf3, 0x57, 0xc8, 0xda, - 0xe2, 0xed, 0x8f, 0x64, 0x6d, 0x81, 0x72, 0x4b, 0x88, 0x92, 0x6a, 0x52, 0xa1, 0x7e, 0x5b, 0xd3, - 0xbe, 0x83, 0xbd, 0x0d, 0xa5, 0x78, 0x92, 0x57, 0xdb, 0x0d, 0xfe, 0x84, 0xcb, 0x7c, 0x49, 0x93, - 0x14, 0x76, 0x55, 0x97, 0x4c, 0xd3, 0x88, 0x6c, 0x13, 0xc0, 0x8d, 0x67, 0x57, 0x2a, 0xf1, 0x5b, - 0xef, 0xf4, 0x23, 0xe9, 0x19, 0x7f, 0xe3, 0x83, 0x96, 0x2e, 0x3d, 0x27, 0x7c, 0x58, 0x0b, 0xa6, - 0x65, 0xd6, 0x35, 0xcc, 0xc6, 0x8e, 0xd1, 0xc5, 0xe1, 0xc8, 0x71, 0x78, 0x95, 0xf4, 0x67, 0xcf, - 0x53, 0x2e, 0x37, 0x4c, 0xf0, 0xee, 0x64, 0x84, 0x1a, 0x4f, 0xf3, 0x96, 0x41, 0x6e, 0xed, 0x53, - 0xbd, 0xdf, 0x2b, 0x27, 0xfd, 0x8f, 0xe7, 0xe0, 0xa4, 0x3e, 0xe9, 0x6b, 0xdd, 0xad, 0x96, 0x87, - 0x97, 0x42, 0x76, 0x09, 0xc6, 0x68, 0x4e, 0xc6, 0x97, 0xa8, 0xde, 0x20, 0xe9, 0x09, 0x0a, 0x5b, - 0x15, 0xd3, 0x50, 0xf0, 0x20, 0xa9, 0x7b, 0x36, 0xb5, 0x4f, 0x89, 0xa2, 0x24, 0xa3, 0x67, 0x80, - 0xbf, 0xcd, 0xf9, 0x29, 0x20, 0xd6, 0x7b, 0x30, 0x63, 0x8e, 0x44, 0x8d, 0x47, 0xec, 0x22, 0x8c, - 0xaa, 0xe1, 0xcb, 0x65, 0x0f, 0x9f, 0x2a, 0xb7, 0x1e, 0x00, 0xeb, 0xa1, 0x0f, 0xd1, 0x2c, 0x8a, - 0x47, 0xca, 0x6c, 0x4f, 0x3d, 0x4a, 0xf6, 0x20, 0x2e, 0xcd, 0xd2, 0xf7, 0x8d, 0x1b, 0xb6, 0xe5, - 0x82, 0xd4, 0xfa, 0xd3, 0x29, 0x98, 0xcd, 0xd8, 0x73, 0x8f, 0x90, 0x89, 0xca, 0xe6, 0x06, 0x31, - 0x16, 0x47, 0x46, 0x50, 0xdb, 0xc2, 0x7b, 0x30, 0x7c, 0xe4, 0x76, 0x20, 0x3d, 0x0b, 0x52, 0xbb, - 0x80, 0x24, 0xfb, 0xae, 0xc8, 0x45, 0x7a, 0xf0, 0x92, 0xe1, 0xa7, 0x16, 0xbc, 0x64, 0x09, 0x26, - 0xa9, 0x55, 0xb4, 0x5d, 0x69, 0x16, 0xae, 0x81, 0x2c, 0x70, 0x7a, 0xb6, 0x2d, 0x93, 0x44, 0xf2, - 0x08, 0xfd, 0xe6, 0x23, 0x4e, 0x3c, 0x46, 0x75, 0x1e, 0x58, 0x90, 0xc9, 0x43, 0x23, 0x61, 0xff, - 0x11, 0x66, 0x7c, 0x42, 0x88, 0xbe, 0x67, 0x15, 0x0f, 0xdb, 0xb3, 0x1a, 0x4f, 0x67, 0xcf, 0x3a, - 0xa3, 0xbe, 0x31, 0x7b, 0xef, 0xca, 0xf8, 0x2c, 0xf6, 0x8b, 0x39, 0x98, 0x91, 0x11, 0x34, 0xf4, - 0x8f, 0x3d, 0x34, 0x2a, 0x42, 0xfd, 0xe9, 0x7c, 0xec, 0x0b, 0x94, 0xe9, 0x24, 0xfb, 0x5b, 0x7b, - 0x3f, 0x8a, 0x7d, 0x0f, 0x40, 0xbc, 0xa2, 0x64, 0xa0, 0xc9, 0xf1, 0xc5, 0x17, 0x32, 0x76, 0x81, - 0x18, 0x29, 0x89, 0xca, 0x1e, 0xc5, 0x74, 0x46, 0x9e, 0xaf, 0x18, 0xca, 0xfe, 0x06, 0xcc, 0x89, - 0xf5, 0x12, 0x43, 0x28, 0xde, 0xcf, 0xfc, 0x38, 0xd6, 0xf2, 0x99, 0xfe, 0x32, 0xd1, 0xa5, 0x2c, - 0x32, 0x19, 0x96, 0x34, 0x49, 0xb9, 0x1a, 0xe9, 0xa1, 0x01, 0x32, 0x2b, 0xc2, 0x30, 0x5a, 0xf8, - 0xf5, 0x32, 0x72, 0x7a, 0x9f, 0xfd, 0xed, 0xb4, 0x5a, 0x0b, 0x72, 0x7f, 0x0b, 0x4d, 0x47, 0x53, - 0x04, 0xb1, 0x2f, 0x02, 0x8b, 0x43, 0x4f, 0x48, 0x18, 0x57, 0x51, 0xd5, 0xa5, 0xba, 0x39, 0x09, - 0x61, 0x11, 0xa8, 0x62, 0x7d, 0x92, 0xf4, 0x12, 0x33, 0x0e, 0x73, 0xd4, 0x68, 0x01, 0x55, 0xe9, - 0x98, 0xc2, 0xf9, 0x29, 0x23, 0x9a, 0x52, 0x52, 0x92, 0xe4, 0x66, 0xd5, 0x72, 0x3a, 0x19, 0x2a, - 0xa7, 0x2c, 0x76, 0xec, 0x1a, 0x8c, 0xa1, 0xb7, 0xe7, 0x4d, 0x65, 0xec, 0x45, 0x86, 0x27, 0xe8, - 0x17, 0xea, 0xec, 0x9a, 0x26, 0x5b, 0x09, 0xaa, 0xb8, 0x0e, 0xac, 0x04, 0x7b, 0x76, 0xb7, 0x8d, - 0x4a, 0x61, 0xd2, 0x77, 0x34, 0x82, 0x3d, 0x27, 0xe8, 0x9a, 0xee, 0xc0, 0x88, 0xc4, 0xbe, 0x0e, - 0xe3, 0x77, 0xdc, 0x27, 0x4a, 0x27, 0x4c, 0x8a, 0xdf, 0xc3, 0x76, 0x20, 0x4b, 0xb5, 0xa6, 0xe5, - 0x3e, 0x71, 0x1a, 0xdd, 0x74, 0x50, 0x54, 0xdc, 0x86, 0x74, 0x96, 0xec, 0xab, 0x00, 0x9a, 0xa6, - 0x9a, 0x1d, 0x59, 0xc1, 0x8b, 0x2a, 0x46, 0x58, 0xa6, 0x06, 0x1b, 0xf9, 0x6b, 0x0c, 0x53, 0x92, - 0xc3, 0xdc, 0x77, 0x4f, 0x72, 0x38, 0xf1, 0xdd, 0x93, 0x1c, 0x16, 0xb6, 0xe0, 0x74, 0xdf, 0xa5, - 0x93, 0x11, 0xba, 0xf5, 0xb2, 0x19, 0xba, 0xf5, 0x74, 0xbf, 0x23, 0x36, 0x34, 0x03, 0xf1, 0xcf, - 0x96, 0xe6, 0xfa, 0x4b, 0x27, 0xdf, 0xce, 0xa7, 0x8e, 0x5c, 0xba, 0x58, 0xc8, 0xc4, 0x2d, 0xfd, - 0x64, 0x92, 0x3c, 0xe6, 0xea, 0x94, 0x87, 0x72, 0x3e, 0xb9, 0xd0, 0xa4, 0xd2, 0x9b, 0xcb, 0xe3, - 0xf9, 0xe3, 0x9e, 0xbe, 0xef, 0xc0, 0x94, 0x4c, 0xaf, 0x77, 0x9b, 0xef, 0x3d, 0xf6, 0x83, 0x86, - 0xca, 0x61, 0x8d, 0x32, 0x78, 0x4f, 0x6e, 0xdc, 0x14, 0x2e, 0x5b, 0x51, 0x0e, 0x84, 0xc3, 0x58, - 0xfb, 0xe9, 0xcc, 0x5d, 0x4c, 0x20, 0x1c, 0xe6, 0x5b, 0xc8, 0xde, 0x8c, 0x05, 0x35, 0x1e, 0xe8, - 0xe1, 0xf8, 0x03, 0x05, 0xcc, 0x90, 0xd7, 0x78, 0x60, 0xfd, 0x61, 0x01, 0x98, 0xac, 0x69, 0xd9, - 0xed, 0xb8, 0xe8, 0x5e, 0xeb, 0x61, 0x60, 0x9a, 0x12, 0xe1, 0xb8, 0x5b, 0x4d, 0xae, 0x47, 0x75, - 0x22, 0xe3, 0xda, 0xb8, 0xcc, 0x49, 0x5f, 0x74, 0x7a, 0x08, 0xfb, 0x6c, 0x75, 0xf9, 0x8f, 0xb3, - 0xd5, 0x7d, 0x1d, 0x9e, 0xaf, 0x74, 0x30, 0x4f, 0xa7, 0xaa, 0xe5, 0xba, 0x1f, 0xa8, 0x4d, 0xca, - 0x70, 0xdc, 0x72, 0x63, 0xb4, 0x9e, 0x2f, 0x3d, 0x8c, 0x85, 0x26, 0xa7, 0x88, 0x79, 0xd9, 0x89, - 0xf4, 0x40, 0x00, 0x4a, 0x4e, 0xe9, 0x60, 0x49, 0x86, 0x9c, 0x22, 0x49, 0x14, 0x0f, 0x2f, 0x50, - 0x72, 0x0a, 0x26, 0xa0, 0x49, 0x78, 0x78, 0x01, 0xef, 0x23, 0xeb, 0xc4, 0x24, 0xec, 0x1d, 0x18, - 0xaf, 0x74, 0x23, 0x9f, 0x18, 0x93, 0x55, 0x78, 0x62, 0xbf, 0x4d, 0x9f, 0x62, 0x5c, 0x7d, 0x12, - 0x74, 0xeb, 0x4f, 0x0a, 0x70, 0xba, 0x77, 0x78, 0xa9, 0x34, 0x5e, 0x1f, 0xb9, 0x23, 0xd6, 0x47, - 0xd6, 0x6c, 0xc8, 0x27, 0xe1, 0xd1, 0x9f, 0xc6, 0x6c, 0x90, 0xe9, 0x3e, 0x3f, 0xe2, 0x6c, 0xa8, - 0xc1, 0xb8, 0x7e, 0xde, 0x0d, 0x7d, 0xd4, 0xf3, 0x4e, 0xe7, 0x22, 0x2e, 0xf5, 0x32, 0xfe, 0xc1, - 0x70, 0xf2, 0x74, 0x94, 0x0e, 0x7d, 0x20, 0x31, 0xd8, 0xbf, 0x01, 0xe7, 0xe4, 0x9e, 0x94, 0x6e, - 0xec, 0xd2, 0x9e, 0xe2, 0x48, 0x03, 0xb7, 0x78, 0xb0, 0x5f, 0xbe, 0x24, 0x55, 0x25, 0x4e, 0x4f, - 0xb7, 0x39, 0x5b, 0x7b, 0x8e, 0xfa, 0x32, 0xad, 0x92, 0x23, 0x79, 0x63, 0x8e, 0x4f, 0x2d, 0xff, - 0xe2, 0x1b, 0x59, 0xee, 0x32, 0x32, 0x3a, 0xb1, 0x04, 0x9b, 0x9e, 0x32, 0x4a, 0x1d, 0x96, 0xcf, - 0x54, 0x87, 0x29, 0x7d, 0x4a, 0x21, 0x53, 0x9f, 0xb2, 0x02, 0xd3, 0xb5, 0xee, 0x96, 0xaa, 0x3b, - 0xed, 0x2f, 0x17, 0x76, 0xb7, 0xb2, 0x1a, 0x94, 0x26, 0xb1, 0x7e, 0x38, 0x0f, 0x13, 0x1b, 0xcd, - 0xee, 0x8e, 0xd7, 0x5e, 0x71, 0x23, 0xf7, 0x99, 0xd5, 0xd0, 0xbd, 0x65, 0x68, 0xe8, 0x62, 0xaf, - 0xb0, 0xb8, 0x61, 0x03, 0xa9, 0xe7, 0x7e, 0x2a, 0x07, 0xd3, 0x09, 0x89, 0x3c, 0x67, 0x6f, 0xc2, - 0x90, 0xf8, 0x41, 0xf7, 0xd6, 0x73, 0x3d, 0x8c, 0x65, 0xd2, 0xaf, 0xf8, 0x2f, 0xd2, 0x99, 0x99, - 0x19, 0x75, 0x90, 0xc3, 0xc2, 0x67, 0x61, 0x2c, 0x61, 0x7b, 0x9c, 0x64, 0x5f, 0xbf, 0x92, 0x83, - 0x52, 0xba, 0x25, 0xec, 0x36, 0x8c, 0x0a, 0x4e, 0x1e, 0x57, 0x57, 0xea, 0x97, 0xfb, 0xb4, 0xf9, - 0x12, 0xa1, 0xc9, 0xcf, 0xc3, 0xce, 0xe7, 0x12, 0x62, 0x2b, 0x0e, 0x0b, 0x36, 0x4c, 0xe8, 0x58, - 0x19, 0x5f, 0xf7, 0xba, 0x29, 0x5c, 0x9c, 0xcc, 0xee, 0x07, 0x23, 0x45, 0x99, 0xf1, 0xd5, 0x24, - 0x37, 0x9c, 0x37, 0x26, 0x17, 0xf6, 0x55, 0x6a, 0xde, 0xc8, 0x69, 0xb6, 0x98, 0x04, 0x4c, 0xd7, - 0xe7, 0x59, 0xc6, 0x84, 0x8e, 0xf1, 0xd8, 0xeb, 0x30, 0x22, 0xeb, 0xd3, 0x53, 0xf5, 0x74, 0x10, - 0xa2, 0x8b, 0xb8, 0x12, 0xc7, 0xfa, 0xfb, 0x05, 0x38, 0x99, 0x7c, 0xde, 0xbd, 0x4e, 0xc3, 0x8d, - 0xf8, 0x86, 0x1b, 0xb8, 0xad, 0xf0, 0x88, 0x15, 0x70, 0xa1, 0xe7, 0xd3, 0x30, 0x75, 0x8b, 0xfa, - 0x34, 0xed, 0x83, 0xac, 0xd4, 0x07, 0xa1, 0xfa, 0x52, 0x7e, 0x90, 0xfa, 0x0c, 0x76, 0x1b, 0x0a, - 0x35, 0x1e, 0xd1, 0xb6, 0x79, 0xbe, 0xa7, 0x57, 0xf5, 0xef, 0xba, 0x54, 0xe3, 0x91, 0x1c, 0x44, - 0x19, 0x97, 0x87, 0x1b, 0x91, 0x58, 0x6b, 0x3c, 0x62, 0x0f, 0x60, 0x64, 0xf5, 0x49, 0x87, 0xd7, - 0x23, 0x4a, 0x55, 0x77, 0xf1, 0x70, 0x7e, 0x12, 0x57, 0xcb, 0x54, 0xc7, 0x11, 0xa0, 0x77, 0x96, - 0x44, 0x59, 0xb8, 0x06, 0x45, 0x55, 0xf9, 0x71, 0x66, 0xee, 0xc2, 0x5b, 0x30, 0xae, 0x55, 0x72, - 0xac, 0x49, 0xff, 0x73, 0x62, 0x5f, 0xf5, 0x9b, 0x2a, 0xbb, 0xdd, 0x6a, 0x8f, 0x98, 0x97, 0xd3, - 0xb3, 0xae, 0x8b, 0x12, 0xe7, 0x21, 0x15, 0x1d, 0x22, 0xef, 0x55, 0x61, 0xba, 0xf6, 0xd0, 0xeb, - 0x24, 0x01, 0x31, 0x8d, 0xc3, 0x14, 0x53, 0x59, 0xd0, 0x9d, 0x3b, 0x7d, 0x98, 0xa6, 0xe9, 0xac, - 0x3f, 0xcf, 0xc1, 0x88, 0xf8, 0xeb, 0xfe, 0xb5, 0x67, 0x74, 0xcb, 0xbc, 0x6a, 0x6c, 0x99, 0x33, - 0x5a, 0x4c, 0x6a, 0xdc, 0x38, 0xae, 0x1d, 0xb1, 0x59, 0xee, 0xd3, 0x00, 0x49, 0x64, 0x76, 0x03, - 0x46, 0xc9, 0x1a, 0x88, 0xcc, 0xb6, 0xf5, 0x20, 0xd7, 0xca, 0x4e, 0x28, 0xbe, 0x9c, 0xfb, 0x9d, - 0xb4, 0x36, 0x43, 0x51, 0x0b, 0x91, 0x5c, 0x85, 0x26, 0x35, 0x72, 0xa2, 0xfa, 0xe8, 0x67, 0x27, - 0x43, 0x34, 0x6b, 0x59, 0x8c, 0xfb, 0x78, 0xe1, 0x57, 0xe8, 0x21, 0xa3, 0x70, 0x18, 0x93, 0x93, - 0x2a, 0x65, 0x64, 0xe6, 0x1b, 0xc7, 0x1f, 0x9c, 0x90, 0x81, 0x8d, 0xd5, 0x87, 0xbd, 0x0b, 0x13, - 0xd7, 0xfd, 0xe0, 0xb1, 0x1b, 0xc8, 0x70, 0x95, 0x64, 0x39, 0x20, 0xae, 0x8e, 0x93, 0xdb, 0x12, - 0x2e, 0x03, 0x5e, 0x7e, 0x67, 0xbf, 0x3c, 0xb4, 0xe4, 0xfb, 0x4d, 0xdb, 0x40, 0x67, 0x77, 0x61, - 0xf2, 0x8e, 0xfb, 0x44, 0xbb, 0xf4, 0x4a, 0xc7, 0x99, 0x8b, 0x62, 0x02, 0x8b, 0x5b, 0xf3, 0xd1, - 0xa6, 0x59, 0x26, 0x3d, 0xf3, 0x60, 0x6a, 0xc3, 0x0f, 0x22, 0xaa, 0xc4, 0x6b, 0xef, 0x50, 0x63, - 0x7b, 0x8d, 0xcb, 0x2e, 0x67, 0x1a, 0x97, 0x9d, 0xee, 0xf8, 0x41, 0xe4, 0x6c, 0xc7, 0xe4, 0x46, - 0x40, 0x2b, 0x83, 0x31, 0x7b, 0x17, 0x66, 0xb4, 0x80, 0x7d, 0xd7, 0xfd, 0xa0, 0xe5, 0x2a, 0xa1, - 0x1c, 0xf5, 0xc0, 0x68, 0x6f, 0xb2, 0x8d, 0x60, 0xbb, 0x17, 0x93, 0x7d, 0x39, 0xcb, 0x15, 0x69, - 0x38, 0xb1, 0x4e, 0xcb, 0x70, 0x45, 0xea, 0x67, 0x9d, 0xd6, 0xeb, 0x94, 0xb4, 0x73, 0x98, 0xf5, - 0x6a, 0x71, 0xe9, 0x0a, 0x5d, 0xbf, 0x8f, 0xb6, 0x4e, 0x8d, 0xc7, 0xad, 0x8f, 0x95, 0xea, 0x22, - 0x14, 0x96, 0x36, 0xae, 0xe3, 0xeb, 0x85, 0x32, 0xb4, 0x69, 0xef, 0xba, 0xed, 0x3a, 0x0a, 0xcb, - 0x64, 0x31, 0xae, 0xef, 0xc8, 0x4b, 0x1b, 0xd7, 0x99, 0x0b, 0xb3, 0x1b, 0x3c, 0x68, 0x79, 0xd1, - 0x97, 0xae, 0x5c, 0xd1, 0x06, 0xaa, 0x88, 0x9f, 0x76, 0x99, 0x3e, 0xad, 0xdc, 0x41, 0x14, 0xe7, - 0xc9, 0x95, 0x2b, 0x99, 0xc3, 0x11, 0x7f, 0x58, 0x16, 0x2f, 0xb1, 0x33, 0xde, 0x71, 0x9f, 0x24, - 0x86, 0xfe, 0x21, 0x39, 0x75, 0x9e, 0x51, 0x13, 0x2b, 0x71, 0x12, 0x30, 0x76, 0x46, 0x93, 0x48, - 0xdc, 0x75, 0x92, 0xe9, 0x15, 0x92, 0x3b, 0xcc, 0x82, 0x52, 0xe9, 0x28, 0xcf, 0x5f, 0x5d, 0x60, - 0xd7, 0xd0, 0xd9, 0xbd, 0xf8, 0xc6, 0x26, 0x6f, 0x3c, 0x94, 0x10, 0xf1, 0xb2, 0x7e, 0x63, 0x93, - 0x8a, 0x14, 0xa3, 0x59, 0xd3, 0xf1, 0x35, 0x5f, 0x7a, 0x3e, 0xd8, 0x26, 0x97, 0xde, 0x8b, 0xe0, - 0xc4, 0xf1, 0x2f, 0x82, 0x1c, 0x86, 0xd6, 0xfc, 0xfa, 0x43, 0x8a, 0xc2, 0xf5, 0x45, 0xb1, 0xdc, - 0x9b, 0x7e, 0xfd, 0xe1, 0xd3, 0xb3, 0xca, 0x45, 0xf6, 0x6c, 0x5d, 0x7c, 0xaa, 0x98, 0x05, 0xd4, - 0x27, 0x64, 0xe9, 0x39, 0x17, 0xdf, 0x84, 0xb4, 0x32, 0x29, 0xf8, 0xc8, 0x49, 0xa3, 0xba, 0xd6, - 0x36, 0xc9, 0x19, 0x87, 0xd2, 0x0a, 0x0f, 0x1f, 0x46, 0x7e, 0x67, 0xb9, 0xe9, 0x75, 0xb6, 0x7c, - 0x37, 0x50, 0xb1, 0x51, 0x7b, 0xd7, 0xf7, 0xab, 0x99, 0xeb, 0x7b, 0xa6, 0x21, 0xe9, 0x9d, 0xba, - 0x62, 0x60, 0xf7, 0xb0, 0x64, 0x5f, 0x86, 0x29, 0x31, 0xb9, 0x57, 0x9f, 0x44, 0xbc, 0x2d, 0x47, - 0x7e, 0x06, 0x45, 0x87, 0x39, 0x2d, 0x19, 0x40, 0x5c, 0x28, 0xe7, 0x14, 0x2e, 0x76, 0x1e, 0x13, - 0x18, 0x11, 0xcc, 0x0c, 0x56, 0xac, 0x01, 0xf3, 0x77, 0xdc, 0x27, 0x5a, 0x1a, 0x47, 0x6d, 0x92, - 0x32, 0x9c, 0x60, 0x17, 0x0e, 0xf6, 0xcb, 0x2f, 0x8b, 0x09, 0x96, 0x84, 0xeb, 0xed, 0x33, 0x5f, - 0xfb, 0x72, 0x62, 0xdf, 0x0b, 0xa7, 0xa8, 0x59, 0x2b, 0x98, 0x21, 0xc7, 0x0f, 0xf6, 0x6a, 0xbb, - 0x2e, 0xfa, 0xf8, 0xcc, 0x1e, 0x6f, 0x43, 0x54, 0x1d, 0xd6, 0x50, 0x7c, 0x9c, 0x50, 0x32, 0xb2, - 0xfb, 0xd5, 0xc0, 0x3e, 0x84, 0x29, 0xf9, 0x64, 0x73, 0xd3, 0x0f, 0x23, 0xbc, 0xd0, 0xcf, 0x1d, - 0xcf, 0x74, 0x5d, 0xbe, 0x03, 0x49, 0x67, 0x8f, 0x94, 0x02, 0x20, 0xc5, 0x99, 0xbd, 0x0d, 0xe3, - 0x1b, 0x5e, 0x5b, 0xc6, 0x18, 0xac, 0x6e, 0xa0, 0xea, 0x91, 0xce, 0x9f, 0x8e, 0xd7, 0x76, 0xd4, - 0xad, 0xba, 0x13, 0x6f, 0x17, 0x3a, 0x36, 0x7b, 0x00, 0xe3, 0xb5, 0xda, 0xcd, 0xeb, 0x9e, 0x38, - 0x00, 0x3b, 0x7b, 0xf3, 0x27, 0xfb, 0x7c, 0xe5, 0x4b, 0x99, 0x5f, 0x39, 0x19, 0x86, 0xbb, 0x98, - 0x1a, 0xdf, 0xa9, 0xfb, 0x9d, 0x3d, 0x5b, 0xe7, 0x94, 0x61, 0xce, 0x7d, 0xea, 0x29, 0x9b, 0x73, - 0x57, 0x61, 0x5a, 0x33, 0xb0, 0x44, 0xe3, 0xca, 0xf9, 0x24, 0x30, 0x8d, 0x6e, 0xbe, 0x9d, 0x76, - 0x5f, 0x4c, 0xd3, 0x29, 0x3b, 0xee, 0xd3, 0xc7, 0xb5, 0xe3, 0xf6, 0x60, 0x46, 0x0e, 0x06, 0xcd, - 0x03, 0x1c, 0xe9, 0x85, 0x3e, 0x7d, 0x78, 0x31, 0xb3, 0x0f, 0x67, 0x69, 0xa4, 0xd5, 0x24, 0xc3, - 0x27, 0xca, 0x5e, 0xae, 0x6c, 0x1b, 0x18, 0x01, 0x29, 0x31, 0x3f, 0xd6, 0xf5, 0x7c, 0x9f, 0xba, - 0x5e, 0xce, 0xac, 0x6b, 0x4a, 0xd5, 0xb5, 0x25, 0xab, 0xc9, 0xe0, 0xc8, 0xda, 0xaa, 0x1e, 0x35, - 0xbf, 0xb0, 0x63, 0x5f, 0x30, 0xf4, 0xa0, 0xbd, 0x08, 0x32, 0xc0, 0x6f, 0x7a, 0xd2, 0xa6, 0xfb, - 0x3d, 0x83, 0x33, 0x7b, 0x02, 0x27, 0x7b, 0xbf, 0x02, 0xeb, 0x3c, 0x83, 0x75, 0x9e, 0x31, 0xea, - 0x4c, 0x23, 0xc9, 0x79, 0x63, 0x36, 0x2b, 0x5d, 0x6b, 0x1f, 0xfe, 0xec, 0x07, 0x72, 0x70, 0xea, - 0xce, 0xf5, 0x0a, 0xe6, 0xa3, 0xf3, 0x64, 0xc8, 0xa9, 0xd8, 0xed, 0xf3, 0x2c, 0xe9, 0xca, 0xd3, - 0xfa, 0x7b, 0x25, 0x71, 0xe0, 0x56, 0x21, 0x64, 0xc4, 0x97, 0x5a, 0xdb, 0xae, 0x4c, 0x73, 0x47, - 0x2c, 0x32, 0x7c, 0x43, 0xbf, 0xf5, 0x47, 0xe5, 0x9c, 0xdd, 0xaf, 0x2a, 0xd6, 0x84, 0x05, 0xb3, - 0x5b, 0x94, 0xa5, 0xfd, 0x2e, 0x6f, 0x36, 0xe7, 0xcb, 0x38, 0xa3, 0x5f, 0x3f, 0xd8, 0x2f, 0x5f, - 0xe8, 0xe9, 0xdd, 0xd8, 0x7a, 0x5f, 0x60, 0x6a, 0x0d, 0x3e, 0x84, 0xdf, 0xad, 0xa1, 0xe2, 0x64, - 0x69, 0x2a, 0xc3, 0xce, 0xdc, 0xfa, 0x8d, 0x7c, 0xea, 0xa4, 0x62, 0x55, 0x18, 0xa5, 0x09, 0x48, - 0xa2, 0x7b, 0xef, 0x34, 0x3b, 0x93, 0x39, 0xcd, 0x46, 0x69, 0x2e, 0xdb, 0x8a, 0x9e, 0x3d, 0x16, - 0xac, 0xf0, 0x2b, 0xe8, 0xae, 0xf3, 0x55, 0x79, 0x10, 0x21, 0xc8, 0x38, 0x72, 0x57, 0x8e, 0xef, - 0x3d, 0x65, 0x3a, 0xe7, 0xe1, 0xd9, 0xab, 0x6a, 0x63, 0x0f, 0x65, 0xb2, 0x94, 0x42, 0xec, 0x82, - 0x63, 0x66, 0x46, 0x79, 0x6a, 0x15, 0x8a, 0x5a, 0xac, 0x5f, 0xcf, 0xc1, 0xa4, 0x71, 0xd4, 0xb1, - 0x6b, 0x9a, 0x7f, 0x59, 0xe2, 0x72, 0x6d, 0xe0, 0xe0, 0xee, 0x97, 0xf6, 0x3c, 0xbb, 0x46, 0xc6, - 0xe2, 0xf9, 0xfe, 0x74, 0x38, 0xfb, 0xd3, 0xee, 0x86, 0x87, 0x6b, 0x06, 0xe3, 0x14, 0x6c, 0x43, - 0x7d, 0x52, 0xb0, 0xfd, 0xca, 0x0b, 0x30, 0x65, 0xde, 0x85, 0xd8, 0xeb, 0x30, 0x82, 0x0a, 0x55, - 0x75, 0xb1, 0x96, 0xa9, 0xeb, 0xfd, 0x54, 0x36, 0x51, 0xc2, 0x61, 0xaf, 0x00, 0xc4, 0x56, 0xbb, - 0xea, 0x39, 0x61, 0xf8, 0x60, 0xbf, 0x9c, 0x7b, 0xc3, 0xd6, 0x0a, 0xd8, 0xd7, 0x00, 0xd6, 0xfd, - 0x06, 0x8f, 0xf3, 0x55, 0x1e, 0xf2, 0x64, 0xfe, 0x6a, 0x4f, 0x22, 0x81, 0x13, 0x6d, 0xbf, 0xc1, - 0x7b, 0xb3, 0x06, 0x68, 0x1c, 0xd9, 0xe7, 0x61, 0xd8, 0xee, 0x8a, 0x4b, 0xbc, 0xd4, 0x9f, 0x8c, - 0xab, 0x23, 0xa7, 0xdb, 0xe4, 0xc9, 0x0d, 0x31, 0xe8, 0xa6, 0xad, 0xc1, 0x04, 0x80, 0xbd, 0x2f, - 0x13, 0x0c, 0x50, 0x74, 0xbe, 0xe1, 0xe4, 0x81, 0x45, 0x13, 0x45, 0x7a, 0xe2, 0xf3, 0x69, 0x24, - 0xec, 0x2e, 0x8c, 0xea, 0x2f, 0x03, 0x9a, 0xa3, 0xb2, 0xfe, 0x7a, 0xa4, 0x5d, 0x37, 0x29, 0xd1, - 0x65, 0xfa, 0xd1, 0x40, 0x71, 0x61, 0xef, 0xc0, 0x98, 0x60, 0x2f, 0x96, 0x72, 0x48, 0xd7, 0x0c, - 0x7c, 0x46, 0xd1, 0x3e, 0x48, 0x6c, 0x07, 0x46, 0x0c, 0xbd, 0x98, 0x80, 0x7d, 0x19, 0x53, 0x28, - 0x52, 0x57, 0x1f, 0x6a, 0x4a, 0x71, 0xbe, 0xa7, 0xab, 0x31, 0xa7, 0x62, 0x6f, 0x4e, 0xf6, 0x98, - 0x1f, 0xdb, 0x89, 0xe3, 0x64, 0x0d, 0x92, 0x14, 0xe2, 0xb5, 0x9e, 0x0a, 0xe6, 0x55, 0xe8, 0xa7, - 0xde, 0xbc, 0xa3, 0x06, 0x5f, 0xd6, 0x81, 0x52, 0x22, 0xe5, 0x51, 0x5d, 0x70, 0x58, 0x5d, 0x6f, - 0xf4, 0xd4, 0xa5, 0x0f, 0x60, 0x4f, 0x75, 0x3d, 0xdc, 0x59, 0x03, 0xa6, 0xd4, 0x89, 0x41, 0xf5, - 0x8d, 0x1f, 0x56, 0xdf, 0x2b, 0x3d, 0xf5, 0xcd, 0x36, 0xb6, 0x7a, 0xeb, 0x49, 0xf1, 0x64, 0xef, - 0xc0, 0xa4, 0x82, 0xc8, 0x2c, 0xa0, 0x13, 0x49, 0xba, 0xc7, 0xc6, 0x56, 0x4f, 0xee, 0x4f, 0x13, - 0x59, 0xa7, 0x96, 0xb3, 0x63, 0xd2, 0xa0, 0x4e, 0xcf, 0x0a, 0x13, 0x99, 0x7d, 0x00, 0xe3, 0xd5, - 0x96, 0x68, 0x88, 0xdf, 0x76, 0x23, 0x4e, 0x4e, 0x6c, 0xca, 0x2c, 0x44, 0x2b, 0xd1, 0xa6, 0xaa, - 0xcc, 0x6f, 0x9a, 0x14, 0x19, 0xf9, 0x4d, 0x13, 0xb0, 0xe8, 0x3c, 0xf9, 0x14, 0x44, 0x73, 0x58, - 0x39, 0xb8, 0x9d, 0xc9, 0x30, 0xcd, 0xd0, 0xd8, 0x53, 0x14, 0x4c, 0x01, 0x55, 0x4f, 0x31, 0xa9, - 0x28, 0x98, 0x3a, 0x4f, 0xf6, 0x2e, 0x8c, 0x53, 0xbe, 0x9c, 0x8a, 0xbd, 0x1e, 0xce, 0x97, 0xb0, - 0xf1, 0xe8, 0x96, 0xaf, 0x52, 0xeb, 0x38, 0x6e, 0x90, 0xb2, 0x41, 0x4c, 0xf0, 0xd9, 0x97, 0x60, - 0xee, 0x81, 0xd7, 0x6e, 0xf8, 0x8f, 0x43, 0x3a, 0xa6, 0x68, 0xa3, 0x9b, 0x49, 0x3c, 0x80, 0x1e, - 0xcb, 0xf2, 0x58, 0x38, 0xeb, 0xd9, 0xf8, 0x32, 0x39, 0xb0, 0xbf, 0xde, 0xc3, 0x59, 0xce, 0x20, - 0x76, 0xd8, 0x0c, 0x5a, 0xec, 0x99, 0x41, 0xbd, 0xd5, 0xa7, 0xa7, 0x53, 0x66, 0x35, 0xcc, 0x07, - 0x66, 0x9e, 0xef, 0xb7, 0x7c, 0xaf, 0x3d, 0x3f, 0x8b, 0x7b, 0xe1, 0xf3, 0x69, 0x47, 0x78, 0xc4, - 0xa3, 0x3c, 0xb1, 0xd6, 0xc1, 0x7e, 0xf9, 0x6c, 0x5a, 0x08, 0xff, 0xd0, 0x37, 0x14, 0xe5, 0x19, - 0xac, 0xd9, 0x07, 0x30, 0x21, 0xfe, 0x8f, 0xb5, 0x04, 0x73, 0x86, 0x31, 0x9f, 0x86, 0x49, 0xf5, - 0xe0, 0x18, 0x61, 0x42, 0x9f, 0x0c, 0x05, 0x82, 0xc1, 0x8a, 0xbd, 0x05, 0x20, 0xe4, 0x18, 0xda, - 0x8e, 0x4f, 0x24, 0x41, 0x47, 0x51, 0x0c, 0xea, 0xdd, 0x88, 0x13, 0x64, 0xf6, 0x0e, 0x8c, 0x8b, - 0x5f, 0xb5, 0x6e, 0xc3, 0x17, 0x6b, 0xe3, 0x24, 0xd2, 0x4a, 0x7f, 0x42, 0x41, 0x1b, 0x4a, 0xb8, - 0xe1, 0x4f, 0x98, 0xa0, 0xb3, 0x9b, 0x30, 0x8d, 0xc1, 0x61, 0xab, 0x98, 0x44, 0x3a, 0xf2, 0x78, - 0x38, 0x7f, 0x4a, 0x7b, 0xc2, 0x16, 0x45, 0x8e, 0x17, 0x97, 0xe9, 0x97, 0x8b, 0x14, 0x19, 0x0b, - 0x61, 0x36, 0xd9, 0x5d, 0x92, 0x07, 0xf1, 0x79, 0xec, 0x24, 0x25, 0x52, 0xf7, 0x62, 0xc8, 0xfd, - 0x58, 0x8c, 0x88, 0xb6, 0x71, 0xa9, 0xe7, 0x04, 0xbd, 0xc2, 0x2c, 0xee, 0xcc, 0x06, 0x76, 0x63, - 0x79, 0x23, 0x1d, 0x3d, 0xf5, 0x34, 0xb6, 0x00, 0x87, 0x79, 0xa7, 0x9e, 0x24, 0xb0, 0xcd, 0x88, - 0xa0, 0x9a, 0x41, 0xcd, 0xbe, 0x09, 0x27, 0xd4, 0x0e, 0x42, 0x45, 0x34, 0xaf, 0x17, 0x8e, 0xb9, - 0x13, 0x37, 0xb6, 0xe2, 0xaa, 0x7b, 0xa6, 0x74, 0x76, 0x15, 0xcc, 0x85, 0x71, 0x1c, 0x56, 0xaa, - 0xf1, 0xf9, 0xc3, 0x6a, 0xbc, 0xd0, 0x53, 0xe3, 0x49, 0x9c, 0x28, 0xbd, 0x95, 0xe9, 0x3c, 0xd9, - 0x12, 0x4c, 0xd2, 0x3a, 0xa2, 0xd9, 0xf6, 0x02, 0xf6, 0x16, 0x6a, 0x95, 0xd4, 0x0a, 0xec, 0x99, - 0x70, 0x26, 0x89, 0xbe, 0x23, 0xcb, 0x67, 0x84, 0x33, 0xc6, 0x8e, 0x9c, 0x7e, 0x3d, 0x30, 0x91, - 0xc5, 0x8e, 0x94, 0x48, 0x31, 0xab, 0x4f, 0x3a, 0x01, 0xe9, 0x8c, 0xce, 0x26, 0x49, 0x45, 0x34, - 0xe1, 0xc7, 0xe1, 0x31, 0x86, 0xbe, 0x25, 0x64, 0x71, 0x60, 0xf7, 0x60, 0x36, 0x3e, 0xb5, 0x35, - 0xc6, 0xe5, 0x24, 0x39, 0x4b, 0x72, 0xd4, 0x67, 0xf3, 0xcd, 0xa2, 0x67, 0x2e, 0x9c, 0x32, 0xce, - 0x69, 0x8d, 0xf5, 0x39, 0x64, 0x8d, 0x09, 0x93, 0xcd, 0x43, 0x3e, 0x9b, 0x7d, 0x3f, 0x3e, 0xec, - 0x43, 0x58, 0x48, 0x9f, 0xcd, 0x5a, 0x2d, 0x2f, 0x62, 0x2d, 0xaf, 0x1d, 0xec, 0x97, 0xcf, 0xf7, - 0x1c, 0xef, 0xd9, 0x15, 0x1d, 0xc2, 0x8d, 0x7d, 0x0d, 0xe6, 0xcd, 0xf3, 0x59, 0xab, 0xc9, 0xc2, - 0x9a, 0x70, 0xe9, 0xc4, 0x07, 0x7b, 0x76, 0x0d, 0x7d, 0x79, 0xb0, 0x08, 0xca, 0x99, 0xb3, 0x5b, - 0xab, 0xe6, 0xa5, 0xa4, 0x41, 0x3d, 0xab, 0x24, 0xbb, 0xba, 0xa3, 0x58, 0xb2, 0xc7, 0x70, 0x36, - 0xeb, 0x98, 0xd0, 0x2a, 0x7d, 0x39, 0xd6, 0xca, 0x7e, 0x2a, 0xfb, 0xc8, 0xc9, 0xae, 0xf9, 0x08, - 0xb6, 0xec, 0xcb, 0x70, 0x42, 0x5b, 0x5f, 0x5a, 0x7d, 0xaf, 0x60, 0x7d, 0xe8, 0xbf, 0xab, 0x2f, - 0xcc, 0xec, 0x5a, 0xb2, 0x79, 0xb0, 0x16, 0xcc, 0xaa, 0x86, 0xa3, 0xfa, 0x9b, 0x8e, 0x9e, 0xf3, - 0xc6, 0xae, 0xda, 0x8b, 0xa1, 0xa5, 0xbc, 0xdf, 0x72, 0x3a, 0x09, 0xa1, 0x3e, 0xd3, 0x33, 0xf8, - 0xb2, 0x9b, 0x30, 0x52, 0xdb, 0xa8, 0x5e, 0xbf, 0xbe, 0x3a, 0xff, 0x2a, 0xd6, 0xa0, 0x9c, 0x7d, - 0x24, 0xd0, 0xb8, 0x34, 0x91, 0x8d, 0x59, 0xc7, 0xdb, 0xde, 0x36, 0x7c, 0xaa, 0x24, 0x2a, 0xfb, - 0xeb, 0x68, 0xdd, 0x25, 0x76, 0xd4, 0x4a, 0x18, 0x7a, 0x3b, 0x98, 0x65, 0x22, 0x9c, 0x7f, 0xcd, - 0x78, 0xe9, 0xa5, 0xd3, 0x63, 0x6f, 0x19, 0xf3, 0xfd, 0xf4, 0xa0, 0x4b, 0x69, 0xf3, 0x60, 0xbf, - 0x7c, 0x86, 0x76, 0x6e, 0xc7, 0x4d, 0x58, 0xe9, 0x9b, 0x78, 0x6f, 0x45, 0xb7, 0x86, 0x8a, 0x17, - 0x4a, 0x17, 0x6f, 0x0d, 0x15, 0x2f, 0x96, 0x5e, 0xb3, 0x5f, 0xc8, 0xce, 0x51, 0x2e, 0xfb, 0xda, - 0x3e, 0x7f, 0x58, 0x69, 0x32, 0x12, 0xd6, 0xdf, 0xcd, 0x41, 0xf9, 0x88, 0x0f, 0x16, 0x7b, 0x6b, - 0xd2, 0x9b, 0x35, 0xae, 0x5c, 0x88, 0xa5, 0x3b, 0x4d, 0x5c, 0xe0, 0x98, 0x8f, 0xd7, 0x26, 0x09, - 0x7a, 0x2d, 0x51, 0xd0, 0x78, 0xcd, 0x79, 0xad, 0x37, 0x58, 0xbc, 0xc2, 0xb2, 0x7e, 0x2e, 0x07, - 0xb3, 0x19, 0xe3, 0xc3, 0xce, 0xc3, 0x10, 0x66, 0x81, 0xd1, 0xac, 0x0d, 0x52, 0xd9, 0x5f, 0xb0, - 0x9c, 0x7d, 0x1a, 0x46, 0x57, 0xd6, 0x6b, 0xb5, 0xca, 0xba, 0xba, 0xca, 0xca, 0x6d, 0xbc, 0x1d, - 0x3a, 0xa1, 0x6b, 0x3e, 0x52, 0x12, 0x1a, 0x7b, 0x03, 0x46, 0xaa, 0x1b, 0x48, 0x20, 0xcd, 0xdd, - 0xf0, 0x0b, 0xbd, 0x4e, 0x1a, 0x9f, 0x90, 0xac, 0x1f, 0xcd, 0x01, 0xeb, 0x9d, 0x6c, 0xec, 0x0a, - 0x8c, 0xeb, 0x53, 0x5a, 0x5e, 0xbc, 0xf1, 0x41, 0x4d, 0x9b, 0xb0, 0xb6, 0x8e, 0xc3, 0x56, 0x60, - 0x18, 0xf3, 0xe4, 0xc5, 0xaf, 0xa3, 0x99, 0x07, 0xe3, 0xa9, 0x9e, 0x83, 0x71, 0x18, 0xb3, 0xf0, - 0xd9, 0x92, 0xd8, 0xfa, 0xed, 0x1c, 0xb0, 0x5e, 0x61, 0x62, 0x60, 0xeb, 0x8c, 0x37, 0x35, 0x77, - 0x65, 0x3d, 0xcf, 0x43, 0x9c, 0xa4, 0x47, 0xbf, 0x44, 0x26, 0x8e, 0xcd, 0xe7, 0x0d, 0xa5, 0x45, - 0x7f, 0x1f, 0xb7, 0x8b, 0x30, 0x7c, 0x9f, 0x07, 0x5b, 0xca, 0x92, 0x13, 0xad, 0xbf, 0x1e, 0x09, - 0x80, 0x7e, 0x89, 0x47, 0x0c, 0xeb, 0x4f, 0x72, 0x30, 0x97, 0x25, 0xe1, 0x1e, 0xe1, 0x8a, 0x66, - 0xa5, 0xbc, 0xe8, 0xd0, 0x32, 0x43, 0x9a, 0x86, 0xc5, 0xbe, 0x73, 0x65, 0x18, 0x16, 0x8d, 0x55, - 0x23, 0x8c, 0x4a, 0x14, 0xd1, 0x1b, 0xa1, 0x2d, 0xe1, 0x02, 0x41, 0x86, 0xe5, 0x1a, 0xc2, 0x88, - 0x6e, 0x88, 0x80, 0xf3, 0xd1, 0x96, 0x70, 0x81, 0x70, 0xc7, 0x6f, 0xc4, 0x29, 0xa2, 0x11, 0xa1, - 0x25, 0x00, 0xb6, 0x84, 0xb3, 0xf3, 0x30, 0x7a, 0xb7, 0xbd, 0xc6, 0xdd, 0x47, 0x2a, 0xd6, 0x38, - 0x5a, 0x92, 0xf8, 0x6d, 0xa7, 0x29, 0x60, 0xb6, 0x2a, 0xb4, 0x7e, 0x2a, 0x07, 0x33, 0x3d, 0xc2, - 0xf5, 0xd1, 0xde, 0x76, 0x87, 0xbb, 0xbd, 0x0c, 0xd2, 0x3e, 0xf9, 0xf9, 0x43, 0xd9, 0x9f, 0x6f, - 0xfd, 0xbf, 0x43, 0x70, 0xaa, 0x8f, 0xae, 0x23, 0x71, 0xcb, 0xcb, 0x1d, 0xe9, 0x96, 0xf7, 0x15, - 0x98, 0x5c, 0x6e, 0xba, 0x5e, 0x2b, 0xdc, 0xf4, 0x93, 0x2f, 0x4e, 0xac, 0xfb, 0xb1, 0x4c, 0x65, - 0xc9, 0x56, 0x66, 0xe0, 0xa7, 0xeb, 0x48, 0xe1, 0x44, 0x7e, 0xaf, 0xa8, 0x65, 0x30, 0xeb, 0x71, - 0x8c, 0x2b, 0xfc, 0x25, 0x71, 0x8c, 0x33, 0x5d, 0x35, 0x86, 0x9e, 0xaa, 0xab, 0x46, 0xb6, 0x99, - 0xe7, 0xf0, 0xc7, 0x31, 0xfa, 0x5d, 0x86, 0x49, 0x69, 0x4a, 0x53, 0x09, 0xe5, 0x20, 0x8d, 0xf4, - 0x98, 0xdf, 0xb8, 0x61, 0xef, 0x58, 0x18, 0x34, 0xec, 0xa6, 0xe9, 0x56, 0x30, 0x8a, 0x4f, 0x80, - 0xe7, 0xfb, 0xbb, 0x0d, 0x18, 0x4f, 0xff, 0x3a, 0xa9, 0xf5, 0x53, 0x79, 0xd3, 0x6b, 0xee, 0x2f, - 0xe3, 0xcc, 0xbb, 0x08, 0xc3, 0x0f, 0x76, 0x79, 0xa0, 0xf6, 0x3b, 0xfc, 0x90, 0xc7, 0x02, 0xa0, - 0x7f, 0x08, 0x62, 0xb0, 0xeb, 0x30, 0xb5, 0x21, 0x47, 0x42, 0x75, 0xef, 0x50, 0x72, 0x05, 0xed, - 0x90, 0xa2, 0x24, 0xa3, 0x7f, 0x53, 0x54, 0xd6, 0x0d, 0x38, 0x63, 0x2c, 0x48, 0x8a, 0xf2, 0x21, - 0xad, 0xfb, 0xe5, 0x89, 0x38, 0x95, 0xf8, 0x33, 0x24, 0xbb, 0x87, 0x9d, 0x82, 0x5a, 0xdb, 0x70, - 0xf6, 0x50, 0x46, 0xe2, 0x20, 0x82, 0x4e, 0xfc, 0x2b, 0x65, 0x82, 0x78, 0x28, 0xa9, 0xad, 0xd1, - 0x59, 0xdf, 0x0b, 0x13, 0x7a, 0x2f, 0xe3, 0x9e, 0x2a, 0x7e, 0xd3, 0xa6, 0x26, 0xf7, 0x54, 0x01, - 0xb0, 0x25, 0x3c, 0x51, 0x6d, 0xe7, 0xb3, 0x55, 0xdb, 0xc9, 0xf0, 0x17, 0x8e, 0x1a, 0x7e, 0x51, - 0x39, 0x2e, 0x59, 0xad, 0x72, 0xfc, 0xad, 0x57, 0x8e, 0x61, 0x3c, 0x6c, 0x09, 0x7f, 0xaa, 0x95, - 0xff, 0x96, 0xca, 0xb6, 0x82, 0xce, 0x03, 0x4a, 0x57, 0x90, 0x64, 0x6f, 0x9e, 0xcd, 0xd2, 0x00, - 0x24, 0x98, 0xc9, 0x21, 0x99, 0x3f, 0xea, 0x90, 0x3c, 0xce, 0x44, 0x44, 0xd1, 0x4b, 0x0e, 0xe9, - 0x50, 0x22, 0xd8, 0xb8, 0x3d, 0xaf, 0xf1, 0x0a, 0xcb, 0xfa, 0x56, 0x0e, 0x4e, 0x64, 0xaa, 0x10, - 0x45, 0xad, 0x52, 0x57, 0xa9, 0xad, 0xc3, 0xb4, 0xa2, 0x52, 0x62, 0x1c, 0xc7, 0x87, 0x7b, 0xf0, - 0xb6, 0x58, 0x2f, 0xc2, 0x58, 0xfc, 0x80, 0xc5, 0xe6, 0xd4, 0xd0, 0xa1, 0xd5, 0x96, 0x7a, 0x07, - 0xa9, 0x01, 0x88, 0x2f, 0x78, 0xaa, 0x36, 0x86, 0xd6, 0x6f, 0xe5, 0x65, 0x26, 0xbe, 0x67, 0x36, - 0x1c, 0x63, 0xb6, 0x61, 0xa0, 0x68, 0x52, 0xff, 0x20, 0x8c, 0x6c, 0x15, 0x46, 0x6a, 0x91, 0x1b, - 0x75, 0x95, 0xeb, 0xf9, 0xac, 0x4e, 0x86, 0x05, 0xf7, 0x17, 0x13, 0xe7, 0xe3, 0x10, 0x21, 0xc6, - 0xa5, 0x09, 0x21, 0x9a, 0x7d, 0xe1, 0xef, 0xe5, 0x60, 0x42, 0x27, 0x66, 0x1f, 0xc0, 0x94, 0x0a, - 0x32, 0x27, 0x1d, 0xf2, 0xe9, 0xb5, 0x4d, 0x99, 0xaa, 0xa8, 0x20, 0x73, 0xba, 0x03, 0xbf, 0x81, - 0xaf, 0x6f, 0xd5, 0x1d, 0x1d, 0x99, 0x35, 0x80, 0xb5, 0xb6, 0x5d, 0xe7, 0x31, 0x77, 0x1f, 0xf2, - 0x30, 0x72, 0xa4, 0x49, 0x01, 0x3d, 0xca, 0x29, 0xf6, 0x77, 0xae, 0x57, 0xa4, 0x35, 0x81, 0x18, - 0x09, 0x8a, 0x16, 0xd8, 0x43, 0xa3, 0xbf, 0x34, 0xb4, 0xb6, 0xdd, 0x07, 0xb2, 0x50, 0xd2, 0x59, - 0x7f, 0x3a, 0x22, 0xa7, 0x1b, 0xc5, 0xa4, 0xdc, 0x82, 0xa9, 0xbb, 0xd5, 0x95, 0x65, 0x4d, 0xef, - 0x68, 0xa6, 0x34, 0x59, 0x7d, 0x12, 0xf1, 0xa0, 0xed, 0x36, 0xd5, 0x95, 0x2b, 0x39, 0x82, 0x7c, - 0xaf, 0x51, 0xcf, 0xd6, 0x49, 0xa6, 0x38, 0x8a, 0x3a, 0xe4, 0xe5, 0x2e, 0xae, 0x23, 0x3f, 0x60, - 0x1d, 0xa1, 0xdb, 0x6a, 0xf6, 0xa9, 0xc3, 0xe4, 0xc8, 0x76, 0xa1, 0x74, 0x03, 0xc5, 0x25, 0xad, - 0x96, 0xc2, 0xe1, 0xb5, 0xbc, 0x44, 0xb5, 0x3c, 0x2f, 0xe5, 0xac, 0xec, 0x7a, 0x7a, 0xb8, 0x26, - 0xfb, 0xc4, 0xd0, 0x91, 0xfb, 0xc4, 0xdf, 0xce, 0xc1, 0x88, 0x94, 0xc7, 0x68, 0x1a, 0xf7, 0x91, - 0xf8, 0x1e, 0x3c, 0x1d, 0x89, 0xaf, 0x84, 0xe7, 0x84, 0x31, 0xa1, 0x65, 0x19, 0x5b, 0x49, 0xad, - 0x0b, 0x65, 0x16, 0x8b, 0x2f, 0x08, 0xb2, 0xe4, 0xe8, 0x65, 0xc1, 0xaa, 0x89, 0x3b, 0xf8, 0xe8, - 0x91, 0x1e, 0x87, 0xca, 0x85, 0x7e, 0x94, 0xdc, 0xc1, 0x4d, 0x27, 0xf0, 0x35, 0x18, 0x23, 0x27, - 0xf3, 0xa5, 0x3d, 0x7a, 0x27, 0x2c, 0x19, 0xa6, 0x17, 0x8d, 0xa5, 0xbd, 0x44, 0xd6, 0x24, 0x37, - 0x75, 0x67, 0x6b, 0xcf, 0x48, 0x6c, 0xa8, 0x10, 0xd9, 0x5d, 0x99, 0xf0, 0x4b, 0x46, 0xed, 0x34, - 0xc3, 0x74, 0xc7, 0x70, 0x0a, 0x5f, 0xa3, 0x3c, 0x55, 0x33, 0x82, 0x74, 0x26, 0x3c, 0xd8, 0x1a, - 0x94, 0xd0, 0x5c, 0x87, 0x37, 0xe4, 0xaa, 0xa9, 0xae, 0x48, 0x47, 0x66, 0x32, 0xb9, 0x8c, 0x64, - 0x19, 0x2d, 0xb7, 0x94, 0x0f, 0x51, 0x0f, 0xa5, 0xb8, 0x1f, 0x96, 0xd2, 0xb3, 0x8f, 0xbd, 0x03, - 0xe3, 0x71, 0xd4, 0xd4, 0xd8, 0x8b, 0x11, 0xdf, 0x0b, 0x92, 0x30, 0xab, 0x66, 0x9a, 0x28, 0x0d, - 0x9d, 0x2d, 0x42, 0x51, 0x2c, 0xe2, 0x74, 0x4a, 0xc5, 0x2e, 0xc1, 0x74, 0xd7, 0x04, 0x85, 0xc7, - 0x6a, 0x30, 0x2b, 0x16, 0x4d, 0xcd, 0x6b, 0xef, 0x34, 0xf9, 0x9a, 0xbf, 0xe3, 0x77, 0xa3, 0x7b, - 0xf6, 0x1a, 0xed, 0xe1, 0x52, 0x22, 0x77, 0x5b, 0x4d, 0xa3, 0x38, 0x30, 0x12, 0x66, 0x67, 0x50, - 0x6b, 0x5b, 0xe5, 0x1f, 0xe5, 0x61, 0x5c, 0x9b, 0x4f, 0xec, 0x22, 0x14, 0xab, 0xe1, 0x9a, 0x5f, - 0x7f, 0x18, 0xc7, 0x37, 0x9b, 0x3c, 0xd8, 0x2f, 0x8f, 0x79, 0xa1, 0xd3, 0x44, 0xa0, 0x1d, 0x17, - 0xb3, 0x25, 0x98, 0x94, 0x7f, 0xa9, 0x68, 0xf6, 0xf9, 0x44, 0x5f, 0x23, 0x91, 0x55, 0x1c, 0x7b, - 0x7d, 0xf7, 0x34, 0x48, 0xd8, 0x57, 0x01, 0x24, 0x00, 0x3d, 0x62, 0x0b, 0x83, 0xfb, 0xf2, 0x52, - 0x05, 0x19, 0xbe, 0xb0, 0x1a, 0x43, 0xf6, 0x75, 0x19, 0x65, 0x55, 0xcd, 0xff, 0xa1, 0xc1, 0x9d, - 0x91, 0x05, 0x7f, 0x27, 0x3b, 0x26, 0x82, 0xce, 0x92, 0x12, 0x50, 0x2c, 0xd8, 0xbc, 0xee, 0x3f, - 0xe2, 0xc1, 0x5e, 0x25, 0x42, 0x44, 0x0d, 0xc3, 0xfa, 0x9f, 0x72, 0xda, 0xaa, 0x61, 0xeb, 0x98, - 0x05, 0x54, 0xce, 0x08, 0x32, 0x99, 0x89, 0xef, 0x0c, 0x0a, 0x6e, 0xf3, 0xed, 0xa5, 0xe7, 0xc9, - 0xc0, 0x77, 0x36, 0x9e, 0x57, 0xa9, 0xec, 0xa0, 0x12, 0xc8, 0xbe, 0x00, 0x43, 0xd8, 0x75, 0xf9, - 0x23, 0x9b, 0xa6, 0x8e, 0xed, 0x21, 0xd1, 0x67, 0xd8, 0x10, 0xa4, 0x64, 0x9f, 0x26, 0x6f, 0x42, - 0xd9, 0xf9, 0x53, 0xda, 0xd9, 0x2b, 0xbe, 0x23, 0x3e, 0xaf, 0x93, 0xb0, 0x18, 0xda, 0xec, 0xf9, - 0xbb, 0x79, 0x28, 0xa5, 0xd7, 0x2a, 0x7b, 0x1f, 0x26, 0xd4, 0x79, 0x8a, 0x69, 0xe2, 0x45, 0x2b, - 0x27, 0x28, 0x14, 0xba, 0x3a, 0x54, 0xd3, 0x59, 0xe2, 0x75, 0x02, 0x21, 0xdc, 0x6c, 0x52, 0x98, - 0x2a, 0x6d, 0x95, 0x44, 0x7e, 0xd4, 0x49, 0x05, 0xf7, 0x54, 0x68, 0xec, 0x4d, 0x28, 0xdc, 0xb9, - 0x5e, 0x21, 0xd7, 0x95, 0x52, 0xfa, 0xd4, 0x95, 0xa6, 0x79, 0xa6, 0xa1, 0xa0, 0xc0, 0x67, 0x6b, - 0x5a, 0x1c, 0xdc, 0x11, 0x23, 0xff, 0x95, 0x02, 0xc7, 0x8d, 0x3b, 0x3a, 0x20, 0xae, 0xcc, 0x3f, - 0x4f, 0x91, 0x1d, 0xff, 0x9b, 0x02, 0x8c, 0xc5, 0xf5, 0x33, 0x06, 0x28, 0xbb, 0xd1, 0x85, 0x09, - 0xff, 0x66, 0xa7, 0xa1, 0xa8, 0xc4, 0x35, 0xf2, 0x60, 0x19, 0x0d, 0x49, 0x54, 0x9b, 0x07, 0x25, - 0x97, 0xc9, 0x65, 0x6e, 0xab, 0x9f, 0xec, 0x0a, 0xc4, 0x42, 0x57, 0x3f, 0xe9, 0x6c, 0x48, 0x0c, - 0x98, 0x1d, 0xa3, 0xb1, 0x29, 0xc8, 0x7b, 0x32, 0x5a, 0xd0, 0x98, 0x9d, 0xf7, 0x1a, 0xec, 0x7d, - 0x28, 0xba, 0x8d, 0x06, 0x6f, 0x38, 0xae, 0xb2, 0x3d, 0x39, 0x6c, 0xd2, 0x14, 0x05, 0x37, 0x79, - 0x08, 0x20, 0x55, 0x25, 0x62, 0x15, 0x18, 0x6b, 0xba, 0xd2, 0xbc, 0xac, 0x31, 0xc0, 0x89, 0x92, - 0x70, 0x28, 0x0a, 0xb2, 0x7b, 0x21, 0x6f, 0xb0, 0x57, 0x61, 0x48, 0x8c, 0x26, 0x1d, 0x21, 0x4a, - 0x4a, 0x14, 0x83, 0x29, 0x3b, 0xec, 0xe6, 0x73, 0x36, 0x22, 0xb0, 0x97, 0xa1, 0xd0, 0x5d, 0xdc, - 0xa6, 0xc3, 0xa1, 0x94, 0xc4, 0xa4, 0x8e, 0xd1, 0x44, 0x31, 0xbb, 0x0a, 0xc5, 0xc7, 0x66, 0x38, - 0xe3, 0x13, 0xa9, 0x61, 0x8c, 0xf1, 0x63, 0x44, 0xf6, 0x2a, 0x14, 0xc2, 0xd0, 0x27, 0x83, 0x0d, - 0xb5, 0x04, 0x6b, 0xb5, 0xbb, 0xf1, 0xa8, 0x09, 0xee, 0x61, 0xe8, 0x2f, 0x15, 0x61, 0x44, 0x9e, - 0x18, 0xd6, 0x59, 0x80, 0xe4, 0x1b, 0x7b, 0x3d, 0x92, 0xac, 0xaf, 0xc2, 0x58, 0xfc, 0x6d, 0xec, - 0x0c, 0xc0, 0x43, 0xbe, 0xe7, 0xec, 0xba, 0xed, 0x46, 0x53, 0x8a, 0x9b, 0x13, 0xf6, 0xd8, 0x43, - 0xbe, 0x77, 0x13, 0x01, 0xec, 0x14, 0x8c, 0x76, 0xc4, 0xf0, 0xd3, 0x1c, 0x9f, 0xb0, 0x47, 0x3a, - 0xdd, 0x2d, 0x31, 0x95, 0xe7, 0x61, 0x14, 0x35, 0x81, 0xb4, 0x22, 0x27, 0x6d, 0xf5, 0xd3, 0xfa, - 0xb3, 0x02, 0xe6, 0xfc, 0xd0, 0x1a, 0xc4, 0x5e, 0x82, 0xc9, 0x7a, 0xc0, 0xf1, 0x70, 0x72, 0x85, - 0xc8, 0x45, 0xf5, 0x4c, 0x24, 0xc0, 0x6a, 0x83, 0x9d, 0x87, 0xe9, 0x4e, 0x77, 0xab, 0xe9, 0xd5, - 0x45, 0x6d, 0x4e, 0x7d, 0x8b, 0x82, 0x94, 0x4f, 0xd8, 0x93, 0x12, 0x7c, 0x9b, 0xef, 0x2d, 0x6f, - 0x61, 0x38, 0xac, 0x92, 0x1e, 0xcd, 0x34, 0x8a, 0x53, 0xea, 0xda, 0xd3, 0x1a, 0x1c, 0x6d, 0xcf, - 0x4e, 0xc2, 0x88, 0xeb, 0xee, 0x74, 0x3d, 0x19, 0xb6, 0x66, 0xc2, 0xa6, 0x5f, 0xec, 0x53, 0x30, - 0x93, 0x04, 0xd8, 0x55, 0xcd, 0x18, 0xc6, 0x66, 0x94, 0xe2, 0x82, 0x65, 0x09, 0x67, 0x6f, 0x00, - 0xd3, 0xeb, 0xf3, 0xb7, 0x3e, 0xe4, 0x75, 0x39, 0x27, 0x27, 0xec, 0x19, 0xad, 0xe4, 0x2e, 0x16, - 0xb0, 0x17, 0x61, 0x22, 0xe0, 0x21, 0x8a, 0x7b, 0xd8, 0x6d, 0x98, 0x12, 0xcb, 0x1e, 0x57, 0x30, - 0xd1, 0x77, 0x17, 0xa0, 0xa4, 0x75, 0x07, 0x06, 0x8c, 0x95, 0x11, 0xba, 0xed, 0xa9, 0x04, 0x6e, - 0x77, 0xaa, 0x0d, 0xf6, 0x25, 0x58, 0xd0, 0x30, 0x65, 0x76, 0x2e, 0x87, 0x37, 0xbd, 0x1d, 0x6f, - 0xab, 0xc9, 0x69, 0xbe, 0xf5, 0xce, 0xea, 0xf8, 0x4e, 0x68, 0xcf, 0x27, 0xd4, 0x32, 0x6f, 0xd7, - 0x2a, 0xd1, 0xb2, 0x35, 0x98, 0x4b, 0x71, 0xe6, 0x0d, 0xa7, 0xdb, 0xe9, 0x1b, 0x27, 0x2a, 0xe1, - 0xc9, 0x4c, 0x9e, 0xbc, 0x71, 0xaf, 0x63, 0x7d, 0x09, 0x26, 0xf4, 0x39, 0x29, 0x3a, 0x41, 0x17, - 0x34, 0x68, 0xf6, 0x8d, 0xc7, 0xb0, 0xaa, 0xb8, 0xe8, 0x4d, 0x25, 0x28, 0x51, 0x9c, 0x3d, 0xd8, - 0x9e, 0x8c, 0xa1, 0x62, 0x08, 0xad, 0x25, 0x98, 0xe9, 0xd9, 0xe4, 0xb4, 0x44, 0xf0, 0x72, 0xd3, - 0x3e, 0x3c, 0x11, 0xbc, 0xd5, 0x86, 0x09, 0xfd, 0xd0, 0x3a, 0x22, 0x54, 0xfe, 0x49, 0x0c, 0xfc, - 0x20, 0x77, 0xf4, 0x91, 0x83, 0xfd, 0x72, 0xde, 0x6b, 0x60, 0xb8, 0x87, 0x0b, 0x50, 0x54, 0xf2, - 0x15, 0x89, 0x35, 0xa8, 0xcb, 0x26, 0xc1, 0x7e, 0xcf, 0x8e, 0x4b, 0xad, 0x57, 0x61, 0x94, 0xce, - 0xa5, 0xc3, 0x35, 0xd8, 0xd6, 0x0f, 0xe6, 0x61, 0xda, 0xe6, 0x62, 0xd7, 0xe4, 0x32, 0x3f, 0xc6, - 0x33, 0x7b, 0xa1, 0xce, 0x0e, 0x1f, 0x68, 0xb4, 0xed, 0x90, 0xcc, 0x14, 0xff, 0x28, 0x07, 0xb3, - 0x19, 0xb8, 0x1f, 0x29, 0x33, 0xe3, 0x35, 0x18, 0x5b, 0xf1, 0xdc, 0x66, 0xa5, 0xd1, 0x88, 0xa3, - 0x40, 0xa0, 0x54, 0x8e, 0xe9, 0x5b, 0x5c, 0x01, 0xd5, 0x25, 0x94, 0x18, 0x95, 0xbd, 0x46, 0x93, - 0x22, 0x49, 0x4e, 0x8b, 0x93, 0xe2, 0x3b, 0xfb, 0x65, 0x90, 0xdf, 0x94, 0x64, 0xac, 0xc6, 0x90, - 0x9e, 0x12, 0x98, 0x78, 0x69, 0x3c, 0xb3, 0x43, 0x97, 0x1d, 0xd2, 0x33, 0xdd, 0xbc, 0x81, 0x92, - 0x53, 0xfc, 0x58, 0x1e, 0x4e, 0x66, 0x13, 0x7e, 0xd4, 0x24, 0x9b, 0x98, 0x16, 0x44, 0x0b, 0x43, - 0x8c, 0x49, 0x36, 0x65, 0x0e, 0x11, 0xc4, 0x4f, 0x10, 0xd8, 0x36, 0x4c, 0xae, 0xb9, 0x61, 0x74, - 0x93, 0xbb, 0x41, 0xb4, 0xc5, 0xdd, 0x68, 0x00, 0x31, 0xfd, 0x65, 0xf5, 0x80, 0x8e, 0x92, 0xc2, - 0xae, 0xa2, 0x4c, 0x09, 0xd2, 0x26, 0xdb, 0x78, 0xa2, 0x0c, 0x0d, 0x30, 0x51, 0xbe, 0x01, 0xd3, - 0x35, 0xde, 0x72, 0x3b, 0xbb, 0x7e, 0xa0, 0xdc, 0x7c, 0x2f, 0xc1, 0x64, 0x0c, 0xca, 0x9c, 0x2d, - 0x66, 0xb1, 0x81, 0xaf, 0x75, 0x44, 0xb2, 0x95, 0x98, 0xc5, 0xd6, 0xdf, 0xcb, 0xc3, 0xa9, 0x4a, - 0x9d, 0xec, 0xda, 0xa8, 0x40, 0x99, 0xdf, 0x7e, 0x97, 0xeb, 0x66, 0x97, 0x61, 0xec, 0x8e, 0xfb, - 0x64, 0x8d, 0xbb, 0x21, 0x0f, 0x29, 0xc5, 0x99, 0x94, 0x69, 0xdd, 0x27, 0x89, 0xb9, 0x97, 0x9d, - 0xe0, 0xe8, 0x97, 0xfe, 0xa1, 0x8f, 0x79, 0xe9, 0xb7, 0x60, 0xe4, 0xa6, 0xdf, 0x6c, 0xd0, 0x41, - 0x4e, 0x0f, 0x9e, 0xbb, 0x08, 0xb1, 0xa9, 0x44, 0xdc, 0x95, 0xa7, 0xe2, 0x2f, 0xc6, 0x4f, 0xf8, - 0xae, 0x77, 0xc9, 0x79, 0x18, 0xc5, 0x8a, 0xe2, 0x24, 0xd1, 0x78, 0x68, 0x34, 0x39, 0x26, 0xaa, - 0x6a, 0xd8, 0xaa, 0x50, 0xef, 0x89, 0xe1, 0x8f, 0xd7, 0x13, 0xd6, 0x3f, 0xc4, 0xb7, 0x54, 0xbd, - 0x95, 0xe2, 0x24, 0xd2, 0x3e, 0x24, 0x37, 0xe0, 0x87, 0xe4, 0x9f, 0xda, 0x90, 0x14, 0xfa, 0x0e, - 0xc9, 0x0f, 0xe5, 0x61, 0x3c, 0xfe, 0xd8, 0x4f, 0x58, 0x2c, 0xec, 0xb8, 0x5d, 0x03, 0x85, 0xe6, - 0xa8, 0x69, 0x7b, 0x05, 0x45, 0xc0, 0xf8, 0x02, 0x8c, 0xd0, 0x62, 0xca, 0xa5, 0xcc, 0x50, 0x53, - 0xa3, 0xbb, 0x34, 0x45, 0xac, 0x47, 0x70, 0x40, 0x43, 0x9b, 0xe8, 0x30, 0xf6, 0xc9, 0x03, 0xbe, - 0x45, 0x4f, 0xeb, 0xcf, 0xec, 0x19, 0x95, 0x1d, 0xfb, 0x24, 0x69, 0xd8, 0x40, 0xa7, 0xd3, 0x3f, - 0x2b, 0x42, 0x29, 0x4d, 0x72, 0x74, 0xb4, 0xf1, 0x8d, 0xee, 0x96, 0xbc, 0x87, 0xc8, 0x68, 0xe3, - 0x9d, 0xee, 0x96, 0x2d, 0x60, 0x68, 0x79, 0x13, 0x78, 0x8f, 0xb0, 0xd5, 0x13, 0x64, 0x79, 0x13, - 0x78, 0x8f, 0x0c, 0xcb, 0x9b, 0xc0, 0x7b, 0x84, 0x5a, 0x82, 0xb5, 0x1a, 0xba, 0x6b, 0xe3, 0x25, - 0x84, 0xb4, 0x04, 0xcd, 0x30, 0x9d, 0x39, 0x48, 0xa1, 0x89, 0xa3, 0x72, 0x89, 0xbb, 0x01, 0x45, - 0xc6, 0xa6, 0xed, 0x0c, 0x8f, 0xca, 0x2d, 0x04, 0xcb, 0x44, 0xdf, 0xb6, 0x8e, 0xc4, 0x9a, 0xc0, - 0xb4, 0x9f, 0x6a, 0x01, 0x1f, 0x7d, 0x71, 0x56, 0x26, 0x64, 0x73, 0x3a, 0x6b, 0x47, 0x5f, 0xcd, - 0x19, 0x7c, 0x9f, 0xa6, 0xae, 0x76, 0x83, 0xc2, 0xfd, 0xa1, 0x76, 0xa8, 0x78, 0x24, 0x33, 0x15, - 0xcf, 0x00, 0x64, 0x38, 0xc0, 0x58, 0x47, 0x94, 0x30, 0x61, 0xef, 0xc1, 0xb8, 0xee, 0x84, 0x2f, - 0x5d, 0xc5, 0x5f, 0x90, 0x11, 0xdc, 0xfa, 0xe4, 0x9a, 0xd4, 0x09, 0xd8, 0x16, 0x9c, 0x5a, 0xf6, - 0xdb, 0x61, 0xb7, 0xa5, 0x62, 0xc5, 0x25, 0x11, 0x6a, 0x01, 0x87, 0x02, 0x3d, 0x7a, 0xeb, 0x84, - 0x42, 0x3e, 0xdf, 0xca, 0xc6, 0xdf, 0xbc, 0x80, 0xf4, 0x63, 0xc4, 0x36, 0x61, 0x1c, 0xf5, 0x9d, - 0x64, 0x44, 0x38, 0x6e, 0x6e, 0x1b, 0x49, 0xc9, 0x8a, 0x58, 0x18, 0x32, 0xd8, 0x91, 0xdb, 0x6a, - 0x2a, 0x13, 0x73, 0x5d, 0x6f, 0xab, 0x21, 0xb3, 0xaf, 0xc2, 0x94, 0xbc, 0x7f, 0x3d, 0xe0, 0x5b, - 0x72, 0xee, 0x4c, 0x18, 0x6a, 0x06, 0xb3, 0x50, 0x3e, 0xbd, 0x93, 0x96, 0xf9, 0x31, 0xdf, 0x92, - 0x63, 0x6f, 0x38, 0x78, 0x18, 0xf8, 0xec, 0x1e, 0xcc, 0xde, 0x74, 0x43, 0x09, 0xd4, 0xbc, 0xa9, - 0x27, 0x51, 0xfd, 0x8a, 0x86, 0xb7, 0xbb, 0x6e, 0xa8, 0xd4, 0xd6, 0x99, 0xde, 0xd3, 0x59, 0xf4, - 0xec, 0x07, 0x73, 0x30, 0x6f, 0x68, 0xb5, 0xc9, 0xcc, 0xa9, 0xc5, 0xdb, 0x11, 0x7a, 0x72, 0x4c, - 0xc5, 0x29, 0xc6, 0xfb, 0xa1, 0xc9, 0x21, 0x49, 0x29, 0xce, 0x83, 0xa4, 0x5c, 0xb7, 0x68, 0xed, - 0xc7, 0x83, 0x16, 0x2a, 0xae, 0xe9, 0x69, 0x73, 0xa1, 0xa6, 0xd6, 0xb5, 0x42, 0xb3, 0xae, 0xa5, - 0xfb, 0x9b, 0xb4, 0x58, 0xb9, 0x58, 0x8b, 0x35, 0x07, 0xc3, 0xd8, 0xab, 0x2a, 0xf8, 0x0b, 0xfe, - 0xb0, 0x3e, 0xad, 0xef, 0x43, 0x24, 0x16, 0x1e, 0xba, 0x0f, 0x59, 0xff, 0xdd, 0x08, 0x4c, 0xa7, - 0xa6, 0x05, 0xdd, 0x53, 0x73, 0x3d, 0xf7, 0xd4, 0x1a, 0x80, 0xd4, 0xe3, 0x0e, 0xa8, 0x70, 0x55, - 0x5e, 0x64, 0xe3, 0xe4, 0x94, 0x19, 0xaf, 0x29, 0x8d, 0x8d, 0x60, 0x2a, 0x57, 0xec, 0x80, 0x0a, - 0xf0, 0x98, 0xa9, 0x5c, 0xf4, 0x1a, 0xd3, 0x84, 0x0d, 0x2b, 0xc3, 0x30, 0x46, 0x6c, 0xd4, 0x9d, - 0xf8, 0x3c, 0x01, 0xb0, 0x25, 0x9c, 0xbd, 0x04, 0x23, 0x42, 0x88, 0xaa, 0xae, 0xd0, 0x26, 0x88, - 0x67, 0x8b, 0x90, 0xb2, 0x84, 0xc4, 0x42, 0x45, 0xec, 0x1a, 0x4c, 0xc8, 0xbf, 0x28, 0x68, 0xc7, - 0x88, 0x69, 0x7b, 0xe7, 0x78, 0x0d, 0x15, 0xb7, 0xc3, 0xc0, 0x13, 0xb7, 0x8b, 0x5a, 0x17, 0x75, - 0x36, 0xd5, 0x15, 0x0a, 0xf1, 0x8b, 0xb7, 0x8b, 0x50, 0x02, 0x31, 0x85, 0x7f, 0x8c, 0x20, 0x64, - 0x19, 0x32, 0xa5, 0x2f, 0xe2, 0x9d, 0x12, 0x65, 0x19, 0x69, 0x42, 0x6f, 0x53, 0x09, 0xbb, 0x28, - 0xdf, 0x4d, 0x50, 0x2c, 0x94, 0x99, 0xd2, 0xf0, 0x51, 0x02, 0x15, 0x13, 0x28, 0x1b, 0xc6, 0xc5, - 0xa2, 0x72, 0xf1, 0xf7, 0x6a, 0xcb, 0xf5, 0x9a, 0xb4, 0xad, 0x60, 0xe5, 0x88, 0xcb, 0x05, 0xd4, - 0x4e, 0x10, 0xd8, 0x3b, 0x30, 0x25, 0x7e, 0x2c, 0xfb, 0xad, 0x96, 0xdf, 0x46, 0xf6, 0xe3, 0x49, - 0xfc, 0x27, 0x24, 0xa9, 0x63, 0x91, 0xac, 0x25, 0x85, 0x2b, 0xce, 0x13, 0x7c, 0x93, 0xed, 0xca, - 0x17, 0x9d, 0x89, 0xe4, 0x3c, 0x41, 0xd2, 0x50, 0xc2, 0x6d, 0x1d, 0x89, 0xbd, 0x05, 0x93, 0xe2, - 0xe7, 0x0d, 0xef, 0x11, 0x97, 0x15, 0x4e, 0x26, 0xc6, 0x08, 0x48, 0xb5, 0x23, 0x4a, 0x64, 0x7d, - 0x26, 0x26, 0xfb, 0x22, 0x9c, 0x40, 0x4e, 0x75, 0xbf, 0xc3, 0x1b, 0x95, 0xed, 0x6d, 0xaf, 0xe9, - 0x49, 0x63, 0x28, 0x19, 0x9e, 0x02, 0x15, 0xec, 0xb2, 0x62, 0xc4, 0x70, 0xdc, 0x04, 0xc5, 0xce, - 0xa6, 0x64, 0x0f, 0xa0, 0xb4, 0xdc, 0x0d, 0x23, 0xbf, 0x55, 0x89, 0xa2, 0xc0, 0xdb, 0xea, 0x46, - 0x3c, 0x9c, 0x9f, 0x36, 0x82, 0x38, 0x88, 0xc5, 0x11, 0x17, 0x4a, 0x7d, 0x50, 0x1d, 0x29, 0x1c, - 0x37, 0x26, 0xb1, 0x7b, 0x98, 0x58, 0x7f, 0x90, 0x83, 0x49, 0x83, 0x94, 0xbd, 0x09, 0x13, 0xd7, - 0x03, 0x8f, 0xb7, 0x1b, 0xcd, 0x3d, 0xed, 0xa2, 0x8a, 0xb7, 0x98, 0x6d, 0x82, 0xcb, 0x56, 0x1b, - 0x68, 0xb1, 0x9e, 0x27, 0x9f, 0x69, 0xa9, 0x78, 0x59, 0xfa, 0x92, 0xd2, 0x04, 0x2d, 0x24, 0x51, - 0x65, 0x70, 0x82, 0xd2, 0xec, 0xd4, 0x50, 0xd8, 0xbb, 0x30, 0x22, 0x5f, 0x6f, 0xc9, 0x6c, 0xee, - 0x74, 0x56, 0x33, 0xa5, 0xdf, 0x32, 0x4e, 0x44, 0x34, 0xd1, 0x09, 0x6d, 0x22, 0xb2, 0x7e, 0x3a, - 0x07, 0xac, 0x17, 0xf5, 0x08, 0xbd, 0xd7, 0x91, 0xa6, 0x3f, 0x5f, 0x88, 0x57, 0x63, 0xc1, 0x50, - 0x88, 0x8b, 0x9a, 0x64, 0x81, 0xec, 0x78, 0x5a, 0x75, 0xba, 0x22, 0x4e, 0x16, 0x5b, 0x3f, 0x90, - 0x07, 0x48, 0xb0, 0xd9, 0xe7, 0x64, 0x62, 0x9c, 0x2f, 0x76, 0xdd, 0xa6, 0xb7, 0xed, 0x99, 0x91, - 0x22, 0x91, 0xc9, 0x37, 0x54, 0x89, 0x6d, 0x22, 0xb2, 0xf7, 0x61, 0xba, 0xb6, 0x61, 0xd2, 0x6a, - 0x76, 0xd4, 0x61, 0xc7, 0x49, 0x91, 0xa7, 0xb1, 0xd1, 0x3c, 0x56, 0x1f, 0x0d, 0x69, 0x1e, 0x2b, - 0x07, 0x82, 0x4a, 0xc4, 0xc6, 0x52, 0xdb, 0x20, 0x53, 0xf1, 0x46, 0x75, 0x85, 0x76, 0x29, 0xfc, - 0xba, 0xb0, 0xe3, 0x74, 0xc8, 0x86, 0x5c, 0xec, 0x13, 0x06, 0x5e, 0xd2, 0x91, 0xc3, 0x7d, 0x7c, - 0x93, 0x7f, 0x06, 0xd5, 0x7e, 0x2d, 0x3f, 0xe2, 0xa4, 0xed, 0x78, 0x66, 0xef, 0x3d, 0xc9, 0xd3, - 0xff, 0xb0, 0xe1, 0x72, 0x69, 0xb4, 0x8e, 0xcc, 0x5b, 0xae, 0x26, 0x97, 0x14, 0x69, 0x04, 0x90, - 0x61, 0x11, 0xf3, 0x0f, 0x72, 0x70, 0x22, 0x93, 0x96, 0x5d, 0x02, 0x48, 0x74, 0x4a, 0xd4, 0x4b, - 0xb8, 0x63, 0x26, 0xb1, 0x54, 0x6c, 0x0d, 0x83, 0x7d, 0x25, 0xad, 0x0d, 0x3a, 0xfa, 0x20, 0x5c, - 0x50, 0xb1, 0xb2, 0x4c, 0x6d, 0x50, 0x86, 0x0e, 0xc8, 0xfa, 0x47, 0x05, 0x98, 0xd1, 0x42, 0xb5, - 0xc8, 0x6f, 0x3d, 0xc2, 0x5c, 0xf9, 0x21, 0x4c, 0x88, 0xd6, 0x78, 0x75, 0xf2, 0xfb, 0x92, 0x66, - 0x2a, 0xaf, 0xf5, 0x38, 0xcd, 0x11, 0xb7, 0x4b, 0x3a, 0xb2, 0x8c, 0x60, 0x87, 0x5b, 0x27, 0xbe, - 0x36, 0xd4, 0x7b, 0xfd, 0xbf, 0x0c, 0xe6, 0x2c, 0x84, 0xc9, 0x95, 0xbd, 0xb6, 0xdb, 0x8a, 0x6b, - 0x93, 0xe6, 0x2a, 0x9f, 0xea, 0x5b, 0x9b, 0x81, 0x2d, 0xab, 0x4b, 0xdc, 0x4b, 0x64, 0x59, 0x86, - 0x67, 0xb3, 0x41, 0xb5, 0xf0, 0x3e, 0xcc, 0xf4, 0x7c, 0xf4, 0xb1, 0x82, 0xe9, 0x3d, 0x00, 0xd6, - 0xfb, 0x1d, 0x19, 0x1c, 0x3e, 0x65, 0x86, 0x6a, 0x3c, 0x11, 0xbf, 0x4c, 0x63, 0xea, 0x70, 0x69, - 0xfc, 0xb2, 0xa8, 0x87, 0xda, 0xfb, 0x99, 0xbc, 0xee, 0xb8, 0xf8, 0xac, 0xaf, 0xba, 0x2f, 0x18, - 0xb7, 0xe1, 0xb3, 0xfd, 0xc6, 0x74, 0x20, 0xad, 0xc3, 0xb7, 0x0b, 0x70, 0xaa, 0x0f, 0x25, 0xdb, - 0x4b, 0x4f, 0x22, 0xa9, 0x85, 0xb8, 0x72, 0x78, 0x85, 0x4f, 0x63, 0x2a, 0xb1, 0xcf, 0xc9, 0xd0, - 0x05, 0x75, 0x4c, 0x4f, 0x4d, 0xf7, 0x6f, 0x54, 0xe3, 0x3f, 0x8c, 0xa1, 0xe9, 0x98, 0x05, 0x12, - 0xca, 0xde, 0x87, 0x61, 0xf4, 0x5a, 0x4d, 0x85, 0x8a, 0x13, 0x18, 0x08, 0xd7, 0xe2, 0xea, 0x89, - 0x9f, 0x46, 0x5c, 0x3d, 0x01, 0x60, 0x9f, 0x85, 0x42, 0xe5, 0x41, 0x8d, 0xc6, 0x65, 0x4a, 0x27, - 0x7f, 0x50, 0x4b, 0xc2, 0xf9, 0xbb, 0x46, 0xdc, 0x7d, 0x41, 0x21, 0x08, 0x6f, 0x2c, 0x6f, 0xd0, - 0xa8, 0xe8, 0x84, 0x37, 0x96, 0x37, 0x12, 0xc2, 0x9d, 0xba, 0x11, 0x7a, 0xe7, 0xc6, 0xf2, 0xc6, - 0x77, 0x6f, 0xda, 0xff, 0x5b, 0x79, 0x19, 0x6f, 0x41, 0x36, 0xec, 0x7d, 0x98, 0x30, 0x42, 0xe9, - 0xe6, 0x12, 0x79, 0x2c, 0x8e, 0x58, 0x9c, 0xb2, 0xef, 0x31, 0x08, 0x54, 0x62, 0x0c, 0xf1, 0x1b, - 0x25, 0x5e, 0xdd, 0x92, 0x26, 0xe6, 0x80, 0x32, 0x71, 0x3a, 0x31, 0x46, 0x4c, 0xc2, 0xae, 0x42, - 0x71, 0x93, 0xb7, 0xdd, 0x76, 0x14, 0x2b, 0x44, 0xd1, 0x14, 0x38, 0x42, 0x98, 0x29, 0x35, 0xc4, - 0x88, 0x68, 0xb6, 0xda, 0xdd, 0x0a, 0xeb, 0x81, 0x87, 0x71, 0x59, 0xe2, 0xb3, 0x58, 0x9a, 0xad, - 0x6a, 0x25, 0x26, 0x83, 0x14, 0x91, 0xf5, 0x33, 0x39, 0x18, 0xa5, 0x81, 0x94, 0x09, 0x8d, 0x76, - 0x92, 0xb3, 0x84, 0x12, 0x1a, 0xed, 0x78, 0xe9, 0x84, 0x46, 0x3b, 0x32, 0xf8, 0xc9, 0x18, 0x79, - 0x62, 0xc5, 0x4f, 0x83, 0x32, 0x27, 0x3f, 0xf9, 0xac, 0x99, 0xf9, 0x6a, 0x62, 0xd4, 0x41, 0xfd, - 0x81, 0xac, 0xbf, 0x4f, 0x5f, 0x76, 0x63, 0x79, 0x83, 0x2d, 0x42, 0x71, 0xcd, 0x97, 0x81, 0x75, - 0xf4, 0xec, 0x94, 0x4d, 0x82, 0xe9, 0x1d, 0xa4, 0xf0, 0xc4, 0xf7, 0x6d, 0x04, 0x3e, 0xdd, 0x65, - 0xb4, 0xef, 0xeb, 0x48, 0x60, 0xea, 0xfb, 0x62, 0xd4, 0x81, 0xbf, 0x8f, 0x67, 0x6c, 0x12, 0xf7, - 0xaf, 0x62, 0xc6, 0x80, 0x5b, 0xba, 0x9f, 0x15, 0x15, 0xa9, 0x9d, 0x62, 0xa1, 0xdf, 0x4e, 0x71, - 0xff, 0xaa, 0x9d, 0x41, 0x85, 0xef, 0x6a, 0x09, 0xb8, 0xc6, 0x83, 0x47, 0xcf, 0xf0, 0x2e, 0x9d, - 0xfd, 0xae, 0x96, 0x6e, 0xde, 0x40, 0x9b, 0xf4, 0xef, 0xe5, 0xe1, 0x64, 0x36, 0xa1, 0xde, 0x96, - 0xdc, 0x21, 0x6d, 0xb9, 0x00, 0xc5, 0x9b, 0x7e, 0x18, 0x69, 0x26, 0x7d, 0xa8, 0xfe, 0xdf, 0x25, - 0x98, 0x1d, 0x97, 0x8a, 0x3b, 0xb7, 0xf8, 0x3b, 0x5e, 0x9e, 0xc8, 0x0f, 0xa3, 0x0c, 0x88, 0x3b, - 0xb7, 0x2c, 0x62, 0x37, 0xa0, 0x68, 0x93, 0x9f, 0x4f, 0xaa, 0x6b, 0x14, 0x38, 0x96, 0xa6, 0x58, - 0x40, 0x10, 0x23, 0xa2, 0x31, 0xc1, 0x58, 0x05, 0x46, 0x69, 0xf4, 0x53, 0x4f, 0xc7, 0x19, 0x53, - 0xc6, 0x0c, 0x32, 0xae, 0xe8, 0xc4, 0x8e, 0x82, 0x8f, 0x80, 0xd5, 0x15, 0xe5, 0xb2, 0x83, 0x3b, - 0x8a, 0x7c, 0x24, 0x34, 0xad, 0x27, 0x63, 0x44, 0xeb, 0x07, 0xf3, 0x00, 0x4a, 0x6b, 0xf3, 0xcc, - 0xce, 0xb0, 0xcf, 0x1a, 0x33, 0x4c, 0x33, 0x26, 0x1a, 0x3c, 0x01, 0xe7, 0x5d, 0xb4, 0xd5, 0x19, - 0x3c, 0xfd, 0x66, 0x19, 0x86, 0x37, 0x13, 0x85, 0x16, 0x39, 0x90, 0xa0, 0x3a, 0x5a, 0xc2, 0xad, - 0x2d, 0x98, 0xbb, 0xc1, 0xa3, 0x44, 0xbd, 0xa5, 0x9e, 0x1e, 0x0f, 0x67, 0xfb, 0x3a, 0x8c, 0x11, - 0x7e, 0xbc, 0x7f, 0x49, 0x5d, 0x0c, 0x05, 0xee, 0x40, 0x5d, 0x8c, 0x42, 0x10, 0xbb, 0xd1, 0x0a, - 0x6f, 0xf2, 0x88, 0x7f, 0x77, 0xab, 0xa9, 0x01, 0x93, 0x4d, 0xc1, 0x96, 0x0d, 0x56, 0xc3, 0x91, - 0xfd, 0x73, 0x1f, 0x4e, 0xc4, 0xdf, 0xfe, 0x34, 0xf9, 0x5e, 0x16, 0x57, 0x4a, 0x8a, 0xcf, 0x9d, - 0x70, 0x3c, 0xc4, 0xf6, 0xe4, 0x09, 0x2c, 0x28, 0x82, 0x07, 0x5e, 0x6c, 0x15, 0x39, 0x10, 0x2d, - 0x7b, 0x07, 0xc6, 0x35, 0x1a, 0x8a, 0x2f, 0x8d, 0x6a, 0xea, 0xc7, 0x5e, 0xb4, 0xeb, 0x84, 0x12, - 0xae, 0xab, 0xa9, 0x35, 0x74, 0xeb, 0xcb, 0xf0, 0x7c, 0xec, 0xe4, 0x93, 0x51, 0x75, 0x8a, 0x79, - 0xee, 0x78, 0xcc, 0xd7, 0x93, 0x66, 0x55, 0xdb, 0xb1, 0x63, 0xae, 0xe2, 0xcd, 0xf4, 0x66, 0x51, - 0x63, 0x5e, 0xe8, 0x71, 0xf5, 0xd5, 0x3c, 0x7a, 0xad, 0xb7, 0xb5, 0x8f, 0xcd, 0x60, 0x68, 0x10, - 0xe7, 0xd2, 0xc4, 0x3f, 0x98, 0x87, 0xe9, 0xbb, 0xd5, 0x95, 0xe5, 0xd8, 0xfa, 0xe8, 0x13, 0x96, - 0x1e, 0xd4, 0x68, 0x5b, 0xff, 0xfd, 0xc6, 0xba, 0x07, 0xb3, 0xa9, 0x6e, 0x40, 0xd1, 0xe1, 0x3d, - 0xe9, 0x1e, 0x12, 0x83, 0x95, 0xd8, 0x70, 0x32, 0x8b, 0xfd, 0xfd, 0xab, 0x76, 0x0a, 0xdb, 0xfa, - 0xc7, 0x90, 0xe2, 0x4b, 0x5b, 0xd8, 0xeb, 0x30, 0x56, 0x0d, 0xc3, 0x2e, 0x0f, 0xee, 0xd9, 0x6b, - 0xba, 0xaa, 0xc0, 0x43, 0xa0, 0xd3, 0x0d, 0x9a, 0x76, 0x82, 0xc0, 0x2e, 0x42, 0x91, 0x42, 0x2e, - 0xab, 0x3d, 0x01, 0xb5, 0xb6, 0x71, 0xc4, 0x66, 0x3b, 0x2e, 0x66, 0x6f, 0xc2, 0x84, 0xfc, 0x5b, - 0xce, 0x36, 0xea, 0x70, 0x54, 0x0e, 0x12, 0xba, 0x9c, 0x9d, 0xb6, 0x81, 0xc6, 0x5e, 0x83, 0x42, - 0x65, 0xd9, 0x26, 0x75, 0x10, 0xc9, 0x8d, 0x98, 0xf4, 0xbb, 0xcb, 0xcd, 0x4b, 0xc4, 0xb2, 0x2d, - 0xa4, 0x3f, 0x15, 0x9d, 0x80, 0x34, 0xd9, 0x32, 0x37, 0x39, 0xc1, 0x52, 0x87, 0x19, 0xc2, 0xd8, - 0x65, 0x18, 0x5d, 0xf1, 0xc2, 0x4e, 0xd3, 0xdd, 0x23, 0x3d, 0xb6, 0xcc, 0x7d, 0x25, 0x41, 0x86, - 0x6f, 0xbf, 0x04, 0xb1, 0x8b, 0x2a, 0x27, 0x50, 0x31, 0xf1, 0x32, 0xe9, 0x93, 0xf8, 0xe7, 0x75, - 0x18, 0xa1, 0xc0, 0xc4, 0x63, 0x5a, 0xca, 0x81, 0x74, 0x40, 0x62, 0xc2, 0xe9, 0x75, 0x37, 0x85, - 0xa7, 0xe9, 0x6e, 0xba, 0x05, 0xa7, 0x6e, 0xa0, 0xf6, 0xc6, 0x8c, 0xe6, 0x73, 0xcf, 0xae, 0x92, - 0x3e, 0x1c, 0x9f, 0x81, 0xa4, 0x82, 0x27, 0x1d, 0x10, 0xc8, 0xe9, 0x06, 0x7a, 0x2a, 0xc7, 0x7e, - 0x8c, 0xd8, 0x97, 0x60, 0x2e, 0xab, 0x88, 0xb4, 0xe6, 0x18, 0xb7, 0x26, 0xbb, 0x02, 0x3d, 0x6e, - 0x4d, 0x16, 0x07, 0xb6, 0x06, 0x25, 0x09, 0xaf, 0x34, 0x5a, 0x5e, 0x5b, 0x6a, 0xfe, 0xa5, 0x56, - 0x1d, 0xdd, 0x3e, 0x88, 0xab, 0x2b, 0x0a, 0xe5, 0x0b, 0x80, 0xe1, 0x28, 0x94, 0xa2, 0x64, 0x3f, - 0x91, 0x13, 0xb7, 0x39, 0x19, 0xc6, 0xf7, 0x9e, 0xbd, 0x16, 0x52, 0xcc, 0xb3, 0x93, 0x89, 0x0f, - 0x50, 0x2d, 0x0a, 0xbc, 0xf6, 0x0e, 0x39, 0x01, 0x6d, 0x92, 0x13, 0xd0, 0x3b, 0x1f, 0xc9, 0x09, - 0x48, 0xb2, 0x0a, 0x0f, 0xf6, 0xcb, 0x13, 0x01, 0xd5, 0x89, 0xab, 0xc8, 0xf8, 0x02, 0xd1, 0x75, - 0xe8, 0x09, 0x7b, 0xaf, 0x2d, 0x83, 0x88, 0xf2, 0x86, 0x6c, 0xe4, 0x34, 0xee, 0xe0, 0xd8, 0x75, - 0x18, 0xca, 0xde, 0xe9, 0xc6, 0x08, 0x3d, 0x0d, 0xcd, 0xe4, 0x20, 0x2e, 0x9e, 0xca, 0xd1, 0x44, - 0xfa, 0xce, 0x96, 0x92, 0x8b, 0xa7, 0xf2, 0x4a, 0x71, 0x70, 0x1a, 0xe9, 0x93, 0xc7, 0x20, 0x61, - 0x97, 0x61, 0xe4, 0x8e, 0xfb, 0xa4, 0xb2, 0xc3, 0x29, 0xd7, 0xdb, 0xa4, 0xda, 0xfe, 0x10, 0xb8, - 0x54, 0xfc, 0x7d, 0xe9, 0xc8, 0xf0, 0x9c, 0x4d, 0x68, 0xec, 0xfb, 0x72, 0x70, 0x52, 0x2e, 0x63, - 0xd5, 0xca, 0x1a, 0x8f, 0x22, 0xd1, 0x0f, 0x14, 0xfc, 0xec, 0x5c, 0x62, 0x8d, 0x9d, 0x8d, 0x27, - 0x93, 0xe6, 0xd3, 0xce, 0x10, 0x77, 0x5c, 0x48, 0xa5, 0x46, 0x58, 0xd7, 0x4c, 0x7a, 0xb6, 0x09, - 0xe3, 0x77, 0xae, 0x57, 0xe2, 0x6a, 0x65, 0xac, 0xe7, 0x72, 0xd6, 0xee, 0xa8, 0xa1, 0x65, 0xb9, - 0x11, 0xe8, 0x6c, 0xc8, 0xf4, 0xff, 0xb3, 0xaa, 0x3f, 0xd8, 0x1b, 0xba, 0xe3, 0x68, 0x01, 0xa5, - 0xe7, 0xd1, 0x96, 0xfb, 0xc4, 0x71, 0x77, 0xb8, 0xf1, 0x4a, 0x4e, 0xda, 0xeb, 0x9f, 0xca, 0xc1, - 0xe9, 0xbe, 0x4d, 0x66, 0xd7, 0xe0, 0x94, 0x2b, 0xdd, 0xa1, 0x9d, 0xdd, 0x28, 0xea, 0x84, 0x8e, - 0xba, 0x62, 0x90, 0xab, 0xa9, 0x7d, 0x82, 0x8a, 0x6f, 0x8a, 0x52, 0x75, 0xeb, 0x08, 0xd9, 0xfb, - 0xf0, 0x82, 0xd7, 0x0e, 0x79, 0xbd, 0x1b, 0x70, 0x47, 0x31, 0xa8, 0x7b, 0x8d, 0xc0, 0x09, 0xdc, - 0xf6, 0x8e, 0xf2, 0x9b, 0xb5, 0x4f, 0x2b, 0x1c, 0x72, 0xb9, 0x5e, 0xf6, 0x1a, 0x81, 0x8d, 0x08, - 0xd6, 0x1f, 0xe4, 0x60, 0xbe, 0x5f, 0x97, 0xb0, 0x79, 0x18, 0xe5, 0x6d, 0x77, 0xab, 0xa9, 0xbc, - 0x85, 0x6c, 0xf5, 0x93, 0x3d, 0x0f, 0xc9, 0x4e, 0x4f, 0xa7, 0x7f, 0xb1, 0x4e, 0x11, 0xf8, 0xd1, - 0x6e, 0x5d, 0xdf, 0xd7, 0xc9, 0xce, 0x7c, 0xa2, 0xae, 0xef, 0xee, 0x67, 0x00, 0x92, 0xed, 0x5c, - 0x2a, 0x26, 0xec, 0x31, 0xb7, 0x1e, 0xc8, 0x95, 0xc7, 0x4e, 0xc2, 0x88, 0xdc, 0x2e, 0xc9, 0xb9, - 0x81, 0x7e, 0x89, 0x73, 0x9b, 0x3a, 0x19, 0xf7, 0xf9, 0xc2, 0xd2, 0x84, 0xd1, 0xd9, 0x23, 0x2d, - 0x1c, 0x1c, 0xeb, 0x27, 0x27, 0xa5, 0x08, 0x51, 0xe9, 0x46, 0xbb, 0x4a, 0xe8, 0x58, 0xcc, 0xf2, - 0xee, 0x92, 0xb6, 0x94, 0x9a, 0xd1, 0xb5, 0xe9, 0xd3, 0xa5, 0xde, 0x7e, 0xf2, 0x99, 0x6f, 0x3f, - 0xaf, 0xc3, 0xd8, 0xf2, 0x2e, 0xaf, 0x3f, 0x8c, 0x3d, 0x6c, 0x8a, 0xa4, 0x5c, 0x17, 0x40, 0x19, - 0x60, 0x39, 0x41, 0x60, 0x97, 0x01, 0xd0, 0xa9, 0x54, 0x4a, 0xa4, 0x5a, 0x92, 0x04, 0xf4, 0x41, - 0x25, 0xf3, 0x14, 0x0d, 0x05, 0xd9, 0xd7, 0xec, 0xeb, 0xba, 0x3d, 0x8b, 0x64, 0x1f, 0x06, 0xdb, - 0x84, 0x9e, 0x20, 0x88, 0xe6, 0x69, 0xfb, 0x0a, 0x9d, 0x82, 0xa5, 0x9e, 0xcd, 0x47, 0x47, 0x62, - 0x97, 0x60, 0x6c, 0x43, 0x79, 0x09, 0xe0, 0x21, 0x38, 0x81, 0x14, 0x90, 0x78, 0x14, 0xcc, 0xe7, - 0xec, 0x04, 0x85, 0x7d, 0x16, 0x46, 0x97, 0x79, 0x10, 0x6d, 0x6e, 0xae, 0xa1, 0xd1, 0x89, 0xcc, - 0x25, 0x50, 0xc4, 0xb8, 0xef, 0x51, 0xd4, 0xfc, 0xce, 0x7e, 0x79, 0x32, 0xf2, 0x5a, 0x3c, 0x8e, - 0x91, 0x6c, 0x2b, 0x6c, 0xb6, 0x04, 0x25, 0xf9, 0x2c, 0x9e, 0xdc, 0x3d, 0xf0, 0x64, 0x2c, 0xca, - 0x73, 0x9a, 0xde, 0xd0, 0x1f, 0xf3, 0xad, 0x38, 0xea, 0x7d, 0x0f, 0x3e, 0x5b, 0x55, 0xc9, 0x22, - 0xf4, 0x66, 0x42, 0xa2, 0x0c, 0x4b, 0xef, 0x18, 0xa2, 0xb5, 0xbd, 0x14, 0xac, 0x02, 0x93, 0xcb, - 0x7e, 0xab, 0xe3, 0x46, 0x1e, 0x66, 0x5e, 0xdb, 0xa3, 0x43, 0x10, 0x15, 0x7a, 0x75, 0xbd, 0xc0, - 0x38, 0x51, 0xf5, 0x02, 0x76, 0x1d, 0xa6, 0x6c, 0xbf, 0x2b, 0x86, 0x49, 0xdd, 0xc2, 0xe5, 0x39, - 0x87, 0xa6, 0x21, 0x81, 0x28, 0x11, 0xc7, 0x32, 0x5d, 0xb9, 0x8d, 0xf0, 0x95, 0x06, 0x15, 0x5b, - 0xcf, 0x78, 0x0e, 0xd1, 0x0f, 0x37, 0x3d, 0xf6, 0x7d, 0x0f, 0xb3, 0x8c, 0x97, 0x94, 0xab, 0x30, - 0x5e, 0xab, 0xdd, 0xdd, 0xe4, 0x61, 0x74, 0xbd, 0xe9, 0x3f, 0xc6, 0xb3, 0xad, 0x48, 0x39, 0x81, - 0x42, 0xdf, 0x89, 0x78, 0x18, 0x39, 0xdb, 0x4d, 0xff, 0xb1, 0xad, 0x63, 0xb1, 0xaf, 0x89, 0xfe, - 0xd0, 0x24, 0x41, 0x0a, 0xd4, 0x79, 0x98, 0xb0, 0x8a, 0x27, 0x48, 0xb2, 0x68, 0x84, 0xc8, 0x6a, - 0x76, 0x96, 0x86, 0x8e, 0x0e, 0x63, 0x81, 0xff, 0x64, 0xaf, 0xd2, 0x68, 0x04, 0x3c, 0x0c, 0xe9, - 0x10, 0x92, 0x0e, 0x63, 0xa8, 0x6c, 0x70, 0x65, 0x81, 0xe1, 0x30, 0xa6, 0x11, 0xb0, 0x1f, 0xce, - 0xc1, 0x09, 0xdd, 0x95, 0x04, 0x97, 0x0b, 0x9a, 0xb9, 0xc8, 0x23, 0xe9, 0x8d, 0x4b, 0xea, 0x10, - 0xbe, 0xa4, 0xa1, 0x5d, 0x7a, 0x74, 0xe5, 0x52, 0x25, 0xf9, 0x59, 0x53, 0x44, 0x18, 0x74, 0xac, - 0x9c, 0xc9, 0x2f, 0xf9, 0x82, 0xf9, 0x9c, 0x3d, 0xe7, 0x66, 0x10, 0xb3, 0x65, 0x21, 0xa9, 0x89, - 0x19, 0x85, 0x86, 0x53, 0xd5, 0x0d, 0x3c, 0xd3, 0x48, 0xa3, 0x4a, 0xf3, 0x4f, 0x9a, 0x58, 0x79, - 0x1d, 0x53, 0x20, 0xd3, 0x68, 0x58, 0x15, 0xa6, 0x25, 0x40, 0x6c, 0x0b, 0x32, 0x65, 0xcc, 0x6c, - 0x12, 0xb6, 0x9e, 0xd8, 0xe0, 0x5b, 0x3f, 0xa6, 0x8d, 0xd1, 0x23, 0x4b, 0xa6, 0xe8, 0xd8, 0xfb, - 0x30, 0x15, 0x86, 0xbb, 0x8e, 0xb6, 0x5e, 0xe7, 0x70, 0x15, 0x63, 0x80, 0x4c, 0x2a, 0x49, 0xb9, - 0xd5, 0x4d, 0x84, 0xe1, 0x6e, 0xb2, 0xa2, 0xdf, 0x87, 0x29, 0xb4, 0xd5, 0x49, 0x18, 0x9c, 0x48, - 0x18, 0x50, 0x49, 0x9a, 0x41, 0xd4, 0x0c, 0x13, 0x06, 0x7f, 0x27, 0x07, 0xa7, 0x45, 0x45, 0xd9, - 0x23, 0x74, 0xf2, 0xa3, 0x8c, 0x10, 0x86, 0x0c, 0xec, 0xcb, 0x53, 0x17, 0x47, 0xc3, 0x70, 0x37, - 0x8b, 0x03, 0x7e, 0x94, 0xf8, 0xf8, 0xec, 0x8f, 0x3a, 0xf5, 0x91, 0x3f, 0xaa, 0x2f, 0x4f, 0xfd, - 0xa3, 0xa2, 0x66, 0x98, 0xc5, 0x01, 0xaf, 0xb5, 0xb5, 0xca, 0x9d, 0xb5, 0xe4, 0x6e, 0xf6, 0xc9, - 0x72, 0x5b, 0x31, 0xda, 0x76, 0x88, 0xdb, 0xca, 0x3d, 0xe9, 0xf3, 0xac, 0x75, 0x83, 0xba, 0xd6, - 0x1a, 0xe0, 0xf4, 0xb5, 0x36, 0x45, 0x63, 0xa7, 0xb0, 0xad, 0x5f, 0x80, 0x14, 0x5f, 0x32, 0x55, - 0xb5, 0x60, 0x44, 0xde, 0x5a, 0xa9, 0x93, 0xd1, 0x66, 0x41, 0xde, 0x69, 0x6d, 0x2a, 0x61, 0xa7, - 0xa1, 0x50, 0xab, 0xdd, 0xa5, 0x4e, 0x46, 0x83, 0xd5, 0x30, 0xf4, 0x6d, 0x01, 0x13, 0x23, 0x84, - 0x56, 0xa8, 0x5a, 0x40, 0x75, 0x71, 0xde, 0xd9, 0x08, 0x15, 0xfd, 0xad, 0xee, 0x90, 0x43, 0x49, - 0x7f, 0xd3, 0x1d, 0x32, 0xb9, 0x39, 0x2e, 0xc3, 0x7c, 0x25, 0x0c, 0x79, 0x20, 0x26, 0x04, 0x19, - 0x37, 0x06, 0x74, 0xcf, 0xa1, 0x83, 0x1d, 0x2b, 0x75, 0xeb, 0xa1, 0xdd, 0x17, 0x91, 0x5d, 0x80, - 0x62, 0xa5, 0xdb, 0xf0, 0x78, 0xbb, 0x6e, 0x44, 0x05, 0x73, 0x09, 0x66, 0xc7, 0xa5, 0xec, 0x8b, - 0x70, 0x22, 0x15, 0xb2, 0x8f, 0x7a, 0x60, 0x34, 0xd9, 0x7b, 0xd5, 0x3d, 0x2c, 0x31, 0xc8, 0x90, - 0x5d, 0x92, 0x4d, 0xc9, 0x2a, 0x50, 0x5a, 0x45, 0x37, 0xad, 0x15, 0x2e, 0xdf, 0x86, 0xfc, 0x40, - 0x3a, 0xdf, 0xc9, 0x5b, 0xb3, 0x74, 0xe1, 0x72, 0x1a, 0x71, 0xa1, 0xdd, 0x83, 0xce, 0x6e, 0xc3, - 0x6c, 0x1a, 0x26, 0x4e, 0x70, 0x79, 0x41, 0xc6, 0xfd, 0xa6, 0x87, 0x0b, 0x9e, 0xe1, 0x59, 0x54, - 0x6c, 0x0b, 0x66, 0x12, 0x83, 0x24, 0xf3, 0xda, 0xac, 0xec, 0x9c, 0xe3, 0x72, 0x75, 0x75, 0x7e, - 0x9e, 0x26, 0xe3, 0x6c, 0x62, 0xdc, 0x14, 0x5f, 0x9f, 0xed, 0x5e, 0x76, 0xac, 0x01, 0x53, 0x35, - 0x6f, 0xa7, 0xed, 0xb5, 0x77, 0x6e, 0xf3, 0xbd, 0x0d, 0xd7, 0x0b, 0xc8, 0xe2, 0x54, 0xd9, 0x93, - 0x57, 0xc2, 0xbd, 0x56, 0x8b, 0x47, 0x01, 0x6e, 0x84, 0xa2, 0x1c, 0x1d, 0xcc, 0xc5, 0x75, 0x68, - 0x21, 0x94, 0x74, 0xe8, 0x93, 0xd9, 0x71, 0x3d, 0x43, 0x08, 0x30, 0x79, 0x1a, 0xaa, 0x8b, 0x89, - 0x01, 0x55, 0x17, 0x4d, 0x98, 0x59, 0x6d, 0xd7, 0x83, 0x3d, 0x7c, 0xa2, 0x53, 0x1f, 0x37, 0x79, - 0xc4, 0xc7, 0xbd, 0x4c, 0x1f, 0xf7, 0x82, 0xab, 0x66, 0x58, 0xd6, 0xe7, 0xf5, 0x32, 0x66, 0x35, - 0x98, 0xc1, 0x8b, 0x43, 0x75, 0x65, 0xa3, 0xda, 0xf6, 0x22, 0xcf, 0x8d, 0x78, 0x83, 0x84, 0x8b, - 0x57, 0x88, 0xe7, 0x19, 0x79, 0x45, 0xf5, 0x1a, 0x1d, 0xc7, 0x53, 0x28, 0x3a, 0xd3, 0x1e, 0xfa, - 0xc3, 0xee, 0x89, 0xd3, 0x7f, 0x41, 0xf7, 0xc4, 0x2a, 0x4c, 0xa7, 0x03, 0x2f, 0x94, 0x92, 0x73, - 0x38, 0xc4, 0x22, 0x71, 0x9c, 0xfb, 0x5d, 0x14, 0x26, 0x8d, 0x9c, 0x7f, 0x26, 0x5d, 0xfa, 0xca, - 0x39, 0x63, 0x5c, 0x39, 0x8d, 0x5d, 0xe9, 0x18, 0x57, 0x4e, 0xb6, 0x01, 0x70, 0xdd, 0x0f, 0xea, - 0xbc, 0x82, 0xce, 0xcf, 0xcc, 0xc8, 0x9e, 0x23, 0x98, 0x26, 0x85, 0x72, 0xfd, 0x6c, 0x8b, 0xdf, - 0x4e, 0xda, 0x87, 0x5d, 0xe3, 0x61, 0xfd, 0x48, 0x1e, 0xe6, 0xfb, 0x7d, 0xce, 0x21, 0xd7, 0xbd, - 0x4f, 0x41, 0xef, 0x0a, 0xa7, 0x6b, 0x5f, 0x89, 0xa7, 0xd7, 0xf9, 0x22, 0x64, 0x2f, 0x64, 0xba, - 0x06, 0xce, 0xa6, 0x09, 0xee, 0x05, 0x4d, 0x76, 0x0d, 0xc6, 0xb5, 0x8f, 0xc7, 0xbd, 0xb4, 0x5f, - 0x53, 0x6d, 0xd8, 0x8e, 0xff, 0x16, 0xd7, 0x44, 0xb9, 0x6f, 0xa9, 0x6b, 0xa2, 0xfc, 0xc5, 0x4a, - 0xd2, 0xff, 0x7b, 0x44, 0x5a, 0x01, 0x84, 0xa1, 0xcf, 0x18, 0xe0, 0xbe, 0x2d, 0xb7, 0x40, 0x1b, - 0xff, 0xb6, 0x7e, 0x75, 0x42, 0x9e, 0xc8, 0xfa, 0x2d, 0xb1, 0x9f, 0x7d, 0x70, 0xea, 0xf6, 0x98, - 0x3f, 0xce, 0xed, 0xb1, 0x70, 0xf4, 0xed, 0x71, 0xe8, 0xa8, 0xdb, 0x63, 0xea, 0x7a, 0x37, 0x7c, - 0xec, 0xeb, 0xdd, 0xc8, 0xb1, 0xae, 0x77, 0xa3, 0xc7, 0xba, 0xde, 0x19, 0x37, 0xd5, 0xe2, 0x51, - 0x37, 0xd5, 0xbf, 0xba, 0x0c, 0x3e, 0xab, 0x97, 0xc1, 0x2c, 0x11, 0xef, 0x58, 0x97, 0xc1, 0x1f, - 0xea, 0x7b, 0x97, 0x2b, 0x7d, 0x14, 0xa1, 0xfc, 0xa5, 0x01, 0xee, 0x72, 0x83, 0xde, 0xe4, 0x66, - 0x9e, 0xce, 0x4d, 0x8e, 0x3d, 0xb5, 0x9b, 0xdc, 0xec, 0xc7, 0xbd, 0xc9, 0xcd, 0x3d, 0xcd, 0x9b, - 0xdc, 0x89, 0xbf, 0x8c, 0x37, 0xb9, 0x93, 0xff, 0x7a, 0x6e, 0x72, 0x7f, 0x0d, 0x4a, 0x69, 0xe1, - 0xf2, 0xe8, 0xa0, 0xbb, 0x4f, 0x2d, 0x40, 0xa4, 0x10, 0x7d, 0xd3, 0xc2, 0x1d, 0xbb, 0x0c, 0xb0, - 0x11, 0x78, 0x8f, 0xdc, 0x88, 0xdf, 0x56, 0xd6, 0x6f, 0x14, 0x30, 0x5a, 0x42, 0xc5, 0xc8, 0xdb, - 0x1a, 0x4a, 0x7c, 0xaf, 0xc9, 0x67, 0xdd, 0x6b, 0xac, 0x1f, 0xce, 0xc3, 0x8c, 0x8c, 0xb2, 0xf6, - 0xec, 0x3f, 0xc2, 0xbe, 0x67, 0xdc, 0x56, 0x95, 0xad, 0x75, 0xaa, 0x75, 0x87, 0x3c, 0xc3, 0x7e, - 0x15, 0x4e, 0xf4, 0x74, 0x05, 0xde, 0x58, 0x57, 0x54, 0x7c, 0xbb, 0x9e, 0x3b, 0xeb, 0x7c, 0x76, - 0x25, 0xf7, 0xaf, 0xda, 0x3d, 0x14, 0xd6, 0x9f, 0x0d, 0xf5, 0xf0, 0xa7, 0x07, 0x59, 0xfd, 0x89, - 0x35, 0x77, 0xbc, 0x27, 0xd6, 0xfc, 0x60, 0x4f, 0xac, 0x29, 0xa1, 0xa2, 0x30, 0x88, 0x50, 0xf1, - 0x45, 0x98, 0xdc, 0xe4, 0x6e, 0x2b, 0xdc, 0xf4, 0x29, 0x5b, 0x8e, 0xf4, 0xb5, 0x50, 0xe1, 0xeb, - 0x44, 0x99, 0xba, 0x70, 0xc5, 0x36, 0xa3, 0x91, 0x20, 0x10, 0xc7, 0xa0, 0x4c, 0x9f, 0x63, 0x9b, - 0x1c, 0xf4, 0x5b, 0xf4, 0xf0, 0x21, 0xb7, 0xe8, 0x1a, 0x4c, 0x10, 0x5d, 0x12, 0x69, 0x38, 0xb9, - 0xee, 0x89, 0x22, 0x84, 0xab, 0xda, 0xe3, 0x24, 0xce, 0x71, 0xed, 0xf2, 0xa6, 0x67, 0x30, 0x11, - 0x5d, 0xb0, 0xda, 0x6e, 0x74, 0x7c, 0xaf, 0x8d, 0x5d, 0x30, 0x9a, 0x74, 0x01, 0x27, 0xb0, 0xec, - 0x02, 0x0d, 0x89, 0xbd, 0x03, 0x53, 0x95, 0x8d, 0xaa, 0x4e, 0x56, 0x4c, 0x5e, 0x79, 0xdd, 0x8e, - 0xe7, 0x18, 0xa4, 0x29, 0xdc, 0xc3, 0x6e, 0x3e, 0x63, 0x7f, 0x31, 0x37, 0x1f, 0xeb, 0x5f, 0x4c, - 0xa8, 0xe5, 0xfd, 0xdd, 0x7d, 0x20, 0x31, 0x9f, 0x3c, 0x0a, 0xc7, 0x7c, 0xf2, 0x18, 0x3a, 0x4a, - 0x90, 0x34, 0xe4, 0xdb, 0xe1, 0x63, 0xc9, 0xb7, 0x23, 0x1f, 0xfb, 0xf9, 0x62, 0xf4, 0x98, 0x12, - 0x6b, 0x6a, 0xad, 0x15, 0x07, 0x59, 0x6b, 0x99, 0x52, 0xee, 0xd8, 0xc7, 0x97, 0x72, 0xe1, 0xd8, - 0x52, 0x6e, 0x2d, 0xf1, 0x5d, 0x1e, 0x3f, 0xd2, 0x25, 0xe4, 0x0c, 0x69, 0x05, 0x66, 0xb2, 0x43, - 0xec, 0xc5, 0x5e, 0xcc, 0x9f, 0x28, 0xd1, 0xf9, 0xeb, 0xd9, 0xa2, 0xf3, 0xe1, 0xe7, 0xcd, 0xb1, - 0x84, 0xe7, 0x1f, 0x7e, 0xba, 0xc2, 0xf3, 0xd3, 0x7d, 0x08, 0xf9, 0x2b, 0xf1, 0xf9, 0xaf, 0xc4, - 0xe7, 0x01, 0xc5, 0xe7, 0x00, 0x97, 0xd7, 0x03, 0x37, 0x68, 0xa3, 0xda, 0xe9, 0x32, 0x8c, 0xaa, - 0x18, 0xa3, 0xb9, 0x44, 0xa3, 0xdc, 0x1b, 0x5c, 0x54, 0x61, 0xb1, 0x45, 0x28, 0x2a, 0x62, 0x3d, - 0x2d, 0xcb, 0x63, 0x82, 0x19, 0xe1, 0x1b, 0x09, 0x66, 0xfd, 0x07, 0x43, 0x6a, 0x0b, 0x17, 0x73, - 0x66, 0xc3, 0x0d, 0xdc, 0x16, 0xe6, 0xfb, 0x8a, 0x57, 0x98, 0x26, 0xbc, 0xa7, 0x16, 0x65, 0xca, - 0xb4, 0xdf, 0x24, 0xf9, 0x48, 0x51, 0x5f, 0x93, 0x94, 0xaa, 0x85, 0x01, 0x52, 0xaa, 0xbe, 0x65, - 0xe4, 0x23, 0x1d, 0x4a, 0x12, 0xe0, 0x89, 0x6d, 0xed, 0xf0, 0x4c, 0xa4, 0xd7, 0xf4, 0xc4, 0xa1, - 0xc3, 0x49, 0x54, 0x2f, 0xa4, 0x3c, 0x24, 0x65, 0x68, 0x7c, 0x1b, 0x19, 0x39, 0x4e, 0x3c, 0xe5, - 0xd1, 0x7f, 0xad, 0xf1, 0x94, 0x57, 0x01, 0xe8, 0xa8, 0x4d, 0xcc, 0x13, 0x5e, 0xc1, 0xd5, 0x4f, - 0x66, 0xca, 0x51, 0xd4, 0xec, 0x93, 0x41, 0x42, 0x23, 0xb4, 0x7e, 0x97, 0xc1, 0x4c, 0xad, 0x76, - 0x77, 0xc5, 0x73, 0x77, 0xda, 0x7e, 0x18, 0x79, 0xf5, 0x6a, 0x7b, 0xdb, 0x17, 0xa2, 0x78, 0x7c, - 0x1c, 0x68, 0x81, 0x73, 0x93, 0xa3, 0x20, 0x2e, 0x16, 0x57, 0xbd, 0xd5, 0x20, 0x50, 0xfa, 0x51, - 0x79, 0xd5, 0xe3, 0x02, 0x60, 0x4b, 0xb8, 0x90, 0x76, 0x6b, 0x5d, 0x8c, 0x6c, 0x41, 0x36, 0x23, - 0x28, 0xed, 0x86, 0x12, 0x64, 0xab, 0x32, 0xc6, 0x7b, 0x27, 0x2c, 0xdd, 0x7e, 0x4e, 0x19, 0x51, - 0x99, 0x93, 0x62, 0x79, 0xd8, 0x91, 0x30, 0x82, 0xdb, 0x66, 0x07, 0xe1, 0xba, 0x45, 0x5c, 0xcf, - 0x1a, 0xd8, 0x83, 0x13, 0x86, 0xcf, 0xf3, 0xa0, 0x8f, 0x29, 0xaf, 0x91, 0x74, 0x6d, 0x61, 0x88, - 0x8d, 0x8c, 0x17, 0x15, 0x3d, 0x81, 0x57, 0x66, 0x0d, 0xe2, 0x3c, 0x3b, 0x93, 0x59, 0x12, 0xaf, - 0xee, 0x71, 0x23, 0x32, 0xb6, 0xb6, 0x69, 0xc8, 0x54, 0x65, 0xfd, 0xaa, 0x76, 0x32, 0xb6, 0x82, - 0xc3, 0x6b, 0x62, 0xbf, 0x96, 0x83, 0x53, 0x06, 0x46, 0xbc, 0x5d, 0x85, 0x71, 0x38, 0x90, 0xcc, - 0x79, 0xfd, 0xe1, 0xd3, 0x99, 0xd7, 0x2f, 0x99, 0x6d, 0x49, 0x36, 0x54, 0xbd, 0x0d, 0xfd, 0xbe, - 0x90, 0x3d, 0x82, 0x19, 0x2c, 0x52, 0x0f, 0x3b, 0x62, 0xce, 0xd2, 0x7b, 0xd0, 0x5c, 0xf2, 0xd9, - 0xd2, 0x8f, 0x1f, 0xd3, 0x4d, 0x2f, 0x7e, 0x7b, 0xbf, 0x3c, 0x69, 0xa0, 0xab, 0x58, 0xd3, 0x4e, - 0xf2, 0x3a, 0xe4, 0xb5, 0xb7, 0x7d, 0x5d, 0x50, 0xea, 0xa9, 0x82, 0xfd, 0x93, 0x9c, 0x7c, 0x4e, - 0x90, 0xcd, 0xb8, 0x1e, 0xf8, 0xad, 0xb8, 0x5c, 0x99, 0x56, 0xf6, 0xe9, 0xb6, 0xe6, 0xd3, 0xe9, - 0xb6, 0x57, 0xf0, 0x93, 0xe5, 0x9e, 0xe0, 0x6c, 0x07, 0x7e, 0x2b, 0xf9, 0x7c, 0xbd, 0xe3, 0xfa, - 0x7e, 0x24, 0xfb, 0xfe, 0x1c, 0x9c, 0x36, 0xb4, 0x9a, 0x7a, 0xe2, 0x0f, 0x8a, 0x96, 0x30, 0x1b, - 0xc7, 0x51, 0x49, 0x8a, 0x96, 0x2e, 0xd1, 0xfc, 0x3f, 0x8f, 0x5f, 0xa0, 0xc5, 0xe4, 0x14, 0x48, - 0x4e, 0x4b, 0x62, 0x69, 0x9f, 0xd0, 0xbf, 0x16, 0xe6, 0xc1, 0x0c, 0x5a, 0xd9, 0x18, 0x26, 0xc0, - 0x73, 0xfd, 0x4d, 0x80, 0xe3, 0xb4, 0xa0, 0x18, 0xee, 0xbf, 0xbf, 0x1d, 0x70, 0x2f, 0x57, 0xf6, - 0xd7, 0xe1, 0x74, 0x0f, 0x30, 0x5e, 0x6d, 0x27, 0xfa, 0xae, 0xb6, 0x4f, 0x1d, 0xec, 0x97, 0x5f, - 0xcd, 0xaa, 0x2d, 0x6b, 0xa5, 0xf5, 0xaf, 0x81, 0xb9, 0x00, 0x49, 0x21, 0x89, 0x1f, 0xd9, 0x13, - 0xf4, 0x53, 0x34, 0x3f, 0x34, 0x7c, 0xb1, 0x97, 0x6b, 0xdf, 0xa0, 0x1f, 0x79, 0x09, 0x12, 0xe3, - 0x30, 0xa1, 0xa5, 0x3a, 0xd8, 0x23, 0x63, 0x8f, 0x3e, 0x95, 0x7c, 0x7b, 0xbf, 0x6c, 0x60, 0x8b, - 0x0b, 0x91, 0x9e, 0x43, 0xc1, 0x90, 0xf6, 0x74, 0x44, 0xf6, 0x2b, 0x39, 0x98, 0x13, 0x80, 0x64, - 0x52, 0x51, 0xa3, 0xe6, 0x0f, 0x9b, 0xf5, 0xbb, 0x4f, 0x67, 0xd6, 0xbf, 0x88, 0xdf, 0xa8, 0xcf, - 0xfa, 0x9e, 0x2e, 0xc9, 0xfc, 0x38, 0x9c, 0xed, 0x86, 0x41, 0x97, 0x31, 0xdb, 0x4f, 0x0f, 0x30, - 0xdb, 0xe5, 0x00, 0x1c, 0x3d, 0xdb, 0xfb, 0xd6, 0xc2, 0x36, 0x61, 0x82, 0xee, 0x42, 0xb2, 0xc3, - 0xce, 0x1a, 0x31, 0x9a, 0xf5, 0x22, 0x79, 0x41, 0xa5, 0x4c, 0x10, 0x3d, 0x2d, 0x34, 0xb8, 0xb0, - 0x36, 0xcc, 0xca, 0xdf, 0xa6, 0x6e, 0xaa, 0xdc, 0x57, 0x37, 0x75, 0x81, 0x5a, 0x74, 0x8e, 0xf8, - 0xa7, 0x54, 0x54, 0x7a, 0xf8, 0xa5, 0x0c, 0xc6, 0xac, 0x03, 0xcc, 0x00, 0xcb, 0x45, 0x7b, 0xee, - 0x70, 0x8d, 0xd4, 0xab, 0x54, 0x67, 0x39, 0x5d, 0x67, 0x7a, 0xe5, 0x66, 0xf0, 0x66, 0x2e, 0x4c, - 0x13, 0xd4, 0x7f, 0xc8, 0xe5, 0x0e, 0xff, 0xa2, 0x11, 0x00, 0x2b, 0x55, 0x2a, 0x2f, 0x51, 0xaa, - 0x26, 0x0c, 0x50, 0x96, 0xda, 0xd0, 0xd3, 0xfc, 0xd8, 0x5d, 0x98, 0xa9, 0x74, 0x3a, 0x4d, 0x8f, - 0x37, 0xb0, 0x95, 0x32, 0x83, 0xbe, 0x95, 0x64, 0x07, 0x73, 0x65, 0x21, 0xdd, 0xec, 0xd2, 0xe9, - 0xf3, 0x7b, 0x69, 0xad, 0x1f, 0xca, 0xf5, 0x7c, 0x34, 0x7b, 0x1d, 0xc6, 0xf0, 0x87, 0x16, 0x53, - 0x05, 0x55, 0x3c, 0xf2, 0x13, 0x51, 0x79, 0x94, 0x20, 0x08, 0x61, 0x49, 0x8f, 0xab, 0x58, 0x90, - 0xc2, 0x12, 0xe9, 0x15, 0x12, 0x4d, 0x42, 0x59, 0xb9, 0x66, 0x14, 0x12, 0xa1, 0x0b, 0x5d, 0x33, - 0xc8, 0x21, 0xc3, 0xfa, 0xfe, 0xbc, 0x39, 0xed, 0xd8, 0x05, 0x4d, 0x6e, 0xd7, 0x22, 0x3b, 0x2a, - 0xb9, 0x5d, 0x93, 0xd6, 0xff, 0x41, 0x0e, 0x66, 0xef, 0x06, 0x3b, 0x6e, 0xdb, 0xfb, 0xa6, 0x8c, - 0x91, 0xed, 0xe3, 0xb8, 0x1c, 0x9e, 0x68, 0xf1, 0x69, 0x25, 0x8c, 0xf3, 0xb5, 0x8a, 0xc5, 0x4c, - 0xc1, 0x29, 0x63, 0x67, 0x7d, 0x0f, 0x3a, 0xbb, 0xe1, 0x87, 0x69, 0x79, 0xfb, 0x24, 0xba, 0x84, - 0x5b, 0x3f, 0x96, 0x87, 0x71, 0x6d, 0x09, 0xb0, 0xcf, 0xc0, 0x84, 0xce, 0x47, 0x57, 0xf8, 0xe9, - 0xd5, 0xda, 0x06, 0x16, 0x6a, 0xfc, 0xb8, 0xdb, 0x32, 0x34, 0x7e, 0x62, 0xa2, 0x23, 0xf4, 0x98, - 0x57, 0x9b, 0xf7, 0x33, 0xae, 0x36, 0xe5, 0x54, 0xa6, 0xfe, 0x43, 0x2f, 0x38, 0xef, 0xf4, 0x5e, - 0x70, 0x50, 0x79, 0xa4, 0xd1, 0xf7, 0xbf, 0xe6, 0x58, 0x3f, 0x99, 0x83, 0x52, 0x7a, 0x91, 0x7e, - 0x57, 0x7a, 0xe5, 0x18, 0xaf, 0x3b, 0x3f, 0x9a, 0x8f, 0xf3, 0x9c, 0x28, 0x17, 0xde, 0x67, 0xd5, - 0x4c, 0xf0, 0x5d, 0xe3, 0xe1, 0xe5, 0x79, 0x33, 0x1a, 0x9d, 0x1e, 0xfc, 0x22, 0x3b, 0x04, 0xe5, - 0xd0, 0xb7, 0x7e, 0xbe, 0xfc, 0x9c, 0xf5, 0x01, 0xcc, 0xa5, 0xbb, 0x03, 0x1f, 0x5f, 0x2a, 0x30, - 0x6d, 0xc2, 0xd3, 0x59, 0x92, 0xd2, 0x54, 0x76, 0x1a, 0xdf, 0xfa, 0xfd, 0x7c, 0x9a, 0x37, 0x99, - 0x0c, 0x8a, 0x4d, 0x47, 0x37, 0x84, 0xa1, 0x4d, 0x47, 0x82, 0x6c, 0x55, 0x76, 0x9c, 0xec, 0x64, - 0xb1, 0x23, 0x6a, 0x21, 0xdb, 0x11, 0x95, 0x5d, 0x4b, 0x59, 0x49, 0x6b, 0x51, 0x93, 0x1e, 0xf3, - 0x2d, 0x27, 0xb1, 0x94, 0x4e, 0x19, 0x47, 0x2f, 0xc3, 0x9c, 0x11, 0x02, 0x5c, 0xd1, 0x0f, 0x27, - 0xba, 0xf6, 0x08, 0x0b, 0x24, 0x71, 0x26, 0x32, 0xbb, 0x09, 0xa3, 0xe2, 0x33, 0xef, 0xb8, 0x1d, - 0x7a, 0x53, 0x61, 0xb1, 0x5b, 0x7a, 0x33, 0xbe, 0xf0, 0x69, 0x9e, 0xe9, 0x4d, 0x2e, 0x8e, 0x7c, - 0x7d, 0x62, 0x11, 0xa2, 0xf5, 0xcf, 0x73, 0x62, 0xfd, 0xd7, 0x1f, 0x7e, 0xc2, 0x52, 0x9c, 0x89, - 0x26, 0x1d, 0x62, 0xd1, 0xfa, 0xc7, 0x79, 0x99, 0xe8, 0x86, 0xa6, 0xcf, 0x5b, 0x30, 0xb2, 0xe9, - 0x06, 0x3b, 0x94, 0xe3, 0xd8, 0xe4, 0x22, 0x0b, 0x92, 0x98, 0x4e, 0x11, 0xfe, 0xb6, 0x89, 0x40, - 0xd7, 0x85, 0xe5, 0x07, 0xd2, 0x85, 0x69, 0x7a, 0xf9, 0xc2, 0x53, 0xd3, 0xcb, 0x7f, 0x4f, 0x9c, - 0xd3, 0xa6, 0x12, 0x0d, 0x10, 0x61, 0xfa, 0x5c, 0x3a, 0x27, 0x54, 0x4f, 0x2c, 0xf0, 0x84, 0x1d, - 0xbb, 0xa6, 0x67, 0x99, 0xd2, 0x7c, 0x3b, 0x8f, 0xc8, 0x27, 0x65, 0xfd, 0x71, 0x41, 0xf6, 0x31, - 0x75, 0xd4, 0x79, 0xc3, 0xef, 0x1b, 0xd7, 0x89, 0xd8, 0xe8, 0xf5, 0x10, 0x1c, 0x68, 0x36, 0x75, - 0x1e, 0x86, 0xc4, 0xdc, 0xa4, 0xde, 0x44, 0x3c, 0x31, 0x7f, 0x75, 0x3c, 0x51, 0x2e, 0xd6, 0x32, - 0x9e, 0x49, 0x7a, 0xfa, 0x40, 0x3c, 0xb6, 0xf4, 0xb5, 0x8c, 0x18, 0xec, 0x02, 0x0c, 0xad, 0xfb, - 0x0d, 0x15, 0xc9, 0x7c, 0x0e, 0xa3, 0x7f, 0xf8, 0x0d, 0x6e, 0x28, 0xcd, 0x11, 0x43, 0xb4, 0x35, - 0x4e, 0xee, 0xa0, 0xb7, 0xb5, 0xb5, 0xed, 0xf6, 0xa6, 0x85, 0xd3, 0x32, 0xca, 0xac, 0xc2, 0x94, - 0x99, 0x58, 0x9d, 0xec, 0x7d, 0x51, 0xbb, 0x9e, 0xca, 0xcf, 0xae, 0x3f, 0x8b, 0x98, 0x44, 0x6c, - 0x09, 0x26, 0x8d, 0x08, 0xaa, 0xf4, 0xb8, 0x89, 0xea, 0x4d, 0x33, 0xfe, 0xaa, 0xae, 0xde, 0x34, - 0x48, 0xc4, 0x79, 0x4e, 0xdf, 0xaf, 0x3d, 0x71, 0xf6, 0x7c, 0x3b, 0xe1, 0xb0, 0xab, 0x50, 0x94, - 0x61, 0x36, 0xaa, 0x2b, 0xfa, 0x33, 0x55, 0x88, 0xb0, 0x54, 0x98, 0x1a, 0x85, 0xa8, 0x85, 0x55, - 0xf8, 0x34, 0x94, 0x68, 0x4b, 0x4a, 0x52, 0x75, 0xbf, 0x00, 0x43, 0xcb, 0xd5, 0x15, 0x5b, 0xdf, - 0x46, 0xea, 0x5e, 0x23, 0xb0, 0x11, 0x8a, 0x5e, 0x75, 0xeb, 0x3c, 0x7a, 0xec, 0x07, 0x0f, 0x6d, - 0x1e, 0x46, 0x81, 0x27, 0xb3, 0x4f, 0xe2, 0x42, 0xfc, 0x0c, 0x7b, 0x07, 0x86, 0xd1, 0xf0, 0x34, - 0x75, 0x32, 0xa4, 0xeb, 0x58, 0x9a, 0xa4, 0x09, 0x3c, 0x8c, 0x56, 0xac, 0xb6, 0x24, 0x62, 0x6f, - 0xc1, 0xd0, 0x0a, 0x6f, 0xef, 0xa5, 0x12, 0xe3, 0xf5, 0x10, 0xc7, 0x1b, 0x42, 0x83, 0xb7, 0xf7, - 0x6c, 0x24, 0xb1, 0x7e, 0x32, 0x0f, 0x27, 0x32, 0x3e, 0xeb, 0xfe, 0x67, 0x9e, 0xd1, 0x5d, 0x71, - 0xc9, 0xd8, 0x15, 0xd5, 0xfb, 0x74, 0xdf, 0x8e, 0xcf, 0xdc, 0x24, 0x7f, 0x36, 0x07, 0xa7, 0xcc, - 0x09, 0x4a, 0x96, 0xe6, 0xf7, 0xaf, 0xb2, 0xb7, 0x61, 0xe4, 0x26, 0x77, 0x1b, 0x5c, 0x25, 0xcd, - 0x3a, 0x11, 0x07, 0xc4, 0x93, 0x31, 0x04, 0x64, 0xa1, 0x64, 0x9b, 0x78, 0x9c, 0x4a, 0x28, 0x5b, - 0xa1, 0x8f, 0x93, 0xf2, 0xb8, 0xa5, 0xe2, 0x79, 0x64, 0x55, 0x75, 0x88, 0x95, 0xc7, 0xb7, 0x73, - 0xf0, 0xfc, 0x21, 0x34, 0x62, 0xe0, 0xc4, 0xd0, 0xeb, 0x03, 0x87, 0x27, 0x2a, 0x42, 0xd9, 0x7b, - 0x30, 0xbd, 0x49, 0xf2, 0xbc, 0x1a, 0x8e, 0x7c, 0xb2, 0x5e, 0x94, 0xa8, 0xef, 0xa8, 0x71, 0x49, - 0x23, 0x1b, 0x81, 0x66, 0x0a, 0x87, 0x06, 0x9a, 0xd1, 0xe3, 0xb6, 0x0c, 0x0d, 0x1a, 0xb7, 0xe5, - 0x03, 0x98, 0x33, 0xdb, 0x46, 0xe1, 0x73, 0x93, 0xa8, 0x35, 0xb9, 0xfe, 0x51, 0x6b, 0x0e, 0x0d, - 0xd2, 0x69, 0xfd, 0x58, 0x0e, 0x4a, 0x26, 0xef, 0x8f, 0x3b, 0x9e, 0xef, 0x1a, 0xe3, 0xf9, 0x7c, - 0xf6, 0x78, 0xf6, 0x1f, 0xc8, 0xff, 0x33, 0x97, 0x6e, 0xec, 0x40, 0x23, 0x68, 0xc1, 0xc8, 0x8a, - 0xdf, 0x72, 0xbd, 0xb6, 0x9e, 0xf9, 0xbd, 0x81, 0x10, 0x9b, 0x4a, 0x06, 0x0b, 0xf2, 0x73, 0x0e, - 0x86, 0xd7, 0xfd, 0x76, 0x65, 0x85, 0x4c, 0x7a, 0x91, 0x4f, 0xdb, 0x6f, 0x3b, 0x6e, 0xc3, 0x96, - 0x05, 0x6c, 0x0d, 0xa0, 0x56, 0x0f, 0x38, 0x6f, 0xd7, 0xbc, 0x6f, 0xf2, 0x94, 0xa4, 0x21, 0x7a, - 0xa8, 0xd9, 0xc5, 0x8d, 0x45, 0x3e, 0x5d, 0x22, 0xa2, 0x13, 0x7a, 0xdf, 0xd4, 0xf7, 0x5b, 0x8d, - 0x1e, 0xd7, 0x15, 0xc5, 0x41, 0x4b, 0x8d, 0xc3, 0x95, 0xef, 0xc6, 0xba, 0xca, 0xac, 0x0a, 0x7b, - 0xf8, 0x4a, 0xe6, 0x70, 0xfc, 0x5e, 0x0e, 0x9e, 0x3f, 0x84, 0xe6, 0x29, 0x8c, 0xca, 0x5f, 0x74, - 0x87, 0x73, 0x80, 0x84, 0x08, 0xf3, 0x0e, 0x7b, 0x8d, 0x48, 0x26, 0xc2, 0x9b, 0xa4, 0xbc, 0xc3, - 0x02, 0x60, 0xe4, 0x1d, 0x16, 0x00, 0x71, 0x96, 0xde, 0xe4, 0xde, 0xce, 0xae, 0x34, 0xcf, 0x9a, - 0x94, 0x7b, 0xc3, 0x2e, 0x42, 0xf4, 0xb3, 0x54, 0xe2, 0x58, 0xff, 0x72, 0x18, 0x4e, 0xdb, 0x7c, - 0xc7, 0x13, 0xf7, 0x92, 0x7b, 0xa1, 0xd7, 0xde, 0x31, 0xe2, 0xde, 0x58, 0xa9, 0x95, 0x4b, 0x49, - 0x22, 0x04, 0x24, 0x9e, 0x89, 0x17, 0xa1, 0x28, 0xc4, 0x10, 0x6d, 0xf1, 0xe2, 0xa3, 0x95, 0x10, - 0x56, 0x28, 0xb0, 0xb2, 0x2a, 0x66, 0xaf, 0x91, 0x98, 0xa4, 0xa5, 0xf1, 0x11, 0x62, 0xd2, 0x77, - 0xf6, 0xcb, 0x50, 0xdb, 0x0b, 0x23, 0x8e, 0x57, 0x64, 0x12, 0x95, 0xe2, 0xbb, 0xcc, 0x50, 0x9f, - 0xbb, 0xcc, 0x1d, 0x98, 0xab, 0x34, 0xe4, 0xe9, 0xe8, 0x36, 0x37, 0x02, 0xaf, 0x5d, 0xf7, 0x3a, - 0x6e, 0x53, 0xdd, 0xcf, 0xb1, 0x97, 0xdd, 0xb8, 0xdc, 0xe9, 0xc4, 0x08, 0x76, 0x26, 0x99, 0x68, - 0xc6, 0xca, 0x7a, 0x0d, 0xc3, 0xc3, 0xd0, 0x7b, 0x24, 0x36, 0xa3, 0xd1, 0x0e, 0xb1, 0x15, 0xa1, - 0x1d, 0x17, 0xe3, 0x2d, 0x0a, 0x1f, 0xe4, 0x37, 0xd7, 0x6a, 0x89, 0x4b, 0xb3, 0xcc, 0x32, 0x20, - 0x1f, 0xf6, 0xa3, 0x66, 0x88, 0xa6, 0x90, 0x06, 0x5e, 0x42, 0x57, 0xab, 0xdd, 0x14, 0x74, 0xc5, - 0x1e, 0xba, 0x30, 0xdc, 0xd5, 0xe9, 0x24, 0x1e, 0xbb, 0x2c, 0xa6, 0x42, 0xcb, 0x8f, 0x38, 0x4e, - 0xe1, 0xb1, 0xe4, 0xce, 0x15, 0x20, 0x54, 0xde, 0xb9, 0x34, 0x14, 0xf6, 0x0e, 0xcc, 0xae, 0x2e, - 0x2f, 0x2a, 0x2d, 0xf2, 0x8a, 0x5f, 0xef, 0xe2, 0x43, 0x3c, 0x60, 0x7d, 0x38, 0x86, 0xbc, 0xbe, - 0x28, 0x76, 0x93, 0x2c, 0x34, 0x76, 0x1e, 0x46, 0xab, 0x2b, 0xb2, 0xef, 0xc7, 0xf5, 0x54, 0x5a, - 0x64, 0x19, 0xa5, 0x0a, 0xd9, 0xdd, 0xe4, 0x52, 0x30, 0x71, 0xa4, 0xf4, 0x7e, 0x7a, 0x80, 0x0b, - 0xc1, 0x5b, 0x30, 0xb9, 0xe4, 0x47, 0xd5, 0x76, 0x18, 0xb9, 0xed, 0x3a, 0xaf, 0xae, 0xe8, 0x71, - 0xad, 0xb7, 0xfc, 0xc8, 0xf1, 0xa8, 0x44, 0x7c, 0xb9, 0x89, 0xc9, 0x3e, 0x87, 0xa4, 0x37, 0x78, - 0x9b, 0x07, 0x49, 0x3c, 0xeb, 0x61, 0xd9, 0xb7, 0x82, 0x74, 0x27, 0x2e, 0xb1, 0x4d, 0x44, 0x4a, - 0xf3, 0x25, 0x33, 0x6f, 0x2e, 0xfb, 0x0d, 0x1e, 0xca, 0xdd, 0xe2, 0x13, 0x94, 0xe6, 0x4b, 0x6b, - 0xdb, 0x21, 0x3b, 0xe8, 0xbf, 0x83, 0x69, 0xbe, 0x7a, 0x70, 0xd9, 0xe7, 0x60, 0x18, 0x7f, 0x92, - 0x74, 0x3b, 0x9b, 0xc1, 0x36, 0x91, 0x6c, 0xeb, 0x02, 0xd3, 0x96, 0x04, 0xac, 0x0a, 0xa3, 0x74, - 0xb1, 0x3a, 0x4e, 0xb2, 0x1a, 0xba, 0xa1, 0xc9, 0x99, 0x41, 0xf4, 0x56, 0x03, 0x26, 0xf4, 0x0a, - 0xc5, 0x8a, 0xb8, 0xe9, 0x86, 0xbb, 0xbc, 0x21, 0x7e, 0x51, 0x9e, 0x39, 0x5c, 0x11, 0xbb, 0x08, - 0x75, 0xc4, 0x77, 0xd8, 0x1a, 0x8a, 0x38, 0x53, 0xab, 0xe1, 0xbd, 0x90, 0x3e, 0x85, 0x54, 0x2d, - 0x1e, 0xaa, 0xed, 0x1a, 0x36, 0x15, 0x59, 0xdf, 0x03, 0x73, 0xeb, 0xdd, 0x66, 0xd3, 0xdd, 0x6a, - 0x72, 0x95, 0x87, 0x04, 0xd3, 0x73, 0x2f, 0xc1, 0x70, 0x4d, 0x4b, 0xf8, 0x1d, 0x27, 0x7a, 0xd4, - 0x70, 0xd0, 0x08, 0x35, 0x87, 0xa1, 0x7a, 0x52, 0xa9, 0xbe, 0x25, 0xa9, 0xf5, 0x3b, 0x39, 0x98, - 0x53, 0xef, 0xff, 0x81, 0x5b, 0x7f, 0x18, 0x67, 0x7d, 0x3f, 0x6f, 0xcc, 0x35, 0x9c, 0xb0, 0xa9, - 0x69, 0x24, 0x67, 0xdd, 0x2d, 0xf5, 0x11, 0xa6, 0xc0, 0x92, 0xf5, 0xc1, 0x47, 0x7d, 0x0c, 0x7b, - 0x07, 0xc6, 0xe9, 0x78, 0xd4, 0x02, 0x4c, 0x62, 0x14, 0x2f, 0xba, 0xee, 0xa5, 0xad, 0x51, 0x74, - 0x74, 0x94, 0xc5, 0xcc, 0xa6, 0x7c, 0x5c, 0x19, 0x20, 0x5b, 0x16, 0x33, 0xeb, 0x38, 0x64, 0xea, - 0xfe, 0xc6, 0x78, 0xba, 0x6f, 0x69, 0xee, 0x5e, 0xd3, 0x43, 0xca, 0xe5, 0x92, 0x9b, 0x71, 0x12, - 0x52, 0x4e, 0xbf, 0x19, 0xc7, 0xa8, 0xf1, 0x98, 0xe4, 0x8f, 0x18, 0x93, 0xf7, 0xd4, 0x98, 0x14, - 0xfa, 0x4f, 0x8c, 0xd9, 0x43, 0xc6, 0xa1, 0x96, 0xac, 0x90, 0xa1, 0x81, 0xd4, 0x2a, 0xcf, 0x61, - 0xec, 0x7c, 0x49, 0x92, 0xde, 0x45, 0x89, 0x93, 0xae, 0xab, 0x19, 0x1e, 0x9c, 0xe9, 0x11, 0x5b, - 0xf3, 0xe7, 0x61, 0xa2, 0x12, 0x45, 0x6e, 0x7d, 0x97, 0x37, 0x56, 0xc4, 0xf6, 0xa4, 0x45, 0xbf, - 0x72, 0x09, 0xae, 0x3f, 0x9a, 0xe9, 0xb8, 0x32, 0x9a, 0xab, 0x1b, 0x92, 0x31, 0x6b, 0x1c, 0xcd, - 0x55, 0x40, 0xcc, 0x68, 0xae, 0x02, 0xc2, 0x2e, 0xc3, 0x68, 0xb5, 0xfd, 0xc8, 0x13, 0x7d, 0x22, - 0x03, 0x60, 0xa1, 0x6e, 0xca, 0x93, 0x20, 0x7d, 0x73, 0x25, 0x2c, 0xf6, 0x96, 0x76, 0xa9, 0x19, - 0x4b, 0x14, 0x18, 0x52, 0xe5, 0x15, 0x47, 0xb8, 0xd1, 0x2f, 0x2c, 0xf1, 0x2d, 0xe7, 0x1a, 0x8c, - 0x2a, 0x4d, 0x26, 0x24, 0x4a, 0x0b, 0xa2, 0xec, 0x0d, 0x18, 0xa1, 0x90, 0x31, 0x83, 0xb7, 0x96, - 0x2f, 0x6f, 0x5c, 0xcb, 0xe0, 0xad, 0xe5, 0xcb, 0x33, 0x32, 0x78, 0x6b, 0x99, 0xf3, 0x62, 0x25, - 0xd0, 0xc4, 0x91, 0x4a, 0xa0, 0xfb, 0x30, 0xb1, 0xe1, 0x06, 0x91, 0x27, 0x64, 0x94, 0x76, 0x14, - 0xce, 0x4f, 0x1a, 0x7a, 0x53, 0xad, 0x68, 0xe9, 0xac, 0x4a, 0x3a, 0xdd, 0xd1, 0xf0, 0xcd, 0xec, - 0xc8, 0x09, 0x3c, 0xdb, 0x94, 0x75, 0xea, 0xe3, 0x98, 0xb2, 0x62, 0xa7, 0xa2, 0xae, 0x6c, 0x3a, - 0xd1, 0xc8, 0xe0, 0xa5, 0x25, 0xa5, 0x30, 0x8b, 0x11, 0xd9, 0x57, 0x60, 0x42, 0xfc, 0xbd, 0xe1, - 0x37, 0xbd, 0xba, 0xc7, 0xc3, 0xf9, 0x12, 0x36, 0xee, 0x6c, 0xe6, 0xea, 0x47, 0xa4, 0xbd, 0x1a, - 0x8f, 0xe4, 0x02, 0x46, 0xc6, 0x69, 0x25, 0xb8, 0xc1, 0x8d, 0xbd, 0x0f, 0x13, 0x62, 0xf6, 0x6d, - 0xb9, 0xa1, 0x14, 0x4d, 0x67, 0x12, 0x63, 0xe4, 0x06, 0xc1, 0x7b, 0x02, 0x2a, 0xeb, 0x04, 0xe2, - 0x98, 0xaf, 0x74, 0xe4, 0x06, 0xc9, 0xb4, 0xd9, 0xde, 0xe9, 0xd9, 0x1c, 0x15, 0x1a, 0xfb, 0x02, - 0x4c, 0x54, 0x3a, 0x9d, 0x64, 0xc7, 0x99, 0xd5, 0x14, 0x61, 0x9d, 0x8e, 0x93, 0xb9, 0xeb, 0x18, - 0x14, 0xe9, 0x8d, 0x79, 0xee, 0x58, 0x1b, 0x33, 0x7b, 0x23, 0x96, 0xd6, 0x4f, 0x24, 0x5a, 0x5d, - 0xba, 0x38, 0x1a, 0xa2, 0xbf, 0x14, 0xdc, 0x97, 0x61, 0x52, 0xaa, 0x39, 0x95, 0x34, 0x73, 0xb2, - 0x67, 0xf5, 0x64, 0x08, 0x35, 0x26, 0x0d, 0x5b, 0x85, 0x29, 0xe9, 0x6d, 0xdd, 0xa4, 0x48, 0xd7, - 0xf3, 0xa7, 0x70, 0xd5, 0x22, 0x17, 0xe9, 0xa4, 0xdd, 0xc4, 0x04, 0x28, 0xae, 0xc1, 0x25, 0x45, - 0x64, 0xfd, 0x49, 0x0e, 0x4e, 0xf5, 0x19, 0xf1, 0x38, 0x0e, 0x72, 0xee, 0xf0, 0x38, 0xc8, 0x62, - 0xe7, 0x30, 0xb5, 0x22, 0xd8, 0x7e, 0x92, 0xb2, 0xf4, 0xf1, 0x52, 0xf2, 0x96, 0x0f, 0x8c, 0x72, - 0x0c, 0x51, 0xd5, 0xb7, 0x7c, 0x54, 0xcd, 0x16, 0x7a, 0x0f, 0x21, 0xc2, 0x93, 0x1f, 0xb5, 0x64, - 0x1d, 0xec, 0x97, 0xcf, 0x52, 0x0a, 0xa3, 0x78, 0x58, 0x3f, 0xf4, 0x8d, 0x15, 0x9c, 0xc1, 0xda, - 0xda, 0xcf, 0xc1, 0xb8, 0xb6, 0x0e, 0xd9, 0x39, 0xcd, 0x0b, 0xb8, 0x24, 0x93, 0x60, 0x69, 0x1c, - 0xf2, 0xf2, 0x24, 0xc2, 0x45, 0x95, 0x3f, 0x5a, 0x01, 0x7d, 0x47, 0x88, 0x42, 0x5a, 0xac, 0xe8, - 0x96, 0xa1, 0x2d, 0xb6, 0xb1, 0x1c, 0x73, 0xe5, 0xbb, 0x61, 0x54, 0xa9, 0x47, 0xde, 0x23, 0x3e, - 0xc0, 0xa1, 0x93, 0xe4, 0xca, 0x77, 0xc3, 0xc8, 0x71, 0x91, 0xac, 0x27, 0x57, 0x7e, 0xcc, 0xd0, - 0xfa, 0x9b, 0x39, 0x80, 0x7b, 0xd5, 0x65, 0x0c, 0xf6, 0xfe, 0x71, 0x85, 0x82, 0xec, 0x00, 0xba, - 0x8a, 0xfb, 0x21, 0xe2, 0xc0, 0x7f, 0x9f, 0x83, 0x29, 0x13, 0x8d, 0xbd, 0x07, 0xd3, 0xb5, 0x7a, - 0xe0, 0x37, 0x9b, 0x5b, 0x6e, 0xfd, 0xe1, 0x9a, 0xd7, 0xe6, 0x32, 0x74, 0xe9, 0xb0, 0x3c, 0x8b, - 0xc2, 0xb8, 0xc8, 0x69, 0x8a, 0x32, 0x3b, 0x8d, 0xcc, 0xfe, 0x56, 0x0e, 0x26, 0x6b, 0xbb, 0xfe, - 0xe3, 0x38, 0xda, 0x28, 0x0d, 0xc8, 0x57, 0xc5, 0xda, 0x0e, 0x77, 0xfd, 0xc7, 0x49, 0x06, 0x4d, - 0xc3, 0xf8, 0xf3, 0xdd, 0xc1, 0xde, 0xe5, 0xeb, 0x3e, 0xde, 0x64, 0xa2, 0xf0, 0x92, 0x51, 0x89, - 0x6d, 0xd6, 0x69, 0xfd, 0x79, 0x0e, 0xc6, 0xf1, 0xce, 0xd3, 0x6c, 0xa2, 0xcc, 0xf5, 0x49, 0x4a, - 0xc7, 0x18, 0xb7, 0xeb, 0x90, 0x81, 0x7d, 0x13, 0xa6, 0x53, 0x68, 0xcc, 0x82, 0x91, 0x1a, 0x3a, - 0xf8, 0xeb, 0x0a, 0x0a, 0xe9, 0xf2, 0x6f, 0x53, 0x89, 0xb5, 0xaa, 0x91, 0xdd, 0xbf, 0x82, 0xcf, - 0xba, 0x8b, 0x00, 0x9e, 0x02, 0xa9, 0x9b, 0x0d, 0x4b, 0x7f, 0xc9, 0xfd, 0x2b, 0xb6, 0x86, 0x65, - 0xad, 0xc3, 0x48, 0xcd, 0x0f, 0xa2, 0xa5, 0x3d, 0x79, 0x99, 0x58, 0xe1, 0x61, 0x5d, 0x7f, 0xb7, - 0xf5, 0xf0, 0xad, 0xa4, 0x6e, 0x53, 0x11, 0x2b, 0xc3, 0xf0, 0x75, 0x8f, 0x37, 0x1b, 0xba, 0x81, - 0xee, 0xb6, 0x00, 0xd8, 0x12, 0x2e, 0x2e, 0x5c, 0x27, 0x93, 0x9c, 0x28, 0x89, 0x25, 0xf0, 0xc7, - 0x5d, 0x37, 0xcb, 0x46, 0xff, 0xbe, 0x18, 0xe7, 0x21, 0xe8, 0xad, 0xe9, 0x90, 0xae, 0xfe, 0x8f, - 0x73, 0xb0, 0xd0, 0x9f, 0x44, 0x37, 0x2e, 0xce, 0x1d, 0x62, 0x5c, 0xfc, 0x4a, 0xfa, 0x9d, 0x11, - 0xd1, 0xe8, 0x9d, 0x31, 0x79, 0x5d, 0x5c, 0x41, 0xdb, 0xee, 0x3a, 0x57, 0x89, 0x50, 0xce, 0x1d, - 0xf2, 0xcd, 0x88, 0x28, 0x87, 0x39, 0x42, 0x1a, 0x9b, 0x68, 0xad, 0x5f, 0x1f, 0x82, 0xd3, 0x7d, - 0x29, 0xd8, 0x4d, 0x2d, 0xbd, 0xd2, 0x54, 0x9c, 0xd8, 0xa5, 0x2f, 0xfe, 0x25, 0xfc, 0x17, 0xcd, - 0xf7, 0xd2, 0xde, 0x66, 0x77, 0xe3, 0xb4, 0x3a, 0x79, 0xe4, 0xf5, 0xa9, 0x23, 0x79, 0x49, 0x74, - 0x64, 0x06, 0xbd, 0x19, 0x76, 0xd0, 0x2f, 0x91, 0x47, 0xae, 0xd7, 0x0c, 0xf5, 0x65, 0xd7, 0x90, - 0x20, 0x5b, 0x95, 0x25, 0x16, 0xdf, 0x43, 0xd9, 0x16, 0xdf, 0xd6, 0xbf, 0xcc, 0xc1, 0x58, 0xfc, - 0xd9, 0x6c, 0x01, 0x4e, 0x6e, 0xda, 0x95, 0xe5, 0x55, 0x67, 0xf3, 0x83, 0x8d, 0x55, 0xe7, 0xde, - 0x7a, 0x6d, 0x63, 0x75, 0xb9, 0x7a, 0xbd, 0xba, 0xba, 0x52, 0x7a, 0x8e, 0xcd, 0xc0, 0xe4, 0xbd, - 0xf5, 0xdb, 0xeb, 0x77, 0x1f, 0xac, 0x3b, 0xab, 0xb6, 0x7d, 0xd7, 0x2e, 0xe5, 0xd8, 0x24, 0x8c, - 0xd9, 0x4b, 0x95, 0x65, 0x67, 0xfd, 0xee, 0xca, 0x6a, 0x29, 0xcf, 0x4a, 0x30, 0xb1, 0x7c, 0x77, - 0x7d, 0x7d, 0x75, 0x79, 0xb3, 0x7a, 0xbf, 0xba, 0xf9, 0x41, 0xa9, 0xc0, 0x18, 0x4c, 0x21, 0xc2, - 0x86, 0x5d, 0x5d, 0x5f, 0xae, 0x6e, 0x54, 0xd6, 0x4a, 0x43, 0x02, 0x26, 0xf0, 0x35, 0xd8, 0x70, - 0xcc, 0xe8, 0xf6, 0xbd, 0xa5, 0xd5, 0xd2, 0x88, 0x40, 0x11, 0x7f, 0x69, 0x28, 0xa3, 0xa2, 0x7a, - 0x44, 0x59, 0xa9, 0x6c, 0x56, 0x96, 0x2a, 0xb5, 0xd5, 0x52, 0x91, 0x9d, 0x82, 0x59, 0x03, 0xe4, - 0xac, 0xdd, 0xbd, 0x51, 0x5d, 0x2f, 0x8d, 0xb1, 0x39, 0x28, 0xc5, 0xb0, 0x95, 0x25, 0xe7, 0x5e, - 0x6d, 0xd5, 0x2e, 0x41, 0x1a, 0xba, 0x5e, 0xb9, 0xb3, 0x5a, 0x1a, 0xb7, 0xde, 0x95, 0x7e, 0x80, - 0xb2, 0xab, 0xd9, 0x49, 0x60, 0xb5, 0xcd, 0xca, 0xe6, 0xbd, 0x5a, 0xaa, 0xf1, 0xe3, 0x30, 0x5a, - 0xbb, 0xb7, 0xbc, 0xbc, 0x5a, 0xab, 0x95, 0x72, 0x0c, 0x60, 0xe4, 0x7a, 0xa5, 0xba, 0xb6, 0xba, - 0x52, 0xca, 0x5b, 0x3f, 0x91, 0x83, 0x19, 0x25, 0x01, 0xaa, 0x47, 0xa3, 0x8f, 0xb9, 0x16, 0xdf, - 0x33, 0x2e, 0xb6, 0xca, 0x49, 0x2b, 0x55, 0xc9, 0x21, 0xcb, 0xf0, 0x67, 0x73, 0x70, 0x22, 0x13, - 0x9b, 0x7d, 0x00, 0x25, 0xf5, 0x05, 0x77, 0xdc, 0xa8, 0xbe, 0x9b, 0xec, 0x63, 0x67, 0x53, 0xb5, - 0xa4, 0xd0, 0xa4, 0x5a, 0x33, 0x49, 0xf8, 0xdc, 0xc3, 0x66, 0xf0, 0x74, 0x04, 0xd6, 0xb7, 0x72, - 0x70, 0xaa, 0x4f, 0x35, 0x6c, 0x19, 0x46, 0xe2, 0xc4, 0x34, 0x87, 0x58, 0xb0, 0xcd, 0x7d, 0x7b, - 0xbf, 0x4c, 0x88, 0x98, 0x21, 0x17, 0xff, 0xb2, 0x47, 0xe2, 0x4c, 0x33, 0x98, 0xee, 0x45, 0x76, - 0xdf, 0xe9, 0x54, 0xcf, 0x53, 0x4d, 0x95, 0x07, 0xb5, 0xa5, 0x71, 0xea, 0xbb, 0x82, 0xfb, 0x38, - 0xc4, 0x7c, 0x2f, 0xd6, 0x4f, 0xe5, 0x84, 0x70, 0x97, 0x46, 0x14, 0x32, 0x6f, 0x25, 0x0c, 0xbb, - 0x2d, 0x6e, 0xfb, 0x4d, 0x5e, 0xb1, 0xd7, 0xe9, 0xd8, 0x40, 0x69, 0xd5, 0xc5, 0x02, 0xbc, 0x56, - 0x38, 0x6e, 0xd0, 0x36, 0x5e, 0xab, 0x75, 0x1a, 0xf6, 0x16, 0xc0, 0xea, 0x93, 0x88, 0x07, 0x6d, - 0xb7, 0x19, 0xc7, 0x68, 0x91, 0x91, 0xa5, 0x08, 0x6a, 0xca, 0xdb, 0x1a, 0xb2, 0xf5, 0xb7, 0x73, - 0x30, 0x41, 0x97, 0xa6, 0x4a, 0x93, 0x07, 0xd1, 0xc7, 0x9b, 0x5e, 0x6f, 0x19, 0xd3, 0x2b, 0x76, - 0xd8, 0xd0, 0xf8, 0x8b, 0xe2, 0xcc, 0x99, 0xf5, 0xcf, 0x72, 0x50, 0x4a, 0x23, 0xb2, 0xf7, 0xa0, - 0x58, 0xe3, 0x8f, 0x78, 0xe0, 0x45, 0x7b, 0xb4, 0x51, 0xaa, 0x14, 0x7e, 0x12, 0x87, 0xca, 0xe4, - 0x7c, 0x08, 0xe9, 0x97, 0x1d, 0xd3, 0x0c, 0xba, 0xdf, 0x6b, 0x6a, 0x8f, 0xc2, 0xd3, 0x52, 0x7b, - 0x58, 0xff, 0x4b, 0x1e, 0x4e, 0xdd, 0xe0, 0x91, 0xde, 0xa6, 0xd8, 0xbc, 0xe0, 0xd3, 0x83, 0xb5, - 0x4b, 0x6b, 0xc9, 0x3c, 0x8c, 0x62, 0x91, 0x1a, 0x5f, 0x5b, 0xfd, 0x64, 0x4b, 0xf1, 0xbc, 0x2e, - 0x18, 0x39, 0xc2, 0xfa, 0xd4, 0x7d, 0x49, 0xcb, 0x1a, 0x14, 0x4f, 0xeb, 0xf3, 0x30, 0x85, 0x61, - 0xf1, 0xbb, 0x62, 0x39, 0xf0, 0x06, 0xa9, 0x7f, 0x8a, 0x76, 0x0a, 0xca, 0x5e, 0x83, 0x92, 0x80, - 0x54, 0xea, 0x0f, 0xdb, 0xfe, 0xe3, 0x26, 0x6f, 0xec, 0xf0, 0x06, 0x1e, 0xeb, 0x45, 0xbb, 0x07, - 0xae, 0x78, 0xde, 0x6b, 0xcb, 0xab, 0x1b, 0x6f, 0xa0, 0x8e, 0x86, 0x78, 0x26, 0xd0, 0x85, 0xb7, - 0x60, 0xfc, 0x23, 0x66, 0x00, 0xb3, 0xfe, 0xe7, 0x1c, 0xcc, 0x61, 0xe3, 0xb4, 0x8a, 0x55, 0x76, - 0x56, 0xd5, 0x5b, 0x5a, 0x52, 0x1c, 0x57, 0x80, 0xcc, 0xa5, 0x10, 0xf7, 0x62, 0xa2, 0x13, 0xca, - 0x0f, 0xa0, 0x13, 0xaa, 0x1d, 0x27, 0x13, 0xfd, 0x80, 0x2a, 0xad, 0x5b, 0x43, 0xc5, 0x42, 0x69, - 0x28, 0x19, 0x72, 0xeb, 0x6f, 0xe5, 0x61, 0xd4, 0xe6, 0x98, 0xa2, 0x9b, 0x9d, 0x87, 0xd1, 0x75, - 0x3f, 0xe2, 0xe1, 0x1d, 0x23, 0x1f, 0x7b, 0x5b, 0x80, 0x9c, 0x56, 0xc3, 0x56, 0x85, 0x62, 0xc2, - 0x6f, 0x04, 0x7e, 0xa3, 0x5b, 0x8f, 0xf4, 0x09, 0xdf, 0x91, 0x20, 0x5b, 0x95, 0xb1, 0xd7, 0x61, - 0x8c, 0x38, 0xc7, 0x8f, 0xba, 0x68, 0x8c, 0x1c, 0xf0, 0x38, 0xc5, 0x7b, 0x82, 0x80, 0x32, 0xad, - 0x14, 0x30, 0x86, 0x34, 0x99, 0xb6, 0x47, 0x66, 0x50, 0xa2, 0xfa, 0xf0, 0x21, 0xa2, 0xfa, 0xa7, - 0x61, 0xa4, 0x12, 0x86, 0x3c, 0x52, 0x51, 0x0c, 0x26, 0xe2, 0xb0, 0x6d, 0x21, 0x8f, 0x24, 0x63, - 0x17, 0xcb, 0x6d, 0xc2, 0xb3, 0xfe, 0x79, 0x1e, 0x86, 0xf1, 0x4f, 0x7c, 0x32, 0x0d, 0xea, 0xbb, - 0xc6, 0x93, 0x69, 0x50, 0xdf, 0xb5, 0x11, 0xca, 0xae, 0xa0, 0xa6, 0x42, 0xe5, 0x6f, 0xa2, 0xd6, - 0xa3, 0x0a, 0xbe, 0x91, 0x80, 0x6d, 0x1d, 0x27, 0x7e, 0xe1, 0x2f, 0x64, 0xc6, 0x2e, 0x39, 0x09, - 0xf9, 0xbb, 0x35, 0x6a, 0x31, 0x46, 0xc4, 0xf2, 0x43, 0x3b, 0x7f, 0xb7, 0x86, 0xbd, 0x71, 0xb3, - 0xb2, 0xf8, 0xe6, 0x35, 0x6a, 0xa8, 0xec, 0x8d, 0x5d, 0x77, 0xf1, 0xcd, 0x6b, 0x36, 0x95, 0x88, - 0xfe, 0xc5, 0x6f, 0xc6, 0x87, 0x57, 0xe9, 0x73, 0x8f, 0xfd, 0x8b, 0x6d, 0xc3, 0x47, 0x56, 0x3b, - 0x41, 0x60, 0x8b, 0x30, 0x4e, 0xb1, 0x1e, 0x10, 0x5f, 0x8b, 0xc5, 0x40, 0xb1, 0x20, 0x24, 0x85, - 0x8e, 0x24, 0x9f, 0xe0, 0x68, 0x80, 0x54, 0x96, 0x59, 0x7a, 0x82, 0x53, 0x43, 0x18, 0xda, 0x1a, - 0x8a, 0xf8, 0x24, 0xf9, 0x86, 0x97, 0xf8, 0xd2, 0x4f, 0x69, 0x41, 0x03, 0x30, 0xcd, 0x41, 0x8c, - 0x60, 0xfd, 0x62, 0x1e, 0x8a, 0x1b, 0xcd, 0xee, 0x8e, 0xd7, 0xbe, 0x7f, 0x85, 0x31, 0xc0, 0x6b, - 0x9c, 0xca, 0x83, 0x21, 0xfe, 0x66, 0xa7, 0xa1, 0xa8, 0x6e, 0x6e, 0x6a, 0x43, 0x0a, 0xe9, 0xd6, - 0x36, 0x0f, 0x6a, 0xdc, 0x29, 0xf4, 0x99, 0xfa, 0xc9, 0xae, 0x40, 0x7c, 0xff, 0xea, 0x77, 0x51, - 0x1b, 0x12, 0x8b, 0xc5, 0x8e, 0xd1, 0xd8, 0x1b, 0x80, 0x87, 0x04, 0x5d, 0x1e, 0x94, 0x42, 0x5b, - 0x7e, 0x1a, 0xc9, 0x29, 0x92, 0x04, 0xd1, 0xd8, 0x55, 0xa0, 0x89, 0x49, 0xd9, 0xcc, 0x4f, 0x98, - 0x04, 0x32, 0x3f, 0xa4, 0x22, 0x21, 0x54, 0xf6, 0x0e, 0x8c, 0xd7, 0x03, 0x8e, 0xaf, 0x8e, 0x6e, - 0x33, 0x49, 0x52, 0xae, 0x53, 0x2e, 0x27, 0xe5, 0xf7, 0xaf, 0xd8, 0x3a, 0xba, 0xf5, 0x8f, 0x47, - 0x61, 0x42, 0xff, 0x1e, 0x66, 0xc3, 0x6c, 0xd8, 0x14, 0x77, 0x77, 0x32, 0x36, 0xeb, 0x60, 0x21, - 0x1d, 0xa7, 0xe7, 0xcc, 0x0f, 0x12, 0x78, 0xd2, 0xf2, 0x4c, 0x05, 0xa9, 0xb8, 0xf9, 0x9c, 0x3d, - 0x13, 0x26, 0x60, 0x89, 0xc7, 0x2a, 0x50, 0xf4, 0x3b, 0xe1, 0x0e, 0x6f, 0x7b, 0xea, 0xbd, 0xe5, - 0x25, 0x83, 0xd1, 0x5d, 0x2a, 0xec, 0xe1, 0x15, 0x93, 0xb1, 0x37, 0x61, 0xc4, 0xef, 0xf0, 0xb6, - 0xeb, 0xd1, 0x19, 0xf7, 0x7c, 0x8a, 0x01, 0x6f, 0x57, 0xaa, 0x1a, 0x21, 0x21, 0xb3, 0xcb, 0x30, - 0xe4, 0x3f, 0x8c, 0xc7, 0xeb, 0xb4, 0x49, 0xf4, 0x30, 0x72, 0x35, 0x12, 0x44, 0x14, 0x04, 0x1f, - 0xba, 0xad, 0x6d, 0x1a, 0x31, 0x93, 0xe0, 0x96, 0xdb, 0xda, 0xd6, 0x09, 0x04, 0x22, 0x7b, 0x1f, - 0xa0, 0xe3, 0xee, 0xf0, 0xc0, 0x69, 0x74, 0xa3, 0x3d, 0x1a, 0xb7, 0xb3, 0x06, 0xd9, 0x86, 0x28, - 0x5e, 0xe9, 0x46, 0x7b, 0x1a, 0xed, 0x58, 0x47, 0x01, 0x59, 0x05, 0xa0, 0xe5, 0x46, 0x11, 0x0f, - 0x5a, 0x3e, 0x59, 0xfb, 0x25, 0x41, 0x08, 0x25, 0x83, 0x3b, 0x71, 0xb1, 0xc6, 0x41, 0x23, 0xc2, - 0x8f, 0xf6, 0x02, 0x97, 0x72, 0xca, 0xa7, 0x3e, 0xda, 0x0b, 0x8c, 0x56, 0x0a, 0x44, 0xf6, 0x39, - 0x18, 0x6d, 0x78, 0x61, 0xdd, 0x0f, 0x1a, 0x14, 0xbd, 0xe4, 0x05, 0x83, 0x66, 0x45, 0x96, 0x69, - 0x64, 0x0a, 0x5d, 0x7c, 0x2d, 0x05, 0x21, 0x5d, 0xf7, 0x1f, 0xa3, 0x9a, 0x3f, 0xfd, 0xb5, 0xb5, - 0xb8, 0x58, 0xff, 0xda, 0x84, 0x48, 0x0c, 0xe5, 0x8e, 0x17, 0x35, 0xdd, 0x2d, 0x7a, 0xe7, 0x36, - 0x87, 0xf2, 0x06, 0x16, 0xe9, 0x43, 0x29, 0x91, 0xd9, 0x5b, 0x50, 0xe4, 0xed, 0x28, 0x70, 0x1d, - 0xaf, 0x41, 0x5e, 0x92, 0xe6, 0x47, 0x8b, 0x03, 0xd8, 0xad, 0xae, 0xe8, 0x1f, 0x8d, 0xf8, 0xd5, - 0x86, 0xe8, 0x9f, 0xb0, 0xee, 0xb5, 0xc8, 0xb9, 0xd1, 0xec, 0x9f, 0xda, 0x72, 0xf5, 0x8e, 0xde, - 0x3f, 0x02, 0x91, 0xbd, 0x07, 0xa3, 0x62, 0xfd, 0x36, 0xfc, 0x1d, 0x0a, 0x08, 0x61, 0x99, 0xfd, - 0x23, 0xcb, 0x7a, 0xa6, 0xab, 0x22, 0x12, 0x0b, 0xd9, 0x7d, 0x1c, 0x3a, 0x5e, 0x9d, 0x82, 0x3c, - 0x98, 0xcb, 0xb1, 0xf2, 0xa0, 0x56, 0x5d, 0xd6, 0xc8, 0x86, 0xdd, 0xc7, 0x61, 0xb5, 0xce, 0xce, - 0x02, 0x24, 0xef, 0xea, 0xf2, 0x15, 0xc4, 0xd6, 0x20, 0x9f, 0x1f, 0xfa, 0xdf, 0x7f, 0xbe, 0x9c, - 0x5b, 0x02, 0x28, 0xaa, 0x98, 0x31, 0xd6, 0x1a, 0x9c, 0xee, 0xbb, 0x12, 0xd9, 0x45, 0x28, 0x6d, - 0xbb, 0xa4, 0x87, 0xab, 0xef, 0xba, 0xed, 0x36, 0x6f, 0xd2, 0x1e, 0x38, 0xad, 0xe0, 0xcb, 0x12, - 0x2c, 0x39, 0x5b, 0xef, 0xc3, 0x5c, 0xd6, 0x10, 0xb0, 0x17, 0x61, 0x42, 0x0f, 0x8f, 0x43, 0x4c, - 0xc6, 0xdd, 0x8e, 0xa7, 0x02, 0xe4, 0x10, 0x83, 0x5f, 0xcb, 0xc1, 0x0b, 0x87, 0x2d, 0x68, 0xb6, - 0x00, 0xc5, 0x4e, 0xe0, 0xf9, 0x28, 0x38, 0x52, 0xfe, 0x01, 0xf5, 0x1b, 0x53, 0x0b, 0xa0, 0x84, - 0x13, 0xb9, 0x3b, 0xe4, 0x72, 0x61, 0x8f, 0x21, 0x64, 0xd3, 0xdd, 0x09, 0xd9, 0xa7, 0x60, 0xa6, - 0xc1, 0xb7, 0xdd, 0x6e, 0x33, 0x72, 0xc2, 0xfa, 0x2e, 0x6f, 0xa0, 0x97, 0x13, 0x9a, 0xd2, 0xd9, - 0x25, 0x2a, 0xa8, 0x29, 0x78, 0xcf, 0x17, 0x0f, 0xf7, 0xf9, 0xe2, 0x5b, 0x43, 0xc5, 0x5c, 0x29, - 0x6f, 0xa3, 0xed, 0x92, 0xf5, 0x7d, 0x79, 0x98, 0xef, 0x37, 0x83, 0xd9, 0xbb, 0x59, 0x7d, 0x20, - 0x9f, 0x12, 0x74, 0xb8, 0xfe, 0x94, 0xa0, 0xd5, 0xc6, 0x16, 0x21, 0xf6, 0x51, 0x3a, 0x2a, 0xde, - 0x80, 0x82, 0x09, 0x9a, 0x8e, 0x1b, 0x86, 0x8f, 0xc5, 0x22, 0x2d, 0x68, 0x21, 0x66, 0x09, 0xa6, - 0xd3, 0x28, 0x18, 0xfb, 0x2c, 0x40, 0xbd, 0xe9, 0x87, 0x1c, 0x5f, 0xec, 0xe9, 0xf4, 0x97, 0x86, - 0xda, 0x31, 0x54, 0x7f, 0xa2, 0x45, 0xe8, 0xb2, 0xdf, 0xe0, 0x34, 0x80, 0x2e, 0x9c, 0xea, 0xb3, - 0x65, 0x89, 0xe1, 0x49, 0xf2, 0xb5, 0xab, 0xec, 0x4f, 0xdd, 0x38, 0x6b, 0x7b, 0xba, 0xc7, 0xf3, - 0xfd, 0xe6, 0xc8, 0x1e, 0xb0, 0xde, 0x7d, 0x49, 0x70, 0x27, 0x73, 0xe3, 0x6e, 0x10, 0x73, 0x97, - 0x90, 0x7b, 0x41, 0x93, 0x95, 0x61, 0x5c, 0x65, 0x77, 0x14, 0xd2, 0xb5, 0x64, 0x0e, 0x04, 0xba, - 0xcd, 0x71, 0xf2, 0x60, 0x0c, 0x51, 0xf4, 0x44, 0xa3, 0x73, 0x7b, 0x0c, 0x21, 0x9b, 0x7b, 0x1d, - 0xd5, 0xba, 0x17, 0xd4, 0xfc, 0x36, 0x4f, 0x0b, 0x2a, 0xfd, 0xe9, 0x9c, 0x1a, 0xfe, 0xde, 0xed, - 0xf6, 0xa8, 0xef, 0x63, 0x80, 0x7e, 0x43, 0xf4, 0x61, 0xf8, 0xb7, 0x90, 0x23, 0xd4, 0xaa, 0x23, - 0x39, 0x82, 0x7e, 0xb2, 0xf3, 0x30, 0x1d, 0x48, 0xcb, 0xd2, 0xc8, 0xa7, 0xfe, 0x94, 0x99, 0x34, - 0x26, 0x25, 0x78, 0xd3, 0xc7, 0x3e, 0xa5, 0xef, 0xba, 0x15, 0x77, 0x98, 0x76, 0xfa, 0xb0, 0x4b, - 0x30, 0x26, 0x4e, 0x1f, 0x8c, 0x3d, 0x93, 0x72, 0x58, 0x40, 0x3c, 0x3c, 0xcb, 0xed, 0xe2, 0x87, - 0xf4, 0x37, 0xf1, 0xfa, 0x56, 0x5e, 0x31, 0xd3, 0xcf, 0x3e, 0x76, 0x0a, 0x46, 0xfd, 0x60, 0x47, - 0x6b, 0xda, 0x88, 0x1f, 0xec, 0x88, 0x76, 0x5d, 0x80, 0x92, 0xf4, 0x9f, 0x91, 0x81, 0x09, 0xc2, - 0xbd, 0xb6, 0xbc, 0x1c, 0x17, 0xed, 0x29, 0x09, 0xc7, 0x14, 0xf6, 0x7b, 0xed, 0xba, 0xc0, 0x0c, - 0x43, 0xdf, 0xd1, 0x43, 0x4e, 0x51, 0xb3, 0xa7, 0xc2, 0xd0, 0x4f, 0x62, 0x4f, 0x35, 0xd8, 0x12, - 0x4c, 0x0a, 0x3e, 0x71, 0xe0, 0x2b, 0x3a, 0x9a, 0xcf, 0xf4, 0x1e, 0xcd, 0x7b, 0xed, 0xba, 0xfa, - 0x44, 0x7b, 0x22, 0xd4, 0x7e, 0xb1, 0xdb, 0x50, 0xd2, 0x64, 0x18, 0xf4, 0x90, 0x4c, 0x59, 0x39, - 0x27, 0x6c, 0x34, 0xd9, 0xa7, 0xda, 0xde, 0xf6, 0xed, 0xe9, 0xba, 0x09, 0xa0, 0xae, 0xf9, 0x77, - 0x73, 0x6a, 0x2f, 0xcd, 0x20, 0x62, 0x16, 0x4c, 0xee, 0xba, 0xa1, 0x13, 0x86, 0x2d, 0x69, 0xb5, - 0x45, 0xa1, 0x76, 0xc7, 0x77, 0xdd, 0xb0, 0x16, 0xb6, 0x54, 0x2a, 0x8f, 0x13, 0x02, 0xc7, 0x77, - 0xbb, 0xd1, 0xae, 0xa3, 0x4b, 0x64, 0xb2, 0xc7, 0x66, 0x77, 0xdd, 0xf0, 0xae, 0x28, 0xd3, 0x78, - 0xb3, 0x97, 0x61, 0x0a, 0xf9, 0xd6, 0x3d, 0xc5, 0x18, 0x83, 0x4b, 0xd8, 0x13, 0x82, 0x71, 0xdd, - 0x93, 0x9c, 0xe9, 0x0b, 0xff, 0x8f, 0x3c, 0x9c, 0xcc, 0xee, 0x1d, 0x9c, 0x9e, 0xa2, 0x4f, 0xd1, - 0x6b, 0x8e, 0xbe, 0x6d, 0x4c, 0x40, 0x64, 0x60, 0x90, 0xac, 0xc1, 0xc9, 0x67, 0x0e, 0xce, 0x6b, - 0x30, 0x83, 0x8c, 0x48, 0xf6, 0x6b, 0x7a, 0x61, 0x44, 0xf1, 0x2e, 0xec, 0x69, 0x51, 0x20, 0xf7, - 0xf3, 0x35, 0x01, 0x66, 0xaf, 0xc0, 0x94, 0xda, 0x91, 0xfd, 0xc7, 0x6d, 0x51, 0xb1, 0xdc, 0x8e, - 0x27, 0x09, 0x7a, 0x17, 0x81, 0xec, 0x04, 0x8c, 0xb8, 0x9d, 0x8e, 0xa8, 0x52, 0xee, 0xc2, 0xc3, - 0x6e, 0xa7, 0x23, 0xd3, 0xcd, 0xa0, 0x8f, 0xa0, 0xb3, 0x8d, 0x76, 0x3b, 0x64, 0x24, 0x68, 0x4f, - 0x20, 0x50, 0xda, 0xf2, 0x84, 0x62, 0xdd, 0x0b, 0x5a, 0x85, 0x32, 0x8a, 0x28, 0xe0, 0x76, 0x62, - 0x84, 0xd3, 0x50, 0x54, 0x2f, 0xc8, 0xd2, 0xd5, 0xc1, 0x1e, 0x75, 0xe9, 0xf5, 0xf8, 0x4d, 0x38, - 0xd5, 0xf0, 0x42, 0x9c, 0xbc, 0xb2, 0x49, 0x9d, 0x0e, 0x79, 0x25, 0xca, 0xb0, 0xb5, 0xf6, 0x1c, - 0x15, 0x8b, 0x9e, 0xac, 0x74, 0x3a, 0xd2, 0x37, 0x91, 0xfa, 0xfa, 0x73, 0x30, 0x4d, 0x32, 0x10, - 0x1d, 0x91, 0xf8, 0x2d, 0xb4, 0x80, 0xc5, 0xe5, 0x84, 0x12, 0xfc, 0x00, 0x81, 0xaa, 0x0d, 0x45, - 0xf9, 0x87, 0x39, 0x38, 0x91, 0x29, 0x44, 0xb1, 0xaf, 0x83, 0x74, 0xc2, 0x8a, 0x7c, 0x27, 0xe0, - 0x75, 0xaf, 0xe3, 0x61, 0x98, 0x0a, 0xa9, 0x64, 0x5c, 0x3c, 0x4c, 0xfc, 0x42, 0x87, 0xae, 0x4d, - 0xdf, 0x8e, 0x89, 0xa4, 0xf6, 0xa3, 0x14, 0xa4, 0xc0, 0x0b, 0x5f, 0x86, 0x13, 0x99, 0xa8, 0x19, - 0x5a, 0x89, 0xd7, 0xcd, 0xf4, 0xca, 0xea, 0xd9, 0x28, 0xd5, 0x68, 0x4d, 0x5b, 0x41, 0xcd, 0xfb, - 0xcd, 0xb8, 0x79, 0x29, 0x71, 0x8b, 0xad, 0xa6, 0xd7, 0x75, 0xd6, 0x8d, 0x41, 0x11, 0xf5, 0x5f, - 0xda, 0x5f, 0x86, 0x13, 0x34, 0xf9, 0x76, 0x02, 0xb7, 0xb3, 0x9b, 0xb0, 0x93, 0x1f, 0xfa, 0x6a, - 0x16, 0x3b, 0x39, 0x2b, 0x6f, 0x08, 0xfc, 0x98, 0xeb, 0xac, 0xdb, 0x0b, 0xa4, 0x36, 0xfc, 0x51, - 0xbc, 0xd4, 0x33, 0x3e, 0x27, 0x63, 0x5a, 0xe7, 0xb2, 0xa6, 0xf5, 0xe0, 0x6b, 0x6a, 0x1d, 0x98, - 0xbe, 0x59, 0x49, 0x3d, 0x24, 0x99, 0x38, 0x29, 0xc9, 0x99, 0x3e, 0x44, 0xdb, 0x1a, 0x6a, 0x32, - 0xbd, 0xe5, 0x4c, 0x3d, 0x0d, 0x62, 0xcf, 0xc3, 0x58, 0x9c, 0x41, 0x9a, 0x0e, 0x8e, 0xa2, 0x04, - 0x54, 0x1b, 0xd4, 0xc2, 0xef, 0xcf, 0xc1, 0xb9, 0xa3, 0x7a, 0x88, 0x3d, 0x80, 0x93, 0x68, 0x46, - 0x11, 0xfa, 0x71, 0x27, 0x3b, 0x75, 0xf7, 0xff, 0x67, 0xef, 0x6a, 0x7e, 0x23, 0x39, 0xae, 0x3b, - 0x7b, 0x66, 0x48, 0x0e, 0xdf, 0xf0, 0xa3, 0x59, 0xbb, 0xda, 0xa5, 0xc8, 0x5d, 0xae, 0xb6, 0xf7, - 0xc3, 0xbb, 0x23, 0x4b, 0xf2, 0xae, 0x22, 0x4b, 0x2b, 0x47, 0x96, 0x9b, 0x33, 0x3d, 0x9c, 0x5e, - 0xce, 0x97, 0xba, 0x7b, 0x48, 0xaf, 0x64, 0xbb, 0x33, 0xe2, 0x34, 0xc9, 0x89, 0x87, 0x33, 0xe3, - 0xf9, 0xd0, 0x7a, 0x85, 0x00, 0xf9, 0x02, 0x6c, 0x20, 0x5f, 0x4e, 0x9c, 0x00, 0x31, 0x82, 0x00, - 0x39, 0x44, 0x08, 0x72, 0xc8, 0x5f, 0x90, 0xe4, 0xe2, 0x9b, 0x00, 0xc3, 0x80, 0x0f, 0x39, 0x25, - 0x80, 0x90, 0x08, 0x48, 0x0e, 0x49, 0x6e, 0x41, 0x7c, 0xf0, 0x29, 0xa8, 0x57, 0x55, 0xdd, 0xd5, - 0x1f, 0x33, 0xcb, 0xd5, 0x4a, 0x49, 0x0c, 0xf8, 0x44, 0x4e, 0xd5, 0xab, 0xea, 0xfa, 0xae, 0xf7, - 0x5e, 0xbd, 0xf7, 0x7b, 0x87, 0x27, 0x1e, 0x5f, 0x93, 0x5a, 0xe2, 0x50, 0x0f, 0x06, 0xb6, 0x5d, - 0x97, 0x46, 0x79, 0x30, 0xb0, 0x47, 0x7d, 0xf1, 0xbb, 0x40, 0x8b, 0xf3, 0x36, 0xb4, 0x61, 0x6b, - 0x46, 0x49, 0xe9, 0x58, 0x50, 0xe4, 0x63, 0xe1, 0x16, 0xa8, 0x47, 0x5e, 0x9b, 0x72, 0xbc, 0x5e, - 0x1b, 0x9b, 0xf6, 0xde, 0x5d, 0x16, 0x11, 0xdd, 0x5a, 0xf5, 0xd3, 0xed, 0x51, 0x7f, 0xff, 0x2e, - 0xff, 0xca, 0xa9, 0xb8, 0xd0, 0x64, 0x36, 0x9e, 0xbc, 0x08, 0xe7, 0x22, 0x00, 0x1f, 0x81, 0xc7, - 0xb8, 0xb5, 0x4e, 0xb3, 0xc2, 0x70, 0x50, 0x57, 0x61, 0x59, 0xcc, 0xf9, 0xd0, 0xf7, 0x3b, 0xb3, - 0x72, 0x3c, 0x8d, 0xee, 0x29, 0xfe, 0xb9, 0x89, 0xe8, 0x54, 0xa2, 0x04, 0x70, 0x06, 0x4e, 0x99, - 0xbc, 0x00, 0xc4, 0xe7, 0xca, 0xfd, 0x63, 0x80, 0x7f, 0x70, 0x5d, 0xe4, 0xf8, 0xfb, 0x97, 0x7f, - 0xf6, 0xef, 0x53, 0x70, 0x2e, 0x41, 0x74, 0xa0, 0x2c, 0x7e, 0xa7, 0x37, 0xf6, 0x8e, 0x99, 0x80, - 0x20, 0x77, 0x72, 0x4d, 0x4a, 0xe7, 0xfa, 0xa0, 0x05, 0x16, 0xf1, 0x9b, 0x7f, 0x8b, 0xff, 0xa2, - 0x47, 0x43, 0x6b, 0x28, 0x54, 0x1d, 0xf4, 0x5f, 0x62, 0xc2, 0x3a, 0x86, 0x31, 0x18, 0x75, 0xfa, - 0x18, 0x0d, 0x01, 0x59, 0x8c, 0x4c, 0x48, 0xe0, 0xc2, 0x56, 0x34, 0x24, 0x22, 0xca, 0x63, 0x58, - 0xea, 0x20, 0x92, 0x42, 0xbe, 0x04, 0x9b, 0xd2, 0x4d, 0xe2, 0x46, 0xf6, 0x15, 0x5a, 0x96, 0x5b, - 0x17, 0x5b, 0xfe, 0x9d, 0x52, 0x0c, 0xed, 0xb0, 0x1d, 0xd8, 0xc6, 0x49, 0xec, 0xb4, 0x07, 0x6e, - 0x2c, 0xee, 0x05, 0x76, 0x95, 0x01, 0xc5, 0x6f, 0x52, 0x2a, 0xb3, 0x3d, 0x88, 0x84, 0xc0, 0xa0, - 0xbd, 0xe6, 0xc3, 0xf7, 0x0e, 0x3c, 0x93, 0xd8, 0x62, 0x7a, 0x7d, 0xa0, 0xe1, 0x52, 0xc0, 0xf9, - 0x2c, 0xd2, 0xdf, 0x94, 0xf5, 0xb9, 0x0a, 0xcb, 0xef, 0x7a, 0xad, 0xa1, 0x37, 0xe4, 0xf7, 0x32, - 0x5f, 0x12, 0x2c, 0x4d, 0xbe, 0x96, 0xff, 0x2a, 0x25, 0x84, 0x9e, 0x9d, 0x7e, 0x7f, 0x3c, 0x1a, - 0x0f, 0x5b, 0x83, 0x90, 0xba, 0x85, 0x9c, 0xc2, 0xb3, 0xc8, 0x13, 0xdc, 0x45, 0x98, 0xfc, 0xfe, - 0x50, 0xe0, 0x02, 0x1c, 0x0a, 0x5b, 0xdb, 0xdc, 0xdd, 0x97, 0xc2, 0x5c, 0x8b, 0x4e, 0xa9, 0x75, - 0x99, 0x98, 0xf2, 0xe8, 0x52, 0xad, 0xe5, 0x39, 0xeb, 0x22, 0xab, 0x33, 0x46, 0x45, 0xca, 0x09, - 0x0d, 0x8f, 0xea, 0x5b, 0x76, 0x82, 0x5e, 0x84, 0x6b, 0x95, 0xfb, 0x47, 0xbe, 0x0c, 0x4b, 0x9d, - 0xb6, 0x1c, 0x0d, 0x2e, 0x2a, 0xe9, 0x9b, 0x6d, 0x86, 0x48, 0x1b, 0xd4, 0x51, 0x9e, 0xb3, 0xb2, - 0x1d, 0x9e, 0xba, 0xb3, 0x12, 0x52, 0x4c, 0x69, 0x3b, 0x82, 0xbf, 0x8e, 0x17, 0x23, 0xab, 0x90, - 0xf2, 0x4f, 0x82, 0x54, 0xa7, 0x4d, 0x57, 0xeb, 0x48, 0xc2, 0xc4, 0xb5, 0xf8, 0x2f, 0xed, 0xd7, - 0xe0, 0xd6, 0x59, 0xc7, 0x88, 0xee, 0xb4, 0x29, 0x03, 0xbe, 0x64, 0xad, 0xb7, 0x62, 0xe3, 0x76, - 0x15, 0x64, 0x48, 0xcf, 0x8e, 0x98, 0x70, 0x91, 0xd6, 0x1c, 0x76, 0xb4, 0xdf, 0x4a, 0xc3, 0x6a, - 0x58, 0x15, 0x47, 0x9e, 0x87, 0x8c, 0x5f, 0xed, 0xaa, 0xff, 0x64, 0x24, 0x13, 0xd1, 0xca, 0x2d, - 0x24, 0xa2, 0x3c, 0x0f, 0xbe, 0x30, 0xbb, 0xa7, 0xf2, 0xab, 0x8e, 0xb5, 0x8c, 0x89, 0xe2, 0x35, - 0xe7, 0x3e, 0xac, 0xa2, 0x71, 0x10, 0x5e, 0xa6, 0xe3, 0x0e, 0x57, 0xf0, 0xce, 0xd6, 0xd1, 0x67, - 0x3f, 0xfc, 0xe8, 0xca, 0x1c, 0xaa, 0xe3, 0x97, 0x69, 0x59, 0x7a, 0x9f, 0xd1, 0x4c, 0x49, 0xd3, - 0x92, 0x99, 0xae, 0x69, 0xe1, 0x5d, 0x99, 0xa2, 0x69, 0x99, 0x9f, 0xa1, 0x69, 0x09, 0x4a, 0xca, - 0x9a, 0x16, 0xd4, 0xb7, 0x2d, 0x4e, 0xd3, 0xb7, 0x05, 0x65, 0x98, 0xbe, 0xed, 0x3a, 0xef, 0xee, - 0xb0, 0xf5, 0xd0, 0xc5, 0x71, 0xe0, 0xbb, 0x1a, 0x3b, 0x62, 0xb5, 0x1e, 0xe2, 0x5b, 0xfc, 0xce, - 0x12, 0x88, 0x07, 0x7c, 0xed, 0x8f, 0x95, 0x88, 0x9a, 0x42, 0x4c, 0xc5, 0x0d, 0x58, 0xed, 0x9c, - 0x52, 0xf9, 0xc9, 0x6b, 0x4b, 0x8c, 0xf0, 0x8a, 0xb5, 0x22, 0x52, 0x19, 0x33, 0xfc, 0x39, 0x58, - 0xf3, 0xc9, 0x38, 0x3f, 0x88, 0x8e, 0x3d, 0x96, 0x5f, 0x9a, 0xa3, 0x54, 0x3c, 0x0f, 0xeb, 0x3e, - 0x21, 0x17, 0x35, 0x19, 0x2f, 0xbc, 0x62, 0xa9, 0x22, 0xa3, 0xc1, 0xd3, 0xb5, 0xe3, 0x28, 0x5b, - 0xf4, 0x19, 0xb5, 0x4a, 0xfb, 0x61, 0x3a, 0x24, 0xc2, 0x89, 0xcf, 0xec, 0x40, 0x8e, 0xde, 0x96, - 0x7c, 0x90, 0xf8, 0xb1, 0x72, 0x75, 0xca, 0xf0, 0x73, 0x13, 0x08, 0xdb, 0xae, 0x5b, 0x30, 0x1a, - 0xf5, 0x85, 0x45, 0x84, 0xcb, 0x18, 0x02, 0xc6, 0x96, 0xe3, 0xf2, 0x13, 0xd5, 0xb1, 0x33, 0x24, - 0x3f, 0xbb, 0x3a, 0xc1, 0x43, 0xd3, 0xd5, 0x87, 0x8c, 0x81, 0xff, 0x4b, 0x7c, 0xa0, 0x09, 0xa8, - 0xf1, 0x18, 0x85, 0x2b, 0x4f, 0x27, 0x30, 0x76, 0xb1, 0xca, 0x71, 0x94, 0xb0, 0x66, 0x75, 0x22, - 0xfe, 0x15, 0xd5, 0x1a, 0xb0, 0x8c, 0x02, 0x94, 0xa8, 0x30, 0x93, 0xa0, 0xb1, 0x8b, 0x77, 0xbe, - 0x60, 0x56, 0xad, 0x1c, 0x2d, 0x27, 0xaa, 0x39, 0x81, 0x67, 0x65, 0xb1, 0x27, 0xdc, 0xc8, 0x79, - 0x01, 0xba, 0x39, 0x73, 0x04, 0x02, 0xe9, 0x08, 0x9b, 0x7a, 0xa1, 0x15, 0x4e, 0xe0, 0x64, 0xda, - 0x09, 0x6c, 0x4e, 0x9f, 0x92, 0x19, 0x01, 0x5d, 0x02, 0x9e, 0x29, 0x25, 0xf3, 0x4c, 0xb2, 0x10, - 0x94, 0x0e, 0x09, 0x41, 0xda, 0x5f, 0xa6, 0xe1, 0xda, 0x19, 0xa6, 0x6b, 0xc6, 0x37, 0xbf, 0x02, - 0x39, 0xf6, 0xce, 0xc0, 0x8e, 0xcf, 0x54, 0x88, 0x6d, 0xa5, 0x95, 0xf2, 0xb3, 0x8e, 0xb2, 0xd0, - 0xc1, 0x79, 0x07, 0x23, 0xff, 0x7f, 0xf2, 0x2b, 0xb0, 0xc6, 0x0e, 0x34, 0x66, 0xc5, 0x74, 0x34, - 0xe9, 0x9e, 0xe1, 0x44, 0xdb, 0x12, 0x2e, 0x17, 0x91, 0xa2, 0x78, 0xc8, 0xe1, 0x89, 0x61, 0xfb, - 0x69, 0xc4, 0x81, 0x1c, 0x92, 0x1d, 0xb5, 0x3a, 0xdd, 0x33, 0xd9, 0xfe, 0x0b, 0x87, 0x0e, 0xb9, - 0x18, 0x33, 0xbe, 0xa4, 0x09, 0x25, 0xfc, 0x4d, 0x6e, 0xc2, 0x5a, 0x6f, 0x72, 0x4a, 0xe5, 0x46, - 0xb6, 0x16, 0xf8, 0x63, 0xf1, 0xbc, 0xb5, 0xd2, 0x9b, 0x9c, 0xea, 0x83, 0x01, 0x4e, 0x29, 0xbe, - 0x2a, 0xaf, 0x53, 0x3a, 0xb6, 0x6b, 0x05, 0xe5, 0x02, 0x52, 0xd2, 0x0a, 0xd8, 0xbe, 0xe5, 0xb4, - 0xe7, 0x81, 0xd9, 0x18, 0xf1, 0x80, 0x36, 0xec, 0x87, 0xf6, 0xd3, 0x94, 0x60, 0xd7, 0xa7, 0xaf, - 0xfb, 0x5f, 0x4c, 0x51, 0xc2, 0x14, 0xdd, 0x02, 0x95, 0x0e, 0x7d, 0x70, 0xa8, 0xf8, 0x73, 0xb4, - 0xda, 0x9b, 0x9c, 0xfa, 0x63, 0x27, 0x0f, 0xfc, 0x82, 0x3c, 0xf0, 0xaf, 0x0a, 0x76, 0x3e, 0xf1, - 0x78, 0x98, 0x3e, 0xe4, 0xda, 0x7f, 0xa6, 0xe1, 0xe6, 0xd9, 0x0e, 0x81, 0x5f, 0xcc, 0x5b, 0xc2, - 0xbc, 0x45, 0xf4, 0x3a, 0xf3, 0x31, 0xbd, 0x4e, 0xc2, 0xde, 0x5b, 0x48, 0xda, 0x7b, 0x31, 0x2d, - 0xd2, 0x62, 0x82, 0x16, 0x29, 0x71, 0x83, 0x66, 0x1f, 0xb3, 0x41, 0x97, 0xe4, 0x75, 0xf2, 0x6f, - 0xbe, 0xfc, 0x15, 0x66, 0xed, 0xdf, 0x81, 0x73, 0x82, 0xb5, 0x67, 0x37, 0x47, 0xa0, 0x1c, 0xcc, - 0xdd, 0xbd, 0x9d, 0xc4, 0xd4, 0x23, 0x59, 0x02, 0xe3, 0xbd, 0xce, 0xd9, 0xf9, 0x20, 0xff, 0xff, - 0x0f, 0x23, 0x4f, 0x1e, 0xc0, 0x05, 0x84, 0x83, 0x3e, 0x94, 0xd5, 0x9a, 0xee, 0xd0, 0x3b, 0xe2, - 0xeb, 0xe1, 0x6a, 0x8c, 0xed, 0xed, 0x1c, 0x4a, 0xcd, 0xb1, 0xbc, 0xa3, 0xf2, 0x9c, 0x75, 0x7e, - 0x94, 0x90, 0x1e, 0x95, 0x11, 0xfe, 0x46, 0x01, 0xed, 0xf1, 0xe3, 0x85, 0x72, 0x76, 0x74, 0xc0, - 0xa9, 0x9c, 0x2d, 0x8d, 0xde, 0x35, 0x58, 0x19, 0x7a, 0x47, 0x43, 0x6f, 0x74, 0x12, 0x12, 0xe0, - 0x96, 0x79, 0xa2, 0x18, 0x18, 0x01, 0x4a, 0xf7, 0x44, 0x4c, 0xb6, 0x28, 0xa4, 0x95, 0x7c, 0xd1, - 0x2f, 0x71, 0x1e, 0xe8, 0x6a, 0x92, 0x1b, 0xc8, 0x7e, 0xdc, 0xcf, 0x64, 0x53, 0x6a, 0xda, 0xe2, - 0xd0, 0x79, 0x47, 0x9d, 0xae, 0xa7, 0xfd, 0xad, 0x22, 0x38, 0x82, 0xa4, 0xc1, 0x23, 0xef, 0x48, - 0xb6, 0x7f, 0xe9, 0x18, 0x1b, 0x92, 0x54, 0x44, 0x36, 0x93, 0xe2, 0x68, 0x6e, 0x98, 0x10, 0x42, - 0x73, 0xc3, 0x94, 0xa7, 0x30, 0x60, 0xe2, 0x02, 0xf0, 0x3d, 0x61, 0x40, 0x40, 0xcf, 0xbc, 0xfd, - 0x3b, 0xe4, 0x36, 0x2c, 0x32, 0x9b, 0x01, 0xd1, 0xdc, 0xb5, 0x50, 0x73, 0xf7, 0xef, 0x58, 0x22, - 0x5f, 0xfb, 0x81, 0xaf, 0x89, 0x8b, 0x75, 0x62, 0xff, 0x0e, 0x79, 0xf5, 0x6c, 0xb6, 0x7c, 0x59, - 0x61, 0xcb, 0xe7, 0xdb, 0xf1, 0xbd, 0x16, 0xb2, 0xe3, 0xbb, 0x3e, 0x7b, 0xb4, 0xf8, 0x53, 0x09, - 0x43, 0x2f, 0x0b, 0x50, 0x6d, 0x7e, 0xaa, 0xc0, 0xe5, 0x99, 0x25, 0xc8, 0x25, 0xc8, 0xea, 0x0d, - 0xd3, 0x09, 0xe6, 0x97, 0xee, 0x19, 0x91, 0x42, 0x76, 0x61, 0x69, 0xa7, 0x35, 0xea, 0x1c, 0xd2, - 0x65, 0x9c, 0xa8, 0xbb, 0x8c, 0x55, 0xeb, 0x93, 0x97, 0xe7, 0xac, 0xa0, 0x2c, 0x71, 0x61, 0x1d, - 0xf7, 0x42, 0x28, 0x52, 0x4c, 0x3a, 0x41, 0x6d, 0x10, 0xab, 0x30, 0x56, 0x8c, 0x9e, 0x33, 0xb1, - 0xc4, 0xe8, 0x16, 0x7c, 0x4f, 0xf0, 0x22, 0xd3, 0x1b, 0xf8, 0x04, 0x30, 0x8c, 0xb7, 0x20, 0xdb, - 0x10, 0x8f, 0x98, 0x92, 0xf1, 0xab, 0x78, 0xb0, 0xb4, 0xfc, 0x5c, 0xed, 0xf7, 0x14, 0x21, 0xdb, - 0x3f, 0xbe, 0x23, 0x52, 0x90, 0x9d, 0xf6, 0xec, 0x20, 0x3b, 0xed, 0x4f, 0x18, 0x64, 0x47, 0xfb, - 0x6b, 0x0e, 0x92, 0x6c, 0xb6, 0x1b, 0x11, 0xc5, 0xd2, 0xd3, 0x1a, 0x31, 0x1b, 0xa1, 0xd5, 0x79, - 0x4d, 0x0a, 0xd2, 0x16, 0xff, 0xd6, 0x74, 0x5b, 0x66, 0x69, 0xa9, 0xfe, 0x69, 0x1a, 0x2e, 0xcd, - 0x2a, 0x9e, 0x18, 0x06, 0x56, 0x79, 0xb2, 0x30, 0xb0, 0xb7, 0x21, 0xcb, 0xd2, 0x7c, 0x0b, 0x5d, - 0x1c, 0x70, 0x5e, 0x94, 0x0e, 0xb8, 0xc8, 0x26, 0xd7, 0x60, 0x41, 0x2f, 0xd8, 0x41, 0x64, 0x22, - 0x34, 0xa5, 0x6b, 0x1d, 0x8e, 0xd0, 0x48, 0x8b, 0x67, 0x91, 0x6f, 0xc4, 0x83, 0x71, 0xf1, 0x90, - 0x44, 0x5b, 0xd2, 0x80, 0xc4, 0xf0, 0xcb, 0xb1, 0xbd, 0x01, 0xde, 0x36, 0x87, 0xb0, 0xb5, 0xe2, - 0x81, 0xbd, 0x34, 0x58, 0x68, 0x0c, 0xbd, 0x91, 0x37, 0x96, 0xcd, 0xdc, 0x06, 0x98, 0x62, 0xf1, - 0x1c, 0x6e, 0x84, 0xd6, 0x7a, 0xc4, 0x7c, 0x8e, 0x17, 0x64, 0x1c, 0x08, 0xb4, 0x5a, 0xa3, 0xc9, - 0x96, 0x44, 0x42, 0x0b, 0x54, 0x5a, 0x93, 0xde, 0xe1, 0x49, 0xd3, 0xaa, 0x70, 0x56, 0x83, 0x15, - 0xe8, 0x62, 0x2a, 0xed, 0xe0, 0xc8, 0x92, 0x48, 0xb4, 0xef, 0x2a, 0x70, 0x3e, 0xa9, 0x1f, 0xe4, - 0x12, 0x64, 0x7a, 0x89, 0x71, 0xc7, 0x7a, 0xcc, 0x55, 0x32, 0x47, 0xff, 0xba, 0x47, 0xfd, 0xe1, - 0x69, 0x6b, 0x2c, 0x1b, 0x03, 0x4a, 0xc9, 0x16, 0xd0, 0x1f, 0x25, 0xfc, 0x9f, 0x5c, 0x11, 0x67, - 0x74, 0x3a, 0x16, 0xa9, 0x0c, 0xff, 0x68, 0x3a, 0x80, 0xd9, 0x6e, 0xd4, 0x07, 0x0c, 0x3f, 0xfb, - 0x65, 0xc8, 0xd0, 0x66, 0x45, 0x56, 0x2f, 0x5d, 0x3f, 0x7a, 0xb5, 0xc2, 0x89, 0x58, 0xab, 0x46, - 0xad, 0xd3, 0xae, 0x85, 0xc4, 0xda, 0x01, 0xac, 0x86, 0x29, 0x88, 0x11, 0x46, 0x5c, 0xcc, 0xdd, - 0x55, 0x79, 0x4d, 0x3b, 0xfd, 0x3e, 0x33, 0x48, 0xdf, 0x79, 0xf6, 0x1f, 0x3f, 0xba, 0x02, 0xf4, - 0x27, 0x2b, 0x93, 0x84, 0xc8, 0xa8, 0x7d, 0x2f, 0x05, 0xe7, 0x03, 0x1f, 0x58, 0xb1, 0x87, 0x7e, - 0x6e, 0x1d, 0xb2, 0xf4, 0x90, 0xc3, 0x90, 0x60, 0xb4, 0xe2, 0x1d, 0x9c, 0xe1, 0xa7, 0xb0, 0x0b, - 0x1b, 0xd3, 0xe8, 0xc9, 0xf3, 0xb0, 0x84, 0xb0, 0x29, 0x83, 0xd6, 0xa1, 0x27, 0x9f, 0x7d, 0x3d, - 0x91, 0x68, 0x05, 0xf9, 0xda, 0x8f, 0x15, 0xd8, 0xe4, 0x66, 0xd4, 0xd5, 0x56, 0xa7, 0x87, 0xcf, - 0x44, 0x87, 0xde, 0xa7, 0xe3, 0x50, 0xb8, 0x1b, 0x3a, 0xc7, 0x6e, 0x84, 0xad, 0xe5, 0x63, 0x5f, - 0x9b, 0xde, 0x5b, 0x72, 0x1b, 0xa1, 0x80, 0xf8, 0x9b, 0x58, 0x86, 0x39, 0x70, 0xf7, 0x68, 0x82, - 0xec, 0xc0, 0x8d, 0x14, 0xda, 0xaf, 0xc3, 0xf6, 0xec, 0x0f, 0x90, 0xaf, 0xc3, 0x0a, 0xc6, 0x96, - 0x69, 0x0e, 0x8e, 0x87, 0xad, 0xb6, 0x27, 0x54, 0x61, 0x42, 0x13, 0x29, 0xe7, 0x31, 0x64, 0x23, - 0xee, 0x50, 0x7c, 0x8c, 0x51, 0x6b, 0x78, 0xa1, 0x90, 0xaf, 0x82, 0x5c, 0x9b, 0xf6, 0x1b, 0x0a, - 0x90, 0x78, 0x1d, 0xe4, 0x8b, 0xb0, 0xdc, 0x74, 0x0a, 0xf6, 0xb8, 0x35, 0x1c, 0x97, 0xfb, 0x93, - 0x21, 0x87, 0x15, 0x62, 0xfe, 0xa5, 0xe3, 0x43, 0x7a, 0x94, 0x0c, 0xc7, 0xee, 0x49, 0x7f, 0x32, - 0xb4, 0x42, 0x74, 0x18, 0x14, 0xc5, 0xf3, 0xbe, 0xd9, 0x6e, 0x3d, 0x0a, 0x07, 0x45, 0xe1, 0x69, - 0xa1, 0xa0, 0x28, 0x3c, 0x4d, 0xfb, 0x40, 0x81, 0x2d, 0x61, 0xea, 0xd4, 0x4e, 0x68, 0x4b, 0x01, - 0x51, 0x14, 0x86, 0x02, 0xc7, 0x72, 0x16, 0x4b, 0xbb, 0x2e, 0x80, 0x46, 0xb0, 0x81, 0xc8, 0xdb, - 0xb2, 0xb2, 0xe4, 0x2b, 0x90, 0xb1, 0xc7, 0xfd, 0xc1, 0x19, 0x90, 0x46, 0x54, 0x7f, 0x46, 0xc7, - 0xfd, 0x01, 0x56, 0x81, 0x25, 0x35, 0x0f, 0xce, 0xcb, 0x8d, 0x13, 0x2d, 0x26, 0x55, 0x58, 0xe4, - 0x90, 0x52, 0x91, 0x77, 0xc6, 0x19, 0x7d, 0xda, 0x59, 0x13, 0x70, 0x26, 0x1c, 0x47, 0xd1, 0x12, - 0x75, 0x68, 0x7f, 0xa0, 0x40, 0x8e, 0x72, 0x1b, 0x28, 0xc5, 0x3d, 0xed, 0x92, 0x0e, 0x33, 0x8e, - 0xe2, 0x51, 0xdc, 0xaf, 0xfe, 0x4c, 0xb7, 0xf1, 0x2b, 0xb0, 0x16, 0x29, 0x40, 0x34, 0x74, 0x64, - 0xef, 0x76, 0x0e, 0x5b, 0x2c, 0xc6, 0x02, 0x7b, 0x50, 0x0e, 0xa5, 0x69, 0xbf, 0xa3, 0xc0, 0x79, - 0x2a, 0xf3, 0x9b, 0xa8, 0xee, 0xb5, 0x26, 0x5d, 0xb1, 0xdf, 0x29, 0x07, 0x25, 0x6c, 0xe6, 0x98, - 0x93, 0x2d, 0xe3, 0xa0, 0x78, 0x9a, 0xe5, 0xe7, 0x92, 0x32, 0x64, 0xf9, 0xfd, 0x32, 0xe2, 0xf0, - 0x87, 0xdb, 0x92, 0x32, 0x21, 0xa8, 0x98, 0x13, 0xd1, 0x9e, 0xe0, 0x11, 0xc6, 0xcb, 0x58, 0x7e, - 0x69, 0xed, 0xbf, 0x14, 0xb8, 0x38, 0xa5, 0x0c, 0x79, 0x03, 0xe6, 0xd1, 0x01, 0x88, 0xcf, 0xde, - 0xa5, 0x29, 0x9f, 0x18, 0x1f, 0x9e, 0xec, 0xdf, 0x61, 0x17, 0xd1, 0x29, 0xfd, 0x61, 0xb1, 0x52, - 0xe4, 0x1d, 0x58, 0xd2, 0xdb, 0x6d, 0x2e, 0xce, 0xa4, 0x42, 0xe2, 0xcc, 0x94, 0x2f, 0xbe, 0xe8, - 0xd3, 0x33, 0x71, 0x86, 0x99, 0xa2, 0xb7, 0xdb, 0x2e, 0x77, 0x6e, 0x0a, 0xea, 0xdb, 0xfc, 0x65, - 0x58, 0x0d, 0x13, 0x3f, 0x91, 0x3f, 0xc6, 0x0f, 0x14, 0x50, 0xc3, 0x6d, 0xf8, 0x6c, 0x80, 0x58, - 0x92, 0xa6, 0xf9, 0x31, 0x8b, 0xea, 0x8f, 0x52, 0xf0, 0x4c, 0xe2, 0x08, 0x93, 0x17, 0x60, 0x41, - 0x1f, 0x0c, 0xcc, 0x22, 0x5f, 0x55, 0x9c, 0x43, 0x42, 0x2d, 0x71, 0x48, 0xda, 0x63, 0x44, 0xe4, - 0x65, 0xc8, 0xe2, 0xca, 0xa4, 0x05, 0x52, 0x01, 0x10, 0x21, 0x53, 0xa2, 0x44, 0x80, 0x08, 0x05, - 0x21, 0x29, 0xc1, 0x2a, 0xc7, 0x64, 0xb0, 0xbc, 0x63, 0xef, 0xdb, 0x3e, 0x22, 0x36, 0x82, 0x76, - 0x0b, 0xd5, 0xb3, 0x3b, 0x64, 0x79, 0x32, 0x2a, 0x41, 0xb8, 0x14, 0xa9, 0x80, 0x8a, 0x75, 0xca, - 0x35, 0x31, 0x34, 0x44, 0x44, 0xc9, 0x60, 0x8d, 0x98, 0x52, 0x57, 0xac, 0xa4, 0x3f, 0x5d, 0xfa, - 0x68, 0xd4, 0x39, 0xee, 0x9d, 0x7a, 0xbd, 0xf1, 0x67, 0x37, 0x5d, 0xc1, 0x37, 0xce, 0x34, 0x5d, - 0x7f, 0x92, 0x61, 0x9b, 0x39, 0x5a, 0x8c, 0x72, 0x34, 0x12, 0x00, 0x2e, 0x72, 0x34, 0x18, 0x32, - 0x9c, 0xa1, 0x0e, 0x14, 0x61, 0x91, 0xa1, 0x41, 0x88, 0x9d, 0x71, 0x39, 0xb1, 0x09, 0x8c, 0x66, - 0xff, 0x0e, 0x63, 0x5f, 0x98, 0x27, 0xd2, 0xc8, 0x12, 0x45, 0xc9, 0x3e, 0xe4, 0x0a, 0x5d, 0xaf, - 0xd5, 0x9b, 0x0c, 0x9c, 0xb3, 0xbd, 0x1e, 0x6e, 0xf0, 0xbe, 0x2c, 0x1f, 0xb2, 0x62, 0xf8, 0xea, - 0x88, 0x27, 0xb9, 0x5c, 0x11, 0x71, 0x7c, 0xe7, 0x04, 0x16, 0xe8, 0xfd, 0x0b, 0x33, 0xc6, 0x27, - 0x9a, 0x88, 0xe5, 0xc2, 0x9e, 0x37, 0xdc, 0x7b, 0xc1, 0x85, 0xd5, 0x4a, 0x6b, 0x34, 0x76, 0x86, - 0xad, 0xde, 0x08, 0x51, 0xe4, 0xce, 0x80, 0xb2, 0xb3, 0x25, 0x22, 0x94, 0xa2, 0x8e, 0x71, 0xec, - 0x17, 0x65, 0x1a, 0xcc, 0x70, 0x75, 0x94, 0x5f, 0x2a, 0x75, 0x7a, 0xad, 0x6e, 0xe7, 0x7d, 0xe1, - 0xc3, 0xc5, 0xf8, 0xa5, 0x23, 0x91, 0x68, 0x05, 0xf9, 0xda, 0xd7, 0x62, 0xf3, 0xc6, 0x5a, 0x99, - 0x83, 0x45, 0xee, 0xe1, 0xcb, 0x3c, 0x5e, 0x1b, 0x46, 0xad, 0x68, 0xd6, 0x76, 0x55, 0x85, 0xac, - 0x02, 0x34, 0xac, 0x7a, 0xc1, 0xb0, 0x6d, 0xfa, 0x3b, 0x45, 0x7f, 0x73, 0x77, 0xd8, 0x52, 0xb3, - 0xa2, 0xa6, 0x25, 0x8f, 0xd8, 0x8c, 0xf6, 0x23, 0x05, 0x2e, 0x24, 0x4f, 0x25, 0x71, 0x00, 0x7d, - 0xa2, 0xf9, 0x3b, 0xf2, 0x17, 0x67, 0xce, 0x7b, 0x62, 0x72, 0xd4, 0xb7, 0x7a, 0xcc, 0x7c, 0x76, - 0x53, 0xe2, 0xb1, 0x28, 0x08, 0x8b, 0xdf, 0x69, 0x6b, 0x05, 0xd8, 0x98, 0x56, 0x47, 0xb8, 0xab, - 0x6b, 0x90, 0xd3, 0x1b, 0x8d, 0x8a, 0x59, 0xd0, 0x1d, 0xb3, 0x5e, 0x53, 0x15, 0xb2, 0x04, 0xf3, - 0xbb, 0x56, 0xbd, 0xd9, 0x50, 0x53, 0xda, 0xf7, 0x15, 0x58, 0x31, 0x03, 0x2b, 0x93, 0xa7, 0xdd, - 0x7c, 0xaf, 0x87, 0x36, 0xdf, 0x86, 0x8f, 0x1e, 0xe0, 0x7f, 0xe0, 0x4c, 0x3b, 0xef, 0x1f, 0x14, - 0x58, 0x8f, 0x95, 0x21, 0x36, 0x2c, 0xea, 0x07, 0x76, 0xdd, 0x2c, 0x16, 0x78, 0xcb, 0xae, 0x04, - 0x86, 0x2c, 0x18, 0x20, 0x26, 0xf6, 0x15, 0xe6, 0x71, 0xf7, 0x70, 0xe4, 0xf6, 0x3b, 0x6d, 0x29, - 0xb8, 0x63, 0x79, 0xce, 0x12, 0x35, 0xe1, 0x4d, 0xf6, 0xfe, 0x64, 0xe8, 0x61, 0xb5, 0xa9, 0x90, - 0x22, 0xd4, 0x4f, 0x8f, 0x57, 0x8c, 0xd6, 0xd8, 0x2d, 0x9a, 0x1f, 0xaf, 0x3a, 0xa8, 0x6f, 0x67, - 0x05, 0x72, 0x5c, 0x6a, 0x41, 0x81, 0xe0, 0x87, 0x0a, 0x6c, 0x4c, 0x6b, 0x2b, 0x15, 0x84, 0xc2, - 0xee, 0xb7, 0x17, 0x7c, 0xc0, 0xf7, 0xb0, 0xdf, 0xad, 0x20, 0x23, 0x6f, 0x42, 0xce, 0x1c, 0x8d, - 0x26, 0xde, 0xd0, 0x7e, 0xb9, 0x69, 0x99, 0x7c, 0x81, 0x5c, 0xfe, 0xf7, 0x8f, 0xae, 0x5c, 0x44, - 0x9b, 0xe9, 0xa1, 0x3b, 0x7a, 0xd9, 0x9d, 0x0c, 0x3b, 0x21, 0x70, 0x6c, 0xb9, 0x04, 0xe5, 0x5b, - 0x5b, 0x93, 0x76, 0xc7, 0x13, 0x5c, 0xbb, 0x70, 0x51, 0xe4, 0x69, 0xf2, 0x2d, 0x22, 0xd2, 0xb4, - 0xef, 0x28, 0xb0, 0x39, 0x7d, 0x60, 0xe8, 0xcd, 0xe4, 0x30, 0x2b, 0x36, 0xe1, 0x24, 0x88, 0x37, - 0x93, 0x6f, 0xea, 0x26, 0xd7, 0x29, 0x08, 0x69, 0x21, 0x3f, 0xd8, 0x72, 0x2a, 0x16, 0x61, 0x35, - 0x5c, 0x48, 0x10, 0x6a, 0xff, 0x91, 0x82, 0x0b, 0x74, 0xd1, 0x75, 0xbd, 0xd1, 0x48, 0x9f, 0x8c, - 0x4f, 0xbc, 0xde, 0x98, 0xb3, 0x61, 0xe4, 0x55, 0x58, 0x38, 0x79, 0x32, 0x95, 0x23, 0x23, 0x27, - 0x04, 0xf0, 0x20, 0x17, 0x16, 0xe0, 0xf4, 0x7f, 0x72, 0x15, 0xe4, 0x98, 0xb6, 0x69, 0x44, 0xd5, - 0x4b, 0x6d, 0x28, 0xd6, 0xd2, 0xc0, 0x0f, 0x3f, 0xf9, 0x1a, 0xcc, 0xa3, 0x9a, 0x81, 0x1f, 0xa9, - 0x82, 0x15, 0x4e, 0x6e, 0x1d, 0x2a, 0x21, 0x2c, 0x56, 0x80, 0xbc, 0x04, 0x10, 0x00, 0x92, 0xf3, - 0x33, 0x53, 0x88, 0xdf, 0x3e, 0x26, 0xb9, 0xb5, 0x74, 0x7a, 0xd4, 0xe2, 0x28, 0xdf, 0x79, 0x58, - 0x17, 0xc3, 0x32, 0x10, 0x60, 0x5c, 0xfc, 0x35, 0x6c, 0x8d, 0x65, 0x98, 0x03, 0x01, 0xc8, 0x75, - 0x3d, 0x16, 0x97, 0x13, 0x31, 0x39, 0x23, 0xc1, 0x37, 0xaf, 0xc7, 0x82, 0x6f, 0x66, 0x19, 0x95, - 0x1c, 0x61, 0x53, 0xfb, 0xd7, 0x14, 0x2c, 0x1d, 0x50, 0x66, 0x05, 0x45, 0xf0, 0xd9, 0x22, 0xfd, - 0x5d, 0xc8, 0x55, 0xfa, 0x2d, 0xfe, 0xec, 0xc0, 0x0d, 0xa7, 0x99, 0x2b, 0x61, 0xb7, 0xdf, 0x12, - 0x2f, 0x18, 0x23, 0x4b, 0x26, 0x7a, 0x8c, 0x1b, 0xe4, 0x7d, 0x58, 0x60, 0xcf, 0x40, 0x5c, 0xbb, - 0x24, 0xd8, 0x55, 0xbf, 0x45, 0x2f, 0xb2, 0x6c, 0x49, 0x53, 0xce, 0x9e, 0x92, 0x64, 0xde, 0x89, - 0x43, 0x0b, 0x4a, 0x0a, 0x87, 0xf9, 0xb3, 0x29, 0x1c, 0x24, 0x08, 0xa5, 0x85, 0xb3, 0x40, 0x28, - 0x6d, 0xde, 0x83, 0x9c, 0xd4, 0x9e, 0x27, 0xe2, 0x5e, 0x7f, 0x33, 0x05, 0x2b, 0xd8, 0x2b, 0xdf, - 0x26, 0xe4, 0xe7, 0x53, 0x7d, 0xf2, 0x7a, 0x48, 0x7d, 0xb2, 0x21, 0xcf, 0x17, 0xeb, 0xd9, 0x0c, - 0xbd, 0xc9, 0x7d, 0x58, 0x8f, 0x11, 0x92, 0x57, 0x60, 0x9e, 0x36, 0x5f, 0x88, 0x9b, 0x6a, 0x74, - 0x05, 0x04, 0x70, 0x9b, 0xb4, 0xe3, 0x23, 0x8b, 0x51, 0x6b, 0xff, 0xad, 0xc0, 0x32, 0x47, 0xbb, - 0xef, 0x1d, 0xf5, 0x1f, 0x3b, 0x9c, 0x37, 0xa3, 0xc3, 0xc9, 0x9c, 0xfa, 0xf9, 0x70, 0xfe, 0x6f, - 0x0f, 0xe2, 0xbd, 0xd0, 0x20, 0x5e, 0xf4, 0xc1, 0xb7, 0x44, 0x77, 0x66, 0x8c, 0xe1, 0xdf, 0x21, - 0x1c, 0x65, 0x98, 0x90, 0x7c, 0x03, 0x96, 0x6a, 0xde, 0xc3, 0x90, 0xd4, 0x76, 0x73, 0x4a, 0xa5, - 0x2f, 0xfa, 0x84, 0x6c, 0x4f, 0xe1, 0x85, 0xd7, 0xf3, 0x1e, 0xba, 0xb1, 0x17, 0xa8, 0xa0, 0x4a, - 0x2a, 0xb8, 0x85, 0x8b, 0x3d, 0xc9, 0xd2, 0xe7, 0x5e, 0x5c, 0x88, 0x53, 0xf1, 0xdd, 0x34, 0x40, - 0xe0, 0x00, 0x43, 0x37, 0x60, 0xe8, 0xf1, 0x5d, 0x28, 0xbc, 0x31, 0x49, 0x5e, 0xe3, 0xe2, 0x4d, - 0xfe, 0x26, 0x57, 0xcc, 0xa6, 0xa6, 0x83, 0xa3, 0xa1, 0x8a, 0xb6, 0xc0, 0x3d, 0x2e, 0xda, 0x5e, - 0xb7, 0xc5, 0xce, 0xf6, 0xf4, 0xce, 0x75, 0xc4, 0xc2, 0xf4, 0x53, 0xa7, 0x84, 0x2d, 0x45, 0xbf, - 0x8c, 0x22, 0x25, 0x88, 0x39, 0x95, 0x65, 0x9e, 0xcc, 0xa9, 0xac, 0x01, 0x4b, 0x9d, 0xde, 0x7b, - 0x5e, 0x6f, 0xdc, 0x1f, 0x3e, 0x42, 0x6d, 0x74, 0xa0, 0xe6, 0xa2, 0x43, 0x60, 0x8a, 0x3c, 0x36, - 0x0f, 0x78, 0x31, 0xfa, 0xf4, 0xf2, 0x34, 0xf8, 0x89, 0xbe, 0x53, 0xdc, 0xbc, 0xba, 0x70, 0x3f, - 0x93, 0x5d, 0x50, 0x17, 0xef, 0x67, 0xb2, 0x59, 0x75, 0xe9, 0x7e, 0x26, 0xbb, 0xa4, 0x82, 0x25, - 0xbd, 0xef, 0xf8, 0xef, 0x37, 0xd2, 0x93, 0x4b, 0xf8, 0x39, 0x45, 0xfb, 0x59, 0x0a, 0x48, 0xbc, - 0x19, 0xe4, 0x75, 0xc8, 0xb1, 0x03, 0xd6, 0x1d, 0x8e, 0xbe, 0xc5, 0xad, 0x6e, 0x19, 0xda, 0x87, - 0x94, 0x2c, 0xa3, 0x7d, 0xb0, 0x64, 0x6b, 0xf4, 0xad, 0x2e, 0xf9, 0x3a, 0x9c, 0xc3, 0xe1, 0x1d, - 0x78, 0xc3, 0x4e, 0xbf, 0xed, 0x22, 0x34, 0x63, 0xab, 0xcb, 0x43, 0x8c, 0xbd, 0x80, 0xb1, 0x30, - 0xe3, 0xd9, 0x53, 0xa6, 0x01, 0xfd, 0x5c, 0x1a, 0x48, 0xd9, 0x60, 0x84, 0xc4, 0x01, 0x55, 0x2e, - 0x7f, 0x34, 0xe9, 0x76, 0xf9, 0xcc, 0xe6, 0xa9, 0xa0, 0x1b, 0xcd, 0x9b, 0x52, 0xf1, 0x6a, 0x50, - 0x71, 0x69, 0xd2, 0xed, 0x92, 0x57, 0x01, 0xfa, 0x3d, 0xf7, 0xb4, 0x33, 0x1a, 0xb1, 0x37, 0x0e, - 0xdf, 0x25, 0x2f, 0x48, 0x95, 0x27, 0xa3, 0xdf, 0xab, 0xb2, 0x44, 0xf2, 0x4b, 0x80, 0x4e, 0xc2, - 0xe8, 0x3d, 0xcf, 0xac, 0x5a, 0x78, 0xd0, 0x00, 0x91, 0x18, 0xf6, 0x00, 0x3c, 0xf6, 0xec, 0xce, - 0xfb, 0xc2, 0xe2, 0xf9, 0x6d, 0x58, 0xe7, 0xf6, 0xa4, 0x07, 0x9d, 0xf1, 0x09, 0xe7, 0xb0, 0x9f, - 0x86, 0x3d, 0x97, 0x58, 0xec, 0x7f, 0xca, 0x00, 0xe8, 0x07, 0xb6, 0x00, 0xa6, 0xb9, 0x0d, 0xf3, - 0x54, 0x6e, 0x10, 0xfa, 0x07, 0xd4, 0xde, 0x62, 0xbd, 0xb2, 0xf6, 0x16, 0x29, 0xe8, 0x6e, 0xb4, - 0xd0, 0xea, 0x5c, 0xe8, 0x1e, 0x70, 0x37, 0x32, 0x43, 0xf4, 0x10, 0x30, 0x28, 0xa7, 0x22, 0x15, - 0x80, 0x00, 0x2a, 0x86, 0x4b, 0xb2, 0xeb, 0x01, 0xe6, 0x02, 0xcf, 0xe0, 0xe0, 0xe4, 0x01, 0xdc, - 0x8c, 0xbc, 0x7c, 0x02, 0x32, 0xb2, 0x07, 0x19, 0xa7, 0xe5, 0x3b, 0x9c, 0x4d, 0x01, 0xd0, 0x79, - 0x8e, 0x87, 0x80, 0x0b, 0x40, 0x74, 0x56, 0xc7, 0xad, 0x50, 0xa4, 0x4c, 0xac, 0x84, 0x18, 0xb0, - 0xc0, 0xc3, 0xfb, 0x4e, 0x01, 0x5e, 0xe3, 0xd1, 0x7d, 0x39, 0xdc, 0x2a, 0x26, 0xca, 0x3c, 0x05, - 0x0f, 0xe4, 0x7b, 0x17, 0xd2, 0xb6, 0x5d, 0xe5, 0x6e, 0xe3, 0x2b, 0x81, 0x54, 0x62, 0xdb, 0x55, - 0x11, 0xbb, 0xfe, 0x54, 0x2a, 0x46, 0x89, 0xc9, 0x97, 0x20, 0x27, 0xb1, 0xcf, 0x1c, 0x70, 0x01, - 0xc7, 0x40, 0x32, 0xfa, 0x97, 0x0f, 0x0d, 0x89, 0x9a, 0x54, 0x40, 0xdd, 0x9b, 0xbc, 0xeb, 0xe9, - 0x83, 0x01, 0xfa, 0xfa, 0xbc, 0xe7, 0x0d, 0x19, 0xdb, 0x96, 0x0d, 0x90, 0x4a, 0xd1, 0x55, 0xaa, - 0x2d, 0x72, 0x65, 0x1d, 0x4c, 0xb4, 0x24, 0x69, 0xc0, 0xba, 0xed, 0x8d, 0x27, 0x03, 0x66, 0xa7, - 0x51, 0xea, 0x0f, 0xa9, 0x10, 0xc2, 0xe0, 0x19, 0x10, 0xd4, 0x71, 0x44, 0x33, 0x85, 0x71, 0xcc, - 0x51, 0x7f, 0x18, 0x11, 0x48, 0xe2, 0x85, 0x35, 0x4f, 0x9e, 0x72, 0x7a, 0xab, 0x86, 0x45, 0x1b, - 0xbc, 0x55, 0x85, 0x68, 0x13, 0x08, 0x34, 0x2f, 0x25, 0x40, 0x08, 0xe1, 0x83, 0x99, 0x04, 0x21, - 0x14, 0x02, 0x0e, 0xfa, 0x20, 0x23, 0xa1, 0xd8, 0xf1, 0xb9, 0x78, 0x03, 0xe0, 0x7e, 0xbf, 0xd3, - 0xab, 0x7a, 0xe3, 0x93, 0x7e, 0x5b, 0x42, 0x32, 0xca, 0xfd, 0x6a, 0xbf, 0xd3, 0x73, 0x4f, 0x31, - 0xf9, 0x67, 0x1f, 0x5d, 0x91, 0x88, 0x2c, 0xe9, 0x7f, 0xf2, 0x79, 0x58, 0xa2, 0xbf, 0x9c, 0xc0, - 0xda, 0x84, 0xa9, 0x2a, 0xb1, 0x34, 0xc3, 0x7a, 0x0f, 0x08, 0xc8, 0x3d, 0x8c, 0x6e, 0xd0, 0x19, - 0x8c, 0x25, 0xe6, 0x55, 0x84, 0x32, 0xe8, 0x0c, 0xc6, 0x51, 0x60, 0x52, 0x89, 0x98, 0x94, 0xfd, - 0xa6, 0x8b, 0x80, 0x24, 0x3c, 0x88, 0x02, 0xea, 0xe3, 0xf8, 0x5a, 0x73, 0x05, 0x22, 0xa2, 0x1c, - 0x3a, 0x32, 0x52, 0x0c, 0x1b, 0x61, 0x97, 0x8b, 0xec, 0x01, 0x85, 0x33, 0xb5, 0x22, 0xf6, 0x7e, - 0xdb, 0x3d, 0xc4, 0xe4, 0x50, 0x23, 0x7c, 0x62, 0xb2, 0x03, 0x6b, 0x8c, 0xc7, 0xf7, 0x03, 0x9b, - 0x71, 0x16, 0x17, 0xcf, 0xb6, 0x20, 0xf2, 0x99, 0xfc, 0xf9, 0x48, 0x01, 0x52, 0x82, 0x79, 0x14, - 0x08, 0xb9, 0xb5, 0xf8, 0x96, 0x2c, 0x3d, 0x47, 0xf7, 0x11, 0x9e, 0x2b, 0x28, 0x37, 0xcb, 0xe7, - 0x0a, 0x92, 0x92, 0xaf, 0x02, 0x18, 0xbd, 0x61, 0xbf, 0xdb, 0x45, 0xcc, 0xce, 0x2c, 0x8a, 0x52, - 0x97, 0xc3, 0xfb, 0x11, 0x6b, 0x09, 0x88, 0x38, 0xbe, 0x14, 0xfe, 0x76, 0x23, 0xc8, 0x9e, 0x52, - 0x5d, 0x9a, 0x09, 0x0b, 0x6c, 0x33, 0x22, 0xfe, 0x2d, 0x47, 0xf4, 0x97, 0xd0, 0x53, 0x19, 0xfe, - 0x2d, 0x4f, 0x8f, 0xe3, 0xdf, 0x4a, 0x05, 0xb4, 0x3d, 0x38, 0x9f, 0xd4, 0xb1, 0x90, 0x08, 0xab, - 0x9c, 0x55, 0x84, 0xfd, 0x8b, 0x34, 0x2c, 0x63, 0x6d, 0xe2, 0x14, 0xd6, 0x61, 0xc5, 0x9e, 0xbc, - 0xeb, 0x83, 0xc3, 0x88, 0xd3, 0x18, 0xdb, 0x37, 0x92, 0x33, 0xe4, 0xa7, 0xad, 0x50, 0x09, 0x62, - 0xc0, 0xaa, 0xb8, 0x09, 0x76, 0x85, 0x05, 0xba, 0x0f, 0x3d, 0x2b, 0x00, 0xce, 0xe2, 0x81, 0x1d, - 0x23, 0x85, 0x82, 0xfb, 0x20, 0xfd, 0x24, 0xf7, 0x41, 0xe6, 0x4c, 0xf7, 0xc1, 0x3b, 0xb0, 0x2c, - 0xbe, 0x86, 0x27, 0xf9, 0xfc, 0xd3, 0x9d, 0xe4, 0xa1, 0xca, 0x48, 0xc5, 0x3f, 0xd1, 0x17, 0x66, - 0x9e, 0xe8, 0xf8, 0x5e, 0x28, 0x76, 0x59, 0x2c, 0x56, 0x3b, 0xaf, 0x03, 0x23, 0x9f, 0xed, 0x16, - 0x1a, 0x9f, 0xe0, 0x96, 0x7c, 0x05, 0x96, 0x2a, 0x7d, 0xf1, 0x54, 0x24, 0xe9, 0xe8, 0xbb, 0x22, - 0x51, 0x66, 0x17, 0x7c, 0x4a, 0xff, 0x76, 0x4b, 0x7f, 0x1a, 0xb7, 0xdb, 0x3d, 0x00, 0xee, 0xda, - 0x10, 0x44, 0x2c, 0xc2, 0x2d, 0x23, 0xdc, 0xf0, 0xc3, 0x4f, 0x05, 0x12, 0x31, 0x3d, 0x9d, 0xb8, - 0x15, 0x8a, 0x7e, 0x78, 0xd8, 0x9f, 0xf4, 0xc6, 0xa1, 0x10, 0x9f, 0xc2, 0x91, 0xab, 0xc5, 0xf3, - 0xe4, 0xe3, 0x21, 0x52, 0xec, 0xd3, 0x9d, 0x10, 0xf2, 0x96, 0x6f, 0x44, 0xb7, 0x38, 0x6b, 0x84, - 0xb4, 0xd8, 0x08, 0x4d, 0x35, 0x9d, 0xd3, 0x7e, 0xa4, 0xc8, 0xb8, 0xdf, 0x9f, 0x60, 0xaa, 0x5f, - 0x03, 0xf0, 0xdf, 0xea, 0xc5, 0x5c, 0x33, 0x79, 0xc9, 0x4f, 0x95, 0x47, 0x39, 0xa0, 0x95, 0x7a, - 0x93, 0xfe, 0xb4, 0x7a, 0xe3, 0x40, 0xae, 0xfe, 0xcd, 0x71, 0x2b, 0x30, 0xee, 0x00, 0xdb, 0xe7, - 0x64, 0xf1, 0x64, 0x4a, 0xef, 0xdc, 0xc0, 0xbb, 0x21, 0xe0, 0x83, 0xa7, 0xb0, 0xc0, 0x52, 0x41, - 0xed, 0x2d, 0x58, 0x93, 0x9d, 0x4f, 0x1f, 0xf5, 0x0e, 0xc9, 0x97, 0x19, 0x0a, 0xa1, 0x12, 0x92, - 0x58, 0x24, 0x22, 0x7a, 0xe2, 0x3e, 0xea, 0x1d, 0x32, 0xfe, 0xa7, 0xf5, 0x50, 0x6e, 0x2b, 0xca, - 0x78, 0x3f, 0x51, 0x80, 0xc4, 0xc9, 0xe5, 0xd3, 0x44, 0xf9, 0x3f, 0xe0, 0x2e, 0x23, 0x5c, 0x59, - 0xe6, 0x49, 0xb8, 0xb2, 0xfc, 0x1f, 0x2a, 0xb0, 0x66, 0xea, 0x55, 0x0e, 0xd2, 0xcd, 0xde, 0x1c, - 0xae, 0xc2, 0x65, 0x53, 0xaf, 0xba, 0x8d, 0x7a, 0xc5, 0x2c, 0x3c, 0x70, 0x13, 0xb1, 0x37, 0x2f, - 0xc3, 0xb3, 0x71, 0x92, 0xe0, 0x6d, 0xe2, 0x12, 0x6c, 0xc4, 0xb3, 0x05, 0x3e, 0x67, 0x72, 0x61, - 0x01, 0xe5, 0x99, 0xce, 0xbf, 0x09, 0x6b, 0x02, 0x8b, 0xd2, 0xa9, 0xd8, 0x88, 0x76, 0xbd, 0x06, - 0xb9, 0x7d, 0xc3, 0x32, 0x4b, 0x0f, 0xdc, 0x52, 0xb3, 0x52, 0x51, 0xe7, 0xc8, 0x0a, 0x2c, 0xf1, - 0x84, 0x82, 0xae, 0x2a, 0x64, 0x19, 0xb2, 0x66, 0xcd, 0x36, 0x0a, 0x4d, 0xcb, 0x50, 0x53, 0xf9, - 0x37, 0x61, 0xb5, 0x31, 0xec, 0xbc, 0xd7, 0x1a, 0x7b, 0x7b, 0xde, 0x23, 0x7c, 0x5a, 0x58, 0x84, - 0xb4, 0xa5, 0x1f, 0xa8, 0x73, 0x04, 0x60, 0xa1, 0xb1, 0x57, 0xb0, 0xef, 0xdc, 0x51, 0x15, 0x92, - 0x83, 0xc5, 0xdd, 0x42, 0xc3, 0xdd, 0xab, 0xda, 0x6a, 0x8a, 0xfe, 0xd0, 0x0f, 0x6c, 0xfc, 0x91, - 0xce, 0x7f, 0x01, 0xd6, 0x91, 0x57, 0xa8, 0x74, 0x46, 0x63, 0xaf, 0xe7, 0x0d, 0xb1, 0x0d, 0xcb, - 0x90, 0xb5, 0x3d, 0xba, 0xc9, 0xc7, 0x1e, 0x6b, 0x40, 0x75, 0xd2, 0x1d, 0x77, 0x06, 0x5d, 0xef, - 0xdb, 0xaa, 0x92, 0xbf, 0x07, 0x6b, 0x56, 0x7f, 0x32, 0xee, 0xf4, 0x8e, 0xed, 0x31, 0xa5, 0x38, - 0x7e, 0x44, 0x9e, 0x81, 0xf5, 0x66, 0x4d, 0xaf, 0xee, 0x98, 0xbb, 0xcd, 0x7a, 0xd3, 0x76, 0xab, - 0xba, 0x53, 0x28, 0xb3, 0x87, 0x8d, 0x6a, 0xdd, 0x76, 0x5c, 0xcb, 0x28, 0x18, 0x35, 0x47, 0x55, - 0xf2, 0xdf, 0x43, 0xb5, 0xc7, 0x61, 0xbf, 0xd7, 0x2e, 0xb5, 0x30, 0xfa, 0x39, 0x6d, 0xb0, 0x06, - 0xdb, 0xb6, 0x51, 0xa8, 0xd7, 0x8a, 0x6e, 0x49, 0x2f, 0x38, 0x75, 0x2b, 0x09, 0xfc, 0x75, 0x13, - 0x2e, 0x24, 0xd0, 0xd4, 0x9d, 0x86, 0xaa, 0x90, 0x2b, 0xb0, 0x95, 0x90, 0x77, 0x60, 0xec, 0xe8, - 0x4d, 0xa7, 0x5c, 0x53, 0x53, 0x53, 0x0a, 0xdb, 0x76, 0x5d, 0x4d, 0xe7, 0x7f, 0x57, 0x81, 0xd5, - 0xe6, 0x88, 0x5b, 0x15, 0x37, 0xd1, 0x37, 0xf0, 0x39, 0xb8, 0xd4, 0xb4, 0x0d, 0xcb, 0x75, 0xea, - 0x7b, 0x46, 0xcd, 0x6d, 0xda, 0xfa, 0x6e, 0xb4, 0x35, 0x57, 0x60, 0x4b, 0xa2, 0xb0, 0x8c, 0x42, - 0x7d, 0xdf, 0xb0, 0xdc, 0x86, 0x6e, 0xdb, 0x07, 0x75, 0xab, 0xa8, 0x2a, 0xf4, 0x8b, 0x09, 0x04, - 0xd5, 0x92, 0xce, 0x5a, 0x13, 0xca, 0xab, 0x19, 0x07, 0x7a, 0xc5, 0xdd, 0xa9, 0x3b, 0x6a, 0x3a, - 0x5f, 0xa5, 0x57, 0x2f, 0x42, 0x30, 0x32, 0x5b, 0xb8, 0x2c, 0x64, 0x6a, 0xf5, 0x9a, 0x11, 0x7d, - 0x0e, 0x5b, 0x86, 0xac, 0xde, 0x68, 0x58, 0xf5, 0x7d, 0x5c, 0x62, 0x00, 0x0b, 0x45, 0xa3, 0x46, - 0x5b, 0x96, 0xa6, 0x39, 0x0d, 0xab, 0x5e, 0xad, 0x3b, 0x46, 0x51, 0xcd, 0xe4, 0x2d, 0xb1, 0x85, - 0x45, 0xa5, 0x87, 0x7d, 0xf6, 0xf6, 0x54, 0x34, 0x4a, 0x7a, 0xb3, 0xe2, 0xf0, 0x29, 0x7a, 0xe0, - 0x5a, 0xc6, 0x5b, 0x4d, 0xc3, 0x76, 0x6c, 0x55, 0x21, 0x2a, 0x2c, 0xd7, 0x0c, 0xa3, 0x68, 0xbb, - 0x96, 0xb1, 0x6f, 0x1a, 0x07, 0x6a, 0x8a, 0xd6, 0xc9, 0xfe, 0xa7, 0x5f, 0xc8, 0x7f, 0xa0, 0x00, - 0x61, 0xf0, 0x95, 0x22, 0x26, 0x02, 0xae, 0x98, 0x6d, 0xd8, 0x2c, 0xd3, 0xa9, 0xc6, 0xae, 0x55, - 0xeb, 0xc5, 0xe8, 0x90, 0x5d, 0x00, 0x12, 0xc9, 0xaf, 0x97, 0x4a, 0xaa, 0x42, 0xb6, 0xe0, 0x5c, - 0x24, 0xbd, 0x68, 0xd5, 0x1b, 0x6a, 0x6a, 0x33, 0x95, 0x55, 0xc8, 0xc5, 0x58, 0xe6, 0x9e, 0x61, - 0x34, 0xd4, 0x34, 0x9d, 0xa2, 0x48, 0x86, 0xd8, 0x12, 0xac, 0x78, 0x26, 0xff, 0x1d, 0x05, 0x2e, - 0xb0, 0x66, 0x8a, 0xfd, 0xe5, 0x37, 0xf5, 0x12, 0x6c, 0x70, 0x50, 0xde, 0xa4, 0x86, 0x9e, 0x07, - 0x35, 0x94, 0xcb, 0x9a, 0xf9, 0x0c, 0xac, 0x87, 0x52, 0xb1, 0x1d, 0x29, 0x7a, 0x7a, 0x84, 0x92, - 0x77, 0x0c, 0xdb, 0x71, 0x8d, 0x52, 0xa9, 0x6e, 0x39, 0xac, 0x21, 0xe9, 0xbc, 0x06, 0xeb, 0x05, - 0x6f, 0x38, 0xa6, 0x52, 0x51, 0x6f, 0xd4, 0xe9, 0xf7, 0xb0, 0x09, 0x2b, 0xb0, 0x64, 0x7c, 0xd5, - 0x31, 0x6a, 0xb6, 0x59, 0xaf, 0xa9, 0x73, 0xf9, 0x4b, 0x11, 0x1a, 0xb1, 0x8f, 0x6d, 0xbb, 0xac, - 0xce, 0xe5, 0x5b, 0xb0, 0x22, 0xec, 0x77, 0xd9, 0xaa, 0xd8, 0x86, 0x4d, 0xb1, 0xd6, 0xf0, 0x44, - 0x89, 0x76, 0x61, 0x03, 0xce, 0xc7, 0xf3, 0x0d, 0x47, 0x55, 0xe8, 0x2c, 0x44, 0x72, 0x68, 0x7a, - 0x2a, 0xff, 0xdb, 0x0a, 0xac, 0xf8, 0xef, 0x19, 0xa8, 0x41, 0xbd, 0x02, 0x5b, 0xd5, 0x92, 0xee, - 0x16, 0x8d, 0x7d, 0xb3, 0x60, 0xb8, 0x7b, 0x66, 0xad, 0x18, 0xf9, 0xc8, 0xb3, 0xf0, 0x4c, 0x02, - 0x01, 0x7e, 0x65, 0x03, 0xce, 0x47, 0xb3, 0x1c, 0xba, 0x55, 0x53, 0x74, 0xe8, 0xa3, 0x39, 0xfe, - 0x3e, 0x4d, 0xe7, 0xff, 0x5c, 0x81, 0x0d, 0x1e, 0x74, 0x9a, 0xbf, 0xac, 0xb0, 0x68, 0x04, 0x08, - 0xd7, 0x99, 0x87, 0x9b, 0x8e, 0xd5, 0xb4, 0x1d, 0xa3, 0x28, 0x8a, 0xd3, 0x45, 0x6b, 0x5a, 0x46, - 0xd5, 0xa8, 0x39, 0x91, 0xb6, 0x3d, 0x0f, 0x9f, 0x9b, 0x41, 0x5b, 0xab, 0x3b, 0xe2, 0x37, 0xdd, - 0xab, 0x9f, 0x83, 0x6b, 0x33, 0x88, 0x7d, 0xc2, 0x54, 0x7e, 0x1f, 0x56, 0x6d, 0xbd, 0x5a, 0x29, - 0xf5, 0x87, 0x87, 0x9e, 0x3e, 0x19, 0x9f, 0xf4, 0xc8, 0x16, 0x5c, 0x2c, 0xd5, 0xad, 0x82, 0xe1, - 0x62, 0x0f, 0x22, 0x8d, 0x38, 0x07, 0x6b, 0x72, 0xe6, 0x03, 0x83, 0xee, 0x2e, 0x02, 0xab, 0x72, - 0x62, 0xad, 0xae, 0xa6, 0xf2, 0x5f, 0x83, 0xe5, 0x50, 0xe4, 0xa6, 0x8b, 0x70, 0x4e, 0xfe, 0xdd, - 0xf0, 0x7a, 0xed, 0x4e, 0xef, 0x58, 0x9d, 0x8b, 0x66, 0x58, 0x93, 0x5e, 0x8f, 0x66, 0xe0, 0x71, - 0x23, 0x67, 0x38, 0xde, 0xf0, 0xb4, 0xd3, 0x6b, 0x8d, 0xbd, 0xb6, 0x9a, 0xca, 0xbf, 0x08, 0x2b, - 0x21, 0xbc, 0x58, 0xba, 0xae, 0x2a, 0x75, 0x7e, 0x3f, 0x54, 0x8d, 0xa2, 0xd9, 0xac, 0xaa, 0xf3, - 0xf4, 0xa0, 0x29, 0x9b, 0xbb, 0x65, 0x15, 0xf2, 0xdf, 0x57, 0xa8, 0x84, 0x82, 0xe3, 0x5e, 0x2d, - 0xe9, 0x62, 0x25, 0xd2, 0x5d, 0xc0, 0x50, 0xa8, 0x0d, 0xdb, 0x66, 0x8f, 0xd4, 0x97, 0x60, 0x83, - 0xff, 0x70, 0xf5, 0x5a, 0xd1, 0x2d, 0xeb, 0x56, 0xf1, 0x40, 0xb7, 0xe8, 0xd6, 0x78, 0xa0, 0xa6, - 0x70, 0xbf, 0x4b, 0x29, 0xae, 0x53, 0x6f, 0x16, 0xca, 0x6a, 0x9a, 0x6e, 0xaf, 0x50, 0x7a, 0xc3, - 0xac, 0xa9, 0x19, 0x3c, 0x3d, 0x62, 0xd4, 0x58, 0x2d, 0xcd, 0x9f, 0xcf, 0x7f, 0xac, 0xc0, 0x45, - 0xbb, 0x73, 0xdc, 0x6b, 0x8d, 0x27, 0x43, 0x4f, 0xef, 0x1e, 0xf7, 0x87, 0x9d, 0xf1, 0xc9, 0xa9, - 0x3d, 0xe9, 0x8c, 0x3d, 0x72, 0x1b, 0x6e, 0xd8, 0xe6, 0x6e, 0x4d, 0x77, 0xe8, 0xee, 0xd7, 0x2b, - 0xbb, 0x75, 0xcb, 0x74, 0xca, 0x55, 0xd7, 0x6e, 0x9a, 0xb1, 0x8d, 0x71, 0x1d, 0x9e, 0x9b, 0x4e, - 0x5a, 0x31, 0x76, 0xf5, 0xc2, 0x03, 0x55, 0x99, 0x5d, 0xe1, 0x8e, 0x5e, 0xd1, 0x6b, 0x05, 0xa3, - 0xe8, 0xee, 0xdf, 0x51, 0x53, 0xe4, 0x06, 0x5c, 0x9d, 0x4e, 0x5a, 0x32, 0x1b, 0x36, 0x25, 0x4b, - 0xcf, 0xfe, 0x6e, 0xd9, 0xae, 0x52, 0xaa, 0x4c, 0xfe, 0xcf, 0x14, 0xd8, 0x98, 0x06, 0x51, 0x42, - 0x6e, 0x82, 0x66, 0xd4, 0x1c, 0x4b, 0x37, 0x8b, 0x6e, 0xc1, 0x32, 0x8a, 0x46, 0xcd, 0x31, 0xf5, - 0x8a, 0xed, 0xda, 0xf5, 0x26, 0x5d, 0x4d, 0x81, 0x2d, 0xc1, 0x35, 0xb8, 0x32, 0x83, 0xae, 0x6e, - 0x16, 0x0b, 0xaa, 0x42, 0xee, 0xc0, 0x0b, 0x33, 0x88, 0xec, 0x07, 0xb6, 0x63, 0x54, 0xe5, 0x1c, - 0x35, 0x95, 0xef, 0x80, 0x1a, 0xf5, 0xb7, 0x8f, 0xd9, 0x6b, 0x58, 0xcd, 0x5a, 0x8d, 0x5d, 0x50, - 0x6b, 0x90, 0xab, 0x3b, 0x65, 0xc3, 0xe2, 0x48, 0xed, 0x08, 0xcd, 0xde, 0xac, 0xd1, 0x35, 0x5f, - 0xb7, 0xcc, 0xb7, 0xf1, 0xa6, 0xda, 0x80, 0xf3, 0x76, 0x45, 0x2f, 0xec, 0xe1, 0x76, 0x34, 0x6b, - 0x6e, 0xa1, 0xac, 0xd7, 0x6a, 0x46, 0x45, 0x05, 0x1c, 0x87, 0x69, 0x8e, 0x79, 0xe4, 0xf3, 0x70, - 0xab, 0xbe, 0xe7, 0xe8, 0x6e, 0xa3, 0xd2, 0xdc, 0x35, 0x6b, 0xae, 0xfd, 0xa0, 0x56, 0x10, 0x5c, - 0x55, 0x21, 0x7e, 0x98, 0xdf, 0x82, 0xeb, 0x33, 0xa9, 0x03, 0x4c, 0xf5, 0x9b, 0xa0, 0xcd, 0xa4, - 0xe4, 0x1d, 0xc9, 0xff, 0x58, 0x81, 0xad, 0x19, 0x0f, 0xc7, 0xe4, 0x05, 0xb8, 0x5d, 0x36, 0xf4, - 0x62, 0xc5, 0xb0, 0x6d, 0xdc, 0xe3, 0x74, 0x04, 0x99, 0x5d, 0x47, 0xe2, 0x51, 0x7d, 0x1b, 0x6e, - 0xcc, 0x26, 0x0f, 0x2e, 0xfd, 0x5b, 0x70, 0x7d, 0x36, 0x29, 0x67, 0x02, 0x52, 0xf4, 0xa8, 0x9c, - 0x4d, 0xe9, 0x33, 0x0f, 0xe9, 0xfc, 0xef, 0x2b, 0x70, 0x21, 0x59, 0x7b, 0x43, 0xdb, 0x66, 0xd6, - 0x6c, 0x47, 0xaf, 0x54, 0xdc, 0x86, 0x6e, 0xe9, 0x55, 0xd7, 0xa8, 0x59, 0xf5, 0x4a, 0x25, 0xe9, - 0xd2, 0xbc, 0x0e, 0xcf, 0x4d, 0x27, 0xb5, 0x0b, 0x96, 0xd9, 0xa0, 0xf7, 0x82, 0x06, 0xdb, 0xd3, - 0xa9, 0x0c, 0xb3, 0x60, 0xa8, 0xa9, 0x9d, 0x37, 0x3e, 0xfc, 0x97, 0xed, 0xb9, 0x0f, 0x3f, 0xde, - 0x56, 0x7e, 0xf2, 0xf1, 0xb6, 0xf2, 0xcf, 0x1f, 0x6f, 0x2b, 0x6f, 0x3f, 0x7f, 0xb6, 0x70, 0x24, - 0x28, 0x51, 0xbc, 0xbb, 0x80, 0x86, 0x4c, 0x2f, 0xff, 0x4f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x4e, - 0x6f, 0x76, 0x89, 0x7d, 0xab, 0x01, 0x00, + 0x74, 0xda, 0x73, 0xe8, 0x64, 0x85, 0xec, 0xb3, 0x15, 0xe7, 0x38, 0x85, 0x2d, 0x59, 0xe1, 0x87, + 0xc2, 0x3a, 0xe9, 0x42, 0x21, 0x2b, 0x14, 0x8e, 0x93, 0xc2, 0x96, 0x5f, 0x6b, 0x05, 0x64, 0x59, + 0xfe, 0x61, 0x23, 0xc2, 0x0e, 0xc9, 0x17, 0xe1, 0xc7, 0x5e, 0xe8, 0xce, 0x91, 0x5f, 0x7e, 0x59, + 0x95, 0x59, 0x5d, 0x0d, 0x34, 0x66, 0xb8, 0x3a, 0x71, 0x42, 0x7f, 0x48, 0xf4, 0x97, 0xdf, 0xf7, + 0x65, 0xe5, 0xfb, 0xcb, 0x2f, 0xbf, 0x07, 0xbc, 0x18, 0xf1, 0x26, 0xef, 0xf8, 0x41, 0x74, 0xb9, + 0xc9, 0x77, 0xdc, 0xfa, 0xde, 0xe5, 0x68, 0xaf, 0xc3, 0x43, 0xf9, 0xef, 0xa5, 0x4e, 0xe0, 0x47, + 0x3e, 0x1b, 0xc6, 0x1f, 0x0b, 0x73, 0x3b, 0xfe, 0x8e, 0x8f, 0x90, 0xcb, 0xe2, 0x2f, 0x59, 0xb8, + 0x70, 0x76, 0xc7, 0xf7, 0x77, 0x9a, 0xfc, 0x32, 0xfe, 0xda, 0xea, 0x6e, 0x5f, 0x6e, 0x74, 0x03, + 0x37, 0xf2, 0xfc, 0x36, 0x95, 0x97, 0xd3, 0xe5, 0x91, 0xd7, 0xe2, 0x61, 0xe4, 0xb6, 0x3a, 0xfd, + 0x18, 0x3c, 0x0e, 0xdc, 0x4e, 0x87, 0x07, 0x54, 0xfb, 0xc2, 0xc5, 0xf8, 0x03, 0xdd, 0x28, 0x12, + 0x94, 0x82, 0xf9, 0xe5, 0x47, 0x57, 0xf4, 0x9f, 0x84, 0xfa, 0x46, 0x76, 0x5b, 0x14, 0xc3, 0x14, + 0x67, 0xeb, 0xe7, 0x0a, 0x30, 0x76, 0x9b, 0xf3, 0x4e, 0xa5, 0xe9, 0x3d, 0xe2, 0xec, 0x25, 0x18, + 0x5a, 0x77, 0x5b, 0x7c, 0x3e, 0x77, 0x2e, 0x77, 0x61, 0x6c, 0x69, 0xfa, 0x60, 0xbf, 0x3c, 0x1e, + 0xf2, 0xe0, 0x11, 0x0f, 0x9c, 0xb6, 0xdb, 0xe2, 0x36, 0x16, 0xb2, 0x4f, 0xc1, 0x98, 0xf8, 0x3f, + 0xec, 0xb8, 0x75, 0x3e, 0x9f, 0x47, 0xcc, 0xc9, 0x83, 0xfd, 0xf2, 0x58, 0x5b, 0x01, 0xed, 0xa4, + 0x9c, 0x55, 0x61, 0x74, 0xf5, 0x49, 0xc7, 0x0b, 0x78, 0x38, 0x3f, 0x74, 0x2e, 0x77, 0x61, 0x7c, + 0x71, 0xe1, 0x92, 0x6c, 0xeb, 0x25, 0xd5, 0xd6, 0x4b, 0x9b, 0xaa, 0x33, 0x96, 0x66, 0x7f, 0x67, + 0xbf, 0xfc, 0xdc, 0xc1, 0x7e, 0x79, 0x94, 0x4b, 0x92, 0x9f, 0xf8, 0xa3, 0x72, 0xce, 0x56, 0xf4, + 0xec, 0x1d, 0x18, 0xda, 0xdc, 0xeb, 0xf0, 0xf9, 0xb1, 0x73, 0xb9, 0x0b, 0x53, 0x8b, 0x67, 0x2f, + 0xc9, 0xe1, 0x89, 0x3f, 0x3e, 0xf9, 0x4b, 0x60, 0x2d, 0x15, 0x0f, 0xf6, 0xcb, 0x43, 0x02, 0xc5, + 0x46, 0x2a, 0xf6, 0x06, 0x8c, 0xdc, 0xf4, 0xc3, 0xa8, 0xba, 0x32, 0x0f, 0xf8, 0xc9, 0x27, 0x0e, + 0xf6, 0xcb, 0x33, 0xbb, 0x7e, 0x18, 0x39, 0x5e, 0xe3, 0x75, 0xbf, 0xe5, 0x45, 0xbc, 0xd5, 0x89, + 0xf6, 0x6c, 0x42, 0xb2, 0x9e, 0xc0, 0xa4, 0xc1, 0x8f, 0x8d, 0xc3, 0xe8, 0xbd, 0xf5, 0xdb, 0xeb, + 0x77, 0x1f, 0xac, 0x97, 0x9e, 0x63, 0x45, 0x18, 0x5a, 0xbf, 0xbb, 0xb2, 0x5a, 0xca, 0xb1, 0x51, + 0x28, 0x54, 0x36, 0x36, 0x4a, 0x79, 0x36, 0x01, 0xc5, 0x95, 0xca, 0x66, 0x65, 0xa9, 0x52, 0x5b, + 0x2d, 0x15, 0xd8, 0x2c, 0x4c, 0x3f, 0xa8, 0xae, 0xaf, 0xdc, 0x7d, 0x50, 0x73, 0x56, 0x56, 0x6b, + 0xb7, 0x37, 0xef, 0x6e, 0x94, 0x86, 0xd8, 0x14, 0xc0, 0xed, 0x7b, 0x4b, 0xab, 0xf6, 0xfa, 0xea, + 0xe6, 0x6a, 0xad, 0x34, 0xcc, 0xe6, 0xa0, 0xa4, 0x48, 0x9c, 0xda, 0xaa, 0x7d, 0xbf, 0xba, 0xbc, + 0x5a, 0x1a, 0xb9, 0x35, 0x54, 0x2c, 0x94, 0x86, 0xec, 0xd1, 0x35, 0xee, 0x86, 0xbc, 0xba, 0x62, + 0xfd, 0x3b, 0x05, 0x28, 0xde, 0xe1, 0x91, 0xdb, 0x70, 0x23, 0x97, 0xbd, 0x60, 0x8c, 0x0f, 0x36, + 0x51, 0x1b, 0x98, 0x97, 0x7a, 0x07, 0x66, 0xf8, 0x60, 0xbf, 0x9c, 0x7b, 0x43, 0x1f, 0x90, 0xb7, + 0x61, 0x7c, 0x85, 0x87, 0xf5, 0xc0, 0xeb, 0x88, 0x49, 0x33, 0x5f, 0x40, 0xb4, 0xd3, 0x07, 0xfb, + 0xe5, 0x13, 0x8d, 0x04, 0xac, 0x75, 0x88, 0x8e, 0xcd, 0xaa, 0x30, 0xb2, 0xe6, 0x6e, 0xf1, 0x66, + 0x38, 0x3f, 0x7c, 0xae, 0x70, 0x61, 0x7c, 0xf1, 0x79, 0x1a, 0x04, 0xf5, 0x81, 0x97, 0x64, 0xe9, + 0x6a, 0x3b, 0x0a, 0xf6, 0x96, 0xe6, 0x0e, 0xf6, 0xcb, 0xa5, 0x26, 0x02, 0xf4, 0x0e, 0x96, 0x28, + 0xac, 0x96, 0x4c, 0x8c, 0x91, 0x23, 0x27, 0xc6, 0x99, 0xdf, 0xd9, 0x2f, 0xe7, 0xc4, 0x80, 0xd1, + 0xc4, 0x48, 0xf8, 0x99, 0x53, 0x64, 0x11, 0x8a, 0x36, 0x7f, 0xe4, 0x85, 0xa2, 0x65, 0x45, 0x6c, + 0xd9, 0xc9, 0x83, 0xfd, 0x32, 0x0b, 0x08, 0xa6, 0x7d, 0x46, 0x8c, 0xb7, 0xf0, 0x16, 0x8c, 0x6b, + 0x5f, 0xcd, 0x4a, 0x50, 0x78, 0xc8, 0xf7, 0x64, 0x0f, 0xdb, 0xe2, 0x4f, 0x36, 0x07, 0xc3, 0x8f, + 0xdc, 0x66, 0x97, 0xba, 0xd4, 0x96, 0x3f, 0x3e, 0x9f, 0xff, 0x5c, 0xee, 0xd6, 0x50, 0x71, 0xb4, + 0x54, 0xb4, 0xf3, 0xd5, 0x15, 0xeb, 0xef, 0x0c, 0x41, 0xd1, 0xf6, 0xe5, 0x42, 0x64, 0x17, 0x61, + 0xb8, 0x16, 0xb9, 0x91, 0x1a, 0xa6, 0xd9, 0x83, 0xfd, 0xf2, 0xb4, 0x58, 0xa4, 0x5c, 0xab, 0x5f, + 0x62, 0x08, 0xd4, 0x8d, 0x5d, 0x37, 0x54, 0xc3, 0x85, 0xa8, 0x1d, 0x01, 0xd0, 0x51, 0x11, 0x83, + 0x9d, 0x87, 0xa1, 0x3b, 0x7e, 0x83, 0xd3, 0x88, 0xb1, 0x83, 0xfd, 0xf2, 0x54, 0xcb, 0x6f, 0xe8, + 0x88, 0x58, 0xce, 0x5e, 0x87, 0xb1, 0xe5, 0x6e, 0x10, 0xf0, 0xb6, 0x98, 0xeb, 0x43, 0x88, 0x3c, + 0x75, 0xb0, 0x5f, 0x86, 0xba, 0x04, 0x3a, 0x5e, 0xc3, 0x4e, 0x10, 0xc4, 0x30, 0xd4, 0x22, 0x37, + 0x88, 0x78, 0x63, 0x7e, 0x78, 0xa0, 0x61, 0x10, 0xeb, 0x73, 0x26, 0x94, 0x24, 0xe9, 0x61, 0x20, + 0x4e, 0xec, 0x26, 0x8c, 0xdf, 0x08, 0xdc, 0x3a, 0xdf, 0xe0, 0x81, 0xe7, 0x37, 0x70, 0x7c, 0x0b, + 0x4b, 0xe7, 0x0f, 0xf6, 0xcb, 0x27, 0x77, 0x04, 0xd8, 0xe9, 0x20, 0x3c, 0xa1, 0xfe, 0xce, 0x7e, + 0xb9, 0xb8, 0x42, 0x5b, 0xa6, 0xad, 0x93, 0xb2, 0xaf, 0x8b, 0xc1, 0x09, 0x23, 0xec, 0x5a, 0xde, + 0x98, 0x1f, 0x3d, 0xf2, 0x13, 0x2d, 0xfa, 0xc4, 0x93, 0x4d, 0x37, 0x8c, 0x9c, 0x40, 0xd2, 0xa5, + 0xbe, 0x53, 0x67, 0xc9, 0xee, 0x42, 0xb1, 0x56, 0xdf, 0xe5, 0x8d, 0x6e, 0x93, 0xe3, 0x94, 0x19, + 0x5f, 0x3c, 0x45, 0x93, 0x5a, 0x8d, 0xa7, 0x2a, 0x5e, 0x5a, 0x20, 0xde, 0x2c, 0x24, 0x88, 0x3e, + 0x9f, 0x14, 0xd6, 0xe7, 0x8b, 0xdf, 0xfa, 0xf9, 0xf2, 0x73, 0xdf, 0xf7, 0x87, 0xe7, 0x9e, 0xb3, + 0xfe, 0x93, 0x3c, 0x94, 0xd2, 0x4c, 0xd8, 0x36, 0x4c, 0xde, 0xeb, 0x34, 0xdc, 0x88, 0x2f, 0x37, + 0x3d, 0xde, 0x8e, 0x42, 0x9c, 0x24, 0x87, 0xb7, 0xe9, 0x65, 0xaa, 0x77, 0xbe, 0x8b, 0x84, 0x4e, + 0x5d, 0x52, 0xa6, 0x5a, 0x65, 0xb2, 0x4d, 0xea, 0xa9, 0xe1, 0x06, 0x1e, 0xe2, 0x0c, 0x3b, 0x5e, + 0x3d, 0x72, 0xeb, 0xef, 0x53, 0x0f, 0xb1, 0xa5, 0x09, 0xd4, 0x6e, 0x6c, 0xed, 0xe1, 0xcc, 0x1c, + 0x7c, 0x02, 0x09, 0x92, 0x8c, 0x09, 0x24, 0xc0, 0xd6, 0xff, 0x9a, 0x83, 0x29, 0x9b, 0x87, 0x7e, + 0x37, 0xa8, 0xf3, 0x9b, 0xdc, 0x6d, 0xf0, 0x40, 0x4c, 0xff, 0xdb, 0x5e, 0xbb, 0x41, 0x6b, 0x0a, + 0xa7, 0xff, 0x43, 0xaf, 0xad, 0x6f, 0xdd, 0x58, 0xce, 0x3e, 0x0d, 0xa3, 0xb5, 0xee, 0x16, 0xa2, + 0xe6, 0x93, 0x1d, 0x20, 0xec, 0x6e, 0x39, 0x29, 0x74, 0x85, 0xc6, 0x2e, 0xc3, 0xe8, 0x7d, 0x1e, + 0x84, 0xc9, 0x6e, 0x88, 0x47, 0xc3, 0x23, 0x09, 0xd2, 0x09, 0x08, 0x8b, 0xdd, 0x48, 0x76, 0x64, + 0x3a, 0xd4, 0xa6, 0x53, 0xfb, 0x60, 0x32, 0x55, 0x5a, 0x04, 0xd1, 0xa7, 0x8a, 0xc2, 0xb2, 0x7e, + 0x32, 0x0f, 0xa5, 0x15, 0x37, 0x72, 0xb7, 0xdc, 0x90, 0xfa, 0xf3, 0xfe, 0x55, 0xb1, 0xc7, 0x6b, + 0x0d, 0xc5, 0x3d, 0x5e, 0x7c, 0xf9, 0x47, 0x6e, 0xde, 0x2b, 0xe9, 0xe6, 0x8d, 0x8b, 0x13, 0x96, + 0x9a, 0x97, 0x34, 0xea, 0xdd, 0xa3, 0x1b, 0x55, 0xa2, 0x46, 0x15, 0x55, 0xa3, 0x92, 0xa6, 0xb0, + 0x77, 0x61, 0xa8, 0xd6, 0xe1, 0x75, 0xda, 0x44, 0xd4, 0xb9, 0x60, 0x36, 0x4e, 0x20, 0xdc, 0xbf, + 0xba, 0x34, 0x41, 0x6c, 0x86, 0xc2, 0x0e, 0xaf, 0xdb, 0x48, 0xa6, 0x2d, 0x9a, 0xff, 0xb4, 0x00, + 0x73, 0x59, 0x64, 0x7a, 0x3b, 0x46, 0x0e, 0x69, 0xc7, 0x05, 0x28, 0x8a, 0x23, 0x5c, 0x1c, 0x8b, + 0xb8, 0x5d, 0x8c, 0x2d, 0x4d, 0x88, 0x4f, 0xde, 0x25, 0x98, 0x1d, 0x97, 0xb2, 0x97, 0x62, 0x89, + 0xa0, 0x98, 0xf0, 0x23, 0x89, 0x40, 0xc9, 0x01, 0x62, 0xac, 0xd5, 0x12, 0x46, 0xc1, 0x21, 0xe9, + 0x16, 0x05, 0x4e, 0xc6, 0x3a, 0x20, 0x88, 0x71, 0xcc, 0xa8, 0x43, 0x61, 0x15, 0x8a, 0xaa, 0x59, + 0xf3, 0x13, 0xc8, 0x68, 0x26, 0xd5, 0x49, 0xf7, 0xaf, 0xca, 0xc1, 0x6c, 0xd0, 0x6f, 0x9d, 0x8d, + 0xc2, 0x61, 0x57, 0xa1, 0xb8, 0x11, 0xf8, 0x4f, 0xf6, 0xaa, 0x2b, 0xe1, 0xfc, 0xe4, 0xb9, 0xc2, + 0x85, 0xb1, 0xa5, 0x53, 0x07, 0xfb, 0xe5, 0xd9, 0x8e, 0x80, 0x39, 0x5e, 0x43, 0x3f, 0x69, 0x63, + 0xc4, 0x5b, 0x43, 0xc5, 0x5c, 0x29, 0x7f, 0x6b, 0xa8, 0x98, 0x2f, 0x15, 0xa4, 0x78, 0x71, 0x6b, + 0xa8, 0x38, 0x54, 0x1a, 0xbe, 0x35, 0x54, 0x1c, 0x46, 0x81, 0x63, 0xac, 0x04, 0xb7, 0x86, 0x8a, + 0xe3, 0xa5, 0x09, 0xe3, 0xb4, 0x47, 0x06, 0x91, 0x5f, 0xf7, 0x9b, 0x76, 0xe1, 0x9e, 0x5d, 0xb5, + 0x47, 0x96, 0x2b, 0xcb, 0x3c, 0x88, 0xec, 0x42, 0xe5, 0x41, 0xcd, 0x9e, 0x5c, 0xd9, 0x6b, 0xbb, + 0x2d, 0xaf, 0x2e, 0x8f, 0x4e, 0xbb, 0x70, 0x63, 0x79, 0xc3, 0xaa, 0xc0, 0x54, 0xd2, 0x96, 0x35, + 0x2f, 0x8c, 0xd8, 0x65, 0x18, 0x53, 0x10, 0xb1, 0xd1, 0x15, 0x32, 0x5b, 0x6d, 0x27, 0x38, 0xd6, + 0x6f, 0xe7, 0x01, 0x92, 0x92, 0x67, 0x74, 0x2d, 0x7c, 0xd6, 0x58, 0x0b, 0x27, 0xd2, 0x6b, 0xa1, + 0xef, 0x2a, 0x60, 0xef, 0xc3, 0x88, 0x10, 0x0b, 0xba, 0x4a, 0x24, 0x3a, 0x95, 0x26, 0xc5, 0xc2, + 0xfb, 0x57, 0x97, 0xa6, 0x88, 0x78, 0x24, 0x44, 0x88, 0x4d, 0x64, 0xda, 0x32, 0xfa, 0xb9, 0xd1, + 0x64, 0x30, 0x68, 0x01, 0x5d, 0x80, 0x78, 0x40, 0xa9, 0x43, 0x71, 0x65, 0x74, 0xd4, 0x20, 0xc7, + 0xa5, 0xec, 0x34, 0x88, 0x01, 0xa7, 0x4e, 0x1d, 0x3d, 0xd8, 0x2f, 0x17, 0xba, 0x81, 0x87, 0x93, + 0x80, 0x5d, 0x06, 0x9a, 0x06, 0xd4, 0x81, 0x62, 0xf6, 0xcd, 0xd4, 0x5d, 0xa7, 0xce, 0x83, 0x28, + 0xe9, 0xf1, 0xf9, 0x9c, 0x9a, 0x2d, 0xac, 0x03, 0xe6, 0x54, 0x99, 0x1f, 0xc2, 0x69, 0x70, 0x21, + 0xb3, 0x57, 0x2e, 0x19, 0xa8, 0x52, 0x8c, 0x3c, 0xa7, 0x4e, 0xa5, 0x86, 0x2c, 0x73, 0x7a, 0x44, + 0x4a, 0xb3, 0x02, 0x76, 0x15, 0xc4, 0x0c, 0xa5, 0xde, 0x07, 0xaa, 0xa7, 0xf2, 0xa0, 0xb6, 0x74, + 0x82, 0x38, 0x4d, 0xba, 0x8f, 0x75, 0x72, 0x81, 0xcd, 0xde, 0x06, 0x31, 0x85, 0xa9, 0xdf, 0x19, + 0x11, 0xdd, 0x58, 0xde, 0x58, 0x6e, 0xfa, 0xdd, 0x46, 0xed, 0x8b, 0x6b, 0x09, 0xf1, 0x4e, 0xbd, + 0xa3, 0x13, 0xdf, 0x58, 0xde, 0x60, 0x6f, 0xc3, 0x70, 0xe5, 0x9b, 0xdd, 0x80, 0x93, 0x7c, 0x32, + 0xa1, 0xea, 0x14, 0xb0, 0xa5, 0x53, 0x44, 0x38, 0xed, 0x8a, 0x9f, 0xba, 0x5c, 0x87, 0xe5, 0xa2, + 0xe6, 0xcd, 0xb5, 0x1a, 0xc9, 0x1e, 0x2c, 0xd5, 0x2d, 0x9b, 0x6b, 0xda, 0x67, 0x47, 0x46, 0xab, + 0x05, 0x15, 0xbb, 0x0c, 0xf9, 0xca, 0x0a, 0xde, 0x88, 0xc6, 0x17, 0xc7, 0x54, 0xb5, 0x2b, 0x4b, + 0x73, 0x44, 0x32, 0xe1, 0xea, 0xcb, 0x20, 0x5f, 0x59, 0x61, 0x4b, 0x30, 0x7c, 0x67, 0xaf, 0xf6, + 0xc5, 0x35, 0xda, 0xcc, 0x66, 0xd5, 0xbc, 0x16, 0xb0, 0xbb, 0xb8, 0xec, 0xc3, 0xe4, 0x8b, 0x5b, + 0x7b, 0xe1, 0x37, 0x9a, 0xfa, 0x17, 0x23, 0x1a, 0xdb, 0x80, 0xb1, 0x4a, 0xa3, 0xe5, 0xb5, 0xef, + 0x85, 0x3c, 0x98, 0x1f, 0x47, 0x3e, 0xf3, 0xa9, 0xef, 0x8e, 0xcb, 0x97, 0xe6, 0x0f, 0xf6, 0xcb, + 0x73, 0xae, 0xf8, 0xe9, 0x74, 0x43, 0x1e, 0x68, 0xdc, 0x12, 0x26, 0x6c, 0x03, 0xe0, 0x8e, 0xdf, + 0xde, 0xf1, 0x2b, 0x51, 0xd3, 0x0d, 0x53, 0xdb, 0x63, 0x52, 0x10, 0x8b, 0x0f, 0x27, 0x5a, 0x02, + 0xe6, 0xb8, 0x02, 0xa8, 0x31, 0xd4, 0x78, 0xb0, 0xeb, 0x30, 0x72, 0x37, 0x70, 0xeb, 0x4d, 0x3e, + 0x3f, 0x89, 0xdc, 0xe6, 0x88, 0x9b, 0x04, 0xaa, 0x96, 0xce, 0x13, 0xc3, 0x92, 0x8f, 0x60, 0xfd, + 0x9a, 0x22, 0x11, 0x17, 0x1e, 0x00, 0xeb, 0x9d, 0x93, 0x19, 0x97, 0x84, 0x4f, 0xe9, 0x97, 0x84, + 0x64, 0xd1, 0x2f, 0xfb, 0xad, 0x96, 0xdb, 0x6e, 0x20, 0xed, 0xfd, 0x45, 0xed, 0xee, 0x60, 0x7d, + 0x03, 0x66, 0x7a, 0x3a, 0xeb, 0x88, 0xfb, 0xdd, 0x7b, 0x30, 0xbd, 0xc2, 0xb7, 0xdd, 0x6e, 0x33, + 0x8a, 0x4f, 0x12, 0xb9, 0x44, 0xf1, 0xa6, 0xd5, 0x90, 0x45, 0x8e, 0x3a, 0x3e, 0xec, 0x34, 0xb2, + 0xf5, 0x2e, 0x4c, 0x1a, 0xcd, 0x17, 0x57, 0x85, 0x4a, 0xb7, 0xe1, 0x45, 0x38, 0x90, 0xb9, 0xe4, + 0xaa, 0xe0, 0x0a, 0x20, 0x0e, 0x97, 0x9d, 0x20, 0x58, 0xff, 0xae, 0x2e, 0xad, 0xd0, 0x4e, 0x24, + 0xae, 0xd5, 0xb4, 0x1f, 0xe4, 0x12, 0xd9, 0xa9, 0x67, 0x3f, 0x88, 0x77, 0x83, 0x8b, 0x72, 0x6d, + 0xe6, 0x7b, 0xd6, 0xe6, 0x38, 0x8d, 0x44, 0xc1, 0x7d, 0x1c, 0xca, 0x15, 0x19, 0xcf, 0xd4, 0xc2, + 0x47, 0x9f, 0xa9, 0xef, 0xc3, 0xc4, 0x1d, 0xb7, 0xed, 0xee, 0xf0, 0x86, 0x68, 0x81, 0xdc, 0x7b, + 0xc6, 0x96, 0x9e, 0x3f, 0xd8, 0x2f, 0x9f, 0x6a, 0x49, 0x38, 0xb6, 0x52, 0x9f, 0x44, 0x06, 0x01, + 0xbb, 0xa2, 0x56, 0xf6, 0x70, 0xc6, 0xca, 0x9e, 0xa4, 0xda, 0x87, 0x71, 0x65, 0xd3, 0x7a, 0xb6, + 0x7e, 0x63, 0x0c, 0xdb, 0xc8, 0x5e, 0x87, 0x11, 0x9b, 0xef, 0x88, 0xa3, 0x26, 0x97, 0x0c, 0x52, + 0x80, 0x10, 0xbd, 0x63, 0x24, 0x0e, 0xca, 0x19, 0xbc, 0x11, 0xee, 0x7a, 0xdb, 0x11, 0xf5, 0x4e, + 0x2c, 0x67, 0x10, 0x58, 0x93, 0x33, 0x08, 0x62, 0x5e, 0x67, 0x25, 0x4c, 0xec, 0x7e, 0xf6, 0x4a, + 0x8d, 0x3a, 0x4d, 0xf5, 0xb0, 0xbd, 0xa2, 0x6d, 0x23, 0x81, 0x21, 0x25, 0x08, 0x6c, 0x76, 0x0d, + 0xc6, 0x2a, 0xf5, 0xba, 0xdf, 0xd5, 0xee, 0x8c, 0x72, 0xdd, 0x4a, 0xa0, 0xa9, 0x22, 0x49, 0x50, + 0x59, 0x0d, 0xc6, 0x57, 0xc5, 0x45, 0xcb, 0x5b, 0x76, 0xeb, 0xbb, 0xaa, 0x93, 0xd4, 0x1e, 0xa6, + 0x95, 0x24, 0x2b, 0x97, 0x23, 0xb0, 0x2e, 0x80, 0xba, 0x92, 0x41, 0xc3, 0x65, 0x9b, 0x30, 0x5e, + 0xe3, 0xf5, 0x80, 0x47, 0xb5, 0xc8, 0x0f, 0x78, 0x6a, 0x4b, 0xd6, 0x4a, 0x96, 0xce, 0xaa, 0xbb, + 0x5e, 0x88, 0x40, 0x27, 0x14, 0x50, 0x9d, 0xab, 0x86, 0x2c, 0x85, 0xf6, 0x96, 0x1f, 0xec, 0xad, + 0x2c, 0xd1, 0x36, 0x9d, 0x9c, 0xe9, 0x12, 0xac, 0x0b, 0xed, 0x02, 0xd2, 0xd8, 0x32, 0x85, 0x76, + 0x89, 0x85, 0x23, 0xb5, 0x52, 0x43, 0xd9, 0x8a, 0x36, 0xed, 0xe9, 0xa4, 0x97, 0x11, 0xac, 0x8d, + 0x54, 0x23, 0x44, 0xc9, 0xcc, 0x18, 0x29, 0xc2, 0x62, 0x1d, 0x60, 0x6a, 0xd4, 0xa4, 0xa0, 0xdb, + 0xe4, 0x61, 0x48, 0x7b, 0xf9, 0xe9, 0xd4, 0xe0, 0x27, 0x08, 0x4b, 0xaf, 0x10, 0xf3, 0x33, 0x6a, + 0x1a, 0xd0, 0x3d, 0x4d, 0x14, 0x6a, 0xf5, 0x64, 0xf0, 0x66, 0x6f, 0x01, 0xac, 0x3e, 0x89, 0x78, + 0xd0, 0x76, 0x9b, 0xb1, 0x1e, 0x0c, 0x55, 0x3f, 0x9c, 0xa0, 0xe6, 0x40, 0x6b, 0xc8, 0x6c, 0x19, + 0x26, 0x2b, 0x61, 0xd8, 0x6d, 0x71, 0xdb, 0x6f, 0xf2, 0x8a, 0xbd, 0x8e, 0xfb, 0xfe, 0xd8, 0xd2, + 0x99, 0x83, 0xfd, 0xf2, 0x69, 0x17, 0x0b, 0x9c, 0xc0, 0x6f, 0x72, 0xc7, 0x0d, 0xf4, 0xd9, 0x6d, + 0xd2, 0xb0, 0xbb, 0x00, 0x77, 0x3b, 0xbc, 0x5d, 0xe3, 0x6e, 0x50, 0xdf, 0x4d, 0x6d, 0xf3, 0x49, + 0xc1, 0xd2, 0x0b, 0xd4, 0xc2, 0x39, 0xbf, 0xc3, 0xdb, 0x21, 0xc2, 0xf4, 0xaf, 0x4a, 0x30, 0xd9, + 0x03, 0x98, 0xae, 0x56, 0xee, 0x6c, 0xf8, 0x4d, 0xaf, 0xbe, 0x47, 0x92, 0xd3, 0x14, 0x6a, 0x07, + 0x4f, 0x12, 0xd7, 0x54, 0xa9, 0xdc, 0x9e, 0x3c, 0xb7, 0xe5, 0x74, 0x10, 0xea, 0x90, 0xfc, 0x94, + 0xe6, 0xc2, 0x3e, 0x10, 0x73, 0x30, 0x14, 0xc2, 0xe0, 0xa6, 0xbb, 0x13, 0xce, 0x4f, 0x1b, 0xda, + 0xae, 0xca, 0x83, 0xda, 0x25, 0xad, 0x54, 0x8a, 0x29, 0x0b, 0x72, 0x22, 0x22, 0xd4, 0x89, 0xdc, + 0x9d, 0xd0, 0x9c, 0x88, 0x31, 0x36, 0xbb, 0x05, 0xb0, 0xe2, 0xd7, 0xbb, 0x2d, 0xde, 0x8e, 0x56, + 0x96, 0xe6, 0x4b, 0xe6, 0x55, 0x20, 0x2e, 0x48, 0xb6, 0xb6, 0x86, 0x5f, 0x37, 0x66, 0xa2, 0x46, + 0xbd, 0xf0, 0x1e, 0x94, 0xd2, 0x1f, 0x72, 0x4c, 0x05, 0xd6, 0x64, 0x69, 0x4a, 0x6b, 0xfd, 0xea, + 0x13, 0x2f, 0x8c, 0x42, 0xeb, 0x7b, 0x8d, 0x15, 0x28, 0x76, 0x87, 0xdb, 0x7c, 0x6f, 0x23, 0xe0, + 0xdb, 0xde, 0x13, 0xda, 0xcc, 0x70, 0x77, 0x78, 0xc8, 0xf7, 0x9c, 0x0e, 0x42, 0xf5, 0xdd, 0x21, + 0x46, 0x65, 0x9f, 0x81, 0xe2, 0xed, 0x3b, 0xb5, 0xdb, 0x7c, 0xaf, 0xba, 0x42, 0x07, 0x95, 0x24, + 0x6b, 0x85, 0x8e, 0x20, 0x35, 0xe6, 0x5a, 0x8c, 0x69, 0x2d, 0x25, 0x3b, 0xa1, 0xa8, 0x79, 0xb9, + 0xd9, 0x0d, 0x23, 0x1e, 0x54, 0x57, 0xf4, 0x9a, 0xeb, 0x12, 0x98, 0xda, 0x97, 0x62, 0x54, 0xeb, + 0x5f, 0xe6, 0x71, 0x17, 0x14, 0x13, 0xbe, 0xda, 0x0e, 0x23, 0xb7, 0x5d, 0xe7, 0x31, 0x03, 0x9c, + 0xf0, 0x1e, 0x41, 0x53, 0x13, 0x3e, 0x41, 0x36, 0xab, 0xce, 0x0f, 0x5c, 0xb5, 0xa8, 0x52, 0x69, + 0x2e, 0xaa, 0x2b, 0xba, 0x7a, 0x35, 0x20, 0x68, 0xaa, 0xca, 0x04, 0x99, 0x9d, 0x87, 0xd1, 0x6a, + 0xe5, 0x4e, 0xa5, 0x1b, 0xed, 0xe2, 0x1e, 0x5c, 0x94, 0xf2, 0xb9, 0x98, 0xad, 0x6e, 0x37, 0xda, + 0xb5, 0x55, 0x21, 0xbb, 0x8c, 0xf7, 0x9e, 0x36, 0x8f, 0xa4, 0x1a, 0x96, 0x0e, 0xdd, 0x50, 0x82, + 0x52, 0xd7, 0x1e, 0x01, 0x62, 0xaf, 0xc1, 0xf0, 0xfd, 0x8d, 0xe5, 0xea, 0x0a, 0x5d, 0x9c, 0xf1, + 0x24, 0x7a, 0xd4, 0xa9, 0x9b, 0x5f, 0x22, 0x51, 0xd8, 0x2a, 0x4c, 0xd5, 0x78, 0xbd, 0x1b, 0x78, + 0xd1, 0xde, 0x8d, 0xc0, 0xef, 0x76, 0xc2, 0xf9, 0x51, 0xac, 0x03, 0x57, 0x7a, 0x48, 0x25, 0xce, + 0x0e, 0x16, 0x69, 0xd4, 0x29, 0x22, 0xeb, 0x37, 0x73, 0xc9, 0x36, 0xc9, 0xce, 0x1b, 0x62, 0x0d, + 0xea, 0x6e, 0x84, 0x58, 0xa3, 0xeb, 0x6e, 0x50, 0xc0, 0xb1, 0x81, 0x2d, 0x77, 0xc3, 0xc8, 0x6f, + 0xad, 0xb6, 0x1b, 0x1d, 0xdf, 0x6b, 0x47, 0x48, 0x25, 0x3b, 0xdf, 0x3a, 0xd8, 0x2f, 0x9f, 0xad, + 0x63, 0xa9, 0xc3, 0xa9, 0xd8, 0x49, 0x71, 0xc9, 0xa0, 0xfe, 0x18, 0xe3, 0x61, 0xfd, 0x6e, 0xde, + 0x38, 0xde, 0xc4, 0xe7, 0xd9, 0xbc, 0xd3, 0xf4, 0xea, 0x78, 0xa3, 0xc7, 0x86, 0xc6, 0xb3, 0x0a, + 0x3f, 0x2f, 0x48, 0x4a, 0x65, 0x0f, 0x99, 0xbc, 0x33, 0xa8, 0xd9, 0x17, 0x60, 0x42, 0x48, 0x1a, + 0xf4, 0x33, 0x9c, 0xcf, 0x63, 0x67, 0xbf, 0x80, 0x5a, 0xb8, 0x90, 0x07, 0x31, 0x1b, 0x43, 0x44, + 0xd1, 0x29, 0x58, 0x03, 0xe6, 0x37, 0x03, 0xb7, 0x1d, 0x7a, 0xd1, 0x6a, 0xbb, 0x1e, 0xec, 0xa1, + 0x64, 0xb4, 0xda, 0x76, 0xb7, 0x9a, 0xbc, 0x81, 0xcd, 0x2d, 0x2e, 0x5d, 0x38, 0xd8, 0x2f, 0xbf, + 0x1c, 0x49, 0x1c, 0x87, 0xc7, 0x48, 0x0e, 0x97, 0x58, 0x1a, 0xe7, 0xbe, 0x9c, 0x84, 0x24, 0xa5, + 0xba, 0x15, 0x1f, 0x61, 0xa4, 0x90, 0x80, 0x92, 0x54, 0x3c, 0x1a, 0x62, 0x0f, 0xd3, 0x3f, 0x53, + 0x27, 0xb0, 0xfe, 0xef, 0x5c, 0x72, 0x00, 0xb3, 0x77, 0x60, 0x9c, 0x56, 0x8c, 0x36, 0x2f, 0x70, + 0x07, 0x55, 0xcb, 0x2b, 0x35, 0xb2, 0x3a, 0xba, 0xb8, 0xf7, 0x57, 0x96, 0xd7, 0xb4, 0xb9, 0x81, + 0xf7, 0x7e, 0xb7, 0xde, 0x4c, 0x53, 0x29, 0x34, 0x31, 0x09, 0x36, 0xd7, 0x6a, 0x66, 0xaf, 0xe0, + 0x24, 0x88, 0x9a, 0x61, 0x46, 0x37, 0x68, 0xc8, 0x1f, 0xbf, 0xe1, 0xff, 0x7d, 0x2e, 0xeb, 0x9c, + 0x67, 0x4b, 0x30, 0xf9, 0xc0, 0x0f, 0x1e, 0xe2, 0xf8, 0x6a, 0x9d, 0x80, 0x23, 0xff, 0x58, 0x15, + 0xa4, 0x1b, 0x64, 0x92, 0xe8, 0xdf, 0xa6, 0xf5, 0x86, 0xf9, 0x6d, 0x29, 0x0e, 0x06, 0x81, 0x18, + 0x87, 0x98, 0x63, 0xbc, 0x3a, 0x70, 0x1c, 0x92, 0x4f, 0x30, 0xa6, 0xb0, 0x8e, 0x6e, 0xfd, 0x17, + 0x39, 0xfd, 0x3c, 0x17, 0x9d, 0xbc, 0xe2, 0xb7, 0x5c, 0xaf, 0xad, 0x35, 0x47, 0x3e, 0x2c, 0x21, + 0x34, 0xfd, 0x25, 0x1a, 0x32, 0xbb, 0x0a, 0x45, 0xf9, 0x2b, 0xde, 0x6b, 0x51, 0xab, 0x45, 0x84, + 0xe6, 0x41, 0xa1, 0x10, 0x7b, 0x46, 0xa6, 0x70, 0xdc, 0x91, 0xf9, 0x8d, 0x9c, 0x7e, 0x14, 0x7f, + 0xd4, 0xc3, 0x26, 0x75, 0xc8, 0xe4, 0x8f, 0x73, 0xc8, 0x7c, 0xec, 0x26, 0x7c, 0x5f, 0x0e, 0xc6, + 0x35, 0x2d, 0x85, 0x68, 0xc3, 0x46, 0xe0, 0x7f, 0xc8, 0xeb, 0x91, 0xd9, 0x86, 0x8e, 0x04, 0xa6, + 0xda, 0x10, 0xa3, 0x7e, 0x8c, 0x36, 0x58, 0x7f, 0x96, 0xa3, 0x3b, 0xd2, 0xc0, 0xdb, 0xbc, 0xb9, + 0x25, 0xe7, 0x8f, 0x73, 0x44, 0x7e, 0x01, 0x86, 0x6d, 0xde, 0xf0, 0x42, 0xba, 0xdf, 0xcc, 0xe8, + 0xf7, 0x31, 0x2c, 0x48, 0xe4, 0xa6, 0x40, 0xfc, 0xd4, 0xcf, 0x37, 0x2c, 0x17, 0x82, 0x6c, 0x35, + 0xbc, 0xde, 0xe4, 0x4f, 0x3c, 0xb9, 0x18, 0xe9, 0xa8, 0xc5, 0xe3, 0xcd, 0x0b, 0x9d, 0x6d, 0x51, + 0x42, 0x12, 0xb5, 0xbe, 0xf0, 0x0c, 0x1a, 0xeb, 0x03, 0x80, 0xa4, 0x4a, 0x76, 0x1b, 0x4a, 0x34, + 0x1b, 0xbc, 0xf6, 0x8e, 0x14, 0xa4, 0xa8, 0x0f, 0xca, 0x07, 0xfb, 0xe5, 0xe7, 0xeb, 0x71, 0x19, + 0x49, 0x9d, 0x1a, 0xdf, 0x1e, 0x42, 0xeb, 0xdf, 0xcf, 0x43, 0xbe, 0x82, 0x03, 0x72, 0x9b, 0xef, + 0x45, 0xee, 0xd6, 0x75, 0xaf, 0x69, 0x2c, 0xa6, 0x87, 0x08, 0x75, 0xb6, 0x3d, 0x43, 0x5d, 0xa1, + 0x21, 0x8b, 0xc5, 0x74, 0x3b, 0xd8, 0x7a, 0x13, 0x09, 0xb5, 0xc5, 0xf4, 0x30, 0xd8, 0x7a, 0x33, + 0x4d, 0x16, 0x23, 0x32, 0x0b, 0x46, 0xe4, 0xc2, 0xa2, 0x39, 0x08, 0x07, 0xfb, 0xe5, 0x11, 0xb9, + 0xfe, 0x6c, 0x2a, 0x61, 0xa7, 0xa1, 0x50, 0xdb, 0x58, 0xa7, 0x1d, 0x10, 0xd5, 0x82, 0x61, 0xa7, + 0x6d, 0x0b, 0x98, 0xa8, 0x73, 0x6d, 0xa5, 0xb2, 0x81, 0x8a, 0x80, 0xe1, 0xa4, 0xce, 0x66, 0xc3, + 0xed, 0xa4, 0x55, 0x01, 0x31, 0x22, 0x7b, 0x17, 0xc6, 0x6f, 0xaf, 0x2c, 0xdf, 0xf4, 0x43, 0xb9, + 0x7b, 0x8d, 0x24, 0x93, 0xff, 0x61, 0xa3, 0xee, 0xa0, 0x26, 0x3e, 0x7d, 0x0c, 0x68, 0xf8, 0xd6, + 0x0f, 0xe6, 0x61, 0x5c, 0xd3, 0x93, 0xb1, 0xcf, 0xd0, 0x03, 0x69, 0xce, 0xb8, 0x01, 0x68, 0x18, + 0xa2, 0x54, 0x2a, 0x55, 0x5a, 0x7e, 0x83, 0xd3, 0x73, 0x69, 0xa2, 0xc0, 0xc8, 0x0f, 0xa2, 0xc0, + 0x78, 0x0b, 0x40, 0xce, 0x01, 0xfc, 0x64, 0x4d, 0x9c, 0xd0, 0xec, 0x24, 0xf4, 0x71, 0x49, 0x90, + 0xd9, 0x7d, 0x98, 0xdd, 0x0c, 0xba, 0x61, 0x54, 0xdb, 0x0b, 0x23, 0xde, 0x12, 0xdc, 0x36, 0x7c, + 0xbf, 0x49, 0xf3, 0xef, 0xe5, 0x83, 0xfd, 0xf2, 0xb9, 0x48, 0x14, 0x3b, 0x21, 0x96, 0xe3, 0x07, + 0x38, 0x1d, 0xdf, 0xd7, 0xd5, 0x1a, 0x59, 0x0c, 0x2c, 0x1b, 0x26, 0x74, 0xa5, 0x88, 0x38, 0x59, + 0xe8, 0x31, 0x89, 0x54, 0xdd, 0xda, 0xc9, 0x42, 0x5f, 0xd9, 0xfb, 0xb8, 0x65, 0x92, 0x58, 0x9f, + 0xd1, 0x15, 0x72, 0x83, 0x2e, 0x6c, 0xeb, 0x6f, 0xe6, 0x92, 0x6d, 0xe4, 0xfe, 0x15, 0xf6, 0x36, + 0x8c, 0xc8, 0xc7, 0x3b, 0x7a, 0xe3, 0x3c, 0x11, 0x5f, 0x6a, 0xf5, 0x97, 0x3d, 0xa9, 0x09, 0xff, + 0x7d, 0xf9, 0xc0, 0xff, 0x9c, 0x4d, 0x24, 0xb1, 0x12, 0xdd, 0xd4, 0xa7, 0x29, 0xee, 0xa8, 0x2e, + 0xbe, 0x92, 0xa5, 0x44, 0xb7, 0x7e, 0x6b, 0x08, 0xa6, 0x4c, 0x34, 0xfd, 0x85, 0x2f, 0x37, 0xd0, + 0x0b, 0xdf, 0x17, 0xa0, 0x28, 0xfa, 0xc3, 0xab, 0x73, 0x25, 0x91, 0xbd, 0x8c, 0x4f, 0x0b, 0x04, + 0x33, 0x5e, 0xae, 0x41, 0x0e, 0x87, 0xb8, 0xe3, 0xda, 0x31, 0x15, 0x5b, 0xd4, 0x9e, 0xa1, 0x0a, + 0x89, 0x90, 0xa2, 0x9e, 0xa1, 0xf4, 0xf5, 0x10, 0x3f, 0x48, 0xbd, 0x01, 0x23, 0x42, 0xbe, 0x8f, + 0x55, 0x30, 0xf8, 0x95, 0x42, 0xf4, 0x4f, 0x99, 0xa8, 0x48, 0x24, 0xf6, 0x00, 0x8a, 0x6b, 0x6e, + 0x18, 0xd5, 0x38, 0x6f, 0x0f, 0xf0, 0x76, 0x5f, 0xa6, 0xae, 0x9a, 0xc5, 0x87, 0xf1, 0x90, 0xf3, + 0x76, 0xea, 0xf1, 0x35, 0x66, 0xc6, 0xbe, 0x0a, 0xb0, 0xec, 0xb7, 0xa3, 0xc0, 0x6f, 0xae, 0xf9, + 0x3b, 0xf3, 0x23, 0x78, 0xf7, 0x3d, 0x9b, 0x1a, 0x80, 0x04, 0x41, 0x5e, 0x7f, 0x63, 0x05, 0x4f, + 0x5d, 0x16, 0x38, 0x4d, 0x7f, 0x47, 0x5f, 0x07, 0x09, 0x3e, 0xbb, 0x0e, 0x25, 0xa5, 0x58, 0xb8, + 0xd7, 0xd9, 0x09, 0x70, 0x82, 0x8c, 0x26, 0x92, 0x07, 0x7f, 0x12, 0x39, 0x5d, 0x82, 0xeb, 0x3b, + 0x65, 0x9a, 0x86, 0x7d, 0x05, 0x4e, 0xa5, 0x61, 0x6a, 0x94, 0x8b, 0x89, 0x4c, 0xae, 0xb3, 0xcb, + 0x98, 0xf7, 0xfd, 0x58, 0x58, 0xdf, 0xc9, 0xc3, 0xa9, 0x3e, 0x8d, 0x15, 0xeb, 0x01, 0x8f, 0x6b, + 0x6d, 0x3d, 0xa4, 0x4e, 0x69, 0x69, 0x73, 0x74, 0x0e, 0xf2, 0x74, 0xc0, 0x0d, 0x2d, 0x95, 0x0e, + 0xf6, 0xcb, 0x13, 0xc6, 0x38, 0xe6, 0xab, 0x2b, 0xec, 0x16, 0x0c, 0x89, 0x21, 0x1a, 0xe0, 0xe9, + 0x5c, 0xe9, 0x94, 0xa6, 0x22, 0x4f, 0x9f, 0x3e, 0x38, 0x74, 0xc8, 0x83, 0x7d, 0x06, 0x0a, 0x9b, + 0x9b, 0x6b, 0x38, 0x77, 0x0a, 0xd8, 0xf6, 0xc9, 0x28, 0x6a, 0x1a, 0x53, 0x75, 0x52, 0xd0, 0x5e, + 0x8a, 0x2d, 0x2d, 0x04, 0x3a, 0xfb, 0x52, 0xca, 0xa4, 0xe7, 0xb5, 0xc3, 0x07, 0x7a, 0x70, 0x0b, + 0x9f, 0x8f, 0x61, 0x58, 0x63, 0xfd, 0x6c, 0x3e, 0x59, 0xc3, 0xd7, 0xbd, 0x66, 0xc4, 0x03, 0xb6, + 0x20, 0x97, 0x64, 0x22, 0x9c, 0xd9, 0xf1, 0x6f, 0x36, 0x9f, 0xac, 0x6f, 0xc9, 0x2a, 0x5e, 0xc8, + 0xaf, 0x69, 0x0b, 0xb9, 0x80, 0x0b, 0x79, 0xaa, 0xef, 0x92, 0x7d, 0x2d, 0x63, 0x5e, 0xe2, 0x42, + 0xcc, 0x98, 0x7b, 0x2f, 0xc3, 0xe4, 0xba, 0xbf, 0xfa, 0x24, 0x8a, 0x11, 0xc5, 0x02, 0x2c, 0xda, + 0x26, 0x50, 0x70, 0xbc, 0xdb, 0x6c, 0xf0, 0x60, 0x73, 0xd7, 0x6d, 0x1b, 0x6f, 0xd7, 0x76, 0x0f, + 0x5c, 0xe0, 0xae, 0xf3, 0xc7, 0x26, 0xee, 0xa8, 0xc4, 0x4d, 0xc3, 0xad, 0xef, 0xcf, 0xab, 0xce, + 0xb8, 0xbf, 0xf8, 0x8c, 0xbe, 0x91, 0xbe, 0x69, 0xbc, 0x91, 0xce, 0xc6, 0xda, 0xdd, 0xf8, 0xc1, + 0x7f, 0xf1, 0x08, 0x3b, 0x81, 0xff, 0x61, 0x18, 0x26, 0x74, 0x74, 0xd1, 0x0f, 0x95, 0x46, 0x23, + 0xd0, 0xfb, 0xc1, 0x6d, 0x34, 0x02, 0x1b, 0xa1, 0x86, 0x59, 0x40, 0xe1, 0x50, 0xb3, 0x80, 0xaf, + 0xc1, 0xd8, 0x72, 0xab, 0x61, 0x3c, 0x56, 0x5a, 0x19, 0x9f, 0x77, 0x29, 0x46, 0x92, 0x6b, 0x21, + 0x56, 0x5a, 0xd6, 0x5b, 0x8d, 0xde, 0x27, 0xca, 0x84, 0xa5, 0x61, 0x51, 0x30, 0xfc, 0x71, 0x2c, + 0x0a, 0xae, 0xc1, 0xd8, 0xbd, 0x90, 0x6f, 0x76, 0xdb, 0x6d, 0xde, 0xc4, 0x69, 0x55, 0x94, 0xb2, + 0x7e, 0x37, 0xe4, 0x4e, 0x84, 0x50, 0xfd, 0x03, 0x62, 0x54, 0x7d, 0x80, 0x47, 0x0f, 0x19, 0xe0, + 0xab, 0x50, 0xdc, 0xe0, 0x3c, 0xc0, 0x3e, 0x1d, 0x4f, 0x44, 0xba, 0x0e, 0xe7, 0x81, 0x23, 0x3a, + 0xd6, 0xb0, 0x34, 0x20, 0x44, 0xc3, 0x3c, 0x61, 0x62, 0x40, 0xf3, 0x04, 0xf6, 0x22, 0x4c, 0x74, + 0xba, 0x5b, 0x4d, 0xaf, 0x8e, 0x7c, 0xc9, 0xae, 0xc1, 0x1e, 0x97, 0x30, 0xc1, 0x36, 0x64, 0x5f, + 0x82, 0x49, 0xbc, 0xe3, 0xc4, 0x53, 0x6e, 0xca, 0x78, 0xd5, 0x33, 0xca, 0xa4, 0xa4, 0x53, 0x17, + 0x20, 0x27, 0xc3, 0xfc, 0xc6, 0x64, 0xb4, 0x50, 0x83, 0x29, 0x73, 0x24, 0x9f, 0xc2, 0xe3, 0x5e, + 0x6c, 0x6a, 0x51, 0x2c, 0x8d, 0xdd, 0x1a, 0x2a, 0x42, 0x69, 0x5c, 0x1a, 0x59, 0xd8, 0xb0, 0x11, + 0xb7, 0xc9, 0x66, 0xb7, 0xbb, 0x5b, 0x3c, 0x68, 0xf3, 0x88, 0x87, 0x74, 0x09, 0x08, 0xed, 0xa1, + 0x4a, 0xa7, 0x13, 0x5a, 0xff, 0x71, 0x1e, 0x46, 0x2b, 0x0f, 0x6a, 0xd5, 0xf6, 0xb6, 0x8f, 0x4f, + 0x74, 0xf1, 0xcb, 0x8c, 0xfe, 0x44, 0x17, 0xbf, 0xcc, 0xe8, 0xef, 0x31, 0x97, 0x33, 0xae, 0x71, + 0x68, 0xc5, 0xab, 0x5d, 0xe3, 0x8c, 0x0b, 0x68, 0xf2, 0x48, 0x55, 0x18, 0xe0, 0x91, 0x2a, 0xd6, + 0x23, 0x0e, 0x1d, 0xad, 0x47, 0x7c, 0x1b, 0xc6, 0xab, 0xed, 0x88, 0xef, 0x04, 0xc9, 0x4c, 0x8f, + 0xaf, 0x94, 0x31, 0x58, 0x17, 0xed, 0x35, 0x6c, 0x31, 0x8d, 0xa4, 0xee, 0x32, 0xd6, 0x59, 0xe2, + 0x34, 0x92, 0x2a, 0xce, 0x94, 0x3e, 0x40, 0x21, 0x5a, 0x2b, 0xa9, 0x39, 0xa2, 0x0c, 0x01, 0xa4, + 0xf0, 0x39, 0x95, 0x28, 0xef, 0x45, 0xc7, 0x2e, 0xcd, 0x64, 0x1b, 0x02, 0x58, 0x3f, 0x94, 0x87, + 0xf1, 0x4a, 0xa7, 0xf3, 0x8c, 0x9b, 0x63, 0x7d, 0xce, 0xd8, 0x5e, 0xd5, 0x5d, 0x28, 0x6e, 0xd7, + 0x40, 0x96, 0x58, 0xbf, 0x94, 0x87, 0xe9, 0x14, 0x85, 0xfe, 0xf5, 0xb9, 0x01, 0x8d, 0xb0, 0xf2, + 0x03, 0x1a, 0x61, 0x15, 0x06, 0x33, 0xc2, 0x1a, 0xfa, 0x38, 0x5b, 0xe6, 0xab, 0x50, 0xa8, 0x74, + 0x3a, 0xe9, 0xc7, 0xdc, 0x4e, 0xe7, 0xfe, 0x55, 0x79, 0x9f, 0x75, 0x3b, 0x1d, 0x5b, 0x60, 0x18, + 0xfb, 0xd8, 0xc8, 0x80, 0xfb, 0x98, 0xf5, 0x06, 0x8c, 0x21, 0x2f, 0x34, 0x7d, 0x3a, 0x07, 0xb8, + 0x98, 0xc9, 0xea, 0xc9, 0xa8, 0x8b, 0x96, 0xf9, 0x3f, 0xcf, 0xc1, 0x30, 0xfe, 0x7e, 0x46, 0xe7, + 0xd8, 0xa2, 0x31, 0xc7, 0x4a, 0xda, 0x1c, 0x1b, 0x64, 0x76, 0xfd, 0xc3, 0x02, 0xc0, 0xf2, 0x5d, + 0xbb, 0x26, 0xd5, 0x1e, 0xec, 0x3a, 0x4c, 0xbb, 0xcd, 0xa6, 0xff, 0x98, 0x37, 0x1c, 0x3f, 0xf0, + 0x76, 0xbc, 0xb6, 0xec, 0x39, 0xf5, 0xc2, 0x68, 0x16, 0xe9, 0xef, 0x0e, 0x54, 0x74, 0x57, 0x96, + 0xe8, 0x7c, 0x5a, 0x3c, 0xda, 0xf5, 0x1b, 0xea, 0x02, 0x67, 0xf0, 0xa1, 0xa2, 0x0c, 0x3e, 0x77, + 0x64, 0x89, 0xce, 0x67, 0x17, 0x2f, 0xa4, 0x4a, 0x7e, 0x34, 0xf8, 0x50, 0x51, 0x06, 0x1f, 0x79, + 0x8b, 0x0d, 0xd9, 0x1a, 0xcc, 0x20, 0xc4, 0xa9, 0x07, 0xbc, 0xc1, 0xdb, 0x91, 0xe7, 0x36, 0x43, + 0xba, 0xf2, 0xa3, 0x72, 0xa8, 0xa7, 0x50, 0xbf, 0xf2, 0x60, 0xe1, 0x72, 0x52, 0xc6, 0x2e, 0xc1, + 0x68, 0xcb, 0x7d, 0xe2, 0xb8, 0x3b, 0xf2, 0xad, 0x7d, 0x52, 0x5e, 0x11, 0x09, 0xa4, 0x6f, 0xd8, + 0x2d, 0xf7, 0x49, 0x65, 0x87, 0x8b, 0x56, 0xf0, 0x27, 0x1d, 0x3f, 0xd4, 0x5a, 0x31, 0x92, 0xb4, + 0x22, 0x55, 0xa4, 0xb7, 0x82, 0x8a, 0xa8, 0x15, 0xd6, 0xff, 0x33, 0x8c, 0x53, 0x9b, 0x36, 0x01, + 0x32, 0x0f, 0xcb, 0x65, 0x98, 0x87, 0xbd, 0x05, 0xda, 0x11, 0xa7, 0xab, 0xf6, 0xb4, 0x03, 0x5e, + 0xbf, 0x16, 0x26, 0xc8, 0xec, 0x61, 0xda, 0x50, 0xac, 0x80, 0x2b, 0xe7, 0xa5, 0xf4, 0xbc, 0x7a, + 0x2a, 0x36, 0x62, 0x37, 0x81, 0x55, 0xdb, 0xf8, 0x9a, 0xc5, 0x6b, 0x0f, 0xbd, 0xce, 0x7d, 0x1e, + 0x78, 0xdb, 0x7b, 0x34, 0x2e, 0x28, 0x44, 0x79, 0x54, 0xea, 0x84, 0x0f, 0xbd, 0x8e, 0xb8, 0x37, + 0x7a, 0xdb, 0x7b, 0x76, 0x06, 0x0d, 0x7b, 0x1f, 0x46, 0x6d, 0xfe, 0x38, 0xf0, 0x22, 0x65, 0xfe, + 0x30, 0x15, 0x6b, 0x39, 0x10, 0x2a, 0x87, 0x28, 0x90, 0x3f, 0xf4, 0xc5, 0x4a, 0xe5, 0x6c, 0x51, + 0x9e, 0x52, 0xd2, 0xcc, 0x61, 0x32, 0x69, 0x6d, 0xe5, 0x41, 0xad, 0xdf, 0x21, 0xc5, 0x2e, 0xc2, + 0x30, 0x1e, 0x75, 0x24, 0xc0, 0xa1, 0xdb, 0x00, 0x0a, 0x3c, 0xfa, 0x39, 0x8c, 0x18, 0xec, 0x2c, + 0x40, 0xfc, 0x5c, 0x14, 0xce, 0x17, 0x51, 0xb4, 0xd2, 0x20, 0xe9, 0x73, 0x7a, 0xec, 0x58, 0xe7, + 0xf4, 0x1a, 0x94, 0x6c, 0xfe, 0x8d, 0xae, 0x17, 0xf0, 0x46, 0xa5, 0x83, 0x6f, 0x12, 0xe1, 0x3c, + 0xe0, 0x04, 0x3b, 0x77, 0xb0, 0x5f, 0x7e, 0x21, 0xa0, 0x32, 0xc7, 0xed, 0xc8, 0xa7, 0x0c, 0x63, + 0x76, 0xa7, 0x29, 0xd9, 0x5b, 0x30, 0x24, 0x76, 0x04, 0x32, 0x29, 0x53, 0xba, 0xdd, 0x64, 0x93, + 0x90, 0x37, 0xed, 0xba, 0x6f, 0x4c, 0x55, 0x24, 0xf9, 0xee, 0x99, 0x69, 0xfd, 0x52, 0x1e, 0x5e, + 0x8a, 0x0f, 0xc1, 0xbb, 0x41, 0xad, 0x72, 0x67, 0xad, 0xda, 0xd8, 0xa0, 0x3b, 0xe3, 0x46, 0xe0, + 0x3f, 0xf2, 0x1a, 0x3c, 0xb8, 0x7f, 0xe5, 0x88, 0x2d, 0x7c, 0x4d, 0x2e, 0x1f, 0xa9, 0x70, 0xce, + 0x1b, 0x06, 0x2d, 0x9a, 0xac, 0x41, 0x36, 0x37, 0x9d, 0x4e, 0x8f, 0xfe, 0xf9, 0xe6, 0x73, 0x76, + 0xc2, 0x80, 0xfd, 0xcd, 0x1c, 0x9c, 0xcc, 0xfe, 0x10, 0xd2, 0x23, 0x94, 0xd5, 0x7d, 0xa5, 0xcf, + 0xd7, 0x2e, 0xbd, 0x7a, 0xb0, 0x5f, 0x7e, 0x29, 0x74, 0x5b, 0x4d, 0xc7, 0x6b, 0xc8, 0xda, 0xbc, + 0x3a, 0x77, 0x3a, 0x84, 0x60, 0xd4, 0xdb, 0xa7, 0xa6, 0xcf, 0x83, 0xda, 0xc9, 0xe7, 0x73, 0x4b, + 0x00, 0x45, 0xa5, 0xd3, 0xb3, 0x7e, 0x35, 0x07, 0xda, 0xd4, 0x2e, 0xda, 0xbc, 0xe1, 0x05, 0xbc, + 0x1e, 0xd1, 0x6e, 0x4e, 0xee, 0x38, 0x12, 0x96, 0xb2, 0x5f, 0x42, 0x18, 0x7b, 0x0f, 0x46, 0x69, + 0xd7, 0xc1, 0x8d, 0x3b, 0x59, 0x12, 0xa4, 0x2d, 0x94, 0x7e, 0x5b, 0x3d, 0x3b, 0x96, 0x22, 0x12, + 0xb7, 0xa2, 0x5b, 0x0f, 0x36, 0x97, 0x9b, 0xae, 0xd7, 0x0a, 0xe9, 0xf4, 0xc3, 0x6e, 0xfd, 0xf0, + 0x71, 0xe4, 0xd4, 0x11, 0xaa, 0xdf, 0x8a, 0x62, 0x54, 0xeb, 0x86, 0x52, 0x56, 0x1e, 0x61, 0x84, + 0x57, 0x86, 0xe1, 0xfb, 0x89, 0xd2, 0x62, 0x69, 0xec, 0x60, 0xbf, 0x2c, 0xa7, 0x8b, 0x2d, 0xe1, + 0xd6, 0x8f, 0xe4, 0x60, 0xca, 0x9c, 0x4f, 0xec, 0x12, 0x8c, 0x90, 0x2b, 0x4c, 0x0e, 0x95, 0x33, + 0xa2, 0x17, 0x46, 0xa4, 0x13, 0x8c, 0xe1, 0xfa, 0x42, 0x58, 0xe2, 0xfc, 0x26, 0x0e, 0x74, 0x78, + 0xe1, 0xf9, 0x5d, 0x97, 0x20, 0x5b, 0x95, 0x31, 0x4b, 0x08, 0xef, 0x61, 0xb7, 0x19, 0xe9, 0x3a, + 0xfb, 0x00, 0x21, 0x36, 0x95, 0x58, 0xcb, 0x30, 0x22, 0xf7, 0x92, 0x94, 0xf1, 0x4f, 0xee, 0x18, + 0xc6, 0x3f, 0xd6, 0x7e, 0x0e, 0xa0, 0x56, 0xbb, 0x79, 0x9b, 0xef, 0x6d, 0xb8, 0x5e, 0x80, 0x8f, + 0x4c, 0xb8, 0x6f, 0xdf, 0xa6, 0xc5, 0x35, 0x41, 0x8f, 0x4c, 0x72, 0x8f, 0x7f, 0xc8, 0xf7, 0x8c, + 0x47, 0x26, 0x85, 0x8a, 0x87, 0x43, 0xe0, 0x3d, 0x72, 0x23, 0x2e, 0x08, 0xf3, 0x48, 0x28, 0x0f, + 0x07, 0x09, 0x4d, 0x51, 0x6a, 0xc8, 0xec, 0xab, 0x30, 0x95, 0xfc, 0x8a, 0x9f, 0xca, 0xa6, 0xe2, + 0x05, 0x6c, 0x16, 0x2e, 0x9d, 0x3d, 0xd8, 0x2f, 0x2f, 0x68, 0x5c, 0xd3, 0x8f, 0x68, 0x29, 0x66, + 0xd6, 0x2f, 0xe4, 0xf0, 0x81, 0x58, 0x35, 0xf0, 0x3c, 0x0c, 0xc5, 0x26, 0x8d, 0x13, 0xb4, 0xeb, + 0x98, 0xcf, 0x01, 0x58, 0xce, 0x5e, 0x82, 0x42, 0xd2, 0x12, 0xdc, 0xab, 0xcd, 0x16, 0x88, 0x52, + 0x76, 0x03, 0x46, 0x07, 0xfa, 0x66, 0x5c, 0x1a, 0x19, 0xdf, 0xaa, 0xa8, 0x71, 0x14, 0x6e, 0x3d, + 0xd8, 0xfc, 0xe4, 0x8e, 0xc2, 0x8f, 0xe7, 0x61, 0x5a, 0xf4, 0x6b, 0xa5, 0x1b, 0xed, 0xfa, 0x81, + 0x17, 0xed, 0x3d, 0xb3, 0xda, 0xad, 0x77, 0x0c, 0xd1, 0x78, 0x41, 0x9d, 0x32, 0x7a, 0xdb, 0x06, + 0x52, 0x72, 0xfd, 0x57, 0xc3, 0x30, 0x9b, 0x41, 0xc5, 0x5e, 0x37, 0x14, 0xd0, 0xf3, 0xca, 0xd5, + 0xf5, 0x3b, 0xfb, 0xe5, 0x09, 0x85, 0xbe, 0x99, 0xb8, 0xbe, 0x2e, 0x9a, 0xd6, 0x16, 0xb2, 0xa7, + 0x50, 0x1f, 0xad, 0x5b, 0x5b, 0x98, 0x36, 0x16, 0x17, 0x61, 0xd8, 0xf6, 0x9b, 0x5c, 0x59, 0x18, + 0xa1, 0x84, 0x11, 0x08, 0x80, 0xf1, 0xa2, 0x2a, 0x00, 0xec, 0x26, 0x8c, 0x8a, 0x3f, 0xee, 0xb8, + 0x1d, 0x7a, 0x2b, 0x60, 0xf1, 0xe5, 0x0c, 0xa1, 0x1d, 0xaf, 0xbd, 0xa3, 0xdf, 0xcf, 0x9a, 0xdc, + 0x69, 0xb9, 0x1d, 0x43, 0x14, 0x92, 0x88, 0xc6, 0x3d, 0xaf, 0xd8, 0xff, 0x9e, 0x97, 0x3b, 0xf2, + 0x9e, 0xb7, 0x0d, 0x50, 0xf3, 0x76, 0xda, 0x5e, 0x7b, 0xa7, 0xd2, 0xdc, 0x21, 0x87, 0xe1, 0x8b, + 0xfd, 0x47, 0xe1, 0x52, 0x82, 0x8c, 0x13, 0xf7, 0x79, 0x7c, 0xd0, 0x93, 0x30, 0xc7, 0x6d, 0xee, + 0x18, 0x8e, 0x0d, 0x1a, 0x67, 0xb6, 0x0e, 0x50, 0xa9, 0x47, 0xde, 0x23, 0x31, 0x85, 0x43, 0x92, + 0x5b, 0xd4, 0x27, 0x2f, 0x57, 0x6e, 0xf3, 0xbd, 0x1a, 0x8f, 0x92, 0xa7, 0x11, 0x17, 0x51, 0xc5, + 0x4a, 0x30, 0xac, 0xd6, 0x13, 0x0e, 0xac, 0x03, 0x27, 0x2a, 0x8d, 0x86, 0x27, 0xda, 0xe0, 0x36, + 0xf1, 0xad, 0x8f, 0x37, 0x90, 0xf5, 0x44, 0x36, 0xeb, 0x8b, 0xc4, 0xfa, 0x45, 0x37, 0xa6, 0x72, + 0x22, 0x49, 0x96, 0xae, 0x26, 0x9b, 0xb1, 0x55, 0x83, 0x29, 0xb3, 0xf1, 0xa6, 0xa3, 0xf3, 0x04, + 0x14, 0xed, 0x5a, 0xc5, 0xa9, 0xdd, 0xac, 0x5c, 0x29, 0xe5, 0x58, 0x09, 0x26, 0xe8, 0xd7, 0xa2, + 0xb3, 0xf8, 0xe6, 0xb5, 0x52, 0xde, 0x80, 0xbc, 0x79, 0x65, 0xb1, 0x54, 0x58, 0xc8, 0xcf, 0xe7, + 0x52, 0x3e, 0x46, 0xa3, 0xa5, 0xa2, 0x54, 0x82, 0x59, 0xbf, 0x9c, 0x83, 0xa2, 0xfa, 0x76, 0x76, + 0x0d, 0x0a, 0xb5, 0xda, 0xcd, 0x94, 0x57, 0x50, 0x72, 0xca, 0xc8, 0xfd, 0x34, 0x0c, 0x75, 0xd3, + 0x4f, 0x41, 0x20, 0xe8, 0x36, 0xd7, 0x6a, 0x24, 0x1c, 0x28, 0xba, 0x64, 0xf3, 0x96, 0x74, 0x19, + 0xae, 0x12, 0xd7, 0xa0, 0x70, 0xeb, 0xc1, 0x26, 0xdd, 0x2a, 0x14, 0x5d, 0xb2, 0x9f, 0x4a, 0xba, + 0x0f, 0x1f, 0xeb, 0xbb, 0xbc, 0x20, 0xb0, 0x6c, 0x18, 0xd7, 0x26, 0xb2, 0x3c, 0x74, 0x5b, 0x7e, + 0xec, 0xdd, 0x4b, 0x87, 0xae, 0x80, 0xd8, 0x54, 0x22, 0x64, 0x84, 0x35, 0xbf, 0xee, 0x36, 0xe9, + 0xf4, 0x46, 0x19, 0xa1, 0x29, 0x00, 0xb6, 0x84, 0x5b, 0xbf, 0x99, 0x83, 0x12, 0x4a, 0x52, 0x68, + 0xba, 0xe9, 0x3f, 0xe4, 0xed, 0xfb, 0x57, 0xd8, 0x1b, 0x6a, 0xc9, 0xe5, 0x62, 0x85, 0xc3, 0x30, + 0x2e, 0xb9, 0xd4, 0x8b, 0x05, 0x2d, 0x3b, 0xcd, 0x81, 0x3a, 0x3f, 0xb8, 0xe3, 0xe5, 0x11, 0x0e, + 0xd4, 0x65, 0x18, 0xc6, 0xcf, 0xa1, 0xcd, 0x11, 0xbf, 0x3c, 0x12, 0x00, 0x5b, 0xc2, 0xb5, 0xbd, + 0xe9, 0x27, 0xf3, 0x3d, 0x6d, 0x58, 0xfc, 0x44, 0x39, 0x2f, 0x9a, 0x8d, 0x1b, 0x68, 0xbf, 0xfe, + 0x00, 0xe6, 0xd2, 0x5d, 0x82, 0xca, 0xa0, 0x0a, 0x4c, 0x9b, 0x70, 0xa5, 0x17, 0x3a, 0x95, 0x59, + 0xd7, 0xfd, 0x45, 0x3b, 0x8d, 0x6f, 0xfd, 0x2f, 0x39, 0x18, 0xc3, 0x3f, 0xed, 0x6e, 0x13, 0x4d, + 0x68, 0x2a, 0x0f, 0x6a, 0xa4, 0xf8, 0xd5, 0x85, 0x39, 0xf7, 0x71, 0xe8, 0x90, 0x6e, 0xd8, 0xd8, + 0x63, 0x62, 0x64, 0x22, 0x95, 0x1a, 0x5d, 0xa5, 0x1c, 0x89, 0x49, 0xa5, 0xea, 0x37, 0x4c, 0x91, + 0x12, 0x32, 0x1a, 0xde, 0x3d, 0xa8, 0x89, 0xe9, 0xa7, 0xbf, 0x69, 0x23, 0x9d, 0xdf, 0x34, 0x0d, + 0xef, 0x24, 0x1a, 0x3e, 0x69, 0x3f, 0xa8, 0x55, 0xec, 0x75, 0xe3, 0x49, 0x5b, 0x7c, 0xa3, 0x61, + 0x27, 0x4e, 0x48, 0xd6, 0x3f, 0x86, 0x74, 0x07, 0xd2, 0x81, 0x77, 0xcc, 0xb5, 0xf1, 0x36, 0x0c, + 0x57, 0x9a, 0x4d, 0xff, 0x31, 0xed, 0x12, 0x4a, 0x37, 0x15, 0xf7, 0x9f, 0x3c, 0xcf, 0x50, 0xbd, + 0x62, 0x38, 0x64, 0x09, 0x00, 0x5b, 0x86, 0xb1, 0xca, 0x83, 0x5a, 0xb5, 0xba, 0xb2, 0xb9, 0x29, + 0x9d, 0x4f, 0x0a, 0x4b, 0xaf, 0xa8, 0xfe, 0xf1, 0xbc, 0x86, 0x93, 0x7e, 0x55, 0x4d, 0xe4, 0xf7, + 0x84, 0x8e, 0xbd, 0x0b, 0x70, 0xcb, 0xf7, 0xda, 0x52, 0x9d, 0x44, 0x8d, 0x3f, 0x73, 0xb0, 0x5f, + 0x1e, 0xff, 0xd0, 0xf7, 0xda, 0xa4, 0x7f, 0x12, 0xdf, 0x9e, 0x20, 0xd9, 0xda, 0xdf, 0xa2, 0xa7, + 0x97, 0x7c, 0x69, 0x16, 0x33, 0x9c, 0xf4, 0xf4, 0x96, 0xdf, 0x63, 0x11, 0xa3, 0xd0, 0x58, 0x0b, + 0xa6, 0x6b, 0xdd, 0x9d, 0x1d, 0x2e, 0x76, 0x76, 0x52, 0xa0, 0x8c, 0xd0, 0x1d, 0x37, 0x0e, 0xf9, + 0x21, 0xef, 0x23, 0xe2, 0x96, 0x12, 0x2e, 0xbd, 0x2e, 0x26, 0xf2, 0xb7, 0xf7, 0xcb, 0xf4, 0x5a, + 0x2b, 0x44, 0xb5, 0x50, 0xd1, 0xf7, 0xaa, 0x4f, 0xd2, 0xbc, 0xd9, 0x5d, 0x18, 0xb9, 0xe1, 0x45, + 0x37, 0xbb, 0x5b, 0xe4, 0x4c, 0xf1, 0xe2, 0x21, 0x8b, 0x46, 0x22, 0xca, 0xe7, 0x82, 0x1d, 0x2f, + 0xda, 0xed, 0xea, 0xe6, 0xec, 0xc4, 0x86, 0x3d, 0x80, 0xe2, 0xb2, 0x17, 0xd4, 0x9b, 0x7c, 0xb9, + 0x4a, 0x67, 0xff, 0x4b, 0x87, 0xb0, 0x54, 0xa8, 0xb2, 0x5f, 0xea, 0xf8, 0xab, 0xee, 0xe9, 0xb2, + 0x80, 0xc2, 0x60, 0xff, 0x66, 0x0e, 0x9e, 0x8f, 0xbf, 0xbe, 0xb2, 0xc3, 0xdb, 0xd1, 0x1d, 0x37, + 0xaa, 0xef, 0xf2, 0x80, 0x7a, 0x69, 0xec, 0xb0, 0x5e, 0xfa, 0x7c, 0x4f, 0x2f, 0x5d, 0x48, 0x7a, + 0xc9, 0x15, 0xcc, 0x9c, 0x96, 0xe4, 0xd6, 0xdb, 0x67, 0x87, 0xd5, 0xca, 0x1c, 0x80, 0xe4, 0xfd, + 0x87, 0x9c, 0xf1, 0x5e, 0x39, 0xa4, 0xc1, 0x09, 0x32, 0x19, 0xd1, 0xc7, 0xbf, 0x0d, 0x2b, 0xb0, + 0x18, 0xca, 0x6e, 0x2b, 0xcf, 0x25, 0x29, 0x95, 0x9c, 0x3b, 0x84, 0xb7, 0xf4, 0x66, 0x9a, 0x3d, + 0xc4, 0x47, 0x51, 0x8e, 0xf6, 0x9a, 0xbb, 0x45, 0x82, 0xc8, 0x11, 0xa3, 0xbd, 0xe6, 0x26, 0xa3, + 0xdd, 0x74, 0xd3, 0xa3, 0xbd, 0xe6, 0x6e, 0xb1, 0x65, 0xe9, 0x6e, 0x29, 0x7d, 0xf3, 0xce, 0x1e, + 0xc6, 0x6d, 0x79, 0x43, 0x9e, 0xcc, 0x19, 0x6e, 0x97, 0x5f, 0x86, 0xb1, 0x5a, 0xc7, 0xad, 0xf3, + 0xa6, 0xb7, 0x1d, 0xd1, 0x83, 0xe0, 0xcb, 0x87, 0xb0, 0x8a, 0x71, 0xe9, 0x31, 0x49, 0xfd, 0xd4, + 0xaf, 0x49, 0x31, 0x8e, 0xf8, 0xc2, 0xcd, 0x8d, 0x3b, 0xf3, 0xd3, 0x47, 0x7e, 0xe1, 0xe6, 0xc6, + 0x1d, 0x92, 0x39, 0x3a, 0x2d, 0x43, 0xe6, 0xd8, 0xb8, 0xc3, 0x3a, 0x30, 0xb5, 0xc9, 0x83, 0xc0, + 0xdd, 0xf6, 0x83, 0x96, 0x54, 0xd8, 0x49, 0x7f, 0x8f, 0x8b, 0x87, 0xf1, 0x33, 0x08, 0xa4, 0xa6, + 0x36, 0x52, 0x30, 0x27, 0xad, 0xe5, 0x4b, 0xf1, 0xb7, 0x7e, 0xad, 0x00, 0xa7, 0xfa, 0x7c, 0x25, + 0x5b, 0x57, 0xbb, 0x62, 0xce, 0xd0, 0xac, 0xf6, 0x41, 0xbf, 0x74, 0xe4, 0x46, 0xb9, 0x06, 0xa5, + 0xd5, 0xdb, 0x28, 0x4e, 0x4b, 0x9d, 0xf7, 0x72, 0x45, 0x9d, 0x27, 0xa8, 0xfd, 0xe3, 0x0f, 0xd1, + 0x84, 0x4d, 0xe9, 0xca, 0xeb, 0x86, 0xaf, 0x66, 0x0f, 0xe5, 0xc2, 0xf7, 0xe7, 0x61, 0x08, 0xcf, + 0xb6, 0x54, 0x84, 0x9a, 0xdc, 0xb1, 0x22, 0xd4, 0x7c, 0x01, 0x26, 0x56, 0x6f, 0xcb, 0xcb, 0xee, + 0x4d, 0x37, 0xdc, 0xa5, 0x9d, 0x17, 0x5f, 0x84, 0xf9, 0x43, 0x87, 0xee, 0xc6, 0xbb, 0xae, 0x21, + 0x56, 0x1a, 0x14, 0xec, 0x1e, 0xcc, 0xca, 0x6f, 0xf3, 0xb6, 0xbd, 0xba, 0x0c, 0x74, 0xe1, 0xb9, + 0x4d, 0xda, 0x86, 0x5f, 0x3a, 0xd8, 0x2f, 0x97, 0xf9, 0x43, 0x34, 0xce, 0xa3, 0x72, 0x27, 0x44, + 0x04, 0xdd, 0x4a, 0x2f, 0x83, 0x5e, 0xf7, 0xbe, 0xb7, 0xc7, 0xb0, 0x42, 0x51, 0x9b, 0xa8, 0x5b, + 0xe0, 0x4a, 0x24, 0xeb, 0x57, 0x87, 0x61, 0xa1, 0xff, 0x0e, 0xca, 0xbe, 0x68, 0x0e, 0xe0, 0xf9, + 0x23, 0xf7, 0xdc, 0xa3, 0xc7, 0xf0, 0x4b, 0x30, 0xb7, 0xda, 0x8e, 0x78, 0xd0, 0x09, 0x3c, 0x15, + 0x6f, 0xe1, 0xa6, 0x1f, 0x2a, 0x63, 0x48, 0xb4, 0x4a, 0xe4, 0x71, 0x39, 0xe9, 0x25, 0xd1, 0x34, + 0x53, 0x63, 0x95, 0xc9, 0x81, 0xad, 0xc2, 0x94, 0x06, 0x6f, 0x76, 0x77, 0x48, 0x66, 0x90, 0x4f, + 0x0f, 0x1a, 0xcf, 0x66, 0x57, 0xb7, 0x14, 0x4b, 0x11, 0x2d, 0xfc, 0x42, 0x81, 0xa6, 0xc5, 0x4b, + 0x50, 0xa8, 0x75, 0xb7, 0x68, 0x3a, 0xc8, 0xcb, 0x81, 0x71, 0x90, 0x88, 0x52, 0xf6, 0x39, 0x00, + 0x9b, 0x77, 0xfc, 0xd0, 0x8b, 0xfc, 0x60, 0x4f, 0x77, 0xdb, 0x09, 0x62, 0xa8, 0x69, 0x59, 0xac, + 0xa0, 0xec, 0x26, 0x4c, 0x27, 0xbf, 0xee, 0x3e, 0x6e, 0x93, 0x32, 0x75, 0x4c, 0x6a, 0x31, 0x12, + 0x72, 0xc7, 0x17, 0x65, 0xfa, 0xd1, 0x98, 0x22, 0x63, 0x8b, 0x50, 0x7c, 0xe0, 0x07, 0x0f, 0xb7, + 0xc5, 0x40, 0x0d, 0x25, 0x87, 0xf7, 0x63, 0x82, 0xe9, 0x87, 0x94, 0xc2, 0x13, 0x73, 0x7e, 0xb5, + 0xfd, 0xc8, 0x0b, 0xfc, 0x76, 0x8b, 0xb7, 0x23, 0xfd, 0xb5, 0x9c, 0x27, 0x60, 0xc3, 0x61, 0x32, + 0x01, 0x8b, 0xbb, 0x7a, 0xa5, 0x1e, 0xf9, 0x01, 0x3d, 0x95, 0xcb, 0xe1, 0x16, 0x00, 0x63, 0xb8, + 0x05, 0x40, 0x74, 0xa2, 0xcd, 0xb7, 0xe9, 0xd9, 0x00, 0x3b, 0x31, 0xe0, 0xdb, 0x86, 0x37, 0x28, + 0xdf, 0x16, 0xc2, 0x87, 0xcd, 0xb7, 0x51, 0xc1, 0x60, 0x04, 0x51, 0xda, 0xee, 0x51, 0x4d, 0x11, + 0x9a, 0xf5, 0x3b, 0x63, 0x7d, 0xe7, 0xad, 0xd8, 0xed, 0x8f, 0x37, 0x6f, 0xd7, 0xdc, 0x01, 0xe6, + 0xed, 0xeb, 0xb1, 0xbd, 0xb2, 0xee, 0x02, 0x8d, 0x10, 0xfd, 0xb8, 0x91, 0x38, 0x0b, 0xbf, 0x58, + 0x3c, 0xce, 0x24, 0xa2, 0x4e, 0xca, 0x0f, 0xda, 0x49, 0x85, 0x81, 0x3a, 0x89, 0x2d, 0xc1, 0x64, + 0x1c, 0x86, 0x6b, 0xc3, 0x8d, 0x8c, 0xbd, 0x29, 0x8e, 0x9d, 0xe6, 0x74, 0xdc, 0x48, 0xdf, 0x9b, + 0x4c, 0x12, 0xf6, 0x0e, 0x8c, 0x93, 0xd1, 0x3e, 0x72, 0x18, 0x4e, 0xcc, 0x26, 0x95, 0x85, 0x7f, + 0x8a, 0x5e, 0x47, 0x17, 0x4b, 0x72, 0xc3, 0xeb, 0xf0, 0xa6, 0xd7, 0xe6, 0x35, 0xd4, 0xd6, 0xd3, + 0x8c, 0xc1, 0x25, 0xd9, 0xa1, 0x12, 0x47, 0x2a, 0xf2, 0x0d, 0x3d, 0x9d, 0x41, 0x94, 0x9e, 0xac, + 0xa3, 0xc7, 0x9a, 0xac, 0xd2, 0x6a, 0x29, 0x58, 0xf3, 0x77, 0x3c, 0x65, 0xa7, 0xa9, 0xac, 0x96, + 0x02, 0xa7, 0x29, 0xa0, 0x29, 0xab, 0x25, 0x89, 0x2a, 0x6e, 0x12, 0xe2, 0x47, 0x75, 0x85, 0x9e, + 0xa8, 0xf0, 0x26, 0x81, 0x44, 0xa6, 0x71, 0xac, 0x44, 0x52, 0xd5, 0xac, 0xb6, 0x5c, 0xaf, 0x49, + 0x9e, 0xae, 0x49, 0x35, 0x5c, 0x40, 0xd3, 0xd5, 0x20, 0x2a, 0xab, 0xc3, 0x84, 0xcd, 0xb7, 0x37, + 0x02, 0x3f, 0xe2, 0xf5, 0x88, 0x37, 0x48, 0x7a, 0x52, 0x17, 0x88, 0x25, 0xdf, 0x97, 0x92, 0xe1, + 0xd2, 0x1b, 0xbf, 0xb3, 0x5f, 0xce, 0x7d, 0x7b, 0xbf, 0x0c, 0x02, 0x24, 0x2d, 0xaf, 0x0f, 0xf6, + 0xcb, 0xa7, 0xc4, 0xf8, 0x77, 0x14, 0xb1, 0x7e, 0xc4, 0xe8, 0x4c, 0xd9, 0xf7, 0x8a, 0x4d, 0x37, + 0xee, 0x92, 0xa4, 0xb2, 0x89, 0x3e, 0x95, 0xbd, 0x99, 0x59, 0x59, 0x59, 0xeb, 0xed, 0xcc, 0x4a, + 0x33, 0x2b, 0x61, 0xef, 0xc2, 0xf8, 0x72, 0x75, 0xd9, 0x6f, 0x6f, 0x7b, 0x3b, 0xb5, 0x9b, 0x15, + 0x14, 0xc1, 0xc8, 0xea, 0xbe, 0xee, 0x39, 0x75, 0x84, 0x3b, 0xe1, 0xae, 0x6b, 0x38, 0x5f, 0x25, + 0xf8, 0xec, 0x06, 0x4c, 0xa9, 0x9f, 0x36, 0xdf, 0xbe, 0x67, 0x57, 0x51, 0xf2, 0x52, 0xae, 0x0e, + 0x31, 0x07, 0xd1, 0x11, 0xdd, 0x40, 0x97, 0xc8, 0x53, 0x64, 0x62, 0x32, 0xae, 0xf0, 0x4e, 0xd3, + 0xdf, 0x13, 0x9f, 0xb7, 0xe9, 0xf1, 0x00, 0x65, 0x2d, 0x9a, 0x8c, 0x8d, 0xb8, 0xc4, 0x89, 0x3c, + 0x63, 0xbb, 0x4d, 0x11, 0xb1, 0x75, 0x98, 0xa1, 0x29, 0x7e, 0xdf, 0x0b, 0xbd, 0x2d, 0xaf, 0xe9, + 0x45, 0x7b, 0x28, 0x65, 0x91, 0x14, 0xa2, 0xd6, 0xc5, 0xa3, 0xb8, 0x54, 0x63, 0xd6, 0x4b, 0x6a, + 0xfd, 0x72, 0x1e, 0x5e, 0x38, 0xec, 0xc6, 0xc1, 0x6a, 0xe6, 0x66, 0x76, 0x61, 0x80, 0x5b, 0xca, + 0xd1, 0xdb, 0xd9, 0x2a, 0x4c, 0xdd, 0x0d, 0x76, 0xdc, 0xb6, 0xf7, 0x4d, 0xbc, 0x49, 0xc6, 0xc6, + 0x5b, 0xd8, 0x19, 0xbe, 0x56, 0x62, 0xce, 0xf6, 0x14, 0xd1, 0xc2, 0x23, 0xda, 0xe6, 0x3e, 0xaa, + 0x1b, 0xd0, 0x35, 0x18, 0x5b, 0xf6, 0xdb, 0x11, 0x7f, 0x12, 0xa5, 0x9c, 0x5e, 0x25, 0x30, 0xed, + 0x02, 0xa5, 0x50, 0xad, 0x7f, 0x99, 0x87, 0x33, 0x87, 0x8a, 0xdc, 0x6c, 0xd3, 0xec, 0xb5, 0x8b, + 0x83, 0xc8, 0xe9, 0x47, 0x77, 0xdb, 0x62, 0x8f, 0x9d, 0xd1, 0x91, 0x56, 0xf6, 0x0b, 0xff, 0x4d, + 0x8e, 0x3a, 0xe9, 0xd3, 0x30, 0x8a, 0x55, 0xc5, 0x5d, 0x24, 0xb5, 0x51, 0xb8, 0x0b, 0x7b, 0xa6, + 0x36, 0x4a, 0xa2, 0xb1, 0xab, 0x50, 0x5c, 0x76, 0x9b, 0x4d, 0xcd, 0x25, 0x18, 0x6f, 0x12, 0x75, + 0x84, 0xa5, 0xcc, 0xd2, 0x14, 0x22, 0x7b, 0x0b, 0x40, 0xfe, 0xad, 0x9d, 0x15, 0xb8, 0x59, 0x12, + 0x59, 0xea, 0xb8, 0xd0, 0x90, 0x31, 0x90, 0x60, 0xdd, 0x8f, 0x9d, 0x0e, 0x65, 0x20, 0x41, 0x01, + 0x30, 0x02, 0x09, 0x0a, 0x80, 0xf5, 0x2b, 0x05, 0x38, 0x7b, 0xf8, 0xbd, 0x91, 0xdd, 0x33, 0x87, + 0xe0, 0xb5, 0x81, 0x6e, 0x9b, 0x47, 0x8f, 0x81, 0x0a, 0xcb, 0x29, 0x3b, 0xe4, 0x42, 0xaf, 0x31, + 0xfc, 0x77, 0xf6, 0xcb, 0x9a, 0xad, 0xe3, 0x2d, 0xdf, 0x6b, 0x6b, 0x6f, 0x13, 0xdf, 0x00, 0xa8, + 0x45, 0x6e, 0xe4, 0xd5, 0x6f, 0x3d, 0xb8, 0xad, 0xa2, 0x56, 0x5c, 0x1b, 0xec, 0xcb, 0x12, 0x3a, + 0xb9, 0xaf, 0x90, 0x1f, 0x0e, 0x42, 0x9d, 0x0f, 0x1f, 0x3f, 0x34, 0x6e, 0xc6, 0x09, 0xf2, 0xc2, + 0xe7, 0xa1, 0x94, 0x26, 0x65, 0xe7, 0x61, 0x08, 0x3f, 0x40, 0xb3, 0xe8, 0x4f, 0x71, 0xc0, 0xf2, + 0x85, 0x3b, 0x34, 0x77, 0xd0, 0x4b, 0x1a, 0x1f, 0xc4, 0x4d, 0x1d, 0x1c, 0x79, 0x49, 0xcb, 0xf7, + 0xf4, 0x5e, 0x3d, 0x5c, 0x8a, 0xc8, 0xfa, 0xf3, 0x1c, 0x9c, 0xee, 0x7b, 0x23, 0x67, 0x1b, 0xe6, + 0x80, 0xbd, 0x72, 0xd4, 0x15, 0xfe, 0xc8, 0xb1, 0x5a, 0xf8, 0x51, 0x35, 0xf7, 0xdf, 0x83, 0x89, + 0x5a, 0x77, 0x2b, 0x7d, 0xc9, 0x92, 0x31, 0x0c, 0x34, 0xb8, 0x7e, 0x82, 0xe9, 0xf8, 0xa2, 0xfd, + 0xea, 0xc5, 0x9f, 0x2c, 0x4b, 0x34, 0x2b, 0xab, 0xd8, 0x8d, 0xaf, 0xd7, 0x4b, 0xdc, 0x24, 0xb2, + 0x7e, 0x29, 0x9f, 0x7d, 0x5b, 0x15, 0xb7, 0xfb, 0x63, 0xdc, 0x56, 0x6f, 0x2c, 0x6f, 0x1c, 0xdd, + 0xf6, 0x7f, 0xa2, 0xda, 0x8e, 0x0f, 0xa0, 0xb4, 0xe3, 0x29, 0x85, 0x22, 0x3d, 0x80, 0xaa, 0xdd, + 0x31, 0x34, 0x1f, 0x40, 0x15, 0x32, 0x7b, 0x13, 0xc6, 0xd6, 0x7c, 0xe9, 0xc0, 0xad, 0x5a, 0x2c, + 0xfd, 0xdc, 0x14, 0x50, 0xdf, 0x1e, 0x63, 0x4c, 0x71, 0xb7, 0x30, 0x07, 0x5e, 0x19, 0x93, 0xe1, + 0xdd, 0x22, 0x35, 0x5d, 0x4c, 0xb5, 0x9b, 0x49, 0x66, 0xfd, 0x47, 0xc3, 0x60, 0x1d, 0xad, 0x34, + 0x60, 0x1f, 0x98, 0x7d, 0x77, 0x69, 0x60, 0x75, 0xc3, 0x40, 0x5b, 0x6e, 0xa5, 0xdb, 0xf0, 0x78, + 0xbb, 0x6e, 0x7a, 0x5f, 0x13, 0x4c, 0xdf, 0x02, 0x15, 0xde, 0x47, 0x71, 0x86, 0x5a, 0xf8, 0x2f, + 0x0b, 0xc9, 0x52, 0x4b, 0x1d, 0x8d, 0xb9, 0x8f, 0x70, 0x34, 0xb2, 0xdb, 0x50, 0xd2, 0x21, 0xda, + 0x4b, 0x28, 0x4a, 0x2e, 0x06, 0xa3, 0xd4, 0x47, 0xf5, 0x10, 0x9a, 0xe7, 0x6b, 0x61, 0xf0, 0xf3, + 0x35, 0x11, 0xdf, 0xb1, 0xfe, 0xa1, 0x5e, 0xf1, 0x3d, 0xed, 0xf0, 0xa8, 0xa1, 0x2b, 0x6f, 0xed, + 0x90, 0x0e, 0xad, 0x61, 0xd3, 0x5b, 0x3b, 0xe3, 0xe0, 0xd2, 0xd1, 0x95, 0xc3, 0x39, 0xfe, 0xd4, + 0xfc, 0x2d, 0x63, 0x87, 0x73, 0x49, 0x9f, 0xe5, 0x70, 0x1e, 0x93, 0x88, 0x03, 0xd0, 0xee, 0xb6, + 0x65, 0xc4, 0xda, 0xd1, 0xe4, 0x00, 0x0c, 0xba, 0x6d, 0x27, 0x1d, 0xb5, 0x36, 0x46, 0xb4, 0x7e, + 0x34, 0x0f, 0x53, 0x72, 0xc3, 0x95, 0x4f, 0x19, 0xcf, 0xec, 0x33, 0xd1, 0xdb, 0xc6, 0x33, 0x91, + 0x0a, 0xd1, 0xa3, 0x37, 0x6d, 0xa0, 0x47, 0xa2, 0x5d, 0x60, 0xbd, 0x34, 0xcc, 0x86, 0x09, 0x1d, + 0x7a, 0xf8, 0xfb, 0xd0, 0x95, 0x24, 0x9a, 0x13, 0x9d, 0x77, 0xf8, 0x48, 0x17, 0xda, 0x06, 0x0f, + 0xeb, 0x47, 0xf2, 0x30, 0xa9, 0x3d, 0xea, 0x3f, 0xb3, 0x1d, 0xff, 0x79, 0xa3, 0xe3, 0xe7, 0x63, + 0xa7, 0x8f, 0xb8, 0x65, 0x03, 0xf5, 0x7b, 0x17, 0x66, 0x7a, 0x48, 0xd2, 0xb6, 0x11, 0xb9, 0x41, + 0x6c, 0x23, 0x5e, 0xef, 0x0d, 0x0d, 0x23, 0x23, 0x2c, 0xc7, 0x81, 0x02, 0xf4, 0x58, 0x34, 0x3f, + 0x9e, 0x87, 0x39, 0xfa, 0x85, 0xb1, 0xd4, 0xa4, 0xc4, 0xf1, 0xcc, 0x8e, 0x45, 0xc5, 0x18, 0x8b, + 0xb2, 0x39, 0x16, 0x5a, 0x03, 0xfb, 0x0f, 0x89, 0xf5, 0x03, 0x00, 0xf3, 0xfd, 0x08, 0x06, 0xf6, + 0xad, 0x4c, 0x3c, 0x57, 0xf2, 0x03, 0x78, 0xae, 0xac, 0x41, 0x09, 0xab, 0xa2, 0x68, 0x49, 0xa1, + 0xb8, 0xb7, 0x16, 0x92, 0x4b, 0xa2, 0x0c, 0x78, 0x47, 0xd1, 0x9b, 0xc2, 0xd4, 0xc5, 0xb5, 0x87, + 0x92, 0xfd, 0x42, 0x0e, 0xa6, 0x10, 0xb8, 0xfa, 0x88, 0xb7, 0x23, 0x64, 0x36, 0x44, 0x8e, 0x16, + 0xf1, 0x2b, 0x52, 0x2d, 0x0a, 0xbc, 0xf6, 0x0e, 0x3d, 0x23, 0x6d, 0xd1, 0x33, 0xd2, 0x3b, 0xf2, + 0xf9, 0xeb, 0x52, 0xdd, 0x6f, 0x5d, 0xde, 0x09, 0xdc, 0x47, 0x9e, 0xb4, 0x57, 0x71, 0x9b, 0x97, + 0x93, 0x00, 0xff, 0x1d, 0x2f, 0x15, 0xb2, 0x9f, 0x58, 0xe1, 0x13, 0x9d, 0xfc, 0x50, 0x8e, 0xd5, + 0xa6, 0xef, 0xd7, 0xe6, 0x17, 0xb1, 0xef, 0x81, 0x53, 0x32, 0x86, 0x89, 0xb8, 0xa6, 0x79, 0xed, + 0xae, 0xdf, 0x0d, 0x97, 0xdc, 0xfa, 0x43, 0x21, 0xab, 0x49, 0x67, 0x31, 0x6c, 0x79, 0x3d, 0x2e, + 0x74, 0xb6, 0x64, 0xa9, 0xe1, 0x1c, 0x9b, 0xcd, 0x80, 0xdd, 0x84, 0x19, 0x59, 0x54, 0xe9, 0x46, + 0x7e, 0xad, 0xee, 0x36, 0xbd, 0xf6, 0x0e, 0x1e, 0x08, 0x45, 0x79, 0x1e, 0xb9, 0xdd, 0xc8, 0x77, + 0x42, 0x09, 0xd7, 0xaf, 0xdb, 0x3d, 0x44, 0xac, 0x0a, 0xd3, 0x36, 0x77, 0x1b, 0x77, 0xdc, 0x27, + 0xcb, 0x6e, 0xc7, 0xad, 0x8b, 0xcb, 0x7b, 0x11, 0x9f, 0x5c, 0xf1, 0x54, 0x0e, 0xb8, 0xdb, 0x70, + 0x5a, 0xee, 0x13, 0xa7, 0x4e, 0x85, 0xa6, 0xde, 0xd5, 0xa0, 0x8b, 0x59, 0x79, 0xed, 0x98, 0xd5, + 0x58, 0x9a, 0x95, 0xd7, 0xee, 0xcf, 0x2a, 0xa1, 0x53, 0xac, 0x36, 0xdd, 0x60, 0x87, 0x47, 0xd2, + 0xdc, 0x13, 0xce, 0xe5, 0x2e, 0xe4, 0x34, 0x56, 0x11, 0x96, 0x39, 0x68, 0xfa, 0x99, 0x66, 0xa5, + 0xd1, 0x89, 0x99, 0xf7, 0x20, 0xf0, 0x22, 0xae, 0xb7, 0x70, 0x1c, 0x3f, 0x0b, 0xfb, 0x1f, 0x0d, + 0x65, 0xfb, 0x35, 0xb1, 0x87, 0x32, 0xe1, 0xa6, 0x35, 0x72, 0xa2, 0x87, 0x5b, 0x76, 0x2b, 0x7b, + 0x28, 0x63, 0x6e, 0x7a, 0x3b, 0x27, 0xb1, 0x9d, 0x1a, 0xb7, 0x3e, 0x0d, 0xed, 0xa1, 0x64, 0xeb, + 0xa2, 0xd3, 0x22, 0xde, 0x16, 0x33, 0x9a, 0xcc, 0x5d, 0xa7, 0xf0, 0xd3, 0x5e, 0x26, 0x9b, 0xad, + 0x52, 0xa0, 0x8a, 0x9d, 0x0c, 0xe3, 0xd7, 0x34, 0x31, 0xfb, 0x6b, 0x30, 0x7d, 0x2f, 0xe4, 0xd7, + 0xab, 0x1b, 0x35, 0x15, 0xf2, 0x04, 0x35, 0x44, 0x53, 0x8b, 0x57, 0x8e, 0xd8, 0x74, 0x2e, 0xe9, + 0x34, 0x18, 0x67, 0x5f, 0x8e, 0x5b, 0x37, 0xe4, 0xce, 0xb6, 0xd7, 0x09, 0xe3, 0xf8, 0x51, 0xfa, + 0xb8, 0xa5, 0xaa, 0xb2, 0x6e, 0xc2, 0x4c, 0x0f, 0x1b, 0x36, 0x05, 0x20, 0x80, 0xce, 0xbd, 0xf5, + 0xda, 0xea, 0x66, 0xe9, 0x39, 0x56, 0x82, 0x09, 0xfc, 0xbd, 0xba, 0x5e, 0x59, 0x5a, 0x5b, 0x5d, + 0x29, 0xe5, 0xd8, 0x0c, 0x4c, 0x22, 0x64, 0xa5, 0x5a, 0x93, 0xa0, 0xbc, 0x8c, 0xb2, 0x6c, 0x97, + 0xe4, 0xd2, 0x8d, 0xc4, 0x02, 0xc0, 0x33, 0xc5, 0xfa, 0x7b, 0x79, 0x38, 0xad, 0x8e, 0x15, 0x1e, + 0x09, 0x11, 0xcc, 0x6b, 0xef, 0x3c, 0xe3, 0xa7, 0xc3, 0x75, 0xe3, 0x74, 0x78, 0x39, 0x75, 0x52, + 0xa7, 0x5a, 0x79, 0xc8, 0x11, 0xf1, 0x1b, 0x63, 0x70, 0xe6, 0x50, 0x2a, 0xf6, 0x45, 0x71, 0x9a, + 0x7b, 0xbc, 0x1d, 0x55, 0x1b, 0x4d, 0xbe, 0xe9, 0xb5, 0xb8, 0xdf, 0x8d, 0xc8, 0xbc, 0xfa, 0x25, + 0x54, 0xca, 0x60, 0xa1, 0xe3, 0x35, 0x9a, 0xdc, 0x89, 0x64, 0xb1, 0x31, 0xdd, 0x7a, 0xa9, 0x05, + 0xcb, 0x38, 0xe7, 0x47, 0xb5, 0x1d, 0xf1, 0xe0, 0x11, 0x9a, 0x70, 0xc5, 0x2c, 0x1f, 0x72, 0xde, + 0x71, 0x5c, 0x51, 0xea, 0x78, 0x54, 0x6c, 0xb2, 0xec, 0xa1, 0x66, 0xd7, 0x35, 0x96, 0xcb, 0xe2, + 0x0a, 0x77, 0xc7, 0x7d, 0x42, 0x36, 0x25, 0x14, 0x42, 0x2f, 0x66, 0x29, 0xfd, 0x39, 0x5b, 0xee, + 0x13, 0xbb, 0x97, 0x84, 0x7d, 0x15, 0x4e, 0xd0, 0x01, 0x44, 0xfe, 0xf8, 0xaa, 0xc5, 0xd2, 0xdb, + 0xff, 0xd5, 0x83, 0xfd, 0xf2, 0x29, 0x15, 0x7c, 0x50, 0x45, 0x60, 0xc8, 0x6a, 0x75, 0x36, 0x17, + 0xb6, 0x29, 0x0e, 0xe4, 0x54, 0x77, 0xdc, 0xe1, 0x61, 0xa8, 0x1c, 0x8d, 0xe8, 0x7a, 0xa3, 0x77, + 0xa6, 0xd3, 0x92, 0xe5, 0x76, 0x5f, 0x4a, 0x76, 0x13, 0xa6, 0x1e, 0xf0, 0x2d, 0x7d, 0x7c, 0x46, + 0xe2, 0xad, 0xaa, 0xf4, 0x98, 0x6f, 0xf5, 0x1f, 0x9c, 0x14, 0x1d, 0xf3, 0x50, 0xc9, 0xfb, 0x64, + 0x6f, 0xcd, 0x0b, 0x23, 0xde, 0xe6, 0x01, 0xc6, 0x79, 0x19, 0xc5, 0xcd, 0x60, 0x3e, 0x91, 0x90, + 0xcd, 0xf2, 0xa5, 0x17, 0x0f, 0xf6, 0xcb, 0x67, 0xa4, 0xc7, 0x5e, 0x93, 0xe0, 0x4e, 0x2a, 0x63, + 0x46, 0x2f, 0x57, 0xf6, 0x75, 0x98, 0xb6, 0xfd, 0x6e, 0xe4, 0xb5, 0x77, 0x6a, 0x51, 0xe0, 0x46, + 0x7c, 0x47, 0x1e, 0x48, 0x49, 0x40, 0x99, 0x54, 0x29, 0xbd, 0x0f, 0x4a, 0xa0, 0x13, 0x12, 0xd4, + 0x38, 0x11, 0x4c, 0x02, 0xf6, 0x35, 0x98, 0x92, 0x9e, 0xd8, 0x71, 0x05, 0x63, 0x46, 0xb4, 0x6f, + 0xb3, 0xf0, 0xfe, 0x15, 0x32, 0x01, 0x40, 0x68, 0x56, 0x05, 0x29, 0x6e, 0xec, 0xcb, 0xd4, 0x59, + 0x1b, 0x5e, 0x7b, 0x27, 0x9e, 0xc6, 0x80, 0x3d, 0xff, 0x46, 0xd2, 0x25, 0x1d, 0xf1, 0xb9, 0x6a, + 0x1a, 0xf7, 0xb1, 0x67, 0xea, 0xe5, 0xc3, 0x22, 0x38, 0x53, 0x09, 0x43, 0x2f, 0x8c, 0xc8, 0x09, + 0x61, 0xf5, 0x09, 0xaf, 0x77, 0x05, 0xb2, 0xb8, 0x28, 0xf2, 0x40, 0x1a, 0xc1, 0x0e, 0x2f, 0x5d, + 0x3a, 0xd8, 0x2f, 0xbf, 0xe6, 0x22, 0xa2, 0x43, 0x7e, 0x0b, 0x0e, 0x57, 0xa8, 0xce, 0x63, 0x89, + 0xab, 0xb5, 0xe1, 0x70, 0xa6, 0xec, 0x6b, 0x70, 0x72, 0xd9, 0x0d, 0x79, 0xb5, 0x1d, 0xf2, 0x76, + 0xe8, 0x45, 0xde, 0x23, 0x4e, 0x9d, 0x8a, 0x87, 0x5f, 0x11, 0x73, 0x8b, 0x58, 0x75, 0x37, 0x14, + 0x0b, 0x33, 0x46, 0x71, 0x68, 0x50, 0xb4, 0x6a, 0xfa, 0x70, 0x61, 0x36, 0x4c, 0xd5, 0x6a, 0x37, + 0x57, 0x3c, 0x37, 0x5e, 0x57, 0x93, 0xd8, 0x5f, 0xaf, 0xa1, 0x7e, 0x26, 0xdc, 0x75, 0x1a, 0x9e, + 0x1b, 0x2f, 0xa8, 0x3e, 0x9d, 0x95, 0xe2, 0x60, 0xed, 0xe7, 0xa0, 0x94, 0x1e, 0x4a, 0xf6, 0x25, + 0x18, 0x93, 0xc6, 0x40, 0x3c, 0xdc, 0x25, 0xc7, 0x64, 0x65, 0x5b, 0x12, 0xc3, 0x4d, 0x22, 0x72, + 0x0a, 0x92, 0xa6, 0x46, 0x5c, 0xb7, 0x5b, 0x40, 0xa7, 0x20, 0x45, 0xc4, 0x1a, 0x30, 0x21, 0x47, + 0x8b, 0x63, 0x34, 0x29, 0xb2, 0x09, 0x7d, 0x51, 0x5f, 0x1d, 0x54, 0x94, 0xe2, 0x8f, 0x4f, 0x3f, + 0x34, 0x27, 0x24, 0x82, 0x51, 0x85, 0xc1, 0x75, 0x09, 0xa0, 0xa8, 0x08, 0xad, 0xd3, 0x70, 0xaa, + 0xcf, 0x37, 0x5b, 0x8f, 0xf0, 0x39, 0xb8, 0x4f, 0x8d, 0xec, 0x4b, 0x30, 0x87, 0x84, 0xcb, 0x7e, + 0xbb, 0xcd, 0xeb, 0x11, 0x6e, 0x47, 0x4a, 0x85, 0x5a, 0x90, 0x36, 0x07, 0xb2, 0xbd, 0xf5, 0x18, + 0xc1, 0x49, 0x6b, 0x52, 0x33, 0x39, 0x58, 0x3f, 0x93, 0x87, 0x79, 0xda, 0xe1, 0x6c, 0x5e, 0xf7, + 0x83, 0xc6, 0xb3, 0x7f, 0xa2, 0xae, 0x1a, 0x27, 0xea, 0x4b, 0x71, 0x24, 0x8a, 0xac, 0x46, 0x1e, + 0x72, 0xa0, 0xfe, 0x52, 0x0e, 0x5e, 0x38, 0x8c, 0x48, 0xf4, 0x4e, 0x1c, 0x3d, 0x6b, 0xac, 0x27, + 0x4a, 0x56, 0x07, 0x66, 0x71, 0x40, 0x97, 0x77, 0x79, 0xfd, 0x61, 0x78, 0xd3, 0x0f, 0x23, 0x34, + 0x4b, 0xcf, 0xf7, 0x79, 0xb0, 0x7c, 0x3d, 0xf3, 0xc1, 0xf2, 0xa4, 0x9c, 0x65, 0x75, 0xe4, 0x21, + 0xe3, 0x7b, 0x3d, 0xe4, 0x7b, 0xa1, 0x9d, 0xc5, 0x1a, 0xcd, 0x8b, 0x2b, 0xdd, 0x68, 0x77, 0x23, + 0xe0, 0xdb, 0x3c, 0xe0, 0xed, 0x3a, 0xff, 0x84, 0x99, 0x17, 0x9b, 0x8d, 0x1b, 0x48, 0x83, 0xf1, + 0x4f, 0x26, 0x61, 0x2e, 0x8b, 0x4c, 0xf4, 0x8b, 0x76, 0x69, 0x4e, 0xa7, 0x3e, 0xfb, 0x5b, 0x39, + 0x98, 0xa8, 0xf1, 0xba, 0xdf, 0x6e, 0x5c, 0x47, 0xb3, 0x10, 0xea, 0x1d, 0x47, 0x0a, 0x0d, 0x02, + 0xee, 0x6c, 0xa7, 0xec, 0x45, 0xbe, 0xb3, 0x5f, 0xfe, 0xc2, 0x60, 0x77, 0xd5, 0xba, 0x8f, 0xd1, + 0x24, 0x22, 0x0c, 0xcd, 0x1d, 0x57, 0x81, 0x2f, 0x3c, 0x46, 0xa5, 0x6c, 0x09, 0x26, 0x69, 0xb9, + 0xfa, 0x7a, 0xf0, 0x34, 0x19, 0xac, 0x43, 0x15, 0xf4, 0xe8, 0x1f, 0x0d, 0x12, 0x76, 0x15, 0x0a, + 0xf7, 0x16, 0xaf, 0xd3, 0x18, 0xa8, 0xe0, 0xe6, 0xf7, 0x16, 0xaf, 0xa3, 0x3a, 0x4c, 0x5c, 0x31, + 0x26, 0xbb, 0x8b, 0x86, 0xa5, 0xc6, 0xbd, 0xc5, 0xeb, 0xec, 0x6f, 0xc0, 0x89, 0x15, 0x2f, 0xa4, + 0x2a, 0xa4, 0xa1, 0x7b, 0x03, 0xdd, 0xbb, 0x46, 0xfa, 0xcc, 0xde, 0xcf, 0x66, 0xce, 0xde, 0x17, + 0x1b, 0x31, 0x13, 0x47, 0x5a, 0xd1, 0x37, 0xd2, 0x41, 0xe2, 0xb2, 0xeb, 0x61, 0x1f, 0xc2, 0x14, + 0xea, 0xce, 0xd1, 0xf6, 0x1f, 0xc3, 0xfb, 0x8e, 0xf6, 0xa9, 0xf9, 0xd3, 0x99, 0x35, 0x2f, 0x48, + 0x27, 0x71, 0xf4, 0x20, 0xc0, 0x50, 0xc0, 0xc6, 0xad, 0xdf, 0xe0, 0xcc, 0x6e, 0xc1, 0x34, 0x89, + 0x5f, 0x77, 0xb7, 0x37, 0x77, 0xf9, 0x8a, 0xbb, 0x47, 0x46, 0x16, 0x78, 0xa3, 0x23, 0x99, 0xcd, + 0xf1, 0xb7, 0x9d, 0x68, 0x97, 0x3b, 0x0d, 0xd7, 0x10, 0x54, 0x52, 0x84, 0xec, 0x7b, 0x61, 0x7c, + 0xcd, 0xaf, 0x0b, 0xc9, 0x1b, 0x77, 0x06, 0x69, 0x77, 0xf1, 0x01, 0x26, 0xd7, 0x92, 0xe0, 0x94, + 0x38, 0xf5, 0x9d, 0xfd, 0xf2, 0xdb, 0xc7, 0x9d, 0x34, 0x5a, 0x05, 0xb6, 0x5e, 0x1b, 0x5b, 0x86, + 0xe2, 0x03, 0xbe, 0x25, 0x5a, 0x9b, 0x4e, 0xbc, 0xa3, 0xc0, 0x64, 0x56, 0x45, 0xbf, 0x0c, 0xb3, + 0x2a, 0x82, 0xb1, 0x00, 0x66, 0xb0, 0x7f, 0x36, 0xdc, 0x30, 0x7c, 0xec, 0x07, 0x0d, 0x8c, 0xb0, + 0xde, 0xcf, 0xa4, 0x63, 0x31, 0xb3, 0xf3, 0x5f, 0x90, 0x9d, 0xdf, 0xd1, 0x38, 0xe8, 0x02, 0x64, + 0x0f, 0x7b, 0xf6, 0x75, 0x98, 0x22, 0xcf, 0xe6, 0x3b, 0xd7, 0x2b, 0xb8, 0x2a, 0x27, 0x0c, 0x27, + 0x39, 0xb3, 0x50, 0x4a, 0xa9, 0xe4, 0x28, 0xad, 0x34, 0x50, 0x4e, 0x6b, 0xdb, 0x35, 0x5f, 0xcd, + 0x74, 0x12, 0xb6, 0x01, 0xe3, 0x2b, 0xfc, 0x91, 0x57, 0xe7, 0xe8, 0xc8, 0x43, 0x46, 0xb4, 0x71, + 0xe6, 0x90, 0xa4, 0x44, 0xea, 0x62, 0x1a, 0x08, 0x90, 0x6e, 0x41, 0xa6, 0xd5, 0x64, 0x8c, 0xc8, + 0xae, 0x41, 0xa1, 0xba, 0xb2, 0x41, 0x36, 0xb4, 0xca, 0x37, 0xa6, 0xda, 0xd8, 0x50, 0x79, 0x16, + 0xd0, 0x08, 0xca, 0x6b, 0x18, 0x16, 0xb8, 0xd5, 0x95, 0x0d, 0xb6, 0x0d, 0x93, 0xd8, 0x01, 0x37, + 0xb9, 0x2b, 0xfb, 0x76, 0xba, 0x4f, 0xdf, 0x5e, 0xca, 0xec, 0xdb, 0x79, 0xd9, 0xb7, 0xbb, 0x44, + 0x6d, 0x04, 0x8e, 0xd7, 0xd9, 0x0a, 0x91, 0x96, 0x92, 0x59, 0xa8, 0x70, 0xe7, 0x9b, 0x6b, 0x68, + 0xe4, 0x41, 0x22, 0xad, 0xca, 0x7d, 0x11, 0xc7, 0x5f, 0xef, 0x6b, 0xa2, 0xdf, 0xcb, 0x87, 0x7d, + 0x1e, 0x86, 0xee, 0x3e, 0x8c, 0xdc, 0xf9, 0x19, 0xa3, 0x1f, 0x05, 0x48, 0x35, 0x1f, 0xb5, 0x90, + 0xfe, 0x43, 0x23, 0x8c, 0x10, 0xd2, 0x88, 0xa1, 0xb8, 0xe9, 0x06, 0x8d, 0xc7, 0x6e, 0x80, 0xde, + 0x94, 0xb3, 0x06, 0x0b, 0xad, 0x44, 0x0e, 0xc5, 0x2e, 0x01, 0x52, 0x2e, 0x96, 0x3a, 0x0b, 0xf6, + 0x3d, 0x70, 0x3a, 0xf4, 0x76, 0xda, 0x6e, 0xd4, 0x0d, 0xb8, 0xe3, 0x36, 0x77, 0xfc, 0xc0, 0x8b, + 0x76, 0x5b, 0x4e, 0xd8, 0xf5, 0x22, 0x3e, 0x3f, 0x67, 0xa4, 0xbe, 0xac, 0x29, 0xbc, 0x8a, 0x42, + 0xab, 0x09, 0x2c, 0xfb, 0x54, 0x98, 0x5d, 0xc0, 0xbe, 0x0c, 0x93, 0xfa, 0x96, 0x1c, 0xce, 0x9f, + 0x38, 0x57, 0xb8, 0x30, 0x15, 0x5f, 0x3c, 0xd2, 0x1b, 0xb8, 0x0a, 0x19, 0xa9, 0x9d, 0x10, 0xa1, + 0x19, 0x32, 0x52, 0xe3, 0x15, 0x27, 0x93, 0x62, 0xa5, 0x59, 0x7b, 0x86, 0x66, 0x2c, 0xf5, 0xf2, + 0x9d, 0xeb, 0x15, 0x7b, 0x74, 0xa3, 0x7a, 0xbf, 0xd6, 0xf4, 0x23, 0xeb, 0x3f, 0xcb, 0xe1, 0x26, + 0xce, 0x5e, 0xc3, 0xe8, 0x27, 0xf1, 0x73, 0x1e, 0xea, 0x6f, 0xdd, 0x4e, 0x2a, 0xde, 0xb0, 0x44, + 0x61, 0xaf, 0xc3, 0xc8, 0x75, 0xb7, 0xce, 0x23, 0xf5, 0xe8, 0x8a, 0xc8, 0xdb, 0x08, 0xd1, 0x95, + 0xbd, 0x12, 0x47, 0xc8, 0x97, 0x72, 0x72, 0x57, 0x92, 0xec, 0xa8, 0xcb, 0x15, 0xf5, 0xe6, 0x8a, + 0xf2, 0x25, 0x2d, 0x0a, 0x2d, 0x7d, 0x6a, 0xca, 0x3e, 0x39, 0x93, 0x83, 0xf5, 0xa7, 0xb9, 0x64, + 0x57, 0x62, 0xaf, 0xc2, 0x90, 0xbd, 0x11, 0x7f, 0xbf, 0xf4, 0x90, 0x4c, 0x7d, 0x3e, 0x22, 0xb0, + 0x2f, 0xc3, 0x09, 0x8d, 0x4f, 0x8f, 0xb1, 0xf4, 0x2b, 0xe8, 0xc0, 0xa7, 0x7d, 0x49, 0xb6, 0xc5, + 0x74, 0x36, 0x0f, 0x14, 0xa6, 0x93, 0x82, 0x15, 0xde, 0xf6, 0x24, 0x6f, 0xad, 0xb1, 0x3a, 0xef, + 0x06, 0x22, 0xa4, 0x1b, 0x9b, 0xc5, 0x41, 0xfa, 0xef, 0x59, 0xbf, 0x9e, 0x33, 0x76, 0x9b, 0x38, + 0x0d, 0x65, 0xee, 0x88, 0x34, 0x94, 0x6f, 0x01, 0x54, 0xba, 0x91, 0xbf, 0xda, 0x0e, 0xfc, 0xa6, + 0xd4, 0xa2, 0x50, 0xc8, 0x6d, 0xd4, 0x0d, 0x73, 0x04, 0x1b, 0x6e, 0x46, 0x31, 0x72, 0xa6, 0x5d, + 0x79, 0xe1, 0xa3, 0xda, 0x95, 0x5b, 0xbf, 0x9b, 0x33, 0xd6, 0xa8, 0x90, 0x12, 0x69, 0x2a, 0xea, + 0x66, 0x3f, 0x1d, 0xef, 0x91, 0x13, 0x36, 0x7d, 0x7d, 0x87, 0x54, 0x68, 0xec, 0x5f, 0xcf, 0xc1, + 0x49, 0x69, 0xa0, 0xbd, 0xde, 0x6d, 0x6d, 0xf1, 0xe0, 0xbe, 0xdb, 0xf4, 0x1a, 0xd2, 0x4b, 0x55, + 0x0a, 0xc0, 0x17, 0x7a, 0x17, 0x7c, 0x36, 0xbe, 0xbc, 0xa8, 0x4a, 0x83, 0x71, 0xa7, 0x8d, 0x85, + 0xce, 0xa3, 0xb8, 0x54, 0xbf, 0xa8, 0x66, 0xd3, 0x5b, 0xbf, 0x9c, 0x83, 0x17, 0x8f, 0xac, 0x85, + 0x5d, 0x86, 0x51, 0x15, 0xeb, 0x3c, 0x87, 0x1d, 0x8f, 0xc6, 0x92, 0xbd, 0x71, 0xce, 0x15, 0x16, + 0xfb, 0x0a, 0x9c, 0xd0, 0x59, 0x6d, 0x06, 0xae, 0xa7, 0x47, 0x14, 0xcf, 0xf8, 0xea, 0x48, 0xa0, + 0xa4, 0xa5, 0xb5, 0x6c, 0x26, 0xd6, 0xff, 0x97, 0xd3, 0x12, 0xd3, 0x3e, 0xa3, 0x32, 0xfc, 0x35, + 0x43, 0x86, 0x57, 0x71, 0xe7, 0xe2, 0x56, 0x89, 0xb2, 0xcc, 0x7b, 0xd7, 0xb4, 0x66, 0xf4, 0x8b, + 0x80, 0x1f, 0xca, 0xc3, 0xf8, 0xbd, 0x90, 0x07, 0xf2, 0x21, 0xf7, 0x93, 0x15, 0x5f, 0x2c, 0x6e, + 0xd7, 0x40, 0x11, 0xa0, 0xfe, 0x38, 0x87, 0x0a, 0x7e, 0x9d, 0x42, 0xf4, 0x86, 0x96, 0x8c, 0x0a, + 0x7b, 0x03, 0xd3, 0x50, 0x21, 0x54, 0x06, 0x1e, 0x5a, 0x33, 0xf3, 0xd2, 0x61, 0x72, 0xc2, 0x35, + 0xf6, 0x05, 0x18, 0xbe, 0x87, 0xea, 0x4a, 0x33, 0x22, 0x41, 0xcc, 0x1f, 0x0b, 0xe5, 0x26, 0xdd, + 0x0d, 0xcd, 0x60, 0x49, 0x92, 0x90, 0xd5, 0x60, 0x74, 0x39, 0xe0, 0x98, 0x66, 0x76, 0x68, 0x70, + 0x7f, 0xda, 0xba, 0x24, 0x49, 0xfb, 0xd3, 0x12, 0x27, 0xeb, 0xa7, 0xf3, 0xc0, 0x92, 0x36, 0x62, + 0x4e, 0x95, 0xf0, 0x99, 0x1d, 0xf4, 0xf7, 0x8d, 0x41, 0x3f, 0xd3, 0x33, 0xe8, 0xb2, 0x79, 0x03, + 0x8d, 0xfd, 0x6f, 0xe6, 0xe0, 0x64, 0x36, 0x21, 0x7b, 0x09, 0x46, 0xee, 0x6e, 0x6e, 0xa8, 0xa0, + 0x16, 0xd4, 0x14, 0xbf, 0x83, 0xba, 0x02, 0x9b, 0x8a, 0xd8, 0x1b, 0x30, 0xf2, 0x45, 0x7b, 0x59, + 0x9c, 0x43, 0x5a, 0xd4, 0xee, 0x6f, 0x04, 0x4e, 0xdd, 0x3c, 0x8a, 0x08, 0x49, 0x1f, 0xdb, 0xc2, + 0x53, 0x1b, 0xdb, 0x1f, 0xcf, 0xc3, 0x74, 0xa5, 0x5e, 0xe7, 0x61, 0x28, 0xa4, 0x1d, 0x1e, 0x46, + 0xcf, 0xec, 0xc0, 0x66, 0x87, 0xab, 0x30, 0xda, 0x36, 0xd0, 0xa8, 0xfe, 0x76, 0x0e, 0x4e, 0x28, + 0xaa, 0x47, 0x1e, 0x7f, 0xbc, 0xb9, 0x1b, 0xf0, 0x70, 0xd7, 0x6f, 0x36, 0x06, 0x4e, 0x0d, 0x20, + 0x04, 0x3d, 0x8c, 0xf7, 0xab, 0xbf, 0xea, 0x6f, 0x23, 0xc4, 0x10, 0xf4, 0x64, 0x4c, 0xe0, 0xcb, + 0x30, 0x5a, 0xe9, 0x74, 0x02, 0xff, 0x91, 0x5c, 0xf6, 0x14, 0x0e, 0xcd, 0x95, 0x20, 0xc3, 0x1d, + 0x59, 0x82, 0xc4, 0x67, 0xac, 0xf0, 0xb6, 0x0c, 0xf4, 0x35, 0x29, 0x3f, 0xa3, 0xc1, 0xdb, 0xba, + 0x2c, 0x8e, 0xe5, 0x56, 0x0d, 0xd8, 0x46, 0xe0, 0xb7, 0xfc, 0x88, 0x37, 0x64, 0x7b, 0xd0, 0x8b, + 0xfb, 0xc8, 0xc0, 0x40, 0x9b, 0x5e, 0xd4, 0x34, 0x02, 0x03, 0x45, 0x02, 0x60, 0x4b, 0xb8, 0xf5, + 0x7f, 0x0d, 0xc3, 0x84, 0xde, 0x3b, 0xcc, 0x92, 0xf1, 0xbe, 0xfd, 0x40, 0x0f, 0x25, 0xe0, 0x22, + 0xc4, 0xa6, 0x92, 0x24, 0x0e, 0x47, 0xfe, 0xc8, 0x38, 0x1c, 0x0f, 0x60, 0x72, 0x23, 0xf0, 0x31, + 0x6e, 0x9b, 0x4c, 0x3f, 0x2e, 0xb7, 0xc2, 0x59, 0xed, 0xde, 0x29, 0x06, 0x12, 0xdf, 0x43, 0x51, + 0xb2, 0xef, 0x10, 0xb6, 0x93, 0x4e, 0x4e, 0x6e, 0xf2, 0x91, 0xa6, 0x16, 0x6e, 0x48, 0xc1, 0x17, + 0x63, 0x53, 0x0b, 0x01, 0x31, 0x4d, 0x2d, 0x04, 0x44, 0x5f, 0x6b, 0xc3, 0x4f, 0x6b, 0xad, 0xb1, + 0x9f, 0xce, 0xc1, 0x78, 0xa5, 0xdd, 0xa6, 0xf8, 0x1e, 0x47, 0xb8, 0x36, 0x7f, 0x85, 0xac, 0x2d, + 0xde, 0xfe, 0x48, 0xd6, 0x16, 0x28, 0xb7, 0x84, 0x28, 0xa9, 0x26, 0x15, 0xea, 0xb7, 0x35, 0xed, + 0x3b, 0xd8, 0xdb, 0x50, 0x8a, 0x27, 0x79, 0xb5, 0xdd, 0xe0, 0x4f, 0xb8, 0xcc, 0x97, 0x34, 0x49, + 0x61, 0x57, 0x75, 0xc9, 0x34, 0x8d, 0xc8, 0x36, 0x01, 0xdc, 0x78, 0x76, 0xa5, 0x12, 0xbf, 0xf5, + 0x4e, 0x3f, 0x92, 0x9e, 0xf1, 0x37, 0x3e, 0x68, 0xe9, 0xd2, 0x73, 0xc2, 0x87, 0xb5, 0x60, 0x5a, + 0x66, 0x5d, 0xc3, 0x6c, 0xec, 0x18, 0x5d, 0x1c, 0x8e, 0x1c, 0x87, 0x57, 0x49, 0x7f, 0xf6, 0x3c, + 0xe5, 0x72, 0xc3, 0x04, 0xef, 0x4e, 0x46, 0xa8, 0xf1, 0x34, 0x6f, 0x19, 0xe4, 0xd6, 0x3e, 0xd5, + 0xfb, 0xbd, 0x72, 0xd2, 0xff, 0x78, 0x0e, 0x4e, 0xea, 0x93, 0xbe, 0xd6, 0xdd, 0x6a, 0x79, 0x78, + 0x29, 0x64, 0x97, 0x60, 0x8c, 0xe6, 0x64, 0x7c, 0x89, 0xea, 0x0d, 0x92, 0x9e, 0xa0, 0xb0, 0x55, + 0x31, 0x0d, 0x05, 0x0f, 0x92, 0xba, 0x67, 0x53, 0xfb, 0x94, 0x28, 0x4a, 0x32, 0x7a, 0x06, 0xf8, + 0xdb, 0x9c, 0x9f, 0x02, 0x62, 0xbd, 0x07, 0x33, 0xe6, 0x48, 0xd4, 0x78, 0xc4, 0x2e, 0xc2, 0xa8, + 0x1a, 0xbe, 0x5c, 0xf6, 0xf0, 0xa9, 0x72, 0xeb, 0x01, 0xb0, 0x1e, 0xfa, 0x10, 0xcd, 0xa2, 0x78, + 0xa4, 0xcc, 0xf6, 0xd4, 0xa3, 0x64, 0x0f, 0xe2, 0xd2, 0x2c, 0x7d, 0xdf, 0xb8, 0x61, 0x5b, 0x2e, + 0x48, 0xad, 0x3f, 0x9d, 0x82, 0xd9, 0x8c, 0x3d, 0xf7, 0x08, 0x99, 0xa8, 0x6c, 0x6e, 0x10, 0x63, + 0x71, 0x64, 0x04, 0xb5, 0x2d, 0xbc, 0x07, 0xc3, 0x47, 0x6e, 0x07, 0xd2, 0xb3, 0x20, 0xb5, 0x0b, + 0x48, 0xb2, 0xef, 0x8a, 0x5c, 0xa4, 0x07, 0x2f, 0x19, 0x7e, 0x6a, 0xc1, 0x4b, 0x96, 0x60, 0x92, + 0x5a, 0x45, 0xdb, 0x95, 0x66, 0xe1, 0x1a, 0xc8, 0x02, 0xa7, 0x67, 0xdb, 0x32, 0x49, 0x24, 0x8f, + 0xd0, 0x6f, 0x3e, 0xe2, 0xc4, 0x63, 0x54, 0xe7, 0x81, 0x05, 0x99, 0x3c, 0x34, 0x12, 0xf6, 0x1f, + 0x60, 0xc6, 0x27, 0x84, 0xe8, 0x7b, 0x56, 0xf1, 0xb0, 0x3d, 0xab, 0xf1, 0x74, 0xf6, 0xac, 0x33, + 0xea, 0x1b, 0xb3, 0xf7, 0xae, 0x8c, 0xcf, 0x62, 0xbf, 0x98, 0x83, 0x19, 0x19, 0x41, 0x43, 0xff, + 0xd8, 0x43, 0xa3, 0x22, 0xd4, 0x9f, 0xce, 0xc7, 0xbe, 0x40, 0x99, 0x4e, 0xb2, 0xbf, 0xb5, 0xf7, + 0xa3, 0xd8, 0xf7, 0x00, 0xc4, 0x2b, 0x4a, 0x06, 0x9a, 0x1c, 0x5f, 0x7c, 0x21, 0x63, 0x17, 0x88, + 0x91, 0x92, 0xa8, 0xec, 0x51, 0x4c, 0x67, 0xe4, 0xf9, 0x8a, 0xa1, 0xec, 0x6f, 0xc0, 0x9c, 0x58, + 0x2f, 0x31, 0x84, 0xe2, 0xfd, 0xcc, 0x8f, 0x63, 0x2d, 0x9f, 0xe9, 0x2f, 0x13, 0x5d, 0xca, 0x22, + 0x93, 0x61, 0x49, 0x93, 0x94, 0xab, 0x91, 0x1e, 0x1a, 0x20, 0xb3, 0x22, 0x0c, 0xa3, 0x85, 0x5f, + 0x2f, 0x23, 0xa7, 0xf7, 0xd9, 0xdf, 0x4e, 0xab, 0xb5, 0x20, 0xf7, 0xb7, 0xd0, 0x74, 0x34, 0x45, + 0x10, 0xfb, 0x22, 0xb0, 0x38, 0xf4, 0x84, 0x84, 0x71, 0x15, 0x55, 0x5d, 0xaa, 0x9b, 0x93, 0x10, + 0x16, 0x81, 0x2a, 0xd6, 0x27, 0x49, 0x2f, 0x31, 0xe3, 0x30, 0x47, 0x8d, 0x16, 0x50, 0x95, 0x8e, + 0x29, 0x9c, 0x9f, 0x32, 0xa2, 0x29, 0x25, 0x25, 0x49, 0x6e, 0x56, 0x2d, 0xa7, 0x93, 0xa1, 0x72, + 0xca, 0x62, 0xc7, 0xae, 0xc1, 0x18, 0x7a, 0x7b, 0xde, 0x54, 0xc6, 0x5e, 0x64, 0x78, 0x82, 0x7e, + 0xa1, 0xce, 0xae, 0x69, 0xb2, 0x95, 0xa0, 0x8a, 0xeb, 0xc0, 0x4a, 0xb0, 0x67, 0x77, 0xdb, 0xa8, + 0x14, 0x26, 0x7d, 0x47, 0x23, 0xd8, 0x73, 0x82, 0xae, 0xe9, 0x0e, 0x8c, 0x48, 0xec, 0xeb, 0x30, + 0x7e, 0xc7, 0x7d, 0xa2, 0x74, 0xc2, 0xa4, 0xf8, 0x3d, 0x6c, 0x07, 0xb2, 0x54, 0x6b, 0x5a, 0xee, + 0x13, 0xa7, 0xd1, 0x4d, 0x07, 0x45, 0xc5, 0x6d, 0x48, 0x67, 0xc9, 0xbe, 0x0a, 0xa0, 0x69, 0xaa, + 0xd9, 0x91, 0x15, 0xbc, 0xa8, 0x62, 0x84, 0x65, 0x6a, 0xb0, 0x91, 0xbf, 0xc6, 0x30, 0x25, 0x39, + 0xcc, 0x7d, 0xf7, 0x24, 0x87, 0x13, 0xdf, 0x3d, 0xc9, 0x61, 0x61, 0x0b, 0x4e, 0xf7, 0x5d, 0x3a, + 0x19, 0xa1, 0x5b, 0x2f, 0x9b, 0xa1, 0x5b, 0x4f, 0xf7, 0x3b, 0x62, 0x43, 0x33, 0x10, 0xff, 0x6c, + 0x69, 0xae, 0xbf, 0x74, 0xf2, 0xed, 0x7c, 0xea, 0xc8, 0xa5, 0x8b, 0x85, 0x4c, 0xdc, 0xd2, 0x4f, + 0x26, 0xc9, 0x63, 0xae, 0x4e, 0x79, 0x28, 0xe7, 0x93, 0x0b, 0x4d, 0x2a, 0xbd, 0xb9, 0x3c, 0x9e, + 0x3f, 0xee, 0xe9, 0xfb, 0x0e, 0x4c, 0xc9, 0xf4, 0x7a, 0xb7, 0xf9, 0xde, 0x63, 0x3f, 0x68, 0xa8, + 0x1c, 0xd6, 0x28, 0x83, 0xf7, 0xe4, 0xc6, 0x4d, 0xe1, 0xb2, 0x15, 0xe5, 0x40, 0x38, 0x8c, 0xb5, + 0x9f, 0xce, 0xdc, 0xc5, 0x04, 0xc2, 0x61, 0xbe, 0x85, 0xec, 0xcd, 0x58, 0x50, 0xe3, 0x81, 0x1e, + 0x8e, 0x3f, 0x50, 0xc0, 0x0c, 0x79, 0x8d, 0x07, 0xd6, 0x1f, 0x16, 0x80, 0xc9, 0x9a, 0x96, 0xdd, + 0x8e, 0x8b, 0xee, 0xb5, 0x1e, 0x06, 0xa6, 0x29, 0x11, 0x8e, 0xbb, 0xd5, 0xe4, 0x7a, 0x54, 0x27, + 0x32, 0xae, 0x8d, 0xcb, 0x9c, 0xf4, 0x45, 0xa7, 0x87, 0xb0, 0xcf, 0x56, 0x97, 0xff, 0x38, 0x5b, + 0xdd, 0xd7, 0xe1, 0xf9, 0x4a, 0x07, 0xf3, 0x74, 0xaa, 0x5a, 0xae, 0xfb, 0x81, 0xda, 0xa4, 0x0c, + 0xc7, 0x2d, 0x37, 0x46, 0xeb, 0xf9, 0xd2, 0xc3, 0x58, 0x68, 0x72, 0x8a, 0x98, 0x97, 0x9d, 0x48, + 0x0f, 0x04, 0xa0, 0xe4, 0x94, 0x0e, 0x96, 0x64, 0xc8, 0x29, 0x92, 0x44, 0xf1, 0xf0, 0x02, 0x25, + 0xa7, 0x60, 0x02, 0x9a, 0x84, 0x87, 0x17, 0xf0, 0x3e, 0xb2, 0x4e, 0x4c, 0xc2, 0xde, 0x81, 0xf1, + 0x4a, 0x37, 0xf2, 0x89, 0x31, 0x59, 0x85, 0x27, 0xf6, 0xdb, 0xf4, 0x29, 0xc6, 0xd5, 0x27, 0x41, + 0xb7, 0xfe, 0xa4, 0x00, 0xa7, 0x7b, 0x87, 0x97, 0x4a, 0xe3, 0xf5, 0x91, 0x3b, 0x62, 0x7d, 0x64, + 0xcd, 0x86, 0x7c, 0x12, 0x1e, 0xfd, 0x69, 0xcc, 0x06, 0x99, 0xee, 0xf3, 0x23, 0xce, 0x86, 0x1a, + 0x8c, 0xeb, 0xe7, 0xdd, 0xd0, 0x47, 0x3d, 0xef, 0x74, 0x2e, 0xe2, 0x52, 0x2f, 0xe3, 0x1f, 0x0c, + 0x27, 0x4f, 0x47, 0xe9, 0xd0, 0x07, 0x12, 0x83, 0xfd, 0x6b, 0x70, 0x4e, 0xee, 0x49, 0xe9, 0xc6, + 0x2e, 0xed, 0x29, 0x8e, 0x34, 0x70, 0x8b, 0x07, 0xfb, 0xe5, 0x4b, 0x52, 0x55, 0xe2, 0xf4, 0x74, + 0x9b, 0xb3, 0xb5, 0xe7, 0xa8, 0x2f, 0xd3, 0x2a, 0x39, 0x92, 0x37, 0xe6, 0xf8, 0xd4, 0xf2, 0x2f, + 0xbe, 0x91, 0xe5, 0x2e, 0x23, 0xa3, 0x13, 0x4b, 0xb0, 0xe9, 0x29, 0xa3, 0xd4, 0x61, 0xf9, 0x4c, + 0x75, 0x98, 0xd2, 0xa7, 0x14, 0x32, 0xf5, 0x29, 0x2b, 0x30, 0x5d, 0xeb, 0x6e, 0xa9, 0xba, 0xd3, + 0xfe, 0x72, 0x61, 0x77, 0x2b, 0xab, 0x41, 0x69, 0x12, 0xeb, 0x87, 0xf3, 0x30, 0xb1, 0xd1, 0xec, + 0xee, 0x78, 0xed, 0x15, 0x37, 0x72, 0x9f, 0x59, 0x0d, 0xdd, 0x5b, 0x86, 0x86, 0x2e, 0xf6, 0x0a, + 0x8b, 0x1b, 0x36, 0x90, 0x7a, 0xee, 0xa7, 0x72, 0x30, 0x9d, 0x90, 0xc8, 0x73, 0xf6, 0x26, 0x0c, + 0x89, 0x1f, 0x74, 0x6f, 0x3d, 0xd7, 0xc3, 0x58, 0x26, 0xfd, 0x8a, 0xff, 0x22, 0x9d, 0x99, 0x99, + 0x51, 0x07, 0x39, 0x2c, 0x7c, 0x16, 0xc6, 0x12, 0xb6, 0xc7, 0x49, 0xf6, 0xf5, 0x2b, 0x39, 0x28, + 0xa5, 0x5b, 0xc2, 0x6e, 0xc3, 0xa8, 0xe0, 0xe4, 0x71, 0x75, 0xa5, 0x7e, 0xb9, 0x4f, 0x9b, 0x2f, + 0x11, 0x9a, 0xfc, 0x3c, 0xec, 0x7c, 0x2e, 0x21, 0xb6, 0xe2, 0xb0, 0x60, 0xc3, 0x84, 0x8e, 0x95, + 0xf1, 0x75, 0xaf, 0x9b, 0xc2, 0xc5, 0xc9, 0xec, 0x7e, 0x30, 0x52, 0x94, 0x19, 0x5f, 0x4d, 0x72, + 0xc3, 0x79, 0x63, 0x72, 0x61, 0x5f, 0xa5, 0xe6, 0x8d, 0x9c, 0x66, 0x8b, 0x49, 0xc0, 0x74, 0x7d, + 0x9e, 0x65, 0x4c, 0xe8, 0x18, 0x8f, 0xbd, 0x0e, 0x23, 0xb2, 0x3e, 0x3d, 0x55, 0x4f, 0x07, 0x21, + 0xba, 0x88, 0x2b, 0x71, 0xac, 0xbf, 0x5f, 0x80, 0x93, 0xc9, 0xe7, 0xdd, 0xeb, 0x34, 0xdc, 0x88, + 0x6f, 0xb8, 0x81, 0xdb, 0x0a, 0x8f, 0x58, 0x01, 0x17, 0x7a, 0x3e, 0x0d, 0x53, 0xb7, 0xa8, 0x4f, + 0xd3, 0x3e, 0xc8, 0x4a, 0x7d, 0x10, 0xaa, 0x2f, 0xe5, 0x07, 0xa9, 0xcf, 0x60, 0xb7, 0xa1, 0x50, + 0xe3, 0x11, 0x6d, 0x9b, 0xe7, 0x7b, 0x7a, 0x55, 0xff, 0xae, 0x4b, 0x35, 0x1e, 0xc9, 0x41, 0x94, + 0x71, 0x79, 0xb8, 0x11, 0x89, 0xb5, 0xc6, 0x23, 0xf6, 0x00, 0x46, 0x56, 0x9f, 0x74, 0x78, 0x3d, + 0xa2, 0x54, 0x75, 0x17, 0x0f, 0xe7, 0x27, 0x71, 0xb5, 0x4c, 0x75, 0x1c, 0x01, 0x7a, 0x67, 0x49, + 0x94, 0x85, 0x6b, 0x50, 0x54, 0x95, 0x1f, 0x67, 0xe6, 0x2e, 0xbc, 0x05, 0xe3, 0x5a, 0x25, 0xc7, + 0x9a, 0xf4, 0x3f, 0x27, 0xf6, 0x55, 0xbf, 0xa9, 0xb2, 0xdb, 0xad, 0xf6, 0x88, 0x79, 0x39, 0x3d, + 0xeb, 0xba, 0x28, 0x71, 0x1e, 0x52, 0xd1, 0x21, 0xf2, 0x5e, 0x15, 0xa6, 0x6b, 0x0f, 0xbd, 0x4e, + 0x12, 0x10, 0xd3, 0x38, 0x4c, 0x31, 0x95, 0x05, 0xdd, 0xb9, 0xd3, 0x87, 0x69, 0x9a, 0xce, 0xfa, + 0xf3, 0x1c, 0x8c, 0x88, 0xbf, 0xee, 0x5f, 0x7b, 0x46, 0xb7, 0xcc, 0xab, 0xc6, 0x96, 0x39, 0xa3, + 0xc5, 0xa4, 0xc6, 0x8d, 0xe3, 0xda, 0x11, 0x9b, 0xe5, 0x3e, 0x0d, 0x90, 0x44, 0x66, 0x37, 0x60, + 0x94, 0xac, 0x81, 0xc8, 0x6c, 0x5b, 0x0f, 0x72, 0xad, 0xec, 0x84, 0xe2, 0xcb, 0xb9, 0xdf, 0x49, + 0x6b, 0x33, 0x14, 0xb5, 0x10, 0xc9, 0x55, 0x68, 0x52, 0x23, 0x27, 0xaa, 0x8f, 0x7e, 0x76, 0x32, + 0x44, 0xb3, 0x96, 0xc5, 0xb8, 0x8f, 0x17, 0x7e, 0x85, 0x1e, 0x32, 0x0a, 0x87, 0x31, 0x39, 0xa9, + 0x52, 0x46, 0x66, 0xbe, 0x71, 0xfc, 0xc1, 0x09, 0x19, 0xd8, 0x58, 0x7d, 0xd8, 0xbb, 0x30, 0x71, + 0xdd, 0x0f, 0x1e, 0xbb, 0x81, 0x0c, 0x57, 0x49, 0x96, 0x03, 0xe2, 0xea, 0x38, 0xb9, 0x2d, 0xe1, + 0x32, 0xe0, 0xe5, 0x77, 0xf6, 0xcb, 0x43, 0x4b, 0xbe, 0xdf, 0xb4, 0x0d, 0x74, 0x76, 0x17, 0x26, + 0xef, 0xb8, 0x4f, 0xb4, 0x4b, 0xaf, 0x74, 0x9c, 0xb9, 0x28, 0x26, 0xb0, 0xb8, 0x35, 0x1f, 0x6d, + 0x9a, 0x65, 0xd2, 0x33, 0x0f, 0xa6, 0x36, 0xfc, 0x20, 0xa2, 0x4a, 0xbc, 0xf6, 0x0e, 0x35, 0xb6, + 0xd7, 0xb8, 0xec, 0x72, 0xa6, 0x71, 0xd9, 0xe9, 0x8e, 0x1f, 0x44, 0xce, 0x76, 0x4c, 0x6e, 0x04, + 0xb4, 0x32, 0x18, 0xb3, 0x77, 0x61, 0x46, 0x0b, 0xd8, 0x77, 0xdd, 0x0f, 0x5a, 0xae, 0x12, 0xca, + 0x51, 0x0f, 0x8c, 0xf6, 0x26, 0xdb, 0x08, 0xb6, 0x7b, 0x31, 0xd9, 0x97, 0xb3, 0x5c, 0x91, 0x86, + 0x13, 0xeb, 0xb4, 0x0c, 0x57, 0xa4, 0x7e, 0xd6, 0x69, 0xbd, 0x4e, 0x49, 0x3b, 0x87, 0x59, 0xaf, + 0x16, 0x97, 0xae, 0xd0, 0xf5, 0xfb, 0x68, 0xeb, 0xd4, 0x78, 0xdc, 0xfa, 0x58, 0xa9, 0x2e, 0x42, + 0x61, 0x69, 0xe3, 0x3a, 0xbe, 0x5e, 0x28, 0x43, 0x9b, 0xf6, 0xae, 0xdb, 0xae, 0xa3, 0xb0, 0x4c, + 0x16, 0xe3, 0xfa, 0x8e, 0xbc, 0xb4, 0x71, 0x9d, 0xb9, 0x30, 0xbb, 0xc1, 0x83, 0x96, 0x17, 0x7d, + 0xe9, 0xca, 0x15, 0x6d, 0xa0, 0x8a, 0xf8, 0x69, 0x97, 0xe9, 0xd3, 0xca, 0x1d, 0x44, 0x71, 0x9e, + 0x5c, 0xb9, 0x92, 0x39, 0x1c, 0xf1, 0x87, 0x65, 0xf1, 0x12, 0x3b, 0xe3, 0x1d, 0xf7, 0x49, 0x62, + 0xe8, 0x1f, 0x92, 0x53, 0xe7, 0x19, 0x35, 0xb1, 0x12, 0x27, 0x01, 0x63, 0x67, 0x34, 0x89, 0xc4, + 0x5d, 0x27, 0x99, 0x5e, 0x21, 0xb9, 0xc3, 0x2c, 0x28, 0x95, 0x8e, 0xf2, 0xfc, 0xd5, 0x05, 0x76, + 0x0d, 0x9d, 0xdd, 0x8b, 0x6f, 0x6c, 0xf2, 0xc6, 0x43, 0x09, 0x11, 0x2f, 0xeb, 0x37, 0x36, 0xa9, + 0x48, 0x31, 0x9a, 0x35, 0x1d, 0x5f, 0xf3, 0xa5, 0xe7, 0x83, 0x6d, 0x72, 0xe9, 0xbd, 0x08, 0x4e, + 0x1c, 0xff, 0x22, 0xc8, 0x61, 0x68, 0xcd, 0xaf, 0x3f, 0xa4, 0x28, 0x5c, 0x5f, 0x14, 0xcb, 0xbd, + 0xe9, 0xd7, 0x1f, 0x3e, 0x3d, 0xab, 0x5c, 0x64, 0xcf, 0xd6, 0xc5, 0xa7, 0x8a, 0x59, 0x40, 0x7d, + 0x42, 0x96, 0x9e, 0x73, 0xf1, 0x4d, 0x48, 0x2b, 0x93, 0x82, 0x8f, 0x9c, 0x34, 0xaa, 0x6b, 0x6d, + 0x93, 0x9c, 0x71, 0x28, 0xad, 0xf0, 0xf0, 0x61, 0xe4, 0x77, 0x96, 0x9b, 0x5e, 0x67, 0xcb, 0x77, + 0x03, 0x15, 0x1b, 0xb5, 0x77, 0x7d, 0xbf, 0x9a, 0xb9, 0xbe, 0x67, 0x1a, 0x92, 0xde, 0xa9, 0x2b, + 0x06, 0x76, 0x0f, 0x4b, 0xf6, 0x65, 0x98, 0x12, 0x93, 0x7b, 0xf5, 0x49, 0xc4, 0xdb, 0x72, 0xe4, + 0x67, 0x50, 0x74, 0x98, 0xd3, 0x92, 0x01, 0xc4, 0x85, 0x72, 0x4e, 0xe1, 0x62, 0xe7, 0x31, 0x81, + 0x11, 0xc1, 0xcc, 0x60, 0xc5, 0x1a, 0x30, 0x7f, 0xc7, 0x7d, 0xa2, 0xa5, 0x71, 0xd4, 0x26, 0x29, + 0xc3, 0x09, 0x76, 0xe1, 0x60, 0xbf, 0xfc, 0xb2, 0x98, 0x60, 0x49, 0xb8, 0xde, 0x3e, 0xf3, 0xb5, + 0x2f, 0x27, 0xf6, 0xbd, 0x70, 0x8a, 0x9a, 0xb5, 0x82, 0x19, 0x72, 0xfc, 0x60, 0xaf, 0xb6, 0xeb, + 0xa2, 0x8f, 0xcf, 0xec, 0xf1, 0x36, 0x44, 0xd5, 0x61, 0x0d, 0xc5, 0xc7, 0x09, 0x25, 0x23, 0xbb, + 0x5f, 0x0d, 0xec, 0x43, 0x98, 0x92, 0x4f, 0x36, 0x37, 0xfd, 0x30, 0xc2, 0x0b, 0xfd, 0xdc, 0xf1, + 0x4c, 0xd7, 0xe5, 0x3b, 0x90, 0x74, 0xf6, 0x48, 0x29, 0x00, 0x52, 0x9c, 0xd9, 0xdb, 0x30, 0xbe, + 0xe1, 0xb5, 0x65, 0x8c, 0xc1, 0xea, 0x06, 0xaa, 0x1e, 0xe9, 0xfc, 0xe9, 0x78, 0x6d, 0x47, 0xdd, + 0xaa, 0x3b, 0xf1, 0x76, 0xa1, 0x63, 0xb3, 0x07, 0x30, 0x5e, 0xab, 0xdd, 0xbc, 0xee, 0x89, 0x03, + 0xb0, 0xb3, 0x37, 0x7f, 0xb2, 0xcf, 0x57, 0xbe, 0x94, 0xf9, 0x95, 0x93, 0x61, 0xb8, 0x8b, 0xa9, + 0xf1, 0x9d, 0xba, 0xdf, 0xd9, 0xb3, 0x75, 0x4e, 0x19, 0xe6, 0xdc, 0xa7, 0x9e, 0xb2, 0x39, 0x77, + 0x15, 0xa6, 0x35, 0x03, 0x4b, 0x34, 0xae, 0x9c, 0x4f, 0x02, 0xd3, 0xe8, 0xe6, 0xdb, 0x69, 0xf7, + 0xc5, 0x34, 0x9d, 0xb2, 0xe3, 0x3e, 0x7d, 0x5c, 0x3b, 0x6e, 0x0f, 0x66, 0xe4, 0x60, 0xd0, 0x3c, + 0xc0, 0x91, 0x5e, 0xe8, 0xd3, 0x87, 0x17, 0x33, 0xfb, 0x70, 0x96, 0x46, 0x5a, 0x4d, 0x32, 0x7c, + 0xa2, 0xec, 0xe5, 0xca, 0xb6, 0x81, 0x11, 0x90, 0x12, 0xf3, 0x63, 0x5d, 0xcf, 0xf7, 0xa9, 0xeb, + 0xe5, 0xcc, 0xba, 0xa6, 0x54, 0x5d, 0x5b, 0xb2, 0x9a, 0x0c, 0x8e, 0xac, 0xad, 0xea, 0x51, 0xf3, + 0x0b, 0x3b, 0xf6, 0x05, 0x43, 0x0f, 0xda, 0x8b, 0x20, 0x03, 0xfc, 0xa6, 0x27, 0x6d, 0xba, 0xdf, + 0x33, 0x38, 0xb3, 0x27, 0x70, 0xb2, 0xf7, 0x2b, 0xb0, 0xce, 0x33, 0x58, 0xe7, 0x19, 0xa3, 0xce, + 0x34, 0x92, 0x9c, 0x37, 0x66, 0xb3, 0xd2, 0xb5, 0xf6, 0xe1, 0xcf, 0x7e, 0x20, 0x07, 0xa7, 0xee, + 0x5c, 0xaf, 0x60, 0x3e, 0x3a, 0x4f, 0x86, 0x9c, 0x8a, 0xdd, 0x3e, 0xcf, 0x92, 0xae, 0x3c, 0xad, + 0xbf, 0x57, 0x12, 0x07, 0x6e, 0x15, 0x42, 0x46, 0x7c, 0xa9, 0xb5, 0xed, 0xca, 0x34, 0x77, 0xc4, + 0x22, 0xc3, 0x37, 0xf4, 0x5b, 0x7f, 0x54, 0xce, 0xd9, 0xfd, 0xaa, 0x62, 0x4d, 0x58, 0x30, 0xbb, + 0x45, 0x59, 0xda, 0xef, 0xf2, 0x66, 0x73, 0xbe, 0x8c, 0x33, 0xfa, 0xf5, 0x83, 0xfd, 0xf2, 0x85, + 0x9e, 0xde, 0x8d, 0xad, 0xf7, 0x05, 0xa6, 0xd6, 0xe0, 0x43, 0xf8, 0xdd, 0x1a, 0x2a, 0x4e, 0x96, + 0xa6, 0x32, 0xec, 0xcc, 0xad, 0xdf, 0xc8, 0xa7, 0x4e, 0x2a, 0x56, 0x85, 0x51, 0x9a, 0x80, 0x24, + 0xba, 0xf7, 0x4e, 0xb3, 0x33, 0x99, 0xd3, 0x6c, 0x94, 0xe6, 0xb2, 0xad, 0xe8, 0xd9, 0x63, 0xc1, + 0x0a, 0xbf, 0x82, 0xee, 0x3a, 0x5f, 0x95, 0x07, 0x11, 0x82, 0x8c, 0x23, 0x77, 0xe5, 0xf8, 0xde, + 0x53, 0xa6, 0x73, 0x1e, 0x9e, 0xbd, 0xaa, 0x36, 0xf6, 0x50, 0x26, 0x4b, 0x29, 0xc4, 0x2e, 0x38, + 0x66, 0x66, 0x94, 0xa7, 0x56, 0xa1, 0xa8, 0xc5, 0xfa, 0xf5, 0x1c, 0x4c, 0x1a, 0x47, 0x1d, 0xbb, + 0xa6, 0xf9, 0x97, 0x25, 0x2e, 0xd7, 0x06, 0x0e, 0xee, 0x7e, 0x69, 0xcf, 0xb3, 0x6b, 0x64, 0x2c, + 0x9e, 0xef, 0x4f, 0x87, 0xb3, 0x3f, 0xed, 0x6e, 0x78, 0xb8, 0x66, 0x30, 0x4e, 0xc1, 0x36, 0xd4, + 0x27, 0x05, 0xdb, 0xaf, 0xbc, 0x00, 0x53, 0xe6, 0x5d, 0x88, 0xbd, 0x0e, 0x23, 0xa8, 0x50, 0x55, + 0x17, 0x6b, 0x99, 0xba, 0xde, 0x4f, 0x65, 0x13, 0x25, 0x1c, 0xf6, 0x0a, 0x40, 0x6c, 0xb5, 0xab, + 0x9e, 0x13, 0x86, 0x0f, 0xf6, 0xcb, 0xb9, 0x37, 0x6c, 0xad, 0x80, 0x7d, 0x0d, 0x60, 0xdd, 0x6f, + 0xf0, 0x38, 0x5f, 0xe5, 0x21, 0x4f, 0xe6, 0xaf, 0xf6, 0x24, 0x12, 0x38, 0xd1, 0xf6, 0x1b, 0xbc, + 0x37, 0x6b, 0x80, 0xc6, 0x91, 0x7d, 0x1e, 0x86, 0xed, 0xae, 0xb8, 0xc4, 0x4b, 0xfd, 0xc9, 0xb8, + 0x3a, 0x72, 0xba, 0x4d, 0x9e, 0xdc, 0x10, 0x83, 0x6e, 0xda, 0x1a, 0x4c, 0x00, 0xd8, 0xfb, 0x32, + 0xc1, 0x00, 0x45, 0xe7, 0x1b, 0x4e, 0x1e, 0x58, 0x34, 0x51, 0xa4, 0x27, 0x3e, 0x9f, 0x46, 0xc2, + 0xee, 0xc2, 0xa8, 0xfe, 0x32, 0xa0, 0x39, 0x2a, 0xeb, 0xaf, 0x47, 0xda, 0x75, 0x93, 0x12, 0x5d, + 0xa6, 0x1f, 0x0d, 0x14, 0x17, 0xf6, 0x0e, 0x8c, 0x09, 0xf6, 0x62, 0x29, 0x87, 0x74, 0xcd, 0xc0, + 0x67, 0x14, 0xed, 0x83, 0xc4, 0x76, 0x60, 0xc4, 0xd0, 0x8b, 0x09, 0xd8, 0x97, 0x31, 0x85, 0x22, + 0x75, 0xf5, 0xa1, 0xa6, 0x14, 0xe7, 0x7b, 0xba, 0x1a, 0x73, 0x2a, 0xf6, 0xe6, 0x64, 0x8f, 0xf9, + 0xb1, 0x9d, 0x38, 0x4e, 0xd6, 0x20, 0x49, 0x21, 0x5e, 0xeb, 0xa9, 0x60, 0x5e, 0x85, 0x7e, 0xea, + 0xcd, 0x3b, 0x6a, 0xf0, 0x65, 0x1d, 0x28, 0x25, 0x52, 0x1e, 0xd5, 0x05, 0x87, 0xd5, 0xf5, 0x46, + 0x4f, 0x5d, 0xfa, 0x00, 0xf6, 0x54, 0xd7, 0xc3, 0x9d, 0x35, 0x60, 0x4a, 0x9d, 0x18, 0x54, 0xdf, + 0xf8, 0x61, 0xf5, 0xbd, 0xd2, 0x53, 0xdf, 0x6c, 0x63, 0xab, 0xb7, 0x9e, 0x14, 0x4f, 0xf6, 0x0e, + 0x4c, 0x2a, 0x88, 0xcc, 0x02, 0x3a, 0x91, 0xa4, 0x7b, 0x6c, 0x6c, 0xf5, 0xe4, 0xfe, 0x34, 0x91, + 0x75, 0x6a, 0x39, 0x3b, 0x26, 0x0d, 0xea, 0xf4, 0xac, 0x30, 0x91, 0xd9, 0x07, 0x30, 0x5e, 0x6d, + 0x89, 0x86, 0xf8, 0x6d, 0x37, 0xe2, 0xe4, 0xc4, 0xa6, 0xcc, 0x42, 0xb4, 0x12, 0x6d, 0xaa, 0xca, + 0xfc, 0xa6, 0x49, 0x91, 0x91, 0xdf, 0x34, 0x01, 0x8b, 0xce, 0x93, 0x4f, 0x41, 0x34, 0x87, 0x95, + 0x83, 0xdb, 0x99, 0x0c, 0xd3, 0x0c, 0x8d, 0x3d, 0x45, 0xc1, 0x14, 0x50, 0xf5, 0x14, 0x93, 0x8a, + 0x82, 0xa9, 0xf3, 0x64, 0xef, 0xc2, 0x38, 0xe5, 0xcb, 0xa9, 0xd8, 0xeb, 0xe1, 0x7c, 0x09, 0x1b, + 0x8f, 0x6e, 0xf9, 0x2a, 0xb5, 0x8e, 0xe3, 0x06, 0x29, 0x1b, 0xc4, 0x04, 0x9f, 0x7d, 0x09, 0xe6, + 0x1e, 0x78, 0xed, 0x86, 0xff, 0x38, 0xa4, 0x63, 0x8a, 0x36, 0xba, 0x99, 0xc4, 0x03, 0xe8, 0xb1, + 0x2c, 0x8f, 0x85, 0xb3, 0x9e, 0x8d, 0x2f, 0x93, 0x03, 0xfb, 0xeb, 0x3d, 0x9c, 0xe5, 0x0c, 0x62, + 0x87, 0xcd, 0xa0, 0xc5, 0x9e, 0x19, 0xd4, 0x5b, 0x7d, 0x7a, 0x3a, 0x65, 0x56, 0xc3, 0x7c, 0x60, + 0xe6, 0xf9, 0x7e, 0xcb, 0xf7, 0xda, 0xf3, 0xb3, 0xb8, 0x17, 0x3e, 0x9f, 0x76, 0x84, 0x47, 0x3c, + 0xca, 0x13, 0x6b, 0x1d, 0xec, 0x97, 0xcf, 0xa6, 0x85, 0xf0, 0x0f, 0x7d, 0x43, 0x51, 0x9e, 0xc1, + 0x9a, 0x7d, 0x00, 0x13, 0xe2, 0xff, 0x58, 0x4b, 0x30, 0x67, 0x18, 0xf3, 0x69, 0x98, 0x54, 0x0f, + 0x8e, 0x11, 0x26, 0xf4, 0xc9, 0x50, 0x20, 0x18, 0xac, 0xd8, 0x5b, 0x00, 0x42, 0x8e, 0xa1, 0xed, + 0xf8, 0x44, 0x12, 0x74, 0x14, 0xc5, 0xa0, 0xde, 0x8d, 0x38, 0x41, 0x66, 0xef, 0xc0, 0xb8, 0xf8, + 0x55, 0xeb, 0x36, 0x7c, 0xb1, 0x36, 0x4e, 0x22, 0xad, 0xf4, 0x27, 0x14, 0xb4, 0xa1, 0x84, 0x1b, + 0xfe, 0x84, 0x09, 0x3a, 0xbb, 0x09, 0xd3, 0x18, 0x1c, 0xb6, 0x8a, 0x49, 0xa4, 0x23, 0x8f, 0x87, + 0xf3, 0xa7, 0xb4, 0x27, 0x6c, 0x51, 0xe4, 0x78, 0x71, 0x99, 0x7e, 0xb9, 0x48, 0x91, 0xb1, 0x10, + 0x66, 0x93, 0xdd, 0x25, 0x79, 0x10, 0x9f, 0xc7, 0x4e, 0x52, 0x22, 0x75, 0x2f, 0x86, 0xdc, 0x8f, + 0xc5, 0x88, 0x68, 0x1b, 0x97, 0x7a, 0x4e, 0xd0, 0x2b, 0xcc, 0xe2, 0xce, 0x6c, 0x60, 0x37, 0x96, + 0x37, 0xd2, 0xd1, 0x53, 0x4f, 0x63, 0x0b, 0x70, 0x98, 0x77, 0xea, 0x49, 0x02, 0xdb, 0x8c, 0x08, + 0xaa, 0x19, 0xd4, 0xec, 0x9b, 0x70, 0x42, 0xed, 0x20, 0x54, 0x44, 0xf3, 0x7a, 0xe1, 0x98, 0x3b, + 0x71, 0x63, 0x2b, 0xae, 0xba, 0x67, 0x4a, 0x67, 0x57, 0xc1, 0x5c, 0x18, 0xc7, 0x61, 0xa5, 0x1a, + 0x9f, 0x3f, 0xac, 0xc6, 0x0b, 0x3d, 0x35, 0x9e, 0xc4, 0x89, 0xd2, 0x5b, 0x99, 0xce, 0x93, 0x2d, + 0xc1, 0x24, 0xad, 0x23, 0x9a, 0x6d, 0x2f, 0x60, 0x6f, 0xa1, 0x56, 0x49, 0xad, 0xc0, 0x9e, 0x09, + 0x67, 0x92, 0xe8, 0x3b, 0xb2, 0x7c, 0x46, 0x38, 0x63, 0xec, 0xc8, 0xe9, 0xd7, 0x03, 0x13, 0x59, + 0xec, 0x48, 0x89, 0x14, 0xb3, 0xfa, 0xa4, 0x13, 0x90, 0xce, 0xe8, 0x6c, 0x92, 0x54, 0x44, 0x13, + 0x7e, 0x1c, 0x1e, 0x63, 0xe8, 0x5b, 0x42, 0x16, 0x07, 0x76, 0x0f, 0x66, 0xe3, 0x53, 0x5b, 0x63, + 0x5c, 0x4e, 0x92, 0xb3, 0x24, 0x47, 0x7d, 0x36, 0xdf, 0x2c, 0x7a, 0xe6, 0xc2, 0x29, 0xe3, 0x9c, + 0xd6, 0x58, 0x9f, 0x43, 0xd6, 0x98, 0x30, 0xd9, 0x3c, 0xe4, 0xb3, 0xd9, 0xf7, 0xe3, 0xc3, 0x3e, + 0x84, 0x85, 0xf4, 0xd9, 0xac, 0xd5, 0xf2, 0x22, 0xd6, 0xf2, 0xda, 0xc1, 0x7e, 0xf9, 0x7c, 0xcf, + 0xf1, 0x9e, 0x5d, 0xd1, 0x21, 0xdc, 0xd8, 0xd7, 0x60, 0xde, 0x3c, 0x9f, 0xb5, 0x9a, 0x2c, 0xac, + 0x09, 0x97, 0x4e, 0x7c, 0xb0, 0x67, 0xd7, 0xd0, 0x97, 0x07, 0x8b, 0xa0, 0x9c, 0x39, 0xbb, 0xb5, + 0x6a, 0x5e, 0x4a, 0x1a, 0xd4, 0xb3, 0x4a, 0xb2, 0xab, 0x3b, 0x8a, 0x25, 0x7b, 0x0c, 0x67, 0xb3, + 0x8e, 0x09, 0xad, 0xd2, 0x97, 0x63, 0xad, 0xec, 0xa7, 0xb2, 0x8f, 0x9c, 0xec, 0x9a, 0x8f, 0x60, + 0xcb, 0xbe, 0x0c, 0x27, 0xb4, 0xf5, 0xa5, 0xd5, 0xf7, 0x0a, 0xd6, 0x87, 0xfe, 0xbb, 0xfa, 0xc2, + 0xcc, 0xae, 0x25, 0x9b, 0x07, 0x6b, 0xc1, 0xac, 0x6a, 0x38, 0xaa, 0xbf, 0xe9, 0xe8, 0x39, 0x6f, + 0xec, 0xaa, 0xbd, 0x18, 0x5a, 0xca, 0xfb, 0x2d, 0xa7, 0x93, 0x10, 0xea, 0x33, 0x3d, 0x83, 0x2f, + 0xbb, 0x09, 0x23, 0xb5, 0x8d, 0xea, 0xf5, 0xeb, 0xab, 0xf3, 0xaf, 0x62, 0x0d, 0xca, 0xd9, 0x47, + 0x02, 0x8d, 0x4b, 0x13, 0xd9, 0x98, 0x75, 0xbc, 0xed, 0x6d, 0xc3, 0xa7, 0x4a, 0xa2, 0xb2, 0xbf, + 0x8e, 0xd6, 0x5d, 0x62, 0x47, 0xad, 0x84, 0xa1, 0xb7, 0x83, 0x59, 0x26, 0xc2, 0xf9, 0xd7, 0x8c, + 0x97, 0x5e, 0x3a, 0x3d, 0xf6, 0x96, 0x31, 0xdf, 0x4f, 0x0f, 0xba, 0x94, 0x36, 0x0f, 0xf6, 0xcb, + 0x67, 0x68, 0xe7, 0x76, 0xdc, 0x84, 0x95, 0xbe, 0x89, 0xf7, 0x56, 0x74, 0x6b, 0xa8, 0x78, 0xa1, + 0x74, 0xf1, 0xd6, 0x50, 0xf1, 0x62, 0xe9, 0x35, 0xfb, 0x85, 0xec, 0x1c, 0xe5, 0xb2, 0xaf, 0xed, + 0xf3, 0x87, 0x95, 0x26, 0x23, 0x61, 0xfd, 0xdd, 0x1c, 0x94, 0x8f, 0xf8, 0x60, 0xb1, 0xb7, 0x26, + 0xbd, 0x59, 0xe3, 0xca, 0x85, 0x58, 0xba, 0xd3, 0xc4, 0x05, 0x8e, 0xf9, 0x78, 0x6d, 0x92, 0xa0, + 0xd7, 0x12, 0x05, 0x8d, 0xd7, 0x9c, 0xd7, 0x7a, 0x83, 0xc5, 0x2b, 0x2c, 0xeb, 0xe7, 0x72, 0x30, + 0x9b, 0x31, 0x3e, 0xec, 0x3c, 0x0c, 0x61, 0x16, 0x18, 0xcd, 0xda, 0x20, 0x95, 0xfd, 0x05, 0xcb, + 0xd9, 0xa7, 0x61, 0x74, 0x65, 0xbd, 0x56, 0xab, 0xac, 0xab, 0xab, 0xac, 0xdc, 0xc6, 0xdb, 0xa1, + 0x13, 0xba, 0xe6, 0x23, 0x25, 0xa1, 0xb1, 0x37, 0x60, 0xa4, 0xba, 0x81, 0x04, 0xd2, 0xdc, 0x0d, + 0xbf, 0xd0, 0xeb, 0xa4, 0xf1, 0x09, 0xc9, 0xfa, 0xd1, 0x1c, 0xb0, 0xde, 0xc9, 0xc6, 0xae, 0xc0, + 0xb8, 0x3e, 0xa5, 0xe5, 0xc5, 0x1b, 0x1f, 0xd4, 0xb4, 0x09, 0x6b, 0xeb, 0x38, 0x6c, 0x05, 0x86, + 0x31, 0x4f, 0x5e, 0xfc, 0x3a, 0x9a, 0x79, 0x30, 0x9e, 0xea, 0x39, 0x18, 0x87, 0x31, 0x0b, 0x9f, + 0x2d, 0x89, 0xad, 0xdf, 0xce, 0x01, 0xeb, 0x15, 0x26, 0x06, 0xb6, 0xce, 0x78, 0x53, 0x73, 0x57, + 0xd6, 0xf3, 0x3c, 0xc4, 0x49, 0x7a, 0xf4, 0x4b, 0x64, 0xe2, 0xd8, 0x7c, 0xde, 0x50, 0x5a, 0xf4, + 0xf7, 0x71, 0xbb, 0x08, 0xc3, 0xf7, 0x79, 0xb0, 0xa5, 0x2c, 0x39, 0xd1, 0xfa, 0xeb, 0x91, 0x00, + 0xe8, 0x97, 0x78, 0xc4, 0xb0, 0xfe, 0x24, 0x07, 0x73, 0x59, 0x12, 0xee, 0x11, 0xae, 0x68, 0x56, + 0xca, 0x8b, 0x0e, 0x2d, 0x33, 0xa4, 0x69, 0x58, 0xec, 0x3b, 0x57, 0x86, 0x61, 0xd1, 0x58, 0x35, + 0xc2, 0xa8, 0x44, 0x11, 0xbd, 0x11, 0xda, 0x12, 0x2e, 0x10, 0x64, 0x58, 0xae, 0x21, 0x8c, 0xe8, + 0x86, 0x08, 0x38, 0x1f, 0x6d, 0x09, 0x17, 0x08, 0x77, 0xfc, 0x46, 0x9c, 0x22, 0x1a, 0x11, 0x5a, + 0x02, 0x60, 0x4b, 0x38, 0x3b, 0x0f, 0xa3, 0x77, 0xdb, 0x6b, 0xdc, 0x7d, 0xa4, 0x62, 0x8d, 0xa3, + 0x25, 0x89, 0xdf, 0x76, 0x9a, 0x02, 0x66, 0xab, 0x42, 0xeb, 0xa7, 0x72, 0x30, 0xd3, 0x23, 0x5c, + 0x1f, 0xed, 0x6d, 0x77, 0xb8, 0xdb, 0xcb, 0x20, 0xed, 0x93, 0x9f, 0x3f, 0x94, 0xfd, 0xf9, 0xd6, + 0xff, 0x3b, 0x04, 0xa7, 0xfa, 0xe8, 0x3a, 0x12, 0xb7, 0xbc, 0xdc, 0x91, 0x6e, 0x79, 0x5f, 0x81, + 0xc9, 0xe5, 0xa6, 0xeb, 0xb5, 0xc2, 0x4d, 0x3f, 0xf9, 0xe2, 0xc4, 0xba, 0x1f, 0xcb, 0x54, 0x96, + 0x6c, 0x65, 0x06, 0x7e, 0xba, 0x8e, 0x14, 0x4e, 0xe4, 0xf7, 0x8a, 0x5a, 0x06, 0xb3, 0x1e, 0xc7, + 0xb8, 0xc2, 0x5f, 0x12, 0xc7, 0x38, 0xd3, 0x55, 0x63, 0xe8, 0xa9, 0xba, 0x6a, 0x64, 0x9b, 0x79, + 0x0e, 0x7f, 0x1c, 0xa3, 0xdf, 0x65, 0x98, 0x94, 0xa6, 0x34, 0x95, 0x50, 0x0e, 0xd2, 0x48, 0x8f, + 0xf9, 0x8d, 0x1b, 0xf6, 0x8e, 0x85, 0x41, 0xc3, 0x6e, 0x9a, 0x6e, 0x05, 0xa3, 0xf8, 0x04, 0x78, + 0xbe, 0xbf, 0xdb, 0x80, 0xf1, 0xf4, 0xaf, 0x93, 0x5a, 0x3f, 0x95, 0x37, 0xbd, 0xe6, 0xfe, 0x32, + 0xce, 0xbc, 0x8b, 0x30, 0xfc, 0x60, 0x97, 0x07, 0x6a, 0xbf, 0xc3, 0x0f, 0x79, 0x2c, 0x00, 0xfa, + 0x87, 0x20, 0x06, 0xbb, 0x0e, 0x53, 0x1b, 0x72, 0x24, 0x54, 0xf7, 0x0e, 0x25, 0x57, 0xd0, 0x0e, + 0x29, 0x4a, 0x32, 0xfa, 0x37, 0x45, 0x65, 0xdd, 0x80, 0x33, 0xc6, 0x82, 0xa4, 0x28, 0x1f, 0xd2, + 0xba, 0x5f, 0x9e, 0x88, 0x53, 0x89, 0x3f, 0x43, 0xb2, 0x7b, 0xd8, 0x29, 0xa8, 0xb5, 0x0d, 0x67, + 0x0f, 0x65, 0x24, 0x0e, 0x22, 0xe8, 0xc4, 0xbf, 0x52, 0x26, 0x88, 0x87, 0x92, 0xda, 0x1a, 0x9d, + 0xf5, 0xbd, 0x30, 0xa1, 0xf7, 0x32, 0xee, 0xa9, 0xe2, 0x37, 0x6d, 0x6a, 0x72, 0x4f, 0x15, 0x00, + 0x5b, 0xc2, 0x13, 0xd5, 0x76, 0x3e, 0x5b, 0xb5, 0x9d, 0x0c, 0x7f, 0xe1, 0xa8, 0xe1, 0x17, 0x95, + 0xe3, 0x92, 0xd5, 0x2a, 0xc7, 0xdf, 0x7a, 0xe5, 0x18, 0xc6, 0xc3, 0x96, 0xf0, 0xa7, 0x5a, 0xf9, + 0x6f, 0xa9, 0x6c, 0x2b, 0xe8, 0x3c, 0xa0, 0x74, 0x05, 0x49, 0xf6, 0xe6, 0xd9, 0x2c, 0x0d, 0x40, + 0x82, 0x99, 0x1c, 0x92, 0xf9, 0xa3, 0x0e, 0xc9, 0xe3, 0x4c, 0x44, 0x14, 0xbd, 0xe4, 0x90, 0x0e, + 0x25, 0x82, 0x8d, 0xdb, 0xf3, 0x1a, 0xaf, 0xb0, 0xac, 0x6f, 0xe5, 0xe0, 0x44, 0xa6, 0x0a, 0x51, + 0xd4, 0x2a, 0x75, 0x95, 0xda, 0x3a, 0x4c, 0x2b, 0x2a, 0x25, 0xc6, 0x71, 0x7c, 0xb8, 0x07, 0x6f, + 0x8b, 0xf5, 0x22, 0x8c, 0xc5, 0x0f, 0x58, 0x6c, 0x4e, 0x0d, 0x1d, 0x5a, 0x6d, 0xa9, 0x77, 0x90, + 0x1a, 0x80, 0xf8, 0x82, 0xa7, 0x6a, 0x63, 0x68, 0xfd, 0x56, 0x5e, 0x66, 0xe2, 0x7b, 0x66, 0xc3, + 0x31, 0x66, 0x1b, 0x06, 0x8a, 0x26, 0xf5, 0x0f, 0xc2, 0xc8, 0x56, 0x61, 0xa4, 0x16, 0xb9, 0x51, + 0x57, 0xb9, 0x9e, 0xcf, 0xea, 0x64, 0x58, 0x70, 0x7f, 0x31, 0x71, 0x3e, 0x0e, 0x11, 0x62, 0x5c, + 0x9a, 0x10, 0xa2, 0xd9, 0x17, 0xfe, 0x5e, 0x0e, 0x26, 0x74, 0x62, 0xf6, 0x01, 0x4c, 0xa9, 0x20, + 0x73, 0xd2, 0x21, 0x9f, 0x5e, 0xdb, 0x94, 0xa9, 0x8a, 0x0a, 0x32, 0xa7, 0x3b, 0xf0, 0x1b, 0xf8, + 0xfa, 0x56, 0xdd, 0xd1, 0x91, 0x59, 0x03, 0x58, 0x6b, 0xdb, 0x75, 0x1e, 0x73, 0xf7, 0x21, 0x0f, + 0x23, 0x47, 0x9a, 0x14, 0xd0, 0xa3, 0x9c, 0x62, 0x7f, 0xe7, 0x7a, 0x45, 0x5a, 0x13, 0x88, 0x91, + 0xa0, 0x68, 0x81, 0x3d, 0x34, 0xfa, 0x4b, 0x43, 0x6b, 0xdb, 0x7d, 0x20, 0x0b, 0x25, 0x9d, 0xf5, + 0xa7, 0x23, 0x72, 0xba, 0x51, 0x4c, 0xca, 0x2d, 0x98, 0xba, 0x5b, 0x5d, 0x59, 0xd6, 0xf4, 0x8e, + 0x66, 0x4a, 0x93, 0xd5, 0x27, 0x11, 0x0f, 0xda, 0x6e, 0x53, 0x5d, 0xb9, 0x92, 0x23, 0xc8, 0xf7, + 0x1a, 0xf5, 0x6c, 0x9d, 0x64, 0x8a, 0xa3, 0xa8, 0x43, 0x5e, 0xee, 0xe2, 0x3a, 0xf2, 0x03, 0xd6, + 0x11, 0xba, 0xad, 0x66, 0x9f, 0x3a, 0x4c, 0x8e, 0x6c, 0x17, 0x4a, 0x37, 0x50, 0x5c, 0xd2, 0x6a, + 0x29, 0x1c, 0x5e, 0xcb, 0x4b, 0x54, 0xcb, 0xf3, 0x52, 0xce, 0xca, 0xae, 0xa7, 0x87, 0x6b, 0xb2, + 0x4f, 0x0c, 0x1d, 0xb9, 0x4f, 0xfc, 0xed, 0x1c, 0x8c, 0x48, 0x79, 0x8c, 0xa6, 0x71, 0x1f, 0x89, + 0xef, 0xc1, 0xd3, 0x91, 0xf8, 0x4a, 0x78, 0x4e, 0x18, 0x13, 0x5a, 0x96, 0xb1, 0x95, 0xd4, 0xba, + 0x50, 0x66, 0xb1, 0xf8, 0x82, 0x20, 0x4b, 0x8e, 0x5e, 0x16, 0xac, 0x9a, 0xb8, 0x83, 0x8f, 0x1e, + 0xe9, 0x71, 0xa8, 0x5c, 0xe8, 0x47, 0xc9, 0x1d, 0xdc, 0x74, 0x02, 0x5f, 0x83, 0x31, 0x72, 0x32, + 0x5f, 0xda, 0xa3, 0x77, 0xc2, 0x92, 0x61, 0x7a, 0xd1, 0x58, 0xda, 0x4b, 0x64, 0x4d, 0x72, 0x53, + 0x77, 0xb6, 0xf6, 0x8c, 0xc4, 0x86, 0x0a, 0x91, 0xdd, 0x95, 0x09, 0xbf, 0x64, 0xd4, 0x4e, 0x33, + 0x4c, 0x77, 0x0c, 0xa7, 0xf0, 0x35, 0xca, 0x53, 0x35, 0x23, 0x48, 0x67, 0xc2, 0x83, 0xad, 0x41, + 0x09, 0xcd, 0x75, 0x78, 0x43, 0xae, 0x9a, 0xea, 0x8a, 0x74, 0x64, 0x26, 0x93, 0xcb, 0x48, 0x96, + 0xd1, 0x72, 0x4b, 0xf9, 0x10, 0xf5, 0x50, 0x8a, 0xfb, 0x61, 0x29, 0x3d, 0xfb, 0xd8, 0x3b, 0x30, + 0x1e, 0x47, 0x4d, 0x8d, 0xbd, 0x18, 0xf1, 0xbd, 0x20, 0x09, 0xb3, 0x6a, 0xa6, 0x89, 0xd2, 0xd0, + 0xd9, 0x22, 0x14, 0xc5, 0x22, 0x4e, 0xa7, 0x54, 0xec, 0x12, 0x4c, 0x77, 0x4d, 0x50, 0x78, 0xac, + 0x06, 0xb3, 0x62, 0xd1, 0xd4, 0xbc, 0xf6, 0x4e, 0x93, 0xaf, 0xf9, 0x3b, 0x7e, 0x37, 0xba, 0x67, + 0xaf, 0xd1, 0x1e, 0x2e, 0x25, 0x72, 0xb7, 0xd5, 0x34, 0x8a, 0x03, 0x23, 0x61, 0x76, 0x06, 0xb5, + 0xb6, 0x55, 0xfe, 0x51, 0x1e, 0xc6, 0xb5, 0xf9, 0xc4, 0x2e, 0x42, 0xb1, 0x1a, 0xae, 0xf9, 0xf5, + 0x87, 0x71, 0x7c, 0xb3, 0xc9, 0x83, 0xfd, 0xf2, 0x98, 0x17, 0x3a, 0x4d, 0x04, 0xda, 0x71, 0x31, + 0x5b, 0x82, 0x49, 0xf9, 0x97, 0x8a, 0x66, 0x9f, 0x4f, 0xf4, 0x35, 0x12, 0x59, 0xc5, 0xb1, 0xd7, + 0x77, 0x4f, 0x83, 0x84, 0x7d, 0x15, 0x40, 0x02, 0xd0, 0x23, 0xb6, 0x30, 0xb8, 0x2f, 0x2f, 0x55, + 0x90, 0xe1, 0x0b, 0xab, 0x31, 0x64, 0x5f, 0x97, 0x51, 0x56, 0xd5, 0xfc, 0x1f, 0x1a, 0xdc, 0x19, + 0x59, 0xf0, 0x77, 0xb2, 0x63, 0x22, 0xe8, 0x2c, 0x29, 0x01, 0xc5, 0x82, 0xcd, 0xeb, 0xfe, 0x23, + 0x1e, 0xec, 0x55, 0x22, 0x44, 0xd4, 0x30, 0xac, 0xff, 0x31, 0xa7, 0xad, 0x1a, 0xb6, 0x8e, 0x59, + 0x40, 0xe5, 0x8c, 0x20, 0x93, 0x99, 0xf8, 0xce, 0xa0, 0xe0, 0x36, 0xdf, 0x5e, 0x7a, 0x9e, 0x0c, + 0x7c, 0x67, 0xe3, 0x79, 0x95, 0xca, 0x0e, 0x2a, 0x81, 0xec, 0x0b, 0x30, 0x84, 0x5d, 0x97, 0x3f, + 0xb2, 0x69, 0xea, 0xd8, 0x1e, 0x12, 0x7d, 0x86, 0x0d, 0x41, 0x4a, 0xf6, 0x69, 0xf2, 0x26, 0x94, + 0x9d, 0x3f, 0xa5, 0x9d, 0xbd, 0xe2, 0x3b, 0xe2, 0xf3, 0x3a, 0x09, 0x8b, 0xa1, 0xcd, 0x9e, 0xbf, + 0x9b, 0x87, 0x52, 0x7a, 0xad, 0xb2, 0xf7, 0x61, 0x42, 0x9d, 0xa7, 0x98, 0x26, 0x5e, 0xb4, 0x72, + 0x82, 0x42, 0xa1, 0xab, 0x43, 0x35, 0x9d, 0x25, 0x5e, 0x27, 0x10, 0xc2, 0xcd, 0x26, 0x85, 0xa9, + 0xd2, 0x56, 0x49, 0xe4, 0x47, 0x9d, 0x54, 0x70, 0x4f, 0x85, 0xc6, 0xde, 0x84, 0xc2, 0x9d, 0xeb, + 0x15, 0x72, 0x5d, 0x29, 0xa5, 0x4f, 0x5d, 0x69, 0x9a, 0x67, 0x1a, 0x0a, 0x0a, 0x7c, 0xb6, 0xa6, + 0xc5, 0xc1, 0x1d, 0x31, 0xf2, 0x5f, 0x29, 0x70, 0xdc, 0xb8, 0xa3, 0x03, 0xe2, 0xca, 0xfc, 0xf3, + 0x14, 0xd9, 0xf1, 0xbf, 0x2e, 0xc0, 0x58, 0x5c, 0x3f, 0x63, 0x80, 0xb2, 0x1b, 0x5d, 0x98, 0xf0, + 0x6f, 0x76, 0x1a, 0x8a, 0x4a, 0x5c, 0x23, 0x0f, 0x96, 0xd1, 0x90, 0x44, 0xb5, 0x79, 0x50, 0x72, + 0x99, 0x5c, 0xe6, 0xb6, 0xfa, 0xc9, 0xae, 0x40, 0x2c, 0x74, 0xf5, 0x93, 0xce, 0x86, 0xc4, 0x80, + 0xd9, 0x31, 0x1a, 0x9b, 0x82, 0xbc, 0x27, 0xa3, 0x05, 0x8d, 0xd9, 0x79, 0xaf, 0xc1, 0xde, 0x87, + 0xa2, 0xdb, 0x68, 0xf0, 0x86, 0xe3, 0x2a, 0xdb, 0x93, 0xc3, 0x26, 0x4d, 0x51, 0x70, 0x93, 0x87, + 0x00, 0x52, 0x55, 0x22, 0x56, 0x81, 0xb1, 0xa6, 0x2b, 0xcd, 0xcb, 0x1a, 0x03, 0x9c, 0x28, 0x09, + 0x87, 0xa2, 0x20, 0xbb, 0x17, 0xf2, 0x06, 0x7b, 0x15, 0x86, 0xc4, 0x68, 0xd2, 0x11, 0xa2, 0xa4, + 0x44, 0x31, 0x98, 0xb2, 0xc3, 0x6e, 0x3e, 0x67, 0x23, 0x02, 0x7b, 0x19, 0x0a, 0xdd, 0xc5, 0x6d, + 0x3a, 0x1c, 0x4a, 0x49, 0x4c, 0xea, 0x18, 0x4d, 0x14, 0xb3, 0xab, 0x50, 0x7c, 0x6c, 0x86, 0x33, + 0x3e, 0x91, 0x1a, 0xc6, 0x18, 0x3f, 0x46, 0x64, 0xaf, 0x42, 0x21, 0x0c, 0x7d, 0x32, 0xd8, 0x50, + 0x4b, 0xb0, 0x56, 0xbb, 0x1b, 0x8f, 0x9a, 0xe0, 0x1e, 0x86, 0xfe, 0x52, 0x11, 0x46, 0xe4, 0x89, + 0x61, 0x9d, 0x05, 0x48, 0xbe, 0xb1, 0xd7, 0x23, 0xc9, 0xfa, 0x2a, 0x8c, 0xc5, 0xdf, 0xc6, 0xce, + 0x00, 0x3c, 0xe4, 0x7b, 0xce, 0xae, 0xdb, 0x6e, 0x34, 0xa5, 0xb8, 0x39, 0x61, 0x8f, 0x3d, 0xe4, + 0x7b, 0x37, 0x11, 0xc0, 0x4e, 0xc1, 0x68, 0x47, 0x0c, 0x3f, 0xcd, 0xf1, 0x09, 0x7b, 0xa4, 0xd3, + 0xdd, 0x12, 0x53, 0x79, 0x1e, 0x46, 0x51, 0x13, 0x48, 0x2b, 0x72, 0xd2, 0x56, 0x3f, 0xad, 0x3f, + 0x2b, 0x60, 0xce, 0x0f, 0xad, 0x41, 0xec, 0x25, 0x98, 0xac, 0x07, 0x1c, 0x0f, 0x27, 0x57, 0x88, + 0x5c, 0x54, 0xcf, 0x44, 0x02, 0xac, 0x36, 0xd8, 0x79, 0x98, 0xee, 0x74, 0xb7, 0x9a, 0x5e, 0x5d, + 0xd4, 0xe6, 0xd4, 0xb7, 0x28, 0x48, 0xf9, 0x84, 0x3d, 0x29, 0xc1, 0xb7, 0xf9, 0xde, 0xf2, 0x16, + 0x86, 0xc3, 0x2a, 0xe9, 0xd1, 0x4c, 0xa3, 0x38, 0xa5, 0xae, 0x3d, 0xad, 0xc1, 0xd1, 0xf6, 0xec, + 0x24, 0x8c, 0xb8, 0xee, 0x4e, 0xd7, 0x93, 0x61, 0x6b, 0x26, 0x6c, 0xfa, 0xc5, 0x3e, 0x05, 0x33, + 0x49, 0x80, 0x5d, 0xd5, 0x8c, 0x61, 0x6c, 0x46, 0x29, 0x2e, 0x58, 0x96, 0x70, 0xf6, 0x06, 0x30, + 0xbd, 0x3e, 0x7f, 0xeb, 0x43, 0x5e, 0x97, 0x73, 0x72, 0xc2, 0x9e, 0xd1, 0x4a, 0xee, 0x62, 0x01, + 0x7b, 0x11, 0x26, 0x02, 0x1e, 0xa2, 0xb8, 0x87, 0xdd, 0x86, 0x29, 0xb1, 0xec, 0x71, 0x05, 0x13, + 0x7d, 0x77, 0x01, 0x4a, 0x5a, 0x77, 0x60, 0xc0, 0x58, 0x19, 0xa1, 0xdb, 0x9e, 0x4a, 0xe0, 0x76, + 0xa7, 0xda, 0x60, 0x5f, 0x82, 0x05, 0x0d, 0x53, 0x66, 0xe7, 0x72, 0x78, 0xd3, 0xdb, 0xf1, 0xb6, + 0x9a, 0x9c, 0xe6, 0x5b, 0xef, 0xac, 0x8e, 0xef, 0x84, 0xf6, 0x7c, 0x42, 0x2d, 0xf3, 0x76, 0xad, + 0x12, 0x2d, 0x5b, 0x83, 0xb9, 0x14, 0x67, 0xde, 0x70, 0xba, 0x9d, 0xbe, 0x71, 0xa2, 0x12, 0x9e, + 0xcc, 0xe4, 0xc9, 0x1b, 0xf7, 0x3a, 0xd6, 0x97, 0x60, 0x42, 0x9f, 0x93, 0xa2, 0x13, 0x74, 0x41, + 0x83, 0x66, 0xdf, 0x78, 0x0c, 0xab, 0x8a, 0x8b, 0xde, 0x54, 0x82, 0x12, 0xc5, 0xd9, 0x83, 0xed, + 0xc9, 0x18, 0x2a, 0x86, 0xd0, 0x5a, 0x82, 0x99, 0x9e, 0x4d, 0x4e, 0x4b, 0x04, 0x2f, 0x37, 0xed, + 0xc3, 0x13, 0xc1, 0x5b, 0x6d, 0x98, 0xd0, 0x0f, 0xad, 0x23, 0x42, 0xe5, 0x9f, 0xc4, 0xc0, 0x0f, + 0x72, 0x47, 0x1f, 0x39, 0xd8, 0x2f, 0xe7, 0xbd, 0x06, 0x86, 0x7b, 0xb8, 0x00, 0x45, 0x25, 0x5f, + 0x91, 0x58, 0x83, 0xba, 0x6c, 0x12, 0xec, 0xf7, 0xec, 0xb8, 0xd4, 0x7a, 0x15, 0x46, 0xe9, 0x5c, + 0x3a, 0x5c, 0x83, 0x6d, 0xfd, 0x60, 0x1e, 0xa6, 0x6d, 0x2e, 0x76, 0x4d, 0x2e, 0xf3, 0x63, 0x3c, + 0xb3, 0x17, 0xea, 0xec, 0xf0, 0x81, 0x46, 0xdb, 0x0e, 0xc9, 0x4c, 0xf1, 0x8f, 0x72, 0x30, 0x9b, + 0x81, 0xfb, 0x91, 0x32, 0x33, 0x5e, 0x83, 0xb1, 0x15, 0xcf, 0x6d, 0x56, 0x1a, 0x8d, 0x38, 0x0a, + 0x04, 0x4a, 0xe5, 0x98, 0xbe, 0xc5, 0x15, 0x50, 0x5d, 0x42, 0x89, 0x51, 0xd9, 0x6b, 0x34, 0x29, + 0x92, 0xe4, 0xb4, 0x38, 0x29, 0xbe, 0xb3, 0x5f, 0x06, 0xf9, 0x4d, 0x49, 0xc6, 0x6a, 0x0c, 0xe9, + 0x29, 0x81, 0x89, 0x97, 0xc6, 0x33, 0x3b, 0x74, 0xd9, 0x21, 0x3d, 0xd3, 0xcd, 0x1b, 0x28, 0x39, + 0xc5, 0x8f, 0xe5, 0xe1, 0x64, 0x36, 0xe1, 0x47, 0x4d, 0xb2, 0x89, 0x69, 0x41, 0xb4, 0x30, 0xc4, + 0x98, 0x64, 0x53, 0xe6, 0x10, 0x41, 0xfc, 0x04, 0x81, 0x6d, 0xc3, 0xe4, 0x9a, 0x1b, 0x46, 0x37, + 0xb9, 0x1b, 0x44, 0x5b, 0xdc, 0x8d, 0x06, 0x10, 0xd3, 0x5f, 0x56, 0x0f, 0xe8, 0x28, 0x29, 0xec, + 0x2a, 0xca, 0x94, 0x20, 0x6d, 0xb2, 0x8d, 0x27, 0xca, 0xd0, 0x00, 0x13, 0xe5, 0x1b, 0x30, 0x5d, + 0xe3, 0x2d, 0xb7, 0xb3, 0xeb, 0x07, 0xca, 0xcd, 0xf7, 0x12, 0x4c, 0xc6, 0xa0, 0xcc, 0xd9, 0x62, + 0x16, 0x1b, 0xf8, 0x5a, 0x47, 0x24, 0x5b, 0x89, 0x59, 0x6c, 0xfd, 0xbd, 0x3c, 0x9c, 0xaa, 0xd4, + 0xc9, 0xae, 0x8d, 0x0a, 0x94, 0xf9, 0xed, 0x77, 0xb9, 0x6e, 0x76, 0x19, 0xc6, 0xee, 0xb8, 0x4f, + 0xd6, 0xb8, 0x1b, 0xf2, 0x90, 0x52, 0x9c, 0x49, 0x99, 0xd6, 0x7d, 0x92, 0x98, 0x7b, 0xd9, 0x09, + 0x8e, 0x7e, 0xe9, 0x1f, 0xfa, 0x98, 0x97, 0x7e, 0x0b, 0x46, 0x6e, 0xfa, 0xcd, 0x06, 0x1d, 0xe4, + 0xf4, 0xe0, 0xb9, 0x8b, 0x10, 0x9b, 0x4a, 0xc4, 0x5d, 0x79, 0x2a, 0xfe, 0x62, 0xfc, 0x84, 0xef, + 0x7a, 0x97, 0x9c, 0x87, 0x51, 0xac, 0x28, 0x4e, 0x12, 0x8d, 0x87, 0x46, 0x93, 0x63, 0xa2, 0xaa, + 0x86, 0xad, 0x0a, 0xf5, 0x9e, 0x18, 0xfe, 0x78, 0x3d, 0x61, 0xfd, 0x43, 0x7c, 0x4b, 0xd5, 0x5b, + 0x29, 0x4e, 0x22, 0xed, 0x43, 0x72, 0x03, 0x7e, 0x48, 0xfe, 0xa9, 0x0d, 0x49, 0xa1, 0xef, 0x90, + 0xfc, 0x50, 0x1e, 0xc6, 0xe3, 0x8f, 0xfd, 0x84, 0xc5, 0xc2, 0x8e, 0xdb, 0x35, 0x50, 0x68, 0x8e, + 0x9a, 0xb6, 0x57, 0x50, 0x04, 0x8c, 0x2f, 0xc0, 0x08, 0x2d, 0xa6, 0x5c, 0xca, 0x0c, 0x35, 0x35, + 0xba, 0x4b, 0x53, 0xc4, 0x7a, 0x04, 0x07, 0x34, 0xb4, 0x89, 0x0e, 0x63, 0x9f, 0x3c, 0xe0, 0x5b, + 0xf4, 0xb4, 0xfe, 0xcc, 0x9e, 0x51, 0xd9, 0xb1, 0x4f, 0x92, 0x86, 0x0d, 0x74, 0x3a, 0xfd, 0xd3, + 0x22, 0x94, 0xd2, 0x24, 0x47, 0x47, 0x1b, 0xdf, 0xe8, 0x6e, 0xc9, 0x7b, 0x88, 0x8c, 0x36, 0xde, + 0xe9, 0x6e, 0xd9, 0x02, 0x86, 0x96, 0x37, 0x81, 0xf7, 0x08, 0x5b, 0x3d, 0x41, 0x96, 0x37, 0x81, + 0xf7, 0xc8, 0xb0, 0xbc, 0x09, 0xbc, 0x47, 0xa8, 0x25, 0x58, 0xab, 0xa1, 0xbb, 0x36, 0x5e, 0x42, + 0x48, 0x4b, 0xd0, 0x0c, 0xd3, 0x99, 0x83, 0x14, 0x9a, 0x38, 0x2a, 0x97, 0xb8, 0x1b, 0x50, 0x64, + 0x6c, 0xda, 0xce, 0xf0, 0xa8, 0xdc, 0x42, 0xb0, 0x4c, 0xf4, 0x6d, 0xeb, 0x48, 0xac, 0x09, 0x4c, + 0xfb, 0xa9, 0x16, 0xf0, 0xd1, 0x17, 0x67, 0x65, 0x42, 0x36, 0xa7, 0xb3, 0x76, 0xf4, 0xd5, 0x9c, + 0xc1, 0xf7, 0x69, 0xea, 0x6a, 0x37, 0x28, 0xdc, 0x1f, 0x6a, 0x87, 0x8a, 0x47, 0x32, 0x53, 0xf1, + 0x0c, 0x40, 0x86, 0x03, 0x8c, 0x75, 0x44, 0x09, 0x13, 0xf6, 0x1e, 0x8c, 0xeb, 0x4e, 0xf8, 0xd2, + 0x55, 0xfc, 0x05, 0x19, 0xc1, 0xad, 0x4f, 0xae, 0x49, 0x9d, 0x80, 0x6d, 0xc1, 0xa9, 0x65, 0xbf, + 0x1d, 0x76, 0x5b, 0x2a, 0x56, 0x5c, 0x12, 0xa1, 0x16, 0x70, 0x28, 0xd0, 0xa3, 0xb7, 0x4e, 0x28, + 0xe4, 0xf3, 0xad, 0x6c, 0xfc, 0xcd, 0x0b, 0x48, 0x3f, 0x46, 0x6c, 0x13, 0xc6, 0x51, 0xdf, 0x49, + 0x46, 0x84, 0xe3, 0xe6, 0xb6, 0x91, 0x94, 0xac, 0x88, 0x85, 0x21, 0x83, 0x1d, 0xb9, 0xad, 0xa6, + 0x32, 0x31, 0xd7, 0xf5, 0xb6, 0x1a, 0x32, 0xfb, 0x2a, 0x4c, 0xc9, 0xfb, 0xd7, 0x03, 0xbe, 0x25, + 0xe7, 0xce, 0x84, 0xa1, 0x66, 0x30, 0x0b, 0xe5, 0xd3, 0x3b, 0x69, 0x99, 0x1f, 0xf3, 0x2d, 0x39, + 0xf6, 0x86, 0x83, 0x87, 0x81, 0xcf, 0xee, 0xc1, 0xec, 0x4d, 0x37, 0x94, 0x40, 0xcd, 0x9b, 0x7a, + 0x12, 0xd5, 0xaf, 0x68, 0x78, 0xbb, 0xeb, 0x86, 0x4a, 0x6d, 0x9d, 0xe9, 0x3d, 0x9d, 0x45, 0xcf, + 0x7e, 0x30, 0x07, 0xf3, 0x86, 0x56, 0x9b, 0xcc, 0x9c, 0x5a, 0xbc, 0x1d, 0xa1, 0x27, 0xc7, 0x54, + 0x9c, 0x62, 0xbc, 0x1f, 0x9a, 0x1c, 0x92, 0x94, 0xe2, 0x3c, 0x48, 0xca, 0x75, 0x8b, 0xd6, 0x7e, + 0x3c, 0x68, 0xa1, 0xe2, 0x9a, 0x9e, 0x36, 0x17, 0x6a, 0x6a, 0x5d, 0x2b, 0x34, 0xeb, 0x5a, 0xba, + 0xbf, 0x49, 0x8b, 0x95, 0x8b, 0xb5, 0x58, 0x73, 0x30, 0x8c, 0xbd, 0xaa, 0x82, 0xbf, 0xe0, 0x0f, + 0xeb, 0xd3, 0xfa, 0x3e, 0x44, 0x62, 0xe1, 0xa1, 0xfb, 0x90, 0xf5, 0xdf, 0x8e, 0xc0, 0x74, 0x6a, + 0x5a, 0xd0, 0x3d, 0x35, 0xd7, 0x73, 0x4f, 0xad, 0x01, 0x48, 0x3d, 0xee, 0x80, 0x0a, 0x57, 0xe5, + 0x45, 0x36, 0x4e, 0x4e, 0x99, 0xf1, 0x9a, 0xd2, 0xd8, 0x08, 0xa6, 0x72, 0xc5, 0x0e, 0xa8, 0x00, + 0x8f, 0x99, 0xca, 0x45, 0xaf, 0x31, 0x4d, 0xd8, 0xb0, 0x32, 0x0c, 0x63, 0xc4, 0x46, 0xdd, 0x89, + 0xcf, 0x13, 0x00, 0x5b, 0xc2, 0xd9, 0x4b, 0x30, 0x22, 0x84, 0xa8, 0xea, 0x0a, 0x6d, 0x82, 0x78, + 0xb6, 0x08, 0x29, 0x4b, 0x48, 0x2c, 0x54, 0xc4, 0xae, 0xc1, 0x84, 0xfc, 0x8b, 0x82, 0x76, 0x8c, + 0x98, 0xb6, 0x77, 0x8e, 0xd7, 0x50, 0x71, 0x3b, 0x0c, 0x3c, 0x71, 0xbb, 0xa8, 0x75, 0x51, 0x67, + 0x53, 0x5d, 0xa1, 0x10, 0xbf, 0x78, 0xbb, 0x08, 0x25, 0x10, 0x53, 0xf8, 0xc7, 0x08, 0x42, 0x96, + 0x21, 0x53, 0xfa, 0x22, 0xde, 0x29, 0x51, 0x96, 0x91, 0x26, 0xf4, 0x36, 0x95, 0xb0, 0x8b, 0xf2, + 0xdd, 0x04, 0xc5, 0x42, 0x99, 0x29, 0x0d, 0x1f, 0x25, 0x50, 0x31, 0x81, 0xb2, 0x61, 0x5c, 0x2c, + 0x2a, 0x17, 0x7f, 0xaf, 0xb6, 0x5c, 0xaf, 0x49, 0xdb, 0x0a, 0x56, 0x8e, 0xb8, 0x5c, 0x40, 0xed, + 0x04, 0x81, 0xbd, 0x03, 0x53, 0xe2, 0xc7, 0xb2, 0xdf, 0x6a, 0xf9, 0x6d, 0x64, 0x3f, 0x9e, 0xc4, + 0x7f, 0x42, 0x92, 0x3a, 0x16, 0xc9, 0x5a, 0x52, 0xb8, 0xe2, 0x3c, 0xc1, 0x37, 0xd9, 0xae, 0x7c, + 0xd1, 0x99, 0x48, 0xce, 0x13, 0x24, 0x0d, 0x25, 0xdc, 0xd6, 0x91, 0xd8, 0x5b, 0x30, 0x29, 0x7e, + 0xde, 0xf0, 0x1e, 0x71, 0x59, 0xe1, 0x64, 0x62, 0x8c, 0x80, 0x54, 0x3b, 0xa2, 0x44, 0xd6, 0x67, + 0x62, 0xb2, 0x2f, 0xc2, 0x09, 0xe4, 0x54, 0xf7, 0x3b, 0xbc, 0x51, 0xd9, 0xde, 0xf6, 0x9a, 0x9e, + 0x34, 0x86, 0x92, 0xe1, 0x29, 0x50, 0xc1, 0x2e, 0x2b, 0x46, 0x0c, 0xc7, 0x4d, 0x50, 0xec, 0x6c, + 0x4a, 0xf6, 0x00, 0x4a, 0xcb, 0xdd, 0x30, 0xf2, 0x5b, 0x95, 0x28, 0x0a, 0xbc, 0xad, 0x6e, 0xc4, + 0xc3, 0xf9, 0x69, 0x23, 0x88, 0x83, 0x58, 0x1c, 0x71, 0xa1, 0xd4, 0x07, 0xd5, 0x91, 0xc2, 0x71, + 0x63, 0x12, 0xbb, 0x87, 0x89, 0xf5, 0x07, 0x39, 0x98, 0x34, 0x48, 0xd9, 0x9b, 0x30, 0x71, 0x3d, + 0xf0, 0x78, 0xbb, 0xd1, 0xdc, 0xd3, 0x2e, 0xaa, 0x78, 0x8b, 0xd9, 0x26, 0xb8, 0x6c, 0xb5, 0x81, + 0x16, 0xeb, 0x79, 0xf2, 0x99, 0x96, 0x8a, 0x97, 0xa5, 0x2f, 0x29, 0x4d, 0xd0, 0x42, 0x12, 0x55, + 0x06, 0x27, 0x28, 0xcd, 0x4e, 0x0d, 0x85, 0xbd, 0x0b, 0x23, 0xf2, 0xf5, 0x96, 0xcc, 0xe6, 0x4e, + 0x67, 0x35, 0x53, 0xfa, 0x2d, 0xe3, 0x44, 0x44, 0x13, 0x9d, 0xd0, 0x26, 0x22, 0xeb, 0xa7, 0x73, + 0xc0, 0x7a, 0x51, 0x8f, 0xd0, 0x7b, 0x1d, 0x69, 0xfa, 0xf3, 0x85, 0x78, 0x35, 0x16, 0x0c, 0x85, + 0xb8, 0xa8, 0x49, 0x16, 0xc8, 0x8e, 0xa7, 0x55, 0xa7, 0x2b, 0xe2, 0x64, 0xb1, 0xf5, 0x03, 0x79, + 0x80, 0x04, 0x9b, 0x7d, 0x4e, 0x26, 0xc6, 0xf9, 0x62, 0xd7, 0x6d, 0x7a, 0xdb, 0x9e, 0x19, 0x29, + 0x12, 0x99, 0x7c, 0x43, 0x95, 0xd8, 0x26, 0x22, 0x7b, 0x1f, 0xa6, 0x6b, 0x1b, 0x26, 0xad, 0x66, + 0x47, 0x1d, 0x76, 0x9c, 0x14, 0x79, 0x1a, 0x1b, 0xcd, 0x63, 0xf5, 0xd1, 0x90, 0xe6, 0xb1, 0x72, + 0x20, 0xa8, 0x44, 0x6c, 0x2c, 0xb5, 0x0d, 0x32, 0x15, 0x6f, 0x54, 0x57, 0x68, 0x97, 0xc2, 0xaf, + 0x0b, 0x3b, 0x4e, 0x87, 0x6c, 0xc8, 0xc5, 0x3e, 0x61, 0xe0, 0x25, 0x1d, 0x39, 0xdc, 0xc7, 0x37, + 0xf9, 0x67, 0x50, 0xed, 0xd7, 0xf2, 0x23, 0x4e, 0xda, 0x8e, 0x67, 0xf6, 0xde, 0x93, 0x3c, 0xfd, + 0x0f, 0x1b, 0x2e, 0x97, 0x46, 0xeb, 0xc8, 0xbc, 0xe5, 0x6a, 0x72, 0x49, 0x91, 0x46, 0x00, 0x19, + 0x16, 0x31, 0xff, 0x20, 0x07, 0x27, 0x32, 0x69, 0xd9, 0x25, 0x80, 0x44, 0xa7, 0x44, 0xbd, 0x84, + 0x3b, 0x66, 0x12, 0x4b, 0xc5, 0xd6, 0x30, 0xd8, 0x57, 0xd2, 0xda, 0xa0, 0xa3, 0x0f, 0xc2, 0x05, + 0x15, 0x2b, 0xcb, 0xd4, 0x06, 0x65, 0xe8, 0x80, 0xac, 0x7f, 0x54, 0x80, 0x19, 0x2d, 0x54, 0x8b, + 0xfc, 0xd6, 0x23, 0xcc, 0x95, 0x1f, 0xc2, 0x84, 0x68, 0x8d, 0x57, 0x27, 0xbf, 0x2f, 0x69, 0xa6, + 0xf2, 0x5a, 0x8f, 0xd3, 0x1c, 0x71, 0xbb, 0xa4, 0x23, 0xcb, 0x08, 0x76, 0xb8, 0x75, 0xe2, 0x6b, + 0x43, 0xbd, 0xd7, 0xff, 0xcb, 0x60, 0xce, 0x42, 0x98, 0x5c, 0xd9, 0x6b, 0xbb, 0xad, 0xb8, 0x36, + 0x69, 0xae, 0xf2, 0xa9, 0xbe, 0xb5, 0x19, 0xd8, 0xb2, 0xba, 0xc4, 0xbd, 0x44, 0x96, 0x65, 0x78, + 0x36, 0x1b, 0x54, 0x0b, 0xef, 0xc3, 0x4c, 0xcf, 0x47, 0x1f, 0x2b, 0x98, 0xde, 0x03, 0x60, 0xbd, + 0xdf, 0x91, 0xc1, 0xe1, 0x53, 0x66, 0xa8, 0xc6, 0x13, 0xf1, 0xcb, 0x34, 0xa6, 0x0e, 0x97, 0xc6, + 0x2f, 0x8b, 0x7a, 0xa8, 0xbd, 0x9f, 0xc9, 0xeb, 0x8e, 0x8b, 0xcf, 0xfa, 0xaa, 0xfb, 0x82, 0x71, + 0x1b, 0x3e, 0xdb, 0x6f, 0x4c, 0x07, 0xd2, 0x3a, 0x7c, 0xbb, 0x00, 0xa7, 0xfa, 0x50, 0xb2, 0xbd, + 0xf4, 0x24, 0x92, 0x5a, 0x88, 0x2b, 0x87, 0x57, 0xf8, 0x34, 0xa6, 0x12, 0xfb, 0x9c, 0x0c, 0x5d, + 0x50, 0xc7, 0xf4, 0xd4, 0x74, 0xff, 0x46, 0x35, 0xfe, 0xc3, 0x18, 0x9a, 0x8e, 0x59, 0x20, 0xa1, + 0xec, 0x7d, 0x18, 0x46, 0xaf, 0xd5, 0x54, 0xa8, 0x38, 0x81, 0x81, 0x70, 0x2d, 0xae, 0x9e, 0xf8, + 0x69, 0xc4, 0xd5, 0x13, 0x00, 0xf6, 0x59, 0x28, 0x54, 0x1e, 0xd4, 0x68, 0x5c, 0xa6, 0x74, 0xf2, + 0x07, 0xb5, 0x24, 0x9c, 0xbf, 0x6b, 0xc4, 0xdd, 0x17, 0x14, 0x82, 0xf0, 0xc6, 0xf2, 0x06, 0x8d, + 0x8a, 0x4e, 0x78, 0x63, 0x79, 0x23, 0x21, 0xdc, 0xa9, 0x1b, 0xa1, 0x77, 0x6e, 0x2c, 0x6f, 0x7c, + 0xf7, 0xa6, 0xfd, 0xbf, 0x91, 0x97, 0xf1, 0x16, 0x64, 0xc3, 0xde, 0x87, 0x09, 0x23, 0x94, 0x6e, + 0x2e, 0x91, 0xc7, 0xe2, 0x88, 0xc5, 0x29, 0xfb, 0x1e, 0x83, 0x40, 0x25, 0xc6, 0x10, 0xbf, 0x51, + 0xe2, 0xd5, 0x2d, 0x69, 0x62, 0x0e, 0x28, 0x13, 0xa7, 0x13, 0x63, 0xc4, 0x24, 0xec, 0x2a, 0x14, + 0x37, 0x79, 0xdb, 0x6d, 0x47, 0xb1, 0x42, 0x14, 0x4d, 0x81, 0x23, 0x84, 0x99, 0x52, 0x43, 0x8c, + 0x88, 0x66, 0xab, 0xdd, 0xad, 0xb0, 0x1e, 0x78, 0x18, 0x97, 0x25, 0x3e, 0x8b, 0xa5, 0xd9, 0xaa, + 0x56, 0x62, 0x32, 0x48, 0x11, 0x59, 0x3f, 0x93, 0x83, 0x51, 0x1a, 0x48, 0x99, 0xd0, 0x68, 0x27, + 0x39, 0x4b, 0x28, 0xa1, 0xd1, 0x8e, 0x97, 0x4e, 0x68, 0xb4, 0x23, 0x83, 0x9f, 0x8c, 0x91, 0x27, + 0x56, 0xfc, 0x34, 0x28, 0x73, 0xf2, 0x93, 0xcf, 0x9a, 0x99, 0xaf, 0x26, 0x46, 0x1d, 0xd4, 0x1f, + 0xc8, 0xfa, 0xfb, 0xf4, 0x65, 0x37, 0x96, 0x37, 0xd8, 0x22, 0x14, 0xd7, 0x7c, 0x19, 0x58, 0x47, + 0xcf, 0x4e, 0xd9, 0x24, 0x98, 0xde, 0x41, 0x0a, 0x4f, 0x7c, 0xdf, 0x46, 0xe0, 0xd3, 0x5d, 0x46, + 0xfb, 0xbe, 0x8e, 0x04, 0xa6, 0xbe, 0x2f, 0x46, 0x1d, 0xf8, 0xfb, 0x78, 0xc6, 0x26, 0x71, 0xff, + 0x2a, 0x66, 0x0c, 0xb8, 0xa5, 0xfb, 0x59, 0x51, 0x91, 0xda, 0x29, 0x16, 0xfa, 0xed, 0x14, 0xf7, + 0xaf, 0xda, 0x19, 0x54, 0xf8, 0xae, 0x96, 0x80, 0x6b, 0x3c, 0x78, 0xf4, 0x0c, 0xef, 0xd2, 0xd9, + 0xef, 0x6a, 0xe9, 0xe6, 0x0d, 0xb4, 0x49, 0xff, 0x5e, 0x1e, 0x4e, 0x66, 0x13, 0xea, 0x6d, 0xc9, + 0x1d, 0xd2, 0x96, 0x0b, 0x50, 0xbc, 0xe9, 0x87, 0x91, 0x66, 0xd2, 0x87, 0xea, 0xff, 0x5d, 0x82, + 0xd9, 0x71, 0xa9, 0xb8, 0x73, 0x8b, 0xbf, 0xe3, 0xe5, 0x89, 0xfc, 0x30, 0xca, 0x80, 0xb8, 0x73, + 0xcb, 0x22, 0x76, 0x03, 0x8a, 0x36, 0xf9, 0xf9, 0xa4, 0xba, 0x46, 0x81, 0x63, 0x69, 0x8a, 0x05, + 0x04, 0x31, 0x22, 0x1a, 0x13, 0x8c, 0x55, 0x60, 0x94, 0x46, 0x3f, 0xf5, 0x74, 0x9c, 0x31, 0x65, + 0xcc, 0x20, 0xe3, 0x8a, 0x4e, 0xec, 0x28, 0xf8, 0x08, 0x58, 0x5d, 0x51, 0x2e, 0x3b, 0xb8, 0xa3, + 0xc8, 0x47, 0x42, 0xd3, 0x7a, 0x32, 0x46, 0xb4, 0x7e, 0x30, 0x0f, 0xa0, 0xb4, 0x36, 0xcf, 0xec, + 0x0c, 0xfb, 0xac, 0x31, 0xc3, 0x34, 0x63, 0xa2, 0xc1, 0x13, 0x70, 0xde, 0x45, 0x5b, 0x9d, 0xc1, + 0xd3, 0x6f, 0x96, 0x61, 0x78, 0x33, 0x51, 0x68, 0x91, 0x03, 0x09, 0xaa, 0xa3, 0x25, 0xdc, 0xda, + 0x82, 0xb9, 0x1b, 0x3c, 0x4a, 0xd4, 0x5b, 0xea, 0xe9, 0xf1, 0x70, 0xb6, 0xaf, 0xc3, 0x18, 0xe1, + 0xc7, 0xfb, 0x97, 0xd4, 0xc5, 0x50, 0xe0, 0x0e, 0xd4, 0xc5, 0x28, 0x04, 0xb1, 0x1b, 0xad, 0xf0, + 0x26, 0x8f, 0xf8, 0x77, 0xb7, 0x9a, 0x1a, 0x30, 0xd9, 0x14, 0x6c, 0xd9, 0x60, 0x35, 0x1c, 0xd9, + 0x3f, 0xf7, 0xe1, 0x44, 0xfc, 0xed, 0x4f, 0x93, 0xef, 0x65, 0x71, 0xa5, 0xa4, 0xf8, 0xdc, 0x09, + 0xc7, 0x43, 0x6c, 0x4f, 0x9e, 0xc0, 0x82, 0x22, 0x78, 0xe0, 0xc5, 0x56, 0x91, 0x03, 0xd1, 0xb2, + 0x77, 0x60, 0x5c, 0xa3, 0xa1, 0xf8, 0xd2, 0xa8, 0xa6, 0x7e, 0xec, 0x45, 0xbb, 0x4e, 0x28, 0xe1, + 0xba, 0x9a, 0x5a, 0x43, 0xb7, 0xbe, 0x0c, 0xcf, 0xc7, 0x4e, 0x3e, 0x19, 0x55, 0xa7, 0x98, 0xe7, + 0x8e, 0xc7, 0x7c, 0x3d, 0x69, 0x56, 0xb5, 0x1d, 0x3b, 0xe6, 0x2a, 0xde, 0x4c, 0x6f, 0x16, 0x35, + 0xe6, 0x85, 0x1e, 0x57, 0x5f, 0xcd, 0xa3, 0xd7, 0x7a, 0x5b, 0xfb, 0xd8, 0x0c, 0x86, 0x06, 0x71, + 0x2e, 0x4d, 0xfc, 0x83, 0x79, 0x98, 0xbe, 0x5b, 0x5d, 0x59, 0x8e, 0xad, 0x8f, 0x3e, 0x61, 0xe9, + 0x41, 0x8d, 0xb6, 0xf5, 0xdf, 0x6f, 0xac, 0x7b, 0x30, 0x9b, 0xea, 0x06, 0x14, 0x1d, 0xde, 0x93, + 0xee, 0x21, 0x31, 0x58, 0x89, 0x0d, 0x27, 0xb3, 0xd8, 0xdf, 0xbf, 0x6a, 0xa7, 0xb0, 0xad, 0xff, + 0x1c, 0x52, 0x7c, 0x69, 0x0b, 0x7b, 0x1d, 0xc6, 0xaa, 0x61, 0xd8, 0xe5, 0xc1, 0x3d, 0x7b, 0x4d, + 0x57, 0x15, 0x78, 0x08, 0x74, 0xba, 0x41, 0xd3, 0x4e, 0x10, 0xd8, 0x45, 0x28, 0x52, 0xc8, 0x65, + 0xb5, 0x27, 0xa0, 0xd6, 0x36, 0x8e, 0xd8, 0x6c, 0xc7, 0xc5, 0xec, 0x4d, 0x98, 0x90, 0x7f, 0xcb, + 0xd9, 0x46, 0x1d, 0x8e, 0xca, 0x41, 0x42, 0x97, 0xb3, 0xd3, 0x36, 0xd0, 0xd8, 0x6b, 0x50, 0xa8, + 0x2c, 0xdb, 0xa4, 0x0e, 0x22, 0xb9, 0x11, 0x93, 0x7e, 0x77, 0xb9, 0x79, 0x89, 0x58, 0xb6, 0x85, + 0xf4, 0xa7, 0xa2, 0x13, 0x90, 0x26, 0x5b, 0xe6, 0x26, 0x27, 0x58, 0xea, 0x30, 0x43, 0x18, 0xbb, + 0x0c, 0xa3, 0x2b, 0x5e, 0xd8, 0x69, 0xba, 0x7b, 0xa4, 0xc7, 0x96, 0xb9, 0xaf, 0x24, 0xc8, 0xf0, + 0xed, 0x97, 0x20, 0x76, 0x51, 0xe5, 0x04, 0x2a, 0x26, 0x5e, 0x26, 0x7d, 0x12, 0xff, 0xbc, 0x0e, + 0x23, 0x14, 0x98, 0x78, 0x4c, 0x4b, 0x39, 0x90, 0x0e, 0x48, 0x4c, 0x38, 0xbd, 0xee, 0xa6, 0xf0, + 0x34, 0xdd, 0x4d, 0xb7, 0xe0, 0xd4, 0x0d, 0xd4, 0xde, 0x98, 0xd1, 0x7c, 0xee, 0xd9, 0x55, 0xd2, + 0x87, 0xe3, 0x33, 0x90, 0x54, 0xf0, 0xa4, 0x03, 0x02, 0x39, 0xdd, 0x40, 0x4f, 0xe5, 0xd8, 0x8f, + 0x11, 0xfb, 0x12, 0xcc, 0x65, 0x15, 0x91, 0xd6, 0x1c, 0xe3, 0xd6, 0x64, 0x57, 0xa0, 0xc7, 0xad, + 0xc9, 0xe2, 0xc0, 0xd6, 0xa0, 0x24, 0xe1, 0x95, 0x46, 0xcb, 0x6b, 0x4b, 0xcd, 0xbf, 0xd4, 0xaa, + 0xa3, 0xdb, 0x07, 0x71, 0x75, 0x45, 0xa1, 0x7c, 0x01, 0x30, 0x1c, 0x85, 0x52, 0x94, 0xec, 0x27, + 0x72, 0xe2, 0x36, 0x27, 0xc3, 0xf8, 0xde, 0xb3, 0xd7, 0x42, 0x8a, 0x79, 0x76, 0x32, 0xf1, 0x01, + 0xaa, 0x45, 0x81, 0xd7, 0xde, 0x21, 0x27, 0xa0, 0x4d, 0x72, 0x02, 0x7a, 0xe7, 0x23, 0x39, 0x01, + 0x49, 0x56, 0xe1, 0xc1, 0x7e, 0x79, 0x22, 0xa0, 0x3a, 0x71, 0x15, 0x19, 0x5f, 0x20, 0xba, 0x0e, + 0x3d, 0x61, 0xef, 0xb5, 0x65, 0x10, 0x51, 0xde, 0x90, 0x8d, 0x9c, 0xc6, 0x1d, 0x1c, 0xbb, 0x0e, + 0x43, 0xd9, 0x3b, 0xdd, 0x18, 0xa1, 0xa7, 0xa1, 0x99, 0x1c, 0xc4, 0xc5, 0x53, 0x39, 0x9a, 0x48, + 0xdf, 0xd9, 0x52, 0x72, 0xf1, 0x54, 0x5e, 0x29, 0x0e, 0x4e, 0x23, 0x7d, 0xf2, 0x18, 0x24, 0xec, + 0x32, 0x8c, 0xdc, 0x71, 0x9f, 0x54, 0x76, 0x38, 0xe5, 0x7a, 0x9b, 0x54, 0xdb, 0x1f, 0x02, 0x97, + 0x8a, 0xbf, 0x2f, 0x1d, 0x19, 0x9e, 0xb3, 0x09, 0x8d, 0x7d, 0x5f, 0x0e, 0x4e, 0xca, 0x65, 0xac, + 0x5a, 0x59, 0xe3, 0x51, 0x24, 0xfa, 0x81, 0x82, 0x9f, 0x9d, 0x4b, 0xac, 0xb1, 0xb3, 0xf1, 0x64, + 0xd2, 0x7c, 0xda, 0x19, 0xe2, 0x8e, 0x0b, 0xa9, 0xd4, 0x08, 0xeb, 0x9a, 0x49, 0xcf, 0x36, 0x61, + 0xfc, 0xce, 0xf5, 0x4a, 0x5c, 0xad, 0x8c, 0xf5, 0x5c, 0xce, 0xda, 0x1d, 0x35, 0xb4, 0x2c, 0x37, + 0x02, 0x9d, 0x0d, 0x99, 0xfe, 0x7f, 0x56, 0xf5, 0x07, 0x7b, 0x43, 0x77, 0x1c, 0x2d, 0xa0, 0xf4, + 0x3c, 0xda, 0x72, 0x9f, 0x38, 0xee, 0x0e, 0x37, 0x5e, 0xc9, 0x49, 0x7b, 0xfd, 0x53, 0x39, 0x38, + 0xdd, 0xb7, 0xc9, 0xec, 0x1a, 0x9c, 0x72, 0xa5, 0x3b, 0xb4, 0xb3, 0x1b, 0x45, 0x9d, 0xd0, 0x51, + 0x57, 0x0c, 0x72, 0x35, 0xb5, 0x4f, 0x50, 0xf1, 0x4d, 0x51, 0xaa, 0x6e, 0x1d, 0x21, 0x7b, 0x1f, + 0x5e, 0xf0, 0xda, 0x21, 0xaf, 0x77, 0x03, 0xee, 0x28, 0x06, 0x75, 0xaf, 0x11, 0x38, 0x81, 0xdb, + 0xde, 0x51, 0x7e, 0xb3, 0xf6, 0x69, 0x85, 0x43, 0x2e, 0xd7, 0xcb, 0x5e, 0x23, 0xb0, 0x11, 0xc1, + 0xfa, 0x83, 0x1c, 0xcc, 0xf7, 0xeb, 0x12, 0x36, 0x0f, 0xa3, 0xbc, 0xed, 0x6e, 0x35, 0x95, 0xb7, + 0x90, 0xad, 0x7e, 0xb2, 0xe7, 0x21, 0xd9, 0xe9, 0xe9, 0xf4, 0x2f, 0xd6, 0x29, 0x02, 0x3f, 0xda, + 0xad, 0xeb, 0xfb, 0x3a, 0xd9, 0x99, 0x4f, 0xd4, 0xf5, 0xdd, 0xfd, 0x0c, 0x40, 0xb2, 0x9d, 0x4b, + 0xc5, 0x84, 0x3d, 0xe6, 0xd6, 0x03, 0xb9, 0xf2, 0xd8, 0x49, 0x18, 0x91, 0xdb, 0x25, 0x39, 0x37, + 0xd0, 0x2f, 0x71, 0x6e, 0x53, 0x27, 0xe3, 0x3e, 0x5f, 0x58, 0x9a, 0x30, 0x3a, 0x7b, 0xa4, 0x85, + 0x83, 0x63, 0xfd, 0xe4, 0xa4, 0x14, 0x21, 0x2a, 0xdd, 0x68, 0x57, 0x09, 0x1d, 0x8b, 0x59, 0xde, + 0x5d, 0xd2, 0x96, 0x52, 0x33, 0xba, 0x36, 0x7d, 0xba, 0xd4, 0xdb, 0x4f, 0x3e, 0xf3, 0xed, 0xe7, + 0x75, 0x18, 0x5b, 0xde, 0xe5, 0xf5, 0x87, 0xb1, 0x87, 0x4d, 0x91, 0x94, 0xeb, 0x02, 0x28, 0x03, + 0x2c, 0x27, 0x08, 0xec, 0x32, 0x00, 0x3a, 0x95, 0x4a, 0x89, 0x54, 0x4b, 0x92, 0x80, 0x3e, 0xa8, + 0x64, 0x9e, 0xa2, 0xa1, 0x20, 0xfb, 0x9a, 0x7d, 0x5d, 0xb7, 0x67, 0x91, 0xec, 0xc3, 0x60, 0x9b, + 0xd0, 0x13, 0x04, 0xd1, 0x3c, 0x6d, 0x5f, 0xa1, 0x53, 0xb0, 0xd4, 0xb3, 0xf9, 0xe8, 0x48, 0xec, + 0x12, 0x8c, 0x6d, 0x28, 0x2f, 0x01, 0x3c, 0x04, 0x27, 0x90, 0x02, 0x12, 0x8f, 0x82, 0xf9, 0x9c, + 0x9d, 0xa0, 0xb0, 0xcf, 0xc2, 0xe8, 0x32, 0x0f, 0xa2, 0xcd, 0xcd, 0x35, 0x34, 0x3a, 0x91, 0xb9, + 0x04, 0x8a, 0x18, 0xf7, 0x3d, 0x8a, 0x9a, 0xdf, 0xd9, 0x2f, 0x4f, 0x46, 0x5e, 0x8b, 0xc7, 0x31, + 0x92, 0x6d, 0x85, 0xcd, 0x96, 0xa0, 0x24, 0x9f, 0xc5, 0x93, 0xbb, 0x07, 0x9e, 0x8c, 0x45, 0x79, + 0x4e, 0xd3, 0x1b, 0xfa, 0x63, 0xbe, 0x15, 0x47, 0xbd, 0xef, 0xc1, 0x67, 0xab, 0x2a, 0x59, 0x84, + 0xde, 0x4c, 0x48, 0x94, 0x61, 0xe9, 0x1d, 0x43, 0xb4, 0xb6, 0x97, 0x82, 0x55, 0x60, 0x72, 0xd9, + 0x6f, 0x75, 0xdc, 0xc8, 0xc3, 0xcc, 0x6b, 0x7b, 0x74, 0x08, 0xa2, 0x42, 0xaf, 0xae, 0x17, 0x18, + 0x27, 0xaa, 0x5e, 0xc0, 0xae, 0xc3, 0x94, 0xed, 0x77, 0xc5, 0x30, 0xa9, 0x5b, 0xb8, 0x3c, 0xe7, + 0xd0, 0x34, 0x24, 0x10, 0x25, 0xe2, 0x58, 0xa6, 0x2b, 0xb7, 0x11, 0xbe, 0xd2, 0xa0, 0x62, 0xeb, + 0x19, 0xcf, 0x21, 0xfa, 0xe1, 0xa6, 0xc7, 0xbe, 0xef, 0x61, 0x96, 0xf1, 0x92, 0x72, 0x15, 0xc6, + 0x6b, 0xb5, 0xbb, 0x9b, 0x3c, 0x8c, 0xae, 0x37, 0xfd, 0xc7, 0x78, 0xb6, 0x15, 0x29, 0x27, 0x50, + 0xe8, 0x3b, 0x11, 0x0f, 0x23, 0x67, 0xbb, 0xe9, 0x3f, 0xb6, 0x75, 0x2c, 0xf6, 0x35, 0xd1, 0x1f, + 0x9a, 0x24, 0x48, 0x81, 0x3a, 0x0f, 0x13, 0x56, 0xf1, 0x04, 0x49, 0x16, 0x8d, 0x10, 0x59, 0xcd, + 0xce, 0xd2, 0xd0, 0xd1, 0x61, 0x2c, 0xf0, 0x9f, 0xec, 0x55, 0x1a, 0x8d, 0x80, 0x87, 0x21, 0x1d, + 0x42, 0xd2, 0x61, 0x0c, 0x95, 0x0d, 0xae, 0x2c, 0x30, 0x1c, 0xc6, 0x34, 0x02, 0xf6, 0xc3, 0x39, + 0x38, 0xa1, 0xbb, 0x92, 0xe0, 0x72, 0x41, 0x33, 0x17, 0x79, 0x24, 0xbd, 0x71, 0x49, 0x1d, 0xc2, + 0x97, 0x34, 0xb4, 0x4b, 0x8f, 0xae, 0x5c, 0xaa, 0x24, 0x3f, 0x6b, 0x8a, 0x08, 0x83, 0x8e, 0x95, + 0x33, 0xf9, 0x25, 0x5f, 0x30, 0x9f, 0xb3, 0xe7, 0xdc, 0x0c, 0x62, 0xb6, 0x2c, 0x24, 0x35, 0x31, + 0xa3, 0xd0, 0x70, 0xaa, 0xba, 0x81, 0x67, 0x1a, 0x69, 0x54, 0x69, 0xfe, 0x49, 0x13, 0x2b, 0xaf, + 0x63, 0x0a, 0x64, 0x1a, 0x0d, 0xab, 0xc2, 0xb4, 0x04, 0x88, 0x6d, 0x41, 0xa6, 0x8c, 0x99, 0x4d, + 0xc2, 0xd6, 0x13, 0x1b, 0x7c, 0xeb, 0xc7, 0xb4, 0x31, 0x7a, 0x64, 0xc9, 0x14, 0x1d, 0x7b, 0x1f, + 0xa6, 0xc2, 0x70, 0xd7, 0xd1, 0xd6, 0xeb, 0x1c, 0xae, 0x62, 0x0c, 0x90, 0x49, 0x25, 0x29, 0xb7, + 0xba, 0x89, 0x30, 0xdc, 0x4d, 0x56, 0xf4, 0xfb, 0x30, 0x85, 0xb6, 0x3a, 0x09, 0x83, 0x13, 0x09, + 0x03, 0x2a, 0x49, 0x33, 0x88, 0x9a, 0x61, 0xc2, 0xe0, 0xef, 0xe4, 0xe0, 0xb4, 0xa8, 0x28, 0x7b, + 0x84, 0x4e, 0x7e, 0x94, 0x11, 0xc2, 0x90, 0x81, 0x7d, 0x79, 0xea, 0xe2, 0x68, 0x18, 0xee, 0x66, + 0x71, 0xc0, 0x8f, 0x12, 0x1f, 0x9f, 0xfd, 0x51, 0xa7, 0x3e, 0xf2, 0x47, 0xf5, 0xe5, 0xa9, 0x7f, + 0x54, 0xd4, 0x0c, 0xb3, 0x38, 0xe0, 0xb5, 0xb6, 0x56, 0xb9, 0xb3, 0x96, 0xdc, 0xcd, 0x3e, 0x59, + 0x6e, 0x2b, 0x46, 0xdb, 0x0e, 0x71, 0x5b, 0xb9, 0x27, 0x7d, 0x9e, 0xb5, 0x6e, 0x50, 0xd7, 0x5a, + 0x03, 0x9c, 0xbe, 0xd6, 0xa6, 0x68, 0xec, 0x14, 0xb6, 0xf5, 0x0b, 0x90, 0xe2, 0x4b, 0xa6, 0xaa, + 0x16, 0x8c, 0xc8, 0x5b, 0x2b, 0x75, 0x32, 0xda, 0x2c, 0xc8, 0x3b, 0xad, 0x4d, 0x25, 0xec, 0x34, + 0x14, 0x6a, 0xb5, 0xbb, 0xd4, 0xc9, 0x68, 0xb0, 0x1a, 0x86, 0xbe, 0x2d, 0x60, 0x62, 0x84, 0xd0, + 0x0a, 0x55, 0x0b, 0xa8, 0x2e, 0xce, 0x3b, 0x1b, 0xa1, 0xa2, 0xbf, 0xd5, 0x1d, 0x72, 0x28, 0xe9, + 0x6f, 0xba, 0x43, 0x26, 0x37, 0xc7, 0x65, 0x98, 0xaf, 0x84, 0x21, 0x0f, 0xc4, 0x84, 0x20, 0xe3, + 0xc6, 0x80, 0xee, 0x39, 0x74, 0xb0, 0x63, 0xa5, 0x6e, 0x3d, 0xb4, 0xfb, 0x22, 0xb2, 0x0b, 0x50, + 0xac, 0x74, 0x1b, 0x1e, 0x6f, 0xd7, 0x8d, 0xa8, 0x60, 0x2e, 0xc1, 0xec, 0xb8, 0x94, 0x7d, 0x11, + 0x4e, 0xa4, 0x42, 0xf6, 0x51, 0x0f, 0x8c, 0x26, 0x7b, 0xaf, 0xba, 0x87, 0x25, 0x06, 0x19, 0xb2, + 0x4b, 0xb2, 0x29, 0x59, 0x05, 0x4a, 0xab, 0xe8, 0xa6, 0xb5, 0xc2, 0xe5, 0xdb, 0x90, 0x1f, 0x48, + 0xe7, 0x3b, 0x79, 0x6b, 0x96, 0x2e, 0x5c, 0x4e, 0x23, 0x2e, 0xb4, 0x7b, 0xd0, 0xd9, 0x6d, 0x98, + 0x4d, 0xc3, 0xc4, 0x09, 0x2e, 0x2f, 0xc8, 0xb8, 0xdf, 0xf4, 0x70, 0xc1, 0x33, 0x3c, 0x8b, 0x8a, + 0x6d, 0xc1, 0x4c, 0x62, 0x90, 0x64, 0x5e, 0x9b, 0x95, 0x9d, 0x73, 0x5c, 0xae, 0xae, 0xce, 0xcf, + 0xd3, 0x64, 0x9c, 0x4d, 0x8c, 0x9b, 0xe2, 0xeb, 0xb3, 0xdd, 0xcb, 0x8e, 0x35, 0x60, 0xaa, 0xe6, + 0xed, 0xb4, 0xbd, 0xf6, 0xce, 0x6d, 0xbe, 0xb7, 0xe1, 0x7a, 0x01, 0x59, 0x9c, 0x2a, 0x7b, 0xf2, + 0x4a, 0xb8, 0xd7, 0x6a, 0xf1, 0x28, 0xc0, 0x8d, 0x50, 0x94, 0xa3, 0x83, 0xb9, 0xb8, 0x0e, 0x2d, + 0x84, 0x92, 0x0e, 0x7d, 0x32, 0x3b, 0xae, 0x67, 0x08, 0x01, 0x26, 0x4f, 0x43, 0x75, 0x31, 0x31, + 0xa0, 0xea, 0xa2, 0x09, 0x33, 0xab, 0xed, 0x7a, 0xb0, 0x87, 0x4f, 0x74, 0xea, 0xe3, 0x26, 0x8f, + 0xf8, 0xb8, 0x97, 0xe9, 0xe3, 0x5e, 0x70, 0xd5, 0x0c, 0xcb, 0xfa, 0xbc, 0x5e, 0xc6, 0xac, 0x06, + 0x33, 0x78, 0x71, 0xa8, 0xae, 0x6c, 0x54, 0xdb, 0x5e, 0xe4, 0xb9, 0x11, 0x6f, 0x90, 0x70, 0xf1, + 0x0a, 0xf1, 0x3c, 0x23, 0xaf, 0xa8, 0x5e, 0xa3, 0xe3, 0x78, 0x0a, 0x45, 0x67, 0xda, 0x43, 0x7f, + 0xd8, 0x3d, 0x71, 0xfa, 0x2f, 0xe8, 0x9e, 0x58, 0x85, 0xe9, 0x74, 0xe0, 0x85, 0x52, 0x72, 0x0e, + 0x87, 0x58, 0x24, 0x8e, 0x73, 0xbf, 0x8b, 0xc2, 0xa4, 0x91, 0xf3, 0xcf, 0xa4, 0x4b, 0x5f, 0x39, + 0x67, 0x8c, 0x2b, 0xa7, 0xb1, 0x2b, 0x1d, 0xe3, 0xca, 0xc9, 0x36, 0x00, 0xae, 0xfb, 0x41, 0x9d, + 0x57, 0xd0, 0xf9, 0x99, 0x19, 0xd9, 0x73, 0x04, 0xd3, 0xa4, 0x50, 0xae, 0x9f, 0x6d, 0xf1, 0xdb, + 0x49, 0xfb, 0xb0, 0x6b, 0x3c, 0xac, 0x1f, 0xc9, 0xc3, 0x7c, 0xbf, 0xcf, 0x39, 0xe4, 0xba, 0xf7, + 0x29, 0xe8, 0x5d, 0xe1, 0x74, 0xed, 0x2b, 0xf1, 0xf4, 0x3a, 0x5f, 0x84, 0xec, 0x85, 0x4c, 0xd7, + 0xc0, 0xd9, 0x34, 0xc1, 0xbd, 0xa0, 0xc9, 0xae, 0xc1, 0xb8, 0xf6, 0xf1, 0xb8, 0x97, 0xf6, 0x6b, + 0xaa, 0x0d, 0xdb, 0xf1, 0xdf, 0xe2, 0x9a, 0x28, 0xf7, 0x2d, 0x75, 0x4d, 0x94, 0xbf, 0x58, 0x49, + 0xfa, 0x7f, 0x8f, 0x48, 0x2b, 0x80, 0x30, 0xf4, 0x19, 0x03, 0xdc, 0xb7, 0xe5, 0x16, 0x68, 0xe3, + 0xdf, 0xd6, 0xaf, 0x4e, 0xc8, 0x13, 0x59, 0xbf, 0x25, 0xf6, 0xb3, 0x0f, 0x4e, 0xdd, 0x1e, 0xf3, + 0xc7, 0xb9, 0x3d, 0x16, 0x8e, 0xbe, 0x3d, 0x0e, 0x1d, 0x75, 0x7b, 0x4c, 0x5d, 0xef, 0x86, 0x8f, + 0x7d, 0xbd, 0x1b, 0x39, 0xd6, 0xf5, 0x6e, 0xf4, 0x58, 0xd7, 0x3b, 0xe3, 0xa6, 0x5a, 0x3c, 0xea, + 0xa6, 0xfa, 0x57, 0x97, 0xc1, 0x67, 0xf5, 0x32, 0x98, 0x25, 0xe2, 0x1d, 0xeb, 0x32, 0xf8, 0x43, + 0x7d, 0xef, 0x72, 0xa5, 0x8f, 0x22, 0x94, 0xbf, 0x34, 0xc0, 0x5d, 0x6e, 0xd0, 0x9b, 0xdc, 0xcc, + 0xd3, 0xb9, 0xc9, 0xb1, 0xa7, 0x76, 0x93, 0x9b, 0xfd, 0xb8, 0x37, 0xb9, 0xb9, 0xa7, 0x79, 0x93, + 0x3b, 0xf1, 0x97, 0xf1, 0x26, 0x77, 0xf2, 0x5f, 0xcd, 0x4d, 0xee, 0xaf, 0x41, 0x29, 0x2d, 0x5c, + 0x1e, 0x1d, 0x74, 0xf7, 0xa9, 0x05, 0x88, 0x14, 0xa2, 0x6f, 0x5a, 0xb8, 0x63, 0x97, 0x01, 0x36, + 0x02, 0xef, 0x91, 0x1b, 0xf1, 0xdb, 0xca, 0xfa, 0x8d, 0x02, 0x46, 0x4b, 0xa8, 0x18, 0x79, 0x5b, + 0x43, 0x89, 0xef, 0x35, 0xf9, 0xac, 0x7b, 0x8d, 0xf5, 0xc3, 0x79, 0x98, 0x91, 0x51, 0xd6, 0x9e, + 0xfd, 0x47, 0xd8, 0xf7, 0x8c, 0xdb, 0xaa, 0xb2, 0xb5, 0x4e, 0xb5, 0xee, 0x90, 0x67, 0xd8, 0xaf, + 0xc2, 0x89, 0x9e, 0xae, 0xc0, 0x1b, 0xeb, 0x8a, 0x8a, 0x6f, 0xd7, 0x73, 0x67, 0x9d, 0xcf, 0xae, + 0xe4, 0xfe, 0x55, 0xbb, 0x87, 0xc2, 0xfa, 0xb3, 0xa1, 0x1e, 0xfe, 0xf4, 0x20, 0xab, 0x3f, 0xb1, + 0xe6, 0x8e, 0xf7, 0xc4, 0x9a, 0x1f, 0xec, 0x89, 0x35, 0x25, 0x54, 0x14, 0x06, 0x11, 0x2a, 0xbe, + 0x08, 0x93, 0x9b, 0xdc, 0x6d, 0x85, 0x9b, 0x3e, 0x65, 0xcb, 0x91, 0xbe, 0x16, 0x2a, 0x7c, 0x9d, + 0x28, 0x53, 0x17, 0xae, 0xd8, 0x66, 0x34, 0x12, 0x04, 0xe2, 0x18, 0x94, 0xe9, 0x73, 0x6c, 0x93, + 0x83, 0x7e, 0x8b, 0x1e, 0x3e, 0xe4, 0x16, 0x5d, 0x83, 0x09, 0xa2, 0x4b, 0x22, 0x0d, 0x27, 0xd7, + 0x3d, 0x51, 0x84, 0x70, 0x55, 0x7b, 0x9c, 0xc4, 0x39, 0xae, 0x5d, 0xde, 0xf4, 0x0c, 0x26, 0xa2, + 0x0b, 0x56, 0xdb, 0x8d, 0x8e, 0xef, 0xb5, 0xb1, 0x0b, 0x46, 0x93, 0x2e, 0xe0, 0x04, 0x96, 0x5d, + 0xa0, 0x21, 0xb1, 0x77, 0x60, 0xaa, 0xb2, 0x51, 0xd5, 0xc9, 0x8a, 0xc9, 0x2b, 0xaf, 0xdb, 0xf1, + 0x1c, 0x83, 0x34, 0x85, 0x7b, 0xd8, 0xcd, 0x67, 0xec, 0x2f, 0xe6, 0xe6, 0x63, 0xfd, 0xf3, 0x09, + 0xb5, 0xbc, 0xbf, 0xbb, 0x0f, 0x24, 0xe6, 0x93, 0x47, 0xe1, 0x98, 0x4f, 0x1e, 0x43, 0x47, 0x09, + 0x92, 0x86, 0x7c, 0x3b, 0x7c, 0x2c, 0xf9, 0x76, 0xe4, 0x63, 0x3f, 0x5f, 0x8c, 0x1e, 0x53, 0x62, + 0x4d, 0xad, 0xb5, 0xe2, 0x20, 0x6b, 0x2d, 0x53, 0xca, 0x1d, 0xfb, 0xf8, 0x52, 0x2e, 0x1c, 0x5b, + 0xca, 0xad, 0x25, 0xbe, 0xcb, 0xe3, 0x47, 0xba, 0x84, 0x9c, 0x21, 0xad, 0xc0, 0x4c, 0x76, 0x88, + 0xbd, 0xd8, 0x8b, 0xf9, 0x13, 0x25, 0x3a, 0x7f, 0x3d, 0x5b, 0x74, 0x3e, 0xfc, 0xbc, 0x39, 0x96, + 0xf0, 0xfc, 0xc3, 0x4f, 0x57, 0x78, 0x7e, 0xba, 0x0f, 0x21, 0x7f, 0x25, 0x3e, 0xff, 0x95, 0xf8, + 0x3c, 0xa0, 0xf8, 0x1c, 0xe0, 0xf2, 0x7a, 0xe0, 0x06, 0x6d, 0x54, 0x3b, 0x5d, 0x86, 0x51, 0x15, + 0x63, 0x34, 0x97, 0x68, 0x94, 0x7b, 0x83, 0x8b, 0x2a, 0x2c, 0xb6, 0x08, 0x45, 0x45, 0xac, 0xa7, + 0x65, 0x79, 0x4c, 0x30, 0x23, 0x7c, 0x23, 0xc1, 0xac, 0x7f, 0x6f, 0x48, 0x6d, 0xe1, 0x62, 0xce, + 0x6c, 0xb8, 0x81, 0xdb, 0xc2, 0x7c, 0x5f, 0xf1, 0x0a, 0xd3, 0x84, 0xf7, 0xd4, 0xa2, 0x4c, 0x99, + 0xf6, 0x9b, 0x24, 0x1f, 0x29, 0xea, 0x6b, 0x92, 0x52, 0xb5, 0x30, 0x40, 0x4a, 0xd5, 0xb7, 0x8c, + 0x7c, 0xa4, 0x43, 0x49, 0x02, 0x3c, 0xb1, 0xad, 0x1d, 0x9e, 0x89, 0xf4, 0x9a, 0x9e, 0x38, 0x74, + 0x38, 0x89, 0xea, 0x85, 0x94, 0x87, 0xa4, 0x0c, 0x8d, 0x6f, 0x23, 0x23, 0xc7, 0x89, 0xa7, 0x3c, + 0xfa, 0xaf, 0x34, 0x9e, 0xf2, 0x2a, 0x00, 0x1d, 0xb5, 0x89, 0x79, 0xc2, 0x2b, 0xb8, 0xfa, 0xc9, + 0x4c, 0x39, 0x8a, 0x9a, 0x7d, 0x32, 0x48, 0x68, 0x84, 0xd6, 0xef, 0x32, 0x98, 0xa9, 0xd5, 0xee, + 0xae, 0x78, 0xee, 0x4e, 0xdb, 0x0f, 0x23, 0xaf, 0x5e, 0x6d, 0x6f, 0xfb, 0x42, 0x14, 0x8f, 0x8f, + 0x03, 0x2d, 0x70, 0x6e, 0x72, 0x14, 0xc4, 0xc5, 0xe2, 0xaa, 0xb7, 0x1a, 0x04, 0x4a, 0x3f, 0x2a, + 0xaf, 0x7a, 0x5c, 0x00, 0x6c, 0x09, 0x17, 0xd2, 0x6e, 0xad, 0x8b, 0x91, 0x2d, 0xc8, 0x66, 0x04, + 0xa5, 0xdd, 0x50, 0x82, 0x6c, 0x55, 0xc6, 0x78, 0xef, 0x84, 0xa5, 0xdb, 0xcf, 0x29, 0x23, 0x2a, + 0x73, 0x52, 0x2c, 0x0f, 0x3b, 0x12, 0x46, 0x70, 0xdb, 0xec, 0x20, 0x5c, 0xb7, 0x88, 0xeb, 0x59, + 0x03, 0x7b, 0x70, 0xc2, 0xf0, 0x79, 0x1e, 0xf4, 0x31, 0xe5, 0x35, 0x92, 0xae, 0x2d, 0x0c, 0xb1, + 0x91, 0xf1, 0xa2, 0xa2, 0x27, 0xf0, 0xca, 0xac, 0x41, 0x9c, 0x67, 0x67, 0x32, 0x4b, 0xe2, 0xd5, + 0x3d, 0x6e, 0x44, 0xc6, 0xd6, 0x36, 0x0d, 0x99, 0xaa, 0xac, 0x5f, 0xd5, 0x4e, 0xc6, 0x56, 0x70, + 0x78, 0x4d, 0xec, 0xd7, 0x72, 0x70, 0xca, 0xc0, 0x88, 0xb7, 0xab, 0x30, 0x0e, 0x07, 0x92, 0x39, + 0xaf, 0x3f, 0x7c, 0x3a, 0xf3, 0xfa, 0x25, 0xb3, 0x2d, 0xc9, 0x86, 0xaa, 0xb7, 0xa1, 0xdf, 0x17, + 0xb2, 0x47, 0x30, 0x83, 0x45, 0xea, 0x61, 0x47, 0xcc, 0x59, 0x7a, 0x0f, 0x9a, 0x4b, 0x3e, 0x5b, + 0xfa, 0xf1, 0x63, 0xba, 0xe9, 0xc5, 0x6f, 0xef, 0x97, 0x27, 0x0d, 0x74, 0x15, 0x6b, 0xda, 0x49, + 0x5e, 0x87, 0xbc, 0xf6, 0xb6, 0xaf, 0x0b, 0x4a, 0x3d, 0x55, 0xb0, 0x7f, 0x9c, 0x93, 0xcf, 0x09, + 0xb2, 0x19, 0xd7, 0x03, 0xbf, 0x15, 0x97, 0x2b, 0xd3, 0xca, 0x3e, 0xdd, 0xd6, 0x7c, 0x3a, 0xdd, + 0xf6, 0x0a, 0x7e, 0xb2, 0xdc, 0x13, 0x9c, 0xed, 0xc0, 0x6f, 0x25, 0x9f, 0xaf, 0x77, 0x5c, 0xdf, + 0x8f, 0x64, 0xdf, 0x9f, 0x83, 0xd3, 0x86, 0x56, 0x53, 0x4f, 0xfc, 0x41, 0xd1, 0x12, 0x66, 0xe3, + 0x38, 0x2a, 0x49, 0xd1, 0xd2, 0x25, 0x9a, 0xff, 0xe7, 0xf1, 0x0b, 0xb4, 0x98, 0x9c, 0x02, 0xc9, + 0x69, 0x49, 0x2c, 0xed, 0x13, 0xfa, 0xd7, 0xc2, 0x3c, 0x98, 0x41, 0x2b, 0x1b, 0xc3, 0x04, 0x78, + 0xae, 0xbf, 0x09, 0x70, 0x9c, 0x16, 0x14, 0xc3, 0xfd, 0xf7, 0xb7, 0x03, 0xee, 0xe5, 0xca, 0xfe, + 0x3a, 0x9c, 0xee, 0x01, 0xc6, 0xab, 0xed, 0x44, 0xdf, 0xd5, 0xf6, 0xa9, 0x83, 0xfd, 0xf2, 0xab, + 0x59, 0xb5, 0x65, 0xad, 0xb4, 0xfe, 0x35, 0x30, 0x17, 0x20, 0x29, 0x24, 0xf1, 0x23, 0x7b, 0x82, + 0x7e, 0x8a, 0xe6, 0x87, 0x86, 0x2f, 0xf6, 0x72, 0xed, 0x1b, 0xf4, 0x23, 0x2f, 0x41, 0x62, 0x1c, + 0x26, 0xb4, 0x54, 0x07, 0x7b, 0x64, 0xec, 0xd1, 0xa7, 0x92, 0x6f, 0xef, 0x97, 0x0d, 0x6c, 0x71, + 0x21, 0xd2, 0x73, 0x28, 0x18, 0xd2, 0x9e, 0x8e, 0xc8, 0x7e, 0x25, 0x07, 0x73, 0x02, 0x90, 0x4c, + 0x2a, 0x6a, 0xd4, 0xfc, 0x61, 0xb3, 0x7e, 0xf7, 0xe9, 0xcc, 0xfa, 0x17, 0xf1, 0x1b, 0xf5, 0x59, + 0xdf, 0xd3, 0x25, 0x99, 0x1f, 0x87, 0xb3, 0xdd, 0x30, 0xe8, 0x32, 0x66, 0xfb, 0xe9, 0x01, 0x66, + 0xbb, 0x1c, 0x80, 0xa3, 0x67, 0x7b, 0xdf, 0x5a, 0xd8, 0x26, 0x4c, 0xd0, 0x5d, 0x48, 0x76, 0xd8, + 0x59, 0x23, 0x46, 0xb3, 0x5e, 0x24, 0x2f, 0xa8, 0x94, 0x09, 0xa2, 0xa7, 0x85, 0x06, 0x17, 0xd6, + 0x86, 0x59, 0xf9, 0xdb, 0xd4, 0x4d, 0x95, 0xfb, 0xea, 0xa6, 0x2e, 0x50, 0x8b, 0xce, 0x11, 0xff, + 0x94, 0x8a, 0x4a, 0x0f, 0xbf, 0x94, 0xc1, 0x98, 0x75, 0x80, 0x19, 0x60, 0xb9, 0x68, 0xcf, 0x1d, + 0xae, 0x91, 0x7a, 0x95, 0xea, 0x2c, 0xa7, 0xeb, 0x4c, 0xaf, 0xdc, 0x0c, 0xde, 0xcc, 0x85, 0x69, + 0x82, 0xfa, 0x0f, 0xb9, 0xdc, 0xe1, 0x5f, 0x34, 0x02, 0x60, 0xa5, 0x4a, 0xe5, 0x25, 0x4a, 0xd5, + 0x84, 0x01, 0xca, 0x52, 0x1b, 0x7a, 0x9a, 0x1f, 0xbb, 0x0b, 0x33, 0x95, 0x4e, 0xa7, 0xe9, 0xf1, + 0x06, 0xb6, 0x52, 0x66, 0xd0, 0xb7, 0x92, 0xec, 0x60, 0xae, 0x2c, 0xa4, 0x9b, 0x5d, 0x3a, 0x7d, + 0x7e, 0x2f, 0xad, 0xf5, 0x43, 0xb9, 0x9e, 0x8f, 0x66, 0xaf, 0xc3, 0x18, 0xfe, 0xd0, 0x62, 0xaa, + 0xa0, 0x8a, 0x47, 0x7e, 0x22, 0x2a, 0x8f, 0x12, 0x04, 0x21, 0x2c, 0xe9, 0x71, 0x15, 0x0b, 0x52, + 0x58, 0x22, 0xbd, 0x42, 0xa2, 0x49, 0x28, 0x2b, 0xd7, 0x8c, 0x42, 0x22, 0x74, 0xa1, 0x6b, 0x06, + 0x39, 0x64, 0x58, 0xdf, 0x9f, 0x37, 0xa7, 0x1d, 0xbb, 0xa0, 0xc9, 0xed, 0x5a, 0x64, 0x47, 0x25, + 0xb7, 0x6b, 0xd2, 0xfa, 0x3f, 0xc8, 0xc1, 0xec, 0xdd, 0x60, 0xc7, 0x6d, 0x7b, 0xdf, 0x94, 0x31, + 0xb2, 0x7d, 0x1c, 0x97, 0xc3, 0x13, 0x2d, 0x3e, 0xad, 0x84, 0x71, 0xbe, 0x56, 0xb1, 0x98, 0x29, + 0x38, 0x65, 0xec, 0xac, 0xef, 0x41, 0x67, 0x37, 0xfc, 0x30, 0x2d, 0x6f, 0x9f, 0x44, 0x97, 0x70, + 0xeb, 0xc7, 0xf2, 0x30, 0xae, 0x2d, 0x01, 0xf6, 0x19, 0x98, 0xd0, 0xf9, 0xe8, 0x0a, 0x3f, 0xbd, + 0x5a, 0xdb, 0xc0, 0x42, 0x8d, 0x1f, 0x77, 0x5b, 0x86, 0xc6, 0x4f, 0x4c, 0x74, 0x84, 0x1e, 0xf3, + 0x6a, 0xf3, 0x7e, 0xc6, 0xd5, 0xa6, 0x9c, 0xca, 0xd4, 0x7f, 0xe8, 0x05, 0xe7, 0x9d, 0xde, 0x0b, + 0x0e, 0x2a, 0x8f, 0x34, 0xfa, 0xfe, 0xd7, 0x1c, 0xeb, 0x27, 0x73, 0x50, 0x4a, 0x2f, 0xd2, 0xef, + 0x4a, 0xaf, 0x1c, 0xe3, 0x75, 0xe7, 0x47, 0xf3, 0x71, 0x9e, 0x13, 0xe5, 0xc2, 0xfb, 0xac, 0x9a, + 0x09, 0xbe, 0x6b, 0x3c, 0xbc, 0x3c, 0x6f, 0x46, 0xa3, 0xd3, 0x83, 0x5f, 0x64, 0x87, 0xa0, 0x1c, + 0xfa, 0xd6, 0xcf, 0x97, 0x9f, 0xb3, 0x3e, 0x80, 0xb9, 0x74, 0x77, 0xe0, 0xe3, 0x4b, 0x05, 0xa6, + 0x4d, 0x78, 0x3a, 0x4b, 0x52, 0x9a, 0xca, 0x4e, 0xe3, 0x5b, 0xbf, 0x9f, 0x4f, 0xf3, 0x26, 0x93, + 0x41, 0xb1, 0xe9, 0xe8, 0x86, 0x30, 0xb4, 0xe9, 0x48, 0x90, 0xad, 0xca, 0x8e, 0x93, 0x9d, 0x2c, + 0x76, 0x44, 0x2d, 0x64, 0x3b, 0xa2, 0xb2, 0x6b, 0x29, 0x2b, 0x69, 0x2d, 0x6a, 0xd2, 0x63, 0xbe, + 0xe5, 0x24, 0x96, 0xd2, 0x29, 0xe3, 0xe8, 0x65, 0x98, 0x33, 0x42, 0x80, 0x2b, 0xfa, 0xe1, 0x44, + 0xd7, 0x1e, 0x61, 0x81, 0x24, 0xce, 0x44, 0x66, 0x37, 0x61, 0x54, 0x7c, 0xe6, 0x1d, 0xb7, 0x43, + 0x6f, 0x2a, 0x2c, 0x76, 0x4b, 0x6f, 0xc6, 0x17, 0x3e, 0xcd, 0x33, 0xbd, 0xc9, 0xc5, 0x91, 0xaf, + 0x4f, 0x2c, 0x42, 0xb4, 0xfe, 0x59, 0x4e, 0xac, 0xff, 0xfa, 0xc3, 0x4f, 0x58, 0x8a, 0x33, 0xd1, + 0xa4, 0x43, 0x2c, 0x5a, 0xff, 0x38, 0x2f, 0x13, 0xdd, 0xd0, 0xf4, 0x79, 0x0b, 0x46, 0x36, 0xdd, + 0x60, 0x87, 0x72, 0x1c, 0x9b, 0x5c, 0x64, 0x41, 0x12, 0xd3, 0x29, 0xc2, 0xdf, 0x36, 0x11, 0xe8, + 0xba, 0xb0, 0xfc, 0x40, 0xba, 0x30, 0x4d, 0x2f, 0x5f, 0x78, 0x6a, 0x7a, 0xf9, 0xef, 0x89, 0x73, + 0xda, 0x54, 0xa2, 0x01, 0x22, 0x4c, 0x9f, 0x4b, 0xe7, 0x84, 0xea, 0x89, 0x05, 0x9e, 0xb0, 0x63, + 0xd7, 0xf4, 0x2c, 0x53, 0x9a, 0x6f, 0xe7, 0x11, 0xf9, 0xa4, 0xac, 0x3f, 0x2e, 0xc8, 0x3e, 0xa6, + 0x8e, 0x3a, 0x6f, 0xf8, 0x7d, 0xe3, 0x3a, 0x11, 0x1b, 0xbd, 0x1e, 0x82, 0x03, 0xcd, 0xa6, 0xce, + 0xc3, 0x90, 0x98, 0x9b, 0xd4, 0x9b, 0x88, 0x27, 0xe6, 0xaf, 0x8e, 0x27, 0xca, 0xc5, 0x5a, 0xc6, + 0x33, 0x49, 0x4f, 0x1f, 0x88, 0xc7, 0x96, 0xbe, 0x96, 0x11, 0x83, 0x5d, 0x80, 0xa1, 0x75, 0xbf, + 0xa1, 0x22, 0x99, 0xcf, 0x61, 0xf4, 0x0f, 0xbf, 0xc1, 0x0d, 0xa5, 0x39, 0x62, 0x88, 0xb6, 0xc6, + 0xc9, 0x1d, 0xf4, 0xb6, 0xb6, 0xb6, 0xdd, 0xde, 0xb4, 0x70, 0x5a, 0x46, 0x99, 0x55, 0x98, 0x32, + 0x13, 0xab, 0x93, 0xbd, 0x2f, 0x6a, 0xd7, 0x53, 0xf9, 0xd9, 0xf5, 0x67, 0x11, 0x93, 0x88, 0x2d, + 0xc1, 0xa4, 0x11, 0x41, 0x95, 0x1e, 0x37, 0x51, 0xbd, 0x69, 0xc6, 0x5f, 0xd5, 0xd5, 0x9b, 0x06, + 0x89, 0x38, 0xcf, 0xe9, 0xfb, 0xb5, 0x27, 0xce, 0x9e, 0x6f, 0x27, 0x1c, 0x76, 0x15, 0x8a, 0x32, + 0xcc, 0x46, 0x75, 0x45, 0x7f, 0xa6, 0x0a, 0x11, 0x96, 0x0a, 0x53, 0xa3, 0x10, 0xb5, 0xb0, 0x0a, + 0x9f, 0x86, 0x12, 0x6d, 0x49, 0x49, 0xaa, 0xee, 0x17, 0x60, 0x68, 0xb9, 0xba, 0x62, 0xeb, 0xdb, + 0x48, 0xdd, 0x6b, 0x04, 0x36, 0x42, 0xd1, 0xab, 0x6e, 0x9d, 0x47, 0x8f, 0xfd, 0xe0, 0xa1, 0xcd, + 0xc3, 0x28, 0xf0, 0x64, 0xf6, 0x49, 0x5c, 0x88, 0x9f, 0x61, 0xef, 0xc0, 0x30, 0x1a, 0x9e, 0xa6, + 0x4e, 0x86, 0x74, 0x1d, 0x4b, 0x93, 0x34, 0x81, 0x87, 0xd1, 0x8a, 0xd5, 0x96, 0x44, 0xec, 0x2d, + 0x18, 0x5a, 0xe1, 0xed, 0xbd, 0x54, 0x62, 0xbc, 0x1e, 0xe2, 0x78, 0x43, 0x68, 0xf0, 0xf6, 0x9e, + 0x8d, 0x24, 0xd6, 0x4f, 0xe6, 0xe1, 0x44, 0xc6, 0x67, 0xdd, 0xff, 0xcc, 0x33, 0xba, 0x2b, 0x2e, + 0x19, 0xbb, 0xa2, 0x7a, 0x9f, 0xee, 0xdb, 0xf1, 0x99, 0x9b, 0xe4, 0xcf, 0xe6, 0xe0, 0x94, 0x39, + 0x41, 0xc9, 0xd2, 0xfc, 0xfe, 0x55, 0xf6, 0x36, 0x8c, 0xdc, 0xe4, 0x6e, 0x83, 0xab, 0xa4, 0x59, + 0x27, 0xe2, 0x80, 0x78, 0x32, 0x86, 0x80, 0x2c, 0x94, 0x6c, 0x13, 0x8f, 0x53, 0x09, 0x65, 0x2b, + 0xf4, 0x71, 0x52, 0x1e, 0xb7, 0x54, 0x3c, 0x8f, 0xac, 0xaa, 0x0e, 0xb1, 0xf2, 0xf8, 0x76, 0x0e, + 0x9e, 0x3f, 0x84, 0x46, 0x0c, 0x9c, 0x18, 0x7a, 0x7d, 0xe0, 0xf0, 0x44, 0x45, 0x28, 0x7b, 0x0f, + 0xa6, 0x37, 0x49, 0x9e, 0x57, 0xc3, 0x91, 0x4f, 0xd6, 0x8b, 0x12, 0xf5, 0x1d, 0x35, 0x2e, 0x69, + 0x64, 0x23, 0xd0, 0x4c, 0xe1, 0xd0, 0x40, 0x33, 0x7a, 0xdc, 0x96, 0xa1, 0x41, 0xe3, 0xb6, 0x7c, + 0x00, 0x73, 0x66, 0xdb, 0x28, 0x7c, 0x6e, 0x12, 0xb5, 0x26, 0xd7, 0x3f, 0x6a, 0xcd, 0xa1, 0x41, + 0x3a, 0xad, 0x1f, 0xcb, 0x41, 0xc9, 0xe4, 0xfd, 0x71, 0xc7, 0xf3, 0x5d, 0x63, 0x3c, 0x9f, 0xcf, + 0x1e, 0xcf, 0xfe, 0x03, 0xf9, 0x7f, 0xe4, 0xd2, 0x8d, 0x1d, 0x68, 0x04, 0x2d, 0x18, 0x59, 0xf1, + 0x5b, 0xae, 0xd7, 0xd6, 0x33, 0xbf, 0x37, 0x10, 0x62, 0x53, 0xc9, 0x60, 0x41, 0x7e, 0xce, 0xc1, + 0xf0, 0xba, 0xdf, 0xae, 0xac, 0x90, 0x49, 0x2f, 0xf2, 0x69, 0xfb, 0x6d, 0xc7, 0x6d, 0xd8, 0xb2, + 0x80, 0xad, 0x01, 0xd4, 0xea, 0x01, 0xe7, 0xed, 0x9a, 0xf7, 0x4d, 0x9e, 0x92, 0x34, 0x44, 0x0f, + 0x35, 0xbb, 0xb8, 0xb1, 0xc8, 0xa7, 0x4b, 0x44, 0x74, 0x42, 0xef, 0x9b, 0xfa, 0x7e, 0xab, 0xd1, + 0xe3, 0xba, 0xa2, 0x38, 0x68, 0xa9, 0x71, 0xb8, 0xf2, 0xdd, 0x58, 0x57, 0x99, 0x55, 0x61, 0x0f, + 0x5f, 0xc9, 0x1c, 0x8e, 0xdf, 0xcb, 0xc1, 0xf3, 0x87, 0xd0, 0x3c, 0x85, 0x51, 0xf9, 0x8b, 0xee, + 0x70, 0x0e, 0x90, 0x10, 0x61, 0xde, 0x61, 0xaf, 0x11, 0xc9, 0x44, 0x78, 0x93, 0x94, 0x77, 0x58, + 0x00, 0x8c, 0xbc, 0xc3, 0x02, 0x20, 0xce, 0xd2, 0x9b, 0xdc, 0xdb, 0xd9, 0x95, 0xe6, 0x59, 0x93, + 0x72, 0x6f, 0xd8, 0x45, 0x88, 0x7e, 0x96, 0x4a, 0x1c, 0xeb, 0x5f, 0x0c, 0xc3, 0x69, 0x9b, 0xef, + 0x78, 0xe2, 0x5e, 0x72, 0x2f, 0xf4, 0xda, 0x3b, 0x46, 0xdc, 0x1b, 0x2b, 0xb5, 0x72, 0x29, 0x49, + 0x84, 0x80, 0xc4, 0x33, 0xf1, 0x22, 0x14, 0x85, 0x18, 0xa2, 0x2d, 0x5e, 0x7c, 0xb4, 0x12, 0xc2, + 0x0a, 0x05, 0x56, 0x56, 0xc5, 0xec, 0x35, 0x12, 0x93, 0xb4, 0x34, 0x3e, 0x42, 0x4c, 0xfa, 0xce, + 0x7e, 0x19, 0x6a, 0x7b, 0x61, 0xc4, 0xf1, 0x8a, 0x4c, 0xa2, 0x52, 0x7c, 0x97, 0x19, 0xea, 0x73, + 0x97, 0xb9, 0x03, 0x73, 0x95, 0x86, 0x3c, 0x1d, 0xdd, 0xe6, 0x46, 0xe0, 0xb5, 0xeb, 0x5e, 0xc7, + 0x6d, 0xaa, 0xfb, 0x39, 0xf6, 0xb2, 0x1b, 0x97, 0x3b, 0x9d, 0x18, 0xc1, 0xce, 0x24, 0x13, 0xcd, + 0x58, 0x59, 0xaf, 0x61, 0x78, 0x18, 0x7a, 0x8f, 0xc4, 0x66, 0x34, 0xda, 0x21, 0xb6, 0x22, 0xb4, + 0xe3, 0x62, 0xbc, 0x45, 0xe1, 0x83, 0xfc, 0xe6, 0x5a, 0x2d, 0x71, 0x69, 0x96, 0x59, 0x06, 0xe4, + 0xc3, 0x7e, 0xd4, 0x0c, 0xd1, 0x14, 0xd2, 0xc0, 0x4b, 0xe8, 0x6a, 0xb5, 0x9b, 0x82, 0xae, 0xd8, + 0x43, 0x17, 0x86, 0xbb, 0x3a, 0x9d, 0xc4, 0x63, 0x97, 0xc5, 0x54, 0x68, 0xf9, 0x11, 0xc7, 0x29, + 0x3c, 0x96, 0xdc, 0xb9, 0x02, 0x84, 0xca, 0x3b, 0x97, 0x86, 0xc2, 0xde, 0x81, 0xd9, 0xd5, 0xe5, + 0x45, 0xa5, 0x45, 0x5e, 0xf1, 0xeb, 0x5d, 0x7c, 0x88, 0x07, 0xac, 0x0f, 0xc7, 0x90, 0xd7, 0x17, + 0xc5, 0x6e, 0x92, 0x85, 0xc6, 0xce, 0xc3, 0x68, 0x75, 0x45, 0xf6, 0xfd, 0xb8, 0x9e, 0x4a, 0x8b, + 0x2c, 0xa3, 0x54, 0x21, 0xbb, 0x9b, 0x5c, 0x0a, 0x26, 0x8e, 0x94, 0xde, 0x4f, 0x0f, 0x70, 0x21, + 0x78, 0x0b, 0x26, 0x97, 0xfc, 0xa8, 0xda, 0x0e, 0x23, 0xb7, 0x5d, 0xe7, 0xd5, 0x15, 0x3d, 0xae, + 0xf5, 0x96, 0x1f, 0x39, 0x1e, 0x95, 0x88, 0x2f, 0x37, 0x31, 0xd9, 0xe7, 0x90, 0xf4, 0x06, 0x6f, + 0xf3, 0x20, 0x89, 0x67, 0x3d, 0x2c, 0xfb, 0x56, 0x90, 0xee, 0xc4, 0x25, 0xb6, 0x89, 0x48, 0x69, + 0xbe, 0x64, 0xe6, 0xcd, 0x65, 0xbf, 0xc1, 0x43, 0xb9, 0x5b, 0x7c, 0x82, 0xd2, 0x7c, 0x69, 0x6d, + 0x3b, 0x64, 0x07, 0xfd, 0xb7, 0x30, 0xcd, 0x57, 0x0f, 0x2e, 0xfb, 0x1c, 0x0c, 0xe3, 0x4f, 0x92, + 0x6e, 0x67, 0x33, 0xd8, 0x26, 0x92, 0x6d, 0x5d, 0x60, 0xda, 0x92, 0x80, 0x55, 0x61, 0x94, 0x2e, + 0x56, 0xc7, 0x49, 0x56, 0x43, 0x37, 0x34, 0x39, 0x33, 0x88, 0xde, 0x6a, 0xc0, 0x84, 0x5e, 0xa1, + 0x58, 0x11, 0x37, 0xdd, 0x70, 0x97, 0x37, 0xc4, 0x2f, 0xca, 0x33, 0x87, 0x2b, 0x62, 0x17, 0xa1, + 0x8e, 0xf8, 0x0e, 0x5b, 0x43, 0x11, 0x67, 0x6a, 0x35, 0xbc, 0x17, 0xd2, 0xa7, 0x90, 0xaa, 0xc5, + 0x43, 0xb5, 0x5d, 0xc3, 0xa6, 0x22, 0xeb, 0x7b, 0x60, 0x6e, 0xbd, 0xdb, 0x6c, 0xba, 0x5b, 0x4d, + 0xae, 0xf2, 0x90, 0x60, 0x7a, 0xee, 0x25, 0x18, 0xae, 0x69, 0x09, 0xbf, 0xe3, 0x44, 0x8f, 0x1a, + 0x0e, 0x1a, 0xa1, 0xe6, 0x30, 0x54, 0x4f, 0x2a, 0xd5, 0xb7, 0x24, 0xb5, 0x7e, 0x27, 0x07, 0x73, + 0xea, 0xfd, 0x3f, 0x70, 0xeb, 0x0f, 0xe3, 0xac, 0xef, 0xe7, 0x8d, 0xb9, 0x86, 0x13, 0x36, 0x35, + 0x8d, 0xe4, 0xac, 0xbb, 0xa5, 0x3e, 0xc2, 0x14, 0x58, 0xb2, 0x3e, 0xf8, 0xa8, 0x8f, 0x61, 0xef, + 0xc0, 0x38, 0x1d, 0x8f, 0x5a, 0x80, 0x49, 0x8c, 0xe2, 0x45, 0xd7, 0xbd, 0xb4, 0x35, 0x8a, 0x8e, + 0x8e, 0xb2, 0x98, 0xd9, 0x94, 0x8f, 0x2b, 0x03, 0x64, 0xcb, 0x62, 0x66, 0x1d, 0x87, 0x4c, 0xdd, + 0xdf, 0x18, 0x4f, 0xf7, 0x2d, 0xcd, 0xdd, 0x6b, 0x7a, 0x48, 0xb9, 0x5c, 0x72, 0x33, 0x4e, 0x42, + 0xca, 0xe9, 0x37, 0xe3, 0x18, 0x35, 0x1e, 0x93, 0xfc, 0x11, 0x63, 0xf2, 0x9e, 0x1a, 0x93, 0x42, + 0xff, 0x89, 0x31, 0x7b, 0xc8, 0x38, 0xd4, 0x92, 0x15, 0x32, 0x34, 0x90, 0x5a, 0xe5, 0x39, 0x8c, + 0x9d, 0x2f, 0x49, 0xd2, 0xbb, 0x28, 0x71, 0xd2, 0x75, 0x35, 0xc3, 0x83, 0x33, 0x3d, 0x62, 0x6b, + 0xfe, 0x3c, 0x4c, 0x54, 0xa2, 0xc8, 0xad, 0xef, 0xf2, 0xc6, 0x8a, 0xd8, 0x9e, 0xb4, 0xe8, 0x57, + 0x2e, 0xc1, 0xf5, 0x47, 0x33, 0x1d, 0x57, 0x46, 0x73, 0x75, 0x43, 0x32, 0x66, 0x8d, 0xa3, 0xb9, + 0x0a, 0x88, 0x19, 0xcd, 0x55, 0x40, 0xd8, 0x65, 0x18, 0xad, 0xb6, 0x1f, 0x79, 0xa2, 0x4f, 0x64, + 0x00, 0x2c, 0xd4, 0x4d, 0x79, 0x12, 0xa4, 0x6f, 0xae, 0x84, 0xc5, 0xde, 0xd2, 0x2e, 0x35, 0x63, + 0x89, 0x02, 0x43, 0xaa, 0xbc, 0xe2, 0x08, 0x37, 0xfa, 0x85, 0x25, 0xbe, 0xe5, 0x5c, 0x83, 0x51, + 0xa5, 0xc9, 0x84, 0x44, 0x69, 0x41, 0x94, 0xbd, 0x01, 0x23, 0x14, 0x32, 0x66, 0xf0, 0xd6, 0xf2, + 0xe5, 0x8d, 0x6b, 0x19, 0xbc, 0xb5, 0x7c, 0x79, 0x46, 0x06, 0x6f, 0x2d, 0x73, 0x5e, 0xac, 0x04, + 0x9a, 0x38, 0x52, 0x09, 0x74, 0x1f, 0x26, 0x36, 0xdc, 0x20, 0xf2, 0x84, 0x8c, 0xd2, 0x8e, 0xc2, + 0xf9, 0x49, 0x43, 0x6f, 0xaa, 0x15, 0x2d, 0x9d, 0x55, 0x49, 0xa7, 0x3b, 0x1a, 0xbe, 0x99, 0x1d, + 0x39, 0x81, 0x67, 0x9b, 0xb2, 0x4e, 0x7d, 0x1c, 0x53, 0x56, 0xec, 0x54, 0xd4, 0x95, 0x4d, 0x27, + 0x1a, 0x19, 0xbc, 0xb4, 0xa4, 0x14, 0x66, 0x31, 0x22, 0xfb, 0x0a, 0x4c, 0x88, 0xbf, 0x37, 0xfc, + 0xa6, 0x57, 0xf7, 0x78, 0x38, 0x5f, 0xc2, 0xc6, 0x9d, 0xcd, 0x5c, 0xfd, 0x88, 0xb4, 0x57, 0xe3, + 0x91, 0x5c, 0xc0, 0xc8, 0x38, 0xad, 0x04, 0x37, 0xb8, 0xb1, 0xf7, 0x61, 0x42, 0xcc, 0xbe, 0x2d, + 0x37, 0x94, 0xa2, 0xe9, 0x4c, 0x62, 0x8c, 0xdc, 0x20, 0x78, 0x4f, 0x40, 0x65, 0x9d, 0x40, 0x1c, + 0xf3, 0x95, 0x8e, 0xdc, 0x20, 0x99, 0x36, 0xdb, 0x3b, 0x3d, 0x9b, 0xa3, 0x42, 0x63, 0x5f, 0x80, + 0x89, 0x4a, 0xa7, 0x93, 0xec, 0x38, 0xb3, 0x9a, 0x22, 0xac, 0xd3, 0x71, 0x32, 0x77, 0x1d, 0x83, + 0x22, 0xbd, 0x31, 0xcf, 0x1d, 0x6b, 0x63, 0x66, 0x6f, 0xc4, 0xd2, 0xfa, 0x89, 0x44, 0xab, 0x4b, + 0x17, 0x47, 0x43, 0xf4, 0x97, 0x82, 0xfb, 0x32, 0x4c, 0x4a, 0x35, 0xa7, 0x92, 0x66, 0x4e, 0xf6, + 0xac, 0x9e, 0x0c, 0xa1, 0xc6, 0xa4, 0x61, 0xab, 0x30, 0x25, 0xbd, 0xad, 0x9b, 0x14, 0xe9, 0x7a, + 0xfe, 0x14, 0xae, 0x5a, 0xe4, 0x22, 0x9d, 0xb4, 0x9b, 0x98, 0x00, 0xc5, 0x35, 0xb8, 0xa4, 0x88, + 0xac, 0x3f, 0xc9, 0xc1, 0xa9, 0x3e, 0x23, 0x1e, 0xc7, 0x41, 0xce, 0x1d, 0x1e, 0x07, 0x59, 0xec, + 0x1c, 0xa6, 0x56, 0x04, 0xdb, 0x4f, 0x52, 0x96, 0x3e, 0x5e, 0x4a, 0xde, 0xf2, 0x81, 0x51, 0x8e, + 0x21, 0xaa, 0xfa, 0x96, 0x8f, 0xaa, 0xd9, 0x42, 0xef, 0x21, 0x44, 0x78, 0xf2, 0xa3, 0x96, 0xac, + 0x83, 0xfd, 0xf2, 0x59, 0x4a, 0x61, 0x14, 0x0f, 0xeb, 0x87, 0xbe, 0xb1, 0x82, 0x33, 0x58, 0x5b, + 0xfb, 0x39, 0x18, 0xd7, 0xd6, 0x21, 0x3b, 0xa7, 0x79, 0x01, 0x97, 0x64, 0x12, 0x2c, 0x8d, 0x43, + 0x5e, 0x9e, 0x44, 0xb8, 0xa8, 0xf2, 0x47, 0x2b, 0xa0, 0xef, 0x08, 0x51, 0x48, 0x8b, 0x15, 0xdd, + 0x32, 0xb4, 0xc5, 0x36, 0x96, 0x63, 0xae, 0x7c, 0x37, 0x8c, 0x2a, 0xf5, 0xc8, 0x7b, 0xc4, 0x07, + 0x38, 0x74, 0x92, 0x5c, 0xf9, 0x6e, 0x18, 0x39, 0x2e, 0x92, 0xf5, 0xe4, 0xca, 0x8f, 0x19, 0x5a, + 0x7f, 0x33, 0x07, 0x70, 0xaf, 0xba, 0x8c, 0xc1, 0xde, 0x3f, 0xae, 0x50, 0x90, 0x1d, 0x40, 0x57, + 0x71, 0x3f, 0x44, 0x1c, 0xf8, 0xef, 0x72, 0x30, 0x65, 0xa2, 0xb1, 0xf7, 0x60, 0xba, 0x56, 0x0f, + 0xfc, 0x66, 0x73, 0xcb, 0xad, 0x3f, 0x5c, 0xf3, 0xda, 0x5c, 0x86, 0x2e, 0x1d, 0x96, 0x67, 0x51, + 0x18, 0x17, 0x39, 0x4d, 0x51, 0x66, 0xa7, 0x91, 0xd9, 0xdf, 0xca, 0xc1, 0x64, 0x6d, 0xd7, 0x7f, + 0x1c, 0x47, 0x1b, 0xa5, 0x01, 0xf9, 0xaa, 0x58, 0xdb, 0xe1, 0xae, 0xff, 0x38, 0xc9, 0xa0, 0x69, + 0x18, 0x7f, 0xbe, 0x3b, 0xd8, 0xbb, 0x7c, 0xdd, 0xc7, 0x9b, 0x4c, 0x14, 0x5e, 0x32, 0x2a, 0xb1, + 0xcd, 0x3a, 0xad, 0x3f, 0xcf, 0xc1, 0x38, 0xde, 0x79, 0x9a, 0x4d, 0x94, 0xb9, 0x3e, 0x49, 0xe9, + 0x18, 0xe3, 0x76, 0x1d, 0x32, 0xb0, 0x6f, 0xc2, 0x74, 0x0a, 0x8d, 0x59, 0x30, 0x52, 0x43, 0x07, + 0x7f, 0x5d, 0x41, 0x21, 0x5d, 0xfe, 0x6d, 0x2a, 0xb1, 0x56, 0x35, 0xb2, 0xfb, 0x57, 0xf0, 0x59, + 0x77, 0x11, 0xc0, 0x53, 0x20, 0x75, 0xb3, 0x61, 0xe9, 0x2f, 0xb9, 0x7f, 0xc5, 0xd6, 0xb0, 0xac, + 0x75, 0x18, 0xa9, 0xf9, 0x41, 0xb4, 0xb4, 0x27, 0x2f, 0x13, 0x2b, 0x3c, 0xac, 0xeb, 0xef, 0xb6, + 0x1e, 0xbe, 0x95, 0xd4, 0x6d, 0x2a, 0x62, 0x65, 0x18, 0xbe, 0xee, 0xf1, 0x66, 0x43, 0x37, 0xd0, + 0xdd, 0x16, 0x00, 0x5b, 0xc2, 0xc5, 0x85, 0xeb, 0x64, 0x92, 0x13, 0x25, 0xb1, 0x04, 0xfe, 0xb8, + 0xeb, 0x66, 0xd9, 0xe8, 0xdf, 0x17, 0xe3, 0x3c, 0x04, 0xbd, 0x35, 0x1d, 0xd2, 0xd5, 0xff, 0x61, + 0x0e, 0x16, 0xfa, 0x93, 0xe8, 0xc6, 0xc5, 0xb9, 0x43, 0x8c, 0x8b, 0x5f, 0x49, 0xbf, 0x33, 0x22, + 0x1a, 0xbd, 0x33, 0x26, 0xaf, 0x8b, 0x2b, 0x68, 0xdb, 0x5d, 0xe7, 0x2a, 0x11, 0xca, 0xb9, 0x43, + 0xbe, 0x19, 0x11, 0xe5, 0x30, 0x47, 0x48, 0x63, 0x13, 0xad, 0xf5, 0xeb, 0x43, 0x70, 0xba, 0x2f, + 0x05, 0xbb, 0xa9, 0xa5, 0x57, 0x9a, 0x8a, 0x13, 0xbb, 0xf4, 0xc5, 0xbf, 0x84, 0xff, 0xa2, 0xf9, + 0x5e, 0xda, 0xdb, 0xec, 0x6e, 0x9c, 0x56, 0x27, 0x8f, 0xbc, 0x3e, 0x75, 0x24, 0x2f, 0x89, 0x8e, + 0xcc, 0xa0, 0x37, 0xc3, 0x0e, 0xfa, 0x25, 0xf2, 0xc8, 0xf5, 0x9a, 0xa1, 0xbe, 0xec, 0x1a, 0x12, + 0x64, 0xab, 0xb2, 0xc4, 0xe2, 0x7b, 0x28, 0xdb, 0xe2, 0xdb, 0xfa, 0x17, 0x39, 0x18, 0x8b, 0x3f, + 0x9b, 0x2d, 0xc0, 0xc9, 0x4d, 0xbb, 0xb2, 0xbc, 0xea, 0x6c, 0x7e, 0xb0, 0xb1, 0xea, 0xdc, 0x5b, + 0xaf, 0x6d, 0xac, 0x2e, 0x57, 0xaf, 0x57, 0x57, 0x57, 0x4a, 0xcf, 0xb1, 0x19, 0x98, 0xbc, 0xb7, + 0x7e, 0x7b, 0xfd, 0xee, 0x83, 0x75, 0x67, 0xd5, 0xb6, 0xef, 0xda, 0xa5, 0x1c, 0x9b, 0x84, 0x31, + 0x7b, 0xa9, 0xb2, 0xec, 0xac, 0xdf, 0x5d, 0x59, 0x2d, 0xe5, 0x59, 0x09, 0x26, 0x96, 0xef, 0xae, + 0xaf, 0xaf, 0x2e, 0x6f, 0x56, 0xef, 0x57, 0x37, 0x3f, 0x28, 0x15, 0x18, 0x83, 0x29, 0x44, 0xd8, + 0xb0, 0xab, 0xeb, 0xcb, 0xd5, 0x8d, 0xca, 0x5a, 0x69, 0x48, 0xc0, 0x04, 0xbe, 0x06, 0x1b, 0x8e, + 0x19, 0xdd, 0xbe, 0xb7, 0xb4, 0x5a, 0x1a, 0x11, 0x28, 0xe2, 0x2f, 0x0d, 0x65, 0x54, 0x54, 0x8f, + 0x28, 0x2b, 0x95, 0xcd, 0xca, 0x52, 0xa5, 0xb6, 0x5a, 0x2a, 0xb2, 0x53, 0x30, 0x6b, 0x80, 0x9c, + 0xb5, 0xbb, 0x37, 0xaa, 0xeb, 0xa5, 0x31, 0x36, 0x07, 0xa5, 0x18, 0xb6, 0xb2, 0xe4, 0xdc, 0xab, + 0xad, 0xda, 0x25, 0x48, 0x43, 0xd7, 0x2b, 0x77, 0x56, 0x4b, 0xe3, 0xd6, 0xbb, 0xd2, 0x0f, 0x50, + 0x76, 0x35, 0x3b, 0x09, 0xac, 0xb6, 0x59, 0xd9, 0xbc, 0x57, 0x4b, 0x35, 0x7e, 0x1c, 0x46, 0x6b, + 0xf7, 0x96, 0x97, 0x57, 0x6b, 0xb5, 0x52, 0x8e, 0x01, 0x8c, 0x5c, 0xaf, 0x54, 0xd7, 0x56, 0x57, + 0x4a, 0x79, 0xeb, 0x27, 0x72, 0x30, 0xa3, 0x24, 0x40, 0xf5, 0x68, 0xf4, 0x31, 0xd7, 0xe2, 0x7b, + 0xc6, 0xc5, 0x56, 0x39, 0x69, 0xa5, 0x2a, 0x39, 0x64, 0x19, 0xfe, 0x6c, 0x0e, 0x4e, 0x64, 0x62, + 0xb3, 0x0f, 0xa0, 0xa4, 0xbe, 0xe0, 0x8e, 0x1b, 0xd5, 0x77, 0x93, 0x7d, 0xec, 0x6c, 0xaa, 0x96, + 0x14, 0x9a, 0x54, 0x6b, 0x26, 0x09, 0x9f, 0x7b, 0xd8, 0x0c, 0x9e, 0x8e, 0xc0, 0xfa, 0x56, 0x0e, + 0x4e, 0xf5, 0xa9, 0x86, 0x2d, 0xc3, 0x48, 0x9c, 0x98, 0xe6, 0x10, 0x0b, 0xb6, 0xb9, 0x6f, 0xef, + 0x97, 0x09, 0x11, 0x33, 0xe4, 0xe2, 0x5f, 0xf6, 0x48, 0x9c, 0x69, 0x06, 0xd3, 0xbd, 0xc8, 0xee, + 0x3b, 0x9d, 0xea, 0x79, 0xaa, 0xa9, 0xf2, 0xa0, 0xb6, 0x34, 0x4e, 0x7d, 0x57, 0x70, 0x1f, 0x87, + 0x98, 0xef, 0xc5, 0xfa, 0xa9, 0x9c, 0x10, 0xee, 0xd2, 0x88, 0x42, 0xe6, 0xad, 0x84, 0x61, 0xb7, + 0xc5, 0x6d, 0xbf, 0xc9, 0x2b, 0xf6, 0x3a, 0x1d, 0x1b, 0x28, 0xad, 0xba, 0x58, 0x80, 0xd7, 0x0a, + 0xc7, 0x0d, 0xda, 0xc6, 0x6b, 0xb5, 0x4e, 0xc3, 0xde, 0x02, 0x58, 0x7d, 0x12, 0xf1, 0xa0, 0xed, + 0x36, 0xe3, 0x18, 0x2d, 0x32, 0xb2, 0x14, 0x41, 0x4d, 0x79, 0x5b, 0x43, 0xb6, 0xfe, 0x76, 0x0e, + 0x26, 0xe8, 0xd2, 0x54, 0x69, 0xf2, 0x20, 0xfa, 0x78, 0xd3, 0xeb, 0x2d, 0x63, 0x7a, 0xc5, 0x0e, + 0x1b, 0x1a, 0x7f, 0x51, 0x9c, 0x39, 0xb3, 0xfe, 0x69, 0x0e, 0x4a, 0x69, 0x44, 0xf6, 0x1e, 0x14, + 0x6b, 0xfc, 0x11, 0x0f, 0xbc, 0x68, 0x8f, 0x36, 0x4a, 0x95, 0xc2, 0x4f, 0xe2, 0x50, 0x99, 0x9c, + 0x0f, 0x21, 0xfd, 0xb2, 0x63, 0x9a, 0x41, 0xf7, 0x7b, 0x4d, 0xed, 0x51, 0x78, 0x5a, 0x6a, 0x0f, + 0xeb, 0x7f, 0xce, 0xc3, 0xa9, 0x1b, 0x3c, 0xd2, 0xdb, 0x14, 0x9b, 0x17, 0x7c, 0x7a, 0xb0, 0x76, + 0x69, 0x2d, 0x99, 0x87, 0x51, 0x2c, 0x52, 0xe3, 0x6b, 0xab, 0x9f, 0x6c, 0x29, 0x9e, 0xd7, 0x05, + 0x23, 0x47, 0x58, 0x9f, 0xba, 0x2f, 0x69, 0x59, 0x83, 0xe2, 0x69, 0x7d, 0x1e, 0xa6, 0x30, 0x2c, + 0x7e, 0x57, 0x2c, 0x07, 0xde, 0x20, 0xf5, 0x4f, 0xd1, 0x4e, 0x41, 0xd9, 0x6b, 0x50, 0x12, 0x90, + 0x4a, 0xfd, 0x61, 0xdb, 0x7f, 0xdc, 0xe4, 0x8d, 0x1d, 0xde, 0xc0, 0x63, 0xbd, 0x68, 0xf7, 0xc0, + 0x15, 0xcf, 0x7b, 0x6d, 0x79, 0x75, 0xe3, 0x0d, 0xd4, 0xd1, 0x10, 0xcf, 0x04, 0xba, 0xf0, 0x16, + 0x8c, 0x7f, 0xc4, 0x0c, 0x60, 0xd6, 0xff, 0x94, 0x83, 0x39, 0x6c, 0x9c, 0x56, 0xb1, 0xca, 0xce, + 0xaa, 0x7a, 0x4b, 0x4b, 0x8a, 0xe3, 0x0a, 0x90, 0xb9, 0x14, 0xe2, 0x5e, 0x4c, 0x74, 0x42, 0xf9, + 0x01, 0x74, 0x42, 0xb5, 0xe3, 0x64, 0xa2, 0x1f, 0x50, 0xa5, 0x75, 0x6b, 0xa8, 0x58, 0x28, 0x0d, + 0x25, 0x43, 0x6e, 0xfd, 0xad, 0x3c, 0x8c, 0xda, 0x1c, 0x53, 0x74, 0xb3, 0xf3, 0x30, 0xba, 0xee, + 0x47, 0x3c, 0xbc, 0x63, 0xe4, 0x63, 0x6f, 0x0b, 0x90, 0xd3, 0x6a, 0xd8, 0xaa, 0x50, 0x4c, 0xf8, + 0x8d, 0xc0, 0x6f, 0x74, 0xeb, 0x91, 0x3e, 0xe1, 0x3b, 0x12, 0x64, 0xab, 0x32, 0xf6, 0x3a, 0x8c, + 0x11, 0xe7, 0xf8, 0x51, 0x17, 0x8d, 0x91, 0x03, 0x1e, 0xa7, 0x78, 0x4f, 0x10, 0x50, 0xa6, 0x95, + 0x02, 0xc6, 0x90, 0x26, 0xd3, 0xf6, 0xc8, 0x0c, 0x4a, 0x54, 0x1f, 0x3e, 0x44, 0x54, 0xff, 0x34, + 0x8c, 0x54, 0xc2, 0x90, 0x47, 0x2a, 0x8a, 0xc1, 0x44, 0x1c, 0xb6, 0x2d, 0xe4, 0x91, 0x64, 0xec, + 0x62, 0xb9, 0x4d, 0x78, 0xd6, 0x3f, 0xcb, 0xc3, 0x30, 0xfe, 0x89, 0x4f, 0xa6, 0x41, 0x7d, 0xd7, + 0x78, 0x32, 0x0d, 0xea, 0xbb, 0x36, 0x42, 0xd9, 0x15, 0xd4, 0x54, 0xa8, 0xfc, 0x4d, 0xd4, 0x7a, + 0x54, 0xc1, 0x37, 0x12, 0xb0, 0xad, 0xe3, 0xc4, 0x2f, 0xfc, 0x85, 0xcc, 0xd8, 0x25, 0x27, 0x21, + 0x7f, 0xb7, 0x46, 0x2d, 0xc6, 0x88, 0x58, 0x7e, 0x68, 0xe7, 0xef, 0xd6, 0xb0, 0x37, 0x6e, 0x56, + 0x16, 0xdf, 0xbc, 0x46, 0x0d, 0x95, 0xbd, 0xb1, 0xeb, 0x2e, 0xbe, 0x79, 0xcd, 0xa6, 0x12, 0xd1, + 0xbf, 0xf8, 0xcd, 0xf8, 0xf0, 0x2a, 0x7d, 0xee, 0xb1, 0x7f, 0xb1, 0x6d, 0xf8, 0xc8, 0x6a, 0x27, + 0x08, 0x6c, 0x11, 0xc6, 0x29, 0xd6, 0x03, 0xe2, 0x6b, 0xb1, 0x18, 0x28, 0x16, 0x84, 0xa4, 0xd0, + 0x91, 0xe4, 0x13, 0x1c, 0x0d, 0x90, 0xca, 0x32, 0x4b, 0x4f, 0x70, 0x6a, 0x08, 0x43, 0x5b, 0x43, + 0x11, 0x9f, 0x24, 0xdf, 0xf0, 0x12, 0x5f, 0xfa, 0x29, 0x2d, 0x68, 0x00, 0xa6, 0x39, 0x88, 0x11, + 0xac, 0x5f, 0xcc, 0x43, 0x71, 0xa3, 0xd9, 0xdd, 0xf1, 0xda, 0xf7, 0xaf, 0x30, 0x06, 0x78, 0x8d, + 0x53, 0x79, 0x30, 0xc4, 0xdf, 0xec, 0x34, 0x14, 0xd5, 0xcd, 0x4d, 0x6d, 0x48, 0x21, 0xdd, 0xda, + 0xe6, 0x41, 0x8d, 0x3b, 0x85, 0x3e, 0x53, 0x3f, 0xd9, 0x15, 0x88, 0xef, 0x5f, 0xfd, 0x2e, 0x6a, + 0x43, 0x62, 0xb1, 0xd8, 0x31, 0x1a, 0x7b, 0x03, 0xf0, 0x90, 0xa0, 0xcb, 0x83, 0x52, 0x68, 0xcb, + 0x4f, 0x23, 0x39, 0x45, 0x92, 0x20, 0x1a, 0xbb, 0x0a, 0x34, 0x31, 0x29, 0x9b, 0xf9, 0x09, 0x93, + 0x40, 0xe6, 0x87, 0x54, 0x24, 0x84, 0xca, 0xde, 0x81, 0xf1, 0x7a, 0xc0, 0xf1, 0xd5, 0xd1, 0x6d, + 0x26, 0x49, 0xca, 0x75, 0xca, 0xe5, 0xa4, 0xfc, 0xfe, 0x15, 0x5b, 0x47, 0xb7, 0xfe, 0xcf, 0x51, + 0x98, 0xd0, 0xbf, 0x87, 0xd9, 0x30, 0x1b, 0x36, 0xc5, 0xdd, 0x9d, 0x8c, 0xcd, 0x3a, 0x58, 0x48, + 0xc7, 0xe9, 0x39, 0xf3, 0x83, 0x04, 0x9e, 0xb4, 0x3c, 0x53, 0x41, 0x2a, 0x6e, 0x3e, 0x67, 0xcf, + 0x84, 0x09, 0x58, 0xe2, 0xb1, 0x0a, 0x14, 0xfd, 0x4e, 0xb8, 0xc3, 0xdb, 0x9e, 0x7a, 0x6f, 0x79, + 0xc9, 0x60, 0x74, 0x97, 0x0a, 0x7b, 0x78, 0xc5, 0x64, 0xec, 0x4d, 0x18, 0xf1, 0x3b, 0xbc, 0xed, + 0x7a, 0x74, 0xc6, 0x3d, 0x9f, 0x62, 0xc0, 0xdb, 0x95, 0xaa, 0x46, 0x48, 0xc8, 0xec, 0x32, 0x0c, + 0xf9, 0x0f, 0xe3, 0xf1, 0x3a, 0x6d, 0x12, 0x3d, 0x8c, 0x5c, 0x8d, 0x04, 0x11, 0x05, 0xc1, 0x87, + 0x6e, 0x6b, 0x9b, 0x46, 0xcc, 0x24, 0xb8, 0xe5, 0xb6, 0xb6, 0x75, 0x02, 0x81, 0xc8, 0xde, 0x07, + 0xe8, 0xb8, 0x3b, 0x3c, 0x70, 0x1a, 0xdd, 0x68, 0x8f, 0xc6, 0xed, 0xac, 0x41, 0xb6, 0x21, 0x8a, + 0x57, 0xba, 0xd1, 0x9e, 0x46, 0x3b, 0xd6, 0x51, 0x40, 0x56, 0x01, 0x68, 0xb9, 0x51, 0xc4, 0x83, + 0x96, 0x4f, 0xd6, 0x7e, 0x49, 0x10, 0x42, 0xc9, 0xe0, 0x4e, 0x5c, 0xac, 0x71, 0xd0, 0x88, 0xf0, + 0xa3, 0xbd, 0xc0, 0xa5, 0x9c, 0xf2, 0xa9, 0x8f, 0xf6, 0x02, 0xa3, 0x95, 0x02, 0x91, 0x7d, 0x0e, + 0x46, 0x1b, 0x5e, 0x58, 0xf7, 0x83, 0x06, 0x45, 0x2f, 0x79, 0xc1, 0xa0, 0x59, 0x91, 0x65, 0x1a, + 0x99, 0x42, 0x17, 0x5f, 0x4b, 0x41, 0x48, 0xd7, 0xfd, 0xc7, 0xa8, 0xe6, 0x4f, 0x7f, 0x6d, 0x2d, + 0x2e, 0xd6, 0xbf, 0x36, 0x21, 0x12, 0x43, 0xb9, 0xe3, 0x45, 0x4d, 0x77, 0x8b, 0xde, 0xb9, 0xcd, + 0xa1, 0xbc, 0x81, 0x45, 0xfa, 0x50, 0x4a, 0x64, 0xf6, 0x16, 0x14, 0x79, 0x3b, 0x0a, 0x5c, 0xc7, + 0x6b, 0x90, 0x97, 0xa4, 0xf9, 0xd1, 0xe2, 0x00, 0x76, 0xab, 0x2b, 0xfa, 0x47, 0x23, 0x7e, 0xb5, + 0x21, 0xfa, 0x27, 0xac, 0x7b, 0x2d, 0x72, 0x6e, 0x34, 0xfb, 0xa7, 0xb6, 0x5c, 0xbd, 0xa3, 0xf7, + 0x8f, 0x40, 0x64, 0xef, 0xc1, 0xa8, 0x58, 0xbf, 0x0d, 0x7f, 0x87, 0x02, 0x42, 0x58, 0x66, 0xff, + 0xc8, 0xb2, 0x9e, 0xe9, 0xaa, 0x88, 0xc4, 0x42, 0x76, 0x1f, 0x87, 0x8e, 0x57, 0xa7, 0x20, 0x0f, + 0xe6, 0x72, 0xac, 0x3c, 0xa8, 0x55, 0x97, 0x35, 0xb2, 0x61, 0xf7, 0x71, 0x58, 0xad, 0xb3, 0x45, + 0x18, 0xc6, 0x14, 0x11, 0x14, 0x88, 0xd2, 0xa4, 0xc1, 0xe4, 0x10, 0x3a, 0x0d, 0xa2, 0xb2, 0xb3, + 0x00, 0xc9, 0x5b, 0xbc, 0x7c, 0x39, 0xb1, 0x35, 0xc8, 0xe7, 0x87, 0xfe, 0xb7, 0x9f, 0x2f, 0xe7, + 0x96, 0x00, 0x8a, 0x2a, 0xce, 0x8c, 0xb5, 0x06, 0xa7, 0xfb, 0xae, 0x5e, 0x76, 0x11, 0x4a, 0xdb, + 0x2e, 0xe9, 0xee, 0xea, 0xbb, 0x6e, 0xbb, 0xcd, 0x9b, 0xb4, 0x6f, 0x4e, 0x2b, 0xf8, 0xb2, 0x04, + 0x4b, 0xce, 0xd6, 0xfb, 0x30, 0x97, 0x35, 0x6c, 0xec, 0x45, 0x98, 0xd0, 0x43, 0xea, 0x10, 0x93, + 0x71, 0xb7, 0xe3, 0xa9, 0xa0, 0x3a, 0xc4, 0xe0, 0xd7, 0x72, 0xf0, 0xc2, 0x61, 0x9b, 0x00, 0x5b, + 0x80, 0x62, 0x27, 0xf0, 0x7c, 0x14, 0x36, 0x29, 0x67, 0x81, 0xfa, 0x8d, 0xe9, 0x08, 0x50, 0x2a, + 0x8a, 0xdc, 0x1d, 0x72, 0xd3, 0xb0, 0xc7, 0x10, 0xb2, 0xe9, 0xee, 0x84, 0xec, 0x53, 0x30, 0xd3, + 0xe0, 0xdb, 0x6e, 0xb7, 0x19, 0x39, 0x61, 0x7d, 0x97, 0x37, 0xd0, 0x33, 0x0a, 0xcd, 0xef, 0xec, + 0x12, 0x15, 0xd4, 0x14, 0xbc, 0xe7, 0x8b, 0x87, 0xfb, 0x7c, 0xf1, 0xad, 0xa1, 0x62, 0xae, 0x94, + 0xb7, 0xd1, 0xde, 0xc9, 0xfa, 0xbe, 0x3c, 0xcc, 0xf7, 0x9b, 0xf5, 0xec, 0xdd, 0xac, 0x3e, 0x90, + 0xcf, 0x0f, 0x3a, 0x5c, 0x7f, 0x7e, 0xd0, 0x6a, 0x63, 0x8b, 0x10, 0xfb, 0x35, 0x1d, 0x15, 0xa3, + 0x40, 0xc1, 0x04, 0x4d, 0xc7, 0x0d, 0xc3, 0xc7, 0x62, 0x61, 0x17, 0xb4, 0xb0, 0xb4, 0x04, 0xd3, + 0x69, 0x14, 0x8c, 0x7d, 0x16, 0xa0, 0xde, 0xf4, 0x43, 0x8e, 0xaf, 0xfc, 0x24, 0x31, 0x48, 0xe3, + 0xee, 0x18, 0xaa, 0x3f, 0xeb, 0x22, 0x74, 0xd9, 0x6f, 0x70, 0x1a, 0x40, 0x17, 0x4e, 0xf5, 0xd9, + 0xe6, 0xc4, 0xf0, 0x24, 0x39, 0xde, 0x55, 0xc6, 0xa8, 0x6e, 0x9c, 0xe9, 0x3d, 0xdd, 0xe3, 0xf9, + 0x7e, 0x73, 0x64, 0x0f, 0x58, 0xef, 0x5e, 0x26, 0xb8, 0x93, 0x89, 0x72, 0x37, 0x88, 0xb9, 0x4b, + 0xc8, 0xbd, 0xa0, 0xc9, 0xca, 0x30, 0xae, 0x32, 0x42, 0x0a, 0x89, 0x5c, 0x32, 0x07, 0x02, 0xdd, + 0xe6, 0x38, 0x79, 0x30, 0xee, 0x28, 0x7a, 0xaf, 0xd1, 0x59, 0x3f, 0x86, 0x90, 0xcd, 0xbd, 0x8e, + 0x6a, 0xdd, 0x0b, 0x6a, 0x7e, 0x9b, 0x27, 0x0c, 0x95, 0xfe, 0x74, 0x4e, 0x0d, 0x7f, 0xef, 0x16, + 0x7d, 0xd4, 0xf7, 0x31, 0x40, 0x5f, 0x23, 0xfa, 0x30, 0xfc, 0x5b, 0xc8, 0x1e, 0x6a, 0xd5, 0x91, + 0xec, 0x41, 0x3f, 0xd9, 0x79, 0x98, 0x0e, 0xa4, 0x35, 0x6a, 0xe4, 0x53, 0x7f, 0xca, 0xec, 0x1b, + 0x93, 0x12, 0xbc, 0xe9, 0x63, 0x9f, 0xd2, 0x77, 0xdd, 0x8a, 0x3b, 0x4c, 0x3b, 0xb1, 0xd8, 0x25, + 0x18, 0x13, 0x27, 0x16, 0xc6, 0xab, 0x49, 0x39, 0x39, 0x20, 0x1e, 0x9e, 0xff, 0x76, 0xf1, 0x43, + 0xfa, 0x9b, 0x78, 0x7d, 0x2b, 0xaf, 0x98, 0xe9, 0xe7, 0x25, 0x3b, 0x05, 0xa3, 0x7e, 0xb0, 0xa3, + 0x35, 0x6d, 0xc4, 0x0f, 0x76, 0x44, 0xbb, 0x2e, 0x40, 0x49, 0xfa, 0xdc, 0xc8, 0x60, 0x06, 0xe1, + 0x5e, 0x5b, 0x5e, 0xa8, 0x8b, 0xf6, 0x94, 0x84, 0x63, 0xda, 0xfb, 0xbd, 0x76, 0x5d, 0x60, 0x86, + 0xa1, 0xef, 0xe8, 0x61, 0xaa, 0xa8, 0xd9, 0x53, 0x61, 0xe8, 0x27, 0xf1, 0xaa, 0x1a, 0x6c, 0x09, + 0x26, 0x05, 0x9f, 0x38, 0x58, 0x16, 0x1d, 0xe7, 0x67, 0x7a, 0x8f, 0xf3, 0xbd, 0x76, 0x5d, 0x7d, + 0xa2, 0x3d, 0x11, 0x6a, 0xbf, 0xd8, 0x6d, 0x28, 0x69, 0x72, 0x0f, 0x7a, 0x55, 0xa6, 0x2c, 0xa3, + 0x13, 0x36, 0x9a, 0xbc, 0x54, 0x6d, 0x6f, 0xfb, 0xf6, 0x74, 0xdd, 0x04, 0x50, 0xd7, 0xfc, 0xdb, + 0x39, 0xb5, 0x97, 0x66, 0x10, 0x31, 0x0b, 0x26, 0x77, 0xdd, 0xd0, 0x09, 0xc3, 0x96, 0xb4, 0xf4, + 0xa2, 0xf0, 0xbc, 0xe3, 0xbb, 0x6e, 0x58, 0x0b, 0x5b, 0x2a, 0xfd, 0xc7, 0x09, 0x81, 0xe3, 0xbb, + 0xdd, 0x68, 0xd7, 0xd1, 0xa5, 0x38, 0xd9, 0x63, 0xb3, 0xbb, 0x6e, 0x78, 0x57, 0x94, 0x69, 0xbc, + 0xd9, 0xcb, 0x30, 0x85, 0x7c, 0xeb, 0x9e, 0x62, 0x8c, 0x01, 0x29, 0xec, 0x09, 0xc1, 0xb8, 0xee, + 0x49, 0xce, 0xf4, 0x85, 0xff, 0x7b, 0x1e, 0x4e, 0x66, 0xf7, 0x0e, 0x4e, 0x4f, 0xd1, 0xa7, 0xe8, + 0x69, 0x47, 0xdf, 0x36, 0x26, 0x20, 0x32, 0x98, 0x48, 0xd6, 0xe0, 0xe4, 0x33, 0x07, 0xe7, 0x35, + 0x98, 0x41, 0x46, 0x24, 0x2f, 0x36, 0xbd, 0x30, 0xa2, 0x18, 0x19, 0xf6, 0xb4, 0x28, 0x90, 0xfb, + 0xf9, 0x9a, 0x00, 0xb3, 0x57, 0x60, 0x4a, 0xed, 0xc8, 0xfe, 0xe3, 0xb6, 0xa8, 0x58, 0x6e, 0xc7, + 0x93, 0x04, 0xbd, 0x8b, 0x40, 0x76, 0x02, 0x46, 0xdc, 0x4e, 0x47, 0x54, 0x29, 0x77, 0xe1, 0x61, + 0xb7, 0xd3, 0x91, 0x29, 0x6a, 0xd0, 0xaf, 0xd0, 0xd9, 0x46, 0x5b, 0x1f, 0x32, 0x2c, 0xb4, 0x27, + 0x10, 0x28, 0xed, 0x7f, 0x42, 0xb1, 0xee, 0x05, 0xad, 0x42, 0x19, 0x45, 0x14, 0x70, 0x3b, 0x31, + 0xc2, 0x69, 0x28, 0xaa, 0x57, 0x67, 0xe9, 0x1e, 0x61, 0x8f, 0xba, 0xf4, 0xe2, 0xfc, 0x26, 0x9c, + 0x6a, 0x78, 0x21, 0x4e, 0x5e, 0xd9, 0xa4, 0x4e, 0x87, 0x3c, 0x19, 0x65, 0xa8, 0x5b, 0x7b, 0x8e, + 0x8a, 0x45, 0x4f, 0x56, 0x3a, 0x1d, 0xe9, 0xcf, 0x48, 0x7d, 0xfd, 0x39, 0x98, 0x26, 0xb9, 0x89, + 0x8e, 0x48, 0xfc, 0x16, 0x5a, 0xc0, 0xe2, 0x42, 0x43, 0x49, 0x81, 0x80, 0x40, 0xd5, 0x86, 0xa2, + 0xfc, 0xc3, 0x1c, 0x9c, 0xc8, 0x14, 0xbc, 0xd8, 0xd7, 0x41, 0x3a, 0x6e, 0x45, 0xbe, 0x13, 0xf0, + 0xba, 0xd7, 0xf1, 0x30, 0xb4, 0x85, 0x54, 0x4c, 0x2e, 0x1e, 0x26, 0xb2, 0xa1, 0x13, 0xd8, 0xa6, + 0x6f, 0xc7, 0x44, 0x52, 0x63, 0x52, 0x0a, 0x52, 0xe0, 0x85, 0x2f, 0xc3, 0x89, 0x4c, 0xd4, 0x0c, + 0x4d, 0xc6, 0xeb, 0x66, 0x4a, 0x66, 0xf5, 0xd4, 0x94, 0x6a, 0xb4, 0xa6, 0xe1, 0xa0, 0xe6, 0xfd, + 0x66, 0xdc, 0xbc, 0x94, 0x88, 0xc6, 0x56, 0xd3, 0xeb, 0x3a, 0xeb, 0x96, 0xa1, 0x88, 0xfa, 0x2f, + 0xed, 0x2f, 0xc3, 0x09, 0x9a, 0x7c, 0x3b, 0x81, 0xdb, 0xd9, 0x4d, 0xd8, 0xc9, 0x0f, 0x7d, 0x35, + 0x8b, 0x9d, 0x9c, 0x95, 0x37, 0x04, 0x7e, 0xcc, 0x75, 0xd6, 0xed, 0x05, 0x52, 0x1b, 0xfe, 0x28, + 0x5e, 0xea, 0x19, 0x9f, 0x93, 0x31, 0xad, 0x73, 0x59, 0xd3, 0x7a, 0xf0, 0x35, 0xb5, 0x0e, 0x4c, + 0xdf, 0xac, 0xa4, 0xee, 0x92, 0xcc, 0xa2, 0x94, 0xb4, 0x4d, 0x1f, 0xa2, 0x6d, 0x0d, 0x35, 0x99, + 0x12, 0x73, 0xa6, 0x9e, 0x06, 0xb1, 0xe7, 0x61, 0x2c, 0xce, 0x3a, 0x4d, 0x07, 0x47, 0x51, 0x02, + 0xaa, 0x0d, 0x6a, 0xe1, 0xf7, 0xe7, 0xe0, 0xdc, 0x51, 0x3d, 0xc4, 0xfe, 0x7f, 0xf6, 0xae, 0xad, + 0xc7, 0x91, 0xe3, 0x3a, 0x4f, 0x93, 0x9c, 0xdb, 0xe1, 0x5c, 0x7a, 0x6a, 0x57, 0xbb, 0xa3, 0x9d, + 0xbd, 0x68, 0x7b, 0x2f, 0xda, 0xe5, 0x5a, 0x92, 0x77, 0x15, 0x59, 0x5a, 0x39, 0xb2, 0xdc, 0x43, + 0x36, 0x87, 0xbd, 0xcb, 0x9b, 0xba, 0x9b, 0x33, 0x5e, 0xc9, 0x76, 0x87, 0x1a, 0xf6, 0xcc, 0x30, + 0xe6, 0x90, 0x34, 0x9b, 0xd4, 0x7a, 0x85, 0x00, 0xb9, 0x01, 0x36, 0x90, 0x9b, 0x13, 0x27, 0x40, + 0x8c, 0x20, 0x40, 0x1e, 0x22, 0x04, 0x79, 0xc8, 0x2f, 0x48, 0xf2, 0xe2, 0x37, 0x01, 0x86, 0x01, + 0x03, 0xc9, 0x53, 0x02, 0x08, 0x89, 0x80, 0xe4, 0x21, 0xc9, 0x5b, 0x10, 0x3f, 0xf8, 0x29, 0xa8, + 0x53, 0x55, 0xdd, 0xd5, 0x17, 0x72, 0x67, 0xb5, 0x52, 0x62, 0x03, 0x7e, 0x22, 0xbb, 0xea, 0x54, + 0x75, 0x75, 0x5d, 0xcf, 0x39, 0x75, 0xce, 0x77, 0xf6, 0xe0, 0x0c, 0x9a, 0x5e, 0xf8, 0x83, 0xa0, + 0x93, 0xdd, 0xfd, 0xf6, 0xfe, 0x91, 0xc7, 0xe7, 0xa4, 0x96, 0xda, 0xd5, 0xc3, 0xa1, 0x6d, 0x37, + 0xa4, 0x5e, 0x1e, 0x0e, 0x6d, 0x7f, 0x20, 0x9e, 0x8b, 0xb4, 0x38, 0x6f, 0x43, 0x07, 0xb6, 0x66, + 0x94, 0x94, 0xb6, 0x05, 0x45, 0xde, 0x16, 0x6e, 0x80, 0x7a, 0xe0, 0x75, 0x28, 0xc7, 0xeb, 0x75, + 0xb0, 0x69, 0xef, 0xdd, 0x61, 0x51, 0xd4, 0xad, 0xb5, 0x20, 0xdd, 0xf6, 0x07, 0xbb, 0x77, 0xf8, + 0x5b, 0x8e, 0xc5, 0x81, 0x26, 0xb3, 0xfe, 0xe4, 0x45, 0x38, 0x15, 0x03, 0x05, 0x09, 0xbd, 0xcc, + 0xad, 0x0d, 0x9a, 0x15, 0x85, 0x90, 0xba, 0x0c, 0x2b, 0x62, 0xcc, 0x47, 0x81, 0xaf, 0x9a, 0x95, + 0xe7, 0x69, 0x74, 0x4d, 0xf1, 0xd7, 0x4d, 0xc4, 0x47, 0xa5, 0x4a, 0x0d, 0x27, 0xe0, 0x94, 0xc9, + 0x0b, 0x40, 0x02, 0xae, 0x3c, 0xd8, 0x06, 0xf8, 0x0b, 0x37, 0x44, 0x4e, 0xb0, 0x7e, 0xf9, 0x6b, + 0xff, 0x3e, 0x03, 0xa7, 0x52, 0xc4, 0x0d, 0xca, 0xe2, 0x77, 0xfb, 0x63, 0xef, 0x90, 0x09, 0x08, + 0xf2, 0x47, 0xae, 0x4b, 0xe9, 0x5c, 0x87, 0xb4, 0xc0, 0xa2, 0x84, 0xf3, 0x77, 0xf1, 0x27, 0xba, + 0x35, 0xb4, 0x47, 0x42, 0x3d, 0x42, 0xff, 0x12, 0x13, 0x36, 0x30, 0xf4, 0x81, 0xdf, 0x1d, 0x60, + 0x04, 0x05, 0x64, 0x31, 0x72, 0x11, 0x21, 0x0d, 0x5b, 0xd1, 0x94, 0x88, 0x28, 0x8f, 0x61, 0xa9, + 0xc3, 0x58, 0x0a, 0xf9, 0x22, 0x9c, 0x93, 0x4e, 0x12, 0x37, 0xb6, 0xae, 0xd0, 0x1a, 0xdd, 0x3a, + 0xdb, 0x0e, 0xce, 0x94, 0x52, 0x64, 0x85, 0x6d, 0xc3, 0x45, 0x1c, 0xc4, 0x6e, 0x67, 0xe8, 0x26, + 0x62, 0x65, 0xe0, 0xa7, 0x32, 0x70, 0xf9, 0x73, 0x94, 0xca, 0xec, 0x0c, 0x63, 0x61, 0x33, 0xe8, + 0x57, 0xf3, 0xee, 0x7b, 0x07, 0x9e, 0x49, 0x6d, 0x31, 0x3d, 0x3e, 0xd0, 0xd8, 0x29, 0xe4, 0x7c, + 0x16, 0xe9, 0x33, 0x65, 0x7d, 0x2e, 0xc3, 0xca, 0xbb, 0x5e, 0x7b, 0xe4, 0x8d, 0xf8, 0xb9, 0xcc, + 0xa7, 0x04, 0x4b, 0x93, 0x8f, 0xe5, 0x7f, 0x50, 0xc4, 0xd8, 0x44, 0xc4, 0x3a, 0xda, 0xe1, 0xbe, + 0xd7, 0x17, 0xb7, 0x17, 0xcb, 0x16, 0x7f, 0x7a, 0xc2, 0x09, 0x40, 0x5e, 0x85, 0x15, 0x5a, 0xed, + 0xe1, 0xa4, 0xcf, 0x06, 0x22, 0x1b, 0x81, 0x88, 0xa9, 0xb1, 0x2c, 0xfa, 0x31, 0x95, 0x39, 0x2b, + 0x7f, 0x1c, 0x3e, 0x52, 0x0e, 0xd1, 0x3f, 0x1e, 0x0f, 0xe5, 0xe1, 0x13, 0x2a, 0x2e, 0xbb, 0xe6, + 0x34, 0x79, 0x91, 0x25, 0x4a, 0x13, 0x72, 0x88, 0xdb, 0x0b, 0x4c, 0xc9, 0xa5, 0xdd, 0x82, 0xbc, + 0x54, 0x37, 0xfd, 0x18, 0xe6, 0xf3, 0x21, 0x3e, 0x86, 0x3d, 0xf1, 0x2e, 0x78, 0x17, 0x96, 0x44, + 0x95, 0x94, 0x15, 0x3e, 0x1a, 0xf8, 0x62, 0xea, 0xe3, 0x7f, 0x9a, 0x46, 0xf9, 0x5a, 0xfc, 0xc8, + 0x79, 0x0b, 0xff, 0xe3, 0xfe, 0x39, 0x6e, 0x53, 0x1e, 0xb8, 0xe7, 0xbb, 0x43, 0xb4, 0x1d, 0x0a, + 0x18, 0x46, 0x9a, 0xee, 0xf4, 0x7c, 0x66, 0x51, 0xc4, 0xdf, 0xf1, 0x57, 0x19, 0x21, 0x5b, 0x6e, + 0x0f, 0x06, 0x63, 0x7f, 0x3c, 0x6a, 0x0f, 0x23, 0x9a, 0x30, 0x72, 0x0c, 0xcf, 0x22, 0xeb, 0x75, + 0x07, 0x23, 0x18, 0x0c, 0x46, 0x02, 0xb2, 0x61, 0x5f, 0x98, 0x41, 0xe7, 0xef, 0xbc, 0x14, 0x65, + 0x0e, 0x75, 0x4a, 0xad, 0xcb, 0xc4, 0x54, 0x14, 0x92, 0x6a, 0xad, 0xcc, 0x59, 0x67, 0x59, 0x9d, + 0x09, 0x2a, 0x52, 0x49, 0x99, 0x1f, 0x71, 0x55, 0xd8, 0x76, 0x38, 0x59, 0xa2, 0xb5, 0xca, 0xd3, + 0x88, 0x7c, 0x09, 0x96, 0xbb, 0x1d, 0x39, 0x50, 0x5f, 0x5c, 0x09, 0x63, 0x76, 0x18, 0x58, 0x70, + 0x58, 0x07, 0x1d, 0xb8, 0x2e, 0x4f, 0xdd, 0x5e, 0x8d, 0xe8, 0x0c, 0xb5, 0x6d, 0x21, 0xc6, 0x24, + 0x8b, 0x91, 0x35, 0xc8, 0x04, 0x1b, 0x6e, 0xa6, 0xdb, 0x61, 0x73, 0x34, 0x84, 0x2b, 0xb6, 0xf8, + 0x93, 0xf6, 0x6b, 0x70, 0xe3, 0xa4, 0x7d, 0x44, 0xe7, 0xf3, 0x94, 0x0e, 0x5f, 0xb6, 0x36, 0xda, + 0x89, 0x7e, 0xbb, 0x0c, 0x32, 0xda, 0x6a, 0x57, 0xac, 0x2b, 0x91, 0xd6, 0x1a, 0x75, 0xb5, 0xdf, + 0xca, 0xc2, 0x5a, 0x54, 0x4b, 0x4a, 0x6e, 0x41, 0x2e, 0xa8, 0x76, 0x2d, 0xb8, 0xcd, 0x93, 0x89, + 0x68, 0xe5, 0x16, 0x12, 0x51, 0xd6, 0x12, 0x2f, 0xff, 0xdd, 0x63, 0xf9, 0xc2, 0xcd, 0x5a, 0xc1, + 0x44, 0x71, 0xd1, 0x76, 0x0f, 0xd6, 0xd0, 0x6e, 0x0b, 0x79, 0x96, 0x71, 0x97, 0xeb, 0xde, 0x67, + 0x5f, 0x9f, 0x2c, 0x7d, 0xf8, 0xd1, 0xa5, 0x39, 0xbc, 0x29, 0x59, 0xa1, 0x65, 0x29, 0xdb, 0x40, + 0x33, 0x25, 0x25, 0x58, 0x6e, 0xba, 0x12, 0x8c, 0x7f, 0xca, 0x14, 0x25, 0xd8, 0xfc, 0x0c, 0x25, + 0x58, 0x58, 0x52, 0x56, 0x82, 0xa1, 0x2a, 0x74, 0x71, 0x9a, 0x2a, 0x34, 0x2c, 0xc3, 0x54, 0xa1, + 0x57, 0xf9, 0xe7, 0x8e, 0xda, 0x0f, 0x5d, 0xec, 0x07, 0xbe, 0x79, 0xe2, 0x87, 0x58, 0xed, 0x87, + 0x68, 0x26, 0xb1, 0xbd, 0x0c, 0xc2, 0xb6, 0x42, 0xfb, 0x63, 0x25, 0xa6, 0x0d, 0x12, 0x43, 0x71, + 0x0d, 0xd6, 0xba, 0xc7, 0x74, 0x09, 0x7b, 0x1d, 0x49, 0xde, 0x58, 0xb5, 0x56, 0x45, 0x2a, 0x93, + 0x39, 0x9e, 0x87, 0xf5, 0x80, 0x8c, 0xb3, 0xdd, 0xe8, 0x73, 0x65, 0x05, 0xa5, 0x39, 0x80, 0xc8, + 0x2d, 0xd8, 0x08, 0x08, 0xb9, 0x44, 0xcf, 0x44, 0x8e, 0x55, 0x4b, 0x15, 0x19, 0x4d, 0x9e, 0xae, + 0x1d, 0xc6, 0xb9, 0xcf, 0xcf, 0xa8, 0x55, 0xda, 0x0f, 0xb2, 0x11, 0x49, 0x59, 0xbc, 0x66, 0x1b, + 0xf2, 0x94, 0x29, 0xe1, 0x9d, 0xc4, 0xb7, 0x95, 0xcb, 0x53, 0xba, 0x9f, 0x5b, 0xa7, 0xd8, 0x76, + 0xc3, 0x02, 0xdf, 0x1f, 0x08, 0x63, 0x15, 0x97, 0xf1, 0x5d, 0x4c, 0xfa, 0xc1, 0xe9, 0x27, 0xaa, + 0x63, 0x7b, 0x48, 0x61, 0x76, 0x75, 0x42, 0x54, 0xa1, 0xb3, 0x0f, 0xf9, 0xaf, 0xe0, 0x49, 0xbc, + 0xa0, 0x05, 0xa8, 0x58, 0xf2, 0xa3, 0x95, 0x67, 0x53, 0xf8, 0xe7, 0x44, 0xe5, 0xd8, 0x4b, 0x58, + 0xb3, 0x3a, 0x11, 0x7f, 0x45, 0xb5, 0x06, 0xac, 0xa0, 0x9c, 0x2a, 0x2a, 0xcc, 0xa5, 0x28, 0x53, + 0x93, 0x1f, 0x5f, 0x34, 0x6b, 0x56, 0x9e, 0x96, 0x13, 0xd5, 0x1c, 0xc1, 0xb3, 0xb2, 0x74, 0x19, + 0x6d, 0xe4, 0xbc, 0xc0, 0x43, 0x9d, 0xd9, 0x03, 0xa1, 0x10, 0x8a, 0x4d, 0x3d, 0xd3, 0x8e, 0x26, + 0x70, 0x32, 0xed, 0x08, 0xce, 0x4d, 0x1f, 0x92, 0x19, 0xb1, 0x76, 0x42, 0xd6, 0x34, 0x23, 0xb3, + 0xa6, 0xb2, 0xac, 0x99, 0x8d, 0xc8, 0x9a, 0xda, 0x5f, 0x66, 0xe1, 0xca, 0x09, 0x86, 0x6b, 0xc6, + 0x3b, 0xbf, 0x0c, 0x79, 0x76, 0x05, 0xc4, 0xb6, 0xcf, 0x4c, 0x44, 0x3a, 0xa0, 0x95, 0xf2, 0xbd, + 0x8e, 0x4a, 0x2a, 0xe1, 0x7e, 0x07, 0x7e, 0xf0, 0x9f, 0xfc, 0x0a, 0xac, 0xb3, 0x0d, 0x8d, 0x19, + 0x98, 0x1d, 0x4c, 0x7a, 0x27, 0xd8, 0xd1, 0xb6, 0x84, 0x37, 0x4c, 0xac, 0x28, 0x6e, 0x72, 0xb8, + 0x63, 0xd8, 0x41, 0x1a, 0x71, 0x20, 0x8f, 0x64, 0x07, 0xed, 0x6e, 0xef, 0x44, 0x6e, 0x19, 0xc2, + 0xd7, 0x46, 0x2e, 0xc6, 0xec, 0x62, 0x69, 0x42, 0x19, 0x9f, 0xc9, 0x75, 0x58, 0xef, 0x4f, 0x8e, + 0xa9, 0x78, 0xce, 0xe6, 0x02, 0xbf, 0xc7, 0x9f, 0xb7, 0x56, 0xfb, 0x93, 0x63, 0x7d, 0x38, 0xc4, + 0x21, 0xc5, 0x0b, 0xff, 0x0d, 0x4a, 0xc7, 0x56, 0xad, 0xa0, 0x5c, 0x40, 0x4a, 0x5a, 0x01, 0x5b, + 0xb7, 0x9c, 0xf6, 0x34, 0x30, 0xf3, 0x2f, 0x1e, 0x6b, 0x88, 0x3d, 0x68, 0x3f, 0xc9, 0x08, 0xa9, + 0x68, 0xfa, 0xbc, 0xff, 0xc5, 0x10, 0xa5, 0x0c, 0xd1, 0x0d, 0x50, 0x69, 0xd7, 0x87, 0x9b, 0x4a, + 0x30, 0x46, 0x6b, 0xfd, 0xc9, 0x71, 0xd0, 0x77, 0x72, 0xc7, 0x2f, 0xc8, 0x1d, 0xff, 0xaa, 0x90, + 0x9a, 0x52, 0xb7, 0x87, 0xe9, 0x5d, 0xae, 0xfd, 0x57, 0x16, 0xae, 0x9f, 0x6c, 0x13, 0xf8, 0xc5, + 0xb8, 0xa5, 0x8c, 0x5b, 0x4c, 0x7d, 0x36, 0x9f, 0x50, 0x9f, 0xa5, 0xac, 0xbd, 0x85, 0xb4, 0xb5, + 0x97, 0x50, 0xd6, 0x2d, 0xa6, 0x28, 0xeb, 0x52, 0x17, 0xe8, 0xd2, 0x63, 0x16, 0xe8, 0xb2, 0x3c, + 0x4f, 0xfe, 0x3d, 0x10, 0x73, 0xa3, 0xac, 0xfd, 0x3b, 0x70, 0x4a, 0xb0, 0xf6, 0xec, 0xe4, 0x08, + 0x75, 0xb0, 0xf9, 0x3b, 0x37, 0xd3, 0x98, 0x7a, 0x24, 0x4b, 0x61, 0xbc, 0x37, 0x38, 0x3b, 0x1f, + 0xe6, 0xff, 0xec, 0x30, 0xf2, 0xe4, 0x01, 0x9c, 0x41, 0xa4, 0xee, 0x7d, 0x59, 0x7b, 0xec, 0x8e, + 0xbc, 0x03, 0x3e, 0x1f, 0x2e, 0x27, 0xd8, 0xde, 0xee, 0xbe, 0xd4, 0x1c, 0xcb, 0x3b, 0xa8, 0xcc, + 0x59, 0xa7, 0xfd, 0x94, 0xf4, 0xb8, 0x8c, 0xf0, 0x37, 0x0a, 0x68, 0x8f, 0xef, 0x2f, 0x54, 0x67, + 0xc4, 0x3b, 0x7c, 0xd9, 0xca, 0xb7, 0xa5, 0xde, 0xbb, 0x02, 0xab, 0x23, 0xef, 0x60, 0xe4, 0xf9, + 0x47, 0x11, 0x39, 0x79, 0x85, 0x27, 0x8a, 0x8e, 0x11, 0x78, 0x81, 0x4f, 0xc4, 0x64, 0x8b, 0x42, + 0x5a, 0x39, 0x10, 0xfd, 0x52, 0xc7, 0x81, 0xce, 0x26, 0xb9, 0x81, 0xec, 0xe1, 0x5e, 0x6e, 0x29, + 0xa3, 0x66, 0x2d, 0x8e, 0x6a, 0x78, 0xd0, 0xed, 0x79, 0xda, 0xdf, 0x2a, 0x82, 0x23, 0x48, 0xeb, + 0x3c, 0xf2, 0x8e, 0x64, 0x96, 0x99, 0x4d, 0xb0, 0x21, 0x69, 0x45, 0x64, 0x0b, 0x36, 0x0e, 0xb4, + 0x87, 0x09, 0x11, 0xa0, 0x3d, 0x4c, 0x79, 0x0a, 0xdb, 0x32, 0x2e, 0x00, 0xdf, 0x15, 0xb6, 0x1d, + 0x74, 0xcf, 0xdb, 0xbd, 0x4d, 0x6e, 0xc2, 0x22, 0x33, 0xe7, 0x10, 0xcd, 0x5d, 0x8f, 0x34, 0x77, + 0xf7, 0xb6, 0x25, 0xf2, 0xb5, 0xef, 0x07, 0x0a, 0xcf, 0xc4, 0x47, 0xec, 0xde, 0x26, 0xaf, 0x9e, + 0xcc, 0xcc, 0x72, 0x49, 0x98, 0x59, 0x06, 0x26, 0x96, 0xaf, 0x45, 0x4c, 0x2c, 0xaf, 0xce, 0xee, + 0x2d, 0x7e, 0x23, 0xc5, 0x80, 0xe5, 0x42, 0xc0, 0xa1, 0x9f, 0x28, 0x70, 0x61, 0x66, 0x09, 0x72, + 0x1e, 0x96, 0xf4, 0xa6, 0xe9, 0x84, 0xe3, 0x4b, 0xd7, 0x8c, 0x48, 0x21, 0x3b, 0xb0, 0xbc, 0xdd, + 0xf6, 0xbb, 0xfb, 0x74, 0x1a, 0xa7, 0xaa, 0x88, 0x13, 0xd5, 0x06, 0xe4, 0x95, 0x39, 0x2b, 0x2c, + 0x4b, 0x5c, 0xd8, 0xc0, 0xb5, 0x10, 0x09, 0xe2, 0x93, 0x4d, 0x51, 0x1b, 0x24, 0x2a, 0x4c, 0x14, + 0xa3, 0xfb, 0x4c, 0x22, 0x31, 0xbe, 0x04, 0xdf, 0x13, 0xbc, 0xc8, 0xf4, 0x06, 0x3e, 0x01, 0x42, + 0xe6, 0x0d, 0x58, 0x6a, 0x8a, 0xbb, 0x62, 0xc9, 0x2e, 0x59, 0xdc, 0x0b, 0x5b, 0x41, 0xae, 0xf6, + 0x7b, 0x8a, 0x90, 0xed, 0x1f, 0xff, 0x21, 0x52, 0xfc, 0xa3, 0xce, 0xec, 0xf8, 0x47, 0x9d, 0x4f, + 0x18, 0xff, 0x48, 0xfb, 0x6b, 0x8e, 0x5f, 0x6d, 0x76, 0x9a, 0x31, 0xfd, 0xdd, 0xd3, 0xda, 0x97, + 0x1b, 0x91, 0xd9, 0x79, 0x45, 0x8a, 0x9f, 0x97, 0x7c, 0xd7, 0x74, 0x33, 0x73, 0x69, 0xaa, 0xfe, + 0x69, 0x16, 0xce, 0xcf, 0x2a, 0x9e, 0x1a, 0xa1, 0x57, 0x79, 0xb2, 0x08, 0xbd, 0x37, 0x61, 0x89, + 0xa5, 0x05, 0xc6, 0xd3, 0xd8, 0xe1, 0xbc, 0x28, 0xed, 0x70, 0x91, 0x4d, 0xae, 0xc0, 0x82, 0x5e, + 0xb4, 0xc3, 0xa0, 0x51, 0x68, 0xe5, 0xd8, 0xde, 0xf7, 0xd1, 0x7e, 0x8e, 0x67, 0x91, 0xaf, 0x27, + 0xe3, 0xa4, 0xf1, 0x68, 0x51, 0x5b, 0x52, 0x87, 0x24, 0xa0, 0xe5, 0xb1, 0xbd, 0x21, 0x14, 0x3a, + 0x47, 0x17, 0xb6, 0x92, 0x31, 0xd7, 0x34, 0x58, 0x68, 0x8e, 0x3c, 0xdf, 0x1b, 0xcb, 0x16, 0x88, + 0x43, 0x4c, 0xb1, 0x78, 0x0e, 0xb7, 0x0f, 0x6c, 0x3f, 0x62, 0xee, 0xe0, 0x0b, 0x32, 0x44, 0x07, + 0x1a, 0x14, 0xd2, 0x64, 0x4b, 0x22, 0xa1, 0x05, 0xaa, 0xed, 0x49, 0x7f, 0xff, 0xa8, 0x65, 0x55, + 0x39, 0xab, 0xc1, 0x0a, 0xf4, 0x30, 0x95, 0x7e, 0xa0, 0x6f, 0x49, 0x24, 0xda, 0x77, 0x14, 0x38, + 0x9d, 0xf6, 0x1d, 0xe4, 0x3c, 0xe4, 0xfa, 0xa9, 0x21, 0xe1, 0xfa, 0xcc, 0x8b, 0x35, 0x4f, 0x7f, + 0xdd, 0x83, 0xc1, 0xe8, 0xb8, 0x3d, 0x96, 0xed, 0x34, 0xa5, 0x64, 0x0b, 0xe8, 0x43, 0x19, 0xff, + 0x93, 0x4b, 0x62, 0x8f, 0xce, 0x26, 0x82, 0xc8, 0xe1, 0x8f, 0xa6, 0x03, 0x98, 0x9d, 0x66, 0x63, + 0xc8, 0xa0, 0xcd, 0x5f, 0x86, 0x1c, 0x6d, 0x56, 0x6c, 0xf6, 0xd2, 0xf9, 0xa3, 0xd7, 0xaa, 0x9c, + 0x88, 0xb5, 0xca, 0x6f, 0x1f, 0xf7, 0x2c, 0x24, 0xd6, 0xf6, 0x60, 0x2d, 0x4a, 0x41, 0x8c, 0x28, + 0x18, 0x66, 0xfe, 0x8e, 0xca, 0x6b, 0xda, 0x1e, 0x0c, 0x98, 0xaf, 0xc0, 0xf6, 0xb3, 0xff, 0xf4, + 0xd1, 0x25, 0xa0, 0x8f, 0xac, 0x4c, 0x1a, 0x58, 0xa6, 0xf6, 0xdd, 0x0c, 0x9c, 0x0e, 0xdd, 0x93, + 0xc5, 0x1a, 0xfa, 0xb9, 0xf5, 0x95, 0xd3, 0x23, 0xbe, 0x5c, 0x82, 0xd1, 0x4a, 0x7e, 0xe0, 0x0c, + 0x17, 0x92, 0x1d, 0xd8, 0x9c, 0x46, 0x4f, 0x6e, 0xc1, 0x32, 0x22, 0xda, 0x0c, 0xdb, 0xfb, 0x9e, + 0xbc, 0xf7, 0xf5, 0x45, 0xa2, 0x15, 0xe6, 0x6b, 0x3f, 0x52, 0xe0, 0x1c, 0xb7, 0x70, 0xaf, 0xb5, + 0xbb, 0x7d, 0xbc, 0x8d, 0xdb, 0xf7, 0x3e, 0x1d, 0x5f, 0xcf, 0x9d, 0xc8, 0x3e, 0x76, 0x2d, 0xea, + 0xc8, 0x90, 0x78, 0xdb, 0xf4, 0xaf, 0x25, 0x37, 0x11, 0xa5, 0x89, 0x5f, 0x3d, 0xe6, 0x98, 0x6f, + 0x7d, 0x9f, 0x26, 0xc8, 0xbe, 0xf5, 0x48, 0xa1, 0xfd, 0x3a, 0x5c, 0x9c, 0xfd, 0x02, 0xf2, 0x35, + 0x58, 0xc5, 0xb0, 0x3f, 0xad, 0xe1, 0xe1, 0xa8, 0xdd, 0xf1, 0x84, 0x2a, 0x4c, 0x68, 0x22, 0xe5, + 0x3c, 0x06, 0x3a, 0xc5, 0x7d, 0xbd, 0x0f, 0x31, 0xa0, 0x10, 0x2f, 0x14, 0x71, 0x23, 0x91, 0x6b, + 0xd3, 0x7e, 0x43, 0x01, 0x92, 0xac, 0x83, 0x7c, 0x01, 0x56, 0x5a, 0x4e, 0xd1, 0x1e, 0xb7, 0x47, + 0xe3, 0xca, 0x60, 0x32, 0xe2, 0x88, 0x4f, 0xcc, 0xf5, 0x77, 0xbc, 0xef, 0xb2, 0x0b, 0x85, 0xa3, + 0xc1, 0x64, 0x64, 0x45, 0xe8, 0x30, 0x5e, 0x8d, 0xe7, 0x7d, 0xa3, 0xd3, 0x7e, 0x14, 0x8d, 0x57, + 0xc3, 0xd3, 0x22, 0xf1, 0x6a, 0x78, 0x9a, 0xf6, 0x81, 0x02, 0x5b, 0xc2, 0xa2, 0xac, 0x93, 0xd2, + 0x96, 0x22, 0x02, 0x5c, 0x8c, 0x04, 0xc4, 0xe8, 0x2c, 0x96, 0x76, 0x43, 0x60, 0xc0, 0x60, 0x03, + 0x91, 0xb7, 0x65, 0x65, 0xc9, 0x97, 0x21, 0x67, 0x8f, 0x07, 0xc3, 0x13, 0x80, 0xc0, 0xa8, 0xc1, + 0x88, 0x8e, 0x07, 0x43, 0xac, 0x02, 0x4b, 0x6a, 0x1e, 0x9c, 0x96, 0x1b, 0x27, 0x5a, 0x4c, 0x6a, + 0xb0, 0xc8, 0xd1, 0xbe, 0x62, 0xd7, 0xb9, 0x33, 0xbe, 0x69, 0x7b, 0x5d, 0x20, 0xcd, 0x70, 0x88, + 0x4b, 0x4b, 0xd4, 0xa1, 0xfd, 0x81, 0x02, 0x79, 0xca, 0x6d, 0xa0, 0x14, 0xf7, 0xb4, 0x53, 0x3a, + 0xca, 0x38, 0x0a, 0xdb, 0x83, 0xa0, 0xfa, 0x13, 0x9d, 0xc6, 0xaf, 0xc0, 0x7a, 0xac, 0x00, 0xd1, + 0x10, 0x63, 0xa0, 0xd7, 0xdd, 0x6f, 0xb3, 0xf0, 0x17, 0xec, 0xde, 0x3e, 0x92, 0xa6, 0xfd, 0x8e, + 0x02, 0xa7, 0xa9, 0xcc, 0x6f, 0xa2, 0xba, 0xd7, 0x9a, 0xf4, 0xc4, 0x7a, 0xa7, 0x1c, 0x94, 0x30, + 0x4d, 0x64, 0xfe, 0xcf, 0x8c, 0x83, 0xe2, 0x69, 0x56, 0x90, 0x4b, 0x2a, 0xb0, 0xc4, 0xcf, 0x17, + 0x9f, 0x23, 0x53, 0x5e, 0x94, 0x94, 0x09, 0x61, 0xc5, 0x9c, 0x88, 0x7e, 0x09, 0x6e, 0x61, 0xbc, + 0x8c, 0x15, 0x94, 0xd6, 0xfe, 0x5b, 0x81, 0xb3, 0x53, 0xca, 0x90, 0x37, 0x60, 0x1e, 0x7d, 0xb3, + 0xf8, 0xe8, 0x9d, 0x9f, 0xf2, 0x8a, 0xf1, 0xfe, 0xd1, 0xee, 0x6d, 0x76, 0x10, 0x1d, 0xd3, 0x07, + 0x8b, 0x95, 0x22, 0xef, 0xc0, 0xb2, 0xde, 0xe9, 0x70, 0x71, 0x26, 0x13, 0x11, 0x67, 0xa6, 0xbc, + 0xf1, 0xc5, 0x80, 0x9e, 0x89, 0x33, 0xcc, 0x4b, 0xa0, 0xd3, 0x71, 0xb9, 0xdf, 0x59, 0x58, 0xdf, + 0xb9, 0x5f, 0x86, 0xb5, 0x28, 0xf1, 0x13, 0xb9, 0xca, 0x7c, 0x5f, 0x01, 0x35, 0xda, 0x86, 0xcf, + 0x06, 0x23, 0x27, 0x6d, 0x98, 0x1f, 0x33, 0xa9, 0xfe, 0x28, 0x03, 0xcf, 0xa4, 0xf6, 0x30, 0x79, + 0x01, 0x16, 0xf4, 0xe1, 0xd0, 0x2c, 0xf1, 0x59, 0xc5, 0x39, 0x24, 0xd4, 0x12, 0x47, 0xa4, 0x3d, + 0x46, 0x44, 0x5e, 0x86, 0x25, 0x9c, 0x99, 0xb4, 0x40, 0x26, 0xc4, 0x88, 0x64, 0x4a, 0x94, 0x18, + 0x46, 0xa4, 0x20, 0x24, 0x65, 0x58, 0xe3, 0x70, 0x19, 0x96, 0x77, 0xe8, 0x7d, 0x2b, 0x00, 0x2b, + 0x47, 0x3c, 0x75, 0xa1, 0x7a, 0x76, 0x47, 0x2c, 0x4f, 0x06, 0x8c, 0x88, 0x96, 0x22, 0x55, 0x50, + 0xb1, 0x4e, 0xb9, 0x26, 0x06, 0x54, 0x89, 0x00, 0x26, 0xac, 0x11, 0x53, 0xea, 0x4a, 0x94, 0x0c, + 0x86, 0x4b, 0xf7, 0xfd, 0xee, 0x61, 0xff, 0xd8, 0xeb, 0x8f, 0x3f, 0xbb, 0xe1, 0x0a, 0xdf, 0x71, + 0xa2, 0xe1, 0xfa, 0x93, 0x1c, 0x5b, 0xcc, 0xf1, 0x62, 0x94, 0xa3, 0x91, 0xb0, 0x89, 0x91, 0xa3, + 0xc1, 0x68, 0xee, 0x0c, 0x10, 0xa2, 0x04, 0x8b, 0x0c, 0xa8, 0x43, 0xac, 0x8c, 0x0b, 0xa9, 0x4d, + 0x60, 0x34, 0xbb, 0xb7, 0x19, 0xfb, 0xc2, 0x9c, 0xc4, 0x7c, 0x4b, 0x14, 0x25, 0xbb, 0x90, 0x2f, + 0xf6, 0xbc, 0x76, 0x7f, 0x32, 0x74, 0x4e, 0x76, 0x7b, 0xb8, 0xc9, 0xbf, 0x65, 0x65, 0x9f, 0x15, + 0xc3, 0x5b, 0x47, 0xdc, 0xc9, 0xe5, 0x8a, 0x88, 0x13, 0xf8, 0x8d, 0xb0, 0x18, 0xfc, 0x9f, 0x9f, + 0xd1, 0x3f, 0xf1, 0x44, 0x2c, 0x17, 0x75, 0x8a, 0xe2, 0x8e, 0x25, 0x2e, 0xac, 0x55, 0xdb, 0xfe, + 0xd8, 0x19, 0xb5, 0xfb, 0x3e, 0x02, 0xfc, 0x9d, 0x00, 0x00, 0x69, 0x4b, 0x04, 0x8f, 0x45, 0x1d, + 0xe3, 0x38, 0x28, 0xca, 0x34, 0x98, 0xd1, 0xea, 0x28, 0xbf, 0x54, 0xee, 0xf6, 0xdb, 0xbd, 0xee, + 0xfb, 0xc2, 0xbd, 0x8e, 0xf1, 0x4b, 0x07, 0x22, 0xd1, 0x0a, 0xf3, 0xb5, 0xaf, 0x26, 0xc6, 0x8d, + 0xb5, 0x32, 0x0f, 0x8b, 0xdc, 0xf9, 0x9a, 0x39, 0x23, 0x37, 0x8d, 0x7a, 0xc9, 0xac, 0xef, 0xa8, + 0x0a, 0x59, 0x03, 0x68, 0x5a, 0x8d, 0xa2, 0x61, 0xdb, 0xf4, 0x39, 0x43, 0x9f, 0xb9, 0xa7, 0x72, + 0xb9, 0x55, 0x55, 0xb3, 0x92, 0xb3, 0x72, 0x4e, 0xfb, 0xa1, 0x02, 0x67, 0xd2, 0x87, 0x92, 0x38, + 0x80, 0xee, 0xea, 0xfc, 0x1e, 0xf9, 0x0b, 0x33, 0xc7, 0x3d, 0x35, 0x39, 0xee, 0xf6, 0x3e, 0x66, + 0xee, 0xd4, 0x19, 0x71, 0x59, 0xc4, 0xfc, 0xb3, 0xba, 0x1d, 0x2b, 0xd3, 0xed, 0x68, 0x45, 0xd8, + 0x9c, 0x56, 0x47, 0xf4, 0x53, 0xd7, 0x21, 0xaf, 0x37, 0x9b, 0x55, 0xb3, 0xa8, 0x3b, 0x66, 0xa3, + 0xae, 0x2a, 0x64, 0x19, 0xe6, 0x77, 0xac, 0x46, 0xab, 0xa9, 0x66, 0xb4, 0xef, 0x29, 0xb0, 0x6a, + 0x86, 0xc6, 0x3c, 0x4f, 0xbb, 0xf8, 0x5e, 0x8f, 0x2c, 0xbe, 0xcd, 0x00, 0xd8, 0x21, 0x78, 0xc1, + 0x89, 0x56, 0xde, 0x3f, 0x2a, 0xb0, 0x91, 0x28, 0x43, 0x6c, 0x58, 0xd4, 0xf7, 0xec, 0x86, 0x59, + 0x2a, 0xf2, 0x96, 0x5d, 0x0a, 0xed, 0x85, 0x30, 0x76, 0x4f, 0xe2, 0x2d, 0xcc, 0x19, 0xf2, 0xa1, + 0xef, 0x0e, 0xba, 0x1d, 0x29, 0xee, 0x66, 0x65, 0xce, 0x12, 0x35, 0xe1, 0x49, 0xf6, 0xfe, 0x64, + 0xe4, 0x61, 0xb5, 0x99, 0x88, 0x22, 0x34, 0x48, 0x4f, 0x56, 0x8c, 0x46, 0xef, 0x6d, 0x9a, 0x9f, + 0xac, 0x3a, 0xac, 0x6f, 0x7b, 0x15, 0xf2, 0x5c, 0x6a, 0x41, 0x81, 0xe0, 0x07, 0x0a, 0x6c, 0x4e, + 0x6b, 0x2b, 0x15, 0x84, 0xa2, 0x9e, 0xd1, 0x67, 0x02, 0x2c, 0xfe, 0xa8, 0x4b, 0xb4, 0x20, 0x23, + 0x6f, 0x42, 0xde, 0xf4, 0xfd, 0x89, 0x37, 0xb2, 0x5f, 0x6e, 0x59, 0x26, 0x9f, 0x20, 0x17, 0xfe, + 0xe3, 0xa3, 0x4b, 0x67, 0xd1, 0x34, 0x7d, 0xe4, 0xfa, 0x2f, 0xbb, 0x93, 0x51, 0x37, 0x82, 0x5b, + 0x2e, 0x97, 0xa0, 0x7c, 0x6b, 0x7b, 0xd2, 0xe9, 0x7a, 0x82, 0x6b, 0x17, 0xde, 0xa3, 0x3c, 0x4d, + 0x3e, 0x45, 0x44, 0x9a, 0xf6, 0x6d, 0x05, 0xce, 0x4d, 0xef, 0x18, 0x7a, 0x32, 0x39, 0xcc, 0x58, + 0x50, 0xf8, 0x6f, 0xe2, 0xc9, 0x14, 0x58, 0x14, 0xca, 0x75, 0x0a, 0x42, 0x5a, 0x28, 0x88, 0x83, + 0x9d, 0x49, 0x04, 0xbf, 0x8d, 0x16, 0x12, 0x84, 0xda, 0x7f, 0x66, 0xe0, 0x0c, 0x9d, 0x74, 0x3d, + 0xcf, 0xf7, 0xf5, 0xc9, 0xf8, 0xc8, 0xeb, 0x8f, 0x39, 0x1b, 0x46, 0x5e, 0x85, 0x85, 0xa3, 0x27, + 0x53, 0x39, 0x32, 0x72, 0x42, 0x00, 0x37, 0x72, 0x61, 0x68, 0x4f, 0xff, 0x93, 0xcb, 0x20, 0x87, + 0x1b, 0xce, 0x22, 0xe0, 0x61, 0x66, 0x53, 0xb1, 0x96, 0x87, 0x41, 0x64, 0xd0, 0xd7, 0x60, 0x1e, + 0xd5, 0x0c, 0x7c, 0x4b, 0x15, 0xac, 0x70, 0x7a, 0xeb, 0x50, 0x09, 0x61, 0xb1, 0x02, 0xe4, 0x25, + 0x80, 0x10, 0x2b, 0x9e, 0xef, 0x99, 0x42, 0xfc, 0x0e, 0xe0, 0xe2, 0xad, 0xe5, 0xe3, 0x83, 0x36, + 0x07, 0x60, 0x2f, 0xc0, 0x86, 0xe8, 0x96, 0xa1, 0xc0, 0x49, 0xe3, 0xb7, 0x61, 0xeb, 0x2c, 0xc3, + 0x1c, 0x0a, 0xac, 0xb4, 0xab, 0x89, 0x90, 0xa9, 0x08, 0x97, 0x1a, 0x8b, 0x8b, 0x7a, 0x35, 0x11, + 0x17, 0x75, 0x89, 0x51, 0xc9, 0xc1, 0x4f, 0xb5, 0x7f, 0xcb, 0xc0, 0xf2, 0x1e, 0x65, 0x56, 0x50, + 0x04, 0x9f, 0x2d, 0xd2, 0xdf, 0x81, 0x7c, 0x75, 0xd0, 0xe6, 0xd7, 0x0e, 0xdc, 0x3e, 0x9d, 0x79, + 0x79, 0xf6, 0x06, 0x6d, 0x71, 0x83, 0xe1, 0x5b, 0x32, 0xd1, 0x63, 0x3c, 0x54, 0xef, 0xc1, 0x02, + 0xbb, 0x06, 0xe2, 0xda, 0x25, 0xc1, 0xae, 0x06, 0x2d, 0x7a, 0x91, 0x65, 0x4b, 0x9a, 0x72, 0x76, + 0x95, 0x24, 0xf3, 0x4e, 0x1c, 0xf5, 0x51, 0x52, 0x38, 0xcc, 0x9f, 0x4c, 0xe1, 0x20, 0xa1, 0x5b, + 0x2d, 0x9c, 0x04, 0xdd, 0xea, 0xdc, 0x5d, 0xc8, 0x4b, 0xed, 0x79, 0x22, 0xee, 0xf5, 0x37, 0x33, + 0xb0, 0x8a, 0x5f, 0x15, 0xd8, 0x84, 0xfc, 0x7c, 0xaa, 0x4f, 0x5e, 0x8f, 0xa8, 0x4f, 0x36, 0xe5, + 0xf1, 0x62, 0x5f, 0x36, 0x43, 0x6f, 0x72, 0x0f, 0x36, 0x12, 0x84, 0xe4, 0x15, 0x98, 0xa7, 0xcd, + 0x17, 0xe2, 0xa6, 0x1a, 0x9f, 0x01, 0x21, 0x12, 0x2a, 0xfd, 0x70, 0xdf, 0x62, 0xd4, 0xda, 0xff, + 0x28, 0xb0, 0xc2, 0x03, 0x11, 0xf4, 0x0f, 0x06, 0x8f, 0xed, 0xce, 0xeb, 0xf1, 0xee, 0x64, 0x78, + 0x0b, 0xbc, 0x3b, 0xff, 0xaf, 0x3b, 0xf1, 0x6e, 0xa4, 0x13, 0xcf, 0x06, 0xb8, 0x68, 0xe2, 0x73, + 0x66, 0xf4, 0xe1, 0xdf, 0x21, 0x52, 0x68, 0x94, 0x90, 0x7c, 0x1d, 0x96, 0xeb, 0xde, 0xc3, 0x88, + 0xd4, 0x76, 0x7d, 0x4a, 0xa5, 0x2f, 0x06, 0x84, 0x6c, 0x4d, 0xe1, 0x81, 0xd7, 0xf7, 0x1e, 0xba, + 0x89, 0x1b, 0xa8, 0xb0, 0x4a, 0x2a, 0xb8, 0x45, 0x8b, 0x3d, 0xc9, 0xd4, 0xe7, 0xce, 0x72, 0x08, + 0x21, 0xf2, 0x9d, 0x2c, 0x40, 0xe8, 0x67, 0x44, 0x17, 0x60, 0xe4, 0xf2, 0x5d, 0x28, 0xbc, 0x31, + 0x49, 0x9e, 0xe3, 0xe2, 0x4e, 0xfe, 0x3a, 0x57, 0xcc, 0x66, 0xa6, 0xe3, 0xd6, 0xa1, 0x8a, 0xb6, + 0xc8, 0x1d, 0x5b, 0x3a, 0x5e, 0xaf, 0xcd, 0xf6, 0xf6, 0xec, 0xf6, 0x55, 0x84, 0x29, 0x0d, 0x52, + 0xa7, 0x44, 0x94, 0x45, 0xf7, 0x97, 0x12, 0x25, 0x48, 0xf8, 0xee, 0xe5, 0x9e, 0xcc, 0x77, 0xaf, + 0x09, 0xcb, 0xdd, 0xfe, 0x7b, 0x5e, 0x7f, 0x3c, 0x18, 0x3d, 0x42, 0x6d, 0x74, 0xa8, 0xe6, 0xa2, + 0x5d, 0x60, 0x8a, 0x3c, 0x36, 0x0e, 0x78, 0x30, 0x06, 0xf4, 0xf2, 0x30, 0x04, 0x89, 0x81, 0xef, + 0xe1, 0xbc, 0xba, 0x70, 0x2f, 0xb7, 0xb4, 0xa0, 0x2e, 0xde, 0xcb, 0x2d, 0x2d, 0xa9, 0xcb, 0xf7, + 0x72, 0x4b, 0xcb, 0x2a, 0x58, 0xd2, 0xfd, 0x4e, 0x70, 0x7f, 0x23, 0x5d, 0xb9, 0x44, 0xaf, 0x53, + 0xb4, 0x9f, 0x66, 0x80, 0x24, 0x9b, 0x41, 0x5e, 0x87, 0x3c, 0xdb, 0x60, 0xdd, 0x91, 0xff, 0x4d, + 0x6e, 0xdc, 0xcc, 0x80, 0x58, 0xa4, 0x64, 0x19, 0x88, 0x85, 0x25, 0x5b, 0xfe, 0x37, 0x7b, 0xe4, + 0x6b, 0x70, 0x0a, 0xbb, 0x77, 0xe8, 0x8d, 0xba, 0x83, 0x8e, 0x8b, 0xa8, 0x99, 0xed, 0x1e, 0x8f, + 0xfe, 0xf6, 0x02, 0x86, 0x29, 0x4d, 0x66, 0x4f, 0x19, 0x06, 0x74, 0x27, 0x6a, 0x22, 0x65, 0x93, + 0x11, 0x12, 0x07, 0x54, 0xb9, 0xfc, 0xc1, 0xa4, 0xd7, 0xe3, 0x23, 0x5b, 0xa0, 0x82, 0x6e, 0x3c, + 0x6f, 0x4a, 0xc5, 0x6b, 0x61, 0xc5, 0xe5, 0x49, 0xaf, 0x47, 0x5e, 0x05, 0x18, 0xf4, 0xdd, 0xe3, + 0xae, 0xef, 0xb3, 0x3b, 0x8e, 0xc0, 0xf3, 0x31, 0x4c, 0x95, 0x07, 0x63, 0xd0, 0xaf, 0xb1, 0x44, + 0xf2, 0x4b, 0x80, 0xfe, 0xdb, 0x08, 0x6c, 0xc0, 0xac, 0x5a, 0x78, 0x3c, 0x07, 0x91, 0x18, 0x75, + 0xb4, 0x3c, 0xf4, 0xec, 0xee, 0xfb, 0xc2, 0xb0, 0xfc, 0x6d, 0xd8, 0xe0, 0xf6, 0xa4, 0x7b, 0xdd, + 0xf1, 0x11, 0xe7, 0xb0, 0x9f, 0x86, 0x3d, 0x97, 0x58, 0xec, 0x7f, 0xce, 0x01, 0xe8, 0x7b, 0xb6, + 0xc0, 0x0c, 0xba, 0x09, 0xf3, 0x54, 0x6e, 0x10, 0xfa, 0x07, 0xd4, 0xde, 0x62, 0xbd, 0xb2, 0xf6, + 0x16, 0x29, 0xe8, 0x6a, 0xb4, 0xd0, 0xb8, 0x5f, 0xe8, 0x1e, 0x70, 0x35, 0x32, 0x7b, 0xff, 0x08, + 0x66, 0x2b, 0xa7, 0x22, 0x55, 0x80, 0x10, 0xc5, 0x87, 0x4b, 0xb2, 0x1b, 0x21, 0x1c, 0x06, 0xcf, + 0xe0, 0xb8, 0xf1, 0x21, 0x12, 0x90, 0x3c, 0x7d, 0x42, 0x32, 0x72, 0x1f, 0x72, 0x4e, 0x3b, 0xf0, + 0xeb, 0x9b, 0x82, 0x6d, 0xf4, 0x1c, 0x8f, 0xce, 0x17, 0xe2, 0x1b, 0xad, 0x8d, 0xdb, 0x91, 0x20, + 0xa6, 0x58, 0x09, 0x31, 0x60, 0x81, 0x47, 0x5e, 0x9e, 0x82, 0x89, 0xc7, 0x03, 0x2f, 0x73, 0x24, + 0x5c, 0x4c, 0x94, 0x79, 0x0a, 0x1e, 0x63, 0xf9, 0x0e, 0x64, 0x6d, 0xbb, 0xc6, 0x3d, 0xfa, 0x57, + 0x43, 0xa9, 0xc4, 0xb6, 0x6b, 0xec, 0x8e, 0xd2, 0xf7, 0x8f, 0xa5, 0x62, 0x94, 0x98, 0x7c, 0x11, + 0xf2, 0x12, 0xfb, 0xcc, 0xb1, 0x30, 0xb0, 0x0f, 0x24, 0xdf, 0x0a, 0x79, 0xd3, 0x90, 0xa8, 0x49, + 0x15, 0xd4, 0xfb, 0x93, 0x77, 0x3d, 0x7d, 0x38, 0x44, 0x97, 0xaa, 0xf7, 0xbc, 0x11, 0x63, 0xdb, + 0x96, 0x42, 0x10, 0x59, 0xf4, 0x48, 0xeb, 0x88, 0x5c, 0x59, 0x07, 0x13, 0x2f, 0x49, 0x9a, 0xb0, + 0x61, 0x7b, 0xe3, 0xc9, 0x90, 0xd9, 0x69, 0x94, 0x07, 0x23, 0x2a, 0x84, 0x30, 0xe4, 0x0c, 0xc4, + 0xdb, 0xf4, 0x69, 0xa6, 0x30, 0x8e, 0x39, 0x18, 0x8c, 0x62, 0x02, 0x49, 0xb2, 0xb0, 0xe6, 0xc9, + 0x43, 0x4e, 0x4f, 0xd5, 0xa8, 0x68, 0x83, 0xa7, 0xaa, 0x10, 0x6d, 0x42, 0x81, 0xe6, 0xa5, 0x14, + 0x74, 0x27, 0xbc, 0x30, 0x93, 0xd0, 0x9d, 0x22, 0x98, 0x4e, 0x1f, 0xe4, 0x24, 0x80, 0x41, 0x3e, + 0x16, 0x6f, 0x00, 0xdc, 0x1b, 0x74, 0xfb, 0x35, 0x6f, 0x7c, 0x34, 0xe8, 0x48, 0x20, 0x53, 0xf9, + 0x5f, 0x1d, 0x74, 0xfb, 0xee, 0x31, 0x26, 0xff, 0xf4, 0xa3, 0x4b, 0x12, 0x91, 0x25, 0xfd, 0x27, + 0x9f, 0x83, 0x65, 0xfa, 0xe4, 0x84, 0xd6, 0x26, 0x4c, 0x55, 0x89, 0xa5, 0x19, 0x0c, 0x7f, 0x48, + 0x40, 0xee, 0x62, 0xe0, 0x89, 0xee, 0x70, 0x2c, 0x31, 0xaf, 0x22, 0xca, 0x44, 0x77, 0x38, 0x8e, + 0x63, 0xc6, 0x4a, 0xc4, 0xa4, 0x12, 0x34, 0x5d, 0xc4, 0x8a, 0xe1, 0xf1, 0x2d, 0x50, 0x1f, 0xc7, + 0xe7, 0x9a, 0x2b, 0xc0, 0x2a, 0xe5, 0xa8, 0x9e, 0xb1, 0x62, 0xd8, 0x08, 0xbb, 0x52, 0x62, 0x17, + 0x28, 0x9c, 0xa9, 0x65, 0x8d, 0xf0, 0x8f, 0x3a, 0xee, 0x3e, 0x26, 0x47, 0x1a, 0x11, 0x10, 0x93, + 0x6d, 0x58, 0x67, 0x3c, 0x7e, 0x10, 0x73, 0x8e, 0xb3, 0xb8, 0xb8, 0xb7, 0x85, 0x41, 0xe9, 0xe4, + 0xd7, 0xc7, 0x0a, 0x90, 0x32, 0xcc, 0xa3, 0x40, 0xc8, 0xad, 0xc5, 0xb7, 0x64, 0xe9, 0x39, 0xbe, + 0x8e, 0x70, 0x5f, 0x41, 0xb9, 0x59, 0xde, 0x57, 0x90, 0x94, 0x7c, 0x05, 0xc0, 0xe8, 0x8f, 0x06, + 0xbd, 0x1e, 0xc2, 0xa9, 0x2e, 0xa1, 0x28, 0x75, 0x21, 0xba, 0x1e, 0xb1, 0x96, 0x90, 0x88, 0x43, + 0x7f, 0xe1, 0xb3, 0x1b, 0x03, 0x5d, 0x95, 0xea, 0xd2, 0x4c, 0x58, 0x60, 0x8b, 0x11, 0xa1, 0x89, + 0x79, 0xb0, 0x05, 0x09, 0xd8, 0x96, 0x41, 0x13, 0xf3, 0xf4, 0x24, 0x34, 0xb1, 0x54, 0x40, 0xbb, + 0x0f, 0xa7, 0xd3, 0x3e, 0x2c, 0x22, 0xc2, 0x2a, 0x27, 0x15, 0x61, 0xff, 0x22, 0x0b, 0x2b, 0x58, + 0x9b, 0xd8, 0x85, 0x75, 0x58, 0xb5, 0x27, 0xef, 0x06, 0xb8, 0x3d, 0x62, 0x37, 0xc6, 0xf6, 0xf9, + 0x72, 0x86, 0x7c, 0xb5, 0x15, 0x29, 0x41, 0x0c, 0x58, 0x13, 0x27, 0xc1, 0x8e, 0xb0, 0x40, 0x0f, + 0x50, 0x81, 0x05, 0xf6, 0x5c, 0x32, 0xe6, 0x66, 0xac, 0x50, 0x78, 0x1e, 0x64, 0x9f, 0xe4, 0x3c, + 0xc8, 0x9d, 0xe8, 0x3c, 0x78, 0x07, 0x56, 0xc4, 0xdb, 0x70, 0x27, 0x9f, 0x7f, 0xba, 0x9d, 0x3c, + 0x52, 0x19, 0xa9, 0x06, 0x3b, 0xfa, 0xc2, 0xcc, 0x1d, 0x1d, 0xef, 0x0b, 0xc5, 0x2a, 0x4b, 0x84, + 0xd1, 0xe7, 0x75, 0x60, 0x50, 0xba, 0x9d, 0x62, 0xf3, 0x13, 0x9c, 0x92, 0xaf, 0xc0, 0x72, 0x75, + 0x20, 0xae, 0x8a, 0x24, 0x1d, 0x7d, 0x4f, 0x24, 0xca, 0xec, 0x42, 0x40, 0x19, 0x9c, 0x6e, 0xd9, + 0x4f, 0xe3, 0x74, 0xbb, 0x0b, 0xc0, 0x5d, 0x1b, 0xc2, 0x60, 0x52, 0xb8, 0x64, 0x04, 0xda, 0x41, + 0xf4, 0xaa, 0x40, 0x22, 0xa6, 0xbb, 0x13, 0xb7, 0x42, 0xd1, 0xf7, 0xf7, 0x07, 0x93, 0xfe, 0x38, + 0x12, 0x7d, 0x55, 0xf8, 0xcb, 0xb5, 0x79, 0x9e, 0xbc, 0x3d, 0xc4, 0x8a, 0x7d, 0xba, 0x03, 0x42, + 0xde, 0x0a, 0x8c, 0xe8, 0x16, 0x67, 0xf5, 0x90, 0x96, 0xe8, 0xa1, 0xa9, 0xa6, 0x73, 0xda, 0x0f, + 0x15, 0x19, 0x92, 0xfd, 0x13, 0x0c, 0xf5, 0x6b, 0x00, 0xc1, 0x5d, 0xbd, 0x18, 0x6b, 0x26, 0x2f, + 0x05, 0xa9, 0x72, 0x2f, 0x87, 0xb4, 0xd2, 0xd7, 0x64, 0x3f, 0xad, 0xaf, 0x71, 0x20, 0xdf, 0xf8, + 0xc6, 0xb8, 0x1d, 0x1a, 0x77, 0x80, 0x1d, 0x70, 0xb2, 0xb8, 0x33, 0x65, 0xb7, 0xaf, 0xe1, 0xd9, + 0x10, 0xf2, 0xc1, 0x53, 0x58, 0x60, 0xa9, 0xa0, 0xf6, 0x16, 0xac, 0xcb, 0x3e, 0xbe, 0x8f, 0xfa, + 0xfb, 0xe4, 0x4b, 0x0c, 0x20, 0x52, 0x89, 0x48, 0x2c, 0x12, 0x11, 0xdd, 0x71, 0x1f, 0xf5, 0xf7, + 0x19, 0xff, 0xd3, 0x7e, 0x28, 0xb7, 0x15, 0x65, 0xbc, 0x1f, 0x2b, 0x40, 0x92, 0xe4, 0xf2, 0x6e, + 0xa2, 0xfc, 0x3f, 0x70, 0x97, 0x31, 0xae, 0x2c, 0xf7, 0x24, 0x5c, 0x59, 0xe1, 0x0f, 0x15, 0x58, + 0x37, 0xf5, 0x1a, 0xc7, 0x4f, 0x67, 0x77, 0x0e, 0x97, 0xe1, 0x82, 0xa9, 0xd7, 0xdc, 0x66, 0xa3, + 0x6a, 0x16, 0x1f, 0xb8, 0xa9, 0xb0, 0xa8, 0x17, 0xe0, 0xd9, 0x24, 0x49, 0x78, 0x37, 0x71, 0x1e, + 0x36, 0x93, 0xd9, 0x02, 0x3a, 0x35, 0xbd, 0xb0, 0x40, 0x59, 0xcd, 0x16, 0xde, 0x84, 0x75, 0x01, + 0x13, 0xea, 0x54, 0x6d, 0x04, 0x22, 0x5f, 0x87, 0xfc, 0xae, 0x61, 0x99, 0xe5, 0x07, 0x6e, 0xb9, + 0x55, 0xad, 0xaa, 0x73, 0x64, 0x15, 0x96, 0x79, 0x42, 0x51, 0x57, 0x15, 0xb2, 0x02, 0x4b, 0x66, + 0xdd, 0x36, 0x8a, 0x2d, 0xcb, 0x50, 0x33, 0x85, 0x37, 0x61, 0xad, 0x39, 0xea, 0xbe, 0xd7, 0x1e, + 0x7b, 0xf7, 0xbd, 0x47, 0x78, 0xb5, 0xb0, 0x08, 0x59, 0x4b, 0xdf, 0x53, 0xe7, 0x08, 0xc0, 0x42, + 0xf3, 0x7e, 0xd1, 0xbe, 0x7d, 0x5b, 0x55, 0x48, 0x1e, 0x16, 0x77, 0x8a, 0x4d, 0xf7, 0x7e, 0xcd, + 0x56, 0x33, 0xf4, 0x41, 0xdf, 0xb3, 0xf1, 0x21, 0x5b, 0xf8, 0x3c, 0x6c, 0x20, 0xaf, 0x50, 0xed, + 0xfa, 0x63, 0xaf, 0xef, 0x8d, 0xb0, 0x0d, 0x2b, 0xb0, 0x64, 0x7b, 0x74, 0x91, 0x8f, 0x3d, 0xd6, + 0x80, 0xda, 0xa4, 0x37, 0xee, 0x0e, 0x7b, 0xde, 0xb7, 0x54, 0xa5, 0x70, 0x17, 0xd6, 0xad, 0xc1, + 0x64, 0xdc, 0xed, 0x1f, 0xda, 0x63, 0x4a, 0x71, 0xf8, 0x88, 0x3c, 0x03, 0x1b, 0xad, 0xba, 0x5e, + 0xdb, 0x36, 0x77, 0x5a, 0x8d, 0x96, 0xed, 0xd6, 0x74, 0xa7, 0x58, 0x61, 0x17, 0x1b, 0xb5, 0x86, + 0xed, 0xb8, 0x96, 0x51, 0x34, 0xea, 0x8e, 0xaa, 0x14, 0xbe, 0x8b, 0x6a, 0x8f, 0xfd, 0x41, 0xbf, + 0x53, 0x6e, 0x63, 0x60, 0x7a, 0xda, 0x60, 0x0d, 0x2e, 0xda, 0x46, 0xb1, 0x51, 0x2f, 0xb9, 0x65, + 0xbd, 0xe8, 0x34, 0xac, 0x34, 0x5c, 0xde, 0x73, 0x70, 0x26, 0x85, 0xa6, 0xe1, 0x34, 0x55, 0x85, + 0x5c, 0x82, 0xad, 0x94, 0xbc, 0x3d, 0x63, 0x5b, 0x6f, 0x39, 0x95, 0xba, 0x9a, 0x99, 0x52, 0xd8, + 0xb6, 0x1b, 0x6a, 0xb6, 0xf0, 0xbb, 0x0a, 0xac, 0xb5, 0x7c, 0x6e, 0x55, 0xdc, 0x42, 0xdf, 0xc0, + 0xe7, 0xe0, 0x7c, 0xcb, 0x36, 0x2c, 0xd7, 0x69, 0xdc, 0x37, 0xea, 0x6e, 0xcb, 0xd6, 0x77, 0xe2, + 0xad, 0xb9, 0x04, 0x5b, 0x12, 0x85, 0x65, 0x14, 0x1b, 0xbb, 0x86, 0xe5, 0x36, 0x75, 0xdb, 0xde, + 0x6b, 0x58, 0x25, 0x55, 0xa1, 0x6f, 0x4c, 0x21, 0xa8, 0x95, 0x75, 0xd6, 0x9a, 0x48, 0x5e, 0xdd, + 0xd8, 0xd3, 0xab, 0xee, 0x76, 0xc3, 0x51, 0xb3, 0x85, 0x1a, 0x3d, 0x7a, 0x11, 0x1d, 0x93, 0xd9, + 0xc2, 0x2d, 0x41, 0xae, 0xde, 0xa8, 0x1b, 0xf1, 0xeb, 0xb0, 0x15, 0x58, 0xd2, 0x9b, 0x4d, 0xab, + 0xb1, 0x8b, 0x53, 0x0c, 0x60, 0xa1, 0x64, 0xd4, 0x69, 0xcb, 0xb2, 0x34, 0xa7, 0x69, 0x35, 0x6a, + 0x0d, 0xc7, 0x28, 0xa9, 0xb9, 0x82, 0x25, 0x96, 0xb0, 0xa8, 0x74, 0x7f, 0xc0, 0xee, 0x9e, 0x4a, + 0x46, 0x59, 0x6f, 0x55, 0x1d, 0x3e, 0x44, 0x0f, 0x5c, 0xcb, 0x78, 0xab, 0x65, 0xd8, 0x8e, 0xad, + 0x2a, 0x44, 0x85, 0x95, 0xba, 0x61, 0x94, 0x6c, 0xd7, 0x32, 0x76, 0x4d, 0x63, 0x4f, 0xcd, 0xd0, + 0x3a, 0xd9, 0x7f, 0xfa, 0x86, 0xc2, 0x07, 0x0a, 0x10, 0x86, 0x2c, 0x2a, 0xc2, 0x55, 0xe0, 0x8c, + 0xb9, 0x08, 0xe7, 0x2a, 0x74, 0xa8, 0xf1, 0xd3, 0x6a, 0x8d, 0x52, 0xbc, 0xcb, 0xce, 0x00, 0x89, + 0xe5, 0x37, 0xca, 0x65, 0x55, 0x21, 0x5b, 0x70, 0x2a, 0x96, 0x5e, 0xb2, 0x1a, 0x4d, 0x35, 0x73, + 0x2e, 0xb3, 0xa4, 0x90, 0xb3, 0x89, 0xcc, 0xfb, 0x86, 0xd1, 0x54, 0xb3, 0x74, 0x88, 0x62, 0x19, + 0x62, 0x49, 0xb0, 0xe2, 0xb9, 0xc2, 0xb7, 0x15, 0x38, 0xc3, 0x9a, 0x29, 0xd6, 0x57, 0xd0, 0xd4, + 0xf3, 0xb0, 0xc9, 0xf1, 0x92, 0xd3, 0x1a, 0x7a, 0x1a, 0xd4, 0x48, 0x2e, 0x6b, 0xe6, 0x33, 0xb0, + 0x11, 0x49, 0xc5, 0x76, 0x64, 0xe8, 0xee, 0x11, 0x49, 0xde, 0x36, 0x6c, 0xc7, 0x35, 0xca, 0xe5, + 0x86, 0xe5, 0xb0, 0x86, 0x64, 0x0b, 0x1a, 0x6c, 0x14, 0xbd, 0xd1, 0x98, 0x4a, 0x45, 0x7d, 0xbf, + 0x3b, 0xe8, 0x63, 0x13, 0x56, 0x61, 0xd9, 0xf8, 0x8a, 0x63, 0xd4, 0x6d, 0xb3, 0x51, 0x57, 0xe7, + 0x0a, 0xe7, 0x63, 0x34, 0x62, 0x1d, 0xdb, 0x76, 0x45, 0x9d, 0x2b, 0xb4, 0x61, 0x55, 0xd8, 0xef, + 0xb2, 0x59, 0x71, 0x11, 0xce, 0x89, 0xb9, 0x86, 0x3b, 0x4a, 0xfc, 0x13, 0x36, 0xe1, 0x74, 0x32, + 0xdf, 0x70, 0x54, 0x85, 0x8e, 0x42, 0x2c, 0x87, 0xa6, 0x67, 0x0a, 0xbf, 0xad, 0xc0, 0x6a, 0x70, + 0x9f, 0x81, 0x1a, 0xd4, 0x4b, 0xb0, 0x55, 0x2b, 0xeb, 0x6e, 0xc9, 0xd8, 0x35, 0x8b, 0x86, 0x7b, + 0xdf, 0xac, 0x97, 0x62, 0x2f, 0x79, 0x16, 0x9e, 0x49, 0x21, 0xc0, 0xb7, 0x6c, 0xc2, 0xe9, 0x78, + 0x96, 0x43, 0x97, 0x6a, 0x86, 0x76, 0x7d, 0x3c, 0x27, 0x58, 0xa7, 0xd9, 0xc2, 0x9f, 0x2b, 0xb0, + 0xc9, 0xe3, 0x81, 0xf3, 0x9b, 0x15, 0x16, 0x28, 0x02, 0x91, 0x54, 0x0b, 0x70, 0xdd, 0xb1, 0x5a, + 0xb6, 0x63, 0x94, 0x44, 0x71, 0x3a, 0x69, 0x4d, 0xcb, 0xa8, 0x19, 0x75, 0x27, 0xd6, 0xb6, 0x5b, + 0xf0, 0xfc, 0x0c, 0xda, 0x7a, 0xc3, 0x11, 0xcf, 0x74, 0xad, 0x3e, 0x0f, 0x57, 0x66, 0x10, 0x07, + 0x84, 0x99, 0xc2, 0x2e, 0xac, 0xd9, 0x7a, 0xad, 0x5a, 0x1e, 0x8c, 0xf6, 0x3d, 0x7d, 0x32, 0x3e, + 0xea, 0x93, 0x2d, 0x38, 0x5b, 0x6e, 0x58, 0x45, 0xc3, 0xc5, 0x2f, 0x88, 0x35, 0xe2, 0x14, 0xac, + 0xcb, 0x99, 0x0f, 0x0c, 0xba, 0xba, 0x08, 0xac, 0xc9, 0x89, 0xf5, 0x86, 0x9a, 0x29, 0x7c, 0x15, + 0x56, 0x22, 0x41, 0xb5, 0xce, 0xc2, 0x29, 0xf9, 0xb9, 0xe9, 0xf5, 0x3b, 0xdd, 0xfe, 0xa1, 0x3a, + 0x17, 0xcf, 0xb0, 0x26, 0xfd, 0x3e, 0xcd, 0xc0, 0xed, 0x46, 0xce, 0x70, 0xbc, 0xd1, 0x71, 0xb7, + 0xdf, 0x1e, 0x7b, 0x1d, 0x35, 0x53, 0x78, 0x11, 0x56, 0x23, 0x50, 0xbe, 0x74, 0x5e, 0x55, 0x1b, + 0xfc, 0x7c, 0xa8, 0x19, 0x25, 0xb3, 0x55, 0x53, 0xe7, 0xe9, 0x46, 0x53, 0x31, 0x77, 0x2a, 0x2a, + 0x14, 0xbe, 0xa7, 0x50, 0x09, 0x05, 0xfb, 0xbd, 0x56, 0xd6, 0xc5, 0x4c, 0xa4, 0xab, 0x80, 0x01, + 0x84, 0x1b, 0xb6, 0xcd, 0x2e, 0xa9, 0xcf, 0xc3, 0x26, 0x7f, 0x70, 0xf5, 0x7a, 0xc9, 0xad, 0xe8, + 0x56, 0x69, 0x4f, 0xb7, 0xe8, 0xd2, 0x78, 0xa0, 0x66, 0x70, 0xbd, 0x4b, 0x29, 0xae, 0xd3, 0x68, + 0x15, 0x2b, 0x6a, 0x96, 0x2e, 0xaf, 0x48, 0x7a, 0xd3, 0xac, 0xab, 0x39, 0xdc, 0x3d, 0x12, 0xd4, + 0x58, 0x2d, 0xcd, 0x9f, 0x2f, 0x7c, 0xac, 0xc0, 0x59, 0xbb, 0x7b, 0xd8, 0x6f, 0x8f, 0x27, 0x23, + 0x4f, 0xef, 0x1d, 0x0e, 0x46, 0xdd, 0xf1, 0xd1, 0xb1, 0x3d, 0xe9, 0x8e, 0x3d, 0x72, 0x13, 0xae, + 0xd9, 0xe6, 0x4e, 0x5d, 0x77, 0xe8, 0xea, 0xd7, 0xab, 0x3b, 0x0d, 0xcb, 0x74, 0x2a, 0x35, 0xd7, + 0x6e, 0x99, 0x89, 0x85, 0x71, 0x15, 0x9e, 0x9b, 0x4e, 0x5a, 0x35, 0x76, 0xf4, 0xe2, 0x03, 0x55, + 0x99, 0x5d, 0xe1, 0xb6, 0x5e, 0xd5, 0xeb, 0x45, 0xa3, 0xe4, 0xee, 0xde, 0x56, 0x33, 0xe4, 0x1a, + 0x5c, 0x9e, 0x4e, 0x5a, 0x36, 0x9b, 0x36, 0x25, 0xcb, 0xce, 0x7e, 0x6f, 0xc5, 0xae, 0x51, 0xaa, + 0x5c, 0xe1, 0xcf, 0x14, 0xd8, 0x9c, 0x86, 0x04, 0x43, 0xae, 0x83, 0x66, 0xd4, 0x1d, 0x4b, 0x37, + 0x4b, 0x6e, 0xd1, 0x32, 0x4a, 0x46, 0xdd, 0x31, 0xf5, 0xaa, 0xed, 0xda, 0x8d, 0x16, 0x9d, 0x4d, + 0xa1, 0x2d, 0xc1, 0x15, 0xb8, 0x34, 0x83, 0xae, 0x61, 0x96, 0x8a, 0xaa, 0x42, 0x6e, 0xc3, 0x0b, + 0x33, 0x88, 0xec, 0x07, 0xb6, 0x63, 0xd4, 0xe4, 0x1c, 0x35, 0x53, 0xe8, 0x82, 0x1a, 0xf7, 0xb7, + 0x4f, 0xd8, 0x6b, 0x58, 0xad, 0x7a, 0x9d, 0x1d, 0x50, 0xeb, 0x90, 0x6f, 0x38, 0x15, 0xc3, 0xe2, + 0x20, 0xfa, 0x88, 0x9a, 0xdf, 0xaa, 0xd3, 0x39, 0xdf, 0xb0, 0xcc, 0xb7, 0xf1, 0xa4, 0xda, 0x84, + 0xd3, 0x76, 0x55, 0x2f, 0xde, 0xc7, 0xe5, 0x68, 0xd6, 0xdd, 0x62, 0x45, 0xaf, 0xd7, 0x8d, 0xaa, + 0x0a, 0xd8, 0x0f, 0xd3, 0x1c, 0xf3, 0xc8, 0xe7, 0xe0, 0x46, 0xe3, 0xbe, 0xa3, 0xbb, 0xcd, 0x6a, + 0x6b, 0xc7, 0xac, 0xbb, 0xf6, 0x83, 0x7a, 0x51, 0x70, 0x55, 0xc5, 0xe4, 0x66, 0x7e, 0x03, 0xae, + 0xce, 0xa4, 0x0e, 0xe1, 0xee, 0xaf, 0x83, 0x36, 0x93, 0x92, 0x7f, 0x48, 0xe1, 0x47, 0x0a, 0x6c, + 0xcd, 0xb8, 0x38, 0x26, 0x2f, 0xc0, 0xcd, 0x8a, 0xa1, 0x97, 0xaa, 0x86, 0x6d, 0xe3, 0x1a, 0xa7, + 0x3d, 0xc8, 0xec, 0x3a, 0x52, 0xb7, 0xea, 0x9b, 0x70, 0x6d, 0x36, 0x79, 0x78, 0xe8, 0xdf, 0x80, + 0xab, 0xb3, 0x49, 0x39, 0x13, 0x90, 0xa1, 0x5b, 0xe5, 0x6c, 0xca, 0x80, 0x79, 0xc8, 0x16, 0x7e, + 0x5f, 0x81, 0x33, 0xe9, 0xda, 0x1b, 0xda, 0x36, 0xb3, 0x6e, 0x3b, 0x7a, 0xb5, 0xea, 0x36, 0x75, + 0x4b, 0xaf, 0xb9, 0x46, 0xdd, 0x6a, 0x54, 0xab, 0x69, 0x87, 0xe6, 0x55, 0x78, 0x6e, 0x3a, 0xa9, + 0x5d, 0xb4, 0xcc, 0x26, 0x3d, 0x17, 0x34, 0xb8, 0x38, 0x9d, 0xca, 0x30, 0x8b, 0x86, 0x9a, 0xd9, + 0x7e, 0xe3, 0xc3, 0x7f, 0xbd, 0x38, 0xf7, 0xe1, 0xc7, 0x17, 0x95, 0x1f, 0x7f, 0x7c, 0x51, 0xf9, + 0x97, 0x8f, 0x2f, 0x2a, 0x6f, 0xdf, 0x3a, 0x59, 0xa4, 0x18, 0x94, 0x28, 0xde, 0x5d, 0x40, 0x43, + 0xa6, 0x97, 0xff, 0x37, 0x00, 0x00, 0xff, 0xff, 0x4e, 0x4e, 0x94, 0x33, 0x18, 0xad, 0x01, 0x00, } func (this *PluginSpecV1) Equal(that interface{}) bool { @@ -22965,6 +23176,30 @@ func (this *PluginSpecV1_AwsIc) Equal(that interface{}) bool { } return true } +func (this *PluginSpecV1_Email) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*PluginSpecV1_Email) + if !ok { + that2, ok := that.(PluginSpecV1_Email) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.Email.Equal(that1.Email) { + return false + } + return true +} func (this *PluginSlackAccessSettings) Equal(that interface{}) bool { if that == nil { return this == nil @@ -23723,6 +23958,153 @@ func (this *AWSICProvisioningSpec) Equal(that interface{}) bool { } return true } +func (this *PluginEmailSettings) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*PluginEmailSettings) + if !ok { + that2, ok := that.(PluginEmailSettings) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.Sender != that1.Sender { + return false + } + if this.FallbackRecipient != that1.FallbackRecipient { + return false + } + if that1.Spec == nil { + if this.Spec != nil { + return false + } + } else if this.Spec == nil { + return false + } else if !this.Spec.Equal(that1.Spec) { + return false + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (this *PluginEmailSettings_MailgunSpec) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*PluginEmailSettings_MailgunSpec) + if !ok { + that2, ok := that.(PluginEmailSettings_MailgunSpec) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.MailgunSpec.Equal(that1.MailgunSpec) { + return false + } + return true +} +func (this *PluginEmailSettings_SmtpSpec) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*PluginEmailSettings_SmtpSpec) + if !ok { + that2, ok := that.(PluginEmailSettings_SmtpSpec) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if !this.SmtpSpec.Equal(that1.SmtpSpec) { + return false + } + return true +} +func (this *MailgunSpec) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*MailgunSpec) + if !ok { + that2, ok := that.(MailgunSpec) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.Domain != that1.Domain { + return false + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} +func (this *SMTPSpec) Equal(that interface{}) bool { + if that == nil { + return this == nil + } + + that1, ok := that.(*SMTPSpec) + if !ok { + that2, ok := that.(SMTPSpec) + if ok { + that1 = &that2 + } else { + return false + } + } + if that1 == nil { + return this == nil + } else if this == nil { + return false + } + if this.Host != that1.Host { + return false + } + if this.Port != that1.Port { + return false + } + if this.StartTlsPolicy != that1.StartTlsPolicy { + return false + } + if !bytes.Equal(this.XXX_unrecognized, that1.XXX_unrecognized) { + return false + } + return true +} func (this *PluginStaticCredentialsRef) Equal(that interface{}) bool { if that == nil { return this == nil @@ -42780,6 +43162,29 @@ func (m *PluginSpecV1_AwsIc) MarshalToSizedBuffer(dAtA []byte) (int, error) { } return len(dAtA) - i, nil } +func (m *PluginSpecV1_Email) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PluginSpecV1_Email) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.Email != nil { + { + size, err := m.Email.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x8a + } + return len(dAtA) - i, nil +} func (m *PluginSlackAccessSettings) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -43885,6 +44290,178 @@ func (m *AWSICProvisioningSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } +func (m *PluginEmailSettings) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *PluginEmailSettings) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PluginEmailSettings) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if m.Spec != nil { + { + size := m.Spec.Size() + i -= size + if _, err := m.Spec.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + } + } + if len(m.FallbackRecipient) > 0 { + i -= len(m.FallbackRecipient) + copy(dAtA[i:], m.FallbackRecipient) + i = encodeVarintTypes(dAtA, i, uint64(len(m.FallbackRecipient))) + i-- + dAtA[i] = 0x12 + } + if len(m.Sender) > 0 { + i -= len(m.Sender) + copy(dAtA[i:], m.Sender) + i = encodeVarintTypes(dAtA, i, uint64(len(m.Sender))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *PluginEmailSettings_MailgunSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PluginEmailSettings_MailgunSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.MailgunSpec != nil { + { + size, err := m.MailgunSpec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + return len(dAtA) - i, nil +} +func (m *PluginEmailSettings_SmtpSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *PluginEmailSettings_SmtpSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.SmtpSpec != nil { + { + size, err := m.SmtpSpec.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + return len(dAtA) - i, nil +} +func (m *MailgunSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *MailgunSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *MailgunSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.Domain) > 0 { + i -= len(m.Domain) + copy(dAtA[i:], m.Domain) + i = encodeVarintTypes(dAtA, i, uint64(len(m.Domain))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *SMTPSpec) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *SMTPSpec) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *SMTPSpec) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.StartTlsPolicy) > 0 { + i -= len(m.StartTlsPolicy) + copy(dAtA[i:], m.StartTlsPolicy) + i = encodeVarintTypes(dAtA, i, uint64(len(m.StartTlsPolicy))) + i-- + dAtA[i] = 0x1a + } + if m.Port != 0 { + i = encodeVarintTypes(dAtA, i, uint64(m.Port)) + i-- + dAtA[i] = 0x10 + } + if len(m.Host) > 0 { + i -= len(m.Host) + copy(dAtA[i:], m.Host) + i = encodeVarintTypes(dAtA, i, uint64(len(m.Host))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *PluginBootstrapCredentialsV1) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -44106,12 +44683,12 @@ func (m *PluginStatusV1) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x32 } - n344, err344 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastSyncTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastSyncTime):]) - if err344 != nil { - return 0, err344 + n347, err347 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastSyncTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastSyncTime):]) + if err347 != nil { + return 0, err347 } - i -= n344 - i = encodeVarintTypes(dAtA, i, uint64(n344)) + i -= n347 + i = encodeVarintTypes(dAtA, i, uint64(n347)) i-- dAtA[i] = 0x1a if len(m.ErrorMessage) > 0 { @@ -44451,22 +45028,22 @@ func (m *PluginOktaStatusDetailsAppGroupSync) MarshalToSizedBuffer(dAtA []byte) dAtA[i] = 0x28 } if m.LastFailed != nil { - n353, err353 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastFailed, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastFailed):]) - if err353 != nil { - return 0, err353 + n356, err356 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastFailed, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastFailed):]) + if err356 != nil { + return 0, err356 } - i -= n353 - i = encodeVarintTypes(dAtA, i, uint64(n353)) + i -= n356 + i = encodeVarintTypes(dAtA, i, uint64(n356)) i-- dAtA[i] = 0x22 } if m.LastSuccessful != nil { - n354, err354 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastSuccessful, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastSuccessful):]) - if err354 != nil { - return 0, err354 + n357, err357 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastSuccessful, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastSuccessful):]) + if err357 != nil { + return 0, err357 } - i -= n354 - i = encodeVarintTypes(dAtA, i, uint64(n354)) + i -= n357 + i = encodeVarintTypes(dAtA, i, uint64(n357)) i-- dAtA[i] = 0x1a } @@ -44525,22 +45102,22 @@ func (m *PluginOktaStatusDetailsUsersSync) MarshalToSizedBuffer(dAtA []byte) (in dAtA[i] = 0x28 } if m.LastFailed != nil { - n355, err355 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastFailed, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastFailed):]) - if err355 != nil { - return 0, err355 + n358, err358 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastFailed, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastFailed):]) + if err358 != nil { + return 0, err358 } - i -= n355 - i = encodeVarintTypes(dAtA, i, uint64(n355)) + i -= n358 + i = encodeVarintTypes(dAtA, i, uint64(n358)) i-- dAtA[i] = 0x22 } if m.LastSuccessful != nil { - n356, err356 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastSuccessful, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastSuccessful):]) - if err356 != nil { - return 0, err356 + n359, err359 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastSuccessful, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastSuccessful):]) + if err359 != nil { + return 0, err359 } - i -= n356 - i = encodeVarintTypes(dAtA, i, uint64(n356)) + i -= n359 + i = encodeVarintTypes(dAtA, i, uint64(n359)) i-- dAtA[i] = 0x1a } @@ -44659,22 +45236,22 @@ func (m *PluginOktaStatusDetailsAccessListsSync) MarshalToSizedBuffer(dAtA []byt } } if m.LastFailed != nil { - n357, err357 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastFailed, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastFailed):]) - if err357 != nil { - return 0, err357 + n360, err360 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastFailed, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastFailed):]) + if err360 != nil { + return 0, err360 } - i -= n357 - i = encodeVarintTypes(dAtA, i, uint64(n357)) + i -= n360 + i = encodeVarintTypes(dAtA, i, uint64(n360)) i-- dAtA[i] = 0x22 } if m.LastSuccessful != nil { - n358, err358 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastSuccessful, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastSuccessful):]) - if err358 != nil { - return 0, err358 + n361, err361 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.LastSuccessful, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.LastSuccessful):]) + if err361 != nil { + return 0, err361 } - i -= n358 - i = encodeVarintTypes(dAtA, i, uint64(n358)) + i -= n361 + i = encodeVarintTypes(dAtA, i, uint64(n361)) i-- dAtA[i] = 0x1a } @@ -44840,12 +45417,12 @@ func (m *PluginOAuth2AccessTokenCredentials) MarshalToSizedBuffer(dAtA []byte) ( i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n363, err363 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) - if err363 != nil { - return 0, err363 + n366, err366 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) + if err366 != nil { + return 0, err366 } - i -= n363 - i = encodeVarintTypes(dAtA, i, uint64(n363)) + i -= n366 + i = encodeVarintTypes(dAtA, i, uint64(n366)) i-- dAtA[i] = 0x1a if len(m.RefreshToken) > 0 { @@ -45725,20 +46302,20 @@ func (m *ScheduledAgentUpgradeWindow) MarshalToSizedBuffer(dAtA []byte) (int, er i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n377, err377 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Stop, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Stop):]) - if err377 != nil { - return 0, err377 + n380, err380 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Stop, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Stop):]) + if err380 != nil { + return 0, err380 } - i -= n377 - i = encodeVarintTypes(dAtA, i, uint64(n377)) + i -= n380 + i = encodeVarintTypes(dAtA, i, uint64(n380)) i-- dAtA[i] = 0x12 - n378, err378 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Start, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Start):]) - if err378 != nil { - return 0, err378 + n381, err381 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Start, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Start):]) + if err381 != nil { + return 0, err381 } - i -= n378 - i = encodeVarintTypes(dAtA, i, uint64(n378)) + i -= n381 + i = encodeVarintTypes(dAtA, i, uint64(n381)) i-- dAtA[i] = 0xa return len(dAtA) - i, nil @@ -46165,12 +46742,12 @@ func (m *OktaAssignmentSpecV1) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x30 } - n385, err385 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastTransition, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastTransition):]) - if err385 != nil { - return 0, err385 + n388, err388 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastTransition, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastTransition):]) + if err388 != nil { + return 0, err388 } - i -= n385 - i = encodeVarintTypes(dAtA, i, uint64(n385)) + i -= n388 + i = encodeVarintTypes(dAtA, i, uint64(n388)) i-- dAtA[i] = 0x2a if m.Status != 0 { @@ -46178,12 +46755,12 @@ func (m *OktaAssignmentSpecV1) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x20 } - n386, err386 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CleanupTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CleanupTime):]) - if err386 != nil { - return 0, err386 + n389, err389 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.CleanupTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.CleanupTime):]) + if err389 != nil { + return 0, err389 } - i -= n386 - i = encodeVarintTypes(dAtA, i, uint64(n386)) + i -= n389 + i = encodeVarintTypes(dAtA, i, uint64(n389)) i-- dAtA[i] = 0x1a if len(m.Targets) > 0 { @@ -56250,6 +56827,18 @@ func (m *PluginSpecV1_AwsIc) Size() (n int) { } return n } +func (m *PluginSpecV1_Email) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Email != nil { + l = m.Email.Size() + n += 2 + l + sovTypes(uint64(l)) + } + return n +} func (m *PluginSlackAccessSettings) Size() (n int) { if m == nil { return 0 @@ -56773,6 +57362,92 @@ func (m *AWSICProvisioningSpec) Size() (n int) { return n } +func (m *PluginEmailSettings) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Sender) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + l = len(m.FallbackRecipient) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + if m.Spec != nil { + n += m.Spec.Size() + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *PluginEmailSettings_MailgunSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.MailgunSpec != nil { + l = m.MailgunSpec.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *PluginEmailSettings_SmtpSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.SmtpSpec != nil { + l = m.SmtpSpec.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} +func (m *MailgunSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Domain) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *SMTPSpec) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Host) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + if m.Port != 0 { + n += 1 + sovTypes(uint64(m.Port)) + } + l = len(m.StartTlsPolicy) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + func (m *PluginBootstrapCredentialsV1) Size() (n int) { if m == nil { return 0 @@ -114487,6 +115162,41 @@ func (m *PluginSpecV1) Unmarshal(dAtA []byte) error { } m.Settings = &PluginSpecV1_AwsIc{v} iNdEx = postIndex + case 17: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Email", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &PluginEmailSettings{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Settings = &PluginSpecV1_Email{v} + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipTypes(dAtA[iNdEx:]) @@ -116929,13 +117639,360 @@ func (m *PluginEntraIDAppSSOSettings) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.AppId = string(dAtA[iNdEx:postIndex]) + m.AppId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FederatedSsoV2", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FederatedSsoV2 = append(m.FederatedSsoV2[:0], dAtA[iNdEx:postIndex]...) + if m.FederatedSsoV2 == nil { + m.FederatedSsoV2 = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PluginSCIMSettings) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PluginSCIMSettings: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PluginSCIMSettings: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SamlConnectorName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + 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 ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SamlConnectorName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DefaultRole", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + 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 ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DefaultRole = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PluginDatadogAccessSettings) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PluginDatadogAccessSettings: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PluginDatadogAccessSettings: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ApiEndpoint", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + 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 ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ApiEndpoint = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FallbackRecipient", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + 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 ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FallbackRecipient = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *PluginAWSICSettings) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PluginAWSICSettings: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PluginAWSICSettings: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field IntegrationName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + 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 ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.IntegrationName = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FederatedSsoV2", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Region", wireType) } - var byteLen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTypes @@ -116945,80 +118002,95 @@ func (m *PluginEntraIDAppSSOSettings) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - byteLen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if byteLen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthTypes } - postIndex := iNdEx + byteLen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthTypes } if postIndex > l { return io.ErrUnexpectedEOF } - m.FederatedSsoV2 = append(m.FederatedSsoV2[:0], dAtA[iNdEx:postIndex]...) - if m.FederatedSsoV2 == nil { - m.FederatedSsoV2 = []byte{} - } + m.Region = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipTypes(dAtA[iNdEx:]) - if err != nil { - return err + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Arn", wireType) } - if (skippy < 0) || (iNdEx+skippy) < 0 { + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + 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 ErrInvalidLengthTypes } - if (iNdEx + skippy) > l { + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { return io.ErrUnexpectedEOF } - m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *PluginSCIMSettings) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes + m.Arn = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProvisioningSpec", wireType) } - if iNdEx >= l { + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break + if m.ProvisioningSpec == nil { + m.ProvisioningSpec = &AWSICProvisioningSpec{} } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: PluginSCIMSettings: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: PluginSCIMSettings: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + if err := m.ProvisioningSpec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SamlConnectorName", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AccessListDefaultOwners", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -117046,11 +118118,11 @@ func (m *PluginSCIMSettings) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.SamlConnectorName = string(dAtA[iNdEx:postIndex]) + m.AccessListDefaultOwners = append(m.AccessListDefaultOwners, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex - case 2: + case 6: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DefaultRole", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field SamlIdpServiceProviderName", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -117078,7 +118150,7 @@ func (m *PluginSCIMSettings) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.DefaultRole = string(dAtA[iNdEx:postIndex]) + m.SamlIdpServiceProviderName = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -117102,7 +118174,7 @@ func (m *PluginSCIMSettings) Unmarshal(dAtA []byte) error { } return nil } -func (m *PluginDatadogAccessSettings) Unmarshal(dAtA []byte) error { +func (m *AWSICProvisioningSpec) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -117125,15 +118197,15 @@ func (m *PluginDatadogAccessSettings) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: PluginDatadogAccessSettings: wiretype end group for non-group") + return fmt.Errorf("proto: AWSICProvisioningSpec: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: PluginDatadogAccessSettings: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: AWSICProvisioningSpec: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ApiEndpoint", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field BaseUrl", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -117161,11 +118233,11 @@ func (m *PluginDatadogAccessSettings) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.ApiEndpoint = string(dAtA[iNdEx:postIndex]) + m.BaseUrl = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field FallbackRecipient", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field BearerToken", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -117193,7 +118265,7 @@ func (m *PluginDatadogAccessSettings) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.FallbackRecipient = string(dAtA[iNdEx:postIndex]) + m.BearerToken = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -117217,7 +118289,7 @@ func (m *PluginDatadogAccessSettings) Unmarshal(dAtA []byte) error { } return nil } -func (m *PluginAWSICSettings) Unmarshal(dAtA []byte) error { +func (m *PluginEmailSettings) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -117240,15 +118312,15 @@ func (m *PluginAWSICSettings) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: PluginAWSICSettings: wiretype end group for non-group") + return fmt.Errorf("proto: PluginEmailSettings: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: PluginAWSICSettings: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: PluginEmailSettings: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field IntegrationName", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Sender", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -117276,11 +118348,11 @@ func (m *PluginAWSICSettings) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.IntegrationName = string(dAtA[iNdEx:postIndex]) + m.Sender = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Region", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field FallbackRecipient", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -117308,13 +118380,13 @@ func (m *PluginAWSICSettings) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.Region = string(dAtA[iNdEx:postIndex]) + m.FallbackRecipient = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Arn", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field MailgunSpec", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowTypes @@ -117324,27 +118396,30 @@ func (m *PluginAWSICSettings) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthTypes } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthTypes } if postIndex > l { return io.ErrUnexpectedEOF } - m.Arn = string(dAtA[iNdEx:postIndex]) + v := &MailgunSpec{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Spec = &PluginEmailSettings_MailgunSpec{v} iNdEx = postIndex case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ProvisioningSpec", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field SmtpSpec", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -117371,48 +118446,66 @@ func (m *PluginAWSICSettings) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if m.ProvisioningSpec == nil { - m.ProvisioningSpec = &AWSICProvisioningSpec{} - } - if err := m.ProvisioningSpec.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + v := &SMTPSpec{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } + m.Spec = &PluginEmailSettings_SmtpSpec{v} iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field AccessListDefaultOwners", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowTypes - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err } - intStringLen := int(stringLen) - if intStringLen < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthTypes } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthTypes + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF } - if postIndex > l { + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *MailgunSpec) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { return io.ErrUnexpectedEOF } - m.AccessListDefaultOwners = append(m.AccessListDefaultOwners, string(dAtA[iNdEx:postIndex])) - iNdEx = postIndex - case 6: + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: MailgunSpec: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: MailgunSpec: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SamlIdpServiceProviderName", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Domain", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -117440,7 +118533,7 @@ func (m *PluginAWSICSettings) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.SamlIdpServiceProviderName = string(dAtA[iNdEx:postIndex]) + m.Domain = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex @@ -117464,7 +118557,7 @@ func (m *PluginAWSICSettings) Unmarshal(dAtA []byte) error { } return nil } -func (m *AWSICProvisioningSpec) Unmarshal(dAtA []byte) error { +func (m *SMTPSpec) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -117487,15 +118580,15 @@ func (m *AWSICProvisioningSpec) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: AWSICProvisioningSpec: wiretype end group for non-group") + return fmt.Errorf("proto: SMTPSpec: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: AWSICProvisioningSpec: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: SMTPSpec: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field BaseUrl", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Host", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -117523,11 +118616,30 @@ func (m *AWSICProvisioningSpec) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.BaseUrl = string(dAtA[iNdEx:postIndex]) + m.Host = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex case 2: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Port", wireType) + } + m.Port = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Port |= int32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field BearerToken", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field StartTlsPolicy", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -117555,7 +118667,7 @@ func (m *AWSICProvisioningSpec) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.BearerToken = string(dAtA[iNdEx:postIndex]) + m.StartTlsPolicy = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex default: iNdEx = preIndex diff --git a/docs/pages/admin-guides/access-controls/access-request-plugins/ssh-approval-email.mdx b/docs/pages/admin-guides/access-controls/access-request-plugins/ssh-approval-email.mdx index 800a8a587c2e7..aa5b76856d8e6 100644 --- a/docs/pages/admin-guides/access-controls/access-request-plugins/ssh-approval-email.mdx +++ b/docs/pages/admin-guides/access-controls/access-request-plugins/ssh-approval-email.mdx @@ -318,7 +318,7 @@ refresh_identity = true [mailgun] domain = "sandbox123abc.mailgun.org" -private_key = "xoxb-fakekey62b0eac53565a38c8cc0316f6" +private_key = "xoxb-fakekey62b0eac53565a38c8cc0316f6" # As an alternative, you can use SMTP server credentials: # @@ -328,6 +328,7 @@ private_key = "xoxb-fakekey62b0eac53565a38c8cc0316f6" # username = "username@gmail.com" # password = "" # password_file = "/var/lib/teleport/plugins/email/smtp_password" +# starttls_policy = "mandatory" [delivery] sender = "noreply@example.com" @@ -353,7 +354,8 @@ teleport: mailgun: domain: "sandbox123abc.mailgun.org" - privateKeyFromSecret: "mailgun-private-key" + privateKeyFromSecret: "mailgun-private-key" + # As an alternative, you can use SMTP server credentials: # # smtp: @@ -361,6 +363,7 @@ mailgun: # port: 587 # username: "username@gmail.com" # passwordFromSecret: "smtp-password" +# starttls_policy = "mandatory" delivery: sender: "noreply@example.com" diff --git a/integrations/access/email/app.go b/integrations/access/email/app.go index f5b335dfe44d8..8e38af504a56a 100644 --- a/integrations/access/email/app.go +++ b/integrations/access/email/app.go @@ -24,7 +24,6 @@ import ( "github.com/gravitational/teleport/api/client/proto" "github.com/gravitational/teleport/api/types" - "github.com/gravitational/teleport/integrations/access/common" "github.com/gravitational/teleport/integrations/access/common/teleport" "github.com/gravitational/teleport/integrations/lib" "github.com/gravitational/teleport/integrations/lib/logger" @@ -128,7 +127,7 @@ func (a *App) init(ctx context.Context) error { defer cancel() var err error - if a.apiClient, err = common.GetTeleportClient(ctx, a.conf.Teleport); err != nil { + if a.apiClient, err = a.conf.GetTeleportClient(ctx); err != nil { return trace.Wrap(err) } diff --git a/integrations/access/email/config.go b/integrations/access/email/config.go index 9d3967a48f75c..f9cfe69ebc952 100644 --- a/integrations/access/email/config.go +++ b/integrations/access/email/config.go @@ -17,6 +17,7 @@ limitations under the License. package email import ( + "context" _ "embed" "fmt" @@ -26,6 +27,7 @@ import ( "github.com/gravitational/teleport/api/types" "github.com/gravitational/teleport/integrations/access/common" + "github.com/gravitational/teleport/integrations/access/common/teleport" "github.com/gravitational/teleport/integrations/lib" "github.com/gravitational/teleport/integrations/lib/logger" ) @@ -65,6 +67,11 @@ type Config struct { RoleToRecipients common.RawRecipientsMap `toml:"role_to_recipients"` Log logger.Config `toml:"log"` + // Teleport is a handle to the client to use when communicating with + // the Teleport auth server. The Email app will create a gRPC-based + // client on startup if this is not set. + Client teleport.Client + // StatusSink receives any status updates from the plugin for // further processing. Status updates will be ignored if not set. StatusSink common.StatusSink @@ -226,3 +233,12 @@ func (c *Config) CheckAndSetDefaults() error { return nil } + +// GetTeleportClient returns the configured Teleport client. +func (c *Config) GetTeleportClient(ctx context.Context) (teleport.Client, error) { + if c.Client != nil { + return c.Client, nil + } + client, err := common.GetTeleportClient(ctx, c.Teleport) + return client, trace.Wrap(err) +} diff --git a/tool/tctl/common/collection.go b/tool/tctl/common/collection.go index 1afe9f0c7bca9..c5134bb82f617 100644 --- a/tool/tctl/common/collection.go +++ b/tool/tctl/common/collection.go @@ -1616,6 +1616,7 @@ func (p *pluginResourceWrapper) UnmarshalJSON(data []byte) error { settingsGitlab = "gitlab" settingsEntraID = "entra_id" settingsDatadogIncidentManagement = "datadog_incident_management" + settingsEmailAccessPlugin = "email_access_plugin" ) type unknownPluginType struct { Spec struct { @@ -1685,6 +1686,8 @@ func (p *pluginResourceWrapper) UnmarshalJSON(data []byte) error { p.PluginV1.Spec.Settings = &types.PluginSpecV1_EntraId{} case settingsDatadogIncidentManagement: p.PluginV1.Spec.Settings = &types.PluginSpecV1_Datadog{} + case settingsEmailAccessPlugin: + p.PluginV1.Spec.Settings = &types.PluginSpecV1_Email{} default: return trace.BadParameter("unsupported plugin type: %v", k) } diff --git a/web/packages/shared/components/Validation/rules.test.ts b/web/packages/shared/components/Validation/rules.test.ts index d3868492e7cc9..a07b16fb7aaa7 100644 --- a/web/packages/shared/components/Validation/rules.test.ts +++ b/web/packages/shared/components/Validation/rules.test.ts @@ -24,6 +24,7 @@ import { requiredRoleArn, requiredEmailLike, requiredIamRoleName, + requiredPort, } from './rules'; describe('requiredField', () => { @@ -138,3 +139,17 @@ describe('requiredEmailLike', () => { ); }); }); + +describe('requiredPort', () => { + const errMsg = 'Port required [1-65535]'; + test.each` + port | expected + ${''} | ${{ valid: false, message: errMsg }} + ${'alice'} | ${{ valid: false, message: errMsg }} + ${'99999'} | ${{ valid: false, message: errMsg }} + ${'1'} | ${{ valid: true }} + ${'65535'} | ${{ valid: true }} + `('port: $port', ({ port, expected }) => { + expect(requiredPort(port)()).toEqual(expected); + }); +}); diff --git a/web/packages/shared/components/Validation/rules.ts b/web/packages/shared/components/Validation/rules.ts index 5d0b6045fb116..52063d67fce99 100644 --- a/web/packages/shared/components/Validation/rules.ts +++ b/web/packages/shared/components/Validation/rules.ts @@ -236,6 +236,22 @@ const requiredMatchingRoleNameAndRoleArn = }; }; +/** + * requiredPort checks if the given value is a valid port value [1-65535]. + */ +const requiredPort: Rule = port => () => { + let val = Number(port); + if (Number.isInteger(val) && val > 0 && val <= 65535) { + return { + valid: true, + }; + } + return { + valid: false, + message: 'Port required [1-65535]', + }; +}; + /** * A rule function that combines multiple inner rule functions. All rules must * return `valid`, otherwise it returns a comma separated string containing all @@ -275,4 +291,5 @@ export { requiredAll, requiredMatchingRoleNameAndRoleArn, validAwsIAMRoleName, + requiredPort, }; diff --git a/web/packages/teleport/src/services/integrations/types.ts b/web/packages/teleport/src/services/integrations/types.ts index 0d88ba8299843..e525f72ff6ee6 100644 --- a/web/packages/teleport/src/services/integrations/types.ts +++ b/web/packages/teleport/src/services/integrations/types.ts @@ -172,7 +172,8 @@ export type PluginSpec = | PluginSlackSpec | PluginMattermostSpec | PluginOpsgenieSpec - | PluginDatadogSpec; + | PluginDatadogSpec + | PluginEmailSpec; // PluginKind represents the type of the plugin // and should be the same value as defined in the backend (check master branch for the latest): @@ -241,6 +242,11 @@ export type PluginDatadogSpec = { fallbackRecipient: string; }; +export type PluginEmailSpec = { + sender: string; + fallbackRecipient: string; +}; + export type IntegrationCreateRequest = { name: string; subKind: IntegrationKind; From 6e5b580ba87b103449976fcfe72ad9ec691a41f4 Mon Sep 17 00:00:00 2001 From: Marco Dinis Date: Wed, 30 Oct 2024 17:31:59 +0000 Subject: [PATCH 14/27] Fix docs link for azure join (#48142) --- .github/ISSUE_TEMPLATE/testplan.md | 2 +- .../includes/server-access/azure-join-managed-identity.mdx | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/testplan.md b/.github/ISSUE_TEMPLATE/testplan.md index e117b348cd13a..9699edc3cb46a 100644 --- a/.github/ISSUE_TEMPLATE/testplan.md +++ b/.github/ISSUE_TEMPLATE/testplan.md @@ -1526,7 +1526,7 @@ Verify that SSH works, and that resumable SSH is not interrupted across a contro ## Azure Discovery -[Azure Discovery docs](https://goteleport.com/docs/server-access/guides/azure-discovery/) +[Azure Discovery docs](https://goteleport.com/docs/enroll-resources/auto-discovery/servers/azure-discovery/) - Verify Azure VM discovery - [ ] Only Azure VMs matching given Azure tags have the installer executed on them - [ ] Only the IAM permissions mentioned in the discovery docs are required for operation diff --git a/docs/pages/includes/server-access/azure-join-managed-identity.mdx b/docs/pages/includes/server-access/azure-join-managed-identity.mdx index ebb640f9bc651..2d732b73008bb 100644 --- a/docs/pages/includes/server-access/azure-join-managed-identity.mdx +++ b/docs/pages/includes/server-access/azure-join-managed-identity.mdx @@ -82,10 +82,9 @@ In the [Virtual machines view](https://portal.azure.com/#view/HubsExtension/BrowseResource/resourceType/Microsoft.Compute%2FVirtualMachines) - of Azure Portal, click on the name of the VM you are using to host the Teleport - Application Service. + of Azure Portal, click on the name of the VM you are using to host the Teleport Service. - On the right side panel, click the **Identity** tab, then within the + On the right side panel, click the **Security/Identity** tab, then within the **Identity** view, click the **User assigned** tab. Click **+Add**, then select the `teleport-azure` identity. Click **Add**. From 3d3ee992b28c3d90f2e015baa7a96d9dafbd2216 Mon Sep 17 00:00:00 2001 From: Brian Joerger Date: Wed, 30 Oct 2024 11:29:35 -0700 Subject: [PATCH 15/27] Fix `SAMLForceAuthn` marshalling (#48098) * Marshal SAMLForceAuthn to/from string/bool. * Use any; Move to api/types/saml.go; add test. --- api/types/saml.go | 96 ++++++++++++++++++++++++++++++++++++++++++ api/types/saml_test.go | 63 +++++++++++++++++++++++++++ 2 files changed, 159 insertions(+) diff --git a/api/types/saml.go b/api/types/saml.go index 0295aeb3e66c1..5f042f2f4047c 100644 --- a/api/types/saml.go +++ b/api/types/saml.go @@ -17,6 +17,7 @@ limitations under the License. package types import ( + "encoding/json" "slices" "strings" "time" @@ -524,3 +525,98 @@ func (r *SAMLAuthRequest) Check() error { } return nil } + +// MarshalJSON marshals SAMLForceAuthn to string. +func (s SAMLForceAuthn) MarshalYAML() (interface{}, error) { + val, err := s.encode() + if err != nil { + return nil, trace.Wrap(err) + } + return val, nil +} + +// UnmarshalYAML supports parsing SAMLForceAuthn from string. +func (s *SAMLForceAuthn) UnmarshalYAML(unmarshal func(interface{}) error) error { + var val any + if err := unmarshal(&val); err != nil { + return trace.Wrap(err) + } + return trace.Wrap(s.decode(val)) +} + +// MarshalJSON marshals SAMLForceAuthn to string. +func (s SAMLForceAuthn) MarshalJSON() ([]byte, error) { + val, err := s.encode() + if err != nil { + return nil, trace.Wrap(err) + } + out, err := json.Marshal(val) + return out, trace.Wrap(err) +} + +// UnmarshalJSON supports parsing SAMLForceAuthn from string. +func (s *SAMLForceAuthn) UnmarshalJSON(data []byte) error { + var val any + if err := json.Unmarshal(data, &val); err != nil { + return trace.Wrap(err) + } + return trace.Wrap(s.decode(val)) +} + +func (s *SAMLForceAuthn) encode() (string, error) { + switch *s { + case SAMLForceAuthn_FORCE_AUTHN_UNSPECIFIED: + return "", nil + case SAMLForceAuthn_FORCE_AUTHN_NO: + return "no", nil + case SAMLForceAuthn_FORCE_AUTHN_YES: + return "yes", nil + default: + return "", trace.BadParameter("SAMLForceAuthn invalid value %v", *s) + } +} + +func (s *SAMLForceAuthn) decode(val any) error { + switch v := val.(type) { + case string: + // try parsing as a boolean + switch strings.ToLower(v) { + case "": + *s = SAMLForceAuthn_FORCE_AUTHN_UNSPECIFIED + case "yes", "yeah", "y", "true", "1", "on": + *s = SAMLForceAuthn_FORCE_AUTHN_YES + case "no", "nope", "n", "false", "0", "off": + *s = SAMLForceAuthn_FORCE_AUTHN_NO + default: + return trace.BadParameter("SAMLForceAuthn invalid value %v", val) + } + case bool: + if v { + *s = SAMLForceAuthn_FORCE_AUTHN_YES + } else { + *s = SAMLForceAuthn_FORCE_AUTHN_NO + } + case int32: + return trace.Wrap(s.setFromEnum(v)) + case int64: + return trace.Wrap(s.setFromEnum(int32(v))) + case int: + return trace.Wrap(s.setFromEnum(int32(v))) + case float64: + return trace.Wrap(s.setFromEnum(int32(v))) + case float32: + return trace.Wrap(s.setFromEnum(int32(v))) + default: + return trace.BadParameter("SAMLForceAuthn invalid type %T", val) + } + return nil +} + +// setFromEnum sets the value from enum value as int32. +func (s *SAMLForceAuthn) setFromEnum(val int32) error { + if _, ok := SAMLForceAuthn_name[val]; !ok { + return trace.BadParameter("invalid SAMLForceAuthn enum %v", val) + } + *s = SAMLForceAuthn(val) + return nil +} diff --git a/api/types/saml_test.go b/api/types/saml_test.go index 228b0afd9f35b..933df64e150f6 100644 --- a/api/types/saml_test.go +++ b/api/types/saml_test.go @@ -17,9 +17,13 @@ limitations under the License. package types_test import ( + "encoding/json" + "fmt" "testing" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "gopkg.in/yaml.v2" "github.com/gravitational/teleport/api/types" ) @@ -107,3 +111,62 @@ func TestSAMLForceAuthn(t *testing.T) { }) } } + +func TestSAMLForceAuthn_Encoding(t *testing.T) { + for _, tt := range []struct { + forceAuthn types.SAMLForceAuthn + expectEncoded string + }{ + { + forceAuthn: types.SAMLForceAuthn_FORCE_AUTHN_UNSPECIFIED, + expectEncoded: "", + }, { + forceAuthn: types.SAMLForceAuthn_FORCE_AUTHN_YES, + expectEncoded: "yes", + }, { + forceAuthn: types.SAMLForceAuthn_FORCE_AUTHN_NO, + expectEncoded: "no", + }, + } { + t.Run(tt.forceAuthn.String(), func(t *testing.T) { + type object struct { + ForceAuthn types.SAMLForceAuthn `json:"force_authn" yaml:"force_authn"` + } + o := object{ + ForceAuthn: tt.forceAuthn, + } + objectJSON := fmt.Sprintf(`{"force_authn":%q}`, tt.expectEncoded) + objectYAML := fmt.Sprintf("force_authn: %q\n", tt.expectEncoded) + + t.Run("JSON", func(t *testing.T) { + t.Run("Marshal", func(t *testing.T) { + gotJSON, err := json.Marshal(o) + assert.NoError(t, err, "unexpected error from json.Marshal") + assert.Equal(t, objectJSON, string(gotJSON), "unexpected json.Marshal value") + }) + + t.Run("Unmarshal", func(t *testing.T) { + var gotObject object + err := json.Unmarshal([]byte(objectJSON), &gotObject) + assert.NoError(t, err, "unexpected error from json.Unmarshal") + assert.Equal(t, tt.forceAuthn, gotObject.ForceAuthn, "unexpected json.Unmarshal value") + }) + }) + + t.Run("YAML", func(t *testing.T) { + t.Run("Marshal", func(t *testing.T) { + gotYAML, err := yaml.Marshal(o) + assert.NoError(t, err, "unexpected error from yaml.Marshal") + assert.Equal(t, objectYAML, string(gotYAML), "unexpected yaml.Marshal value") + }) + + t.Run("Unmarshal", func(t *testing.T) { + var gotObject object + err := yaml.Unmarshal([]byte(objectYAML), &gotObject) + assert.NoError(t, err, "unexpected error from yaml.Unmarshal") + assert.Equal(t, tt.forceAuthn, gotObject.ForceAuthn, "unexpected yaml.Unmarshal value") + }) + }) + }) + } +} From 6160a3da61f7438a01d1f4c9b9da460d93562f1b Mon Sep 17 00:00:00 2001 From: Brian Joerger Date: Wed, 30 Oct 2024 11:32:17 -0700 Subject: [PATCH 16/27] Replace NewCLIPromptV2. (#47927) --- lib/client/mfa.go | 2 +- lib/client/mfa/cli.go | 25 +++++--------- lib/client/mfa/cli_test.go | 47 ++++++++++++++++++--------- lib/client/mfa_test.go | 2 +- tool/tctl/common/admin_action_test.go | 2 +- tool/tctl/common/tctl.go | 2 +- 6 files changed, 43 insertions(+), 37 deletions(-) diff --git a/lib/client/mfa.go b/lib/client/mfa.go index 51f2073b71e45..ff261950604a1 100644 --- a/lib/client/mfa.go +++ b/lib/client/mfa.go @@ -59,7 +59,7 @@ type WebauthnLoginFunc = libmfa.WebauthnLoginFunc func (tc *TeleportClient) NewMFAPrompt(opts ...mfa.PromptOpt) mfa.Prompt { cfg := tc.newPromptConfig(opts...) - var prompt mfa.Prompt = libmfa.NewCLIPromptV2(&libmfa.CLIPromptConfig{ + var prompt mfa.Prompt = libmfa.NewCLIPrompt(&libmfa.CLIPromptConfig{ PromptConfig: *cfg, Writer: tc.Stderr, PreferOTP: tc.PreferOTP, diff --git a/lib/client/mfa/cli.go b/lib/client/mfa/cli.go index 400ad7d88e6c6..a40838211bfa7 100644 --- a/lib/client/mfa/cli.go +++ b/lib/client/mfa/cli.go @@ -75,23 +75,8 @@ type CLIPrompt struct { cfg CLIPromptConfig } -// NewCLIPrompt returns a new CLI mfa prompt with the config and writer. -// TODO(Joerger): Delete once /e is no longer dependent on it. -func NewCLIPrompt(cfg *PromptConfig, writer io.Writer) *CLIPrompt { - // If no config is provided, use defaults (zero value). - if cfg == nil { - cfg = new(PromptConfig) - } - return NewCLIPromptV2(&CLIPromptConfig{ - PromptConfig: *cfg, - Writer: writer, - }) -} - -// NewCLIPromptV2 returns a new CLI mfa prompt with the given config. -// TODO(Joerger): this is V2 because /e depends on a different function -// signature for NewCLIPrompt, so this requires a couple follow up PRs to fix. -func NewCLIPromptV2(cfg *CLIPromptConfig) *CLIPrompt { +// NewCLIPrompt returns a new CLI mfa prompt with the given config. +func NewCLIPrompt(cfg *CLIPromptConfig) *CLIPrompt { // If no config is provided, use defaults (zero value). if cfg == nil { cfg = new(CLIPromptConfig) @@ -101,6 +86,12 @@ func NewCLIPromptV2(cfg *CLIPromptConfig) *CLIPrompt { } } +// NewCLIPromptV2 returns a new CLI mfa prompt with the given config. +// TODO(Joerger): remove once /e is no longer dependent on this. +func NewCLIPromptV2(cfg *CLIPromptConfig) *CLIPrompt { + return NewCLIPrompt(cfg) +} + func (c *CLIPrompt) stdin() prompt.StdinReader { if c.cfg.StdinFunc == nil { return prompt.Stdin() diff --git a/lib/client/mfa/cli_test.go b/lib/client/mfa/cli_test.go index b9b69b7c16f2d..61fecda120c77 100644 --- a/lib/client/mfa/cli_test.go +++ b/lib/client/mfa/cli_test.go @@ -54,7 +54,8 @@ func TestCLIPrompt(t *testing.T) { expectStdOut: "", challenge: &proto.MFAAuthenticateChallenge{}, expectResp: &proto.MFAAuthenticateResponse{}, - }, { + }, + { name: "OK webauthn", expectStdOut: "Tap any security key\n", challenge: &proto.MFAAuthenticateChallenge{ @@ -65,7 +66,8 @@ func TestCLIPrompt(t *testing.T) { Webauthn: &webauthnpb.CredentialAssertionResponse{}, }, }, - }, { + }, + { name: "OK otp", expectStdOut: "Enter an OTP code from a device:\n", stdin: "123456", @@ -79,7 +81,8 @@ func TestCLIPrompt(t *testing.T) { }, }, }, - }, { + }, + { name: "OK sso", expectStdOut: "", // sso stdout is handled internally in the SSO ceremony, which is mocked in this test. challenge: &proto.MFAAuthenticateChallenge{ @@ -93,7 +96,8 @@ func TestCLIPrompt(t *testing.T) { }, }, }, - }, { + }, + { name: "OK prefer otp when specified", expectStdOut: "Enter an OTP code from a device:\n", stdin: "123456", @@ -112,7 +116,8 @@ func TestCLIPrompt(t *testing.T) { }, }, }, - }, { + }, + { name: "OK prefer sso when specified", expectStdOut: "", challenge: &proto.MFAAuthenticateChallenge{ @@ -131,7 +136,8 @@ func TestCLIPrompt(t *testing.T) { }, }, }, - }, { + }, + { name: "OK prefer webauthn with authenticator attachment requested", expectStdOut: "Tap any security key\n", challenge: &proto.MFAAuthenticateChallenge{ @@ -163,7 +169,8 @@ func TestCLIPrompt(t *testing.T) { Webauthn: &webauthnpb.CredentialAssertionResponse{}, }, }, - }, { + }, + { name: "OK prefer webauthn+otp over sso", expectStdOut: "" + "Available MFA methods [WEBAUTHN, SSO, OTP]. Continuing with WEBAUTHN and OTP.\n" + @@ -182,7 +189,8 @@ func TestCLIPrompt(t *testing.T) { Webauthn: &webauthnpb.CredentialAssertionResponse{}, }, }, - }, { + }, + { name: "OK prefer sso over otp", expectStdOut: "" + "Available MFA methods [SSO, OTP]. Continuing with SSO.\n" + @@ -199,7 +207,8 @@ func TestCLIPrompt(t *testing.T) { }, }, }, - }, { + }, + { name: "OK prefer webauthn over otp when stdin hijack disallowed", expectStdOut: "" + "Available MFA methods [WEBAUTHN, OTP]. Continuing with WEBAUTHN.\n" + @@ -214,7 +223,8 @@ func TestCLIPrompt(t *testing.T) { Webauthn: &webauthnpb.CredentialAssertionResponse{}, }, }, - }, { + }, + { name: "OK webauthn or otp with stdin hijack allowed, choose webauthn", expectStdOut: "" + "Available MFA methods [WEBAUTHN, SSO, OTP]. Continuing with WEBAUTHN and OTP.\n" + @@ -233,7 +243,8 @@ func TestCLIPrompt(t *testing.T) { Webauthn: &webauthnpb.CredentialAssertionResponse{}, }, }, - }, { + }, + { name: "OK webauthn or otp with stdin hijack allowed, choose otp", expectStdOut: "" + "Available MFA methods [WEBAUTHN, SSO, OTP]. Continuing with WEBAUTHN and OTP.\n" + @@ -255,28 +266,32 @@ func TestCLIPrompt(t *testing.T) { }, }, }, - }, { + }, + { name: "NOK no webauthn response", expectStdOut: "Tap any security key\n", challenge: &proto.MFAAuthenticateChallenge{ WebauthnChallenge: &webauthnpb.CredentialAssertion{}, }, expectErr: context.DeadlineExceeded, - }, { + }, + { name: "NOK no sso response", expectStdOut: "", challenge: &proto.MFAAuthenticateChallenge{ SSOChallenge: &proto.SSOChallenge{}, }, expectErr: context.DeadlineExceeded, - }, { + }, + { name: "NOK no otp response", expectStdOut: "Enter an OTP code from a device:\n", challenge: &proto.MFAAuthenticateChallenge{ TOTP: &proto.TOTPChallenge{}, }, expectErr: context.DeadlineExceeded, - }, { + }, + { name: "NOK no webauthn or otp response", expectStdOut: "Tap any security key or enter a code from a OTP device\n", challenge: &proto.MFAAuthenticateChallenge{ @@ -447,7 +462,7 @@ Enter your security key PIN: tc.modifyPromptConfig(cliPromptConfig) } - resp, err := mfa.NewCLIPromptV2(cliPromptConfig).Run(ctx, tc.challenge) + resp, err := mfa.NewCLIPrompt(cliPromptConfig).Run(ctx, tc.challenge) if tc.expectErr != nil { require.ErrorIs(t, err, tc.expectErr) } else { diff --git a/lib/client/mfa_test.go b/lib/client/mfa_test.go index 845e9b1f975e5..bb24f3fb14a03 100644 --- a/lib/client/mfa_test.go +++ b/lib/client/mfa_test.go @@ -116,7 +116,7 @@ func TestPromptMFAChallenge_usingNonRegisteredDevice(t *testing.T) { test.customizePrompt(cliConfig) } - _, err := mfa.NewCLIPromptV2(cliConfig).Run(ctx, test.challenge) + _, err := mfa.NewCLIPrompt(cliConfig).Run(ctx, test.challenge) if !errors.Is(err, wancli.ErrUsingNonRegisteredDevice) { t.Errorf("PromptMFAChallenge returned err=%q, want %q", err, wancli.ErrUsingNonRegisteredDevice) } diff --git a/tool/tctl/common/admin_action_test.go b/tool/tctl/common/admin_action_test.go index dcd3642774b5d..95fa7c61458c7 100644 --- a/tool/tctl/common/admin_action_test.go +++ b/tool/tctl/common/admin_action_test.go @@ -1029,7 +1029,7 @@ func newAdminActionTestSuite(t *testing.T) *adminActionTestSuite { promptCfg := libmfa.NewPromptConfig(proxyPublicAddr.String(), opts...) promptCfg.WebauthnLoginFunc = mockWebauthnLogin promptCfg.WebauthnSupported = true - return libmfa.NewCLIPromptV2(&libmfa.CLIPromptConfig{ + return libmfa.NewCLIPrompt(&libmfa.CLIPromptConfig{ PromptConfig: *promptCfg, }) } diff --git a/tool/tctl/common/tctl.go b/tool/tctl/common/tctl.go index 448a459df1653..4a85be6e934b0 100644 --- a/tool/tctl/common/tctl.go +++ b/tool/tctl/common/tctl.go @@ -254,7 +254,7 @@ func TryRun(commands []CLICommand, args []string) error { proxyAddr := resp.ProxyPublicAddr client.SetMFAPromptConstructor(func(opts ...mfa.PromptOpt) mfa.Prompt { promptCfg := libmfa.NewPromptConfig(proxyAddr, opts...) - return libmfa.NewCLIPromptV2(&libmfa.CLIPromptConfig{ + return libmfa.NewCLIPrompt(&libmfa.CLIPromptConfig{ PromptConfig: *promptCfg, }) }) From 1589413a561e695e46dbbae2554d69ba7cbf6f47 Mon Sep 17 00:00:00 2001 From: Andrew LeFevre Date: Wed, 30 Oct 2024 14:52:20 -0400 Subject: [PATCH 17/27] emit an audit event with file transfer statistics when an SFTP session is completed (#48051) * emit an audit event with file transfer statistics when an SFTP session is completed * remove unused SFTP event codes, don't embed os.File * send oneof events to parent process to make event unmarshaling easier to reason about * protect tracked files with mutex --- .../teleport/legacy/types/events/events.proto | 49 + api/types/events/events.go | 26 + api/types/events/events.pb.go | 4133 ++++++++++------- api/types/events/oneof.go | 4 + lib/events/api.go | 2 + lib/events/codes.go | 66 +- lib/events/dynamic.go | 3 + lib/events/events_test.go | 1 + lib/srv/regular/sftp.go | 31 +- tool/teleport/common/sftp.go | 87 +- .../src/Audit/EventList/EventTypeCell.tsx | 19 +- .../teleport/src/services/audit/makeEvent.ts | 151 +- .../teleport/src/services/audit/types.ts | 62 +- 13 files changed, 2663 insertions(+), 1971 deletions(-) diff --git a/api/proto/teleport/legacy/types/events/events.proto b/api/proto/teleport/legacy/types/events/events.proto index d984ba5881dc6..a54f7da959804 100644 --- a/api/proto/teleport/legacy/types/events/events.proto +++ b/api/proto/teleport/legacy/types/events/events.proto @@ -1892,6 +1892,54 @@ message SFTP { string Error = 12 [(gogoproto.jsontag) = "error,omitempty"]; } +// SFTPSummary is emitted at the end of an SFTP transfer +message SFTPSummary { + // Metadata is a common event metadata + Metadata Metadata = 1 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // User is a common user event metadata + UserMetadata User = 2 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // ConnectionMetadata holds information about the connection + ConnectionMetadata Connection = 3 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // SessionMetadata is a common event session metadata + SessionMetadata Session = 4 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // ServerMetadata is a common server metadata + ServerMetadata Server = 5 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // FileTransferStats contains statistics about transferred files + repeated FileTransferStat FileTransferStats = 6 [(gogoproto.jsontag) = "file_transfer_stats"]; +} + +// FileTransferStat is statistics about a transferred file +message FileTransferStat { + string Path = 1 [(gogoproto.jsontag) = "path"]; + uint64 BytesRead = 2 [(gogoproto.jsontag) = "bytes_read"]; + uint64 BytesWritten = 3 [(gogoproto.jsontag) = "bytes_written"]; +} + // Subsystem is emitted when a user requests a new subsystem. message Subsystem { // Metadata is a common event metadata @@ -4615,6 +4663,7 @@ message OneOf { events.UserTaskCreate UserTaskCreate = 188; events.UserTaskUpdate UserTaskUpdate = 189; events.UserTaskDelete UserTaskDelete = 190; + events.SFTPSummary SFTPSummary = 191; } } diff --git a/api/types/events/events.go b/api/types/events/events.go index 4c1e561c7e2f1..0eda345989e92 100644 --- a/api/types/events/events.go +++ b/api/types/events/events.go @@ -2302,3 +2302,29 @@ func (m *UserTaskUpdate) TrimToMaxSize(_ int) AuditEvent { func (m *UserTaskDelete) TrimToMaxSize(_ int) AuditEvent { return m } + +func (m *SFTPSummary) TrimToMaxSize(maxSize int) AuditEvent { + size := m.Size() + if size <= maxSize { + return m + } + + out := utils.CloneProtoMsg(m) + + var customFieldsCount int + for i := range out.FileTransferStats { + if out.FileTransferStats[i].Path != "" { + customFieldsCount++ + out.FileTransferStats[i].Path = "" + } + } + + maxSize = adjustedMaxSize(out, maxSize) + maxFieldsSize := maxSizePerField(maxSize, customFieldsCount) + + for i := range out.FileTransferStats { + out.FileTransferStats[i].Path = trimStr(out.FileTransferStats[i].Path, maxFieldsSize) + } + + return out +} diff --git a/api/types/events/events.pb.go b/api/types/events/events.pb.go index d992e716e5201..56bfc90ec734d 100644 --- a/api/types/events/events.pb.go +++ b/api/types/events/events.pb.go @@ -3337,6 +3337,101 @@ func (m *SFTP) XXX_DiscardUnknown() { var xxx_messageInfo_SFTP proto.InternalMessageInfo +// SFTPSummary is emitted at the end of an SFTP transfer +type SFTPSummary struct { + // Metadata is a common event metadata + Metadata `protobuf:"bytes,1,opt,name=Metadata,proto3,embedded=Metadata" json:""` + // User is a common user event metadata + UserMetadata `protobuf:"bytes,2,opt,name=User,proto3,embedded=User" json:""` + // ConnectionMetadata holds information about the connection + ConnectionMetadata `protobuf:"bytes,3,opt,name=Connection,proto3,embedded=Connection" json:""` + // SessionMetadata is a common event session metadata + SessionMetadata `protobuf:"bytes,4,opt,name=Session,proto3,embedded=Session" json:""` + // ServerMetadata is a common server metadata + ServerMetadata `protobuf:"bytes,5,opt,name=Server,proto3,embedded=Server" json:""` + // FileTransferStats contains statistics about transferred files + FileTransferStats []*FileTransferStat `protobuf:"bytes,6,rep,name=FileTransferStats,proto3" json:"file_transfer_stats"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *SFTPSummary) Reset() { *m = SFTPSummary{} } +func (m *SFTPSummary) String() string { return proto.CompactTextString(m) } +func (*SFTPSummary) ProtoMessage() {} +func (*SFTPSummary) Descriptor() ([]byte, []int) { + return fileDescriptor_007ba1c3d6266d56, []int{56} +} +func (m *SFTPSummary) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *SFTPSummary) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_SFTPSummary.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *SFTPSummary) XXX_Merge(src proto.Message) { + xxx_messageInfo_SFTPSummary.Merge(m, src) +} +func (m *SFTPSummary) XXX_Size() int { + return m.Size() +} +func (m *SFTPSummary) XXX_DiscardUnknown() { + xxx_messageInfo_SFTPSummary.DiscardUnknown(m) +} + +var xxx_messageInfo_SFTPSummary proto.InternalMessageInfo + +// FileTransferStat is statistics about a transferred file +type FileTransferStat struct { + Path string `protobuf:"bytes,1,opt,name=Path,proto3" json:"path"` + BytesRead uint64 `protobuf:"varint,2,opt,name=BytesRead,proto3" json:"bytes_read"` + BytesWritten uint64 `protobuf:"varint,3,opt,name=BytesWritten,proto3" json:"bytes_written"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *FileTransferStat) Reset() { *m = FileTransferStat{} } +func (m *FileTransferStat) String() string { return proto.CompactTextString(m) } +func (*FileTransferStat) ProtoMessage() {} +func (*FileTransferStat) Descriptor() ([]byte, []int) { + return fileDescriptor_007ba1c3d6266d56, []int{57} +} +func (m *FileTransferStat) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *FileTransferStat) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_FileTransferStat.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *FileTransferStat) XXX_Merge(src proto.Message) { + xxx_messageInfo_FileTransferStat.Merge(m, src) +} +func (m *FileTransferStat) XXX_Size() int { + return m.Size() +} +func (m *FileTransferStat) XXX_DiscardUnknown() { + xxx_messageInfo_FileTransferStat.DiscardUnknown(m) +} + +var xxx_messageInfo_FileTransferStat proto.InternalMessageInfo + // Subsystem is emitted when a user requests a new subsystem. type Subsystem struct { // Metadata is a common event metadata @@ -3358,7 +3453,7 @@ func (m *Subsystem) Reset() { *m = Subsystem{} } func (m *Subsystem) String() string { return proto.CompactTextString(m) } func (*Subsystem) ProtoMessage() {} func (*Subsystem) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{56} + return fileDescriptor_007ba1c3d6266d56, []int{58} } func (m *Subsystem) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3410,7 +3505,7 @@ func (m *ClientDisconnect) Reset() { *m = ClientDisconnect{} } func (m *ClientDisconnect) String() string { return proto.CompactTextString(m) } func (*ClientDisconnect) ProtoMessage() {} func (*ClientDisconnect) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{57} + return fileDescriptor_007ba1c3d6266d56, []int{59} } func (m *ClientDisconnect) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3458,7 +3553,7 @@ func (m *AuthAttempt) Reset() { *m = AuthAttempt{} } func (m *AuthAttempt) String() string { return proto.CompactTextString(m) } func (*AuthAttempt) ProtoMessage() {} func (*AuthAttempt) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{58} + return fileDescriptor_007ba1c3d6266d56, []int{60} } func (m *AuthAttempt) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3504,7 +3599,7 @@ func (m *UserTokenCreate) Reset() { *m = UserTokenCreate{} } func (m *UserTokenCreate) String() string { return proto.CompactTextString(m) } func (*UserTokenCreate) ProtoMessage() {} func (*UserTokenCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{59} + return fileDescriptor_007ba1c3d6266d56, []int{61} } func (m *UserTokenCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3552,7 +3647,7 @@ func (m *RoleCreate) Reset() { *m = RoleCreate{} } func (m *RoleCreate) String() string { return proto.CompactTextString(m) } func (*RoleCreate) ProtoMessage() {} func (*RoleCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{60} + return fileDescriptor_007ba1c3d6266d56, []int{62} } func (m *RoleCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3600,7 +3695,7 @@ func (m *RoleUpdate) Reset() { *m = RoleUpdate{} } func (m *RoleUpdate) String() string { return proto.CompactTextString(m) } func (*RoleUpdate) ProtoMessage() {} func (*RoleUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{61} + return fileDescriptor_007ba1c3d6266d56, []int{63} } func (m *RoleUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3648,7 +3743,7 @@ func (m *RoleDelete) Reset() { *m = RoleDelete{} } func (m *RoleDelete) String() string { return proto.CompactTextString(m) } func (*RoleDelete) ProtoMessage() {} func (*RoleDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{62} + return fileDescriptor_007ba1c3d6266d56, []int{64} } func (m *RoleDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3694,7 +3789,7 @@ func (m *BotCreate) Reset() { *m = BotCreate{} } func (m *BotCreate) String() string { return proto.CompactTextString(m) } func (*BotCreate) ProtoMessage() {} func (*BotCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{63} + return fileDescriptor_007ba1c3d6266d56, []int{65} } func (m *BotCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3740,7 +3835,7 @@ func (m *BotUpdate) Reset() { *m = BotUpdate{} } func (m *BotUpdate) String() string { return proto.CompactTextString(m) } func (*BotUpdate) ProtoMessage() {} func (*BotUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{64} + return fileDescriptor_007ba1c3d6266d56, []int{66} } func (m *BotUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3786,7 +3881,7 @@ func (m *BotDelete) Reset() { *m = BotDelete{} } func (m *BotDelete) String() string { return proto.CompactTextString(m) } func (*BotDelete) ProtoMessage() {} func (*BotDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{65} + return fileDescriptor_007ba1c3d6266d56, []int{67} } func (m *BotDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3834,7 +3929,7 @@ func (m *TrustedClusterCreate) Reset() { *m = TrustedClusterCreate{} } func (m *TrustedClusterCreate) String() string { return proto.CompactTextString(m) } func (*TrustedClusterCreate) ProtoMessage() {} func (*TrustedClusterCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{66} + return fileDescriptor_007ba1c3d6266d56, []int{68} } func (m *TrustedClusterCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3882,7 +3977,7 @@ func (m *TrustedClusterDelete) Reset() { *m = TrustedClusterDelete{} } func (m *TrustedClusterDelete) String() string { return proto.CompactTextString(m) } func (*TrustedClusterDelete) ProtoMessage() {} func (*TrustedClusterDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{67} + return fileDescriptor_007ba1c3d6266d56, []int{69} } func (m *TrustedClusterDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3928,7 +4023,7 @@ func (m *ProvisionTokenCreate) Reset() { *m = ProvisionTokenCreate{} } func (m *ProvisionTokenCreate) String() string { return proto.CompactTextString(m) } func (*ProvisionTokenCreate) ProtoMessage() {} func (*ProvisionTokenCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{68} + return fileDescriptor_007ba1c3d6266d56, []int{70} } func (m *ProvisionTokenCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3977,7 +4072,7 @@ func (m *TrustedClusterTokenCreate) Reset() { *m = TrustedClusterTokenCr func (m *TrustedClusterTokenCreate) String() string { return proto.CompactTextString(m) } func (*TrustedClusterTokenCreate) ProtoMessage() {} func (*TrustedClusterTokenCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{69} + return fileDescriptor_007ba1c3d6266d56, []int{71} } func (m *TrustedClusterTokenCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4025,7 +4120,7 @@ func (m *GithubConnectorCreate) Reset() { *m = GithubConnectorCreate{} } func (m *GithubConnectorCreate) String() string { return proto.CompactTextString(m) } func (*GithubConnectorCreate) ProtoMessage() {} func (*GithubConnectorCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{70} + return fileDescriptor_007ba1c3d6266d56, []int{72} } func (m *GithubConnectorCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4073,7 +4168,7 @@ func (m *GithubConnectorUpdate) Reset() { *m = GithubConnectorUpdate{} } func (m *GithubConnectorUpdate) String() string { return proto.CompactTextString(m) } func (*GithubConnectorUpdate) ProtoMessage() {} func (*GithubConnectorUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{71} + return fileDescriptor_007ba1c3d6266d56, []int{73} } func (m *GithubConnectorUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4121,7 +4216,7 @@ func (m *GithubConnectorDelete) Reset() { *m = GithubConnectorDelete{} } func (m *GithubConnectorDelete) String() string { return proto.CompactTextString(m) } func (*GithubConnectorDelete) ProtoMessage() {} func (*GithubConnectorDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{72} + return fileDescriptor_007ba1c3d6266d56, []int{74} } func (m *GithubConnectorDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4167,7 +4262,7 @@ func (m *OIDCConnectorCreate) Reset() { *m = OIDCConnectorCreate{} } func (m *OIDCConnectorCreate) String() string { return proto.CompactTextString(m) } func (*OIDCConnectorCreate) ProtoMessage() {} func (*OIDCConnectorCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{73} + return fileDescriptor_007ba1c3d6266d56, []int{75} } func (m *OIDCConnectorCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4213,7 +4308,7 @@ func (m *OIDCConnectorUpdate) Reset() { *m = OIDCConnectorUpdate{} } func (m *OIDCConnectorUpdate) String() string { return proto.CompactTextString(m) } func (*OIDCConnectorUpdate) ProtoMessage() {} func (*OIDCConnectorUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{74} + return fileDescriptor_007ba1c3d6266d56, []int{76} } func (m *OIDCConnectorUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4259,7 +4354,7 @@ func (m *OIDCConnectorDelete) Reset() { *m = OIDCConnectorDelete{} } func (m *OIDCConnectorDelete) String() string { return proto.CompactTextString(m) } func (*OIDCConnectorDelete) ProtoMessage() {} func (*OIDCConnectorDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{75} + return fileDescriptor_007ba1c3d6266d56, []int{77} } func (m *OIDCConnectorDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4307,7 +4402,7 @@ func (m *SAMLConnectorCreate) Reset() { *m = SAMLConnectorCreate{} } func (m *SAMLConnectorCreate) String() string { return proto.CompactTextString(m) } func (*SAMLConnectorCreate) ProtoMessage() {} func (*SAMLConnectorCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{76} + return fileDescriptor_007ba1c3d6266d56, []int{78} } func (m *SAMLConnectorCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4355,7 +4450,7 @@ func (m *SAMLConnectorUpdate) Reset() { *m = SAMLConnectorUpdate{} } func (m *SAMLConnectorUpdate) String() string { return proto.CompactTextString(m) } func (*SAMLConnectorUpdate) ProtoMessage() {} func (*SAMLConnectorUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{77} + return fileDescriptor_007ba1c3d6266d56, []int{79} } func (m *SAMLConnectorUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4401,7 +4496,7 @@ func (m *SAMLConnectorDelete) Reset() { *m = SAMLConnectorDelete{} } func (m *SAMLConnectorDelete) String() string { return proto.CompactTextString(m) } func (*SAMLConnectorDelete) ProtoMessage() {} func (*SAMLConnectorDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{78} + return fileDescriptor_007ba1c3d6266d56, []int{80} } func (m *SAMLConnectorDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4467,7 +4562,7 @@ func (m *KubeRequest) Reset() { *m = KubeRequest{} } func (m *KubeRequest) String() string { return proto.CompactTextString(m) } func (*KubeRequest) ProtoMessage() {} func (*KubeRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{79} + return fileDescriptor_007ba1c3d6266d56, []int{81} } func (m *KubeRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4515,7 +4610,7 @@ func (m *AppMetadata) Reset() { *m = AppMetadata{} } func (m *AppMetadata) String() string { return proto.CompactTextString(m) } func (*AppMetadata) ProtoMessage() {} func (*AppMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{80} + return fileDescriptor_007ba1c3d6266d56, []int{82} } func (m *AppMetadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4563,7 +4658,7 @@ func (m *AppCreate) Reset() { *m = AppCreate{} } func (m *AppCreate) String() string { return proto.CompactTextString(m) } func (*AppCreate) ProtoMessage() {} func (*AppCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{81} + return fileDescriptor_007ba1c3d6266d56, []int{83} } func (m *AppCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4611,7 +4706,7 @@ func (m *AppUpdate) Reset() { *m = AppUpdate{} } func (m *AppUpdate) String() string { return proto.CompactTextString(m) } func (*AppUpdate) ProtoMessage() {} func (*AppUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{82} + return fileDescriptor_007ba1c3d6266d56, []int{84} } func (m *AppUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4657,7 +4752,7 @@ func (m *AppDelete) Reset() { *m = AppDelete{} } func (m *AppDelete) String() string { return proto.CompactTextString(m) } func (*AppDelete) ProtoMessage() {} func (*AppDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{83} + return fileDescriptor_007ba1c3d6266d56, []int{85} } func (m *AppDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4712,7 +4807,7 @@ func (m *AppSessionStart) Reset() { *m = AppSessionStart{} } func (m *AppSessionStart) String() string { return proto.CompactTextString(m) } func (*AppSessionStart) ProtoMessage() {} func (*AppSessionStart) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{84} + return fileDescriptor_007ba1c3d6266d56, []int{86} } func (m *AppSessionStart) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4764,7 +4859,7 @@ func (m *AppSessionEnd) Reset() { *m = AppSessionEnd{} } func (m *AppSessionEnd) String() string { return proto.CompactTextString(m) } func (*AppSessionEnd) ProtoMessage() {} func (*AppSessionEnd) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{85} + return fileDescriptor_007ba1c3d6266d56, []int{87} } func (m *AppSessionEnd) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4821,7 +4916,7 @@ func (m *AppSessionChunk) Reset() { *m = AppSessionChunk{} } func (m *AppSessionChunk) String() string { return proto.CompactTextString(m) } func (*AppSessionChunk) ProtoMessage() {} func (*AppSessionChunk) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{86} + return fileDescriptor_007ba1c3d6266d56, []int{88} } func (m *AppSessionChunk) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4875,7 +4970,7 @@ func (m *AppSessionRequest) Reset() { *m = AppSessionRequest{} } func (m *AppSessionRequest) String() string { return proto.CompactTextString(m) } func (*AppSessionRequest) ProtoMessage() {} func (*AppSessionRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{87} + return fileDescriptor_007ba1c3d6266d56, []int{89} } func (m *AppSessionRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4923,7 +5018,7 @@ func (m *AWSRequestMetadata) Reset() { *m = AWSRequestMetadata{} } func (m *AWSRequestMetadata) String() string { return proto.CompactTextString(m) } func (*AWSRequestMetadata) ProtoMessage() {} func (*AWSRequestMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{88} + return fileDescriptor_007ba1c3d6266d56, []int{90} } func (m *AWSRequestMetadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4989,7 +5084,7 @@ func (m *DatabaseMetadata) Reset() { *m = DatabaseMetadata{} } func (m *DatabaseMetadata) String() string { return proto.CompactTextString(m) } func (*DatabaseMetadata) ProtoMessage() {} func (*DatabaseMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{89} + return fileDescriptor_007ba1c3d6266d56, []int{91} } func (m *DatabaseMetadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5037,7 +5132,7 @@ func (m *DatabaseCreate) Reset() { *m = DatabaseCreate{} } func (m *DatabaseCreate) String() string { return proto.CompactTextString(m) } func (*DatabaseCreate) ProtoMessage() {} func (*DatabaseCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{90} + return fileDescriptor_007ba1c3d6266d56, []int{92} } func (m *DatabaseCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5085,7 +5180,7 @@ func (m *DatabaseUpdate) Reset() { *m = DatabaseUpdate{} } func (m *DatabaseUpdate) String() string { return proto.CompactTextString(m) } func (*DatabaseUpdate) ProtoMessage() {} func (*DatabaseUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{91} + return fileDescriptor_007ba1c3d6266d56, []int{93} } func (m *DatabaseUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5131,7 +5226,7 @@ func (m *DatabaseDelete) Reset() { *m = DatabaseDelete{} } func (m *DatabaseDelete) String() string { return proto.CompactTextString(m) } func (*DatabaseDelete) ProtoMessage() {} func (*DatabaseDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{92} + return fileDescriptor_007ba1c3d6266d56, []int{94} } func (m *DatabaseDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5189,7 +5284,7 @@ func (m *DatabaseSessionStart) Reset() { *m = DatabaseSessionStart{} } func (m *DatabaseSessionStart) String() string { return proto.CompactTextString(m) } func (*DatabaseSessionStart) ProtoMessage() {} func (*DatabaseSessionStart) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{93} + return fileDescriptor_007ba1c3d6266d56, []int{95} } func (m *DatabaseSessionStart) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5243,7 +5338,7 @@ func (m *DatabaseSessionQuery) Reset() { *m = DatabaseSessionQuery{} } func (m *DatabaseSessionQuery) String() string { return proto.CompactTextString(m) } func (*DatabaseSessionQuery) ProtoMessage() {} func (*DatabaseSessionQuery) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{94} + return fileDescriptor_007ba1c3d6266d56, []int{96} } func (m *DatabaseSessionQuery) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5298,7 +5393,7 @@ func (m *DatabaseSessionCommandResult) Reset() { *m = DatabaseSessionCom func (m *DatabaseSessionCommandResult) String() string { return proto.CompactTextString(m) } func (*DatabaseSessionCommandResult) ProtoMessage() {} func (*DatabaseSessionCommandResult) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{95} + return fileDescriptor_007ba1c3d6266d56, []int{97} } func (m *DatabaseSessionCommandResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5350,7 +5445,7 @@ func (m *DatabasePermissionUpdate) Reset() { *m = DatabasePermissionUpda func (m *DatabasePermissionUpdate) String() string { return proto.CompactTextString(m) } func (*DatabasePermissionUpdate) ProtoMessage() {} func (*DatabasePermissionUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{96} + return fileDescriptor_007ba1c3d6266d56, []int{98} } func (m *DatabasePermissionUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5394,7 +5489,7 @@ func (m *DatabasePermissionEntry) Reset() { *m = DatabasePermissionEntry func (m *DatabasePermissionEntry) String() string { return proto.CompactTextString(m) } func (*DatabasePermissionEntry) ProtoMessage() {} func (*DatabasePermissionEntry) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{97} + return fileDescriptor_007ba1c3d6266d56, []int{99} } func (m *DatabasePermissionEntry) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5449,7 +5544,7 @@ func (m *DatabaseUserCreate) Reset() { *m = DatabaseUserCreate{} } func (m *DatabaseUserCreate) String() string { return proto.CompactTextString(m) } func (*DatabaseUserCreate) ProtoMessage() {} func (*DatabaseUserCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{98} + return fileDescriptor_007ba1c3d6266d56, []int{100} } func (m *DatabaseUserCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5504,7 +5599,7 @@ func (m *DatabaseUserDeactivate) Reset() { *m = DatabaseUserDeactivate{} func (m *DatabaseUserDeactivate) String() string { return proto.CompactTextString(m) } func (*DatabaseUserDeactivate) ProtoMessage() {} func (*DatabaseUserDeactivate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{99} + return fileDescriptor_007ba1c3d6266d56, []int{101} } func (m *DatabaseUserDeactivate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5557,7 +5652,7 @@ func (m *PostgresParse) Reset() { *m = PostgresParse{} } func (m *PostgresParse) String() string { return proto.CompactTextString(m) } func (*PostgresParse) ProtoMessage() {} func (*PostgresParse) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{100} + return fileDescriptor_007ba1c3d6266d56, []int{102} } func (m *PostgresParse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5612,7 +5707,7 @@ func (m *PostgresBind) Reset() { *m = PostgresBind{} } func (m *PostgresBind) String() string { return proto.CompactTextString(m) } func (*PostgresBind) ProtoMessage() {} func (*PostgresBind) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{101} + return fileDescriptor_007ba1c3d6266d56, []int{103} } func (m *PostgresBind) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5663,7 +5758,7 @@ func (m *PostgresExecute) Reset() { *m = PostgresExecute{} } func (m *PostgresExecute) String() string { return proto.CompactTextString(m) } func (*PostgresExecute) ProtoMessage() {} func (*PostgresExecute) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{102} + return fileDescriptor_007ba1c3d6266d56, []int{104} } func (m *PostgresExecute) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5716,7 +5811,7 @@ func (m *PostgresClose) Reset() { *m = PostgresClose{} } func (m *PostgresClose) String() string { return proto.CompactTextString(m) } func (*PostgresClose) ProtoMessage() {} func (*PostgresClose) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{103} + return fileDescriptor_007ba1c3d6266d56, []int{105} } func (m *PostgresClose) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5769,7 +5864,7 @@ func (m *PostgresFunctionCall) Reset() { *m = PostgresFunctionCall{} } func (m *PostgresFunctionCall) String() string { return proto.CompactTextString(m) } func (*PostgresFunctionCall) ProtoMessage() {} func (*PostgresFunctionCall) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{104} + return fileDescriptor_007ba1c3d6266d56, []int{106} } func (m *PostgresFunctionCall) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5837,7 +5932,7 @@ func (m *WindowsDesktopSessionStart) Reset() { *m = WindowsDesktopSessio func (m *WindowsDesktopSessionStart) String() string { return proto.CompactTextString(m) } func (*WindowsDesktopSessionStart) ProtoMessage() {} func (*WindowsDesktopSessionStart) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{105} + return fileDescriptor_007ba1c3d6266d56, []int{107} } func (m *WindowsDesktopSessionStart) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5889,7 +5984,7 @@ func (m *DatabaseSessionEnd) Reset() { *m = DatabaseSessionEnd{} } func (m *DatabaseSessionEnd) String() string { return proto.CompactTextString(m) } func (*DatabaseSessionEnd) ProtoMessage() {} func (*DatabaseSessionEnd) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{106} + return fileDescriptor_007ba1c3d6266d56, []int{108} } func (m *DatabaseSessionEnd) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5935,7 +6030,7 @@ func (m *MFADeviceMetadata) Reset() { *m = MFADeviceMetadata{} } func (m *MFADeviceMetadata) String() string { return proto.CompactTextString(m) } func (*MFADeviceMetadata) ProtoMessage() {} func (*MFADeviceMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{107} + return fileDescriptor_007ba1c3d6266d56, []int{109} } func (m *MFADeviceMetadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -5983,7 +6078,7 @@ func (m *MFADeviceAdd) Reset() { *m = MFADeviceAdd{} } func (m *MFADeviceAdd) String() string { return proto.CompactTextString(m) } func (*MFADeviceAdd) ProtoMessage() {} func (*MFADeviceAdd) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{108} + return fileDescriptor_007ba1c3d6266d56, []int{110} } func (m *MFADeviceAdd) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6031,7 +6126,7 @@ func (m *MFADeviceDelete) Reset() { *m = MFADeviceDelete{} } func (m *MFADeviceDelete) String() string { return proto.CompactTextString(m) } func (*MFADeviceDelete) ProtoMessage() {} func (*MFADeviceDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{109} + return fileDescriptor_007ba1c3d6266d56, []int{111} } func (m *MFADeviceDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6075,7 +6170,7 @@ func (m *BillingInformationUpdate) Reset() { *m = BillingInformationUpda func (m *BillingInformationUpdate) String() string { return proto.CompactTextString(m) } func (*BillingInformationUpdate) ProtoMessage() {} func (*BillingInformationUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{110} + return fileDescriptor_007ba1c3d6266d56, []int{112} } func (m *BillingInformationUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6119,7 +6214,7 @@ func (m *BillingCardCreate) Reset() { *m = BillingCardCreate{} } func (m *BillingCardCreate) String() string { return proto.CompactTextString(m) } func (*BillingCardCreate) ProtoMessage() {} func (*BillingCardCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{111} + return fileDescriptor_007ba1c3d6266d56, []int{113} } func (m *BillingCardCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6163,7 +6258,7 @@ func (m *BillingCardDelete) Reset() { *m = BillingCardDelete{} } func (m *BillingCardDelete) String() string { return proto.CompactTextString(m) } func (*BillingCardDelete) ProtoMessage() {} func (*BillingCardDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{112} + return fileDescriptor_007ba1c3d6266d56, []int{114} } func (m *BillingCardDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6217,7 +6312,7 @@ func (m *LockCreate) Reset() { *m = LockCreate{} } func (m *LockCreate) String() string { return proto.CompactTextString(m) } func (*LockCreate) ProtoMessage() {} func (*LockCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{113} + return fileDescriptor_007ba1c3d6266d56, []int{115} } func (m *LockCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6265,7 +6360,7 @@ func (m *LockDelete) Reset() { *m = LockDelete{} } func (m *LockDelete) String() string { return proto.CompactTextString(m) } func (*LockDelete) ProtoMessage() {} func (*LockDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{114} + return fileDescriptor_007ba1c3d6266d56, []int{116} } func (m *LockDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6309,7 +6404,7 @@ func (m *RecoveryCodeGenerate) Reset() { *m = RecoveryCodeGenerate{} } func (m *RecoveryCodeGenerate) String() string { return proto.CompactTextString(m) } func (*RecoveryCodeGenerate) ProtoMessage() {} func (*RecoveryCodeGenerate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{115} + return fileDescriptor_007ba1c3d6266d56, []int{117} } func (m *RecoveryCodeGenerate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6356,7 +6451,7 @@ func (m *RecoveryCodeUsed) Reset() { *m = RecoveryCodeUsed{} } func (m *RecoveryCodeUsed) String() string { return proto.CompactTextString(m) } func (*RecoveryCodeUsed) ProtoMessage() {} func (*RecoveryCodeUsed) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{116} + return fileDescriptor_007ba1c3d6266d56, []int{118} } func (m *RecoveryCodeUsed) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6422,7 +6517,7 @@ func (m *WindowsDesktopSessionEnd) Reset() { *m = WindowsDesktopSessionE func (m *WindowsDesktopSessionEnd) String() string { return proto.CompactTextString(m) } func (*WindowsDesktopSessionEnd) ProtoMessage() {} func (*WindowsDesktopSessionEnd) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{117} + return fileDescriptor_007ba1c3d6266d56, []int{119} } func (m *WindowsDesktopSessionEnd) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6470,7 +6565,7 @@ func (m *CertificateCreate) Reset() { *m = CertificateCreate{} } func (m *CertificateCreate) String() string { return proto.CompactTextString(m) } func (*CertificateCreate) ProtoMessage() {} func (*CertificateCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{118} + return fileDescriptor_007ba1c3d6266d56, []int{120} } func (m *CertificateCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6518,7 +6613,7 @@ func (m *RenewableCertificateGenerationMismatch) Reset() { func (m *RenewableCertificateGenerationMismatch) String() string { return proto.CompactTextString(m) } func (*RenewableCertificateGenerationMismatch) ProtoMessage() {} func (*RenewableCertificateGenerationMismatch) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{119} + return fileDescriptor_007ba1c3d6266d56, []int{121} } func (m *RenewableCertificateGenerationMismatch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6576,7 +6671,7 @@ func (m *BotJoin) Reset() { *m = BotJoin{} } func (m *BotJoin) String() string { return proto.CompactTextString(m) } func (*BotJoin) ProtoMessage() {} func (*BotJoin) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{120} + return fileDescriptor_007ba1c3d6266d56, []int{122} } func (m *BotJoin) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6638,7 +6733,7 @@ func (m *InstanceJoin) Reset() { *m = InstanceJoin{} } func (m *InstanceJoin) String() string { return proto.CompactTextString(m) } func (*InstanceJoin) ProtoMessage() {} func (*InstanceJoin) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{121} + return fileDescriptor_007ba1c3d6266d56, []int{123} } func (m *InstanceJoin) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6686,7 +6781,7 @@ func (m *Unknown) Reset() { *m = Unknown{} } func (m *Unknown) String() string { return proto.CompactTextString(m) } func (*Unknown) ProtoMessage() {} func (*Unknown) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{122} + return fileDescriptor_007ba1c3d6266d56, []int{124} } func (m *Unknown) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6743,7 +6838,7 @@ func (m *DeviceMetadata) Reset() { *m = DeviceMetadata{} } func (m *DeviceMetadata) String() string { return proto.CompactTextString(m) } func (*DeviceMetadata) ProtoMessage() {} func (*DeviceMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{123} + return fileDescriptor_007ba1c3d6266d56, []int{125} } func (m *DeviceMetadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6794,7 +6889,7 @@ func (m *DeviceEvent) Reset() { *m = DeviceEvent{} } func (m *DeviceEvent) String() string { return proto.CompactTextString(m) } func (*DeviceEvent) ProtoMessage() {} func (*DeviceEvent) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{124} + return fileDescriptor_007ba1c3d6266d56, []int{126} } func (m *DeviceEvent) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6846,7 +6941,7 @@ func (m *DeviceEvent2) Reset() { *m = DeviceEvent2{} } func (m *DeviceEvent2) String() string { return proto.CompactTextString(m) } func (*DeviceEvent2) ProtoMessage() {} func (*DeviceEvent2) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{125} + return fileDescriptor_007ba1c3d6266d56, []int{127} } func (m *DeviceEvent2) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6894,7 +6989,7 @@ func (m *DiscoveryConfigCreate) Reset() { *m = DiscoveryConfigCreate{} } func (m *DiscoveryConfigCreate) String() string { return proto.CompactTextString(m) } func (*DiscoveryConfigCreate) ProtoMessage() {} func (*DiscoveryConfigCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{126} + return fileDescriptor_007ba1c3d6266d56, []int{128} } func (m *DiscoveryConfigCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6942,7 +7037,7 @@ func (m *DiscoveryConfigUpdate) Reset() { *m = DiscoveryConfigUpdate{} } func (m *DiscoveryConfigUpdate) String() string { return proto.CompactTextString(m) } func (*DiscoveryConfigUpdate) ProtoMessage() {} func (*DiscoveryConfigUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{127} + return fileDescriptor_007ba1c3d6266d56, []int{129} } func (m *DiscoveryConfigUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -6990,7 +7085,7 @@ func (m *DiscoveryConfigDelete) Reset() { *m = DiscoveryConfigDelete{} } func (m *DiscoveryConfigDelete) String() string { return proto.CompactTextString(m) } func (*DiscoveryConfigDelete) ProtoMessage() {} func (*DiscoveryConfigDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{128} + return fileDescriptor_007ba1c3d6266d56, []int{130} } func (m *DiscoveryConfigDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7036,7 +7131,7 @@ func (m *DiscoveryConfigDeleteAll) Reset() { *m = DiscoveryConfigDeleteA func (m *DiscoveryConfigDeleteAll) String() string { return proto.CompactTextString(m) } func (*DiscoveryConfigDeleteAll) ProtoMessage() {} func (*DiscoveryConfigDeleteAll) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{129} + return fileDescriptor_007ba1c3d6266d56, []int{131} } func (m *DiscoveryConfigDeleteAll) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7085,7 +7180,7 @@ func (m *IntegrationCreate) Reset() { *m = IntegrationCreate{} } func (m *IntegrationCreate) String() string { return proto.CompactTextString(m) } func (*IntegrationCreate) ProtoMessage() {} func (*IntegrationCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{130} + return fileDescriptor_007ba1c3d6266d56, []int{132} } func (m *IntegrationCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7134,7 +7229,7 @@ func (m *IntegrationUpdate) Reset() { *m = IntegrationUpdate{} } func (m *IntegrationUpdate) String() string { return proto.CompactTextString(m) } func (*IntegrationUpdate) ProtoMessage() {} func (*IntegrationUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{131} + return fileDescriptor_007ba1c3d6266d56, []int{133} } func (m *IntegrationUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7183,7 +7278,7 @@ func (m *IntegrationDelete) Reset() { *m = IntegrationDelete{} } func (m *IntegrationDelete) String() string { return proto.CompactTextString(m) } func (*IntegrationDelete) ProtoMessage() {} func (*IntegrationDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{132} + return fileDescriptor_007ba1c3d6266d56, []int{134} } func (m *IntegrationDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7229,7 +7324,7 @@ func (m *IntegrationMetadata) Reset() { *m = IntegrationMetadata{} } func (m *IntegrationMetadata) String() string { return proto.CompactTextString(m) } func (*IntegrationMetadata) ProtoMessage() {} func (*IntegrationMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{133} + return fileDescriptor_007ba1c3d6266d56, []int{135} } func (m *IntegrationMetadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7274,7 +7369,7 @@ func (m *AWSOIDCIntegrationMetadata) Reset() { *m = AWSOIDCIntegrationMe func (m *AWSOIDCIntegrationMetadata) String() string { return proto.CompactTextString(m) } func (*AWSOIDCIntegrationMetadata) ProtoMessage() {} func (*AWSOIDCIntegrationMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{134} + return fileDescriptor_007ba1c3d6266d56, []int{136} } func (m *AWSOIDCIntegrationMetadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7318,7 +7413,7 @@ func (m *AzureOIDCIntegrationMetadata) Reset() { *m = AzureOIDCIntegrati func (m *AzureOIDCIntegrationMetadata) String() string { return proto.CompactTextString(m) } func (*AzureOIDCIntegrationMetadata) ProtoMessage() {} func (*AzureOIDCIntegrationMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{135} + return fileDescriptor_007ba1c3d6266d56, []int{137} } func (m *AzureOIDCIntegrationMetadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7367,7 +7462,7 @@ func (m *PluginCreate) Reset() { *m = PluginCreate{} } func (m *PluginCreate) String() string { return proto.CompactTextString(m) } func (*PluginCreate) ProtoMessage() {} func (*PluginCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{136} + return fileDescriptor_007ba1c3d6266d56, []int{138} } func (m *PluginCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7416,7 +7511,7 @@ func (m *PluginUpdate) Reset() { *m = PluginUpdate{} } func (m *PluginUpdate) String() string { return proto.CompactTextString(m) } func (*PluginUpdate) ProtoMessage() {} func (*PluginUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{137} + return fileDescriptor_007ba1c3d6266d56, []int{139} } func (m *PluginUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7465,7 +7560,7 @@ func (m *PluginDelete) Reset() { *m = PluginDelete{} } func (m *PluginDelete) String() string { return proto.CompactTextString(m) } func (*PluginDelete) ProtoMessage() {} func (*PluginDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{138} + return fileDescriptor_007ba1c3d6266d56, []int{140} } func (m *PluginDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7514,7 +7609,7 @@ func (m *PluginMetadata) Reset() { *m = PluginMetadata{} } func (m *PluginMetadata) String() string { return proto.CompactTextString(m) } func (*PluginMetadata) ProtoMessage() {} func (*PluginMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{139} + return fileDescriptor_007ba1c3d6266d56, []int{141} } func (m *PluginMetadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -7732,6 +7827,7 @@ type OneOf struct { // *OneOf_UserTaskCreate // *OneOf_UserTaskUpdate // *OneOf_UserTaskDelete + // *OneOf_SFTPSummary Event isOneOf_Event `protobuf_oneof:"Event"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -7742,7 +7838,7 @@ func (m *OneOf) Reset() { *m = OneOf{} } func (m *OneOf) String() string { return proto.CompactTextString(m) } func (*OneOf) ProtoMessage() {} func (*OneOf) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{140} + return fileDescriptor_007ba1c3d6266d56, []int{142} } func (m *OneOf) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -8335,6 +8431,9 @@ type OneOf_UserTaskUpdate struct { type OneOf_UserTaskDelete struct { UserTaskDelete *UserTaskDelete `protobuf:"bytes,190,opt,name=UserTaskDelete,proto3,oneof" json:"UserTaskDelete,omitempty"` } +type OneOf_SFTPSummary struct { + SFTPSummary *SFTPSummary `protobuf:"bytes,191,opt,name=SFTPSummary,proto3,oneof" json:"SFTPSummary,omitempty"` +} func (*OneOf_UserLogin) isOneOf_Event() {} func (*OneOf_UserCreate) isOneOf_Event() {} @@ -8522,6 +8621,7 @@ func (*OneOf_CrownJewelDelete) isOneOf_Event() {} func (*OneOf_UserTaskCreate) isOneOf_Event() {} func (*OneOf_UserTaskUpdate) isOneOf_Event() {} func (*OneOf_UserTaskDelete) isOneOf_Event() {} +func (*OneOf_SFTPSummary) isOneOf_Event() {} func (m *OneOf) GetEvent() isOneOf_Event { if m != nil { @@ -9832,6 +9932,13 @@ func (m *OneOf) GetUserTaskDelete() *UserTaskDelete { return nil } +func (m *OneOf) GetSFTPSummary() *SFTPSummary { + if x, ok := m.GetEvent().(*OneOf_SFTPSummary); ok { + return x.SFTPSummary + } + return nil +} + // XXX_OneofWrappers is for the internal use of the proto package. func (*OneOf) XXX_OneofWrappers() []interface{} { return []interface{}{ @@ -10021,6 +10128,7 @@ func (*OneOf) XXX_OneofWrappers() []interface{} { (*OneOf_UserTaskCreate)(nil), (*OneOf_UserTaskUpdate)(nil), (*OneOf_UserTaskDelete)(nil), + (*OneOf_SFTPSummary)(nil), } } @@ -10041,7 +10149,7 @@ func (m *StreamStatus) Reset() { *m = StreamStatus{} } func (m *StreamStatus) String() string { return proto.CompactTextString(m) } func (*StreamStatus) ProtoMessage() {} func (*StreamStatus) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{141} + return fileDescriptor_007ba1c3d6266d56, []int{143} } func (m *StreamStatus) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10087,7 +10195,7 @@ func (m *SessionUpload) Reset() { *m = SessionUpload{} } func (m *SessionUpload) String() string { return proto.CompactTextString(m) } func (*SessionUpload) ProtoMessage() {} func (*SessionUpload) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{142} + return fileDescriptor_007ba1c3d6266d56, []int{144} } func (m *SessionUpload) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10206,7 +10314,7 @@ func (m *Identity) Reset() { *m = Identity{} } func (m *Identity) String() string { return proto.CompactTextString(m) } func (*Identity) ProtoMessage() {} func (*Identity) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{143} + return fileDescriptor_007ba1c3d6266d56, []int{145} } func (m *Identity) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10262,7 +10370,7 @@ func (m *RouteToApp) Reset() { *m = RouteToApp{} } func (m *RouteToApp) String() string { return proto.CompactTextString(m) } func (*RouteToApp) ProtoMessage() {} func (*RouteToApp) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{144} + return fileDescriptor_007ba1c3d6266d56, []int{146} } func (m *RouteToApp) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10312,7 +10420,7 @@ func (m *RouteToDatabase) Reset() { *m = RouteToDatabase{} } func (m *RouteToDatabase) String() string { return proto.CompactTextString(m) } func (*RouteToDatabase) ProtoMessage() {} func (*RouteToDatabase) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{145} + return fileDescriptor_007ba1c3d6266d56, []int{147} } func (m *RouteToDatabase) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10362,7 +10470,7 @@ func (m *DeviceExtensions) Reset() { *m = DeviceExtensions{} } func (m *DeviceExtensions) String() string { return proto.CompactTextString(m) } func (*DeviceExtensions) ProtoMessage() {} func (*DeviceExtensions) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{146} + return fileDescriptor_007ba1c3d6266d56, []int{148} } func (m *DeviceExtensions) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10419,7 +10527,7 @@ func (m *AccessRequestResourceSearch) Reset() { *m = AccessRequestResour func (m *AccessRequestResourceSearch) String() string { return proto.CompactTextString(m) } func (*AccessRequestResourceSearch) ProtoMessage() {} func (*AccessRequestResourceSearch) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{147} + return fileDescriptor_007ba1c3d6266d56, []int{149} } func (m *AccessRequestResourceSearch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10470,7 +10578,7 @@ func (m *MySQLStatementPrepare) Reset() { *m = MySQLStatementPrepare{} } func (m *MySQLStatementPrepare) String() string { return proto.CompactTextString(m) } func (*MySQLStatementPrepare) ProtoMessage() {} func (*MySQLStatementPrepare) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{148} + return fileDescriptor_007ba1c3d6266d56, []int{150} } func (m *MySQLStatementPrepare) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10523,7 +10631,7 @@ func (m *MySQLStatementExecute) Reset() { *m = MySQLStatementExecute{} } func (m *MySQLStatementExecute) String() string { return proto.CompactTextString(m) } func (*MySQLStatementExecute) ProtoMessage() {} func (*MySQLStatementExecute) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{149} + return fileDescriptor_007ba1c3d6266d56, []int{151} } func (m *MySQLStatementExecute) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10578,7 +10686,7 @@ func (m *MySQLStatementSendLongData) Reset() { *m = MySQLStatementSendLo func (m *MySQLStatementSendLongData) String() string { return proto.CompactTextString(m) } func (*MySQLStatementSendLongData) ProtoMessage() {} func (*MySQLStatementSendLongData) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{150} + return fileDescriptor_007ba1c3d6266d56, []int{152} } func (m *MySQLStatementSendLongData) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10629,7 +10737,7 @@ func (m *MySQLStatementClose) Reset() { *m = MySQLStatementClose{} } func (m *MySQLStatementClose) String() string { return proto.CompactTextString(m) } func (*MySQLStatementClose) ProtoMessage() {} func (*MySQLStatementClose) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{151} + return fileDescriptor_007ba1c3d6266d56, []int{153} } func (m *MySQLStatementClose) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10680,7 +10788,7 @@ func (m *MySQLStatementReset) Reset() { *m = MySQLStatementReset{} } func (m *MySQLStatementReset) String() string { return proto.CompactTextString(m) } func (*MySQLStatementReset) ProtoMessage() {} func (*MySQLStatementReset) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{152} + return fileDescriptor_007ba1c3d6266d56, []int{154} } func (m *MySQLStatementReset) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10733,7 +10841,7 @@ func (m *MySQLStatementFetch) Reset() { *m = MySQLStatementFetch{} } func (m *MySQLStatementFetch) String() string { return proto.CompactTextString(m) } func (*MySQLStatementFetch) ProtoMessage() {} func (*MySQLStatementFetch) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{153} + return fileDescriptor_007ba1c3d6266d56, []int{155} } func (m *MySQLStatementFetch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10786,7 +10894,7 @@ func (m *MySQLStatementBulkExecute) Reset() { *m = MySQLStatementBulkExe func (m *MySQLStatementBulkExecute) String() string { return proto.CompactTextString(m) } func (*MySQLStatementBulkExecute) ProtoMessage() {} func (*MySQLStatementBulkExecute) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{154} + return fileDescriptor_007ba1c3d6266d56, []int{156} } func (m *MySQLStatementBulkExecute) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10837,7 +10945,7 @@ func (m *MySQLInitDB) Reset() { *m = MySQLInitDB{} } func (m *MySQLInitDB) String() string { return proto.CompactTextString(m) } func (*MySQLInitDB) ProtoMessage() {} func (*MySQLInitDB) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{155} + return fileDescriptor_007ba1c3d6266d56, []int{157} } func (m *MySQLInitDB) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10887,7 +10995,7 @@ func (m *MySQLCreateDB) Reset() { *m = MySQLCreateDB{} } func (m *MySQLCreateDB) String() string { return proto.CompactTextString(m) } func (*MySQLCreateDB) ProtoMessage() {} func (*MySQLCreateDB) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{156} + return fileDescriptor_007ba1c3d6266d56, []int{158} } func (m *MySQLCreateDB) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10937,7 +11045,7 @@ func (m *MySQLDropDB) Reset() { *m = MySQLDropDB{} } func (m *MySQLDropDB) String() string { return proto.CompactTextString(m) } func (*MySQLDropDB) ProtoMessage() {} func (*MySQLDropDB) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{157} + return fileDescriptor_007ba1c3d6266d56, []int{159} } func (m *MySQLDropDB) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -10985,7 +11093,7 @@ func (m *MySQLShutDown) Reset() { *m = MySQLShutDown{} } func (m *MySQLShutDown) String() string { return proto.CompactTextString(m) } func (*MySQLShutDown) ProtoMessage() {} func (*MySQLShutDown) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{158} + return fileDescriptor_007ba1c3d6266d56, []int{160} } func (m *MySQLShutDown) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11036,7 +11144,7 @@ func (m *MySQLProcessKill) Reset() { *m = MySQLProcessKill{} } func (m *MySQLProcessKill) String() string { return proto.CompactTextString(m) } func (*MySQLProcessKill) ProtoMessage() {} func (*MySQLProcessKill) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{159} + return fileDescriptor_007ba1c3d6266d56, []int{161} } func (m *MySQLProcessKill) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11085,7 +11193,7 @@ func (m *MySQLDebug) Reset() { *m = MySQLDebug{} } func (m *MySQLDebug) String() string { return proto.CompactTextString(m) } func (*MySQLDebug) ProtoMessage() {} func (*MySQLDebug) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{160} + return fileDescriptor_007ba1c3d6266d56, []int{162} } func (m *MySQLDebug) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11135,7 +11243,7 @@ func (m *MySQLRefresh) Reset() { *m = MySQLRefresh{} } func (m *MySQLRefresh) String() string { return proto.CompactTextString(m) } func (*MySQLRefresh) ProtoMessage() {} func (*MySQLRefresh) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{161} + return fileDescriptor_007ba1c3d6266d56, []int{163} } func (m *MySQLRefresh) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11187,7 +11295,7 @@ func (m *SQLServerRPCRequest) Reset() { *m = SQLServerRPCRequest{} } func (m *SQLServerRPCRequest) String() string { return proto.CompactTextString(m) } func (*SQLServerRPCRequest) ProtoMessage() {} func (*SQLServerRPCRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{162} + return fileDescriptor_007ba1c3d6266d56, []int{164} } func (m *SQLServerRPCRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11237,7 +11345,7 @@ func (m *DatabaseSessionMalformedPacket) Reset() { *m = DatabaseSessionM func (m *DatabaseSessionMalformedPacket) String() string { return proto.CompactTextString(m) } func (*DatabaseSessionMalformedPacket) ProtoMessage() {} func (*DatabaseSessionMalformedPacket) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{163} + return fileDescriptor_007ba1c3d6266d56, []int{165} } func (m *DatabaseSessionMalformedPacket) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11304,7 +11412,7 @@ func (m *ElasticsearchRequest) Reset() { *m = ElasticsearchRequest{} } func (m *ElasticsearchRequest) String() string { return proto.CompactTextString(m) } func (*ElasticsearchRequest) ProtoMessage() {} func (*ElasticsearchRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{164} + return fileDescriptor_007ba1c3d6266d56, []int{166} } func (m *ElasticsearchRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11370,7 +11478,7 @@ func (m *OpenSearchRequest) Reset() { *m = OpenSearchRequest{} } func (m *OpenSearchRequest) String() string { return proto.CompactTextString(m) } func (*OpenSearchRequest) ProtoMessage() {} func (*OpenSearchRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{165} + return fileDescriptor_007ba1c3d6266d56, []int{167} } func (m *OpenSearchRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11430,7 +11538,7 @@ func (m *DynamoDBRequest) Reset() { *m = DynamoDBRequest{} } func (m *DynamoDBRequest) String() string { return proto.CompactTextString(m) } func (*DynamoDBRequest) ProtoMessage() {} func (*DynamoDBRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{166} + return fileDescriptor_007ba1c3d6266d56, []int{168} } func (m *DynamoDBRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11496,7 +11604,7 @@ func (m *AppSessionDynamoDBRequest) Reset() { *m = AppSessionDynamoDBReq func (m *AppSessionDynamoDBRequest) String() string { return proto.CompactTextString(m) } func (*AppSessionDynamoDBRequest) ProtoMessage() {} func (*AppSessionDynamoDBRequest) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{167} + return fileDescriptor_007ba1c3d6266d56, []int{169} } func (m *AppSessionDynamoDBRequest) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11538,7 +11646,7 @@ func (m *UpgradeWindowStartMetadata) Reset() { *m = UpgradeWindowStartMe func (m *UpgradeWindowStartMetadata) String() string { return proto.CompactTextString(m) } func (*UpgradeWindowStartMetadata) ProtoMessage() {} func (*UpgradeWindowStartMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{168} + return fileDescriptor_007ba1c3d6266d56, []int{170} } func (m *UpgradeWindowStartMetadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11586,7 +11694,7 @@ func (m *UpgradeWindowStartUpdate) Reset() { *m = UpgradeWindowStartUpda func (m *UpgradeWindowStartUpdate) String() string { return proto.CompactTextString(m) } func (*UpgradeWindowStartUpdate) ProtoMessage() {} func (*UpgradeWindowStartUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{169} + return fileDescriptor_007ba1c3d6266d56, []int{171} } func (m *UpgradeWindowStartUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11633,7 +11741,7 @@ func (m *SessionRecordingAccess) Reset() { *m = SessionRecordingAccess{} func (m *SessionRecordingAccess) String() string { return proto.CompactTextString(m) } func (*SessionRecordingAccess) ProtoMessage() {} func (*SessionRecordingAccess) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{170} + return fileDescriptor_007ba1c3d6266d56, []int{172} } func (m *SessionRecordingAccess) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11675,7 +11783,7 @@ func (m *KubeClusterMetadata) Reset() { *m = KubeClusterMetadata{} } func (m *KubeClusterMetadata) String() string { return proto.CompactTextString(m) } func (*KubeClusterMetadata) ProtoMessage() {} func (*KubeClusterMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{171} + return fileDescriptor_007ba1c3d6266d56, []int{173} } func (m *KubeClusterMetadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11723,7 +11831,7 @@ func (m *KubernetesClusterCreate) Reset() { *m = KubernetesClusterCreate func (m *KubernetesClusterCreate) String() string { return proto.CompactTextString(m) } func (*KubernetesClusterCreate) ProtoMessage() {} func (*KubernetesClusterCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{172} + return fileDescriptor_007ba1c3d6266d56, []int{174} } func (m *KubernetesClusterCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11771,7 +11879,7 @@ func (m *KubernetesClusterUpdate) Reset() { *m = KubernetesClusterUpdate func (m *KubernetesClusterUpdate) String() string { return proto.CompactTextString(m) } func (*KubernetesClusterUpdate) ProtoMessage() {} func (*KubernetesClusterUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{173} + return fileDescriptor_007ba1c3d6266d56, []int{175} } func (m *KubernetesClusterUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11817,7 +11925,7 @@ func (m *KubernetesClusterDelete) Reset() { *m = KubernetesClusterDelete func (m *KubernetesClusterDelete) String() string { return proto.CompactTextString(m) } func (*KubernetesClusterDelete) ProtoMessage() {} func (*KubernetesClusterDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{174} + return fileDescriptor_007ba1c3d6266d56, []int{176} } func (m *KubernetesClusterDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11880,7 +11988,7 @@ func (m *SSMRun) Reset() { *m = SSMRun{} } func (m *SSMRun) String() string { return proto.CompactTextString(m) } func (*SSMRun) ProtoMessage() {} func (*SSMRun) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{175} + return fileDescriptor_007ba1c3d6266d56, []int{177} } func (m *SSMRun) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11933,7 +12041,7 @@ func (m *CassandraPrepare) Reset() { *m = CassandraPrepare{} } func (m *CassandraPrepare) String() string { return proto.CompactTextString(m) } func (*CassandraPrepare) ProtoMessage() {} func (*CassandraPrepare) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{176} + return fileDescriptor_007ba1c3d6266d56, []int{178} } func (m *CassandraPrepare) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -11983,7 +12091,7 @@ func (m *CassandraExecute) Reset() { *m = CassandraExecute{} } func (m *CassandraExecute) String() string { return proto.CompactTextString(m) } func (*CassandraExecute) ProtoMessage() {} func (*CassandraExecute) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{177} + return fileDescriptor_007ba1c3d6266d56, []int{179} } func (m *CassandraExecute) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12039,7 +12147,7 @@ func (m *CassandraBatch) Reset() { *m = CassandraBatch{} } func (m *CassandraBatch) String() string { return proto.CompactTextString(m) } func (*CassandraBatch) ProtoMessage() {} func (*CassandraBatch) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{178} + return fileDescriptor_007ba1c3d6266d56, []int{180} } func (m *CassandraBatch) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12085,7 +12193,7 @@ func (m *CassandraBatch_BatchChild) Reset() { *m = CassandraBatch_BatchC func (m *CassandraBatch_BatchChild) String() string { return proto.CompactTextString(m) } func (*CassandraBatch_BatchChild) ProtoMessage() {} func (*CassandraBatch_BatchChild) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{178, 0} + return fileDescriptor_007ba1c3d6266d56, []int{180, 0} } func (m *CassandraBatch_BatchChild) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12129,7 +12237,7 @@ func (m *CassandraBatch_BatchChild_Value) Reset() { *m = CassandraBatch_ func (m *CassandraBatch_BatchChild_Value) String() string { return proto.CompactTextString(m) } func (*CassandraBatch_BatchChild_Value) ProtoMessage() {} func (*CassandraBatch_BatchChild_Value) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{178, 0, 0} + return fileDescriptor_007ba1c3d6266d56, []int{180, 0, 0} } func (m *CassandraBatch_BatchChild_Value) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12180,7 +12288,7 @@ func (m *CassandraRegister) Reset() { *m = CassandraRegister{} } func (m *CassandraRegister) String() string { return proto.CompactTextString(m) } func (*CassandraRegister) ProtoMessage() {} func (*CassandraRegister) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{179} + return fileDescriptor_007ba1c3d6266d56, []int{181} } func (m *CassandraRegister) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12226,7 +12334,7 @@ func (m *LoginRuleCreate) Reset() { *m = LoginRuleCreate{} } func (m *LoginRuleCreate) String() string { return proto.CompactTextString(m) } func (*LoginRuleCreate) ProtoMessage() {} func (*LoginRuleCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{180} + return fileDescriptor_007ba1c3d6266d56, []int{182} } func (m *LoginRuleCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12272,7 +12380,7 @@ func (m *LoginRuleDelete) Reset() { *m = LoginRuleDelete{} } func (m *LoginRuleDelete) String() string { return proto.CompactTextString(m) } func (*LoginRuleDelete) ProtoMessage() {} func (*LoginRuleDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{181} + return fileDescriptor_007ba1c3d6266d56, []int{183} } func (m *LoginRuleDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12322,7 +12430,7 @@ func (m *SAMLIdPAuthAttempt) Reset() { *m = SAMLIdPAuthAttempt{} } func (m *SAMLIdPAuthAttempt) String() string { return proto.CompactTextString(m) } func (*SAMLIdPAuthAttempt) ProtoMessage() {} func (*SAMLIdPAuthAttempt) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{182} + return fileDescriptor_007ba1c3d6266d56, []int{184} } func (m *SAMLIdPAuthAttempt) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12368,7 +12476,7 @@ func (m *SAMLIdPServiceProviderCreate) Reset() { *m = SAMLIdPServiceProv func (m *SAMLIdPServiceProviderCreate) String() string { return proto.CompactTextString(m) } func (*SAMLIdPServiceProviderCreate) ProtoMessage() {} func (*SAMLIdPServiceProviderCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{183} + return fileDescriptor_007ba1c3d6266d56, []int{185} } func (m *SAMLIdPServiceProviderCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12414,7 +12522,7 @@ func (m *SAMLIdPServiceProviderUpdate) Reset() { *m = SAMLIdPServiceProv func (m *SAMLIdPServiceProviderUpdate) String() string { return proto.CompactTextString(m) } func (*SAMLIdPServiceProviderUpdate) ProtoMessage() {} func (*SAMLIdPServiceProviderUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{184} + return fileDescriptor_007ba1c3d6266d56, []int{186} } func (m *SAMLIdPServiceProviderUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12460,7 +12568,7 @@ func (m *SAMLIdPServiceProviderDelete) Reset() { *m = SAMLIdPServiceProv func (m *SAMLIdPServiceProviderDelete) String() string { return proto.CompactTextString(m) } func (*SAMLIdPServiceProviderDelete) ProtoMessage() {} func (*SAMLIdPServiceProviderDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{185} + return fileDescriptor_007ba1c3d6266d56, []int{187} } func (m *SAMLIdPServiceProviderDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12504,7 +12612,7 @@ func (m *SAMLIdPServiceProviderDeleteAll) Reset() { *m = SAMLIdPServiceP func (m *SAMLIdPServiceProviderDeleteAll) String() string { return proto.CompactTextString(m) } func (*SAMLIdPServiceProviderDeleteAll) ProtoMessage() {} func (*SAMLIdPServiceProviderDeleteAll) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{186} + return fileDescriptor_007ba1c3d6266d56, []int{188} } func (m *SAMLIdPServiceProviderDeleteAll) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12550,7 +12658,7 @@ func (m *OktaResourcesUpdate) Reset() { *m = OktaResourcesUpdate{} } func (m *OktaResourcesUpdate) String() string { return proto.CompactTextString(m) } func (*OktaResourcesUpdate) ProtoMessage() {} func (*OktaResourcesUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{187} + return fileDescriptor_007ba1c3d6266d56, []int{189} } func (m *OktaResourcesUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12596,7 +12704,7 @@ func (m *OktaSyncFailure) Reset() { *m = OktaSyncFailure{} } func (m *OktaSyncFailure) String() string { return proto.CompactTextString(m) } func (*OktaSyncFailure) ProtoMessage() {} func (*OktaSyncFailure) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{188} + return fileDescriptor_007ba1c3d6266d56, []int{190} } func (m *OktaSyncFailure) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12646,7 +12754,7 @@ func (m *OktaAssignmentResult) Reset() { *m = OktaAssignmentResult{} } func (m *OktaAssignmentResult) String() string { return proto.CompactTextString(m) } func (*OktaAssignmentResult) ProtoMessage() {} func (*OktaAssignmentResult) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{189} + return fileDescriptor_007ba1c3d6266d56, []int{191} } func (m *OktaAssignmentResult) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12692,7 +12800,7 @@ func (m *AccessListCreate) Reset() { *m = AccessListCreate{} } func (m *AccessListCreate) String() string { return proto.CompactTextString(m) } func (*AccessListCreate) ProtoMessage() {} func (*AccessListCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{190} + return fileDescriptor_007ba1c3d6266d56, []int{192} } func (m *AccessListCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12738,7 +12846,7 @@ func (m *AccessListUpdate) Reset() { *m = AccessListUpdate{} } func (m *AccessListUpdate) String() string { return proto.CompactTextString(m) } func (*AccessListUpdate) ProtoMessage() {} func (*AccessListUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{191} + return fileDescriptor_007ba1c3d6266d56, []int{193} } func (m *AccessListUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12784,7 +12892,7 @@ func (m *AccessListDelete) Reset() { *m = AccessListDelete{} } func (m *AccessListDelete) String() string { return proto.CompactTextString(m) } func (*AccessListDelete) ProtoMessage() {} func (*AccessListDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{192} + return fileDescriptor_007ba1c3d6266d56, []int{194} } func (m *AccessListDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12832,7 +12940,7 @@ func (m *AccessListMemberCreate) Reset() { *m = AccessListMemberCreate{} func (m *AccessListMemberCreate) String() string { return proto.CompactTextString(m) } func (*AccessListMemberCreate) ProtoMessage() {} func (*AccessListMemberCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{193} + return fileDescriptor_007ba1c3d6266d56, []int{195} } func (m *AccessListMemberCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12880,7 +12988,7 @@ func (m *AccessListMemberUpdate) Reset() { *m = AccessListMemberUpdate{} func (m *AccessListMemberUpdate) String() string { return proto.CompactTextString(m) } func (*AccessListMemberUpdate) ProtoMessage() {} func (*AccessListMemberUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{194} + return fileDescriptor_007ba1c3d6266d56, []int{196} } func (m *AccessListMemberUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12928,7 +13036,7 @@ func (m *AccessListMemberDelete) Reset() { *m = AccessListMemberDelete{} func (m *AccessListMemberDelete) String() string { return proto.CompactTextString(m) } func (*AccessListMemberDelete) ProtoMessage() {} func (*AccessListMemberDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{195} + return fileDescriptor_007ba1c3d6266d56, []int{197} } func (m *AccessListMemberDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -12978,7 +13086,7 @@ func (m *AccessListMemberDeleteAllForAccessList) Reset() { func (m *AccessListMemberDeleteAllForAccessList) String() string { return proto.CompactTextString(m) } func (*AccessListMemberDeleteAllForAccessList) ProtoMessage() {} func (*AccessListMemberDeleteAllForAccessList) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{196} + return fileDescriptor_007ba1c3d6266d56, []int{198} } func (m *AccessListMemberDeleteAllForAccessList) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13026,7 +13134,7 @@ func (m *AccessListReview) Reset() { *m = AccessListReview{} } func (m *AccessListReview) String() string { return proto.CompactTextString(m) } func (*AccessListReview) ProtoMessage() {} func (*AccessListReview) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{197} + return fileDescriptor_007ba1c3d6266d56, []int{199} } func (m *AccessListReview) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13074,7 +13182,7 @@ func (m *AuditQueryRun) Reset() { *m = AuditQueryRun{} } func (m *AuditQueryRun) String() string { return proto.CompactTextString(m) } func (*AuditQueryRun) ProtoMessage() {} func (*AuditQueryRun) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{198} + return fileDescriptor_007ba1c3d6266d56, []int{200} } func (m *AuditQueryRun) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13124,7 +13232,7 @@ func (m *AuditQueryDetails) Reset() { *m = AuditQueryDetails{} } func (m *AuditQueryDetails) String() string { return proto.CompactTextString(m) } func (*AuditQueryDetails) ProtoMessage() {} func (*AuditQueryDetails) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{199} + return fileDescriptor_007ba1c3d6266d56, []int{201} } func (m *AuditQueryDetails) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13180,7 +13288,7 @@ func (m *SecurityReportRun) Reset() { *m = SecurityReportRun{} } func (m *SecurityReportRun) String() string { return proto.CompactTextString(m) } func (*SecurityReportRun) ProtoMessage() {} func (*SecurityReportRun) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{200} + return fileDescriptor_007ba1c3d6266d56, []int{202} } func (m *SecurityReportRun) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13228,7 +13336,7 @@ func (m *ExternalAuditStorageEnable) Reset() { *m = ExternalAuditStorage func (m *ExternalAuditStorageEnable) String() string { return proto.CompactTextString(m) } func (*ExternalAuditStorageEnable) ProtoMessage() {} func (*ExternalAuditStorageEnable) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{201} + return fileDescriptor_007ba1c3d6266d56, []int{203} } func (m *ExternalAuditStorageEnable) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13276,7 +13384,7 @@ func (m *ExternalAuditStorageDisable) Reset() { *m = ExternalAuditStorag func (m *ExternalAuditStorageDisable) String() string { return proto.CompactTextString(m) } func (*ExternalAuditStorageDisable) ProtoMessage() {} func (*ExternalAuditStorageDisable) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{202} + return fileDescriptor_007ba1c3d6266d56, []int{204} } func (m *ExternalAuditStorageDisable) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13337,7 +13445,7 @@ func (m *ExternalAuditStorageDetails) Reset() { *m = ExternalAuditStorag func (m *ExternalAuditStorageDetails) String() string { return proto.CompactTextString(m) } func (*ExternalAuditStorageDetails) ProtoMessage() {} func (*ExternalAuditStorageDetails) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{203} + return fileDescriptor_007ba1c3d6266d56, []int{205} } func (m *ExternalAuditStorageDetails) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13395,7 +13503,7 @@ func (m *OktaAccessListSync) Reset() { *m = OktaAccessListSync{} } func (m *OktaAccessListSync) String() string { return proto.CompactTextString(m) } func (*OktaAccessListSync) ProtoMessage() {} func (*OktaAccessListSync) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{204} + return fileDescriptor_007ba1c3d6266d56, []int{206} } func (m *OktaAccessListSync) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13459,7 +13567,7 @@ func (m *OktaUserSync) Reset() { *m = OktaUserSync{} } func (m *OktaUserSync) String() string { return proto.CompactTextString(m) } func (*OktaUserSync) ProtoMessage() {} func (*OktaUserSync) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{205} + return fileDescriptor_007ba1c3d6266d56, []int{207} } func (m *OktaUserSync) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13523,7 +13631,7 @@ func (m *SPIFFESVIDIssued) Reset() { *m = SPIFFESVIDIssued{} } func (m *SPIFFESVIDIssued) String() string { return proto.CompactTextString(m) } func (*SPIFFESVIDIssued) ProtoMessage() {} func (*SPIFFESVIDIssued) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{206} + return fileDescriptor_007ba1c3d6266d56, []int{208} } func (m *SPIFFESVIDIssued) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13574,7 +13682,7 @@ func (m *AuthPreferenceUpdate) Reset() { *m = AuthPreferenceUpdate{} } func (m *AuthPreferenceUpdate) String() string { return proto.CompactTextString(m) } func (*AuthPreferenceUpdate) ProtoMessage() {} func (*AuthPreferenceUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{207} + return fileDescriptor_007ba1c3d6266d56, []int{209} } func (m *AuthPreferenceUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13622,7 +13730,7 @@ func (m *ClusterNetworkingConfigUpdate) Reset() { *m = ClusterNetworking func (m *ClusterNetworkingConfigUpdate) String() string { return proto.CompactTextString(m) } func (*ClusterNetworkingConfigUpdate) ProtoMessage() {} func (*ClusterNetworkingConfigUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{208} + return fileDescriptor_007ba1c3d6266d56, []int{210} } func (m *ClusterNetworkingConfigUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13670,7 +13778,7 @@ func (m *SessionRecordingConfigUpdate) Reset() { *m = SessionRecordingCo func (m *SessionRecordingConfigUpdate) String() string { return proto.CompactTextString(m) } func (*SessionRecordingConfigUpdate) ProtoMessage() {} func (*SessionRecordingConfigUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{209} + return fileDescriptor_007ba1c3d6266d56, []int{211} } func (m *SessionRecordingConfigUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13720,7 +13828,7 @@ func (m *AccessPathChanged) Reset() { *m = AccessPathChanged{} } func (m *AccessPathChanged) String() string { return proto.CompactTextString(m) } func (*AccessPathChanged) ProtoMessage() {} func (*AccessPathChanged) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{210} + return fileDescriptor_007ba1c3d6266d56, []int{212} } func (m *AccessPathChanged) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13774,7 +13882,7 @@ func (m *SpannerRPC) Reset() { *m = SpannerRPC{} } func (m *SpannerRPC) String() string { return proto.CompactTextString(m) } func (*SpannerRPC) ProtoMessage() {} func (*SpannerRPC) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{211} + return fileDescriptor_007ba1c3d6266d56, []int{213} } func (m *SpannerRPC) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13822,7 +13930,7 @@ func (m *AccessGraphSettingsUpdate) Reset() { *m = AccessGraphSettingsUp func (m *AccessGraphSettingsUpdate) String() string { return proto.CompactTextString(m) } func (*AccessGraphSettingsUpdate) ProtoMessage() {} func (*AccessGraphSettingsUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{212} + return fileDescriptor_007ba1c3d6266d56, []int{214} } func (m *AccessGraphSettingsUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13870,7 +13978,7 @@ func (m *SPIFFEFederationCreate) Reset() { *m = SPIFFEFederationCreate{} func (m *SPIFFEFederationCreate) String() string { return proto.CompactTextString(m) } func (*SPIFFEFederationCreate) ProtoMessage() {} func (*SPIFFEFederationCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{213} + return fileDescriptor_007ba1c3d6266d56, []int{215} } func (m *SPIFFEFederationCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13918,7 +14026,7 @@ func (m *SPIFFEFederationDelete) Reset() { *m = SPIFFEFederationDelete{} func (m *SPIFFEFederationDelete) String() string { return proto.CompactTextString(m) } func (*SPIFFEFederationDelete) ProtoMessage() {} func (*SPIFFEFederationDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{214} + return fileDescriptor_007ba1c3d6266d56, []int{216} } func (m *SPIFFEFederationDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -13966,7 +14074,7 @@ func (m *AutoUpdateConfigCreate) Reset() { *m = AutoUpdateConfigCreate{} func (m *AutoUpdateConfigCreate) String() string { return proto.CompactTextString(m) } func (*AutoUpdateConfigCreate) ProtoMessage() {} func (*AutoUpdateConfigCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{215} + return fileDescriptor_007ba1c3d6266d56, []int{217} } func (m *AutoUpdateConfigCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14014,7 +14122,7 @@ func (m *AutoUpdateConfigUpdate) Reset() { *m = AutoUpdateConfigUpdate{} func (m *AutoUpdateConfigUpdate) String() string { return proto.CompactTextString(m) } func (*AutoUpdateConfigUpdate) ProtoMessage() {} func (*AutoUpdateConfigUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{216} + return fileDescriptor_007ba1c3d6266d56, []int{218} } func (m *AutoUpdateConfigUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14062,7 +14170,7 @@ func (m *AutoUpdateConfigDelete) Reset() { *m = AutoUpdateConfigDelete{} func (m *AutoUpdateConfigDelete) String() string { return proto.CompactTextString(m) } func (*AutoUpdateConfigDelete) ProtoMessage() {} func (*AutoUpdateConfigDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{217} + return fileDescriptor_007ba1c3d6266d56, []int{219} } func (m *AutoUpdateConfigDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14110,7 +14218,7 @@ func (m *AutoUpdateVersionCreate) Reset() { *m = AutoUpdateVersionCreate func (m *AutoUpdateVersionCreate) String() string { return proto.CompactTextString(m) } func (*AutoUpdateVersionCreate) ProtoMessage() {} func (*AutoUpdateVersionCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{218} + return fileDescriptor_007ba1c3d6266d56, []int{220} } func (m *AutoUpdateVersionCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14158,7 +14266,7 @@ func (m *AutoUpdateVersionUpdate) Reset() { *m = AutoUpdateVersionUpdate func (m *AutoUpdateVersionUpdate) String() string { return proto.CompactTextString(m) } func (*AutoUpdateVersionUpdate) ProtoMessage() {} func (*AutoUpdateVersionUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{219} + return fileDescriptor_007ba1c3d6266d56, []int{221} } func (m *AutoUpdateVersionUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14206,7 +14314,7 @@ func (m *AutoUpdateVersionDelete) Reset() { *m = AutoUpdateVersionDelete func (m *AutoUpdateVersionDelete) String() string { return proto.CompactTextString(m) } func (*AutoUpdateVersionDelete) ProtoMessage() {} func (*AutoUpdateVersionDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{220} + return fileDescriptor_007ba1c3d6266d56, []int{222} } func (m *AutoUpdateVersionDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14256,7 +14364,7 @@ func (m *StaticHostUserCreate) Reset() { *m = StaticHostUserCreate{} } func (m *StaticHostUserCreate) String() string { return proto.CompactTextString(m) } func (*StaticHostUserCreate) ProtoMessage() {} func (*StaticHostUserCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{221} + return fileDescriptor_007ba1c3d6266d56, []int{223} } func (m *StaticHostUserCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14306,7 +14414,7 @@ func (m *StaticHostUserUpdate) Reset() { *m = StaticHostUserUpdate{} } func (m *StaticHostUserUpdate) String() string { return proto.CompactTextString(m) } func (*StaticHostUserUpdate) ProtoMessage() {} func (*StaticHostUserUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{222} + return fileDescriptor_007ba1c3d6266d56, []int{224} } func (m *StaticHostUserUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14356,7 +14464,7 @@ func (m *StaticHostUserDelete) Reset() { *m = StaticHostUserDelete{} } func (m *StaticHostUserDelete) String() string { return proto.CompactTextString(m) } func (*StaticHostUserDelete) ProtoMessage() {} func (*StaticHostUserDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{223} + return fileDescriptor_007ba1c3d6266d56, []int{225} } func (m *StaticHostUserDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14408,7 +14516,7 @@ func (m *CrownJewelCreate) Reset() { *m = CrownJewelCreate{} } func (m *CrownJewelCreate) String() string { return proto.CompactTextString(m) } func (*CrownJewelCreate) ProtoMessage() {} func (*CrownJewelCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{224} + return fileDescriptor_007ba1c3d6266d56, []int{226} } func (m *CrownJewelCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14462,7 +14570,7 @@ func (m *CrownJewelUpdate) Reset() { *m = CrownJewelUpdate{} } func (m *CrownJewelUpdate) String() string { return proto.CompactTextString(m) } func (*CrownJewelUpdate) ProtoMessage() {} func (*CrownJewelUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{225} + return fileDescriptor_007ba1c3d6266d56, []int{227} } func (m *CrownJewelUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14512,7 +14620,7 @@ func (m *CrownJewelDelete) Reset() { *m = CrownJewelDelete{} } func (m *CrownJewelDelete) String() string { return proto.CompactTextString(m) } func (*CrownJewelDelete) ProtoMessage() {} func (*CrownJewelDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{226} + return fileDescriptor_007ba1c3d6266d56, []int{228} } func (m *CrownJewelDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14564,7 +14672,7 @@ func (m *UserTaskCreate) Reset() { *m = UserTaskCreate{} } func (m *UserTaskCreate) String() string { return proto.CompactTextString(m) } func (*UserTaskCreate) ProtoMessage() {} func (*UserTaskCreate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{227} + return fileDescriptor_007ba1c3d6266d56, []int{229} } func (m *UserTaskCreate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14620,7 +14728,7 @@ func (m *UserTaskUpdate) Reset() { *m = UserTaskUpdate{} } func (m *UserTaskUpdate) String() string { return proto.CompactTextString(m) } func (*UserTaskUpdate) ProtoMessage() {} func (*UserTaskUpdate) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{228} + return fileDescriptor_007ba1c3d6266d56, []int{230} } func (m *UserTaskUpdate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14666,7 +14774,7 @@ func (m *UserTaskMetadata) Reset() { *m = UserTaskMetadata{} } func (m *UserTaskMetadata) String() string { return proto.CompactTextString(m) } func (*UserTaskMetadata) ProtoMessage() {} func (*UserTaskMetadata) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{229} + return fileDescriptor_007ba1c3d6266d56, []int{231} } func (m *UserTaskMetadata) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14716,7 +14824,7 @@ func (m *UserTaskDelete) Reset() { *m = UserTaskDelete{} } func (m *UserTaskDelete) String() string { return proto.CompactTextString(m) } func (*UserTaskDelete) ProtoMessage() {} func (*UserTaskDelete) Descriptor() ([]byte, []int) { - return fileDescriptor_007ba1c3d6266d56, []int{230} + return fileDescriptor_007ba1c3d6266d56, []int{232} } func (m *UserTaskDelete) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -14815,6 +14923,8 @@ func init() { proto.RegisterType((*SCP)(nil), "events.SCP") proto.RegisterType((*SFTPAttributes)(nil), "events.SFTPAttributes") proto.RegisterType((*SFTP)(nil), "events.SFTP") + proto.RegisterType((*SFTPSummary)(nil), "events.SFTPSummary") + proto.RegisterType((*FileTransferStat)(nil), "events.FileTransferStat") proto.RegisterType((*Subsystem)(nil), "events.Subsystem") proto.RegisterType((*ClientDisconnect)(nil), "events.ClientDisconnect") proto.RegisterType((*AuthAttempt)(nil), "events.AuthAttempt") @@ -15007,1048 +15117,1057 @@ func init() { } var fileDescriptor_007ba1c3d6266d56 = []byte{ - // 16650 bytes of a gzipped FileDescriptorProto + // 16787 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6b, 0x78, 0x24, 0x49, - 0x72, 0x18, 0x86, 0x7e, 0xa0, 0xd1, 0x08, 0x3c, 0x06, 0x93, 0xf3, 0xaa, 0x99, 0x9d, 0x5d, 0xec, + 0x72, 0x18, 0x86, 0x7e, 0xa0, 0xd1, 0x08, 0x3c, 0x06, 0x93, 0xf3, 0xaa, 0x9d, 0x9d, 0x5d, 0xec, 0xd6, 0xde, 0xcd, 0xcd, 0xec, 0xed, 0xce, 0xdc, 0xce, 0xce, 0xee, 0xde, 0xbe, 0x6e, 0xaf, 0x81, - 0x06, 0x06, 0x3d, 0x83, 0xd7, 0x56, 0x63, 0x66, 0x6e, 0x8f, 0xbc, 0x6b, 0x16, 0xba, 0x12, 0x40, - 0xed, 0x74, 0x57, 0x35, 0xab, 0xaa, 0x07, 0x83, 0xf5, 0x8b, 0x27, 0x53, 0x14, 0x29, 0xee, 0x9d, - 0xce, 0x47, 0x53, 0xa4, 0x44, 0xd9, 0x22, 0xf5, 0xb0, 0x29, 0x9a, 0x22, 0x45, 0x89, 0x26, 0x79, - 0x24, 0xcf, 0x96, 0x7c, 0x7e, 0xac, 0xc4, 0xcf, 0xfc, 0x24, 0xd9, 0xd6, 0xa7, 0xcf, 0x96, 0x71, - 0x32, 0x6d, 0xfd, 0xc1, 0x67, 0x7f, 0x1f, 0x6d, 0xdf, 0x67, 0x9d, 0x65, 0xd9, 0x9f, 0xbf, 0x8c, - 0xcc, 0xaa, 0xca, 0x7a, 0x35, 0x9e, 0x2b, 0x2c, 0x16, 0xf8, 0x33, 0x83, 0x8e, 0x88, 0x8c, 0xcc, - 0x8a, 0x8c, 0xcc, 0x8c, 0xcc, 0x8c, 0x8c, 0x80, 0x6b, 0x1e, 0x6d, 0xd1, 0x8e, 0xed, 0x78, 0x37, - 0x5a, 0x74, 0x55, 0x6f, 0x6e, 0xdc, 0xf0, 0x36, 0x3a, 0xd4, 0xbd, 0x41, 0x1f, 0x51, 0xcb, 0xf3, - 0xff, 0xbb, 0xde, 0x71, 0x6c, 0xcf, 0x26, 0x25, 0xfe, 0xeb, 0xd2, 0xd9, 0x55, 0x7b, 0xd5, 0x46, - 0xd0, 0x0d, 0xf6, 0x17, 0xc7, 0x5e, 0xba, 0xbc, 0x6a, 0xdb, 0xab, 0x2d, 0x7a, 0x03, 0x7f, 0x2d, - 0x77, 0x57, 0x6e, 0xb8, 0x9e, 0xd3, 0x6d, 0x7a, 0x02, 0x3b, 0x1e, 0xc7, 0x7a, 0x66, 0x9b, 0xba, - 0x9e, 0xde, 0xee, 0x08, 0x82, 0xa7, 0xe2, 0x04, 0xeb, 0x8e, 0xde, 0xe9, 0x50, 0x47, 0x54, 0x7e, - 0xe9, 0x99, 0xf4, 0x76, 0xe2, 0xbf, 0x82, 0xe4, 0x85, 0x74, 0x12, 0x9f, 0x51, 0x8c, 0xa3, 0xfa, - 0xad, 0x3c, 0x94, 0xe7, 0xa8, 0xa7, 0x1b, 0xba, 0xa7, 0x93, 0xcb, 0xd0, 0x5f, 0xb3, 0x0c, 0xfa, - 0x58, 0xc9, 0x3d, 0x9d, 0xbb, 0x5a, 0x98, 0x28, 0x6d, 0x6d, 0x8e, 0xe7, 0xa9, 0xa9, 0x71, 0x20, - 0x79, 0x12, 0x8a, 0x4b, 0x1b, 0x1d, 0xaa, 0xe4, 0x9f, 0xce, 0x5d, 0x1d, 0x9c, 0x18, 0xdc, 0xda, - 0x1c, 0xef, 0x47, 0x59, 0x68, 0x08, 0x26, 0xcf, 0x40, 0xbe, 0x56, 0x55, 0x0a, 0x88, 0x3c, 0xbd, - 0xb5, 0x39, 0x3e, 0xd2, 0x35, 0x8d, 0xe7, 0xed, 0xb6, 0xe9, 0xd1, 0x76, 0xc7, 0xdb, 0xd0, 0xf2, - 0xb5, 0x2a, 0xb9, 0x02, 0xc5, 0x49, 0xdb, 0xa0, 0x4a, 0x11, 0x89, 0xc8, 0xd6, 0xe6, 0xf8, 0x68, - 0xd3, 0x36, 0xa8, 0x44, 0x85, 0x78, 0xf2, 0x45, 0x28, 0x2e, 0x99, 0x6d, 0xaa, 0xf4, 0x3f, 0x9d, - 0xbb, 0x3a, 0x74, 0xf3, 0xd2, 0x75, 0x2e, 0x95, 0xeb, 0xbe, 0x54, 0xae, 0x2f, 0xf9, 0x62, 0x9b, - 0x18, 0xfb, 0x70, 0x73, 0xbc, 0x6f, 0x6b, 0x73, 0xbc, 0xc8, 0x24, 0xf9, 0xcd, 0xef, 0x8d, 0xe7, - 0x34, 0x2c, 0x49, 0xde, 0x84, 0xa1, 0xc9, 0x56, 0xd7, 0xf5, 0xa8, 0x33, 0xaf, 0xb7, 0xa9, 0x52, - 0xc2, 0x0a, 0x2f, 0x6d, 0x6d, 0x8e, 0x9f, 0x6f, 0x72, 0x70, 0xc3, 0xd2, 0xdb, 0x72, 0xc5, 0x32, - 0xb9, 0xfa, 0x3b, 0x39, 0x38, 0x55, 0xa7, 0xae, 0x6b, 0xda, 0x56, 0x20, 0x9b, 0x4f, 0xc3, 0xa0, - 0x00, 0xd5, 0xaa, 0x28, 0x9f, 0xc1, 0x89, 0x81, 0xad, 0xcd, 0xf1, 0x82, 0x6b, 0x1a, 0x5a, 0x88, - 0x21, 0x9f, 0x83, 0x81, 0x07, 0xa6, 0xb7, 0x36, 0x37, 0x5d, 0x11, 0x72, 0x3a, 0xbf, 0xb5, 0x39, - 0x4e, 0xd6, 0x4d, 0x6f, 0xad, 0xd1, 0x5e, 0xd1, 0xa5, 0x0a, 0x7d, 0x32, 0x32, 0x0b, 0x63, 0x8b, - 0x8e, 0xf9, 0x48, 0xf7, 0xe8, 0x5d, 0xba, 0xb1, 0x68, 0xb7, 0xcc, 0xe6, 0x86, 0x90, 0xe2, 0xd3, - 0x5b, 0x9b, 0xe3, 0x97, 0x3b, 0x1c, 0xd7, 0x78, 0x48, 0x37, 0x1a, 0x1d, 0xc4, 0x4a, 0x4c, 0x12, - 0x25, 0xd5, 0xdf, 0x2d, 0xc1, 0xf0, 0x3d, 0x97, 0x3a, 0x41, 0xbb, 0xaf, 0x40, 0x91, 0xfd, 0x16, - 0x4d, 0x46, 0x99, 0x77, 0x5d, 0xea, 0xc8, 0x32, 0x67, 0x78, 0x72, 0x0d, 0xfa, 0x67, 0xed, 0x55, - 0xd3, 0x12, 0xcd, 0x3e, 0xb3, 0xb5, 0x39, 0x7e, 0xaa, 0xc5, 0x00, 0x12, 0x25, 0xa7, 0x20, 0x5f, - 0x80, 0xe1, 0x5a, 0x9b, 0xe9, 0x90, 0x6d, 0xe9, 0x9e, 0xed, 0x88, 0xd6, 0xa2, 0x74, 0x4d, 0x09, - 0x2e, 0x15, 0x8c, 0xd0, 0x93, 0xd7, 0x01, 0x2a, 0x0f, 0xea, 0x9a, 0xdd, 0xa2, 0x15, 0x6d, 0x5e, - 0x28, 0x03, 0x96, 0xd6, 0xd7, 0xdd, 0x86, 0x63, 0xb7, 0x68, 0x43, 0x77, 0xe4, 0x6a, 0x25, 0x6a, - 0x32, 0x05, 0xa3, 0x95, 0x66, 0x93, 0xba, 0xae, 0x46, 0x7f, 0xb4, 0x4b, 0x5d, 0xcf, 0x55, 0xfa, - 0x9f, 0x2e, 0x5c, 0x1d, 0x9c, 0x78, 0x72, 0x6b, 0x73, 0xfc, 0xa2, 0x8e, 0x98, 0x86, 0x23, 0x50, - 0x12, 0x8b, 0x58, 0x21, 0x32, 0x01, 0x23, 0x95, 0xf7, 0xbb, 0x0e, 0xad, 0x19, 0xd4, 0xf2, 0x4c, - 0x6f, 0x43, 0x68, 0xc8, 0xe5, 0xad, 0xcd, 0x71, 0x45, 0x67, 0x88, 0x86, 0x29, 0x30, 0x12, 0x93, - 0x68, 0x11, 0xb2, 0x00, 0xa7, 0x6f, 0x4f, 0x2e, 0xd6, 0xa9, 0xf3, 0xc8, 0x6c, 0xd2, 0x4a, 0xb3, - 0x69, 0x77, 0x2d, 0x4f, 0x19, 0x40, 0x3e, 0xcf, 0x6c, 0x6d, 0x8e, 0x3f, 0xb9, 0xda, 0xec, 0x34, - 0x5c, 0x8e, 0x6d, 0xe8, 0x1c, 0x2d, 0x31, 0x4b, 0x96, 0x25, 0x5f, 0x86, 0x91, 0x25, 0x87, 0x69, - 0xa1, 0x51, 0xa5, 0x0c, 0xae, 0x94, 0x51, 0xff, 0xcf, 0x5f, 0x17, 0x13, 0x10, 0x87, 0xfa, 0x3d, - 0xcb, 0x1b, 0xeb, 0xf1, 0x02, 0x0d, 0x03, 0x71, 0x72, 0x63, 0x23, 0xac, 0x08, 0x05, 0x85, 0x7d, - 0xbc, 0xe9, 0x50, 0x23, 0xa1, 0x6d, 0x83, 0xd8, 0xe6, 0x6b, 0x5b, 0x9b, 0xe3, 0x9f, 0x76, 0x04, - 0x4d, 0xa3, 0xa7, 0xda, 0x65, 0xb2, 0x22, 0x53, 0x50, 0x66, 0xda, 0x74, 0xd7, 0xb4, 0x0c, 0x05, - 0x9e, 0xce, 0x5d, 0x1d, 0xbd, 0x39, 0xe6, 0xb7, 0xde, 0x87, 0x4f, 0x5c, 0xd8, 0xda, 0x1c, 0x3f, - 0xc3, 0x74, 0xb0, 0xf1, 0xd0, 0xb4, 0xe4, 0x29, 0x22, 0x28, 0xca, 0x46, 0xd1, 0x84, 0xed, 0xe1, - 0xd0, 0x1d, 0x0a, 0x47, 0xd1, 0xb2, 0xed, 0xc5, 0x87, 0xad, 0x4f, 0x46, 0x26, 0x61, 0x64, 0xc2, - 0xf6, 0x6a, 0x96, 0xeb, 0xe9, 0x56, 0x93, 0xd6, 0xaa, 0xca, 0x30, 0x96, 0x43, 0xb5, 0x60, 0xe5, - 0x4c, 0x81, 0x69, 0x44, 0x26, 0xa5, 0x68, 0x19, 0xf5, 0x9f, 0x17, 0x61, 0x94, 0xf5, 0x89, 0x34, - 0x7c, 0x2a, 0x6c, 0x26, 0x60, 0x10, 0x56, 0x8b, 0xdb, 0xd1, 0x9b, 0x54, 0x8c, 0x24, 0xfc, 0x0a, - 0xcb, 0x07, 0x4a, 0x3c, 0xe3, 0xf4, 0xe4, 0x1a, 0x94, 0x39, 0xa8, 0x56, 0x15, 0x83, 0x6b, 0x64, - 0x6b, 0x73, 0x7c, 0xd0, 0x45, 0x58, 0xc3, 0x34, 0xb4, 0x00, 0xcd, 0xb4, 0x9b, 0xff, 0x3d, 0x63, - 0xbb, 0x1e, 0x63, 0x2e, 0xc6, 0x16, 0x7e, 0x86, 0x28, 0xb0, 0x26, 0x50, 0xb2, 0x76, 0x47, 0x0b, - 0x91, 0xd7, 0x00, 0x38, 0xa4, 0x62, 0x18, 0x8e, 0x18, 0x60, 0x17, 0xb7, 0x36, 0xc7, 0xcf, 0x09, - 0x16, 0xba, 0x61, 0xc8, 0xa3, 0x53, 0x22, 0x26, 0x6d, 0x18, 0xe6, 0xbf, 0x66, 0xf5, 0x65, 0xda, - 0xe2, 0xa3, 0x6b, 0xe8, 0xe6, 0x55, 0xbf, 0x13, 0xa3, 0xd2, 0xb9, 0x2e, 0x93, 0x4e, 0x59, 0x9e, - 0xb3, 0x31, 0x31, 0x2e, 0x26, 0xe4, 0x0b, 0xa2, 0xaa, 0x16, 0xe2, 0xe4, 0xa9, 0x40, 0x2e, 0xc3, - 0xe6, 0xe9, 0x69, 0xdb, 0x59, 0xd7, 0x1d, 0x83, 0x1a, 0x13, 0x1b, 0xf2, 0x3c, 0xbd, 0xe2, 0x83, - 0x1b, 0xcb, 0xb2, 0xea, 0xc9, 0xe4, 0xac, 0xd3, 0x39, 0xb7, 0x7a, 0x77, 0x19, 0x55, 0x6e, 0x20, - 0x21, 0x2d, 0xb7, 0xbb, 0x1c, 0x57, 0xb3, 0x68, 0x19, 0x36, 0x15, 0x70, 0xc0, 0x7d, 0xea, 0xb0, - 0x49, 0x1c, 0x47, 0x9d, 0x98, 0x0a, 0x04, 0x93, 0x47, 0x1c, 0x93, 0xe4, 0x21, 0x8a, 0x5c, 0x7a, - 0x1b, 0x4e, 0x27, 0x44, 0x41, 0xc6, 0xa0, 0xf0, 0x90, 0x6e, 0x70, 0x75, 0xd1, 0xd8, 0x9f, 0xe4, - 0x2c, 0xf4, 0x3f, 0xd2, 0x5b, 0x5d, 0xb1, 0x84, 0x6a, 0xfc, 0xc7, 0xeb, 0xf9, 0xcf, 0xe7, 0xd8, - 0x8a, 0x43, 0x26, 0x6d, 0xcb, 0xa2, 0x4d, 0x4f, 0x5e, 0x74, 0x5e, 0x81, 0xc1, 0x59, 0xbb, 0xa9, - 0xb7, 0xb0, 0x1f, 0xb9, 0xde, 0x29, 0x5b, 0x9b, 0xe3, 0x67, 0x59, 0x07, 0x5e, 0x6f, 0x31, 0x8c, - 0xd4, 0xa6, 0x90, 0x94, 0x29, 0x80, 0x46, 0xdb, 0xb6, 0x47, 0xb1, 0x60, 0x3e, 0x54, 0x00, 0x2c, - 0xe8, 0x20, 0x4a, 0x56, 0x80, 0x90, 0x98, 0xdc, 0x80, 0xf2, 0x22, 0x5b, 0x67, 0x9b, 0x76, 0x4b, - 0x28, 0x1f, 0x2e, 0x05, 0xb8, 0xf6, 0xca, 0x63, 0xd5, 0x27, 0x52, 0x67, 0x60, 0x74, 0xb2, 0x65, - 0x52, 0xcb, 0x93, 0x5b, 0xcd, 0x46, 0x72, 0x65, 0x95, 0x5a, 0x9e, 0xdc, 0x6a, 0x1c, 0xf3, 0x3a, - 0x83, 0xca, 0xad, 0x0e, 0x48, 0xd5, 0x3f, 0x2c, 0xc0, 0xc5, 0xbb, 0xdd, 0x65, 0xea, 0x58, 0xd4, - 0xa3, 0xae, 0x58, 0x90, 0x03, 0xae, 0xf3, 0x70, 0x3a, 0x81, 0x14, 0xdc, 0x71, 0xa1, 0x7c, 0x18, - 0x20, 0x1b, 0x62, 0x8d, 0x97, 0x67, 0xdb, 0x44, 0x51, 0x32, 0x03, 0xa7, 0x42, 0x20, 0x6b, 0x84, - 0xab, 0xe4, 0x71, 0x29, 0x79, 0x6a, 0x6b, 0x73, 0xfc, 0x92, 0xc4, 0x8d, 0x35, 0x5b, 0xd6, 0xe0, - 0x78, 0x31, 0x72, 0x17, 0xc6, 0x42, 0xd0, 0x6d, 0xc7, 0xee, 0x76, 0x5c, 0xa5, 0x80, 0xac, 0xc6, - 0xb7, 0x36, 0xc7, 0x9f, 0x90, 0x58, 0xad, 0x22, 0x52, 0x5e, 0xc0, 0xe3, 0x05, 0xc9, 0x8f, 0xe7, - 0x64, 0x6e, 0x62, 0x14, 0x16, 0x71, 0x14, 0xbe, 0xea, 0x8f, 0xc2, 0x4c, 0x21, 0x5d, 0x8f, 0x97, - 0x14, 0x83, 0x32, 0xd6, 0x8c, 0xc4, 0xa0, 0x4c, 0xd4, 0x78, 0x69, 0x12, 0xce, 0xa5, 0xf2, 0xda, - 0x95, 0x56, 0xff, 0xb3, 0x82, 0xcc, 0x65, 0xd1, 0x36, 0x82, 0xce, 0x5c, 0x90, 0x3b, 0x73, 0xd1, - 0x36, 0x70, 0xaa, 0xcf, 0x85, 0x6b, 0xa7, 0xd4, 0xd8, 0x8e, 0x6d, 0xc4, 0x67, 0xfd, 0x64, 0x59, - 0xf2, 0x55, 0x38, 0x9f, 0x00, 0xf2, 0xe9, 0x9a, 0x6b, 0xff, 0x95, 0xad, 0xcd, 0x71, 0x35, 0x85, - 0x6b, 0x7c, 0xf6, 0xce, 0xe0, 0x42, 0x74, 0xb8, 0x20, 0x49, 0xdd, 0xb6, 0x3c, 0xdd, 0xb4, 0x84, - 0x71, 0xc9, 0x47, 0xc9, 0x67, 0xb6, 0x36, 0xc7, 0x9f, 0x95, 0x75, 0xd0, 0xa7, 0x89, 0x37, 0x3e, - 0x8b, 0x0f, 0x31, 0x40, 0x49, 0x41, 0xd5, 0xda, 0xfa, 0xaa, 0x6f, 0x31, 0x5f, 0xdd, 0xda, 0x1c, - 0xff, 0x54, 0x6a, 0x1d, 0x26, 0xa3, 0x92, 0x57, 0xe8, 0x2c, 0x4e, 0x44, 0x03, 0x12, 0xe2, 0xe6, - 0x6d, 0x83, 0xe2, 0x37, 0xf4, 0x23, 0x7f, 0x75, 0x6b, 0x73, 0xfc, 0x29, 0x89, 0xbf, 0x65, 0x1b, - 0x34, 0xde, 0xfc, 0x94, 0xd2, 0xea, 0xef, 0x14, 0xe0, 0xa9, 0x7a, 0x65, 0x6e, 0xb6, 0x66, 0xf8, - 0x26, 0xcd, 0xa2, 0x63, 0x3f, 0x32, 0x0d, 0x69, 0xf4, 0x2e, 0xc3, 0x85, 0x18, 0x6a, 0x0a, 0xad, - 0xa8, 0xc0, 0x98, 0xc6, 0x6f, 0xf3, 0xcd, 0xa5, 0x8e, 0xa0, 0x69, 0x70, 0x53, 0x2b, 0xba, 0x68, - 0x67, 0x31, 0x62, 0x7d, 0x14, 0x43, 0xd5, 0xd7, 0x6c, 0xc7, 0x6b, 0x76, 0x3d, 0xa1, 0x04, 0xd8, - 0x47, 0x89, 0x3a, 0x5c, 0x41, 0xd4, 0xa3, 0x0a, 0x9f, 0x0f, 0xf9, 0xa9, 0x1c, 0x8c, 0x55, 0x3c, - 0xcf, 0x31, 0x97, 0xbb, 0x1e, 0x9d, 0xd3, 0x3b, 0x1d, 0xd3, 0x5a, 0xc5, 0xb1, 0x3e, 0x74, 0xf3, - 0xcd, 0x60, 0x8d, 0xec, 0x29, 0x89, 0xeb, 0xf1, 0xe2, 0xd2, 0x10, 0xd5, 0x7d, 0x54, 0xa3, 0xcd, - 0x71, 0xf2, 0x10, 0x8d, 0x97, 0x63, 0x43, 0x34, 0x95, 0xd7, 0xae, 0x86, 0xe8, 0xb7, 0x0a, 0x70, - 0x79, 0xe1, 0xa1, 0xa7, 0x6b, 0xd4, 0xb5, 0xbb, 0x4e, 0x93, 0xba, 0xf7, 0x3a, 0x86, 0xee, 0xd1, - 0x70, 0xa4, 0x8e, 0x43, 0x7f, 0xc5, 0x30, 0xa8, 0x81, 0xec, 0xfa, 0xf9, 0xb6, 0x4f, 0x67, 0x00, - 0x8d, 0xc3, 0xc9, 0xa7, 0x61, 0x40, 0x94, 0x41, 0xee, 0xfd, 0x13, 0x43, 0x5b, 0x9b, 0xe3, 0x03, - 0x5d, 0x0e, 0xd2, 0x7c, 0x1c, 0x23, 0xab, 0xd2, 0x16, 0x65, 0x64, 0x85, 0x90, 0xcc, 0xe0, 0x20, - 0xcd, 0xc7, 0x91, 0x77, 0x60, 0x14, 0xd9, 0x06, 0xed, 0x11, 0x73, 0xdf, 0x59, 0x5f, 0xba, 0x72, - 0x63, 0xf9, 0xd2, 0x84, 0xad, 0x69, 0x38, 0x7e, 0x01, 0x2d, 0xc6, 0x80, 0x3c, 0x80, 0x31, 0xd1, - 0x88, 0x90, 0x69, 0x7f, 0x0f, 0xa6, 0xe7, 0xb6, 0x36, 0xc7, 0x4f, 0x8b, 0xf6, 0x4b, 0x6c, 0x13, - 0x4c, 0x18, 0x63, 0xd1, 0xec, 0x90, 0x71, 0x69, 0x3b, 0xc6, 0xe2, 0x8b, 0x65, 0xc6, 0x71, 0x26, - 0xea, 0xbb, 0x30, 0x2c, 0x17, 0x24, 0xe7, 0x71, 0x6b, 0xcd, 0xc7, 0x09, 0x6e, 0xca, 0x4d, 0x03, - 0xf7, 0xd3, 0x2f, 0xc2, 0x50, 0x95, 0xba, 0x4d, 0xc7, 0xec, 0x30, 0xab, 0x41, 0x28, 0xf9, 0xa9, - 0xad, 0xcd, 0xf1, 0x21, 0x23, 0x04, 0x6b, 0x32, 0x8d, 0xfa, 0x7f, 0xe5, 0xe0, 0x3c, 0xe3, 0x5d, - 0x71, 0x5d, 0x73, 0xd5, 0x6a, 0xcb, 0xcb, 0xf6, 0xf3, 0x50, 0xaa, 0x63, 0x7d, 0xa2, 0xa6, 0xb3, - 0x5b, 0x9b, 0xe3, 0x63, 0xbc, 0x05, 0x92, 0x1e, 0x0a, 0x9a, 0x60, 0x5f, 0x99, 0xdf, 0x66, 0x5f, - 0xc9, 0x4c, 0x5a, 0x4f, 0x77, 0x3c, 0xd3, 0x5a, 0xad, 0x7b, 0xba, 0xd7, 0x75, 0x23, 0x26, 0xad, - 0xc0, 0x34, 0x5c, 0x44, 0x45, 0x4c, 0xda, 0x48, 0x21, 0xf2, 0x36, 0x0c, 0x4f, 0x59, 0x46, 0xc8, - 0x84, 0x4f, 0x88, 0x4f, 0x30, 0x4b, 0x93, 0x22, 0x3c, 0xc9, 0x22, 0x52, 0x40, 0xfd, 0xeb, 0x39, - 0x50, 0xf8, 0x26, 0x70, 0xd6, 0x74, 0xbd, 0x39, 0xda, 0x5e, 0x96, 0x66, 0xa7, 0x69, 0x7f, 0x57, - 0xc9, 0x70, 0xd2, 0x5a, 0x84, 0xa6, 0x80, 0xd8, 0x55, 0xb6, 0x4c, 0x37, 0xb1, 0xfd, 0x88, 0x95, - 0x22, 0x35, 0x18, 0xe0, 0x9c, 0xb9, 0x2d, 0x31, 0x74, 0x53, 0xf1, 0x15, 0x21, 0x5e, 0x35, 0x57, - 0x86, 0x36, 0x27, 0x96, 0x37, 0x34, 0xa2, 0xbc, 0xfa, 0x37, 0xf2, 0x30, 0x16, 0x2f, 0x44, 0x1e, - 0x40, 0xf9, 0x8e, 0x6d, 0x5a, 0xd4, 0x58, 0xb0, 0xb0, 0x85, 0xbd, 0x0f, 0x47, 0x7c, 0x5b, 0xfc, - 0xcc, 0x7b, 0x58, 0xa6, 0x21, 0x5b, 0xb0, 0x78, 0x56, 0x12, 0x30, 0x23, 0x5f, 0x86, 0x41, 0x66, - 0x03, 0x3e, 0x42, 0xce, 0xf9, 0x6d, 0x39, 0x3f, 0x2d, 0x38, 0x9f, 0x75, 0x78, 0xa1, 0x24, 0xeb, - 0x90, 0x1d, 0xd3, 0x2b, 0x8d, 0xea, 0xae, 0x6d, 0x89, 0x9e, 0x47, 0xbd, 0x72, 0x10, 0x22, 0xeb, - 0x15, 0xa7, 0x61, 0xa6, 0x2b, 0xff, 0x58, 0xec, 0x06, 0x69, 0xef, 0xc2, 0x65, 0x15, 0xef, 0x01, - 0x89, 0x58, 0xfd, 0x89, 0x3c, 0xbc, 0x10, 0x8a, 0x4c, 0xa3, 0x8f, 0x4c, 0xba, 0x2e, 0xc4, 0xb9, - 0x66, 0x76, 0xc4, 0x9e, 0x95, 0xa9, 0xbc, 0x3b, 0xb9, 0xa6, 0x5b, 0xab, 0xd4, 0x20, 0xd7, 0xa0, - 0x5f, 0xb3, 0x5b, 0xd4, 0x55, 0x72, 0x68, 0xae, 0xe1, 0x74, 0xe2, 0x30, 0x80, 0x7c, 0xe8, 0x81, - 0x14, 0xc4, 0x86, 0xd2, 0x92, 0xa3, 0x9b, 0x9e, 0xdf, 0xb3, 0x95, 0x64, 0xcf, 0xee, 0xa0, 0xc6, - 0xeb, 0x9c, 0x07, 0x9f, 0xf3, 0x51, 0x10, 0x1e, 0x02, 0x64, 0x41, 0x70, 0x92, 0x4b, 0xaf, 0xc1, - 0x90, 0x44, 0xbc, 0xab, 0x49, 0xfd, 0xdb, 0x45, 0x59, 0xd7, 0xfd, 0x66, 0x09, 0x5d, 0xbf, 0xc1, - 0x74, 0xd4, 0x75, 0x99, 0x55, 0xc1, 0x95, 0x5c, 0x68, 0x22, 0x82, 0xa2, 0x9a, 0x88, 0x20, 0xf2, - 0x12, 0x94, 0x39, 0x8b, 0x60, 0xff, 0x8a, 0x7b, 0x5f, 0x07, 0x61, 0xd1, 0xa5, 0x39, 0x20, 0x24, - 0xbf, 0x92, 0x83, 0x27, 0x7b, 0x4a, 0x02, 0x95, 0x61, 0xe8, 0xe6, 0xcb, 0x7b, 0x12, 0xe3, 0xc4, - 0x0b, 0x5b, 0x9b, 0xe3, 0xd7, 0xda, 0x01, 0x49, 0xc3, 0x91, 0x68, 0x1a, 0x4d, 0x4e, 0x24, 0xb5, - 0xab, 0x77, 0x53, 0x98, 0xf1, 0xc8, 0x2b, 0x9d, 0xc6, 0xa3, 0x23, 0xab, 0xb9, 0xe1, 0x37, 0xb2, - 0x18, 0x1a, 0x8f, 0xe2, 0x7b, 0x57, 0x7c, 0x92, 0x94, 0x6a, 0x32, 0xb8, 0x90, 0x26, 0x5c, 0xe0, - 0x98, 0xaa, 0xbe, 0xb1, 0xb0, 0x32, 0x67, 0x5b, 0xde, 0x9a, 0x5f, 0x41, 0xbf, 0x7c, 0xf6, 0x82, - 0x15, 0x18, 0xfa, 0x46, 0xc3, 0x5e, 0x69, 0xb4, 0x19, 0x55, 0x4a, 0x1d, 0x59, 0x9c, 0xd8, 0x44, - 0x2b, 0xc6, 0x9c, 0x3f, 0x05, 0x95, 0xc2, 0x93, 0x31, 0x7f, 0x9c, 0x26, 0x27, 0x9c, 0x58, 0x21, - 0xb5, 0x06, 0xc3, 0xb3, 0x76, 0xf3, 0x61, 0xa0, 0x2e, 0xaf, 0x41, 0x69, 0x49, 0x77, 0x56, 0xa9, - 0x87, 0xb2, 0x18, 0xba, 0x79, 0xfa, 0x3a, 0x3f, 0x6d, 0x66, 0x44, 0x1c, 0x31, 0x31, 0x2a, 0x66, - 0x83, 0x92, 0x87, 0xbf, 0x35, 0x51, 0x40, 0xfd, 0x5e, 0x3f, 0x0c, 0x8b, 0x93, 0x51, 0x9c, 0xcd, - 0xc9, 0xeb, 0xe1, 0x59, 0xb3, 0x98, 0xbe, 0x82, 0xd3, 0xa1, 0xe0, 0x54, 0x6b, 0x98, 0x31, 0xfb, - 0xfb, 0x9b, 0xe3, 0xb9, 0xad, 0xcd, 0xf1, 0x3e, 0xad, 0x2c, 0x6d, 0x2a, 0xc3, 0xf5, 0x46, 0x5a, - 0x60, 0xe5, 0xb3, 0xce, 0x58, 0x59, 0xbe, 0xfe, 0xbc, 0x0d, 0x03, 0xa2, 0x0d, 0x42, 0xe3, 0x2e, - 0x84, 0x67, 0x19, 0x91, 0x13, 0xde, 0x58, 0x69, 0xbf, 0x14, 0x79, 0x13, 0x4a, 0x7c, 0x6f, 0x2f, - 0x04, 0x70, 0x3e, 0xfd, 0x2c, 0x24, 0x56, 0x5c, 0x94, 0x21, 0x33, 0x00, 0xe1, 0xbe, 0x3e, 0x38, - 0xd0, 0x16, 0x1c, 0x92, 0x3b, 0xfe, 0x18, 0x17, 0xa9, 0x2c, 0x79, 0x05, 0x86, 0x97, 0xa8, 0xd3, - 0x36, 0x2d, 0xbd, 0x55, 0x37, 0xdf, 0xf7, 0xcf, 0xb4, 0x71, 0xe1, 0x75, 0xcd, 0xf7, 0xe5, 0x91, - 0x1b, 0xa1, 0x23, 0x5f, 0x49, 0xdb, 0x37, 0x0f, 0x60, 0x43, 0x9e, 0xd9, 0x76, 0x43, 0x19, 0x6b, - 0x4f, 0xca, 0x36, 0xfa, 0x1d, 0x18, 0x89, 0x6c, 0x99, 0xc4, 0xa1, 0xe5, 0x93, 0x49, 0xd6, 0xd2, - 0xfe, 0x2f, 0xc6, 0x36, 0xca, 0x81, 0x69, 0x72, 0xcd, 0x32, 0x3d, 0x53, 0x6f, 0x4d, 0xda, 0xed, - 0xb6, 0x6e, 0x19, 0xca, 0x60, 0xa8, 0xc9, 0x26, 0xc7, 0x34, 0x9a, 0x1c, 0x25, 0x6b, 0x72, 0xb4, - 0x10, 0xdb, 0x96, 0x8b, 0x3e, 0xd4, 0x68, 0xd3, 0x76, 0x98, 0x2d, 0x80, 0x67, 0x92, 0x62, 0x5b, - 0xee, 0x72, 0x5c, 0xc3, 0xf1, 0x91, 0xb2, 0xb1, 0x1d, 0x2f, 0x78, 0xa7, 0x58, 0x1e, 0x1a, 0x1b, - 0x8e, 0x1f, 0x23, 0xab, 0x7f, 0xad, 0x00, 0x43, 0x82, 0x94, 0x2d, 0xa5, 0x27, 0x0a, 0xbe, 0x1f, - 0x05, 0x4f, 0x55, 0xd4, 0xd2, 0x41, 0x29, 0xaa, 0xfa, 0x41, 0x3e, 0x98, 0x8d, 0x16, 0x1d, 0xd3, - 0xda, 0xdf, 0x6c, 0x74, 0x05, 0x60, 0x72, 0xad, 0x6b, 0x3d, 0xe4, 0xd7, 0x65, 0xf9, 0xf0, 0xba, - 0xac, 0x69, 0x6a, 0x12, 0x86, 0x3c, 0x09, 0xc5, 0x2a, 0xe3, 0xcf, 0x7a, 0x66, 0x78, 0x62, 0xf0, - 0x43, 0xce, 0x29, 0xf7, 0x82, 0x86, 0x60, 0xb6, 0xb9, 0x9a, 0xd8, 0xf0, 0x28, 0x37, 0x67, 0x0b, - 0x7c, 0x73, 0xb5, 0xcc, 0x00, 0x1a, 0x87, 0x93, 0x5b, 0x70, 0xba, 0x4a, 0x5b, 0xfa, 0xc6, 0x9c, - 0xd9, 0x6a, 0x99, 0x2e, 0x6d, 0xda, 0x96, 0xe1, 0xa2, 0x90, 0x45, 0x75, 0x6d, 0x57, 0x4b, 0x12, - 0x10, 0x15, 0x4a, 0x0b, 0x2b, 0x2b, 0x2e, 0xf5, 0x50, 0x7c, 0x85, 0x09, 0x60, 0x93, 0xb3, 0x8d, - 0x10, 0x4d, 0x60, 0xd4, 0x5f, 0xcf, 0xb1, 0xdd, 0x8b, 0xfb, 0xd0, 0xb3, 0x3b, 0x81, 0x96, 0xef, - 0x4b, 0x24, 0xd7, 0x42, 0xbb, 0x22, 0x8f, 0x5f, 0x7b, 0x4a, 0x7c, 0xed, 0x80, 0xb0, 0x2d, 0x42, - 0x8b, 0x22, 0xf5, 0xab, 0x0a, 0xdb, 0x7c, 0x95, 0xfa, 0xc7, 0x79, 0xb8, 0x20, 0x5a, 0x3c, 0xd9, - 0x32, 0x3b, 0xcb, 0xb6, 0xee, 0x18, 0x1a, 0x6d, 0x52, 0xf3, 0x11, 0x3d, 0x9a, 0x03, 0x2f, 0x3a, - 0x74, 0x8a, 0xfb, 0x18, 0x3a, 0x37, 0x71, 0x23, 0xc8, 0x24, 0x83, 0x07, 0xbe, 0xdc, 0xa8, 0x18, - 0xdb, 0xda, 0x1c, 0x1f, 0x36, 0x38, 0x18, 0x8f, 0xfc, 0x35, 0x99, 0x88, 0x29, 0xc9, 0x2c, 0xb5, - 0x56, 0xbd, 0x35, 0x54, 0x92, 0x7e, 0xae, 0x24, 0x2d, 0x84, 0x68, 0x02, 0xa3, 0xfe, 0x6f, 0x79, - 0x38, 0x1b, 0x17, 0x79, 0x9d, 0x5a, 0xc6, 0x89, 0xbc, 0x3f, 0x1a, 0x79, 0x7f, 0xbf, 0x00, 0x4f, - 0x88, 0x32, 0xf5, 0x35, 0xdd, 0xa1, 0x46, 0xd5, 0x74, 0x68, 0xd3, 0xb3, 0x9d, 0x8d, 0x23, 0x6c, - 0x40, 0x1d, 0x9c, 0xd8, 0x6f, 0x41, 0x49, 0x6c, 0xff, 0xf9, 0x3a, 0x33, 0x1a, 0xb4, 0x04, 0xa1, - 0x89, 0x15, 0x8a, 0x1f, 0x1d, 0xc4, 0x3a, 0xab, 0xb4, 0x93, 0xce, 0xfa, 0x3c, 0x8c, 0x04, 0xa2, - 0xc7, 0x8d, 0xe8, 0x40, 0x68, 0x6d, 0x19, 0x3e, 0x02, 0xf7, 0xa2, 0x5a, 0x94, 0x10, 0x6b, 0xf3, - 0x01, 0xb5, 0x2a, 0x5a, 0x43, 0x23, 0xa2, 0xb6, 0xa0, 0x9c, 0x69, 0x68, 0x32, 0x91, 0xba, 0x59, - 0x84, 0x4b, 0xe9, 0xdd, 0xae, 0x51, 0xdd, 0x38, 0xe9, 0xf5, 0x4f, 0x64, 0xaf, 0x93, 0x67, 0xa0, - 0xb8, 0xa8, 0x7b, 0x6b, 0xe2, 0xfa, 0x1d, 0xef, 0x84, 0x57, 0xcc, 0x16, 0x6d, 0x74, 0x74, 0x6f, - 0x4d, 0x43, 0x94, 0x34, 0x67, 0x00, 0x72, 0x4c, 0x99, 0x33, 0xa4, 0xc5, 0x7e, 0xe8, 0xe9, 0xdc, - 0xd5, 0x62, 0xea, 0x62, 0xff, 0xbd, 0x62, 0xd6, 0xbc, 0xf2, 0xc0, 0x31, 0x3d, 0x7a, 0xa2, 0x61, - 0x27, 0x1a, 0xb6, 0x4f, 0x0d, 0xfb, 0x87, 0x79, 0x18, 0x09, 0x36, 0x4d, 0xef, 0xd1, 0xe6, 0xe1, - 0xac, 0x55, 0xe1, 0x56, 0xa6, 0xb0, 0xef, 0xad, 0xcc, 0x7e, 0x14, 0x4a, 0x0d, 0x8e, 0x3c, 0xb9, - 0x69, 0x80, 0x12, 0xe3, 0x47, 0x9e, 0xc1, 0x41, 0xe7, 0x33, 0x30, 0x30, 0xa7, 0x3f, 0x36, 0xdb, - 0xdd, 0xb6, 0xb0, 0xd2, 0xd1, 0x9d, 0xac, 0xad, 0x3f, 0xd6, 0x7c, 0xb8, 0xfa, 0xdf, 0xe6, 0x60, - 0x54, 0x08, 0x55, 0x30, 0xdf, 0x97, 0x54, 0x43, 0xe9, 0xe4, 0xf7, 0x2d, 0x9d, 0xc2, 0xde, 0xa5, - 0xa3, 0xfe, 0x85, 0x02, 0x28, 0xd3, 0x66, 0x8b, 0x2e, 0x39, 0xba, 0xe5, 0xae, 0x50, 0x47, 0x6c, - 0xa7, 0xa7, 0x18, 0xab, 0x7d, 0x7d, 0xa0, 0x34, 0xa5, 0xe4, 0xf7, 0x34, 0xa5, 0x7c, 0x16, 0x06, - 0x45, 0x63, 0x02, 0x57, 0x46, 0x1c, 0x35, 0x8e, 0x0f, 0xd4, 0x42, 0x3c, 0x23, 0xae, 0x74, 0x3a, - 0x8e, 0xfd, 0x88, 0x3a, 0xfc, 0x96, 0x4a, 0x10, 0xeb, 0x3e, 0x50, 0x0b, 0xf1, 0x12, 0x67, 0xea, - 0xdb, 0x8b, 0x32, 0x67, 0xea, 0x68, 0x21, 0x9e, 0x5c, 0x85, 0xf2, 0xac, 0xdd, 0xd4, 0x51, 0xd0, - 0x7c, 0x5a, 0x19, 0xde, 0xda, 0x1c, 0x2f, 0xb7, 0x04, 0x4c, 0x0b, 0xb0, 0x8c, 0xb2, 0x6a, 0xaf, - 0x5b, 0x2d, 0x5b, 0xe7, 0xce, 0x2f, 0x65, 0x4e, 0x69, 0x08, 0x98, 0x16, 0x60, 0x19, 0x25, 0x93, - 0x39, 0x3a, 0x15, 0x95, 0x43, 0x9e, 0x2b, 0x02, 0xa6, 0x05, 0x58, 0xf5, 0xd7, 0x8b, 0x4c, 0x7b, - 0x5d, 0xf3, 0xfd, 0x63, 0xbf, 0x2e, 0x84, 0x03, 0xa6, 0x7f, 0x0f, 0x03, 0xe6, 0xd8, 0x1c, 0xd8, - 0xa9, 0xff, 0x7c, 0x00, 0x40, 0x48, 0x7f, 0xea, 0x64, 0x73, 0xb8, 0x3f, 0xad, 0xa9, 0xc2, 0xe9, - 0x29, 0x6b, 0x4d, 0xb7, 0x9a, 0xd4, 0x08, 0x8f, 0x2d, 0x4b, 0x38, 0xb4, 0xd1, 0x09, 0x92, 0x0a, - 0x64, 0x78, 0x6e, 0xa9, 0x25, 0x0b, 0x90, 0x17, 0x61, 0xa8, 0x66, 0x79, 0xd4, 0xd1, 0x9b, 0x9e, - 0xf9, 0x88, 0x8a, 0xa9, 0x01, 0x6f, 0x86, 0xcd, 0x10, 0xac, 0xc9, 0x34, 0xe4, 0x16, 0x0c, 0x2f, - 0xea, 0x8e, 0x67, 0x36, 0xcd, 0x8e, 0x6e, 0x79, 0xae, 0x52, 0xc6, 0x19, 0x0d, 0x2d, 0x8c, 0x8e, - 0x04, 0xd7, 0x22, 0x54, 0xe4, 0x2b, 0x30, 0x88, 0x5b, 0x53, 0xf4, 0xd7, 0x1e, 0xdc, 0xf6, 0xe2, - 0xf0, 0xd9, 0xd0, 0x3d, 0x90, 0x9f, 0xbe, 0xe2, 0x0d, 0x70, 0xfc, 0xee, 0x30, 0xe0, 0x48, 0xbe, - 0x04, 0x03, 0x53, 0x96, 0x81, 0xcc, 0x61, 0x5b, 0xe6, 0xaa, 0x60, 0x7e, 0x3e, 0x64, 0x6e, 0x77, - 0x62, 0xbc, 0x7d, 0x76, 0xe9, 0xa3, 0x6c, 0xe8, 0xa3, 0x1b, 0x65, 0xc3, 0x1f, 0xc1, 0xb1, 0xf8, - 0xc8, 0x41, 0x1d, 0x8b, 0x8f, 0xee, 0xf1, 0x58, 0x5c, 0x7d, 0x1f, 0x86, 0x26, 0x16, 0xa7, 0x83, - 0xd1, 0x7b, 0x11, 0x0a, 0x8b, 0xc2, 0x53, 0xa1, 0xc8, 0xed, 0x99, 0x8e, 0x69, 0x68, 0x0c, 0x46, - 0xae, 0x41, 0x79, 0x12, 0xdd, 0xdf, 0xc4, 0x2d, 0x62, 0x91, 0xaf, 0x7f, 0x4d, 0x84, 0xa1, 0x17, - 0xac, 0x8f, 0x26, 0x9f, 0x86, 0x81, 0x45, 0xc7, 0x5e, 0x75, 0xf4, 0xb6, 0x58, 0x83, 0xd1, 0x55, - 0xa4, 0xc3, 0x41, 0x9a, 0x8f, 0x53, 0x7f, 0x26, 0xe7, 0x9b, 0xed, 0xac, 0x44, 0xbd, 0x8b, 0x47, - 0xf3, 0x58, 0x77, 0x99, 0x97, 0x70, 0x39, 0x48, 0xf3, 0x71, 0xe4, 0x1a, 0xf4, 0x4f, 0x39, 0x8e, - 0xed, 0xc8, 0x3e, 0xee, 0x94, 0x01, 0xe4, 0xeb, 0x5e, 0xa4, 0x20, 0xaf, 0xc2, 0x10, 0x9f, 0x73, - 0xf8, 0x89, 0x66, 0xa1, 0xd7, 0x4d, 0xa9, 0x4c, 0xa9, 0x7e, 0xb7, 0x20, 0xd9, 0x6c, 0x5c, 0xe2, - 0xc7, 0xf0, 0x56, 0xe0, 0x25, 0x28, 0x4c, 0x2c, 0x4e, 0x8b, 0x09, 0xf0, 0x8c, 0x5f, 0x54, 0x52, - 0x95, 0x58, 0x39, 0x46, 0x4d, 0x2e, 0x43, 0x71, 0x91, 0xa9, 0x4f, 0x09, 0xd5, 0xa3, 0xbc, 0xb5, - 0x39, 0x5e, 0xec, 0x30, 0xfd, 0x41, 0x28, 0x62, 0xd9, 0x66, 0x86, 0xef, 0x98, 0x38, 0x36, 0xdc, - 0xc7, 0x5c, 0x86, 0x62, 0xc5, 0x59, 0x7d, 0x24, 0x66, 0x2d, 0xc4, 0xea, 0xce, 0xea, 0x23, 0x0d, - 0xa1, 0xe4, 0x06, 0x80, 0x46, 0xbd, 0xae, 0x63, 0xe1, 0xf3, 0x93, 0x41, 0x3c, 0x7f, 0xc3, 0xd9, - 0xd0, 0x41, 0x68, 0xa3, 0x69, 0x1b, 0x54, 0x93, 0x48, 0xd4, 0xbf, 0x1a, 0x5e, 0xec, 0x54, 0x4d, - 0xf7, 0xe1, 0x49, 0x17, 0xee, 0xa2, 0x0b, 0x75, 0x71, 0xc4, 0x99, 0xec, 0xa4, 0x71, 0xe8, 0x9f, - 0x6e, 0xe9, 0xab, 0x2e, 0xf6, 0xa1, 0xf0, 0x25, 0x5b, 0x61, 0x00, 0x8d, 0xc3, 0x63, 0xfd, 0x54, - 0xde, 0xbe, 0x9f, 0x7e, 0xae, 0x3f, 0x18, 0x6d, 0xf3, 0xd4, 0x5b, 0xb7, 0x9d, 0x93, 0xae, 0xda, - 0x69, 0x57, 0x5d, 0x81, 0x81, 0xba, 0xd3, 0x94, 0x8e, 0x2e, 0x70, 0x3f, 0xe0, 0x3a, 0x4d, 0x7e, - 0x6c, 0xe1, 0x23, 0x19, 0x5d, 0xd5, 0xf5, 0x90, 0x6e, 0x20, 0xa4, 0x33, 0x5c, 0x4f, 0xd0, 0x09, - 0xa4, 0xa0, 0x5b, 0xb4, 0x1d, 0x4f, 0x74, 0x5c, 0x40, 0xd7, 0xb1, 0x1d, 0x4f, 0xf3, 0x91, 0xe4, - 0xb3, 0x00, 0x4b, 0x93, 0x8b, 0xbe, 0xb3, 0xfd, 0x60, 0xe8, 0x0b, 0x28, 0xbc, 0xec, 0x35, 0x09, - 0x4d, 0x96, 0x60, 0x70, 0xa1, 0x43, 0x1d, 0xbe, 0x15, 0xe2, 0x0f, 0x4a, 0x3e, 0x13, 0x13, 0xad, - 0xe8, 0xf7, 0xeb, 0xe2, 0xff, 0x80, 0x9c, 0xaf, 0x2f, 0xb6, 0xff, 0x53, 0x0b, 0x19, 0x91, 0x57, - 0xa1, 0x54, 0xe1, 0x76, 0xde, 0x10, 0xb2, 0x0c, 0x44, 0x86, 0x5b, 0x50, 0x8e, 0xe2, 0x7b, 0x76, - 0x1d, 0xff, 0xd6, 0x04, 0xb9, 0x7a, 0x0d, 0xc6, 0xe2, 0xd5, 0x90, 0x21, 0x18, 0x98, 0x5c, 0x98, - 0x9f, 0x9f, 0x9a, 0x5c, 0x1a, 0xeb, 0x23, 0x65, 0x28, 0xd6, 0xa7, 0xe6, 0xab, 0x63, 0x39, 0xf5, - 0x57, 0xa5, 0x19, 0x84, 0xa9, 0xd6, 0xc9, 0xd5, 0xf0, 0xbe, 0xee, 0x5b, 0xc6, 0xf0, 0x3e, 0x14, - 0x4f, 0x0c, 0xda, 0xa6, 0xe7, 0x51, 0x43, 0xac, 0x12, 0x78, 0x5f, 0xe8, 0x3d, 0xd6, 0x12, 0x78, - 0xf2, 0x3c, 0x8c, 0x20, 0x4c, 0x5c, 0x11, 0xf2, 0xfd, 0xb1, 0x28, 0xe0, 0x3c, 0xd6, 0xa2, 0x48, - 0xf5, 0x0f, 0xc2, 0xdb, 0xe1, 0x59, 0xaa, 0x1f, 0xd5, 0x1b, 0xc5, 0x8f, 0x49, 0x7f, 0xa9, 0xff, - 0xb2, 0xc8, 0x9f, 0x80, 0xf0, 0xf7, 0x82, 0x87, 0x21, 0xca, 0xf0, 0x48, 0xb7, 0xb0, 0x8b, 0x23, - 0xdd, 0xe7, 0xa1, 0x34, 0x47, 0xbd, 0x35, 0xdb, 0x77, 0xfc, 0x42, 0x0f, 0xbd, 0x36, 0x42, 0x64, - 0x0f, 0x3d, 0x4e, 0x43, 0x1e, 0x02, 0xf1, 0x1f, 0x03, 0x06, 0x8e, 0xd8, 0xfe, 0x11, 0xf2, 0x85, - 0xc4, 0x3e, 0xa5, 0x8e, 0x2f, 0x81, 0xd1, 0xc7, 0xfe, 0x6c, 0xe0, 0xe8, 0x2d, 0x79, 0x62, 0xfd, - 0x8b, 0xcd, 0xf1, 0x12, 0xa7, 0xd1, 0x52, 0xd8, 0x92, 0x77, 0x60, 0x70, 0x6e, 0xba, 0x22, 0x1e, - 0x06, 0x72, 0xaf, 0x88, 0x8b, 0x81, 0x14, 0x7d, 0x44, 0x20, 0x12, 0x7c, 0x6f, 0xd3, 0x5e, 0xd1, - 0x93, 0xef, 0x02, 0x43, 0x2e, 0x4c, 0x5b, 0xf8, 0xcb, 0x1d, 0x71, 0xba, 0x10, 0x68, 0x4b, 0xf4, - 0x3d, 0x4f, 0x5c, 0x56, 0x1c, 0x1b, 0xd3, 0x96, 0xf2, 0x3e, 0x46, 0xf7, 0x02, 0x9c, 0xae, 0x74, - 0x3a, 0x2d, 0x93, 0x1a, 0xa8, 0x2f, 0x5a, 0xb7, 0x45, 0x5d, 0xe1, 0xf2, 0x83, 0x8f, 0x41, 0x74, - 0x8e, 0x6c, 0xe0, 0x73, 0xd4, 0x86, 0xd3, 0x8d, 0xfa, 0x67, 0x26, 0xcb, 0xaa, 0x7f, 0x36, 0x0f, - 0xe7, 0x27, 0x1d, 0xaa, 0x7b, 0x74, 0x6e, 0xba, 0x52, 0xe9, 0xa2, 0x8f, 0x5c, 0xab, 0x45, 0xad, - 0xd5, 0xc3, 0x19, 0xd6, 0x6f, 0xc0, 0x68, 0xd0, 0x80, 0x7a, 0xd3, 0xee, 0x50, 0xf9, 0x61, 0x55, - 0xd3, 0xc7, 0x34, 0x5c, 0x86, 0xd2, 0x62, 0xa4, 0xe4, 0x2e, 0x9c, 0x09, 0x20, 0x95, 0x56, 0xcb, - 0x5e, 0xd7, 0x68, 0xd7, 0xe5, 0x8e, 0xb1, 0x65, 0xee, 0x18, 0x1b, 0x72, 0xd0, 0x19, 0xbe, 0xe1, - 0x30, 0x02, 0x2d, 0xad, 0x94, 0xfa, 0x8b, 0x05, 0xb8, 0x70, 0x5f, 0x6f, 0x99, 0x46, 0x28, 0x1a, - 0x8d, 0xba, 0x1d, 0xdb, 0x72, 0xe9, 0x11, 0x1a, 0xa5, 0x91, 0xa1, 0x50, 0x3c, 0x90, 0xa1, 0x90, - 0xec, 0xa2, 0xfe, 0x7d, 0x77, 0x51, 0x69, 0x4f, 0x5d, 0xf4, 0xbf, 0xe6, 0x60, 0xcc, 0x77, 0xfc, - 0x97, 0x1f, 0x71, 0x4b, 0x5e, 0xe9, 0x78, 0x84, 0x18, 0xf3, 0x83, 0x46, 0x3c, 0xa9, 0xc3, 0xc0, - 0xd4, 0xe3, 0x8e, 0xe9, 0x50, 0x77, 0x07, 0x4e, 0xdc, 0x4f, 0x8a, 0xe3, 0x92, 0xd3, 0x94, 0x17, - 0x49, 0x9c, 0x94, 0x70, 0x30, 0x3e, 0xe7, 0xe3, 0x4f, 0x1f, 0x26, 0xfc, 0x97, 0xe9, 0xfc, 0x39, - 0x9f, 0x78, 0x22, 0x11, 0x79, 0x9f, 0x19, 0x92, 0x92, 0x67, 0xa1, 0xb0, 0xb4, 0x34, 0x2b, 0x66, - 0x52, 0x8c, 0x08, 0xe0, 0x79, 0xf2, 0x7b, 0x45, 0x86, 0x55, 0xff, 0x49, 0x1e, 0x80, 0xa9, 0x02, - 0x1f, 0xae, 0x87, 0xa2, 0x84, 0x13, 0x50, 0xf6, 0x05, 0x2e, 0xd4, 0x30, 0xf0, 0xda, 0x8f, 0x77, - 0x44, 0xbc, 0xee, 0xe0, 0x85, 0xc6, 0xb8, 0xef, 0x48, 0xce, 0xef, 0x01, 0x70, 0x67, 0x83, 0x8e, - 0xe4, 0xbe, 0xfb, 0xf8, 0x67, 0x61, 0x50, 0xcc, 0x78, 0x76, 0xe4, 0xfc, 0xbf, 0xe9, 0x03, 0xb5, - 0x10, 0x1f, 0x9b, 0x5a, 0x4b, 0xfb, 0x58, 0x88, 0x7d, 0xf1, 0xf2, 0x5e, 0x39, 0x11, 0xef, 0x01, - 0x8b, 0xf7, 0x1b, 0x42, 0xbc, 0xfc, 0x05, 0xcf, 0x91, 0x15, 0xef, 0x81, 0x9d, 0x7d, 0xab, 0xff, - 0x30, 0x07, 0x84, 0x35, 0x6b, 0x51, 0x77, 0xdd, 0x75, 0xdb, 0x31, 0xb8, 0x73, 0xfa, 0xa1, 0x08, - 0xe6, 0xe0, 0xee, 0x2b, 0xbf, 0x5b, 0x86, 0x33, 0x11, 0xc7, 0xdf, 0x23, 0x3e, 0x59, 0x5d, 0x8b, - 0x8e, 0xa6, 0x5e, 0xaf, 0x5e, 0x3e, 0x25, 0x5f, 0x88, 0xf6, 0x47, 0x1e, 0xa0, 0x49, 0x37, 0xa1, - 0x2f, 0xc0, 0xb0, 0xf8, 0xc1, 0x56, 0x68, 0xff, 0xa6, 0x0b, 0x47, 0xa9, 0xcb, 0x00, 0x5a, 0x04, - 0x4d, 0x5e, 0x86, 0x41, 0x36, 0x60, 0x56, 0x31, 0x78, 0xc8, 0x40, 0xf8, 0xa2, 0xc4, 0xf0, 0x81, - 0xf2, 0x7a, 0x12, 0x50, 0x4a, 0xef, 0x88, 0xca, 0x3b, 0x78, 0x47, 0xf4, 0x55, 0x18, 0xaa, 0x58, - 0x96, 0xed, 0xe1, 0x26, 0xdd, 0x15, 0x57, 0x13, 0x99, 0x56, 0xf9, 0xb3, 0xf8, 0x38, 0x3e, 0xa4, - 0x4f, 0x35, 0xcb, 0x65, 0x86, 0xe4, 0xa6, 0xff, 0x2a, 0x86, 0x3a, 0xc2, 0xab, 0x1c, 0xaf, 0x67, - 0x1c, 0x01, 0x4b, 0x3e, 0x8a, 0xc1, 0xce, 0x1b, 0x59, 0x74, 0xec, 0x8e, 0xed, 0x52, 0x83, 0x0b, - 0x6a, 0x28, 0x0c, 0x35, 0xd0, 0x11, 0x08, 0x7c, 0xc7, 0x16, 0x09, 0xe4, 0x11, 0x29, 0x42, 0x56, - 0xe0, 0xac, 0x7f, 0x51, 0x1c, 0xbc, 0x18, 0xac, 0x55, 0x5d, 0x65, 0x18, 0x5f, 0x25, 0x91, 0xb8, - 0x32, 0xd4, 0xaa, 0x13, 0x4f, 0xf9, 0xd7, 0x22, 0xfe, 0x93, 0xc3, 0x86, 0x69, 0xc8, 0x5d, 0x9d, - 0xca, 0x8f, 0xfc, 0x08, 0x0c, 0xcd, 0xe9, 0x8f, 0xab, 0x5d, 0x71, 0xf6, 0x32, 0xb2, 0xf3, 0xdb, - 0x97, 0xb6, 0xfe, 0xb8, 0x61, 0x88, 0x72, 0x31, 0x9b, 0x42, 0x66, 0x49, 0x1a, 0x70, 0x7e, 0xd1, - 0xb1, 0xdb, 0xb6, 0x47, 0x8d, 0xd8, 0xe3, 0xbb, 0x53, 0xe1, 0x6b, 0xdd, 0x8e, 0xa0, 0x68, 0xf4, - 0x78, 0x85, 0x97, 0xc1, 0x86, 0xb4, 0xe1, 0x54, 0xc5, 0x75, 0xbb, 0x6d, 0x1a, 0xde, 0x50, 0x8d, - 0x6d, 0xfb, 0x19, 0x9f, 0x11, 0x5e, 0xcb, 0x4f, 0xe8, 0x58, 0x94, 0x5f, 0x50, 0x35, 0x3c, 0x53, - 0xae, 0x11, 0xbf, 0x25, 0xce, 0xfb, 0x4e, 0xb1, 0x3c, 0x3a, 0x76, 0x4a, 0xbb, 0x90, 0x6c, 0xcc, - 0x92, 0xe9, 0xb5, 0xa8, 0xfa, 0x9d, 0x1c, 0x40, 0x28, 0x60, 0xf2, 0x42, 0x34, 0x42, 0x51, 0x2e, - 0xbc, 0xe8, 0x10, 0xd1, 0x0b, 0x22, 0x21, 0x89, 0xc8, 0x65, 0x28, 0x62, 0x84, 0x8b, 0x7c, 0x78, - 0xb0, 0xfa, 0xd0, 0xb4, 0x0c, 0x0d, 0xa1, 0x0c, 0x2b, 0x3d, 0x45, 0x47, 0x2c, 0x5e, 0xea, 0x73, - 0xab, 0xb0, 0x0a, 0xa7, 0xea, 0xdd, 0x65, 0xbf, 0x6e, 0xe9, 0x5d, 0x1d, 0x06, 0xda, 0x70, 0xbb, - 0xcb, 0xc1, 0x63, 0xd4, 0x48, 0x18, 0x93, 0x68, 0x11, 0xf5, 0xd7, 0x73, 0xb1, 0x59, 0xf0, 0x10, - 0x17, 0xbd, 0x4f, 0x25, 0xfd, 0x34, 0x92, 0xd3, 0x92, 0xfa, 0x17, 0xf3, 0x30, 0xb4, 0x68, 0x3b, - 0x9e, 0x08, 0x19, 0x72, 0xb4, 0x57, 0x21, 0x69, 0xaf, 0x54, 0xdc, 0xc5, 0x5e, 0xe9, 0x32, 0x14, - 0x25, 0x17, 0x65, 0x7e, 0x2f, 0x62, 0x18, 0x8e, 0x86, 0x50, 0xf5, 0xc7, 0xf2, 0x00, 0x5f, 0x7a, - 0xf1, 0xc5, 0x63, 0x2c, 0x20, 0xf5, 0x17, 0x72, 0x70, 0x4a, 0x5c, 0xd4, 0x49, 0xb1, 0xbe, 0x06, - 0xfc, 0x2b, 0x56, 0x79, 0x5c, 0x72, 0x90, 0xe6, 0xe3, 0xd8, 0x12, 0x30, 0xf5, 0xd8, 0xf4, 0xf0, - 0xae, 0x42, 0x0a, 0xf6, 0x45, 0x05, 0x4c, 0x5e, 0x02, 0x7c, 0x3a, 0xf2, 0x82, 0x7f, 0x05, 0x59, - 0x08, 0xd7, 0x3d, 0x56, 0x60, 0x2a, 0xf5, 0x1a, 0x52, 0xfd, 0xad, 0x22, 0x14, 0xa7, 0x1e, 0xd3, - 0xe6, 0x11, 0xef, 0x1a, 0xe9, 0x60, 0xb3, 0xb8, 0xcf, 0x83, 0xcd, 0xbd, 0xf8, 0x54, 0xbc, 0x1d, - 0xf6, 0x67, 0x29, 0x5a, 0x7d, 0xac, 0xe7, 0xe3, 0xd5, 0xfb, 0x3d, 0x7d, 0xf4, 0x5c, 0x72, 0xfe, - 0x8b, 0x02, 0x14, 0xea, 0x93, 0x8b, 0x27, 0x7a, 0x73, 0xa8, 0x7a, 0xd3, 0xfb, 0xce, 0x5a, 0x0d, - 0xae, 0xa1, 0xca, 0xa1, 0x97, 0x68, 0xec, 0xc6, 0xe9, 0xfb, 0x05, 0x18, 0xad, 0x4f, 0x2f, 0x2d, - 0x4a, 0x27, 0xc1, 0x77, 0xb9, 0x27, 0x1f, 0xfa, 0x94, 0xf1, 0x2e, 0xbd, 0x9c, 0xb0, 0x67, 0xee, - 0xd5, 0x2c, 0xef, 0x95, 0x5b, 0xf7, 0xf5, 0x56, 0x97, 0xe2, 0xd1, 0x0b, 0xf7, 0xfb, 0x75, 0xcd, - 0xf7, 0xe9, 0x2f, 0xe2, 0xc3, 0x7f, 0x9f, 0x01, 0x79, 0x03, 0x0a, 0xf7, 0x84, 0x47, 0x46, 0x16, - 0x9f, 0x97, 0x6e, 0x72, 0x3e, 0x6c, 0x12, 0x2c, 0x74, 0x4d, 0x03, 0x39, 0xb0, 0x52, 0xac, 0xf0, - 0x6d, 0xb1, 0x00, 0xef, 0xa8, 0xf0, 0xaa, 0x5f, 0xf8, 0x76, 0xad, 0x4a, 0xea, 0x30, 0xb4, 0x48, - 0x9d, 0xb6, 0x89, 0x1d, 0xe5, 0xcf, 0xd9, 0xbd, 0x99, 0xb0, 0x9d, 0xca, 0x50, 0x27, 0x2c, 0x84, - 0xcc, 0x64, 0x2e, 0xe4, 0x5d, 0x00, 0x6e, 0xa3, 0xec, 0x30, 0x7e, 0xe4, 0x93, 0x68, 0xf7, 0x73, - 0xd3, 0x32, 0xc5, 0xc6, 0x93, 0x98, 0x91, 0x87, 0x30, 0x36, 0x67, 0x1b, 0xe6, 0x8a, 0xc9, 0x5d, - 0x2f, 0xb1, 0x82, 0xd2, 0xf6, 0x0e, 0x4f, 0xcc, 0x94, 0x6c, 0x4b, 0xe5, 0xd2, 0xaa, 0x49, 0x30, - 0x56, 0xff, 0xd3, 0x7e, 0x28, 0xb2, 0x6e, 0x3f, 0x19, 0xbf, 0xfb, 0x19, 0xbf, 0x15, 0x18, 0x7b, - 0x60, 0x3b, 0x0f, 0x4d, 0x6b, 0x35, 0xf0, 0x8a, 0x17, 0x7b, 0x53, 0xf4, 0xe4, 0x59, 0xe7, 0xb8, - 0x46, 0xe0, 0x40, 0xaf, 0x25, 0xc8, 0xb7, 0x19, 0xc1, 0xaf, 0x01, 0xf0, 0xb7, 0xee, 0x48, 0x53, - 0x0e, 0x83, 0x55, 0xf0, 0x97, 0xf0, 0xe8, 0x68, 0x2f, 0x07, 0xab, 0x08, 0x89, 0xd9, 0x26, 0x9c, - 0xfb, 0x42, 0x0c, 0xa2, 0xdf, 0x3d, 0x6e, 0xc2, 0xd1, 0x17, 0x42, 0x36, 0x02, 0xb8, 0x57, 0xc4, - 0x22, 0x80, 0x74, 0xbf, 0x04, 0x31, 0x41, 0x44, 0x26, 0x07, 0x11, 0x1e, 0x2e, 0xe5, 0x7a, 0x49, - 0x93, 0x78, 0x90, 0x57, 0x62, 0x17, 0xe0, 0x24, 0xc2, 0x2d, 0xf3, 0xfe, 0x3b, 0x74, 0xa0, 0x1a, - 0xde, 0xce, 0x81, 0x4a, 0xfd, 0x20, 0x0f, 0x83, 0xf5, 0xee, 0xb2, 0xbb, 0xe1, 0x7a, 0xb4, 0x7d, - 0xc4, 0xd5, 0xd8, 0xdf, 0x5e, 0x15, 0x53, 0xb7, 0x57, 0xcf, 0xfa, 0x42, 0x91, 0xce, 0x1d, 0x03, - 0x93, 0xce, 0x17, 0xc7, 0xdf, 0xcc, 0xc3, 0x18, 0xbf, 0x38, 0xab, 0x9a, 0x6e, 0xf3, 0x00, 0x9c, - 0xf9, 0x0f, 0x5f, 0x2a, 0xfb, 0xbb, 0x6c, 0xde, 0xc1, 0x13, 0x09, 0xf5, 0x6b, 0x79, 0x18, 0xaa, - 0x74, 0xbd, 0xb5, 0x8a, 0x87, 0xba, 0x75, 0x2c, 0xf7, 0x27, 0x7f, 0x37, 0x07, 0xa7, 0x58, 0x43, - 0x96, 0xec, 0x87, 0xd4, 0x3a, 0x80, 0x83, 0x47, 0xf9, 0x00, 0x31, 0xbf, 0xc7, 0x03, 0x44, 0x5f, - 0x96, 0x85, 0xdd, 0xc9, 0x12, 0x8f, 0xcb, 0x35, 0xbb, 0x45, 0x8f, 0xf6, 0x67, 0x1c, 0xe0, 0x71, - 0xb9, 0x2f, 0x90, 0x03, 0xb8, 0x9e, 0xf9, 0x64, 0x09, 0xe4, 0x00, 0xce, 0x96, 0x3e, 0x19, 0x02, - 0xf9, 0x6e, 0x0e, 0x06, 0x27, 0x6c, 0xef, 0x88, 0x0f, 0x7c, 0xf1, 0x15, 0x47, 0x5b, 0xcd, 0xfd, - 0xaf, 0x38, 0xda, 0xba, 0xa9, 0xfe, 0x7c, 0x1e, 0xce, 0x8a, 0xd8, 0xe0, 0xe2, 0xfc, 0xe1, 0x64, - 0x3a, 0x16, 0x83, 0x2d, 0x29, 0x9a, 0x93, 0x79, 0x48, 0x88, 0xe6, 0x97, 0x0b, 0x70, 0x16, 0x43, - 0x99, 0xb2, 0x6d, 0xd9, 0x27, 0xc0, 0x16, 0x21, 0xcd, 0xe8, 0x25, 0xe8, 0x5c, 0xca, 0x25, 0xe8, - 0xbf, 0xd8, 0x1c, 0x7f, 0x65, 0xd5, 0xf4, 0xd6, 0xba, 0xcb, 0xd7, 0x9b, 0x76, 0xfb, 0xc6, 0xaa, - 0xa3, 0x3f, 0x32, 0xf9, 0xf5, 0x9f, 0xde, 0xba, 0x11, 0xa4, 0xd9, 0xd0, 0x3b, 0xa6, 0x48, 0xc0, - 0x51, 0xc7, 0xbd, 0x0e, 0xe3, 0xea, 0x5f, 0x9f, 0xba, 0x00, 0x77, 0x6c, 0xd3, 0x12, 0x3e, 0x85, - 0xdc, 0xd0, 0xad, 0xb3, 0xfd, 0xe1, 0x7b, 0xb6, 0x69, 0x35, 0xe2, 0x8e, 0x85, 0xbb, 0xad, 0x2f, - 0x64, 0xad, 0x49, 0xd5, 0xa8, 0xff, 0x4d, 0x0e, 0x2e, 0x46, 0xb5, 0xf8, 0x93, 0x60, 0x3b, 0xfe, - 0xb9, 0x3c, 0x9c, 0xbb, 0x8d, 0xc2, 0x09, 0x1c, 0x39, 0x4e, 0xe6, 0x2d, 0x31, 0x38, 0x53, 0x64, - 0x73, 0x62, 0x51, 0x66, 0xcb, 0xe6, 0x64, 0x52, 0x17, 0xb2, 0xf9, 0xaf, 0x73, 0x70, 0x66, 0xa1, - 0x56, 0x9d, 0xfc, 0x84, 0x8c, 0xa8, 0xe4, 0xf7, 0x1c, 0x71, 0x83, 0x33, 0xf1, 0x3d, 0x47, 0xdc, - 0xf4, 0xfc, 0x56, 0x1e, 0xce, 0xd4, 0x2b, 0x73, 0xb3, 0x9f, 0x94, 0x19, 0x7c, 0x52, 0xf6, 0x3a, - 0xf4, 0x0f, 0xc1, 0x84, 0x2d, 0x20, 0x7f, 0xe6, 0xfd, 0x9b, 0xd9, 0xde, 0x88, 0x49, 0xa1, 0x1c, - 0xf1, 0xa9, 0xfb, 0x40, 0x84, 0xc2, 0x34, 0x3f, 0x42, 0x7d, 0xc4, 0x35, 0xff, 0x3f, 0x2f, 0xc1, - 0xd0, 0xdd, 0xee, 0x32, 0x15, 0xce, 0x29, 0xc7, 0xfa, 0xe4, 0xf7, 0x26, 0x0c, 0x09, 0x31, 0xe0, - 0xad, 0x89, 0x14, 0x3c, 0x4f, 0x04, 0x43, 0xe1, 0xf1, 0x89, 0x64, 0x22, 0x72, 0x19, 0x8a, 0xf7, - 0xa9, 0xb3, 0x2c, 0xbf, 0x2b, 0x7d, 0x44, 0x9d, 0x65, 0x0d, 0xa1, 0x64, 0x36, 0x74, 0x99, 0xaf, - 0x2c, 0xd6, 0x30, 0x91, 0x8a, 0xb8, 0xb0, 0xc1, 0xcc, 0x30, 0x81, 0xdf, 0x9b, 0xde, 0x31, 0x79, - 0x0a, 0x16, 0xf9, 0x4d, 0x7b, 0xbc, 0x24, 0x99, 0x87, 0xd3, 0xb2, 0xe3, 0x13, 0xcf, 0x22, 0x52, - 0x4e, 0x61, 0x97, 0x96, 0x3f, 0x24, 0x59, 0x94, 0xbc, 0x0d, 0xc3, 0x3e, 0x10, 0x5d, 0xb8, 0x06, - 0xc3, 0xd0, 0xf5, 0x01, 0xab, 0x58, 0x8a, 0xa2, 0x48, 0x01, 0x99, 0x01, 0x5e, 0x43, 0x40, 0x0a, - 0x83, 0x98, 0x4b, 0x5c, 0xa4, 0x00, 0x79, 0x19, 0x19, 0xe0, 0x33, 0x0f, 0x74, 0x56, 0x19, 0xc2, - 0x47, 0x97, 0xe8, 0x92, 0xef, 0x08, 0x38, 0x7f, 0x5a, 0x1b, 0x21, 0x23, 0x0b, 0x00, 0xa1, 0x53, - 0x81, 0x08, 0x60, 0xb0, 0x6b, 0x77, 0x07, 0x89, 0x85, 0x7c, 0x1d, 0x38, 0xb2, 0x97, 0xeb, 0x40, - 0xf5, 0x1f, 0xe4, 0x61, 0xa8, 0xd2, 0xe9, 0x04, 0x43, 0xe1, 0x05, 0x28, 0x55, 0x3a, 0x9d, 0x7b, - 0x5a, 0x4d, 0x0e, 0x65, 0xae, 0x77, 0x3a, 0x8d, 0xae, 0x63, 0xca, 0x3e, 0xa1, 0x9c, 0x88, 0x4c, - 0xc2, 0x48, 0xa5, 0xd3, 0x59, 0xec, 0x2e, 0xb7, 0xcc, 0xa6, 0x94, 0x19, 0x89, 0xe7, 0x8e, 0xeb, - 0x74, 0x1a, 0x1d, 0xc4, 0xc4, 0xd3, 0x63, 0x45, 0xcb, 0x90, 0xaf, 0x62, 0xd8, 0x1f, 0x91, 0x98, - 0x87, 0xa7, 0xfe, 0x50, 0x83, 0x20, 0xe6, 0x61, 0xdb, 0xae, 0x07, 0x44, 0x3c, 0xd8, 0xfb, 0x65, - 0x3f, 0x64, 0x3e, 0xab, 0x28, 0x91, 0x80, 0x27, 0x64, 0x49, 0x3e, 0x07, 0x03, 0x95, 0x4e, 0x47, - 0xba, 0x6f, 0x42, 0xa7, 0x22, 0x56, 0x2a, 0x9e, 0xfb, 0x4c, 0x90, 0x5d, 0x7a, 0x13, 0x46, 0xa3, - 0x95, 0xed, 0x2a, 0x58, 0xfc, 0x0f, 0x72, 0xf8, 0x41, 0x47, 0xdc, 0xa7, 0xf9, 0x25, 0x28, 0x54, - 0x3a, 0x1d, 0x31, 0x1f, 0x9d, 0x49, 0xe9, 0x8f, 0xf8, 0x13, 0xe8, 0x4a, 0xa7, 0xe3, 0x7f, 0xfa, - 0x11, 0x7f, 0x1c, 0xb1, 0xa7, 0x4f, 0xff, 0x2e, 0xff, 0xf4, 0xa3, 0xfd, 0x70, 0x41, 0xfd, 0xad, - 0x02, 0x9c, 0xaa, 0x74, 0x3a, 0x27, 0x41, 0xe6, 0x0f, 0xea, 0xa1, 0xf5, 0x8b, 0x00, 0xd2, 0xf4, - 0x38, 0x10, 0x3c, 0xdd, 0x1a, 0x92, 0xa6, 0x46, 0x25, 0xa7, 0x49, 0x44, 0xbe, 0xfa, 0x95, 0x77, - 0xa5, 0x7e, 0x5f, 0x2b, 0xe0, 0x54, 0x7c, 0xd4, 0x83, 0x46, 0x7d, 0x5c, 0xba, 0x4d, 0xf4, 0x41, - 0x69, 0x57, 0x7d, 0xf0, 0x77, 0x22, 0x83, 0x07, 0x83, 0x96, 0x9f, 0xf4, 0x42, 0xff, 0xbe, 0xcc, - 0xe2, 0x51, 0x59, 0x98, 0x22, 0x92, 0x8d, 0x9f, 0x48, 0x49, 0xc4, 0x55, 0x6a, 0x32, 0x54, 0xc3, - 0x34, 0xb4, 0x18, 0xad, 0xdf, 0x87, 0x03, 0xbb, 0xea, 0xc3, 0xcd, 0x3c, 0xbe, 0x9d, 0x0e, 0xe2, - 0x32, 0xed, 0x7f, 0x77, 0x71, 0x03, 0x80, 0x7b, 0x1e, 0x04, 0x6e, 0xcd, 0x23, 0x3c, 0x04, 0x0b, - 0xcf, 0xaf, 0x24, 0x42, 0xb0, 0x84, 0x24, 0x81, 0x87, 0x54, 0x21, 0xd5, 0x43, 0xea, 0x1a, 0x94, - 0x35, 0x7d, 0xfd, 0x9d, 0x2e, 0x75, 0x36, 0x84, 0x39, 0xc3, 0xc3, 0x1e, 0xea, 0xeb, 0x8d, 0x1f, - 0x65, 0x40, 0x2d, 0x40, 0x13, 0x35, 0x78, 0x7c, 0x2f, 0x79, 0x84, 0xf0, 0x33, 0xf2, 0xe0, 0xc9, - 0xfd, 0x5e, 0x14, 0x9d, 0xbc, 0x0e, 0x85, 0xca, 0x83, 0xba, 0x90, 0x6c, 0xd0, 0xb5, 0x95, 0x07, - 0x75, 0x21, 0xaf, 0xcc, 0xb2, 0x0f, 0xea, 0xea, 0xd7, 0xf2, 0x40, 0x92, 0x94, 0xe4, 0x15, 0x18, - 0x44, 0xe8, 0x2a, 0xd3, 0x19, 0x39, 0x31, 0xe7, 0xba, 0xdb, 0x70, 0x10, 0x1a, 0x31, 0xee, 0x7c, - 0x52, 0xf2, 0x1a, 0xa6, 0x3e, 0x16, 0xa9, 0xe1, 0x22, 0x89, 0x39, 0xd7, 0x5d, 0x3f, 0x59, 0x70, - 0x2c, 0xf3, 0xb1, 0x20, 0x46, 0xbb, 0xf0, 0x41, 0x7d, 0xc6, 0x76, 0x3d, 0x21, 0x6a, 0x6e, 0x17, - 0xae, 0xbb, 0x98, 0x11, 0x36, 0x62, 0x17, 0x72, 0x32, 0xcc, 0x6a, 0xf5, 0xa0, 0xce, 0x9f, 0xa9, - 0x18, 0x9a, 0xdd, 0xf2, 0x0d, 0x4a, 0x9e, 0xd5, 0x6a, 0xdd, 0x6d, 0xf0, 0x27, 0x2e, 0x06, 0xe6, - 0x5c, 0x8e, 0x64, 0xb5, 0x8a, 0x94, 0x52, 0xbf, 0x5e, 0x86, 0xb1, 0xaa, 0xee, 0xe9, 0xcb, 0xba, - 0x4b, 0xa5, 0xdd, 0xf4, 0x29, 0x1f, 0xe6, 0x7f, 0x8e, 0x24, 0x07, 0x63, 0x39, 0xe5, 0x6b, 0xe2, - 0x05, 0xc8, 0x1b, 0x21, 0xdf, 0x20, 0xe7, 0xa8, 0x9c, 0xc4, 0x6c, 0xb9, 0xd1, 0x11, 0x60, 0x2d, - 0x41, 0x48, 0x9e, 0x87, 0x21, 0x1f, 0xc6, 0x36, 0x00, 0x85, 0x50, 0x67, 0x8c, 0x65, 0x66, 0xff, - 0x6b, 0x32, 0x9a, 0xbc, 0x06, 0xc3, 0xfe, 0x4f, 0xc9, 0xb4, 0xe6, 0x19, 0xd9, 0x96, 0x13, 0xbb, - 0x27, 0x99, 0x54, 0x2e, 0x8a, 0xf3, 0x5b, 0x7f, 0xa4, 0x68, 0x2c, 0xe9, 0x59, 0x84, 0x94, 0xfc, - 0x28, 0x8c, 0xfa, 0xbf, 0xc5, 0x86, 0x81, 0xe7, 0x87, 0x7b, 0x3e, 0x48, 0xe9, 0x1c, 0x13, 0xeb, - 0xf5, 0x28, 0x39, 0xdf, 0x3a, 0x3c, 0xe1, 0xe7, 0xf1, 0x32, 0x96, 0x93, 0x3b, 0x87, 0x58, 0x05, - 0xa4, 0x06, 0xa7, 0x7d, 0x48, 0xa8, 0xa1, 0x03, 0xe1, 0x8e, 0xd1, 0x58, 0x6e, 0xa4, 0x2a, 0x69, - 0xb2, 0x14, 0x69, 0xc1, 0xe5, 0x08, 0xd0, 0x70, 0xd7, 0xcc, 0x15, 0x4f, 0x6c, 0xf7, 0x44, 0x0c, - 0x62, 0x91, 0xb8, 0x31, 0xe0, 0xca, 0x69, 0xfc, 0x0c, 0xac, 0xd1, 0xec, 0x50, 0x3d, 0xb9, 0x91, - 0x3a, 0x9c, 0xf5, 0xf1, 0xb7, 0x27, 0x17, 0x17, 0x1d, 0xfb, 0x3d, 0xda, 0xf4, 0x6a, 0x55, 0xb1, - 0x5d, 0xc6, 0xd8, 0x74, 0xc6, 0x72, 0x63, 0xb5, 0xd9, 0x61, 0x4a, 0xc1, 0x70, 0x51, 0xe6, 0xa9, - 0x85, 0xc9, 0x7d, 0x38, 0x27, 0xc1, 0xa5, 0xf4, 0xd0, 0x10, 0xee, 0xe7, 0x05, 0xd7, 0xf4, 0x0c, - 0xd1, 0xe9, 0xc5, 0xc9, 0x9b, 0x30, 0xe2, 0x23, 0xf8, 0x2d, 0xe2, 0x10, 0xde, 0x22, 0xe2, 0x90, - 0x34, 0x96, 0x1b, 0xf1, 0xd7, 0x94, 0x51, 0x62, 0x59, 0xa3, 0x30, 0xa3, 0xfe, 0x70, 0x44, 0xa3, - 0xbc, 0x8d, 0x4e, 0xaa, 0x32, 0x62, 0x96, 0xfd, 0xb7, 0x43, 0x8d, 0x5a, 0x70, 0xcc, 0x55, 0x93, - 0xef, 0xa4, 0xfd, 0x07, 0x94, 0xcb, 0x0d, 0x1b, 0x81, 0x69, 0xfa, 0xc1, 0xc9, 0x2f, 0x55, 0xe0, - 0x4c, 0x8a, 0x8e, 0xed, 0x6a, 0xc7, 0xf8, 0x41, 0x3e, 0x6c, 0xc4, 0x11, 0xdf, 0x36, 0x4e, 0x40, - 0xd9, 0xff, 0x12, 0x61, 0x3c, 0x28, 0x59, 0x43, 0x33, 0xce, 0xc3, 0xc7, 0x47, 0xc4, 0x71, 0xc4, - 0xb7, 0x92, 0x07, 0x21, 0x8e, 0x0f, 0x73, 0xa1, 0x38, 0x8e, 0xf8, 0xf6, 0xf2, 0xa7, 0x8b, 0xe1, - 0x9c, 0x74, 0xb2, 0xc7, 0x3c, 0x28, 0x33, 0x39, 0xf4, 0x83, 0x2d, 0xed, 0xe2, 0x21, 0xa3, 0xac, - 0x9a, 0x03, 0x7b, 0x53, 0x4d, 0xf2, 0x26, 0x0c, 0x2d, 0xda, 0xae, 0xb7, 0xea, 0x50, 0x77, 0x31, - 0x88, 0xa1, 0x8f, 0x8f, 0x60, 0x3b, 0x02, 0xdc, 0xe8, 0x44, 0x66, 0x7f, 0x99, 0x5c, 0xfd, 0x47, - 0x85, 0x84, 0x36, 0x70, 0xc3, 0xf5, 0x48, 0x6a, 0xc3, 0x01, 0x0c, 0x75, 0x72, 0x33, 0x5c, 0x05, - 0xb9, 0x85, 0xdf, 0x2f, 0x05, 0x08, 0x5c, 0x16, 0x06, 0x7e, 0x94, 0x84, 0xfc, 0x10, 0x5c, 0x88, - 0x00, 0x16, 0x75, 0x47, 0x6f, 0x53, 0x2f, 0xcc, 0x57, 0x88, 0x21, 0x9f, 0xfc, 0xd2, 0x8d, 0x4e, - 0x80, 0x96, 0x73, 0x20, 0x66, 0x70, 0x90, 0x54, 0x6b, 0x60, 0x17, 0x2e, 0xd6, 0x3f, 0x57, 0x08, - 0x0d, 0x9d, 0x68, 0xe8, 0x56, 0x8d, 0xba, 0xdd, 0x96, 0x77, 0x7c, 0x3b, 0x78, 0x6f, 0x89, 0x31, - 0x66, 0xe0, 0x54, 0x65, 0x65, 0x85, 0x36, 0x3d, 0x3f, 0x22, 0xb5, 0x2b, 0x82, 0xf5, 0xf1, 0x8d, - 0x87, 0x40, 0x89, 0x08, 0xc3, 0x91, 0xcc, 0xfa, 0xb1, 0x62, 0xea, 0x3f, 0x2e, 0x82, 0x12, 0x18, - 0xfe, 0xc1, 0x33, 0xaf, 0x43, 0x5c, 0x64, 0x3f, 0x16, 0xbd, 0x62, 0xc2, 0xe9, 0x50, 0x18, 0xf5, - 0x6e, 0xbb, 0xad, 0xe3, 0xd0, 0x63, 0x1b, 0x8b, 0xf1, 0x38, 0xb3, 0x90, 0x90, 0xef, 0x25, 0x2e, - 0x89, 0xbd, 0x04, 0x09, 0x9f, 0xd1, 0x35, 0x5c, 0xce, 0x42, 0x4b, 0x72, 0x25, 0xdf, 0xc8, 0xc1, - 0x59, 0xbf, 0x53, 0x16, 0x96, 0x99, 0x51, 0x3d, 0x69, 0x77, 0x2d, 0xcf, 0xdf, 0xc7, 0xbc, 0x9e, - 0x5d, 0x1d, 0xef, 0xa4, 0xeb, 0x69, 0x85, 0x79, 0x4b, 0x82, 0xb0, 0x14, 0x81, 0x42, 0xd8, 0x48, - 0xd3, 0x68, 0x22, 0x91, 0x96, 0x5a, 0xef, 0xa5, 0xdb, 0x70, 0x31, 0x93, 0xe5, 0x76, 0x46, 0x6c, - 0xbf, 0x6c, 0xc4, 0xfe, 0x77, 0xb9, 0x70, 0x22, 0x8a, 0x09, 0x89, 0x5c, 0x07, 0x08, 0x41, 0x62, - 0x5b, 0x3b, 0xba, 0xb5, 0x39, 0x0e, 0xa1, 0xd0, 0x34, 0x89, 0x82, 0x2c, 0x40, 0x49, 0x88, 0x85, - 0xe7, 0x06, 0xfe, 0xec, 0x36, 0xbd, 0x70, 0x5d, 0x96, 0x03, 0x6e, 0x59, 0xc5, 0x37, 0x0b, 0x36, - 0x97, 0x5e, 0x83, 0xa1, 0xbd, 0x7e, 0xd7, 0x37, 0x0a, 0x40, 0xe4, 0x3d, 0xe8, 0x21, 0x1a, 0xe8, - 0x47, 0x78, 0x0a, 0xbb, 0x0a, 0x65, 0xf6, 0x09, 0x98, 0x2d, 0x43, 0x8a, 0x8e, 0xdb, 0x15, 0x30, - 0x2d, 0xc0, 0x86, 0xa1, 0xa9, 0x06, 0xd2, 0x43, 0x53, 0xa9, 0x3f, 0x5b, 0x80, 0xf3, 0x72, 0x87, - 0x54, 0x29, 0x06, 0xdc, 0x3f, 0xe9, 0x94, 0x8f, 0xb0, 0x53, 0x54, 0x28, 0xf1, 0xad, 0x87, 0xc8, - 0x7c, 0xc0, 0x8f, 0x85, 0x10, 0xa2, 0x09, 0x8c, 0xfa, 0x3f, 0xe7, 0x61, 0x24, 0x30, 0xef, 0x74, - 0xc7, 0x3d, 0xc6, 0xdd, 0xf1, 0x79, 0x18, 0xc1, 0xe0, 0x42, 0x6d, 0x6a, 0xf1, 0x00, 0x3c, 0xfd, - 0x52, 0xaa, 0x12, 0x1f, 0x21, 0xb2, 0x52, 0x45, 0x08, 0x99, 0xf6, 0x73, 0xcb, 0x4f, 0x0a, 0xf9, - 0xc4, 0xcd, 0x3e, 0x0e, 0x57, 0xff, 0x52, 0x01, 0x86, 0x7d, 0x29, 0x4f, 0x98, 0x47, 0xf5, 0x9e, - 0xe7, 0x70, 0x85, 0x7c, 0x03, 0x60, 0xd1, 0x76, 0x3c, 0xbd, 0x35, 0x1f, 0x6a, 0x3e, 0x1e, 0x90, - 0x76, 0x10, 0xca, 0xcb, 0x48, 0x24, 0xb8, 0x7e, 0x85, 0x66, 0x35, 0x9f, 0x98, 0xf8, 0xfa, 0x15, - 0x40, 0x35, 0x89, 0x42, 0xfd, 0xbd, 0x3c, 0x9c, 0xf2, 0x3b, 0x69, 0xea, 0x31, 0x6d, 0x76, 0x8f, - 0xf3, 0xdc, 0x14, 0x95, 0x76, 0xff, 0xb6, 0xd2, 0x56, 0xff, 0x4f, 0x69, 0x22, 0x99, 0x6c, 0xd9, - 0x27, 0x13, 0xc9, 0xbf, 0x0a, 0x1d, 0x57, 0x7f, 0xbc, 0x00, 0x67, 0x7d, 0xa9, 0x4f, 0x77, 0x2d, - 0x3c, 0x5a, 0x98, 0xd4, 0x5b, 0xad, 0xe3, 0xbc, 0x1b, 0x1f, 0xf2, 0x05, 0xb1, 0x20, 0xa2, 0xf5, - 0x89, 0x0c, 0x81, 0x2b, 0x02, 0xdc, 0xb0, 0x4d, 0x43, 0x93, 0x89, 0xc8, 0xdb, 0x30, 0xec, 0xff, - 0xac, 0x38, 0xab, 0xfe, 0x16, 0x1c, 0x2f, 0x0a, 0x82, 0x42, 0xba, 0x13, 0x09, 0x4a, 0x10, 0x29, - 0xa0, 0x7e, 0x6d, 0x00, 0x2e, 0x3d, 0x30, 0x2d, 0xc3, 0x5e, 0x77, 0xfd, 0x04, 0x93, 0x47, 0xfe, - 0xa0, 0xec, 0xb0, 0x13, 0x4b, 0xbe, 0x03, 0xe7, 0xe2, 0x22, 0x75, 0x82, 0xb0, 0xdf, 0xa2, 0x77, - 0xd6, 0x39, 0x41, 0xc3, 0x4f, 0x35, 0x29, 0x6e, 0xdb, 0xb4, 0xf4, 0x92, 0xf1, 0x5c, 0x95, 0x03, - 0x3b, 0xc9, 0x55, 0xf9, 0x1c, 0x94, 0xaa, 0x76, 0x5b, 0x37, 0xfd, 0xf0, 0x34, 0x38, 0x8a, 0x83, - 0x7a, 0x11, 0xa3, 0x09, 0x0a, 0xc6, 0x5f, 0x54, 0x8c, 0x5d, 0x36, 0x18, 0xf2, 0xf7, 0x0b, 0x30, - 0x2b, 0x4d, 0x93, 0x89, 0x88, 0x0d, 0x23, 0xa2, 0x3a, 0x71, 0x37, 0x06, 0xb8, 0x79, 0x7a, 0xd9, - 0x97, 0x51, 0xb6, 0x5a, 0x5d, 0x8f, 0x94, 0xe3, 0xdb, 0x28, 0x9e, 0x42, 0x53, 0x7c, 0x0c, 0xbf, - 0x25, 0xd3, 0xa2, 0xfc, 0x25, 0x21, 0xe0, 0x24, 0x33, 0x94, 0x14, 0x02, 0xce, 0x32, 0x32, 0x11, - 0x99, 0x82, 0xd3, 0x18, 0x9c, 0x39, 0xd8, 0x4a, 0x31, 0x95, 0x18, 0x46, 0xa3, 0x12, 0xaf, 0x5c, - 0x78, 0x3c, 0x67, 0xf6, 0x71, 0x8d, 0xa6, 0x40, 0x6b, 0xc9, 0x12, 0xe4, 0x22, 0x14, 0xe6, 0x67, - 0x2b, 0x78, 0x57, 0x53, 0xe6, 0x89, 0x91, 0xac, 0x96, 0xae, 0x31, 0xd8, 0xa5, 0x2f, 0x02, 0x49, - 0x7e, 0xce, 0xae, 0xee, 0x63, 0xfe, 0x4b, 0x69, 0xcb, 0x77, 0xd4, 0x3d, 0x6a, 0x0e, 0x62, 0x22, - 0x8c, 0xe4, 0x24, 0xeb, 0xff, 0x28, 0x73, 0x92, 0x95, 0x0e, 0x34, 0x27, 0x99, 0xfa, 0x6b, 0x39, - 0x38, 0x9d, 0x08, 0x60, 0x4e, 0x5e, 0x02, 0xe0, 0x10, 0x29, 0x50, 0x24, 0x46, 0x5e, 0x09, 0x83, - 0x9a, 0x8b, 0xe5, 0x31, 0x24, 0x23, 0x37, 0xa0, 0xcc, 0x7f, 0x89, 0xe0, 0x4e, 0xc9, 0x22, 0xdd, - 0xae, 0x69, 0x68, 0x01, 0x51, 0x58, 0x0b, 0xde, 0x48, 0x16, 0x52, 0x8b, 0x78, 0x1b, 0x9d, 0xa0, - 0x16, 0x46, 0xa6, 0x7e, 0x3d, 0x0f, 0xc3, 0x41, 0x83, 0x2b, 0xc6, 0x61, 0xe9, 0x5c, 0x49, 0xc4, - 0x82, 0x2f, 0x6c, 0x17, 0x0b, 0x3e, 0x36, 0xdf, 0x8a, 0xe0, 0xef, 0x07, 0xf7, 0xa0, 0xea, 0x9b, - 0x79, 0x38, 0x15, 0xd4, 0x7a, 0x88, 0x97, 0x5f, 0x1f, 0x23, 0x91, 0x7c, 0x23, 0x07, 0xca, 0x84, - 0xd9, 0x6a, 0x99, 0xd6, 0x6a, 0xcd, 0x5a, 0xb1, 0x9d, 0x36, 0x4e, 0x88, 0x87, 0x77, 0x84, 0xab, - 0xfe, 0xa9, 0x1c, 0x9c, 0x16, 0x0d, 0x9a, 0xd4, 0x1d, 0xe3, 0xf0, 0xce, 0xc7, 0xe2, 0x2d, 0x39, - 0x3c, 0x7d, 0x51, 0xbf, 0x9d, 0x07, 0x98, 0xb5, 0x9b, 0x0f, 0x8f, 0xf8, 0x7b, 0xac, 0x37, 0xa0, - 0xc4, 0x23, 0x6c, 0x09, 0x8d, 0x3d, 0x2d, 0xde, 0x1d, 0xb1, 0x4f, 0xe3, 0x88, 0x89, 0x31, 0x31, - 0x1f, 0x97, 0x78, 0x84, 0x2e, 0x25, 0xa7, 0x89, 0x22, 0xac, 0x52, 0x46, 0x27, 0x16, 0x8c, 0xa0, - 0x52, 0x06, 0x8b, 0x56, 0xba, 0xb5, 0x39, 0x5e, 0x6c, 0xd9, 0xcd, 0x87, 0x1a, 0xd2, 0xab, 0xff, - 0x32, 0xc7, 0x65, 0x77, 0xc4, 0x5f, 0x95, 0xfa, 0x9f, 0x5f, 0xdc, 0xe5, 0xe7, 0xff, 0xe9, 0x1c, - 0x9c, 0xd5, 0x68, 0xd3, 0x7e, 0x44, 0x9d, 0x8d, 0x49, 0xdb, 0xa0, 0xb7, 0xa9, 0x45, 0x9d, 0xc3, - 0x1a, 0x51, 0xbf, 0x8f, 0xc9, 0x33, 0xc2, 0xc6, 0xdc, 0x73, 0xa9, 0x71, 0x74, 0x12, 0x9b, 0xa8, - 0xbf, 0x39, 0x00, 0x4a, 0xaa, 0xd5, 0x7b, 0x64, 0xcd, 0xb9, 0xcc, 0xad, 0x4c, 0xf1, 0xa0, 0xb6, - 0x32, 0xfd, 0xbb, 0xdb, 0xca, 0x94, 0x76, 0xbb, 0x95, 0x19, 0xd8, 0xc9, 0x56, 0xa6, 0x1d, 0xdf, - 0xca, 0x94, 0x71, 0x2b, 0xf3, 0x52, 0xcf, 0xad, 0xcc, 0x94, 0x65, 0xec, 0x71, 0x23, 0x73, 0x64, - 0x93, 0xee, 0xee, 0x65, 0x07, 0x76, 0x95, 0x4d, 0x8a, 0x4d, 0xdb, 0x31, 0xa8, 0x21, 0x36, 0x5e, - 0x78, 0xea, 0xef, 0x08, 0x98, 0x16, 0x60, 0x13, 0x19, 0x8c, 0x47, 0x76, 0x92, 0xc1, 0xf8, 0x00, - 0xf6, 0x5f, 0x1f, 0xe4, 0xe1, 0xf4, 0x24, 0x75, 0x3c, 0x1e, 0xc2, 0xf3, 0x20, 0x5c, 0xe2, 0x2a, - 0x70, 0x4a, 0x62, 0x88, 0x16, 0x79, 0x3e, 0x74, 0xf3, 0x6b, 0x52, 0xc7, 0x8b, 0x7b, 0x09, 0xc6, - 0xe9, 0x59, 0xf5, 0x7e, 0x16, 0x31, 0x31, 0x76, 0x83, 0xea, 0x7d, 0x38, 0x17, 0xa4, 0x29, 0x7e, - 0x69, 0x01, 0xbd, 0x94, 0x18, 0xac, 0xb8, 0xfb, 0xc4, 0x60, 0xea, 0xaf, 0xe6, 0xe0, 0x8a, 0x46, - 0x2d, 0xba, 0xae, 0x2f, 0xb7, 0xa8, 0xd4, 0x2c, 0xb1, 0x32, 0xb0, 0x59, 0xc3, 0x74, 0xdb, 0xba, - 0xd7, 0x5c, 0xdb, 0x97, 0x8c, 0xa6, 0x61, 0x58, 0x9e, 0xbf, 0x76, 0x31, 0xb7, 0x45, 0xca, 0xa9, - 0xbf, 0x59, 0x84, 0x81, 0x09, 0xdb, 0xbb, 0x63, 0xef, 0x33, 0x53, 0x5d, 0x38, 0xe5, 0xe7, 0x77, - 0x71, 0xd6, 0xf3, 0x39, 0xac, 0x5c, 0x0a, 0xde, 0x8f, 0x2e, 0xa4, 0xcb, 0x76, 0x22, 0xc9, 0x81, - 0x4f, 0xb6, 0xcb, 0x1c, 0x75, 0xaf, 0xc0, 0x20, 0x46, 0x7f, 0x91, 0x4e, 0x63, 0xd1, 0x41, 0xdb, - 0x63, 0xc0, 0x78, 0x1d, 0x21, 0x29, 0xf9, 0xa1, 0x48, 0xcc, 0xd1, 0xd2, 0xfe, 0x73, 0xda, 0xc9, - 0xe1, 0x47, 0x5f, 0xe2, 0x17, 0x79, 0xd8, 0x26, 0x29, 0xff, 0x07, 0x9e, 0xa2, 0xc4, 0x9a, 0x14, - 0x10, 0x1e, 0x60, 0xbe, 0xb9, 0x49, 0x18, 0x99, 0xb0, 0x3d, 0xc9, 0x19, 0x78, 0x30, 0x7c, 0x06, - 0xca, 0x24, 0x9f, 0xee, 0x09, 0x1c, 0x2d, 0xa3, 0x7e, 0xbf, 0x08, 0xc3, 0xfe, 0xcf, 0x43, 0xd2, - 0x9d, 0x17, 0xa0, 0x34, 0x63, 0x4b, 0x29, 0x10, 0xd0, 0x81, 0x78, 0xcd, 0x76, 0x63, 0x9e, 0xd1, - 0x82, 0x88, 0x49, 0x7d, 0xde, 0x36, 0x64, 0xf7, 0x77, 0x94, 0xba, 0x65, 0x1b, 0x89, 0xe7, 0xc3, - 0x01, 0x21, 0xb9, 0x02, 0x45, 0x7c, 0x39, 0x20, 0x1d, 0xe4, 0xc7, 0x5e, 0x0b, 0x20, 0x5e, 0xd2, - 0xca, 0xd2, 0x6e, 0xb5, 0x72, 0x60, 0xaf, 0x5a, 0x59, 0x3e, 0x58, 0xad, 0x7c, 0x17, 0x86, 0xb1, - 0x26, 0x3f, 0x83, 0xda, 0xf6, 0x0b, 0xeb, 0x45, 0xb1, 0xf6, 0x8d, 0xf0, 0x76, 0x8b, 0x3c, 0x6a, - 0xb8, 0xe4, 0x45, 0x58, 0xc5, 0x74, 0x17, 0xf6, 0xb1, 0x9d, 0xfe, 0x47, 0x39, 0x18, 0xb8, 0x67, - 0x3d, 0xb4, 0xec, 0xf5, 0xfd, 0x69, 0xdc, 0x4b, 0x30, 0x24, 0xd8, 0x48, 0xab, 0x0b, 0xbe, 0x08, - 0xef, 0x72, 0x70, 0x03, 0x39, 0x69, 0x32, 0x15, 0x79, 0x33, 0x28, 0x84, 0x8f, 0x83, 0x0a, 0x61, - 0x12, 0x11, 0xbf, 0x50, 0x33, 0x9a, 0xf7, 0x40, 0x26, 0x27, 0x97, 0xa1, 0x58, 0x65, 0x4d, 0x95, - 0xa2, 0xe8, 0xb2, 0xa6, 0x68, 0x08, 0x55, 0x3f, 0x28, 0xc2, 0x68, 0xec, 0xe0, 0xeb, 0x39, 0x18, - 0x14, 0x07, 0x4f, 0xa6, 0x9f, 0x88, 0x01, 0x1f, 0x0f, 0x05, 0x40, 0xad, 0xcc, 0xff, 0xac, 0x19, - 0xe4, 0x0b, 0x30, 0x60, 0xbb, 0xb8, 0x28, 0xe2, 0xb7, 0x8c, 0x86, 0x43, 0x68, 0xa1, 0xce, 0xda, - 0xce, 0x07, 0x87, 0x20, 0x91, 0x35, 0xd2, 0x76, 0xf1, 0xd3, 0x6e, 0xc1, 0xa0, 0xee, 0xba, 0xd4, - 0x6b, 0x78, 0xfa, 0xaa, 0x9c, 0x9b, 0x21, 0x00, 0xca, 0xa3, 0x03, 0x81, 0x4b, 0xfa, 0x2a, 0xf9, - 0x22, 0x8c, 0x34, 0x1d, 0x8a, 0xcb, 0xa6, 0xde, 0x62, 0xad, 0x94, 0xcc, 0xda, 0x08, 0x42, 0xbe, - 0x3f, 0x09, 0x11, 0x35, 0x83, 0xdc, 0x87, 0x11, 0xf1, 0x39, 0xdc, 0x73, 0x1f, 0x07, 0xda, 0x68, - 0xb8, 0x8c, 0x71, 0x91, 0x70, 0xdf, 0x7d, 0xf1, 0x80, 0x43, 0x26, 0x97, 0xf9, 0x1a, 0x12, 0x29, - 0x59, 0x00, 0xb2, 0x4e, 0x97, 0x1b, 0x7a, 0xd7, 0x5b, 0x63, 0x75, 0xf1, 0xd0, 0xe2, 0x22, 0x25, - 0x21, 0xbe, 0x7a, 0x48, 0x62, 0xe5, 0xc7, 0x20, 0xeb, 0x74, 0xb9, 0x12, 0x41, 0x92, 0x07, 0x70, - 0x2e, 0x59, 0x84, 0x7d, 0x32, 0xbf, 0x1c, 0x78, 0x76, 0x6b, 0x73, 0x7c, 0x3c, 0x95, 0x40, 0x62, - 0x7b, 0x26, 0xc1, 0xb6, 0x66, 0xdc, 0x29, 0x96, 0x07, 0xc6, 0xca, 0xda, 0x28, 0x2b, 0xeb, 0x9b, - 0x90, 0xa6, 0xa1, 0xfe, 0x41, 0x8e, 0x99, 0x8a, 0xec, 0x83, 0x30, 0x27, 0x33, 0xd3, 0xf5, 0xf6, - 0x2e, 0x75, 0xbd, 0x1d, 0x66, 0x4f, 0x2c, 0xb9, 0x3d, 0x66, 0x57, 0x4d, 0x60, 0xc9, 0x75, 0x28, - 0x19, 0xf2, 0xa9, 0xd9, 0xf9, 0x68, 0x27, 0xf8, 0xf5, 0x68, 0x82, 0x8a, 0x5c, 0x85, 0x22, 0x5b, - 0xb2, 0xe2, 0x5b, 0x66, 0xd9, 0xba, 0xd0, 0x90, 0x42, 0xfd, 0xb1, 0x3c, 0x0c, 0x4b, 0x5f, 0x73, - 0x73, 0x5f, 0x9f, 0xf3, 0xfa, 0xce, 0x9a, 0xe9, 0x3b, 0xbd, 0xe0, 0x5e, 0xca, 0x6f, 0xf2, 0xad, - 0x40, 0x14, 0x3b, 0xba, 0x90, 0x12, 0x82, 0x79, 0x45, 0x7c, 0x68, 0x69, 0xe7, 0xdb, 0x47, 0x46, - 0x7f, 0xa7, 0x58, 0xce, 0x8f, 0x15, 0xee, 0x14, 0xcb, 0xc5, 0xb1, 0x7e, 0x8c, 0xc3, 0x85, 0xa1, - 0xaf, 0xf9, 0xde, 0xdc, 0x5a, 0x31, 0x57, 0x8f, 0xf8, 0xdb, 0x91, 0x83, 0x8d, 0x51, 0x16, 0x93, - 0xcd, 0x11, 0x7f, 0x48, 0xf2, 0x91, 0xca, 0xe6, 0x24, 0xdb, 0xa2, 0x90, 0xcd, 0x3f, 0xce, 0x81, - 0x92, 0x2a, 0x9b, 0xca, 0x21, 0xf9, 0x41, 0x1c, 0x5c, 0xce, 0xc5, 0x3f, 0xca, 0xc3, 0xe9, 0x9a, - 0xe5, 0xd1, 0x55, 0xbe, 0x63, 0x3c, 0xe2, 0x53, 0xc5, 0x5d, 0x18, 0x92, 0x3e, 0x46, 0xf4, 0xf9, - 0x13, 0xc1, 0x7e, 0x3c, 0x44, 0x65, 0x70, 0x92, 0x4b, 0x1f, 0x60, 0x9a, 0xf6, 0x98, 0x90, 0x8f, - 0xf8, 0x9c, 0x73, 0x34, 0x84, 0x7c, 0xc4, 0x27, 0xaf, 0x8f, 0xa9, 0x90, 0xff, 0xf7, 0x1c, 0x9c, - 0x49, 0xa9, 0x9c, 0x5c, 0x81, 0x81, 0x7a, 0x77, 0x19, 0xc3, 0x6e, 0xe5, 0x42, 0x8f, 0x61, 0xb7, - 0xbb, 0x8c, 0x11, 0xb7, 0x34, 0x1f, 0x49, 0x96, 0xf0, 0x71, 0xfd, 0x42, 0xad, 0x3a, 0x29, 0xa4, - 0xaa, 0x4a, 0x61, 0x02, 0x18, 0x38, 0xed, 0xcb, 0x82, 0x07, 0xf8, 0xb6, 0x69, 0x34, 0x63, 0x0f, - 0xf0, 0x59, 0x19, 0xf2, 0xc3, 0x30, 0x58, 0x79, 0xbf, 0xeb, 0x50, 0xe4, 0xcb, 0x25, 0xfe, 0xa9, - 0x80, 0xaf, 0x8f, 0x48, 0xe3, 0xcc, 0x63, 0x09, 0x30, 0x8a, 0x38, 0xef, 0x90, 0xa1, 0xfa, 0xf5, - 0x1c, 0x5c, 0xca, 0x6e, 0x1d, 0xf9, 0x1c, 0x0c, 0xb0, 0x9d, 0x79, 0x45, 0x9b, 0x17, 0x9f, 0xce, - 0xf3, 0x93, 0xda, 0x2d, 0xda, 0xd0, 0x1d, 0xd9, 0xd8, 0xf7, 0xc9, 0xc8, 0x5b, 0x30, 0x54, 0x73, - 0xdd, 0x2e, 0x75, 0xea, 0x2f, 0xdd, 0xd3, 0x6a, 0x62, 0x4f, 0x88, 0x7b, 0x0e, 0x13, 0xc1, 0x0d, - 0xf7, 0xa5, 0x58, 0x60, 0x2d, 0x99, 0x5e, 0xfd, 0xc9, 0x1c, 0x5c, 0xee, 0xf5, 0x55, 0xe4, 0x25, - 0x28, 0x2f, 0x51, 0x4b, 0xb7, 0xbc, 0x5a, 0x55, 0x34, 0x09, 0xb7, 0x58, 0x1e, 0xc2, 0xa2, 0x3b, - 0x85, 0x80, 0x90, 0x15, 0xe2, 0xe7, 0x8a, 0x81, 0x23, 0x03, 0x3f, 0x03, 0x45, 0x58, 0xac, 0x90, - 0x4f, 0xa8, 0xfe, 0x61, 0x1e, 0x86, 0x17, 0x5b, 0xdd, 0x55, 0x53, 0x5a, 0x38, 0xf6, 0x6c, 0x6f, - 0xfb, 0xd6, 0x6f, 0x7e, 0x77, 0xd6, 0x2f, 0x1b, 0x6e, 0xce, 0x1e, 0x87, 0x9b, 0x5f, 0x8e, 0xbc, - 0x09, 0xa5, 0x0e, 0x7e, 0x47, 0xfc, 0x24, 0x96, 0x7f, 0x5d, 0xd6, 0x49, 0x2c, 0x2f, 0xc3, 0xc6, - 0x57, 0x73, 0x1f, 0xe3, 0x2b, 0x2c, 0x2b, 0x09, 0x34, 0x5c, 0x24, 0x4e, 0x04, 0x7a, 0x20, 0x02, - 0x0d, 0x17, 0x84, 0x13, 0x81, 0xee, 0x43, 0xa0, 0xbf, 0x99, 0x87, 0xd1, 0x68, 0x95, 0xe4, 0x73, - 0x30, 0xc4, 0xab, 0xe1, 0xe7, 0x42, 0x39, 0xc9, 0xa9, 0x38, 0x04, 0x6b, 0xc0, 0x7f, 0x88, 0x03, - 0xae, 0x53, 0x6b, 0xba, 0xdb, 0x08, 0x4f, 0x68, 0xf8, 0xfd, 0x6d, 0x99, 0x7b, 0x42, 0xc5, 0x50, - 0xda, 0xe8, 0x9a, 0xee, 0x4e, 0x86, 0xbf, 0xc9, 0x14, 0x10, 0x87, 0x76, 0x5d, 0x1a, 0x65, 0x50, - 0x44, 0x06, 0x22, 0x39, 0x74, 0x1c, 0xab, 0x9d, 0xe6, 0x30, 0x99, 0xcd, 0x57, 0x82, 0x66, 0xa3, - 0x32, 0xf4, 0xef, 0x20, 0x73, 0xb5, 0x44, 0x9f, 0x7e, 0xcc, 0xc9, 0x09, 0xaa, 0xba, 0xa7, 0xf3, - 0x4d, 0xb9, 0xdf, 0x01, 0xea, 0x87, 0x36, 0xf4, 0x2f, 0x58, 0x74, 0x61, 0x85, 0xbc, 0x08, 0x83, - 0x4c, 0x61, 0x66, 0x6d, 0xd6, 0x97, 0x39, 0xe1, 0x3f, 0x21, 0x69, 0x12, 0x22, 0x66, 0xfa, 0xb4, - 0x90, 0x8a, 0xdc, 0xe2, 0xd9, 0xef, 0xf9, 0x1c, 0x2b, 0xb4, 0x8f, 0xc8, 0x65, 0x38, 0x66, 0xa6, - 0x4f, 0x93, 0xe8, 0xfc, 0x52, 0xe2, 0x81, 0x4e, 0x21, 0x59, 0x8a, 0x63, 0xfc, 0x52, 0x62, 0x7c, - 0xcc, 0xa6, 0x25, 0x96, 0x8f, 0xef, 0x9e, 0x92, 0x14, 0x33, 0x7d, 0x5a, 0x7a, 0x42, 0xfa, 0x61, - 0xd9, 0xa1, 0x34, 0xee, 0xf4, 0x21, 0xe3, 0x66, 0xfa, 0xb4, 0x08, 0x2d, 0x79, 0x15, 0x86, 0xc4, - 0xef, 0x3b, 0xb6, 0xb8, 0x51, 0x96, 0x62, 0x11, 0x49, 0xa8, 0x99, 0x3e, 0x4d, 0xa6, 0x94, 0x2a, - 0x5d, 0x74, 0x4c, 0xcb, 0x13, 0x6f, 0x94, 0xe3, 0x95, 0x22, 0x4e, 0xaa, 0x14, 0x7f, 0x93, 0xb7, - 0x60, 0x24, 0x08, 0xf2, 0xf4, 0x1e, 0x6d, 0x7a, 0xe2, 0xf0, 0xfb, 0x5c, 0xac, 0x30, 0x47, 0xce, - 0xf4, 0x69, 0x51, 0x6a, 0x72, 0x15, 0x4a, 0x1a, 0x75, 0xcd, 0xf7, 0xfd, 0xeb, 0xe2, 0x51, 0x69, - 0x9c, 0x9b, 0xef, 0x33, 0x29, 0x09, 0x3c, 0xeb, 0x9d, 0xf0, 0x7e, 0x5a, 0x1c, 0x55, 0x93, 0x58, - 0x2d, 0x53, 0x96, 0xc1, 0x7a, 0x47, 0x72, 0x4e, 0xf8, 0x62, 0x18, 0xfa, 0x4a, 0x24, 0xcc, 0x1c, - 0x8a, 0xc7, 0x18, 0x90, 0xb1, 0x33, 0x7d, 0x5a, 0x8c, 0x5e, 0x92, 0x6a, 0xd5, 0x74, 0x1f, 0x8a, - 0x68, 0xa3, 0x71, 0xa9, 0x32, 0x94, 0x24, 0x55, 0xf6, 0x53, 0xaa, 0x7a, 0x9e, 0x7a, 0xeb, 0xb6, - 0xf3, 0x50, 0xc4, 0x16, 0x8d, 0x57, 0x2d, 0xb0, 0x52, 0xd5, 0x02, 0x22, 0x57, 0xcd, 0x06, 0xdc, - 0x68, 0x7a, 0xd5, 0xba, 0xa7, 0xcb, 0x55, 0xf3, 0x93, 0x38, 0xbf, 0x93, 0x66, 0xa9, 0xfe, 0x88, - 0xe7, 0x2d, 0x4f, 0x76, 0x28, 0xe2, 0xa4, 0x0e, 0xc5, 0xdf, 0xac, 0x52, 0x29, 0x37, 0xb5, 0x48, - 0x4c, 0x1e, 0x54, 0x2a, 0xa1, 0x58, 0xa5, 0x72, 0x16, 0xeb, 0x5b, 0x72, 0xca, 0x66, 0xe5, 0x74, - 0xb4, 0x83, 0x42, 0x0c, 0xeb, 0x20, 0x29, 0xb5, 0xf3, 0x38, 0xa6, 0x83, 0x55, 0x08, 0x92, 0x0f, - 0x05, 0x2d, 0x9c, 0x5c, 0x9c, 0xe9, 0xd3, 0x30, 0x51, 0xac, 0xca, 0x13, 0x0d, 0x2b, 0x67, 0x90, - 0x62, 0xd8, 0xa7, 0x60, 0xb0, 0x99, 0x3e, 0x8d, 0x27, 0x21, 0x7e, 0x51, 0x4a, 0xe9, 0xa7, 0x9c, - 0x8d, 0x4e, 0x11, 0x01, 0x82, 0x4d, 0x11, 0x61, 0xe2, 0xbf, 0xe9, 0x64, 0xda, 0x3b, 0xe5, 0x5c, - 0x74, 0xa9, 0x89, 0xe3, 0x67, 0xfa, 0xb4, 0x64, 0xaa, 0xbc, 0x57, 0x23, 0x99, 0xe0, 0x94, 0xf3, - 0xb1, 0x00, 0x60, 0x21, 0x8a, 0x89, 0x4b, 0xce, 0x19, 0xb7, 0x10, 0xcb, 0x5a, 0x2e, 0x26, 0xab, - 0x0b, 0xd1, 0x8d, 0x4b, 0x0a, 0xc9, 0x4c, 0x9f, 0x96, 0x56, 0x92, 0x4c, 0x26, 0xf2, 0xb1, 0x29, - 0x4a, 0xd4, 0x37, 0x26, 0x86, 0x9e, 0xe9, 0xd3, 0x12, 0x19, 0xdc, 0x6e, 0xc9, 0x89, 0xd0, 0x94, - 0x8b, 0xd1, 0x4e, 0x0c, 0x31, 0xac, 0x13, 0xa5, 0x84, 0x69, 0xb7, 0xe4, 0xe4, 0x58, 0xca, 0xa5, - 0x64, 0xa9, 0x70, 0xe6, 0x94, 0x92, 0x68, 0x69, 0xe9, 0xf9, 0x7e, 0x94, 0x27, 0x44, 0xc6, 0x55, - 0x51, 0x3e, 0x8d, 0x66, 0xa6, 0x4f, 0x4b, 0xcf, 0x15, 0xa4, 0xa5, 0x27, 0xca, 0x51, 0x2e, 0xf7, - 0xe2, 0x19, 0xb4, 0x2e, 0x3d, 0xc9, 0x8e, 0xde, 0x23, 0x6d, 0x89, 0xf2, 0x64, 0x34, 0xfa, 0x70, - 0x26, 0xe1, 0x4c, 0x9f, 0xd6, 0x23, 0xf9, 0xc9, 0xbd, 0x8c, 0x1c, 0x22, 0xca, 0x53, 0xd1, 0x84, - 0xcb, 0xa9, 0x44, 0x33, 0x7d, 0x5a, 0x46, 0x06, 0x92, 0x7b, 0x19, 0x29, 0x26, 0x94, 0xf1, 0x9e, - 0x6c, 0x03, 0x79, 0x64, 0x24, 0xa8, 0x58, 0x48, 0xcd, 0xce, 0xa0, 0x3c, 0x1d, 0x55, 0xdd, 0x14, - 0x12, 0xa6, 0xba, 0x69, 0x79, 0x1d, 0x16, 0x52, 0xd3, 0x09, 0x28, 0xcf, 0xf4, 0x60, 0x18, 0xb4, - 0x31, 0x35, 0x11, 0xc1, 0x42, 0x6a, 0x3c, 0x7f, 0x45, 0x8d, 0x32, 0x4c, 0x21, 0x61, 0x0c, 0xd3, - 0x32, 0x01, 0x2c, 0xa4, 0x86, 0x7d, 0x57, 0x9e, 0xed, 0xc1, 0x30, 0x6c, 0x61, 0x5a, 0xc0, 0xf8, - 0x57, 0x23, 0x71, 0xd7, 0x95, 0x4f, 0x45, 0xe7, 0x0d, 0x09, 0xc5, 0xe6, 0x0d, 0x39, 0x42, 0xfb, - 0x64, 0x22, 0xb2, 0xac, 0xf2, 0xe9, 0xe8, 0x30, 0x8f, 0xa1, 0xd9, 0x30, 0x8f, 0xc7, 0xa2, 0x9d, - 0x4c, 0x44, 0xd8, 0x54, 0xae, 0x64, 0x31, 0x41, 0x74, 0x94, 0x09, 0x8f, 0xc9, 0x59, 0x4b, 0x09, - 0xf1, 0xa8, 0x7c, 0x26, 0xea, 0xd7, 0x9d, 0x20, 0x98, 0xe9, 0xd3, 0x52, 0x02, 0x43, 0x6a, 0xe9, - 0xf1, 0x8c, 0x94, 0xab, 0xd1, 0x61, 0x9b, 0x46, 0xc3, 0x86, 0x6d, 0x6a, 0x2c, 0xa4, 0xd9, 0xb4, - 0xc7, 0x27, 0xca, 0xb5, 0xa8, 0x61, 0x96, 0xa4, 0x60, 0x86, 0x59, 0xca, 0xa3, 0x15, 0x2d, 0x3d, - 0xc6, 0x8e, 0xf2, 0x5c, 0xcf, 0x16, 0x22, 0x4d, 0x4a, 0x0b, 0x79, 0xc8, 0x99, 0xd0, 0x76, 0xba, - 0xd7, 0x69, 0xd9, 0xba, 0xa1, 0x7c, 0x36, 0xd5, 0x76, 0xe2, 0x48, 0xc9, 0x76, 0xe2, 0x00, 0xb6, - 0xca, 0xcb, 0x6f, 0x1c, 0x94, 0xe7, 0xa3, 0xab, 0xbc, 0x8c, 0x63, 0xab, 0x7c, 0xe4, 0x3d, 0xc4, - 0x64, 0xe2, 0x3d, 0x80, 0xf2, 0x42, 0x54, 0x01, 0x62, 0x68, 0xa6, 0x00, 0xf1, 0x17, 0x04, 0x5f, - 0xcd, 0xf6, 0xa0, 0x57, 0xae, 0x23, 0xb7, 0xa7, 0x7d, 0x6e, 0x59, 0x74, 0x33, 0x7d, 0x5a, 0xb6, - 0x17, 0x7e, 0x2d, 0xc5, 0x21, 0x5e, 0xb9, 0x11, 0x55, 0xb0, 0x04, 0x01, 0x53, 0xb0, 0xa4, 0x1b, - 0x7d, 0x2d, 0xc5, 0xa3, 0x5d, 0xf9, 0x5c, 0x26, 0xab, 0xe0, 0x9b, 0x53, 0xfc, 0xe0, 0x6f, 0xc9, - 0x2e, 0xe9, 0xca, 0x8b, 0xd1, 0xc5, 0x2e, 0xc4, 0xb0, 0xc5, 0x4e, 0x72, 0x5d, 0xbf, 0x25, 0x3b, - 0x63, 0x2b, 0x37, 0x93, 0xa5, 0xc2, 0x25, 0x52, 0x72, 0xda, 0xd6, 0xd2, 0x7d, 0x98, 0x95, 0x97, - 0xa2, 0x5a, 0x97, 0x46, 0xc3, 0xb4, 0x2e, 0xd5, 0xff, 0x79, 0x3a, 0xe9, 0x8a, 0xac, 0xdc, 0x8a, - 0x6f, 0xb2, 0xa3, 0x78, 0x66, 0xf9, 0x24, 0xdc, 0x97, 0xbf, 0x18, 0x0f, 0xb6, 0xa7, 0xbc, 0x1c, - 0xbb, 0xf6, 0x8d, 0x60, 0x99, 0x7d, 0x1b, 0x0b, 0xce, 0xf7, 0xc5, 0x78, 0x7c, 0x3a, 0xe5, 0x95, - 0x74, 0x0e, 0x81, 0xae, 0xc4, 0xe3, 0xd9, 0x7d, 0x31, 0x1e, 0xd2, 0x4d, 0x79, 0x35, 0x9d, 0x43, - 0x20, 0xdd, 0x78, 0x08, 0xb8, 0x17, 0xa5, 0x20, 0xf3, 0xca, 0xe7, 0xa3, 0xa6, 0x63, 0x80, 0x60, - 0xa6, 0x63, 0x18, 0x8a, 0xfe, 0x45, 0x29, 0x38, 0xbb, 0xf2, 0x5a, 0xa2, 0x48, 0xd0, 0x58, 0x29, - 0x84, 0xfb, 0x8b, 0x52, 0x50, 0x73, 0xe5, 0xf5, 0x44, 0x91, 0xa0, 0x75, 0x52, 0xe8, 0x73, 0xa3, - 0xd7, 0xfb, 0x55, 0xe5, 0x8d, 0xe8, 0x61, 0x70, 0x36, 0xe5, 0x4c, 0x9f, 0xd6, 0xeb, 0x1d, 0xec, - 0x57, 0xb3, 0x1d, 0xbb, 0x95, 0x37, 0xa3, 0x43, 0x38, 0x8b, 0x8e, 0x0d, 0xe1, 0x4c, 0xe7, 0xf0, - 0xb7, 0x62, 0xb1, 0x2c, 0x94, 0xb7, 0xa2, 0x53, 0x5c, 0x04, 0xc9, 0xa6, 0xb8, 0x78, 0xe4, 0x8b, - 0x48, 0x90, 0x06, 0xe5, 0x0b, 0xd1, 0x29, 0x4e, 0xc6, 0xb1, 0x29, 0x2e, 0x12, 0xd0, 0x61, 0x32, - 0x11, 0x3b, 0x40, 0x79, 0x3b, 0x3a, 0xc5, 0xc5, 0xd0, 0x6c, 0x8a, 0x8b, 0x47, 0x1b, 0x78, 0x2b, - 0xf6, 0x84, 0x5e, 0xf9, 0x62, 0x7a, 0xfb, 0x11, 0x29, 0xb7, 0x9f, 0x3f, 0xb8, 0xd7, 0xd2, 0xdf, - 0x82, 0x2b, 0x95, 0xe8, 0xf8, 0x4d, 0xa3, 0x61, 0xe3, 0x37, 0xf5, 0x1d, 0x79, 0x7c, 0xe3, 0x20, - 0xb4, 0x6a, 0xa2, 0xc7, 0xc6, 0x21, 0x34, 0x45, 0x52, 0xc0, 0x91, 0x3d, 0x32, 0xdf, 0x08, 0x4d, - 0x66, 0xec, 0x91, 0xfd, 0x6d, 0x50, 0x8c, 0x9e, 0xcd, 0xae, 0x09, 0x3f, 0x63, 0xa5, 0x1a, 0x9d, - 0x5d, 0x13, 0x04, 0x6c, 0x76, 0x4d, 0x7a, 0x27, 0x4f, 0xc3, 0x98, 0xd0, 0x22, 0xee, 0x3e, 0x6d, - 0x5a, 0xab, 0xca, 0x54, 0xec, 0xbd, 0x65, 0x0c, 0xcf, 0x66, 0xa7, 0x38, 0x0c, 0xd7, 0x6b, 0x0e, - 0x9b, 0x6c, 0x99, 0x9d, 0x65, 0x5b, 0x77, 0x8c, 0x3a, 0xb5, 0x0c, 0x65, 0x3a, 0xb6, 0x5e, 0xa7, - 0xd0, 0xe0, 0x7a, 0x9d, 0x02, 0xc7, 0x10, 0x71, 0x31, 0xb8, 0x46, 0x9b, 0xd4, 0x7c, 0x44, 0x95, - 0xdb, 0xc8, 0x76, 0x3c, 0x8b, 0xad, 0x20, 0x9b, 0xe9, 0xd3, 0xb2, 0x38, 0x30, 0x5b, 0x7d, 0x6e, - 0xa3, 0xfe, 0xce, 0x6c, 0x10, 0x7e, 0x60, 0xd1, 0xa1, 0x1d, 0xdd, 0xa1, 0xca, 0x4c, 0xd4, 0x56, - 0x4f, 0x25, 0x62, 0xb6, 0x7a, 0x2a, 0x22, 0xc9, 0xd6, 0x1f, 0x0b, 0xb5, 0x5e, 0x6c, 0xc3, 0x11, - 0x91, 0x5e, 0x9a, 0xcd, 0x4e, 0x51, 0x04, 0x13, 0xd0, 0xac, 0x6d, 0xad, 0xe2, 0x49, 0xc5, 0x9d, - 0xe8, 0xec, 0x94, 0x4d, 0xc9, 0x66, 0xa7, 0x6c, 0x2c, 0x53, 0xf5, 0x28, 0x96, 0x8f, 0xc1, 0xbb, - 0x51, 0x55, 0x4f, 0x21, 0x61, 0xaa, 0x9e, 0x02, 0x4e, 0x32, 0xd4, 0xa8, 0x4b, 0x3d, 0x65, 0xb6, - 0x17, 0x43, 0x24, 0x49, 0x32, 0x44, 0x70, 0x92, 0xe1, 0x34, 0xf5, 0x9a, 0x6b, 0xca, 0x5c, 0x2f, - 0x86, 0x48, 0x92, 0x64, 0x88, 0x60, 0xb6, 0xd9, 0x8c, 0x82, 0x27, 0xba, 0xad, 0x87, 0x7e, 0x9f, - 0xcd, 0x47, 0x37, 0x9b, 0x99, 0x84, 0x6c, 0xb3, 0x99, 0x89, 0x24, 0x3f, 0xb9, 0x63, 0x3f, 0x78, - 0x65, 0x01, 0x2b, 0xbc, 0x1e, 0xda, 0x05, 0x3b, 0x29, 0x35, 0xd3, 0xa7, 0xed, 0xd4, 0xcf, 0xfe, - 0xb3, 0x81, 0xd3, 0xa8, 0xb2, 0x88, 0x55, 0x9d, 0x0a, 0xce, 0x2a, 0x38, 0x78, 0xa6, 0x4f, 0x0b, - 0xdc, 0x4a, 0x5f, 0x85, 0x21, 0xfc, 0xa8, 0x9a, 0x65, 0x7a, 0xd5, 0x09, 0xe5, 0x9d, 0xe8, 0x96, - 0x49, 0x42, 0xb1, 0x2d, 0x93, 0xf4, 0x93, 0x4d, 0xe2, 0xf8, 0x93, 0x4f, 0x31, 0xd5, 0x09, 0x45, - 0x8b, 0x4e, 0xe2, 0x11, 0x24, 0x9b, 0xc4, 0x23, 0x80, 0xa0, 0xde, 0xaa, 0x63, 0x77, 0xaa, 0x13, - 0x4a, 0x3d, 0xa5, 0x5e, 0x8e, 0x0a, 0xea, 0xe5, 0x3f, 0x83, 0x7a, 0xeb, 0x6b, 0x5d, 0xaf, 0xca, - 0xbe, 0x71, 0x29, 0xa5, 0x5e, 0x1f, 0x19, 0xd4, 0xeb, 0x03, 0xd8, 0x54, 0x88, 0x80, 0x45, 0xc7, - 0x66, 0x93, 0xf6, 0x5d, 0xb3, 0xd5, 0x52, 0xee, 0x45, 0xa7, 0xc2, 0x38, 0x9e, 0x4d, 0x85, 0x71, - 0x18, 0x33, 0x3d, 0x79, 0xab, 0xe8, 0x72, 0x77, 0x55, 0xb9, 0x1f, 0x35, 0x3d, 0x43, 0x0c, 0x33, - 0x3d, 0xc3, 0x5f, 0xb8, 0xbb, 0x60, 0xbf, 0x34, 0xba, 0xe2, 0x50, 0x77, 0x4d, 0x79, 0x10, 0xdb, - 0x5d, 0x48, 0x38, 0xdc, 0x5d, 0x48, 0xbf, 0xc9, 0x2a, 0x3c, 0x11, 0x59, 0x68, 0xfc, 0x4b, 0x9b, - 0x3a, 0xd5, 0x9d, 0xe6, 0x9a, 0xf2, 0x25, 0x64, 0xf5, 0x6c, 0xea, 0x52, 0x15, 0x25, 0x9d, 0xe9, - 0xd3, 0x7a, 0x71, 0xc2, 0x6d, 0xf9, 0x3b, 0xb3, 0x3c, 0x12, 0xac, 0xb6, 0x38, 0xe9, 0x6f, 0x42, - 0xdf, 0x8d, 0x6d, 0xcb, 0x93, 0x24, 0xb8, 0x2d, 0x4f, 0x82, 0x49, 0x07, 0x9e, 0x8a, 0x6d, 0xd5, - 0xe6, 0xf4, 0x16, 0xdb, 0x97, 0x50, 0x63, 0x51, 0x6f, 0x3e, 0xa4, 0x9e, 0xf2, 0x65, 0xe4, 0x7d, - 0x25, 0x63, 0xc3, 0x17, 0xa3, 0x9e, 0xe9, 0xd3, 0xb6, 0xe1, 0x47, 0x54, 0x28, 0xd6, 0xa7, 0x97, - 0x16, 0x95, 0x1f, 0x8a, 0x9e, 0x6f, 0x32, 0xd8, 0x4c, 0x9f, 0x86, 0x38, 0x66, 0xa5, 0xdd, 0xeb, - 0xac, 0x3a, 0xba, 0x41, 0xb9, 0xa1, 0x85, 0xb6, 0x9b, 0x30, 0x40, 0x7f, 0x38, 0x6a, 0xa5, 0x65, - 0xd1, 0x31, 0x2b, 0x2d, 0x0b, 0xc7, 0x14, 0x35, 0x92, 0xf4, 0x44, 0xf9, 0x4a, 0x54, 0x51, 0x23, - 0x48, 0xa6, 0xa8, 0xd1, 0x14, 0x29, 0x5f, 0x82, 0xf3, 0xc1, 0x7e, 0x5e, 0xac, 0xbf, 0xbc, 0xd3, - 0x94, 0xaf, 0x22, 0x9f, 0xa7, 0x12, 0x97, 0x01, 0x11, 0xaa, 0x99, 0x3e, 0x2d, 0xa3, 0x3c, 0x5b, - 0x71, 0x13, 0xf9, 0xbc, 0x84, 0x79, 0xf1, 0x23, 0xd1, 0x15, 0x37, 0x83, 0x8c, 0xad, 0xb8, 0x19, - 0xa8, 0x54, 0xe6, 0x42, 0xa8, 0xfa, 0x36, 0xcc, 0x03, 0x99, 0x66, 0x71, 0x48, 0x65, 0x2e, 0x2c, - 0xb5, 0xe5, 0x6d, 0x98, 0x07, 0xd6, 0x5a, 0x16, 0x07, 0x72, 0x15, 0x4a, 0xf5, 0xfa, 0x9c, 0xd6, - 0xb5, 0x94, 0x66, 0xcc, 0x5b, 0x16, 0xa1, 0x33, 0x7d, 0x9a, 0xc0, 0x33, 0x33, 0x68, 0xaa, 0xa5, - 0xbb, 0x9e, 0xd9, 0x74, 0x71, 0xc4, 0xf8, 0x23, 0xc4, 0x88, 0x9a, 0x41, 0x69, 0x34, 0xcc, 0x0c, - 0x4a, 0x83, 0x33, 0x7b, 0x71, 0x52, 0x77, 0x5d, 0xdd, 0x32, 0x1c, 0x7d, 0x02, 0x97, 0x09, 0x1a, - 0x7b, 0x8d, 0x15, 0xc1, 0x32, 0x7b, 0x31, 0x0a, 0xc1, 0xc3, 0x77, 0x1f, 0xe2, 0x9b, 0x39, 0x2b, - 0xb1, 0xc3, 0xf7, 0x18, 0x1e, 0x0f, 0xdf, 0x63, 0x30, 0xb4, 0x3b, 0x7d, 0x98, 0x46, 0x57, 0x4d, - 0x26, 0x22, 0x65, 0x35, 0x66, 0x77, 0xc6, 0x09, 0xd0, 0xee, 0x8c, 0x03, 0x23, 0x4d, 0xf2, 0x97, - 0xdb, 0xb5, 0x8c, 0x26, 0x85, 0xab, 0x6c, 0xa2, 0x0c, 0x5b, 0xbf, 0xc3, 0xc1, 0x51, 0xdd, 0xb0, - 0xf4, 0xb6, 0x5d, 0x9d, 0xf0, 0xa5, 0x6e, 0x46, 0xd7, 0xef, 0x4c, 0x42, 0xb6, 0x7e, 0x67, 0x22, - 0xd9, 0xec, 0xea, 0x6f, 0xb4, 0xd6, 0x74, 0x87, 0x1a, 0x55, 0xd3, 0xc1, 0x93, 0xc5, 0x0d, 0xbe, - 0x35, 0x7c, 0x2f, 0x3a, 0xbb, 0xf6, 0x20, 0x65, 0xb3, 0x6b, 0x0f, 0x34, 0x33, 0xf2, 0xd2, 0xd1, - 0x1a, 0xd5, 0x0d, 0xe5, 0x61, 0xd4, 0xc8, 0xcb, 0xa6, 0x64, 0x46, 0x5e, 0x36, 0x36, 0xfb, 0x73, - 0x1e, 0x38, 0xa6, 0x47, 0x95, 0xd6, 0x4e, 0x3e, 0x07, 0x49, 0xb3, 0x3f, 0x07, 0xd1, 0x6c, 0x43, - 0x18, 0xef, 0x90, 0x76, 0x74, 0x43, 0x98, 0xec, 0x86, 0x78, 0x09, 0x66, 0xb1, 0x88, 0x47, 0x79, - 0x8a, 0x15, 0xb5, 0x58, 0x04, 0x98, 0x59, 0x2c, 0xe1, 0xb3, 0xbd, 0xc8, 0x53, 0x2c, 0xc5, 0x8e, - 0xae, 0xa1, 0x32, 0x8e, 0xad, 0xa1, 0x91, 0x67, 0x5b, 0xaf, 0x46, 0xde, 0x19, 0x28, 0x9d, 0xa8, - 0xd5, 0x21, 0xa1, 0x98, 0xd5, 0x21, 0xbf, 0x48, 0x98, 0x84, 0x53, 0x78, 0x0b, 0xae, 0x75, 0x83, - 0x7b, 0x9c, 0x1f, 0x8d, 0x7e, 0x66, 0x0c, 0xcd, 0x3e, 0x33, 0x06, 0x8a, 0x30, 0x11, 0xd3, 0x96, - 0x93, 0xc1, 0x24, 0x3c, 0x1f, 0x8c, 0x81, 0xc8, 0x2c, 0x90, 0x7a, 0x65, 0x6e, 0xb6, 0x66, 0x2c, - 0xca, 0x57, 0x64, 0x6e, 0xf4, 0x04, 0x36, 0x49, 0x31, 0xd3, 0xa7, 0xa5, 0x94, 0x23, 0xef, 0xc1, - 0x65, 0x01, 0x15, 0x2f, 0xae, 0x31, 0xed, 0xbf, 0x11, 0x2c, 0x08, 0x5e, 0xd4, 0x8f, 0xad, 0x17, - 0xed, 0x4c, 0x9f, 0xd6, 0x93, 0x57, 0x76, 0x5d, 0x62, 0x7d, 0xe8, 0xee, 0xa4, 0xae, 0x60, 0x91, - 0xe8, 0xc9, 0x2b, 0xbb, 0x2e, 0x21, 0xf7, 0x47, 0x3b, 0xa9, 0x2b, 0xe8, 0x84, 0x9e, 0xbc, 0x88, - 0x0b, 0xe3, 0xbd, 0xf0, 0x95, 0x56, 0x4b, 0x59, 0xc7, 0xea, 0x3e, 0xb3, 0x93, 0xea, 0x2a, 0x68, - 0x70, 0x6e, 0xc7, 0x91, 0xcd, 0xd2, 0x0b, 0x1d, 0x6a, 0xd5, 0x23, 0x0b, 0xd0, 0xe3, 0xe8, 0x2c, - 0x9d, 0x20, 0x60, 0xb3, 0x74, 0x02, 0xc8, 0x06, 0x94, 0xfc, 0x5c, 0x45, 0xd9, 0x88, 0x0e, 0x28, - 0x19, 0xc7, 0x06, 0x54, 0xe4, 0x69, 0xcb, 0x02, 0x9c, 0x59, 0x78, 0xe8, 0xe9, 0xbe, 0x05, 0xe9, - 0x8a, 0xae, 0x7c, 0x3f, 0x76, 0xc9, 0x94, 0x24, 0xc1, 0x4b, 0xa6, 0x24, 0x98, 0x8d, 0x11, 0x06, - 0xae, 0x6f, 0x58, 0xcd, 0x69, 0xdd, 0x6c, 0x75, 0x1d, 0xaa, 0xfc, 0x6b, 0xd1, 0x31, 0x12, 0x43, - 0xb3, 0x31, 0x12, 0x03, 0xb1, 0x05, 0x9a, 0x81, 0x2a, 0xae, 0x6b, 0xae, 0x5a, 0x62, 0x5f, 0xd9, - 0x6d, 0x79, 0xca, 0xbf, 0x1e, 0x5d, 0xa0, 0xd3, 0x68, 0xd8, 0x02, 0x9d, 0x06, 0xc7, 0x53, 0x27, - 0xd6, 0x0b, 0x6c, 0xf1, 0x90, 0xef, 0x2a, 0xff, 0x8d, 0xd8, 0xa9, 0x53, 0x0a, 0x0d, 0x9e, 0x3a, - 0xa5, 0xc0, 0xd9, 0xfa, 0xc8, 0x6d, 0xb2, 0x59, 0x33, 0xb8, 0xab, 0xfe, 0x37, 0xa3, 0xeb, 0x63, - 0x1c, 0xcf, 0xd6, 0xc7, 0x38, 0x2c, 0xca, 0x47, 0x74, 0xc1, 0xbf, 0x95, 0xc5, 0x27, 0x90, 0x7f, - 0xa2, 0x0c, 0xb9, 0x2d, 0xf3, 0x11, 0x23, 0xe5, 0xc7, 0x72, 0x59, 0x8c, 0x82, 0xe1, 0x91, 0x28, - 0x14, 0x65, 0xa4, 0xd1, 0x47, 0x26, 0x5d, 0x57, 0xbe, 0x96, 0xc9, 0x88, 0x13, 0x44, 0x19, 0x71, - 0x18, 0x79, 0x17, 0xce, 0x87, 0xb0, 0x39, 0xda, 0x5e, 0x0e, 0x66, 0xa6, 0x3f, 0x91, 0x8b, 0x9a, - 0xc1, 0xe9, 0x64, 0xcc, 0x0c, 0x4e, 0xc7, 0xa4, 0xb1, 0x16, 0xa2, 0xfb, 0xb7, 0xb7, 0x61, 0x1d, - 0x48, 0x30, 0x83, 0x41, 0x1a, 0x6b, 0x21, 0xcd, 0x1f, 0xdf, 0x86, 0x75, 0x20, 0xd3, 0x0c, 0x06, - 0xe4, 0xa7, 0x72, 0x70, 0x25, 0x1d, 0x55, 0x69, 0xb5, 0xa6, 0x6d, 0x27, 0xc4, 0x29, 0x7f, 0x32, - 0x17, 0x3d, 0x68, 0xd8, 0x59, 0xb1, 0x99, 0x3e, 0x6d, 0x87, 0x15, 0x90, 0x2f, 0xc0, 0x48, 0xa5, - 0x6b, 0x98, 0x1e, 0x5e, 0xbc, 0x31, 0xc3, 0xf9, 0x27, 0x72, 0xb1, 0x2d, 0x8e, 0x8c, 0xc5, 0x2d, - 0x8e, 0x0c, 0x20, 0x77, 0xe0, 0x74, 0x9d, 0x36, 0xbb, 0x8e, 0xe9, 0x6d, 0x68, 0xb4, 0x63, 0x3b, - 0x1e, 0xe3, 0xf1, 0xa7, 0x72, 0xd1, 0x49, 0x2c, 0x41, 0xc1, 0x26, 0xb1, 0x04, 0x90, 0xdc, 0x4f, - 0xdc, 0xca, 0x8b, 0xce, 0xfc, 0xc9, 0x5c, 0xcf, 0x6b, 0xf9, 0xa0, 0x2f, 0xd3, 0x8b, 0x93, 0xc5, - 0xd8, 0x2d, 0xba, 0xe0, 0xfa, 0x53, 0xb9, 0x1e, 0xd7, 0xe8, 0xd2, 0x0c, 0x97, 0x04, 0x33, 0x8e, - 0x29, 0x19, 0xe0, 0x95, 0x3f, 0x9d, 0xeb, 0x71, 0xed, 0x1d, 0x72, 0x4c, 0x4b, 0x1e, 0xff, 0x32, - 0xf7, 0x14, 0x11, 0x8c, 0x7e, 0x3a, 0x97, 0x74, 0x15, 0x09, 0xca, 0x4b, 0x84, 0xac, 0xd8, 0x3d, - 0x37, 0x50, 0xfa, 0x0f, 0x72, 0x49, 0xdf, 0xbc, 0xb0, 0x58, 0xf8, 0x8b, 0x50, 0xb8, 0x34, 0xf5, - 0xd8, 0xa3, 0x8e, 0xa5, 0xb7, 0xb0, 0x3b, 0xeb, 0x9e, 0xed, 0xe8, 0xab, 0x74, 0xca, 0xd2, 0x97, - 0x5b, 0x54, 0xf9, 0x7a, 0x2e, 0x6a, 0xc1, 0x66, 0x93, 0x32, 0x0b, 0x36, 0x1b, 0x4b, 0xd6, 0xe0, - 0x89, 0x34, 0x6c, 0xd5, 0x74, 0xb1, 0x9e, 0x6f, 0xe4, 0xa2, 0x26, 0x6c, 0x0f, 0x5a, 0x66, 0xc2, - 0xf6, 0x40, 0x93, 0x9b, 0x30, 0x38, 0x61, 0xfb, 0xd3, 0xef, 0x9f, 0x89, 0x39, 0x43, 0x06, 0x98, - 0x99, 0x3e, 0x2d, 0x24, 0x13, 0x65, 0xc4, 0xa0, 0xfe, 0x66, 0xb2, 0x4c, 0x78, 0xf9, 0x14, 0xfc, - 0x10, 0x65, 0x84, 0xb8, 0xff, 0x9d, 0x64, 0x99, 0xf0, 0x8e, 0x2b, 0xf8, 0xc1, 0x66, 0x12, 0x5e, - 0xe3, 0xdc, 0x74, 0x85, 0xd9, 0x6d, 0x93, 0x6b, 0x7a, 0xab, 0x45, 0xad, 0x55, 0xaa, 0x7c, 0x2b, - 0x36, 0x93, 0xa4, 0x93, 0xb1, 0x99, 0x24, 0x1d, 0x43, 0x7e, 0x18, 0x2e, 0xdc, 0xd7, 0x5b, 0xa6, - 0x11, 0xe2, 0xfc, 0x7c, 0xe0, 0xca, 0xcf, 0xe4, 0xa2, 0xbb, 0xe9, 0x0c, 0x3a, 0xb6, 0x9b, 0xce, - 0x40, 0x91, 0x39, 0x20, 0xb8, 0x8c, 0x06, 0xb3, 0x05, 0x5b, 0x9f, 0x95, 0x7f, 0x37, 0x17, 0xb5, - 0x53, 0x93, 0x24, 0xcc, 0x4e, 0x4d, 0x42, 0x49, 0x23, 0x3b, 0x35, 0x88, 0xf2, 0xb3, 0xb9, 0xe8, - 0x69, 0x4d, 0x16, 0xe1, 0x4c, 0x9f, 0x96, 0x9d, 0x5f, 0xe4, 0x36, 0x8c, 0xd5, 0x17, 0x6b, 0xd3, - 0xd3, 0x53, 0xf5, 0xfb, 0xb5, 0x2a, 0x3e, 0x74, 0x30, 0x94, 0x3f, 0x1b, 0x5b, 0xb1, 0xe2, 0x04, - 0x6c, 0xc5, 0x8a, 0xc3, 0xc8, 0x1b, 0x30, 0xcc, 0xda, 0xcf, 0x06, 0x0c, 0x7e, 0xf2, 0xcf, 0xe5, - 0xa2, 0xe6, 0x94, 0x8c, 0x64, 0xe6, 0x94, 0xfc, 0x9b, 0xd4, 0xe1, 0x2c, 0x93, 0xe2, 0xa2, 0x43, - 0x57, 0xa8, 0x43, 0xad, 0xa6, 0x3f, 0xa6, 0x7f, 0x3e, 0x17, 0xb5, 0x32, 0xd2, 0x88, 0x98, 0x95, - 0x91, 0x06, 0x27, 0x0f, 0xe1, 0x72, 0xfc, 0x24, 0x48, 0x7e, 0x76, 0xaa, 0xfc, 0xb9, 0x5c, 0xcc, - 0x18, 0xee, 0x41, 0x8c, 0xc6, 0x70, 0x0f, 0x3c, 0xb1, 0xe0, 0x49, 0x71, 0xac, 0x22, 0x1c, 0x2e, - 0xe3, 0xb5, 0xfd, 0x79, 0x5e, 0xdb, 0xa7, 0x43, 0x87, 0xc0, 0x1e, 0xd4, 0x33, 0x7d, 0x5a, 0x6f, - 0x76, 0x4c, 0xcf, 0x92, 0x09, 0x30, 0x94, 0x5f, 0xc8, 0xa5, 0x7b, 0xa4, 0x44, 0xdc, 0x94, 0xd3, - 0x32, 0x67, 0xbc, 0x9b, 0x95, 0xbe, 0x41, 0xf9, 0x0b, 0xb1, 0xf1, 0x96, 0x4e, 0xc6, 0xc6, 0x5b, - 0x46, 0xfe, 0x87, 0x3b, 0x70, 0x9a, 0x2b, 0xf5, 0xa2, 0x8e, 0xc3, 0xd0, 0x5a, 0xa5, 0x86, 0xf2, - 0xef, 0xc5, 0x56, 0xbb, 0x04, 0x05, 0xba, 0xf6, 0xc4, 0x81, 0x6c, 0xea, 0xae, 0x77, 0x74, 0xcb, - 0xc2, 0x63, 0x56, 0xe5, 0xdf, 0x8f, 0x4d, 0xdd, 0x21, 0x0a, 0x1d, 0x77, 0x83, 0x5f, 0x4c, 0x13, - 0x7a, 0xa5, 0x3e, 0x52, 0xfe, 0x62, 0x4c, 0x13, 0x7a, 0x11, 0x33, 0x4d, 0xe8, 0x99, 0x47, 0xe9, - 0x7e, 0xc6, 0x13, 0x70, 0xe5, 0x17, 0x63, 0x2b, 0x72, 0x2a, 0x15, 0x5b, 0x91, 0xd3, 0x5f, 0x90, - 0xdf, 0xcf, 0x78, 0x3e, 0xad, 0xfc, 0x52, 0x6f, 0xbe, 0xe1, 0x4a, 0x9f, 0xfe, 0xfa, 0xfa, 0x7e, - 0xc6, 0xd3, 0x63, 0xe5, 0x2f, 0xf5, 0xe6, 0x1b, 0x3a, 0xf6, 0xa5, 0xbf, 0x5c, 0x6e, 0x64, 0x3f, - 0xdb, 0x55, 0xfe, 0x72, 0x7c, 0xea, 0xca, 0x20, 0xc4, 0xa9, 0x2b, 0xeb, 0xed, 0xef, 0x32, 0x5c, - 0xe4, 0x1a, 0x72, 0xdb, 0xd1, 0x3b, 0x6b, 0x75, 0xea, 0x79, 0xa6, 0xb5, 0xea, 0xef, 0xc4, 0xfe, - 0x4a, 0x2e, 0x76, 0x3c, 0x96, 0x45, 0x89, 0xc7, 0x63, 0x59, 0x48, 0xa6, 0xbc, 0x89, 0x07, 0xba, - 0xca, 0x5f, 0x8d, 0x29, 0x6f, 0x82, 0x82, 0x29, 0x6f, 0xf2, 0x5d, 0xef, 0x9d, 0x94, 0x77, 0xa8, - 0xca, 0x7f, 0x90, 0xcd, 0x2b, 0x68, 0x5f, 0xca, 0xf3, 0xd5, 0x3b, 0x29, 0xcf, 0x2d, 0x95, 0xff, - 0x30, 0x9b, 0x57, 0xe8, 0x83, 0x94, 0x7c, 0xa5, 0xf9, 0x2e, 0x9c, 0xe7, 0xb3, 0xf9, 0x34, 0x35, - 0x68, 0xe4, 0x43, 0x7f, 0x39, 0x36, 0xf6, 0xd3, 0xc9, 0xf0, 0xc8, 0x3d, 0x15, 0x93, 0xc6, 0x5a, - 0xb4, 0xf5, 0xaf, 0x6d, 0xc3, 0x3a, 0xdc, 0x10, 0xa4, 0x63, 0xd8, 0x7a, 0x23, 0x3f, 0x7e, 0x53, - 0x7e, 0x25, 0xb6, 0xde, 0xc8, 0x48, 0x74, 0xe7, 0x90, 0x5f, 0xca, 0xbd, 0x11, 0x7d, 0xe8, 0xa5, - 0xfc, 0x47, 0xa9, 0x85, 0x83, 0x0e, 0x88, 0xbe, 0x0a, 0x7b, 0x23, 0xfa, 0xa8, 0x49, 0xf9, 0xd5, - 0xd4, 0xc2, 0xc1, 0x07, 0x44, 0x5f, 0x40, 0xb1, 0x2d, 0x52, 0xd7, 0xb3, 0x39, 0xab, 0xc8, 0xf4, - 0xf0, 0xd7, 0xe3, 0x5b, 0xa4, 0x54, 0x32, 0xdc, 0x22, 0xa5, 0x62, 0xd2, 0x58, 0x8b, 0xcf, 0xfb, - 0xb5, 0x6d, 0x58, 0x4b, 0x1b, 0xbb, 0x54, 0x4c, 0x1a, 0x6b, 0xf1, 0xf1, 0xbf, 0xbe, 0x0d, 0x6b, - 0x69, 0x63, 0x97, 0x8a, 0x61, 0xe6, 0x58, 0x88, 0xb9, 0x4f, 0x1d, 0x37, 0x54, 0xbf, 0xbf, 0x11, - 0x33, 0xc7, 0x32, 0xe8, 0x98, 0x39, 0x96, 0x81, 0x4a, 0xe5, 0x2e, 0x84, 0xf2, 0x1b, 0xdb, 0x71, - 0x0f, 0xef, 0x65, 0x32, 0x50, 0xa9, 0xdc, 0x85, 0x5c, 0xfe, 0xe6, 0x76, 0xdc, 0xc3, 0x8b, 0x99, - 0x0c, 0x14, 0x33, 0x8a, 0xea, 0x9e, 0xee, 0x99, 0xcd, 0x19, 0xdb, 0xf5, 0xa4, 0x45, 0xfe, 0x6f, - 0xc5, 0x8c, 0xa2, 0x34, 0x22, 0x66, 0x14, 0xa5, 0xc1, 0x93, 0x4c, 0x85, 0x34, 0x7e, 0xb3, 0x27, - 0xd3, 0xd0, 0xd2, 0x4a, 0x83, 0x27, 0x99, 0x0a, 0x21, 0xfc, 0xc7, 0x3d, 0x99, 0x86, 0x9e, 0xf2, - 0x69, 0x70, 0x66, 0x99, 0x4e, 0x3a, 0xf6, 0xba, 0x75, 0x87, 0xae, 0xd3, 0x96, 0xf8, 0xf4, 0xdf, - 0x8a, 0x59, 0xa6, 0x71, 0x02, 0xbc, 0x45, 0x89, 0xc1, 0xa2, 0x8c, 0xc4, 0xe7, 0xfe, 0x76, 0x26, - 0xa3, 0xf0, 0x98, 0x28, 0x0e, 0x8b, 0x32, 0x12, 0x9f, 0xf8, 0x3b, 0x99, 0x8c, 0xc2, 0x63, 0xa2, - 0x38, 0x8c, 0x54, 0x60, 0x14, 0xdf, 0x4a, 0xe8, 0xae, 0xef, 0xf9, 0xf9, 0xfb, 0xb9, 0xe8, 0xad, - 0x57, 0x14, 0x3d, 0xd3, 0xa7, 0xc5, 0x0a, 0xc8, 0x2c, 0xc4, 0x27, 0x7d, 0x27, 0x83, 0x45, 0xe8, - 0xef, 0x18, 0x85, 0xc8, 0x2c, 0xc4, 0xc7, 0xfc, 0x27, 0x19, 0x2c, 0x42, 0x87, 0xc7, 0x28, 0x64, - 0x62, 0x00, 0xfa, 0xf1, 0x40, 0xf4, 0x4e, 0xa9, 0xfc, 0xed, 0xdc, 0xd8, 0xef, 0xe6, 0xee, 0x94, - 0xca, 0xbf, 0x9b, 0x1b, 0xfb, 0x3d, 0xf6, 0xff, 0xef, 0xe5, 0xc6, 0x7e, 0x3f, 0xa7, 0x5d, 0x0c, - 0x95, 0xbb, 0xb2, 0x4a, 0x2d, 0x6f, 0xb1, 0xa5, 0x8b, 0xa1, 0x99, 0x8a, 0xe2, 0x3f, 0x53, 0x51, - 0x22, 0xa1, 0xd5, 0x2f, 0xe6, 0x60, 0xb8, 0xee, 0x39, 0x54, 0x6f, 0x8b, 0xf8, 0x70, 0x97, 0xa0, - 0xcc, 0x5d, 0x98, 0xfd, 0xf7, 0xd6, 0x5a, 0xf0, 0x9b, 0x5c, 0x81, 0xd1, 0x59, 0xdd, 0xf5, 0xb0, - 0x89, 0x35, 0xcb, 0xa0, 0x8f, 0xf1, 0xf9, 0x5e, 0x41, 0x8b, 0x41, 0xc9, 0x2c, 0xa7, 0xe3, 0xe5, - 0x30, 0x24, 0x68, 0x61, 0xdb, 0xb0, 0x68, 0xe5, 0x0f, 0x37, 0xc7, 0xfb, 0x30, 0x0a, 0x5a, 0xac, - 0xac, 0xfa, 0x07, 0x39, 0x48, 0x38, 0x57, 0xef, 0x3d, 0x0e, 0xc2, 0x02, 0x9c, 0x8a, 0x85, 0xa1, - 0x15, 0x6f, 0x10, 0x77, 0x18, 0xa5, 0x36, 0x5e, 0x9a, 0x7c, 0x26, 0x78, 0xfb, 0x76, 0x4f, 0x9b, - 0x15, 0x21, 0xef, 0x30, 0x59, 0x43, 0xd7, 0x69, 0x69, 0x12, 0x4a, 0x84, 0x34, 0xfa, 0xc1, 0x58, - 0x18, 0x63, 0x93, 0x5c, 0x11, 0x41, 0x19, 0x72, 0x61, 0xa0, 0xbc, 0x58, 0x6a, 0x78, 0x1e, 0x84, - 0xe1, 0x0b, 0x30, 0x5c, 0x6b, 0x77, 0xa8, 0xe3, 0xda, 0x96, 0xee, 0xd9, 0x8e, 0x78, 0xd3, 0x8e, - 0x41, 0xd4, 0x4c, 0x09, 0x2e, 0x07, 0xf6, 0x92, 0xe9, 0xc9, 0x35, 0x3f, 0xdf, 0x5c, 0x01, 0xa3, - 0x9b, 0xe2, 0xc3, 0xd4, 0x78, 0xba, 0x71, 0x4e, 0xc1, 0x48, 0xef, 0xb9, 0x3a, 0xbe, 0x92, 0x0c, - 0x48, 0xbb, 0x0c, 0x20, 0x93, 0x22, 0x05, 0x79, 0x1e, 0x4a, 0x78, 0xab, 0xe4, 0x62, 0x1e, 0x49, - 0x11, 0xbe, 0xaf, 0x85, 0x10, 0x39, 0x58, 0x1a, 0xa7, 0x21, 0x77, 0x61, 0x2c, 0xbc, 0x32, 0xbf, - 0xed, 0xd8, 0xdd, 0x8e, 0x9f, 0x39, 0x06, 0xd3, 0xb4, 0x3f, 0x0c, 0x70, 0x8d, 0x55, 0x44, 0x4a, - 0x2c, 0x12, 0x05, 0xc9, 0x0c, 0x9c, 0x0a, 0x61, 0x4c, 0x44, 0x7e, 0xc6, 0x2a, 0xcc, 0x16, 0x2a, - 0xf1, 0x62, 0xe2, 0x8c, 0x64, 0x0b, 0x8d, 0x15, 0x23, 0x35, 0x18, 0xf0, 0x63, 0xf7, 0x95, 0xb7, - 0x55, 0xd2, 0x33, 0x22, 0x76, 0xdf, 0x80, 0x1c, 0xb5, 0xcf, 0x2f, 0x4f, 0xa6, 0x61, 0x54, 0xb3, - 0xbb, 0x1e, 0x5d, 0xb2, 0xc5, 0x5e, 0x53, 0xc4, 0x88, 0xc4, 0x36, 0x39, 0x0c, 0xd3, 0xf0, 0x6c, - 0x3f, 0xcb, 0xbd, 0x9c, 0x6d, 0x3d, 0x5a, 0x8a, 0xcc, 0xc3, 0xe9, 0x84, 0x73, 0x81, 0x9c, 0x7b, - 0x5e, 0xfa, 0xbc, 0x24, 0xb3, 0x64, 0x51, 0xf2, 0x13, 0x39, 0x28, 0x2d, 0x39, 0xba, 0xe9, 0xb9, - 0xe2, 0x81, 0xe5, 0xb9, 0xeb, 0xeb, 0x8e, 0xde, 0x61, 0xfa, 0x71, 0x1d, 0xc3, 0xd7, 0xde, 0xd7, - 0x5b, 0x5d, 0xea, 0x4e, 0x3c, 0x60, 0x5f, 0xf7, 0xdf, 0x6f, 0x8e, 0xbf, 0xb1, 0x8a, 0x47, 0x98, - 0xd7, 0x9b, 0x76, 0xfb, 0xc6, 0xaa, 0xa3, 0x3f, 0x32, 0x3d, 0x34, 0x14, 0xf5, 0xd6, 0x0d, 0x8f, - 0xb6, 0xf0, 0xa4, 0xf4, 0x86, 0xde, 0x31, 0x6f, 0x60, 0x98, 0xf4, 0x1b, 0x01, 0x27, 0x5e, 0x03, - 0x53, 0x01, 0x0f, 0xff, 0x92, 0x55, 0x80, 0xe3, 0xc8, 0x3c, 0x80, 0xf8, 0xd4, 0x4a, 0xa7, 0x23, - 0x5e, 0x6b, 0x4a, 0xe7, 0x8b, 0x3e, 0x86, 0x2b, 0x76, 0x20, 0x30, 0xbd, 0x23, 0x85, 0x06, 0xd6, - 0x24, 0x0e, 0x4c, 0x0b, 0x96, 0x44, 0x8b, 0x7c, 0x31, 0x8d, 0x84, 0x12, 0xf7, 0x1b, 0x9b, 0x22, - 0xa4, 0x78, 0x31, 0xb2, 0x0c, 0xa7, 0x04, 0xdf, 0x20, 0x91, 0xc8, 0x68, 0x74, 0x56, 0x88, 0xa1, - 0xb9, 0xd2, 0x06, 0x6d, 0x34, 0x04, 0x58, 0xae, 0x23, 0x56, 0x82, 0x4c, 0x84, 0x89, 0x8f, 0xe7, - 0xf5, 0x36, 0x75, 0x95, 0x53, 0xa8, 0xb1, 0x97, 0xb7, 0x36, 0xc7, 0x15, 0xbf, 0x3c, 0x86, 0xb1, - 0x94, 0x45, 0x17, 0x2d, 0x22, 0xf3, 0xe0, 0x5a, 0x3f, 0x96, 0xc2, 0x23, 0xae, 0xf3, 0xd1, 0x22, - 0x64, 0x12, 0x46, 0x82, 0xc7, 0x22, 0xf7, 0xee, 0xd5, 0xaa, 0xf8, 0x1c, 0x54, 0x44, 0x32, 0x8d, - 0xa5, 0xfa, 0x90, 0x99, 0x44, 0xca, 0x48, 0x11, 0x36, 0xf8, 0xfb, 0xd0, 0x58, 0x84, 0x8d, 0x4e, - 0x4a, 0x84, 0x8d, 0x45, 0xf2, 0x16, 0x0c, 0x55, 0x1e, 0xd4, 0x45, 0xe4, 0x10, 0x57, 0x39, 0x13, - 0xe6, 0x8d, 0xd2, 0xd7, 0xdd, 0x86, 0x1f, 0x65, 0x44, 0x6e, 0xba, 0x4c, 0x4f, 0xa6, 0x60, 0x34, - 0xe2, 0x6f, 0xe6, 0x2a, 0x67, 0x91, 0x03, 0xb6, 0x5c, 0x47, 0x4c, 0xc3, 0x11, 0x28, 0x79, 0x78, - 0x45, 0x0b, 0x31, 0xad, 0xa9, 0x9a, 0x2e, 0xe6, 0xe0, 0xd1, 0x28, 0x06, 0x29, 0xc1, 0xc7, 0xa5, - 0x65, 0xae, 0x35, 0x86, 0x40, 0x35, 0x1c, 0x8e, 0x93, 0x7b, 0x34, 0x56, 0x8c, 0xbc, 0x07, 0x04, - 0xb3, 0xf6, 0x50, 0xc3, 0xbf, 0x7e, 0xac, 0x55, 0x5d, 0xe5, 0x3c, 0x86, 0xf1, 0x26, 0xf1, 0xa0, - 0x08, 0xb5, 0xea, 0xc4, 0x15, 0x31, 0x7d, 0x3c, 0xa5, 0xf3, 0x52, 0x0d, 0x3f, 0x20, 0x42, 0xc3, - 0x8c, 0xa4, 0x34, 0x4e, 0xe1, 0x4a, 0xd6, 0xe1, 0xc2, 0xa2, 0x43, 0x1f, 0x99, 0x76, 0xd7, 0xf5, - 0x97, 0x0f, 0x7f, 0xde, 0xba, 0xb0, 0xed, 0xbc, 0xf5, 0x8c, 0xa8, 0xf8, 0x5c, 0xc7, 0xa1, 0x8f, - 0x1a, 0x7e, 0xf0, 0xe6, 0x48, 0xec, 0xd1, 0x2c, 0xee, 0x98, 0x98, 0xf9, 0xfd, 0xae, 0x43, 0x05, - 0xdc, 0xa4, 0xae, 0xa2, 0x84, 0x53, 0x2d, 0x8f, 0x37, 0x63, 0x06, 0xb8, 0x48, 0x62, 0xe6, 0x68, - 0x31, 0xa2, 0x01, 0xb9, 0x3d, 0xe9, 0x5f, 0x45, 0x57, 0x9a, 0x3c, 0x7d, 0xad, 0x72, 0x11, 0x99, - 0xa9, 0x4c, 0x2c, 0xab, 0xcd, 0x20, 0x90, 0x7b, 0x43, 0x17, 0x78, 0x59, 0x2c, 0xc9, 0xd2, 0x64, - 0x16, 0xc6, 0x16, 0x1d, 0x3c, 0x18, 0xbb, 0x4b, 0x37, 0x16, 0xed, 0x96, 0xd9, 0xdc, 0xc0, 0x37, - 0xae, 0x62, 0xaa, 0xec, 0x70, 0x5c, 0xe3, 0x21, 0xdd, 0x68, 0x74, 0x10, 0x2b, 0x2f, 0x2b, 0xf1, - 0x92, 0x72, 0x60, 0xe5, 0x27, 0x76, 0x16, 0x58, 0x99, 0xc2, 0x98, 0xb8, 0xc8, 0x7e, 0xec, 0x51, - 0x8b, 0x2d, 0xf5, 0xae, 0x78, 0xcf, 0xaa, 0xc4, 0x2e, 0xbe, 0x03, 0x3c, 0x9f, 0x3a, 0xc4, 0x28, - 0xa3, 0x01, 0x58, 0x6e, 0x58, 0xbc, 0x48, 0x32, 0xfa, 0xf0, 0x93, 0x7b, 0x88, 0x3e, 0xfc, 0xb7, - 0x0a, 0xf2, 0xfc, 0x4b, 0x2e, 0x43, 0x51, 0x4a, 0x0e, 0x84, 0xa1, 0x55, 0x31, 0x90, 0x7a, 0x51, - 0x44, 0x8c, 0x1e, 0x14, 0xb6, 0x4b, 0x10, 0x43, 0x07, 0xb3, 0x41, 0x86, 0xe1, 0x36, 0xb5, 0x90, - 0x00, 0x33, 0xf1, 0x75, 0x97, 0x5b, 0x66, 0x13, 0xc3, 0xeb, 0x17, 0xa4, 0xa0, 0x19, 0x08, 0xe5, - 0xd1, 0xf5, 0x25, 0x12, 0x72, 0x13, 0x86, 0xfc, 0x03, 0xd9, 0x30, 0xb4, 0x30, 0x46, 0x5d, 0x17, - 0xb3, 0xb5, 0x08, 0xea, 0x2e, 0x11, 0x91, 0xd7, 0x01, 0xc2, 0xe9, 0x40, 0x58, 0x5a, 0xb8, 0x54, - 0xc8, 0xb3, 0x87, 0xbc, 0x54, 0x84, 0xd4, 0x6c, 0xe2, 0x94, 0xd5, 0xd1, 0xcf, 0x3d, 0x8a, 0x13, - 0x67, 0x44, 0x87, 0x65, 0x05, 0x89, 0x16, 0x21, 0x0b, 0x70, 0x3a, 0xa1, 0x81, 0x22, 0x10, 0x31, - 0xe6, 0x9f, 0x4f, 0x51, 0x5f, 0x79, 0x61, 0x4e, 0x94, 0x25, 0xcf, 0x42, 0xe1, 0x9e, 0x56, 0x13, - 0xc1, 0x50, 0x79, 0x1c, 0xdd, 0x48, 0xa4, 0x24, 0x86, 0x55, 0xff, 0x44, 0x3e, 0xb1, 0x36, 0x31, - 0xe9, 0x09, 0x56, 0x52, 0x0f, 0xa2, 0xf4, 0xfc, 0xfa, 0xb9, 0xf4, 0x24, 0x22, 0x72, 0x15, 0xca, - 0x8b, 0x6c, 0x66, 0x68, 0xda, 0x2d, 0xd1, 0x9f, 0x18, 0xd6, 0xaa, 0x23, 0x60, 0x5a, 0x80, 0x25, - 0x37, 0xa5, 0x94, 0xb9, 0x52, 0x7c, 0x71, 0x3f, 0x65, 0x6e, 0x3c, 0xd0, 0x36, 0x26, 0xcf, 0xbd, - 0x19, 0x4b, 0xc1, 0x25, 0xca, 0xa4, 0xac, 0x8b, 0x61, 0xca, 0xad, 0xc0, 0x2a, 0xed, 0xdf, 0xce, - 0x2a, 0x55, 0xff, 0x76, 0x2e, 0x39, 0xce, 0xc8, 0xad, 0x64, 0xa8, 0x5f, 0x5c, 0x84, 0x02, 0xa0, - 0x5c, 0x6b, 0x10, 0xf4, 0x37, 0x12, 0xb4, 0x37, 0xbf, 0xe7, 0xa0, 0xbd, 0x85, 0x5d, 0x06, 0xed, - 0x55, 0xff, 0x9f, 0x62, 0x4f, 0xc7, 0xeb, 0x43, 0x09, 0xee, 0xf6, 0x1a, 0xdb, 0x59, 0xb1, 0xda, - 0x2b, 0x6e, 0x62, 0x7f, 0xc0, 0xfd, 0x4a, 0x1b, 0x3a, 0x1f, 0x5a, 0xae, 0x16, 0xa5, 0x24, 0x6f, - 0xc3, 0xb0, 0xff, 0x01, 0x18, 0x0c, 0x5a, 0x0a, 0x62, 0x1c, 0xac, 0x6a, 0xb1, 0xb0, 0xc9, 0x91, - 0x02, 0xe4, 0x65, 0x18, 0x44, 0x9b, 0xa6, 0xa3, 0x37, 0xfd, 0x48, 0xe1, 0x3c, 0xb4, 0xb8, 0x0f, - 0x94, 0x03, 0x98, 0x05, 0x94, 0xe4, 0x2b, 0x50, 0x12, 0xe9, 0x32, 0x78, 0x36, 0xf9, 0x1b, 0x3b, - 0xf0, 0x54, 0xbf, 0x2e, 0xa7, 0xca, 0xe0, 0xbb, 0x14, 0x04, 0x44, 0x76, 0x29, 0x3c, 0x4b, 0xc6, - 0x12, 0x9c, 0x59, 0x74, 0xa8, 0x81, 0x6f, 0x22, 0xa6, 0x1e, 0x77, 0x1c, 0x91, 0xc8, 0x84, 0x8f, - 0x72, 0x5c, 0xa4, 0x3a, 0x3e, 0x9a, 0x2d, 0x9f, 0x02, 0x2f, 0x87, 0x2b, 0x4e, 0x29, 0xce, 0x2c, - 0x17, 0xde, 0x92, 0xbb, 0x74, 0x63, 0xdd, 0x76, 0x0c, 0x9e, 0xeb, 0x43, 0xcc, 0xdf, 0x42, 0xd0, - 0x0f, 0x05, 0x4a, 0xb6, 0x5c, 0xa2, 0x85, 0x2e, 0xbd, 0x06, 0x43, 0x7b, 0x4d, 0x37, 0xf1, 0x1b, - 0xf9, 0x8c, 0x27, 0x4c, 0xc7, 0x37, 0xe3, 0x5f, 0x90, 0x86, 0xba, 0x3f, 0x23, 0x0d, 0xf5, 0xf7, - 0xf3, 0x19, 0xef, 0xb3, 0x8e, 0x75, 0xba, 0xd8, 0x40, 0x18, 0xd1, 0x74, 0xb1, 0x61, 0xa6, 0x5e, - 0xd3, 0xd0, 0x64, 0xa2, 0x58, 0x62, 0xe9, 0xd2, 0xb6, 0x89, 0xa5, 0x7f, 0xb9, 0xd0, 0xeb, 0xfd, - 0xda, 0x89, 0xec, 0x77, 0x23, 0xfb, 0x9b, 0x30, 0x14, 0x48, 0xb6, 0x56, 0x45, 0xa3, 0x67, 0x24, - 0x48, 0x6e, 0xc3, 0xc1, 0x58, 0x46, 0x22, 0x22, 0xd7, 0x78, 0x5b, 0xeb, 0xe6, 0xfb, 0x3c, 0xcd, - 0xc2, 0x88, 0x08, 0xa0, 0xaf, 0x7b, 0x7a, 0xc3, 0x35, 0xdf, 0xa7, 0x5a, 0x80, 0x56, 0xff, 0xb3, - 0x7c, 0xea, 0x23, 0xc0, 0x93, 0x3e, 0xda, 0x45, 0x1f, 0xa5, 0x08, 0x91, 0x3f, 0x5f, 0x3c, 0x11, - 0xe2, 0x2e, 0x84, 0xf8, 0xc7, 0xf9, 0xd4, 0xc7, 0x9e, 0x27, 0x42, 0xdc, 0xcd, 0x6c, 0xf1, 0x3c, - 0x0c, 0x6a, 0xf6, 0xba, 0x3b, 0x89, 0x1b, 0x1b, 0x3e, 0x57, 0xe0, 0x44, 0xed, 0xd8, 0xeb, 0x6e, - 0x03, 0xb7, 0x2c, 0x5a, 0x48, 0xa0, 0xfe, 0x20, 0xdf, 0xe3, 0x39, 0xec, 0x89, 0xe0, 0x3f, 0xca, - 0x25, 0xf2, 0xb7, 0xf3, 0x91, 0xe7, 0xb6, 0xc7, 0x57, 0xd8, 0x37, 0x00, 0xea, 0xcd, 0x35, 0xda, - 0xd6, 0xa5, 0x54, 0x55, 0x78, 0xee, 0xe0, 0x22, 0x54, 0xa4, 0x38, 0x0e, 0x49, 0xd4, 0x6f, 0xe7, - 0x63, 0xef, 0x8d, 0x4f, 0x64, 0xb7, 0x63, 0xd9, 0x05, 0x5a, 0x27, 0x9e, 0x50, 0x9f, 0x48, 0x6e, - 0xa7, 0x92, 0xfb, 0xc9, 0x7c, 0xec, 0xb5, 0xf9, 0xb1, 0x95, 0x1d, 0x1b, 0x80, 0xc9, 0x57, 0xf0, - 0xc7, 0x56, 0x93, 0x9e, 0x87, 0x41, 0x21, 0x87, 0x60, 0xa9, 0xe0, 0xf3, 0x3e, 0x07, 0xe2, 0x29, - 0x6b, 0x40, 0xa0, 0xfe, 0xc9, 0x3c, 0x44, 0xa3, 0x00, 0x1c, 0x53, 0x1d, 0xfa, 0xed, 0x7c, 0x34, - 0xfe, 0xc1, 0xf1, 0xd5, 0x9f, 0xeb, 0x00, 0xf5, 0xee, 0x72, 0x53, 0x84, 0xcf, 0xed, 0x97, 0x8e, - 0xe9, 0x03, 0xa8, 0x26, 0x51, 0xa8, 0xff, 0x6f, 0x3e, 0x35, 0x28, 0xc3, 0xf1, 0x15, 0xe0, 0x4b, - 0x78, 0x2a, 0xde, 0xb4, 0xc2, 0x89, 0x1c, 0x0f, 0x21, 0xd9, 0xf8, 0x4b, 0xe4, 0x37, 0xf4, 0x09, - 0xc9, 0xe7, 0x53, 0xcc, 0x35, 0xcc, 0xbe, 0x10, 0x9a, 0x6b, 0xf2, 0x35, 0x84, 0x64, 0xb8, 0xfd, - 0xbd, 0xfc, 0x76, 0x31, 0x2c, 0x8e, 0xf3, 0xaa, 0x3a, 0xb0, 0xa8, 0x6f, 0x60, 0xac, 0x45, 0xd6, - 0x13, 0xc3, 0x3c, 0xfb, 0x5e, 0x87, 0x83, 0xe4, 0xbb, 0x37, 0x41, 0xa5, 0xfe, 0xb3, 0xfe, 0xf4, - 0x00, 0x0a, 0xc7, 0x57, 0x84, 0x97, 0xa1, 0xb8, 0xa8, 0x7b, 0x6b, 0x42, 0x93, 0xf1, 0x4a, 0xaf, - 0xa3, 0x7b, 0x6b, 0x1a, 0x42, 0xc9, 0x35, 0x28, 0x6b, 0xfa, 0x3a, 0x3f, 0xf3, 0x2c, 0x85, 0x99, - 0x11, 0x1d, 0x7d, 0xbd, 0xc1, 0xcf, 0x3d, 0x03, 0x34, 0x51, 0x83, 0xcc, 0x9c, 0xfc, 0xe4, 0x1b, - 0xd3, 0xc2, 0xf1, 0xcc, 0x9c, 0x41, 0x3e, 0xce, 0xcb, 0x50, 0x9c, 0xb0, 0x8d, 0x0d, 0xbc, 0xbe, - 0x1a, 0xe6, 0x95, 0x2d, 0xdb, 0xc6, 0x86, 0x86, 0x50, 0xf2, 0x53, 0x39, 0x18, 0x98, 0xa1, 0xba, - 0xc1, 0x46, 0xc8, 0x60, 0x2f, 0xaf, 0x93, 0x2f, 0x1d, 0x8c, 0xd7, 0xc9, 0xe9, 0x35, 0x5e, 0x99, - 0xac, 0x28, 0xa2, 0x7e, 0x72, 0x1b, 0xca, 0x93, 0xba, 0x47, 0x57, 0x6d, 0x67, 0x03, 0xfd, 0x68, - 0x46, 0x43, 0x27, 0xfc, 0x88, 0xfe, 0xf8, 0x44, 0xfc, 0x66, 0xac, 0x29, 0x7e, 0x69, 0x41, 0x61, - 0x26, 0x16, 0x9e, 0xf8, 0x5f, 0x64, 0xa1, 0x46, 0xb1, 0x78, 0x08, 0xd1, 0x04, 0x26, 0x3c, 0x56, - 0x1e, 0x4e, 0x3f, 0x56, 0x46, 0xeb, 0x11, 0x7d, 0xed, 0x30, 0x1f, 0xe6, 0x08, 0x2e, 0xfa, 0xdc, - 0x7a, 0x44, 0x28, 0xa6, 0xc3, 0xd4, 0x24, 0x12, 0xf5, 0x7b, 0xfd, 0x90, 0xfa, 0xdc, 0xfa, 0x44, - 0xc9, 0x4f, 0x94, 0x3c, 0x54, 0xf2, 0x6a, 0x42, 0xc9, 0x2f, 0x25, 0x1f, 0xf0, 0x7f, 0x4c, 0x35, - 0xfc, 0xe7, 0x8a, 0x89, 0xf0, 0x1f, 0xc7, 0x7b, 0x77, 0x19, 0x4a, 0xaf, 0x7f, 0x5b, 0xe9, 0x05, - 0x03, 0xa2, 0xb4, 0xed, 0x80, 0x18, 0xd8, 0xe9, 0x80, 0x28, 0x67, 0x0e, 0x88, 0x50, 0x41, 0x06, - 0x33, 0x15, 0xa4, 0x26, 0x06, 0x0d, 0xf4, 0xce, 0x42, 0x72, 0x79, 0x6b, 0x73, 0x7c, 0x94, 0x8d, - 0xa6, 0xd4, 0xf4, 0x23, 0xc8, 0x42, 0xfd, 0x83, 0x62, 0x8f, 0x98, 0x3d, 0x87, 0xa2, 0x23, 0x2f, - 0x41, 0xa1, 0xd2, 0xe9, 0x08, 0xfd, 0x38, 0x23, 0x85, 0x0b, 0xca, 0x28, 0xc5, 0xa8, 0xc9, 0xeb, - 0x50, 0xa8, 0x3c, 0xa8, 0xc7, 0x33, 0x8f, 0x54, 0x1e, 0xd4, 0xc5, 0x97, 0x64, 0x96, 0x7d, 0x50, - 0x27, 0x6f, 0x86, 0x21, 0x40, 0xd7, 0xba, 0xd6, 0x43, 0xb1, 0x51, 0x14, 0xee, 0xb6, 0xbe, 0x3b, - 0x4e, 0x93, 0xa1, 0xd8, 0x76, 0x31, 0x46, 0x1b, 0xd3, 0xa6, 0xd2, 0xce, 0xb5, 0x69, 0x60, 0x5b, - 0x6d, 0x2a, 0xef, 0x54, 0x9b, 0x06, 0x77, 0xa0, 0x4d, 0xb0, 0xad, 0x36, 0x0d, 0xed, 0x5f, 0x9b, - 0x3a, 0x70, 0x29, 0x19, 0x67, 0x2d, 0xd0, 0x08, 0x0d, 0x48, 0x12, 0x2b, 0x1c, 0x4b, 0xf0, 0xea, - 0xbf, 0xcb, 0xb1, 0x8d, 0x75, 0x44, 0x37, 0x5c, 0x86, 0x97, 0xfd, 0xd3, 0x92, 0xa5, 0xd5, 0xdf, - 0xc8, 0x67, 0x87, 0x87, 0x3b, 0x9a, 0x53, 0xdc, 0x8f, 0xa4, 0x4a, 0xa9, 0x18, 0x7d, 0xae, 0x9f, - 0x2d, 0xe5, 0x18, 0xdb, 0x34, 0x99, 0x7d, 0x37, 0x97, 0x15, 0xb3, 0x6e, 0x5f, 0x12, 0xfb, 0x74, - 0xd2, 0xa3, 0x0d, 0xfd, 0xf4, 0xdd, 0xa8, 0x2b, 0xdb, 0x34, 0x0c, 0xcb, 0x42, 0x14, 0x52, 0xda, - 0x89, 0x80, 0x23, 0xe5, 0xd4, 0xbf, 0x9d, 0x83, 0x33, 0x77, 0xbb, 0xcb, 0x54, 0x78, 0xb0, 0x05, - 0xcd, 0x78, 0x0f, 0x80, 0x81, 0x85, 0x13, 0x4b, 0x0e, 0x9d, 0x58, 0x3e, 0x2b, 0xc7, 0x9b, 0x8b, - 0x15, 0xb8, 0x1e, 0x52, 0x73, 0x07, 0x96, 0x27, 0x7d, 0x67, 0xce, 0x87, 0xdd, 0x65, 0xda, 0x48, - 0x78, 0xb2, 0x48, 0xdc, 0x2f, 0xbd, 0xc5, 0xdd, 0xe4, 0xf7, 0xea, 0x34, 0xf2, 0x6b, 0xf9, 0xcc, - 0x10, 0x7f, 0x47, 0x36, 0x17, 0xe5, 0x0f, 0xa5, 0xf6, 0x4a, 0x3c, 0x27, 0x65, 0x0a, 0x49, 0x8c, - 0x63, 0x1a, 0x97, 0x74, 0x81, 0x1d, 0xf1, 0x0c, 0xa9, 0x1f, 0xa9, 0xc0, 0xfe, 0x41, 0x2e, 0x33, - 0x14, 0xe3, 0x51, 0x15, 0x98, 0xfa, 0xbf, 0x14, 0xfc, 0x08, 0x90, 0xfb, 0xfa, 0x84, 0xe7, 0x61, - 0x50, 0x3c, 0x84, 0x8f, 0x3a, 0xe0, 0x8a, 0xa3, 0x3c, 0x3c, 0x1a, 0x0e, 0x08, 0xd8, 0x32, 0x2f, - 0x79, 0x07, 0x4b, 0x0e, 0xb8, 0x92, 0x67, 0xb0, 0x26, 0x91, 0xb0, 0x85, 0x7c, 0xea, 0xb1, 0xe9, - 0xa1, 0x55, 0xc0, 0xfa, 0xb2, 0xc0, 0x17, 0x72, 0xfa, 0xd8, 0xf4, 0xb8, 0x4d, 0x10, 0xa0, 0xd9, - 0x22, 0x5d, 0x0f, 0xf3, 0xbf, 0x8b, 0x45, 0xda, 0x15, 0x69, 0xf0, 0xc5, 0xb3, 0xb1, 0xe7, 0x61, - 0x50, 0x78, 0xb5, 0x0a, 0x37, 0x13, 0xd1, 0x5a, 0xe1, 0x07, 0x8b, 0xad, 0x0d, 0x08, 0x18, 0x47, - 0x8d, 0xae, 0x86, 0x8e, 0x75, 0xc8, 0xd1, 0x41, 0x88, 0x26, 0x30, 0xe4, 0x26, 0x8c, 0xd6, 0x3d, - 0xdd, 0x32, 0x74, 0xc7, 0x58, 0xe8, 0x7a, 0x9d, 0xae, 0x27, 0x1b, 0xa5, 0xae, 0x67, 0xd8, 0x5d, - 0x4f, 0x8b, 0x51, 0x90, 0xcf, 0xc1, 0x88, 0x0f, 0x99, 0x72, 0x1c, 0xdb, 0x91, 0x2d, 0x0f, 0xd7, - 0x33, 0xa8, 0xe3, 0x68, 0x51, 0x02, 0xf2, 0x79, 0x18, 0xa9, 0x59, 0x8f, 0xec, 0x26, 0x7f, 0x0c, - 0xae, 0xcd, 0x0a, 0x3b, 0x04, 0x9f, 0x62, 0x99, 0x01, 0xa2, 0xd1, 0x75, 0x5a, 0x5a, 0x94, 0x50, - 0xdd, 0xca, 0x27, 0x03, 0x65, 0x1e, 0xdf, 0x4d, 0xcb, 0xb5, 0xa8, 0x33, 0x1d, 0x7a, 0x90, 0xa2, - 0x41, 0x28, 0xfb, 0xf2, 0x72, 0xbb, 0xf0, 0x26, 0x94, 0xef, 0xd2, 0x0d, 0xee, 0xf7, 0x59, 0x0a, - 0x5d, 0x85, 0x1f, 0x0a, 0x98, 0x7c, 0xe2, 0xea, 0xd3, 0xa9, 0xdf, 0xc9, 0x27, 0x43, 0x80, 0x1e, - 0x5f, 0x61, 0x7f, 0x0e, 0x06, 0x50, 0x94, 0x35, 0xff, 0xc8, 0x1f, 0x05, 0x88, 0xe2, 0x8e, 0x7a, - 0x20, 0xfb, 0x64, 0xea, 0x2f, 0x95, 0xe2, 0x71, 0x61, 0x8f, 0xaf, 0xf4, 0xde, 0x80, 0xa1, 0x49, - 0xdb, 0x72, 0x4d, 0xd7, 0xa3, 0x56, 0xd3, 0x57, 0xd8, 0x8b, 0xcc, 0xa0, 0x6a, 0x86, 0x60, 0xf9, - 0x0d, 0x92, 0x44, 0xbd, 0x17, 0xe5, 0x25, 0xaf, 0xc0, 0x20, 0x8a, 0x1c, 0xfd, 0xa4, 0xf9, 0x84, - 0x87, 0xb7, 0x05, 0xcb, 0x0c, 0x18, 0x77, 0x92, 0x0e, 0x49, 0xc9, 0x3d, 0x28, 0x4f, 0xae, 0x99, - 0x2d, 0xc3, 0xa1, 0x16, 0xfa, 0x0b, 0x4b, 0xe1, 0x37, 0xa2, 0x7d, 0x79, 0x1d, 0xff, 0x45, 0x5a, - 0xde, 0x9c, 0xa6, 0x28, 0x16, 0x79, 0x85, 0x25, 0x60, 0x97, 0x7e, 0x36, 0x0f, 0x10, 0x16, 0x20, - 0x4f, 0x43, 0x3e, 0x48, 0xad, 0x8c, 0x6e, 0x2a, 0x11, 0x0d, 0xca, 0xe3, 0x52, 0x21, 0xc6, 0x76, - 0x7e, 0xdb, 0xb1, 0x7d, 0x0f, 0x4a, 0xfc, 0xc4, 0x0b, 0x3d, 0xc9, 0xa5, 0x50, 0x95, 0x99, 0x0d, - 0xbe, 0x8e, 0xf4, 0x7c, 0x33, 0x8b, 0x96, 0x67, 0xc4, 0x2b, 0x9b, 0x33, 0xbb, 0xd4, 0x84, 0x7e, - 0xfc, 0x8b, 0x5c, 0x81, 0xe2, 0x92, 0x9f, 0x96, 0x75, 0x84, 0xcf, 0xd2, 0x31, 0xf9, 0x21, 0x9e, - 0x75, 0xd3, 0xa4, 0x6d, 0x79, 0xac, 0x6a, 0x6c, 0xf5, 0xb0, 0x90, 0x8b, 0x80, 0x45, 0xe4, 0x22, - 0x60, 0xea, 0x7f, 0x95, 0x4f, 0x89, 0x58, 0x7c, 0x7c, 0x87, 0xc9, 0x6b, 0x00, 0xf8, 0xa4, 0x9b, - 0xc9, 0xd3, 0x7f, 0xa2, 0x81, 0xa3, 0x04, 0x19, 0xa1, 0xda, 0x46, 0xb6, 0x1d, 0x21, 0xb1, 0xfa, - 0x77, 0x73, 0x89, 0x30, 0xb7, 0xfb, 0x92, 0xa3, 0x6c, 0x95, 0xe5, 0xf7, 0x68, 0xc6, 0xfa, 0x7d, - 0x51, 0xd8, 0x5d, 0x5f, 0x44, 0xbf, 0xe5, 0x00, 0x2c, 0xd3, 0xc3, 0xfc, 0x96, 0xef, 0xe5, 0xd3, - 0x82, 0xfe, 0x1e, 0x4d, 0x15, 0xbf, 0x15, 0x18, 0xa5, 0xc5, 0x58, 0x98, 0x75, 0x84, 0xc6, 0x53, - 0x47, 0x0b, 0x33, 0xf5, 0xab, 0x70, 0x2a, 0x16, 0x0a, 0x57, 0x64, 0xf1, 0xbd, 0xd2, 0x3b, 0xa6, - 0x6e, 0x76, 0x30, 0x80, 0x08, 0x99, 0xfa, 0xff, 0xe5, 0x7a, 0x07, 0x42, 0x3e, 0x74, 0xd5, 0x49, - 0x11, 0x40, 0xe1, 0x5f, 0x8d, 0x00, 0x0e, 0x60, 0x1b, 0x7c, 0xb4, 0x05, 0xf0, 0x31, 0x99, 0x3c, - 0x3e, 0x6a, 0x01, 0xfc, 0x52, 0x6e, 0xdb, 0x38, 0xd6, 0x87, 0x2d, 0x03, 0xf5, 0x7f, 0xcc, 0xa5, - 0xc6, 0x9b, 0xde, 0x57, 0xbb, 0xde, 0x84, 0x12, 0x77, 0xab, 0x11, 0xad, 0x92, 0x32, 0x74, 0x31, - 0x68, 0x56, 0x4e, 0x7b, 0x8e, 0x25, 0xb3, 0x30, 0xc0, 0xdb, 0x60, 0x88, 0xde, 0xf8, 0x54, 0x8f, - 0xa0, 0xd7, 0x46, 0xd6, 0xe4, 0x28, 0xd0, 0xea, 0xdf, 0xc9, 0x25, 0xc2, 0x5f, 0x1f, 0xe2, 0xb7, - 0x85, 0x53, 0x75, 0x61, 0xe7, 0x53, 0xb5, 0xfa, 0x4f, 0xf3, 0xe9, 0xd1, 0xb7, 0x0f, 0xf1, 0x43, - 0x0e, 0xe2, 0x38, 0x6d, 0x6f, 0xeb, 0xd6, 0x12, 0x8c, 0x46, 0x65, 0x21, 0x96, 0xad, 0xa7, 0xd2, - 0x63, 0x90, 0x67, 0xb4, 0x22, 0xc6, 0x43, 0xfd, 0x30, 0x97, 0x0c, 0x1c, 0x7e, 0xe8, 0xf3, 0xd3, - 0xde, 0xb4, 0x25, 0xfa, 0x29, 0x1f, 0x93, 0xb5, 0xe6, 0x20, 0x3e, 0xe5, 0x63, 0xb2, 0x6a, 0xec, - 0xed, 0x53, 0x7e, 0x25, 0x9f, 0x15, 0x77, 0xfd, 0xd0, 0x3f, 0xe8, 0xcb, 0xb2, 0x90, 0x79, 0xcb, - 0xc4, 0xa7, 0x3d, 0x9d, 0x15, 0xe8, 0x3c, 0x83, 0x67, 0x82, 0xcf, 0xde, 0xc6, 0x78, 0xaa, 0xb0, - 0x3e, 0x26, 0x8a, 0x7c, 0x34, 0x84, 0xf5, 0x31, 0x19, 0x2a, 0x1f, 0x3f, 0x61, 0xfd, 0x6e, 0x7e, - 0xa7, 0xc1, 0xfe, 0x4f, 0x84, 0x97, 0x10, 0xde, 0x37, 0xf3, 0xc9, 0x24, 0x14, 0x87, 0x2e, 0xa6, - 0x69, 0x28, 0x89, 0x74, 0x18, 0x99, 0xc2, 0xe1, 0xf8, 0x2c, 0x8b, 0x46, 0x7c, 0xc7, 0x2d, 0x10, - 0x17, 0x39, 0x3b, 0x13, 0x09, 0xa7, 0x55, 0x7f, 0x90, 0x8b, 0x65, 0x6c, 0x38, 0x94, 0x23, 0x84, - 0x3d, 0x2d, 0x49, 0xe4, 0x2d, 0xff, 0x30, 0xb3, 0x18, 0x8b, 0x98, 0x1d, 0x7c, 0x4f, 0x95, 0x7a, - 0xba, 0xd9, 0x8a, 0x97, 0x17, 0x31, 0x01, 0xbe, 0x93, 0x87, 0xd3, 0x09, 0x52, 0x72, 0x25, 0x12, - 0x4a, 0x07, 0x8f, 0x25, 0x63, 0xce, 0xe3, 0x3c, 0xa8, 0xce, 0x2e, 0x4e, 0x52, 0xaf, 0x40, 0xb1, - 0xaa, 0x6f, 0xf0, 0x6f, 0xeb, 0xe7, 0x2c, 0x0d, 0x7d, 0x43, 0x3e, 0x71, 0x43, 0x3c, 0x59, 0x86, - 0x73, 0xfc, 0x3e, 0xc4, 0xb4, 0xad, 0x25, 0xb3, 0x4d, 0x6b, 0xd6, 0x9c, 0xd9, 0x6a, 0x99, 0xae, - 0xb8, 0xd4, 0x7b, 0x7e, 0x6b, 0x73, 0xfc, 0xaa, 0x67, 0x7b, 0x7a, 0xab, 0x41, 0x7d, 0xb2, 0x86, - 0x67, 0xb6, 0x69, 0xc3, 0xb4, 0x1a, 0x6d, 0xa4, 0x94, 0x58, 0xa6, 0xb3, 0x22, 0x35, 0x1e, 0x1c, - 0xbd, 0xde, 0xd4, 0x2d, 0x8b, 0x1a, 0x35, 0x6b, 0x62, 0xc3, 0xa3, 0xfc, 0x32, 0xb0, 0xc0, 0x8f, - 0x04, 0xf9, 0xdb, 0x70, 0x8e, 0x66, 0x8c, 0x97, 0x19, 0x81, 0x96, 0x52, 0x48, 0xfd, 0xbd, 0x62, - 0x4a, 0xb2, 0x8e, 0x23, 0xa4, 0x3e, 0x7e, 0x4f, 0x17, 0xb7, 0xe9, 0xe9, 0x1b, 0x30, 0x20, 0xa2, - 0xcf, 0x8a, 0x0b, 0x06, 0x74, 0x66, 0x7f, 0xc4, 0x41, 0xf2, 0x0d, 0x8d, 0xa0, 0x22, 0x2d, 0xb8, - 0xb4, 0xc4, 0xba, 0x29, 0xbd, 0x33, 0x4b, 0x7b, 0xe8, 0xcc, 0x1e, 0xfc, 0xc8, 0xbb, 0x70, 0x01, - 0xb1, 0x29, 0xdd, 0x3a, 0x80, 0x55, 0x61, 0x8c, 0x2a, 0x5e, 0x55, 0x7a, 0xe7, 0x66, 0x95, 0x27, - 0x5f, 0x86, 0xe1, 0x60, 0x80, 0x98, 0xd4, 0x15, 0x37, 0x17, 0x3d, 0xc6, 0x19, 0x0f, 0x00, 0xc7, - 0xc0, 0xe8, 0x42, 0x16, 0x0d, 0x22, 0x16, 0xe1, 0xa5, 0xfe, 0x0f, 0xb9, 0x5e, 0x49, 0x43, 0x0e, - 0x7d, 0x56, 0x7e, 0x0b, 0x06, 0x0c, 0xfe, 0x51, 0x42, 0xa7, 0x7a, 0xa7, 0x15, 0xe1, 0xa4, 0x9a, - 0x5f, 0x46, 0xfd, 0x27, 0xb9, 0x9e, 0xb9, 0x4a, 0x8e, 0xfa, 0xe7, 0x7d, 0xb3, 0x90, 0xf1, 0x79, - 0x62, 0x12, 0xbd, 0x06, 0x63, 0x66, 0x18, 0x4c, 0xbd, 0x11, 0x86, 0x9f, 0xd2, 0x4e, 0x49, 0x70, - 0x1c, 0x5d, 0xb7, 0xe0, 0xbc, 0xef, 0xf8, 0xe8, 0xf8, 0x1e, 0x62, 0x6e, 0xa3, 0xeb, 0x98, 0x7c, - 0x5c, 0x6a, 0x67, 0xdd, 0x98, 0xfb, 0x98, 0x7b, 0xcf, 0x31, 0x59, 0x05, 0xba, 0xb7, 0x46, 0x2d, - 0xbd, 0xb1, 0x6e, 0x3b, 0x0f, 0x31, 0xca, 0x28, 0x1f, 0x9c, 0xda, 0x29, 0x0e, 0x7f, 0xe0, 0x83, - 0xc9, 0xb3, 0x30, 0xb2, 0xda, 0xea, 0xd2, 0x20, 0xae, 0x23, 0xbf, 0xeb, 0xd3, 0x86, 0x19, 0x30, - 0xb8, 0x21, 0x79, 0x12, 0x00, 0x89, 0x3c, 0xcc, 0x24, 0x83, 0x17, 0x7b, 0xda, 0x20, 0x83, 0x2c, - 0x89, 0xee, 0xba, 0xc4, 0xb5, 0x9a, 0x0b, 0xa9, 0xd1, 0xb2, 0xad, 0xd5, 0x86, 0x47, 0x9d, 0x36, - 0x36, 0x14, 0x9d, 0x19, 0xb4, 0xf3, 0x48, 0x81, 0x57, 0x27, 0xee, 0xac, 0x6d, 0xad, 0x2e, 0x51, - 0xa7, 0xcd, 0x9a, 0xfa, 0x3c, 0x10, 0xd1, 0x54, 0x07, 0x0f, 0x3d, 0xf8, 0xc7, 0xa1, 0x37, 0x83, - 0x26, 0x3e, 0x82, 0x9f, 0x86, 0xe0, 0x87, 0x8d, 0xc3, 0x10, 0x0f, 0x6e, 0xc7, 0x85, 0x86, 0x2e, - 0x0c, 0x1a, 0x70, 0x10, 0xca, 0xeb, 0x3c, 0x08, 0xef, 0x0a, 0xee, 0xd5, 0xad, 0x89, 0x5f, 0xea, - 0x07, 0x85, 0xb4, 0xf4, 0x2a, 0xfb, 0x52, 0xb4, 0x70, 0x5a, 0xcd, 0xef, 0x6a, 0x5a, 0x3d, 0x65, - 0x75, 0xdb, 0x0d, 0xbd, 0xd3, 0x69, 0xac, 0x98, 0x2d, 0x7c, 0x56, 0x85, 0x0b, 0x9f, 0x36, 0x62, - 0x75, 0xdb, 0x95, 0x4e, 0x67, 0x9a, 0x03, 0xc9, 0x73, 0x70, 0x9a, 0xd1, 0x61, 0x27, 0x05, 0x94, - 0x45, 0xa4, 0x64, 0x0c, 0x30, 0x3a, 0xac, 0x4f, 0x7b, 0x11, 0xca, 0x82, 0x27, 0x5f, 0xab, 0xfa, - 0xb5, 0x01, 0xce, 0xcc, 0x65, 0x3d, 0x17, 0xb0, 0xe1, 0x93, 0x6b, 0xbf, 0x36, 0xe8, 0x97, 0xc7, - 0x18, 0xc8, 0x56, 0xb7, 0xcd, 0x23, 0x62, 0x0d, 0x20, 0x32, 0xf8, 0x4d, 0xae, 0xc0, 0x28, 0xe3, - 0x12, 0x08, 0x8c, 0x87, 0x8d, 0xed, 0xd7, 0x62, 0x50, 0x72, 0x13, 0xce, 0x46, 0x20, 0xdc, 0x06, - 0xe5, 0xcf, 0x04, 0xfa, 0xb5, 0x54, 0x9c, 0xfa, 0xed, 0x42, 0x34, 0xe9, 0xcb, 0x21, 0x74, 0xc4, - 0x05, 0x18, 0xb0, 0x9d, 0xd5, 0x46, 0xd7, 0x69, 0x89, 0xb1, 0x57, 0xb2, 0x9d, 0xd5, 0x7b, 0x4e, - 0x8b, 0x9c, 0x83, 0x12, 0xeb, 0x1d, 0xd3, 0x10, 0x43, 0xac, 0x5f, 0xef, 0x74, 0x6a, 0x06, 0xa9, - 0xf0, 0x0e, 0xc1, 0x90, 0xa3, 0x8d, 0x26, 0x6e, 0xed, 0xb9, 0x53, 0x42, 0x3f, 0x5f, 0xf1, 0x12, - 0x48, 0xec, 0x27, 0x0c, 0x44, 0xca, 0x0f, 0x02, 0x62, 0x2c, 0x0c, 0xdc, 0x96, 0x18, 0xbc, 0x4f, - 0xe2, 0x2c, 0x04, 0x32, 0x64, 0xc1, 0x37, 0x31, 0x06, 0xa9, 0x02, 0x09, 0xa9, 0xda, 0xb6, 0x61, - 0xae, 0x98, 0x94, 0xbf, 0xea, 0xe8, 0xe7, 0x17, 0xbf, 0x49, 0xac, 0x36, 0xe6, 0x33, 0x99, 0x13, - 0x10, 0xf2, 0x06, 0x57, 0x42, 0x4e, 0x87, 0x6b, 0x1f, 0xef, 0x5b, 0x6e, 0xa7, 0xc5, 0x50, 0xa8, - 0x99, 0x58, 0x1e, 0x17, 0x42, 0xf5, 0xaf, 0x14, 0x93, 0x99, 0x7f, 0x0e, 0xc5, 0xae, 0x99, 0x01, - 0x10, 0x89, 0xbd, 0xc2, 0xcb, 0xb5, 0xc0, 0xe3, 0x3c, 0xc4, 0x64, 0xf0, 0x90, 0xca, 0x92, 0x6b, - 0x50, 0xe6, 0x5f, 0x54, 0xab, 0x0a, 0x7b, 0x07, 0x5d, 0xc4, 0xdc, 0x8e, 0xb9, 0xb2, 0x82, 0xfe, - 0x64, 0x01, 0x9a, 0x5c, 0x81, 0x81, 0xea, 0x7c, 0xbd, 0x5e, 0x99, 0xf7, 0x6f, 0x8a, 0xf1, 0x7d, - 0x89, 0x61, 0xb9, 0x0d, 0x57, 0xb7, 0x5c, 0xcd, 0x47, 0x92, 0x67, 0xa1, 0x54, 0x5b, 0x44, 0x32, - 0xfe, 0x6a, 0x72, 0x68, 0x6b, 0x73, 0x7c, 0xc0, 0xec, 0x70, 0x2a, 0x81, 0xc2, 0x7a, 0xef, 0xd7, - 0xaa, 0x92, 0xbb, 0x04, 0xaf, 0xf7, 0x91, 0x69, 0xe0, 0xb5, 0xb3, 0x16, 0xa0, 0xc9, 0xcb, 0x30, - 0x5c, 0xa7, 0x8e, 0xa9, 0xb7, 0xe6, 0xbb, 0xb8, 0x55, 0x94, 0x42, 0x29, 0xba, 0x08, 0x6f, 0x58, - 0x88, 0xd0, 0x22, 0x64, 0xe4, 0x32, 0x14, 0x67, 0x4c, 0xcb, 0x7f, 0xc2, 0x80, 0x3e, 0xee, 0x6b, - 0xa6, 0xe5, 0x69, 0x08, 0x25, 0xcf, 0x42, 0xe1, 0xce, 0x52, 0x4d, 0x78, 0x82, 0x21, 0xaf, 0xf7, - 0xbc, 0x48, 0x58, 0xc6, 0x3b, 0x4b, 0x35, 0xf2, 0x32, 0x0c, 0xb2, 0x45, 0x8c, 0x5a, 0x4d, 0xea, - 0x2a, 0x43, 0xf8, 0x31, 0x3c, 0x8c, 0xa0, 0x0f, 0x94, 0x7d, 0x3a, 0x02, 0x4a, 0xf5, 0xff, 0xc8, - 0xa7, 0xa7, 0x66, 0x3a, 0x84, 0xa1, 0xbe, 0xc7, 0x5b, 0xe4, 0x98, 0x82, 0x15, 0xf7, 0xa1, 0x60, - 0x2b, 0x70, 0xaa, 0x62, 0xb4, 0x4d, 0xab, 0x82, 0x3f, 0xdd, 0xb9, 0xe9, 0x0a, 0x4e, 0x1d, 0xd2, - 0xf3, 0xbc, 0x18, 0x5a, 0x7c, 0x0f, 0x0f, 0xf8, 0xcb, 0x50, 0x0d, 0x9d, 0xe3, 0x1a, 0xed, 0x15, - 0xbd, 0xd1, 0xe4, 0x59, 0x8d, 0xb4, 0x38, 0x53, 0xf5, 0x67, 0xf2, 0xdb, 0x64, 0x93, 0x3a, 0x8e, - 0xd2, 0x57, 0xbf, 0x95, 0xef, 0x9d, 0xd0, 0xeb, 0x58, 0x0a, 0xe5, 0x8f, 0xf3, 0x29, 0xe9, 0xb5, - 0xf6, 0x25, 0x89, 0x6b, 0x50, 0xe6, 0x6c, 0x02, 0x37, 0x5e, 0x9c, 0xcd, 0xb8, 0xb2, 0xe2, 0x2c, - 0xea, 0xa3, 0xc9, 0x3c, 0x9c, 0xad, 0xac, 0xac, 0xd0, 0xa6, 0x17, 0x86, 0x7e, 0x9e, 0x0f, 0x83, - 0xb0, 0xf2, 0x50, 0xb7, 0x02, 0x1f, 0x86, 0x8e, 0xc6, 0x60, 0x23, 0xa9, 0xe5, 0xc8, 0x12, 0x9c, - 0x8f, 0xc3, 0xeb, 0x7c, 0x0b, 0x50, 0x94, 0xa2, 0xdf, 0x26, 0x38, 0xf2, 0xff, 0xb4, 0x8c, 0xb2, - 0x69, 0xad, 0xc4, 0xa9, 0xba, 0xbf, 0x57, 0x2b, 0x71, 0xde, 0x4e, 0x2d, 0xa7, 0x7e, 0xa7, 0x20, - 0x67, 0x21, 0x3b, 0xbe, 0x0e, 0x57, 0xb7, 0x22, 0x6e, 0xd6, 0x3b, 0x1d, 0x32, 0x2f, 0x8b, 0x08, - 0x22, 0x46, 0xd7, 0xf1, 0x3d, 0x12, 0x83, 0x08, 0x06, 0x08, 0x94, 0xd7, 0xa1, 0x80, 0x92, 0xd4, - 0xa0, 0x58, 0x71, 0x56, 0xb9, 0x79, 0xbb, 0xdd, 0xa3, 0x2a, 0xdd, 0x59, 0x75, 0xd3, 0x1f, 0x55, - 0x31, 0x16, 0xea, 0x9f, 0xc9, 0xf7, 0x48, 0x1c, 0x76, 0x2c, 0x27, 0x91, 0x3f, 0x9f, 0xcf, 0x4a, - 0x01, 0x76, 0x54, 0x5d, 0xc7, 0x3e, 0x62, 0xe1, 0x1c, 0x6d, 0xbf, 0xba, 0x03, 0x16, 0x4e, 0x46, - 0x3a, 0xb2, 0x13, 0xe1, 0x7c, 0x90, 0xcf, 0xca, 0xc8, 0x76, 0x6c, 0x67, 0x99, 0x8c, 0x24, 0x70, - 0x27, 0xba, 0xf2, 0x0b, 0xf9, 0xcc, 0x3c, 0x78, 0x27, 0xd2, 0x51, 0xbf, 0x9e, 0xcf, 0xcc, 0xe3, - 0x77, 0x2c, 0x87, 0x52, 0xaa, 0xb6, 0x9c, 0x8c, 0x25, 0x21, 0x9d, 0x3f, 0xcc, 0xa7, 0x67, 0x4e, - 0x3c, 0x04, 0x55, 0x39, 0x08, 0x0f, 0x3c, 0x5f, 0xa0, 0xc5, 0x7d, 0x09, 0xb4, 0xff, 0x40, 0x05, - 0x7a, 0x68, 0x63, 0xef, 0x93, 0x2a, 0xd0, 0x03, 0x18, 0xbc, 0xc7, 0x59, 0xa0, 0x3f, 0x5d, 0x48, - 0x66, 0x0b, 0x3d, 0x96, 0x47, 0x94, 0x13, 0x50, 0xf6, 0xcf, 0x30, 0x84, 0x40, 0x77, 0xdc, 0x9d, - 0x7e, 0x39, 0xf2, 0x36, 0x9c, 0x0a, 0x65, 0x29, 0x47, 0xa6, 0xc2, 0xeb, 0x8d, 0x26, 0x43, 0x35, - 0xde, 0x63, 0x38, 0x11, 0x42, 0x25, 0x4e, 0xad, 0xfe, 0xa0, 0x90, 0x4c, 0xb9, 0x7a, 0xd2, 0x1b, - 0x7b, 0xec, 0x8d, 0x7b, 0x70, 0x7e, 0xb2, 0xeb, 0x38, 0xd4, 0xf2, 0xd2, 0x3b, 0x05, 0x0f, 0x97, - 0x9b, 0x9c, 0xa2, 0x91, 0xec, 0x9c, 0x8c, 0xc2, 0x8c, 0xad, 0xf0, 0xbe, 0x8f, 0xb3, 0x1d, 0x08, - 0xd9, 0x76, 0x39, 0x45, 0x1a, 0xdb, 0xf4, 0xc2, 0xea, 0xdf, 0xcb, 0x27, 0x93, 0xe4, 0x9e, 0x74, - 0xfd, 0xde, 0xba, 0x5e, 0xfd, 0xa0, 0x10, 0x4f, 0x14, 0x7c, 0xb2, 0x40, 0xec, 0xbd, 0x3b, 0x7c, - 0x49, 0xe2, 0xb8, 0x91, 0xbe, 0xc2, 0x87, 0x67, 0x7d, 0x85, 0x8f, 0x57, 0x7f, 0xad, 0x18, 0x4f, - 0xba, 0x7c, 0xd2, 0x1d, 0x87, 0xd7, 0x1d, 0x64, 0x01, 0xce, 0x8a, 0xb9, 0xcd, 0x07, 0x61, 0x8a, - 0x02, 0x31, 0x7f, 0xf1, 0x4c, 0x67, 0x62, 0x5a, 0xec, 0xba, 0xd4, 0x69, 0x78, 0xba, 0xfb, 0xb0, - 0x81, 0x39, 0x0d, 0xb4, 0xd4, 0x82, 0x8c, 0xa1, 0x98, 0xd5, 0xa2, 0x0c, 0xcb, 0x21, 0x43, 0x7f, - 0x42, 0x4c, 0x30, 0x4c, 0x2b, 0xa8, 0xfe, 0x76, 0x0e, 0xc6, 0xe2, 0x9f, 0x43, 0xae, 0x43, 0x99, - 0xfd, 0x0e, 0x9e, 0x85, 0x4b, 0x79, 0x94, 0x39, 0x47, 0x7e, 0x65, 0xec, 0xd3, 0x90, 0x57, 0x60, - 0x10, 0x6f, 0xe7, 0xb1, 0x40, 0x3e, 0x7c, 0x8d, 0x1f, 0x16, 0xc0, 0xe4, 0x9e, 0xbc, 0x58, 0x48, - 0x4a, 0xde, 0x80, 0xa1, 0x5a, 0xe8, 0x86, 0x24, 0xee, 0x64, 0xd0, 0xfb, 0x51, 0x2a, 0x19, 0x12, - 0x68, 0x32, 0xb5, 0xfa, 0x61, 0x3e, 0x9e, 0x1c, 0xfc, 0x44, 0xd5, 0xf7, 0xa6, 0xea, 0xcf, 0xcd, - 0x71, 0x55, 0xbf, 0x6b, 0x5a, 0x06, 0xb9, 0x08, 0xe7, 0xee, 0xd5, 0xa7, 0xb4, 0xc6, 0xdd, 0xda, - 0x7c, 0xb5, 0x71, 0x6f, 0xbe, 0xbe, 0x38, 0x35, 0x59, 0x9b, 0xae, 0x4d, 0x55, 0xc7, 0xfa, 0xc8, - 0x19, 0x38, 0x15, 0xa2, 0x66, 0xee, 0xcd, 0x55, 0xe6, 0xc7, 0x72, 0xe4, 0x34, 0x8c, 0x84, 0xc0, - 0x89, 0x85, 0xa5, 0xb1, 0xfc, 0x73, 0x9f, 0x81, 0x21, 0x74, 0xbf, 0xe2, 0xd7, 0xc5, 0x64, 0x18, - 0xca, 0x0b, 0x13, 0xf5, 0x29, 0xed, 0x3e, 0x32, 0x01, 0x28, 0x55, 0xa7, 0xe6, 0x19, 0xc3, 0xdc, - 0x73, 0xff, 0x77, 0x0e, 0xa0, 0x3e, 0xbd, 0xb4, 0x28, 0x08, 0x87, 0x60, 0xa0, 0x36, 0x7f, 0xbf, - 0x32, 0x5b, 0x63, 0x74, 0x65, 0x28, 0x2e, 0x2c, 0x4e, 0xb1, 0x1a, 0x06, 0xa1, 0x7f, 0x72, 0x76, - 0xa1, 0x3e, 0x35, 0x96, 0x67, 0x40, 0x6d, 0xaa, 0x52, 0x1d, 0x2b, 0x30, 0xe0, 0x03, 0xad, 0xb6, - 0x34, 0x35, 0x56, 0x64, 0x7f, 0xce, 0xd6, 0x97, 0x2a, 0x4b, 0x63, 0xfd, 0xec, 0xcf, 0x69, 0xfc, - 0xb3, 0xc4, 0x98, 0xd5, 0xa7, 0x96, 0xf0, 0xc7, 0x00, 0x6b, 0xc2, 0xb4, 0xff, 0xab, 0xcc, 0x50, - 0x8c, 0x75, 0xb5, 0xa6, 0x8d, 0x0d, 0xb2, 0x1f, 0x8c, 0x25, 0xfb, 0x01, 0xac, 0x71, 0xda, 0xd4, - 0xdc, 0xc2, 0xfd, 0xa9, 0xb1, 0x21, 0xc6, 0x6b, 0xee, 0x2e, 0x03, 0x0f, 0xb3, 0x3f, 0xb5, 0x39, - 0xf6, 0xe7, 0x08, 0xe3, 0xa4, 0x4d, 0x55, 0x66, 0x17, 0x2b, 0x4b, 0x33, 0x63, 0xa3, 0xac, 0x3d, - 0xc8, 0xf3, 0x14, 0x2f, 0x39, 0x5f, 0x99, 0x9b, 0x1a, 0x1b, 0x13, 0x34, 0xd5, 0xd9, 0xda, 0xfc, - 0xdd, 0xb1, 0xd3, 0xd8, 0x90, 0x77, 0xe7, 0xf0, 0x07, 0x61, 0x05, 0xf0, 0xaf, 0x33, 0xcf, 0xfd, - 0x30, 0x94, 0x16, 0xea, 0x38, 0x0a, 0x2e, 0xc0, 0x99, 0x85, 0x7a, 0x63, 0xe9, 0xdd, 0xc5, 0xa9, - 0x98, 0xbc, 0x4f, 0xc3, 0x88, 0x8f, 0x98, 0xad, 0xcd, 0xdf, 0xfb, 0x12, 0x97, 0xb6, 0x0f, 0x9a, - 0xab, 0x4c, 0x2e, 0xd4, 0xc7, 0xf2, 0xac, 0x57, 0x7c, 0xd0, 0x83, 0xda, 0x7c, 0x75, 0xe1, 0x41, - 0x7d, 0xac, 0xf0, 0xdc, 0x23, 0x18, 0xe6, 0xb9, 0x1d, 0x17, 0x1c, 0x73, 0xd5, 0xb4, 0xc8, 0x93, - 0x70, 0xb1, 0x3a, 0x75, 0xbf, 0x36, 0x39, 0xd5, 0x58, 0xd0, 0x6a, 0xb7, 0x6b, 0xf3, 0xb1, 0x9a, - 0xce, 0xc1, 0xe9, 0x28, 0xba, 0xb2, 0x58, 0x1b, 0xcb, 0x91, 0xf3, 0x40, 0xa2, 0xe0, 0x3b, 0x95, - 0xb9, 0xe9, 0xb1, 0x3c, 0x51, 0xe0, 0x6c, 0x14, 0x5e, 0x9b, 0x5f, 0xba, 0x37, 0x3f, 0x35, 0x56, - 0x78, 0xee, 0x2f, 0xe7, 0xe0, 0x5c, 0x6a, 0xfc, 0x5f, 0xa2, 0xc2, 0x53, 0x53, 0xb3, 0x95, 0xfa, - 0x52, 0x6d, 0xb2, 0x3e, 0x55, 0xd1, 0x26, 0x67, 0x1a, 0x93, 0x95, 0xa5, 0xa9, 0xdb, 0x0b, 0xda, - 0xbb, 0x8d, 0xdb, 0x53, 0xf3, 0x53, 0x5a, 0x65, 0x76, 0xac, 0x8f, 0x3c, 0x0b, 0xe3, 0x19, 0x34, - 0xf5, 0xa9, 0xc9, 0x7b, 0x5a, 0x6d, 0xe9, 0xdd, 0xb1, 0x1c, 0x79, 0x06, 0x9e, 0xcc, 0x24, 0x62, - 0xbf, 0xc7, 0xf2, 0xe4, 0x29, 0xb8, 0x94, 0x45, 0xf2, 0xce, 0xec, 0x58, 0xe1, 0xb9, 0x9f, 0xcf, - 0x01, 0x49, 0x06, 0x70, 0x25, 0x4f, 0xc3, 0x65, 0xa6, 0x17, 0x8d, 0xec, 0x06, 0x3e, 0x03, 0x4f, - 0xa6, 0x52, 0x48, 0xcd, 0x1b, 0x87, 0x27, 0x32, 0x48, 0x44, 0xe3, 0x2e, 0x83, 0x92, 0x4e, 0x80, - 0x4d, 0xfb, 0xad, 0x1c, 0x9c, 0x4b, 0xf5, 0xd0, 0x20, 0x57, 0xe1, 0x53, 0x95, 0xea, 0x1c, 0xeb, - 0x9b, 0xc9, 0xa5, 0xda, 0xc2, 0x7c, 0xbd, 0x31, 0x37, 0x5d, 0x69, 0x30, 0xed, 0xbb, 0x57, 0x8f, - 0xf5, 0xe6, 0x15, 0x50, 0x7b, 0x50, 0x4e, 0xce, 0x54, 0xe6, 0x6f, 0xb3, 0xe1, 0x47, 0x3e, 0x05, - 0x4f, 0x67, 0xd2, 0x4d, 0xcd, 0x57, 0x26, 0x66, 0xa7, 0xaa, 0x63, 0x79, 0xf2, 0x69, 0x78, 0x26, - 0x93, 0xaa, 0x5a, 0xab, 0x73, 0xb2, 0xc2, 0x44, 0xf5, 0xc3, 0xff, 0xe9, 0xa9, 0xbe, 0x0f, 0xff, - 0xe8, 0xa9, 0xdc, 0xdf, 0xff, 0xa3, 0xa7, 0x72, 0xff, 0xf4, 0x8f, 0x9e, 0xca, 0x7d, 0xf9, 0xe6, - 0x6e, 0x02, 0xf3, 0xf2, 0x69, 0x6b, 0xb9, 0x84, 0xb7, 0xa5, 0x2f, 0xfd, 0xff, 0x01, 0x00, 0x00, - 0xff, 0xff, 0xf3, 0xef, 0xd0, 0xdb, 0x09, 0x7c, 0x01, 0x00, + 0x06, 0x06, 0x3d, 0x83, 0xd7, 0x56, 0x63, 0x66, 0x6e, 0x8f, 0xbc, 0x6b, 0x16, 0xba, 0x72, 0x1a, + 0xb5, 0xd3, 0x5d, 0xd5, 0xac, 0xaa, 0x1e, 0x0c, 0xd6, 0x2f, 0x1e, 0x4d, 0x51, 0xa4, 0xb8, 0x77, + 0x3a, 0x1f, 0x4d, 0x91, 0x12, 0x65, 0x8b, 0xd4, 0xc3, 0xa6, 0x28, 0x8a, 0x14, 0x25, 0x9a, 0xe4, + 0x91, 0x3c, 0x4b, 0xf2, 0xf9, 0x71, 0x12, 0x3f, 0xf3, 0x93, 0x64, 0x5b, 0x9f, 0x3e, 0x5b, 0xc6, + 0xc9, 0xb4, 0xf5, 0x07, 0x9f, 0xfd, 0x7d, 0xb4, 0xcd, 0xcf, 0x3a, 0xcb, 0xb2, 0x3f, 0x7f, 0x19, + 0x99, 0x55, 0x95, 0xf5, 0x6a, 0x3c, 0x57, 0x58, 0x1c, 0xf0, 0x67, 0x06, 0x1d, 0x11, 0x19, 0x99, + 0x15, 0x19, 0x99, 0x19, 0x99, 0x19, 0x19, 0x01, 0x57, 0x3d, 0xda, 0xa6, 0x5d, 0xdb, 0xf1, 0xae, + 0xb7, 0x69, 0x4b, 0x6f, 0x6e, 0x5c, 0xf7, 0x36, 0xba, 0xd4, 0xbd, 0x4e, 0x1f, 0x51, 0xcb, 0xf3, + 0xff, 0xbb, 0xd6, 0x75, 0x6c, 0xcf, 0x26, 0x25, 0xfe, 0xeb, 0xe2, 0xd9, 0x96, 0xdd, 0xb2, 0x11, + 0x74, 0x9d, 0xfd, 0xc5, 0xb1, 0x17, 0x2f, 0xb5, 0x6c, 0xbb, 0xd5, 0xa6, 0xd7, 0xf1, 0xd7, 0x6a, + 0xef, 0xc1, 0x75, 0xd7, 0x73, 0x7a, 0x4d, 0x4f, 0x60, 0x27, 0xe3, 0x58, 0xcf, 0xec, 0x50, 0xd7, + 0xd3, 0x3b, 0x5d, 0x41, 0xf0, 0x74, 0x9c, 0x60, 0xdd, 0xd1, 0xbb, 0x5d, 0xea, 0x88, 0xca, 0x2f, + 0x3e, 0x9b, 0xde, 0x4e, 0xfc, 0x57, 0x90, 0xbc, 0x98, 0x4e, 0xe2, 0x33, 0x8a, 0x71, 0x54, 0xbf, + 0x91, 0x87, 0xf2, 0x02, 0xf5, 0x74, 0x43, 0xf7, 0x74, 0x72, 0x09, 0x06, 0x6b, 0x96, 0x41, 0x1f, + 0x2b, 0xb9, 0x67, 0x72, 0x57, 0x0a, 0x53, 0xa5, 0xad, 0xcd, 0xc9, 0x3c, 0x35, 0x35, 0x0e, 0x24, + 0x4f, 0x41, 0x71, 0x65, 0xa3, 0x4b, 0x95, 0xfc, 0x33, 0xb9, 0x2b, 0xc3, 0x53, 0xc3, 0x5b, 0x9b, + 0x93, 0x83, 0x28, 0x0b, 0x0d, 0xc1, 0xe4, 0x59, 0xc8, 0xd7, 0xaa, 0x4a, 0x01, 0x91, 0xa7, 0xb7, + 0x36, 0x27, 0xc7, 0x7a, 0xa6, 0xf1, 0x82, 0xdd, 0x31, 0x3d, 0xda, 0xe9, 0x7a, 0x1b, 0x5a, 0xbe, + 0x56, 0x25, 0x97, 0xa1, 0x38, 0x6d, 0x1b, 0x54, 0x29, 0x22, 0x11, 0xd9, 0xda, 0x9c, 0x1c, 0x6f, + 0xda, 0x06, 0x95, 0xa8, 0x10, 0x4f, 0x3e, 0x0f, 0xc5, 0x15, 0xb3, 0x43, 0x95, 0xc1, 0x67, 0x72, + 0x57, 0x46, 0x6e, 0x5c, 0xbc, 0xc6, 0xa5, 0x72, 0xcd, 0x97, 0xca, 0xb5, 0x15, 0x5f, 0x6c, 0x53, + 0x13, 0xdf, 0xd9, 0x9c, 0x1c, 0xd8, 0xda, 0x9c, 0x2c, 0x32, 0x49, 0x7e, 0xfd, 0xbb, 0x93, 0x39, + 0x0d, 0x4b, 0x92, 0xb7, 0x60, 0x64, 0xba, 0xdd, 0x73, 0x3d, 0xea, 0x2c, 0xea, 0x1d, 0xaa, 0x94, + 0xb0, 0xc2, 0x8b, 0x5b, 0x9b, 0x93, 0xe7, 0x9b, 0x1c, 0xdc, 0xb0, 0xf4, 0x8e, 0x5c, 0xb1, 0x4c, + 0xae, 0xfe, 0x76, 0x0e, 0x4e, 0xd5, 0xa9, 0xeb, 0x9a, 0xb6, 0x15, 0xc8, 0xe6, 0x93, 0x30, 0x2c, + 0x40, 0xb5, 0x2a, 0xca, 0x67, 0x78, 0x6a, 0x68, 0x6b, 0x73, 0xb2, 0xe0, 0x9a, 0x86, 0x16, 0x62, + 0xc8, 0x67, 0x60, 0xe8, 0xbe, 0xe9, 0xad, 0x2d, 0xcc, 0x56, 0x84, 0x9c, 0xce, 0x6f, 0x6d, 0x4e, + 0x92, 0x75, 0xd3, 0x5b, 0x6b, 0x74, 0x1e, 0xe8, 0x52, 0x85, 0x3e, 0x19, 0x99, 0x87, 0x89, 0x65, + 0xc7, 0x7c, 0xa4, 0x7b, 0xf4, 0x0e, 0xdd, 0x58, 0xb6, 0xdb, 0x66, 0x73, 0x43, 0x48, 0xf1, 0x99, + 0xad, 0xcd, 0xc9, 0x4b, 0x5d, 0x8e, 0x6b, 0x3c, 0xa4, 0x1b, 0x8d, 0x2e, 0x62, 0x25, 0x26, 0x89, + 0x92, 0xea, 0xef, 0x94, 0x60, 0xf4, 0xae, 0x4b, 0x9d, 0xa0, 0xdd, 0x97, 0xa1, 0xc8, 0x7e, 0x8b, + 0x26, 0xa3, 0xcc, 0x7b, 0x2e, 0x75, 0x64, 0x99, 0x33, 0x3c, 0xb9, 0x0a, 0x83, 0xf3, 0x76, 0xcb, + 0xb4, 0x44, 0xb3, 0xcf, 0x6c, 0x6d, 0x4e, 0x9e, 0x6a, 0x33, 0x80, 0x44, 0xc9, 0x29, 0xc8, 0xe7, + 0x60, 0xb4, 0xd6, 0x61, 0x3a, 0x64, 0x5b, 0xba, 0x67, 0x3b, 0xa2, 0xb5, 0x28, 0x5d, 0x53, 0x82, + 0x4b, 0x05, 0x23, 0xf4, 0xe4, 0x0d, 0x80, 0xca, 0xfd, 0xba, 0x66, 0xb7, 0x69, 0x45, 0x5b, 0x14, + 0xca, 0x80, 0xa5, 0xf5, 0x75, 0xb7, 0xe1, 0xd8, 0x6d, 0xda, 0xd0, 0x1d, 0xb9, 0x5a, 0x89, 0x9a, + 0xcc, 0xc0, 0x78, 0xa5, 0xd9, 0xa4, 0xae, 0xab, 0xd1, 0x1f, 0xee, 0x51, 0xd7, 0x73, 0x95, 0xc1, + 0x67, 0x0a, 0x57, 0x86, 0xa7, 0x9e, 0xda, 0xda, 0x9c, 0x7c, 0x42, 0x47, 0x4c, 0xc3, 0x11, 0x28, + 0x89, 0x45, 0xac, 0x10, 0x99, 0x82, 0xb1, 0xca, 0x07, 0x3d, 0x87, 0xd6, 0x0c, 0x6a, 0x79, 0xa6, + 0xb7, 0x21, 0x34, 0xe4, 0xd2, 0xd6, 0xe6, 0xa4, 0xa2, 0x33, 0x44, 0xc3, 0x14, 0x18, 0x89, 0x49, + 0xb4, 0x08, 0x59, 0x82, 0xd3, 0xb7, 0xa6, 0x97, 0xeb, 0xd4, 0x79, 0x64, 0x36, 0x69, 0xa5, 0xd9, + 0xb4, 0x7b, 0x96, 0xa7, 0x0c, 0x21, 0x9f, 0x67, 0xb7, 0x36, 0x27, 0x9f, 0x6a, 0x35, 0xbb, 0x0d, + 0x97, 0x63, 0x1b, 0x3a, 0x47, 0x4b, 0xcc, 0x92, 0x65, 0xc9, 0x17, 0x61, 0x6c, 0xc5, 0x61, 0x5a, + 0x68, 0x54, 0x29, 0x83, 0x2b, 0x65, 0xd4, 0xff, 0xf3, 0xd7, 0xc4, 0x04, 0xc4, 0xa1, 0x7e, 0xcf, + 0xf2, 0xc6, 0x7a, 0xbc, 0x40, 0xc3, 0x40, 0x9c, 0xdc, 0xd8, 0x08, 0x2b, 0x42, 0x41, 0x61, 0x1f, + 0x6f, 0x3a, 0xd4, 0x48, 0x68, 0xdb, 0x30, 0xb6, 0xf9, 0xea, 0xd6, 0xe6, 0xe4, 0x27, 0x1d, 0x41, + 0xd3, 0xe8, 0xab, 0x76, 0x99, 0xac, 0xc8, 0x0c, 0x94, 0x99, 0x36, 0xdd, 0x31, 0x2d, 0x43, 0x81, + 0x67, 0x72, 0x57, 0xc6, 0x6f, 0x4c, 0xf8, 0xad, 0xf7, 0xe1, 0x53, 0x17, 0xb6, 0x36, 0x27, 0xcf, + 0x30, 0x1d, 0x6c, 0x3c, 0x34, 0x2d, 0x79, 0x8a, 0x08, 0x8a, 0xb2, 0x51, 0x34, 0x65, 0x7b, 0x38, + 0x74, 0x47, 0xc2, 0x51, 0xb4, 0x6a, 0x7b, 0xf1, 0x61, 0xeb, 0x93, 0x91, 0x69, 0x18, 0x9b, 0xb2, + 0xbd, 0x9a, 0xe5, 0x7a, 0xba, 0xd5, 0xa4, 0xb5, 0xaa, 0x32, 0x8a, 0xe5, 0x50, 0x2d, 0x58, 0x39, + 0x53, 0x60, 0x1a, 0x91, 0x49, 0x29, 0x5a, 0x46, 0xfd, 0x17, 0x45, 0x18, 0x67, 0x7d, 0x22, 0x0d, + 0x9f, 0x0a, 0x9b, 0x09, 0x18, 0x84, 0xd5, 0xe2, 0x76, 0xf5, 0x26, 0x15, 0x23, 0x09, 0xbf, 0xc2, + 0xf2, 0x81, 0x12, 0xcf, 0x38, 0x3d, 0xb9, 0x0a, 0x65, 0x0e, 0xaa, 0x55, 0xc5, 0xe0, 0x1a, 0xdb, + 0xda, 0x9c, 0x1c, 0x76, 0x11, 0xd6, 0x30, 0x0d, 0x2d, 0x40, 0x33, 0xed, 0xe6, 0x7f, 0xcf, 0xd9, + 0xae, 0xc7, 0x98, 0x8b, 0xb1, 0x85, 0x9f, 0x21, 0x0a, 0xac, 0x09, 0x94, 0xac, 0xdd, 0xd1, 0x42, + 0xe4, 0x75, 0x00, 0x0e, 0xa9, 0x18, 0x86, 0x23, 0x06, 0xd8, 0x13, 0x5b, 0x9b, 0x93, 0xe7, 0x04, + 0x0b, 0xdd, 0x30, 0xe4, 0xd1, 0x29, 0x11, 0x93, 0x0e, 0x8c, 0xf2, 0x5f, 0xf3, 0xfa, 0x2a, 0x6d, + 0xf3, 0xd1, 0x35, 0x72, 0xe3, 0x8a, 0xdf, 0x89, 0x51, 0xe9, 0x5c, 0x93, 0x49, 0x67, 0x2c, 0xcf, + 0xd9, 0x98, 0x9a, 0x14, 0x13, 0xf2, 0x05, 0x51, 0x55, 0x1b, 0x71, 0xf2, 0x54, 0x20, 0x97, 0x61, + 0xf3, 0xf4, 0xac, 0xed, 0xac, 0xeb, 0x8e, 0x41, 0x8d, 0xa9, 0x0d, 0x79, 0x9e, 0x7e, 0xe0, 0x83, + 0x1b, 0xab, 0xb2, 0xea, 0xc9, 0xe4, 0xac, 0xd3, 0x39, 0xb7, 0x7a, 0x6f, 0x15, 0x55, 0x6e, 0x28, + 0x21, 0x2d, 0xb7, 0xb7, 0x1a, 0x57, 0xb3, 0x68, 0x19, 0x36, 0x15, 0x70, 0xc0, 0x3d, 0xea, 0xb0, + 0x49, 0x1c, 0x47, 0x9d, 0x98, 0x0a, 0x04, 0x93, 0x47, 0x1c, 0x93, 0xe4, 0x21, 0x8a, 0x5c, 0x7c, + 0x07, 0x4e, 0x27, 0x44, 0x41, 0x26, 0xa0, 0xf0, 0x90, 0x6e, 0x70, 0x75, 0xd1, 0xd8, 0x9f, 0xe4, + 0x2c, 0x0c, 0x3e, 0xd2, 0xdb, 0x3d, 0xb1, 0x84, 0x6a, 0xfc, 0xc7, 0x1b, 0xf9, 0xcf, 0xe6, 0xd8, + 0x8a, 0x43, 0xa6, 0x6d, 0xcb, 0xa2, 0x4d, 0x4f, 0x5e, 0x74, 0x5e, 0x85, 0xe1, 0x79, 0xbb, 0xa9, + 0xb7, 0xb1, 0x1f, 0xb9, 0xde, 0x29, 0x5b, 0x9b, 0x93, 0x67, 0x59, 0x07, 0x5e, 0x6b, 0x33, 0x8c, + 0xd4, 0xa6, 0x90, 0x94, 0x29, 0x80, 0x46, 0x3b, 0xb6, 0x47, 0xb1, 0x60, 0x3e, 0x54, 0x00, 0x2c, + 0xe8, 0x20, 0x4a, 0x56, 0x80, 0x90, 0x98, 0x5c, 0x87, 0xf2, 0x32, 0x5b, 0x67, 0x9b, 0x76, 0x5b, + 0x28, 0x1f, 0x2e, 0x05, 0xb8, 0xf6, 0xca, 0x63, 0xd5, 0x27, 0x52, 0xe7, 0x60, 0x7c, 0xba, 0x6d, + 0x52, 0xcb, 0x93, 0x5b, 0xcd, 0x46, 0x72, 0xa5, 0x45, 0x2d, 0x4f, 0x6e, 0x35, 0x8e, 0x79, 0x9d, + 0x41, 0xe5, 0x56, 0x07, 0xa4, 0xea, 0x1f, 0x14, 0xe0, 0x89, 0x3b, 0xbd, 0x55, 0xea, 0x58, 0xd4, + 0xa3, 0xae, 0x58, 0x90, 0x03, 0xae, 0x8b, 0x70, 0x3a, 0x81, 0x14, 0xdc, 0x71, 0xa1, 0x7c, 0x18, + 0x20, 0x1b, 0x62, 0x8d, 0x97, 0x67, 0xdb, 0x44, 0x51, 0x32, 0x07, 0xa7, 0x42, 0x20, 0x6b, 0x84, + 0xab, 0xe4, 0x71, 0x29, 0x79, 0x7a, 0x6b, 0x73, 0xf2, 0xa2, 0xc4, 0x8d, 0x35, 0x5b, 0xd6, 0xe0, + 0x78, 0x31, 0x72, 0x07, 0x26, 0x42, 0xd0, 0x2d, 0xc7, 0xee, 0x75, 0x5d, 0xa5, 0x80, 0xac, 0x26, + 0xb7, 0x36, 0x27, 0x9f, 0x94, 0x58, 0xb5, 0x10, 0x29, 0x2f, 0xe0, 0xf1, 0x82, 0xe4, 0xc7, 0x72, + 0x32, 0x37, 0x31, 0x0a, 0x8b, 0x38, 0x0a, 0x5f, 0xf3, 0x47, 0x61, 0xa6, 0x90, 0xae, 0xc5, 0x4b, + 0x8a, 0x41, 0x19, 0x6b, 0x46, 0x62, 0x50, 0x26, 0x6a, 0xbc, 0x38, 0x0d, 0xe7, 0x52, 0x79, 0xed, + 0x4a, 0xab, 0xff, 0x79, 0x41, 0xe6, 0xb2, 0x6c, 0x1b, 0x41, 0x67, 0x2e, 0xc9, 0x9d, 0xb9, 0x6c, + 0x1b, 0x38, 0xd5, 0xe7, 0xc2, 0xb5, 0x53, 0x6a, 0x6c, 0xd7, 0x36, 0xe2, 0xb3, 0x7e, 0xb2, 0x2c, + 0xf9, 0x32, 0x9c, 0x4f, 0x00, 0xf9, 0x74, 0xcd, 0xb5, 0xff, 0xf2, 0xd6, 0xe6, 0xa4, 0x9a, 0xc2, + 0x35, 0x3e, 0x7b, 0x67, 0x70, 0x21, 0x3a, 0x5c, 0x90, 0xa4, 0x6e, 0x5b, 0x9e, 0x6e, 0x5a, 0xc2, + 0xb8, 0xe4, 0xa3, 0xe4, 0x53, 0x5b, 0x9b, 0x93, 0xcf, 0xc9, 0x3a, 0xe8, 0xd3, 0xc4, 0x1b, 0x9f, + 0xc5, 0x87, 0x18, 0xa0, 0xa4, 0xa0, 0x6a, 0x1d, 0xbd, 0xe5, 0x5b, 0xcc, 0x57, 0xb6, 0x36, 0x27, + 0x3f, 0x91, 0x5a, 0x87, 0xc9, 0xa8, 0xe4, 0x15, 0x3a, 0x8b, 0x13, 0xd1, 0x80, 0x84, 0xb8, 0x45, + 0xdb, 0xa0, 0xf8, 0x0d, 0x83, 0xc8, 0x5f, 0xdd, 0xda, 0x9c, 0x7c, 0x5a, 0xe2, 0x6f, 0xd9, 0x06, + 0x8d, 0x37, 0x3f, 0xa5, 0xb4, 0xfa, 0xdb, 0x05, 0x78, 0xba, 0x5e, 0x59, 0x98, 0xaf, 0x19, 0xbe, + 0x49, 0xb3, 0xec, 0xd8, 0x8f, 0x4c, 0x43, 0x1a, 0xbd, 0xab, 0x70, 0x21, 0x86, 0x9a, 0x41, 0x2b, + 0x2a, 0x30, 0xa6, 0xf1, 0xdb, 0x7c, 0x73, 0xa9, 0x2b, 0x68, 0x1a, 0xdc, 0xd4, 0x8a, 0x2e, 0xda, + 0x59, 0x8c, 0x58, 0x1f, 0xc5, 0x50, 0xf5, 0x35, 0xdb, 0xf1, 0x9a, 0x3d, 0x4f, 0x28, 0x01, 0xf6, + 0x51, 0xa2, 0x0e, 0x57, 0x10, 0xf5, 0xa9, 0xc2, 0xe7, 0x43, 0x7e, 0x32, 0x07, 0x13, 0x15, 0xcf, + 0x73, 0xcc, 0xd5, 0x9e, 0x47, 0x17, 0xf4, 0x6e, 0xd7, 0xb4, 0x5a, 0x38, 0xd6, 0x47, 0x6e, 0xbc, + 0x15, 0xac, 0x91, 0x7d, 0x25, 0x71, 0x2d, 0x5e, 0x5c, 0x1a, 0xa2, 0xba, 0x8f, 0x6a, 0x74, 0x38, + 0x4e, 0x1e, 0xa2, 0xf1, 0x72, 0x6c, 0x88, 0xa6, 0xf2, 0xda, 0xd5, 0x10, 0xfd, 0x46, 0x01, 0x2e, + 0x2d, 0x3d, 0xf4, 0x74, 0x8d, 0xba, 0x76, 0xcf, 0x69, 0x52, 0xf7, 0x6e, 0xd7, 0xd0, 0x3d, 0x1a, + 0x8e, 0xd4, 0x49, 0x18, 0xac, 0x18, 0x06, 0x35, 0x90, 0xdd, 0x20, 0xdf, 0xf6, 0xe9, 0x0c, 0xa0, + 0x71, 0x38, 0xf9, 0x24, 0x0c, 0x89, 0x32, 0xc8, 0x7d, 0x70, 0x6a, 0x64, 0x6b, 0x73, 0x72, 0xa8, + 0xc7, 0x41, 0x9a, 0x8f, 0x63, 0x64, 0x55, 0xda, 0xa6, 0x8c, 0xac, 0x10, 0x92, 0x19, 0x1c, 0xa4, + 0xf9, 0x38, 0xf2, 0x2e, 0x8c, 0x23, 0xdb, 0xa0, 0x3d, 0x62, 0xee, 0x3b, 0xeb, 0x4b, 0x57, 0x6e, + 0x2c, 0x5f, 0x9a, 0xb0, 0x35, 0x0d, 0xc7, 0x2f, 0xa0, 0xc5, 0x18, 0x90, 0xfb, 0x30, 0x21, 0x1a, + 0x11, 0x32, 0x1d, 0xec, 0xc3, 0xf4, 0xdc, 0xd6, 0xe6, 0xe4, 0x69, 0xd1, 0x7e, 0x89, 0x6d, 0x82, + 0x09, 0x63, 0x2c, 0x9a, 0x1d, 0x32, 0x2e, 0x6d, 0xc7, 0x58, 0x7c, 0xb1, 0xcc, 0x38, 0xce, 0x44, + 0x7d, 0x0f, 0x46, 0xe5, 0x82, 0xe4, 0x3c, 0x6e, 0xad, 0xf9, 0x38, 0xc1, 0x4d, 0xb9, 0x69, 0xe0, + 0x7e, 0xfa, 0x25, 0x18, 0xa9, 0x52, 0xb7, 0xe9, 0x98, 0x5d, 0x66, 0x35, 0x08, 0x25, 0x3f, 0xb5, + 0xb5, 0x39, 0x39, 0x62, 0x84, 0x60, 0x4d, 0xa6, 0x51, 0xff, 0xaf, 0x1c, 0x9c, 0x67, 0xbc, 0x2b, + 0xae, 0x6b, 0xb6, 0xac, 0x8e, 0xbc, 0x6c, 0xbf, 0x00, 0xa5, 0x3a, 0xd6, 0x27, 0x6a, 0x3a, 0xbb, + 0xb5, 0x39, 0x39, 0xc1, 0x5b, 0x20, 0xe9, 0xa1, 0xa0, 0x09, 0xf6, 0x95, 0xf9, 0x6d, 0xf6, 0x95, + 0xcc, 0xa4, 0xf5, 0x74, 0xc7, 0x33, 0xad, 0x56, 0xdd, 0xd3, 0xbd, 0x9e, 0x1b, 0x31, 0x69, 0x05, + 0xa6, 0xe1, 0x22, 0x2a, 0x62, 0xd2, 0x46, 0x0a, 0x91, 0x77, 0x60, 0x74, 0xc6, 0x32, 0x42, 0x26, + 0x7c, 0x42, 0x7c, 0x92, 0x59, 0x9a, 0x14, 0xe1, 0x49, 0x16, 0x91, 0x02, 0xea, 0x5f, 0xcf, 0x81, + 0xc2, 0x37, 0x81, 0xf3, 0xa6, 0xeb, 0x2d, 0xd0, 0xce, 0xaa, 0x34, 0x3b, 0xcd, 0xfa, 0xbb, 0x4a, + 0x86, 0x93, 0xd6, 0x22, 0x34, 0x05, 0xc4, 0xae, 0xb2, 0x6d, 0xba, 0x89, 0xed, 0x47, 0xac, 0x14, + 0xa9, 0xc1, 0x10, 0xe7, 0xcc, 0x6d, 0x89, 0x91, 0x1b, 0x8a, 0xaf, 0x08, 0xf1, 0xaa, 0xb9, 0x32, + 0x74, 0x38, 0xb1, 0xbc, 0xa1, 0x11, 0xe5, 0xd5, 0xbf, 0x91, 0x87, 0x89, 0x78, 0x21, 0x72, 0x1f, + 0xca, 0xb7, 0x6d, 0xd3, 0xa2, 0xc6, 0x92, 0x85, 0x2d, 0xec, 0x7f, 0x38, 0xe2, 0xdb, 0xe2, 0x67, + 0xde, 0xc7, 0x32, 0x0d, 0xd9, 0x82, 0xc5, 0xb3, 0x92, 0x80, 0x19, 0xf9, 0x22, 0x0c, 0x33, 0x1b, + 0xf0, 0x11, 0x72, 0xce, 0x6f, 0xcb, 0xf9, 0x19, 0xc1, 0xf9, 0xac, 0xc3, 0x0b, 0x25, 0x59, 0x87, + 0xec, 0x98, 0x5e, 0x69, 0x54, 0x77, 0x6d, 0x4b, 0xf4, 0x3c, 0xea, 0x95, 0x83, 0x10, 0x59, 0xaf, + 0x38, 0x0d, 0x33, 0x5d, 0xf9, 0xc7, 0x62, 0x37, 0x48, 0x7b, 0x17, 0x2e, 0xab, 0x78, 0x0f, 0x48, + 0xc4, 0xea, 0x8f, 0xe7, 0xe1, 0xc5, 0x50, 0x64, 0x1a, 0x7d, 0x64, 0xd2, 0x75, 0x21, 0xce, 0x35, + 0xb3, 0x2b, 0xf6, 0xac, 0x4c, 0xe5, 0xdd, 0xe9, 0x35, 0xdd, 0x6a, 0x51, 0x83, 0x5c, 0x85, 0x41, + 0xcd, 0x6e, 0x53, 0x57, 0xc9, 0xa1, 0xb9, 0x86, 0xd3, 0x89, 0xc3, 0x00, 0xf2, 0xa1, 0x07, 0x52, + 0x10, 0x1b, 0x4a, 0x2b, 0x8e, 0x6e, 0x7a, 0x7e, 0xcf, 0x56, 0x92, 0x3d, 0xbb, 0x83, 0x1a, 0xaf, + 0x71, 0x1e, 0x7c, 0xce, 0x47, 0x41, 0x78, 0x08, 0x90, 0x05, 0xc1, 0x49, 0x2e, 0xbe, 0x0e, 0x23, + 0x12, 0xf1, 0xae, 0x26, 0xf5, 0x6f, 0x16, 0x65, 0x5d, 0xf7, 0x9b, 0x25, 0x74, 0xfd, 0x3a, 0xd3, + 0x51, 0xd7, 0x65, 0x56, 0x05, 0x57, 0x72, 0xa1, 0x89, 0x08, 0x8a, 0x6a, 0x22, 0x82, 0xc8, 0xcb, + 0x50, 0xe6, 0x2c, 0x82, 0xfd, 0x2b, 0xee, 0x7d, 0x1d, 0x84, 0x45, 0x97, 0xe6, 0x80, 0x90, 0xfc, + 0x72, 0x0e, 0x9e, 0xea, 0x2b, 0x09, 0x54, 0x86, 0x91, 0x1b, 0xaf, 0xec, 0x49, 0x8c, 0x53, 0x2f, + 0x6e, 0x6d, 0x4e, 0x5e, 0xed, 0x04, 0x24, 0x0d, 0x47, 0xa2, 0x69, 0x34, 0x39, 0x91, 0xd4, 0xae, + 0xfe, 0x4d, 0x61, 0xc6, 0x23, 0xaf, 0x74, 0x16, 0x8f, 0x8e, 0xac, 0xe6, 0x86, 0xdf, 0xc8, 0x62, + 0x68, 0x3c, 0x8a, 0xef, 0x7d, 0xe0, 0x93, 0xa4, 0x54, 0x93, 0xc1, 0x85, 0x34, 0xe1, 0x02, 0xc7, + 0x54, 0xf5, 0x8d, 0xa5, 0x07, 0x0b, 0xb6, 0xe5, 0xad, 0xf9, 0x15, 0x0c, 0xca, 0x67, 0x2f, 0x58, + 0x81, 0xa1, 0x6f, 0x34, 0xec, 0x07, 0x8d, 0x0e, 0xa3, 0x4a, 0xa9, 0x23, 0x8b, 0x13, 0x9b, 0x68, + 0xc5, 0x98, 0xf3, 0xa7, 0xa0, 0x52, 0x78, 0x32, 0xe6, 0x8f, 0xd3, 0xe4, 0x84, 0x13, 0x2b, 0xa4, + 0xd6, 0x60, 0x74, 0xde, 0x6e, 0x3e, 0x0c, 0xd4, 0xe5, 0x75, 0x28, 0xad, 0xe8, 0x4e, 0x8b, 0x7a, + 0x28, 0x8b, 0x91, 0x1b, 0xa7, 0xaf, 0xf1, 0xd3, 0x66, 0x46, 0xc4, 0x11, 0x53, 0xe3, 0x62, 0x36, + 0x28, 0x79, 0xf8, 0x5b, 0x13, 0x05, 0xd4, 0xef, 0x0e, 0xc2, 0xa8, 0x38, 0x19, 0xc5, 0xd9, 0x9c, + 0xbc, 0x11, 0x9e, 0x35, 0x8b, 0xe9, 0x2b, 0x38, 0x1d, 0x0a, 0x4e, 0xb5, 0x46, 0x19, 0xb3, 0x7f, + 0xb0, 0x39, 0x99, 0xdb, 0xda, 0x9c, 0x1c, 0xd0, 0xca, 0xd2, 0xa6, 0x32, 0x5c, 0x6f, 0xa4, 0x05, + 0x56, 0x3e, 0xeb, 0x8c, 0x95, 0xe5, 0xeb, 0xcf, 0x3b, 0x30, 0x24, 0xda, 0x20, 0x34, 0xee, 0x42, + 0x78, 0x96, 0x11, 0x39, 0xe1, 0x8d, 0x95, 0xf6, 0x4b, 0x91, 0xb7, 0xa0, 0xc4, 0xf7, 0xf6, 0x42, + 0x00, 0xe7, 0xd3, 0xcf, 0x42, 0x62, 0xc5, 0x45, 0x19, 0x32, 0x07, 0x10, 0xee, 0xeb, 0x83, 0x03, + 0x6d, 0xc1, 0x21, 0xb9, 0xe3, 0x8f, 0x71, 0x91, 0xca, 0x92, 0x57, 0x61, 0x74, 0x85, 0x3a, 0x1d, + 0xd3, 0xd2, 0xdb, 0x75, 0xf3, 0x03, 0xff, 0x4c, 0x1b, 0x17, 0x5e, 0xd7, 0xfc, 0x40, 0x1e, 0xb9, + 0x11, 0x3a, 0xf2, 0xa5, 0xb4, 0x7d, 0xf3, 0x10, 0x36, 0xe4, 0xd9, 0x6d, 0x37, 0x94, 0xb1, 0xf6, + 0xa4, 0x6c, 0xa3, 0xdf, 0x85, 0xb1, 0xc8, 0x96, 0x49, 0x1c, 0x5a, 0x3e, 0x95, 0x64, 0x2d, 0xed, + 0xff, 0x62, 0x6c, 0xa3, 0x1c, 0x98, 0x26, 0xd7, 0x2c, 0xd3, 0x33, 0xf5, 0xf6, 0xb4, 0xdd, 0xe9, + 0xe8, 0x96, 0xa1, 0x0c, 0x87, 0x9a, 0x6c, 0x72, 0x4c, 0xa3, 0xc9, 0x51, 0xb2, 0x26, 0x47, 0x0b, + 0xb1, 0x6d, 0xb9, 0xe8, 0x43, 0x8d, 0x36, 0x6d, 0x87, 0xd9, 0x02, 0x78, 0x26, 0x29, 0xb6, 0xe5, + 0x2e, 0xc7, 0x35, 0x1c, 0x1f, 0x29, 0x1b, 0xdb, 0xf1, 0x82, 0xb7, 0x8b, 0xe5, 0x91, 0x89, 0xd1, + 0xf8, 0x31, 0xb2, 0xfa, 0x57, 0x0b, 0x30, 0x22, 0x48, 0xd9, 0x52, 0x7a, 0xa2, 0xe0, 0xfb, 0x51, + 0xf0, 0x54, 0x45, 0x2d, 0x1d, 0x94, 0xa2, 0xaa, 0x1f, 0xe6, 0x83, 0xd9, 0x68, 0xd9, 0x31, 0xad, + 0xfd, 0xcd, 0x46, 0x97, 0x01, 0xa6, 0xd7, 0x7a, 0xd6, 0x43, 0x7e, 0x5d, 0x96, 0x0f, 0xaf, 0xcb, + 0x9a, 0xa6, 0x26, 0x61, 0xc8, 0x53, 0x50, 0xac, 0x32, 0xfe, 0xac, 0x67, 0x46, 0xa7, 0x86, 0xbf, + 0xc3, 0x39, 0xe5, 0x5e, 0xd4, 0x10, 0xcc, 0x36, 0x57, 0x53, 0x1b, 0x1e, 0xe5, 0xe6, 0x6c, 0x81, + 0x6f, 0xae, 0x56, 0x19, 0x40, 0xe3, 0x70, 0x72, 0x13, 0x4e, 0x57, 0x69, 0x5b, 0xdf, 0x58, 0x30, + 0xdb, 0x6d, 0xd3, 0xa5, 0x4d, 0xdb, 0x32, 0x5c, 0x14, 0xb2, 0xa8, 0xae, 0xe3, 0x6a, 0x49, 0x02, + 0xa2, 0x42, 0x69, 0xe9, 0xc1, 0x03, 0x97, 0x7a, 0x28, 0xbe, 0xc2, 0x14, 0xb0, 0xc9, 0xd9, 0x46, + 0x88, 0x26, 0x30, 0xea, 0xaf, 0xe5, 0xd8, 0xee, 0xc5, 0x7d, 0xe8, 0xd9, 0xdd, 0x40, 0xcb, 0xf7, + 0x25, 0x92, 0xab, 0xa1, 0x5d, 0x91, 0xc7, 0xaf, 0x3d, 0x25, 0xbe, 0x76, 0x48, 0xd8, 0x16, 0xa1, + 0x45, 0x91, 0xfa, 0x55, 0x85, 0x6d, 0xbe, 0x4a, 0xfd, 0xa3, 0x3c, 0x5c, 0x10, 0x2d, 0x9e, 0x6e, + 0x9b, 0xdd, 0x55, 0x5b, 0x77, 0x0c, 0x8d, 0x36, 0xa9, 0xf9, 0x88, 0x1e, 0xcd, 0x81, 0x17, 0x1d, + 0x3a, 0xc5, 0x7d, 0x0c, 0x9d, 0x1b, 0xb8, 0x11, 0x64, 0x92, 0xc1, 0x03, 0x5f, 0x6e, 0x54, 0x4c, + 0x6c, 0x6d, 0x4e, 0x8e, 0x1a, 0x1c, 0x8c, 0x47, 0xfe, 0x9a, 0x4c, 0xc4, 0x94, 0x64, 0x9e, 0x5a, + 0x2d, 0x6f, 0x0d, 0x95, 0x64, 0x90, 0x2b, 0x49, 0x1b, 0x21, 0x9a, 0xc0, 0xa8, 0xff, 0x5b, 0x1e, + 0xce, 0xc6, 0x45, 0x5e, 0xa7, 0x96, 0x71, 0x22, 0xef, 0x8f, 0x46, 0xde, 0x7f, 0x5c, 0x80, 0x27, + 0x45, 0x99, 0xfa, 0x9a, 0xee, 0x50, 0xa3, 0x6a, 0x3a, 0xb4, 0xe9, 0xd9, 0xce, 0xc6, 0x11, 0x36, + 0xa0, 0x0e, 0x4e, 0xec, 0x37, 0xa1, 0x24, 0xb6, 0xff, 0x7c, 0x9d, 0x19, 0x0f, 0x5a, 0x82, 0xd0, + 0xc4, 0x0a, 0xc5, 0x8f, 0x0e, 0x62, 0x9d, 0x55, 0xda, 0x49, 0x67, 0x7d, 0x16, 0xc6, 0x02, 0xd1, + 0xe3, 0x46, 0x74, 0x28, 0xb4, 0xb6, 0x0c, 0x1f, 0x81, 0x7b, 0x51, 0x2d, 0x4a, 0x88, 0xb5, 0xf9, + 0x80, 0x5a, 0x15, 0xad, 0xa1, 0x31, 0x51, 0x5b, 0x50, 0xce, 0x34, 0x34, 0x99, 0x48, 0xdd, 0x2c, + 0xc2, 0xc5, 0xf4, 0x6e, 0xd7, 0xa8, 0x6e, 0x9c, 0xf4, 0xfa, 0xf7, 0x65, 0xaf, 0x93, 0x67, 0xa1, + 0xb8, 0xac, 0x7b, 0x6b, 0xe2, 0xfa, 0x1d, 0xef, 0x84, 0x1f, 0x98, 0x6d, 0xda, 0xe8, 0xea, 0xde, + 0x9a, 0x86, 0x28, 0x69, 0xce, 0x00, 0xe4, 0x98, 0x32, 0x67, 0x48, 0x8b, 0xfd, 0xc8, 0x33, 0xb9, + 0x2b, 0xc5, 0xd4, 0xc5, 0xfe, 0xbb, 0xc5, 0xac, 0x79, 0xe5, 0xbe, 0x63, 0x7a, 0xf4, 0x44, 0xc3, + 0x4e, 0x34, 0x6c, 0x9f, 0x1a, 0xf6, 0x8f, 0xf2, 0x30, 0x16, 0x6c, 0x9a, 0xde, 0xa7, 0xcd, 0xc3, + 0x59, 0xab, 0xc2, 0xad, 0x4c, 0x61, 0xdf, 0x5b, 0x99, 0xfd, 0x28, 0x94, 0x1a, 0x1c, 0x79, 0x72, + 0xd3, 0x00, 0x25, 0xc6, 0x8f, 0x3c, 0x83, 0x83, 0xce, 0x67, 0x61, 0x68, 0x41, 0x7f, 0x6c, 0x76, + 0x7a, 0x1d, 0x61, 0xa5, 0xa3, 0x3b, 0x59, 0x47, 0x7f, 0xac, 0xf9, 0x70, 0xf5, 0xbf, 0xcd, 0xc1, + 0xb8, 0x10, 0xaa, 0x60, 0xbe, 0x2f, 0xa9, 0x86, 0xd2, 0xc9, 0xef, 0x5b, 0x3a, 0x85, 0xbd, 0x4b, + 0x47, 0xfd, 0xf3, 0x05, 0x50, 0x66, 0xcd, 0x36, 0x5d, 0x71, 0x74, 0xcb, 0x7d, 0x40, 0x1d, 0xb1, + 0x9d, 0x9e, 0x61, 0xac, 0xf6, 0xf5, 0x81, 0xd2, 0x94, 0x92, 0xdf, 0xd3, 0x94, 0xf2, 0x69, 0x18, + 0x16, 0x8d, 0x09, 0x5c, 0x19, 0x71, 0xd4, 0x38, 0x3e, 0x50, 0x0b, 0xf1, 0x8c, 0xb8, 0xd2, 0xed, + 0x3a, 0xf6, 0x23, 0xea, 0xf0, 0x5b, 0x2a, 0x41, 0xac, 0xfb, 0x40, 0x2d, 0xc4, 0x4b, 0x9c, 0xa9, + 0x6f, 0x2f, 0xca, 0x9c, 0xa9, 0xa3, 0x85, 0x78, 0x72, 0x05, 0xca, 0xf3, 0x76, 0x53, 0x47, 0x41, + 0xf3, 0x69, 0x65, 0x74, 0x6b, 0x73, 0xb2, 0xdc, 0x16, 0x30, 0x2d, 0xc0, 0x32, 0xca, 0xaa, 0xbd, + 0x6e, 0xb5, 0x6d, 0x9d, 0x3b, 0xbf, 0x94, 0x39, 0xa5, 0x21, 0x60, 0x5a, 0x80, 0x65, 0x94, 0x4c, + 0xe6, 0xe8, 0x54, 0x54, 0x0e, 0x79, 0x3e, 0x10, 0x30, 0x2d, 0xc0, 0xaa, 0xbf, 0x56, 0x64, 0xda, + 0xeb, 0x9a, 0x1f, 0x1c, 0xfb, 0x75, 0x21, 0x1c, 0x30, 0x83, 0x7b, 0x18, 0x30, 0xc7, 0xe6, 0xc0, + 0x4e, 0xfd, 0x17, 0x43, 0x00, 0x42, 0xfa, 0x33, 0x27, 0x9b, 0xc3, 0xfd, 0x69, 0x4d, 0x15, 0x4e, + 0xcf, 0x58, 0x6b, 0xba, 0xd5, 0xa4, 0x46, 0x78, 0x6c, 0x59, 0xc2, 0xa1, 0x8d, 0x4e, 0x90, 0x54, + 0x20, 0xc3, 0x73, 0x4b, 0x2d, 0x59, 0x80, 0xbc, 0x04, 0x23, 0x35, 0xcb, 0xa3, 0x8e, 0xde, 0xf4, + 0xcc, 0x47, 0x54, 0x4c, 0x0d, 0x78, 0x33, 0x6c, 0x86, 0x60, 0x4d, 0xa6, 0x21, 0x37, 0x61, 0x74, + 0x59, 0x77, 0x3c, 0xb3, 0x69, 0x76, 0x75, 0xcb, 0x73, 0x95, 0x32, 0xce, 0x68, 0x68, 0x61, 0x74, + 0x25, 0xb8, 0x16, 0xa1, 0x22, 0x5f, 0x82, 0x61, 0xdc, 0x9a, 0xa2, 0xbf, 0xf6, 0xf0, 0xb6, 0x17, + 0x87, 0xcf, 0x85, 0xee, 0x81, 0xfc, 0xf4, 0x15, 0x6f, 0x80, 0xe3, 0x77, 0x87, 0x01, 0x47, 0xf2, + 0x05, 0x18, 0x9a, 0xb1, 0x0c, 0x64, 0x0e, 0xdb, 0x32, 0x57, 0x05, 0xf3, 0xf3, 0x21, 0x73, 0xbb, + 0x1b, 0xe3, 0xed, 0xb3, 0x4b, 0x1f, 0x65, 0x23, 0x1f, 0xdd, 0x28, 0x1b, 0xfd, 0x08, 0x8e, 0xc5, + 0xc7, 0x0e, 0xea, 0x58, 0x7c, 0x7c, 0x8f, 0xc7, 0xe2, 0xea, 0x07, 0x30, 0x32, 0xb5, 0x3c, 0x1b, + 0x8c, 0xde, 0x27, 0xa0, 0xb0, 0x2c, 0x3c, 0x15, 0x8a, 0xdc, 0x9e, 0xe9, 0x9a, 0x86, 0xc6, 0x60, + 0xe4, 0x2a, 0x94, 0xa7, 0xd1, 0xfd, 0x4d, 0xdc, 0x22, 0x16, 0xf9, 0xfa, 0xd7, 0x44, 0x18, 0x7a, + 0xc1, 0xfa, 0x68, 0xf2, 0x49, 0x18, 0x5a, 0x76, 0xec, 0x96, 0xa3, 0x77, 0xc4, 0x1a, 0x8c, 0xae, + 0x22, 0x5d, 0x0e, 0xd2, 0x7c, 0x9c, 0xfa, 0xd3, 0x39, 0xdf, 0x6c, 0x67, 0x25, 0xea, 0x3d, 0x3c, + 0x9a, 0xc7, 0xba, 0xcb, 0xbc, 0x84, 0xcb, 0x41, 0x9a, 0x8f, 0x23, 0x57, 0x61, 0x70, 0xc6, 0x71, + 0x6c, 0x47, 0xf6, 0x71, 0xa7, 0x0c, 0x20, 0x5f, 0xf7, 0x22, 0x05, 0x79, 0x0d, 0x46, 0xf8, 0x9c, + 0xc3, 0x4f, 0x34, 0x0b, 0xfd, 0x6e, 0x4a, 0x65, 0x4a, 0xf5, 0xdb, 0x05, 0xc9, 0x66, 0xe3, 0x12, + 0x3f, 0x86, 0xb7, 0x02, 0x2f, 0x43, 0x61, 0x6a, 0x79, 0x56, 0x4c, 0x80, 0x67, 0xfc, 0xa2, 0x92, + 0xaa, 0xc4, 0xca, 0x31, 0x6a, 0x72, 0x09, 0x8a, 0xcb, 0x4c, 0x7d, 0x4a, 0xa8, 0x1e, 0xe5, 0xad, + 0xcd, 0xc9, 0x62, 0x97, 0xe9, 0x0f, 0x42, 0x11, 0xcb, 0x36, 0x33, 0x7c, 0xc7, 0xc4, 0xb1, 0xe1, + 0x3e, 0xe6, 0x12, 0x14, 0x2b, 0x4e, 0xeb, 0x91, 0x98, 0xb5, 0x10, 0xab, 0x3b, 0xad, 0x47, 0x1a, + 0x42, 0xc9, 0x75, 0x00, 0x8d, 0x7a, 0x3d, 0xc7, 0xc2, 0xe7, 0x27, 0xc3, 0x78, 0xfe, 0x86, 0xb3, + 0xa1, 0x83, 0xd0, 0x46, 0xd3, 0x36, 0xa8, 0x26, 0x91, 0xa8, 0x7f, 0x25, 0xbc, 0xd8, 0xa9, 0x9a, + 0xee, 0xc3, 0x93, 0x2e, 0xdc, 0x45, 0x17, 0xea, 0xe2, 0x88, 0x33, 0xd9, 0x49, 0x93, 0x30, 0x38, + 0xdb, 0xd6, 0x5b, 0x2e, 0xf6, 0xa1, 0xf0, 0x25, 0x7b, 0xc0, 0x00, 0x1a, 0x87, 0xc7, 0xfa, 0xa9, + 0xbc, 0x7d, 0x3f, 0xfd, 0xec, 0x60, 0x30, 0xda, 0x16, 0xa9, 0xb7, 0x6e, 0x3b, 0x27, 0x5d, 0xb5, + 0xd3, 0xae, 0xba, 0x0c, 0x43, 0x75, 0xa7, 0x29, 0x1d, 0x5d, 0xe0, 0x7e, 0xc0, 0x75, 0x9a, 0xfc, + 0xd8, 0xc2, 0x47, 0x32, 0xba, 0xaa, 0xeb, 0x21, 0xdd, 0x50, 0x48, 0x67, 0xb8, 0x9e, 0xa0, 0x13, + 0x48, 0x41, 0xb7, 0x6c, 0x3b, 0x9e, 0xe8, 0xb8, 0x80, 0xae, 0x6b, 0x3b, 0x9e, 0xe6, 0x23, 0xc9, + 0xa7, 0x01, 0x56, 0xa6, 0x97, 0x7d, 0x67, 0xfb, 0xe1, 0xd0, 0x17, 0x50, 0x78, 0xd9, 0x6b, 0x12, + 0x9a, 0xac, 0xc0, 0xf0, 0x52, 0x97, 0x3a, 0x7c, 0x2b, 0xc4, 0x1f, 0x94, 0x7c, 0x2a, 0x26, 0x5a, + 0xd1, 0xef, 0xd7, 0xc4, 0xff, 0x01, 0x39, 0x5f, 0x5f, 0x6c, 0xff, 0xa7, 0x16, 0x32, 0x22, 0xaf, + 0x41, 0xa9, 0xc2, 0xed, 0xbc, 0x11, 0x64, 0x19, 0x88, 0x0c, 0xb7, 0xa0, 0x1c, 0xc5, 0xf7, 0xec, + 0x3a, 0xfe, 0xad, 0x09, 0x72, 0xf5, 0x2a, 0x4c, 0xc4, 0xab, 0x21, 0x23, 0x30, 0x34, 0xbd, 0xb4, + 0xb8, 0x38, 0x33, 0xbd, 0x32, 0x31, 0x40, 0xca, 0x50, 0xac, 0xcf, 0x2c, 0x56, 0x27, 0x72, 0xea, + 0xaf, 0x48, 0x33, 0x08, 0x53, 0xad, 0x93, 0xab, 0xe1, 0x7d, 0xdd, 0xb7, 0x4c, 0xe0, 0x7d, 0x28, + 0x9e, 0x18, 0x74, 0x4c, 0xcf, 0xa3, 0x86, 0x58, 0x25, 0xf0, 0xbe, 0xd0, 0x7b, 0xac, 0x25, 0xf0, + 0xe4, 0x05, 0x18, 0x43, 0x98, 0xb8, 0x22, 0xe4, 0xfb, 0x63, 0x51, 0xc0, 0x79, 0xac, 0x45, 0x91, + 0xea, 0xef, 0x87, 0xb7, 0xc3, 0xf3, 0x54, 0x3f, 0xaa, 0x37, 0x8a, 0x1f, 0x93, 0xfe, 0x52, 0xff, + 0x55, 0x91, 0x3f, 0x01, 0xe1, 0xef, 0x05, 0x0f, 0x43, 0x94, 0xe1, 0x91, 0x6e, 0x61, 0x17, 0x47, + 0xba, 0x2f, 0x40, 0x69, 0x81, 0x7a, 0x6b, 0xb6, 0xef, 0xf8, 0x85, 0x1e, 0x7a, 0x1d, 0x84, 0xc8, + 0x1e, 0x7a, 0x9c, 0x86, 0x3c, 0x04, 0xe2, 0x3f, 0x06, 0x0c, 0x1c, 0xb1, 0xfd, 0x23, 0xe4, 0x0b, + 0x89, 0x7d, 0x4a, 0x1d, 0x5f, 0x02, 0xa3, 0x8f, 0xfd, 0xd9, 0xc0, 0xd1, 0x5b, 0xf2, 0xc4, 0xfa, + 0x97, 0x9b, 0x93, 0x25, 0x4e, 0xa3, 0xa5, 0xb0, 0x25, 0xef, 0xc2, 0xf0, 0xc2, 0x6c, 0x45, 0x3c, + 0x0c, 0xe4, 0x5e, 0x11, 0x4f, 0x04, 0x52, 0xf4, 0x11, 0x81, 0x48, 0xf0, 0xbd, 0x4d, 0xe7, 0x81, + 0x9e, 0x7c, 0x17, 0x18, 0x72, 0x61, 0xda, 0xc2, 0x5f, 0xee, 0x88, 0xd3, 0x85, 0x40, 0x5b, 0xa2, + 0xef, 0x79, 0xe2, 0xb2, 0xe2, 0xd8, 0x98, 0xb6, 0x94, 0xf7, 0x31, 0xba, 0x97, 0xe0, 0x74, 0xa5, + 0xdb, 0x6d, 0x9b, 0xd4, 0x40, 0x7d, 0xd1, 0x7a, 0x6d, 0xea, 0x0a, 0x97, 0x1f, 0x7c, 0x0c, 0xa2, + 0x73, 0x64, 0x03, 0x9f, 0xa3, 0x36, 0x9c, 0x5e, 0xd4, 0x3f, 0x33, 0x59, 0x56, 0xfd, 0x33, 0x79, + 0x38, 0x3f, 0xed, 0x50, 0xdd, 0xa3, 0x0b, 0xb3, 0x95, 0x4a, 0x0f, 0x7d, 0xe4, 0xda, 0x6d, 0x6a, + 0xb5, 0x0e, 0x67, 0x58, 0xbf, 0x09, 0xe3, 0x41, 0x03, 0xea, 0x4d, 0xbb, 0x4b, 0xe5, 0x87, 0x55, + 0x4d, 0x1f, 0xd3, 0x70, 0x19, 0x4a, 0x8b, 0x91, 0x92, 0x3b, 0x70, 0x26, 0x80, 0x54, 0xda, 0x6d, + 0x7b, 0x5d, 0xa3, 0x3d, 0x97, 0x3b, 0xc6, 0x96, 0xb9, 0x63, 0x6c, 0xc8, 0x41, 0x67, 0xf8, 0x86, + 0xc3, 0x08, 0xb4, 0xb4, 0x52, 0xea, 0x2f, 0x14, 0xe0, 0xc2, 0x3d, 0xbd, 0x6d, 0x1a, 0xa1, 0x68, + 0x34, 0xea, 0x76, 0x6d, 0xcb, 0xa5, 0x47, 0x68, 0x94, 0x46, 0x86, 0x42, 0xf1, 0x40, 0x86, 0x42, + 0xb2, 0x8b, 0x06, 0xf7, 0xdd, 0x45, 0xa5, 0x3d, 0x75, 0xd1, 0xff, 0x9a, 0x83, 0x09, 0xdf, 0xf1, + 0x5f, 0x7e, 0xc4, 0x2d, 0x79, 0xa5, 0xe3, 0x11, 0x62, 0xcc, 0x0f, 0x1a, 0xf1, 0xa4, 0x0e, 0x43, + 0x33, 0x8f, 0xbb, 0xa6, 0x43, 0xdd, 0x1d, 0x38, 0x71, 0x3f, 0x25, 0x8e, 0x4b, 0x4e, 0x53, 0x5e, + 0x24, 0x71, 0x52, 0xc2, 0xc1, 0xf8, 0x9c, 0x8f, 0x3f, 0x7d, 0x98, 0xf2, 0x5f, 0xa6, 0xf3, 0xe7, + 0x7c, 0xe2, 0x89, 0x44, 0xe4, 0x7d, 0x66, 0x48, 0x4a, 0x9e, 0x83, 0xc2, 0xca, 0xca, 0xbc, 0x98, + 0x49, 0x31, 0x22, 0x80, 0xe7, 0xc9, 0xef, 0x15, 0x19, 0x56, 0xfd, 0xa7, 0x79, 0x00, 0xa6, 0x0a, + 0x7c, 0xb8, 0x1e, 0x8a, 0x12, 0x4e, 0x41, 0xd9, 0x17, 0xb8, 0x50, 0xc3, 0xc0, 0x6b, 0x3f, 0xde, + 0x11, 0xf1, 0xba, 0x83, 0x17, 0x1a, 0x93, 0xbe, 0x23, 0x39, 0xbf, 0x07, 0xc0, 0x9d, 0x0d, 0x3a, + 0x92, 0xfb, 0xee, 0xe3, 0x9f, 0x86, 0x61, 0x31, 0xe3, 0xd9, 0x91, 0xf3, 0xff, 0xa6, 0x0f, 0xd4, + 0x42, 0x7c, 0x6c, 0x6a, 0x2d, 0xed, 0x63, 0x21, 0xf6, 0xc5, 0xcb, 0x7b, 0xe5, 0x44, 0xbc, 0x07, + 0x2c, 0xde, 0xaf, 0x09, 0xf1, 0xf2, 0x17, 0x3c, 0x47, 0x56, 0xbc, 0x07, 0x76, 0xf6, 0xad, 0xfe, + 0xa3, 0x1c, 0x10, 0xd6, 0xac, 0x65, 0xdd, 0x75, 0xd7, 0x6d, 0xc7, 0xe0, 0xce, 0xe9, 0x87, 0x22, + 0x98, 0x83, 0xbb, 0xaf, 0xfc, 0x76, 0x19, 0xce, 0x44, 0x1c, 0x7f, 0x8f, 0xf8, 0x64, 0x75, 0x35, + 0x3a, 0x9a, 0xfa, 0xbd, 0x7a, 0xf9, 0x84, 0x7c, 0x21, 0x3a, 0x18, 0x79, 0x80, 0x26, 0xdd, 0x84, + 0xbe, 0x08, 0xa3, 0xe2, 0x07, 0x5b, 0xa1, 0xfd, 0x9b, 0x2e, 0x1c, 0xa5, 0x2e, 0x03, 0x68, 0x11, + 0x34, 0x79, 0x05, 0x86, 0xd9, 0x80, 0x69, 0x61, 0xf0, 0x90, 0xa1, 0xf0, 0x45, 0x89, 0xe1, 0x03, + 0xe5, 0xf5, 0x24, 0xa0, 0x94, 0xde, 0x11, 0x95, 0x77, 0xf0, 0x8e, 0xe8, 0xcb, 0x30, 0x52, 0xb1, + 0x2c, 0xdb, 0xc3, 0x4d, 0xba, 0x2b, 0xae, 0x26, 0x32, 0xad, 0xf2, 0xe7, 0xf0, 0x71, 0x7c, 0x48, + 0x9f, 0x6a, 0x96, 0xcb, 0x0c, 0xc9, 0x0d, 0xff, 0x55, 0x0c, 0x75, 0x84, 0x57, 0x39, 0x5e, 0xcf, + 0x38, 0x02, 0x96, 0x7c, 0x14, 0x83, 0x9d, 0x37, 0xb6, 0xec, 0xd8, 0x5d, 0xdb, 0xa5, 0x06, 0x17, + 0xd4, 0x48, 0x18, 0x6a, 0xa0, 0x2b, 0x10, 0xf8, 0x8e, 0x2d, 0x12, 0xc8, 0x23, 0x52, 0x84, 0x3c, + 0x80, 0xb3, 0xfe, 0x45, 0x71, 0xf0, 0x62, 0xb0, 0x56, 0x75, 0x95, 0x51, 0x7c, 0x95, 0x44, 0xe2, + 0xca, 0x50, 0xab, 0x4e, 0x3d, 0xed, 0x5f, 0x8b, 0xf8, 0x4f, 0x0e, 0x1b, 0xa6, 0x21, 0x77, 0x75, + 0x2a, 0x3f, 0xf2, 0x43, 0x30, 0xb2, 0xa0, 0x3f, 0xae, 0xf6, 0xc4, 0xd9, 0xcb, 0xd8, 0xce, 0x6f, + 0x5f, 0x3a, 0xfa, 0xe3, 0x86, 0x21, 0xca, 0xc5, 0x6c, 0x0a, 0x99, 0x25, 0x69, 0xc0, 0xf9, 0x65, + 0xc7, 0xee, 0xd8, 0x1e, 0x35, 0x62, 0x8f, 0xef, 0x4e, 0x85, 0xaf, 0x75, 0xbb, 0x82, 0xa2, 0xd1, + 0xe7, 0x15, 0x5e, 0x06, 0x1b, 0xd2, 0x81, 0x53, 0x15, 0xd7, 0xed, 0x75, 0x68, 0x78, 0x43, 0x35, + 0xb1, 0xed, 0x67, 0x7c, 0x4a, 0x78, 0x2d, 0x3f, 0xa9, 0x63, 0x51, 0x7e, 0x41, 0xd5, 0xf0, 0x4c, + 0xb9, 0x46, 0xfc, 0x96, 0x38, 0xef, 0xdb, 0xc5, 0xf2, 0xf8, 0xc4, 0x29, 0xed, 0x42, 0xb2, 0x31, + 0x2b, 0xa6, 0xd7, 0xa6, 0xea, 0xb7, 0x72, 0x00, 0xa1, 0x80, 0xc9, 0x8b, 0xd1, 0x08, 0x45, 0xb9, + 0xf0, 0xa2, 0x43, 0x44, 0x2f, 0x88, 0x84, 0x24, 0x22, 0x97, 0xa0, 0x88, 0x11, 0x2e, 0xf2, 0xe1, + 0xc1, 0xea, 0x43, 0xd3, 0x32, 0x34, 0x84, 0x32, 0xac, 0xf4, 0x14, 0x1d, 0xb1, 0x78, 0xa9, 0xcf, + 0xad, 0xc2, 0x2a, 0x9c, 0xaa, 0xf7, 0x56, 0xfd, 0xba, 0xa5, 0x77, 0x75, 0x18, 0x68, 0xc3, 0xed, + 0xad, 0x06, 0x8f, 0x51, 0x23, 0x61, 0x4c, 0xa2, 0x45, 0xd4, 0x5f, 0xcb, 0xc5, 0x66, 0xc1, 0x43, + 0x5c, 0xf4, 0x3e, 0x91, 0xf4, 0xd3, 0x48, 0x4e, 0x4b, 0xea, 0x5f, 0xc8, 0xc3, 0xc8, 0xb2, 0xed, + 0x78, 0x22, 0x64, 0xc8, 0xd1, 0x5e, 0x85, 0xa4, 0xbd, 0x52, 0x71, 0x17, 0x7b, 0xa5, 0x4b, 0x50, + 0x94, 0x5c, 0x94, 0xf9, 0xbd, 0x88, 0x61, 0x38, 0x1a, 0x42, 0xd5, 0x1f, 0xc9, 0x03, 0x7c, 0xe1, + 0xa5, 0x97, 0x8e, 0xb1, 0x80, 0xd4, 0x9f, 0xcf, 0xc1, 0x29, 0x71, 0x51, 0x27, 0xc5, 0xfa, 0x1a, + 0xf2, 0xaf, 0x58, 0xe5, 0x71, 0xc9, 0x41, 0x9a, 0x8f, 0x63, 0x4b, 0xc0, 0xcc, 0x63, 0xd3, 0xc3, + 0xbb, 0x0a, 0x29, 0xd8, 0x17, 0x15, 0x30, 0x79, 0x09, 0xf0, 0xe9, 0xc8, 0x8b, 0xfe, 0x15, 0x64, + 0x21, 0x5c, 0xf7, 0x58, 0x81, 0x99, 0xd4, 0x6b, 0x48, 0xf5, 0x37, 0x8b, 0x50, 0x9c, 0x79, 0x4c, + 0x9b, 0x47, 0xbc, 0x6b, 0xa4, 0x83, 0xcd, 0xe2, 0x3e, 0x0f, 0x36, 0xf7, 0xe2, 0x53, 0xf1, 0x4e, + 0xd8, 0x9f, 0xa5, 0x68, 0xf5, 0xb1, 0x9e, 0x8f, 0x57, 0xef, 0xf7, 0xf4, 0xd1, 0x73, 0xc9, 0xf9, + 0x2f, 0x0a, 0x50, 0xa8, 0x4f, 0x2f, 0x9f, 0xe8, 0xcd, 0xa1, 0xea, 0x4d, 0xff, 0x3b, 0x6b, 0x35, + 0xb8, 0x86, 0x2a, 0x87, 0x5e, 0xa2, 0xb1, 0x1b, 0xa7, 0x3f, 0x2e, 0xc0, 0x78, 0x7d, 0x76, 0x65, + 0x59, 0x3a, 0x09, 0xbe, 0xc3, 0x3d, 0xf9, 0xd0, 0xa7, 0x8c, 0x77, 0xe9, 0xa5, 0x84, 0x3d, 0x73, + 0xb7, 0x66, 0x79, 0xaf, 0xde, 0xbc, 0xa7, 0xb7, 0x7b, 0x14, 0x8f, 0x5e, 0xb8, 0xdf, 0xaf, 0x6b, + 0x7e, 0x40, 0x7f, 0x01, 0x1f, 0xfe, 0xfb, 0x0c, 0xc8, 0x9b, 0x50, 0xb8, 0x2b, 0x3c, 0x32, 0xb2, + 0xf8, 0xbc, 0x7c, 0x83, 0xf3, 0x61, 0x93, 0x60, 0xa1, 0x67, 0x1a, 0xc8, 0x81, 0x95, 0x62, 0x85, + 0x6f, 0x89, 0x05, 0x78, 0x47, 0x85, 0x5b, 0x7e, 0xe1, 0x5b, 0xb5, 0x2a, 0xa9, 0xc3, 0xc8, 0x32, + 0x75, 0x3a, 0x26, 0x76, 0x94, 0x3f, 0x67, 0xf7, 0x67, 0xc2, 0x76, 0x2a, 0x23, 0xdd, 0xb0, 0x10, + 0x32, 0x93, 0xb9, 0x90, 0xf7, 0x00, 0xb8, 0x8d, 0xb2, 0xc3, 0xf8, 0x91, 0x4f, 0xa1, 0xdd, 0xcf, + 0x4d, 0xcb, 0x14, 0x1b, 0x4f, 0x62, 0x46, 0x1e, 0xc2, 0xc4, 0x82, 0x6d, 0x98, 0x0f, 0x4c, 0xee, + 0x7a, 0x89, 0x15, 0x94, 0xb6, 0x77, 0x78, 0x62, 0xa6, 0x64, 0x47, 0x2a, 0x97, 0x56, 0x4d, 0x82, + 0xb1, 0xfa, 0xb7, 0x07, 0xa1, 0xc8, 0xba, 0xfd, 0x64, 0xfc, 0xee, 0x67, 0xfc, 0x56, 0x60, 0xe2, + 0xbe, 0xed, 0x3c, 0x34, 0xad, 0x56, 0xe0, 0x15, 0x2f, 0xf6, 0xa6, 0xe8, 0xc9, 0xb3, 0xce, 0x71, + 0x8d, 0xc0, 0x81, 0x5e, 0x4b, 0x90, 0x6f, 0x33, 0x82, 0x5f, 0x07, 0xe0, 0x6f, 0xdd, 0x91, 0xa6, + 0x1c, 0x06, 0xab, 0xe0, 0x2f, 0xe1, 0xd1, 0xd1, 0x5e, 0x0e, 0x56, 0x11, 0x12, 0xb3, 0x4d, 0x38, + 0xf7, 0x85, 0x18, 0x46, 0xbf, 0x7b, 0xdc, 0x84, 0xa3, 0x2f, 0x84, 0x6c, 0x04, 0x70, 0xaf, 0x88, + 0x65, 0x00, 0xe9, 0x7e, 0x09, 0x62, 0x82, 0x88, 0x4c, 0x0e, 0x22, 0x3c, 0x5c, 0xca, 0xf5, 0x92, + 0x26, 0xf1, 0x20, 0xaf, 0xc6, 0x2e, 0xc0, 0x49, 0x84, 0x5b, 0xe6, 0xfd, 0x77, 0xe8, 0x40, 0x35, + 0xba, 0x9d, 0x03, 0x95, 0xfa, 0xd7, 0x0a, 0x30, 0xc2, 0xb8, 0xd5, 0x7b, 0x9d, 0x8e, 0xee, 0x6c, + 0x9c, 0x28, 0xf2, 0x7e, 0x14, 0xb9, 0x01, 0xa7, 0x65, 0x87, 0x79, 0x66, 0xba, 0xfa, 0xa1, 0x86, + 0x82, 0xe3, 0x9f, 0x38, 0x01, 0xb7, 0x2d, 0x71, 0xde, 0xf7, 0x04, 0x18, 0xcf, 0x16, 0x5c, 0x2d, + 0xc9, 0x4b, 0xfd, 0x99, 0x1c, 0x4c, 0xc4, 0xa1, 0x81, 0xee, 0xe7, 0x52, 0x75, 0xff, 0x05, 0x18, + 0x16, 0x57, 0xe8, 0xba, 0x21, 0x3c, 0xfa, 0xc6, 0xb7, 0x36, 0x27, 0x01, 0xdf, 0x2f, 0x37, 0x1c, + 0xaa, 0x1b, 0x5a, 0x48, 0x40, 0x5e, 0x81, 0x51, 0xfc, 0x71, 0xdf, 0x31, 0x3d, 0x8f, 0xf2, 0xce, + 0x28, 0xf2, 0x5b, 0x01, 0x5e, 0x60, 0x9d, 0x23, 0xb4, 0x08, 0x99, 0xfa, 0x61, 0x1e, 0x86, 0xeb, + 0xbd, 0x55, 0x77, 0xc3, 0xf5, 0x68, 0xe7, 0x88, 0xeb, 0x90, 0xbf, 0x49, 0x2f, 0xa6, 0x6e, 0xd2, + 0x9f, 0xf3, 0x87, 0x96, 0x74, 0x7a, 0x1d, 0x6c, 0x0c, 0xfc, 0x41, 0xf5, 0x37, 0xf3, 0x30, 0xc1, + 0xaf, 0x5f, 0xab, 0xa6, 0xdb, 0x3c, 0x80, 0x27, 0x21, 0x87, 0x2f, 0x95, 0xfd, 0xb9, 0x2c, 0xec, + 0xe0, 0xa1, 0x8d, 0xfa, 0x95, 0x3c, 0x8c, 0x54, 0x7a, 0xde, 0x5a, 0xc5, 0xc3, 0x19, 0xea, 0x58, + 0xee, 0x72, 0xff, 0x5e, 0x0e, 0x4e, 0xb1, 0x86, 0xac, 0xd8, 0x0f, 0xa9, 0x75, 0x00, 0xc7, 0xd7, + 0xf2, 0x31, 0x74, 0x7e, 0x8f, 0xc7, 0xd0, 0xbe, 0x2c, 0x0b, 0xbb, 0x93, 0x25, 0x5e, 0xba, 0x68, + 0x76, 0x9b, 0x1e, 0xed, 0xcf, 0x38, 0xc0, 0x4b, 0x17, 0x5f, 0x20, 0x07, 0x70, 0xc9, 0xf7, 0xfd, + 0x25, 0x90, 0x03, 0x38, 0xa1, 0xfc, 0xfe, 0x10, 0xc8, 0xb7, 0x73, 0x30, 0x3c, 0x65, 0x7b, 0x47, + 0x7c, 0xe0, 0x8b, 0xaf, 0x38, 0xda, 0x6a, 0xee, 0x7f, 0xc5, 0xd1, 0xd6, 0x4d, 0xf5, 0xe7, 0xf2, + 0x70, 0x56, 0x44, 0x98, 0x17, 0xa7, 0x58, 0x27, 0xd3, 0xb1, 0x18, 0x6c, 0x49, 0xd1, 0x9c, 0xcc, + 0x43, 0x42, 0x34, 0xbf, 0x54, 0x80, 0xb3, 0x18, 0x10, 0x97, 0xed, 0x89, 0xbe, 0x0f, 0x6c, 0x11, + 0xd2, 0x8c, 0x5e, 0xa5, 0x2f, 0xa4, 0x5c, 0xa5, 0xff, 0xcb, 0xcd, 0xc9, 0x57, 0x5b, 0xa6, 0xb7, + 0xd6, 0x5b, 0xbd, 0xd6, 0xb4, 0x3b, 0xd7, 0x5b, 0x8e, 0xfe, 0xc8, 0xe4, 0x97, 0xc8, 0x7a, 0xfb, + 0x7a, 0x90, 0xac, 0x45, 0xef, 0x9a, 0x22, 0x8d, 0x4b, 0x1d, 0xf7, 0x3a, 0x8c, 0xab, 0x7f, 0x09, + 0xef, 0x02, 0xdc, 0xb6, 0x4d, 0x4b, 0x78, 0xa6, 0x72, 0x43, 0xb7, 0xbe, 0xb5, 0x39, 0x79, 0xee, + 0x7d, 0xdb, 0xb4, 0x1a, 0x71, 0xf7, 0xd4, 0xdd, 0xd6, 0x17, 0xb2, 0xd6, 0xa4, 0x6a, 0xd4, 0xff, + 0x26, 0x07, 0x4f, 0x44, 0xb5, 0xf8, 0xfb, 0xc1, 0x76, 0xfc, 0xb3, 0x79, 0x38, 0x77, 0x0b, 0x85, + 0x13, 0xb8, 0x03, 0x9d, 0xcc, 0x5b, 0x62, 0x70, 0xa6, 0xc8, 0xe6, 0xc4, 0xa2, 0xcc, 0x96, 0xcd, + 0xc9, 0xa4, 0x2e, 0x64, 0xf3, 0x5f, 0xe7, 0xe0, 0xcc, 0x52, 0xad, 0x3a, 0xfd, 0x7d, 0x32, 0xa2, + 0x92, 0xdf, 0x73, 0xc4, 0x0d, 0xce, 0xc4, 0xf7, 0x1c, 0x71, 0xd3, 0xf3, 0x1b, 0x79, 0x38, 0x53, + 0xaf, 0x2c, 0xcc, 0x7f, 0xbf, 0xcc, 0xe0, 0xd3, 0xb2, 0xef, 0xaa, 0x7f, 0x08, 0x26, 0x6c, 0x01, + 0xf9, 0x33, 0xef, 0xdd, 0xc8, 0xf6, 0x69, 0x4d, 0x0a, 0xe5, 0x88, 0x4f, 0xdd, 0x07, 0x22, 0x14, + 0xa6, 0xf9, 0x11, 0xea, 0x23, 0xae, 0xf9, 0xff, 0x79, 0x09, 0x46, 0xee, 0xf4, 0x56, 0xa9, 0x70, + 0x71, 0x3a, 0xd6, 0x27, 0xbf, 0x37, 0x60, 0x44, 0x88, 0x01, 0xef, 0x28, 0xa4, 0x10, 0x8c, 0x22, + 0xa4, 0x0e, 0x8f, 0x72, 0x25, 0x13, 0x91, 0x4b, 0x50, 0xbc, 0x47, 0x9d, 0x55, 0xf9, 0x75, 0xf2, + 0x23, 0xea, 0xac, 0x6a, 0x08, 0x25, 0xf3, 0xe1, 0xc3, 0x8b, 0xca, 0x72, 0x0d, 0xd3, 0xf1, 0x88, + 0x6b, 0x3f, 0xcc, 0x2f, 0x14, 0x78, 0x4f, 0xea, 0x5d, 0x93, 0x27, 0xf2, 0x91, 0x23, 0x23, 0xc4, + 0x4b, 0x92, 0x45, 0x38, 0x2d, 0xbb, 0xcf, 0xf1, 0x5c, 0x34, 0xe5, 0x14, 0x76, 0x69, 0x59, 0x68, + 0x92, 0x45, 0xc9, 0x3b, 0x30, 0xea, 0x03, 0xd1, 0x11, 0x70, 0x38, 0x4c, 0x80, 0x10, 0xb0, 0x8a, + 0x25, 0xba, 0x8a, 0x14, 0x90, 0x19, 0xe0, 0x35, 0x04, 0xa4, 0x30, 0x88, 0x39, 0x56, 0x46, 0x0a, + 0x90, 0x57, 0x90, 0x01, 0x3e, 0x16, 0x42, 0x97, 0xa7, 0x11, 0x7c, 0xba, 0x8b, 0x57, 0x38, 0x8e, + 0x80, 0xf3, 0x07, 0xda, 0x11, 0x32, 0xb2, 0x04, 0x10, 0xba, 0xa6, 0x88, 0x30, 0x18, 0xbb, 0x76, + 0x9a, 0x91, 0x58, 0xc8, 0x77, 0x71, 0x63, 0x7b, 0xb9, 0x8b, 0x53, 0xff, 0x61, 0x1e, 0x46, 0x2a, + 0xdd, 0x6e, 0x30, 0x14, 0x5e, 0x84, 0x52, 0xa5, 0xdb, 0xbd, 0xab, 0xd5, 0xe4, 0x80, 0xf8, 0x7a, + 0xb7, 0xdb, 0xe8, 0x39, 0xa6, 0xec, 0x59, 0xcc, 0x89, 0xc8, 0x34, 0x8c, 0x55, 0xba, 0xdd, 0xe5, + 0xde, 0x6a, 0xdb, 0x6c, 0x4a, 0xf9, 0xb5, 0x78, 0x06, 0xc2, 0x6e, 0xb7, 0xd1, 0x45, 0x4c, 0x3c, + 0xc9, 0x5a, 0xb4, 0x0c, 0xf9, 0x32, 0x06, 0x8f, 0x12, 0xe9, 0x9d, 0x78, 0x02, 0x19, 0x35, 0x08, + 0x85, 0x1f, 0xb6, 0xed, 0x5a, 0x40, 0xc4, 0x53, 0x06, 0x5c, 0xf2, 0x13, 0x2f, 0xb0, 0x8a, 0x12, + 0x69, 0x9c, 0x42, 0x96, 0xe4, 0x33, 0x30, 0x54, 0xe9, 0x76, 0xa5, 0xfb, 0x26, 0x74, 0x4d, 0x63, + 0xa5, 0xe2, 0x19, 0xf4, 0x04, 0xd9, 0xc5, 0xb7, 0x60, 0x3c, 0x5a, 0xd9, 0xae, 0x52, 0x0e, 0x7c, + 0x2f, 0x87, 0x1f, 0x74, 0xc4, 0x3d, 0xe3, 0x5f, 0x86, 0x42, 0xa5, 0xdb, 0x15, 0xf3, 0xd1, 0x99, + 0x94, 0xfe, 0x88, 0x3f, 0xa4, 0xaf, 0x74, 0xbb, 0xfe, 0xa7, 0x1f, 0xf1, 0x27, 0x36, 0x7b, 0xfa, + 0xf4, 0x6f, 0xf3, 0x4f, 0x3f, 0xda, 0xcf, 0x5f, 0xd4, 0xdf, 0x2c, 0xc0, 0xa9, 0x4a, 0xb7, 0x7b, + 0x92, 0xaa, 0xe0, 0xa0, 0x9e, 0xeb, 0xbf, 0x04, 0x20, 0x4d, 0x8f, 0x43, 0xc1, 0x03, 0xc0, 0x11, + 0x69, 0x6a, 0x54, 0x72, 0x9a, 0x44, 0xe4, 0xab, 0x5f, 0x79, 0x57, 0xea, 0xf7, 0x95, 0x02, 0x4e, + 0xc5, 0x47, 0x3d, 0xf4, 0xd8, 0xc7, 0xa5, 0xdb, 0x44, 0x1f, 0x94, 0x76, 0xd5, 0x07, 0x7f, 0x37, + 0x32, 0x78, 0x30, 0xf4, 0xfd, 0x49, 0x2f, 0x0c, 0xee, 0xcb, 0x2c, 0x1e, 0x97, 0x85, 0x29, 0xe2, + 0x21, 0xf9, 0xe9, 0xb8, 0x44, 0x74, 0xae, 0x26, 0x43, 0x35, 0x4c, 0x43, 0x8b, 0xd1, 0xfa, 0x7d, + 0x38, 0xb4, 0xab, 0x3e, 0xdc, 0xcc, 0xe3, 0x0b, 0xfc, 0x20, 0xba, 0xd7, 0xfe, 0x77, 0x17, 0xd7, + 0x01, 0xb8, 0xe7, 0x41, 0xe0, 0x1c, 0x3f, 0xc6, 0x03, 0xf9, 0xf0, 0x2c, 0x5d, 0x22, 0x90, 0x4f, + 0x48, 0x12, 0xf8, 0x1a, 0x15, 0x52, 0x7d, 0x8d, 0xae, 0x42, 0x59, 0xd3, 0xd7, 0xdf, 0xed, 0x51, + 0x67, 0x43, 0x98, 0x33, 0x3c, 0x78, 0xa6, 0xbe, 0xde, 0xf8, 0x61, 0x06, 0xd4, 0x02, 0x34, 0x51, + 0x83, 0x10, 0x0e, 0x92, 0x47, 0x08, 0x3f, 0x23, 0x0f, 0x02, 0x37, 0xec, 0x45, 0xd1, 0xc9, 0x1b, + 0x50, 0xa8, 0xdc, 0xaf, 0x0b, 0xc9, 0x06, 0x5d, 0x5b, 0xb9, 0x5f, 0x17, 0xf2, 0xca, 0x2c, 0x7b, + 0xbf, 0xae, 0x7e, 0x25, 0x0f, 0x24, 0x49, 0x49, 0x5e, 0x85, 0x61, 0x84, 0xb6, 0x98, 0xce, 0xc8, + 0xe9, 0x5d, 0xd7, 0xdd, 0x86, 0x83, 0xd0, 0x88, 0x71, 0xe7, 0x93, 0x92, 0xd7, 0x31, 0x81, 0xb6, + 0x48, 0x30, 0x18, 0x49, 0xef, 0xba, 0xee, 0xfa, 0x29, 0xa7, 0x63, 0xf9, 0xb3, 0x05, 0x31, 0xda, + 0x85, 0xf7, 0xeb, 0x73, 0xb6, 0xeb, 0x09, 0x51, 0x73, 0xbb, 0x70, 0xdd, 0xc5, 0xbc, 0xc2, 0x11, + 0xbb, 0x90, 0x93, 0x61, 0x6e, 0xb4, 0xfb, 0x75, 0xfe, 0xd8, 0xc9, 0xd0, 0xec, 0xb6, 0x6f, 0x50, + 0xf2, 0xdc, 0x68, 0xeb, 0x6e, 0x83, 0x3f, 0x94, 0x32, 0x30, 0x73, 0x77, 0x24, 0x37, 0x5a, 0xa4, + 0x94, 0xfa, 0xd5, 0x32, 0x4c, 0x54, 0x75, 0x4f, 0x5f, 0xd5, 0x5d, 0x2a, 0xed, 0xa6, 0x4f, 0xf9, + 0x30, 0xff, 0x73, 0x24, 0x39, 0x18, 0xab, 0x29, 0x5f, 0x13, 0x2f, 0x40, 0xde, 0x0c, 0xf9, 0x06, + 0x99, 0x6b, 0xe5, 0x54, 0x78, 0xab, 0x8d, 0xae, 0x00, 0x6b, 0x09, 0x42, 0xf2, 0x02, 0x8c, 0xf8, + 0x30, 0xb6, 0x01, 0x28, 0x84, 0x3a, 0x63, 0xac, 0x32, 0xfb, 0x5f, 0x93, 0xd1, 0xe4, 0x75, 0x18, + 0xf5, 0x7f, 0x4a, 0xa6, 0x35, 0xcf, 0xeb, 0xb7, 0x9a, 0xd8, 0x3d, 0xc9, 0xa4, 0x72, 0x51, 0x9c, + 0xdf, 0x06, 0x23, 0x45, 0x63, 0xa9, 0xf3, 0x22, 0xa4, 0xe4, 0x87, 0x61, 0xdc, 0xff, 0x2d, 0x36, + 0x0c, 0xdc, 0xf5, 0xef, 0x85, 0x20, 0x31, 0x78, 0x4c, 0xac, 0xd7, 0xa2, 0xe4, 0x7c, 0xeb, 0xf0, + 0xa4, 0x9f, 0x0d, 0xce, 0x58, 0x4d, 0xee, 0x1c, 0x62, 0x15, 0x90, 0x1a, 0x9c, 0xf6, 0x21, 0xa1, + 0x86, 0x0e, 0x85, 0x3b, 0x46, 0x63, 0xb5, 0x91, 0xaa, 0xa4, 0xc9, 0x52, 0xa4, 0x0d, 0x97, 0x22, + 0x40, 0xc3, 0x5d, 0x33, 0x1f, 0x78, 0x62, 0xbb, 0x27, 0x22, 0x59, 0x8b, 0xf4, 0x9f, 0x01, 0x57, + 0x4e, 0xe3, 0xe7, 0xf1, 0x8d, 0xe6, 0x18, 0xeb, 0xcb, 0x8d, 0xd4, 0xe1, 0xac, 0x8f, 0xbf, 0x35, + 0xbd, 0xbc, 0xec, 0xd8, 0xef, 0xd3, 0xa6, 0x57, 0xab, 0x8a, 0xed, 0x32, 0x46, 0x38, 0x34, 0x56, + 0x1b, 0xad, 0x66, 0x97, 0x29, 0x05, 0xc3, 0x45, 0x99, 0xa7, 0x16, 0x26, 0xf7, 0xe0, 0x9c, 0x04, + 0x97, 0x92, 0x8c, 0x43, 0xb8, 0x9f, 0x17, 0x5c, 0xd3, 0xf3, 0x8c, 0xa7, 0x17, 0x27, 0x6f, 0xc1, + 0x98, 0x8f, 0xe0, 0xb7, 0x88, 0x23, 0x78, 0x8b, 0x88, 0x43, 0xd2, 0x58, 0x6d, 0xc4, 0xdf, 0xe4, + 0x46, 0x89, 0x65, 0x8d, 0x5a, 0xd9, 0xe8, 0x52, 0xe1, 0x93, 0xeb, 0x6b, 0x94, 0xb7, 0xd1, 0x4d, + 0x55, 0x46, 0x46, 0x4a, 0xde, 0x09, 0x35, 0x6a, 0xc9, 0x31, 0x5b, 0x26, 0xdf, 0x49, 0xfb, 0xcf, + 0x70, 0x57, 0x1b, 0x36, 0x02, 0xd3, 0xf4, 0x83, 0x93, 0x5f, 0xac, 0xc0, 0x99, 0x14, 0x1d, 0xdb, + 0xd5, 0x8e, 0xf1, 0xc3, 0x7c, 0xd8, 0x88, 0x23, 0xbe, 0x6d, 0x9c, 0x82, 0xb2, 0xff, 0x25, 0xc2, + 0x78, 0x50, 0xb2, 0x86, 0x66, 0x9c, 0x87, 0x8f, 0x8f, 0x88, 0xe3, 0x88, 0x6f, 0x25, 0x0f, 0x42, + 0x1c, 0xdf, 0xc9, 0x85, 0xe2, 0x38, 0xe2, 0xdb, 0xcb, 0x9f, 0x2a, 0x86, 0x73, 0xd2, 0xc9, 0x1e, + 0xf3, 0xa0, 0xcc, 0xe4, 0xd0, 0x0f, 0xb6, 0xb4, 0x8b, 0xe7, 0xb0, 0xb2, 0x6a, 0x0e, 0xed, 0x4d, + 0x35, 0xc9, 0x5b, 0x30, 0xb2, 0x6c, 0xbb, 0x5e, 0xcb, 0xa1, 0xee, 0x72, 0x90, 0x89, 0x01, 0x9f, + 0x52, 0x77, 0x05, 0xb8, 0xd1, 0x8d, 0xcc, 0xfe, 0x32, 0xb9, 0xfa, 0x8f, 0x0b, 0x09, 0x6d, 0xe0, + 0x86, 0xeb, 0x91, 0xd4, 0x86, 0x03, 0x18, 0xea, 0xe4, 0x46, 0xb8, 0x0a, 0x72, 0x0b, 0x7f, 0x50, + 0x0a, 0x33, 0xb9, 0x2a, 0x0c, 0xfc, 0x28, 0x09, 0xf9, 0x01, 0xb8, 0x10, 0x01, 0x2c, 0xeb, 0x8e, + 0xde, 0xa1, 0x5e, 0x98, 0xf5, 0x12, 0x03, 0x87, 0xf9, 0xa5, 0x1b, 0xdd, 0x00, 0x2d, 0x67, 0xd2, + 0xcc, 0xe0, 0x20, 0xa9, 0xd6, 0xd0, 0x2e, 0x5c, 0xac, 0x7f, 0xb6, 0x10, 0x1a, 0x3a, 0xd1, 0x00, + 0xc0, 0x1a, 0x75, 0x7b, 0x6d, 0xef, 0xf8, 0x76, 0xf0, 0xde, 0xd2, 0xab, 0xcc, 0xc1, 0xa9, 0xca, + 0x83, 0x07, 0xb4, 0xe9, 0xf9, 0x71, 0xcd, 0x5d, 0x11, 0xf2, 0x91, 0x6f, 0x3c, 0x04, 0x4a, 0xc4, + 0xa9, 0x96, 0xfb, 0x35, 0x5e, 0x4c, 0xfd, 0x27, 0x45, 0x50, 0x02, 0xc3, 0x3f, 0x78, 0x2c, 0x78, + 0x88, 0x8b, 0xec, 0xc7, 0xa2, 0x57, 0x4c, 0x38, 0x1d, 0x0a, 0x43, 0xbc, 0xd2, 0x12, 0x79, 0xd1, + 0x27, 0xe3, 0xcc, 0x42, 0x42, 0xbe, 0x97, 0xb8, 0x28, 0xf6, 0x12, 0x24, 0x7c, 0x8c, 0xd9, 0x70, + 0x39, 0x0b, 0x2d, 0xc9, 0x95, 0x7c, 0x2d, 0x07, 0x67, 0xfd, 0x4e, 0x59, 0x5a, 0x65, 0x46, 0xf5, + 0xb4, 0xdd, 0xb3, 0x82, 0x27, 0x4c, 0x6f, 0x64, 0x57, 0xc7, 0x3b, 0xe9, 0x5a, 0x5a, 0x61, 0xde, + 0x92, 0x20, 0xb8, 0x49, 0xa0, 0x10, 0x36, 0xd2, 0x34, 0x9a, 0x48, 0xa4, 0xa5, 0xd6, 0x7b, 0xf1, + 0x16, 0x3c, 0x91, 0xc9, 0x72, 0x3b, 0x23, 0x76, 0x50, 0x36, 0x62, 0xff, 0xbb, 0x5c, 0x38, 0x11, + 0xc5, 0x84, 0x44, 0xae, 0x01, 0x84, 0x20, 0xb1, 0xad, 0xc5, 0x17, 0x52, 0xa1, 0xd0, 0x34, 0x89, + 0x82, 0x2c, 0x41, 0x49, 0x88, 0x85, 0x67, 0x98, 0xfe, 0xf4, 0x36, 0xbd, 0x70, 0x4d, 0x96, 0x03, + 0x6e, 0x59, 0xc5, 0x37, 0x0b, 0x36, 0x17, 0x5f, 0x87, 0x91, 0xbd, 0x7e, 0xd7, 0xd7, 0x0a, 0x40, + 0xe4, 0x3d, 0xe8, 0x21, 0x1a, 0xe8, 0x47, 0x78, 0x0a, 0xbb, 0x02, 0x65, 0xf6, 0x09, 0x98, 0x73, + 0x45, 0x8a, 0xb1, 0xdc, 0x13, 0x30, 0x2d, 0xc0, 0x86, 0x01, 0xce, 0x86, 0xd2, 0x03, 0x9c, 0xa9, + 0x3f, 0x53, 0x80, 0xf3, 0x72, 0x87, 0x54, 0x29, 0xa6, 0x6d, 0x38, 0xe9, 0x94, 0x8f, 0xb0, 0x53, + 0x54, 0x28, 0xf1, 0xad, 0x87, 0xc8, 0x9f, 0xc1, 0x8f, 0x85, 0x10, 0xa2, 0x09, 0x8c, 0xfa, 0x3f, + 0xe7, 0x61, 0x2c, 0x30, 0xef, 0x74, 0xc7, 0x3d, 0xc6, 0xdd, 0xf1, 0x59, 0x18, 0xc3, 0x10, 0x55, + 0x1d, 0x6a, 0xf1, 0x30, 0x4e, 0x83, 0x52, 0xc2, 0x1b, 0x1f, 0x21, 0x72, 0x9b, 0x45, 0x08, 0x99, + 0xf6, 0x73, 0xcb, 0x4f, 0x0a, 0x1c, 0xc6, 0xcd, 0x3e, 0x0e, 0x57, 0xff, 0x62, 0x01, 0x46, 0x7d, + 0x29, 0x4f, 0x99, 0x47, 0xf5, 0x9e, 0xe7, 0x70, 0x85, 0x7c, 0x1d, 0x60, 0xd9, 0x76, 0x3c, 0xbd, + 0xbd, 0x18, 0x6a, 0x3e, 0x1e, 0x90, 0x76, 0x11, 0xca, 0xcb, 0x48, 0x24, 0xb8, 0x7e, 0x85, 0x66, + 0x35, 0x9f, 0x98, 0xf8, 0xfa, 0x15, 0x40, 0x35, 0x89, 0x42, 0xfd, 0xdd, 0x3c, 0x9c, 0xf2, 0x3b, + 0x69, 0xe6, 0x31, 0x6d, 0xf6, 0x8e, 0xf3, 0xdc, 0x14, 0x95, 0xf6, 0xe0, 0xb6, 0xd2, 0x56, 0xff, + 0x4f, 0x69, 0x22, 0x99, 0x6e, 0xdb, 0x27, 0x13, 0xc9, 0xbf, 0x0e, 0x1d, 0x57, 0x7f, 0xac, 0x00, + 0x67, 0x7d, 0xa9, 0xcf, 0xf6, 0x2c, 0x3c, 0x5a, 0x98, 0xd6, 0xdb, 0xed, 0xe3, 0xbc, 0x1b, 0x1f, + 0xf1, 0x05, 0xb1, 0x24, 0x62, 0x3e, 0x8a, 0x3c, 0x93, 0x0f, 0x04, 0xb8, 0x61, 0x9b, 0x86, 0x26, + 0x13, 0x91, 0x77, 0x60, 0xd4, 0xff, 0x59, 0x71, 0x5a, 0xfe, 0x16, 0x1c, 0x2f, 0x0a, 0x82, 0x42, + 0xba, 0x13, 0x09, 0x6d, 0x11, 0x29, 0xa0, 0x7e, 0x65, 0x08, 0x2e, 0xde, 0x37, 0x2d, 0xc3, 0x5e, + 0x77, 0xfd, 0x34, 0xa5, 0x47, 0xfe, 0xa0, 0xec, 0xb0, 0xd3, 0x93, 0xbe, 0x0b, 0xe7, 0xe2, 0x22, + 0x75, 0x82, 0xe0, 0xf1, 0xa2, 0x77, 0xd6, 0x39, 0x41, 0xc3, 0x4f, 0x58, 0x2a, 0x6e, 0xdb, 0xb4, + 0xf4, 0x92, 0xf1, 0x8c, 0xa7, 0x43, 0x3b, 0xc9, 0x78, 0xfa, 0x3c, 0x94, 0xaa, 0x76, 0x47, 0x37, + 0xfd, 0x20, 0x47, 0x38, 0x8a, 0x83, 0x7a, 0x11, 0xa3, 0x09, 0x0a, 0xc6, 0x5f, 0x54, 0x8c, 0x5d, + 0x36, 0x1c, 0xf2, 0xf7, 0x0b, 0x30, 0x2b, 0x4d, 0x93, 0x89, 0x88, 0x0d, 0x63, 0xa2, 0x3a, 0x71, + 0x37, 0x06, 0xb8, 0x79, 0x7a, 0xc5, 0x97, 0x51, 0xb6, 0x5a, 0x5d, 0x8b, 0x94, 0xe3, 0xdb, 0x28, + 0x9e, 0x88, 0x55, 0x7c, 0x0c, 0xbf, 0x25, 0xd3, 0xa2, 0xfc, 0x25, 0x21, 0xe0, 0x24, 0x33, 0x92, + 0x14, 0x02, 0xce, 0x32, 0x32, 0x11, 0x99, 0x81, 0xd3, 0x18, 0xe2, 0x3b, 0xd8, 0x4a, 0x31, 0x95, + 0x18, 0x45, 0xa3, 0x12, 0xaf, 0x5c, 0x78, 0x54, 0x70, 0xf6, 0x71, 0x8d, 0xa6, 0x40, 0x6b, 0xc9, + 0x12, 0xe4, 0x09, 0x28, 0x2c, 0xce, 0x57, 0xf0, 0xae, 0xa6, 0xcc, 0xd3, 0x6b, 0x59, 0x6d, 0x5d, + 0x63, 0xb0, 0x8b, 0x9f, 0x07, 0x92, 0xfc, 0x9c, 0x5d, 0xdd, 0xc7, 0xfc, 0x97, 0xd2, 0x96, 0xef, + 0xa8, 0x7b, 0xd4, 0x1c, 0xc4, 0x44, 0x18, 0xc9, 0x6c, 0x37, 0xf8, 0x51, 0x66, 0xb6, 0x2b, 0x1d, + 0x68, 0x66, 0x3b, 0xf5, 0x57, 0x73, 0x70, 0x3a, 0x11, 0x06, 0x9f, 0xbc, 0x0c, 0xc0, 0x21, 0x52, + 0xb8, 0x51, 0x8c, 0xdf, 0x13, 0x86, 0xc6, 0x17, 0xcb, 0x63, 0x48, 0x46, 0xae, 0x43, 0x99, 0xff, + 0x12, 0x21, 0xc2, 0x92, 0x45, 0x7a, 0x3d, 0xd3, 0xd0, 0x02, 0xa2, 0xb0, 0x16, 0xbc, 0x91, 0x2c, + 0xa4, 0x16, 0xf1, 0x36, 0xba, 0x41, 0x2d, 0x8c, 0x4c, 0xfd, 0x6a, 0x1e, 0x46, 0x83, 0x06, 0x57, + 0x8c, 0xc3, 0xd2, 0xb9, 0x92, 0xc8, 0x28, 0x50, 0xd8, 0x2e, 0xa3, 0x40, 0x6c, 0xbe, 0x15, 0x29, + 0x04, 0x0e, 0xee, 0x41, 0xd5, 0xd7, 0xf3, 0x70, 0x2a, 0xa8, 0xf5, 0x10, 0x2f, 0xbf, 0x3e, 0x46, + 0x22, 0xf9, 0x5a, 0x0e, 0x94, 0x29, 0xb3, 0xdd, 0x36, 0xad, 0x56, 0xcd, 0x7a, 0x60, 0x3b, 0x1d, + 0x9c, 0x10, 0x0f, 0xef, 0x08, 0x57, 0xfd, 0x93, 0x39, 0x38, 0x2d, 0x1a, 0x34, 0xad, 0x3b, 0xc6, + 0xe1, 0x9d, 0x8f, 0xc5, 0x5b, 0x72, 0x78, 0xfa, 0xa2, 0x7e, 0x33, 0x0f, 0x30, 0x6f, 0x37, 0x1f, + 0x1e, 0xf1, 0xf7, 0x58, 0x6f, 0x42, 0x89, 0xc7, 0x69, 0x13, 0x1a, 0x7b, 0x5a, 0xbc, 0x3b, 0x62, + 0x9f, 0xc6, 0x11, 0x53, 0x13, 0x62, 0x3e, 0x2e, 0xf1, 0x38, 0x6f, 0x4a, 0x4e, 0x13, 0x45, 0x58, + 0xa5, 0x8c, 0x4e, 0x2c, 0x18, 0x41, 0xa5, 0x0c, 0x16, 0xad, 0x74, 0x6b, 0x73, 0xb2, 0xd8, 0xb6, + 0x9b, 0x0f, 0x35, 0xa4, 0x57, 0xff, 0x55, 0x8e, 0xcb, 0xee, 0x88, 0xbf, 0x2a, 0xf5, 0x3f, 0xbf, + 0xb8, 0xcb, 0xcf, 0xff, 0x53, 0x39, 0x38, 0xab, 0xd1, 0xa6, 0xfd, 0x88, 0x3a, 0x1b, 0xd3, 0xb6, + 0x41, 0x6f, 0x51, 0x8b, 0x3a, 0x87, 0x35, 0xa2, 0x7e, 0x0f, 0x53, 0xb0, 0x84, 0x8d, 0xb9, 0xeb, + 0x52, 0xe3, 0xe8, 0xa4, 0xc7, 0x51, 0x7f, 0x63, 0x08, 0x94, 0x54, 0xab, 0xf7, 0xc8, 0x9a, 0x73, + 0x99, 0x5b, 0x99, 0xe2, 0x41, 0x6d, 0x65, 0x06, 0x77, 0xb7, 0x95, 0x29, 0xed, 0x76, 0x2b, 0x33, + 0xb4, 0x93, 0xad, 0x4c, 0x27, 0xbe, 0x95, 0x29, 0xe3, 0x56, 0xe6, 0xe5, 0xbe, 0x5b, 0x99, 0x19, + 0xcb, 0xd8, 0xe3, 0x46, 0xe6, 0xc8, 0xa6, 0x6e, 0xde, 0xcb, 0x0e, 0xec, 0x0a, 0x9b, 0x14, 0x9b, + 0xb6, 0x63, 0x50, 0x43, 0x6c, 0xbc, 0xf0, 0xd4, 0xdf, 0x11, 0x30, 0x2d, 0xc0, 0x26, 0xf2, 0x60, + 0x8f, 0xed, 0x24, 0x0f, 0xf6, 0x01, 0xec, 0xbf, 0x3e, 0xcc, 0xc3, 0xe9, 0x69, 0xea, 0x78, 0x3c, + 0x10, 0xec, 0x41, 0xb8, 0xc4, 0x55, 0xe0, 0x94, 0xc4, 0x10, 0x2d, 0xf2, 0x7c, 0xe8, 0xe6, 0xd7, + 0xa4, 0x8e, 0x17, 0xf7, 0x12, 0x8c, 0xd3, 0xb3, 0xea, 0xfd, 0x5c, 0x74, 0x62, 0xec, 0x06, 0xd5, + 0xfb, 0x70, 0x2e, 0x48, 0x53, 0xfc, 0xd2, 0x02, 0x7a, 0x29, 0xbd, 0x5c, 0x71, 0xf7, 0xe9, 0xe5, + 0xd4, 0x5f, 0xc9, 0xc1, 0x65, 0x8d, 0x5a, 0x74, 0x5d, 0x5f, 0x6d, 0x53, 0xa9, 0x59, 0x62, 0x65, + 0x60, 0xb3, 0x86, 0xe9, 0x76, 0x74, 0xaf, 0xb9, 0xb6, 0x2f, 0x19, 0xcd, 0xc2, 0xa8, 0x3c, 0x7f, + 0xed, 0x62, 0x6e, 0x8b, 0x94, 0x53, 0x7f, 0xa3, 0x08, 0x43, 0x53, 0xb6, 0x77, 0xdb, 0xde, 0x67, + 0xbe, 0xc3, 0x70, 0xca, 0xcf, 0xef, 0xe2, 0xac, 0xe7, 0x33, 0x58, 0xb9, 0x94, 0x02, 0x02, 0x5d, + 0x48, 0x57, 0xed, 0x44, 0xaa, 0x0c, 0x9f, 0x6c, 0x97, 0x99, 0x0e, 0x5f, 0x85, 0x61, 0x8c, 0xfe, + 0x22, 0x9d, 0xc6, 0xa2, 0x83, 0xb6, 0xc7, 0x80, 0xf1, 0x3a, 0x42, 0x52, 0xf2, 0x03, 0x91, 0xc8, + 0xb5, 0xa5, 0xfd, 0x67, 0x46, 0x94, 0x83, 0xd8, 0xbe, 0xcc, 0x2f, 0xf2, 0xb0, 0x4d, 0x52, 0x16, + 0x19, 0x3c, 0x45, 0x89, 0x35, 0x29, 0x20, 0x3c, 0xc0, 0xac, 0x85, 0xd3, 0x30, 0x36, 0x65, 0x7b, + 0x92, 0x33, 0xf0, 0x70, 0xf8, 0x0c, 0x94, 0x49, 0x3e, 0xdd, 0x13, 0x38, 0x5a, 0x46, 0xfd, 0xe3, + 0x22, 0x8c, 0xfa, 0x3f, 0x0f, 0x49, 0x77, 0x5e, 0x84, 0xd2, 0x9c, 0x2d, 0x25, 0xd2, 0x40, 0x07, + 0xe2, 0x35, 0xdb, 0x8d, 0x79, 0x46, 0x0b, 0x22, 0x26, 0xf5, 0x45, 0xdb, 0x90, 0xdd, 0xdf, 0x51, + 0xea, 0x96, 0x6d, 0x24, 0x9e, 0x0f, 0x07, 0x84, 0xe4, 0x32, 0x14, 0xf1, 0xe5, 0x80, 0x74, 0x90, + 0x1f, 0x7b, 0x2d, 0x80, 0x78, 0x49, 0x2b, 0x4b, 0xbb, 0xd5, 0xca, 0xa1, 0xbd, 0x6a, 0x65, 0xf9, + 0x60, 0xb5, 0xf2, 0x3d, 0x18, 0xc5, 0x9a, 0xfc, 0x3c, 0x7c, 0xdb, 0x2f, 0xac, 0x4f, 0x88, 0xb5, + 0x6f, 0x8c, 0xb7, 0x5b, 0x64, 0xe3, 0xc3, 0x25, 0x2f, 0xc2, 0x2a, 0xa6, 0xbb, 0xb0, 0x8f, 0xed, + 0xf4, 0x3f, 0xce, 0xc1, 0xd0, 0x5d, 0xeb, 0xa1, 0x65, 0xaf, 0xef, 0x4f, 0xe3, 0x5e, 0x86, 0x11, + 0xc1, 0x46, 0x5a, 0x5d, 0xf0, 0x45, 0x78, 0x8f, 0x83, 0x1b, 0xc8, 0x49, 0x93, 0xa9, 0xc8, 0x5b, + 0x41, 0x21, 0x7c, 0x1c, 0x54, 0x08, 0x53, 0xd1, 0xf8, 0x85, 0x9a, 0xd1, 0xec, 0x19, 0x32, 0x39, + 0xb9, 0x04, 0xc5, 0x2a, 0x6b, 0xaa, 0x14, 0x45, 0x97, 0x35, 0x45, 0x43, 0xa8, 0xfa, 0x61, 0x11, + 0xc6, 0x63, 0x07, 0x5f, 0xcf, 0xc3, 0xb0, 0x38, 0x78, 0x32, 0xfd, 0x74, 0x1e, 0xf8, 0x78, 0x28, + 0x00, 0x6a, 0x65, 0xfe, 0x67, 0xcd, 0x20, 0x9f, 0x83, 0x21, 0xdb, 0xc5, 0x45, 0x11, 0xbf, 0x65, + 0x3c, 0x1c, 0x42, 0x4b, 0x75, 0xd6, 0x76, 0x3e, 0x38, 0x04, 0x89, 0xac, 0x91, 0xb6, 0x8b, 0x9f, + 0x76, 0x13, 0x86, 0x75, 0xd7, 0xa5, 0x5e, 0xc3, 0xd3, 0x5b, 0x72, 0x86, 0x8f, 0x00, 0x28, 0x8f, + 0x0e, 0x04, 0xae, 0xe8, 0x2d, 0xf2, 0x79, 0x18, 0x6b, 0x3a, 0x14, 0x97, 0x4d, 0xbd, 0xcd, 0x5a, + 0x29, 0x99, 0xb5, 0x11, 0x84, 0x7c, 0x7f, 0x12, 0x22, 0x6a, 0x06, 0xb9, 0x07, 0x63, 0xe2, 0x73, + 0xb8, 0xe7, 0x3e, 0x0e, 0xb4, 0xf1, 0x70, 0x19, 0xe3, 0x22, 0xe1, 0xbe, 0xfb, 0xe2, 0x01, 0x87, + 0x4c, 0x2e, 0xf3, 0x35, 0x24, 0x52, 0xb2, 0x04, 0x64, 0x9d, 0xae, 0x36, 0xf4, 0x9e, 0xb7, 0xc6, + 0xea, 0xe2, 0x01, 0xea, 0x45, 0x62, 0x4b, 0x7c, 0xf5, 0x90, 0xc4, 0xca, 0x8f, 0x41, 0xd6, 0xe9, + 0x6a, 0x25, 0x82, 0x24, 0xf7, 0xe1, 0x5c, 0xb2, 0x08, 0xfb, 0x64, 0x7e, 0x39, 0xf0, 0xdc, 0xd6, + 0xe6, 0xe4, 0x64, 0x2a, 0x81, 0xc4, 0xf6, 0x4c, 0x82, 0x6d, 0xcd, 0xb8, 0x5d, 0x2c, 0x0f, 0x4d, + 0x94, 0xb5, 0x71, 0x56, 0xd6, 0x37, 0x21, 0x4d, 0x43, 0xfd, 0xfd, 0x1c, 0x33, 0x15, 0xd9, 0x07, + 0x61, 0x66, 0x6f, 0xa6, 0xeb, 0x9d, 0x5d, 0xea, 0x7a, 0x27, 0xcc, 0xc1, 0x59, 0x72, 0xfb, 0xcc, + 0xae, 0x9a, 0xc0, 0x92, 0x6b, 0x50, 0x32, 0xe4, 0x53, 0xb3, 0xf3, 0xd1, 0x4e, 0xf0, 0xeb, 0xd1, + 0x04, 0x15, 0xb9, 0x02, 0x45, 0xb6, 0x64, 0xc5, 0xb7, 0xcc, 0xb2, 0x75, 0xa1, 0x21, 0x85, 0xfa, + 0x23, 0x79, 0x18, 0x95, 0xbe, 0xe6, 0xc6, 0xbe, 0x3e, 0xe7, 0x8d, 0x9d, 0x35, 0xd3, 0x77, 0x7a, + 0xc1, 0xbd, 0x94, 0xdf, 0xe4, 0x9b, 0x81, 0x28, 0x76, 0x74, 0x21, 0x25, 0x04, 0xf3, 0xaa, 0xf8, + 0xd0, 0xd2, 0xce, 0xb7, 0x8f, 0x8c, 0xfe, 0x76, 0xb1, 0x9c, 0x9f, 0x28, 0xdc, 0x2e, 0x96, 0x8b, + 0x13, 0x83, 0x18, 0x87, 0x0b, 0x43, 0x5f, 0xf3, 0xbd, 0xb9, 0xf5, 0xc0, 0x6c, 0x1d, 0xf1, 0xb7, + 0x23, 0x07, 0x1b, 0xa3, 0x2c, 0x26, 0x9b, 0x23, 0xfe, 0x90, 0xe4, 0x23, 0x95, 0xcd, 0x49, 0xce, + 0x4e, 0x21, 0x9b, 0x7f, 0x92, 0x03, 0x25, 0x55, 0x36, 0x95, 0x43, 0xf2, 0x83, 0x38, 0xb8, 0xcc, + 0x9d, 0x7f, 0x98, 0x87, 0xd3, 0x35, 0xcb, 0xa3, 0x2d, 0xbe, 0x63, 0x3c, 0xe2, 0x53, 0xc5, 0x1d, + 0x18, 0x91, 0x3e, 0x46, 0xf4, 0xf9, 0x93, 0xc1, 0x7e, 0x3c, 0x44, 0x65, 0x70, 0x92, 0x4b, 0x1f, + 0x60, 0xb2, 0xff, 0x98, 0x90, 0x8f, 0xf8, 0x9c, 0x73, 0x34, 0x84, 0x7c, 0xc4, 0x27, 0xaf, 0x8f, + 0xa9, 0x90, 0xff, 0xf7, 0x1c, 0x9c, 0x49, 0xa9, 0x9c, 0x5c, 0x86, 0xa1, 0x7a, 0x6f, 0x15, 0xc3, + 0x6e, 0xe5, 0x42, 0x8f, 0x61, 0xb7, 0xb7, 0x8a, 0x11, 0xb7, 0x34, 0x1f, 0x49, 0x56, 0xf0, 0x71, + 0xfd, 0x52, 0xad, 0x3a, 0x2d, 0xa4, 0xaa, 0x4a, 0x61, 0x02, 0x18, 0x38, 0xed, 0xcb, 0x82, 0x07, + 0xf8, 0xb6, 0x69, 0x34, 0x63, 0x0f, 0xf0, 0x59, 0x19, 0xf2, 0x83, 0x30, 0x5c, 0xf9, 0xa0, 0xe7, + 0x50, 0xe4, 0xcb, 0x25, 0xfe, 0x89, 0x80, 0xaf, 0x8f, 0x48, 0xe3, 0xcc, 0x63, 0x09, 0x30, 0x8a, + 0x38, 0xef, 0x90, 0xa1, 0xfa, 0xd5, 0x1c, 0x5c, 0xcc, 0x6e, 0x1d, 0xf9, 0x0c, 0x0c, 0xb1, 0x9d, + 0x79, 0x45, 0x5b, 0x14, 0x9f, 0xce, 0xb3, 0xdc, 0xda, 0x6d, 0xda, 0xd0, 0x1d, 0xd9, 0xd8, 0xf7, + 0xc9, 0xc8, 0xdb, 0x30, 0x52, 0x73, 0xdd, 0x1e, 0x75, 0xea, 0x2f, 0xdf, 0xd5, 0x6a, 0x62, 0x4f, + 0x88, 0x7b, 0x0e, 0x13, 0xc1, 0x0d, 0xf7, 0xe5, 0x58, 0x60, 0x2d, 0x99, 0x5e, 0xfd, 0x89, 0x1c, + 0x5c, 0xea, 0xf7, 0x55, 0xe4, 0x65, 0x28, 0xaf, 0x50, 0x4b, 0xb7, 0xbc, 0x5a, 0x55, 0x34, 0x09, + 0xb7, 0x58, 0x1e, 0xc2, 0xa2, 0x3b, 0x85, 0x80, 0x90, 0x15, 0xe2, 0xe7, 0x8a, 0x81, 0x23, 0x03, + 0x3f, 0x03, 0x45, 0x58, 0xac, 0x90, 0x4f, 0xa8, 0xfe, 0x41, 0x1e, 0x46, 0x97, 0xdb, 0xbd, 0x96, + 0x29, 0x2d, 0x1c, 0x7b, 0xb6, 0xb7, 0x7d, 0xeb, 0x37, 0xbf, 0x3b, 0xeb, 0x97, 0x0d, 0x37, 0x67, + 0x8f, 0xc3, 0xcd, 0x2f, 0x47, 0xde, 0x82, 0x52, 0x17, 0xbf, 0x23, 0x7e, 0x12, 0xcb, 0xbf, 0x2e, + 0xeb, 0x24, 0x96, 0x97, 0x61, 0xe3, 0xab, 0xb9, 0x8f, 0xf1, 0x15, 0x96, 0x95, 0x04, 0x1a, 0x2e, + 0x12, 0x27, 0x02, 0x3d, 0x10, 0x81, 0x86, 0x0b, 0xc2, 0x89, 0x40, 0xf7, 0x21, 0xd0, 0xdf, 0xc8, + 0xc3, 0x78, 0xb4, 0x4a, 0xf2, 0x19, 0x18, 0xe1, 0xd5, 0xf0, 0x73, 0xa1, 0x9c, 0xe4, 0x54, 0x1c, + 0x82, 0x35, 0xe0, 0x3f, 0xc4, 0x01, 0xd7, 0xa9, 0x35, 0xdd, 0x6d, 0x84, 0x27, 0x34, 0xfc, 0xfe, + 0xb6, 0xcc, 0x3d, 0xa1, 0x62, 0x28, 0x6d, 0x7c, 0x4d, 0x77, 0xa7, 0xc3, 0xdf, 0x64, 0x06, 0x88, + 0x43, 0x7b, 0x2e, 0x8d, 0x32, 0x28, 0x22, 0x03, 0x91, 0x62, 0x3c, 0x8e, 0xd5, 0x4e, 0x73, 0x98, + 0xcc, 0xe6, 0x4b, 0x41, 0xb3, 0x51, 0x19, 0x06, 0x77, 0x90, 0xff, 0x5c, 0xa2, 0x4f, 0x3f, 0xe6, + 0xe4, 0x04, 0x55, 0xdd, 0xd3, 0xf9, 0xa6, 0xdc, 0xef, 0x00, 0xf5, 0x47, 0xbb, 0x30, 0xb8, 0x64, + 0xd1, 0xa5, 0x07, 0xe4, 0x25, 0x18, 0x66, 0x0a, 0x33, 0x6f, 0xb3, 0xbe, 0xcc, 0x09, 0xff, 0x09, + 0x49, 0x93, 0x10, 0x31, 0x37, 0xa0, 0x85, 0x54, 0xe4, 0x26, 0x40, 0xf8, 0xc4, 0x4c, 0x68, 0x1f, + 0x91, 0xcb, 0x70, 0xcc, 0xdc, 0x80, 0x26, 0xd1, 0xf9, 0xa5, 0xc4, 0x03, 0x9d, 0x42, 0xb2, 0x14, + 0xc7, 0xf8, 0xa5, 0xc4, 0xf8, 0x98, 0x07, 0xc2, 0x7e, 0x2d, 0xeb, 0xae, 0xbb, 0x6e, 0x3b, 0xc6, + 0xf4, 0x9a, 0x6e, 0xb5, 0x68, 0x7c, 0xf7, 0x94, 0xa4, 0x98, 0x1b, 0xd0, 0x52, 0xca, 0x91, 0x37, + 0x60, 0x54, 0x76, 0x28, 0x8d, 0x3b, 0x7d, 0xc8, 0xb8, 0xb9, 0x01, 0x2d, 0x42, 0x4b, 0x5e, 0x83, + 0x11, 0xf1, 0xfb, 0xb6, 0x2d, 0x6e, 0x94, 0xa5, 0x58, 0x44, 0x12, 0x6a, 0x6e, 0x40, 0x93, 0x29, + 0xa5, 0x4a, 0x97, 0x1d, 0xd3, 0xf2, 0xc4, 0x1b, 0xe5, 0x78, 0xa5, 0x88, 0x93, 0x2a, 0xc5, 0xdf, + 0xe4, 0x6d, 0x18, 0x0b, 0x82, 0x3c, 0xbd, 0x4f, 0x9b, 0x9e, 0x38, 0xfc, 0x3e, 0x17, 0x2b, 0xcc, + 0x91, 0x73, 0x03, 0x5a, 0x94, 0x9a, 0x5c, 0x81, 0x92, 0x46, 0x5d, 0xf3, 0x03, 0xff, 0xba, 0x78, + 0x5c, 0x1a, 0xe7, 0xe6, 0x07, 0x4c, 0x4a, 0x02, 0xcf, 0x7a, 0x27, 0xbc, 0x9f, 0x16, 0x47, 0xd5, + 0x24, 0x56, 0xcb, 0x8c, 0x65, 0xb0, 0xde, 0x91, 0x9c, 0x13, 0x3e, 0x1f, 0x86, 0xbe, 0x12, 0x69, + 0x57, 0x47, 0xe2, 0x31, 0x06, 0x64, 0xec, 0xdc, 0x80, 0x16, 0xa3, 0x97, 0xa4, 0x5a, 0x35, 0xdd, + 0x87, 0x22, 0xda, 0x68, 0x5c, 0xaa, 0x0c, 0x25, 0x49, 0x95, 0xfd, 0x94, 0xaa, 0x5e, 0xa4, 0xde, + 0xba, 0xed, 0x3c, 0x14, 0xb1, 0x45, 0xe3, 0x55, 0x0b, 0xac, 0x54, 0xb5, 0x80, 0xc8, 0x55, 0xb3, + 0x01, 0x37, 0x9e, 0x5e, 0xb5, 0xee, 0xe9, 0x72, 0xd5, 0xfc, 0x24, 0xce, 0xef, 0xa4, 0x79, 0xaa, + 0x3f, 0xe2, 0xd9, 0xef, 0x93, 0x1d, 0x8a, 0x38, 0xa9, 0x43, 0xf1, 0x37, 0xab, 0x54, 0xca, 0x70, + 0x2e, 0xd2, 0xdb, 0x07, 0x95, 0x4a, 0x28, 0x56, 0xa9, 0x9c, 0x0b, 0xfd, 0xa6, 0x9c, 0xf8, 0x5b, + 0x39, 0x1d, 0xed, 0xa0, 0x10, 0xc3, 0x3a, 0x48, 0x4a, 0x10, 0x3e, 0x89, 0x49, 0x85, 0x15, 0x82, + 0xe4, 0x23, 0x41, 0x0b, 0xa7, 0x97, 0xe7, 0x06, 0x34, 0x4c, 0x37, 0xac, 0xf2, 0x74, 0xd5, 0xca, + 0x19, 0xa4, 0x18, 0xf5, 0x29, 0x18, 0x6c, 0x6e, 0x40, 0xe3, 0xa9, 0xac, 0x5f, 0x92, 0x52, 0xfa, + 0x29, 0x67, 0xa3, 0x53, 0x44, 0x80, 0x60, 0x53, 0x44, 0x98, 0xf8, 0x6f, 0x36, 0x99, 0xf6, 0x4e, + 0x39, 0x17, 0x5d, 0x6a, 0xe2, 0xf8, 0xb9, 0x01, 0x2d, 0x99, 0x2a, 0xef, 0xb5, 0x48, 0x26, 0x38, + 0xe5, 0x7c, 0x2c, 0x00, 0x58, 0x88, 0x62, 0xe2, 0x92, 0x73, 0xc6, 0x2d, 0xc5, 0x72, 0xdf, 0x8b, + 0xc9, 0xea, 0x42, 0x74, 0xe3, 0x92, 0x42, 0x32, 0x37, 0xa0, 0xa5, 0x95, 0x24, 0xd3, 0x89, 0x7c, + 0x6c, 0x8a, 0x12, 0xf5, 0x8d, 0x89, 0xa1, 0xe7, 0x06, 0xb4, 0x44, 0x06, 0xb7, 0x9b, 0x72, 0x22, + 0x34, 0xe5, 0x89, 0x68, 0x27, 0x86, 0x18, 0xd6, 0x89, 0x52, 0xc2, 0xb4, 0x9b, 0x72, 0x72, 0x2c, + 0xe5, 0x62, 0xb2, 0x54, 0x38, 0x73, 0x4a, 0x49, 0xb4, 0xb4, 0xf4, 0x7c, 0x3f, 0xca, 0x93, 0x22, + 0x6f, 0xaf, 0x28, 0x9f, 0x46, 0x33, 0x37, 0xa0, 0xa5, 0xe7, 0x0a, 0xd2, 0xd2, 0x13, 0xe5, 0x28, + 0x97, 0xfa, 0xf1, 0x0c, 0x5a, 0x97, 0x9e, 0x64, 0x47, 0xef, 0x93, 0xb6, 0x44, 0x79, 0x2a, 0x1a, + 0x7d, 0x38, 0x93, 0x70, 0x6e, 0x40, 0xeb, 0x93, 0xfc, 0xe4, 0x6e, 0x46, 0x0e, 0x11, 0xe5, 0xe9, + 0x68, 0xda, 0xee, 0x54, 0xa2, 0xb9, 0x01, 0x2d, 0x23, 0x03, 0xc9, 0xdd, 0x8c, 0x14, 0x13, 0xca, + 0x64, 0x5f, 0xb6, 0x81, 0x3c, 0x32, 0x12, 0x54, 0x2c, 0xa5, 0x66, 0x67, 0x50, 0x9e, 0x89, 0xaa, + 0x6e, 0x0a, 0x09, 0x53, 0xdd, 0xb4, 0xbc, 0x0e, 0x4b, 0xa9, 0xe9, 0x04, 0x94, 0x67, 0xfb, 0x30, + 0x0c, 0xda, 0x98, 0x9a, 0x88, 0x60, 0x29, 0x35, 0x9e, 0xbf, 0xa2, 0x46, 0x19, 0xa6, 0x90, 0x30, + 0x86, 0x69, 0x99, 0x00, 0x96, 0x52, 0xc3, 0xbe, 0x2b, 0xcf, 0xf5, 0x61, 0x18, 0xb6, 0x30, 0x2d, + 0x60, 0xfc, 0x6b, 0x91, 0xb8, 0xeb, 0xca, 0x27, 0xa2, 0xf3, 0x86, 0x84, 0x62, 0xf3, 0x86, 0x1c, + 0xa1, 0x7d, 0x3a, 0x11, 0x59, 0x56, 0xf9, 0x64, 0x74, 0x98, 0xc7, 0xd0, 0x6c, 0x98, 0xc7, 0x63, + 0xd1, 0x4e, 0x27, 0x22, 0x6c, 0x2a, 0x97, 0xb3, 0x98, 0x20, 0x3a, 0xca, 0x84, 0xc7, 0xe4, 0xac, + 0xa5, 0x84, 0x78, 0x54, 0x3e, 0x15, 0xf5, 0xeb, 0x4e, 0x10, 0xcc, 0x0d, 0x68, 0x29, 0x81, 0x21, + 0xb5, 0xf4, 0x78, 0x46, 0xca, 0x95, 0xe8, 0xb0, 0x4d, 0xa3, 0x61, 0xc3, 0x36, 0x35, 0x16, 0xd2, + 0x7c, 0xda, 0xe3, 0x13, 0xe5, 0x6a, 0xd4, 0x30, 0x4b, 0x52, 0x30, 0xc3, 0x2c, 0xe5, 0xd1, 0x8a, + 0x96, 0x1e, 0x63, 0x47, 0x79, 0xbe, 0x6f, 0x0b, 0x91, 0x26, 0xa5, 0x85, 0x3c, 0xe4, 0x4c, 0x68, + 0x3b, 0xdd, 0xed, 0xb6, 0x6d, 0xdd, 0x50, 0x3e, 0x9d, 0x6a, 0x3b, 0x71, 0xa4, 0x64, 0x3b, 0x71, + 0x00, 0x5b, 0xe5, 0xe5, 0x37, 0x0e, 0xca, 0x0b, 0xd1, 0x55, 0x5e, 0xc6, 0xb1, 0x55, 0x3e, 0xf2, + 0x1e, 0x62, 0x3a, 0xf1, 0x1e, 0x40, 0x79, 0x31, 0xaa, 0x00, 0x31, 0x34, 0x53, 0x80, 0xf8, 0x0b, + 0x82, 0x2f, 0x67, 0x7b, 0xd0, 0x2b, 0xd7, 0x90, 0xdb, 0x33, 0x3e, 0xb7, 0x2c, 0xba, 0xb9, 0x01, + 0x2d, 0xdb, 0x0b, 0xbf, 0x96, 0xe2, 0x10, 0xaf, 0x5c, 0x8f, 0x2a, 0x58, 0x82, 0x80, 0x29, 0x58, + 0xd2, 0x8d, 0xbe, 0x96, 0xe2, 0xd1, 0xae, 0x7c, 0x26, 0x93, 0x55, 0xf0, 0xcd, 0x29, 0x7e, 0xf0, + 0x37, 0x65, 0x97, 0x74, 0xe5, 0xa5, 0xe8, 0x62, 0x17, 0x62, 0xd8, 0x62, 0x27, 0xb9, 0xae, 0xdf, + 0x94, 0x9d, 0xb1, 0x95, 0x1b, 0xc9, 0x52, 0xe1, 0x12, 0x29, 0x39, 0x6d, 0x6b, 0xe9, 0x3e, 0xcc, + 0xca, 0xcb, 0x51, 0xad, 0x4b, 0xa3, 0x61, 0x5a, 0x97, 0xea, 0xff, 0x3c, 0x9b, 0x74, 0x45, 0x56, + 0x6e, 0xc6, 0x37, 0xd9, 0x51, 0x3c, 0xb3, 0x7c, 0x12, 0xee, 0xcb, 0x9f, 0x8f, 0x07, 0xdb, 0x53, + 0x5e, 0x89, 0x5d, 0xfb, 0x46, 0xb0, 0xcc, 0xbe, 0x8d, 0x05, 0xe7, 0xfb, 0x7c, 0x3c, 0x3e, 0x9d, + 0xf2, 0x6a, 0x3a, 0x87, 0x40, 0x57, 0xe2, 0xf1, 0xec, 0x3e, 0x1f, 0x0f, 0xe9, 0xa6, 0xbc, 0x96, + 0xce, 0x21, 0x90, 0x6e, 0x3c, 0x04, 0xdc, 0x4b, 0x52, 0x90, 0x79, 0xe5, 0xb3, 0x51, 0xd3, 0x31, + 0x40, 0x30, 0xd3, 0x31, 0x0c, 0x45, 0xff, 0x92, 0x14, 0x9c, 0x5d, 0x79, 0x3d, 0x51, 0x24, 0x68, + 0xac, 0x14, 0xc2, 0xfd, 0x25, 0x29, 0xa8, 0xb9, 0xf2, 0x46, 0xa2, 0x48, 0xd0, 0x3a, 0x29, 0xf4, + 0xb9, 0xd1, 0xef, 0xfd, 0xaa, 0xf2, 0x66, 0xf4, 0x30, 0x38, 0x9b, 0x72, 0x6e, 0x40, 0xeb, 0xf7, + 0x0e, 0xf6, 0xcb, 0xd9, 0x8e, 0xdd, 0xca, 0x5b, 0xd1, 0x21, 0x9c, 0x45, 0xc7, 0x86, 0x70, 0xa6, + 0x73, 0xf8, 0xdb, 0xb1, 0x58, 0x16, 0xca, 0xdb, 0xd1, 0x29, 0x2e, 0x82, 0x64, 0x53, 0x5c, 0x3c, + 0xf2, 0x45, 0x24, 0x48, 0x83, 0xf2, 0xb9, 0xe8, 0x14, 0x27, 0xe3, 0xd8, 0x14, 0x17, 0x09, 0xe8, + 0x30, 0x9d, 0x88, 0x1d, 0xa0, 0xbc, 0x13, 0x9d, 0xe2, 0x62, 0x68, 0x36, 0xc5, 0xc5, 0xa3, 0x0d, + 0xbc, 0x1d, 0x7b, 0x42, 0xaf, 0x7c, 0x3e, 0xbd, 0xfd, 0x88, 0x94, 0xdb, 0xcf, 0x1f, 0xdc, 0x6b, + 0xe9, 0x6f, 0xc1, 0x95, 0x4a, 0x74, 0xfc, 0xa6, 0xd1, 0xb0, 0xf1, 0x9b, 0xfa, 0x8e, 0x3c, 0xbe, + 0x71, 0x10, 0x5a, 0x35, 0xd5, 0x67, 0xe3, 0x10, 0x9a, 0x22, 0x29, 0xe0, 0xc8, 0x1e, 0x99, 0x6f, + 0x84, 0xa6, 0x33, 0xf6, 0xc8, 0xfe, 0x36, 0x28, 0x46, 0xcf, 0x66, 0xd7, 0x84, 0x9f, 0xb1, 0x52, + 0x8d, 0xce, 0xae, 0x09, 0x02, 0x36, 0xbb, 0x26, 0xbd, 0x93, 0x67, 0x61, 0x42, 0x68, 0x11, 0x77, + 0x9f, 0x36, 0xad, 0x96, 0x32, 0x13, 0x7b, 0x6f, 0x19, 0xc3, 0xb3, 0xd9, 0x29, 0x0e, 0xc3, 0xf5, + 0x9a, 0xc3, 0xa6, 0xdb, 0x66, 0x77, 0xd5, 0xd6, 0x1d, 0xa3, 0x4e, 0x2d, 0x43, 0x99, 0x8d, 0xad, + 0xd7, 0x29, 0x34, 0xb8, 0x5e, 0xa7, 0xc0, 0x31, 0x44, 0x5c, 0x0c, 0xae, 0xd1, 0x26, 0x35, 0x1f, + 0x51, 0xe5, 0x16, 0xb2, 0x9d, 0xcc, 0x62, 0x2b, 0xc8, 0xe6, 0x06, 0xb4, 0x2c, 0x0e, 0xcc, 0x56, + 0x5f, 0xd8, 0xa8, 0xbf, 0x3b, 0x1f, 0x84, 0x1f, 0x58, 0x76, 0x68, 0x57, 0x77, 0xa8, 0x32, 0x17, + 0xb5, 0xd5, 0x53, 0x89, 0x98, 0xad, 0x9e, 0x8a, 0x48, 0xb2, 0xf5, 0xc7, 0x42, 0xad, 0x1f, 0xdb, + 0x70, 0x44, 0xa4, 0x97, 0x66, 0xb3, 0x53, 0x14, 0xc1, 0x04, 0x34, 0x6f, 0x5b, 0x2d, 0x3c, 0xa9, + 0xb8, 0x1d, 0x9d, 0x9d, 0xb2, 0x29, 0xd9, 0xec, 0x94, 0x8d, 0x65, 0xaa, 0x1e, 0xc5, 0xf2, 0x31, + 0x78, 0x27, 0xaa, 0xea, 0x29, 0x24, 0x4c, 0xd5, 0x53, 0xc0, 0x49, 0x86, 0x1a, 0x75, 0xa9, 0xa7, + 0xcc, 0xf7, 0x63, 0x88, 0x24, 0x49, 0x86, 0x08, 0x4e, 0x32, 0x9c, 0xa5, 0x5e, 0x73, 0x4d, 0x59, + 0xe8, 0xc7, 0x10, 0x49, 0x92, 0x0c, 0x11, 0xcc, 0x36, 0x9b, 0x51, 0xf0, 0x54, 0xaf, 0xfd, 0xd0, + 0xef, 0xb3, 0xc5, 0xe8, 0x66, 0x33, 0x93, 0x90, 0x6d, 0x36, 0x33, 0x91, 0xe4, 0x27, 0x76, 0xec, + 0x07, 0xaf, 0x2c, 0x61, 0x85, 0xd7, 0x42, 0xbb, 0x60, 0x27, 0xa5, 0xe6, 0x06, 0xb4, 0x9d, 0xfa, + 0xd9, 0x7f, 0x3a, 0x70, 0x1a, 0x55, 0x96, 0xb1, 0xaa, 0x53, 0xc1, 0x59, 0x05, 0x07, 0xcf, 0x0d, + 0x68, 0x81, 0x5b, 0xe9, 0x6b, 0x30, 0x82, 0x1f, 0x55, 0xb3, 0x4c, 0xaf, 0x3a, 0xa5, 0xbc, 0x1b, + 0xdd, 0x32, 0x49, 0x28, 0xb6, 0x65, 0x92, 0x7e, 0xb2, 0x49, 0x1c, 0x7f, 0xf2, 0x29, 0xa6, 0x3a, + 0xa5, 0x68, 0xd1, 0x49, 0x3c, 0x82, 0x64, 0x93, 0x78, 0x04, 0x10, 0xd4, 0x5b, 0x75, 0xec, 0x6e, + 0x75, 0x4a, 0xa9, 0xa7, 0xd4, 0xcb, 0x51, 0x41, 0xbd, 0xfc, 0x67, 0x50, 0x6f, 0x7d, 0xad, 0xe7, + 0x55, 0xd9, 0x37, 0xae, 0xa4, 0xd4, 0xeb, 0x23, 0x83, 0x7a, 0x7d, 0x00, 0x9b, 0x0a, 0x11, 0xb0, + 0xec, 0xd8, 0x6c, 0xd2, 0xbe, 0x63, 0xb6, 0xdb, 0xca, 0xdd, 0xe8, 0x54, 0x18, 0xc7, 0xb3, 0xa9, + 0x30, 0x0e, 0x63, 0xa6, 0x27, 0x6f, 0x15, 0x5d, 0xed, 0xb5, 0x94, 0x7b, 0x51, 0xd3, 0x33, 0xc4, + 0x30, 0xd3, 0x33, 0xfc, 0x85, 0xbb, 0x0b, 0xf6, 0x4b, 0xa3, 0x0f, 0x1c, 0xea, 0xae, 0x29, 0xf7, + 0x63, 0xbb, 0x0b, 0x09, 0x87, 0xbb, 0x0b, 0xe9, 0x37, 0x69, 0xc1, 0x93, 0x91, 0x85, 0xc6, 0xbf, + 0xb4, 0xa9, 0x53, 0xdd, 0x69, 0xae, 0x29, 0x5f, 0x40, 0x56, 0xcf, 0xa5, 0x2e, 0x55, 0x51, 0xd2, + 0xb9, 0x01, 0xad, 0x1f, 0x27, 0xdc, 0x96, 0xbf, 0x3b, 0xcf, 0x23, 0xc1, 0x6a, 0xcb, 0xd3, 0xfe, + 0x26, 0xf4, 0xbd, 0xd8, 0xb6, 0x3c, 0x49, 0x82, 0xdb, 0xf2, 0x24, 0x98, 0x74, 0xe1, 0xe9, 0xd8, + 0x56, 0x6d, 0x41, 0x6f, 0xb3, 0x7d, 0x09, 0x35, 0x96, 0xf5, 0xe6, 0x43, 0xea, 0x29, 0x5f, 0x44, + 0xde, 0x97, 0x33, 0x36, 0x7c, 0x31, 0xea, 0xb9, 0x01, 0x6d, 0x1b, 0x7e, 0x44, 0x85, 0x62, 0x7d, + 0x76, 0x65, 0x59, 0xf9, 0x81, 0xe8, 0xf9, 0x26, 0x83, 0xcd, 0x0d, 0x68, 0x88, 0x63, 0x56, 0xda, + 0xdd, 0x6e, 0xcb, 0xd1, 0x0d, 0xca, 0x0d, 0x2d, 0xb4, 0xdd, 0x84, 0x01, 0xfa, 0x83, 0x51, 0x2b, + 0x2d, 0x8b, 0x8e, 0x59, 0x69, 0x59, 0x38, 0xa6, 0xa8, 0x91, 0xa4, 0x27, 0xca, 0x97, 0xa2, 0x8a, + 0x1a, 0x41, 0x32, 0x45, 0x8d, 0xa6, 0x48, 0xf9, 0x02, 0x9c, 0x0f, 0xf6, 0xf3, 0x62, 0xfd, 0xe5, + 0x9d, 0xa6, 0x7c, 0x19, 0xf9, 0x3c, 0x9d, 0xb8, 0x0c, 0x88, 0x50, 0xcd, 0x0d, 0x68, 0x19, 0xe5, + 0xd9, 0x8a, 0x9b, 0xc8, 0xe7, 0x25, 0xcc, 0x8b, 0x1f, 0x8a, 0xae, 0xb8, 0x19, 0x64, 0x6c, 0xc5, + 0xcd, 0x40, 0xa5, 0x32, 0x17, 0x42, 0xd5, 0xb7, 0x61, 0x1e, 0xc8, 0x34, 0x8b, 0x43, 0x2a, 0x73, + 0x61, 0xa9, 0xad, 0x6e, 0xc3, 0x3c, 0xb0, 0xd6, 0xb2, 0x38, 0x90, 0x2b, 0x50, 0xaa, 0xd7, 0x17, + 0xb4, 0x9e, 0xa5, 0x34, 0x63, 0xde, 0xb2, 0x08, 0x9d, 0x1b, 0xd0, 0x04, 0x9e, 0x99, 0x41, 0x33, + 0x6d, 0xdd, 0xf5, 0xcc, 0xa6, 0x8b, 0x23, 0xc6, 0x1f, 0x21, 0x46, 0xd4, 0x0c, 0x4a, 0xa3, 0x61, + 0x66, 0x50, 0x1a, 0x9c, 0xd9, 0x8b, 0xd3, 0xba, 0xeb, 0xea, 0x96, 0xe1, 0xe8, 0x53, 0xb8, 0x4c, + 0xd0, 0xd8, 0x6b, 0xac, 0x08, 0x96, 0xd9, 0x8b, 0x51, 0x08, 0x1e, 0xbe, 0xfb, 0x10, 0xdf, 0xcc, + 0x79, 0x10, 0x3b, 0x7c, 0x8f, 0xe1, 0xf1, 0xf0, 0x3d, 0x06, 0x43, 0xbb, 0xd3, 0x87, 0x69, 0xb4, + 0x65, 0x32, 0x11, 0x29, 0xad, 0x98, 0xdd, 0x19, 0x27, 0x40, 0xbb, 0x33, 0x0e, 0x8c, 0x34, 0xc9, + 0x5f, 0x6e, 0xd7, 0x32, 0x9a, 0x14, 0xae, 0xb2, 0x89, 0x32, 0x6c, 0xfd, 0x0e, 0x07, 0x47, 0x75, + 0xc3, 0xd2, 0x3b, 0x76, 0x75, 0xca, 0x97, 0xba, 0x19, 0x5d, 0xbf, 0x33, 0x09, 0xd9, 0xfa, 0x9d, + 0x89, 0x64, 0xb3, 0xab, 0xbf, 0xd1, 0x5a, 0xd3, 0x1d, 0x6a, 0x54, 0x4d, 0x07, 0x4f, 0x16, 0x37, + 0xf8, 0xd6, 0xf0, 0xfd, 0xe8, 0xec, 0xda, 0x87, 0x94, 0xcd, 0xae, 0x7d, 0xd0, 0xcc, 0xc8, 0x4b, + 0x47, 0x6b, 0x54, 0x37, 0x94, 0x87, 0x51, 0x23, 0x2f, 0x9b, 0x92, 0x19, 0x79, 0xd9, 0xd8, 0xec, + 0xcf, 0xb9, 0xef, 0x98, 0x1e, 0x55, 0xda, 0x3b, 0xf9, 0x1c, 0x24, 0xcd, 0xfe, 0x1c, 0x44, 0xb3, + 0x0d, 0x61, 0xbc, 0x43, 0x3a, 0xd1, 0x0d, 0x61, 0xb2, 0x1b, 0xe2, 0x25, 0x98, 0xc5, 0x22, 0x1e, + 0xe5, 0x29, 0x56, 0xd4, 0x62, 0x11, 0x60, 0x66, 0xb1, 0x84, 0xcf, 0xf6, 0x22, 0x4f, 0xb1, 0x14, + 0x3b, 0xba, 0x86, 0xca, 0x38, 0xb6, 0x86, 0x46, 0x9e, 0x6d, 0xbd, 0x16, 0x79, 0x67, 0xa0, 0x74, + 0xa3, 0x56, 0x87, 0x84, 0x62, 0x56, 0x87, 0xfc, 0x22, 0x61, 0x1a, 0x4e, 0xe1, 0x2d, 0xb8, 0xd6, + 0x0b, 0xee, 0x71, 0x7e, 0x38, 0xfa, 0x99, 0x31, 0x34, 0xfb, 0xcc, 0x18, 0x28, 0xc2, 0x44, 0x4c, + 0x5b, 0x4e, 0x06, 0x93, 0xf0, 0x7c, 0x30, 0x06, 0x22, 0xf3, 0x40, 0xea, 0x95, 0x85, 0xf9, 0x9a, + 0xb1, 0x2c, 0x5f, 0x91, 0xb9, 0xd1, 0x13, 0xd8, 0x24, 0xc5, 0xdc, 0x80, 0x96, 0x52, 0x8e, 0xbc, + 0x0f, 0x97, 0x04, 0x54, 0xbc, 0xb8, 0xc6, 0xb4, 0xff, 0x46, 0xb0, 0x20, 0x78, 0x51, 0x3f, 0xb6, + 0x7e, 0xb4, 0x73, 0x03, 0x5a, 0x5f, 0x5e, 0xd9, 0x75, 0x89, 0xf5, 0xa1, 0xb7, 0x93, 0xba, 0x82, + 0x45, 0xa2, 0x2f, 0xaf, 0xec, 0xba, 0x84, 0xdc, 0x1f, 0xed, 0xa4, 0xae, 0xa0, 0x13, 0xfa, 0xf2, + 0x22, 0x2e, 0x4c, 0xf6, 0xc3, 0x57, 0xda, 0x6d, 0x65, 0x1d, 0xab, 0xfb, 0xd4, 0x4e, 0xaa, 0xab, + 0xa0, 0xc1, 0xb9, 0x1d, 0x47, 0x36, 0x4b, 0x2f, 0x75, 0xa9, 0x55, 0x8f, 0x2c, 0x40, 0x8f, 0xa3, + 0xb3, 0x74, 0x82, 0x80, 0xcd, 0xd2, 0x09, 0x20, 0x1b, 0x50, 0xf2, 0x73, 0x15, 0x65, 0x23, 0x3a, + 0xa0, 0x64, 0x1c, 0x1b, 0x50, 0x91, 0xa7, 0x2d, 0x4b, 0x70, 0x66, 0xe9, 0xa1, 0xa7, 0xfb, 0x16, + 0xa4, 0x2b, 0xba, 0xf2, 0x83, 0xd8, 0x25, 0x53, 0x92, 0x04, 0x2f, 0x99, 0x92, 0x60, 0x36, 0x46, + 0x18, 0xb8, 0xbe, 0x61, 0x35, 0x67, 0x75, 0xb3, 0xdd, 0x73, 0xa8, 0xf2, 0x6f, 0x44, 0xc7, 0x48, + 0x0c, 0xcd, 0xc6, 0x48, 0x0c, 0xc4, 0x16, 0x68, 0x06, 0xaa, 0xb8, 0xae, 0xd9, 0xb2, 0xc4, 0xbe, + 0xb2, 0xd7, 0xf6, 0x94, 0x7f, 0x33, 0xba, 0x40, 0xa7, 0xd1, 0xb0, 0x05, 0x3a, 0x0d, 0x8e, 0xa7, + 0x4e, 0xac, 0x17, 0xd8, 0xe2, 0x21, 0xdf, 0x55, 0xfe, 0x5b, 0xb1, 0x53, 0xa7, 0x14, 0x1a, 0x3c, + 0x75, 0x4a, 0x81, 0xb3, 0xf5, 0x91, 0xdb, 0x64, 0xf3, 0x66, 0x70, 0x57, 0xfd, 0x6f, 0x47, 0xd7, + 0xc7, 0x38, 0x9e, 0xad, 0x8f, 0x71, 0x58, 0x94, 0x8f, 0xe8, 0x82, 0x7f, 0x27, 0x8b, 0x4f, 0x20, + 0xff, 0x44, 0x19, 0x72, 0x4b, 0xe6, 0x23, 0x46, 0xca, 0x8f, 0xe4, 0xb2, 0x18, 0x05, 0xc3, 0x23, + 0x51, 0x28, 0xca, 0x48, 0xa3, 0x8f, 0x4c, 0xba, 0xae, 0x7c, 0x25, 0x93, 0x11, 0x27, 0x88, 0x32, + 0xe2, 0x30, 0xf2, 0x1e, 0x9c, 0x0f, 0x61, 0x0b, 0xb4, 0xb3, 0x1a, 0xcc, 0x4c, 0x3f, 0x9a, 0x8b, + 0x9a, 0xc1, 0xe9, 0x64, 0xcc, 0x0c, 0x4e, 0xc7, 0xa4, 0xb1, 0x16, 0xa2, 0xfb, 0x77, 0xb7, 0x61, + 0x1d, 0x48, 0x30, 0x83, 0x41, 0x1a, 0x6b, 0x21, 0xcd, 0x1f, 0xdb, 0x86, 0x75, 0x20, 0xd3, 0x0c, + 0x06, 0xe4, 0x27, 0x73, 0x70, 0x39, 0x1d, 0x55, 0x69, 0xb7, 0x67, 0x6d, 0x27, 0xc4, 0x29, 0x7f, + 0x22, 0x17, 0x3d, 0x68, 0xd8, 0x59, 0xb1, 0xb9, 0x01, 0x6d, 0x87, 0x15, 0x90, 0xcf, 0xc1, 0x58, + 0xa5, 0x67, 0x98, 0x1e, 0x5e, 0xbc, 0x31, 0xc3, 0xf9, 0xc7, 0x73, 0xb1, 0x2d, 0x8e, 0x8c, 0xc5, + 0x2d, 0x8e, 0x0c, 0x20, 0xb7, 0xe1, 0x74, 0x9d, 0x36, 0x7b, 0x8e, 0xe9, 0x6d, 0x68, 0xb4, 0x6b, + 0x3b, 0x1e, 0xe3, 0xf1, 0x27, 0x73, 0xd1, 0x49, 0x2c, 0x41, 0xc1, 0x26, 0xb1, 0x04, 0x90, 0xdc, + 0x4b, 0xdc, 0xca, 0x8b, 0xce, 0xfc, 0x89, 0x5c, 0xdf, 0x6b, 0xf9, 0xa0, 0x2f, 0xd3, 0x8b, 0x93, + 0xe5, 0xd8, 0x2d, 0xba, 0xe0, 0xfa, 0x93, 0xb9, 0x3e, 0xd7, 0xe8, 0xd2, 0x0c, 0x97, 0x04, 0x33, + 0x8e, 0x29, 0x19, 0xe0, 0x95, 0x3f, 0x95, 0xeb, 0x73, 0xed, 0x1d, 0x72, 0x4c, 0x4b, 0x1e, 0xff, + 0x0a, 0xf7, 0x14, 0x11, 0x8c, 0x7e, 0x2a, 0x97, 0x74, 0x15, 0x09, 0xca, 0x4b, 0x84, 0xac, 0xd8, + 0x5d, 0x37, 0x50, 0xfa, 0x0f, 0x73, 0x49, 0xdf, 0xbc, 0xb0, 0x58, 0xf8, 0x8b, 0x50, 0xb8, 0x38, + 0xf3, 0xd8, 0xa3, 0x8e, 0xa5, 0xb7, 0xb1, 0x3b, 0xeb, 0x9e, 0xed, 0xe8, 0x2d, 0x3a, 0x63, 0xe9, + 0xab, 0x6d, 0xaa, 0x7c, 0x35, 0x17, 0xb5, 0x60, 0xb3, 0x49, 0x99, 0x05, 0x9b, 0x8d, 0x25, 0x6b, + 0xf0, 0x64, 0x1a, 0xb6, 0x6a, 0xba, 0x58, 0xcf, 0xd7, 0x72, 0x51, 0x13, 0xb6, 0x0f, 0x2d, 0x33, + 0x61, 0xfb, 0xa0, 0xc9, 0x0d, 0x18, 0x9e, 0xb2, 0xfd, 0xe9, 0xf7, 0x4f, 0xc7, 0x9c, 0x21, 0x03, + 0xcc, 0xdc, 0x80, 0x16, 0x92, 0x89, 0x32, 0x62, 0x50, 0x7f, 0x3d, 0x59, 0x26, 0xbc, 0x7c, 0x0a, + 0x7e, 0x88, 0x32, 0x42, 0xdc, 0xff, 0x5e, 0xb2, 0x4c, 0x78, 0xc7, 0x15, 0xfc, 0x60, 0x33, 0x09, + 0xaf, 0x71, 0x61, 0xb6, 0xc2, 0xec, 0xb6, 0xe9, 0x35, 0xbd, 0xdd, 0xa6, 0x56, 0x8b, 0x2a, 0xdf, + 0x88, 0xcd, 0x24, 0xe9, 0x64, 0x6c, 0x26, 0x49, 0xc7, 0x90, 0x1f, 0x84, 0x0b, 0xf7, 0xf4, 0xb6, + 0x69, 0x84, 0x38, 0x3f, 0x1f, 0xb8, 0xf2, 0xd3, 0xb9, 0xe8, 0x6e, 0x3a, 0x83, 0x8e, 0xed, 0xa6, + 0x33, 0x50, 0x64, 0x01, 0x08, 0x2e, 0xa3, 0xc1, 0x6c, 0xc1, 0xd6, 0x67, 0xe5, 0xdf, 0xcf, 0x45, + 0xed, 0xd4, 0x24, 0x09, 0xb3, 0x53, 0x93, 0x50, 0xd2, 0xc8, 0x4e, 0x0d, 0xa2, 0xfc, 0x4c, 0x2e, + 0x7a, 0x5a, 0x93, 0x45, 0x38, 0x37, 0xa0, 0x65, 0xe7, 0x17, 0xb9, 0x05, 0x13, 0xf5, 0xe5, 0xda, + 0xec, 0xec, 0x4c, 0xfd, 0x5e, 0xad, 0x8a, 0x0f, 0x1d, 0x0c, 0xe5, 0xcf, 0xc4, 0x56, 0xac, 0x38, + 0x01, 0x5b, 0xb1, 0xe2, 0x30, 0xf2, 0x26, 0x8c, 0xb2, 0xf6, 0xb3, 0x01, 0x83, 0x9f, 0xfc, 0xb3, + 0xb9, 0xa8, 0x39, 0x25, 0x23, 0x99, 0x39, 0x25, 0xff, 0x26, 0x75, 0x38, 0xcb, 0xa4, 0xb8, 0xec, + 0xd0, 0x07, 0xd4, 0xa1, 0x56, 0xd3, 0x1f, 0xd3, 0x3f, 0x97, 0x8b, 0x5a, 0x19, 0x69, 0x44, 0xcc, + 0xca, 0x48, 0x83, 0x93, 0x87, 0x70, 0x29, 0x7e, 0x12, 0x24, 0x3f, 0x3b, 0x55, 0xfe, 0x6c, 0x2e, + 0x66, 0x0c, 0xf7, 0x21, 0x46, 0x63, 0xb8, 0x0f, 0x9e, 0x58, 0xf0, 0x94, 0x38, 0x56, 0x11, 0x0e, + 0x97, 0xf1, 0xda, 0xfe, 0x1c, 0xaf, 0xed, 0x93, 0xa1, 0x43, 0x60, 0x1f, 0xea, 0xb9, 0x01, 0xad, + 0x3f, 0x3b, 0xa6, 0x67, 0xc9, 0x04, 0x18, 0xca, 0xcf, 0xe7, 0xd2, 0x3d, 0x52, 0x22, 0x6e, 0xca, + 0x69, 0x99, 0x33, 0xde, 0xcb, 0x4a, 0xdf, 0xa0, 0xfc, 0xf9, 0xd8, 0x78, 0x4b, 0x27, 0x63, 0xe3, + 0x2d, 0x23, 0xff, 0xc3, 0x6d, 0x38, 0xcd, 0x95, 0x7a, 0x59, 0xc7, 0x61, 0x68, 0xb5, 0xa8, 0xa1, + 0xfc, 0x07, 0xb1, 0xd5, 0x2e, 0x41, 0x81, 0xae, 0x3d, 0x71, 0x20, 0x9b, 0xba, 0xeb, 0x5d, 0xdd, + 0xb2, 0xf0, 0x98, 0x55, 0xf9, 0x0f, 0x63, 0x53, 0x77, 0x88, 0x42, 0xc7, 0xdd, 0xe0, 0x17, 0xd3, + 0x84, 0x7e, 0xa9, 0x8f, 0x94, 0xbf, 0x10, 0xd3, 0x84, 0x7e, 0xc4, 0x4c, 0x13, 0xfa, 0xe6, 0x51, + 0xba, 0x97, 0xf1, 0x04, 0x5c, 0xf9, 0x85, 0xd8, 0x8a, 0x9c, 0x4a, 0xc5, 0x56, 0xe4, 0xf4, 0x17, + 0xe4, 0xf7, 0x32, 0x9e, 0x4f, 0x2b, 0xbf, 0xd8, 0x9f, 0x6f, 0xb8, 0xd2, 0xa7, 0xbf, 0xbe, 0xbe, + 0x97, 0xf1, 0xf4, 0x58, 0xf9, 0x8b, 0xfd, 0xf9, 0x86, 0x8e, 0x7d, 0xe9, 0x2f, 0x97, 0x1b, 0xd9, + 0xcf, 0x76, 0x95, 0xbf, 0x14, 0x9f, 0xba, 0x32, 0x08, 0x71, 0xea, 0xca, 0x7a, 0xfb, 0xbb, 0x0a, + 0x4f, 0x70, 0x0d, 0xb9, 0xe5, 0xe8, 0xdd, 0xb5, 0x3a, 0xf5, 0x3c, 0xd3, 0x6a, 0xf9, 0x3b, 0xb1, + 0xbf, 0x9c, 0x8b, 0x1d, 0x8f, 0x65, 0x51, 0xe2, 0xf1, 0x58, 0x16, 0x92, 0x29, 0x6f, 0xe2, 0x81, + 0xae, 0xf2, 0x57, 0x62, 0xca, 0x9b, 0xa0, 0x60, 0xca, 0x9b, 0x7c, 0xd7, 0x7b, 0x3b, 0xe5, 0x1d, + 0xaa, 0xf2, 0x1f, 0x65, 0xf3, 0x0a, 0xda, 0x97, 0xf2, 0x7c, 0xf5, 0x76, 0xca, 0x73, 0x4b, 0xe5, + 0x3f, 0xce, 0xe6, 0x15, 0xfa, 0x20, 0x25, 0x5f, 0x69, 0xbe, 0x07, 0xe7, 0xf9, 0x6c, 0x3e, 0x4b, + 0x0d, 0x1a, 0xf9, 0xd0, 0x5f, 0x8a, 0x8d, 0xfd, 0x74, 0x32, 0x3c, 0x72, 0x4f, 0xc5, 0xa4, 0xb1, + 0x16, 0x6d, 0xfd, 0xab, 0xdb, 0xb0, 0x0e, 0x37, 0x04, 0xe9, 0x18, 0xb6, 0xde, 0xc8, 0x8f, 0xdf, + 0x94, 0x5f, 0x8e, 0xad, 0x37, 0x32, 0x12, 0xdd, 0x39, 0xe4, 0x97, 0x72, 0x6f, 0x46, 0x1f, 0x7a, + 0x29, 0x7f, 0x2d, 0xb5, 0x70, 0xd0, 0x01, 0xd1, 0x57, 0x61, 0x6f, 0x46, 0x1f, 0x35, 0x29, 0xbf, + 0x92, 0x5a, 0x38, 0xf8, 0x80, 0xe8, 0x0b, 0x28, 0xb6, 0x45, 0xea, 0x79, 0x36, 0x67, 0x15, 0x99, + 0x1e, 0xfe, 0x7a, 0x7c, 0x8b, 0x94, 0x4a, 0x86, 0x5b, 0xa4, 0x54, 0x4c, 0x1a, 0x6b, 0xf1, 0x79, + 0xbf, 0xba, 0x0d, 0x6b, 0x69, 0x63, 0x97, 0x8a, 0x49, 0x63, 0x2d, 0x3e, 0xfe, 0xd7, 0xb6, 0x61, + 0x2d, 0x6d, 0xec, 0x52, 0x31, 0xcc, 0x1c, 0x0b, 0x31, 0xf7, 0xa8, 0xe3, 0x86, 0xea, 0xf7, 0x37, + 0x62, 0xe6, 0x58, 0x06, 0x1d, 0x33, 0xc7, 0x32, 0x50, 0xa9, 0xdc, 0x85, 0x50, 0x7e, 0x7d, 0x3b, + 0xee, 0xe1, 0xbd, 0x4c, 0x06, 0x2a, 0x95, 0xbb, 0x90, 0xcb, 0xdf, 0xdc, 0x8e, 0x7b, 0x78, 0x31, + 0x93, 0x81, 0x62, 0x46, 0x51, 0xdd, 0xd3, 0x3d, 0xb3, 0x39, 0x67, 0xbb, 0x9e, 0xb4, 0xc8, 0xff, + 0xad, 0x98, 0x51, 0x94, 0x46, 0xc4, 0x8c, 0xa2, 0x34, 0x78, 0x92, 0xa9, 0x90, 0xc6, 0x6f, 0xf4, + 0x65, 0x1a, 0x5a, 0x5a, 0x69, 0xf0, 0x24, 0x53, 0x21, 0x84, 0xff, 0xa4, 0x2f, 0xd3, 0xd0, 0x53, + 0x3e, 0x0d, 0xce, 0x2c, 0xd3, 0x69, 0xc7, 0x5e, 0xb7, 0x6e, 0xd3, 0x75, 0xda, 0x16, 0x9f, 0xfe, + 0x9b, 0x31, 0xcb, 0x34, 0x4e, 0x80, 0xb7, 0x28, 0x31, 0x58, 0x94, 0x91, 0xf8, 0xdc, 0xdf, 0xca, + 0x64, 0x14, 0x1e, 0x13, 0xc5, 0x61, 0x51, 0x46, 0xe2, 0x13, 0x7f, 0x3b, 0x93, 0x51, 0x78, 0x4c, + 0x14, 0x87, 0x91, 0x0a, 0x8c, 0xe3, 0x5b, 0x09, 0xdd, 0xf5, 0x3d, 0x3f, 0x7f, 0x2f, 0x17, 0xbd, + 0xf5, 0x8a, 0xa2, 0xe7, 0x06, 0xb4, 0x58, 0x01, 0x99, 0x85, 0xf8, 0xa4, 0x6f, 0x65, 0xb0, 0x08, + 0xfd, 0x1d, 0xa3, 0x10, 0x99, 0x85, 0xf8, 0x98, 0xff, 0x34, 0x83, 0x45, 0xe8, 0xf0, 0x18, 0x85, + 0x90, 0xcf, 0xc2, 0x48, 0x7d, 0x76, 0x65, 0xd9, 0x4f, 0xcf, 0xf7, 0xb7, 0x73, 0xb1, 0x57, 0x45, + 0x21, 0x0e, 0x5f, 0x15, 0x85, 0x3f, 0xa7, 0x86, 0x60, 0x10, 0x8f, 0x52, 0x6f, 0x97, 0xca, 0xdf, + 0xcc, 0x4d, 0xfc, 0x4e, 0xee, 0x76, 0xa9, 0xfc, 0x3b, 0xb9, 0x89, 0xdf, 0x65, 0xff, 0xff, 0x6e, + 0x6e, 0xe2, 0xf7, 0x72, 0xda, 0x13, 0xe1, 0xb0, 0xa8, 0xb4, 0xa8, 0xe5, 0x2d, 0xb7, 0x75, 0x31, + 0xa8, 0x53, 0x51, 0xfc, 0x67, 0x2a, 0x4a, 0xa4, 0xc2, 0xfa, 0x85, 0x1c, 0x8c, 0xd6, 0x3d, 0x87, + 0xea, 0x1d, 0x11, 0x59, 0xee, 0x22, 0x94, 0xb9, 0xf3, 0xb3, 0xff, 0x52, 0x5b, 0x0b, 0x7e, 0x93, + 0xcb, 0x30, 0x3e, 0xaf, 0xbb, 0x1e, 0x36, 0xb1, 0x66, 0x19, 0xf4, 0x31, 0x3e, 0xfc, 0x2b, 0x68, + 0x31, 0x28, 0x99, 0xe7, 0x74, 0xbc, 0x1c, 0x06, 0x13, 0x2d, 0x6c, 0x1b, 0x50, 0xad, 0xfc, 0x9d, + 0xcd, 0xc9, 0x01, 0x8c, 0x9f, 0x16, 0x2b, 0xab, 0xfe, 0x7e, 0x0e, 0x12, 0x6e, 0xd9, 0x7b, 0x8f, + 0xa0, 0xb0, 0x04, 0xa7, 0x62, 0x01, 0x6c, 0xc5, 0xeb, 0xc5, 0x1d, 0xc6, 0xb7, 0x8d, 0x97, 0x26, + 0x9f, 0x0a, 0x5e, 0xcd, 0xdd, 0xd5, 0xe6, 0x45, 0xb0, 0x3c, 0x4c, 0xf3, 0xd0, 0x73, 0xda, 0x9a, + 0x84, 0x12, 0xc1, 0x90, 0xbe, 0x37, 0x11, 0x46, 0xe7, 0x24, 0x97, 0x45, 0x38, 0x87, 0x5c, 0x18, + 0x62, 0x2f, 0x96, 0x54, 0x9e, 0x87, 0x6f, 0xf8, 0x1c, 0x8c, 0xd6, 0x3a, 0x5d, 0xea, 0xb8, 0xb6, + 0xa5, 0x7b, 0xb6, 0x23, 0x5e, 0xc3, 0x63, 0xf8, 0x35, 0x53, 0x82, 0xcb, 0x21, 0xc1, 0x64, 0x7a, + 0x72, 0xd5, 0xcf, 0x54, 0x57, 0xc0, 0xb8, 0xa8, 0xf8, 0xa4, 0x35, 0x9e, 0xa8, 0x9c, 0x53, 0x30, + 0xd2, 0xbb, 0xae, 0x8e, 0xef, 0x2b, 0x03, 0xd2, 0x1e, 0x03, 0xc8, 0xa4, 0x48, 0x41, 0x5e, 0x80, + 0x12, 0xde, 0x47, 0xb9, 0x98, 0x81, 0x52, 0x04, 0xfe, 0x6b, 0x23, 0x44, 0x0e, 0xb3, 0xc6, 0x69, + 0xc8, 0x1d, 0x98, 0x08, 0x2f, 0xdb, 0x6f, 0x39, 0x76, 0xaf, 0xeb, 0xe7, 0x9c, 0xc1, 0x04, 0xef, + 0x0f, 0x03, 0x5c, 0xa3, 0x85, 0x48, 0x89, 0x45, 0xa2, 0x20, 0x99, 0x83, 0x53, 0x21, 0x8c, 0x89, + 0xc8, 0xcf, 0x75, 0x85, 0x79, 0x46, 0x25, 0x5e, 0x4c, 0x9c, 0x91, 0x3c, 0xa3, 0xb1, 0x62, 0xa4, + 0x06, 0x43, 0x7e, 0xd4, 0xbf, 0xf2, 0xb6, 0x4a, 0x7a, 0x46, 0x44, 0xfd, 0x1b, 0x92, 0xe3, 0xfd, + 0xf9, 0xe5, 0xc9, 0x2c, 0x8c, 0x6b, 0x76, 0xcf, 0xa3, 0x2b, 0xb6, 0xd8, 0xa5, 0x8a, 0xe8, 0x92, + 0xd8, 0x26, 0x87, 0x61, 0x1a, 0x9e, 0xed, 0xe7, 0xc7, 0x97, 0xf3, 0xb4, 0x47, 0x4b, 0x91, 0x45, + 0x38, 0x9d, 0x70, 0x4b, 0x90, 0xb3, 0xd6, 0x4b, 0x9f, 0x97, 0x64, 0x96, 0x2c, 0x4a, 0x7e, 0x3c, + 0x07, 0xa5, 0x15, 0x47, 0x37, 0x3d, 0x57, 0x3c, 0xcd, 0x3c, 0x77, 0x6d, 0xdd, 0xd1, 0xbb, 0x4c, + 0x3f, 0xae, 0x61, 0xe0, 0xdb, 0x7b, 0x7a, 0xbb, 0x47, 0xdd, 0xa9, 0xfb, 0xec, 0xeb, 0xfe, 0xfb, + 0xcd, 0xc9, 0x37, 0x5b, 0x78, 0xf8, 0x79, 0xad, 0x69, 0x77, 0xae, 0xb7, 0x1c, 0xfd, 0x91, 0xe9, + 0xa1, 0x89, 0xa9, 0xb7, 0xaf, 0x7b, 0xb4, 0x8d, 0x67, 0xac, 0xd7, 0xf5, 0xae, 0x79, 0x1d, 0x03, + 0xac, 0x5f, 0x0f, 0x38, 0xf1, 0x1a, 0x98, 0x0a, 0x78, 0xf8, 0x97, 0xac, 0x02, 0x1c, 0x47, 0x16, + 0x01, 0xc4, 0xa7, 0x56, 0xba, 0x5d, 0xf1, 0xce, 0x53, 0x3a, 0x99, 0xf4, 0x31, 0x5c, 0xb1, 0x03, + 0x81, 0xe9, 0x5d, 0x29, 0xa8, 0xb0, 0x26, 0x71, 0x60, 0x5a, 0xb0, 0x22, 0x5a, 0xe4, 0x8b, 0x69, + 0x2c, 0x94, 0xb8, 0xdf, 0xd8, 0x14, 0x21, 0xc5, 0x8b, 0x91, 0x55, 0x38, 0x25, 0xf8, 0x06, 0x29, + 0x48, 0xc6, 0xa3, 0xb3, 0x42, 0x0c, 0xcd, 0x95, 0x36, 0x68, 0xa3, 0x21, 0xc0, 0x72, 0x1d, 0xb1, + 0x12, 0x64, 0x2a, 0x4c, 0x99, 0xbc, 0xa8, 0x77, 0xa8, 0xab, 0x9c, 0x42, 0x8d, 0xbd, 0xb4, 0xb5, + 0x39, 0xa9, 0xf8, 0xe5, 0x31, 0x00, 0xa6, 0x2c, 0xba, 0x68, 0x11, 0x99, 0x07, 0xd7, 0xfa, 0x89, + 0x14, 0x1e, 0x71, 0x9d, 0x8f, 0x16, 0x21, 0xd3, 0x30, 0x16, 0x3c, 0x33, 0xb9, 0x7b, 0xb7, 0x56, + 0xc5, 0x87, 0xa4, 0x22, 0x06, 0x6a, 0x2c, 0x49, 0x88, 0xcc, 0x24, 0x52, 0x46, 0x8a, 0xcd, 0xc1, + 0x5f, 0x96, 0xc6, 0x62, 0x73, 0x74, 0x53, 0x62, 0x73, 0x2c, 0x93, 0xb7, 0x61, 0xa4, 0x72, 0xbf, + 0x2e, 0x62, 0x8e, 0xb8, 0xca, 0x99, 0x30, 0xe3, 0x94, 0xbe, 0xee, 0x36, 0xfc, 0xf8, 0x24, 0x72, + 0xd3, 0x65, 0x7a, 0x32, 0x03, 0xe3, 0x11, 0x4f, 0x35, 0x57, 0x39, 0x8b, 0x1c, 0xb0, 0xe5, 0x3a, + 0x62, 0x1a, 0x8e, 0x40, 0xc9, 0xc3, 0x2b, 0x5a, 0x88, 0x69, 0x4d, 0xd5, 0x74, 0x31, 0x7b, 0x8f, + 0x46, 0x31, 0xbc, 0x09, 0x3e, 0x4b, 0x2d, 0x73, 0xad, 0x31, 0x04, 0xaa, 0xe1, 0x70, 0x9c, 0xdc, + 0xa3, 0xb1, 0x62, 0xe4, 0x7d, 0x20, 0x98, 0xef, 0x87, 0x1a, 0xfe, 0xc5, 0x65, 0xad, 0xea, 0x2a, + 0xe7, 0x31, 0x00, 0x38, 0x89, 0x87, 0x53, 0xa8, 0x55, 0xa7, 0x2e, 0x8b, 0xe9, 0xe3, 0x69, 0x9d, + 0x97, 0x6a, 0xf8, 0xa1, 0x14, 0x1a, 0x66, 0x24, 0x19, 0x72, 0x0a, 0x57, 0xb2, 0x0e, 0x17, 0x96, + 0x1d, 0xfa, 0xc8, 0xb4, 0x7b, 0xae, 0xbf, 0x7c, 0xf8, 0xf3, 0xd6, 0x85, 0x6d, 0xe7, 0xad, 0x67, + 0x45, 0xc5, 0xe7, 0xba, 0x0e, 0x7d, 0xd4, 0xf0, 0xc3, 0x3e, 0x47, 0xa2, 0x96, 0x66, 0x71, 0xc7, + 0x94, 0xce, 0x1f, 0xf4, 0x1c, 0x2a, 0xe0, 0x26, 0x75, 0x15, 0x25, 0x9c, 0x6a, 0x79, 0xa4, 0x1a, + 0x33, 0xc0, 0x45, 0x52, 0x3a, 0x47, 0x8b, 0x11, 0x0d, 0xc8, 0xad, 0x69, 0xff, 0x12, 0xbb, 0xd2, + 0xe4, 0x89, 0x6f, 0x95, 0x27, 0x90, 0x99, 0xca, 0xc4, 0xd2, 0x6a, 0x06, 0x21, 0xe0, 0x1b, 0xba, + 0xc0, 0xcb, 0x62, 0x49, 0x96, 0x26, 0xf3, 0x30, 0xb1, 0xec, 0xe0, 0x91, 0xda, 0x1d, 0xba, 0xb1, + 0x6c, 0xb7, 0xcd, 0xe6, 0x06, 0xbe, 0x8e, 0x15, 0x53, 0x65, 0x97, 0xe3, 0x1a, 0x0f, 0xe9, 0x46, + 0xa3, 0x8b, 0x58, 0x79, 0x59, 0x89, 0x97, 0x94, 0x43, 0x32, 0x3f, 0xb9, 0xb3, 0x90, 0xcc, 0x14, + 0x26, 0xc4, 0x15, 0xf8, 0x63, 0x8f, 0x5a, 0x6c, 0xa9, 0x77, 0xc5, 0x4b, 0x58, 0x25, 0x76, 0x65, + 0x1e, 0xe0, 0xf9, 0xd4, 0x21, 0x46, 0x19, 0x0d, 0xc0, 0x72, 0xc3, 0xe2, 0x45, 0x92, 0x71, 0x8b, + 0x9f, 0xda, 0x43, 0xdc, 0xe2, 0xbf, 0x55, 0x90, 0xe7, 0x5f, 0x72, 0x09, 0x8a, 0x52, 0x5a, 0x21, + 0x0c, 0xca, 0x8a, 0x21, 0xd8, 0x8b, 0x22, 0xd6, 0xf4, 0xb0, 0xb0, 0x5d, 0x82, 0xe8, 0x3b, 0x98, + 0x47, 0x32, 0x0c, 0xd4, 0xa9, 0x85, 0x04, 0x98, 0xc3, 0xaf, 0xb7, 0xda, 0x36, 0x9b, 0x18, 0x98, + 0xbf, 0x20, 0x85, 0xdb, 0x40, 0x28, 0x8f, 0xcb, 0x2f, 0x91, 0x90, 0x1b, 0x30, 0xe2, 0x1f, 0xe5, + 0x86, 0x41, 0x89, 0x31, 0x5e, 0xbb, 0x98, 0xad, 0x45, 0x38, 0x78, 0x89, 0x88, 0xbc, 0x01, 0x10, + 0x4e, 0x07, 0xc2, 0xd2, 0xc2, 0xa5, 0x42, 0x9e, 0x3d, 0xe4, 0xa5, 0x22, 0xa4, 0x66, 0x13, 0xa7, + 0xac, 0x8e, 0x7e, 0xd6, 0x52, 0x9c, 0x38, 0x23, 0x3a, 0x2c, 0x2b, 0x48, 0xb4, 0x08, 0x59, 0x82, + 0xd3, 0x09, 0x0d, 0x14, 0x21, 0x8c, 0x31, 0x73, 0x7d, 0x8a, 0xfa, 0xca, 0x0b, 0x73, 0xa2, 0x2c, + 0x79, 0x0e, 0x0a, 0x77, 0xb5, 0x9a, 0x08, 0xa3, 0xca, 0x23, 0xf0, 0x46, 0x62, 0x2c, 0x31, 0xac, + 0xfa, 0xa3, 0xf9, 0xc4, 0xda, 0xc4, 0xa4, 0x27, 0x58, 0x49, 0x3d, 0x88, 0xd2, 0xf3, 0xeb, 0xe7, + 0xd2, 0x93, 0x88, 0xc8, 0x15, 0x28, 0x2f, 0xb3, 0x99, 0xa1, 0x69, 0xb7, 0x45, 0x7f, 0x62, 0x40, + 0xac, 0xae, 0x80, 0x69, 0x01, 0x96, 0xdc, 0x90, 0x92, 0xed, 0x4a, 0x91, 0xc9, 0xfd, 0x64, 0xbb, + 0xf1, 0x10, 0xdd, 0x98, 0x76, 0xf7, 0x46, 0x2c, 0x79, 0x97, 0x28, 0x93, 0xb2, 0x2e, 0x86, 0xc9, + 0xba, 0x02, 0xab, 0x74, 0x70, 0x3b, 0xab, 0x54, 0xfd, 0x3b, 0xb9, 0xe4, 0x38, 0x23, 0x37, 0x93, + 0x41, 0x82, 0x71, 0x11, 0x0a, 0x80, 0x72, 0xad, 0x41, 0xb8, 0xe0, 0x48, 0xb8, 0xdf, 0xfc, 0x9e, + 0xc3, 0xfd, 0x16, 0x76, 0x19, 0xee, 0x57, 0xfd, 0x7f, 0x8a, 0x7d, 0x5d, 0xb6, 0x0f, 0x25, 0x2c, + 0xdc, 0xeb, 0x6c, 0x67, 0xc5, 0x6a, 0xaf, 0xb8, 0x89, 0xfd, 0x01, 0xf7, 0x48, 0x6d, 0xe8, 0x7c, + 0x68, 0xb9, 0x5a, 0x94, 0x92, 0xbc, 0x03, 0xa3, 0xfe, 0x07, 0x60, 0x18, 0x69, 0x29, 0xfc, 0x71, + 0xb0, 0xaa, 0xc5, 0x02, 0x2e, 0x47, 0x0a, 0x90, 0x57, 0x60, 0x18, 0x6d, 0x9a, 0xae, 0xde, 0xf4, + 0x63, 0x8c, 0xf3, 0xa0, 0xe4, 0x3e, 0x50, 0x0e, 0x7d, 0x16, 0x50, 0x92, 0x2f, 0x41, 0x49, 0x24, + 0xda, 0xe0, 0x79, 0xe8, 0xaf, 0xef, 0xc0, 0xc7, 0xfd, 0x9a, 0x9c, 0x64, 0x83, 0xef, 0x52, 0x10, + 0x10, 0xd9, 0xa5, 0xf0, 0xfc, 0x1a, 0x2b, 0x70, 0x66, 0xd9, 0xa1, 0x06, 0xbe, 0xa6, 0x98, 0x79, + 0xdc, 0x75, 0x44, 0x0a, 0x14, 0x3e, 0xca, 0x71, 0x91, 0xea, 0xfa, 0x68, 0xb6, 0x7c, 0x0a, 0xbc, + 0x1c, 0xe8, 0x38, 0xa5, 0x38, 0xb3, 0x5c, 0x78, 0x4b, 0xee, 0xd0, 0x8d, 0x75, 0xdb, 0x31, 0x78, + 0x96, 0x10, 0x31, 0x7f, 0x0b, 0x41, 0x3f, 0x14, 0x28, 0xd9, 0x72, 0x89, 0x16, 0xba, 0xf8, 0x3a, + 0x8c, 0xec, 0x35, 0x51, 0xc5, 0xaf, 0xe7, 0x33, 0x1e, 0x3f, 0x1d, 0xdf, 0x5c, 0x81, 0x41, 0x02, + 0xeb, 0xc1, 0x8c, 0x04, 0xd6, 0x7f, 0x9c, 0xcf, 0x78, 0xd9, 0x75, 0xac, 0x13, 0xcd, 0x06, 0xc2, + 0x88, 0x26, 0x9a, 0x0d, 0x73, 0xfc, 0x9a, 0x86, 0x26, 0x13, 0xc5, 0x52, 0x52, 0x97, 0xb6, 0x4d, + 0x49, 0xfd, 0x4b, 0x85, 0x7e, 0x2f, 0xdf, 0x4e, 0x64, 0xbf, 0x1b, 0xd9, 0xdf, 0x80, 0x91, 0x40, + 0xb2, 0xb5, 0x2a, 0x1a, 0x3d, 0x63, 0x41, 0x5a, 0x1c, 0x0e, 0xc6, 0x32, 0x12, 0x11, 0xb9, 0xca, + 0xdb, 0x5a, 0x37, 0x3f, 0xe0, 0x09, 0x1a, 0xc6, 0x44, 0xe8, 0x7d, 0xdd, 0xd3, 0x1b, 0xae, 0xf9, + 0x01, 0xd5, 0x02, 0xb4, 0xfa, 0x9f, 0xe5, 0x53, 0x9f, 0x0f, 0x9e, 0xf4, 0xd1, 0x2e, 0xfa, 0x28, + 0x45, 0x88, 0xfc, 0xe1, 0xe3, 0x89, 0x10, 0x77, 0x21, 0xc4, 0x3f, 0xca, 0xa7, 0x3e, 0x13, 0x3d, + 0x11, 0xe2, 0x6e, 0x66, 0x8b, 0x17, 0x60, 0x58, 0xb3, 0xd7, 0xdd, 0x69, 0xdc, 0xd8, 0xf0, 0xb9, + 0x02, 0x27, 0x6a, 0xc7, 0x5e, 0x77, 0x1b, 0xb8, 0x65, 0xd1, 0x42, 0x02, 0xf5, 0x7b, 0xf9, 0x3e, + 0x0f, 0x69, 0x4f, 0x04, 0xff, 0x51, 0x2e, 0x91, 0xbf, 0x95, 0x8f, 0x3c, 0xd4, 0x3d, 0xbe, 0xc2, + 0xbe, 0x0e, 0x50, 0x6f, 0xae, 0xd1, 0x8e, 0x2e, 0x25, 0xb9, 0xc2, 0x73, 0x07, 0x17, 0xa1, 0x22, + 0x39, 0x72, 0x48, 0xa2, 0x7e, 0x33, 0x1f, 0x7b, 0xa9, 0x7c, 0x22, 0xbb, 0x1d, 0xcb, 0x2e, 0xd0, + 0x3a, 0xf1, 0xf8, 0xfa, 0x44, 0x72, 0x3b, 0x95, 0xdc, 0x4f, 0xe4, 0x63, 0xef, 0xd4, 0x8f, 0xad, + 0xec, 0xd8, 0x00, 0x4c, 0xbe, 0x9f, 0x3f, 0xb6, 0x9a, 0xf4, 0x02, 0x0c, 0x0b, 0x39, 0x04, 0x4b, + 0x05, 0x9f, 0xf7, 0x39, 0x10, 0x4f, 0x59, 0x03, 0x02, 0xf5, 0x4f, 0xe4, 0x21, 0x1a, 0x3f, 0xe0, + 0x98, 0xea, 0xd0, 0x6f, 0xe5, 0xa3, 0x91, 0x13, 0x8e, 0xaf, 0xfe, 0x5c, 0x03, 0xa8, 0xf7, 0x56, + 0x9b, 0x22, 0xf0, 0xee, 0xa0, 0x74, 0x4c, 0x1f, 0x40, 0x35, 0x89, 0x42, 0xfd, 0x7f, 0xf3, 0xa9, + 0xe1, 0x1c, 0x8e, 0xaf, 0x00, 0x5f, 0xc6, 0x53, 0xf1, 0xa6, 0x15, 0x4e, 0xe4, 0x78, 0x08, 0xc9, + 0xc6, 0x5f, 0x22, 0x33, 0xa2, 0x4f, 0x48, 0x3e, 0x9b, 0x62, 0xae, 0x61, 0xde, 0x86, 0xd0, 0x5c, + 0x93, 0xaf, 0x21, 0x24, 0xc3, 0xed, 0xef, 0xe7, 0xb7, 0x8b, 0x7e, 0x71, 0x9c, 0x57, 0xd5, 0xa1, + 0x65, 0x7d, 0x03, 0xa3, 0x34, 0xb2, 0x9e, 0x18, 0xe5, 0x79, 0xfb, 0xba, 0x1c, 0x24, 0xdf, 0xbd, + 0x09, 0x2a, 0xf5, 0x9f, 0x0f, 0xa6, 0x87, 0x5e, 0x38, 0xbe, 0x22, 0xbc, 0x04, 0xc5, 0x65, 0xdd, + 0x5b, 0x13, 0x9a, 0x8c, 0x57, 0x7a, 0x5d, 0xdd, 0x5b, 0xd3, 0x10, 0x4a, 0xae, 0x42, 0x59, 0xd3, + 0xd7, 0xf9, 0x99, 0x67, 0x29, 0xcc, 0xa9, 0xe8, 0xe8, 0xeb, 0x0d, 0x7e, 0xee, 0x19, 0xa0, 0x89, + 0x1a, 0xe4, 0xf4, 0xe4, 0x27, 0xdf, 0x98, 0x50, 0x8e, 0xe7, 0xf4, 0x0c, 0x32, 0x79, 0x5e, 0x82, + 0xe2, 0x94, 0x6d, 0x6c, 0xe0, 0xf5, 0xd5, 0x28, 0xaf, 0x6c, 0xd5, 0x36, 0x36, 0x34, 0x84, 0x92, + 0x9f, 0xcc, 0xc1, 0xd0, 0x1c, 0xd5, 0x0d, 0x36, 0x42, 0x86, 0xfb, 0x79, 0x9d, 0x7c, 0xe1, 0x60, + 0xbc, 0x4e, 0x4e, 0xaf, 0xf1, 0xca, 0x64, 0x45, 0x11, 0xf5, 0x93, 0x5b, 0x50, 0x9e, 0xd6, 0x3d, + 0xda, 0xb2, 0x9d, 0x0d, 0xf4, 0xa3, 0x19, 0x0f, 0xdd, 0xf7, 0x23, 0xfa, 0xe3, 0x13, 0xf1, 0x9b, + 0xb1, 0xa6, 0xf8, 0xa5, 0x05, 0x85, 0x99, 0x58, 0x56, 0x74, 0xa7, 0x45, 0x3d, 0x91, 0xbf, 0x1a, + 0xc5, 0xe2, 0x21, 0x44, 0x13, 0x98, 0xf0, 0x58, 0x79, 0x34, 0xfd, 0x58, 0x19, 0xad, 0x47, 0xf4, + 0xb5, 0xc3, 0x4c, 0x9a, 0x63, 0xb8, 0xe8, 0x73, 0xeb, 0x11, 0xa1, 0x98, 0x48, 0x53, 0x93, 0x48, + 0xd4, 0xef, 0x0e, 0x42, 0xea, 0x43, 0xed, 0x13, 0x25, 0x3f, 0x51, 0xf2, 0x50, 0xc9, 0xab, 0x09, + 0x25, 0xbf, 0x98, 0x7c, 0xfa, 0xff, 0x31, 0xd5, 0xf0, 0x9f, 0x2d, 0x26, 0x02, 0x87, 0x1c, 0xef, + 0xdd, 0x65, 0x28, 0xbd, 0xc1, 0x6d, 0xa5, 0x17, 0x0c, 0x88, 0xd2, 0xb6, 0x03, 0x62, 0x68, 0xa7, + 0x03, 0xa2, 0x9c, 0x39, 0x20, 0x42, 0x05, 0x19, 0xce, 0x54, 0x90, 0x9a, 0x18, 0x34, 0xd0, 0x3f, + 0x7f, 0xc9, 0xa5, 0xad, 0xcd, 0xc9, 0x71, 0x36, 0x9a, 0x52, 0x13, 0x97, 0x20, 0x0b, 0xf5, 0xf7, + 0x8b, 0x7d, 0xa2, 0xfd, 0x1c, 0x8a, 0x8e, 0xbc, 0x0c, 0x85, 0x4a, 0xb7, 0x2b, 0xf4, 0xe3, 0x8c, + 0x14, 0x68, 0x28, 0xa3, 0x14, 0xa3, 0x26, 0x6f, 0x40, 0xa1, 0x72, 0xbf, 0x1e, 0xcf, 0x59, 0x52, + 0xb9, 0x5f, 0x17, 0x5f, 0x92, 0x59, 0xf6, 0x7e, 0x9d, 0xbc, 0x15, 0x06, 0x0f, 0x5d, 0xeb, 0x59, + 0x0f, 0xc5, 0x46, 0x51, 0xb8, 0xdb, 0xfa, 0xee, 0x38, 0x4d, 0x86, 0x62, 0xdb, 0xc5, 0x18, 0x6d, + 0x4c, 0x9b, 0x4a, 0x3b, 0xd7, 0xa6, 0xa1, 0x6d, 0xb5, 0xa9, 0xbc, 0x53, 0x6d, 0x1a, 0xde, 0x81, + 0x36, 0xc1, 0xb6, 0xda, 0x34, 0xb2, 0x7f, 0x6d, 0xea, 0xc2, 0xc5, 0x64, 0x84, 0xb6, 0x40, 0x23, + 0x34, 0x20, 0x49, 0xac, 0x70, 0x2c, 0xc1, 0xab, 0xff, 0x1e, 0xc7, 0x36, 0xd6, 0x11, 0xdd, 0x70, + 0x19, 0x5e, 0xf6, 0x4f, 0x4b, 0x96, 0x56, 0x7f, 0x3d, 0x9f, 0x1d, 0x58, 0xee, 0x68, 0x4e, 0x71, + 0x3f, 0x94, 0x2a, 0xa5, 0x62, 0xf4, 0xa1, 0x7f, 0xb6, 0x94, 0x63, 0x6c, 0xd3, 0x64, 0xf6, 0xed, + 0x5c, 0x56, 0xb4, 0xbb, 0x7d, 0x49, 0xec, 0x93, 0x49, 0x8f, 0x36, 0xf4, 0xd3, 0x77, 0xa3, 0xae, + 0x6c, 0xb3, 0x30, 0x2a, 0x0b, 0x51, 0x48, 0x69, 0x27, 0x02, 0x8e, 0x94, 0x53, 0xff, 0x4e, 0x0e, + 0xce, 0xdc, 0xe9, 0xad, 0x52, 0xe1, 0xc1, 0x16, 0x34, 0xe3, 0x7d, 0x00, 0x06, 0x16, 0x4e, 0x2c, + 0x39, 0x74, 0x62, 0xf9, 0xb4, 0x1c, 0xa9, 0x2e, 0x56, 0xe0, 0x5a, 0x48, 0xcd, 0x1d, 0x58, 0x9e, + 0xf2, 0x9d, 0x39, 0x1f, 0xf6, 0x56, 0x69, 0x23, 0xe1, 0xc9, 0x22, 0x71, 0xbf, 0xf8, 0x36, 0x77, + 0x93, 0xdf, 0xab, 0xd3, 0xc8, 0xaf, 0xe6, 0x33, 0x83, 0x03, 0x1e, 0xd9, 0x2c, 0x96, 0x3f, 0x90, + 0xda, 0x2b, 0xf1, 0x6c, 0x96, 0x29, 0x24, 0x31, 0x8e, 0x69, 0x5c, 0xd2, 0x05, 0x76, 0xc4, 0x73, + 0xab, 0x7e, 0xa4, 0x02, 0xfb, 0x87, 0xb9, 0xcc, 0x20, 0x8e, 0x47, 0x55, 0x60, 0xea, 0xff, 0x52, + 0xf0, 0x63, 0x47, 0xee, 0xeb, 0x13, 0x5e, 0x80, 0x61, 0xf1, 0x84, 0x3e, 0xea, 0x80, 0x2b, 0x8e, + 0xf2, 0xf0, 0x68, 0x38, 0x20, 0x60, 0xcb, 0xbc, 0xe4, 0x1d, 0x2c, 0x39, 0xe0, 0x4a, 0x9e, 0xc1, + 0x9a, 0x44, 0xc2, 0x16, 0xf2, 0x99, 0xc7, 0xa6, 0x87, 0x56, 0x01, 0xeb, 0xcb, 0x02, 0x5f, 0xc8, + 0xe9, 0x63, 0xd3, 0xe3, 0x36, 0x41, 0x80, 0x66, 0x8b, 0x74, 0x3d, 0xcc, 0x1c, 0x2f, 0x16, 0x69, + 0x57, 0x24, 0xd0, 0x17, 0xcf, 0xc6, 0x5e, 0x80, 0x61, 0xe1, 0xd5, 0x2a, 0xdc, 0x4c, 0x44, 0x6b, + 0x85, 0x1f, 0x2c, 0xb6, 0x36, 0x20, 0x60, 0x1c, 0x35, 0xda, 0x0a, 0x1d, 0xeb, 0x90, 0xa3, 0x83, + 0x10, 0x4d, 0x60, 0xc8, 0x0d, 0x18, 0xaf, 0x7b, 0xba, 0x65, 0xe8, 0x8e, 0xb1, 0xd4, 0xf3, 0xba, + 0x3d, 0x4f, 0x36, 0x4a, 0x5d, 0xcf, 0xb0, 0x7b, 0x9e, 0x16, 0xa3, 0x20, 0x9f, 0x81, 0x31, 0x1f, + 0x32, 0xe3, 0x38, 0xb6, 0x23, 0x5b, 0x1e, 0xae, 0x67, 0x50, 0xc7, 0xd1, 0xa2, 0x04, 0xe4, 0xb3, + 0x30, 0x56, 0xb3, 0x1e, 0xd9, 0x4d, 0xfe, 0x8c, 0x5c, 0x9b, 0x17, 0x76, 0x08, 0x3e, 0xc5, 0x32, + 0x03, 0x44, 0xa3, 0xe7, 0xb4, 0xb5, 0x28, 0xa1, 0xba, 0x95, 0x4f, 0x86, 0xd8, 0x3c, 0xbe, 0x9b, + 0x96, 0xab, 0x51, 0x67, 0x3a, 0xf4, 0x20, 0x45, 0x83, 0x50, 0xf6, 0xe5, 0xe5, 0x76, 0xe1, 0x0d, + 0x28, 0xdf, 0xa1, 0x1b, 0xdc, 0xef, 0xb3, 0x14, 0xba, 0x0a, 0x3f, 0x14, 0x30, 0xf9, 0xc4, 0xd5, + 0xa7, 0x53, 0xbf, 0x95, 0x4f, 0x06, 0x0f, 0x3d, 0xbe, 0xc2, 0xfe, 0x0c, 0x0c, 0xa1, 0x28, 0x6b, + 0xfe, 0x91, 0x3f, 0x0a, 0x10, 0xc5, 0x1d, 0xf5, 0x40, 0xf6, 0xc9, 0xd4, 0x5f, 0x2c, 0xc5, 0x23, + 0xca, 0x1e, 0x5f, 0xe9, 0xbd, 0x09, 0x23, 0xd3, 0xb6, 0xe5, 0x9a, 0xae, 0x47, 0xad, 0xa6, 0xaf, + 0xb0, 0x4f, 0x30, 0x83, 0xaa, 0x19, 0x82, 0xe5, 0x37, 0x48, 0x12, 0xf5, 0x5e, 0x94, 0x97, 0xbc, + 0x0a, 0xc3, 0x28, 0x72, 0xf4, 0x93, 0xe6, 0x13, 0x1e, 0xde, 0x16, 0xac, 0x32, 0x60, 0xdc, 0x49, + 0x3a, 0x24, 0x25, 0x77, 0xa1, 0x3c, 0xbd, 0x66, 0xb6, 0x0d, 0x87, 0x5a, 0xe8, 0x2f, 0x2c, 0x05, + 0xee, 0x88, 0xf6, 0xe5, 0x35, 0xfc, 0x17, 0x69, 0x79, 0x73, 0x9a, 0xa2, 0x58, 0xe4, 0x15, 0x96, + 0x80, 0x5d, 0xfc, 0x99, 0x3c, 0x40, 0x58, 0x80, 0x3c, 0x03, 0xf9, 0x20, 0x29, 0x33, 0xba, 0xa9, + 0x44, 0x34, 0x28, 0x8f, 0x4b, 0x85, 0x18, 0xdb, 0xf9, 0x6d, 0xc7, 0xf6, 0x5d, 0x28, 0xf1, 0x13, + 0x2f, 0xf4, 0x24, 0x97, 0x82, 0x5c, 0x66, 0x36, 0xf8, 0x1a, 0xd2, 0xf3, 0xcd, 0x2c, 0x5a, 0x9e, + 0x11, 0xaf, 0x6c, 0xce, 0xec, 0x62, 0x13, 0x06, 0xf1, 0x2f, 0x72, 0x19, 0x8a, 0x2b, 0x7e, 0x42, + 0xd7, 0x31, 0x3e, 0x4b, 0xc7, 0xe4, 0x87, 0x78, 0xd6, 0x4d, 0xd3, 0xb6, 0xe5, 0xb1, 0xaa, 0xb1, + 0xd5, 0xa3, 0x42, 0x2e, 0x02, 0x16, 0x91, 0x8b, 0x80, 0xa9, 0xff, 0x55, 0x3e, 0x25, 0xd6, 0xf1, + 0xf1, 0x1d, 0x26, 0xaf, 0x03, 0xe0, 0x93, 0x6e, 0x26, 0x4f, 0xff, 0x89, 0x06, 0x8e, 0x12, 0x64, + 0x84, 0x6a, 0x1b, 0xd9, 0x76, 0x84, 0xc4, 0xea, 0xdf, 0xcb, 0x25, 0x02, 0xe4, 0xee, 0x4b, 0x8e, + 0xb2, 0x55, 0x96, 0xdf, 0xa3, 0x19, 0xeb, 0xf7, 0x45, 0x61, 0x77, 0x7d, 0x11, 0xfd, 0x96, 0x03, + 0xb0, 0x4c, 0x0f, 0xf3, 0x5b, 0xbe, 0x9b, 0x4f, 0x0b, 0x17, 0x7c, 0x34, 0x55, 0xfc, 0x66, 0x60, + 0x94, 0x16, 0x63, 0x01, 0xda, 0x11, 0x1a, 0x4f, 0x3a, 0x2d, 0xcc, 0xd4, 0x2f, 0xc3, 0xa9, 0x58, + 0x10, 0x5d, 0x91, 0xff, 0xf7, 0x72, 0xff, 0x68, 0xbc, 0xd9, 0xc1, 0x00, 0x22, 0x64, 0xea, 0xff, + 0x97, 0xeb, 0x1f, 0x42, 0xf9, 0xd0, 0x55, 0x27, 0x45, 0x00, 0x85, 0x7f, 0x3d, 0x02, 0x38, 0x80, + 0x6d, 0xf0, 0xd1, 0x16, 0xc0, 0xc7, 0x64, 0xf2, 0xf8, 0xa8, 0x05, 0xf0, 0x8b, 0xb9, 0x6d, 0x23, + 0x60, 0x1f, 0xb6, 0x0c, 0xd4, 0xff, 0x31, 0x97, 0x1a, 0xa9, 0x7a, 0x5f, 0xed, 0x7a, 0x0b, 0x4a, + 0xdc, 0xad, 0x46, 0xb4, 0x4a, 0xca, 0xed, 0xc5, 0xa0, 0x59, 0xd9, 0xf0, 0x39, 0x96, 0xcc, 0xc3, + 0x10, 0x6f, 0x83, 0x21, 0x7a, 0xe3, 0x13, 0x7d, 0xc2, 0x65, 0x1b, 0x59, 0x93, 0xa3, 0x40, 0xab, + 0x7f, 0x37, 0x97, 0x08, 0x9c, 0x7d, 0x88, 0xdf, 0x16, 0x4e, 0xd5, 0x85, 0x9d, 0x4f, 0xd5, 0xea, + 0x3f, 0xcb, 0xa7, 0xc7, 0xed, 0x3e, 0xc4, 0x0f, 0x39, 0x88, 0xe3, 0xb4, 0xbd, 0xad, 0x5b, 0x2b, + 0x30, 0x1e, 0x95, 0x85, 0x58, 0xb6, 0x9e, 0x4e, 0x8f, 0x5e, 0x9e, 0xd1, 0x8a, 0x18, 0x0f, 0xf5, + 0x3b, 0xb9, 0x64, 0xc8, 0xf1, 0x43, 0x9f, 0x9f, 0xf6, 0xa6, 0x2d, 0xd1, 0x4f, 0xf9, 0x98, 0xac, + 0x35, 0x07, 0xf1, 0x29, 0x1f, 0x93, 0x55, 0x63, 0x6f, 0x9f, 0xf2, 0xcb, 0xf9, 0xac, 0x88, 0xed, + 0x87, 0xfe, 0x41, 0x5f, 0x94, 0x85, 0xcc, 0x5b, 0x26, 0x3e, 0xed, 0x99, 0xac, 0x10, 0xe9, 0x19, + 0x3c, 0x13, 0x7c, 0xf6, 0x36, 0xc6, 0x53, 0x85, 0xf5, 0x31, 0x51, 0xe4, 0xa3, 0x21, 0xac, 0x8f, + 0xc9, 0x50, 0xf9, 0xf8, 0x09, 0xeb, 0x77, 0xf2, 0x3b, 0x4d, 0x13, 0x70, 0x22, 0xbc, 0x84, 0xf0, + 0xbe, 0x9e, 0x4f, 0xa6, 0xaf, 0x38, 0x74, 0x31, 0xcd, 0x42, 0x49, 0x24, 0xd2, 0xc8, 0x14, 0x0e, + 0xc7, 0x67, 0x59, 0x34, 0xe2, 0x3b, 0x6e, 0x82, 0xb8, 0xc8, 0xd9, 0x99, 0x48, 0x38, 0xad, 0xfa, + 0xbd, 0x5c, 0x2c, 0xd7, 0xc3, 0xa1, 0x1c, 0x21, 0xec, 0x69, 0x49, 0x22, 0x6f, 0xfb, 0x87, 0x99, + 0xc5, 0x58, 0xac, 0xed, 0xe0, 0x7b, 0xaa, 0xd4, 0xd3, 0xcd, 0x76, 0xbc, 0xbc, 0x88, 0x09, 0xf0, + 0xad, 0x3c, 0x9c, 0x4e, 0x90, 0x92, 0xcb, 0x91, 0x50, 0x3a, 0x78, 0x2c, 0x19, 0x73, 0x1e, 0xe7, + 0x41, 0x75, 0x76, 0x71, 0x92, 0x7a, 0x19, 0x8a, 0x55, 0x7d, 0x83, 0x7f, 0xdb, 0x20, 0x67, 0x69, + 0xe8, 0x1b, 0xf2, 0x89, 0x1b, 0xe2, 0xc9, 0x2a, 0x9c, 0xe3, 0xf7, 0x21, 0xa6, 0x6d, 0xad, 0x98, + 0x1d, 0x5a, 0xb3, 0x16, 0xcc, 0x76, 0xdb, 0x74, 0xc5, 0xa5, 0xde, 0x0b, 0x5b, 0x9b, 0x93, 0x57, + 0x3c, 0xdb, 0xd3, 0xdb, 0x0d, 0xea, 0x93, 0x35, 0x3c, 0xb3, 0x43, 0x1b, 0xa6, 0xd5, 0xe8, 0x20, + 0xa5, 0xc4, 0x32, 0x9d, 0x15, 0xa9, 0xf1, 0xb0, 0xea, 0xf5, 0xa6, 0x6e, 0x59, 0xd4, 0xa8, 0x59, + 0x53, 0x1b, 0x1e, 0xe5, 0x97, 0x81, 0x05, 0x7e, 0x24, 0xc8, 0xdf, 0x86, 0x73, 0x34, 0x63, 0xbc, + 0xca, 0x08, 0xb4, 0x94, 0x42, 0xea, 0xef, 0x16, 0x53, 0xd2, 0x7c, 0x1c, 0x21, 0xf5, 0xf1, 0x7b, + 0xba, 0xb8, 0x4d, 0x4f, 0x5f, 0x87, 0x21, 0x11, 0xb7, 0x56, 0x5c, 0x30, 0xa0, 0x33, 0xfb, 0x23, + 0x0e, 0x92, 0x6f, 0x68, 0x04, 0x15, 0x69, 0xc3, 0xc5, 0x15, 0xd6, 0x4d, 0xe9, 0x9d, 0x59, 0xda, + 0x43, 0x67, 0xf6, 0xe1, 0x47, 0xde, 0x83, 0x0b, 0x88, 0x4d, 0xe9, 0xd6, 0x21, 0xac, 0x0a, 0x63, + 0x54, 0xf1, 0xaa, 0xd2, 0x3b, 0x37, 0xab, 0x3c, 0xf9, 0x22, 0x8c, 0x06, 0x03, 0xc4, 0xa4, 0xae, + 0xb8, 0xb9, 0xe8, 0x33, 0xce, 0x78, 0x00, 0x38, 0x06, 0x46, 0x17, 0xb2, 0x68, 0x10, 0xb1, 0x08, + 0x2f, 0xf5, 0x7f, 0xc8, 0xf5, 0x4b, 0x37, 0x72, 0xe8, 0xb3, 0xf2, 0xdb, 0x30, 0x64, 0xf0, 0x8f, + 0x12, 0x3a, 0xd5, 0x3f, 0x21, 0x09, 0x27, 0xd5, 0xfc, 0x32, 0xea, 0x3f, 0xcd, 0xf5, 0xcd, 0x72, + 0x72, 0xd4, 0x3f, 0xef, 0xeb, 0x85, 0x8c, 0xcf, 0x13, 0x93, 0xe8, 0x55, 0x98, 0x30, 0xc3, 0x30, + 0xec, 0x8d, 0x30, 0xfc, 0x94, 0x76, 0x4a, 0x82, 0xe3, 0xe8, 0xba, 0x09, 0xe7, 0x7d, 0xc7, 0x47, + 0xc7, 0xf7, 0x10, 0x73, 0x1b, 0x3d, 0xc7, 0xe4, 0xe3, 0x52, 0x3b, 0xeb, 0xc6, 0xdc, 0xc7, 0xdc, + 0xbb, 0x8e, 0xc9, 0x2a, 0xd0, 0xbd, 0x35, 0x6a, 0xe9, 0x8d, 0x75, 0xdb, 0x79, 0x88, 0x51, 0x46, + 0xf9, 0xe0, 0xd4, 0x4e, 0x71, 0xf8, 0x7d, 0x1f, 0x4c, 0x9e, 0x83, 0xb1, 0x56, 0xbb, 0x47, 0x83, + 0xb8, 0x8e, 0xfc, 0xae, 0x4f, 0x1b, 0x65, 0xc0, 0xe0, 0x86, 0xe4, 0x29, 0x00, 0x24, 0xf2, 0x30, + 0x07, 0x0d, 0x5e, 0xec, 0x69, 0xc3, 0x0c, 0xb2, 0x22, 0xba, 0xeb, 0x22, 0xd7, 0x6a, 0x2e, 0xa4, + 0x46, 0xdb, 0xb6, 0x5a, 0x0d, 0x8f, 0x3a, 0x1d, 0x6c, 0x28, 0x3a, 0x33, 0x68, 0xe7, 0x91, 0x02, + 0xaf, 0x4e, 0xdc, 0x79, 0xdb, 0x6a, 0xad, 0x50, 0xa7, 0xc3, 0x9a, 0xfa, 0x02, 0x10, 0xd1, 0x54, + 0x07, 0x0f, 0x3d, 0xf8, 0xc7, 0xa1, 0x37, 0x83, 0x26, 0x3e, 0x82, 0x9f, 0x86, 0xe0, 0x87, 0x4d, + 0xc2, 0x08, 0x0f, 0x6e, 0xc7, 0x85, 0x86, 0x2e, 0x0c, 0x1a, 0x70, 0x10, 0xca, 0xeb, 0x3c, 0x08, + 0xef, 0x0a, 0xee, 0xd5, 0xad, 0x89, 0x5f, 0xea, 0x87, 0x85, 0xb4, 0xc4, 0x2c, 0xfb, 0x52, 0xb4, + 0x70, 0x5a, 0xcd, 0xef, 0x6a, 0x5a, 0x3d, 0x65, 0xf5, 0x3a, 0x0d, 0xbd, 0xdb, 0x6d, 0x3c, 0x30, + 0xdb, 0xf8, 0xac, 0x0a, 0x17, 0x3e, 0x6d, 0xcc, 0xea, 0x75, 0x2a, 0xdd, 0xee, 0x2c, 0x07, 0x92, + 0xe7, 0xe1, 0x34, 0xa3, 0xc3, 0x4e, 0x0a, 0x28, 0x8b, 0x48, 0xc9, 0x18, 0x60, 0x74, 0x58, 0x9f, + 0xf6, 0x09, 0x28, 0x0b, 0x9e, 0x7c, 0xad, 0x1a, 0xd4, 0x86, 0x38, 0x33, 0x97, 0xf5, 0x5c, 0xc0, + 0x86, 0x4f, 0xae, 0x83, 0xda, 0xb0, 0x5f, 0x1e, 0x63, 0x20, 0x5b, 0xbd, 0x0e, 0x8f, 0x88, 0x35, + 0x84, 0xc8, 0xe0, 0x37, 0xb9, 0x0c, 0xe3, 0x8c, 0x4b, 0x20, 0x30, 0x1e, 0x36, 0x76, 0x50, 0x8b, + 0x41, 0xc9, 0x0d, 0x38, 0x1b, 0x81, 0x70, 0x1b, 0x94, 0x3f, 0x13, 0x18, 0xd4, 0x52, 0x71, 0xea, + 0x37, 0x0b, 0xd1, 0x74, 0x31, 0x87, 0xd0, 0x11, 0x17, 0x60, 0xc8, 0x76, 0x5a, 0x8d, 0x9e, 0xd3, + 0x16, 0x63, 0xaf, 0x64, 0x3b, 0xad, 0xbb, 0x4e, 0x9b, 0x9c, 0x83, 0x12, 0xeb, 0x1d, 0xd3, 0x10, + 0x43, 0x6c, 0x50, 0xef, 0x76, 0x6b, 0x06, 0xa9, 0xf0, 0x0e, 0xc1, 0x90, 0xa3, 0x8d, 0x26, 0x6e, + 0xed, 0xb9, 0x53, 0xc2, 0x20, 0x5f, 0xf1, 0x12, 0x48, 0xec, 0x27, 0x0c, 0x44, 0xca, 0x0f, 0x02, + 0x62, 0x2c, 0x0c, 0xdc, 0x96, 0x18, 0xbc, 0x4f, 0xe2, 0x2c, 0x04, 0x32, 0x64, 0xc1, 0x37, 0x31, + 0x06, 0xa9, 0x02, 0x09, 0xa9, 0x3a, 0xb6, 0x61, 0x3e, 0x30, 0x29, 0x7f, 0xd5, 0x31, 0xc8, 0x2f, + 0x7e, 0x93, 0x58, 0x6d, 0xc2, 0x67, 0xb2, 0x20, 0x20, 0xe4, 0x4d, 0xae, 0x84, 0x9c, 0x0e, 0xd7, + 0x3e, 0xde, 0xb7, 0xdc, 0x4e, 0x8b, 0xa1, 0x50, 0x33, 0xb1, 0x3c, 0x2e, 0x84, 0xea, 0x5f, 0x2e, + 0x26, 0x73, 0x06, 0x1d, 0x8a, 0x5d, 0x33, 0x07, 0x20, 0x52, 0x82, 0x85, 0x97, 0x6b, 0x81, 0xc7, + 0x79, 0x88, 0xc9, 0xe0, 0x21, 0x95, 0x25, 0x57, 0xa1, 0xcc, 0xbf, 0xa8, 0x56, 0x15, 0xf6, 0x0e, + 0xba, 0x88, 0xb9, 0x5d, 0xf3, 0xc1, 0x03, 0xf4, 0x27, 0x0b, 0xd0, 0xe4, 0x32, 0x0c, 0x55, 0x17, + 0xeb, 0xf5, 0xca, 0xa2, 0x7f, 0x53, 0x8c, 0xef, 0x4b, 0x0c, 0xcb, 0x6d, 0xb8, 0xba, 0xe5, 0x6a, + 0x3e, 0x92, 0x3c, 0x07, 0xa5, 0xda, 0x32, 0x92, 0xf1, 0x57, 0x93, 0x23, 0x5b, 0x9b, 0x93, 0x43, + 0x66, 0x97, 0x53, 0x09, 0x14, 0xd6, 0x7b, 0xaf, 0x56, 0x95, 0xdc, 0x25, 0x78, 0xbd, 0x8f, 0x4c, + 0x03, 0xaf, 0x9d, 0xb5, 0x00, 0x4d, 0x5e, 0x81, 0xd1, 0x3a, 0x75, 0x4c, 0xbd, 0xbd, 0xd8, 0xc3, + 0xad, 0xa2, 0x14, 0x4a, 0xd1, 0x45, 0x78, 0xc3, 0x42, 0x84, 0x16, 0x21, 0x23, 0x97, 0xa0, 0x38, + 0x67, 0x5a, 0xfe, 0x13, 0x06, 0xf4, 0x71, 0x5f, 0x33, 0x2d, 0x4f, 0x43, 0x28, 0x79, 0x0e, 0x0a, + 0xb7, 0x57, 0x6a, 0xc2, 0x13, 0x0c, 0x79, 0xbd, 0xef, 0x45, 0xc2, 0x32, 0xde, 0x5e, 0xa9, 0x91, + 0x57, 0x60, 0x98, 0x2d, 0x62, 0xd4, 0x6a, 0x52, 0x57, 0x19, 0xc1, 0x8f, 0xe1, 0x61, 0x04, 0x7d, + 0xa0, 0xec, 0xd3, 0x11, 0x50, 0xaa, 0xff, 0x47, 0x3e, 0x3d, 0xa9, 0xd3, 0x21, 0x0c, 0xf5, 0x3d, + 0xde, 0x22, 0xc7, 0x14, 0xac, 0xb8, 0x0f, 0x05, 0x7b, 0x00, 0xa7, 0x2a, 0x46, 0xc7, 0xb4, 0x2a, + 0xf8, 0xd3, 0x5d, 0x98, 0xad, 0xe0, 0xd4, 0x21, 0x3d, 0xcf, 0x8b, 0xa1, 0xc5, 0xf7, 0xf0, 0x80, + 0xbf, 0x0c, 0xd5, 0xd0, 0x39, 0xae, 0xd1, 0x79, 0xa0, 0x37, 0x9a, 0x3c, 0x1f, 0x92, 0x16, 0x67, + 0xaa, 0xfe, 0x74, 0x7e, 0x9b, 0x3c, 0x54, 0xc7, 0x51, 0xfa, 0xea, 0x37, 0xf2, 0xfd, 0x53, 0x81, + 0x1d, 0x4b, 0xa1, 0xfc, 0x51, 0x3e, 0x25, 0x31, 0xd7, 0xbe, 0x24, 0x71, 0x15, 0xca, 0x9c, 0x4d, + 0xe0, 0xc6, 0x8b, 0xb3, 0x19, 0x57, 0x56, 0x9c, 0x45, 0x7d, 0x34, 0x59, 0x84, 0xb3, 0x95, 0x07, + 0x0f, 0x68, 0xd3, 0x0b, 0x43, 0x3f, 0x2f, 0x86, 0x41, 0x58, 0x79, 0xa8, 0x5b, 0x81, 0x0f, 0x43, + 0x47, 0x63, 0xb0, 0x91, 0xd4, 0x72, 0x64, 0x05, 0xce, 0xc7, 0xe1, 0x75, 0xbe, 0x05, 0x28, 0x4a, + 0xd1, 0x6f, 0x13, 0x1c, 0xf9, 0x7f, 0x5a, 0x46, 0xd9, 0xb4, 0x56, 0xe2, 0x54, 0x3d, 0xd8, 0xaf, + 0x95, 0x38, 0x6f, 0xa7, 0x96, 0x53, 0xbf, 0x55, 0x90, 0xf3, 0x97, 0x1d, 0x5f, 0x87, 0xab, 0x9b, + 0x11, 0x37, 0xeb, 0x9d, 0x0e, 0x99, 0x57, 0x44, 0x04, 0x11, 0xa3, 0xe7, 0xf8, 0x1e, 0x89, 0x41, + 0x04, 0x03, 0x04, 0xca, 0xeb, 0x50, 0x40, 0x49, 0x6a, 0x50, 0xac, 0x38, 0x2d, 0x6e, 0xde, 0x6e, + 0xf7, 0xa8, 0x4a, 0x77, 0x5a, 0x6e, 0xfa, 0xa3, 0x2a, 0xc6, 0x42, 0xfd, 0xd3, 0xf9, 0x3e, 0x29, + 0xc7, 0x8e, 0xe5, 0x24, 0xf2, 0xe7, 0xf2, 0x59, 0xc9, 0xc3, 0x8e, 0xaa, 0xeb, 0xd8, 0x47, 0x2c, + 0x9c, 0xa3, 0xed, 0x57, 0x77, 0xc0, 0xc2, 0xc9, 0x48, 0x64, 0x76, 0x22, 0x9c, 0x0f, 0xf3, 0x59, + 0xb9, 0xdc, 0x8e, 0xed, 0x2c, 0x93, 0x91, 0x3e, 0xee, 0x44, 0x57, 0x7e, 0x3e, 0x9f, 0x99, 0x41, + 0xef, 0x44, 0x3a, 0xea, 0x57, 0xf3, 0x99, 0x19, 0x00, 0x8f, 0xe5, 0x50, 0x4a, 0xd5, 0x96, 0x93, + 0xb1, 0x24, 0xa4, 0xf3, 0x07, 0xf9, 0xf4, 0x9c, 0x8b, 0x87, 0xa0, 0x2a, 0x07, 0xe1, 0x81, 0xe7, + 0x0b, 0xb4, 0xb8, 0x2f, 0x81, 0x0e, 0x1e, 0xa8, 0x40, 0x0f, 0x6d, 0xec, 0x7d, 0xbf, 0x0a, 0xf4, + 0x00, 0x06, 0xef, 0x71, 0x16, 0xe8, 0x4f, 0x15, 0x92, 0x79, 0x46, 0x8f, 0xe5, 0x11, 0xe5, 0x14, + 0x94, 0xfd, 0x33, 0x0c, 0x21, 0xd0, 0x1d, 0x77, 0xa7, 0x5f, 0x8e, 0xbc, 0x03, 0xa7, 0x42, 0x59, + 0xca, 0x91, 0xa9, 0xf0, 0x7a, 0xa3, 0xc9, 0x50, 0x8d, 0xf7, 0x19, 0x4e, 0x84, 0x50, 0x89, 0x53, + 0xab, 0xdf, 0x2b, 0x24, 0x93, 0xb5, 0x9e, 0xf4, 0xc6, 0x1e, 0x7b, 0xe3, 0x2e, 0x9c, 0x9f, 0xee, + 0x39, 0x0e, 0xb5, 0xbc, 0xf4, 0x4e, 0xc1, 0xc3, 0xe5, 0x26, 0xa7, 0x68, 0x24, 0x3b, 0x27, 0xa3, + 0x30, 0x63, 0x2b, 0xbc, 0xef, 0xe3, 0x6c, 0x87, 0x42, 0xb6, 0x3d, 0x4e, 0x91, 0xc6, 0x36, 0xbd, + 0xb0, 0xfa, 0xf7, 0xf3, 0xc9, 0xf4, 0xba, 0x27, 0x5d, 0xbf, 0xb7, 0xae, 0x57, 0x3f, 0x2c, 0xc4, + 0x53, 0x0c, 0x9f, 0x2c, 0x10, 0x7b, 0xef, 0x0e, 0x5f, 0x92, 0x38, 0x6e, 0xa4, 0xaf, 0xf0, 0xe1, + 0x59, 0x5f, 0xe1, 0xe3, 0xd5, 0x5f, 0x2d, 0xc6, 0xd3, 0x35, 0x9f, 0x74, 0xc7, 0xe1, 0x75, 0x07, + 0x59, 0x82, 0xb3, 0x62, 0x6e, 0xf3, 0x41, 0x98, 0xa2, 0x40, 0xcc, 0x5f, 0x3c, 0xd3, 0x99, 0x98, + 0x16, 0x7b, 0x2e, 0x75, 0x1a, 0x9e, 0xee, 0x3e, 0x6c, 0x60, 0x4e, 0x03, 0x2d, 0xb5, 0x20, 0x63, + 0x28, 0x66, 0xb5, 0x28, 0xc3, 0x72, 0xc8, 0xd0, 0x9f, 0x10, 0x13, 0x0c, 0xd3, 0x0a, 0xaa, 0xbf, + 0x95, 0x83, 0x89, 0xf8, 0xe7, 0x90, 0x6b, 0x50, 0x66, 0xbf, 0x83, 0x67, 0xe1, 0x52, 0x1e, 0x65, + 0xce, 0x91, 0x5f, 0x19, 0xfb, 0x34, 0xe4, 0x55, 0x18, 0xc6, 0xdb, 0x79, 0x2c, 0x90, 0x0f, 0x5f, + 0xe3, 0x87, 0x05, 0x30, 0xb9, 0x27, 0x2f, 0x16, 0x92, 0x92, 0x37, 0x61, 0xa4, 0x16, 0xba, 0x21, + 0x89, 0x3b, 0x19, 0xf4, 0x7e, 0x94, 0x4a, 0x86, 0x04, 0x9a, 0x4c, 0xad, 0x7e, 0x27, 0x1f, 0x4f, + 0x2b, 0x7e, 0xa2, 0xea, 0x7b, 0x53, 0xf5, 0xe7, 0x17, 0xb8, 0xaa, 0xdf, 0x31, 0x2d, 0x83, 0x3c, + 0x01, 0xe7, 0xee, 0xd6, 0x67, 0xb4, 0xc6, 0x9d, 0xda, 0x62, 0xb5, 0x71, 0x77, 0xb1, 0xbe, 0x3c, + 0x33, 0x5d, 0x9b, 0xad, 0xcd, 0x54, 0x27, 0x06, 0xc8, 0x19, 0x38, 0x15, 0xa2, 0xe6, 0xee, 0x2e, + 0x54, 0x16, 0x27, 0x72, 0xe4, 0x34, 0x8c, 0x85, 0xc0, 0xa9, 0xa5, 0x95, 0x89, 0xfc, 0xf3, 0x9f, + 0x82, 0x11, 0x74, 0xbf, 0xe2, 0xd7, 0xc5, 0x64, 0x14, 0xca, 0x4b, 0x53, 0xf5, 0x19, 0xed, 0x1e, + 0x32, 0x01, 0x28, 0x55, 0x67, 0x16, 0x19, 0xc3, 0xdc, 0xf3, 0xff, 0x77, 0x0e, 0xa0, 0x3e, 0xbb, + 0xb2, 0x2c, 0x08, 0x47, 0x60, 0xa8, 0xb6, 0x78, 0xaf, 0x32, 0x5f, 0x63, 0x74, 0x65, 0x28, 0x2e, + 0x2d, 0xcf, 0xb0, 0x1a, 0x86, 0x61, 0x70, 0x7a, 0x7e, 0xa9, 0x3e, 0x33, 0x91, 0x67, 0x40, 0x6d, + 0xa6, 0x52, 0x9d, 0x28, 0x30, 0xe0, 0x7d, 0xad, 0xb6, 0x32, 0x33, 0x51, 0x64, 0x7f, 0xce, 0xd7, + 0x57, 0x2a, 0x2b, 0x13, 0x83, 0xec, 0xcf, 0x59, 0xfc, 0xb3, 0xc4, 0x98, 0xd5, 0x67, 0x56, 0xf0, + 0xc7, 0x10, 0x6b, 0xc2, 0xac, 0xff, 0xab, 0xcc, 0x50, 0x8c, 0x75, 0xb5, 0xa6, 0x4d, 0x0c, 0xb3, + 0x1f, 0x8c, 0x25, 0xfb, 0x01, 0xac, 0x71, 0xda, 0xcc, 0xc2, 0xd2, 0xbd, 0x99, 0x89, 0x11, 0xc6, + 0x6b, 0xe1, 0x0e, 0x03, 0x8f, 0xb2, 0x3f, 0xb5, 0x05, 0xf6, 0xe7, 0x18, 0xe3, 0xa4, 0xcd, 0x54, + 0xe6, 0x97, 0x2b, 0x2b, 0x73, 0x13, 0xe3, 0xac, 0x3d, 0xc8, 0xf3, 0x14, 0x2f, 0xb9, 0x58, 0x59, + 0x98, 0x99, 0x98, 0x10, 0x34, 0xd5, 0xf9, 0xda, 0xe2, 0x9d, 0x89, 0xd3, 0xd8, 0x90, 0xf7, 0x16, + 0xf0, 0x07, 0x61, 0x05, 0xf0, 0xaf, 0x33, 0xcf, 0xff, 0x20, 0x94, 0x96, 0xea, 0x38, 0x0a, 0x2e, + 0xc0, 0x99, 0xa5, 0x7a, 0x63, 0xe5, 0xbd, 0xe5, 0x99, 0x98, 0xbc, 0x4f, 0xc3, 0x98, 0x8f, 0x98, + 0xaf, 0x2d, 0xde, 0xfd, 0x02, 0x97, 0xb6, 0x0f, 0x5a, 0xa8, 0x4c, 0x2f, 0xd5, 0x27, 0xf2, 0xac, + 0x57, 0x7c, 0xd0, 0xfd, 0xda, 0x62, 0x75, 0xe9, 0x7e, 0x7d, 0xa2, 0xf0, 0xfc, 0x23, 0x18, 0xe5, + 0xb9, 0x1d, 0x97, 0x1c, 0xb3, 0x65, 0x5a, 0xe4, 0x29, 0x78, 0xa2, 0x3a, 0x73, 0xaf, 0x36, 0x3d, + 0xd3, 0x58, 0xd2, 0x6a, 0xb7, 0x6a, 0x8b, 0xb1, 0x9a, 0xce, 0xc1, 0xe9, 0x28, 0xba, 0xb2, 0x5c, + 0x9b, 0xc8, 0x91, 0xf3, 0x40, 0xa2, 0xe0, 0xdb, 0x95, 0x85, 0xd9, 0x89, 0x3c, 0x51, 0xe0, 0x6c, + 0x14, 0x5e, 0x5b, 0x5c, 0xb9, 0xbb, 0x38, 0x33, 0x51, 0x78, 0xfe, 0x2f, 0xe5, 0xe0, 0x5c, 0x6a, + 0xfc, 0x5f, 0xa2, 0xc2, 0xd3, 0x33, 0xf3, 0x95, 0xfa, 0x4a, 0x6d, 0xba, 0x3e, 0x53, 0xd1, 0xa6, + 0xe7, 0x1a, 0xd3, 0x95, 0x95, 0x99, 0x5b, 0x4b, 0xda, 0x7b, 0x8d, 0x5b, 0x33, 0x8b, 0x33, 0x5a, + 0x65, 0x7e, 0x62, 0x80, 0x3c, 0x07, 0x93, 0x19, 0x34, 0xf5, 0x99, 0xe9, 0xbb, 0x5a, 0x6d, 0xe5, + 0xbd, 0x89, 0x1c, 0x79, 0x16, 0x9e, 0xca, 0x24, 0x62, 0xbf, 0x27, 0xf2, 0xe4, 0x69, 0xb8, 0x98, + 0x45, 0xf2, 0xee, 0xfc, 0x44, 0xe1, 0xf9, 0x9f, 0xcb, 0x01, 0x49, 0x06, 0x70, 0x25, 0xcf, 0xc0, + 0x25, 0xa6, 0x17, 0x8d, 0xec, 0x06, 0x3e, 0x0b, 0x4f, 0xa5, 0x52, 0x48, 0xcd, 0x9b, 0x84, 0x27, + 0x33, 0x48, 0x44, 0xe3, 0x2e, 0x81, 0x92, 0x4e, 0x80, 0x4d, 0xfb, 0xcd, 0x1c, 0x9c, 0x4b, 0xf5, + 0xd0, 0x20, 0x57, 0xe0, 0x13, 0x95, 0xea, 0x02, 0xeb, 0x9b, 0xe9, 0x95, 0xda, 0xd2, 0x62, 0xbd, + 0xb1, 0x30, 0x5b, 0x69, 0x30, 0xed, 0xbb, 0x5b, 0x8f, 0xf5, 0xe6, 0x65, 0x50, 0xfb, 0x50, 0x4e, + 0xcf, 0x55, 0x16, 0x6f, 0xb1, 0xe1, 0x47, 0x3e, 0x01, 0xcf, 0x64, 0xd2, 0xcd, 0x2c, 0x56, 0xa6, + 0xe6, 0x67, 0xaa, 0x13, 0x79, 0xf2, 0x49, 0x78, 0x36, 0x93, 0xaa, 0x5a, 0xab, 0x73, 0xb2, 0xc2, + 0x54, 0xf5, 0x3b, 0xff, 0xd3, 0xd3, 0x03, 0xdf, 0xf9, 0xc3, 0xa7, 0x73, 0xff, 0xe0, 0x0f, 0x9f, + 0xce, 0xfd, 0xb3, 0x3f, 0x7c, 0x3a, 0xf7, 0xc5, 0x1b, 0xbb, 0x09, 0xcc, 0xcb, 0xa7, 0xad, 0xd5, + 0x12, 0xde, 0x96, 0xbe, 0xfc, 0xff, 0x07, 0x00, 0x00, 0xff, 0xff, 0xa2, 0xd4, 0xb1, 0xb5, 0x89, + 0x7e, 0x01, 0x00, } func (m *Metadata) Marshal() (dAtA []byte, err error) { @@ -20459,7 +20578,7 @@ func (m *SFTP) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *Subsystem) Marshal() (dAtA []byte, err error) { +func (m *SFTPSummary) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -20469,12 +20588,12 @@ func (m *Subsystem) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *Subsystem) MarshalTo(dAtA []byte) (int, error) { +func (m *SFTPSummary) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *Subsystem) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *SFTPSummary) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -20483,20 +20602,40 @@ func (m *Subsystem) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - if len(m.Error) > 0 { - i -= len(m.Error) - copy(dAtA[i:], m.Error) - i = encodeVarintEvents(dAtA, i, uint64(len(m.Error))) - i-- - dAtA[i] = 0x2a + if len(m.FileTransferStats) > 0 { + for iNdEx := len(m.FileTransferStats) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.FileTransferStats[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 + } } - if len(m.Name) > 0 { - i -= len(m.Name) - copy(dAtA[i:], m.Name) - i = encodeVarintEvents(dAtA, i, uint64(len(m.Name))) - i-- - dAtA[i] = 0x22 + { + size, err := m.ServerMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + { + size, err := m.SessionMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0x22 { size, err := m.ConnectionMetadata.MarshalToSizedBuffer(dAtA[:i]) if err != nil { @@ -20530,7 +20669,7 @@ func (m *Subsystem) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *ClientDisconnect) Marshal() (dAtA []byte, err error) { +func (m *FileTransferStat) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -20540,12 +20679,12 @@ func (m *ClientDisconnect) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *ClientDisconnect) MarshalTo(dAtA []byte) (int, error) { +func (m *FileTransferStat) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *ClientDisconnect) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *FileTransferStat) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -20554,23 +20693,64 @@ func (m *ClientDisconnect) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - if len(m.Reason) > 0 { - i -= len(m.Reason) - copy(dAtA[i:], m.Reason) - i = encodeVarintEvents(dAtA, i, uint64(len(m.Reason))) + if m.BytesWritten != 0 { + i = encodeVarintEvents(dAtA, i, uint64(m.BytesWritten)) + i-- + dAtA[i] = 0x18 + } + if m.BytesRead != 0 { + i = encodeVarintEvents(dAtA, i, uint64(m.BytesRead)) + i-- + dAtA[i] = 0x10 + } + if len(m.Path) > 0 { + i -= len(m.Path) + copy(dAtA[i:], m.Path) + i = encodeVarintEvents(dAtA, i, uint64(len(m.Path))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *Subsystem) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Subsystem) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Subsystem) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.Error) > 0 { + i -= len(m.Error) + copy(dAtA[i:], m.Error) + i = encodeVarintEvents(dAtA, i, uint64(len(m.Error))) i-- dAtA[i] = 0x2a } - { - size, err := m.ServerMetadata.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintEvents(dAtA, i, uint64(size)) + if len(m.Name) > 0 { + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintEvents(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0x22 } - i-- - dAtA[i] = 0x22 { size, err := m.ConnectionMetadata.MarshalToSizedBuffer(dAtA[:i]) if err != nil { @@ -20604,7 +20784,7 @@ func (m *ClientDisconnect) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *AuthAttempt) Marshal() (dAtA []byte, err error) { +func (m *ClientDisconnect) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -20614,12 +20794,12 @@ func (m *AuthAttempt) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *AuthAttempt) MarshalTo(dAtA []byte) (int, error) { +func (m *ClientDisconnect) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *AuthAttempt) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *ClientDisconnect) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -20628,8 +20808,15 @@ func (m *AuthAttempt) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + if len(m.Reason) > 0 { + i -= len(m.Reason) + copy(dAtA[i:], m.Reason) + i = encodeVarintEvents(dAtA, i, uint64(len(m.Reason))) + i-- + dAtA[i] = 0x2a + } { - size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.ServerMetadata.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -20671,64 +20858,7 @@ func (m *AuthAttempt) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *UserTokenCreate) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *UserTokenCreate) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *UserTokenCreate) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.XXX_unrecognized != nil { - i -= len(m.XXX_unrecognized) - copy(dAtA[i:], m.XXX_unrecognized) - } - { - size, err := m.UserMetadata.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintEvents(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - { - size, err := m.ResourceMetadata.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintEvents(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - { - size, err := m.Metadata.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintEvents(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *RoleCreate) Marshal() (dAtA []byte, err error) { +func (m *AuthAttempt) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -20738,12 +20868,12 @@ func (m *RoleCreate) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *RoleCreate) MarshalTo(dAtA []byte) (int, error) { +func (m *AuthAttempt) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *RoleCreate) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *AuthAttempt) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -20753,7 +20883,7 @@ func (m *RoleCreate) MarshalToSizedBuffer(dAtA []byte) (int, error) { copy(dAtA[i:], m.XXX_unrecognized) } { - size, err := m.ConnectionMetadata.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.Status.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -20763,7 +20893,7 @@ func (m *RoleCreate) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x22 { - size, err := m.UserMetadata.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.ConnectionMetadata.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -20773,7 +20903,7 @@ func (m *RoleCreate) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x1a { - size, err := m.ResourceMetadata.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.UserMetadata.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -20795,7 +20925,7 @@ func (m *RoleCreate) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *RoleUpdate) Marshal() (dAtA []byte, err error) { +func (m *UserTokenCreate) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -20805,12 +20935,12 @@ func (m *RoleUpdate) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *RoleUpdate) MarshalTo(dAtA []byte) (int, error) { +func (m *UserTokenCreate) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *RoleUpdate) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *UserTokenCreate) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -20819,16 +20949,6 @@ func (m *RoleUpdate) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - { - size, err := m.ConnectionMetadata.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintEvents(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 { size, err := m.UserMetadata.MarshalToSizedBuffer(dAtA[:i]) if err != nil { @@ -20862,7 +20982,7 @@ func (m *RoleUpdate) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *RoleDelete) Marshal() (dAtA []byte, err error) { +func (m *RoleCreate) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -20872,12 +20992,12 @@ func (m *RoleDelete) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *RoleDelete) MarshalTo(dAtA []byte) (int, error) { +func (m *RoleCreate) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *RoleDelete) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *RoleCreate) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -20929,64 +21049,7 @@ func (m *RoleDelete) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *BotCreate) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *BotCreate) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *BotCreate) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.XXX_unrecognized != nil { - i -= len(m.XXX_unrecognized) - copy(dAtA[i:], m.XXX_unrecognized) - } - { - size, err := m.UserMetadata.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintEvents(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - { - size, err := m.ResourceMetadata.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintEvents(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - { - size, err := m.Metadata.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintEvents(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *BotUpdate) Marshal() (dAtA []byte, err error) { +func (m *RoleUpdate) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -20996,12 +21059,12 @@ func (m *BotUpdate) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *BotUpdate) MarshalTo(dAtA []byte) (int, error) { +func (m *RoleUpdate) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *BotUpdate) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *RoleUpdate) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -21011,27 +21074,7 @@ func (m *BotUpdate) MarshalToSizedBuffer(dAtA []byte) (int, error) { copy(dAtA[i:], m.XXX_unrecognized) } { - size, err := m.UserMetadata.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintEvents(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x1a - { - size, err := m.ResourceMetadata.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintEvents(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x12 - { - size, err := m.Metadata.MarshalToSizedBuffer(dAtA[:i]) + size, err := m.ConnectionMetadata.MarshalToSizedBuffer(dAtA[:i]) if err != nil { return 0, err } @@ -21039,34 +21082,7 @@ func (m *BotUpdate) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintEvents(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0xa - return len(dAtA) - i, nil -} - -func (m *BotDelete) Marshal() (dAtA []byte, err error) { - size := m.Size() - dAtA = make([]byte, size) - n, err := m.MarshalToSizedBuffer(dAtA[:size]) - if err != nil { - return nil, err - } - return dAtA[:n], nil -} - -func (m *BotDelete) MarshalTo(dAtA []byte) (int, error) { - size := m.Size() - return m.MarshalToSizedBuffer(dAtA[:size]) -} - -func (m *BotDelete) MarshalToSizedBuffer(dAtA []byte) (int, error) { - i := len(dAtA) - _ = i - var l int - _ = l - if m.XXX_unrecognized != nil { - i -= len(m.XXX_unrecognized) - copy(dAtA[i:], m.XXX_unrecognized) - } + dAtA[i] = 0x22 { size, err := m.UserMetadata.MarshalToSizedBuffer(dAtA[:i]) if err != nil { @@ -21100,7 +21116,7 @@ func (m *BotDelete) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *TrustedClusterCreate) Marshal() (dAtA []byte, err error) { +func (m *RoleDelete) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -21110,12 +21126,12 @@ func (m *TrustedClusterCreate) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *TrustedClusterCreate) MarshalTo(dAtA []byte) (int, error) { +func (m *RoleDelete) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *TrustedClusterCreate) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *RoleDelete) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -21167,7 +21183,7 @@ func (m *TrustedClusterCreate) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *TrustedClusterDelete) Marshal() (dAtA []byte, err error) { +func (m *BotCreate) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -21177,12 +21193,12 @@ func (m *TrustedClusterDelete) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *TrustedClusterDelete) MarshalTo(dAtA []byte) (int, error) { +func (m *BotCreate) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *TrustedClusterDelete) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *BotCreate) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -21191,16 +21207,6 @@ func (m *TrustedClusterDelete) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - { - size, err := m.ConnectionMetadata.MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintEvents(dAtA, i, uint64(size)) - } - i-- - dAtA[i] = 0x22 { size, err := m.UserMetadata.MarshalToSizedBuffer(dAtA[:i]) if err != nil { @@ -21234,7 +21240,7 @@ func (m *TrustedClusterDelete) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *ProvisionTokenCreate) Marshal() (dAtA []byte, err error) { +func (m *BotUpdate) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -21244,12 +21250,12 @@ func (m *ProvisionTokenCreate) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *ProvisionTokenCreate) MarshalTo(dAtA []byte) (int, error) { +func (m *BotUpdate) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *ProvisionTokenCreate) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *BotUpdate) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -21258,22 +21264,6 @@ func (m *ProvisionTokenCreate) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - if len(m.JoinMethod) > 0 { - i -= len(m.JoinMethod) - copy(dAtA[i:], m.JoinMethod) - i = encodeVarintEvents(dAtA, i, uint64(len(m.JoinMethod))) - i-- - dAtA[i] = 0x2a - } - if len(m.Roles) > 0 { - for iNdEx := len(m.Roles) - 1; iNdEx >= 0; iNdEx-- { - i -= len(m.Roles[iNdEx]) - copy(dAtA[i:], m.Roles[iNdEx]) - i = encodeVarintEvents(dAtA, i, uint64(len(m.Roles[iNdEx]))) - i-- - dAtA[i] = 0x22 - } - } { size, err := m.UserMetadata.MarshalToSizedBuffer(dAtA[:i]) if err != nil { @@ -21307,7 +21297,7 @@ func (m *ProvisionTokenCreate) MarshalToSizedBuffer(dAtA []byte) (int, error) { return len(dAtA) - i, nil } -func (m *TrustedClusterTokenCreate) Marshal() (dAtA []byte, err error) { +func (m *BotDelete) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -21317,12 +21307,276 @@ func (m *TrustedClusterTokenCreate) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *TrustedClusterTokenCreate) MarshalTo(dAtA []byte) (int, error) { +func (m *BotDelete) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *TrustedClusterTokenCreate) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *BotDelete) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + { + size, err := m.UserMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size, err := m.ResourceMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.Metadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *TrustedClusterCreate) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TrustedClusterCreate) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TrustedClusterCreate) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + { + size, err := m.ConnectionMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + { + size, err := m.UserMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size, err := m.ResourceMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.Metadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *TrustedClusterDelete) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TrustedClusterDelete) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TrustedClusterDelete) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + { + size, err := m.ConnectionMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + { + size, err := m.UserMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size, err := m.ResourceMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.Metadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *ProvisionTokenCreate) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ProvisionTokenCreate) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ProvisionTokenCreate) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.JoinMethod) > 0 { + i -= len(m.JoinMethod) + copy(dAtA[i:], m.JoinMethod) + i = encodeVarintEvents(dAtA, i, uint64(len(m.JoinMethod))) + i-- + dAtA[i] = 0x2a + } + if len(m.Roles) > 0 { + for iNdEx := len(m.Roles) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Roles[iNdEx]) + copy(dAtA[i:], m.Roles[iNdEx]) + i = encodeVarintEvents(dAtA, i, uint64(len(m.Roles[iNdEx]))) + i-- + dAtA[i] = 0x22 + } + } + { + size, err := m.UserMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size, err := m.ResourceMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.Metadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *TrustedClusterTokenCreate) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TrustedClusterTokenCreate) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TrustedClusterTokenCreate) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -24254,20 +24508,20 @@ func (m *DatabaseSessionEnd) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n352, err352 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.EndTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.EndTime):]) - if err352 != nil { - return 0, err352 + n357, err357 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.EndTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.EndTime):]) + if err357 != nil { + return 0, err357 } - i -= n352 - i = encodeVarintEvents(dAtA, i, uint64(n352)) + i -= n357 + i = encodeVarintEvents(dAtA, i, uint64(n357)) i-- dAtA[i] = 0x32 - n353, err353 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.StartTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTime):]) - if err353 != nil { - return 0, err353 + n358, err358 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.StartTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTime):]) + if err358 != nil { + return 0, err358 } - i -= n353 - i = encodeVarintEvents(dAtA, i, uint64(n353)) + i -= n358 + i = encodeVarintEvents(dAtA, i, uint64(n358)) i-- dAtA[i] = 0x2a { @@ -24934,20 +25188,20 @@ func (m *WindowsDesktopSessionEnd) MarshalToSizedBuffer(dAtA []byte) (int, error i-- dAtA[i] = 0x5a } - n386, err386 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.EndTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.EndTime):]) - if err386 != nil { - return 0, err386 + n391, err391 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.EndTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.EndTime):]) + if err391 != nil { + return 0, err391 } - i -= n386 - i = encodeVarintEvents(dAtA, i, uint64(n386)) + i -= n391 + i = encodeVarintEvents(dAtA, i, uint64(n391)) i-- dAtA[i] = 0x52 - n387, err387 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.StartTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTime):]) - if err387 != nil { - return 0, err387 + n392, err392 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.StartTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTime):]) + if err392 != nil { + return 0, err392 } - i -= n387 - i = encodeVarintEvents(dAtA, i, uint64(n387)) + i -= n392 + i = encodeVarintEvents(dAtA, i, uint64(n392)) i-- dAtA[i] = 0x4a if len(m.DesktopLabels) > 0 { @@ -25281,12 +25535,12 @@ func (m *InstanceJoin) MarshalToSizedBuffer(dAtA []byte) (int, error) { } i-- dAtA[i] = 0x52 - n401, err401 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.TokenExpires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.TokenExpires):]) - if err401 != nil { - return 0, err401 + n406, err406 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.TokenExpires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.TokenExpires):]) + if err406 != nil { + return 0, err406 } - i -= n401 - i = encodeVarintEvents(dAtA, i, uint64(n401)) + i -= n406 + i = encodeVarintEvents(dAtA, i, uint64(n406)) i-- dAtA[i] = 0x4a if m.Attributes != nil { @@ -30844,6 +31098,29 @@ func (m *OneOf_UserTaskDelete) MarshalToSizedBuffer(dAtA []byte) (int, error) { } return len(dAtA) - i, nil } +func (m *OneOf_SFTPSummary) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *OneOf_SFTPSummary) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.SFTPSummary != nil { + { + size, err := m.SFTPSummary.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xb + i-- + dAtA[i] = 0xfa + } + return len(dAtA) - i, nil +} func (m *StreamStatus) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -30868,12 +31145,12 @@ func (m *StreamStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n648, err648 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastUploadTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastUploadTime):]) - if err648 != nil { - return 0, err648 + n654, err654 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastUploadTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastUploadTime):]) + if err654 != nil { + return 0, err654 } - i -= n648 - i = encodeVarintEvents(dAtA, i, uint64(n648)) + i -= n654 + i = encodeVarintEvents(dAtA, i, uint64(n654)) i-- dAtA[i] = 0x1a if m.LastEventIndex != 0 { @@ -31032,12 +31309,12 @@ func (m *Identity) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0xc2 } } - n652, err652 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.PreviousIdentityExpires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.PreviousIdentityExpires):]) - if err652 != nil { - return 0, err652 + n658, err658 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.PreviousIdentityExpires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.PreviousIdentityExpires):]) + if err658 != nil { + return 0, err658 } - i -= n652 - i = encodeVarintEvents(dAtA, i, uint64(n652)) + i -= n658 + i = encodeVarintEvents(dAtA, i, uint64(n658)) i-- dAtA[i] = 0x1 i-- @@ -31185,12 +31462,12 @@ func (m *Identity) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x4a } - n656, err656 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) - if err656 != nil { - return 0, err656 + n662, err662 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) + if err662 != nil { + return 0, err662 } - i -= n656 - i = encodeVarintEvents(dAtA, i, uint64(n656)) + i -= n662 + i = encodeVarintEvents(dAtA, i, uint64(n662)) i-- dAtA[i] = 0x42 if len(m.KubernetesUsers) > 0 { @@ -39470,6 +39747,56 @@ func (m *SFTP) Size() (n int) { return n } +func (m *SFTPSummary) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Metadata.Size() + n += 1 + l + sovEvents(uint64(l)) + l = m.UserMetadata.Size() + n += 1 + l + sovEvents(uint64(l)) + l = m.ConnectionMetadata.Size() + n += 1 + l + sovEvents(uint64(l)) + l = m.SessionMetadata.Size() + n += 1 + l + sovEvents(uint64(l)) + l = m.ServerMetadata.Size() + n += 1 + l + sovEvents(uint64(l)) + if len(m.FileTransferStats) > 0 { + for _, e := range m.FileTransferStats { + l = e.Size() + n += 1 + l + sovEvents(uint64(l)) + } + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + +func (m *FileTransferStat) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Path) + if l > 0 { + n += 1 + l + sovEvents(uint64(l)) + } + if m.BytesRead != 0 { + n += 1 + sovEvents(uint64(m.BytesRead)) + } + if m.BytesWritten != 0 { + n += 1 + sovEvents(uint64(m.BytesWritten)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + func (m *Subsystem) Size() (n int) { if m == nil { return 0 @@ -43803,6 +44130,18 @@ func (m *OneOf_UserTaskDelete) Size() (n int) { } return n } +func (m *OneOf_SFTPSummary) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.SFTPSummary != nil { + l = m.SFTPSummary.Size() + n += 2 + l + sovEvents(uint64(l)) + } + return n +} func (m *StreamStatus) Size() (n int) { if m == nil { return 0 @@ -59543,13 +59882,497 @@ func (m *SFTP) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UserMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.UserMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConnectionMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ConnectionMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SessionMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.SessionMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ServerMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ServerMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field WorkingDirectory", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + 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 ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.WorkingDirectory = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + 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 ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Path = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TargetPath", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + 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 ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.TargetPath = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 9: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Flags", wireType) + } + m.Flags = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Flags |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Attributes", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Attributes == nil { + m.Attributes = &SFTPAttributes{} + } + if err := m.Attributes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 11: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Action", wireType) + } + m.Action = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Action |= SFTPAction(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + 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 ErrInvalidLengthEvents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Error = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipEvents(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthEvents + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *SFTPSummary) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SFTPSummary: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SFTPSummary: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Metadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Metadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field UserMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.UserMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConnectionMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ConnectionMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 2: + case 4: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field UserMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field SessionMetadata", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -59576,13 +60399,13 @@ func (m *SFTP) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.UserMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.SessionMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 3: + case 5: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ConnectionMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ServerMetadata", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -59609,13 +60432,13 @@ func (m *SFTP) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.ConnectionMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ServerMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 4: + case 6: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SessionMetadata", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field FileTransferStats", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -59642,76 +60465,63 @@ func (m *SFTP) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.SessionMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + m.FileTransferStats = append(m.FileTransferStats, &FileTransferStat{}) + if err := m.FileTransferStats[len(m.FileTransferStats)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - case 5: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field ServerMetadata", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEvents - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthEvents + default: + iNdEx = preIndex + skippy, err := skipEvents(dAtA[iNdEx:]) + if err != nil { + return err } - postIndex := iNdEx + msglen - if postIndex < 0 { + if (skippy < 0) || (iNdEx+skippy) < 0 { return ErrInvalidLengthEvents } - if postIndex > l { + if (iNdEx + skippy) > l { return io.ErrUnexpectedEOF } - if err := m.ServerMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 6: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field WorkingDirectory", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEvents - } - 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 ErrInvalidLengthEvents - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthEvents + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *FileTransferStat) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents } - if postIndex > l { + if iNdEx >= l { return io.ErrUnexpectedEOF } - m.WorkingDirectory = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 7: + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: FileTransferStat: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: FileTransferStat: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) } @@ -59743,43 +60553,11 @@ func (m *SFTP) Unmarshal(dAtA []byte) error { } m.Path = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 8: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field TargetPath", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEvents - } - 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 ErrInvalidLengthEvents - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthEvents - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.TargetPath = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 9: + case 2: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Flags", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field BytesRead", wireType) } - m.Flags = 0 + m.BytesRead = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -59789,52 +60567,16 @@ func (m *SFTP) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.Flags |= uint32(b&0x7F) << shift + m.BytesRead |= uint64(b&0x7F) << shift if b < 0x80 { break } } - case 10: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Attributes", wireType) - } - var msglen int - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEvents - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - msglen |= int(b&0x7F) << shift - if b < 0x80 { - break - } - } - if msglen < 0 { - return ErrInvalidLengthEvents - } - postIndex := iNdEx + msglen - if postIndex < 0 { - return ErrInvalidLengthEvents - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - if m.Attributes == nil { - m.Attributes = &SFTPAttributes{} - } - if err := m.Attributes.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { - return err - } - iNdEx = postIndex - case 11: + case 3: if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field Action", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field BytesWritten", wireType) } - m.Action = 0 + m.BytesWritten = 0 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowEvents @@ -59844,43 +60586,11 @@ func (m *SFTP) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - m.Action |= SFTPAction(b&0x7F) << shift - if b < 0x80 { - break - } - } - case 12: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Error", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowEvents - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift + m.BytesWritten |= uint64(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthEvents - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthEvents - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.Error = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipEvents(dAtA[iNdEx:]) @@ -84387,6 +85097,41 @@ func (m *OneOf) Unmarshal(dAtA []byte) error { } m.Event = &OneOf_UserTaskDelete{v} iNdEx = postIndex + case 191: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SFTPSummary", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &SFTPSummary{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Event = &OneOf_SFTPSummary{v} + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipEvents(dAtA[iNdEx:]) diff --git a/api/types/events/oneof.go b/api/types/events/oneof.go index 0188951054a1a..b25890e99debf 100644 --- a/api/types/events/oneof.go +++ b/api/types/events/oneof.go @@ -761,6 +761,10 @@ func ToOneOf(in AuditEvent) (*OneOf, error) { out.Event = &OneOf_UserTaskDelete{ UserTaskDelete: e, } + case *SFTPSummary: + out.Event = &OneOf_SFTPSummary{ + SFTPSummary: e, + } default: slog.ErrorContext(context.Background(), "Attempted to convert dynamic event of unknown type into protobuf event.", "event_type", in.GetType()) unknown := &Unknown{} diff --git a/lib/events/api.go b/lib/events/api.go index 387e82d7a541d..fa38e95bc8324 100644 --- a/lib/events/api.go +++ b/lib/events/api.go @@ -285,6 +285,8 @@ const ( // SFTPEvent means a user attempted a file operation SFTPEvent = "sftp" SFTPPath = "path" + // SFTPSummaryEvent is emitted at the end of an SFTP transfer. + SFTPSummaryEvent = "sftp_summary" // ResizeEvent means that some user resized PTY on the client ResizeEvent = "resize" diff --git a/lib/events/codes.go b/lib/events/codes.go index e26cc1294d257..760a8a0fbc4ca 100644 --- a/lib/events/codes.go +++ b/lib/events/codes.go @@ -320,45 +320,29 @@ const ( KubernetesClusterDeleteCode = "T3012I" // The following codes correspond to SFTP file operations. - SFTPOpenCode = "TS001I" - SFTPOpenFailureCode = "TS001E" - SFTPCloseCode = "TS002I" - SFTPCloseFailureCode = "TS002E" - SFTPReadCode = "TS003I" - SFTPReadFailureCode = "TS003E" - SFTPWriteCode = "TS004I" - SFTPWriteFailureCode = "TS004E" - SFTPLstatCode = "TS005I" - SFTPLstatFailureCode = "TS005E" - SFTPFstatCode = "TS006I" - SFTPFstatFailureCode = "TS006E" - SFTPSetstatCode = "TS007I" - SFTPSetstatFailureCode = "TS007E" - SFTPFsetstatCode = "TS008I" - SFTPFsetstatFailureCode = "TS008E" - SFTPOpendirCode = "TS009I" - SFTPOpendirFailureCode = "TS009E" - SFTPReaddirCode = "TS010I" - SFTPReaddirFailureCode = "TS010E" - SFTPRemoveCode = "TS011I" - SFTPRemoveFailureCode = "TS011E" - SFTPMkdirCode = "TS012I" - SFTPMkdirFailureCode = "TS012E" - SFTPRmdirCode = "TS013I" - SFTPRmdirFailureCode = "TS013E" - SFTPRealpathCode = "TS014I" - SFTPRealpathFailureCode = "TS014E" - SFTPStatCode = "TS015I" - SFTPStatFailureCode = "TS015E" - SFTPRenameCode = "TS016I" - SFTPRenameFailureCode = "TS016E" - SFTPReadlinkCode = "TS017I" - SFTPReadlinkFailureCode = "TS017E" - SFTPSymlinkCode = "TS018I" - SFTPSymlinkFailureCode = "TS018E" - SFTPLinkCode = "TS019I" - SFTPLinkFailureCode = "TS019E" - SFTPDisallowedCode = "TS020E" + SFTPOpenCode = "TS001I" + SFTPOpenFailureCode = "TS001E" + SFTPSetstatCode = "TS007I" + SFTPSetstatFailureCode = "TS007E" + SFTPOpendirCode = "TS009I" + SFTPOpendirFailureCode = "TS009E" + SFTPReaddirCode = "TS010I" + SFTPReaddirFailureCode = "TS010E" + SFTPRemoveCode = "TS011I" + SFTPRemoveFailureCode = "TS011E" + SFTPMkdirCode = "TS012I" + SFTPMkdirFailureCode = "TS012E" + SFTPRmdirCode = "TS013I" + SFTPRmdirFailureCode = "TS013E" + SFTPRenameCode = "TS016I" + SFTPRenameFailureCode = "TS016E" + SFTPSymlinkCode = "TS018I" + SFTPSymlinkFailureCode = "TS018E" + SFTPLinkCode = "TS019I" + SFTPLinkFailureCode = "TS019E" + SFTPDisallowedCode = "TS020E" + // SFTPSummaryCode is the SFTP summary code. + SFTPSummaryCode = "TS021I" // SessionCommandCode is a session command code. SessionCommandCode = "T4000I" @@ -674,3 +658,7 @@ const ( // UnknownCode is used when an event of unknown type is encountered. UnknownCode = apievents.UnknownCode ) + +// After defining an event code, make sure to keep +// `web/packages/teleport/src/services/audit/types.ts` in sync and add an +// entry in the `eventsMap` in `lib/events/events_test.go`. diff --git a/lib/events/dynamic.go b/lib/events/dynamic.go index 748806a2a6246..9294c42f25e58 100644 --- a/lib/events/dynamic.go +++ b/lib/events/dynamic.go @@ -445,6 +445,9 @@ func FromEventFields(fields EventFields) (events.AuditEvent, error) { e = &events.UserTaskUpdate{} case UserTaskDeleteEvent: e = &events.UserTaskDelete{} + + case SFTPSummaryEvent: + e = &events.SFTPSummary{} default: slog.ErrorContext(context.Background(), "Attempted to convert dynamic event of unknown type into protobuf event.", "event_type", eventType) unknown := &events.Unknown{} diff --git a/lib/events/events_test.go b/lib/events/events_test.go index 56e61392820f7..4f5ae73a4df6a 100644 --- a/lib/events/events_test.go +++ b/lib/events/events_test.go @@ -235,6 +235,7 @@ var eventsMap = map[string]apievents.AuditEvent{ UserTaskCreateEvent: &apievents.UserTaskCreate{}, UserTaskUpdateEvent: &apievents.UserTaskUpdate{}, UserTaskDeleteEvent: &apievents.UserTaskDelete{}, + SFTPSummaryEvent: &apievents.SFTPSummary{}, } // TestJSON tests JSON marshal events diff --git a/lib/srv/regular/sftp.go b/lib/srv/regular/sftp.go index 5c07a7eab26b6..10ed01d3ea594 100644 --- a/lib/srv/regular/sftp.go +++ b/lib/srv/regular/sftp.go @@ -189,20 +189,35 @@ func (s *sftpSubsys) Start(ctx context.Context, return } - var sftpEvent apievents.SFTP - err = jsonpb.UnmarshalString(eventStr[:len(eventStr)-1], &sftpEvent) + var oneOfEvent apievents.OneOf + err = jsonpb.UnmarshalString(eventStr[:len(eventStr)-1], &oneOfEvent) if err != nil { s.log.WithError(err).Warn("Failed to unmarshal SFTP event.") continue } + event, err := apievents.FromOneOf(oneOfEvent) + if err != nil { + s.log.WithError(err).Warn("Failed to convert SFTP event from OneOf.") + continue + } - sftpEvent.Metadata.ClusterName = serverCtx.ClusterName - sftpEvent.ServerMetadata = serverMeta - sftpEvent.SessionMetadata = sessionMeta - sftpEvent.UserMetadata = userMeta - sftpEvent.ConnectionMetadata = connectionMeta + event.SetClusterName(serverCtx.ClusterName) + switch e := event.(type) { + case *apievents.SFTP: + e.ServerMetadata = serverMeta + e.SessionMetadata = sessionMeta + e.UserMetadata = userMeta + e.ConnectionMetadata = connectionMeta + case *apievents.SFTPSummary: + e.ServerMetadata = serverMeta + e.SessionMetadata = sessionMeta + e.UserMetadata = userMeta + e.ConnectionMetadata = connectionMeta + default: + s.log.WithError(err).Warnf("Unknown event type received from SFTP server process: %q", event.GetType()) + } - if err := serverCtx.GetServer().EmitAuditEvent(ctx, &sftpEvent); err != nil { + if err := serverCtx.GetServer().EmitAuditEvent(ctx, event); err != nil { log.WithError(err).Warn("Failed to emit SFTP event.") } } diff --git a/tool/teleport/common/sftp.go b/tool/teleport/common/sftp.go index 4710b0d050915..4d3e46f4decf7 100644 --- a/tool/teleport/common/sftp.go +++ b/tool/teleport/common/sftp.go @@ -30,6 +30,8 @@ import ( "os/user" "path" "strings" + "sync" + "sync/atomic" "time" "github.com/gogo/protobuf/jsonpb" @@ -89,10 +91,37 @@ type allowedOps struct { type sftpHandler struct { logger *log.Entry allowed *allowedOps - events chan<- *apievents.SFTP + + // mtx protects files + mtx sync.Mutex + files []*trackedFile + + events chan<- apievents.AuditEvent +} + +type trackedFile struct { + file *os.File + bytesRead atomic.Uint64 + bytesWritten atomic.Uint64 +} + +func (t *trackedFile) ReadAt(b []byte, off int64) (int, error) { + n, err := t.file.ReadAt(b, off) + t.bytesRead.Add(uint64(n)) + return n, err } -func newSFTPHandler(logger *log.Entry, req *srv.FileTransferRequest, events chan<- *apievents.SFTP) (*sftpHandler, error) { +func (t *trackedFile) WriteAt(b []byte, off int64) (int, error) { + n, err := t.file.WriteAt(b, off) + t.bytesWritten.Add(uint64(n)) + return n, err +} + +func (t *trackedFile) Close() error { + return t.file.Close() +} + +func newSFTPHandler(logger *log.Entry, req *srv.FileTransferRequest, events chan<- apievents.AuditEvent) (*sftpHandler, error) { var allowed *allowedOps if req != nil { allowed = &allowedOps{ @@ -188,7 +217,7 @@ func (s *sftpHandler) Filewrite(req *sftp.Request) (_ io.WriterAt, retErr error) return s.openFile(req) } -func (s *sftpHandler) openFile(req *sftp.Request) (*os.File, error) { +func (s *sftpHandler) openFile(req *sftp.Request) (sftp.WriterAtReaderAt, error) { if err := s.ensureReqIsAllowed(req); err != nil { return nil, err } @@ -220,8 +249,12 @@ func (s *sftpHandler) openFile(req *sftp.Request) (*os.File, error) { if err != nil { return nil, err } + trackFile := &trackedFile{file: f} + s.mtx.Lock() + s.files = append(s.files, trackFile) + s.mtx.Unlock() - return f, nil + return trackFile, nil } // Filecmd handles file modification requests. @@ -607,7 +640,7 @@ func onSFTP() error { } ch := compositeCh{io.NopCloser(bufferedReader), chw} - sftpEvents := make(chan *apievents.SFTP, 1) + sftpEvents := make(chan apievents.AuditEvent, 1) h, err := newSFTPHandler(logger, fileTransferReq, sftpEvents) if err != nil { return trace.Wrap(err) @@ -627,17 +660,24 @@ func onSFTP() error { var m jsonpb.Marshaler var buf bytes.Buffer for event := range sftpEvents { + oneOfEvent, err := apievents.ToOneOf(event) + if err != nil { + logger.WithError(err).Warn("Failed to convert SFTP event to OneOf.") + continue + } + buf.Reset() - if err := m.Marshal(&buf, event); err != nil { + if err := m.Marshal(&buf, oneOfEvent); err != nil { logger.WithError(err).Warn("Failed to marshal SFTP event.") - } else { - // Append a NULL byte so the parent process will know where - // this event ends - buf.WriteByte(0x0) - _, err = io.Copy(auditFile, &buf) - if err != nil { - logger.WithError(err).Warn("Failed to send SFTP event to parent.") - } + continue + } + + // Append a NULL byte so the parent process will know where + // this event ends + buf.WriteByte(0x0) + _, err = io.Copy(auditFile, &buf) + if err != nil { + logger.WithError(err).Warn("Failed to send SFTP event to parent.") } } @@ -651,6 +691,25 @@ func onSFTP() error { serveErr = trace.Wrap(serveErr) } + // Send a summary event last + summaryEvent := &apievents.SFTPSummary{ + Metadata: apievents.Metadata{ + Type: events.SFTPSummaryEvent, + Code: events.SFTPSummaryCode, + Time: time.Now(), + }, + } + // We don't need to worry about closing these files, handler will + // take care of that for us + for _, f := range h.files { + summaryEvent.FileTransferStats = append(summaryEvent.FileTransferStats, &apievents.FileTransferStat{ + Path: f.file.Name(), + BytesRead: f.bytesRead.Load(), + BytesWritten: f.bytesWritten.Load(), + }) + } + sftpEvents <- summaryEvent + // Wait until event marshaling goroutine is finished close(sftpEvents) <-done diff --git a/web/packages/teleport/src/Audit/EventList/EventTypeCell.tsx b/web/packages/teleport/src/Audit/EventList/EventTypeCell.tsx index 704de4b00e33e..cb5c377d3f6d9 100644 --- a/web/packages/teleport/src/Audit/EventList/EventTypeCell.tsx +++ b/web/packages/teleport/src/Audit/EventList/EventTypeCell.tsx @@ -50,20 +50,8 @@ const EventIconMap: Record = { [eventCodes.SCP_DISALLOWED]: Icons.FolderPlus, [eventCodes.SFTP_OPEN_FAILURE]: Icons.FolderPlus, [eventCodes.SFTP_OPEN]: Icons.FolderPlus, - [eventCodes.SFTP_CLOSE_FAILURE]: Icons.FolderPlus, - [eventCodes.SFTP_CLOSE]: Icons.FolderPlus, - [eventCodes.SFTP_READ_FAILURE]: Icons.FolderPlus, - [eventCodes.SFTP_READ]: Icons.FolderPlus, - [eventCodes.SFTP_WRITE_FAILURE]: Icons.FolderPlus, - [eventCodes.SFTP_WRITE]: Icons.FolderPlus, - [eventCodes.SFTP_LSTAT_FAILURE]: Icons.FolderPlus, - [eventCodes.SFTP_LSTAT]: Icons.FolderPlus, - [eventCodes.SFTP_FSTAT_FAILURE]: Icons.FolderPlus, - [eventCodes.SFTP_FSTAT]: Icons.FolderPlus, [eventCodes.SFTP_SETSTAT_FAILURE]: Icons.FolderPlus, [eventCodes.SFTP_SETSTAT]: Icons.FolderPlus, - [eventCodes.SFTP_FSETSTAT_FAILURE]: Icons.FolderPlus, - [eventCodes.SFTP_FSETSTAT]: Icons.FolderPlus, [eventCodes.SFTP_OPENDIR_FAILURE]: Icons.FolderPlus, [eventCodes.SFTP_OPENDIR]: Icons.FolderPlus, [eventCodes.SFTP_READDIR_FAILURE]: Icons.FolderPlus, @@ -74,14 +62,8 @@ const EventIconMap: Record = { [eventCodes.SFTP_MKDIR]: Icons.FolderPlus, [eventCodes.SFTP_RMDIR_FAILURE]: Icons.FolderPlus, [eventCodes.SFTP_RMDIR]: Icons.FolderPlus, - [eventCodes.SFTP_REALPATH_FAILURE]: Icons.FolderPlus, - [eventCodes.SFTP_REALPATH]: Icons.FolderPlus, - [eventCodes.SFTP_STAT_FAILURE]: Icons.FolderPlus, - [eventCodes.SFTP_STAT]: Icons.FolderPlus, [eventCodes.SFTP_RENAME_FAILURE]: Icons.FolderPlus, [eventCodes.SFTP_RENAME]: Icons.FolderPlus, - [eventCodes.SFTP_READLINK_FAILURE]: Icons.FolderPlus, - [eventCodes.SFTP_READLINK]: Icons.FolderPlus, [eventCodes.SFTP_SYMLINK_FAILURE]: Icons.FolderPlus, [eventCodes.SFTP_SYMLINK]: Icons.FolderPlus, [eventCodes.SFTP_LINK]: Icons.FolderPlus, @@ -297,6 +279,7 @@ const EventIconMap: Record = { [eventCodes.USER_TASK_CREATE]: Icons.Info, [eventCodes.USER_TASK_UPDATE]: Icons.Info, [eventCodes.USER_TASK_DELETE]: Icons.Info, + [eventCodes.SFTP_SUMMARY]: Icons.FolderPlus, [eventCodes.UNKNOWN]: Icons.Question, }; diff --git a/web/packages/teleport/src/services/audit/makeEvent.ts b/web/packages/teleport/src/services/audit/makeEvent.ts index 2a2bf26a3ba5e..121fca0660ce2 100644 --- a/web/packages/teleport/src/services/audit/makeEvent.ts +++ b/web/packages/teleport/src/services/audit/makeEvent.ts @@ -305,86 +305,6 @@ export const formatters: Formatters = { rest['server_hostname'] || rest['addr.local'] }]: [${error}]`, }, - [eventCodes.SFTP_CLOSE]: { - type: 'sftp', - desc: 'SFTP Close', - format: ({ user, path, ...rest }) => - `User [${user}] closed file [${path}] on node [${ - rest['server_hostname'] || rest['addr.local'] - }]`, - }, - [eventCodes.SFTP_CLOSE_FAILURE]: { - type: 'sftp', - desc: 'SFTP Close Failed', - format: ({ user, path, error, ...rest }) => - `User [${user}] failed to close file [${path}] on node [${ - rest['server_hostname'] || rest['addr.local'] - }]: [${error}]`, - }, - [eventCodes.SFTP_READ]: { - type: 'sftp', - desc: 'SFTP Read', - format: ({ user, path, ...rest }) => - `User [${user}] read from file [${path}] on node [${ - rest['server_hostname'] || rest['addr.local'] - }]`, - }, - [eventCodes.SFTP_READ_FAILURE]: { - type: 'sftp', - desc: 'SFTP Read Failed', - format: ({ user, path, error, ...rest }) => - `User [${user}] failed to read from file [${path}] on node [${ - rest['server_hostname'] || rest['addr.local'] - }]: [${error}]`, - }, - [eventCodes.SFTP_WRITE]: { - type: 'sftp', - desc: 'SFTP Write', - format: ({ user, path, ...rest }) => - `User [${user}] wrote to file [${path}] on node [${ - rest['server_hostname'] || rest['addr.local'] - }]`, - }, - [eventCodes.SFTP_WRITE_FAILURE]: { - type: 'sftp', - desc: 'SFTP Write Failed', - format: ({ user, path, error, ...rest }) => - `User [${user}] failed to write to file [${path}] on node [${ - rest['server_hostname'] || rest['addr.local'] - }]: [${error}]`, - }, - [eventCodes.SFTP_LSTAT]: { - type: 'sftp', - desc: 'SFTP Lstat', - format: ({ user, path, ...rest }) => - `User [${user}] queried attributes of file [${path}] on node [${ - rest['server_hostname'] || rest['addr.local'] - }]`, - }, - [eventCodes.SFTP_LSTAT_FAILURE]: { - type: 'sftp', - desc: 'SFTP Lstat Failed', - format: ({ user, path, error, ...rest }) => - `User [${user}] failed to query attributes of file [${path}] on node [${ - rest['server_hostname'] || rest['addr.local'] - }]: [${error}]`, - }, - [eventCodes.SFTP_FSTAT]: { - type: 'sftp', - desc: 'SFTP Fstat', - format: ({ user, path, ...rest }) => - `User [${user}] queried attributes of file [${path}] on node [${ - rest['server_hostname'] || rest['addr.local'] - }]`, - }, - [eventCodes.SFTP_FSTAT_FAILURE]: { - type: 'sftp', - desc: 'SFTP Fstat Failed', - format: ({ user, path, error, ...rest }) => - `User [${user}] failed to query attributes of file [${path}] on node [${ - rest['server_hostname'] || rest['addr.local'] - }]: [${error}]`, - }, [eventCodes.SFTP_SETSTAT]: { type: 'sftp', desc: 'SFTP Setstat', @@ -401,22 +321,6 @@ export const formatters: Formatters = { rest['server_hostname'] || rest['addr.local'] }]: [${error}]`, }, - [eventCodes.SFTP_FSETSTAT]: { - type: 'sftp', - desc: 'SFTP Fsetstat', - format: ({ user, path, ...rest }) => - `User [${user}] changed attributes of file [${path}] on node [${ - rest['server_hostname'] || rest['addr.local'] - }]`, - }, - [eventCodes.SFTP_FSETSTAT_FAILURE]: { - type: 'sftp', - desc: 'SFTP Fsetstat Failed', - format: ({ user, path, error, ...rest }) => - `User [${user}] failed to change attributes of file [${path}] on node [${ - rest['server_hostname'] || rest['addr.local'] - }]: [${error}]`, - }, [eventCodes.SFTP_OPENDIR]: { type: 'sftp', desc: 'SFTP Opendir', @@ -497,38 +401,6 @@ export const formatters: Formatters = { rest['server_hostname'] || rest['addr.local'] }]: [${error}]`, }, - [eventCodes.SFTP_REALPATH]: { - type: 'sftp', - desc: 'SFTP Realpath', - format: ({ user, path, ...rest }) => - `User [${user}] queried absolute path of file [${path}] on node [${ - rest['server_hostname'] || rest['addr.local'] - }]`, - }, - [eventCodes.SFTP_REALPATH_FAILURE]: { - type: 'sftp', - desc: 'SFTP Realpath Failed', - format: ({ user, path, error, ...rest }) => - `User [${user}] failed to query absolute path of file [${path}] on node [${ - rest['server_hostname'] || rest['addr.local'] - }]: [${error}]`, - }, - [eventCodes.SFTP_STAT]: { - type: 'sftp', - desc: 'SFTP Stat', - format: ({ user, path, ...rest }) => - `User [${user}] queried attributes of file [${path}] on node [${ - rest['server_hostname'] || rest['addr.local'] - }]`, - }, - [eventCodes.SFTP_STAT_FAILURE]: { - type: 'sftp', - desc: 'SFTP Stat Failed', - format: ({ user, path, error, ...rest }) => - `User [${user}] failed to query attributes of file [${path}] on node [${ - rest['server_hostname'] || rest['addr.local'] - }]: [${error}]`, - }, [eventCodes.SFTP_RENAME]: { type: 'sftp', desc: 'SFTP Rename', @@ -545,22 +417,6 @@ export const formatters: Formatters = { rest['server_hostname'] || rest['addr.local'] }]: [${error}]`, }, - [eventCodes.SFTP_READLINK]: { - type: 'sftp', - desc: 'SFTP Readlink', - format: ({ user, path, ...rest }) => - `User [${user}] read symbolic link [${path}] on node [${ - rest['server_hostname'] || rest['addr.local'] - }]`, - }, - [eventCodes.SFTP_READLINK_FAILURE]: { - type: 'sftp', - desc: 'SFTP Readlink Failed', - format: ({ user, path, error, ...rest }) => - `User [${user}] failed to read symbolic link [${path}] on node [${ - rest['server_hostname'] || rest['addr.local'] - }]: [${error}]`, - }, [eventCodes.SFTP_SYMLINK]: { type: 'sftp', desc: 'SFTP Symlink', @@ -1971,6 +1827,13 @@ export const formatters: Formatters = { return `User [${user}] deleted a user task [${name}]`; }, }, + [eventCodes.SFTP_SUMMARY]: { + type: 'sftp_summary', + desc: 'File Transfer Completed', + format: ({ user, server_hostname }) => { + return `User [${user}] completed a file transfer on [${server_hostname}]`; + }, + }, [eventCodes.UNKNOWN]: { type: 'unknown', desc: 'Unknown Event', diff --git a/web/packages/teleport/src/services/audit/types.ts b/web/packages/teleport/src/services/audit/types.ts index 3a52afb6617f5..7bc36eaa7a449 100644 --- a/web/packages/teleport/src/services/audit/types.ts +++ b/web/packages/teleport/src/services/audit/types.ts @@ -163,20 +163,8 @@ export const eventCodes = { SCP_DISALLOWED: 'T3010E', SFTP_OPEN_FAILURE: 'TS001E', SFTP_OPEN: 'TS001I', - SFTP_CLOSE_FAILURE: 'TS002E', - SFTP_CLOSE: 'TS002I', - SFTP_READ_FAILURE: 'TS003E', - SFTP_READ: 'TS003I', - SFTP_WRITE_FAILURE: 'TS004E', - SFTP_WRITE: 'TS004I', - SFTP_LSTAT_FAILURE: 'TS005E', - SFTP_LSTAT: 'TS005I', - SFTP_FSTAT_FAILURE: 'TS006E', - SFTP_FSTAT: 'TS006I', SFTP_SETSTAT_FAILURE: 'TS007E', SFTP_SETSTAT: 'TS007I', - SFTP_FSETSTAT_FAILURE: 'TS008E', - SFTP_FSETSTAT: 'TS008I', SFTP_OPENDIR_FAILURE: 'TS009E', SFTP_OPENDIR: 'TS009I', SFTP_READDIR_FAILURE: 'TS010E', @@ -187,19 +175,14 @@ export const eventCodes = { SFTP_MKDIR: 'TS012I', SFTP_RMDIR_FAILURE: 'TS013E', SFTP_RMDIR: 'TS013I', - SFTP_REALPATH_FAILURE: 'TS014E', - SFTP_REALPATH: 'TS014I', - SFTP_STAT_FAILURE: 'TS015E', - SFTP_STAT: 'TS015I', SFTP_RENAME_FAILURE: 'TS016E', SFTP_RENAME: 'TS016I', - SFTP_READLINK_FAILURE: 'TS017E', - SFTP_READLINK: 'TS017I', SFTP_SYMLINK_FAILURE: 'TS018E', SFTP_SYMLINK: 'TS018I', SFTP_LINK: 'TS019I', SFTP_LINK_FAILURE: 'TS019E', SFTP_DISALLOWED: 'TS020E', + SFTP_SUMMARY: 'TS021I', SESSION_COMMAND: 'T4000I', SESSION_DATA: 'T2006I', SESSION_DISK: 'T4001I', @@ -457,34 +440,10 @@ export type RawEvents = { [eventCodes.SFTP_OPEN_FAILURE]: RawEventSFTP< typeof eventCodes.SFTP_OPEN_FAILURE >; - [eventCodes.SFTP_CLOSE]: RawEventSFTP; - [eventCodes.SFTP_CLOSE_FAILURE]: RawEventSFTP< - typeof eventCodes.SFTP_CLOSE_FAILURE - >; - [eventCodes.SFTP_READ]: RawEventSFTP; - [eventCodes.SFTP_READ_FAILURE]: RawEventSFTP< - typeof eventCodes.SFTP_READ_FAILURE - >; - [eventCodes.SFTP_WRITE]: RawEventSFTP; - [eventCodes.SFTP_WRITE_FAILURE]: RawEventSFTP< - typeof eventCodes.SFTP_WRITE_FAILURE - >; - [eventCodes.SFTP_LSTAT]: RawEventSFTP; - [eventCodes.SFTP_LSTAT_FAILURE]: RawEventSFTP< - typeof eventCodes.SFTP_LSTAT_FAILURE - >; - [eventCodes.SFTP_FSTAT]: RawEventSFTP; - [eventCodes.SFTP_FSTAT_FAILURE]: RawEventSFTP< - typeof eventCodes.SFTP_FSTAT_FAILURE - >; [eventCodes.SFTP_SETSTAT]: RawEventSFTP; [eventCodes.SFTP_SETSTAT_FAILURE]: RawEventSFTP< typeof eventCodes.SFTP_SETSTAT_FAILURE >; - [eventCodes.SFTP_FSETSTAT]: RawEventSFTP; - [eventCodes.SFTP_FSETSTAT_FAILURE]: RawEventSFTP< - typeof eventCodes.SFTP_FSETSTAT_FAILURE - >; [eventCodes.SFTP_OPENDIR]: RawEventSFTP; [eventCodes.SFTP_OPENDIR_FAILURE]: RawEventSFTP< typeof eventCodes.SFTP_OPENDIR_FAILURE @@ -505,22 +464,10 @@ export type RawEvents = { [eventCodes.SFTP_RMDIR_FAILURE]: RawEventSFTP< typeof eventCodes.SFTP_RMDIR_FAILURE >; - [eventCodes.SFTP_REALPATH]: RawEventSFTP; - [eventCodes.SFTP_REALPATH_FAILURE]: RawEventSFTP< - typeof eventCodes.SFTP_REALPATH_FAILURE - >; - [eventCodes.SFTP_STAT]: RawEventSFTP; - [eventCodes.SFTP_STAT_FAILURE]: RawEventSFTP< - typeof eventCodes.SFTP_STAT_FAILURE - >; [eventCodes.SFTP_RENAME]: RawEventSFTP; [eventCodes.SFTP_RENAME_FAILURE]: RawEventSFTP< typeof eventCodes.SFTP_RENAME_FAILURE >; - [eventCodes.SFTP_READLINK]: RawEventSFTP; - [eventCodes.SFTP_READLINK_FAILURE]: RawEventSFTP< - typeof eventCodes.SFTP_READLINK_FAILURE - >; [eventCodes.SFTP_SYMLINK]: RawEventSFTP; [eventCodes.SFTP_SYMLINK_FAILURE]: RawEventSFTP< typeof eventCodes.SFTP_SYMLINK_FAILURE @@ -1746,6 +1693,13 @@ export type RawEvents = { typeof eventCodes.USER_TASK_DELETE, HasName >; + [eventCodes.SFTP_SUMMARY]: RawEvent< + typeof eventCodes.SFTP_SUMMARY, + { + user: string; + server_hostname: string; + } + >; }; /** From 824a5f0b44ed81548389b973224e777b9d61fa4e Mon Sep 17 00:00:00 2001 From: Edoardo Spadolini Date: Wed, 30 Oct 2024 20:02:54 +0100 Subject: [PATCH 18/27] Disable server-side TLS session tickets (#48130) * Disable server-side TLS session tickets * Fix CloneClient helper --- lib/auth/helpers.go | 3 ++- lib/utils/tls.go | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/auth/helpers.go b/lib/auth/helpers.go index ba403790d0675..99818886c00dc 100644 --- a/lib/auth/helpers.go +++ b/lib/auth/helpers.go @@ -1098,7 +1098,8 @@ func (t *TestTLSServer) CloneClient(tt *testing.T, clt *authclient.Client) *auth // shared between all clients that use the same TLS config. // Reusing the cache will skip the TLS handshake and may introduce a weird // behavior in tests. - if !tlsConfig.SessionTicketsDisabled { + if tlsConfig.ClientSessionCache != nil { + tlsConfig = tlsConfig.Clone() tlsConfig.ClientSessionCache = tls.NewLRUClientSessionCache(utils.DefaultLRUCapacity) } diff --git a/lib/utils/tls.go b/lib/utils/tls.go index 8f619b63faf80..ca096a523b0a0 100644 --- a/lib/utils/tls.go +++ b/lib/utils/tls.go @@ -43,6 +43,11 @@ func SetupTLSConfig(config *tls.Config, cipherSuites []uint16) { config.CipherSuites = cipherSuites } + // pre-v17 Teleport uses a client ticket cache, which doesn't play well with + // verification (both client- and server-side) when using dynamic + // credentials and CAs (in v17+ Teleport) + config.SessionTicketsDisabled = true + config.MinVersion = tls.VersionTLS12 } From a0540c5afe6c8903c6be960202e02124ca32af7d Mon Sep 17 00:00:00 2001 From: Maxim Dietz Date: Wed, 30 Oct 2024 16:00:49 -0400 Subject: [PATCH 19/27] feat: Update AccessList Proto with new fields, add utils (#47828) - Add Hierarchy utils for nested AccessList validation and handling - Update AccessList Protos with new fields - Update AccessList and AccessListMember types and converters with new fields --- .../teleport/accesslist/v1/accesslist.pb.go | 570 ++++++++------ .../teleport/accesslist/v1/accesslist.proto | 27 +- api/types/accesslist/accesslist.go | 44 +- api/types/accesslist/convert/v1/accesslist.go | 98 ++- api/types/accesslist/member.go | 8 + .../resources.teleport.dev_accesslists.mdx | 1 + .../data-sources/access_list.mdx | 1 + .../resources/access_list.mdx | 1 + .../resources.teleport.dev_accesslists.yaml | 4 + .../teleport/accesslist/v1/accesslist_pb.ts | 105 ++- .../resources.teleport.dev_accesslists.yaml | 4 + .../accesslist/v1/accesslist_terraform.go | 44 ++ lib/accesslists/hierarchy.go | 743 ++++++++++++++++++ lib/accesslists/hierarchy_test.go | 666 ++++++++++++++++ 14 files changed, 2065 insertions(+), 251 deletions(-) create mode 100644 lib/accesslists/hierarchy.go create mode 100644 lib/accesslists/hierarchy_test.go diff --git a/api/gen/proto/go/teleport/accesslist/v1/accesslist.pb.go b/api/gen/proto/go/teleport/accesslist/v1/accesslist.pb.go index 55ec345396c34..4634ef46f0f91 100644 --- a/api/gen/proto/go/teleport/accesslist/v1/accesslist.pb.go +++ b/api/gen/proto/go/teleport/accesslist/v1/accesslist.pb.go @@ -147,6 +147,60 @@ func (ReviewDayOfMonth) EnumDescriptor() ([]byte, []int) { return file_teleport_accesslist_v1_accesslist_proto_rawDescGZIP(), []int{1} } +// MembershipKind represents the different kinds of list membership +type MembershipKind int32 + +const ( + // MEMBERSHIP_KIND_UNSPECIFIED represents list members that are of + // unknown membership kind, defaulting to being treated as type USER + MembershipKind_MEMBERSHIP_KIND_UNSPECIFIED MembershipKind = 0 + // MEMBERSHIP_KIND_USER represents list members that are normal users + MembershipKind_MEMBERSHIP_KIND_USER MembershipKind = 1 + // MEMBERSHIP_KIND_LIST represents list members that are nested Access Lists + MembershipKind_MEMBERSHIP_KIND_LIST MembershipKind = 2 +) + +// Enum value maps for MembershipKind. +var ( + MembershipKind_name = map[int32]string{ + 0: "MEMBERSHIP_KIND_UNSPECIFIED", + 1: "MEMBERSHIP_KIND_USER", + 2: "MEMBERSHIP_KIND_LIST", + } + MembershipKind_value = map[string]int32{ + "MEMBERSHIP_KIND_UNSPECIFIED": 0, + "MEMBERSHIP_KIND_USER": 1, + "MEMBERSHIP_KIND_LIST": 2, + } +) + +func (x MembershipKind) Enum() *MembershipKind { + p := new(MembershipKind) + *p = x + return p +} + +func (x MembershipKind) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (MembershipKind) Descriptor() protoreflect.EnumDescriptor { + return file_teleport_accesslist_v1_accesslist_proto_enumTypes[2].Descriptor() +} + +func (MembershipKind) Type() protoreflect.EnumType { + return &file_teleport_accesslist_v1_accesslist_proto_enumTypes[2] +} + +func (x MembershipKind) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use MembershipKind.Descriptor instead. +func (MembershipKind) EnumDescriptor() ([]byte, []int) { + return file_teleport_accesslist_v1_accesslist_proto_rawDescGZIP(), []int{2} +} + // IneligibleStatus describes how the user is ineligible. type IneligibleStatus int32 @@ -196,11 +250,11 @@ func (x IneligibleStatus) String() string { } func (IneligibleStatus) Descriptor() protoreflect.EnumDescriptor { - return file_teleport_accesslist_v1_accesslist_proto_enumTypes[2].Descriptor() + return file_teleport_accesslist_v1_accesslist_proto_enumTypes[3].Descriptor() } func (IneligibleStatus) Type() protoreflect.EnumType { - return &file_teleport_accesslist_v1_accesslist_proto_enumTypes[2] + return &file_teleport_accesslist_v1_accesslist_proto_enumTypes[3] } func (x IneligibleStatus) Number() protoreflect.EnumNumber { @@ -209,7 +263,7 @@ func (x IneligibleStatus) Number() protoreflect.EnumNumber { // Deprecated: Use IneligibleStatus.Descriptor instead. func (IneligibleStatus) EnumDescriptor() ([]byte, []int) { - return file_teleport_accesslist_v1_accesslist_proto_rawDescGZIP(), []int{2} + return file_teleport_accesslist_v1_accesslist_proto_rawDescGZIP(), []int{3} } // AccessList describes the basic building block of access grants, which are @@ -409,6 +463,9 @@ type AccessListOwner struct { // ineligible_status describes if this owner is eligible or not // and if not, describes how they're lacking eligibility. IneligibleStatus IneligibleStatus `protobuf:"varint,3,opt,name=ineligible_status,json=ineligibleStatus,proto3,enum=teleport.accesslist.v1.IneligibleStatus" json:"ineligible_status,omitempty"` + // membership_kind describes the type of membership, either + // `MEMBERSHIP_KIND_USER` or `MEMBERSHIP_KIND_LIST`. + MembershipKind MembershipKind `protobuf:"varint,4,opt,name=membership_kind,json=membershipKind,proto3,enum=teleport.accesslist.v1.MembershipKind" json:"membership_kind,omitempty"` } func (x *AccessListOwner) Reset() { @@ -462,6 +519,13 @@ func (x *AccessListOwner) GetIneligibleStatus() IneligibleStatus { return IneligibleStatus_INELIGIBLE_STATUS_UNSPECIFIED } +func (x *AccessListOwner) GetMembershipKind() MembershipKind { + if x != nil { + return x.MembershipKind + } + return MembershipKind_MEMBERSHIP_KIND_UNSPECIFIED +} + // AccessListAudit describes the audit configuration for an Access List. type AccessListAudit struct { state protoimpl.MessageState @@ -829,6 +893,9 @@ type MemberSpec struct { // ineligible_status describes if this member is eligible or not // and if not, describes how they're lacking eligibility. IneligibleStatus IneligibleStatus `protobuf:"varint,7,opt,name=ineligible_status,json=ineligibleStatus,proto3,enum=teleport.accesslist.v1.IneligibleStatus" json:"ineligible_status,omitempty"` + // membership_kind describes the type of membership, either + // `MEMBERSHIP_KIND_USER` or `MEMBERSHIP_KIND_LIST`. + MembershipKind MembershipKind `protobuf:"varint,9,opt,name=membership_kind,json=membershipKind,proto3,enum=teleport.accesslist.v1.MembershipKind" json:"membership_kind,omitempty"` } func (x *MemberSpec) Reset() { @@ -910,6 +977,13 @@ func (x *MemberSpec) GetIneligibleStatus() IneligibleStatus { return IneligibleStatus_INELIGIBLE_STATUS_UNSPECIFIED } +func (x *MemberSpec) GetMembershipKind() MembershipKind { + if x != nil { + return x.MembershipKind + } + return MembershipKind_MEMBERSHIP_KIND_UNSPECIFIED +} + // Review is a review of an Access List. type Review struct { state protoimpl.MessageState @@ -1133,8 +1207,14 @@ type AccessListStatus struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // member_count is the number of members in the in the Access List. + // member_count is the number of members in the Access List. MemberCount *uint32 `protobuf:"varint,1,opt,name=member_count,json=memberCount,proto3,oneof" json:"member_count,omitempty"` + // member_list_count is the number of nested list members in the Access List. + MemberListCount *uint32 `protobuf:"varint,2,opt,name=member_list_count,json=memberListCount,proto3,oneof" json:"member_list_count,omitempty"` + // owner_of describes Access Lists where this Access List is an explicit owner. + OwnerOf []string `protobuf:"bytes,3,rep,name=owner_of,json=ownerOf,proto3" json:"owner_of,omitempty"` + // member_of describes Access Lists where this Access List is an explicit member. + MemberOf []string `protobuf:"bytes,4,rep,name=member_of,json=memberOf,proto3" json:"member_of,omitempty"` } func (x *AccessListStatus) Reset() { @@ -1174,6 +1254,27 @@ func (x *AccessListStatus) GetMemberCount() uint32 { return 0 } +func (x *AccessListStatus) GetMemberListCount() uint32 { + if x != nil && x.MemberListCount != nil { + return *x.MemberListCount + } + return 0 +} + +func (x *AccessListStatus) GetOwnerOf() []string { + if x != nil { + return x.OwnerOf + } + return nil +} + +func (x *AccessListStatus) GetMemberOf() []string { + if x != nil { + return x.MemberOf + } + return nil +} + var File_teleport_accesslist_v1_accesslist_proto protoreflect.FileDescriptor var file_teleport_accesslist_v1_accesslist_proto_rawDesc = []byte{ @@ -1238,7 +1339,7 @@ var file_teleport_accesslist_v1_accesslist_proto_rawDesc = []byte{ 0x72, 0x61, 0x6e, 0x74, 0x73, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x4a, 0x04, 0x08, 0x0a, 0x10, 0x0b, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x0a, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x09, 0x6f, 0x77, - 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x22, 0x9e, 0x01, 0x0a, 0x0f, 0x41, 0x63, 0x63, 0x65, + 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x22, 0xef, 0x01, 0x0a, 0x0f, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, @@ -1248,169 +1349,193 @@ var file_teleport_accesslist_v1_accesslist_proto_rawDesc = []byte{ 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x10, 0x69, 0x6e, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, - 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0xf7, 0x01, 0x0a, 0x0f, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x75, 0x64, 0x69, 0x74, 0x12, 0x42, 0x0a, 0x0f, - 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x61, 0x75, 0x64, 0x69, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x41, 0x75, 0x64, 0x69, 0x74, 0x44, 0x61, 0x74, 0x65, - 0x12, 0x42, 0x0a, 0x0a, 0x72, 0x65, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0a, 0x72, 0x65, 0x63, 0x75, 0x72, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x12, 0x4b, 0x0a, 0x0d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x74, 0x65, - 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x52, 0x0d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x63, 0x79, 0x22, 0x9f, 0x01, 0x0a, 0x0a, 0x52, 0x65, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x12, 0x45, 0x0a, 0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x76, 0x69, 0x65, 0x77, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x09, 0x66, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x4a, 0x0a, 0x0c, 0x64, 0x61, 0x79, 0x5f, - 0x6f, 0x66, 0x5f, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, - 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x44, 0x61, - 0x79, 0x4f, 0x66, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x52, 0x0a, 0x64, 0x61, 0x79, 0x4f, 0x66, 0x4d, - 0x6f, 0x6e, 0x74, 0x68, 0x22, 0x40, 0x0a, 0x0d, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2f, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x22, 0x5c, 0x0a, 0x12, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, - 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, - 0x65, 0x73, 0x12, 0x30, 0x0a, 0x06, 0x74, 0x72, 0x61, 0x69, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x74, 0x72, - 0x61, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x74, 0x52, 0x06, 0x74, 0x72, - 0x61, 0x69, 0x74, 0x73, 0x22, 0x5a, 0x0a, 0x10, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, - 0x73, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, 0x30, - 0x0a, 0x06, 0x74, 0x72, 0x61, 0x69, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, - 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x74, 0x72, 0x61, 0x69, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x74, 0x52, 0x06, 0x74, 0x72, 0x61, 0x69, 0x74, 0x73, - 0x22, 0x7c, 0x0a, 0x06, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x06, 0x68, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6c, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x06, - 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x36, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0xc7, - 0x02, 0x0a, 0x0a, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1f, 0x0a, - 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x12, - 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x06, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x06, - 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x12, 0x34, 0x0a, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, - 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x52, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, - 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, - 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x64, 0x64, 0x65, 0x64, 0x5f, 0x62, 0x79, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x65, 0x64, 0x42, 0x79, 0x12, - 0x55, 0x0a, 0x11, 0x69, 0x6e, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x74, 0x65, 0x6c, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x6c, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x52, 0x10, 0x69, 0x6e, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x6c, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x52, 0x0a, 0x6d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x22, 0x7c, 0x0a, 0x06, 0x52, 0x65, 0x76, 0x69, - 0x65, 0x77, 0x12, 0x3a, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x68, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x36, - 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, + 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4f, 0x0a, 0x0f, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x26, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x73, 0x68, 0x69, 0x70, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x0e, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x73, 0x68, 0x69, 0x70, 0x4b, 0x69, 0x6e, 0x64, 0x22, 0xf7, 0x01, 0x0a, 0x0f, 0x41, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x75, 0x64, 0x69, 0x74, 0x12, 0x42, 0x0a, + 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x61, 0x75, 0x64, 0x69, 0x74, 0x5f, 0x64, 0x61, 0x74, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x41, 0x75, 0x64, 0x69, 0x74, 0x44, 0x61, 0x74, + 0x65, 0x12, 0x42, 0x0a, 0x0a, 0x72, 0x65, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x65, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x0a, 0x72, 0x65, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x4b, 0x0a, 0x0d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, - 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x53, 0x70, 0x65, 0x63, - 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0xdf, 0x01, 0x0a, 0x0a, 0x52, 0x65, 0x76, 0x69, 0x65, - 0x77, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, - 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, - 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x76, 0x69, 0x65, - 0x77, 0x65, 0x72, 0x73, 0x12, 0x3b, 0x0a, 0x0b, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x64, - 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x44, 0x61, 0x74, - 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x12, 0x3f, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, - 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x52, - 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x22, 0x90, 0x03, 0x0a, 0x0d, 0x52, 0x65, 0x76, - 0x69, 0x65, 0x77, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x72, 0x0a, 0x1f, 0x6d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x52, - 0x1d, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x65, 0x71, 0x75, 0x69, - 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x27, - 0x0a, 0x0f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x61, 0x0a, 0x18, 0x72, 0x65, 0x76, 0x69, 0x65, - 0x77, 0x5f, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x74, 0x65, 0x6c, 0x65, - 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, - 0x63, 0x79, 0x52, 0x16, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x63, 0x79, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x66, 0x0a, 0x1b, 0x72, 0x65, - 0x76, 0x69, 0x65, 0x77, 0x5f, 0x64, 0x61, 0x79, 0x5f, 0x6f, 0x66, 0x5f, 0x6d, 0x6f, 0x6e, 0x74, - 0x68, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x52, 0x0d, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x6e, 0x63, 0x79, 0x22, 0x9f, 0x01, 0x0a, 0x0a, 0x52, 0x65, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x12, 0x45, 0x0a, 0x09, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x65, 0x76, 0x69, 0x65, 0x77, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x52, 0x09, + 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x4a, 0x0a, 0x0c, 0x64, 0x61, 0x79, + 0x5f, 0x6f, 0x66, 0x5f, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x44, - 0x61, 0x79, 0x4f, 0x66, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x52, 0x17, 0x72, 0x65, 0x76, 0x69, 0x65, - 0x77, 0x44, 0x61, 0x79, 0x4f, 0x66, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x64, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x11, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x6e, 0x63, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x22, 0x4b, 0x0a, 0x10, 0x41, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x26, 0x0a, 0x0c, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x6d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2a, 0xb6, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x76, - 0x69, 0x65, 0x77, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x20, 0x0a, 0x1c, - 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x46, 0x52, 0x45, 0x51, 0x55, 0x45, 0x4e, 0x43, 0x59, - 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1e, - 0x0a, 0x1a, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x46, 0x52, 0x45, 0x51, 0x55, 0x45, 0x4e, - 0x43, 0x59, 0x5f, 0x4f, 0x4e, 0x45, 0x5f, 0x4d, 0x4f, 0x4e, 0x54, 0x48, 0x10, 0x01, 0x12, 0x21, - 0x0a, 0x1d, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x46, 0x52, 0x45, 0x51, 0x55, 0x45, 0x4e, - 0x43, 0x59, 0x5f, 0x54, 0x48, 0x52, 0x45, 0x45, 0x5f, 0x4d, 0x4f, 0x4e, 0x54, 0x48, 0x53, 0x10, - 0x03, 0x12, 0x1f, 0x0a, 0x1b, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x46, 0x52, 0x45, 0x51, - 0x55, 0x45, 0x4e, 0x43, 0x59, 0x5f, 0x53, 0x49, 0x58, 0x5f, 0x4d, 0x4f, 0x4e, 0x54, 0x48, 0x53, - 0x10, 0x06, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x46, 0x52, 0x45, - 0x51, 0x55, 0x45, 0x4e, 0x43, 0x59, 0x5f, 0x4f, 0x4e, 0x45, 0x5f, 0x59, 0x45, 0x41, 0x52, 0x10, - 0x0c, 0x2a, 0x97, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x44, 0x61, 0x79, 0x4f, - 0x66, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x12, 0x23, 0x0a, 0x1f, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, - 0x5f, 0x44, 0x41, 0x59, 0x5f, 0x4f, 0x46, 0x5f, 0x4d, 0x4f, 0x4e, 0x54, 0x48, 0x5f, 0x55, 0x4e, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1d, 0x0a, 0x19, 0x52, - 0x45, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x44, 0x41, 0x59, 0x5f, 0x4f, 0x46, 0x5f, 0x4d, 0x4f, 0x4e, - 0x54, 0x48, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x10, 0x01, 0x12, 0x21, 0x0a, 0x1d, 0x52, 0x45, - 0x56, 0x49, 0x45, 0x57, 0x5f, 0x44, 0x41, 0x59, 0x5f, 0x4f, 0x46, 0x5f, 0x4d, 0x4f, 0x4e, 0x54, - 0x48, 0x5f, 0x46, 0x49, 0x46, 0x54, 0x45, 0x45, 0x4e, 0x54, 0x48, 0x10, 0x0f, 0x12, 0x1c, 0x0a, - 0x18, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x44, 0x41, 0x59, 0x5f, 0x4f, 0x46, 0x5f, 0x4d, - 0x4f, 0x4e, 0x54, 0x48, 0x5f, 0x4c, 0x41, 0x53, 0x54, 0x10, 0x1f, 0x2a, 0xc6, 0x01, 0x0a, 0x10, - 0x49, 0x6e, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x21, 0x0a, 0x1d, 0x49, 0x4e, 0x45, 0x4c, 0x49, 0x47, 0x49, 0x42, 0x4c, 0x45, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, - 0x44, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, 0x49, 0x4e, 0x45, 0x4c, 0x49, 0x47, 0x49, 0x42, 0x4c, - 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x4c, 0x49, 0x47, 0x49, 0x42, 0x4c, - 0x45, 0x10, 0x01, 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x45, 0x4c, 0x49, 0x47, 0x49, 0x42, 0x4c, - 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4e, 0x4f, - 0x54, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, 0x10, 0x02, 0x12, 0x2a, 0x0a, 0x26, 0x49, 0x4e, 0x45, - 0x4c, 0x49, 0x47, 0x49, 0x42, 0x4c, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4d, - 0x49, 0x53, 0x53, 0x49, 0x4e, 0x47, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x4d, 0x45, - 0x4e, 0x54, 0x53, 0x10, 0x03, 0x12, 0x1d, 0x0a, 0x19, 0x49, 0x4e, 0x45, 0x4c, 0x49, 0x47, 0x49, - 0x42, 0x4c, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x58, 0x50, 0x49, 0x52, - 0x45, 0x44, 0x10, 0x04, 0x42, 0x58, 0x5a, 0x56, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, - 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, - 0x6f, 0x72, 0x74, 0x2f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x76, - 0x31, 0x3b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x76, 0x31, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x61, 0x79, 0x4f, 0x66, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x52, 0x0a, 0x64, 0x61, 0x79, 0x4f, 0x66, + 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x22, 0x40, 0x0a, 0x0d, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2f, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x22, 0x5c, 0x0a, 0x12, 0x41, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x12, 0x14, 0x0a, + 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, + 0x6c, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x06, 0x74, 0x72, 0x61, 0x69, 0x74, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x74, + 0x72, 0x61, 0x69, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x74, 0x52, 0x06, 0x74, + 0x72, 0x61, 0x69, 0x74, 0x73, 0x22, 0x5a, 0x0a, 0x10, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, + 0x69, 0x73, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x6c, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, 0x12, + 0x30, 0x0a, 0x06, 0x74, 0x72, 0x61, 0x69, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x18, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x74, 0x72, 0x61, 0x69, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x69, 0x74, 0x52, 0x06, 0x74, 0x72, 0x61, 0x69, 0x74, + 0x73, 0x22, 0x7c, 0x0a, 0x06, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x06, 0x68, + 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, + 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, + 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x36, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, + 0x98, 0x03, 0x0a, 0x0a, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1f, + 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x32, 0x0a, 0x06, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, + 0x06, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x12, 0x34, 0x0a, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, + 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x52, 0x07, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x12, 0x16, 0x0a, + 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, + 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x64, 0x64, 0x65, 0x64, 0x5f, 0x62, + 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x65, 0x64, 0x42, 0x79, + 0x12, 0x55, 0x0a, 0x11, 0x69, 0x6e, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x73, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x6c, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x10, 0x69, 0x6e, 0x65, 0x6c, 0x69, 0x67, 0x69, 0x62, 0x6c, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x4f, 0x0a, 0x0f, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x73, 0x68, 0x69, 0x70, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x26, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x73, 0x68, 0x69, 0x70, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x0e, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x73, 0x68, 0x69, 0x70, 0x4b, 0x69, 0x6e, 0x64, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x52, 0x0a, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x22, 0x7c, 0x0a, 0x06, 0x52, 0x65, + 0x76, 0x69, 0x65, 0x77, 0x12, 0x3a, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, + 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x52, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, + 0x12, 0x36, 0x0a, 0x04, 0x73, 0x70, 0x65, 0x63, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, + 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x53, 0x70, + 0x65, 0x63, 0x52, 0x04, 0x73, 0x70, 0x65, 0x63, 0x22, 0xdf, 0x01, 0x0a, 0x0a, 0x52, 0x65, 0x76, + 0x69, 0x65, 0x77, 0x53, 0x70, 0x65, 0x63, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x61, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x76, 0x69, + 0x65, 0x77, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x76, + 0x69, 0x65, 0x77, 0x65, 0x72, 0x73, 0x12, 0x3b, 0x0a, 0x0b, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, + 0x5f, 0x64, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0a, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x44, + 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x6e, 0x6f, 0x74, 0x65, 0x73, 0x12, 0x3f, 0x0a, 0x07, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x74, 0x65, 0x6c, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x73, 0x52, 0x07, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x22, 0x90, 0x03, 0x0a, 0x0d, 0x52, + 0x65, 0x76, 0x69, 0x65, 0x77, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x12, 0x72, 0x0a, 0x1f, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x69, + 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, + 0x73, 0x52, 0x1d, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x65, 0x71, + 0x75, 0x69, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, + 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x76, + 0x65, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x61, 0x0a, 0x18, 0x72, 0x65, 0x76, + 0x69, 0x65, 0x77, 0x5f, 0x66, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x46, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x6e, 0x63, 0x79, 0x52, 0x16, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x46, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x6e, 0x63, 0x79, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x66, 0x0a, 0x1b, + 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x64, 0x61, 0x79, 0x5f, 0x6f, 0x66, 0x5f, 0x6d, 0x6f, + 0x6e, 0x74, 0x68, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x28, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x76, 0x69, 0x65, + 0x77, 0x44, 0x61, 0x79, 0x4f, 0x66, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x52, 0x17, 0x72, 0x65, 0x76, + 0x69, 0x65, 0x77, 0x44, 0x61, 0x79, 0x4f, 0x66, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x43, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x64, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x11, 0x66, 0x72, 0x65, 0x71, + 0x75, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x22, 0xca, 0x01, + 0x0a, 0x10, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x26, 0x0a, 0x0c, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x00, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x2f, 0x0a, 0x11, 0x6d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0d, 0x48, 0x01, 0x52, 0x0f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4c, + 0x69, 0x73, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, 0x08, 0x6f, + 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x6f, 0x66, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x6f, + 0x77, 0x6e, 0x65, 0x72, 0x4f, 0x66, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x5f, 0x6f, 0x66, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x4f, 0x66, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x14, 0x0a, 0x12, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, + 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x2a, 0xb6, 0x01, 0x0a, 0x0f, 0x52, + 0x65, 0x76, 0x69, 0x65, 0x77, 0x46, 0x72, 0x65, 0x71, 0x75, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x20, + 0x0a, 0x1c, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x46, 0x52, 0x45, 0x51, 0x55, 0x45, 0x4e, + 0x43, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x1e, 0x0a, 0x1a, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x46, 0x52, 0x45, 0x51, 0x55, + 0x45, 0x4e, 0x43, 0x59, 0x5f, 0x4f, 0x4e, 0x45, 0x5f, 0x4d, 0x4f, 0x4e, 0x54, 0x48, 0x10, 0x01, + 0x12, 0x21, 0x0a, 0x1d, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x46, 0x52, 0x45, 0x51, 0x55, + 0x45, 0x4e, 0x43, 0x59, 0x5f, 0x54, 0x48, 0x52, 0x45, 0x45, 0x5f, 0x4d, 0x4f, 0x4e, 0x54, 0x48, + 0x53, 0x10, 0x03, 0x12, 0x1f, 0x0a, 0x1b, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x46, 0x52, + 0x45, 0x51, 0x55, 0x45, 0x4e, 0x43, 0x59, 0x5f, 0x53, 0x49, 0x58, 0x5f, 0x4d, 0x4f, 0x4e, 0x54, + 0x48, 0x53, 0x10, 0x06, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x46, + 0x52, 0x45, 0x51, 0x55, 0x45, 0x4e, 0x43, 0x59, 0x5f, 0x4f, 0x4e, 0x45, 0x5f, 0x59, 0x45, 0x41, + 0x52, 0x10, 0x0c, 0x2a, 0x97, 0x01, 0x0a, 0x10, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x44, 0x61, + 0x79, 0x4f, 0x66, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x12, 0x23, 0x0a, 0x1f, 0x52, 0x45, 0x56, 0x49, + 0x45, 0x57, 0x5f, 0x44, 0x41, 0x59, 0x5f, 0x4f, 0x46, 0x5f, 0x4d, 0x4f, 0x4e, 0x54, 0x48, 0x5f, + 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1d, 0x0a, + 0x19, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x44, 0x41, 0x59, 0x5f, 0x4f, 0x46, 0x5f, 0x4d, + 0x4f, 0x4e, 0x54, 0x48, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x10, 0x01, 0x12, 0x21, 0x0a, 0x1d, + 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x44, 0x41, 0x59, 0x5f, 0x4f, 0x46, 0x5f, 0x4d, 0x4f, + 0x4e, 0x54, 0x48, 0x5f, 0x46, 0x49, 0x46, 0x54, 0x45, 0x45, 0x4e, 0x54, 0x48, 0x10, 0x0f, 0x12, + 0x1c, 0x0a, 0x18, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x5f, 0x44, 0x41, 0x59, 0x5f, 0x4f, 0x46, + 0x5f, 0x4d, 0x4f, 0x4e, 0x54, 0x48, 0x5f, 0x4c, 0x41, 0x53, 0x54, 0x10, 0x1f, 0x2a, 0x65, 0x0a, + 0x0e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x4b, 0x69, 0x6e, 0x64, 0x12, + 0x1f, 0x0a, 0x1b, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x53, 0x48, 0x49, 0x50, 0x5f, 0x4b, 0x49, + 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x18, 0x0a, 0x14, 0x4d, 0x45, 0x4d, 0x42, 0x45, 0x52, 0x53, 0x48, 0x49, 0x50, 0x5f, 0x4b, + 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x10, 0x01, 0x12, 0x18, 0x0a, 0x14, 0x4d, 0x45, + 0x4d, 0x42, 0x45, 0x52, 0x53, 0x48, 0x49, 0x50, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4c, 0x49, + 0x53, 0x54, 0x10, 0x02, 0x2a, 0xc6, 0x01, 0x0a, 0x10, 0x49, 0x6e, 0x65, 0x6c, 0x69, 0x67, 0x69, + 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x21, 0x0a, 0x1d, 0x49, 0x4e, 0x45, + 0x4c, 0x49, 0x47, 0x49, 0x42, 0x4c, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, + 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, + 0x49, 0x4e, 0x45, 0x4c, 0x49, 0x47, 0x49, 0x42, 0x4c, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, + 0x53, 0x5f, 0x45, 0x4c, 0x49, 0x47, 0x49, 0x42, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x24, 0x0a, 0x20, + 0x49, 0x4e, 0x45, 0x4c, 0x49, 0x47, 0x49, 0x42, 0x4c, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, + 0x53, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x45, 0x58, 0x49, 0x53, 0x54, + 0x10, 0x02, 0x12, 0x2a, 0x0a, 0x26, 0x49, 0x4e, 0x45, 0x4c, 0x49, 0x47, 0x49, 0x42, 0x4c, 0x45, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4e, 0x47, 0x5f, + 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x53, 0x10, 0x03, 0x12, 0x1d, + 0x0a, 0x19, 0x49, 0x4e, 0x45, 0x4c, 0x49, 0x47, 0x49, 0x42, 0x4c, 0x45, 0x5f, 0x53, 0x54, 0x41, + 0x54, 0x55, 0x53, 0x5f, 0x45, 0x58, 0x50, 0x49, 0x52, 0x45, 0x44, 0x10, 0x04, 0x42, 0x58, 0x5a, + 0x56, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x76, + 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x2f, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x6c, 0x69, 0x73, 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x61, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x6c, 0x69, 0x73, 0x74, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1425,67 +1550,70 @@ func file_teleport_accesslist_v1_accesslist_proto_rawDescGZIP() []byte { return file_teleport_accesslist_v1_accesslist_proto_rawDescData } -var file_teleport_accesslist_v1_accesslist_proto_enumTypes = make([]protoimpl.EnumInfo, 3) +var file_teleport_accesslist_v1_accesslist_proto_enumTypes = make([]protoimpl.EnumInfo, 4) var file_teleport_accesslist_v1_accesslist_proto_msgTypes = make([]protoimpl.MessageInfo, 14) var file_teleport_accesslist_v1_accesslist_proto_goTypes = []any{ (ReviewFrequency)(0), // 0: teleport.accesslist.v1.ReviewFrequency (ReviewDayOfMonth)(0), // 1: teleport.accesslist.v1.ReviewDayOfMonth - (IneligibleStatus)(0), // 2: teleport.accesslist.v1.IneligibleStatus - (*AccessList)(nil), // 3: teleport.accesslist.v1.AccessList - (*AccessListSpec)(nil), // 4: teleport.accesslist.v1.AccessListSpec - (*AccessListOwner)(nil), // 5: teleport.accesslist.v1.AccessListOwner - (*AccessListAudit)(nil), // 6: teleport.accesslist.v1.AccessListAudit - (*Recurrence)(nil), // 7: teleport.accesslist.v1.Recurrence - (*Notifications)(nil), // 8: teleport.accesslist.v1.Notifications - (*AccessListRequires)(nil), // 9: teleport.accesslist.v1.AccessListRequires - (*AccessListGrants)(nil), // 10: teleport.accesslist.v1.AccessListGrants - (*Member)(nil), // 11: teleport.accesslist.v1.Member - (*MemberSpec)(nil), // 12: teleport.accesslist.v1.MemberSpec - (*Review)(nil), // 13: teleport.accesslist.v1.Review - (*ReviewSpec)(nil), // 14: teleport.accesslist.v1.ReviewSpec - (*ReviewChanges)(nil), // 15: teleport.accesslist.v1.ReviewChanges - (*AccessListStatus)(nil), // 16: teleport.accesslist.v1.AccessListStatus - (*v1.ResourceHeader)(nil), // 17: teleport.header.v1.ResourceHeader - (*timestamppb.Timestamp)(nil), // 18: google.protobuf.Timestamp - (*durationpb.Duration)(nil), // 19: google.protobuf.Duration - (*v11.Trait)(nil), // 20: teleport.trait.v1.Trait + (MembershipKind)(0), // 2: teleport.accesslist.v1.MembershipKind + (IneligibleStatus)(0), // 3: teleport.accesslist.v1.IneligibleStatus + (*AccessList)(nil), // 4: teleport.accesslist.v1.AccessList + (*AccessListSpec)(nil), // 5: teleport.accesslist.v1.AccessListSpec + (*AccessListOwner)(nil), // 6: teleport.accesslist.v1.AccessListOwner + (*AccessListAudit)(nil), // 7: teleport.accesslist.v1.AccessListAudit + (*Recurrence)(nil), // 8: teleport.accesslist.v1.Recurrence + (*Notifications)(nil), // 9: teleport.accesslist.v1.Notifications + (*AccessListRequires)(nil), // 10: teleport.accesslist.v1.AccessListRequires + (*AccessListGrants)(nil), // 11: teleport.accesslist.v1.AccessListGrants + (*Member)(nil), // 12: teleport.accesslist.v1.Member + (*MemberSpec)(nil), // 13: teleport.accesslist.v1.MemberSpec + (*Review)(nil), // 14: teleport.accesslist.v1.Review + (*ReviewSpec)(nil), // 15: teleport.accesslist.v1.ReviewSpec + (*ReviewChanges)(nil), // 16: teleport.accesslist.v1.ReviewChanges + (*AccessListStatus)(nil), // 17: teleport.accesslist.v1.AccessListStatus + (*v1.ResourceHeader)(nil), // 18: teleport.header.v1.ResourceHeader + (*timestamppb.Timestamp)(nil), // 19: google.protobuf.Timestamp + (*durationpb.Duration)(nil), // 20: google.protobuf.Duration + (*v11.Trait)(nil), // 21: teleport.trait.v1.Trait } var file_teleport_accesslist_v1_accesslist_proto_depIdxs = []int32{ - 17, // 0: teleport.accesslist.v1.AccessList.header:type_name -> teleport.header.v1.ResourceHeader - 4, // 1: teleport.accesslist.v1.AccessList.spec:type_name -> teleport.accesslist.v1.AccessListSpec - 16, // 2: teleport.accesslist.v1.AccessList.status:type_name -> teleport.accesslist.v1.AccessListStatus - 5, // 3: teleport.accesslist.v1.AccessListSpec.owners:type_name -> teleport.accesslist.v1.AccessListOwner - 6, // 4: teleport.accesslist.v1.AccessListSpec.audit:type_name -> teleport.accesslist.v1.AccessListAudit - 9, // 5: teleport.accesslist.v1.AccessListSpec.membership_requires:type_name -> teleport.accesslist.v1.AccessListRequires - 9, // 6: teleport.accesslist.v1.AccessListSpec.ownership_requires:type_name -> teleport.accesslist.v1.AccessListRequires - 10, // 7: teleport.accesslist.v1.AccessListSpec.grants:type_name -> teleport.accesslist.v1.AccessListGrants - 10, // 8: teleport.accesslist.v1.AccessListSpec.owner_grants:type_name -> teleport.accesslist.v1.AccessListGrants - 2, // 9: teleport.accesslist.v1.AccessListOwner.ineligible_status:type_name -> teleport.accesslist.v1.IneligibleStatus - 18, // 10: teleport.accesslist.v1.AccessListAudit.next_audit_date:type_name -> google.protobuf.Timestamp - 7, // 11: teleport.accesslist.v1.AccessListAudit.recurrence:type_name -> teleport.accesslist.v1.Recurrence - 8, // 12: teleport.accesslist.v1.AccessListAudit.notifications:type_name -> teleport.accesslist.v1.Notifications - 0, // 13: teleport.accesslist.v1.Recurrence.frequency:type_name -> teleport.accesslist.v1.ReviewFrequency - 1, // 14: teleport.accesslist.v1.Recurrence.day_of_month:type_name -> teleport.accesslist.v1.ReviewDayOfMonth - 19, // 15: teleport.accesslist.v1.Notifications.start:type_name -> google.protobuf.Duration - 20, // 16: teleport.accesslist.v1.AccessListRequires.traits:type_name -> teleport.trait.v1.Trait - 20, // 17: teleport.accesslist.v1.AccessListGrants.traits:type_name -> teleport.trait.v1.Trait - 17, // 18: teleport.accesslist.v1.Member.header:type_name -> teleport.header.v1.ResourceHeader - 12, // 19: teleport.accesslist.v1.Member.spec:type_name -> teleport.accesslist.v1.MemberSpec - 18, // 20: teleport.accesslist.v1.MemberSpec.joined:type_name -> google.protobuf.Timestamp - 18, // 21: teleport.accesslist.v1.MemberSpec.expires:type_name -> google.protobuf.Timestamp - 2, // 22: teleport.accesslist.v1.MemberSpec.ineligible_status:type_name -> teleport.accesslist.v1.IneligibleStatus - 17, // 23: teleport.accesslist.v1.Review.header:type_name -> teleport.header.v1.ResourceHeader - 14, // 24: teleport.accesslist.v1.Review.spec:type_name -> teleport.accesslist.v1.ReviewSpec - 18, // 25: teleport.accesslist.v1.ReviewSpec.review_date:type_name -> google.protobuf.Timestamp - 15, // 26: teleport.accesslist.v1.ReviewSpec.changes:type_name -> teleport.accesslist.v1.ReviewChanges - 9, // 27: teleport.accesslist.v1.ReviewChanges.membership_requirements_changed:type_name -> teleport.accesslist.v1.AccessListRequires - 0, // 28: teleport.accesslist.v1.ReviewChanges.review_frequency_changed:type_name -> teleport.accesslist.v1.ReviewFrequency - 1, // 29: teleport.accesslist.v1.ReviewChanges.review_day_of_month_changed:type_name -> teleport.accesslist.v1.ReviewDayOfMonth - 30, // [30:30] is the sub-list for method output_type - 30, // [30:30] is the sub-list for method input_type - 30, // [30:30] is the sub-list for extension type_name - 30, // [30:30] is the sub-list for extension extendee - 0, // [0:30] is the sub-list for field type_name + 18, // 0: teleport.accesslist.v1.AccessList.header:type_name -> teleport.header.v1.ResourceHeader + 5, // 1: teleport.accesslist.v1.AccessList.spec:type_name -> teleport.accesslist.v1.AccessListSpec + 17, // 2: teleport.accesslist.v1.AccessList.status:type_name -> teleport.accesslist.v1.AccessListStatus + 6, // 3: teleport.accesslist.v1.AccessListSpec.owners:type_name -> teleport.accesslist.v1.AccessListOwner + 7, // 4: teleport.accesslist.v1.AccessListSpec.audit:type_name -> teleport.accesslist.v1.AccessListAudit + 10, // 5: teleport.accesslist.v1.AccessListSpec.membership_requires:type_name -> teleport.accesslist.v1.AccessListRequires + 10, // 6: teleport.accesslist.v1.AccessListSpec.ownership_requires:type_name -> teleport.accesslist.v1.AccessListRequires + 11, // 7: teleport.accesslist.v1.AccessListSpec.grants:type_name -> teleport.accesslist.v1.AccessListGrants + 11, // 8: teleport.accesslist.v1.AccessListSpec.owner_grants:type_name -> teleport.accesslist.v1.AccessListGrants + 3, // 9: teleport.accesslist.v1.AccessListOwner.ineligible_status:type_name -> teleport.accesslist.v1.IneligibleStatus + 2, // 10: teleport.accesslist.v1.AccessListOwner.membership_kind:type_name -> teleport.accesslist.v1.MembershipKind + 19, // 11: teleport.accesslist.v1.AccessListAudit.next_audit_date:type_name -> google.protobuf.Timestamp + 8, // 12: teleport.accesslist.v1.AccessListAudit.recurrence:type_name -> teleport.accesslist.v1.Recurrence + 9, // 13: teleport.accesslist.v1.AccessListAudit.notifications:type_name -> teleport.accesslist.v1.Notifications + 0, // 14: teleport.accesslist.v1.Recurrence.frequency:type_name -> teleport.accesslist.v1.ReviewFrequency + 1, // 15: teleport.accesslist.v1.Recurrence.day_of_month:type_name -> teleport.accesslist.v1.ReviewDayOfMonth + 20, // 16: teleport.accesslist.v1.Notifications.start:type_name -> google.protobuf.Duration + 21, // 17: teleport.accesslist.v1.AccessListRequires.traits:type_name -> teleport.trait.v1.Trait + 21, // 18: teleport.accesslist.v1.AccessListGrants.traits:type_name -> teleport.trait.v1.Trait + 18, // 19: teleport.accesslist.v1.Member.header:type_name -> teleport.header.v1.ResourceHeader + 13, // 20: teleport.accesslist.v1.Member.spec:type_name -> teleport.accesslist.v1.MemberSpec + 19, // 21: teleport.accesslist.v1.MemberSpec.joined:type_name -> google.protobuf.Timestamp + 19, // 22: teleport.accesslist.v1.MemberSpec.expires:type_name -> google.protobuf.Timestamp + 3, // 23: teleport.accesslist.v1.MemberSpec.ineligible_status:type_name -> teleport.accesslist.v1.IneligibleStatus + 2, // 24: teleport.accesslist.v1.MemberSpec.membership_kind:type_name -> teleport.accesslist.v1.MembershipKind + 18, // 25: teleport.accesslist.v1.Review.header:type_name -> teleport.header.v1.ResourceHeader + 15, // 26: teleport.accesslist.v1.Review.spec:type_name -> teleport.accesslist.v1.ReviewSpec + 19, // 27: teleport.accesslist.v1.ReviewSpec.review_date:type_name -> google.protobuf.Timestamp + 16, // 28: teleport.accesslist.v1.ReviewSpec.changes:type_name -> teleport.accesslist.v1.ReviewChanges + 10, // 29: teleport.accesslist.v1.ReviewChanges.membership_requirements_changed:type_name -> teleport.accesslist.v1.AccessListRequires + 0, // 30: teleport.accesslist.v1.ReviewChanges.review_frequency_changed:type_name -> teleport.accesslist.v1.ReviewFrequency + 1, // 31: teleport.accesslist.v1.ReviewChanges.review_day_of_month_changed:type_name -> teleport.accesslist.v1.ReviewDayOfMonth + 32, // [32:32] is the sub-list for method output_type + 32, // [32:32] is the sub-list for method input_type + 32, // [32:32] is the sub-list for extension type_name + 32, // [32:32] is the sub-list for extension extendee + 0, // [0:32] is the sub-list for field type_name } func init() { file_teleport_accesslist_v1_accesslist_proto_init() } @@ -1499,7 +1627,7 @@ func file_teleport_accesslist_v1_accesslist_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_teleport_accesslist_v1_accesslist_proto_rawDesc, - NumEnums: 3, + NumEnums: 4, NumMessages: 14, NumExtensions: 0, NumServices: 0, diff --git a/api/proto/teleport/accesslist/v1/accesslist.proto b/api/proto/teleport/accesslist/v1/accesslist.proto index b83034160a9e7..373c325027d39 100644 --- a/api/proto/teleport/accesslist/v1/accesslist.proto +++ b/api/proto/teleport/accesslist/v1/accesslist.proto @@ -85,6 +85,10 @@ message AccessListOwner { // ineligible_status describes if this owner is eligible or not // and if not, describes how they're lacking eligibility. IneligibleStatus ineligible_status = 3; + + // membership_kind describes the type of membership, either + // `MEMBERSHIP_KIND_USER` or `MEMBERSHIP_KIND_LIST`. + MembershipKind membership_kind = 4; } // AccessListAudit describes the audit configuration for an Access List. @@ -197,6 +201,21 @@ message MemberSpec { // ineligible_status describes if this member is eligible or not // and if not, describes how they're lacking eligibility. IneligibleStatus ineligible_status = 7; + + // membership_kind describes the type of membership, either + // `MEMBERSHIP_KIND_USER` or `MEMBERSHIP_KIND_LIST`. + MembershipKind membership_kind = 9; +} + +// MembershipKind represents the different kinds of list membership +enum MembershipKind { + // MEMBERSHIP_KIND_UNSPECIFIED represents list members that are of + // unknown membership kind, defaulting to being treated as type USER + MEMBERSHIP_KIND_UNSPECIFIED = 0; + // MEMBERSHIP_KIND_USER represents list members that are normal users + MEMBERSHIP_KIND_USER = 1; + // MEMBERSHIP_KIND_LIST represents list members that are nested Access Lists + MEMBERSHIP_KIND_LIST = 2; } // IneligibleStatus describes how the user is ineligible. @@ -268,6 +287,12 @@ message ReviewChanges { // AccessListStatus contains dynamic fields calculated during retrieval. message AccessListStatus { - // member_count is the number of members in the in the Access List. + // member_count is the number of members in the Access List. optional uint32 member_count = 1; + // member_list_count is the number of nested list members in the Access List. + optional uint32 member_list_count = 2; + // owner_of describes Access Lists where this Access List is an explicit owner. + repeated string owner_of = 3; + // member_of describes Access Lists where this Access List is an explicit member. + repeated string member_of = 4; } diff --git a/api/types/accesslist/accesslist.go b/api/types/accesslist/accesslist.go index b9f42f553e1e4..72ad2b43a329e 100644 --- a/api/types/accesslist/accesslist.go +++ b/api/types/accesslist/accesslist.go @@ -24,6 +24,7 @@ import ( "github.com/gravitational/trace" "github.com/jonboulle/clockwork" + accesslistv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/accesslist/v1" "github.com/gravitational/teleport/api/types" "github.com/gravitational/teleport/api/types/header" "github.com/gravitational/teleport/api/types/header/convert/legacy" @@ -75,6 +76,20 @@ func parseReviewFrequency(input string) ReviewFrequency { return 0 } +// MaxAllowedDepth is the maximum allowed depth for nested access lists. +const MaxAllowedDepth = 10 + +var ( + // MembershipKindUnspecified is the default membership kind (treated as 'user'). + MembershipKindUnspecified = accesslistv1.MembershipKind_MEMBERSHIP_KIND_UNSPECIFIED.String() + + // MembershipKindUser is the user membership kind. + MembershipKindUser = accesslistv1.MembershipKind_MEMBERSHIP_KIND_USER.String() + + // MembershipKindList is the list membership kind. + MembershipKindList = accesslistv1.MembershipKind_MEMBERSHIP_KIND_LIST.String() +) + // ReviewDayOfMonth is the day of month the review should be repeated on. type ReviewDayOfMonth int @@ -123,7 +138,7 @@ type AccessList struct { Spec Spec `json:"spec" yaml:"spec"` // Status contains dynamically calculated fields. - Status Status `json:"-" yaml:"-"` + Status Status `json:"status" yaml:"status"` } // Spec is the specification for an access list. @@ -167,6 +182,10 @@ type Owner struct { // IneligibleStatus describes the reason why this owner is not eligible. IneligibleStatus string `json:"ineligible_status" yaml:"ineligible_status"` + + // MembershipKind describes the kind of ownership, + // either "MEMBERSHIP_KIND_USER" or "MEMBERSHIP_KIND_LIST". + MembershipKind string `json:"membership_kind" yaml:"membership_kind"` } // Audit describes the audit configuration for an access list. @@ -224,7 +243,14 @@ type Grants struct { // Status contains dynamic fields calculated during retrieval. type Status struct { // MemberCount is the number of members in the access list. - MemberCount *uint32 + MemberCount *uint32 `json:"-" yaml:"-"` + // MemberListCount is the number of members in the access list that are lists themselves. + MemberListCount *uint32 `json:"-" yaml:"-"` + + // OwnerOf is a list of Access List UUIDs where this access list is an explicit owner. + OwnerOf []string `json:"owner_of" yaml:"owner_of"` + // MemberOf is a list of Access List UUIDs where this access list is an explicit member. + MemberOf []string `json:"member_of" yaml:"member_of"` } // NewAccessList will create a new access list. @@ -286,10 +312,6 @@ func (a *AccessList) CheckAndSetDefaults() error { a.Spec.Audit.Notifications.Start = twoWeeks } - if len(a.Spec.Grants.Roles) == 0 && len(a.Spec.Grants.Traits) == 0 { - return trace.BadParameter("grants must specify at least one role or trait") - } - // Deduplicate owners. The backend will currently prevent this, but it's possible that access lists // were created with duplicated owners before the backend checked for duplicate owners. In order to // ensure that these access lists are backwards compatible, we'll deduplicate them here. @@ -299,6 +321,9 @@ func (a *AccessList) CheckAndSetDefaults() error { if owner.Name == "" { return trace.BadParameter("owner name is missing") } + if owner.MembershipKind == "" { + owner.MembershipKind = MembershipKindUser + } if _, ok := ownerMap[owner.Name]; ok { continue @@ -317,7 +342,7 @@ func (a *AccessList) GetOwners() []Owner { return a.Spec.Owners } -// GetOwners returns the list of owners from the access list. +// SetOwners sets the owners of the access list. func (a *AccessList) SetOwners(owners []Owner) { a.Spec.Owners = owners } @@ -337,6 +362,11 @@ func (a *AccessList) GetGrants() Grants { return a.Spec.Grants } +// GetOwnerGrants returns the owner grants from the access list. +func (a *AccessList) GetOwnerGrants() Grants { + return a.Spec.OwnerGrants +} + // GetMetadata returns metadata. This is specifically for conforming to the Resource interface, // and should be removed when possible. func (a *AccessList) GetMetadata() types.Metadata { diff --git a/api/types/accesslist/convert/v1/accesslist.go b/api/types/accesslist/convert/v1/accesslist.go index fb0d00c8a090f..9ff3aa0e36b48 100644 --- a/api/types/accesslist/convert/v1/accesslist.go +++ b/api/types/accesslist/convert/v1/accesslist.go @@ -68,13 +68,10 @@ func FromProto(msg *accesslistv1.AccessList, opts ...AccessListOption) (*accessl owners := make([]accesslist.Owner, len(msg.Spec.Owners)) for i, owner := range msg.Spec.Owners { - owners[i] = accesslist.Owner{ - Name: owner.Name, - Description: owner.Description, - // Set it to empty as default. - // Must provide as options to set it with the provided value. - IneligibleStatus: "", - } + owners[i] = FromOwnerProto(owner) + // Set IneligibleStatus to empty as default. + // Must provide as options to set it with the provided value. + owners[i].IneligibleStatus = "" } var ownerGrants accesslist.Grants @@ -94,10 +91,24 @@ func FromProto(msg *accesslistv1.AccessList, opts ...AccessListOption) (*accessl } var memberCount *uint32 + var memberListCount *uint32 if msg.Status != nil && msg.Status.MemberCount != nil { memberCount = new(uint32) *memberCount = *msg.Status.MemberCount } + if msg.Status != nil && msg.Status.MemberListCount != nil { + memberListCount = new(uint32) + *memberListCount = *msg.Status.MemberListCount + } + + var ownerOf []string + var memberOf []string + if msg.Status != nil && msg.Status.OwnerOf != nil { + ownerOf = msg.Status.OwnerOf + } + if msg.Status != nil && msg.Status.MemberOf != nil { + memberOf = msg.Status.MemberOf + } accessList, err := accesslist.NewAccessList(headerv1.FromMetadataProto(msg.Header.Metadata), accesslist.Spec{ Title: msg.Spec.Title, @@ -126,7 +137,10 @@ func FromProto(msg *accesslistv1.AccessList, opts ...AccessListOption) (*accessl return nil, trace.Wrap(err) } accessList.Status = accesslist.Status{ - MemberCount: memberCount, + MemberCount: memberCount, + MemberListCount: memberListCount, + OwnerOf: ownerOf, + MemberOf: memberOf, } for _, opt := range opts { @@ -140,15 +154,7 @@ func FromProto(msg *accesslistv1.AccessList, opts ...AccessListOption) (*accessl func ToProto(accessList *accesslist.AccessList) *accesslistv1.AccessList { owners := make([]*accesslistv1.AccessListOwner, len(accessList.Spec.Owners)) for i, owner := range accessList.Spec.Owners { - var ineligibleStatus accesslistv1.IneligibleStatus - if enumVal, ok := accesslistv1.IneligibleStatus_value[owner.IneligibleStatus]; ok { - ineligibleStatus = accesslistv1.IneligibleStatus(enumVal) - } - owners[i] = &accesslistv1.AccessListOwner{ - Name: owner.Name, - Description: owner.Description, - IneligibleStatus: ineligibleStatus, - } + owners[i] = ToOwnerProto(owner) } var ownerGrants *accesslistv1.AccessListGrants @@ -173,10 +179,24 @@ func ToProto(accessList *accesslist.AccessList) *accesslistv1.AccessList { } var memberCount *uint32 + var memberListCount *uint32 if accessList.Status.MemberCount != nil { memberCount = new(uint32) *memberCount = *accessList.Status.MemberCount } + if accessList.Status.MemberListCount != nil { + memberListCount = new(uint32) + *memberListCount = *accessList.Status.MemberListCount + } + + var ownerOf []string + var memberOf []string + if accessList.Status.OwnerOf != nil { + ownerOf = accessList.Status.OwnerOf + } + if accessList.Status.MemberOf != nil { + memberOf = accessList.Status.MemberOf + } return &accesslistv1.AccessList{ Header: headerv1.ToResourceHeaderProto(accessList.ResourceHeader), @@ -209,11 +229,53 @@ func ToProto(accessList *accesslist.AccessList) *accesslistv1.AccessList { OwnerGrants: ownerGrants, }, Status: &accesslistv1.AccessListStatus{ - MemberCount: memberCount, + MemberCount: memberCount, + MemberListCount: memberListCount, + OwnerOf: ownerOf, + MemberOf: memberOf, }, } } +// ToOwnerProto converts an internal access list owner into a v1 access list owner object. +func ToOwnerProto(owner accesslist.Owner) *accesslistv1.AccessListOwner { + var ineligibleStatus accesslistv1.IneligibleStatus + if owner.IneligibleStatus != "" { + if enumVal, ok := accesslistv1.IneligibleStatus_value[owner.IneligibleStatus]; ok { + ineligibleStatus = accesslistv1.IneligibleStatus(enumVal) + } + } else { + ineligibleStatus = accesslistv1.IneligibleStatus_INELIGIBLE_STATUS_UNSPECIFIED + } + + var kind accesslistv1.MembershipKind + if enumVal, ok := accesslistv1.MembershipKind_value[owner.MembershipKind]; ok { + kind = accesslistv1.MembershipKind(enumVal) + } + + return &accesslistv1.AccessListOwner{ + Name: owner.Name, + Description: owner.Description, + IneligibleStatus: ineligibleStatus, + MembershipKind: kind, + } +} + +// FromOwnerProto converts a v1 access list owner into an internal access list owner object. +func FromOwnerProto(protoOwner *accesslistv1.AccessListOwner) accesslist.Owner { + ineligibleStatus := "" + if protoOwner.IneligibleStatus != accesslistv1.IneligibleStatus_INELIGIBLE_STATUS_UNSPECIFIED { + ineligibleStatus = protoOwner.IneligibleStatus.String() + } + + return accesslist.Owner{ + Name: protoOwner.Name, + Description: protoOwner.Description, + IneligibleStatus: ineligibleStatus, + MembershipKind: protoOwner.MembershipKind.String(), + } +} + // WithOwnersIneligibleStatusField sets the "ineligibleStatus" field to the provided proto value. func WithOwnersIneligibleStatusField(protoOwners []*accesslistv1.AccessListOwner) AccessListOption { return func(a *accesslist.AccessList) { diff --git a/api/types/accesslist/member.go b/api/types/accesslist/member.go index 1ffeeccca8342..28a71ac1bcf5e 100644 --- a/api/types/accesslist/member.go +++ b/api/types/accesslist/member.go @@ -61,6 +61,10 @@ type AccessListMemberSpec struct { // IneligibleStatus describes the reason why this member is not eligible. IneligibleStatus string `json:"ineligible_status" yaml:"ineligible_status"` + + // MembershipKind describes the kind of membership, + // either "MEMBERSHIP_KIND_USER" or "MEMBERSHIP_KIND_LIST". + MembershipKind string `json:"membership_kind" yaml:"membership_kind"` } // NewAccessListMember will create a new access listm member. @@ -86,6 +90,10 @@ func (a *AccessListMember) CheckAndSetDefaults() error { return trace.Wrap(err) } + if a.Spec.MembershipKind == "" { + a.Spec.MembershipKind = MembershipKindUser + } + if a.Spec.AccessList == "" { return trace.BadParameter("access list is missing") } diff --git a/docs/pages/reference/operator-resources/resources.teleport.dev_accesslists.mdx b/docs/pages/reference/operator-resources/resources.teleport.dev_accesslists.mdx index 009cf351b2980..5b9d66fc1ea3e 100644 --- a/docs/pages/reference/operator-resources/resources.teleport.dev_accesslists.mdx +++ b/docs/pages/reference/operator-resources/resources.teleport.dev_accesslists.mdx @@ -83,6 +83,7 @@ resource, which you can apply after installing the Teleport Kubernetes operator. |---|---|---| |description|string|description is the plaintext description of the owner and why they are an owner.| |ineligible_status|string or integer|ineligible_status describes if this owner is eligible or not and if not, describes how they're lacking eligibility. Can be either the string or the integer representation of each option.| +|membership_kind|string or integer|membership_kind describes the type of membership, either `MEMBERSHIP_KIND_USER` or `MEMBERSHIP_KIND_LIST`. Can be either the string or the integer representation of each option.| |name|string|name is the username of the owner.| ### spec.ownership_requires diff --git a/docs/pages/reference/terraform-provider/data-sources/access_list.mdx b/docs/pages/reference/terraform-provider/data-sources/access_list.mdx index b5ddd133fdb07..48cd5e48c0b51 100644 --- a/docs/pages/reference/terraform-provider/data-sources/access_list.mdx +++ b/docs/pages/reference/terraform-provider/data-sources/access_list.mdx @@ -113,6 +113,7 @@ Optional: Optional: - `description` (String) description is the plaintext description of the owner and why they are an owner. +- `membership_kind` (Number) membership_kind describes the type of membership, either `MEMBERSHIP_KIND_USER` or `MEMBERSHIP_KIND_LIST`. - `name` (String) name is the username of the owner. diff --git a/docs/pages/reference/terraform-provider/resources/access_list.mdx b/docs/pages/reference/terraform-provider/resources/access_list.mdx index 974584d3714ec..e45b98b603069 100644 --- a/docs/pages/reference/terraform-provider/resources/access_list.mdx +++ b/docs/pages/reference/terraform-provider/resources/access_list.mdx @@ -155,6 +155,7 @@ Optional: Optional: - `description` (String) description is the plaintext description of the owner and why they are an owner. +- `membership_kind` (Number) membership_kind describes the type of membership, either `MEMBERSHIP_KIND_USER` or `MEMBERSHIP_KIND_LIST`. - `name` (String) name is the username of the owner. diff --git a/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_accesslists.yaml b/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_accesslists.yaml index 802e2a4f13a11..2c595617b69d3 100644 --- a/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_accesslists.yaml +++ b/examples/chart/teleport-cluster/charts/teleport-operator/operator-crds/resources.teleport.dev_accesslists.yaml @@ -153,6 +153,10 @@ spec: description: ineligible_status describes if this owner is eligible or not and if not, describes how they're lacking eligibility. x-kubernetes-int-or-string: true + membership_kind: + description: membership_kind describes the type of membership, + either `MEMBERSHIP_KIND_USER` or `MEMBERSHIP_KIND_LIST`. + x-kubernetes-int-or-string: true name: description: name is the username of the owner. type: string diff --git a/gen/proto/ts/teleport/accesslist/v1/accesslist_pb.ts b/gen/proto/ts/teleport/accesslist/v1/accesslist_pb.ts index 11062df8a111e..58f76b98dd6e8 100644 --- a/gen/proto/ts/teleport/accesslist/v1/accesslist_pb.ts +++ b/gen/proto/ts/teleport/accesslist/v1/accesslist_pb.ts @@ -145,6 +145,13 @@ export interface AccessListOwner { * @generated from protobuf field: teleport.accesslist.v1.IneligibleStatus ineligible_status = 3; */ ineligibleStatus: IneligibleStatus; + /** + * membership_kind describes the type of membership, either + * `MEMBERSHIP_KIND_USER` or `MEMBERSHIP_KIND_LIST`. + * + * @generated from protobuf field: teleport.accesslist.v1.MembershipKind membership_kind = 4; + */ + membershipKind: MembershipKind; } /** * AccessListAudit describes the audit configuration for an Access List. @@ -319,6 +326,13 @@ export interface MemberSpec { * @generated from protobuf field: teleport.accesslist.v1.IneligibleStatus ineligible_status = 7; */ ineligibleStatus: IneligibleStatus; + /** + * membership_kind describes the type of membership, either + * `MEMBERSHIP_KIND_USER` or `MEMBERSHIP_KIND_LIST`. + * + * @generated from protobuf field: teleport.accesslist.v1.MembershipKind membership_kind = 9; + */ + membershipKind: MembershipKind; } /** * Review is a review of an Access List. @@ -418,11 +432,29 @@ export interface ReviewChanges { */ export interface AccessListStatus { /** - * member_count is the number of members in the in the Access List. + * member_count is the number of members in the Access List. * * @generated from protobuf field: optional uint32 member_count = 1; */ memberCount?: number; + /** + * member_list_count is the number of nested list members in the Access List. + * + * @generated from protobuf field: optional uint32 member_list_count = 2; + */ + memberListCount?: number; + /** + * owner_of describes Access Lists where this Access List is an explicit owner. + * + * @generated from protobuf field: repeated string owner_of = 3; + */ + ownerOf: string[]; + /** + * member_of describes Access Lists where this Access List is an explicit member. + * + * @generated from protobuf field: repeated string member_of = 4; + */ + memberOf: string[]; } /** * ReviewFrequency is the frequency of reviews. @@ -474,6 +506,32 @@ export enum ReviewDayOfMonth { */ LAST = 31 } +/** + * MembershipKind represents the different kinds of list membership + * + * @generated from protobuf enum teleport.accesslist.v1.MembershipKind + */ +export enum MembershipKind { + /** + * MEMBERSHIP_KIND_UNSPECIFIED represents list members that are of + * unknown membership kind, defaulting to being treated as type USER + * + * @generated from protobuf enum value: MEMBERSHIP_KIND_UNSPECIFIED = 0; + */ + UNSPECIFIED = 0, + /** + * MEMBERSHIP_KIND_USER represents list members that are normal users + * + * @generated from protobuf enum value: MEMBERSHIP_KIND_USER = 1; + */ + USER = 1, + /** + * MEMBERSHIP_KIND_LIST represents list members that are nested Access Lists + * + * @generated from protobuf enum value: MEMBERSHIP_KIND_LIST = 2; + */ + LIST = 2 +} /** * IneligibleStatus describes how the user is ineligible. * @@ -679,7 +737,8 @@ class AccessListOwner$Type extends MessageType { super("teleport.accesslist.v1.AccessListOwner", [ { no: 1, name: "name", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, { no: 2, name: "description", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, - { no: 3, name: "ineligible_status", kind: "enum", T: () => ["teleport.accesslist.v1.IneligibleStatus", IneligibleStatus, "INELIGIBLE_STATUS_"] } + { no: 3, name: "ineligible_status", kind: "enum", T: () => ["teleport.accesslist.v1.IneligibleStatus", IneligibleStatus, "INELIGIBLE_STATUS_"] }, + { no: 4, name: "membership_kind", kind: "enum", T: () => ["teleport.accesslist.v1.MembershipKind", MembershipKind, "MEMBERSHIP_KIND_"] } ]); } create(value?: PartialMessage): AccessListOwner { @@ -687,6 +746,7 @@ class AccessListOwner$Type extends MessageType { message.name = ""; message.description = ""; message.ineligibleStatus = 0; + message.membershipKind = 0; if (value !== undefined) reflectionMergePartial(this, message, value); return message; @@ -705,6 +765,9 @@ class AccessListOwner$Type extends MessageType { case /* teleport.accesslist.v1.IneligibleStatus ineligible_status */ 3: message.ineligibleStatus = reader.int32(); break; + case /* teleport.accesslist.v1.MembershipKind membership_kind */ 4: + message.membershipKind = reader.int32(); + break; default: let u = options.readUnknownField; if (u === "throw") @@ -726,6 +789,9 @@ class AccessListOwner$Type extends MessageType { /* teleport.accesslist.v1.IneligibleStatus ineligible_status = 3; */ if (message.ineligibleStatus !== 0) writer.tag(3, WireType.Varint).int32(message.ineligibleStatus); + /* teleport.accesslist.v1.MembershipKind membership_kind = 4; */ + if (message.membershipKind !== 0) + writer.tag(4, WireType.Varint).int32(message.membershipKind); let u = options.writeUnknownFields; if (u !== false) (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); @@ -1070,7 +1136,8 @@ class MemberSpec$Type extends MessageType { { no: 4, name: "expires", kind: "message", T: () => Timestamp }, { no: 5, name: "reason", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, { no: 6, name: "added_by", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, - { no: 7, name: "ineligible_status", kind: "enum", T: () => ["teleport.accesslist.v1.IneligibleStatus", IneligibleStatus, "INELIGIBLE_STATUS_"] } + { no: 7, name: "ineligible_status", kind: "enum", T: () => ["teleport.accesslist.v1.IneligibleStatus", IneligibleStatus, "INELIGIBLE_STATUS_"] }, + { no: 9, name: "membership_kind", kind: "enum", T: () => ["teleport.accesslist.v1.MembershipKind", MembershipKind, "MEMBERSHIP_KIND_"] } ]); } create(value?: PartialMessage): MemberSpec { @@ -1080,6 +1147,7 @@ class MemberSpec$Type extends MessageType { message.reason = ""; message.addedBy = ""; message.ineligibleStatus = 0; + message.membershipKind = 0; if (value !== undefined) reflectionMergePartial(this, message, value); return message; @@ -1110,6 +1178,9 @@ class MemberSpec$Type extends MessageType { case /* teleport.accesslist.v1.IneligibleStatus ineligible_status */ 7: message.ineligibleStatus = reader.int32(); break; + case /* teleport.accesslist.v1.MembershipKind membership_kind */ 9: + message.membershipKind = reader.int32(); + break; default: let u = options.readUnknownField; if (u === "throw") @@ -1143,6 +1214,9 @@ class MemberSpec$Type extends MessageType { /* teleport.accesslist.v1.IneligibleStatus ineligible_status = 7; */ if (message.ineligibleStatus !== 0) writer.tag(7, WireType.Varint).int32(message.ineligibleStatus); + /* teleport.accesslist.v1.MembershipKind membership_kind = 9; */ + if (message.membershipKind !== 0) + writer.tag(9, WireType.Varint).int32(message.membershipKind); let u = options.writeUnknownFields; if (u !== false) (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); @@ -1357,11 +1431,16 @@ export const ReviewChanges = new ReviewChanges$Type(); class AccessListStatus$Type extends MessageType { constructor() { super("teleport.accesslist.v1.AccessListStatus", [ - { no: 1, name: "member_count", kind: "scalar", opt: true, T: 13 /*ScalarType.UINT32*/ } + { no: 1, name: "member_count", kind: "scalar", opt: true, T: 13 /*ScalarType.UINT32*/ }, + { no: 2, name: "member_list_count", kind: "scalar", opt: true, T: 13 /*ScalarType.UINT32*/ }, + { no: 3, name: "owner_of", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ }, + { no: 4, name: "member_of", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ } ]); } create(value?: PartialMessage): AccessListStatus { const message = globalThis.Object.create((this.messagePrototype!)); + message.ownerOf = []; + message.memberOf = []; if (value !== undefined) reflectionMergePartial(this, message, value); return message; @@ -1374,6 +1453,15 @@ class AccessListStatus$Type extends MessageType { case /* optional uint32 member_count */ 1: message.memberCount = reader.uint32(); break; + case /* optional uint32 member_list_count */ 2: + message.memberListCount = reader.uint32(); + break; + case /* repeated string owner_of */ 3: + message.ownerOf.push(reader.string()); + break; + case /* repeated string member_of */ 4: + message.memberOf.push(reader.string()); + break; default: let u = options.readUnknownField; if (u === "throw") @@ -1389,6 +1477,15 @@ class AccessListStatus$Type extends MessageType { /* optional uint32 member_count = 1; */ if (message.memberCount !== undefined) writer.tag(1, WireType.Varint).uint32(message.memberCount); + /* optional uint32 member_list_count = 2; */ + if (message.memberListCount !== undefined) + writer.tag(2, WireType.Varint).uint32(message.memberListCount); + /* repeated string owner_of = 3; */ + for (let i = 0; i < message.ownerOf.length; i++) + writer.tag(3, WireType.LengthDelimited).string(message.ownerOf[i]); + /* repeated string member_of = 4; */ + for (let i = 0; i < message.memberOf.length; i++) + writer.tag(4, WireType.LengthDelimited).string(message.memberOf[i]); let u = options.writeUnknownFields; if (u !== false) (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); diff --git a/integrations/operator/config/crd/bases/resources.teleport.dev_accesslists.yaml b/integrations/operator/config/crd/bases/resources.teleport.dev_accesslists.yaml index 802e2a4f13a11..2c595617b69d3 100644 --- a/integrations/operator/config/crd/bases/resources.teleport.dev_accesslists.yaml +++ b/integrations/operator/config/crd/bases/resources.teleport.dev_accesslists.yaml @@ -153,6 +153,10 @@ spec: description: ineligible_status describes if this owner is eligible or not and if not, describes how they're lacking eligibility. x-kubernetes-int-or-string: true + membership_kind: + description: membership_kind describes the type of membership, + either `MEMBERSHIP_KIND_USER` or `MEMBERSHIP_KIND_LIST`. + x-kubernetes-int-or-string: true name: description: name is the username of the owner. type: string diff --git a/integrations/terraform/tfschema/accesslist/v1/accesslist_terraform.go b/integrations/terraform/tfschema/accesslist/v1/accesslist_terraform.go index ef0bd9464ef7a..33058a3bad9a4 100644 --- a/integrations/terraform/tfschema/accesslist/v1/accesslist_terraform.go +++ b/integrations/terraform/tfschema/accesslist/v1/accesslist_terraform.go @@ -245,6 +245,11 @@ func GenSchemaAccessList(ctx context.Context) (github_com_hashicorp_terraform_pl Optional: true, Type: github_com_hashicorp_terraform_plugin_framework_types.StringType, }, + "membership_kind": { + Description: "membership_kind describes the type of membership, either `MEMBERSHIP_KIND_USER` or `MEMBERSHIP_KIND_LIST`.", + Optional: true, + Type: github_com_hashicorp_terraform_plugin_framework_types.Int64Type, + }, "name": { Description: "name is the username of the owner.", Optional: true, @@ -571,6 +576,23 @@ func CopyAccessListFromTerraform(_ context.Context, tf github_com_hashicorp_terr } } } + { + a, ok := tf.Attrs["membership_kind"] + if !ok { + diags.Append(attrReadMissingDiag{"AccessList.spec.owners.membership_kind"}) + } else { + v, ok := a.(github_com_hashicorp_terraform_plugin_framework_types.Int64) + if !ok { + diags.Append(attrReadConversionFailureDiag{"AccessList.spec.owners.membership_kind", "github.com/hashicorp/terraform-plugin-framework/types.Int64"}) + } else { + var t github_com_gravitational_teleport_api_gen_proto_go_teleport_accesslist_v1.MembershipKind + if !v.Null && !v.Unknown { + t = github_com_gravitational_teleport_api_gen_proto_go_teleport_accesslist_v1.MembershipKind(v.Value) + } + obj.MembershipKind = t + } + } + } } obj.Owners[k] = t } @@ -1599,6 +1621,28 @@ func CopyAccessListToTerraform(ctx context.Context, obj *github_com_gravitationa tf.Attrs["description"] = v } } + { + t, ok := tf.AttrTypes["membership_kind"] + if !ok { + diags.Append(attrWriteMissingDiag{"AccessList.spec.owners.membership_kind"}) + } else { + v, ok := tf.Attrs["membership_kind"].(github_com_hashicorp_terraform_plugin_framework_types.Int64) + if !ok { + i, err := t.ValueFromTerraform(ctx, github_com_hashicorp_terraform_plugin_go_tftypes.NewValue(t.TerraformType(ctx), nil)) + if err != nil { + diags.Append(attrWriteGeneralError{"AccessList.spec.owners.membership_kind", err}) + } + v, ok = i.(github_com_hashicorp_terraform_plugin_framework_types.Int64) + if !ok { + diags.Append(attrWriteConversionFailureDiag{"AccessList.spec.owners.membership_kind", "github.com/hashicorp/terraform-plugin-framework/types.Int64"}) + } + v.Null = int64(obj.MembershipKind) == 0 + } + v.Value = int64(obj.MembershipKind) + v.Unknown = false + tf.Attrs["membership_kind"] = v + } + } } v.Unknown = false c.Elems[k] = v diff --git a/lib/accesslists/hierarchy.go b/lib/accesslists/hierarchy.go new file mode 100644 index 0000000000000..5b7778aa91245 --- /dev/null +++ b/lib/accesslists/hierarchy.go @@ -0,0 +1,743 @@ +/* + * Teleport + * Copyright (C) 2024 Gravitational, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package accesslists + +import ( + "context" + "slices" + + "github.com/gravitational/trace" + "github.com/jonboulle/clockwork" + + "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/api/types/accesslist" + "github.com/gravitational/teleport/api/types/trait" + "github.com/gravitational/teleport/lib/services" +) + +// RelationshipKind represents the type of relationship: member or owner. +type RelationshipKind int + +const ( + RelationshipKindMember RelationshipKind = iota + RelationshipKindOwner +) + +// MembershipOrOwnershipType represents the type of membership or ownership a User has for an Access List. +type MembershipOrOwnershipType int + +const ( + // MembershipOrOwnershipTypeNone indicates that the User lacks valid Membership or Ownership for the Access List. + MembershipOrOwnershipTypeNone MembershipOrOwnershipType = iota + // MembershipOrOwnershipTypeExplicit indicates that the User has explicit Membership or Ownership for the Access List. + MembershipOrOwnershipTypeExplicit + // MembershipOrOwnershipTypeInherited indicates that the User has inherited Membership or Ownership for the Access List. + MembershipOrOwnershipTypeInherited +) + +// AccessListAndMembersGetter is a minimal interface for fetching AccessLists by name, and AccessListMembers for an Access List. +type AccessListAndMembersGetter interface { + ListAccessListMembers(ctx context.Context, accessListName string, pageSize int, pageToken string) (members []*accesslist.AccessListMember, nextToken string, err error) + GetAccessList(ctx context.Context, accessListName string) (*accesslist.AccessList, error) +} + +// GetMembersFor returns a flattened list of Members for an Access List, including inherited Members. +// +// Returned Members are not validated for expiration or other requirements – use IsAccessListMember +// to validate a Member's membership status. +func GetMembersFor(ctx context.Context, accessListName string, g AccessListAndMembersGetter) ([]*accesslist.AccessListMember, error) { + return getMembersFor(ctx, accessListName, g, make(map[string]struct{})) +} + +func getMembersFor(ctx context.Context, accessListName string, g AccessListAndMembersGetter, visited map[string]struct{}) ([]*accesslist.AccessListMember, error) { + if _, ok := visited[accessListName]; ok { + return nil, nil + } + visited[accessListName] = struct{}{} + + members, err := fetchMembers(ctx, accessListName, g) + if err != nil { + return nil, trace.Wrap(err) + } + + var allMembers []*accesslist.AccessListMember + for _, member := range members { + if member.Spec.MembershipKind != accesslist.MembershipKindList { + allMembers = append(allMembers, member) + continue + } + childMembers, err := getMembersFor(ctx, member.Spec.Name, g, visited) + if err != nil { + return nil, trace.Wrap(err) + } + allMembers = append(allMembers, childMembers...) + } + + return allMembers, nil +} + +// fetchMembers is a simple helper to fetch all top-level AccessListMembers for an AccessList. +func fetchMembers(ctx context.Context, accessListName string, g AccessListAndMembersGetter) ([]*accesslist.AccessListMember, error) { + var allMembers []*accesslist.AccessListMember + pageToken := "" + for { + page, nextToken, err := g.ListAccessListMembers(ctx, accessListName, 0, pageToken) + if err != nil { + // If the AccessList doesn't exist yet, should return an empty list of members + if trace.IsNotFound(err) { + break + } + return nil, trace.Wrap(err) + } + allMembers = append(allMembers, page...) + if nextToken == "" { + break + } + pageToken = nextToken + } + return allMembers, nil +} + +// ValidateAccessListWithMembers validates a new or existing AccessList with a list of AccessListMembers. +func ValidateAccessListWithMembers(ctx context.Context, accessList *accesslist.AccessList, members []*accesslist.AccessListMember, g AccessListAndMembersGetter) error { + for _, owner := range accessList.Spec.Owners { + if owner.MembershipKind != accesslist.MembershipKindList { + continue + } + ownerList, err := g.GetAccessList(ctx, owner.Name) + if err != nil { + return trace.Wrap(err) + } + if err := validateAddition(ctx, accessList, ownerList, RelationshipKindOwner, g); err != nil { + return trace.Wrap(err) + } + } + for _, member := range members { + if member.Spec.MembershipKind != accesslist.MembershipKindList { + continue + } + memberList, err := g.GetAccessList(ctx, member.Spec.Name) + if err != nil { + return trace.Wrap(err) + } + if err := validateAddition(ctx, accessList, memberList, RelationshipKindMember, g); err != nil { + return trace.Wrap(err) + } + } + return nil +} + +// collectOwners is a helper to recursively collect all Owners for an Access List, including inherited Owners. +func collectOwners(ctx context.Context, accessList *accesslist.AccessList, g AccessListAndMembersGetter, owners map[string]*accesslist.Owner, visited map[string]struct{}) error { + //owners := make([]*accesslist.Owner, 0) + if _, ok := visited[accessList.GetName()]; ok { + return nil + } + visited[accessList.GetName()] = struct{}{} + + for _, owner := range accessList.Spec.Owners { + if owner.MembershipKind != accesslist.MembershipKindList { + // Collect direct owner users + owners[owner.Name] = &owner + continue + } + + // For owner lists, we need to collect their members as owners + ownerMembers, err := collectMembersAsOwners(ctx, owner.Name, g, visited) + if err != nil { + return trace.Wrap(err) + } + //owners = append(owners, ownerMembers...) + for _, ownerMember := range ownerMembers { + owners[ownerMember.Name] = ownerMember + } + } + + return nil +} + +// collectMembersAsOwners is a helper to collect all nested members of an AccessList and return them cast as Owners. +func collectMembersAsOwners(ctx context.Context, accessListName string, g AccessListAndMembersGetter, visited map[string]struct{}) ([]*accesslist.Owner, error) { + owners := make([]*accesslist.Owner, 0) + if _, ok := visited[accessListName]; ok { + return owners, nil + } + visited[accessListName] = struct{}{} + + listMembers, err := GetMembersFor(ctx, accessListName, g) + if err != nil { + return nil, trace.Wrap(err) + } + + for _, member := range listMembers { + owners = append(owners, &accesslist.Owner{ + Name: member.Spec.Name, + Description: member.Metadata.Description, + IneligibleStatus: "", + MembershipKind: accesslist.MembershipKindUser, + }) + } + + return owners, nil +} + +// GetOwnersFor returns a flattened list of Owners for an Access List, including inherited Owners. +// +// Returned Owners are not validated for expiration or other requirements – use IsAccessListOwner +// to validate an Owner's ownership status. +func GetOwnersFor(ctx context.Context, accessList *accesslist.AccessList, g AccessListAndMembersGetter) ([]*accesslist.Owner, error) { + ownersMap := make(map[string]*accesslist.Owner) + if err := collectOwners(ctx, accessList, g, ownersMap, make(map[string]struct{})); err != nil { + return nil, trace.Wrap(err) + } + owners := make([]*accesslist.Owner, 0, len(ownersMap)) + for _, owner := range ownersMap { + owners = append(owners, owner) + } + return owners, nil +} + +// ValidateAccessListMember validates a new or existing AccessListMember for an Access List. +func ValidateAccessListMember( + ctx context.Context, + parentList *accesslist.AccessList, + member *accesslist.AccessListMember, + g AccessListAndMembersGetter, +) error { + if member.Spec.MembershipKind != accesslist.MembershipKindList { + return nil + } + return validateAccessListMemberOrOwner(ctx, parentList, member.Spec.Name, RelationshipKindMember, g) +} + +// ValidateAccessListOwner validates a new or existing AccessListOwner for an Access List. +func ValidateAccessListOwner( + ctx context.Context, + parentList *accesslist.AccessList, + owner *accesslist.Owner, + g AccessListAndMembersGetter, +) error { + if owner.MembershipKind != accesslist.MembershipKindList { + return nil + } + return validateAccessListMemberOrOwner(ctx, parentList, owner.Name, RelationshipKindOwner, g) +} + +func validateAccessListMemberOrOwner( + ctx context.Context, + parentList *accesslist.AccessList, + memberOrOwnerName string, + kind RelationshipKind, + g AccessListAndMembersGetter, +) error { + // Ensure member or owner list exists + memberOrOwnerList, err := g.GetAccessList(ctx, memberOrOwnerName) + if err != nil { + return trace.Wrap(err) + } + + // Validate addition + if err := validateAddition(ctx, parentList, memberOrOwnerList, kind, g); err != nil { + return trace.Wrap(err) + } + return nil +} + +func validateAddition( + ctx context.Context, + parentList *accesslist.AccessList, + childList *accesslist.AccessList, + kind RelationshipKind, + g AccessListAndMembersGetter, +) error { + kindStr := "a Member" + if kind == RelationshipKindOwner { + kindStr = "an Owner" + } + + // Cycle detection + reachable, err := isReachable(ctx, childList, parentList, make(map[string]struct{}), g) + if err != nil { + return trace.Wrap(err) + } + if reachable { + return trace.BadParameter( + "Access List '%s' can't be added as %s of '%s' because '%s' is already included as a Member or Owner in '%s'", + childList.Spec.Title, kindStr, parentList.Spec.Title, parentList.Spec.Title, childList.Spec.Title) + } + + // Max depth check + exceeds, err := exceedsMaxDepth(ctx, parentList, childList, kind, g) + if err != nil { + return trace.Wrap(err) + } + if exceeds { + return trace.BadParameter( + "Access List '%s' can't be added as %s of '%s' because it would exceed the maximum nesting depth of %d", + childList.Spec.Title, kindStr, parentList.Spec.Title, accesslist.MaxAllowedDepth) + } + + return nil +} + +func isReachable( + ctx context.Context, + currentList *accesslist.AccessList, + targetList *accesslist.AccessList, + visited map[string]struct{}, + g AccessListAndMembersGetter, +) (bool, error) { + if currentList.GetName() == targetList.GetName() { + return true, nil + } + if _, ok := visited[currentList.GetName()]; ok { + return false, nil + } + visited[currentList.GetName()] = struct{}{} + + // Traverse member lists + listMembers, err := fetchMembers(ctx, currentList.GetName(), g) + if err != nil { + return false, trace.Wrap(err) + } + for _, member := range listMembers { + if member.Spec.MembershipKind == accesslist.MembershipKindList { + childList, err := g.GetAccessList(ctx, member.Spec.Name) + if err != nil { + return false, trace.Wrap(err) + } + reachable, err := isReachable(ctx, childList, targetList, visited, g) + if err != nil { + return false, trace.Wrap(err) + } + if reachable { + return true, nil + } + } + } + + // Traverse owner lists + for _, owner := range currentList.Spec.Owners { + if owner.MembershipKind == accesslist.MembershipKindList { + ownerList, err := g.GetAccessList(ctx, owner.Name) + if err != nil { + return false, trace.Wrap(err) + } + reachable, err := isReachable(ctx, ownerList, targetList, visited, g) + if err != nil { + return false, trace.Wrap(err) + } + if reachable { + return true, nil + } + } + } + + return false, nil +} + +func exceedsMaxDepth( + ctx context.Context, + parentList *accesslist.AccessList, + childList *accesslist.AccessList, + kind RelationshipKind, + g AccessListAndMembersGetter, +) (bool, error) { + switch kind { + case RelationshipKindOwner: + // For Owners, only consider the depth downwards from the child node + depthDownwards, err := maxDepthDownwards(ctx, childList.GetName(), make(map[string]struct{}), g) + if err != nil { + return false, trace.Wrap(err) + } + return depthDownwards > accesslist.MaxAllowedDepth, nil + default: + // For Members, consider the depth upwards from the parent node, downwards from the child node, and the edge between them + depthUpwards, err := maxDepthUpwards(ctx, parentList, make(map[string]struct{}), g) + if err != nil { + return false, trace.Wrap(err) + } + depthDownwards, err := maxDepthDownwards(ctx, childList.GetName(), make(map[string]struct{}), g) + if err != nil { + return false, trace.Wrap(err) + } + totalDepth := depthUpwards + depthDownwards + 1 // +1 for the edge between parent and child + return totalDepth > accesslist.MaxAllowedDepth, nil + } +} + +func maxDepthDownwards( + ctx context.Context, + currentListName string, + seen map[string]struct{}, + g AccessListAndMembersGetter, +) (int, error) { + if _, ok := seen[currentListName]; ok { + return 0, nil + } + seen[currentListName] = struct{}{} + + maxDepth := 0 + + listMembers, err := fetchMembers(ctx, currentListName, g) + if err != nil { + return 0, trace.Wrap(err) + } + for _, member := range listMembers { + if member.Spec.MembershipKind == accesslist.MembershipKindList { + childListName := member.Spec.Name + depth, err := maxDepthDownwards(ctx, childListName, seen, g) + if err != nil { + return 0, trace.Wrap(err) + } + depth += 1 // Edge to the child + if depth > maxDepth { + maxDepth = depth + } + } + } + + delete(seen, currentListName) + + return maxDepth, nil +} + +func maxDepthUpwards( + ctx context.Context, + currentList *accesslist.AccessList, + seen map[string]struct{}, + g AccessListAndMembersGetter, +) (int, error) { + if _, ok := seen[currentList.GetName()]; ok { + return 0, nil + } + seen[currentList.GetName()] = struct{}{} + + maxDepth := 0 + + // Traverse MemberOf relationships + for _, parentListName := range currentList.Status.MemberOf { + parentList, err := g.GetAccessList(ctx, parentListName) + if err != nil { + return 0, trace.Wrap(err) // Treat missing lists as depth 0 + } + depth, err := maxDepthUpwards(ctx, parentList, seen, g) + if err != nil { + return 0, trace.Wrap(err) + } + depth += 1 // Edge to the parent + if depth > maxDepth { + maxDepth = depth + } + } + + delete(seen, currentList.GetName()) + + return maxDepth, nil +} + +func IsAccessListOwner( + ctx context.Context, + user types.User, + accessList *accesslist.AccessList, + g AccessListAndMembersGetter, + lockGetter services.LockGetter, + clock clockwork.Clock, +) (MembershipOrOwnershipType, error) { + if lockGetter != nil { + locks, err := lockGetter.GetLocks(ctx, true, types.LockTarget{ + User: user.GetName(), + }) + if err != nil { + return MembershipOrOwnershipTypeNone, trace.Wrap(err) + } + if len(locks) > 0 { + return MembershipOrOwnershipTypeNone, trace.AccessDenied("User '%s' is currently locked", user.GetName()) + } + } + + var ownershipErr error + + for _, owner := range accessList.Spec.Owners { + // Is user an explicit owner? + if owner.MembershipKind != accesslist.MembershipKindList && owner.Name == user.GetName() { + if !UserMeetsRequirements(user, accessList.Spec.OwnershipRequires) { + // Avoid non-deterministic behavior in these checks. Rather than returning immediately, continue + // through all owners to make sure there isn't a valid match later on. + ownershipErr = trace.AccessDenied("User '%s' does not meet the ownership requirements for Access List '%s'", user.GetName(), accessList.Spec.Title) + continue + } + return MembershipOrOwnershipTypeExplicit, nil + } + // Is user an inherited owner through any potential owner AccessLists? + if owner.MembershipKind == accesslist.MembershipKindList { + ownerAccessList, err := g.GetAccessList(ctx, owner.Name) + if err != nil { + ownershipErr = trace.Wrap(err) + continue + } + // Since we already verified that the user is not locked, don't provide lockGetter here + membershipType, err := IsAccessListMember(ctx, user, ownerAccessList, g, nil, clock) + if err != nil { + ownershipErr = trace.Wrap(err) + continue + } + if membershipType != MembershipOrOwnershipTypeNone { + if !UserMeetsRequirements(user, accessList.Spec.OwnershipRequires) { + ownershipErr = trace.AccessDenied("User '%s' does not meet the ownership requirements for Access List '%s'", user.GetName(), accessList.Spec.Title) + continue + } + return MembershipOrOwnershipTypeInherited, nil + } + } + } + + return MembershipOrOwnershipTypeNone, trace.Wrap(ownershipErr) +} + +func IsAccessListMember( + ctx context.Context, + user types.User, + accessList *accesslist.AccessList, + g AccessListAndMembersGetter, + lockGetter services.LockGetter, + clock clockwork.Clock, +) (MembershipOrOwnershipType, error) { + if lockGetter != nil { + locks, err := lockGetter.GetLocks(ctx, true, types.LockTarget{ + User: user.GetName(), + }) + if err != nil { + return MembershipOrOwnershipTypeNone, trace.Wrap(err) + } + if len(locks) > 0 { + return MembershipOrOwnershipTypeNone, trace.AccessDenied("User '%s' is currently locked", user.GetName()) + } + } + + members, err := fetchMembers(ctx, accessList.GetName(), g) + if err != nil { + return MembershipOrOwnershipTypeNone, trace.Wrap(err) + } + + var membershipErr error + + for _, member := range members { + // Is user an explicit member? + if member.Spec.MembershipKind != accesslist.MembershipKindList && member.GetName() == user.GetName() { + if !UserMeetsRequirements(user, accessList.Spec.MembershipRequires) { + // Avoid non-deterministic behavior in these checks. Rather than returning immediately, continue + // through all members to make sure there isn't a valid match later on. + membershipErr = trace.AccessDenied("User '%s' does not meet the membership requirements for Access List '%s'", user.GetName(), accessList.Spec.Title) + continue + } + if !member.Spec.Expires.IsZero() && !clock.Now().Before(member.Spec.Expires) { + membershipErr = trace.AccessDenied("User '%s's membership in Access List '%s' has expired", user.GetName(), accessList.Spec.Title) + continue + } + return MembershipOrOwnershipTypeExplicit, nil + } + // Is user an inherited member through any potential member AccessLists? + if member.Spec.MembershipKind == accesslist.MembershipKindList { + memberAccessList, err := g.GetAccessList(ctx, member.GetName()) + if err != nil { + membershipErr = trace.Wrap(err) + continue + } + // Since we already verified that the user is not locked, don't provide lockGetter here + membershipType, err := IsAccessListMember(ctx, user, memberAccessList, g, nil, clock) + if err != nil { + membershipErr = trace.Wrap(err) + continue + } + if membershipType != MembershipOrOwnershipTypeNone { + if !UserMeetsRequirements(user, accessList.Spec.MembershipRequires) { + membershipErr = trace.AccessDenied("User '%s' does not meet the membership requirements for Access List '%s'", user.GetName(), accessList.Spec.Title) + continue + } + if !member.Spec.Expires.IsZero() && !clock.Now().Before(member.Spec.Expires) { + membershipErr = trace.AccessDenied("User '%s's membership in Access List '%s' has expired", user.GetName(), accessList.Spec.Title) + continue + } + return MembershipOrOwnershipTypeInherited, nil + } + } + } + + return MembershipOrOwnershipTypeNone, trace.Wrap(membershipErr) +} + +// UserMeetsRequirements is a helper which will return whether the User meets the AccessList Ownership/MembershipRequires. +func UserMeetsRequirements(identity types.User, requires accesslist.Requires) bool { + // Assemble the user's roles for easy look up. + userRolesMap := map[string]struct{}{} + for _, role := range identity.GetRoles() { + userRolesMap[role] = struct{}{} + } + + // Check that the user meets the role requirements. + for _, role := range requires.Roles { + if _, ok := userRolesMap[role]; !ok { + return false + } + } + + // Assemble traits for easy lookup. + userTraitsMap := map[string]map[string]struct{}{} + for k, values := range identity.GetTraits() { + if _, ok := userTraitsMap[k]; !ok { + userTraitsMap[k] = map[string]struct{}{} + } + + for _, v := range values { + userTraitsMap[k][v] = struct{}{} + } + } + + // Check that user meets trait requirements. + for k, values := range requires.Traits { + if _, ok := userTraitsMap[k]; !ok { + return false + } + + for _, v := range values { + if _, ok := userTraitsMap[k][v]; !ok { + return false + } + } + } + + // The user meets all requirements. + return true +} + +func getAncestorsFor(ctx context.Context, accessList *accesslist.AccessList, kind RelationshipKind, g AccessListAndMembersGetter) ([]*accesslist.AccessList, error) { + ancestorsMap := make(map[string]*accesslist.AccessList) + if err := collectAncestors(ctx, accessList, kind, g, make(map[string]struct{}), ancestorsMap); err != nil { + return nil, trace.Wrap(err) + } + ancestors := make([]*accesslist.AccessList, 0, len(ancestorsMap)) + for _, al := range ancestorsMap { + ancestors = append(ancestors, al) + } + return ancestors, nil +} + +func collectAncestors(ctx context.Context, accessList *accesslist.AccessList, kind RelationshipKind, g AccessListAndMembersGetter, visited map[string]struct{}, ancestors map[string]*accesslist.AccessList) error { + if _, ok := visited[accessList.GetName()]; ok { + return nil + } + visited[accessList.GetName()] = struct{}{} + + switch kind { + case RelationshipKindOwner: + // Add parents where this list is an owner to ancestors + for _, ownerParent := range accessList.Status.OwnerOf { + ownerParentAcl, err := g.GetAccessList(ctx, ownerParent) + if err != nil { + return trace.Wrap(err) + } + ancestors[ownerParent] = ownerParentAcl + } + // Recursively traverse parents where this list is a member + for _, memberParent := range accessList.Status.MemberOf { + memberParentAcl, err := g.GetAccessList(ctx, memberParent) + if err != nil { + return trace.Wrap(err) + } + if err := collectAncestors(ctx, memberParentAcl, kind, g, visited, ancestors); err != nil { + return trace.Wrap(err) + } + } + default: + // Only collect parents where this list is a member + for _, memberParent := range accessList.Status.MemberOf { + memberParentAcl, err := g.GetAccessList(ctx, memberParent) + if err != nil { + return trace.Wrap(err) + } + ancestors[memberParent] = memberParentAcl + if err := collectAncestors(ctx, memberParentAcl, kind, g, visited, ancestors); err != nil { + return trace.Wrap(err) + } + } + } + + return nil +} + +// GetInheritedGrants returns the combined Grants for an Access List's members, inherited from any ancestor lists. +func GetInheritedGrants(ctx context.Context, accessList *accesslist.AccessList, g AccessListAndMembersGetter) (*accesslist.Grants, error) { + grants := accesslist.Grants{ + Traits: trait.Traits{}, + } + + collectedRoles := make(map[string]struct{}) + collectedTraits := make(map[string]map[string]struct{}) + + addGrants := func(grantRoles []string, grantTraits trait.Traits) { + for _, role := range grantRoles { + if _, exists := collectedRoles[role]; !exists { + grants.Roles = append(grants.Roles, role) + collectedRoles[role] = struct{}{} + } + } + for traitKey, traitValues := range grantTraits { + if _, exists := collectedTraits[traitKey]; !exists { + collectedTraits[traitKey] = make(map[string]struct{}) + } + for _, traitValue := range traitValues { + if _, exists := collectedTraits[traitKey][traitValue]; !exists { + grants.Traits[traitKey] = append(grants.Traits[traitKey], traitValue) + collectedTraits[traitKey][traitValue] = struct{}{} + } + } + } + } + + // Get ancestors via member relationship + ancestorLists, err := getAncestorsFor(ctx, accessList, RelationshipKindMember, g) + if err != nil { + return nil, trace.Wrap(err) + } + for _, ancestor := range ancestorLists { + memberGrants := ancestor.GetGrants() + addGrants(memberGrants.Roles, memberGrants.Traits) + } + + // Get ancestors via owner relationship + ancestorOwnerLists, err := getAncestorsFor(ctx, accessList, RelationshipKindOwner, g) + if err != nil { + return nil, trace.Wrap(err) + } + for _, ancestorOwner := range ancestorOwnerLists { + ownerGrants := ancestorOwner.GetOwnerGrants() + addGrants(ownerGrants.Roles, ownerGrants.Traits) + } + + slices.Sort(grants.Roles) + grants.Roles = slices.Compact(grants.Roles) + + for k, v := range grants.Traits { + slices.Sort(v) + grants.Traits[k] = slices.Compact(v) + } + + return &grants, nil +} diff --git a/lib/accesslists/hierarchy_test.go b/lib/accesslists/hierarchy_test.go new file mode 100644 index 0000000000000..43d295fb34b6d --- /dev/null +++ b/lib/accesslists/hierarchy_test.go @@ -0,0 +1,666 @@ +/* + * Teleport + * Copyright (C) 2024 Gravitational, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package accesslists + +import ( + "context" + "fmt" + "testing" + "time" + + "github.com/gravitational/trace" + "github.com/jonboulle/clockwork" + "github.com/stretchr/testify/require" + + "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/api/types/accesslist" + "github.com/gravitational/teleport/api/types/header" +) + +// Mock implementation of AccessListAndMembersGetter. +type mockAccessListAndMembersGetter struct { + accessLists map[string]*accesslist.AccessList + members map[string][]*accesslist.AccessListMember +} + +func (m *mockAccessListAndMembersGetter) GetAccessList(ctx context.Context, accessListName string) (*accesslist.AccessList, error) { + accessList, exists := m.accessLists[accessListName] + if !exists { + return nil, trace.NotFound("access list %v not found", accessListName) + } + return accessList, nil +} + +func (m *mockAccessListAndMembersGetter) ListAccessListMembers(ctx context.Context, accessListName string, pageSize int, pageToken string) ([]*accesslist.AccessListMember, string, error) { + members, exists := m.members[accessListName] + if !exists { + return nil, "", nil + } + return members, "", nil +} + +type mockLocksGetter struct { + targets map[string][]types.Lock +} + +func (m *mockLocksGetter) GetLock(ctx context.Context, name string) (types.Lock, error) { + panic("not implemented") +} + +func (m *mockLocksGetter) GetLocks(ctx context.Context, inForceOnly bool, targets ...types.LockTarget) ([]types.Lock, error) { + var locks []types.Lock + for _, target := range targets { + locks = append(locks, m.targets[target.User]...) + } + return locks, nil +} + +const ( + ownerUser = "ownerUser" + ownerUser2 = "ownerUser2" + member1 = "member1" + member2 = "member2" +) + +func TestAccessListHierarchyDepthCheck(t *testing.T) { + clock := clockwork.NewFakeClock() + ctx := context.Background() + + numAcls := accesslist.MaxAllowedDepth + 2 // Extra 2 to test exceeding the max depth + + acls := make([]*accesslist.AccessList, numAcls) + for i := 0; i < numAcls; i++ { + acls[i] = newAccessList(t, fmt.Sprintf("acl%d", i+1), clock) + } + + accessListAndMembersGetter := &mockAccessListAndMembersGetter{ + members: make(map[string][]*accesslist.AccessListMember), + accessLists: make(map[string]*accesslist.AccessList), + } + + // Create members up to MaxAllowedDepth + for i := 0; i < accesslist.MaxAllowedDepth; i++ { + member := newAccessListMember(t, acls[i].GetName(), acls[i+1].GetName(), accesslist.MembershipKindList, clock) + acls[i+1].Status.MemberOf = append(acls[i+1].Status.MemberOf, acls[i].GetName()) + accessListAndMembersGetter.members[acls[i].GetName()] = []*accesslist.AccessListMember{member} + accessListAndMembersGetter.accessLists[acls[i].GetName()] = acls[i] + } + // Set remaining Access Lists' members to empty slices + for i := accesslist.MaxAllowedDepth; i < numAcls; i++ { + accessListAndMembersGetter.members[acls[i].GetName()] = []*accesslist.AccessListMember{} + accessListAndMembersGetter.accessLists[acls[i].GetName()] = acls[i] + } + + // Should be valid with existing member < MaxAllowedDepth + err := ValidateAccessListMember(ctx, acls[accesslist.MaxAllowedDepth-1], accessListAndMembersGetter.members[acls[accesslist.MaxAllowedDepth-1].GetName()][0], accessListAndMembersGetter) + require.NoError(t, err) + + // Now, attempt to add a member that increases the depth beyond MaxAllowedDepth + extraMember := newAccessListMember( + t, + acls[accesslist.MaxAllowedDepth].GetName(), + acls[accesslist.MaxAllowedDepth+1].GetName(), + accesslist.MembershipKindList, + clock, + ) + + // Validate adding this member should fail due to exceeding max depth + err = ValidateAccessListMember(ctx, acls[accesslist.MaxAllowedDepth], extraMember, accessListAndMembersGetter) + require.Error(t, err) + require.ErrorIs(t, err, trace.BadParameter("Access List '%s' can't be added as a Member of '%s' because it would exceed the maximum nesting depth of %d", acls[accesslist.MaxAllowedDepth+1].Spec.Title, acls[accesslist.MaxAllowedDepth].Spec.Title, accesslist.MaxAllowedDepth)) +} + +func TestAccessListValidateWithMembers(t *testing.T) { + clock := clockwork.NewFakeClock() + ctx := context.Background() + + // We're creating a hierarchy with a depth of 10, and then trying to add it as a Member of a 'root' Access List. This should fail. + rootAcl := newAccessList(t, "root", clock) + nestedAcls := make([]*accesslist.AccessList, 0, accesslist.MaxAllowedDepth) + for i := 0; i < accesslist.MaxAllowedDepth+1; i++ { + acl := newAccessList(t, fmt.Sprintf("acl-%d", i), clock) + nestedAcls = append(nestedAcls, acl) + } + rootAclMember := newAccessListMember(t, rootAcl.GetName(), nestedAcls[0].GetName(), accesslist.MembershipKindList, clock) + members := make([]*accesslist.AccessListMember, 0, accesslist.MaxAllowedDepth-1) + for i := 0; i < accesslist.MaxAllowedDepth; i++ { + member := newAccessListMember(t, nestedAcls[i].GetName(), nestedAcls[i+1].GetName(), accesslist.MembershipKindList, clock) + nestedAcls[i+1].Status.MemberOf = append(nestedAcls[i+1].Status.MemberOf, nestedAcls[i].GetName()) + members = append(members, member) + } + + accessListAndMembersGetter := &mockAccessListAndMembersGetter{ + members: map[string][]*accesslist.AccessListMember{ + rootAcl.GetName(): {}, + }, + accessLists: map[string]*accesslist.AccessList{ + rootAcl.GetName(): rootAcl, + }, + } + for i := 0; i < accesslist.MaxAllowedDepth+1; i++ { + if i < accesslist.MaxAllowedDepth { + accessListAndMembersGetter.members[nestedAcls[i].GetName()] = []*accesslist.AccessListMember{members[i]} + } + accessListAndMembersGetter.accessLists[nestedAcls[i].GetName()] = nestedAcls[i] + } + + // Should validate successfully, as acl-0 -> acl-10 is a valid hierarchy of depth 10. + err := ValidateAccessListWithMembers(ctx, rootAcl, []*accesslist.AccessListMember{}, accessListAndMembersGetter) + require.NoError(t, err) + err = ValidateAccessListWithMembers(ctx, nestedAcls[0], []*accesslist.AccessListMember{accessListAndMembersGetter.members[nestedAcls[0].GetName()][0]}, accessListAndMembersGetter) + require.NoError(t, err) + + // Calling `ValidateAccessListWithMembers`, with `rootAclm1`, should fail, as it would exceed the maximum nesting depth. + err = ValidateAccessListWithMembers(ctx, rootAcl, []*accesslist.AccessListMember{rootAclMember}, accessListAndMembersGetter) + require.Error(t, err) + require.ErrorIs(t, err, trace.BadParameter("Access List '%s' can't be added as a Member of '%s' because it would exceed the maximum nesting depth of %d", nestedAcls[0].Spec.Title, rootAcl.Spec.Title, accesslist.MaxAllowedDepth)) + + const Length = accesslist.MaxAllowedDepth/2 + 1 + + // Next, we're creating two separate hierarchies, each with a depth of `MaxAllowedDepth/2`. When testing the validation, we'll try to connect the two hierarchies, which should fail. + nestedAcls1 := make([]*accesslist.AccessList, 0, Length) + for i := 0; i <= Length; i++ { + acl := newAccessList(t, fmt.Sprintf("acl1-%d", i), clock) + nestedAcls1 = append(nestedAcls1, acl) + } + + // Create the second hierarchy. + nestedAcls2 := make([]*accesslist.AccessList, 0, Length) + for i := 0; i <= Length; i++ { + acl := newAccessList(t, fmt.Sprintf("acl2-%d", i), clock) + nestedAcls2 = append(nestedAcls2, acl) + } + + accessListAndMembersGetter = &mockAccessListAndMembersGetter{ + members: map[string][]*accesslist.AccessListMember{}, + accessLists: map[string]*accesslist.AccessList{}, + } + + // Create the members for the first hierarchy. + for i := 0; i < Length; i++ { + member := newAccessListMember(t, nestedAcls1[i].GetName(), nestedAcls1[i+1].GetName(), accesslist.MembershipKindList, clock) + nestedAcls1[i+1].Status.MemberOf = append(nestedAcls1[i+1].Status.MemberOf, nestedAcls1[i].GetName()) + accessListAndMembersGetter.members[nestedAcls1[i].GetName()] = []*accesslist.AccessListMember{member} + accessListAndMembersGetter.accessLists[nestedAcls1[i].GetName()] = nestedAcls1[i] + } + + // Create the members for the second hierarchy. + for i := 0; i < Length; i++ { + member := newAccessListMember(t, nestedAcls2[i].GetName(), nestedAcls2[i+1].GetName(), accesslist.MembershipKindList, clock) + nestedAcls2[i+1].Status.MemberOf = append(nestedAcls2[i+1].Status.MemberOf, nestedAcls2[i].GetName()) + accessListAndMembersGetter.members[nestedAcls2[i].GetName()] = []*accesslist.AccessListMember{member} + accessListAndMembersGetter.accessLists[nestedAcls2[i].GetName()] = nestedAcls2[i] + } + + // For the first hierarchy + nestedAcls1Last := nestedAcls1[len(nestedAcls1)-1] + accessListAndMembersGetter.accessLists[nestedAcls1Last.GetName()] = nestedAcls1Last + + // For the second hierarchy + nestedAcls2Last := nestedAcls2[len(nestedAcls2)-1] + accessListAndMembersGetter.accessLists[nestedAcls2Last.GetName()] = nestedAcls2Last + + // Should validate successfully when adding another list, as both hierarchies are valid. + err = ValidateAccessListWithMembers(ctx, nestedAcls1Last, []*accesslist.AccessListMember{newAccessListMember(t, nestedAcls1Last.GetName(), nestedAcls2Last.GetName(), accesslist.MembershipKindList, clock)}, accessListAndMembersGetter) + require.NoError(t, err) + err = ValidateAccessListWithMembers(ctx, nestedAcls2Last, []*accesslist.AccessListMember{newAccessListMember(t, nestedAcls2Last.GetName(), nestedAcls1Last.GetName(), accesslist.MembershipKindList, clock)}, accessListAndMembersGetter) + require.NoError(t, err) + + // Now, we'll try to connect the two hierarchies, which should fail. + err = ValidateAccessListWithMembers(ctx, nestedAcls1Last, []*accesslist.AccessListMember{newAccessListMember(t, nestedAcls1Last.GetName(), nestedAcls2[0].GetName(), accesslist.MembershipKindList, clock)}, accessListAndMembersGetter) + require.Error(t, err) + require.ErrorIs(t, err, trace.BadParameter("Access List '%s' can't be added as a Member of '%s' because it would exceed the maximum nesting depth of %d", nestedAcls2[0].Spec.Title, nestedAcls1[len(nestedAcls1)-1].Spec.Title, accesslist.MaxAllowedDepth)) +} + +func TestAccessListHierarchyCircularRefsCheck(t *testing.T) { + clock := clockwork.NewFakeClock() + ctx := context.Background() + + acl1 := newAccessList(t, "1", clock) + acl2 := newAccessList(t, "2", clock) + acl3 := newAccessList(t, "3", clock) + + // acl1 -> acl2 -> acl3 + acl1m1 := newAccessListMember(t, acl1.GetName(), acl2.GetName(), accesslist.MembershipKindList, clock) + acl2.Status.MemberOf = append(acl2.Status.MemberOf, acl1.GetName()) + acl2m1 := newAccessListMember(t, acl2.GetName(), acl3.GetName(), accesslist.MembershipKindList, clock) + acl3.Status.MemberOf = append(acl3.Status.MemberOf, acl2.GetName()) + + // acl3 -> acl1 + acl3m1 := newAccessListMember(t, acl3.GetName(), acl1.GetName(), accesslist.MembershipKindList, clock) + + accessListAndMembersGetter := &mockAccessListAndMembersGetter{ + members: map[string][]*accesslist.AccessListMember{ + acl1.GetName(): {acl1m1}, + acl2.GetName(): {acl2m1}, + acl3.GetName(): {}, + }, + accessLists: map[string]*accesslist.AccessList{ + acl1.GetName(): acl1, + acl2.GetName(): acl2, + acl3.GetName(): acl3, + }, + } + + // Circular references should not be allowed. + err := ValidateAccessListMember(ctx, acl3, acl3m1, accessListAndMembersGetter) + //err = hierarchy.ValidateAccessListMember(acl3.GetName(), acl3m1) + require.Error(t, err) + require.ErrorIs(t, err, trace.BadParameter("Access List '%s' can't be added as a Member of '%s' because '%s' is already included as a Member or Owner in '%s'", acl1.Spec.Title, acl3.Spec.Title, acl3.Spec.Title, acl1.Spec.Title)) + + // By removing acl3 as a member of acl2, the relationship should be valid. + accessListAndMembersGetter.members[acl2.GetName()] = []*accesslist.AccessListMember{} + accessListAndMembersGetter.accessLists[acl3.GetName()].Status.MemberOf = []string{} + err = ValidateAccessListMember(ctx, acl3, acl3m1, accessListAndMembersGetter) + require.NoError(t, err) + + // Circular references with Ownership should also be disallowed. + acl4 := newAccessList(t, "4", clock) + acl5 := newAccessList(t, "5", clock) + + // acl4 includes acl5 as a Member + acl4m1 := newAccessListMember(t, acl4.GetName(), acl5.GetName(), accesslist.MembershipKindList, clock) + acl5.Status.MemberOf = append(acl5.Status.MemberOf, acl4.GetName()) + + // acl5 includes acl4 as an Owner. + acl5.Spec.Owners = append(acl5.Spec.Owners, accesslist.Owner{ + Name: acl4.GetName(), + Description: "asdf", + MembershipKind: accesslist.MembershipKindList, + }) + acl4.Status.OwnerOf = append(acl4.Status.OwnerOf, acl5.GetName()) + + accessListAndMembersGetter = &mockAccessListAndMembersGetter{ + members: map[string][]*accesslist.AccessListMember{ + acl4.GetName(): {acl4m1}, + acl5.GetName(): {}, + }, + accessLists: map[string]*accesslist.AccessList{ + acl4.GetName(): acl4, + acl5.GetName(): acl5, + }, + } + + err = ValidateAccessListWithMembers(ctx, acl5, []*accesslist.AccessListMember{acl4m1}, accessListAndMembersGetter) + require.Error(t, err) + require.ErrorIs(t, err, trace.BadParameter("Access List '%s' can't be added as an Owner of '%s' because '%s' is already included as a Member or Owner in '%s'", acl4.Spec.Title, acl5.Spec.Title, acl5.Spec.Title, acl4.Spec.Title)) +} + +func TestAccessListHierarchyIsOwner(t *testing.T) { + clock := clockwork.NewFakeClock() + ctx := context.Background() + + acl1 := newAccessList(t, "1", clock) + acl2 := newAccessList(t, "2", clock) + acl3 := newAccessList(t, "3", clock) + acl4 := newAccessList(t, "4", clock) + + // acl1 -> acl2 -> acl3 as members + acl1m1 := newAccessListMember(t, acl1.GetName(), acl2.GetName(), accesslist.MembershipKindList, clock) + acl2.Status.MemberOf = append(acl2.Status.MemberOf, acl1.GetName()) + acl1m2 := newAccessListMember(t, acl1.GetName(), member1, accesslist.MembershipKindUser, clock) + acl2m1 := newAccessListMember(t, acl2.GetName(), acl3.GetName(), accesslist.MembershipKindList, clock) + acl3.Status.MemberOf = append(acl3.Status.MemberOf, acl2.GetName()) + acl4m1 := newAccessListMember(t, acl4.GetName(), member2, accesslist.MembershipKindUser, clock) + + // acl4 -> acl1 as owner + acl4.Spec.Owners = append(acl4.Spec.Owners, accesslist.Owner{ + Name: acl1.GetName(), + Description: "asdf", + MembershipKind: accesslist.MembershipKindList, + }) + acl1.Status.OwnerOf = append(acl1.Status.OwnerOf, acl4.GetName()) + + accessListAndMembersGetter := &mockAccessListAndMembersGetter{ + members: map[string][]*accesslist.AccessListMember{ + acl1.GetName(): {acl1m1, acl1m2}, + acl2.GetName(): {acl2m1}, + acl3.GetName(): {}, + acl4.GetName(): {acl4m1}, + }, + accessLists: map[string]*accesslist.AccessList{ + acl1.GetName(): acl1, + acl2.GetName(): acl2, + acl3.GetName(): acl3, + acl4.GetName(): acl4, + }, + } + + // User which does not meet acl1's Membership requirements. + stubUserNoRequires, err := types.NewUser(member1) + require.NoError(t, err) + + ownershipType, err := IsAccessListOwner(ctx, stubUserNoRequires, acl4, accessListAndMembersGetter, nil, clock) + require.Error(t, err) + require.ErrorIs(t, err, trace.AccessDenied("User '%s' does not meet the membership requirements for Access List '%s'", member1, acl1.Spec.Title)) + // Should not have inherited ownership due to missing OwnershipRequires. + require.Equal(t, MembershipOrOwnershipTypeNone, ownershipType) + + // User which only meets acl1's Membership requirements. + stubUserMeetsMemberRequires, err := types.NewUser(member1) + require.NoError(t, err) + stubUserMeetsMemberRequires.SetTraits(map[string][]string{ + "mtrait1": {"mvalue1", "mvalue2"}, + "mtrait2": {"mvalue3", "mvalue4"}, + }) + stubUserMeetsMemberRequires.SetRoles([]string{"mrole1", "mrole2"}) + + ownershipType, err = IsAccessListOwner(ctx, stubUserMeetsMemberRequires, acl4, accessListAndMembersGetter, nil, clock) + require.Error(t, err) + require.ErrorIs(t, err, trace.AccessDenied("User '%s' does not meet the ownership requirements for Access List '%s'", member1, acl4.Spec.Title)) + require.Equal(t, MembershipOrOwnershipTypeNone, ownershipType) + + // User which meets acl1's Membership and acl1's Ownership requirements. + stubUserMeetsAllRequires, err := types.NewUser(member1) + require.NoError(t, err) + stubUserMeetsAllRequires.SetTraits(map[string][]string{ + "mtrait1": {"mvalue1", "mvalue2"}, + "mtrait2": {"mvalue3", "mvalue4"}, + "otrait1": {"ovalue1", "ovalue2"}, + "otrait2": {"ovalue3", "ovalue4"}, + }) + stubUserMeetsAllRequires.SetRoles([]string{"mrole1", "mrole2", "orole1", "orole2"}) + + ownershipType, err = IsAccessListOwner(ctx, stubUserMeetsAllRequires, acl4, accessListAndMembersGetter, nil, clock) + require.NoError(t, err) + // Should have inherited ownership from acl1's inclusion in acl4's Owners. + require.Equal(t, MembershipOrOwnershipTypeInherited, ownershipType) + + stubUserMeetsAllRequires.SetName(member2) + ownershipType, err = IsAccessListOwner(ctx, stubUserMeetsAllRequires, acl4, accessListAndMembersGetter, nil, clock) + require.NoError(t, err) + // Should not have ownership. + require.Equal(t, MembershipOrOwnershipTypeNone, ownershipType) +} + +func TestAccessListIsMember(t *testing.T) { + clock := clockwork.NewFakeClock() + ctx := context.Background() + + acl1 := newAccessList(t, "1", clock) + acl1m1 := newAccessListMember(t, acl1.GetName(), member1, accesslist.MembershipKindUser, clock) + + locksGetter := &mockLocksGetter{ + targets: map[string][]types.Lock{}, + } + accessListAndMembersGetter := &mockAccessListAndMembersGetter{ + members: map[string][]*accesslist.AccessListMember{ + acl1.GetName(): {acl1m1}, + }, + accessLists: map[string]*accesslist.AccessList{ + acl1.GetName(): acl1, + }, + } + + stubMember1, err := types.NewUser(member1) + require.NoError(t, err) + stubMember1.SetTraits(map[string][]string{ + "mtrait1": {"mvalue1", "mvalue2"}, + "mtrait2": {"mvalue3", "mvalue4"}, + }) + stubMember1.SetRoles([]string{"mrole1", "mrole2"}) + + membershipType, err := IsAccessListMember(ctx, stubMember1, acl1, accessListAndMembersGetter, locksGetter, clock) + require.NoError(t, err) + require.Equal(t, MembershipOrOwnershipTypeExplicit, membershipType) + + // When user is Locked, should not be considered a Member. + lock, err := types.NewLock("user-lock", types.LockSpecV2{ + Target: types.LockTarget{ + User: member1, + }, + }) + require.NoError(t, err) + locksGetter.targets[member1] = []types.Lock{lock} + + membershipType, err = IsAccessListMember(ctx, stubMember1, acl1, accessListAndMembersGetter, locksGetter, clock) + require.ErrorIs(t, err, trace.AccessDenied("User '%s' is currently locked", member1)) + require.Equal(t, MembershipOrOwnershipTypeNone, membershipType) +} + +func TestGetOwners(t *testing.T) { + ctx := context.Background() + clock := clockwork.NewFakeClock() + + // Create Access Lists + acl1 := newAccessList(t, "1", clock) + acl2 := newAccessList(t, "2", clock) + acl3 := newAccessList(t, "3", clock) + + // Set up owners + // acl1 is owned by user "ownerA" and access list acl2 + acl1.Spec.Owners = []accesslist.Owner{ + { + Name: "ownerA", + MembershipKind: accesslist.MembershipKindUser, + }, + { + Name: acl2.GetName(), + MembershipKind: accesslist.MembershipKindList, + }, + } + acl2.Status.OwnerOf = append(acl2.Status.OwnerOf, acl1.GetName()) + + // acl2 is owned by user "ownerB" and access list aclC + acl2.Spec.Owners = []accesslist.Owner{ + { + Name: "ownerB", + MembershipKind: accesslist.MembershipKindUser, + }, + { + Name: acl3.GetName(), + MembershipKind: accesslist.MembershipKindList, + }, + } + acl3.Status.OwnerOf = append(acl3.Status.OwnerOf, acl2.GetName()) + + // acl3 is owned by user "ownerC" + acl3.Spec.Owners = []accesslist.Owner{ + { + Name: "ownerC", + MembershipKind: accesslist.MembershipKindUser, + }, + } + + // Set up members for owner lists + // aclB has member "memberB" + acl2m1 := newAccessListMember(t, acl2.GetName(), "memberB", accesslist.MembershipKindUser, clock) + // aclC has member "memberC" + acl3m1 := newAccessListMember(t, acl3.GetName(), "memberC", accesslist.MembershipKindUser, clock) + + accessListAndMembersGetter := &mockAccessListAndMembersGetter{ + members: map[string][]*accesslist.AccessListMember{ + acl2.GetName(): {acl2m1}, + acl3.GetName(): {acl3m1}, + }, + } + + // Test GetOwners for acl1 + owners, err := GetOwnersFor(ctx, acl1, accessListAndMembersGetter) + require.NoError(t, err) + + // Expected owners: + // - Direct owner: "ownerA" + // - Inherited owners via acl2 (since acl2 is an owner of acl1): + // - Members of acl2: "memberB" + // Note: Owners of acl2 ("ownerB") and members/owners of acl3 are not inherited by acl1 + + expectedOwners := map[string]bool{ + "ownerA": true, // Direct owner of acl1 + "memberB": true, // Member of acl2 (owner list of acl1) + } + + actualOwners := make(map[string]bool) + for _, owner := range owners { + actualOwners[owner.Name] = true + } + + require.Equal(t, expectedOwners, actualOwners, "Owners do not match expected owners") + + // Test GetOwners for acl2 + owners, err = GetOwnersFor(ctx, acl2, accessListAndMembersGetter) + require.NoError(t, err) + + // Expected owners: + // - Direct owner: "ownerB" + // - Inherited owners via acl3 (since acl3 is an owner of acl2): + // - Members of acl3: "memberC" + + expectedOwners = map[string]bool{ + "ownerB": true, // Direct owner of acl2 + "memberC": true, // Member of acl3 (owner list of acl2) + } + + actualOwners = make(map[string]bool) + for _, owner := range owners { + actualOwners[owner.Name] = true + } + + require.Equal(t, expectedOwners, actualOwners, "Owners do not match expected owners") +} + +func TestGetInheritedGrants(t *testing.T) { + ctx := context.Background() + clock := clockwork.NewFakeClock() + + aclroot := newAccessList(t, "root", clock) + acl1 := newAccessList(t, "1", clock) + acl2 := newAccessList(t, "2", clock) + + // aclroot has a trait for owners - "root-owner-trait", and a role for owners - "root-owner-role" + aclroot.Spec.OwnerGrants = accesslist.Grants{ + Traits: map[string][]string{ + "root-owner-trait": {"root-owner-value"}, + }, + Roles: []string{"root-owner-role"}, + } + + // acl1 has a trait for members - "1-member-trait", and a role for members - "1-member-role" + acl1.Spec.Grants = accesslist.Grants{ + Traits: map[string][]string{ + "1-member-trait": {"1-member-value"}, + }, + Roles: []string{"1-member-role"}, + } + + // acl2 has no traits or roles + acl2.Spec.Grants = accesslist.Grants{} + + aclroot.SetOwners([]accesslist.Owner{ + { + Name: acl1.GetName(), + MembershipKind: accesslist.MembershipKindList, + }, + }) + acl1.Status.OwnerOf = append(acl1.Status.OwnerOf, aclroot.GetName()) + + accessListAndMembersGetter := &mockAccessListAndMembersGetter{ + accessLists: map[string]*accesslist.AccessList{ + aclroot.GetName(): aclroot, + acl1.GetName(): acl1, + acl2.GetName(): acl2, + }, + } + + // acl1 is an Owner of aclroot, and acl2 is a Member of acl1. + acl2.Status.MemberOf = append(acl2.Status.MemberOf, acl1.GetName()) + + // so, members of acl2 should inherit aclroot's owner grants, and acl1's member grants. + expectedGrants := &accesslist.Grants{ + Traits: map[string][]string{ + "1-member-trait": {"1-member-value"}, + "root-owner-trait": {"root-owner-value"}, + }, + Roles: []string{"1-member-role", "root-owner-role"}, + } + + grants, err := GetInheritedGrants(ctx, acl2, accessListAndMembersGetter) + require.NoError(t, err) + require.Equal(t, expectedGrants, grants) +} + +func newAccessList(t *testing.T, name string, clock clockwork.Clock) *accesslist.AccessList { + t.Helper() + + accessList, err := accesslist.NewAccessList( + header.Metadata{ + Name: name, + }, + accesslist.Spec{ + Title: name, + Description: "test access list", + Owners: []accesslist.Owner{ + {Name: ownerUser, Description: "owner user", MembershipKind: accesslist.MembershipKindUser}, + {Name: ownerUser2, Description: "owner user 2", MembershipKind: accesslist.MembershipKindUser}, + }, + Audit: accesslist.Audit{ + NextAuditDate: clock.Now().Add(time.Hour * 24 * 365), + Notifications: accesslist.Notifications{ + Start: 336 * time.Hour, // Two weeks. + }, + }, + MembershipRequires: accesslist.Requires{ + Roles: []string{"mrole1", "mrole2"}, + Traits: map[string][]string{ + "mtrait1": {"mvalue1", "mvalue2"}, + "mtrait2": {"mvalue3", "mvalue4"}, + }, + }, + OwnershipRequires: accesslist.Requires{ + Roles: []string{"orole1", "orole2"}, + Traits: map[string][]string{ + "otrait1": {"ovalue1", "ovalue2"}, + "otrait2": {"ovalue3", "ovalue4"}, + }, + }, + Grants: accesslist.Grants{ + Roles: []string{"grole1", "grole2"}, + Traits: map[string][]string{ + "gtrait1": {"gvalue1", "gvalue2"}, + "gtrait2": {"gvalue3", "gvalue4"}, + }, + }, + }, + ) + require.NoError(t, err) + + return accessList +} + +func newAccessListMember(t *testing.T, accessListName, memberName string, memberKind string, clock clockwork.Clock) *accesslist.AccessListMember { + t.Helper() + + member, err := accesslist.NewAccessListMember( + header.Metadata{ + Name: memberName, + }, + accesslist.AccessListMemberSpec{ + AccessList: accessListName, + Name: memberName, + Joined: clock.Now().UTC(), + Expires: clock.Now().UTC().Add(24 * time.Hour), + Reason: "because", + AddedBy: "maxim.dietz@goteleport.com", + MembershipKind: memberKind, + }, + ) + require.NoError(t, err) + + return member +} From 019a7efc88e426339096fd1f27f598250e135529 Mon Sep 17 00:00:00 2001 From: Paul Gottschling Date: Wed, 30 Oct 2024 16:32:54 -0400 Subject: [PATCH 20/27] Expand the Policy description on the home page (#47503) Closes #47135 Mention Crown Jewels and Policy integrations. --- docs/pages/index.mdx | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/docs/pages/index.mdx b/docs/pages/index.mdx index 7e630c2f970a1..8b285e0aee293 100644 --- a/docs/pages/index.mdx +++ b/docs/pages/index.mdx @@ -102,10 +102,20 @@ Get started with Teleport Identity: ### Teleport Policy **Teleport Policy** unifies and controls access policies across all your -infrastructure. With Teleport Policy’s Access Graph feature, you gain insights into role-based -access control policies within Teleport and your cloud provider. - -Get started with [Teleport Policy](admin-guides/teleport-policy/teleport-policy.mdx). +infrastructure. With Teleport Policy’s Access Graph feature, you gain insights +into role-based access control policies within Teleport, your cloud providers, +and critical infrastructure. + +- Get started with [Teleport + Policy](admin-guides/teleport-policy/teleport-policy.mdx). +- Define [Crown Jewels](admin-guides/teleport-policy/crown-jewels.mdx) so you + can track changes to your most sensitive users and resources. +- Enable [Teleport Policy + integrations](admin-guides/teleport-policy/integrations/integrations.mdx) so + you can identify [insecure SSH key + distributions](admin-guides/teleport-policy-integrations/ssh-keys-scan], and + import RBAC rules from AWS, Entra ID, and other sources to visualize your + entire RBAC configuration in on a single screen. ## Architecture From 9de1a53c7988e584ab5c05d4e9202c579694a7b6 Mon Sep 17 00:00:00 2001 From: Maxim Dietz Date: Wed, 30 Oct 2024 17:00:06 -0400 Subject: [PATCH 21/27] Add documentation for nested Access Lists (#47530) * docs: Add initial docs for Nested Access Lists docs: Use "real" access list names for scenario in guide docs: Add detail on nested Access Lists with Okta/SICM sync * Update docs/pages/admin-guides/access-controls/access-lists/nested-access-lists.mdx Co-authored-by: Paul Gottschling * docs: Add warning to avoid `deny` rules in Access Lists --------- Co-authored-by: Paul Gottschling --- .../access-lists/access-lists.mdx | 2 + .../access-controls/access-lists/guide.mdx | 6 +- .../access-lists/nested-access-lists.mdx | 83 +++++++++++++++++++ .../application-access/okta/sync-scim.mdx | 67 ++++++++++++--- .../access-controls/access-lists.mdx | 69 ++++++++++++--- .../pages/reference/access-controls/roles.mdx | 3 +- 6 files changed, 204 insertions(+), 26 deletions(-) create mode 100644 docs/pages/admin-guides/access-controls/access-lists/nested-access-lists.mdx diff --git a/docs/pages/admin-guides/access-controls/access-lists/access-lists.mdx b/docs/pages/admin-guides/access-controls/access-lists/access-lists.mdx index c7501f5f6e368..0fca45b8f7297 100644 --- a/docs/pages/admin-guides/access-controls/access-lists/access-lists.mdx +++ b/docs/pages/admin-guides/access-controls/access-lists/access-lists.mdx @@ -11,4 +11,6 @@ traits, which then tie easily back into Teleport's existing RBAC system. [Getting Started with Access Lists](guide.mdx) +[Nested Access Lists](nested-access-lists.mdx) + [Access List Reference](../../../reference/access-controls/access-lists.mdx) diff --git a/docs/pages/admin-guides/access-controls/access-lists/guide.mdx b/docs/pages/admin-guides/access-controls/access-lists/guide.mdx index 42e5d5c81f6b8..081a5ff5d1ec7 100644 --- a/docs/pages/admin-guides/access-controls/access-lists/guide.mdx +++ b/docs/pages/admin-guides/access-controls/access-lists/guide.mdx @@ -13,7 +13,6 @@ This guide will help you: (!docs/pages/includes/commercial-prereqs-tabs.mdx!) - (!docs/pages/includes/tctl.mdx!) -- A running Teleport cluster. - A user with the preset `editor` role, which will have permissions to create Access Lists. ## Step 1/4. Setting up the Application Service on the cluster for testing @@ -68,7 +67,7 @@ not be able to manage the list, though they will still be reflected as an owner. Under "Members" select `requester` as a required role, then add your test user to the access list. Similar to the owner requirements, this will ensure that any member of the list must have the `requester` role in order to -be granted the access described in this list. If the user loses this role later, they will no be granted the +be granted the access described in this list. If the user loses this role later, they will not be granted the roles or traits described in the access list. ![Add a member](../../../../img/access-controls/access-lists/add-member.png) @@ -82,4 +81,5 @@ the cluster, and should be able to interact with it as expected. ## Next Steps -- Familiarize yourself with the CLI tooling available for managing access lists in the [reference](../../../reference/access-controls/access-lists.mdx). +- Familiarize yourself with the CLI tooling available for managing Access Lists in the [reference](../../../reference/access-controls/access-lists.mdx). +- Learn how to work with nested Access Lists in the [nested Access Lists guide](./nested-access-lists.mdx). diff --git a/docs/pages/admin-guides/access-controls/access-lists/nested-access-lists.mdx b/docs/pages/admin-guides/access-controls/access-lists/nested-access-lists.mdx new file mode 100644 index 0000000000000..611137dd609b6 --- /dev/null +++ b/docs/pages/admin-guides/access-controls/access-lists/nested-access-lists.mdx @@ -0,0 +1,83 @@ +--- +title: Nested Access Lists +description: Learn how to use nested Access Lists to manage complex permissions and grant inheritance in Teleport. +--- + +Nested Access Lists allow inclusion of an Access List as a member or owner of another Access List. +This enables hierarchical permission structures where permissions can be inherited from multiple levels of +parent Access Lists. + +This guide will help you: + +- Understand how nesting and inheritance work in Access Lists +- Create a nested Access List +- Verify inherited permissions granted through the nested Access List + +## How it works + +Let's break down inheritance in Access Lists. Imagine two Access Lists you might have in an organization: +"Engineering Team" and "Production Access". "Engineering Team" represents a group of engineers, while +"Production Access" is a higher-level Access List that grants access to production resources. + +- **Membership Inheritance**: If "Engineering Team" is added as a member of "Production Access", +all users who are members of "Engineering Team" inherit member grants (roles and traits) from "Production Access". +- **Ownership Inheritance**: If "Engineering Team" is added as an owner of "Production Access", +all users who are members of "Engineering Team" inherit owner grants (roles and traits) from "Production Access", and +can perform owner actions, such as modifying it or managing its members. + +Inheritance is recursive – members of "Engineering Team" can themselves be Access Lists +with their own members, and so on. However, circular nesting is not allowed, and nesting is limited +to a maximum depth of 10 levels. + +For more information, see the [Access Lists reference](../../../reference/access-controls/access-lists.mdx). + +## Prerequisites + +(!docs/pages/includes/commercial-prereqs-tabs.mdx!) + +- (!docs/pages/includes/tctl.mdx!) +- A user with the default `editor` role or equivalent permissions (ability to read, create, and manage Access Lists). +- Familiarity with basic Access List concepts (see the [Getting Started with Access Lists guide](./guide.mdx)). +- At least one user with only the `requester` role to add to the Access List. +- At least one application or resource to grant access to. + +Let's walk through creating a nested Access List and establishing inheritance. In this example, we'll +create a child Access List, "Engineering Team", which inherits permissions from a parent, "Production Access". + +## Step 1/3. Create child Access List + +In the Teleport Web UI, go to the "Identity" tab and select "Access Lists" from the sidebar. +Click on "Create New Access List", and fill in the details: + +- **Title**: Engineering Team +- **Deadline for First Review**: Select a future date. +- **Member Grants**: Leave this empty, as the list will inherit the parent's member grants. +- **Owners**: Add yourself or any appropriate users as owners. +- **Members**: Add users who should be part of this Access List, such as `test-user`. + +Click "Create Access List" to save the Access List. + +## Step 2/3. Create parent Access List + +From the "Access Lists" page, click on "Create New Access List" and fill in the details for our parent list: + +- **Title**: Production Access +- **Deadline for First Review**: Select a future date. +- **Member Grants**: Add the `access` role. +- **Owners**: Add yourself or any appropriate users as owners. +- **Members**: Select our child Access List, 'Engineering Team', from the dropdown. + +Click "Create Access List" to save the Access List. + +## Step 3/3. Verifying inherited permissions + +To confirm that members of "Engineering Team" have inherited member grants from "Production Access", log in as a user +who is a member of the child Access List (e.g., `test-user`). Verify that the user now has access to resources +granted by both "Engineering Team" and "Production Access". For example, if a Teleport Application Service +instance with the debugging application enabled is set up, and the `access` role is granted through "Production Access", +the "dumper" app should be visible to the user. + +## Next Steps + +- Review the [Access Lists reference](../../../reference/access-controls/access-lists.mdx) for more detailed information on Access Lists' nesting and inheritance. +- Learn how nested Access Lists work with Okta/SCIM synchronization in [Synchronization with Okta and SCIM](../../../enroll-resources/application-access/okta/sync-scim.mdx). diff --git a/docs/pages/enroll-resources/application-access/okta/sync-scim.mdx b/docs/pages/enroll-resources/application-access/okta/sync-scim.mdx index bcd6f6b9ac0e7..9535796d2cc41 100644 --- a/docs/pages/enroll-resources/application-access/okta/sync-scim.mdx +++ b/docs/pages/enroll-resources/application-access/okta/sync-scim.mdx @@ -26,14 +26,14 @@ Teleport. ### Importing users -During synchronization, the Okta integration will create Teleport user accounts +During synchronization, the Okta integration will create Teleport user accounts for all eligible Okta users, and clean up the Teleport accounts of any Okta users that have been deactivated. The list of "eligible Okta users" depends on the -integration configuration. +integration configuration. If the Okta integration is configured to use a specific Okta application, then -the Okta integration will consider any Okta user assigned to that Okta -application - either directly, or via group membership - as an "eligible user". +the Okta integration will consider any Okta user assigned to that Okta +application - either directly, or via group membership - as an "eligible user". If no Okta application is to use is supplied, all enabled Okta organization users are considered "eligible". @@ -54,7 +54,7 @@ administer and secure. The Teleport users created by the synchronization process or SCIM provisioning all inherit their username from the upstream Okta organization, and are given a -default role of `okta-requester`. +default role of `okta-requester`. This Role allows the user to log into Teleport, but grants no default access to Teleport resources. The Teleport admin can use Access Requests and Access Lists @@ -93,13 +93,13 @@ resources. ### Deleting Users -In the case where +Given a case where 1. the synchronization process detects that an Okta user has been deactivated - or suspended, or - 1. the Okta organization explicitly disables the account via SCIM, - + or suspended, or + 1. the Okta organization explicitly disables the account via SCIM, + The Okta integration will immediately delete the corresponding Teleport -account and create a temporary Teleport user lock. The user lock will +account and create a temporary Teleport user lock. The user lock will - terminate any active Teleport sessions, and - prevent the disabled user from accessing any Teleport resources with credentials issued before their Teleport account was deleted. @@ -147,6 +147,53 @@ The synchronizer will create the following resources for each matched group or a It should be noted that the Access List sync waits until the Okta groups and Okta applications has finished syncing as Teleport resources, so it may not start synchronizing immediately on startup. +### Handling nested Access Lists + +#### Synchronization from Teleport to Okta + +Teleport supports nested Access Lists, where an Access List can include other Access Lists as members, +creating a hierarchical structure. However, Okta does not support nested groups. +To accommodate this limitation, the synchronizer flattens nested Access Lists when synchronizing from Teleport to Okta. + +Members in Access Lists, from all levels of nesting, are aggregated into a single, flat list of members when +synchronized to Okta. This ensures that all users who should have access according to the Teleport hierarchy +are included in the corresponding Okta group or application. + +**Example**: + - **Teleport Structure**: + - **Access List A**: + - Members: User1 + - Nested Members: Access List B + - **Access List B**: + - Members: User2, User3 + - **Okta Representation**: + - Group/Application for Access List A: + - Members: User1, User2, User3 + +By flattening the Teleport hierarchy, all users receive the permissions associated with the root-level Access List in Okta. + +#### Synchronization from Okta to Teleport + +When synchronizing from Okta to Teleport, the synchronizer handles the flattened structure from Okta +by attempting to map it back to the Teleport hierarchy: + +- **Comparing with Teleport Hierarchy**: The flattened list of members from Okta is compared against the existing +Access List hierarchy in Teleport. +- **Adding New Members**: + - **New Users**: If there are new users added in Okta that are not present in the Teleport Access List hierarchy, + these users are added as members at the root-level Access List in Teleport. + - **Maintaining Hierarchy**: This approach maintains the hierarchical structure within Teleport while ensuring + that access changes made in Okta are reflected appropriately. +- **Example**: + - **Okta Group/Application for Access List A**: + - Members: User1, User2, User3, User4 (User4 is a new member added in Okta) + - **Teleport Update**: + - **Access List A**: + - Members: User1, User4 + - Nested Members: Access List B + - **Access List B**: + - Members: User2, User3 + #### Deletion of Access Lists Access Lists synchronized from Okta will automatically be deleted when there are no members assigned to them in diff --git a/docs/pages/reference/access-controls/access-lists.mdx b/docs/pages/reference/access-controls/access-lists.mdx index e36b2c143bf3e..033f03a6c7001 100644 --- a/docs/pages/reference/access-controls/access-lists.mdx +++ b/docs/pages/reference/access-controls/access-lists.mdx @@ -29,10 +29,10 @@ to live on the order of hours or days. ## Access List Ownership -Access List owners are Teleport users who are granted special privileges over +Access List owners are Teleport users or nested Access Lists who are granted special privileges over an Access List. These owners are defined explicitly as part of the Access List, and must be added by a Teleport user who has RBAC access to access lists, which the preset `editor` -role has.. Owners must meet requirements in order for their ownership to be effective. +role has. Owners must meet requirements in order for their ownership to be effective. Provided owners meet requirements, owners are able to do the following: @@ -46,14 +46,51 @@ and traits are granted by the Access List. ## Access List Membership -Access List members are Teleport users who are granted the roles and traits specified -by the Access List. Upon login, users will be granted these roles and traits along with -their statically defined user permissions. These roles and traits will then tie into -Teleport's existing RBAC system. Members can be optionally granted an expire date, after -which their membership will no longer confer any grants to the user. +Access List members are Teleport users or nested Access Lists who are granted the roles +and traits specified by the Access List. Upon login, users will be granted these +roles and traits along with their statically defined user permissions. These roles and +traits will then tie into Teleport's existing RBAC system. Members can be optionally +granted an expiry date, after which their membership will no longer confer any +grants to the user. Members must meet requirements in order for their membership to be effective. +## Nested Access Lists + +Access Lists can be nested within other Access Lists as members or owners. This enables +hierarchical permission structures where permissions can be inherited from multiple levels of +parent Access Lists. Inheritance is recursive – members of a child Access List can +themselves be Access Lists with their own members, and so on. + +### Membership Inheritance + +If an Access List is a member of another Access List, members of the nested Access List will +inherit the member grants (roles and traits) of the parent Access List. + +Users granted membership through inheritance must meet both the nested Access List's membership +requirements, and the parent Access List's membership requirements in order for the +membership to be valid. + +### Ownership Inheritance + +If an Access List is an owner of another Access List, members of the nested Access List will +inherit the owner grants (roles and traits), as well as ownership of, the parent Access List. + +Users granted ownership through inheritance must meet both the nested Access List's +membership requirements, and the parent Access List's ownership requirements in order +for the ownership to be valid. + +### Limitations + +- **Circular Nesting**: Circular nesting is not allowed. Access Lists' membership and +ownership cannot be self-referential, directly or indirectly. +- **Nesting Depth**: Nesting is limited to a maximum depth of 10 levels. This means that +a child Access List cannot be more than 10 levels removed from the root Access List in +the hierarchy. +- **Deletion**: Deleting Access Lists that are members or owners of other Access Lists +is not allowed. Access Lists must be removed from all parent Access Lists before they +can be deleted. + ## Access List Auditing Access Lists must be defined with an audit frequency, which specifies how often the @@ -91,12 +128,13 @@ spec: start: 336h # two weeks next_audit_date: "2025-01-01T00:00:00Z" description: "A description of the Access List and its purpose" - # owners are a list of Teleport users who own the Access List. Provided the owners - # meet the ownership requirements, these users can control membership requirements - # and membership to the Access List. + # owners are a list of Teleport users or Access Lists who own the Access List. + # Provided the owners meet the ownership requirements, these users can control + # membership requirements and membership to the Access List. owners: - description: test user 1 name: teleport-admin + membership_kind: MEMBERSHIP_KIND_USER # ownership_requires defines roles and traits that are required for an owner to be # able to manage the Access List and its membership. ownership_requires: @@ -116,7 +154,7 @@ spec: roles: - access traits: - trait1: + trait1: - value1 # membership_requires defines roles and traits that are required for a member # to be granted the above roles and traits. Even if a user has been added as a @@ -126,10 +164,17 @@ spec: roles: - required_role1 traits: - required_trait1: + required_trait1: - required_value1 ``` +## Access Lists and Deny Rules + +Use of [deny rules](./roles.mdx) in Access List roles is discouraged. +Access Lists are not intended to be used as a tool for privilege reduction, +and Teleport may assume it is safe to ignore Access Lists under certain conditions. +Roles intended to reduce privileges should be assigned directly to users. + ## Managing Access Lists from the CLI In addition to using the web UI, Access Lists can be created and managed from the CLI diff --git a/docs/pages/reference/access-controls/roles.mdx b/docs/pages/reference/access-controls/roles.mdx index 2b17fd62d9189..012ecafa6a2c7 100644 --- a/docs/pages/reference/access-controls/roles.mdx +++ b/docs/pages/reference/access-controls/roles.mdx @@ -12,6 +12,7 @@ A Teleport role manages access by having two lists of rules: `allow` rules and - Nothing is allowed by default. - Deny rules get evaluated first and take priority. +- Deny rules should be avoided on roles granted through Access Lists. You can use any of the following to manage Teleport roles and other dynamic resources: @@ -571,7 +572,7 @@ attribute or OIDC claim called `trait`. You can specify an external trait in dot syntax if it begins with a letter and contains only letters, numbers, and underscores. Otherwise, you must use bracket -syntax to specify a trait. +syntax to specify a trait. When using Azure AD or ADFS as your IdP, you must use bracket notation, as these IdPs assign attribute keys to URLs such as the following: From 750bdf65fb76c3d693f78a738c3649c7e3745c20 Mon Sep 17 00:00:00 2001 From: Yassine Bounekhla <56373201+rudream@users.noreply.github.com> Date: Wed, 30 Oct 2024 17:29:44 -0400 Subject: [PATCH 22/27] add recent history to sidenav (#47942) --- .../teleport/src/Navigation/RecentHistory.tsx | 300 ++++++++++++++++++ .../Navigation/SideNavigation/Navigation.tsx | 59 +++- .../SideNavigation/ResourcesSection.tsx | 2 +- .../src/Navigation/SideNavigation/Search.tsx | 52 ++- web/packages/teleport/src/features.tsx | 8 + .../services/storageService/storageService.ts | 45 +++ .../src/services/storageService/types.ts | 1 + 7 files changed, 446 insertions(+), 21 deletions(-) create mode 100644 web/packages/teleport/src/Navigation/RecentHistory.tsx diff --git a/web/packages/teleport/src/Navigation/RecentHistory.tsx b/web/packages/teleport/src/Navigation/RecentHistory.tsx new file mode 100644 index 0000000000000..38ae478bd6b2a --- /dev/null +++ b/web/packages/teleport/src/Navigation/RecentHistory.tsx @@ -0,0 +1,300 @@ +/** + * Teleport + * Copyright (C) 2024 Gravitational, Inc. + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +import React, { useState, useEffect, useRef } from 'react'; +import styled from 'styled-components'; +import { matchPath } from 'react-router'; +import { NavLink } from 'react-router-dom'; +import { Flex, Text, H4, P3, ButtonIcon } from 'design'; +import { Cross } from 'design/Icon'; + +import { TeleportFeature } from 'teleport/types'; +import { useFeatures } from 'teleport/FeaturesContext'; + +import { getSubsectionStyles } from './SideNavigation/Section'; +import { SidenavCategory } from './SideNavigation/categories'; + +export type RecentHistoryItem = { + category?: SidenavCategory; + title: string; + route: string; + exact?: boolean; +}; + +type AnimatedItem = RecentHistoryItem & { + animationState: 'exiting' | 'entering' | ''; +}; + +function getIconForRoute( + features: TeleportFeature[], + route: string +): (props) => JSX.Element { + const feature = features.find(feature => + matchPath(route, { + path: feature?.route?.path, + exact: false, + }) + ); + + const icon = feature?.navigationItem?.icon || feature?.topMenuItem?.icon; + if (!icon) { + return () => null; + } + + return icon; +} + +export function RecentHistory({ + recentHistoryItems, + onRemoveItem, +}: { + recentHistoryItems: RecentHistoryItem[]; + onRemoveItem: (route: string) => void; +}) { + const features = useFeatures(); + const [animatedItems, setAnimatedItems] = useState([]); + const prevItemsRef = useRef([]); + + useEffect(() => { + const prevItems = prevItemsRef.current; + let newAnimatedItems = recentHistoryItems.map(item => ({ + ...item, + animationState: '', + })) as AnimatedItem[]; + + const isFirstItemDeleted = + recentHistoryItems.findIndex( + item => item.route === prevItems[0]?.route + ) === -1; + + // If an item the previous list is not in the new list (deleted) OR was moved, animate it out. + prevItems.forEach((prevItem, index) => { + if ( + !recentHistoryItems.some(item => item.route === prevItem.route) || + (prevItem?.route !== recentHistoryItems[index]?.route && + recentHistoryItems[0]?.route === prevItem?.route) + ) { + // If the item is now in the first position (meaning it was moved to the top), animate it in at the top in addition to animating it out in its previous position. + if ( + recentHistoryItems.length > 0 && + prevItems[0]?.route !== recentHistoryItems[0]?.route && + !isFirstItemDeleted + ) { + newAnimatedItems.splice(0, 1); + newAnimatedItems = [ + { ...prevItem, animationState: 'entering' }, + ...newAnimatedItems.slice(0, index), + { ...prevItem, animationState: 'exiting' }, + ...newAnimatedItems.slice(index), + ]; + } else if ( + !recentHistoryItems.some(item => item.route === prevItem.route) + ) { + newAnimatedItems = [ + ...newAnimatedItems.slice(0, index), + { ...prevItem, animationState: 'exiting' }, + ...newAnimatedItems.slice(index), + ]; + } + } + }); + + setAnimatedItems(newAnimatedItems); + prevItemsRef.current = recentHistoryItems; + + // Clean up animated items after animation + const deletedItemTimeout = setTimeout(() => { + setAnimatedItems(items => + items.filter(item => item.animationState !== 'exiting') + ); + }, 300); + const newItemsTimeout = setTimeout(() => { + setAnimatedItems(items => + items.map(item => ({ ...item, animationState: '' })) + ); + }, 400); + + return () => { + clearTimeout(deletedItemTimeout); + clearTimeout(newItemsTimeout); + }; + }, [recentHistoryItems]); + + return ( + +

+ Recent Pages +

+ {!!animatedItems.length && ( + + {animatedItems.map((item, index) => { + const Icon = getIconForRoute(features, item.route); + return ( + onRemoveItem(item.route)} + /> + ); + })} + + )} +
+ ); +} + +function AnimatedHistoryItem({ + item, + Icon, + onRemove, +}: { + item: AnimatedItem; + Icon: (props) => JSX.Element; + onRemove: () => void; +}) { + const [hovered, setHovered] = useState(false); + const itemRef = useRef(null); + + useEffect(() => { + if (item.animationState === 'exiting' && itemRef.current) { + const height = item.category ? 60 : 40; + itemRef.current.style.height = `${height}px`; + itemRef.current.style.opacity = '1'; + itemRef.current.offsetHeight; // Force reflow + requestAnimationFrame(() => { + if (itemRef.current) { + itemRef.current.style.height = '0px'; + itemRef.current.style.opacity = '0'; + } + }); + } + + if (item.animationState === 'entering' && itemRef.current) { + const height = item.category ? 60 : 40; + itemRef.current.style.height = `0px`; + itemRef.current.style.opacity = '0'; + itemRef.current.offsetHeight; // Force reflow + requestAnimationFrame(() => { + if (itemRef.current) { + itemRef.current.style.height = `${height}px`; + itemRef.current.style.opacity = '1'; + } + }); + } + }, [item.animationState]); + + return ( + setHovered(true)} + onMouseLeave={() => setHovered(false)} + onMouseOver={() => setHovered(true)} + style={{ height: item.animationState === 'entering' ? 0 : 'auto' }} + > + + + + + + + + {item.title} + + {item.category && {item.category}} + + + {hovered && ( + { + e.preventDefault(); + e.stopPropagation(); + }} + onClick={e => { + e.stopPropagation(); + e.preventDefault(); + onRemove(); + }} + > + + + )} + + + ); +} + +const AnimatedItemWrapper = styled.div<{ + isExiting: boolean; + isEntering: boolean; +}>` + overflow: hidden; + height: auto; + width: 100%; + transition: all 0.3s ease-in-out; + padding: 3px; + + ${props => + props.isEntering && + ` + transition: all 0.3s ease-in-out 0.1s; + pointer-events: none; + opacity: 0; + `} + + ${props => + props.isExiting && + ` + pointer-events: none; + `} +`; + +const StyledNavLink = styled(NavLink)` + padding: ${props => props.theme.space[2]}px ${props => props.theme.space[3]}px; + text-decoration: none; + user-select: none; + border-radius: ${props => props.theme.radii[2]}px; + max-width: 100%; + display: flex; + position: relative; + + cursor: pointer; + + ${props => getSubsectionStyles(props.theme, false)} +`; + +const DeleteButtonAlt = styled(ButtonIcon)<{ size: number }>` + position: absolute; + right: 0; + top: 0; + height: ${props => props.size}px; + width: ${props => props.size}px; + border-radius: ${props => props.theme.radii[2]}px; +`; diff --git a/web/packages/teleport/src/Navigation/SideNavigation/Navigation.tsx b/web/packages/teleport/src/Navigation/SideNavigation/Navigation.tsx index 2099a09abd61f..9ba01936767d4 100644 --- a/web/packages/teleport/src/Navigation/SideNavigation/Navigation.tsx +++ b/web/packages/teleport/src/Navigation/SideNavigation/Navigation.tsx @@ -16,7 +16,13 @@ * along with this program. If not, see . */ -import React, { useState, useCallback, useEffect, useRef } from 'react'; +import React, { + useState, + useCallback, + useEffect, + useRef, + useMemo, +} from 'react'; import styled, { useTheme } from 'styled-components'; import { matchPath, useHistory } from 'react-router'; import { Text, Flex, Box, P2 } from 'design'; @@ -72,15 +78,18 @@ const PanelBackground = styled.div` /* NavigationSection is a section in the navbar, this can either be a standalone section (clickable button with no drawer), or a category with subsections shown in a drawer that expands. */ export type NavigationSection = { - category: SidenavCategory; + category?: SidenavCategory; subsections?: NavigationSubsection[]; /* standalone is whether this is a clickable nav section with no subsections/drawer. */ standalone?: boolean; }; -/* NavigationSubsection is a subsection of a NavigationSection, these are the items listed in the drawer of a NavigationSection. */ +/** + * NavigationSubsection is a subsection of a NavigationSection, these are the items listed in the drawer of a NavigationSection, or if isTopMenuItem is true, in the top menu (eg. Account Settings). + */ export type NavigationSubsection = { - category: SidenavCategory; + category?: SidenavCategory; + isTopMenuItem?: boolean; title: string; route: string; exact: boolean; @@ -139,6 +148,26 @@ function getSubsectionsForCategory( // getNavSubsectionForRoute returns the sidenav subsection that the user is correctly on (based on route). // Note that it is possible for this not to return anything, such as in the case where the user is on a page that isn't in the sidenav (eg. Account Settings). +/** + * getTopMenuSection returns a NavigationSection with the top menu items. This is not used in the sidenav, but will be used to make the top menu items searchable. + */ +function getTopMenuSection(features: TeleportFeature[]): NavigationSection { + const topMenuItems = features.filter( + feature => !!feature.topMenuItem && !feature.sideNavCategory + ); + + return { + subsections: topMenuItems.map(feature => ({ + isTopMenuItem: true, + title: feature.topMenuItem.title, + route: feature.topMenuItem.getLink(cfg.proxyCluster), + exact: feature?.route?.exact, + icon: feature.topMenuItem.icon, + searchableTags: feature.topMenuItem.searchableTags, + })), + }; +} + function getNavSubsectionForRoute( features: TeleportFeature[], route: history.Location | Location @@ -152,10 +181,22 @@ function getNavSubsectionForRoute( }) ); - if (!feature || !feature.sideNavCategory) { + if (!feature || (!feature.sideNavCategory && !feature.topMenuItem)) { return; } + if (feature.topMenuItem) { + return { + isTopMenuItem: true, + exact: feature.route.exact, + title: feature.topMenuItem.title, + route: feature.topMenuItem.getLink(cfg.proxyCluster), + icon: feature.topMenuItem.icon, + searchableTags: feature.topMenuItem.searchableTags, + category: feature?.sideNavCategory, + }; + } + return { category: feature.sideNavCategory, title: feature.navigationItem.title, @@ -223,11 +264,15 @@ export function Navigation() { } }; }, []); - const currentView = getNavSubsectionForRoute(features, history.location); + const currentView = useMemo( + () => getNavSubsectionForRoute(features, history.location), + [history.location] + ); const navSections = getNavigationSections(features).filter( section => section.subsections.length ); + const topMenuSection = getTopMenuSection(features); const handleSetExpandedSection = useCallback( (section: NavigationSection) => { @@ -300,7 +345,7 @@ export function Navigation() { . */ -import React, { useState, useRef } from 'react'; +import React, { useState, useRef, useEffect } from 'react'; import { NavLink } from 'react-router-dom'; import styled from 'styled-components'; -import { Box, Flex, Text } from 'design'; +import { Box, Flex, P3, Text } from 'design'; import { height, space, color } from 'design/system'; import useStickyClusterId from 'teleport/useStickyClusterId'; import { useUser } from 'teleport/User/UserContext'; +import { storageService } from 'teleport/services/storageService'; + +import { RecentHistory, RecentHistoryItem } from '../RecentHistory'; import { NavigationSection, NavigationSubsection } from './Navigation'; import { @@ -33,7 +36,6 @@ import { verticalPadding, getSubsectionStyles, } from './Section'; -import { CategoryIcon } from './CategoryIcon'; import { CustomNavigationCategory } from './categories'; import { getResourcesSectionForSearch } from './ResourcesSection'; @@ -120,6 +122,28 @@ function SearchContent({ ) ); + const [recentHistory, setRecentHistory] = useState( + storageService.getRecentHistory() + ); + + useEffect(() => { + if (currentView) { + const newRecentHistory = storageService.addRecentHistoryItem({ + category: currentView?.category, + title: currentView?.title, + route: currentView?.route, + exact: currentView?.exact, + }); + + setRecentHistory(newRecentHistory); + } + }, [currentView]); + + function handleRemoveItem(route: string) { + const newRecentHistory = storageService.removeRecentHistoryItem(route); + setRecentHistory(newRecentHistory); + } + return ( @@ -150,6 +174,12 @@ function SearchContent({ ))} )} + {searchInput.length === 0 && ( + + )} ); @@ -170,20 +200,16 @@ function SearchResult({ onClick={subsection.onClick} > - - - + + + {subsection.title} - - {subsection.category} - + {subsection.category && ( + {subsection.category} + )} diff --git a/web/packages/teleport/src/features.tsx b/web/packages/teleport/src/features.tsx index f1aab44471ad5..722d97fb565e3 100644 --- a/web/packages/teleport/src/features.tsx +++ b/web/packages/teleport/src/features.tsx @@ -645,6 +645,13 @@ export class FeatureAccount implements TeleportFeature { getLink() { return cfg.routes.account; }, + searchableTags: [ + 'account settings', + 'settings', + 'password', + 'mfa', + 'change password', + ], }; } @@ -667,6 +674,7 @@ export class FeatureHelpAndSupport implements TeleportFeature { getLink() { return cfg.routes.support; }, + searchableTags: ['help', 'support', NavTitle.HelpAndSupport], }; } diff --git a/web/packages/teleport/src/services/storageService/storageService.ts b/web/packages/teleport/src/services/storageService/storageService.ts index 92b9b3ec3e283..ebef656ff7b58 100644 --- a/web/packages/teleport/src/services/storageService/storageService.ts +++ b/web/packages/teleport/src/services/storageService/storageService.ts @@ -28,6 +28,7 @@ import { convertBackendUserPreferences, isBackendUserPreferences, } from 'teleport/services/userPreferences/userPreferences'; +import { RecentHistoryItem } from 'teleport/Navigation/RecentHistory'; import { CloudUserInvites, KeysEnum, LocalStorageSurvey } from './types'; @@ -41,8 +42,11 @@ const KEEP_LOCALSTORAGE_KEYS_ON_LOGOUT = [ KeysEnum.LICENSE_ACKNOWLEDGED, KeysEnum.USERS_NOT_EQUAL_TO_MAU_ACKNOWLEDGED, KeysEnum.USE_NEW_ROLE_EDITOR, + KeysEnum.RECENT_HISTORY, ]; +const RECENT_HISTORY_MAX_LENGTH = 10; + export const storageService = { clear() { Object.keys(window.localStorage).forEach(key => { @@ -265,4 +269,45 @@ export const storageService = { getIsTopBarView(): boolean { return this.getParsedJSONValue(KeysEnum.USE_TOP_BAR, false); }, + + getRecentHistory(): RecentHistoryItem[] { + return this.getParsedJSONValue(KeysEnum.RECENT_HISTORY, []); + }, + + addRecentHistoryItem(item: RecentHistoryItem): RecentHistoryItem[] { + const history = storageService.getRecentHistory(); + const deduplicatedHistory = [...history]; + + // Remove a duplicate item if it exists. + const existingDuplicateIndex = history.findIndex( + historyItem => historyItem.route === item.route + ); + if (existingDuplicateIndex !== -1) { + deduplicatedHistory.splice(existingDuplicateIndex, 1); + } + + const newHistory = [item, ...deduplicatedHistory].slice( + 0, + RECENT_HISTORY_MAX_LENGTH + ); + + window.localStorage.setItem( + KeysEnum.RECENT_HISTORY, + JSON.stringify(newHistory) + ); + + return newHistory; + }, + + removeRecentHistoryItem(route: string): RecentHistoryItem[] { + const history = storageService.getRecentHistory(); + const newHistory = history.filter(item => item.route !== route); + + window.localStorage.setItem( + KeysEnum.RECENT_HISTORY, + JSON.stringify(newHistory) + ); + + return newHistory; + }, }; diff --git a/web/packages/teleport/src/services/storageService/types.ts b/web/packages/teleport/src/services/storageService/types.ts index f689442d13368..fa04cc88c704d 100644 --- a/web/packages/teleport/src/services/storageService/types.ts +++ b/web/packages/teleport/src/services/storageService/types.ts @@ -36,6 +36,7 @@ export const KeysEnum = { USERS_NOT_EQUAL_TO_MAU_ACKNOWLEDGED: 'grv_users_not_equal_to_mau_acknowledged', LOCAL_NOTIFICATION_STATES: 'grv_teleport_notification_states', + RECENT_HISTORY: 'grv_teleport_sidenav_recent_history', // TODO(bl-nero): Remove once the new role editor is in acceptable state. USE_NEW_ROLE_EDITOR: 'grv_teleport_use_new_role_editor', From e109161776dcf2fe62b8ef426a1abe09f2aa11a1 Mon Sep 17 00:00:00 2001 From: Tiago Silva Date: Wed, 30 Oct 2024 22:46:11 +0000 Subject: [PATCH 23/27] [entraid] ignore unsuported groups members and parse nested group memberships (#48182) This PR fixes a typo where the error was incorrectly ignored and caused failures when group membership included other groups and any unsupported kinds. This PR fixes that by properly returning `unsupportedGroupMember` while also supports parsing groups that are member of other groups. Signed-off-by: Tiago Silva --- lib/msgraph/client_test.go | 62 ++++++++++++++++++++++++++++++++++++++ lib/msgraph/models.go | 8 ++++- 2 files changed, 69 insertions(+), 1 deletion(-) diff --git a/lib/msgraph/client_test.go b/lib/msgraph/client_test.go index 8df3eb7852d81..8e49692249c0a 100644 --- a/lib/msgraph/client_test.go +++ b/lib/msgraph/client_test.go @@ -412,3 +412,65 @@ func TestRetry(t *testing.T) { require.Error(t, err) }) } + +const listGroupsMembersPayload = `[ + { + "@odata.type": "#microsoft.graph.user", + "id": "9f615773-8219-4a5e-9eb1-8e701324c683", + "mail": "alice@example.com" + }, + { + "@odata.type": "#microsoft.graph.device", + "id": "1566d9a7-c652-44e7-a75e-665b77431435", + "mail": "device@example.com" + }, + { + "@odata.type": "#microsoft.graph.group", + "id": "7db727c5-924a-4f6d-b1f0-d44e6cafa87c", + "displayName": "Test Group 1" + } + ]` + +func TestIterateGroupMembers(t *testing.T) { + t.Parallel() + + var membersJSON []json.RawMessage + require.NoError(t, json.Unmarshal([]byte(listGroupsMembersPayload), &membersJSON)) + mux := http.NewServeMux() + groupID := "fd5be192-6e51-4f54-bbdf-30407435ceb7" + mux.Handle("GET /groups/"+groupID+"/members", paginatedHandler(t, membersJSON)) + + srv := httptest.NewServer(mux) + t.Cleanup(func() { srv.Close() }) + + uri, err := url.Parse(srv.URL) + require.NoError(t, err) + client := &Client{ + httpClient: &http.Client{}, + tokenProvider: &fakeTokenProvider{}, + retryConfig: retryConfig, + baseURL: uri, + pageSize: 2, // smaller page size so we actually fetch multiple pages with our small test payload + } + + var members []GroupMember + err = client.IterateGroupMembers(context.Background(), groupID, func(u GroupMember) bool { + members = append(members, u) + return true + }) + + require.NoError(t, err) + require.Len(t, members, 2) + { + require.IsType(t, &User{}, members[0]) + user := members[0].(*User) + require.Equal(t, "9f615773-8219-4a5e-9eb1-8e701324c683", *user.ID) + require.Equal(t, "alice@example.com", *user.Mail) + } + { + require.IsType(t, &Group{}, members[1]) + group := members[1].(*Group) + require.Equal(t, "7db727c5-924a-4f6d-b1f0-d44e6cafa87c", *group.ID) + require.Equal(t, "Test Group 1", *group.DisplayName) + } +} diff --git a/lib/msgraph/models.go b/lib/msgraph/models.go index 829d55a040464..1150c8943e7d1 100644 --- a/lib/msgraph/models.go +++ b/lib/msgraph/models.go @@ -116,8 +116,14 @@ func decodeGroupMember(msg json.RawMessage) (GroupMember, error) { var u *User err = json.Unmarshal(msg, &u) member = u + case "#microsoft.graph.group": + var g *Group + err = json.Unmarshal(msg, &g) + member = g default: - err = trace.BadParameter("unsupported group member type: %s", temp.Type) + // Return an error if we encounter a type we do not support. + // The caller ignores the error and continues processing the next entry. + err = &unsupportedGroupMember{Type: temp.Type} } return member, trace.Wrap(err) From ffa258bc4d68bb224c7a767df5c19178ce343c5a Mon Sep 17 00:00:00 2001 From: Gus Rivera Date: Wed, 30 Oct 2024 18:16:42 -0500 Subject: [PATCH 24/27] Adding touchid build tag for tctl (#48053) --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 82e210bbad320..cf8a84ff571a9 100644 --- a/Makefile +++ b/Makefile @@ -364,7 +364,7 @@ $(BUILDDIR)/tctl: @if [[ "$(OS)" != "windows" && -z "$(LIBFIDO2_BUILD_TAG)" ]]; then \ echo 'Warning: Building tctl without libfido2. Install libfido2 to have access to MFA.' >&2; \ fi - GOOS=$(OS) GOARCH=$(ARCH) $(CGOFLAG) go build -tags "$(PAM_TAG) $(FIPS_TAG) $(LIBFIDO2_BUILD_TAG) $(PIV_BUILD_TAG) $(KUSTOMIZE_NO_DYNAMIC_PLUGIN)" -o $(BUILDDIR)/tctl $(BUILDFLAGS) ./tool/tctl + GOOS=$(OS) GOARCH=$(ARCH) $(CGOFLAG) go build -tags "$(PAM_TAG) $(FIPS_TAG) $(LIBFIDO2_BUILD_TAG) $(TOUCHID_TAG) $(PIV_BUILD_TAG) $(KUSTOMIZE_NO_DYNAMIC_PLUGIN)" -o $(BUILDDIR)/tctl $(BUILDFLAGS) ./tool/tctl .PHONY: $(BUILDDIR)/teleport # Appending new conditional settings for community build type From f078612ddcdb0dd01e5282246ace43b64e4341fe Mon Sep 17 00:00:00 2001 From: Nic Klaassen Date: Wed, 30 Oct 2024 16:27:27 -0700 Subject: [PATCH 25/27] fix: remove KeyEncipherment usage for non-RSA certificates (#48158) --- lib/tlsca/ca.go | 8 ++++- lib/tlsca/ca_test.go | 57 ++++++++++++++++++++++++++++++++++++ lib/tlsca/parsegen.go | 23 ++++++++++----- lib/utils/cert/selfsigned.go | 2 +- 4 files changed, 80 insertions(+), 10 deletions(-) diff --git a/lib/tlsca/ca.go b/lib/tlsca/ca.go index 19e04dc386d45..ce7d3cad32f0a 100644 --- a/lib/tlsca/ca.go +++ b/lib/tlsca/ca.go @@ -21,6 +21,7 @@ package tlsca import ( "crypto" "crypto/rand" + "crypto/rsa" "crypto/tls" "crypto/x509" "crypto/x509/pkix" @@ -1199,7 +1200,12 @@ func (c *CertificateRequest) CheckAndSetDefaults() error { return trace.BadParameter("missing parameter NotAfter") } if c.KeyUsage == 0 { - c.KeyUsage = x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature + c.KeyUsage = x509.KeyUsageDigitalSignature + if _, isRSA := c.PublicKey.(*rsa.PublicKey); isRSA { + // The KeyEncipherment bit is necessary for RSA key exchanges + // https://datatracker.ietf.org/doc/html/rfc5280#section-4.2.1.3 + c.KeyUsage |= x509.KeyUsageKeyEncipherment + } } c.DNSNames = utils.Deduplicate(c.DNSNames) diff --git a/lib/tlsca/ca_test.go b/lib/tlsca/ca_test.go index 91b4db336e173..d565a9f00d3bc 100644 --- a/lib/tlsca/ca_test.go +++ b/lib/tlsca/ca_test.go @@ -19,7 +19,9 @@ package tlsca import ( + "crypto" "crypto/tls" + "crypto/x509" "crypto/x509/pkix" "encoding/asn1" "testing" @@ -37,6 +39,7 @@ import ( apievents "github.com/gravitational/teleport/api/types/events" "github.com/gravitational/teleport/api/utils/keys" "github.com/gravitational/teleport/lib/cryptosuites" + "github.com/gravitational/teleport/lib/defaults" "github.com/gravitational/teleport/lib/fixtures" ) @@ -471,3 +474,57 @@ func TestIdentity_GetUserMetadata(t *testing.T) { }) } } + +// TestKeyUsage asserts that only certs with RSA subject keys get the +// KeyEncipherment keyUsage extension. +func TestKeyUsage(t *testing.T) { + rsaKey, err := keys.ParsePrivateKey(fixtures.PEMBytes["rsa"]) + require.NoError(t, err) + ecdsaKey, err := cryptosuites.GenerateKeyWithAlgorithm(cryptosuites.ECDSAP256) + require.NoError(t, err) + for _, tc := range []struct { + algo string + key crypto.Signer + expectCAKeyUsage x509.KeyUsage + expectSubjectKeyUsage x509.KeyUsage + }{ + { + algo: "RSA", + key: rsaKey, + expectCAKeyUsage: x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign | x509.KeyUsageCRLSign | x509.KeyUsageKeyEncipherment, + expectSubjectKeyUsage: x509.KeyUsageDigitalSignature | x509.KeyUsageKeyEncipherment, + }, + { + algo: "ECDSA", + key: ecdsaKey, + expectCAKeyUsage: x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign | x509.KeyUsageCRLSign, + expectSubjectKeyUsage: x509.KeyUsageDigitalSignature, + }, + } { + t.Run(tc.algo, func(t *testing.T) { + caPEM, err := GenerateSelfSignedCAWithSigner(tc.key, pkix.Name{ + CommonName: "teleport.example.com", + Organization: []string{"teleport.example.com"}, + }, nil /*dnsNames*/, defaults.CATTL) + require.NoError(t, err) + + ca, err := FromCertAndSigner(caPEM, tc.key) + require.NoError(t, err) + require.Equal(t, tc.expectCAKeyUsage, ca.Cert.KeyUsage) + + subjectPEM, err := ca.GenerateCertificate(CertificateRequest{ + PublicKey: tc.key.Public(), + Subject: pkix.Name{ + CommonName: "teleport.example.com", + Organization: []string{"teleport.example.com"}, + }, + NotAfter: time.Now().Add(time.Hour), + }) + require.NoError(t, err) + + subject, err := ParseCertificatePEM(subjectPEM) + require.NoError(t, err) + require.Equal(t, tc.expectSubjectKeyUsage, subject.KeyUsage) + }) + } +} diff --git a/lib/tlsca/parsegen.go b/lib/tlsca/parsegen.go index 7d667ebaa19df..055670870466b 100644 --- a/lib/tlsca/parsegen.go +++ b/lib/tlsca/parsegen.go @@ -92,15 +92,22 @@ func GenerateSelfSignedCAWithConfig(config GenerateCAConfig) (certPEM []byte, er // signed by the same private key and having the same subject (happens in tests) config.Entity.SerialNumber = serialNumber.String() + // Note: KeyUsageCRLSign is set only to generate empty CRLs for Desktop + // Access authentication with Windows. + keyUsage := x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign | x509.KeyUsageCRLSign + if _, isRSA := config.Signer.Public().(*rsa.PublicKey); isRSA { + // The KeyEncipherment bit is necessary for RSA key exchanges + // https://datatracker.ietf.org/doc/html/rfc5280#section-4.2.1.3 + keyUsage |= x509.KeyUsageKeyEncipherment + } + template := x509.Certificate{ - SerialNumber: serialNumber, - Issuer: config.Entity, - Subject: config.Entity, - NotBefore: notBefore, - NotAfter: notAfter, - // Note: KeyUsageCRLSign is set only to generate empty CRLs for Desktop - // Access authentication with Windows. - KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign | x509.KeyUsageCRLSign, + SerialNumber: serialNumber, + Issuer: config.Entity, + Subject: config.Entity, + NotBefore: notBefore, + NotAfter: notAfter, + KeyUsage: keyUsage, BasicConstraintsValid: true, IsCA: true, DNSNames: config.DNSNames, diff --git a/lib/utils/cert/selfsigned.go b/lib/utils/cert/selfsigned.go index cde88823f1af0..ea1f4adeda36a 100644 --- a/lib/utils/cert/selfsigned.go +++ b/lib/utils/cert/selfsigned.go @@ -84,7 +84,7 @@ func GenerateSelfSignedCert(hostNames []string, ipAddresses []string, eku ...x50 Subject: entity, NotBefore: notBefore, NotAfter: notAfter, - KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign, + KeyUsage: x509.KeyUsageDigitalSignature | x509.KeyUsageCertSign, ExtKeyUsage: eku, BasicConstraintsValid: true, IsCA: true, From ff91dc086596669fb9e1f1e972b1b13def2f0c9c Mon Sep 17 00:00:00 2001 From: Maxim Dietz Date: Wed, 30 Oct 2024 19:57:12 -0400 Subject: [PATCH 26/27] docs: Update nested Access List RFD (#47651) - Fixup grammar, typos - Clarify inheritance and membership/ownership requirements - Clarify Grant inheritance --- rfd/0170-nested-accesslists.md | 192 ++++++++++++++++++++------------- 1 file changed, 115 insertions(+), 77 deletions(-) diff --git a/rfd/0170-nested-accesslists.md b/rfd/0170-nested-accesslists.md index 4f12228093992..f4b8ed35ffc30 100644 --- a/rfd/0170-nested-accesslists.md +++ b/rfd/0170-nested-accesslists.md @@ -10,15 +10,15 @@ state: in development # What This RFD proposes adding support for including owners and -members in access lists from other access lists +members in Access Lists from other Access Lists # Why -This allows a hierarchical access list structure for organizations -which is supported by access list implementations being integrated -with, for example Azure Entra supports including groups in other -groups which we want to be able to mimic the structure of in Teleport -access lists. +This allows a hierarchical Access List structure for organizations +which is supported by Access List implementations being integrated +with. For example, Azure Entra supports including groups in other +groups, which we want to be able to mimic the structure of in Teleport +Access Lists. Users in an access list hierarchy will inherit the granted roles and traits for members and owners from access lists referencing the lists @@ -26,86 +26,125 @@ they're in. # Implementation -New fields will be introduced into the access_list type: +The `AccessListMember` type will be modified to include a new field: -```yaml -kind: access_list -metadata: - name: e69aa529-2a7f-4de2-87be-97fd94309a9f -spec: - grants: - roles: - - access - - auditor - traits: {} - dynamic_members: - - access_list_members: - # A user becomes an access list member if its a member of the access list - - ea4cbbc7-bee1-49b3-bf78-734b4b27ea38 - dynamic_owners: - access_list_owners: - # A user becomes an access list owner if its a member of the access list - - 3e9df1e7-0b8a-4984-b2e8-5bc0d7b356a9 - title: access-list-a -version: v1 +```go +type AccessListMemberSpec struct { + // ... + + // MembershipKind describes the kind of membership, + // either "MEMBERSHIP_KIND_USER" or "MEMBERSHIP_KIND_LIST". + MembershipKind string `json:"membership_kind" yaml:"membership_kind"` +} +``` + +As well as `accesslist.Owner`: + +```go +type Owner struct { + // ... + + // MembershipKind describes the kind of ownership, + // either "MEMBERSHIP_KIND_USER" or "MEMBERSHIP_KIND_LIST". + MembershipKind string `json:"membership_kind" yaml:"membership_kind"` +} ``` -These fields will contain a list of other access lists that will be -included in the access list. +These fields will be used to indicate whether the member/owner refers to +a Teleport user or an Access List. + +Two fields will be added to the `AccessList.Status` struct as well: -Access lists included in `dynamic_members.access_list_members` and -`dynamic_members.access_list_owners` will take the membership only -from the list of members in the included access list. +```go +type Status struct { + // ... + OwnerOf []string `json:"owner_of" yaml:"owner_of"` + MemberOf []string `json:"member_of" yaml:"member_of"` +} +``` + +These fields will be used to store the names (UUIDs) of Access Lists which +the current Access List is an explicit member or owner of, respectively. # Implementation considerations -## Cycles within lists +## Limitations -The implementation will not support cycles within the hierarchy as -this would introduce confusing options for configuration. Teleport -will return an error if a cycle are introduced. It will also only look -10 layers deep before exiting a lookup to avoid overly complex -hierarchies. +### Cycles -Errors over cycles in the hierarchy will be detected and returned at -access list insertion/update time. +The implementation will not support cycles within the hierarchy, as +this would introduce confusing options for configuration. Teleport +will return an error if self-referential membership or ownership is +detected while modifying an Access List's members or owners. ### Nesting depth -Access list hierarchies will only recurse up to 10 layers deep -initially. +The implementation will not support a hierarchy that is +more than 10 levels deep. An error will be returned if a hierarchy +exceeds this depth while modifying an Access List's members or owners. +This may be configured to a higher value in the future. -## Access list reviews +Errors relating to cycles and depth will also be detected and returned +at Access List insertion time. -Access list periodic reviews will include in the member review page, -the list of nested access lists and an indicator to suggest that its -an access list not an individual member, but not the full list of -users. +## Access List reviews -## Impact on access requests +In the member review page for an Access List review, the list of members +will include both explicit members and nested Access Lists. An indicator +will be included to show that the member is an Access List, not an +individual user. -Access request suggested reviewers will include members included in -the `dynamic_access_lists.access_list_owners` field. +## Impact on Access Requests -The suggested lists field will remain operating as it presently does, +Access Requests' suggested reviewers will include users with inherited +ownership from nested Access Lists. + +The Suggested Lists field will remain operating as it presently does, only showing the list that actually grants the resource. -## Membership and Ownership requires +## Membership and Ownership -A user in a nested access list will only become a member/owner if the -user passes the respective membership/ownership requirements +### Inheritance -## Other considerations +Membership will be inherited when a user is a member in an Access List that +is a member of another Access List. + +Ownership will be inherited when a user is a member in an Access List that +is an owner of another Access List. + +These rules are recursive - if an Access List is a member of an +Access List that is a member of another Access List, the user will +inherit membership in all three Access Lists (or, ownership, if the +first Access List in the chain is added as an owner). -Access lists will need to be allowed to have empty grants so access -lists can represent only users and permissions can be assigned purely -through membership in other lists. +### Requirements -# Examples +Membership and ownership requirements will be checked at each level of the +hierarchy. If a user does not meet the requirements at a given level, +they will not inherit membership or ownership from that level or any +levels "above" it in the hierarchy. +## Grant inheritance -User Alice is in the below access list which does not include any -other access lists +When calculating a user's login state, the tree of Access Lists will +be traversed, granting roles and traits from each Access List in the +hierarchy that the user has either explicit or inherited membership or +ownership in. + +Explicit owners will not inherit roles or traits from any nested +Access Lists they own. They will only be granted roles and traits from +the Access List(s) they are explicit owners of. + +## Other considerations + +Access lists will need to be allowed to have empty grants so Access +Lists can represent only users, and permissions can be assigned purely +through inclusion in other Access Lists. + +# Example + +- User Alice is a member in `acl-a`, which does not include any other +Access Lists as members: ```yaml kind: access_list @@ -116,12 +155,12 @@ spec: roles: - some-role traits: {} - title: access-list-a version: v1 ``` -- `acl-c` includes members in `acl-a`, grants them `manager` -- `acl-b` includes members in `acl-c`, and grants them `auditor` and `reviewer` + +- `acl-c` includes members of `acl-a`, and grants them `manager` +- `acl-b` includes members of `acl-c`, and grants them `auditor` and `reviewer` ```yaml kind: access_list @@ -133,9 +172,9 @@ spec: - auditor - reviewer traits: {} - # list of references to other access lists, for users to include in this access list - dynamic_members: - access_list_members: "acl-c" + # In actuality, members are not stored directly on the Access List resource, this is just for brevity + members: + - acl-c title: access-list-a version: v1 --- @@ -147,24 +186,23 @@ spec: roles: - manager traits: {} - # list of references to other access lists, for users to include in this access list - dynamic_members: - access_list_members: "acl-a" + members: + - acl-a title: access-list-a version: v1 ``` -When calculating a users access roles, the tree of access lists will -be traversed and so upon login, user Alice will have been granted +When calculating a user's access roles, the tree of Access Lists will +be traversed, and so, upon login, user Alice will be granted: - `some-role` from `acl-a` -- `manager` from `acl-c` as it includes members of `acl-a` -- `auditor` and `reviewer` from `acl-b` as it includes members of - `acl-c`, who also include members of `acl-a` +- `manager` from `acl-c`, as it includes members from `acl-a` +- `auditor` and `reviewer` from `acl-b`, as it includes members from + `acl-c`, which in turn includes members from `acl-a` # Future considerations -Further development of membership reviews should be considered to +- Further development of membership reviews should be considered to expand reviews to include members of nested lists and to include -information in the UI that nested may need to be separately reviewed +information in the UI that nested lists may need to be separately reviewed. From 9383c38bf0f9fbc633269433398e8b68bba2b034 Mon Sep 17 00:00:00 2001 From: Maxim Dietz Date: Wed, 30 Oct 2024 22:43:46 -0400 Subject: [PATCH 27/27] fix: Provide `membershipKind` fields for owners/members in tests (#48191) --- .../resources/testlib/accesslist_controller_tests.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/integrations/operator/controllers/resources/testlib/accesslist_controller_tests.go b/integrations/operator/controllers/resources/testlib/accesslist_controller_tests.go index d7a15f142f804..caba7e10a26b3 100644 --- a/integrations/operator/controllers/resources/testlib/accesslist_controller_tests.go +++ b/integrations/operator/controllers/resources/testlib/accesslist_controller_tests.go @@ -44,7 +44,7 @@ func newAccessListSpec(nextAudit time.Time) accesslist.Spec { return accesslist.Spec{ Title: "crane operation", Description: "Access list that Gru uses to allow the minions to operate the crane.", - Owners: []accesslist.Owner{{Name: "Gru", Description: "The super villain."}}, + Owners: []accesslist.Owner{{Name: "Gru", Description: "The super villain.", MembershipKind: accesslist.MembershipKindUser}}, Audit: accesslist.Audit{ Recurrence: accesslist.Recurrence{ Frequency: accesslist.SixMonths,