From 9440a68744ea97a45ceeef6d75466405ac101ea1 Mon Sep 17 00:00:00 2001 From: Jamie Hannaford Date: Thu, 20 Apr 2017 12:57:07 +0200 Subject: [PATCH] Use dedicated Unix User and Group ID types --- api/swagger-spec/apps_v1beta1.json | 19 +- api/swagger-spec/batch_v1.json | 19 +- api/swagger-spec/batch_v2alpha1.json | 19 +- api/swagger-spec/extensions_v1beta1.json | 19 +- api/swagger-spec/v1.json | 19 +- .../apps/v1beta1/definitions.html | 26 +- docs/api-reference/batch/v1/definitions.html | 18 +- .../batch/v2alpha1/definitions.html | 4750 +++++++++-------- .../extensions/v1beta1/definitions.html | 142 +- docs/api-reference/v1/definitions.html | 18 +- pkg/api/types.go | 8 +- pkg/api/v1/generated.pb.go | 1418 ++--- pkg/api/v1/types.generated.go | 169 +- pkg/api/v1/types.go | 8 +- pkg/api/v1/zz_generated.conversion.go | 16 +- pkg/api/v1/zz_generated.deepcopy.go | 8 +- pkg/api/validation/BUILD | 1 + pkg/api/validation/schema.go | 2 +- pkg/api/validation/validation.go | 6 +- pkg/api/validation/validation_test.go | 45 +- pkg/api/zz_generated.deepcopy.go | 8 +- pkg/apis/extensions/BUILD | 1 + pkg/apis/extensions/types.go | 23 +- .../v1beta1/zz_generated.conversion.go | 30 +- pkg/apis/extensions/validation/validation.go | 28 +- .../extensions/validation/validation_test.go | 12 +- pkg/apis/extensions/zz_generated.deepcopy.go | 36 +- pkg/kubelet/dockershim/securitycontext/BUILD | 1 + .../securitycontext/provider_test.go | 25 +- pkg/kubelet/kubelet_volumes_test.go | 4 +- .../kuberuntime/kuberuntime_sandbox.go | 8 +- pkg/kubelet/kuberuntime/security_context.go | 8 +- pkg/kubelet/rkt/rkt_test.go | 20 +- pkg/kubelet/volumemanager/BUILD | 1 + pkg/kubelet/volumemanager/volume_manager.go | 2 +- .../volumemanager/volume_manager_test.go | 5 +- pkg/security/podsecuritypolicy/BUILD | 2 + pkg/security/podsecuritypolicy/group/BUILD | 2 + .../podsecuritypolicy/group/mustrunas.go | 19 +- .../podsecuritypolicy/group/mustrunas_test.go | 51 +- .../podsecuritypolicy/group/runasany.go | 9 +- pkg/security/podsecuritypolicy/group/types.go | 7 +- pkg/security/podsecuritypolicy/provider.go | 3 +- .../podsecuritypolicy/provider_test.go | 35 +- pkg/security/podsecuritypolicy/user/BUILD | 2 + .../podsecuritypolicy/user/mustrunas.go | 7 +- .../podsecuritypolicy/user/mustrunas_test.go | 18 +- .../podsecuritypolicy/user/nonroot.go | 3 +- .../podsecuritypolicy/user/nonroot_test.go | 7 +- .../podsecuritypolicy/user/runasany.go | 3 +- pkg/security/podsecuritypolicy/user/types.go | 3 +- pkg/security/podsecuritypolicy/util/BUILD | 1 + pkg/security/podsecuritypolicy/util/util.go | 10 +- pkg/securitycontext/BUILD | 6 +- pkg/securitycontext/util.go | 9 +- pkg/securitycontext/util_test.go | 13 +- pkg/volume/aws_ebs/aws_ebs.go | 4 +- pkg/volume/azure_dd/azure_dd.go | 4 +- pkg/volume/azure_file/azure_file.go | 4 +- pkg/volume/cephfs/cephfs.go | 4 +- pkg/volume/cinder/cinder.go | 4 +- pkg/volume/configmap/configmap.go | 4 +- pkg/volume/configmap/configmap_test.go | 8 +- pkg/volume/downwardapi/downwardapi.go | 4 +- pkg/volume/empty_dir/empty_dir.go | 4 +- pkg/volume/fc/disk_manager.go | 3 +- pkg/volume/fc/fc.go | 4 +- pkg/volume/flexvolume/mounter-defaults.go | 4 +- pkg/volume/flexvolume/mounter.go | 7 +- pkg/volume/flexvolume/mounter_test.go | 3 +- pkg/volume/flocker/flocker.go | 4 +- pkg/volume/gce_pd/gce_pd.go | 4 +- pkg/volume/git_repo/git_repo.go | 4 +- pkg/volume/glusterfs/glusterfs.go | 4 +- pkg/volume/host_path/host_path.go | 4 +- pkg/volume/iscsi/disk_manager.go | 3 +- pkg/volume/iscsi/iscsi.go | 4 +- pkg/volume/nfs/nfs.go | 4 +- pkg/volume/photon_pd/photon_pd.go | 4 +- pkg/volume/portworx/portworx.go | 4 +- pkg/volume/projected/projected.go | 4 +- pkg/volume/quobyte/quobyte.go | 4 +- pkg/volume/rbd/disk_manager.go | 3 +- pkg/volume/rbd/rbd.go | 4 +- pkg/volume/scaleio/sio_volume.go | 4 +- pkg/volume/secret/secret.go | 4 +- pkg/volume/testing/testing.go | 4 +- .../operationexecutor/operation_generator.go | 2 +- pkg/volume/volume.go | 4 +- pkg/volume/volume_linux.go | 4 +- pkg/volume/volume_unsupported.go | 4 +- pkg/volume/vsphere_volume/vsphere_volume.go | 4 +- .../security/podsecuritypolicy/BUILD | 1 + .../podsecuritypolicy/admission_test.go | 62 +- .../admission/securitycontext/scdeny/BUILD | 1 + .../securitycontext/scdeny/admission_test.go | 7 +- .../apimachinery/pkg/util/validation/BUILD | 2 + .../pkg/util/validation/validation.go | 10 +- .../pkg/util/validation/validation_test.go | 38 +- staging/src/k8s.io/client-go/pkg/api/types.go | 8 +- .../client-go/pkg/api/v1/generated.pb.go | 1418 ++--- .../client-go/pkg/api/v1/types.generated.go | 169 +- .../src/k8s.io/client-go/pkg/api/v1/types.go | 8 +- .../pkg/api/v1/zz_generated.conversion.go | 16 +- .../pkg/api/v1/zz_generated.deepcopy.go | 8 +- .../pkg/api/zz_generated.deepcopy.go | 8 +- .../client-go/pkg/apis/extensions/BUILD | 1 + .../client-go/pkg/apis/extensions/types.go | 23 +- .../v1beta1/zz_generated.conversion.go | 30 +- .../apis/extensions/zz_generated.deepcopy.go | 36 +- test/e2e/common/BUILD | 1 + test/e2e/common/configmap.go | 30 +- test/e2e/common/downwardapi_volume.go | 9 +- test/e2e/common/empty_dir.go | 7 +- test/e2e/common/projected.go | 40 +- test/e2e/common/secrets.go | 8 +- test/e2e/framework/volume_util.go | 3 +- test/e2e/security_context.go | 19 +- test/e2e/storage/volumes.go | 12 +- test/e2e_node/runtime_conformance_test.go | 5 +- 120 files changed, 4881 insertions(+), 4396 deletions(-) diff --git a/api/swagger-spec/apps_v1beta1.json b/api/swagger-spec/apps_v1beta1.json index 8104a7052b..4c6641c7f2 100644 --- a/api/swagger-spec/apps_v1beta1.json +++ b/api/swagger-spec/apps_v1beta1.json @@ -4057,8 +4057,7 @@ "description": "The SELinux context to be applied to the container. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence." }, "runAsUser": { - "type": "integer", - "format": "int64", + "$ref": "types.UnixUserID", "description": "The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence." }, "runAsNonRoot": { @@ -4117,6 +4116,10 @@ } } }, + "types.UnixUserID": { + "id": "types.UnixUserID", + "properties": {} + }, "v1.PodSecurityContext": { "id": "v1.PodSecurityContext", "description": "PodSecurityContext holds pod-level security attributes and common container settings. Some fields are also present in container.securityContext. Field values of container.securityContext take precedence over field values of PodSecurityContext.", @@ -4126,8 +4129,7 @@ "description": "The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container." }, "runAsUser": { - "type": "integer", - "format": "int64", + "$ref": "types.UnixUserID", "description": "The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container." }, "runAsNonRoot": { @@ -4137,17 +4139,20 @@ "supplementalGroups": { "type": "array", "items": { - "type": "integer" + "$ref": "types.UnixGroupID" }, "description": "A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container." }, "fsGroup": { - "type": "integer", - "format": "int64", + "$ref": "types.UnixGroupID", "description": "A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n\n1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw " } } }, + "types.UnixGroupID": { + "id": "types.UnixGroupID", + "properties": {} + }, "v1.Affinity": { "id": "v1.Affinity", "description": "Affinity is a group of affinity scheduling rules.", diff --git a/api/swagger-spec/batch_v1.json b/api/swagger-spec/batch_v1.json index 39a21a456a..be62f99049 100644 --- a/api/swagger-spec/batch_v1.json +++ b/api/swagger-spec/batch_v1.json @@ -2840,8 +2840,7 @@ "description": "The SELinux context to be applied to the container. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence." }, "runAsUser": { - "type": "integer", - "format": "int64", + "$ref": "types.UnixUserID", "description": "The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence." }, "runAsNonRoot": { @@ -2900,6 +2899,10 @@ } } }, + "types.UnixUserID": { + "id": "types.UnixUserID", + "properties": {} + }, "v1.PodSecurityContext": { "id": "v1.PodSecurityContext", "description": "PodSecurityContext holds pod-level security attributes and common container settings. Some fields are also present in container.securityContext. Field values of container.securityContext take precedence over field values of PodSecurityContext.", @@ -2909,8 +2912,7 @@ "description": "The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container." }, "runAsUser": { - "type": "integer", - "format": "int64", + "$ref": "types.UnixUserID", "description": "The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container." }, "runAsNonRoot": { @@ -2920,17 +2922,20 @@ "supplementalGroups": { "type": "array", "items": { - "type": "integer" + "$ref": "types.UnixGroupID" }, "description": "A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container." }, "fsGroup": { - "type": "integer", - "format": "int64", + "$ref": "types.UnixGroupID", "description": "A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n\n1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw " } } }, + "types.UnixGroupID": { + "id": "types.UnixGroupID", + "properties": {} + }, "v1.Affinity": { "id": "v1.Affinity", "description": "Affinity is a group of affinity scheduling rules.", diff --git a/api/swagger-spec/batch_v2alpha1.json b/api/swagger-spec/batch_v2alpha1.json index 8d83d1415b..701e1402db 100644 --- a/api/swagger-spec/batch_v2alpha1.json +++ b/api/swagger-spec/batch_v2alpha1.json @@ -3873,8 +3873,7 @@ "description": "The SELinux context to be applied to the container. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence." }, "runAsUser": { - "type": "integer", - "format": "int64", + "$ref": "types.UnixUserID", "description": "The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence." }, "runAsNonRoot": { @@ -3933,6 +3932,10 @@ } } }, + "types.UnixUserID": { + "id": "types.UnixUserID", + "properties": {} + }, "v1.PodSecurityContext": { "id": "v1.PodSecurityContext", "description": "PodSecurityContext holds pod-level security attributes and common container settings. Some fields are also present in container.securityContext. Field values of container.securityContext take precedence over field values of PodSecurityContext.", @@ -3942,8 +3945,7 @@ "description": "The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container." }, "runAsUser": { - "type": "integer", - "format": "int64", + "$ref": "types.UnixUserID", "description": "The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container." }, "runAsNonRoot": { @@ -3953,17 +3955,20 @@ "supplementalGroups": { "type": "array", "items": { - "type": "integer" + "$ref": "types.UnixGroupID" }, "description": "A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container." }, "fsGroup": { - "type": "integer", - "format": "int64", + "$ref": "types.UnixGroupID", "description": "A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n\n1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw " } } }, + "types.UnixGroupID": { + "id": "types.UnixGroupID", + "properties": {} + }, "v1.Affinity": { "id": "v1.Affinity", "description": "Affinity is a group of affinity scheduling rules.", diff --git a/api/swagger-spec/extensions_v1beta1.json b/api/swagger-spec/extensions_v1beta1.json index 2b940b7512..b26008bae5 100644 --- a/api/swagger-spec/extensions_v1beta1.json +++ b/api/swagger-spec/extensions_v1beta1.json @@ -8304,8 +8304,7 @@ "description": "The SELinux context to be applied to the container. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence." }, "runAsUser": { - "type": "integer", - "format": "int64", + "$ref": "types.UnixUserID", "description": "The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence." }, "runAsNonRoot": { @@ -8364,6 +8363,10 @@ } } }, + "types.UnixUserID": { + "id": "types.UnixUserID", + "properties": {} + }, "v1.PodSecurityContext": { "id": "v1.PodSecurityContext", "description": "PodSecurityContext holds pod-level security attributes and common container settings. Some fields are also present in container.securityContext. Field values of container.securityContext take precedence over field values of PodSecurityContext.", @@ -8373,8 +8376,7 @@ "description": "The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container." }, "runAsUser": { - "type": "integer", - "format": "int64", + "$ref": "types.UnixUserID", "description": "The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container." }, "runAsNonRoot": { @@ -8384,17 +8386,20 @@ "supplementalGroups": { "type": "array", "items": { - "type": "integer" + "$ref": "types.UnixGroupID" }, "description": "A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container." }, "fsGroup": { - "type": "integer", - "format": "int64", + "$ref": "types.UnixGroupID", "description": "A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n\n1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw " } } }, + "types.UnixGroupID": { + "id": "types.UnixGroupID", + "properties": {} + }, "v1.Affinity": { "id": "v1.Affinity", "description": "Affinity is a group of affinity scheduling rules.", diff --git a/api/swagger-spec/v1.json b/api/swagger-spec/v1.json index c0e480d85d..d045e970ab 100644 --- a/api/swagger-spec/v1.json +++ b/api/swagger-spec/v1.json @@ -19891,8 +19891,7 @@ "description": "The SELinux context to be applied to the container. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence." }, "runAsUser": { - "type": "integer", - "format": "int64", + "$ref": "types.UnixUserID", "description": "The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence." }, "runAsNonRoot": { @@ -19951,6 +19950,10 @@ } } }, + "types.UnixUserID": { + "id": "types.UnixUserID", + "properties": {} + }, "v1.PodSecurityContext": { "id": "v1.PodSecurityContext", "description": "PodSecurityContext holds pod-level security attributes and common container settings. Some fields are also present in container.securityContext. Field values of container.securityContext take precedence over field values of PodSecurityContext.", @@ -19960,8 +19963,7 @@ "description": "The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container." }, "runAsUser": { - "type": "integer", - "format": "int64", + "$ref": "types.UnixUserID", "description": "The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container." }, "runAsNonRoot": { @@ -19971,17 +19973,20 @@ "supplementalGroups": { "type": "array", "items": { - "type": "integer" + "$ref": "types.UnixGroupID" }, "description": "A list of groups applied to the first process run in each container, in addition to the container's primary GID. If unspecified, no groups will be added to any container." }, "fsGroup": { - "type": "integer", - "format": "int64", + "$ref": "types.UnixGroupID", "description": "A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:\n\n1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR'd with rw-rw " } } }, + "types.UnixGroupID": { + "id": "types.UnixGroupID", + "properties": {} + }, "v1.Affinity": { "id": "v1.Affinity", "description": "Affinity is a group of affinity scheduling rules.", diff --git a/docs/api-reference/apps/v1beta1/definitions.html b/docs/api-reference/apps/v1beta1/definitions.html index a7d66f1bfc..1a6f171dad 100755 --- a/docs/api-reference/apps/v1beta1/definitions.html +++ b/docs/api-reference/apps/v1beta1/definitions.html @@ -1755,6 +1755,10 @@ Populated by the system when a graceful deletion is requested. Read-only. More i + +
+

types.UID

+

v1.AzureFileVolumeSource

@@ -1803,10 +1807,6 @@ Populated by the system when a graceful deletion is requested. Read-only. More i -
-
-

types.UID

-

v1.ISCSIVolumeSource

@@ -4218,6 +4218,10 @@ Examples:
+
+
+

types.UnixUserID

+

v1.ScaleIOVolumeSource

@@ -4590,6 +4594,10 @@ Examples:
+
+
+

types.UnixGroupID

+

v1beta1.DeploymentRollback

@@ -5242,7 +5250,7 @@ Examples:

runAsUser

The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.

false

-

integer (int64)

+

types.UnixUserID

@@ -5256,7 +5264,7 @@ Examples:

supplementalGroups

A list of groups applied to the first process run in each container, in addition to the container’s primary GID. If unspecified, no groups will be added to any container.

false

-

integer (int32) array

+

types.UnixGroupID array

@@ -5265,7 +5273,7 @@ Examples:

1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR’d with rw-rw

false

-

integer (int64)

+

types.UnixGroupID

@@ -5639,7 +5647,7 @@ Examples:

runAsUser

The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.

false

-

integer (int64)

+

types.UnixUserID

@@ -6339,7 +6347,7 @@ Examples:
diff --git a/docs/api-reference/batch/v1/definitions.html b/docs/api-reference/batch/v1/definitions.html index 2a07119de1..3761c98ff3 100755 --- a/docs/api-reference/batch/v1/definitions.html +++ b/docs/api-reference/batch/v1/definitions.html @@ -535,6 +535,10 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } + +
+

types.UnixUserID

+

v1.PhotonPersistentDiskVolumeSource

@@ -1167,6 +1171,10 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } +
+
+

types.UnixGroupID

+

v1.HTTPHeader

@@ -2088,7 +2096,7 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }

runAsUser

The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.

false

-

integer (int64)

+

types.UnixUserID

@@ -2102,7 +2110,7 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }

supplementalGroups

A list of groups applied to the first process run in each container, in addition to the container’s primary GID. If unspecified, no groups will be added to any container.

false

-

integer (int32) array

+

types.UnixGroupID array

@@ -2111,7 +2119,7 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR’d with rw-rw

false

-

integer (int64)

+

types.UnixGroupID

@@ -3013,7 +3021,7 @@ Populated by the system when a graceful deletion is requested. Read-only. More i

runAsUser

The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.

false

-

integer (int64)

+

types.UnixUserID

@@ -5581,7 +5589,7 @@ Examples:
diff --git a/docs/api-reference/batch/v2alpha1/definitions.html b/docs/api-reference/batch/v2alpha1/definitions.html index b6907abd1d..af2f0a96a5 100755 --- a/docs/api-reference/batch/v2alpha1/definitions.html +++ b/docs/api-reference/batch/v2alpha1/definitions.html @@ -484,195 +484,6 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } - -
-

v1.ConfigMapProjection

-
-

Adapts a ConfigMap into a projected volume.

-
-
-

The contents of the target ConfigMap’s Data field will be presented in a projected volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. Note that this is identical to a configmap volume source without the default mode.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names

false

string

items

If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the .. path or start with ...

false

v1.KeyToPath array

optional

Specify whether the ConfigMap or it’s keys must be defined

false

boolean

false

- -
-
-

v1.ScaleIOVolumeSource

-
-

ScaleIOVolumeSource represents a persistent ScaleIO volume

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

gateway

The host address of the ScaleIO API Gateway.

true

string

system

The name of the storage system as configured in ScaleIO.

true

string

secretRef

SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail.

true

v1.LocalObjectReference

sslEnabled

Flag to enable/disable SSL communication with Gateway, default false

false

boolean

false

protectionDomain

The name of the Protection Domain for the configured storage (defaults to "default").

false

string

storagePool

The Storage Pool associated with the protection domain (defaults to "default").

false

string

storageMode

Indicates whether the storage for a volume should be thick or thin (defaults to "thin").

false

string

volumeName

The name of a volume already created in the ScaleIO system that is associated with this volume source.

false

string

fsType

Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.

false

string

readOnly

Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.

false

boolean

false

- -
-
-

v1.PhotonPersistentDiskVolumeSource

-
-

Represents a Photon Controller persistent disk resource.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

pdID

ID that identifies Photon Controller persistent disk

true

string

fsType

Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.

false

string

-

v1.NodeSelectorTerm

@@ -743,9 +554,9 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; }
-

v1.Status

+

v1.ObjectFieldSelector

-

Status is a return value for calls that don’t return other objects.

+

ObjectFieldSelector selects an APIVersioned field of an object.

@@ -766,61 +577,19 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } - - - - - - - - + - - - - - - - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - -

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#resources

Version of the schema the FieldPath is written in terms of, defaults to "v1".

false

string

metadata

Standard list metadata. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds

false

v1.ListMeta

status

Status of the operation. One of: "Success" or "Failure". More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status

false

fieldPath

Path of the field to select in the specified API version.

true

string

message

A human-readable description of the status of this operation.

false

string

reason

A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.

false

string

details

Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.

false

v1.StatusDetails

code

Suggested HTTP return code for this status, 0 if not set.

false

integer (int32)

@@ -879,47 +648,6 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } -
-
-

v1.ObjectFieldSelector

-
-

ObjectFieldSelector selects an APIVersioned field of an object.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

apiVersion

Version of the schema the FieldPath is written in terms of, defaults to "v1".

false

string

fieldPath

Path of the field to select in the specified API version.

true

string

-

v1.VolumeMount

@@ -975,54 +703,6 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } -
-
-

v1.NFSVolumeSource

-
-

Represents an NFS mount that lasts the lifetime of a pod. NFS volumes do not support ownership management or SELinux relabeling.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

server

Server is the hostname or IP address of the NFS server. More info: http://kubernetes.io/docs/user-guide/volumes#nfs

true

string

path

Path that is exported by the NFS server. More info: http://kubernetes.io/docs/user-guide/volumes#nfs

true

string

readOnly

ReadOnly here will force the NFS export to be mounted with read-only permissions. Defaults to false. More info: http://kubernetes.io/docs/user-guide/volumes#nfs

false

boolean

false

-

v1.DownwardAPIProjection

@@ -1167,102 +847,6 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } -
-
-

v1.HTTPHeader

-
-

HTTPHeader describes a custom header to be used in HTTP probes

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

The header field name

true

string

value

The header field value

true

string

- -
-
-

v1.FCVolumeSource

-
-

Represents a Fibre Channel volume. Fibre Channel volumes can only be mounted as read/write once. Fibre Channel volumes support ownership management and SELinux relabeling.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

targetWWNs

Required: FC target worldwide names (WWNs)

true

string array

lun

Required: FC target lun number

true

integer (int32)

fsType

Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.

false

string

readOnly

Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.

false

boolean

false

-

v1.DownwardAPIVolumeSource

@@ -1304,51 +888,6 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } -
-
-

v1.PodAntiAffinity

-
-

Pod anti affinity is a group of inter pod anti affinity scheduling rules.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

requiredDuringSchedulingIgnoredDuringExecution

NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm json:"requiredDuringSchedulingRequiredDuringExecution,omitempty" If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.

false

v1.PodAffinityTerm array

preferredDuringSchedulingIgnoredDuringExecution

The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.

false

v1.WeightedPodAffinityTerm array

- -
-
-

v1.DeletionPropagation

-

v1.GCEPersistentDiskVolumeSource

@@ -1407,47 +946,6 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } -
-
-

v1.TCPSocketAction

-
-

TCPSocketAction describes an action based on opening a socket

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

port

Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.

true

string

host

Optional: Host name to connect to, defaults to the pod IP.

false

string

-

v1.ConfigMapVolumeSource

@@ -1554,68 +1052,6 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } -
-
-

v1.HTTPGetAction

-
-

HTTPGetAction describes an action based on HTTP Get requests.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

path

Path to access on the HTTP server.

false

string

port

Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.

true

string

host

Host name to connect to, defaults to the pod IP. You probably want to set "Host" in httpHeaders instead.

false

string

scheme

Scheme to use for connecting to the host. Defaults to HTTP.

false

string

httpHeaders

Custom headers to set in the request. HTTP allows repeated headers.

false

v1.HTTPHeader array

-

v1.SecretEnvSource

@@ -1660,109 +1096,6 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } -
-
-

v1.StatusDetails

-
-

StatusDetails is a set of additional properties that MAY be set by the server to provide additional information about a response. The Reason field of a Status object defines what attributes will be set. Clients must ignore fields that do not match the defined type of each attribute, and should assume that any attribute may be empty, invalid, or under defined.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).

false

string

group

The group attribute of the resource associated with the status StatusReason.

false

string

kind

The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds

false

string

causes

The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.

false

v1.StatusCause array

retryAfterSeconds

If specified, the time in seconds before the operation should be retried.

false

integer (int32)

- -
-
-

v1.Capabilities

-
-

Adds and removes POSIX capabilities from running containers.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

add

Added capabilities

false

v1.Capability array

drop

Removed capabilities

false

v1.Capability array

-

v1.PortworxVolumeSource

@@ -1811,6 +1144,47 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } +
+
+

v1.Capabilities

+
+

Adds and removes POSIX capabilities from running containers.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

add

Added capabilities

false

v1.Capability array

drop

Removed capabilities

false

v1.Capability array

+

v1.LocalObjectReference

@@ -1886,237 +1260,6 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } -
-
-

v1.Container

-
-

A single application container that you want to run within a pod.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

Name of the container specified as a DNS_LABEL. Each container in a pod must have a unique name (DNS_LABEL). Cannot be updated.

true

string

image

Docker image name. More info: http://kubernetes.io/docs/user-guide/images

false

string

command

Entrypoint array. Not executed within a shell. The docker image’s ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container’s environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/containers#containers-and-commands

false

string array

args

Arguments to the entrypoint. The docker image’s CMD is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container’s environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/containers#containers-and-commands

false

string array

workingDir

Container’s working directory. If not specified, the container runtime’s default will be used, which might be configured in the container image. Cannot be updated.

false

string

ports

List of ports to expose from the container. Exposing a port here gives the system additional information about the network connections a container uses, but is primarily informational. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is listening on the default "0.0.0.0" address inside a container will be accessible from the network. Cannot be updated.

false

v1.ContainerPort array

envFrom

List of sources to populate environment variables in the container. The keys defined within a source must be a C_IDENTIFIER. All invalid keys will be reported as an event when the container is starting. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated.

false

v1.EnvFromSource array

env

List of environment variables to set in the container. Cannot be updated.

false

v1.EnvVar array

resources

Compute Resources required by this container. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/persistent-volumes#resources

false

v1.ResourceRequirements

volumeMounts

Pod volumes to mount into the container’s filesystem. Cannot be updated.

false

v1.VolumeMount array

livenessProbe

Periodic probe of container liveness. Container will be restarted if the probe fails. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/pod-states#container-probes

false

v1.Probe

readinessProbe

Periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/pod-states#container-probes

false

v1.Probe

lifecycle

Actions that the management system should take in response to container lifecycle events. Cannot be updated.

false

v1.Lifecycle

terminationMessagePath

Optional: Path at which the file to which the container’s termination message will be written is mounted into the container’s filesystem. Message written is intended to be brief final status, such as an assertion failure message. Will be truncated by the node if greater than 4096 bytes. The total message length across all containers will be limited to 12kb. Defaults to /dev/termination-log. Cannot be updated.

false

string

terminationMessagePolicy

Indicate how the termination message should be populated. File will use the contents of terminationMessagePath to populate the container status message on both success and failure. FallbackToLogsOnError will use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. Defaults to File. Cannot be updated.

false

string

imagePullPolicy

Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/images#updating-images

false

string

securityContext

Security options the pod should run with. More info: http://releases.k8s.io/HEAD/docs/design/security_context.md

false

v1.SecurityContext

stdin

Whether this container should allocate a buffer for stdin in the container runtime. If this is not set, reads from stdin in the container will always result in EOF. Default is false.

false

boolean

false

stdinOnce

Whether the container runtime should close the stdin channel after it has been opened by a single attach. When stdin is true the stdin stream will remain open across multiple attach sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the first client attaches to stdin, and then remains open and accepts data until the client disconnects, at which time stdin is closed and remains closed until the container is restarted. If this flag is false, a container processes that reads from stdin will never receive an EOF. Default is false

false

boolean

false

tty

Whether this container should allocate a TTY for itself, also requires stdin to be true. Default is false.

false

boolean

false

- -
-
-

v1.PodSecurityContext

-
-

PodSecurityContext holds pod-level security attributes and common container settings. Some fields are also present in container.securityContext. Field values of container.securityContext take precedence over field values of PodSecurityContext.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

seLinuxOptions

The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.

false

v1.SELinuxOptions

runAsUser

The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.

false

integer (int64)

runAsNonRoot

Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.

false

boolean

false

supplementalGroups

A list of groups applied to the first process run in each container, in addition to the container’s primary GID. If unspecified, no groups will be added to any container.

false

integer (int32) array

fsGroup

A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:
-
-1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR’d with rw-rw

false

integer (int64)

-

v1.ExecAction

@@ -2297,230 +1440,6 @@ Populated by the system when a graceful deletion is requested. Read-only. More i -
-
-

v1.OwnerReference

-
-

OwnerReference contains enough information to let you identify an owning object. Currently, an owning object must be in the same namespace, so there is no namespace field.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

apiVersion

API version of the referent.

true

string

kind

Kind of the referent. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds

true

string

name

Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names

true

string

uid

UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids

true

string

controller

If true, this reference points to the managing controller.

false

boolean

false

blockOwnerDeletion

If true, AND if the owner has the "foregroundDeletion" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs "delete" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.

false

boolean

false

- -
-
-

v1.APIResource

-
-

APIResource specifies the name of a resource and whether it is namespaced.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

name is the plural name of the resource.

true

string

singularName

singularName is the singular name of the resource. This allows clients to handle plural and singular opaquely. The singularName is more correct for reporting status on a single item and both singular and plural are allowed from the kubectl CLI interface.

true

string

namespaced

namespaced indicates if a resource is namespaced or not.

true

boolean

false

kind

kind is the kind for the resource (e.g. Foo is the kind for a resource foo)

true

string

verbs

verbs is a list of supported kube verbs (this includes get, list, watch, create, update, patch, delete, deletecollection, and proxy)

true

string array

shortNames

shortNames is a list of suggested short names of the resource.

false

string array

- -
-
-

v1.NodeSelectorRequirement

-
-

A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

key

The label key that the selector applies to.

true

string

operator

Represents a key’s relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.

true

string

values

An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.

false

string array

- -
-
-

types.UID

- -
-
-

v1.HostPathVolumeSource

-
-

Represents a host path mapped into a pod. Host path volumes do not support ownership management or SELinux relabeling.

-
- ------- - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

path

Path of the directory on the host. More info: http://kubernetes.io/docs/user-guide/volumes#hostpath

true

string

-

v1.AzureFileVolumeSource

@@ -2569,6 +1488,10 @@ Populated by the system when a graceful deletion is requested. Read-only. More i +
+
+

types.UID

+

v1.ISCSIVolumeSource

@@ -2666,57 +1589,6 @@ Populated by the system when a graceful deletion is requested. Read-only. More i -
-
-

v1.SecretProjection

-
-

Adapts a secret into a projected volume.

-
-
-

The contents of the target Secret’s Data field will be presented in a projected volume as files using the keys in the Data field as the file names. Note that this is identical to a secret volume source without the default mode.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names

false

string

items

If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the .. path or start with ...

false

v1.KeyToPath array

optional

Specify whether the Secret or its key must be defined

false

boolean

false

-

v1.EmptyDirVolumeSource

@@ -2847,123 +1719,6 @@ Populated by the system when a graceful deletion is requested. Read-only. More i -
-
-

v1.CinderVolumeSource

-
-

Represents a cinder volume resource in Openstack. A Cinder volume must exist before mounting to a container. The volume must also be in the same region as the kubelet. Cinder volumes support ownership management and SELinux relabeling.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

volumeID

volume id used to identify the volume in cinder More info: http://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md

true

string

fsType

Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: http://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md

false

string

readOnly

Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: http://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md

false

boolean

false

- -
-
-

v1.SecurityContext

-
-

SecurityContext holds security configuration that will be applied to a container. Some fields are present in both SecurityContext and PodSecurityContext. When both are set, the values in SecurityContext take precedence.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

capabilities

The capabilities to add/drop when running containers. Defaults to the default set of capabilities granted by the container runtime.

false

v1.Capabilities

privileged

Run container in privileged mode. Processes in privileged containers are essentially equivalent to root on the host. Defaults to false.

false

boolean

false

seLinuxOptions

The SELinux context to be applied to the container. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.

false

v1.SELinuxOptions

runAsUser

The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.

false

integer (int64)

runAsNonRoot

Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.

false

boolean

false

readOnlyRootFilesystem

Whether this container has a read-only root filesystem. Default is false.

false

boolean

false

-

v1.PodAffinity

@@ -3007,12 +1762,9 @@ Populated by the system when a graceful deletion is requested. Read-only. More i
-

v1.AWSElasticBlockStoreVolumeSource

+

v1.FlockerVolumeSource

-

Represents a Persistent Disk resource in AWS.

-
-
-

An AWS EBS disk must exist before mounting to a container. The disk must also be in the same AWS zone as the kubelet. An AWS EBS disk can only be mounted as read/write once. AWS EBS volumes support ownership management and SELinux relabeling.

+

Represents a Flocker volume mounted by the Flocker agent. One and only one of datasetName and datasetUUID should be set. Flocker volumes do not support ownership management or SELinux relabeling.

@@ -3033,70 +1785,15 @@ Populated by the system when a graceful deletion is requested. Read-only. More i - - - - - - - - - + + - - - - - - - - - - - - - - -

volumeID

Unique ID of the persistent disk resource in AWS (Amazon EBS volume). More info: http://kubernetes.io/docs/user-guide/volumes#awselasticblockstore

true

string

fsType

Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: http://kubernetes.io/docs/user-guide/volumes#awselasticblockstore

datasetName

Name of the dataset stored as metadata → name on the dataset for Flocker should be considered as deprecated

false

string

partition

The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as "1". Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty).

false

integer (int32)

readOnly

Specify "true" to force and set the ReadOnly property in VolumeMounts to "true". If omitted, the default is "false". More info: http://kubernetes.io/docs/user-guide/volumes#awselasticblockstore

false

boolean

false

- -
-
-

v1.ListMeta

-
-

ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.

-
- ------- - - - - - - - - - - - - - - - - - - - - + + @@ -3147,9 +1844,9 @@ Populated by the system when a graceful deletion is requested. Read-only. More i
-

v1.FlockerVolumeSource

+

v1.ListMeta

-

Represents a Flocker volume mounted by the Flocker agent. One and only one of datasetName and datasetUUID should be set. Flocker volumes do not support ownership management or SELinux relabeling.

+

ListMeta describes metadata that synthetic resources must have, including lists and various status objects. A resource may have only one of {ObjectMeta, ListMeta}.

NameDescriptionRequiredSchemaDefault

selfLink

SelfLink is a URL representing this object. Populated by the system. Read-only.

false

string

resourceVersion

String that identifies the server’s internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#concurrency-control-and-consistency

datasetUUID

UUID of the dataset. This is unique identifier of a Flocker dataset

false

string

@@ -3170,15 +1867,15 @@ Populated by the system when a graceful deletion is requested. Read-only. More i - - + + - - + + @@ -3186,236 +1883,6 @@ Populated by the system when a graceful deletion is requested. Read-only. More i

datasetName

Name of the dataset stored as metadata → name on the dataset for Flocker should be considered as deprecated

selfLink

SelfLink is a URL representing this object. Populated by the system. Read-only.

false

string

datasetUUID

UUID of the dataset. This is unique identifier of a Flocker dataset

resourceVersion

String that identifies the server’s internal version of this object that can be used by clients to determine when objects have changed. Value must be treated as opaque by clients and passed unmodified back to the server. Populated by the system. Read-only. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#concurrency-control-and-consistency

false

string

-
-
-

v1.QuobyteVolumeSource

-
-

Represents a Quobyte mount that lasts the lifetime of a pod. Quobyte volumes do not support ownership management or SELinux relabeling.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

registry

Registry represents a single or multiple Quobyte Registry services specified as a string as host:port pair (multiple entries are separated with commas) which acts as the central registry for volumes

true

string

volume

Volume is a string that references an already created Quobyte volume by name.

true

string

readOnly

ReadOnly here will force the Quobyte volume to be mounted with read-only permissions. Defaults to false.

false

boolean

false

user

User to map volume access to Defaults to serivceaccount user

false

string

group

Group to map volume access to Default is no group

false

string

- -
-
-

v2alpha1.JobTemplateSpec

-
-

JobTemplateSpec describes the data a Job should have when created from a template

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

metadata

Standard object’s metadata of the jobs created from this template. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata

false

v1.ObjectMeta

spec

Specification of the desired behavior of the job. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status

false

v1.JobSpec

- -
-
-

v1.WatchEvent

- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

type

true

string

object

true

string

- -
-
-

v2alpha1.CronJobStatus

-
-

CronJobStatus represents the current state of a cron job.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

active

A list of pointers to currently running jobs.

false

v1.ObjectReference array

lastScheduleTime

Information when was the last time the job was successfully scheduled.

false

string

- -
-
-

v1.EnvVar

-
-

EnvVar represents an environment variable present in a Container.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

Name of the environment variable. Must be a C_IDENTIFIER.

true

string

value

Variable references $(VAR_NAME) are expanded using the previous defined environment variables in the container and any service environment variables. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Defaults to "".

false

string

valueFrom

Source for the environment variable’s value. Cannot be used if value is not empty.

false

v1.EnvVarSource

-

v1.SecretVolumeSource

@@ -3474,150 +1941,6 @@ Populated by the system when a graceful deletion is requested. Read-only. More i -
-
-

v1.LabelSelectorRequirement

-
-

A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

key

key is the label key that the selector applies to.

true

string

operator

operator represents a key’s relationship to a set of values. Valid operators ard In, NotIn, Exists and DoesNotExist.

true

string

values

values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.

false

string array

- -
-
-

v1.ResourceRequirements

-
-

ResourceRequirements describes the compute resource requirements.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

limits

Limits describes the maximum amount of compute resources allowed. More info: http://kubernetes.io/docs/user-guide/compute-resources/

false

object

requests

Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: http://kubernetes.io/docs/user-guide/compute-resources/

false

object

- -
-
-

v1.EnvVarSource

-
-

EnvVarSource represents a source for the value of an EnvVar.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

fieldRef

Selects a field of the pod: supports metadata.name, metadata.namespace, metadata.labels, metadata.annotations, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP.

false

v1.ObjectFieldSelector

resourceFieldRef

Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.

false

v1.ResourceFieldSelector

configMapKeyRef

Selects a key of a ConfigMap.

false

v1.ConfigMapKeySelector

secretKeyRef

Selects a key of a secret in the pod’s namespace

false

v1.SecretKeySelector

-

v1.FlexVolumeSource

@@ -3682,9 +2005,9 @@ Populated by the system when a graceful deletion is requested. Read-only. More i
-

v1.HostAlias

+

v1.EnvVarSource

-

HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the pod’s hosts file.

+

EnvVarSource represents a source for the value of an EnvVar.

@@ -3705,17 +2028,31 @@ Populated by the system when a graceful deletion is requested. Read-only. More i - - + + - + - - + + - + + + + + + + + + + + + + + + @@ -3797,95 +2134,6 @@ Populated by the system when a graceful deletion is requested. Read-only. More i

ip

IP address of the host file entry.

fieldRef

Selects a field of the pod: supports metadata.name, metadata.namespace, metadata.labels, metadata.annotations, spec.nodeName, spec.serviceAccountName, status.hostIP, status.podIP.

false

string

v1.ObjectFieldSelector

hostnames

Hostnames for the the above IP address.

resourceFieldRef

Selects a resource of the container: only resources limits and requests (limits.cpu, limits.memory, requests.cpu and requests.memory) are currently supported.

false

string array

v1.ResourceFieldSelector

configMapKeyRef

Selects a key of a ConfigMap.

false

v1.ConfigMapKeySelector

secretKeyRef

Selects a key of a secret in the pod’s namespace

false

v1.SecretKeySelector

-
-
-

v1.PodTemplateSpec

-
-

PodTemplateSpec describes the data a pod should have when created from a template

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

metadata

Standard object’s metadata. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata

false

v1.ObjectMeta

spec

Specification of the desired behavior of the pod. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status

false

v1.PodSpec

- -
-
-

v1.KeyToPath

-
-

Maps a string key to a path within a volume.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

key

The key to project.

true

string

path

The relative path of the file to map the key to. May not be an absolute path. May not contain the path element ... May not start with the string ...

true

string

mode

Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.

false

integer (int32)

-

v1.AzureDiskVolumeSource

@@ -3950,9 +2198,9 @@ Populated by the system when a graceful deletion is requested. Read-only. More i
-

v1.NodeSelector

+

v1.KeyToPath

-

A node selector represents the union of the results of one or more label queries over a set of nodes; that is, it represents the OR of the selectors represented by the node selector terms.

+

Maps a string key to a path within a volume.

@@ -3973,10 +2221,24 @@ Populated by the system when a graceful deletion is requested. Read-only. More i - - + + - + + + + + + + + + + + + + + + @@ -4092,12 +2354,6 @@ Populated by the system when a graceful deletion is requested. Read-only. More i

nodeSelectorTerms

Required. A list of node selector terms. The terms are ORed.

key

The key to project.

true

v1.NodeSelectorTerm array

string

path

The relative path of the file to map the key to. May not be an absolute path. May not contain the path element ... May not start with the string ...

true

string

mode

Optional: mode bits to use on this file, must be a value between 0 and 0777. If not specified, the volume defaultMode will be used. This might be in conflict with other options that affect the file mode, like fsGroup, and the result can be other mode bits set.

false

integer (int32)

-
-
-

v1.Patch

-
-

Patch is provided to give a concrete name and type to the Kubernetes PATCH request body.

-

v1.DeleteOptions

@@ -4383,50 +2639,6 @@ Populated by the system when a graceful deletion is requested. Read-only. More i -
-
-

v1.ConfigMapEnvSource

-
-

ConfigMapEnvSource selects a ConfigMap to populate the environment variables with.

-
-
-

The contents of the target ConfigMap’s Data field will represent the key-value pairs as environment variables.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names

false

string

optional

Specify whether the ConfigMap must be defined

false

boolean

false

-

v1.ResourceFieldSelector

@@ -4523,123 +2735,6 @@ Populated by the system when a graceful deletion is requested. Read-only. More i -
-
-

v1.ObjectReference

-
-

ObjectReference contains enough information to let you inspect or modify the referred object.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

kind

Kind of the referent. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds

false

string

namespace

Namespace of the referent. More info: http://kubernetes.io/docs/user-guide/namespaces

false

string

name

Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names

false

string

uid

UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids

false

string

apiVersion

API version of the referent.

false

string

resourceVersion

Specific resourceVersion to which this reference is made, if any. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#concurrency-control-and-consistency

false

string

fieldPath

If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.

false

string

- -
-
-

v1.WeightedPodAffinityTerm

-
-

The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

weight

weight associated with matching the corresponding podAffinityTerm, in the range 1-100.

true

integer (int32)

podAffinityTerm

Required. A pod affinity term, associated with the corresponding weight.

true

v1.PodAffinityTerm

-

v1.Probe

@@ -4723,6 +2818,47 @@ Populated by the system when a graceful deletion is requested. Read-only. More i +
+
+

v1.WeightedPodAffinityTerm

+
+

The weights of all of the matched WeightedPodAffinityTerm fields are added per-node to find the most preferred node(s)

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

weight

weight associated with matching the corresponding podAffinityTerm, in the range 1-100.

true

integer (int32)

podAffinityTerm

Required. A pod affinity term, associated with the corresponding weight.

true

v1.PodAffinityTerm

+

v1.SecretKeySelector

@@ -4771,92 +2907,10 @@ Populated by the system when a graceful deletion is requested. Read-only. More i -
-
-

v1.NodeAffinity

-
-

Node affinity is a group of node affinity scheduling rules.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

requiredDuringSchedulingIgnoredDuringExecution

If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.

false

v1.NodeSelector

preferredDuringSchedulingIgnoredDuringExecution

The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.

false

v1.PreferredSchedulingTerm array

-

v1.Capability

-
-
-

v1.PreferredSchedulingTerm

-
-

An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it’s a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

weight

Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.

true

integer (int32)

preference

A node selector term, associated with the corresponding weight.

true

v1.NodeSelectorTerm

-

v1.DownwardAPIVolumeFile

@@ -4912,68 +2966,6 @@ Populated by the system when a graceful deletion is requested. Read-only. More i -
-
-

v1.ContainerPort

-
-

ContainerPort represents a network port in a single container.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.

false

string

hostPort

Number of port to expose on the host. If specified, this must be a valid port number, 0 < x < 65536. If HostNetwork is specified, this must match ContainerPort. Most containers do not need this.

false

integer (int32)

containerPort

Number of port to expose on the pod’s IP address. This must be a valid port number, 0 < x < 65536.

true

integer (int32)

protocol

Protocol for port. Must be UDP or TCP. Defaults to "TCP".

false

string

hostIP

What host IP to bind the external port to.

false

string

-

v1.PodSpec

@@ -5162,6 +3154,68 @@ Populated by the system when a graceful deletion is requested. Read-only. More i +
+
+

v1.ContainerPort

+
+

ContainerPort represents a network port in a single container.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

name

If specified, this must be an IANA_SVC_NAME and unique within the pod. Each named port in a pod must have a unique name. Name for the port that can be referred to by services.

false

string

hostPort

Number of port to expose on the host. If specified, this must be a valid port number, 0 < x < 65536. If HostNetwork is specified, this must match ContainerPort. Most containers do not need this.

false

integer (int32)

containerPort

Number of port to expose on the pod’s IP address. This must be a valid port number, 0 < x < 65536.

true

integer (int32)

protocol

Protocol for port. Must be UDP or TCP. Defaults to "TCP".

false

string

hostIP

What host IP to bind the external port to.

false

string

+

v1.Lifecycle

@@ -5203,157 +3257,6 @@ Populated by the system when a graceful deletion is requested. Read-only. More i -
-
-

v1.ConfigMapKeySelector

-
-

Selects a key from a ConfigMap.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

name

Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names

false

string

key

The key to select.

true

string

optional

Specify whether the ConfigMap or it’s key must be defined

false

boolean

false

- -
-
-

v2alpha1.CronJobList

-
-

CronJobList is a collection of cron jobs.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#resources

false

string

metadata

Standard list metadata. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata

false

v1.ListMeta

items

items is the list of CronJobs.

true

v2alpha1.CronJob array

- -
-
-

v1.Handler

-
-

Handler defines a specific action that should be taken

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

exec

One and only one of the following should be specified. Exec specifies the action to take.

false

v1.ExecAction

httpGet

HTTPGet specifies the http request to perform.

false

v1.HTTPGetAction

tcpSocket

TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported

false

v1.TCPSocketAction

-

v1.GlusterfsVolumeSource

@@ -5402,6 +3305,54 @@ Populated by the system when a graceful deletion is requested. Read-only. More i +
+
+

v1.Handler

+
+

Handler defines a specific action that should be taken

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

exec

One and only one of the following should be specified. Exec specifies the action to take.

false

v1.ExecAction

httpGet

HTTPGet specifies the http request to perform.

false

v1.HTTPGetAction

tcpSocket

TCPSocket specifies an action involving a TCP port. TCP hooks not yet supported

false

v1.TCPSocketAction

+

v1.Toleration

@@ -5516,72 +3467,6 @@ Examples:
-
-
-

v2alpha1.CronJob

-
-

CronJob represents the configuration of a single cron job.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#resources

false

string

metadata

Standard object’s metadata. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata

false

v1.ObjectMeta

spec

Specification of the desired behavior of a cron job, including the schedule. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status

false

v2alpha1.CronJobSpec

status

Current status of a cron job. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status

false

v2alpha1.CronJobStatus

- -
-
-

v1.AzureDataDiskCachingMode

-

v1.RBDVolumeSource

@@ -5665,6 +3550,2129 @@ Examples:
+
+
+

v1.ConfigMapProjection

+
+

Adapts a ConfigMap into a projected volume.

+
+
+

The contents of the target ConfigMap’s Data field will be presented in a projected volume as files using the keys in the Data field as the file names, unless the items element is populated with specific mappings of keys to paths. Note that this is identical to a configmap volume source without the default mode.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

name

Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names

false

string

items

If unspecified, each key-value pair in the Data field of the referenced ConfigMap will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the ConfigMap, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the .. path or start with ...

false

v1.KeyToPath array

optional

Specify whether the ConfigMap or it’s keys must be defined

false

boolean

false

+ +
+
+

types.UnixUserID

+ +
+
+

v1.PhotonPersistentDiskVolumeSource

+
+

Represents a Photon Controller persistent disk resource.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

pdID

ID that identifies Photon Controller persistent disk

true

string

fsType

Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.

false

string

+ +
+
+

v1.ScaleIOVolumeSource

+
+

ScaleIOVolumeSource represents a persistent ScaleIO volume

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

gateway

The host address of the ScaleIO API Gateway.

true

string

system

The name of the storage system as configured in ScaleIO.

true

string

secretRef

SecretRef references to the secret for ScaleIO user and other sensitive information. If this is not provided, Login operation will fail.

true

v1.LocalObjectReference

sslEnabled

Flag to enable/disable SSL communication with Gateway, default false

false

boolean

false

protectionDomain

The name of the Protection Domain for the configured storage (defaults to "default").

false

string

storagePool

The Storage Pool associated with the protection domain (defaults to "default").

false

string

storageMode

Indicates whether the storage for a volume should be thick or thin (defaults to "thin").

false

string

volumeName

The name of a volume already created in the ScaleIO system that is associated with this volume source.

false

string

fsType

Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.

false

string

readOnly

Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.

false

boolean

false

+ +
+
+

v1.Status

+
+

Status is a return value for calls that don’t return other objects.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#resources

false

string

metadata

Standard list metadata. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds

false

v1.ListMeta

status

Status of the operation. One of: "Success" or "Failure". More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status

false

string

message

A human-readable description of the status of this operation.

false

string

reason

A machine-readable description of why this operation is in the "Failure" status. If this value is empty there is no information available. A Reason clarifies an HTTP status code but does not override it.

false

string

details

Extended data associated with the reason. Each reason may define its own extended details. This field is optional and the data returned is not guaranteed to conform to any schema except that defined by the reason type.

false

v1.StatusDetails

code

Suggested HTTP return code for this status, 0 if not set.

false

integer (int32)

+ +
+
+

v1.NFSVolumeSource

+
+

Represents an NFS mount that lasts the lifetime of a pod. NFS volumes do not support ownership management or SELinux relabeling.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

server

Server is the hostname or IP address of the NFS server. More info: http://kubernetes.io/docs/user-guide/volumes#nfs

true

string

path

Path that is exported by the NFS server. More info: http://kubernetes.io/docs/user-guide/volumes#nfs

true

string

readOnly

ReadOnly here will force the NFS export to be mounted with read-only permissions. Defaults to false. More info: http://kubernetes.io/docs/user-guide/volumes#nfs

false

boolean

false

+ +
+
+

types.UnixGroupID

+ +
+
+

v1.HTTPHeader

+
+

HTTPHeader describes a custom header to be used in HTTP probes

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

name

The header field name

true

string

value

The header field value

true

string

+ +
+
+

v1.FCVolumeSource

+
+

Represents a Fibre Channel volume. Fibre Channel volumes can only be mounted as read/write once. Fibre Channel volumes support ownership management and SELinux relabeling.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

targetWWNs

Required: FC target worldwide names (WWNs)

true

string array

lun

Required: FC target lun number

true

integer (int32)

fsType

Filesystem type to mount. Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified.

false

string

readOnly

Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.

false

boolean

false

+ +
+
+

v1.PodAntiAffinity

+
+

Pod anti affinity is a group of inter pod anti affinity scheduling rules.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

requiredDuringSchedulingIgnoredDuringExecution

NOT YET IMPLEMENTED. TODO: Uncomment field once it is implemented. If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system will try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied. RequiredDuringSchedulingRequiredDuringExecution []PodAffinityTerm json:"requiredDuringSchedulingRequiredDuringExecution,omitempty" If the anti-affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the anti-affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to a pod label update), the system may or may not try to eventually evict the pod from its node. When there are multiple elements, the lists of nodes corresponding to each podAffinityTerm are intersected, i.e. all terms must be satisfied.

false

v1.PodAffinityTerm array

preferredDuringSchedulingIgnoredDuringExecution

The scheduler will prefer to schedule pods to nodes that satisfy the anti-affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling anti-affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node has pods which matches the corresponding podAffinityTerm; the node(s) with the highest sum are the most preferred.

false

v1.WeightedPodAffinityTerm array

+ +
+
+

v1.DeletionPropagation

+ +
+
+

v1.TCPSocketAction

+
+

TCPSocketAction describes an action based on opening a socket

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

port

Number or name of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.

true

string

host

Optional: Host name to connect to, defaults to the pod IP.

false

string

+ +
+
+

v1.HTTPGetAction

+
+

HTTPGetAction describes an action based on HTTP Get requests.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

path

Path to access on the HTTP server.

false

string

port

Name or number of the port to access on the container. Number must be in the range 1 to 65535. Name must be an IANA_SVC_NAME.

true

string

host

Host name to connect to, defaults to the pod IP. You probably want to set "Host" in httpHeaders instead.

false

string

scheme

Scheme to use for connecting to the host. Defaults to HTTP.

false

string

httpHeaders

Custom headers to set in the request. HTTP allows repeated headers.

false

v1.HTTPHeader array

+ +
+
+

v1.StatusDetails

+
+

StatusDetails is a set of additional properties that MAY be set by the server to provide additional information about a response. The Reason field of a Status object defines what attributes will be set. Clients must ignore fields that do not match the defined type of each attribute, and should assume that any attribute may be empty, invalid, or under defined.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

name

The name attribute of the resource associated with the status StatusReason (when there is a single name which can be described).

false

string

group

The group attribute of the resource associated with the status StatusReason.

false

string

kind

The kind attribute of the resource associated with the status StatusReason. On some operations may differ from the requested resource Kind. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds

false

string

causes

The Causes array includes more details associated with the StatusReason failure. Not all StatusReasons may provide detailed causes.

false

v1.StatusCause array

retryAfterSeconds

If specified, the time in seconds before the operation should be retried.

false

integer (int32)

+ +
+
+

v1.Container

+
+

A single application container that you want to run within a pod.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

name

Name of the container specified as a DNS_LABEL. Each container in a pod must have a unique name (DNS_LABEL). Cannot be updated.

true

string

image

Docker image name. More info: http://kubernetes.io/docs/user-guide/images

false

string

command

Entrypoint array. Not executed within a shell. The docker image’s ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container’s environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/containers#containers-and-commands

false

string array

args

Arguments to the entrypoint. The docker image’s CMD is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container’s environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/containers#containers-and-commands

false

string array

workingDir

Container’s working directory. If not specified, the container runtime’s default will be used, which might be configured in the container image. Cannot be updated.

false

string

ports

List of ports to expose from the container. Exposing a port here gives the system additional information about the network connections a container uses, but is primarily informational. Not specifying a port here DOES NOT prevent that port from being exposed. Any port which is listening on the default "0.0.0.0" address inside a container will be accessible from the network. Cannot be updated.

false

v1.ContainerPort array

envFrom

List of sources to populate environment variables in the container. The keys defined within a source must be a C_IDENTIFIER. All invalid keys will be reported as an event when the container is starting. When a key exists in multiple sources, the value associated with the last source will take precedence. Values defined by an Env with a duplicate key will take precedence. Cannot be updated.

false

v1.EnvFromSource array

env

List of environment variables to set in the container. Cannot be updated.

false

v1.EnvVar array

resources

Compute Resources required by this container. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/persistent-volumes#resources

false

v1.ResourceRequirements

volumeMounts

Pod volumes to mount into the container’s filesystem. Cannot be updated.

false

v1.VolumeMount array

livenessProbe

Periodic probe of container liveness. Container will be restarted if the probe fails. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/pod-states#container-probes

false

v1.Probe

readinessProbe

Periodic probe of container service readiness. Container will be removed from service endpoints if the probe fails. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/pod-states#container-probes

false

v1.Probe

lifecycle

Actions that the management system should take in response to container lifecycle events. Cannot be updated.

false

v1.Lifecycle

terminationMessagePath

Optional: Path at which the file to which the container’s termination message will be written is mounted into the container’s filesystem. Message written is intended to be brief final status, such as an assertion failure message. Will be truncated by the node if greater than 4096 bytes. The total message length across all containers will be limited to 12kb. Defaults to /dev/termination-log. Cannot be updated.

false

string

terminationMessagePolicy

Indicate how the termination message should be populated. File will use the contents of terminationMessagePath to populate the container status message on both success and failure. FallbackToLogsOnError will use the last chunk of container log output if the termination message file is empty and the container exited with an error. The log output is limited to 2048 bytes or 80 lines, whichever is smaller. Defaults to File. Cannot be updated.

false

string

imagePullPolicy

Image pull policy. One of Always, Never, IfNotPresent. Defaults to Always if :latest tag is specified, or IfNotPresent otherwise. Cannot be updated. More info: http://kubernetes.io/docs/user-guide/images#updating-images

false

string

securityContext

Security options the pod should run with. More info: http://releases.k8s.io/HEAD/docs/design/security_context.md

false

v1.SecurityContext

stdin

Whether this container should allocate a buffer for stdin in the container runtime. If this is not set, reads from stdin in the container will always result in EOF. Default is false.

false

boolean

false

stdinOnce

Whether the container runtime should close the stdin channel after it has been opened by a single attach. When stdin is true the stdin stream will remain open across multiple attach sessions. If stdinOnce is set to true, stdin is opened on container start, is empty until the first client attaches to stdin, and then remains open and accepts data until the client disconnects, at which time stdin is closed and remains closed until the container is restarted. If this flag is false, a container processes that reads from stdin will never receive an EOF. Default is false

false

boolean

false

tty

Whether this container should allocate a TTY for itself, also requires stdin to be true. Default is false.

false

boolean

false

+ +
+
+

v1.PodSecurityContext

+
+

PodSecurityContext holds pod-level security attributes and common container settings. Some fields are also present in container.securityContext. Field values of container.securityContext take precedence over field values of PodSecurityContext.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

seLinuxOptions

The SELinux context to be applied to all containers. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.

false

v1.SELinuxOptions

runAsUser

The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.

false

types.UnixUserID

runAsNonRoot

Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.

false

boolean

false

supplementalGroups

A list of groups applied to the first process run in each container, in addition to the container’s primary GID. If unspecified, no groups will be added to any container.

false

types.UnixGroupID array

fsGroup

A special supplemental group that applies to all containers in a pod. Some volume types allow the Kubelet to change the ownership of that volume to be owned by the pod:
+
+1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR’d with rw-rw

false

types.UnixGroupID

+ +
+
+

v1.OwnerReference

+
+

OwnerReference contains enough information to let you identify an owning object. Currently, an owning object must be in the same namespace, so there is no namespace field.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

apiVersion

API version of the referent.

true

string

kind

Kind of the referent. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds

true

string

name

Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names

true

string

uid

UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids

true

string

controller

If true, this reference points to the managing controller.

false

boolean

false

blockOwnerDeletion

If true, AND if the owner has the "foregroundDeletion" finalizer, then the owner cannot be deleted from the key-value store until this reference is removed. Defaults to false. To set this field, a user needs "delete" permission of the owner, otherwise 422 (Unprocessable Entity) will be returned.

false

boolean

false

+ +
+
+

v1.APIResource

+
+

APIResource specifies the name of a resource and whether it is namespaced.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

name

name is the plural name of the resource.

true

string

singularName

singularName is the singular name of the resource. This allows clients to handle plural and singular opaquely. The singularName is more correct for reporting status on a single item and both singular and plural are allowed from the kubectl CLI interface.

true

string

namespaced

namespaced indicates if a resource is namespaced or not.

true

boolean

false

kind

kind is the kind for the resource (e.g. Foo is the kind for a resource foo)

true

string

verbs

verbs is a list of supported kube verbs (this includes get, list, watch, create, update, patch, delete, deletecollection, and proxy)

true

string array

shortNames

shortNames is a list of suggested short names of the resource.

false

string array

+ +
+
+

v1.NodeSelectorRequirement

+
+

A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

key

The label key that the selector applies to.

true

string

operator

Represents a key’s relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt.

true

string

values

An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.

false

string array

+ +
+
+

v1.HostPathVolumeSource

+
+

Represents a host path mapped into a pod. Host path volumes do not support ownership management or SELinux relabeling.

+
+ +++++++ + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

path

Path of the directory on the host. More info: http://kubernetes.io/docs/user-guide/volumes#hostpath

true

string

+ +
+
+

v1.SecretProjection

+
+

Adapts a secret into a projected volume.

+
+
+

The contents of the target Secret’s Data field will be presented in a projected volume as files using the keys in the Data field as the file names. Note that this is identical to a secret volume source without the default mode.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

name

Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names

false

string

items

If unspecified, each key-value pair in the Data field of the referenced Secret will be projected into the volume as a file whose name is the key and content is the value. If specified, the listed keys will be projected into the specified paths, and unlisted keys will not be present. If a key is specified which is not present in the Secret, the volume setup will error unless it is marked optional. Paths must be relative and may not contain the .. path or start with ...

false

v1.KeyToPath array

optional

Specify whether the Secret or its key must be defined

false

boolean

false

+ +
+
+

v1.CinderVolumeSource

+
+

Represents a cinder volume resource in Openstack. A Cinder volume must exist before mounting to a container. The volume must also be in the same region as the kubelet. Cinder volumes support ownership management and SELinux relabeling.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

volumeID

volume id used to identify the volume in cinder More info: http://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md

true

string

fsType

Filesystem type to mount. Must be a filesystem type supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: http://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md

false

string

readOnly

Optional: Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts. More info: http://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md

false

boolean

false

+ +
+
+

v1.SecurityContext

+
+

SecurityContext holds security configuration that will be applied to a container. Some fields are present in both SecurityContext and PodSecurityContext. When both are set, the values in SecurityContext take precedence.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

capabilities

The capabilities to add/drop when running containers. Defaults to the default set of capabilities granted by the container runtime.

false

v1.Capabilities

privileged

Run container in privileged mode. Processes in privileged containers are essentially equivalent to root on the host. Defaults to false.

false

boolean

false

seLinuxOptions

The SELinux context to be applied to the container. If unspecified, the container runtime will allocate a random SELinux context for each container. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.

false

v1.SELinuxOptions

runAsUser

The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.

false

types.UnixUserID

runAsNonRoot

Indicates that the container must run as a non-root user. If true, the Kubelet will validate the image at runtime to ensure that it does not run as UID 0 (root) and fail to start the container if it does. If unset or false, no such validation will be performed. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.

false

boolean

false

readOnlyRootFilesystem

Whether this container has a read-only root filesystem. Default is false.

false

boolean

false

+ +
+
+

v1.AWSElasticBlockStoreVolumeSource

+
+

Represents a Persistent Disk resource in AWS.

+
+
+

An AWS EBS disk must exist before mounting to a container. The disk must also be in the same AWS zone as the kubelet. An AWS EBS disk can only be mounted as read/write once. AWS EBS volumes support ownership management and SELinux relabeling.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

volumeID

Unique ID of the persistent disk resource in AWS (Amazon EBS volume). More info: http://kubernetes.io/docs/user-guide/volumes#awselasticblockstore

true

string

fsType

Filesystem type of the volume that you want to mount. Tip: Ensure that the filesystem type is supported by the host operating system. Examples: "ext4", "xfs", "ntfs". Implicitly inferred to be "ext4" if unspecified. More info: http://kubernetes.io/docs/user-guide/volumes#awselasticblockstore

false

string

partition

The partition in the volume that you want to mount. If omitted, the default is to mount by volume name. Examples: For volume /dev/sda1, you specify the partition as "1". Similarly, the volume partition for /dev/sda is "0" (or you can leave the property empty).

false

integer (int32)

readOnly

Specify "true" to force and set the ReadOnly property in VolumeMounts to "true". If omitted, the default is "false". More info: http://kubernetes.io/docs/user-guide/volumes#awselasticblockstore

false

boolean

false

+ +
+
+

v1.QuobyteVolumeSource

+
+

Represents a Quobyte mount that lasts the lifetime of a pod. Quobyte volumes do not support ownership management or SELinux relabeling.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

registry

Registry represents a single or multiple Quobyte Registry services specified as a string as host:port pair (multiple entries are separated with commas) which acts as the central registry for volumes

true

string

volume

Volume is a string that references an already created Quobyte volume by name.

true

string

readOnly

ReadOnly here will force the Quobyte volume to be mounted with read-only permissions. Defaults to false.

false

boolean

false

user

User to map volume access to Defaults to serivceaccount user

false

string

group

Group to map volume access to Default is no group

false

string

+ +
+
+

v2alpha1.JobTemplateSpec

+
+

JobTemplateSpec describes the data a Job should have when created from a template

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

metadata

Standard object’s metadata of the jobs created from this template. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata

false

v1.ObjectMeta

spec

Specification of the desired behavior of the job. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status

false

v1.JobSpec

+ +
+
+

v1.WatchEvent

+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

type

true

string

object

true

string

+ +
+
+

v2alpha1.CronJobStatus

+
+

CronJobStatus represents the current state of a cron job.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

active

A list of pointers to currently running jobs.

false

v1.ObjectReference array

lastScheduleTime

Information when was the last time the job was successfully scheduled.

false

string

+ +
+
+

v1.LabelSelectorRequirement

+
+

A label selector requirement is a selector that contains values, a key, and an operator that relates the key and values.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

key

key is the label key that the selector applies to.

true

string

operator

operator represents a key’s relationship to a set of values. Valid operators ard In, NotIn, Exists and DoesNotExist.

true

string

values

values is an array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. This array is replaced during a strategic merge patch.

false

string array

+ +
+
+

v1.EnvVar

+
+

EnvVar represents an environment variable present in a Container.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

name

Name of the environment variable. Must be a C_IDENTIFIER.

true

string

value

Variable references $(VAR_NAME) are expanded using the previous defined environment variables in the container and any service environment variables. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. Defaults to "".

false

string

valueFrom

Source for the environment variable’s value. Cannot be used if value is not empty.

false

v1.EnvVarSource

+ +
+
+

v1.ResourceRequirements

+
+

ResourceRequirements describes the compute resource requirements.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

limits

Limits describes the maximum amount of compute resources allowed. More info: http://kubernetes.io/docs/user-guide/compute-resources/

false

object

requests

Requests describes the minimum amount of compute resources required. If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, otherwise to an implementation-defined value. More info: http://kubernetes.io/docs/user-guide/compute-resources/

false

object

+ +
+
+

v1.HostAlias

+
+

HostAlias holds the mapping between IP and hostnames that will be injected as an entry in the pod’s hosts file.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

ip

IP address of the host file entry.

false

string

hostnames

Hostnames for the the above IP address.

false

string array

+ +
+
+

v1.PodTemplateSpec

+
+

PodTemplateSpec describes the data a pod should have when created from a template

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

metadata

Standard object’s metadata. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata

false

v1.ObjectMeta

spec

Specification of the desired behavior of the pod. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status

false

v1.PodSpec

+ +
+
+

v1.NodeSelector

+
+

A node selector represents the union of the results of one or more label queries over a set of nodes; that is, it represents the OR of the selectors represented by the node selector terms.

+
+ +++++++ + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

nodeSelectorTerms

Required. A list of node selector terms. The terms are ORed.

true

v1.NodeSelectorTerm array

+ +
+
+

v1.Patch

+
+

Patch is provided to give a concrete name and type to the Kubernetes PATCH request body.

+
+
+
+

v1.ConfigMapEnvSource

+
+

ConfigMapEnvSource selects a ConfigMap to populate the environment variables with.

+
+
+

The contents of the target ConfigMap’s Data field will represent the key-value pairs as environment variables.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

name

Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names

false

string

optional

Specify whether the ConfigMap must be defined

false

boolean

false

+ +
+
+

v1.ObjectReference

+
+

ObjectReference contains enough information to let you inspect or modify the referred object.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

kind

Kind of the referent. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds

false

string

namespace

Namespace of the referent. More info: http://kubernetes.io/docs/user-guide/namespaces

false

string

name

Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names

false

string

uid

UID of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#uids

false

string

apiVersion

API version of the referent.

false

string

resourceVersion

Specific resourceVersion to which this reference is made, if any. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#concurrency-control-and-consistency

false

string

fieldPath

If referring to a piece of an object instead of an entire object, this string should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. For example, if the object reference is to a container within a pod, this would take on a value like: "spec.containers{name}" (where "name" refers to the name of the container that triggered the event) or if no container name is specified "spec.containers[2]" (container with index 2 in this pod). This syntax is chosen only to have some well-defined way of referencing a part of an object.

false

string

+ +
+
+

v1.NodeAffinity

+
+

Node affinity is a group of node affinity scheduling rules.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

requiredDuringSchedulingIgnoredDuringExecution

If the affinity requirements specified by this field are not met at scheduling time, the pod will not be scheduled onto the node. If the affinity requirements specified by this field cease to be met at some point during pod execution (e.g. due to an update), the system may or may not try to eventually evict the pod from its node.

false

v1.NodeSelector

preferredDuringSchedulingIgnoredDuringExecution

The scheduler will prefer to schedule pods to nodes that satisfy the affinity expressions specified by this field, but it may choose a node that violates one or more of the expressions. The node that is most preferred is the one with the greatest sum of weights, i.e. for each node that meets all of the scheduling requirements (resource request, requiredDuringScheduling affinity expressions, etc.), compute a sum by iterating through the elements of this field and adding "weight" to the sum if the node matches the corresponding matchExpressions; the node(s) with the highest sum are the most preferred.

false

v1.PreferredSchedulingTerm array

+ +
+
+

v1.PreferredSchedulingTerm

+
+

An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it’s a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

weight

Weight associated with matching the corresponding nodeSelectorTerm, in the range 1-100.

true

integer (int32)

preference

A node selector term, associated with the corresponding weight.

true

v1.NodeSelectorTerm

+ +
+
+

v2alpha1.CronJobList

+
+

CronJobList is a collection of cron jobs.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#resources

false

string

metadata

Standard list metadata. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata

false

v1.ListMeta

items

items is the list of CronJobs.

true

v2alpha1.CronJob array

+ +
+
+

v1.ConfigMapKeySelector

+
+

Selects a key from a ConfigMap.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

name

Name of the referent. More info: http://kubernetes.io/docs/user-guide/identifiers#names

false

string

key

The key to select.

true

string

optional

Specify whether the ConfigMap or it’s key must be defined

false

boolean

false

+ +
+
+

v2alpha1.CronJob

+
+

CronJob represents the configuration of a single cron job.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

kind

Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#types-kinds

false

string

apiVersion

APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#resources

false

string

metadata

Standard object’s metadata. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#metadata

false

v1.ObjectMeta

spec

Specification of the desired behavior of a cron job, including the schedule. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status

false

v2alpha1.CronJobSpec

status

Current status of a cron job. More info: http://releases.k8s.io/HEAD/docs/devel/api-conventions.md#spec-and-status

false

v2alpha1.CronJobStatus

+ +
+
+

v1.AzureDataDiskCachingMode

+

any

@@ -5677,7 +5685,7 @@ Examples:
diff --git a/docs/api-reference/extensions/v1beta1/definitions.html b/docs/api-reference/extensions/v1beta1/definitions.html index 41cb42a21a..f7ecff76f1 100755 --- a/docs/api-reference/extensions/v1beta1/definitions.html +++ b/docs/api-reference/extensions/v1beta1/definitions.html @@ -2196,68 +2196,6 @@ Populated by the system when a graceful deletion is requested. Read-only. More i - -
-

v1beta1.DaemonSetSpec

-
-

DaemonSetSpec is the specification of a daemon set.

-
- ------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
NameDescriptionRequiredSchemaDefault

selector

A label query over pods that are managed by the daemon set. Must match in order to be controlled. If empty, defaulted to labels on Pod template. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors

false

v1.LabelSelector

template

An object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template’s node selector (or on every node if no node selector is specified). More info: http://kubernetes.io/docs/user-guide/replication-controller#pod-template

true

v1.PodTemplateSpec

updateStrategy

An update strategy to replace existing DaemonSet pods with new pods.

false

v1beta1.DaemonSetUpdateStrategy

minReadySeconds

The minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready).

false

integer (int32)

templateGeneration

A sequence number representing a specific generation of the template. Populated by the system. It can be set only during the creation.

false

integer (int64)

-

v1beta1.Deployment

@@ -2320,6 +2258,68 @@ Populated by the system when a graceful deletion is requested. Read-only. More i +
+
+

v1beta1.DaemonSetSpec

+
+

DaemonSetSpec is the specification of a daemon set.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

selector

A label query over pods that are managed by the daemon set. Must match in order to be controlled. If empty, defaulted to labels on Pod template. More info: http://kubernetes.io/docs/user-guide/labels#label-selectors

false

v1.LabelSelector

template

An object that describes the pod that will be created. The DaemonSet will create exactly one copy of this pod on every node that matches the template’s node selector (or on every node if no node selector is specified). More info: http://kubernetes.io/docs/user-guide/replication-controller#pod-template

true

v1.PodTemplateSpec

updateStrategy

An update strategy to replace existing DaemonSet pods with new pods.

false

v1beta1.DaemonSetUpdateStrategy

minReadySeconds

The minimum number of seconds for which a newly created DaemonSet pod should be ready without any of its container crashing, for it to be considered available. Defaults to 0 (pod will be considered available as soon as it is ready).

false

integer (int32)

templateGeneration

A sequence number representing a specific generation of the template. Populated by the system. It can be set only during the creation.

false

integer (int64)

+

v1.AzureFileVolumeSource

@@ -4995,6 +4995,10 @@ Examples:
+
+
+

types.UnixUserID

+

v1.ScaleIOVolumeSource

@@ -5461,6 +5465,10 @@ Examples:
+
+
+

types.UnixGroupID

+

v1beta1.DeploymentRollback

@@ -6252,7 +6260,7 @@ Both these may change in the future. Incoming requests are matched against the h

runAsUser

The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.

false

-

integer (int64)

+

types.UnixUserID

@@ -6266,7 +6274,7 @@ Both these may change in the future. Incoming requests are matched against the h

supplementalGroups

A list of groups applied to the first process run in each container, in addition to the container’s primary GID. If unspecified, no groups will be added to any container.

false

-

integer (int32) array

+

types.UnixGroupID array

@@ -6275,7 +6283,7 @@ Both these may change in the future. Incoming requests are matched against the h
1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR’d with rw-rw

false

-

integer (int64)

+

types.UnixGroupID

@@ -6883,7 +6891,7 @@ Both these may change in the future. Incoming requests are matched against the h

runAsUser

The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.

false

-

integer (int64)

+

types.UnixUserID

@@ -7986,7 +7994,7 @@ Both these may change in the future. Incoming requests are matched against the h
diff --git a/docs/api-reference/v1/definitions.html b/docs/api-reference/v1/definitions.html index 59f4b4c2f8..d7bd681672 100755 --- a/docs/api-reference/v1/definitions.html +++ b/docs/api-reference/v1/definitions.html @@ -6039,6 +6039,10 @@ Examples:
+ +
+

types.UnixUserID

+

v1.PhotonPersistentDiskVolumeSource

@@ -6397,6 +6401,10 @@ Examples:
+
+
+

types.UnixGroupID

+

v1.HTTPHeader

@@ -7042,7 +7050,7 @@ Examples:

runAsUser

The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in SecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence for that container.

false

-

integer (int64)

+

types.UnixUserID

@@ -7056,7 +7064,7 @@ Examples:

supplementalGroups

A list of groups applied to the first process run in each container, in addition to the container’s primary GID. If unspecified, no groups will be added to any container.

false

-

integer (int32) array

+

types.UnixGroupID array

@@ -7065,7 +7073,7 @@ Examples:

1. The owning GID will be the FSGroup 2. The setgid bit is set (new files created in the volume will be owned by FSGroup) 3. The permission bits are OR’d with rw-rw

false

-

integer (int64)

+

types.UnixGroupID

@@ -8092,7 +8100,7 @@ Examples:

runAsUser

The UID to run the entrypoint of the container process. Defaults to user specified in image metadata if unspecified. May also be set in PodSecurityContext. If set in both SecurityContext and PodSecurityContext, the value specified in SecurityContext takes precedence.

false

-

integer (int64)

+

types.UnixUserID

@@ -9919,7 +9927,7 @@ Examples:
diff --git a/pkg/api/types.go b/pkg/api/types.go index 52e6dae81b..984d827855 100644 --- a/pkg/api/types.go +++ b/pkg/api/types.go @@ -2153,7 +2153,7 @@ type PodSecurityContext struct { // PodSecurityContext, the value specified in SecurityContext takes precedence // for that container. // +optional - RunAsUser *int64 + RunAsUser *types.UnixUserID // Indicates that the container must run as a non-root user. // If true, the Kubelet will validate the image at runtime to ensure that it // does not run as UID 0 (root) and fail to start the container if it does. @@ -2166,7 +2166,7 @@ type PodSecurityContext struct { // to the container's primary GID. If unspecified, no groups will be added to // any container. // +optional - SupplementalGroups []int64 + SupplementalGroups []types.UnixGroupID // A special supplemental group that applies to all containers in a pod. // Some volume types allow the Kubelet to change the ownership of that volume // to be owned by the pod: @@ -2177,7 +2177,7 @@ type PodSecurityContext struct { // // If unset, the Kubelet will not modify the ownership and permissions of any volume. // +optional - FSGroup *int64 + FSGroup *types.UnixGroupID } // PodQOSClass defines the supported qos classes of Pods. @@ -3780,7 +3780,7 @@ type SecurityContext struct { // May also be set in PodSecurityContext. If set in both SecurityContext and // PodSecurityContext, the value specified in SecurityContext takes precedence. // +optional - RunAsUser *int64 + RunAsUser *types.UnixUserID // Indicates that the container must run as a non-root user. // If true, the Kubelet will validate the image at runtime to ensure that it // does not run as UID 0 (root) and fail to start the container if it does. diff --git a/pkg/api/v1/generated.pb.go b/pkg/api/v1/generated.pb.go index c309e1f4a2..fb5626bb43 100644 --- a/pkg/api/v1/generated.pb.go +++ b/pkg/api/v1/generated.pb.go @@ -32766,7 +32766,7 @@ func (m *PodSecurityContext) Unmarshal(dAtA []byte) error { if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field RunAsUser", wireType) } - var v int64 + var v k8s_io_apimachinery_pkg_types.UnixUserID for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -32776,7 +32776,7 @@ func (m *PodSecurityContext) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - v |= (int64(b) & 0x7F) << shift + v |= (k8s_io_apimachinery_pkg_types.UnixUserID(b) & 0x7F) << shift if b < 0x80 { break } @@ -32805,7 +32805,7 @@ func (m *PodSecurityContext) Unmarshal(dAtA []byte) error { m.RunAsNonRoot = &b case 4: if wireType == 0 { - var v int64 + var v k8s_io_apimachinery_pkg_types.UnixGroupID for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -32815,7 +32815,7 @@ func (m *PodSecurityContext) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - v |= (int64(b) & 0x7F) << shift + v |= (k8s_io_apimachinery_pkg_types.UnixGroupID(b) & 0x7F) << shift if b < 0x80 { break } @@ -32845,7 +32845,7 @@ func (m *PodSecurityContext) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } for iNdEx < postIndex { - var v int64 + var v k8s_io_apimachinery_pkg_types.UnixGroupID for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -32855,7 +32855,7 @@ func (m *PodSecurityContext) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - v |= (int64(b) & 0x7F) << shift + v |= (k8s_io_apimachinery_pkg_types.UnixGroupID(b) & 0x7F) << shift if b < 0x80 { break } @@ -32869,7 +32869,7 @@ func (m *PodSecurityContext) Unmarshal(dAtA []byte) error { if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field FSGroup", wireType) } - var v int64 + var v k8s_io_apimachinery_pkg_types.UnixGroupID for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -32879,7 +32879,7 @@ func (m *PodSecurityContext) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - v |= (int64(b) & 0x7F) << shift + v |= (k8s_io_apimachinery_pkg_types.UnixGroupID(b) & 0x7F) << shift if b < 0x80 { break } @@ -39518,7 +39518,7 @@ func (m *SecurityContext) Unmarshal(dAtA []byte) error { if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field RunAsUser", wireType) } - var v int64 + var v k8s_io_apimachinery_pkg_types.UnixUserID for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -39528,7 +39528,7 @@ func (m *SecurityContext) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - v |= (int64(b) & 0x7F) << shift + v |= (k8s_io_apimachinery_pkg_types.UnixUserID(b) & 0x7F) << shift if b < 0x80 { break } @@ -43147,702 +43147,704 @@ func init() { } var fileDescriptorGenerated = []byte{ - // 11145 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7d, 0x8c, 0x24, 0xc7, - 0x75, 0x18, 0xae, 0x9e, 0xd9, 0xaf, 0x79, 0xfb, 0x5d, 0xb7, 0x77, 0x5c, 0xae, 0xc8, 0xdb, 0x63, - 0x53, 0xa4, 0x8f, 0xe4, 0x71, 0x57, 0x77, 0x24, 0x45, 0x4a, 0xd4, 0x8f, 0xd6, 0xee, 0xce, 0xee, - 0xdd, 0xea, 0xbe, 0x86, 0x35, 0x7b, 0x77, 0x14, 0xc5, 0x9f, 0xc8, 0xbe, 0xe9, 0xda, 0xd9, 0xe6, - 0xf5, 0x76, 0x0f, 0xbb, 0x7b, 0xf6, 0x6e, 0xa5, 0x08, 0xb0, 0x15, 0x41, 0x4a, 0x00, 0x25, 0x91, - 0xe1, 0x08, 0x08, 0x9c, 0x00, 0x0a, 0x0c, 0xc4, 0x51, 0x3e, 0x1d, 0x45, 0xd0, 0x87, 0x61, 0x39, - 0x1f, 0x8e, 0xe5, 0xc8, 0x40, 0xe2, 0x08, 0x30, 0x12, 0x3b, 0x30, 0xb2, 0xb6, 0x56, 0x88, 0xff, - 0x08, 0x90, 0xfc, 0x11, 0xff, 0x77, 0x09, 0x82, 0xa0, 0x3e, 0xbb, 0xaa, 0x67, 0x66, 0xbb, 0x67, - 0x79, 0xbb, 0x3e, 0x09, 0xf9, 0x6f, 0xa6, 0xde, 0xab, 0x57, 0x1f, 0x5d, 0xf5, 0xea, 0xbd, 0x57, - 0xef, 0xbd, 0x82, 0x73, 0x77, 0x5e, 0x89, 0x17, 0xbc, 0x70, 0xf1, 0x4e, 0xfb, 0x36, 0x89, 0x02, - 0x92, 0x90, 0x78, 0xb1, 0x75, 0xa7, 0xb9, 0xe8, 0xb4, 0xbc, 0xc5, 0x9d, 0xf3, 0x8b, 0x4d, 0x12, - 0x90, 0xc8, 0x49, 0x88, 0xbb, 0xd0, 0x8a, 0xc2, 0x24, 0x44, 0x8f, 0x71, 0xec, 0x85, 0x14, 0x7b, - 0xa1, 0x75, 0xa7, 0xb9, 0xe0, 0xb4, 0xbc, 0x85, 0x9d, 0xf3, 0x73, 0xcf, 0x37, 0xbd, 0x64, 0xab, - 0x7d, 0x7b, 0xa1, 0x11, 0x6e, 0x2f, 0x36, 0xc3, 0x66, 0xb8, 0xc8, 0x2a, 0xdd, 0x6e, 0x6f, 0xb2, - 0x7f, 0xec, 0x0f, 0xfb, 0xc5, 0x89, 0xcd, 0xbd, 0x28, 0x9a, 0x76, 0x5a, 0xde, 0xb6, 0xd3, 0xd8, - 0xf2, 0x02, 0x12, 0xed, 0xaa, 0xc6, 0x23, 0x12, 0x87, 0xed, 0xa8, 0x41, 0xb2, 0x5d, 0x38, 0xb0, - 0x56, 0xbc, 0xb8, 0x4d, 0x12, 0xa7, 0x4b, 0xc7, 0xe7, 0x16, 0x7b, 0xd5, 0x8a, 0xda, 0x41, 0xe2, - 0x6d, 0x77, 0x36, 0xf3, 0x91, 0xbc, 0x0a, 0x71, 0x63, 0x8b, 0x6c, 0x3b, 0x1d, 0xf5, 0x5e, 0xe8, - 0x55, 0xaf, 0x9d, 0x78, 0xfe, 0xa2, 0x17, 0x24, 0x71, 0x12, 0x1d, 0x34, 0xa6, 0x98, 0x44, 0x3b, - 0x24, 0x4a, 0x07, 0x44, 0xee, 0x39, 0xdb, 0x2d, 0x9f, 0x74, 0x1b, 0xd3, 0x25, 0xed, 0xd3, 0x3d, - 0xef, 0x34, 0x9b, 0x11, 0x69, 0x3a, 0x49, 0xa8, 0xd5, 0x75, 0x5a, 0x5e, 0x44, 0x9a, 0x5e, 0x9c, - 0x44, 0x4e, 0xe2, 0x85, 0xc1, 0xe2, 0xce, 0x79, 0xc7, 0x6f, 0x6d, 0x39, 0x1d, 0x94, 0xec, 0x3f, - 0xb4, 0xe0, 0xcc, 0xd2, 0xad, 0xfa, 0xaa, 0xef, 0xc4, 0x89, 0xd7, 0x58, 0xf6, 0xc3, 0xc6, 0x9d, - 0x7a, 0x12, 0x46, 0xe4, 0x66, 0xe8, 0xb7, 0xb7, 0x49, 0x9d, 0x7d, 0x08, 0x74, 0x0e, 0x46, 0x76, - 0xd8, 0xff, 0xf5, 0xea, 0xac, 0x75, 0xc6, 0x3a, 0x5b, 0x59, 0x9e, 0xfa, 0xe1, 0xde, 0xfc, 0x07, - 0xf6, 0xf7, 0xe6, 0x47, 0x6e, 0x8a, 0x72, 0xac, 0x30, 0xd0, 0xd3, 0x30, 0xb4, 0x19, 0x6f, 0xec, - 0xb6, 0xc8, 0x6c, 0x89, 0xe1, 0x4e, 0x08, 0xdc, 0xa1, 0xb5, 0x3a, 0x2d, 0xc5, 0x02, 0x8a, 0x16, - 0xa1, 0xd2, 0x72, 0xa2, 0xc4, 0xa3, 0x1d, 0x9c, 0x2d, 0x9f, 0xb1, 0xce, 0x0e, 0x2e, 0x4f, 0x0b, - 0xd4, 0x4a, 0x4d, 0x02, 0x70, 0x8a, 0x43, 0xbb, 0x11, 0x11, 0xc7, 0xbd, 0x1e, 0xf8, 0xbb, 0xb3, - 0x03, 0x67, 0xac, 0xb3, 0x23, 0x69, 0x37, 0xb0, 0x28, 0xc7, 0x0a, 0xc3, 0xfe, 0x5e, 0x09, 0x46, - 0x96, 0x36, 0x37, 0xbd, 0xc0, 0x4b, 0x76, 0xd1, 0x3b, 0x30, 0x16, 0x84, 0x2e, 0x91, 0xff, 0xd9, - 0x28, 0x46, 0x2f, 0x3c, 0xbb, 0x70, 0xd0, 0xa2, 0x5e, 0xb8, 0xa6, 0xd5, 0x58, 0x9e, 0xda, 0xdf, - 0x9b, 0x1f, 0xd3, 0x4b, 0xb0, 0x41, 0x11, 0xbd, 0x05, 0xa3, 0xad, 0xd0, 0x55, 0x0d, 0x94, 0x58, - 0x03, 0xcf, 0x1c, 0xdc, 0x40, 0x2d, 0xad, 0xb0, 0x3c, 0xb9, 0xbf, 0x37, 0x3f, 0xaa, 0x15, 0x60, - 0x9d, 0x1c, 0xf2, 0x61, 0x92, 0xfe, 0x0d, 0x12, 0x4f, 0xb5, 0x50, 0x66, 0x2d, 0x3c, 0x9f, 0xdf, - 0x82, 0x56, 0x69, 0xf9, 0xc4, 0xfe, 0xde, 0xfc, 0x64, 0xa6, 0x10, 0x67, 0x49, 0xdb, 0x9f, 0x85, - 0x89, 0xa5, 0x24, 0x71, 0x1a, 0x5b, 0xc4, 0xe5, 0xdf, 0x17, 0xbd, 0x08, 0x03, 0x81, 0xb3, 0x4d, - 0xc4, 0xd7, 0x3f, 0x23, 0xa6, 0x7d, 0xe0, 0x9a, 0xb3, 0x4d, 0xee, 0xef, 0xcd, 0x4f, 0xdd, 0x08, - 0xbc, 0xf7, 0xda, 0x62, 0xcd, 0xd0, 0x32, 0xcc, 0xb0, 0xd1, 0x05, 0x00, 0x97, 0xec, 0x78, 0x0d, - 0x52, 0x73, 0x92, 0x2d, 0xb1, 0x1a, 0x90, 0xa8, 0x0b, 0x55, 0x05, 0xc1, 0x1a, 0x96, 0xfd, 0x05, - 0x0b, 0x2a, 0x4b, 0x3b, 0xa1, 0xe7, 0xd6, 0x42, 0x37, 0x46, 0x6d, 0x98, 0x6c, 0x45, 0x64, 0x93, - 0x44, 0xaa, 0x68, 0xd6, 0x3a, 0x53, 0x3e, 0x3b, 0x7a, 0xe1, 0x42, 0xce, 0xb8, 0xcd, 0x4a, 0xab, - 0x41, 0x12, 0xed, 0x2e, 0x3f, 0x22, 0x9a, 0x9e, 0xcc, 0x40, 0x71, 0xb6, 0x0d, 0xfb, 0x97, 0x4a, - 0x70, 0x72, 0xe9, 0xb3, 0xed, 0x88, 0x54, 0xbd, 0xf8, 0x4e, 0x76, 0x2b, 0xb8, 0x5e, 0x7c, 0xe7, - 0x5a, 0x3a, 0x19, 0x6a, 0x0d, 0x56, 0x45, 0x39, 0x56, 0x18, 0xe8, 0x79, 0x18, 0xa6, 0xbf, 0x6f, - 0xe0, 0x75, 0x31, 0xfa, 0x13, 0x02, 0x79, 0xb4, 0xea, 0x24, 0x4e, 0x95, 0x83, 0xb0, 0xc4, 0x41, - 0x57, 0x61, 0xb4, 0xc1, 0x38, 0x47, 0xf3, 0x6a, 0xe8, 0x12, 0xf6, 0x85, 0x2b, 0xcb, 0xcf, 0x51, - 0xf4, 0x95, 0xb4, 0xf8, 0xfe, 0xde, 0xfc, 0x2c, 0xef, 0x9b, 0x20, 0xa1, 0xc1, 0xb0, 0x5e, 0x1f, - 0xd9, 0x6a, 0x23, 0x0e, 0x30, 0x4a, 0xd0, 0x65, 0x13, 0x9e, 0xd5, 0xf6, 0xd4, 0x20, 0xdb, 0x53, - 0x63, 0x3d, 0xf6, 0xd3, 0x3f, 0xb4, 0xc4, 0x9c, 0xac, 0x79, 0xbe, 0xc9, 0x1e, 0x2e, 0x00, 0xc4, - 0xa4, 0x11, 0x91, 0x44, 0x9b, 0x15, 0xf5, 0x99, 0xeb, 0x0a, 0x82, 0x35, 0x2c, 0xba, 0xf9, 0xe3, - 0x2d, 0x27, 0x62, 0xab, 0x45, 0xcc, 0x8d, 0xda, 0xfc, 0x75, 0x09, 0xc0, 0x29, 0x8e, 0xb1, 0xf9, - 0xcb, 0xb9, 0x9b, 0xff, 0xb7, 0x2d, 0x18, 0x5e, 0xf6, 0x02, 0xd7, 0x0b, 0x9a, 0xe8, 0x1d, 0x18, - 0xa1, 0x67, 0x83, 0xeb, 0x24, 0x8e, 0xd8, 0xf7, 0x1f, 0x96, 0x8b, 0x47, 0x67, 0xd5, 0x72, 0xf9, - 0xc4, 0x0b, 0x14, 0x9b, 0x2e, 0xa2, 0xeb, 0xb7, 0xdf, 0x25, 0x8d, 0xe4, 0x2a, 0x49, 0x9c, 0x74, - 0x38, 0x69, 0x19, 0x56, 0x54, 0xd1, 0x0d, 0x18, 0x4a, 0x9c, 0xa8, 0x49, 0x12, 0xb1, 0xed, 0x73, - 0x36, 0x25, 0xa7, 0x81, 0xe9, 0x92, 0x23, 0x41, 0x83, 0xa4, 0x0c, 0x72, 0x83, 0x11, 0xc1, 0x82, - 0x98, 0xdd, 0x80, 0xb1, 0x15, 0xa7, 0xe5, 0xdc, 0xf6, 0x7c, 0x2f, 0xf1, 0x48, 0x8c, 0x7e, 0x0e, - 0xca, 0x8e, 0xeb, 0xb2, 0x0d, 0x50, 0x59, 0x3e, 0xb9, 0xbf, 0x37, 0x5f, 0x5e, 0x72, 0xdd, 0xfb, - 0x7b, 0xf3, 0xa0, 0xb0, 0x76, 0x31, 0xc5, 0x40, 0xcf, 0xc2, 0x80, 0x1b, 0x85, 0xad, 0xd9, 0x12, - 0xc3, 0x3c, 0x45, 0x77, 0x6a, 0x35, 0x0a, 0x5b, 0x19, 0x54, 0x86, 0x63, 0xff, 0xa0, 0x04, 0x68, - 0x85, 0xb4, 0xb6, 0xd6, 0xea, 0xc6, 0x37, 0x3d, 0x0b, 0x23, 0xdb, 0x61, 0xe0, 0x25, 0x61, 0x14, - 0x8b, 0x06, 0xd9, 0xba, 0xb8, 0x2a, 0xca, 0xb0, 0x82, 0xa2, 0x33, 0x30, 0xd0, 0x4a, 0xb7, 0xf7, - 0x98, 0x64, 0x0d, 0x6c, 0x63, 0x33, 0x08, 0xc5, 0x68, 0xc7, 0x24, 0x12, 0xeb, 0x59, 0x61, 0xdc, - 0x88, 0x49, 0x84, 0x19, 0x24, 0x5d, 0x41, 0x74, 0x6d, 0x89, 0xd5, 0x9a, 0x59, 0x41, 0x14, 0x82, - 0x35, 0x2c, 0xf4, 0x36, 0x54, 0xf8, 0x3f, 0x4c, 0x36, 0xd9, 0xd2, 0xcd, 0x65, 0x0a, 0x57, 0xc2, - 0x86, 0xe3, 0x67, 0x27, 0x7f, 0x9c, 0xad, 0x38, 0x49, 0x08, 0xa7, 0x34, 0x8d, 0x15, 0x37, 0x94, - 0xbb, 0xe2, 0xfe, 0x96, 0x05, 0x68, 0xc5, 0x0b, 0x5c, 0x12, 0x1d, 0xc3, 0xd1, 0xd9, 0xdf, 0x66, - 0xf8, 0x63, 0xda, 0xb5, 0x70, 0xbb, 0x15, 0x06, 0x24, 0x48, 0x56, 0xc2, 0xc0, 0xe5, 0xc7, 0xe9, - 0xc7, 0x60, 0x20, 0xa1, 0x4d, 0xf1, 0x6e, 0x3d, 0x2d, 0x3f, 0x0b, 0x6d, 0xe0, 0xfe, 0xde, 0xfc, - 0xa9, 0xce, 0x1a, 0xac, 0x0b, 0xac, 0x0e, 0xfa, 0x28, 0x0c, 0xc5, 0x89, 0x93, 0xb4, 0x63, 0xd1, - 0xd1, 0x27, 0x64, 0x47, 0xeb, 0xac, 0xf4, 0xfe, 0xde, 0xfc, 0xa4, 0xaa, 0xc6, 0x8b, 0xb0, 0xa8, - 0x80, 0x9e, 0x81, 0xe1, 0x6d, 0x12, 0xc7, 0x4e, 0x53, 0x32, 0xb8, 0x49, 0x51, 0x77, 0xf8, 0x2a, - 0x2f, 0xc6, 0x12, 0x8e, 0x9e, 0x84, 0x41, 0x12, 0x45, 0x61, 0x24, 0x56, 0xc4, 0xb8, 0x40, 0x1c, - 0x5c, 0xa5, 0x85, 0x98, 0xc3, 0xec, 0xff, 0x6c, 0xc1, 0xa4, 0xea, 0x2b, 0x6f, 0xeb, 0x18, 0xb6, - 0xbc, 0x0b, 0xd0, 0x90, 0x03, 0x8c, 0xd9, 0x46, 0xd3, 0xda, 0xe8, 0xbe, 0xfc, 0x3a, 0x27, 0x34, - 0x6d, 0x43, 0x15, 0xc5, 0x58, 0xa3, 0x6b, 0xff, 0x5b, 0x0b, 0x4e, 0x64, 0xc6, 0x76, 0xc5, 0x8b, - 0x13, 0xf4, 0x56, 0xc7, 0xf8, 0x16, 0x8a, 0x8d, 0x8f, 0xd6, 0x66, 0xa3, 0x53, 0xeb, 0x45, 0x96, - 0x68, 0x63, 0xc3, 0x30, 0xe8, 0x25, 0x64, 0x5b, 0x0e, 0xeb, 0xf9, 0x82, 0xc3, 0xe2, 0xfd, 0x4b, - 0xbf, 0xd2, 0x3a, 0xa5, 0x81, 0x39, 0x29, 0xfb, 0x7f, 0x59, 0x50, 0x59, 0x09, 0x83, 0x4d, 0xaf, - 0x79, 0xd5, 0x69, 0x1d, 0xc3, 0xf7, 0xa9, 0xc3, 0x00, 0xa3, 0xce, 0x87, 0x70, 0x3e, 0x6f, 0x08, - 0xa2, 0x63, 0x0b, 0xf4, 0x4c, 0xe5, 0xc2, 0x82, 0x62, 0x53, 0xb4, 0x08, 0x33, 0x62, 0x73, 0x2f, - 0x43, 0x45, 0x21, 0xa0, 0x29, 0x28, 0xdf, 0x21, 0x5c, 0x92, 0xac, 0x60, 0xfa, 0x13, 0xcd, 0xc0, - 0xe0, 0x8e, 0xe3, 0xb7, 0xc5, 0xe6, 0xc5, 0xfc, 0xcf, 0xc7, 0x4a, 0xaf, 0x58, 0xf6, 0x0f, 0xd8, - 0x0e, 0x14, 0x8d, 0xac, 0x06, 0x3b, 0x82, 0x39, 0x7c, 0xd1, 0x82, 0x19, 0xbf, 0x0b, 0x53, 0x12, - 0x73, 0x72, 0x18, 0x76, 0xf6, 0x98, 0xe8, 0xf6, 0x4c, 0x37, 0x28, 0xee, 0xda, 0x1a, 0xe5, 0xf5, - 0x61, 0x8b, 0x2e, 0x38, 0xc7, 0x67, 0x5d, 0x17, 0x32, 0xc0, 0x75, 0x51, 0x86, 0x15, 0xd4, 0xfe, - 0x33, 0x0b, 0x66, 0xd4, 0x38, 0x2e, 0x93, 0xdd, 0x3a, 0xf1, 0x49, 0x23, 0x09, 0xa3, 0x87, 0x65, - 0x24, 0x8f, 0xf3, 0x6f, 0xc2, 0x79, 0xd2, 0xa8, 0x20, 0x50, 0xbe, 0x4c, 0x76, 0xf9, 0x07, 0xd2, - 0x07, 0x5a, 0x3e, 0x70, 0xa0, 0xbf, 0x69, 0xc1, 0xb8, 0x1a, 0xe8, 0x31, 0x6c, 0xb9, 0x2b, 0xe6, - 0x96, 0xfb, 0xb9, 0x82, 0xeb, 0xb5, 0xc7, 0x66, 0xfb, 0x9b, 0x25, 0xca, 0x36, 0x04, 0x4e, 0x2d, - 0x0a, 0xe9, 0x24, 0x51, 0x8e, 0xff, 0x90, 0x7c, 0xa5, 0xfe, 0x06, 0x7b, 0x99, 0xec, 0x6e, 0x84, - 0x54, 0x9a, 0xe8, 0x3e, 0x58, 0xe3, 0xa3, 0x0e, 0x1c, 0xf8, 0x51, 0x7f, 0xaf, 0x04, 0x27, 0xd5, - 0xb4, 0x18, 0xa7, 0xf4, 0xcf, 0xe4, 0xc4, 0x9c, 0x87, 0x51, 0x97, 0x6c, 0x3a, 0x6d, 0x3f, 0x51, - 0xda, 0xc4, 0x20, 0x57, 0x33, 0xab, 0x69, 0x31, 0xd6, 0x71, 0xfa, 0x98, 0xcb, 0xaf, 0x8f, 0x32, - 0x7e, 0x9e, 0x38, 0x74, 0xd5, 0x53, 0x09, 0x4f, 0x53, 0x0f, 0xc7, 0x74, 0xf5, 0x50, 0xa8, 0x82, - 0x4f, 0xc2, 0xa0, 0xb7, 0x4d, 0xcf, 0xfc, 0x92, 0x79, 0x94, 0xaf, 0xd3, 0x42, 0xcc, 0x61, 0xe8, - 0x29, 0x18, 0x6e, 0x84, 0xdb, 0xdb, 0x4e, 0xe0, 0xce, 0x96, 0x99, 0xcc, 0x39, 0x4a, 0xc5, 0x82, - 0x15, 0x5e, 0x84, 0x25, 0x0c, 0x3d, 0x06, 0x03, 0x4e, 0xd4, 0x8c, 0x67, 0x07, 0x18, 0xce, 0x08, - 0x6d, 0x69, 0x29, 0x6a, 0xc6, 0x98, 0x95, 0x52, 0x59, 0xf2, 0x6e, 0x18, 0xdd, 0xf1, 0x82, 0x66, - 0xd5, 0x8b, 0x98, 0x60, 0xa8, 0xc9, 0x92, 0xb7, 0x14, 0x04, 0x6b, 0x58, 0xa8, 0x06, 0x83, 0xad, - 0x30, 0x4a, 0xe2, 0xd9, 0x21, 0x36, 0xf1, 0xcf, 0xe5, 0x6e, 0x3f, 0x3e, 0xee, 0x5a, 0x18, 0x25, - 0xe9, 0x50, 0xe8, 0xbf, 0x18, 0x73, 0x42, 0x68, 0x05, 0xca, 0x24, 0xd8, 0x99, 0x1d, 0x66, 0xf4, - 0x3e, 0x74, 0x30, 0xbd, 0xd5, 0x60, 0xe7, 0xa6, 0x13, 0xa5, 0xfc, 0x6a, 0x35, 0xd8, 0xc1, 0xb4, - 0x36, 0x6a, 0x40, 0x45, 0x1a, 0xc3, 0xe2, 0xd9, 0x91, 0x22, 0x4b, 0x11, 0x0b, 0x74, 0x4c, 0xde, - 0x6b, 0x7b, 0x11, 0xd9, 0x26, 0x41, 0x12, 0xa7, 0x8a, 0x95, 0x84, 0xc6, 0x38, 0xa5, 0x8b, 0x1a, - 0x30, 0xc6, 0xe5, 0xcf, 0xab, 0x61, 0x3b, 0x48, 0xe2, 0xd9, 0x0a, 0xeb, 0x72, 0x8e, 0xe5, 0xe2, - 0x66, 0x5a, 0x63, 0x79, 0x46, 0x90, 0x1f, 0xd3, 0x0a, 0x63, 0x6c, 0x10, 0x45, 0x6f, 0xc1, 0xb8, - 0xef, 0xed, 0x90, 0x80, 0xc4, 0x71, 0x2d, 0x0a, 0x6f, 0x93, 0x59, 0x60, 0xa3, 0x79, 0x32, 0x4f, - 0x8b, 0x0f, 0x6f, 0x93, 0xe5, 0xe9, 0xfd, 0xbd, 0xf9, 0xf1, 0x2b, 0x7a, 0x6d, 0x6c, 0x12, 0x43, - 0x6f, 0xc3, 0x04, 0x15, 0x76, 0xbd, 0x94, 0xfc, 0x68, 0x71, 0xf2, 0x68, 0x7f, 0x6f, 0x7e, 0x02, - 0x1b, 0xd5, 0x71, 0x86, 0x1c, 0xda, 0x80, 0x8a, 0xef, 0x6d, 0x92, 0xc6, 0x6e, 0xc3, 0x27, 0xb3, - 0x63, 0x8c, 0x76, 0xce, 0xe6, 0xbc, 0x22, 0xd1, 0xb9, 0x82, 0xa1, 0xfe, 0xe2, 0x94, 0x10, 0xba, - 0x09, 0xa7, 0x12, 0x12, 0x6d, 0x7b, 0x01, 0xb3, 0xd1, 0x09, 0xe9, 0x97, 0x99, 0x4a, 0xc6, 0xd9, - 0xaa, 0x3d, 0x2d, 0x26, 0xf6, 0xd4, 0x46, 0x57, 0x2c, 0xdc, 0xa3, 0x36, 0xba, 0x0e, 0x93, 0x6c, - 0x3f, 0xd5, 0xda, 0xbe, 0x5f, 0x0b, 0x7d, 0xaf, 0xb1, 0x3b, 0x3b, 0xc1, 0x08, 0x3e, 0x25, 0x0d, - 0x20, 0xeb, 0x26, 0x98, 0x2a, 0x86, 0xe9, 0x3f, 0x9c, 0xad, 0x8d, 0x7c, 0x98, 0x8c, 0x49, 0xa3, - 0x1d, 0x79, 0xc9, 0x2e, 0x5d, 0xfb, 0xe4, 0x5e, 0x32, 0x3b, 0x59, 0x44, 0xd1, 0xad, 0x9b, 0x95, - 0xb8, 0xf5, 0x29, 0x53, 0x88, 0xb3, 0xa4, 0x29, 0xab, 0x88, 0x13, 0xd7, 0x0b, 0x66, 0xa7, 0x18, - 0x07, 0x52, 0xfb, 0xab, 0x4e, 0x0b, 0x31, 0x87, 0x31, 0xfb, 0x01, 0xfd, 0x71, 0x9d, 0x72, 0xe9, - 0x69, 0x86, 0x98, 0xda, 0x0f, 0x24, 0x00, 0xa7, 0x38, 0x54, 0x34, 0x48, 0x92, 0xdd, 0x59, 0xc4, - 0x50, 0xd5, 0x56, 0xdb, 0xd8, 0xf8, 0x14, 0xa6, 0xe5, 0xe8, 0x26, 0x0c, 0x93, 0x60, 0x67, 0x2d, - 0x0a, 0xb7, 0x67, 0x4f, 0x14, 0xe1, 0x01, 0xab, 0x1c, 0x99, 0x9f, 0x1f, 0xa9, 0x0a, 0x23, 0x8a, - 0xb1, 0x24, 0x86, 0xee, 0xc1, 0x6c, 0x97, 0xaf, 0xc4, 0x3f, 0xca, 0x0c, 0xfb, 0x28, 0x1f, 0x17, - 0x75, 0x67, 0x37, 0x7a, 0xe0, 0xdd, 0x3f, 0x00, 0x86, 0x7b, 0x52, 0xb7, 0x6f, 0xc3, 0x84, 0x62, - 0x54, 0xec, 0x7b, 0xa3, 0x79, 0x18, 0xa4, 0xbc, 0x58, 0x2a, 0xf4, 0x15, 0x3a, 0xa9, 0x94, 0x45, - 0xc7, 0x98, 0x97, 0xb3, 0x49, 0xf5, 0x3e, 0x4b, 0x96, 0x77, 0x13, 0xc2, 0x15, 0xbb, 0xb2, 0x36, - 0xa9, 0x12, 0x80, 0x53, 0x1c, 0xfb, 0xff, 0x70, 0x31, 0x29, 0xe5, 0x86, 0x05, 0x4e, 0x82, 0x73, - 0x30, 0xb2, 0x15, 0xc6, 0x09, 0xc5, 0x66, 0x6d, 0x0c, 0xa6, 0x82, 0xd1, 0x25, 0x51, 0x8e, 0x15, - 0x06, 0x7a, 0x15, 0xc6, 0x1b, 0x7a, 0x03, 0xe2, 0x18, 0x3b, 0x29, 0xaa, 0x98, 0xad, 0x63, 0x13, - 0x17, 0xbd, 0x02, 0x23, 0xcc, 0xca, 0xdd, 0x08, 0x7d, 0xa1, 0x42, 0xca, 0x53, 0x79, 0xa4, 0x26, - 0xca, 0xef, 0x6b, 0xbf, 0xb1, 0xc2, 0xa6, 0x8a, 0x38, 0xed, 0xc2, 0x7a, 0x4d, 0x1c, 0x20, 0x4a, - 0x11, 0xbf, 0xc4, 0x4a, 0xb1, 0x80, 0xda, 0xff, 0xac, 0xa4, 0xcd, 0x32, 0x55, 0x80, 0x08, 0x7a, - 0x13, 0x86, 0xef, 0x3a, 0x5e, 0xe2, 0x05, 0x4d, 0x21, 0x3d, 0xbc, 0x50, 0xf0, 0x34, 0x61, 0xd5, - 0x6f, 0xf1, 0xaa, 0xfc, 0xe4, 0x13, 0x7f, 0xb0, 0x24, 0x48, 0x69, 0x47, 0xed, 0x20, 0xa0, 0xb4, - 0x4b, 0xfd, 0xd3, 0xc6, 0xbc, 0x2a, 0xa7, 0x2d, 0xfe, 0x60, 0x49, 0x10, 0x6d, 0x02, 0xc8, 0xb5, - 0x44, 0x5c, 0x61, 0x5d, 0xfe, 0x48, 0x3f, 0xe4, 0x37, 0x54, 0xed, 0xe5, 0x09, 0x7a, 0xd6, 0xa6, - 0xff, 0xb1, 0x46, 0xd9, 0x4e, 0x98, 0x10, 0xd6, 0xd9, 0x2d, 0xf4, 0x69, 0xba, 0xa5, 0x9d, 0x28, - 0x21, 0xee, 0x52, 0x92, 0x35, 0xd0, 0x1f, 0x2c, 0x62, 0x6f, 0x78, 0xdb, 0x44, 0xdf, 0xfe, 0x82, - 0x08, 0x4e, 0xe9, 0xd9, 0xdf, 0x2d, 0xc3, 0x6c, 0xaf, 0xee, 0xd2, 0x25, 0x49, 0xee, 0x79, 0xc9, - 0x0a, 0x15, 0x93, 0x2c, 0x73, 0x49, 0xae, 0x8a, 0x72, 0xac, 0x30, 0xe8, 0xda, 0x88, 0xbd, 0xa6, - 0x54, 0x96, 0x06, 0xd3, 0xb5, 0x51, 0x67, 0xa5, 0x58, 0x40, 0x29, 0x5e, 0x44, 0x9c, 0x58, 0x5c, - 0x6e, 0x68, 0x6b, 0x08, 0xb3, 0x52, 0x2c, 0xa0, 0xba, 0x41, 0x64, 0x20, 0xc7, 0x20, 0x62, 0x4c, - 0xd1, 0xe0, 0x83, 0x9d, 0x22, 0xf4, 0x19, 0x80, 0x4d, 0x2f, 0xf0, 0xe2, 0x2d, 0x46, 0x7d, 0xa8, - 0x6f, 0xea, 0x4a, 0xc8, 0x5a, 0x53, 0x54, 0xb0, 0x46, 0x11, 0xbd, 0x04, 0xa3, 0x6a, 0x7b, 0xae, - 0x57, 0x67, 0x87, 0x4d, 0x83, 0x78, 0xca, 0xab, 0xaa, 0x58, 0xc7, 0xb3, 0xdf, 0xcd, 0xae, 0x17, - 0xb1, 0x2b, 0xb4, 0xf9, 0xb5, 0x8a, 0xce, 0x6f, 0xe9, 0xe0, 0xf9, 0xb5, 0xff, 0x53, 0x19, 0x26, - 0x8d, 0xc6, 0xda, 0x71, 0x01, 0x8e, 0xf6, 0x3a, 0x3d, 0xb0, 0x9c, 0x84, 0x88, 0x3d, 0x79, 0xae, - 0x9f, 0x4d, 0xa3, 0x1f, 0x6f, 0x74, 0x2f, 0x70, 0x4a, 0x68, 0x0b, 0x2a, 0xbe, 0x13, 0x33, 0x93, - 0x0a, 0x11, 0x7b, 0xb1, 0x3f, 0xb2, 0xa9, 0xfa, 0xe1, 0xc4, 0x89, 0x76, 0x7a, 0xf0, 0x56, 0x52, - 0xe2, 0xf4, 0xb4, 0xa5, 0xc2, 0x8e, 0xbc, 0x51, 0x53, 0xdd, 0xa1, 0x12, 0xd1, 0x2e, 0xe6, 0x30, - 0xf4, 0x0a, 0x8c, 0x45, 0x84, 0xad, 0x94, 0x15, 0x2a, 0xcf, 0xb1, 0xa5, 0x37, 0x98, 0x0a, 0x7e, - 0x58, 0x83, 0x61, 0x03, 0x33, 0x95, 0xfb, 0x87, 0x0e, 0x90, 0xfb, 0x9f, 0x81, 0x61, 0xf6, 0x43, - 0xad, 0x0a, 0xf5, 0x85, 0xd6, 0x79, 0x31, 0x96, 0xf0, 0xec, 0x22, 0x1a, 0x29, 0xb8, 0x88, 0x9e, - 0x85, 0x89, 0xaa, 0x43, 0xb6, 0xc3, 0x60, 0x35, 0x70, 0x5b, 0xa1, 0x17, 0x24, 0x68, 0x16, 0x06, - 0xd8, 0x79, 0xc2, 0xf7, 0xfb, 0x00, 0xa5, 0x80, 0x07, 0xa8, 0xec, 0x6e, 0xff, 0x71, 0x09, 0xc6, - 0xab, 0xc4, 0x27, 0x09, 0xe1, 0x7a, 0x4f, 0x8c, 0xd6, 0x00, 0x35, 0x23, 0xa7, 0x41, 0x6a, 0x24, - 0xf2, 0x42, 0xb7, 0x4e, 0x1a, 0x61, 0xc0, 0x2e, 0xa2, 0xe8, 0x01, 0x79, 0x6a, 0x7f, 0x6f, 0x1e, - 0x5d, 0xec, 0x80, 0xe2, 0x2e, 0x35, 0x90, 0x0b, 0xe3, 0xad, 0x88, 0x18, 0x76, 0x43, 0x2b, 0x5f, - 0xd4, 0xa8, 0xe9, 0x55, 0xb8, 0x34, 0x6c, 0x14, 0x61, 0x93, 0x28, 0xfa, 0x04, 0x4c, 0x85, 0x51, - 0x6b, 0xcb, 0x09, 0xaa, 0xa4, 0x45, 0x02, 0x97, 0xaa, 0x00, 0xc2, 0xda, 0x31, 0xb3, 0xbf, 0x37, - 0x3f, 0x75, 0x3d, 0x03, 0xc3, 0x1d, 0xd8, 0xe8, 0x4d, 0x98, 0x6e, 0x45, 0x61, 0xcb, 0x69, 0xb2, - 0x25, 0x23, 0xa4, 0x15, 0xce, 0x9b, 0xce, 0xed, 0xef, 0xcd, 0x4f, 0xd7, 0xb2, 0xc0, 0xfb, 0x7b, - 0xf3, 0x27, 0xd8, 0x94, 0xd1, 0x92, 0x14, 0x88, 0x3b, 0xc9, 0xd8, 0xef, 0xc1, 0xc9, 0x6a, 0x78, - 0x37, 0xb8, 0xeb, 0x44, 0xee, 0x52, 0x6d, 0x5d, 0x33, 0x4e, 0xbc, 0x21, 0x95, 0x5f, 0x7e, 0xc1, - 0x97, 0x73, 0xb2, 0x69, 0x34, 0xb8, 0xda, 0xb1, 0xe6, 0xf9, 0xa4, 0x87, 0x39, 0xe4, 0x1f, 0x95, - 0x8c, 0x36, 0x53, 0x7c, 0x75, 0x77, 0x61, 0xf5, 0xbc, 0xbb, 0xf8, 0x34, 0x8c, 0x6c, 0x7a, 0xc4, - 0x77, 0x31, 0xd9, 0x14, 0x5f, 0xeb, 0x7c, 0x91, 0xcb, 0x9d, 0x35, 0x5a, 0x47, 0x5a, 0xc7, 0xb8, - 0x12, 0xbd, 0x26, 0xc8, 0x60, 0x45, 0x10, 0xb5, 0x61, 0x4a, 0xea, 0x61, 0x12, 0x2a, 0x36, 0xfb, - 0x0b, 0xc5, 0xd4, 0x3c, 0xb3, 0x19, 0xf6, 0x79, 0x71, 0x86, 0x20, 0xee, 0x68, 0x82, 0xea, 0xcf, - 0xdb, 0xf4, 0xa8, 0x1b, 0x60, 0x4b, 0x9f, 0xe9, 0xcf, 0xcc, 0x14, 0xc0, 0x4a, 0xed, 0x5f, 0xb3, - 0xe0, 0x91, 0x8e, 0xd9, 0x12, 0x76, 0x92, 0x23, 0xfb, 0x46, 0x59, 0x63, 0x45, 0x29, 0xdf, 0x58, - 0x61, 0x5f, 0x87, 0x99, 0xd5, 0xed, 0x56, 0xb2, 0x5b, 0xf5, 0xcc, 0x2b, 0x97, 0x97, 0x61, 0x68, - 0x9b, 0xb8, 0x5e, 0x7b, 0x5b, 0x7c, 0xd6, 0x79, 0x79, 0x2e, 0x5c, 0x65, 0xa5, 0xf7, 0xf7, 0xe6, - 0xc7, 0xeb, 0x49, 0x18, 0x39, 0x4d, 0xc2, 0x0b, 0xb0, 0x40, 0xb7, 0x7f, 0x6c, 0xc1, 0xa4, 0xe4, - 0x0f, 0x4b, 0xae, 0x1b, 0x91, 0x38, 0x46, 0x73, 0x50, 0xf2, 0x5a, 0x82, 0x10, 0x08, 0x42, 0xa5, - 0xf5, 0x1a, 0x2e, 0x79, 0x2d, 0xf4, 0x26, 0x54, 0xf8, 0x4d, 0x5d, 0xba, 0x38, 0xfa, 0xbc, 0xf9, - 0x63, 0xba, 0xe1, 0x86, 0xa4, 0x81, 0x53, 0x72, 0x52, 0x4a, 0x66, 0x27, 0x4f, 0xd9, 0xbc, 0x37, - 0xba, 0x24, 0xca, 0xb1, 0xc2, 0x40, 0x67, 0x61, 0x24, 0x08, 0x5d, 0x7e, 0x99, 0xca, 0xf7, 0x29, - 0x5b, 0x72, 0xd7, 0x44, 0x19, 0x56, 0x50, 0xfb, 0x2b, 0x16, 0x8c, 0xc9, 0x31, 0x16, 0x14, 0xd8, - 0xe9, 0x26, 0x49, 0x85, 0xf5, 0x74, 0x93, 0x50, 0x81, 0x9b, 0x41, 0x0c, 0x39, 0xbb, 0xdc, 0x8f, - 0x9c, 0x6d, 0xff, 0x46, 0x09, 0x26, 0x64, 0x77, 0xea, 0xed, 0xdb, 0x31, 0xa1, 0x62, 0x48, 0xc5, - 0xe1, 0x93, 0x4f, 0xe4, 0x3a, 0x7b, 0x3e, 0x4f, 0x17, 0x33, 0xbe, 0x59, 0x2a, 0xe6, 0x2c, 0x49, - 0x3a, 0x38, 0x25, 0x89, 0x76, 0x60, 0x3a, 0x08, 0x13, 0x76, 0xbc, 0x29, 0x78, 0xb1, 0x9b, 0x8e, - 0x6c, 0x3b, 0x8f, 0x8a, 0x76, 0xa6, 0xaf, 0x65, 0xe9, 0xe1, 0xce, 0x26, 0xd0, 0x75, 0x69, 0x63, - 0x2a, 0xb3, 0xb6, 0x9e, 0x2d, 0xd6, 0x56, 0x6f, 0x13, 0x93, 0xfd, 0xbb, 0x16, 0x54, 0x24, 0xda, - 0x71, 0x5c, 0x79, 0xdd, 0x82, 0xe1, 0x98, 0x7d, 0x22, 0x39, 0x5d, 0xe7, 0x8a, 0x0d, 0x81, 0x7f, - 0xd7, 0xf4, 0x4c, 0xe7, 0xff, 0x63, 0x2c, 0xa9, 0x31, 0x63, 0xbb, 0x1a, 0xc8, 0x43, 0x67, 0x6c, - 0x57, 0x3d, 0xeb, 0x7d, 0xb3, 0x35, 0x6e, 0x58, 0x03, 0xa8, 0x60, 0xda, 0x8a, 0xc8, 0xa6, 0x77, - 0x2f, 0x2b, 0x98, 0xd6, 0x58, 0x29, 0x16, 0x50, 0xb4, 0x09, 0x63, 0x0d, 0x69, 0x8e, 0x4e, 0x59, - 0xc8, 0x87, 0x0b, 0xda, 0xfe, 0xd5, 0x35, 0x12, 0x77, 0x4d, 0x5a, 0xd1, 0x28, 0x61, 0x83, 0x2e, - 0xe5, 0x53, 0xe9, 0x4d, 0x79, 0xb9, 0xa0, 0xe1, 0x26, 0x22, 0x49, 0xda, 0x42, 0xcf, 0x4b, 0x72, - 0xfb, 0x1b, 0x16, 0x0c, 0x71, 0xfb, 0x65, 0x31, 0x23, 0xb0, 0x76, 0x41, 0x96, 0xce, 0xe7, 0x4d, - 0x5a, 0x28, 0xee, 0xcb, 0xd0, 0x2d, 0xa8, 0xb0, 0x1f, 0xcc, 0x16, 0x53, 0x2e, 0xe2, 0xa7, 0xc5, - 0xdb, 0xd7, 0xbb, 0x7a, 0x53, 0x12, 0xc0, 0x29, 0x2d, 0xfb, 0xfb, 0x65, 0xca, 0xfa, 0x52, 0x54, - 0xe3, 0x6c, 0xb7, 0x8e, 0xe3, 0x6c, 0x2f, 0x1d, 0xfd, 0xd9, 0xfe, 0x1e, 0x4c, 0x36, 0xb4, 0x0b, - 0xba, 0xf4, 0x8b, 0x5f, 0x28, 0xb8, 0xac, 0xb4, 0x5b, 0x3d, 0x6e, 0xaf, 0x5b, 0x31, 0xc9, 0xe1, - 0x2c, 0x7d, 0x44, 0x60, 0x8c, 0xaf, 0x07, 0xd1, 0xde, 0x00, 0x6b, 0x6f, 0xb1, 0xc8, 0x0a, 0xd3, - 0x1b, 0x63, 0xab, 0xb8, 0xae, 0x11, 0xc2, 0x06, 0x59, 0xfb, 0x57, 0x06, 0x61, 0x70, 0x75, 0x87, - 0x04, 0xc9, 0x31, 0xb0, 0xba, 0x6d, 0x98, 0xf0, 0x82, 0x9d, 0xd0, 0xdf, 0x21, 0x2e, 0x87, 0x1f, - 0xee, 0x78, 0x3f, 0x25, 0x1a, 0x99, 0x58, 0x37, 0x88, 0xe1, 0x0c, 0xf1, 0xa3, 0xb0, 0x14, 0xbc, - 0x0e, 0x43, 0x7c, 0x65, 0x08, 0x33, 0x41, 0x8e, 0x3d, 0x9f, 0x4d, 0xac, 0xd8, 0x41, 0xa9, 0x3d, - 0x83, 0x5f, 0x25, 0x08, 0x42, 0xe8, 0x5d, 0x98, 0xd8, 0xf4, 0xa2, 0x38, 0xa1, 0xca, 0x7e, 0x9c, - 0x38, 0xdb, 0xad, 0x43, 0xd8, 0x08, 0xd4, 0x8c, 0xac, 0x19, 0x94, 0x70, 0x86, 0x32, 0x6a, 0xc2, - 0x38, 0x55, 0x51, 0xd3, 0xa6, 0x86, 0xfb, 0x6e, 0x4a, 0x99, 0x08, 0xaf, 0xe8, 0x84, 0xb0, 0x49, - 0x97, 0xb2, 0xa4, 0x06, 0x53, 0x69, 0x47, 0x98, 0x74, 0xa3, 0x58, 0x12, 0xd7, 0x65, 0x39, 0x8c, - 0x72, 0x36, 0xe6, 0x29, 0x53, 0x31, 0x39, 0x5b, 0xea, 0x0f, 0x63, 0x7f, 0x8b, 0x9e, 0xc5, 0x74, - 0x0e, 0x8f, 0xe1, 0xf8, 0xba, 0x64, 0x1e, 0x5f, 0x4f, 0x16, 0xf8, 0xb2, 0x3d, 0x8e, 0xae, 0x77, - 0x60, 0x54, 0xfb, 0xf0, 0x68, 0x11, 0x2a, 0x0d, 0xe9, 0xcc, 0x21, 0xb8, 0xb8, 0x12, 0xa5, 0x94, - 0x97, 0x07, 0x4e, 0x71, 0xe8, 0xbc, 0x50, 0x11, 0x34, 0xeb, 0xfa, 0x45, 0x05, 0x54, 0xcc, 0x20, - 0xf6, 0x0b, 0x00, 0xab, 0xf7, 0x48, 0x63, 0x89, 0xab, 0x78, 0xda, 0xfd, 0x9e, 0xd5, 0xfb, 0x7e, - 0xcf, 0xfe, 0xa6, 0x05, 0x13, 0x6b, 0x2b, 0x86, 0x4c, 0xbf, 0x00, 0xc0, 0x65, 0xe3, 0x5b, 0xb7, - 0xae, 0x49, 0xfb, 0x35, 0x37, 0x32, 0xaa, 0x52, 0xac, 0x61, 0xa0, 0x47, 0xa1, 0xec, 0xb7, 0x03, - 0x21, 0xb2, 0x0e, 0xef, 0xef, 0xcd, 0x97, 0xaf, 0xb4, 0x03, 0x4c, 0xcb, 0x34, 0x1f, 0xab, 0x72, - 0x61, 0x1f, 0xab, 0x7c, 0x6f, 0xe3, 0xaf, 0x95, 0x61, 0x6a, 0xcd, 0x27, 0xf7, 0x8c, 0x5e, 0x3f, - 0x0d, 0x43, 0x6e, 0xe4, 0xed, 0x90, 0x28, 0x2b, 0x08, 0x54, 0x59, 0x29, 0x16, 0xd0, 0xc2, 0x6e, - 0x5f, 0x6f, 0x77, 0x1e, 0xe4, 0x47, 0xe7, 0xf2, 0x96, 0x3b, 0x66, 0xb4, 0x09, 0xc3, 0xfc, 0x3e, - 0x38, 0x9e, 0x1d, 0x64, 0x4b, 0xf1, 0xd5, 0x83, 0x3b, 0x93, 0x9d, 0x9f, 0x05, 0x61, 0x5f, 0xe1, - 0x0e, 0x37, 0x8a, 0x97, 0x89, 0x52, 0x2c, 0x89, 0xcf, 0x7d, 0x0c, 0xc6, 0x74, 0xcc, 0xbe, 0x3c, - 0x6f, 0xfe, 0xb2, 0x05, 0x27, 0xd6, 0xfc, 0xb0, 0x71, 0x27, 0xe3, 0x97, 0xf7, 0x12, 0x8c, 0xd2, - 0xcd, 0x14, 0x1b, 0x4e, 0xab, 0x86, 0x77, 0xae, 0x00, 0x61, 0x1d, 0x4f, 0xab, 0x76, 0xe3, 0xc6, - 0x7a, 0xb5, 0x9b, 0x53, 0xaf, 0x00, 0x61, 0x1d, 0xcf, 0xfe, 0x7d, 0x0b, 0x1e, 0xbf, 0xb8, 0xb2, - 0x5a, 0x23, 0x51, 0xec, 0xc5, 0x09, 0x09, 0x92, 0x0e, 0xbf, 0x62, 0x2a, 0x33, 0xba, 0x5a, 0x57, - 0x52, 0x99, 0xb1, 0xca, 0x7a, 0x21, 0xa0, 0x0f, 0x8b, 0x73, 0xfd, 0x37, 0x2c, 0x38, 0x71, 0xd1, - 0x4b, 0x30, 0x69, 0x85, 0x59, 0x57, 0xe0, 0x88, 0xb4, 0xc2, 0xd8, 0x4b, 0xc2, 0x68, 0x37, 0xeb, - 0x0a, 0x8c, 0x15, 0x04, 0x6b, 0x58, 0xbc, 0xe5, 0x1d, 0x2f, 0xa6, 0x3d, 0x2d, 0x99, 0xaa, 0x2e, - 0x16, 0xe5, 0x58, 0x61, 0xd0, 0x81, 0xb9, 0x5e, 0xc4, 0x44, 0x86, 0x5d, 0xb1, 0x83, 0xd5, 0xc0, - 0xaa, 0x12, 0x80, 0x53, 0x1c, 0xfb, 0xef, 0x58, 0x70, 0xf2, 0xa2, 0xdf, 0x8e, 0x13, 0x12, 0x6d, - 0xc6, 0x46, 0x67, 0x5f, 0x80, 0x0a, 0x91, 0xc2, 0xbd, 0xe8, 0xab, 0x3a, 0x34, 0x94, 0xd4, 0xcf, - 0xfd, 0x90, 0x15, 0x5e, 0x01, 0x77, 0xd7, 0xfe, 0x9c, 0x33, 0x7f, 0xab, 0x04, 0xe3, 0x97, 0x36, - 0x36, 0x6a, 0x17, 0x49, 0x22, 0xb8, 0x64, 0xbe, 0x51, 0x0a, 0x6b, 0x1a, 0xf9, 0x41, 0xc2, 0x4f, - 0x3b, 0xf1, 0xfc, 0x05, 0x1e, 0x78, 0xb2, 0xb0, 0x1e, 0x24, 0xd7, 0xa3, 0x7a, 0x12, 0x79, 0x41, - 0xb3, 0xab, 0x0e, 0x2f, 0x79, 0x79, 0xb9, 0x17, 0x2f, 0x47, 0x2f, 0xc0, 0x10, 0x8b, 0x7c, 0x91, - 0xc2, 0xc7, 0x07, 0x95, 0x9c, 0xc0, 0x4a, 0xef, 0xef, 0xcd, 0x57, 0x6e, 0xe0, 0x75, 0xfe, 0x07, - 0x0b, 0x54, 0xf4, 0x36, 0x8c, 0x6e, 0x25, 0x49, 0xeb, 0x12, 0x71, 0x5c, 0x12, 0x49, 0x3e, 0x71, - 0xf6, 0x60, 0x3e, 0x41, 0xa7, 0x83, 0x57, 0x48, 0xb7, 0x56, 0x5a, 0x16, 0x63, 0x9d, 0xa2, 0x5d, - 0x07, 0x48, 0x61, 0x0f, 0x48, 0x07, 0xb1, 0x7f, 0xb1, 0x04, 0xc3, 0x97, 0x9c, 0xc0, 0xf5, 0x49, - 0x84, 0xd6, 0x60, 0x80, 0xdc, 0x23, 0x0d, 0x71, 0x90, 0xe7, 0x74, 0x3d, 0x3d, 0xec, 0xb8, 0x5d, - 0x8d, 0xfe, 0xc7, 0xac, 0x3e, 0xc2, 0x30, 0x4c, 0xfb, 0x7d, 0x51, 0x79, 0x89, 0x3f, 0x97, 0x3f, - 0x0b, 0x6a, 0x51, 0xf0, 0x93, 0x52, 0x14, 0x61, 0x49, 0x88, 0x59, 0xa0, 0x1a, 0xad, 0x3a, 0x65, - 0x6f, 0x49, 0x31, 0xcd, 0x6e, 0x63, 0xa5, 0xc6, 0xd1, 0x05, 0x5d, 0x6e, 0x81, 0x92, 0x85, 0x38, - 0x25, 0x67, 0x6f, 0x40, 0x85, 0x7e, 0xfc, 0x25, 0xdf, 0x73, 0x0e, 0x36, 0x83, 0x3d, 0x07, 0x15, - 0x69, 0x88, 0x8a, 0x85, 0xcb, 0x39, 0xa3, 0x2a, 0xed, 0x54, 0x31, 0x4e, 0xe1, 0xf6, 0x2b, 0x30, - 0xc3, 0x6e, 0x79, 0x9d, 0x64, 0xcb, 0xd8, 0x8b, 0xb9, 0x8b, 0xde, 0xfe, 0xf6, 0x00, 0x4c, 0xaf, - 0xd7, 0x57, 0xea, 0xa6, 0x45, 0xf2, 0x15, 0x18, 0xe3, 0xc7, 0x3e, 0x5d, 0xca, 0x8e, 0x2f, 0xea, - 0xab, 0x9b, 0x89, 0x0d, 0x0d, 0x86, 0x0d, 0x4c, 0xf4, 0x38, 0x94, 0xbd, 0xf7, 0x82, 0xac, 0xaf, - 0xe0, 0xfa, 0xeb, 0xd7, 0x30, 0x2d, 0xa7, 0x60, 0x2a, 0x41, 0x70, 0xd6, 0xa9, 0xc0, 0x4a, 0x8a, - 0x78, 0x0d, 0x26, 0xbc, 0xb8, 0x11, 0x7b, 0xeb, 0x01, 0xe5, 0x2b, 0x4e, 0x43, 0x6e, 0x8a, 0x54, - 0xe4, 0xa7, 0x5d, 0x55, 0x50, 0x9c, 0xc1, 0xd6, 0xf8, 0xf8, 0x60, 0x61, 0x29, 0x24, 0xd7, 0x09, - 0x9d, 0x0a, 0x58, 0x2d, 0x36, 0xba, 0x98, 0x79, 0x1e, 0x09, 0x01, 0x8b, 0x0f, 0x38, 0xc6, 0x12, - 0x86, 0x2e, 0xc2, 0x74, 0x63, 0xcb, 0x69, 0x2d, 0xb5, 0x93, 0xad, 0xaa, 0x17, 0x37, 0xc2, 0x1d, - 0x12, 0xed, 0x32, 0x01, 0x78, 0x24, 0xb5, 0x69, 0x29, 0xc0, 0xca, 0xa5, 0xa5, 0x1a, 0xc5, 0xc4, - 0x9d, 0x75, 0x4c, 0x81, 0x04, 0x8e, 0x40, 0x20, 0x59, 0x82, 0x49, 0xd9, 0x6a, 0x9d, 0xc4, 0xec, - 0x88, 0x18, 0x65, 0xfd, 0x54, 0xb1, 0x3c, 0xa2, 0x58, 0xf5, 0x32, 0x8b, 0x6f, 0xbf, 0x0b, 0x15, - 0xe5, 0x29, 0x27, 0x1d, 0x44, 0xad, 0x1e, 0x0e, 0xa2, 0xf9, 0xcc, 0x5d, 0xda, 0xce, 0xcb, 0x5d, - 0x6d, 0xe7, 0xff, 0xc4, 0x82, 0xd4, 0xd5, 0x07, 0x61, 0xa8, 0xb4, 0x42, 0x76, 0xcf, 0x16, 0xc9, - 0x0b, 0xed, 0xa7, 0x72, 0xf6, 0x3c, 0xe7, 0x39, 0x7c, 0x42, 0x6a, 0xb2, 0x2e, 0x4e, 0xc9, 0xa0, - 0x2b, 0x30, 0xdc, 0x8a, 0x48, 0x3d, 0x61, 0xd1, 0x1d, 0x7d, 0x50, 0xe4, 0x0b, 0x81, 0xd7, 0xc4, - 0x92, 0x84, 0xfd, 0x2f, 0x2c, 0x80, 0x2b, 0xde, 0xb6, 0x97, 0x60, 0x27, 0x68, 0x92, 0x63, 0x50, - 0xac, 0xaf, 0xc1, 0x40, 0xdc, 0x22, 0x8d, 0x62, 0x37, 0xa5, 0x69, 0xcf, 0xea, 0x2d, 0xd2, 0x48, - 0x3f, 0x07, 0xfd, 0x87, 0x19, 0x1d, 0xfb, 0x7b, 0x00, 0x13, 0x29, 0x1a, 0x55, 0x6e, 0xd0, 0xf3, - 0x46, 0x58, 0xc3, 0xa3, 0x99, 0xb0, 0x86, 0x0a, 0xc3, 0xd6, 0x22, 0x19, 0x12, 0x28, 0x6f, 0x3b, - 0xf7, 0x84, 0x2e, 0xf5, 0x52, 0xd1, 0x0e, 0xd1, 0x96, 0x16, 0xae, 0x3a, 0xf7, 0xb8, 0xe8, 0xfa, - 0x9c, 0x5c, 0x48, 0x57, 0x9d, 0x7b, 0xf7, 0xf9, 0x7d, 0x28, 0xe3, 0x4e, 0x54, 0x79, 0xfb, 0xc2, - 0x9f, 0xa4, 0xff, 0xd9, 0x31, 0x44, 0x9b, 0x63, 0xad, 0x7a, 0x81, 0x30, 0x05, 0xf7, 0xd9, 0xaa, - 0x17, 0x64, 0x5b, 0xf5, 0x82, 0x02, 0xad, 0x7a, 0xcc, 0xff, 0x77, 0x58, 0xdc, 0xa0, 0x30, 0xe7, - 0xc9, 0xd1, 0x0b, 0x1f, 0xed, 0xab, 0x69, 0x71, 0x15, 0xc3, 0x9b, 0x5f, 0x94, 0xf2, 0xba, 0x28, - 0xcd, 0xed, 0x82, 0x6c, 0x1a, 0xfd, 0x5d, 0x0b, 0x26, 0xc4, 0x6f, 0x4c, 0xde, 0x6b, 0x93, 0x38, - 0x11, 0x72, 0xc1, 0x27, 0x0e, 0xd3, 0x1b, 0x41, 0x82, 0x77, 0xea, 0x23, 0x92, 0xfd, 0x9a, 0xc0, - 0xdc, 0xbe, 0x65, 0xfa, 0x83, 0xbe, 0x67, 0xc1, 0xcc, 0xb6, 0x73, 0x8f, 0xb7, 0xc8, 0xcb, 0xb0, - 0x93, 0x78, 0xa1, 0x70, 0x10, 0x5d, 0xeb, 0x77, 0x9d, 0x74, 0x10, 0xe2, 0xdd, 0x95, 0xbe, 0x5f, - 0x33, 0xdd, 0x50, 0x72, 0x3b, 0xdd, 0xb5, 0x87, 0x73, 0x9b, 0x30, 0x22, 0x17, 0x66, 0x17, 0x4d, - 0xa9, 0xaa, 0x8b, 0x3f, 0x39, 0x76, 0x89, 0x05, 0x69, 0x5d, 0x5c, 0x78, 0xbd, 0xed, 0x04, 0x89, - 0x97, 0xec, 0x6a, 0x9a, 0x15, 0x6b, 0x47, 0x2c, 0xc5, 0x23, 0x6d, 0xe7, 0x5d, 0x18, 0xd3, 0xd7, - 0xdd, 0x91, 0xb6, 0xf5, 0x1e, 0x9c, 0xe8, 0xb2, 0xaa, 0x8e, 0xb4, 0xc9, 0xbb, 0xf0, 0x68, 0xcf, - 0xf5, 0x71, 0x94, 0x0d, 0xdb, 0xbf, 0x65, 0xe9, 0xac, 0xf3, 0x18, 0xec, 0x56, 0x57, 0x4d, 0xbb, - 0xd5, 0xd9, 0xa2, 0x7b, 0xa8, 0x87, 0xf1, 0x6a, 0x53, 0xef, 0x3e, 0x3d, 0x12, 0xd0, 0x06, 0x0c, - 0xf9, 0xb4, 0x44, 0x5e, 0x1b, 0x9e, 0xeb, 0x67, 0x97, 0xa6, 0x12, 0x18, 0x2b, 0x8f, 0xb1, 0xa0, - 0x65, 0x7f, 0xcf, 0x82, 0x81, 0xbf, 0xc0, 0xa0, 0xab, 0x0e, 0xd2, 0x22, 0x0b, 0xc1, 0x02, 0x76, - 0xee, 0xae, 0xde, 0x4b, 0x48, 0x10, 0x33, 0x31, 0xbe, 0x97, 0xe3, 0xc3, 0x28, 0x6d, 0x4a, 0xfa, - 0xb1, 0xbc, 0x0a, 0xe3, 0xbe, 0x73, 0x9b, 0xf8, 0xd2, 0xe6, 0x9e, 0x55, 0x7a, 0xaf, 0xe8, 0x40, - 0x6c, 0xe2, 0xd2, 0xca, 0x9b, 0xfa, 0x95, 0x84, 0x10, 0x92, 0x54, 0x65, 0xe3, 0xbe, 0x02, 0x9b, - 0xb8, 0x54, 0xeb, 0xba, 0xeb, 0x24, 0x8d, 0x2d, 0xa1, 0x10, 0xab, 0xee, 0xde, 0xa2, 0x85, 0x98, - 0xc3, 0xa8, 0xb0, 0x27, 0x57, 0xec, 0x4d, 0x12, 0x31, 0x61, 0x8f, 0x0b, 0xd5, 0x4a, 0xd8, 0xc3, - 0x26, 0x18, 0x67, 0xf1, 0xd1, 0xc7, 0x60, 0x82, 0x4e, 0x4e, 0xd8, 0x4e, 0xa4, 0x97, 0xce, 0x20, - 0xf3, 0xd2, 0x61, 0x4e, 0xde, 0x1b, 0x06, 0x04, 0x67, 0x30, 0xed, 0xb7, 0xe1, 0xc4, 0x95, 0xd0, - 0x71, 0x97, 0x1d, 0xdf, 0x09, 0x1a, 0x24, 0x5a, 0x0f, 0x9a, 0xb9, 0x1e, 0x00, 0xfa, 0x2d, 0x7d, - 0x29, 0xef, 0x96, 0xde, 0x8e, 0x00, 0xe9, 0x0d, 0x08, 0xff, 0xb2, 0xb7, 0x60, 0xd8, 0xe3, 0x4d, - 0x89, 0x65, 0x7b, 0x3e, 0x4f, 0x82, 0xee, 0xe8, 0xa3, 0xe6, 0x2f, 0xc5, 0x0b, 0xb0, 0x24, 0x49, - 0xf5, 0xad, 0x6e, 0x22, 0x77, 0xbe, 0xa2, 0x6c, 0xff, 0x55, 0x0b, 0x26, 0xaf, 0x65, 0xa2, 0x82, - 0x9f, 0x86, 0x21, 0x9e, 0xa5, 0x22, 0x6b, 0xa5, 0xaa, 0xb3, 0x52, 0x2c, 0xa0, 0x0f, 0xdc, 0x48, - 0xf2, 0xcb, 0x25, 0xa8, 0x30, 0x4f, 0xe5, 0x16, 0xd5, 0x9d, 0x8e, 0x5e, 0x4c, 0xbd, 0x6a, 0x88, - 0xa9, 0x39, 0x8a, 0xba, 0xea, 0x58, 0x2f, 0x29, 0x15, 0xdd, 0x50, 0xd1, 0xb2, 0x85, 0x74, 0xf4, - 0x94, 0x20, 0x8f, 0xa8, 0x9c, 0x30, 0x83, 0x6b, 0x65, 0x24, 0x2d, 0xbb, 0x37, 0x57, 0xb8, 0x0f, - 0xdd, 0xbd, 0xb9, 0xea, 0x59, 0x0f, 0xe6, 0x54, 0xd3, 0x3a, 0xcf, 0xd8, 0xf7, 0xcf, 0x33, 0xff, - 0x53, 0xc7, 0xf7, 0x3e, 0x4b, 0x54, 0xd0, 0xf9, 0xbc, 0xf0, 0x27, 0x15, 0xa5, 0xf7, 0x19, 0x9f, - 0x11, 0xff, 0x78, 0x4e, 0x81, 0xb4, 0x8a, 0x7d, 0x09, 0x26, 0x33, 0x53, 0x87, 0x5e, 0x82, 0xc1, - 0xd6, 0x96, 0x13, 0x93, 0x8c, 0x2b, 0xd0, 0x60, 0x8d, 0x16, 0xde, 0xdf, 0x9b, 0x9f, 0x50, 0x15, - 0x58, 0x09, 0xe6, 0xd8, 0xf6, 0x17, 0x4b, 0x30, 0x70, 0x2d, 0x74, 0x8f, 0x63, 0xa9, 0x5d, 0x32, - 0x96, 0xda, 0xd3, 0xf9, 0x19, 0x49, 0x7a, 0xae, 0xb2, 0x5a, 0x66, 0x95, 0x9d, 0x2d, 0x40, 0xeb, - 0xe0, 0x05, 0xb6, 0x0d, 0xa3, 0x2c, 0xe3, 0x89, 0xf0, 0x85, 0x7a, 0xc1, 0xd0, 0xac, 0xe6, 0x33, - 0x9a, 0xd5, 0xa4, 0x86, 0xaa, 0xe9, 0x57, 0xcf, 0xc0, 0xb0, 0xf0, 0xbd, 0xc9, 0x7a, 0xdf, 0x0a, - 0x5c, 0x2c, 0xe1, 0xf6, 0x3f, 0x2f, 0x83, 0x91, 0x61, 0x05, 0xfd, 0xae, 0x05, 0x0b, 0x11, 0x8f, - 0x64, 0x72, 0xab, 0xed, 0xc8, 0x0b, 0x9a, 0xf5, 0xc6, 0x16, 0x71, 0xdb, 0xbe, 0x17, 0x34, 0xd7, - 0x9b, 0x41, 0xa8, 0x8a, 0x57, 0xef, 0x91, 0x46, 0x9b, 0x99, 0xba, 0x0b, 0x27, 0x76, 0x51, 0xf7, - 0xce, 0x17, 0xf6, 0xf7, 0xe6, 0x17, 0x70, 0x5f, 0xad, 0xe0, 0x3e, 0x7b, 0x85, 0xfe, 0xc8, 0x82, - 0x45, 0x9e, 0x63, 0xa4, 0xf8, 0x48, 0x0a, 0x69, 0xa4, 0x35, 0x49, 0x34, 0x25, 0xb7, 0x41, 0xa2, - 0xed, 0xe5, 0x97, 0xc5, 0x24, 0x2f, 0xd6, 0xfa, 0x6b, 0x15, 0xf7, 0xdb, 0x4d, 0xfb, 0x5f, 0x97, - 0x61, 0x9c, 0xce, 0x67, 0x9a, 0x57, 0xe0, 0x25, 0x63, 0x99, 0x3c, 0x91, 0x59, 0x26, 0xd3, 0x06, - 0xf2, 0x83, 0x49, 0x29, 0x10, 0xc3, 0xb4, 0xef, 0xc4, 0xc9, 0x25, 0xe2, 0x44, 0xc9, 0x6d, 0xe2, - 0xb0, 0xeb, 0xdd, 0xac, 0xeb, 0x48, 0x81, 0x1b, 0x63, 0x65, 0xfb, 0xba, 0x92, 0x25, 0x86, 0x3b, - 0xe9, 0xa3, 0x1d, 0x40, 0xec, 0x2a, 0x39, 0x72, 0x82, 0x98, 0x8f, 0xc5, 0x13, 0xa6, 0xf1, 0xfe, - 0x5a, 0x9d, 0x13, 0xad, 0xa2, 0x2b, 0x1d, 0xd4, 0x70, 0x97, 0x16, 0x34, 0x67, 0x81, 0xc1, 0xa2, - 0xce, 0x02, 0x43, 0x39, 0x6e, 0xef, 0x5f, 0xb2, 0xe0, 0x04, 0xfd, 0x2c, 0xa6, 0x8b, 0x74, 0x8c, - 0x42, 0x98, 0xa4, 0xcb, 0xce, 0x27, 0x89, 0x2c, 0x13, 0xfb, 0x2b, 0x47, 0xb2, 0x36, 0xe9, 0xa4, - 0xe2, 0xdb, 0x65, 0x93, 0x18, 0xce, 0x52, 0xb7, 0xbf, 0x69, 0x01, 0x73, 0x5a, 0x3c, 0x86, 0xc3, - 0xec, 0xa2, 0x79, 0x98, 0xd9, 0xf9, 0x1c, 0xa3, 0xc7, 0x39, 0xf6, 0x22, 0x4c, 0x51, 0x68, 0x2d, - 0x0a, 0xef, 0xed, 0x4a, 0x41, 0x3b, 0xdf, 0x9a, 0xfd, 0xa5, 0x12, 0xdf, 0x36, 0x2a, 0x24, 0x13, - 0x7d, 0xd9, 0x82, 0x91, 0x86, 0xd3, 0x72, 0x1a, 0x3c, 0x3f, 0x55, 0x01, 0xeb, 0x8c, 0x51, 0x7f, - 0x61, 0x45, 0xd4, 0xe5, 0x96, 0x85, 0x0f, 0xcb, 0xa1, 0xcb, 0xe2, 0x5c, 0x6b, 0x82, 0x6a, 0x7c, - 0xee, 0x0e, 0x8c, 0x1b, 0xc4, 0x8e, 0x54, 0x0d, 0xfd, 0xb2, 0xc5, 0x99, 0xbe, 0x52, 0x15, 0xee, - 0xc2, 0x74, 0xa0, 0xfd, 0xa7, 0xec, 0x4c, 0x4a, 0xc6, 0x0b, 0xc5, 0xd9, 0x3a, 0xe3, 0x82, 0x9a, - 0x83, 0x66, 0x86, 0x20, 0xee, 0x6c, 0xc3, 0xfe, 0x55, 0x0b, 0x1e, 0xd1, 0x11, 0xb5, 0x18, 0xda, - 0x3c, 0xbb, 0x71, 0x15, 0x46, 0xc2, 0x16, 0x89, 0x9c, 0x54, 0x2d, 0x3a, 0x2b, 0xe7, 0xff, 0xba, - 0x28, 0xbf, 0xbf, 0x37, 0x3f, 0xa3, 0x53, 0x97, 0xe5, 0x58, 0xd5, 0x44, 0x36, 0x0c, 0xb1, 0x79, - 0x89, 0x45, 0xf4, 0x33, 0xcb, 0xd7, 0xc4, 0xee, 0xa5, 0x62, 0x2c, 0x20, 0xf6, 0xdf, 0xb0, 0xf8, - 0x72, 0xd3, 0xbb, 0x8e, 0x3e, 0x07, 0x53, 0xdb, 0x54, 0x83, 0x5a, 0xbd, 0xd7, 0x8a, 0xb8, 0xd5, - 0x5b, 0xce, 0xd8, 0x4b, 0xc5, 0x67, 0x4c, 0x1b, 0xee, 0xf2, 0xac, 0xe8, 0xfd, 0xd4, 0xd5, 0x0c, - 0x59, 0xdc, 0xd1, 0x90, 0xfd, 0xf7, 0x4b, 0x7c, 0xcf, 0x32, 0x19, 0xee, 0x19, 0x18, 0x6e, 0x85, - 0xee, 0xca, 0x7a, 0x15, 0x8b, 0xb9, 0x52, 0x4c, 0xa7, 0xc6, 0x8b, 0xb1, 0x84, 0xa3, 0x0b, 0x00, - 0xe4, 0x5e, 0x42, 0xa2, 0xc0, 0xf1, 0xd5, 0x4d, 0xba, 0x12, 0x95, 0x56, 0x15, 0x04, 0x6b, 0x58, - 0xb4, 0x4e, 0x2b, 0x0a, 0x77, 0x3c, 0x97, 0x05, 0x7f, 0x94, 0xcd, 0x3a, 0x35, 0x05, 0xc1, 0x1a, - 0x16, 0xd5, 0x5b, 0xdb, 0x41, 0xcc, 0x8f, 0x31, 0xe7, 0xb6, 0x48, 0x2f, 0x34, 0x92, 0xea, 0xad, - 0x37, 0x74, 0x20, 0x36, 0x71, 0xd1, 0x65, 0x18, 0x4a, 0x1c, 0x76, 0x3f, 0x3c, 0x58, 0xc4, 0xd9, - 0x66, 0x83, 0xe2, 0xea, 0xf9, 0x9c, 0x68, 0x55, 0x2c, 0x48, 0xd8, 0xff, 0xb1, 0x02, 0x90, 0x4a, - 0x5d, 0xe8, 0x8b, 0x9d, 0x1b, 0xfe, 0x23, 0x45, 0x45, 0xb6, 0x07, 0xb7, 0xdb, 0xd1, 0x57, 0x2d, - 0x18, 0x75, 0x7c, 0x3f, 0x6c, 0x38, 0x09, 0x9b, 0x9e, 0x52, 0x51, 0xd6, 0x23, 0x7a, 0xb2, 0x94, - 0xd6, 0xe5, 0x9d, 0x79, 0x41, 0xde, 0xd9, 0x6a, 0x90, 0xdc, 0xfe, 0xe8, 0x5d, 0x40, 0x1f, 0x96, - 0x52, 0x3b, 0xff, 0xc2, 0x73, 0x59, 0xa9, 0xbd, 0xc2, 0x18, 0xae, 0x26, 0xb0, 0xa3, 0xb7, 0x8d, - 0x74, 0x3c, 0x03, 0x45, 0x22, 0x78, 0x0d, 0x39, 0x24, 0x2f, 0x13, 0x0f, 0x7a, 0x53, 0xf7, 0x4a, - 0x1f, 0x2c, 0x12, 0x22, 0xaf, 0x89, 0xc3, 0x39, 0x1e, 0xe9, 0x09, 0x4c, 0xba, 0xe6, 0xc9, 0x2b, - 0x3c, 0xeb, 0xce, 0xe7, 0xb7, 0x90, 0x39, 0xb2, 0xd3, 0xb3, 0x36, 0x03, 0xc0, 0xd9, 0x26, 0xd0, - 0x9b, 0x3c, 0x66, 0x60, 0x3d, 0xd8, 0x0c, 0x85, 0x77, 0xdd, 0xb9, 0x02, 0xdf, 0x7c, 0x37, 0x4e, - 0xc8, 0x36, 0xad, 0x93, 0x1e, 0xae, 0xd7, 0x04, 0x15, 0xac, 0xe8, 0xa1, 0x0d, 0x18, 0x62, 0x01, - 0x5b, 0xf1, 0xec, 0x48, 0x11, 0x4b, 0x9c, 0x19, 0xa7, 0x9c, 0xee, 0x1f, 0xf6, 0x37, 0xc6, 0x82, - 0x16, 0xba, 0x24, 0x33, 0x15, 0xc4, 0xeb, 0xc1, 0x8d, 0x98, 0xb0, 0x4c, 0x05, 0x95, 0xe5, 0x0f, - 0xa5, 0xa9, 0x07, 0x78, 0x79, 0xd7, 0x84, 0x84, 0x46, 0x4d, 0x2a, 0xd8, 0x88, 0xff, 0x32, 0xcf, - 0xe1, 0x2c, 0x14, 0xe9, 0xa8, 0x99, 0x15, 0x31, 0x9d, 0xec, 0x9b, 0x26, 0x31, 0x9c, 0xa5, 0x7e, - 0xac, 0x47, 0xea, 0x5c, 0x00, 0x53, 0xd9, 0x4d, 0x79, 0xa4, 0x47, 0xf8, 0x4f, 0x06, 0x60, 0xc2, - 0x5c, 0x1c, 0x68, 0x11, 0x2a, 0x82, 0x88, 0xca, 0x7b, 0xa6, 0xf6, 0xc0, 0x55, 0x09, 0xc0, 0x29, - 0x0e, 0xcb, 0x00, 0xc7, 0xaa, 0x6b, 0x7e, 0x55, 0x69, 0x06, 0x38, 0x05, 0xc1, 0x1a, 0x16, 0x95, - 0x84, 0x6f, 0x87, 0x61, 0xa2, 0x4e, 0x02, 0xb5, 0x6e, 0x96, 0x59, 0x29, 0x16, 0x50, 0x7a, 0x02, - 0xdc, 0xa1, 0x1f, 0xd3, 0x37, 0xad, 0x8a, 0xea, 0x04, 0xb8, 0xac, 0x03, 0xb1, 0x89, 0x4b, 0x4f, - 0xb4, 0x30, 0x66, 0x0b, 0x51, 0xc8, 0xdb, 0xa9, 0x9f, 0x5a, 0x9d, 0x07, 0x31, 0x4a, 0x38, 0xfa, - 0x14, 0x3c, 0xa2, 0x62, 0x0e, 0x31, 0xb7, 0xd2, 0xca, 0x16, 0x87, 0x0c, 0x95, 0xf9, 0x91, 0x95, - 0xee, 0x68, 0xb8, 0x57, 0x7d, 0xf4, 0x1a, 0x4c, 0x08, 0x59, 0x59, 0x52, 0x1c, 0x36, 0xdd, 0x0d, - 0x2e, 0x1b, 0x50, 0x9c, 0xc1, 0x46, 0x55, 0x98, 0xa2, 0x25, 0x4c, 0x48, 0x95, 0x14, 0x78, 0xec, - 0xa4, 0x3a, 0xea, 0x2f, 0x67, 0xe0, 0xb8, 0xa3, 0x06, 0x5a, 0x82, 0x49, 0x2e, 0xac, 0x50, 0xc5, - 0x90, 0x7d, 0x07, 0xe1, 0x12, 0xab, 0x36, 0xc2, 0x75, 0x13, 0x8c, 0xb3, 0xf8, 0xe8, 0x15, 0x18, - 0x73, 0xa2, 0xc6, 0x96, 0x97, 0x90, 0x46, 0xd2, 0x8e, 0x78, 0x1e, 0x10, 0xcd, 0x5f, 0x63, 0x49, - 0x83, 0x61, 0x03, 0xd3, 0xfe, 0x2c, 0x9c, 0xe8, 0xe2, 0x7f, 0x4f, 0x17, 0x8e, 0xd3, 0xf2, 0xe4, - 0x98, 0x32, 0x1e, 0x67, 0x4b, 0xb5, 0x75, 0x39, 0x1a, 0x0d, 0x8b, 0xae, 0x4e, 0x66, 0x9e, 0xd6, - 0xd2, 0x92, 0xaa, 0xd5, 0xb9, 0x26, 0x01, 0x38, 0xc5, 0xb1, 0xff, 0xbc, 0x02, 0x9a, 0xf5, 0xa6, - 0x80, 0x97, 0xd1, 0x2b, 0x30, 0x26, 0x33, 0xed, 0x6a, 0x19, 0x2e, 0xd5, 0x30, 0x2f, 0x6a, 0x30, - 0x6c, 0x60, 0xd2, 0xbe, 0x05, 0xd2, 0x26, 0x95, 0xf5, 0x6f, 0x53, 0xc6, 0x2a, 0x9c, 0xe2, 0xa0, - 0x73, 0x30, 0x12, 0x13, 0x7f, 0xf3, 0x8a, 0x17, 0xdc, 0x11, 0x0b, 0x5b, 0x71, 0xe6, 0xba, 0x28, - 0xc7, 0x0a, 0x03, 0x2d, 0x43, 0xb9, 0xed, 0xb9, 0x62, 0x29, 0x4b, 0xb1, 0xa1, 0x7c, 0x63, 0xbd, - 0x7a, 0x7f, 0x6f, 0xfe, 0x89, 0x5e, 0x09, 0x8c, 0xa9, 0x7e, 0x1e, 0x2f, 0xd0, 0xed, 0x47, 0x2b, - 0x77, 0xb3, 0xd3, 0x0f, 0xf5, 0x69, 0xa7, 0xbf, 0x00, 0x20, 0x46, 0x2d, 0xd7, 0x72, 0x39, 0xfd, - 0x6a, 0x17, 0x15, 0x04, 0x6b, 0x58, 0x54, 0xcb, 0x6f, 0x44, 0xc4, 0x91, 0x8a, 0x30, 0xf7, 0x0b, - 0x1f, 0x39, 0xbc, 0x96, 0xbf, 0x92, 0x25, 0x86, 0x3b, 0xe9, 0xa3, 0x10, 0xa6, 0x5d, 0x11, 0xd8, - 0x9a, 0x36, 0x5a, 0xe9, 0xdf, 0x19, 0x9d, 0xb9, 0xd4, 0x64, 0x09, 0xe1, 0x4e, 0xda, 0xe8, 0x33, - 0x30, 0x27, 0x0b, 0x3b, 0xa3, 0x8a, 0xd9, 0x76, 0x29, 0x2f, 0x9f, 0xde, 0xdf, 0x9b, 0x9f, 0xab, - 0xf6, 0xc4, 0xc2, 0x07, 0x50, 0x40, 0x6f, 0xc1, 0x10, 0xbb, 0xd7, 0x89, 0x67, 0x47, 0xd9, 0x89, - 0xf7, 0x62, 0x91, 0x90, 0x06, 0xba, 0xea, 0x17, 0xd8, 0xed, 0x90, 0x70, 0xd6, 0x4d, 0x2f, 0xcb, - 0x58, 0x21, 0x16, 0x34, 0x51, 0x0b, 0x46, 0x9d, 0x20, 0x08, 0x13, 0x87, 0x0b, 0x62, 0x63, 0x45, - 0x64, 0x49, 0xad, 0x89, 0xa5, 0xb4, 0x2e, 0x6f, 0x47, 0xf9, 0xff, 0x69, 0x10, 0xac, 0x37, 0x81, - 0xee, 0xc2, 0x64, 0x78, 0x97, 0x32, 0x4c, 0x79, 0xb5, 0x11, 0xcf, 0x8e, 0x9b, 0x03, 0xcb, 0x31, - 0xd4, 0x1a, 0x95, 0x35, 0x4e, 0x66, 0x12, 0xc5, 0xd9, 0x56, 0xd0, 0x82, 0x61, 0xae, 0x9e, 0x48, - 0x5d, 0xd2, 0x53, 0x73, 0xb5, 0x6e, 0x9d, 0x66, 0x91, 0xeb, 0xdc, 0x0d, 0x95, 0x71, 0x84, 0xc9, - 0x4c, 0xe4, 0x7a, 0x0a, 0xc2, 0x3a, 0xde, 0xdc, 0x47, 0x61, 0x54, 0x9b, 0xf8, 0x7e, 0x7c, 0x9f, - 0xe7, 0x5e, 0x83, 0xa9, 0xec, 0x84, 0xf6, 0xe5, 0x3b, 0xfd, 0x3f, 0x4b, 0x30, 0xd9, 0xe5, 0xde, - 0xe8, 0x8e, 0xc7, 0xfc, 0xf7, 0x0d, 0xd6, 0x77, 0xd9, 0x0b, 0x5c, 0xcc, 0x20, 0x26, 0x03, 0x2b, - 0x15, 0x60, 0x60, 0x92, 0x9b, 0x96, 0x7b, 0x72, 0x53, 0xc1, 0xb4, 0x06, 0xde, 0x0f, 0xd3, 0x32, - 0xcf, 0x89, 0xc1, 0x42, 0xe7, 0xc4, 0x03, 0x60, 0x74, 0xc6, 0x51, 0x33, 0x5c, 0xe0, 0xa8, 0xf9, - 0x46, 0x09, 0xa6, 0x52, 0x3f, 0x71, 0x91, 0x7e, 0xfb, 0xe8, 0xaf, 0x21, 0x36, 0x8c, 0x6b, 0x88, - 0xbc, 0xec, 0xda, 0x99, 0xfe, 0xf5, 0xbc, 0x92, 0x78, 0x2b, 0x73, 0x25, 0xf1, 0x62, 0x9f, 0x74, - 0x0f, 0xbe, 0x9e, 0xf8, 0x6e, 0x09, 0x4e, 0x66, 0xab, 0xac, 0xf8, 0x8e, 0xb7, 0x7d, 0x0c, 0xf3, - 0xf5, 0x29, 0x63, 0xbe, 0x5e, 0xee, 0x6f, 0x5c, 0xac, 0x93, 0x3d, 0x27, 0xcd, 0xc9, 0x4c, 0xda, - 0x47, 0x0f, 0x43, 0xfc, 0xe0, 0x99, 0xfb, 0x03, 0x0b, 0x1e, 0xed, 0x5a, 0xef, 0x18, 0x0c, 0xaf, - 0x6f, 0x98, 0x86, 0xd7, 0x17, 0x0e, 0x31, 0xba, 0x1e, 0x96, 0xd8, 0x5f, 0x2b, 0xf7, 0x18, 0x15, - 0x33, 0x4d, 0x5d, 0x87, 0x51, 0xa7, 0xd1, 0x20, 0x71, 0x7c, 0x35, 0x74, 0x55, 0x0e, 0xac, 0xe7, - 0xd9, 0xd9, 0x92, 0x16, 0xdf, 0xdf, 0x9b, 0x9f, 0xcb, 0x92, 0x48, 0xc1, 0x58, 0xa7, 0x60, 0x66, - 0xe7, 0x2b, 0x1d, 0x51, 0x76, 0xbe, 0x0b, 0x00, 0x3b, 0x4a, 0x8b, 0xcd, 0x5a, 0xbc, 0x34, 0xfd, - 0x56, 0xc3, 0x42, 0xff, 0x3f, 0x93, 0x08, 0xb9, 0x93, 0xc6, 0x80, 0x19, 0x72, 0x9a, 0xf3, 0xfd, - 0x74, 0x87, 0x0f, 0x1e, 0xd9, 0xaa, 0xac, 0x83, 0x8a, 0x24, 0xfa, 0x04, 0x4c, 0xc5, 0x3c, 0x7f, - 0xc2, 0x8a, 0xef, 0xc4, 0x2c, 0x40, 0x42, 0xf0, 0x53, 0x16, 0xa4, 0x5a, 0xcf, 0xc0, 0x70, 0x07, - 0xb6, 0xfd, 0x9d, 0x32, 0x7c, 0xf0, 0x80, 0x65, 0x8b, 0x96, 0xcc, 0x5b, 0xdb, 0xe7, 0xb2, 0xf6, - 0x9f, 0xb9, 0xae, 0x95, 0x0d, 0x83, 0x50, 0xe6, 0x6b, 0x97, 0xde, 0xf7, 0xd7, 0xfe, 0x9a, 0x6e, - 0xad, 0xe3, 0x7e, 0x9b, 0x17, 0x0f, 0xbd, 0x31, 0x7f, 0x5a, 0x8d, 0xf5, 0x5f, 0xb0, 0xe0, 0x89, - 0xae, 0xc3, 0x32, 0xbc, 0x44, 0x16, 0xa1, 0xd2, 0xa0, 0x85, 0x5a, 0x38, 0x53, 0x1a, 0x47, 0x28, - 0x01, 0x38, 0xc5, 0x31, 0x9c, 0x41, 0x4a, 0xb9, 0xce, 0x20, 0xbf, 0x67, 0xc1, 0x4c, 0xb6, 0x13, - 0xc7, 0xc0, 0xb7, 0xea, 0x26, 0xdf, 0x5a, 0xe8, 0xef, 0xe3, 0xf7, 0x60, 0x59, 0xff, 0x6d, 0x02, - 0x4e, 0x75, 0x9c, 0x7a, 0x7c, 0x16, 0x7f, 0xc1, 0x82, 0xe9, 0x26, 0x93, 0xde, 0xb5, 0x98, 0x31, - 0x31, 0xae, 0x9c, 0x40, 0xbb, 0x03, 0x43, 0xcd, 0xb8, 0x2e, 0xd2, 0x81, 0x82, 0x3b, 0x1b, 0x43, - 0x5f, 0xb1, 0x60, 0xc6, 0xb9, 0x1b, 0x77, 0x3c, 0x0e, 0x23, 0x16, 0xd2, 0x6b, 0x39, 0xc6, 0xb2, - 0x9c, 0x67, 0x65, 0x96, 0x67, 0xf7, 0xf7, 0xe6, 0x67, 0xba, 0x61, 0xe1, 0xae, 0xad, 0xd2, 0xef, - 0xbb, 0x25, 0x62, 0x47, 0x8a, 0x45, 0x3f, 0x76, 0x8b, 0x34, 0xe1, 0x6c, 0x4d, 0x42, 0xb0, 0xa2, - 0x88, 0xde, 0x81, 0x4a, 0x53, 0x86, 0x89, 0x65, 0xd9, 0x66, 0x8f, 0x69, 0xee, 0x16, 0x55, 0xc6, - 0x7d, 0xf7, 0x15, 0x08, 0xa7, 0x44, 0xd1, 0x25, 0x28, 0x07, 0x9b, 0xb1, 0x08, 0xc8, 0xce, 0xf3, - 0x01, 0x32, 0x3d, 0xaf, 0x78, 0x0c, 0xeb, 0xb5, 0xb5, 0x3a, 0xa6, 0x24, 0x28, 0xa5, 0xe8, 0xb6, - 0x2b, 0xac, 0xc4, 0x39, 0x94, 0xf0, 0x72, 0xb5, 0x93, 0x12, 0x5e, 0xae, 0x62, 0x4a, 0x02, 0xd5, - 0x60, 0x90, 0x45, 0xa6, 0x08, 0x13, 0x70, 0x4e, 0xd4, 0x7e, 0x47, 0xfc, 0x0d, 0x4f, 0x22, 0xc9, - 0x8a, 0x31, 0x27, 0x84, 0x36, 0x60, 0xa8, 0xc1, 0xde, 0x41, 0x10, 0xba, 0x79, 0x5e, 0x3e, 0x8b, - 0x8e, 0x37, 0x13, 0xf8, 0xbd, 0x17, 0x2f, 0xc7, 0x82, 0x16, 0xa3, 0x4a, 0x5a, 0x5b, 0x9b, 0xb1, - 0x50, 0xbe, 0xf3, 0xa8, 0x76, 0xbc, 0x68, 0x21, 0xa8, 0xb2, 0x72, 0x2c, 0x68, 0xa1, 0x2a, 0x94, - 0x36, 0x1b, 0x22, 0x70, 0x25, 0xc7, 0xf4, 0x6b, 0x06, 0x24, 0x2f, 0x0f, 0xed, 0xef, 0xcd, 0x97, - 0xd6, 0x56, 0x70, 0x69, 0xb3, 0x81, 0xde, 0x80, 0xe1, 0x4d, 0x1e, 0x62, 0x2a, 0xf2, 0xce, 0x9e, - 0xcf, 0x8b, 0x83, 0xed, 0x88, 0x47, 0xe5, 0xf1, 0x19, 0x02, 0x80, 0x25, 0x39, 0x96, 0x92, 0x4f, - 0x05, 0xcd, 0x8a, 0xc4, 0xb3, 0x0b, 0xfd, 0x05, 0xd9, 0x0a, 0x9d, 0x54, 0x95, 0x62, 0x8d, 0x22, - 0x5d, 0xf3, 0x8e, 0x7c, 0xd2, 0x85, 0x25, 0x9d, 0xcd, 0x5d, 0xf3, 0x5d, 0x5f, 0x80, 0xe1, 0x6b, - 0x5e, 0x81, 0x70, 0x4a, 0x14, 0xb5, 0x61, 0x7c, 0x27, 0x6e, 0x6d, 0x11, 0xb9, 0xf5, 0x59, 0x26, - 0xda, 0xd1, 0x0b, 0x1f, 0xcf, 0x49, 0x2f, 0x2c, 0xaa, 0x78, 0x51, 0xd2, 0x76, 0xfc, 0x0e, 0x0e, - 0xc6, 0x72, 0xa0, 0xdd, 0xd4, 0xc9, 0x62, 0xb3, 0x15, 0xfa, 0x49, 0xde, 0x6b, 0x87, 0xb7, 0x77, - 0x13, 0x22, 0x32, 0xd5, 0xe6, 0x7c, 0x92, 0xd7, 0x39, 0x72, 0xe7, 0x27, 0x11, 0x00, 0x2c, 0xc9, - 0xa9, 0x29, 0x63, 0xdc, 0x78, 0xaa, 0xf0, 0x94, 0x75, 0x8c, 0x21, 0x9d, 0x32, 0xc6, 0x7d, 0x53, - 0xa2, 0x8c, 0xeb, 0xb6, 0xb6, 0xc2, 0x24, 0x0c, 0x32, 0xbc, 0x7f, 0xba, 0x08, 0xd7, 0xad, 0x75, - 0xa9, 0xd9, 0xc9, 0x75, 0xbb, 0x61, 0xe1, 0xae, 0xad, 0xa2, 0x00, 0x26, 0x5a, 0x61, 0x94, 0xdc, - 0x0d, 0x23, 0xb9, 0x0e, 0x51, 0x21, 0x1d, 0xd1, 0xa8, 0x23, 0xda, 0x66, 0x6e, 0xb8, 0x26, 0x04, - 0x67, 0xa8, 0xd3, 0x4f, 0x17, 0x37, 0x1c, 0x9f, 0xac, 0x5f, 0x9f, 0x3d, 0x51, 0xe4, 0xd3, 0xd5, - 0x39, 0x72, 0xe7, 0xa7, 0x13, 0x00, 0x2c, 0xc9, 0xd9, 0xbf, 0x3a, 0xd4, 0x29, 0x38, 0x30, 0xd5, - 0xe0, 0xaf, 0x77, 0xde, 0xc4, 0x7e, 0xa2, 0x7f, 0x0d, 0xf8, 0x01, 0xde, 0xc9, 0x7e, 0xc5, 0x82, - 0x53, 0xad, 0xae, 0x62, 0x81, 0x38, 0x7a, 0xfb, 0x55, 0xa4, 0xf9, 0xb4, 0xa8, 0x84, 0xd2, 0xdd, - 0xe1, 0xb8, 0x47, 0x9b, 0x59, 0x61, 0xba, 0xfc, 0xbe, 0x85, 0xe9, 0x5b, 0x30, 0xc2, 0xa4, 0xbf, - 0x34, 0x5d, 0x4c, 0x9f, 0x99, 0x55, 0xd8, 0x21, 0xbe, 0x22, 0x48, 0x60, 0x45, 0x8c, 0x4e, 0xdc, - 0xe3, 0xd9, 0x41, 0x60, 0xc2, 0xc0, 0x22, 0x8d, 0x21, 0xd7, 0x54, 0xd6, 0xc4, 0x4c, 0x3c, 0x5e, - 0x3b, 0x08, 0xf9, 0x7e, 0x1e, 0x02, 0x3e, 0xb8, 0x31, 0x54, 0xed, 0xa2, 0x2a, 0x0d, 0x99, 0xd7, - 0x2e, 0xf9, 0xea, 0xd2, 0xf1, 0x8a, 0xf8, 0xff, 0xc0, 0xea, 0x22, 0x91, 0x72, 0xb5, 0xec, 0xe3, - 0xa6, 0x5a, 0xf6, 0x74, 0x56, 0x2d, 0xeb, 0x30, 0xc6, 0x18, 0x1a, 0x59, 0xf1, 0x34, 0xac, 0x45, - 0xf3, 0xe1, 0xd8, 0x3e, 0x9c, 0xc9, 0x63, 0x77, 0xcc, 0x15, 0xcb, 0x55, 0x97, 0x90, 0xa9, 0x2b, - 0x96, 0xbb, 0x5e, 0xc5, 0x0c, 0x52, 0x34, 0xa5, 0x82, 0xfd, 0x8b, 0x25, 0x28, 0xd7, 0x42, 0xf7, - 0x18, 0x8c, 0x4b, 0x17, 0x0d, 0xe3, 0xd2, 0x53, 0xb9, 0x4f, 0xfc, 0xf5, 0x34, 0x25, 0x5d, 0xcf, - 0x98, 0x92, 0x7e, 0x2e, 0x9f, 0xd4, 0xc1, 0x86, 0xa3, 0xef, 0x95, 0x41, 0x7f, 0xa4, 0x10, 0xfd, - 0xfb, 0xc3, 0x78, 0xe8, 0x96, 0x8b, 0xbd, 0x5b, 0x28, 0xda, 0x60, 0x9e, 0x5c, 0x32, 0xae, 0xef, - 0xa7, 0xd6, 0x51, 0xf7, 0x16, 0xf1, 0x9a, 0x5b, 0x09, 0x71, 0xb3, 0x03, 0x3b, 0x3e, 0x47, 0xdd, - 0x3f, 0xb3, 0x60, 0x32, 0xd3, 0x3a, 0xf2, 0xbb, 0x05, 0x04, 0x1d, 0xd2, 0x5c, 0x34, 0x9d, 0x1b, - 0x41, 0xb4, 0x00, 0xa0, 0xac, 0xfe, 0xd2, 0x24, 0xc3, 0xa4, 0x53, 0x75, 0x2d, 0x10, 0x63, 0x0d, - 0x03, 0xbd, 0x04, 0xa3, 0x49, 0xd8, 0x0a, 0xfd, 0xb0, 0xb9, 0x7b, 0x99, 0xc8, 0x64, 0x1f, 0xea, - 0xc6, 0x64, 0x23, 0x05, 0x61, 0x1d, 0xcf, 0xfe, 0x7e, 0x19, 0xb2, 0x4f, 0x5c, 0xfe, 0xbf, 0x75, - 0xfa, 0xd3, 0xb3, 0x4e, 0xff, 0xd0, 0x82, 0x29, 0xda, 0x3a, 0x73, 0x9d, 0x91, 0x0e, 0xb5, 0xea, - 0x4d, 0x08, 0xeb, 0x80, 0x37, 0x21, 0x9e, 0xa6, 0xdc, 0xce, 0x0d, 0xdb, 0x89, 0x30, 0x22, 0x69, - 0x4c, 0x8c, 0x96, 0x62, 0x01, 0x15, 0x78, 0x24, 0x8a, 0x44, 0xe4, 0x91, 0x8e, 0x47, 0xa2, 0x08, - 0x0b, 0xa8, 0x7c, 0x32, 0x62, 0xa0, 0xc7, 0x93, 0x11, 0x2c, 0x5d, 0x96, 0x70, 0xd7, 0x10, 0x62, - 0x85, 0x96, 0x2e, 0x4b, 0xfa, 0x71, 0xa4, 0x38, 0xf6, 0xb7, 0xca, 0x30, 0x56, 0x0b, 0xdd, 0xd4, - 0x53, 0xfe, 0x45, 0xc3, 0x53, 0xfe, 0x4c, 0xc6, 0x53, 0x7e, 0x4a, 0xc7, 0x7d, 0x30, 0x8e, 0xf2, - 0x22, 0xad, 0x1a, 0x7b, 0xd4, 0xe4, 0x90, 0x4e, 0xf2, 0x46, 0x5a, 0x35, 0x45, 0x08, 0x9b, 0x74, - 0x7f, 0x96, 0x9c, 0xe3, 0xff, 0xb7, 0x05, 0x13, 0xb5, 0xd0, 0xa5, 0x0b, 0xf4, 0x67, 0x69, 0x35, - 0xea, 0xc9, 0xd8, 0x86, 0x0e, 0x48, 0xc6, 0xf6, 0xeb, 0x16, 0x0c, 0xd7, 0x42, 0xf7, 0x18, 0x0c, - 0xac, 0x6b, 0xa6, 0x81, 0xf5, 0x89, 0x5c, 0xce, 0xdb, 0xc3, 0xa6, 0xfa, 0x9d, 0x32, 0x8c, 0xd3, - 0x1e, 0x87, 0x4d, 0xf9, 0xbd, 0x8c, 0xb9, 0xb1, 0x0a, 0xcc, 0x0d, 0x15, 0x09, 0x43, 0xdf, 0x0f, - 0xef, 0x66, 0xbf, 0xdd, 0x1a, 0x2b, 0xc5, 0x02, 0x8a, 0xce, 0xc1, 0x48, 0x2b, 0x22, 0x3b, 0x5e, - 0xd8, 0x8e, 0xb3, 0x51, 0x8c, 0x35, 0x51, 0x8e, 0x15, 0x06, 0x7a, 0x11, 0xc6, 0x62, 0x2f, 0x68, - 0x10, 0xe9, 0xcc, 0x31, 0xc0, 0x9c, 0x39, 0x78, 0xde, 0x4b, 0xad, 0x1c, 0x1b, 0x58, 0xe8, 0x16, - 0x54, 0xd8, 0x7f, 0xb6, 0x83, 0xfa, 0x7f, 0xf3, 0x81, 0xe7, 0x56, 0x91, 0x04, 0x70, 0x4a, 0x0b, - 0x5d, 0x00, 0x48, 0xa4, 0xdb, 0x49, 0x2c, 0x92, 0xcb, 0x28, 0xb9, 0x54, 0x39, 0xa4, 0xc4, 0x58, - 0xc3, 0x42, 0xcf, 0x41, 0x25, 0x71, 0x3c, 0xff, 0x8a, 0x17, 0x90, 0x58, 0xb8, 0xed, 0x88, 0x1c, - 0xd6, 0xa2, 0x10, 0xa7, 0x70, 0x7a, 0xde, 0xb3, 0x18, 0x6a, 0xfe, 0x9e, 0xcc, 0x08, 0xc3, 0x66, - 0xe7, 0xfd, 0x15, 0x55, 0x8a, 0x35, 0x0c, 0xfb, 0x15, 0x38, 0x59, 0x0b, 0xdd, 0x5a, 0x18, 0x25, - 0x6b, 0x61, 0x74, 0xd7, 0x89, 0x5c, 0xf9, 0xfd, 0xe6, 0x65, 0xea, 0x64, 0x7a, 0x26, 0x0f, 0x72, - 0x9b, 0xa3, 0x91, 0x0a, 0xf9, 0x05, 0x76, 0xe2, 0xf7, 0x19, 0x82, 0xf1, 0xa3, 0x12, 0xa0, 0x1a, - 0x73, 0x8c, 0x31, 0x9e, 0x1f, 0xda, 0x82, 0x89, 0x98, 0x5c, 0xf1, 0x82, 0xf6, 0x3d, 0x41, 0xaa, - 0x58, 0xcc, 0x4b, 0x7d, 0x55, 0xaf, 0xc3, 0x2d, 0x1d, 0x66, 0x19, 0xce, 0xd0, 0xa5, 0x93, 0x19, - 0xb5, 0x83, 0xa5, 0xf8, 0x46, 0x4c, 0x22, 0xf1, 0xdc, 0x0e, 0x9b, 0x4c, 0x2c, 0x0b, 0x71, 0x0a, - 0xa7, 0x8b, 0x87, 0xfd, 0xb9, 0x16, 0x06, 0x38, 0x0c, 0x13, 0xb9, 0xdc, 0xd8, 0xf3, 0x0b, 0x5a, - 0x39, 0x36, 0xb0, 0xd0, 0x1a, 0xa0, 0xb8, 0xdd, 0x6a, 0xf9, 0xec, 0xae, 0xd1, 0xf1, 0x2f, 0x46, - 0x61, 0xbb, 0xc5, 0xfd, 0xa3, 0xc5, 0xcb, 0x05, 0xf5, 0x0e, 0x28, 0xee, 0x52, 0x83, 0x32, 0x8b, - 0xcd, 0x98, 0xfd, 0x16, 0x01, 0xd5, 0xdc, 0x5e, 0x59, 0x67, 0x45, 0x58, 0xc2, 0xec, 0xcf, 0xb3, - 0x03, 0x8e, 0xbd, 0x83, 0x92, 0xb4, 0x23, 0x82, 0xb6, 0x61, 0xbc, 0xc5, 0x0e, 0xb1, 0x24, 0x0a, - 0x7d, 0x9f, 0x48, 0xf9, 0xf2, 0x70, 0xae, 0x39, 0xfc, 0xe5, 0x03, 0x9d, 0x1c, 0x36, 0xa9, 0xdb, - 0xff, 0x7d, 0x82, 0xf1, 0x2a, 0x71, 0xdd, 0x3b, 0x2c, 0x9c, 0x70, 0x85, 0x24, 0xf7, 0xa1, 0x22, - 0x2f, 0x9a, 0xa5, 0xe7, 0x80, 0x70, 0xe9, 0xc5, 0x92, 0x0a, 0xfa, 0x34, 0x73, 0x31, 0xe7, 0x0c, - 0xa2, 0xf8, 0x3b, 0x8d, 0x1c, 0xdf, 0x70, 0x2f, 0x17, 0x24, 0xb0, 0x46, 0x0e, 0x5d, 0x81, 0x71, - 0xf1, 0x6c, 0x86, 0x30, 0x53, 0x94, 0x0d, 0x15, 0x7b, 0x1c, 0xeb, 0xc0, 0xfb, 0xd9, 0x02, 0x6c, - 0x56, 0x46, 0x4d, 0x78, 0x5c, 0x7b, 0x16, 0xaa, 0x8b, 0x1b, 0x19, 0xe7, 0x3c, 0x4f, 0xec, 0xef, - 0xcd, 0x3f, 0xbe, 0x71, 0x10, 0x22, 0x3e, 0x98, 0x0e, 0xba, 0x0e, 0x27, 0x9d, 0x46, 0xe2, 0xed, - 0x90, 0x2a, 0x71, 0x5c, 0xdf, 0x0b, 0x88, 0x19, 0x75, 0xff, 0xe8, 0xfe, 0xde, 0xfc, 0xc9, 0xa5, - 0x6e, 0x08, 0xb8, 0x7b, 0x3d, 0xf4, 0x71, 0xa8, 0xb8, 0x41, 0x2c, 0xe6, 0x60, 0xc8, 0x78, 0x05, - 0xad, 0x52, 0xbd, 0x56, 0x57, 0xe3, 0x4f, 0xff, 0xe0, 0xb4, 0x02, 0x7a, 0x8f, 0xbf, 0xf2, 0xaf, - 0xb4, 0x19, 0xfe, 0xfa, 0xde, 0xcb, 0x85, 0xf4, 0x67, 0x23, 0x16, 0x86, 0x5b, 0xf0, 0x94, 0xbb, - 0xa6, 0x11, 0x26, 0x63, 0x34, 0x81, 0x3e, 0x09, 0x28, 0x26, 0xd1, 0x8e, 0xd7, 0x20, 0x4b, 0x0d, - 0x96, 0x2c, 0x96, 0xd9, 0x78, 0x46, 0x8c, 0xb8, 0x05, 0x54, 0xef, 0xc0, 0xc0, 0x5d, 0x6a, 0xa1, - 0x4b, 0x94, 0xf3, 0xe8, 0xa5, 0xc2, 0xbb, 0x56, 0x0a, 0x86, 0xb3, 0x55, 0xd2, 0x8a, 0x48, 0xc3, - 0x49, 0x88, 0x6b, 0x52, 0xc4, 0x99, 0x7a, 0xf4, 0x5c, 0x52, 0xef, 0x01, 0x80, 0xe9, 0x13, 0xda, - 0xf9, 0x26, 0x00, 0xd5, 0xb3, 0xb6, 0xc2, 0x38, 0xb9, 0x46, 0x92, 0xbb, 0x61, 0x74, 0x47, 0x24, - 0xd8, 0x4a, 0x33, 0xef, 0xa5, 0x20, 0xac, 0xe3, 0x51, 0x19, 0x8a, 0x5d, 0x9e, 0xad, 0x57, 0xd9, - 0xcd, 0xc4, 0x48, 0xba, 0x77, 0x2e, 0xf1, 0x62, 0x2c, 0xe1, 0x12, 0x75, 0xbd, 0xb6, 0xc2, 0x6e, - 0x19, 0x32, 0xa8, 0xeb, 0xb5, 0x15, 0x2c, 0xe1, 0x28, 0xec, 0x7c, 0x6b, 0x6e, 0xa2, 0xc8, 0x8d, - 0x4f, 0x27, 0x27, 0x2f, 0xf8, 0xdc, 0xdc, 0x3d, 0x98, 0x52, 0xef, 0xdd, 0xf1, 0x1c, 0x64, 0xf1, - 0xec, 0x24, 0x5b, 0x38, 0x87, 0x49, 0x65, 0xa6, 0xec, 0x7a, 0xeb, 0x19, 0x9a, 0xb8, 0xa3, 0x15, - 0x23, 0x7b, 0xc4, 0x54, 0xee, 0x1b, 0x0f, 0x8b, 0x50, 0x89, 0xdb, 0xb7, 0xdd, 0x70, 0xdb, 0xf1, - 0x02, 0x76, 0x15, 0xa0, 0xbf, 0x98, 0x2f, 0x01, 0x38, 0xc5, 0x41, 0x35, 0x18, 0x71, 0x84, 0x0a, - 0x27, 0x4c, 0xf6, 0x39, 0xd1, 0xe5, 0x52, 0xe1, 0xe3, 0xd6, 0x55, 0xf9, 0x0f, 0x2b, 0x2a, 0xe8, - 0x55, 0x18, 0x17, 0xc1, 0x51, 0xc2, 0x89, 0xf1, 0x84, 0xe9, 0x48, 0x5f, 0xd7, 0x81, 0xd8, 0xc4, - 0x45, 0x4d, 0x98, 0xa0, 0x54, 0x52, 0x06, 0x38, 0x3b, 0xd3, 0x1f, 0x0f, 0xd5, 0xb2, 0x69, 0xeb, - 0x64, 0x70, 0x86, 0x2c, 0x72, 0xe1, 0x31, 0xa7, 0x9d, 0x84, 0xdb, 0x74, 0x27, 0x98, 0xfb, 0x64, - 0x23, 0xbc, 0x43, 0x82, 0xd9, 0x93, 0x6c, 0x05, 0x9e, 0xd9, 0xdf, 0x9b, 0x7f, 0x6c, 0xe9, 0x00, - 0x3c, 0x7c, 0x20, 0x15, 0xf4, 0x36, 0x8c, 0x26, 0xa1, 0x2f, 0x7c, 0x93, 0xe3, 0xd9, 0x53, 0x45, - 0x72, 0xda, 0x6c, 0xa8, 0x0a, 0xba, 0x19, 0x43, 0x11, 0xc1, 0x3a, 0x45, 0xf4, 0x0e, 0x8c, 0xd1, - 0x6f, 0x7f, 0xd5, 0x69, 0xb5, 0xbc, 0xa0, 0x19, 0xcf, 0x3e, 0x52, 0x64, 0xb6, 0x54, 0xc6, 0x46, - 0x73, 0xff, 0xb2, 0x22, 0x12, 0x63, 0x83, 0xe2, 0xdc, 0xcf, 0xc3, 0x74, 0x07, 0xd3, 0xeb, 0xcb, - 0x41, 0xf4, 0x3f, 0x0c, 0x42, 0x45, 0xd9, 0x0c, 0xd1, 0xa2, 0x69, 0x1e, 0x7e, 0x34, 0x6b, 0x1e, - 0x1e, 0xa1, 0x22, 0x9a, 0x6e, 0x11, 0xfe, 0x4c, 0x97, 0x37, 0xd4, 0x9f, 0xcd, 0xdd, 0xe5, 0xc5, - 0x63, 0xb6, 0xfa, 0x78, 0x69, 0x3e, 0xd5, 0x1b, 0x07, 0x0e, 0xd4, 0x1b, 0x0b, 0xbe, 0x0b, 0x48, - 0x35, 0xc4, 0x56, 0xe8, 0xae, 0xd7, 0xb2, 0xcf, 0x5e, 0xd5, 0x68, 0x21, 0xe6, 0x30, 0x26, 0xd9, - 0xd3, 0x53, 0x9b, 0x49, 0xf6, 0xc3, 0x87, 0x94, 0xec, 0x25, 0x01, 0x9c, 0xd2, 0x42, 0x3b, 0x30, - 0xdd, 0x30, 0x5f, 0x31, 0x53, 0x91, 0x58, 0xcf, 0xf7, 0xf1, 0x8a, 0x58, 0x5b, 0x7b, 0xe2, 0x64, - 0x25, 0x4b, 0x0f, 0x77, 0x36, 0x81, 0x5e, 0x85, 0x91, 0xf7, 0xc2, 0x98, 0x5d, 0x5c, 0x88, 0xa3, - 0x4b, 0x46, 0xbc, 0x8c, 0xbc, 0x7e, 0xbd, 0xce, 0xca, 0xef, 0xef, 0xcd, 0x8f, 0xd6, 0x42, 0x57, - 0xfe, 0xc5, 0xaa, 0x02, 0xfa, 0x82, 0x05, 0x27, 0x8d, 0x9d, 0xac, 0x7a, 0x0e, 0x87, 0xe9, 0xf9, - 0xe3, 0xa2, 0xe5, 0x93, 0xeb, 0xdd, 0x68, 0xe2, 0xee, 0x4d, 0xd9, 0xbf, 0xc3, 0x8d, 0xa4, 0xc2, - 0x6c, 0x42, 0xe2, 0xb6, 0x7f, 0x1c, 0xcf, 0x0d, 0x5c, 0x37, 0x2c, 0x3a, 0x0f, 0xc0, 0x4c, 0xff, - 0xef, 0x2c, 0x66, 0xa6, 0xdf, 0x20, 0xdb, 0x2d, 0xdf, 0x49, 0x8e, 0xc3, 0x7f, 0xf8, 0xd3, 0x30, - 0x92, 0x88, 0xd6, 0x8a, 0xbd, 0x95, 0xa0, 0x75, 0x8f, 0x5d, 0x5f, 0xa8, 0xa3, 0x4f, 0x96, 0x62, - 0x45, 0xd0, 0xfe, 0x97, 0xfc, 0xab, 0x48, 0xc8, 0x31, 0xd8, 0x22, 0xae, 0x99, 0xb6, 0x88, 0x67, - 0x0a, 0x8f, 0xa5, 0x87, 0x4d, 0xe2, 0xfb, 0xe6, 0x08, 0x98, 0x86, 0xf2, 0xd3, 0x73, 0x8f, 0x64, - 0xff, 0x8a, 0x05, 0x33, 0xdd, 0x2e, 0xf4, 0xa9, 0x08, 0xc3, 0xf5, 0x23, 0x75, 0xc3, 0xa6, 0x66, - 0xf5, 0xa6, 0x28, 0xc7, 0x0a, 0xa3, 0x70, 0xf2, 0xf2, 0xfe, 0x92, 0x43, 0x5d, 0x07, 0xf3, 0x3d, - 0x3c, 0xf4, 0x1a, 0x0f, 0x17, 0xb0, 0xd4, 0x83, 0x75, 0xfd, 0x85, 0x0a, 0xd8, 0xdf, 0x2e, 0xc1, - 0x0c, 0x37, 0x73, 0x2f, 0xed, 0x84, 0x9e, 0x5b, 0x0b, 0x5d, 0x11, 0x3c, 0xe1, 0xc2, 0x58, 0x4b, - 0x53, 0x6f, 0x8b, 0x25, 0x9b, 0xd1, 0x15, 0xe2, 0x54, 0xa5, 0xd0, 0x4b, 0xb1, 0x41, 0x95, 0xb6, - 0x42, 0x76, 0xbc, 0x86, 0xb2, 0x9a, 0x96, 0xfa, 0x3e, 0x19, 0x54, 0x2b, 0xab, 0x1a, 0x1d, 0x6c, - 0x50, 0x3d, 0x82, 0x37, 0x47, 0xec, 0xbf, 0x67, 0xc1, 0x23, 0x3d, 0x12, 0xd2, 0xd0, 0xe6, 0xee, - 0xb2, 0xab, 0x05, 0xf1, 0xe0, 0xa2, 0x6a, 0x8e, 0x5f, 0x38, 0x60, 0x01, 0x45, 0xb7, 0x01, 0xf8, - 0x85, 0x01, 0x7b, 0x7e, 0xbf, 0x54, 0xc4, 0xe3, 0xa9, 0x23, 0xed, 0x83, 0x96, 0x11, 0x40, 0x3d, - 0xb8, 0xaf, 0x51, 0xb5, 0xbf, 0x59, 0x86, 0x41, 0xfe, 0xae, 0x77, 0x0d, 0x86, 0xb7, 0x78, 0x82, - 0xdc, 0xfe, 0xf2, 0xf3, 0xa6, 0xea, 0x0b, 0x2f, 0xc0, 0x92, 0x0c, 0xba, 0x0a, 0x27, 0xe8, 0xc9, - 0xe2, 0x39, 0x7e, 0x95, 0xf8, 0xce, 0xae, 0xd4, 0x87, 0xf9, 0x43, 0x14, 0x32, 0x63, 0xfa, 0x89, - 0xf5, 0x4e, 0x14, 0xdc, 0xad, 0x1e, 0x7a, 0xad, 0x23, 0x9f, 0x1d, 0x4f, 0x3c, 0xac, 0x64, 0xe1, - 0x83, 0x73, 0xda, 0x51, 0x89, 0xbd, 0xd5, 0xa1, 0xf9, 0x6b, 0xcf, 0x27, 0x9b, 0xda, 0xbe, 0x89, - 0xcb, 0xbc, 0x17, 0xda, 0xcc, 0x6b, 0x63, 0x63, 0x2b, 0x22, 0xf1, 0x56, 0xe8, 0xbb, 0xe2, 0xe5, - 0xcf, 0xd4, 0x7b, 0x21, 0x03, 0xc7, 0x1d, 0x35, 0x28, 0x95, 0x4d, 0xc7, 0xf3, 0xdb, 0x11, 0x49, - 0xa9, 0x0c, 0x99, 0x54, 0xd6, 0x32, 0x70, 0xdc, 0x51, 0x83, 0xae, 0xad, 0x93, 0xe2, 0xb1, 0x48, - 0x19, 0x7e, 0x2d, 0x58, 0xd0, 0xa7, 0x60, 0x58, 0x3a, 0xe1, 0x17, 0xca, 0x12, 0x22, 0x5c, 0x13, - 0xd4, 0xc3, 0x93, 0xda, 0xc3, 0x64, 0xc2, 0xfd, 0x5e, 0xd2, 0x3b, 0xcc, 0xa3, 0x84, 0x7f, 0x6a, - 0xc1, 0x89, 0x2e, 0xce, 0x64, 0x9c, 0xa5, 0x35, 0xbd, 0x38, 0x51, 0xcf, 0x22, 0x68, 0x2c, 0x8d, - 0x97, 0x63, 0x85, 0x41, 0x77, 0x0b, 0x67, 0x9a, 0x59, 0x46, 0x29, 0x9c, 0x4c, 0x04, 0xb4, 0x3f, - 0x46, 0x89, 0xce, 0xc0, 0x40, 0x3b, 0x26, 0x91, 0x7c, 0x21, 0x50, 0xf2, 0x79, 0x66, 0x69, 0x64, - 0x10, 0x2a, 0xb6, 0x36, 0x95, 0x91, 0x4f, 0x13, 0x5b, 0xb9, 0x99, 0x8f, 0xc3, 0xec, 0xaf, 0x95, - 0x61, 0x32, 0xe3, 0x54, 0x4a, 0x3b, 0xb2, 0x1d, 0x06, 0x5e, 0x12, 0xaa, 0xcc, 0x6d, 0xfc, 0x51, - 0x32, 0xd2, 0xda, 0xba, 0x2a, 0xca, 0xb1, 0xc2, 0x40, 0x4f, 0xcb, 0x47, 0x61, 0xb3, 0xcf, 0x3d, - 0x2c, 0x57, 0x8d, 0x77, 0x61, 0x8b, 0x3e, 0xd5, 0xf2, 0x24, 0x0c, 0xb4, 0x42, 0xf5, 0xc6, 0xb7, - 0xfa, 0x9e, 0x78, 0xb9, 0x5a, 0x0b, 0x43, 0x1f, 0x33, 0x20, 0x7a, 0x4a, 0x8c, 0x3e, 0x73, 0x37, - 0x82, 0x1d, 0x37, 0x8c, 0xb5, 0x29, 0x78, 0x06, 0x86, 0xef, 0x90, 0xdd, 0xc8, 0x0b, 0x9a, 0xd9, - 0x9b, 0xa1, 0xcb, 0xbc, 0x18, 0x4b, 0xb8, 0x99, 0xfd, 0x7c, 0xf8, 0x88, 0x9f, 0x63, 0x19, 0xc9, - 0x3d, 0x07, 0xbf, 0x63, 0xc1, 0x24, 0x4b, 0x67, 0x2a, 0x82, 0xff, 0xbd, 0x30, 0x38, 0x06, 0x19, - 0xe3, 0x49, 0x18, 0x8c, 0x68, 0xa3, 0xd9, 0xf7, 0x14, 0x58, 0x4f, 0x30, 0x87, 0xa1, 0xc7, 0x60, - 0x80, 0x75, 0x81, 0x7e, 0xc6, 0x31, 0x9e, 0x35, 0xbd, 0xea, 0x24, 0x0e, 0x66, 0xa5, 0x2c, 0x8e, - 0x0b, 0x93, 0x96, 0xef, 0xf1, 0x4e, 0xa7, 0x06, 0xdd, 0x87, 0x2d, 0x8e, 0xab, 0x6b, 0x27, 0x1f, - 0x54, 0x1c, 0x57, 0x77, 0xe2, 0x07, 0xcb, 0xf9, 0xff, 0xa3, 0x04, 0xa7, 0xbb, 0xd6, 0x4b, 0xef, - 0x98, 0xd7, 0x8c, 0x3b, 0xe6, 0x0b, 0x99, 0x3b, 0x66, 0xfb, 0xe0, 0xda, 0x0f, 0xe6, 0xd6, 0xb9, - 0xfb, 0x65, 0x70, 0xf9, 0x18, 0x2f, 0x83, 0x07, 0x8a, 0x8a, 0x38, 0x83, 0x39, 0x22, 0xce, 0x1f, - 0x58, 0xf0, 0x68, 0xd7, 0x29, 0x7b, 0xe8, 0x02, 0xe7, 0xba, 0xf6, 0xb2, 0x87, 0x76, 0xf2, 0xcb, - 0xe5, 0x1e, 0xa3, 0x62, 0x7a, 0xca, 0x59, 0xca, 0x85, 0x18, 0x30, 0x16, 0xc2, 0xdb, 0x18, 0xe7, - 0x40, 0xbc, 0x0c, 0x2b, 0x28, 0x8a, 0xb5, 0xc0, 0x33, 0xde, 0xc9, 0xd5, 0x43, 0x6e, 0xa8, 0x05, - 0xd3, 0x12, 0xaf, 0x67, 0x34, 0xc8, 0x86, 0xa3, 0xdd, 0xd2, 0x34, 0xcf, 0xf2, 0x61, 0x34, 0xcf, - 0xb1, 0xee, 0x5a, 0x27, 0x5a, 0x82, 0xc9, 0x6d, 0x2f, 0x60, 0xaf, 0xb8, 0x9a, 0xd2, 0x93, 0x8a, - 0xfe, 0xbd, 0x6a, 0x82, 0x71, 0x16, 0x7f, 0xee, 0x55, 0x18, 0x3f, 0xbc, 0x75, 0xed, 0xc7, 0x65, - 0xf8, 0xe0, 0x01, 0x4c, 0x81, 0x9f, 0x0e, 0xc6, 0x77, 0xd1, 0x4e, 0x87, 0x8e, 0x6f, 0x53, 0x83, - 0x99, 0xcd, 0xb6, 0xef, 0xef, 0x32, 0x0f, 0x2d, 0xe2, 0x4a, 0x0c, 0x21, 0xd4, 0xa8, 0xe7, 0xe2, - 0xd7, 0xba, 0xe0, 0xe0, 0xae, 0x35, 0xd1, 0x27, 0x01, 0x85, 0xb7, 0x59, 0xc2, 0x5f, 0x37, 0xcd, - 0xd8, 0xc0, 0x3e, 0x41, 0x39, 0xdd, 0xaa, 0xd7, 0x3b, 0x30, 0x70, 0x97, 0x5a, 0x54, 0x4e, 0x65, - 0x2f, 0xcd, 0xab, 0x6e, 0x65, 0xe4, 0x54, 0xac, 0x03, 0xb1, 0x89, 0x8b, 0x2e, 0xc2, 0xb4, 0xb3, - 0xe3, 0x78, 0x3c, 0x81, 0x97, 0x24, 0xc0, 0x05, 0x55, 0x65, 0xbf, 0x5a, 0xca, 0x22, 0xe0, 0xce, - 0x3a, 0xa8, 0x65, 0x18, 0x24, 0x79, 0xaa, 0xff, 0x8f, 0x1f, 0x62, 0x05, 0x17, 0x36, 0x51, 0xda, - 0xff, 0xc5, 0xa2, 0x47, 0x5f, 0x97, 0x07, 0x3f, 0xe9, 0x8c, 0x28, 0x03, 0x9b, 0x16, 0x48, 0xa7, - 0x66, 0x64, 0x45, 0x07, 0x62, 0x13, 0x97, 0x2f, 0x8d, 0x38, 0x75, 0x18, 0x37, 0xa4, 0x4d, 0x11, - 0x83, 0xaa, 0x30, 0xa8, 0x04, 0xed, 0x7a, 0x3b, 0x5e, 0x1c, 0x46, 0x62, 0x03, 0xf5, 0xe9, 0x3e, - 0x9c, 0xf2, 0xcb, 0x2a, 0x27, 0x83, 0x25, 0x3d, 0xfb, 0xeb, 0x25, 0x18, 0x97, 0x2d, 0xbe, 0xde, - 0x0e, 0x13, 0xe7, 0x18, 0x8e, 0xf4, 0xd7, 0x8d, 0x23, 0x7d, 0xb1, 0x58, 0x48, 0x2e, 0xeb, 0x5c, - 0xcf, 0xa3, 0xfc, 0x53, 0x99, 0xa3, 0xfc, 0x7c, 0x3f, 0x44, 0x0f, 0x3e, 0xc2, 0xff, 0x8d, 0x05, - 0xd3, 0x06, 0xfe, 0x31, 0x9c, 0x24, 0x35, 0xf3, 0x24, 0x79, 0xae, 0x8f, 0xd1, 0xf4, 0x38, 0x41, - 0xbe, 0x55, 0xca, 0x8c, 0x82, 0x9d, 0x1c, 0x9f, 0x83, 0x81, 0x2d, 0x27, 0x72, 0x8b, 0x65, 0xb3, - 0xec, 0xa8, 0xbe, 0x70, 0xc9, 0x89, 0x5c, 0xce, 0xff, 0xcf, 0xa9, 0xe7, 0xc8, 0x9c, 0xc8, 0xcd, - 0x8d, 0xa3, 0x60, 0x8d, 0xa2, 0x57, 0x60, 0x28, 0x6e, 0x84, 0x2d, 0xe5, 0x69, 0x7a, 0x86, 0x3f, - 0x55, 0x46, 0x4b, 0xee, 0xef, 0xcd, 0x23, 0xb3, 0x39, 0x5a, 0x8c, 0x05, 0xfe, 0x5c, 0x13, 0x2a, - 0xaa, 0xe9, 0x23, 0xf5, 0xb5, 0xff, 0xaf, 0x65, 0x38, 0xd1, 0x65, 0xad, 0xa0, 0xcf, 0x1b, 0xf3, - 0xf6, 0x6a, 0xdf, 0x8b, 0xed, 0x7d, 0xce, 0xdc, 0xe7, 0x99, 0xa6, 0xe4, 0x8a, 0xd5, 0x71, 0x88, - 0xe6, 0x6f, 0xc4, 0x24, 0xdb, 0x3c, 0x2d, 0xca, 0x6f, 0x9e, 0x36, 0x7b, 0x6c, 0xd3, 0x4f, 0x1b, - 0x52, 0x3d, 0x3d, 0xd2, 0xef, 0xfc, 0x57, 0x06, 0x60, 0xa6, 0x5b, 0xec, 0x3f, 0xfa, 0x92, 0x95, - 0x79, 0xb2, 0xe2, 0xb5, 0xfe, 0x13, 0x08, 0xf0, 0x77, 0x2c, 0x44, 0xbe, 0x9c, 0x05, 0xf3, 0x11, - 0x8b, 0xdc, 0x19, 0x17, 0xad, 0xb3, 0x08, 0xa8, 0x88, 0x3f, 0x3f, 0x22, 0xb9, 0xc2, 0x27, 0x0e, - 0xd1, 0x15, 0xf1, 0x82, 0x49, 0x9c, 0x89, 0x80, 0x92, 0xc5, 0xf9, 0x11, 0x50, 0xb2, 0x0f, 0x73, - 0x1e, 0x8c, 0x6a, 0xe3, 0x3a, 0xd2, 0x65, 0x70, 0x87, 0x1e, 0x51, 0x5a, 0xbf, 0x8f, 0x74, 0x29, - 0xfc, 0x6d, 0x0b, 0x32, 0x6e, 0x61, 0xca, 0x2c, 0x63, 0xf5, 0x34, 0xcb, 0x9c, 0x81, 0x81, 0x28, - 0xf4, 0x49, 0xf6, 0x39, 0x05, 0x1c, 0xfa, 0x04, 0x33, 0x88, 0x7a, 0xa1, 0xb8, 0xdc, 0xeb, 0x85, - 0x62, 0xaa, 0xa7, 0xfb, 0x64, 0x87, 0x48, 0x23, 0x89, 0x62, 0xe3, 0x57, 0x68, 0x21, 0xe6, 0x30, - 0xfb, 0x37, 0x07, 0xe0, 0x44, 0x97, 0x78, 0x3a, 0xaa, 0x21, 0x35, 0x9d, 0x84, 0xdc, 0x75, 0x76, - 0xb3, 0x69, 0x5d, 0x2f, 0xf2, 0x62, 0x2c, 0xe1, 0xcc, 0x9d, 0x95, 0xa7, 0x86, 0xcb, 0x98, 0xae, - 0x44, 0x46, 0x38, 0x01, 0x3d, 0xfa, 0xb7, 0x6c, 0x2f, 0x00, 0xc4, 0xb1, 0xbf, 0x1a, 0x50, 0x09, - 0xcf, 0x15, 0x6e, 0xb3, 0x69, 0x46, 0xc1, 0xfa, 0x15, 0x01, 0xc1, 0x1a, 0x16, 0xaa, 0xc2, 0x54, - 0x2b, 0x0a, 0x13, 0x6e, 0x18, 0xac, 0x72, 0x57, 0x8b, 0x41, 0x33, 0x5e, 0xab, 0x96, 0x81, 0xe3, - 0x8e, 0x1a, 0xe8, 0x25, 0x18, 0x15, 0x31, 0x5c, 0xb5, 0x30, 0xf4, 0x85, 0x19, 0x49, 0xdd, 0xc7, - 0xd7, 0x53, 0x10, 0xd6, 0xf1, 0xb4, 0x6a, 0xcc, 0xda, 0x38, 0xdc, 0xb5, 0x1a, 0xb7, 0x38, 0x6a, - 0x78, 0x99, 0x0c, 0x21, 0x23, 0x85, 0x32, 0x84, 0xa4, 0x86, 0xb5, 0x4a, 0xe1, 0x8b, 0x18, 0xc8, - 0x35, 0x40, 0xfd, 0x7e, 0x19, 0x86, 0xf8, 0xa7, 0x38, 0x06, 0x29, 0xaf, 0x26, 0x4c, 0x4a, 0x85, - 0xb2, 0x31, 0xf0, 0x5e, 0x2d, 0x54, 0x9d, 0xc4, 0xe1, 0xac, 0x49, 0xed, 0x90, 0xd4, 0x0c, 0x85, - 0x16, 0x8c, 0x3d, 0x34, 0x97, 0xb1, 0x94, 0x00, 0xa7, 0xa1, 0xed, 0xa8, 0x2d, 0x80, 0x98, 0xbd, - 0xa7, 0x4a, 0x69, 0x88, 0x9c, 0xb3, 0x2f, 0x16, 0xea, 0x47, 0x5d, 0x55, 0xe3, 0xbd, 0x49, 0x97, - 0xa5, 0x02, 0x60, 0x8d, 0xf6, 0xdc, 0xcb, 0x50, 0x51, 0xc8, 0x79, 0x2a, 0xe4, 0x98, 0xce, 0xda, - 0xfe, 0x3f, 0x98, 0xcc, 0xb4, 0xd5, 0x97, 0x06, 0xfa, 0xdb, 0x16, 0x4c, 0xf2, 0x2e, 0xaf, 0x06, - 0x3b, 0x82, 0x15, 0x7c, 0xd1, 0x82, 0x19, 0xbf, 0xcb, 0x4e, 0x14, 0x9f, 0xf9, 0x30, 0x7b, 0x58, - 0x29, 0x9f, 0xdd, 0xa0, 0xb8, 0x6b, 0x6b, 0xe8, 0x2c, 0x8c, 0xf0, 0xe7, 0xa1, 0x1d, 0x5f, 0xf8, - 0x68, 0x8f, 0xf1, 0x6c, 0xdb, 0xbc, 0x0c, 0x2b, 0xa8, 0xfd, 0x13, 0x0b, 0xa6, 0xf9, 0x20, 0x2e, - 0x93, 0x5d, 0xa5, 0x5e, 0x3d, 0x24, 0xc3, 0x10, 0x79, 0xc5, 0x4b, 0x3d, 0xf2, 0x8a, 0xeb, 0xa3, - 0x2c, 0x1f, 0x38, 0xca, 0x6f, 0x5b, 0x20, 0x56, 0xe8, 0x31, 0xe8, 0x0f, 0xeb, 0xa6, 0xfe, 0xf0, - 0xa1, 0x22, 0x8b, 0xbe, 0x87, 0xe2, 0xf0, 0x4b, 0x25, 0x98, 0xe2, 0x08, 0xe9, 0x8d, 0xcc, 0xc3, - 0xf2, 0x71, 0xfa, 0x7b, 0xef, 0x46, 0x3d, 0x32, 0xda, 0x7d, 0xa4, 0xc6, 0xb7, 0x1c, 0x38, 0xf0, - 0x5b, 0xfe, 0xb9, 0x05, 0x88, 0xcf, 0x49, 0xf6, 0x6d, 0x6d, 0x7e, 0xba, 0x69, 0xe6, 0x80, 0x94, - 0x73, 0x28, 0x08, 0xd6, 0xb0, 0x1e, 0xf0, 0x10, 0x32, 0xf7, 0x61, 0xe5, 0xfc, 0xfb, 0xb0, 0x3e, - 0x46, 0xfd, 0x3b, 0x65, 0xc8, 0x3a, 0x6b, 0xa2, 0x77, 0x60, 0xac, 0xe1, 0xb4, 0x9c, 0xdb, 0x9e, - 0xef, 0x25, 0x1e, 0x89, 0x8b, 0x5d, 0xb8, 0xaf, 0x68, 0x35, 0xc4, 0x35, 0x94, 0x56, 0x82, 0x0d, - 0x8a, 0x68, 0x01, 0xa0, 0x15, 0x79, 0x3b, 0x9e, 0x4f, 0x9a, 0x4c, 0xe3, 0x61, 0xd1, 0x1e, 0xfc, - 0xee, 0x58, 0x96, 0x62, 0x0d, 0xa3, 0x4b, 0x74, 0x40, 0xf9, 0x38, 0xa2, 0x03, 0x06, 0xfa, 0x8c, - 0x0e, 0x18, 0x2c, 0x14, 0x1d, 0x80, 0xe1, 0x94, 0x3c, 0xbc, 0xe9, 0xff, 0x35, 0xcf, 0x27, 0x42, - 0x76, 0xe3, 0xd1, 0x20, 0x73, 0xfb, 0x7b, 0xf3, 0xa7, 0x70, 0x57, 0x0c, 0xdc, 0xa3, 0xa6, 0xdd, - 0x86, 0x13, 0x75, 0x12, 0x79, 0x2c, 0xeb, 0xa5, 0x9b, 0xee, 0xa5, 0xcf, 0x40, 0x25, 0xca, 0x6c, - 0xe3, 0x3e, 0x43, 0xfe, 0xb5, 0x3c, 0x69, 0x72, 0xdb, 0xa6, 0x24, 0xed, 0xbf, 0x56, 0x82, 0x61, - 0xe1, 0xa6, 0x79, 0x0c, 0xc2, 0xc7, 0x65, 0xc3, 0xc4, 0xf4, 0x4c, 0x1e, 0xff, 0x63, 0xdd, 0xea, - 0x69, 0x5c, 0xaa, 0x67, 0x8c, 0x4b, 0xcf, 0x15, 0x23, 0x77, 0xb0, 0x59, 0xe9, 0x1f, 0x97, 0x61, - 0xc2, 0x74, 0x5b, 0x3d, 0x86, 0x69, 0x79, 0x03, 0x86, 0x63, 0xe1, 0x41, 0x5d, 0x2a, 0xe2, 0xb3, - 0x97, 0xfd, 0xc4, 0xe9, 0x4d, 0xbc, 0xf0, 0x99, 0x96, 0xe4, 0xba, 0x3a, 0x69, 0x97, 0x8f, 0xc5, - 0x49, 0x3b, 0xcf, 0x9b, 0x78, 0xe0, 0x41, 0x78, 0x13, 0xdb, 0x3f, 0x60, 0x2c, 0x5f, 0x2f, 0x3f, - 0x86, 0x63, 0xfc, 0x75, 0xf3, 0x70, 0x38, 0x57, 0x68, 0xdd, 0x89, 0xee, 0xf5, 0x38, 0xce, 0xbf, - 0x6b, 0xc1, 0xa8, 0x40, 0x3c, 0x86, 0x01, 0x7c, 0xd2, 0x1c, 0xc0, 0x53, 0x85, 0x06, 0xd0, 0xa3, - 0xe7, 0x5f, 0x2f, 0xa9, 0x9e, 0xd7, 0xc2, 0x28, 0x29, 0x94, 0xe3, 0x7b, 0x84, 0xaa, 0x7e, 0x61, - 0x23, 0xf4, 0x85, 0x00, 0xf7, 0x58, 0x1a, 0xfc, 0xc7, 0xcb, 0xef, 0x6b, 0xbf, 0xb1, 0xc2, 0x66, - 0xb1, 0x69, 0x61, 0x94, 0x88, 0x03, 0x34, 0x8d, 0x4d, 0x0b, 0xa3, 0x04, 0x33, 0x08, 0x72, 0x01, - 0xd2, 0xc7, 0xea, 0x45, 0xdc, 0x6c, 0xef, 0xdd, 0xda, 0x4e, 0x3c, 0x7f, 0xc1, 0x0b, 0x92, 0x38, - 0x89, 0x16, 0xd6, 0x83, 0xe4, 0x7a, 0xc4, 0x85, 0x7e, 0x2d, 0x9a, 0x4f, 0xd1, 0xc2, 0x1a, 0x5d, - 0x19, 0x26, 0xc2, 0xda, 0x18, 0x34, 0x6f, 0x90, 0xae, 0x89, 0x72, 0xac, 0x30, 0xec, 0x97, 0x19, - 0x67, 0x67, 0x13, 0xd4, 0x5f, 0xa0, 0xdd, 0xbf, 0x1a, 0x54, 0x53, 0xcb, 0xcc, 0xc2, 0xd7, 0xf4, - 0x70, 0xbe, 0xa2, 0xec, 0x93, 0x76, 0x41, 0xf7, 0xa3, 0x4e, 0xa3, 0xff, 0x10, 0xe9, 0xb8, 0x76, - 0x7c, 0xb9, 0x30, 0x47, 0xee, 0xe3, 0xa2, 0x91, 0xa5, 0x35, 0x64, 0xb9, 0xdc, 0xd6, 0x6b, 0xd9, - 0xcc, 0xec, 0x2b, 0x12, 0x80, 0x53, 0x1c, 0xb4, 0x28, 0x14, 0x4a, 0x6e, 0x71, 0xf9, 0x60, 0x46, - 0xa1, 0x94, 0x53, 0xa2, 0x69, 0x94, 0xe7, 0x61, 0x54, 0x3d, 0x76, 0x53, 0xe3, 0xcf, 0x8c, 0x54, - 0xb8, 0x7c, 0xb5, 0x9a, 0x16, 0x63, 0x1d, 0x07, 0x6d, 0xc0, 0x64, 0xcc, 0x5f, 0xe2, 0x91, 0xf1, - 0x1a, 0xc2, 0x70, 0xf0, 0x6c, 0xe6, 0x81, 0x7c, 0x09, 0xbe, 0xcf, 0x8a, 0xf8, 0x56, 0x96, 0x11, - 0x1e, 0x59, 0x12, 0xe8, 0x35, 0x98, 0xf0, 0xf5, 0x67, 0x46, 0x6b, 0xc2, 0xae, 0xa0, 0xdc, 0xce, - 0x8c, 0x47, 0x48, 0x6b, 0x38, 0x83, 0x8d, 0xde, 0x80, 0x59, 0xbd, 0x44, 0xa4, 0x17, 0x72, 0x82, - 0x26, 0x89, 0xc5, 0xab, 0x1d, 0x8f, 0xed, 0xef, 0xcd, 0xcf, 0x5e, 0xe9, 0x81, 0x83, 0x7b, 0xd6, - 0x46, 0xaf, 0xc0, 0x98, 0x1c, 0xbe, 0x16, 0xdd, 0x94, 0x3a, 0x3c, 0x6a, 0x30, 0x6c, 0x60, 0xbe, - 0xbf, 0xbb, 0xd8, 0xcf, 0xd1, 0xca, 0xda, 0xb9, 0x8b, 0xde, 0x85, 0x31, 0xbd, 0x8f, 0xd9, 0x03, - 0x35, 0xff, 0xe9, 0x56, 0x71, 0x7e, 0xab, 0x9e, 0xeb, 0x30, 0x6c, 0xd0, 0xb6, 0xaf, 0xc3, 0x50, - 0x7d, 0x37, 0x6e, 0x24, 0x7e, 0x01, 0xa6, 0xf4, 0xa4, 0x31, 0x84, 0x74, 0xc3, 0xb0, 0x67, 0xa4, - 0xc4, 0x88, 0xec, 0x2f, 0x5b, 0x30, 0xb9, 0xb1, 0x52, 0xab, 0x87, 0x8d, 0x3b, 0x24, 0x59, 0xe2, - 0x3a, 0x17, 0x16, 0x3c, 0xc9, 0x3a, 0x24, 0xaf, 0xe9, 0xc6, 0xc5, 0xce, 0xc0, 0xc0, 0x56, 0x18, - 0x27, 0x59, 0xbb, 0xe5, 0xa5, 0x30, 0x4e, 0x30, 0x83, 0xd8, 0x7f, 0x62, 0xc1, 0x20, 0x7b, 0x25, - 0x29, 0xef, 0x85, 0xad, 0x22, 0xe3, 0x42, 0x2f, 0xc1, 0x10, 0xd9, 0xdc, 0x24, 0x8d, 0x44, 0x6c, - 0x4f, 0x19, 0x03, 0x30, 0xb4, 0xca, 0x4a, 0xe9, 0xa6, 0x63, 0x8d, 0xf1, 0xbf, 0x58, 0x20, 0xa3, - 0x4f, 0x43, 0x25, 0xf1, 0xb6, 0xc9, 0x92, 0xeb, 0x0a, 0x43, 0x61, 0x7f, 0x6e, 0x29, 0x8a, 0x09, - 0x6c, 0x48, 0x22, 0x38, 0xa5, 0x67, 0x7f, 0xb5, 0x04, 0x90, 0xc6, 0xf8, 0xe4, 0x0d, 0x73, 0xb9, - 0xe3, 0x21, 0xb1, 0xa7, 0xbb, 0x3c, 0x24, 0x86, 0x52, 0x82, 0x5d, 0x9e, 0x11, 0x53, 0x53, 0x55, - 0x2e, 0x34, 0x55, 0x03, 0xfd, 0x4c, 0xd5, 0x0a, 0x4c, 0xa7, 0x31, 0x4a, 0x66, 0xb0, 0x27, 0x4b, - 0x2b, 0xba, 0x91, 0x05, 0xe2, 0x4e, 0x7c, 0xfb, 0xab, 0x16, 0x08, 0x47, 0xc6, 0x02, 0x0b, 0xda, - 0x95, 0x8f, 0xfe, 0x18, 0xf9, 0xcf, 0x9e, 0x2d, 0xe2, 0xe3, 0x29, 0xb2, 0x9e, 0xa9, 0x2d, 0x66, - 0xe4, 0x3a, 0x33, 0xa8, 0xda, 0xbf, 0x61, 0xc1, 0x28, 0x07, 0x5f, 0x65, 0xb2, 0x72, 0x7e, 0xbf, - 0xfa, 0xca, 0x59, 0xcb, 0xde, 0xc3, 0xa1, 0x84, 0x55, 0xee, 0x52, 0xfd, 0x3d, 0x1c, 0x09, 0xc0, - 0x29, 0x0e, 0x7a, 0x06, 0x86, 0xe3, 0xf6, 0x6d, 0x86, 0x9e, 0xf1, 0x6a, 0xac, 0xf3, 0x62, 0x2c, - 0xe1, 0xf6, 0x3f, 0x2d, 0xc1, 0x54, 0xd6, 0xa9, 0x15, 0x61, 0x18, 0xe2, 0xb2, 0x73, 0x56, 0xec, - 0x3a, 0xc8, 0x46, 0xa3, 0x39, 0xc5, 0x02, 0x7f, 0xd5, 0x99, 0x19, 0xd3, 0x05, 0x25, 0xb4, 0x09, - 0xa3, 0x6e, 0x78, 0x37, 0xb8, 0xeb, 0x44, 0xee, 0x52, 0x6d, 0x5d, 0x7c, 0x89, 0x1c, 0x37, 0xa4, - 0x6a, 0x5a, 0x41, 0x77, 0xb9, 0x65, 0x36, 0x83, 0x14, 0x84, 0x75, 0xc2, 0x54, 0x57, 0x6c, 0x84, - 0xc1, 0xa6, 0xd7, 0xbc, 0xea, 0xb4, 0x8a, 0x5d, 0xb8, 0xaf, 0x48, 0x74, 0xad, 0x8d, 0x71, 0x91, - 0xdd, 0x81, 0x03, 0x70, 0x4a, 0xd2, 0xfe, 0xf5, 0x19, 0x30, 0xd6, 0x82, 0x91, 0x58, 0xd6, 0x7a, - 0xe0, 0x89, 0x65, 0xdf, 0x82, 0x11, 0xb2, 0xdd, 0x4a, 0x76, 0xab, 0x5e, 0x54, 0x2c, 0x4d, 0xf8, - 0xaa, 0xc0, 0xee, 0xa4, 0x2e, 0x21, 0x58, 0x51, 0xec, 0x91, 0x26, 0xb8, 0xfc, 0x50, 0xa4, 0x09, - 0x1e, 0xf8, 0x0b, 0x49, 0x13, 0xfc, 0x06, 0x0c, 0x37, 0xbd, 0x04, 0x93, 0x56, 0x28, 0xd2, 0x65, - 0xe4, 0x2c, 0x9e, 0x8b, 0x1c, 0xb9, 0x33, 0x81, 0xa4, 0x00, 0x60, 0x49, 0x0e, 0x6d, 0xa8, 0x4d, - 0x35, 0x54, 0xe4, 0xb8, 0xef, 0xb4, 0xe1, 0x75, 0xdd, 0x56, 0x22, 0x2d, 0xf0, 0xf0, 0xfb, 0x4f, - 0x0b, 0xac, 0x92, 0xf9, 0x8e, 0x3c, 0xa8, 0x64, 0xbe, 0x46, 0x52, 0xe4, 0xca, 0x51, 0x24, 0x45, - 0xfe, 0xaa, 0x05, 0x27, 0x5b, 0xdd, 0x52, 0x8a, 0x8b, 0xb4, 0xbc, 0x3f, 0x7f, 0x88, 0x24, 0xeb, - 0x46, 0xd3, 0x2c, 0x09, 0x41, 0x57, 0x34, 0xdc, 0xbd, 0x61, 0x99, 0x5d, 0x79, 0xf4, 0xfd, 0x67, - 0x57, 0x3e, 0xea, 0xfc, 0xbd, 0x69, 0xae, 0xe5, 0xf1, 0x23, 0xc9, 0xb5, 0x3c, 0xf1, 0x00, 0x73, - 0x2d, 0x6b, 0x59, 0x92, 0x27, 0x1f, 0x6c, 0x96, 0xe4, 0x2d, 0xf3, 0x5c, 0xe2, 0x49, 0x79, 0x5f, - 0x2a, 0x7c, 0x2e, 0x19, 0x2d, 0x1c, 0x7c, 0x32, 0xf1, 0x7c, 0xd1, 0xd3, 0xef, 0x33, 0x5f, 0xb4, - 0x91, 0x75, 0x19, 0x1d, 0x45, 0xd6, 0xe5, 0x77, 0xf4, 0x13, 0xf4, 0x44, 0x91, 0x16, 0xd4, 0x41, - 0xd9, 0xd9, 0x42, 0xb7, 0x33, 0xb4, 0x33, 0xaf, 0xf3, 0xcc, 0x71, 0xe7, 0x75, 0x3e, 0x79, 0x84, - 0x79, 0x9d, 0x4f, 0x1d, 0x6b, 0x5e, 0xe7, 0x47, 0x1e, 0x92, 0xbc, 0xce, 0xb3, 0xc7, 0x95, 0xd7, - 0xf9, 0xd1, 0x07, 0x9a, 0xd7, 0x99, 0x7e, 0xba, 0x96, 0x0c, 0x0d, 0x9b, 0x9d, 0x2b, 0xf2, 0xe9, - 0xba, 0x46, 0x92, 0xf1, 0x4f, 0xa7, 0x40, 0x38, 0x25, 0x6a, 0xff, 0x25, 0x38, 0x7d, 0xf0, 0xd2, - 0x4d, 0xbd, 0x30, 0x6a, 0xa9, 0x2d, 0x2c, 0xe3, 0x85, 0xc1, 0xc4, 0x42, 0x0d, 0xab, 0x70, 0xe2, - 0xd9, 0x6f, 0x59, 0xf0, 0x48, 0x8f, 0xbc, 0x8c, 0x85, 0xe3, 0x2a, 0x5b, 0x30, 0xd9, 0x32, 0xab, - 0x16, 0x0e, 0xd3, 0x36, 0xf2, 0x40, 0x2a, 0xdf, 0xf7, 0x0c, 0x00, 0x67, 0xc9, 0x2f, 0x7f, 0xe8, - 0x87, 0x3f, 0x3e, 0xfd, 0x81, 0x1f, 0xfd, 0xf8, 0xf4, 0x07, 0xfe, 0xe8, 0xc7, 0xa7, 0x3f, 0xf0, - 0x0b, 0xfb, 0xa7, 0xad, 0x1f, 0xee, 0x9f, 0xb6, 0x7e, 0xb4, 0x7f, 0xda, 0xfa, 0xd3, 0xfd, 0xd3, - 0xd6, 0x57, 0x7f, 0x72, 0xfa, 0x03, 0x6f, 0x96, 0x76, 0xce, 0xff, 0xdf, 0x00, 0x00, 0x00, 0xff, - 0xff, 0xb3, 0xcf, 0x87, 0xf8, 0x85, 0xca, 0x00, 0x00, + // 11175 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x8c, 0x24, 0xc7, + 0x75, 0x98, 0x7a, 0x66, 0xbf, 0xe6, 0xed, 0xe7, 0xd5, 0xed, 0x1d, 0x97, 0x2b, 0xf2, 0xf6, 0xd8, + 0x14, 0xe9, 0x23, 0x79, 0xdc, 0xd5, 0x1d, 0x49, 0xf1, 0x24, 0x2a, 0xb4, 0x76, 0x77, 0x76, 0xef, + 0x56, 0xf7, 0x35, 0xac, 0xd9, 0xbb, 0xa3, 0x28, 0x46, 0x64, 0xdf, 0x74, 0xed, 0x6c, 0xf3, 0x7a, + 0xbb, 0x87, 0xdd, 0x3d, 0x7b, 0xb7, 0x52, 0x04, 0xd8, 0x8a, 0x20, 0x25, 0x80, 0x92, 0xc8, 0x70, + 0x04, 0x04, 0x4e, 0x00, 0x05, 0x06, 0xe2, 0x28, 0x9f, 0x8e, 0x22, 0xe8, 0xc3, 0xb0, 0x9c, 0x0f, + 0x27, 0x72, 0x64, 0x20, 0x71, 0x0c, 0x18, 0xb1, 0x1d, 0x18, 0x59, 0x5b, 0x2b, 0xc4, 0x3f, 0x02, + 0x24, 0x08, 0xe2, 0x7f, 0x9b, 0x20, 0x08, 0xea, 0xb3, 0xab, 0x7a, 0x66, 0xb6, 0x7b, 0x96, 0xb7, + 0x6b, 0x4a, 0xc8, 0xbf, 0x99, 0x7a, 0xaf, 0x5e, 0x7d, 0x74, 0xd5, 0xab, 0xf7, 0x5e, 0xbd, 0xf7, + 0x0a, 0xce, 0xdf, 0xbb, 0x14, 0xcf, 0x7b, 0xe1, 0xc2, 0xbd, 0xf6, 0x5d, 0x12, 0x05, 0x24, 0x21, + 0xf1, 0x42, 0xeb, 0x5e, 0x73, 0xc1, 0x69, 0x79, 0x0b, 0xdb, 0x17, 0x16, 0x9a, 0x24, 0x20, 0x91, + 0x93, 0x10, 0x77, 0xbe, 0x15, 0x85, 0x49, 0x88, 0x1e, 0xe3, 0xd8, 0xf3, 0x29, 0xf6, 0x7c, 0xeb, + 0x5e, 0x73, 0xde, 0x69, 0x79, 0xf3, 0xdb, 0x17, 0x66, 0x9f, 0x6f, 0x7a, 0xc9, 0x66, 0xfb, 0xee, + 0x7c, 0x23, 0xdc, 0x5a, 0x68, 0x86, 0xcd, 0x70, 0x81, 0x55, 0xba, 0xdb, 0xde, 0x60, 0xff, 0xd8, + 0x1f, 0xf6, 0x8b, 0x13, 0x9b, 0x7d, 0x51, 0x34, 0xed, 0xb4, 0xbc, 0x2d, 0xa7, 0xb1, 0xe9, 0x05, + 0x24, 0xda, 0x51, 0x8d, 0x47, 0x24, 0x0e, 0xdb, 0x51, 0x83, 0x64, 0xbb, 0x70, 0x60, 0xad, 0x78, + 0x61, 0x8b, 0x24, 0x4e, 0x97, 0x8e, 0xcf, 0x2e, 0xf4, 0xaa, 0x15, 0xb5, 0x83, 0xc4, 0xdb, 0xea, + 0x6c, 0xe6, 0x23, 0x79, 0x15, 0xe2, 0xc6, 0x26, 0xd9, 0x72, 0x3a, 0xea, 0xbd, 0xd0, 0xab, 0x5e, + 0x3b, 0xf1, 0xfc, 0x05, 0x2f, 0x48, 0xe2, 0x24, 0x3a, 0x68, 0x4c, 0x31, 0x89, 0xb6, 0x49, 0x94, + 0x0e, 0x88, 0x3c, 0x70, 0xb6, 0x5a, 0x3e, 0xe9, 0x36, 0xa6, 0x2b, 0xda, 0xa7, 0x7b, 0xde, 0x69, + 0x36, 0x23, 0xd2, 0x74, 0x92, 0x50, 0xab, 0xeb, 0xb4, 0xbc, 0x88, 0x34, 0xbd, 0x38, 0x89, 0x9c, + 0xc4, 0x0b, 0x83, 0x85, 0xed, 0x0b, 0x8e, 0xdf, 0xda, 0x74, 0x3a, 0x28, 0xd9, 0x7f, 0x60, 0xc1, + 0xd9, 0xc5, 0x3b, 0xf5, 0x15, 0xdf, 0x89, 0x13, 0xaf, 0xb1, 0xe4, 0x87, 0x8d, 0x7b, 0xf5, 0x24, + 0x8c, 0xc8, 0xed, 0xd0, 0x6f, 0x6f, 0x91, 0x3a, 0xfb, 0x10, 0xe8, 0x3c, 0x8c, 0x6c, 0xb3, 0xff, + 0x6b, 0xd5, 0x19, 0xeb, 0xac, 0x75, 0xae, 0xb2, 0x34, 0xf5, 0xc3, 0xdd, 0xb9, 0x0f, 0xec, 0xed, + 0xce, 0x8d, 0xdc, 0x16, 0xe5, 0x58, 0x61, 0xa0, 0xa7, 0x61, 0x68, 0x23, 0x5e, 0xdf, 0x69, 0x91, + 0x99, 0x12, 0xc3, 0x9d, 0x10, 0xb8, 0x43, 0xab, 0x75, 0x5a, 0x8a, 0x05, 0x14, 0x2d, 0x40, 0xa5, + 0xe5, 0x44, 0x89, 0x47, 0x3b, 0x38, 0x53, 0x3e, 0x6b, 0x9d, 0x1b, 0x5c, 0x3a, 0x21, 0x50, 0x2b, + 0x35, 0x09, 0xc0, 0x29, 0x0e, 0xed, 0x46, 0x44, 0x1c, 0xf7, 0x66, 0xe0, 0xef, 0xcc, 0x0c, 0x9c, + 0xb5, 0xce, 0x8d, 0xa4, 0xdd, 0xc0, 0xa2, 0x1c, 0x2b, 0x0c, 0xfb, 0x7b, 0x25, 0x18, 0x59, 0xdc, + 0xd8, 0xf0, 0x02, 0x2f, 0xd9, 0x41, 0x6f, 0xc3, 0x58, 0x10, 0xba, 0x44, 0xfe, 0x67, 0xa3, 0x18, + 0xbd, 0xf8, 0xec, 0xfc, 0x41, 0x8b, 0x7a, 0xfe, 0x86, 0x56, 0x63, 0x69, 0x6a, 0x6f, 0x77, 0x6e, + 0x4c, 0x2f, 0xc1, 0x06, 0x45, 0xf4, 0x26, 0x8c, 0xb6, 0x42, 0x57, 0x35, 0x50, 0x62, 0x0d, 0x3c, + 0x73, 0x70, 0x03, 0xb5, 0xb4, 0xc2, 0xd2, 0xe4, 0xde, 0xee, 0xdc, 0xa8, 0x56, 0x80, 0x75, 0x72, + 0xc8, 0x87, 0x49, 0xfa, 0x37, 0x48, 0x3c, 0xd5, 0x42, 0x99, 0xb5, 0xf0, 0x7c, 0x7e, 0x0b, 0x5a, + 0xa5, 0xa5, 0x93, 0x7b, 0xbb, 0x73, 0x93, 0x99, 0x42, 0x9c, 0x25, 0x6d, 0x7f, 0x16, 0x26, 0x16, + 0x93, 0xc4, 0x69, 0x6c, 0x12, 0x97, 0x7f, 0x5f, 0xf4, 0x22, 0x0c, 0x04, 0xce, 0x16, 0x11, 0x5f, + 0xff, 0xac, 0x98, 0xf6, 0x81, 0x1b, 0xce, 0x16, 0xd9, 0xdf, 0x9d, 0x9b, 0xba, 0x15, 0x78, 0xef, + 0xb6, 0xc5, 0x9a, 0xa1, 0x65, 0x98, 0x61, 0xa3, 0x8b, 0x00, 0x2e, 0xd9, 0xf6, 0x1a, 0xa4, 0xe6, + 0x24, 0x9b, 0x62, 0x35, 0x20, 0x51, 0x17, 0xaa, 0x0a, 0x82, 0x35, 0x2c, 0xfb, 0x0b, 0x16, 0x54, + 0x16, 0xb7, 0x43, 0xcf, 0xad, 0x85, 0x6e, 0x8c, 0xda, 0x30, 0xd9, 0x8a, 0xc8, 0x06, 0x89, 0x54, + 0xd1, 0x8c, 0x75, 0xb6, 0x7c, 0x6e, 0xf4, 0xe2, 0xc5, 0x9c, 0x71, 0x9b, 0x95, 0x56, 0x82, 0x24, + 0xda, 0x59, 0x7a, 0x44, 0x34, 0x3d, 0x99, 0x81, 0xe2, 0x6c, 0x1b, 0xf6, 0x2f, 0x94, 0xe0, 0xd4, + 0xe2, 0x67, 0xdb, 0x11, 0xa9, 0x7a, 0xf1, 0xbd, 0xec, 0x56, 0x70, 0xbd, 0xf8, 0xde, 0x8d, 0x74, + 0x32, 0xd4, 0x1a, 0xac, 0x8a, 0x72, 0xac, 0x30, 0xd0, 0xf3, 0x30, 0x4c, 0x7f, 0xdf, 0xc2, 0x6b, + 0x62, 0xf4, 0x27, 0x05, 0xf2, 0x68, 0xd5, 0x49, 0x9c, 0x2a, 0x07, 0x61, 0x89, 0x83, 0xae, 0xc3, + 0x68, 0x83, 0x71, 0x8e, 0xe6, 0xf5, 0xd0, 0x25, 0xec, 0x0b, 0x57, 0x96, 0x9e, 0xa3, 0xe8, 0xcb, + 0x69, 0xf1, 0xfe, 0xee, 0xdc, 0x0c, 0xef, 0x9b, 0x20, 0xa1, 0xc1, 0xb0, 0x5e, 0x1f, 0xd9, 0x6a, + 0x23, 0x0e, 0x30, 0x4a, 0xd0, 0x65, 0x13, 0x9e, 0xd3, 0xf6, 0xd4, 0x20, 0xdb, 0x53, 0x63, 0x3d, + 0xf6, 0xd3, 0x3f, 0xb4, 0xc4, 0x9c, 0xac, 0x7a, 0xbe, 0xc9, 0x1e, 0x2e, 0x02, 0xc4, 0xa4, 0x11, + 0x91, 0x44, 0x9b, 0x15, 0xf5, 0x99, 0xeb, 0x0a, 0x82, 0x35, 0x2c, 0xba, 0xf9, 0xe3, 0x4d, 0x27, + 0x62, 0xab, 0x45, 0xcc, 0x8d, 0xda, 0xfc, 0x75, 0x09, 0xc0, 0x29, 0x8e, 0xb1, 0xf9, 0xcb, 0xb9, + 0x9b, 0xff, 0x37, 0x2d, 0x18, 0x5e, 0xf2, 0x02, 0xd7, 0x0b, 0x9a, 0xe8, 0x6d, 0x18, 0xa1, 0x67, + 0x83, 0xeb, 0x24, 0x8e, 0xd8, 0xf7, 0x1f, 0x96, 0x8b, 0x47, 0x67, 0xd5, 0x72, 0xf9, 0xc4, 0xf3, + 0x14, 0x9b, 0x2e, 0xa2, 0x9b, 0x77, 0xdf, 0x21, 0x8d, 0xe4, 0x3a, 0x49, 0x9c, 0x74, 0x38, 0x69, + 0x19, 0x56, 0x54, 0xd1, 0x2d, 0x18, 0x4a, 0x9c, 0xa8, 0x49, 0x12, 0xb1, 0xed, 0x73, 0x36, 0x25, + 0xa7, 0x81, 0xe9, 0x92, 0x23, 0x41, 0x83, 0xa4, 0x0c, 0x72, 0x9d, 0x11, 0xc1, 0x82, 0x98, 0xdd, + 0x80, 0xb1, 0x65, 0xa7, 0xe5, 0xdc, 0xf5, 0x7c, 0x2f, 0xf1, 0x48, 0x8c, 0x7e, 0x06, 0xca, 0x8e, + 0xeb, 0xb2, 0x0d, 0x50, 0x59, 0x3a, 0xb5, 0xb7, 0x3b, 0x57, 0x5e, 0x74, 0xdd, 0xfd, 0xdd, 0x39, + 0x50, 0x58, 0x3b, 0x98, 0x62, 0xa0, 0x67, 0x61, 0xc0, 0x8d, 0xc2, 0xd6, 0x4c, 0x89, 0x61, 0x9e, + 0xa6, 0x3b, 0xb5, 0x1a, 0x85, 0xad, 0x0c, 0x2a, 0xc3, 0xb1, 0x7f, 0x50, 0x02, 0xb4, 0x4c, 0x5a, + 0x9b, 0xab, 0x75, 0xe3, 0x9b, 0x9e, 0x83, 0x91, 0xad, 0x30, 0xf0, 0x92, 0x30, 0x8a, 0x45, 0x83, + 0x6c, 0x5d, 0x5c, 0x17, 0x65, 0x58, 0x41, 0xd1, 0x59, 0x18, 0x68, 0xa5, 0xdb, 0x7b, 0x4c, 0xb2, + 0x06, 0xb6, 0xb1, 0x19, 0x84, 0x62, 0xb4, 0x63, 0x12, 0x89, 0xf5, 0xac, 0x30, 0x6e, 0xc5, 0x24, + 0xc2, 0x0c, 0x92, 0xae, 0x20, 0xba, 0xb6, 0xc4, 0x6a, 0xcd, 0xac, 0x20, 0x0a, 0xc1, 0x1a, 0x16, + 0x7a, 0x0b, 0x2a, 0xfc, 0x1f, 0x26, 0x1b, 0x6c, 0xe9, 0xe6, 0x32, 0x85, 0x6b, 0x61, 0xc3, 0xf1, + 0xb3, 0x93, 0x3f, 0xce, 0x56, 0x9c, 0x24, 0x84, 0x53, 0x9a, 0xc6, 0x8a, 0x1b, 0xca, 0x5d, 0x71, + 0x7f, 0xcb, 0x02, 0xb4, 0xec, 0x05, 0x2e, 0x89, 0x8e, 0xe1, 0xe8, 0xec, 0x6f, 0x33, 0xfc, 0x11, + 0xed, 0x5a, 0xb8, 0xd5, 0x0a, 0x03, 0x12, 0x24, 0xcb, 0x61, 0xe0, 0xf2, 0xe3, 0xf4, 0x63, 0x30, + 0x90, 0xd0, 0xa6, 0x78, 0xb7, 0x9e, 0x96, 0x9f, 0x85, 0x36, 0xb0, 0xbf, 0x3b, 0x77, 0xba, 0xb3, + 0x06, 0xeb, 0x02, 0xab, 0x83, 0x3e, 0x0a, 0x43, 0x71, 0xe2, 0x24, 0xed, 0x58, 0x74, 0xf4, 0x09, + 0xd9, 0xd1, 0x3a, 0x2b, 0xdd, 0xdf, 0x9d, 0x9b, 0x54, 0xd5, 0x78, 0x11, 0x16, 0x15, 0xd0, 0x33, + 0x30, 0xbc, 0x45, 0xe2, 0xd8, 0x69, 0x4a, 0x06, 0x37, 0x29, 0xea, 0x0e, 0x5f, 0xe7, 0xc5, 0x58, + 0xc2, 0xd1, 0x93, 0x30, 0x48, 0xa2, 0x28, 0x8c, 0xc4, 0x8a, 0x18, 0x17, 0x88, 0x83, 0x2b, 0xb4, + 0x10, 0x73, 0x98, 0xfd, 0x9f, 0x2d, 0x98, 0x54, 0x7d, 0xe5, 0x6d, 0x1d, 0xc3, 0x96, 0x77, 0x01, + 0x1a, 0x72, 0x80, 0x31, 0xdb, 0x68, 0x5a, 0x1b, 0xdd, 0x97, 0x5f, 0xe7, 0x84, 0xa6, 0x6d, 0xa8, + 0xa2, 0x18, 0x6b, 0x74, 0xed, 0x7f, 0x67, 0xc1, 0xc9, 0xcc, 0xd8, 0xae, 0x79, 0x71, 0x82, 0xde, + 0xec, 0x18, 0xdf, 0x7c, 0xb1, 0xf1, 0xd1, 0xda, 0x6c, 0x74, 0x6a, 0xbd, 0xc8, 0x12, 0x6d, 0x6c, + 0x18, 0x06, 0xbd, 0x84, 0x6c, 0xc9, 0x61, 0x3d, 0x5f, 0x70, 0x58, 0xbc, 0x7f, 0xe9, 0x57, 0x5a, + 0xa3, 0x34, 0x30, 0x27, 0x65, 0xff, 0x6f, 0x0b, 0x2a, 0xcb, 0x61, 0xb0, 0xe1, 0x35, 0xaf, 0x3b, + 0xad, 0x63, 0xf8, 0x3e, 0x75, 0x18, 0x60, 0xd4, 0xf9, 0x10, 0x2e, 0xe4, 0x0d, 0x41, 0x74, 0x6c, + 0x9e, 0x9e, 0xa9, 0x5c, 0x58, 0x50, 0x6c, 0x8a, 0x16, 0x61, 0x46, 0x6c, 0xf6, 0x65, 0xa8, 0x28, + 0x04, 0x34, 0x05, 0xe5, 0x7b, 0x84, 0x4b, 0x92, 0x15, 0x4c, 0x7f, 0xa2, 0x69, 0x18, 0xdc, 0x76, + 0xfc, 0xb6, 0xd8, 0xbc, 0x98, 0xff, 0xf9, 0x58, 0xe9, 0x92, 0x65, 0xff, 0x80, 0xed, 0x40, 0xd1, + 0xc8, 0x4a, 0xb0, 0x2d, 0x98, 0xc3, 0x17, 0x2d, 0x98, 0xf6, 0xbb, 0x30, 0x25, 0x31, 0x27, 0x87, + 0x61, 0x67, 0x8f, 0x89, 0x6e, 0x4f, 0x77, 0x83, 0xe2, 0xae, 0xad, 0x51, 0x5e, 0x1f, 0xb6, 0xe8, + 0x82, 0x73, 0x7c, 0xd6, 0x75, 0x21, 0x03, 0xdc, 0x14, 0x65, 0x58, 0x41, 0xed, 0x3f, 0xb5, 0x60, + 0x5a, 0x8d, 0xe3, 0x2a, 0xd9, 0xa9, 0x13, 0x9f, 0x34, 0x92, 0x30, 0x7a, 0xbf, 0x8c, 0xe4, 0x71, + 0xfe, 0x4d, 0x38, 0x4f, 0x1a, 0x15, 0x04, 0xca, 0x57, 0xc9, 0x0e, 0xff, 0x40, 0xfa, 0x40, 0xcb, + 0x07, 0x0e, 0xf4, 0xd7, 0x2d, 0x18, 0x57, 0x03, 0x3d, 0x86, 0x2d, 0x77, 0xcd, 0xdc, 0x72, 0x3f, + 0x53, 0x70, 0xbd, 0xf6, 0xd8, 0x6c, 0x7f, 0xb3, 0x44, 0xd9, 0x86, 0xc0, 0xa9, 0x45, 0x21, 0x9d, + 0x24, 0xca, 0xf1, 0xdf, 0x27, 0x5f, 0xa9, 0xbf, 0xc1, 0x5e, 0x25, 0x3b, 0xeb, 0x21, 0x95, 0x26, + 0xba, 0x0f, 0xd6, 0xf8, 0xa8, 0x03, 0x07, 0x7e, 0xd4, 0xdf, 0x2e, 0xc1, 0x29, 0x35, 0x2d, 0xc6, + 0x29, 0xfd, 0x53, 0x39, 0x31, 0x17, 0x60, 0xd4, 0x25, 0x1b, 0x4e, 0xdb, 0x4f, 0x94, 0x36, 0x31, + 0xc8, 0xd5, 0xcc, 0x6a, 0x5a, 0x8c, 0x75, 0x9c, 0x3e, 0xe6, 0xf2, 0xeb, 0xa3, 0x8c, 0x9f, 0x27, + 0x0e, 0x5d, 0xf5, 0x54, 0xc2, 0xd3, 0xd4, 0xc3, 0x31, 0x5d, 0x3d, 0x14, 0xaa, 0xe0, 0x93, 0x30, + 0xe8, 0x6d, 0xd1, 0x33, 0xbf, 0x64, 0x1e, 0xe5, 0x6b, 0xb4, 0x10, 0x73, 0x18, 0x7a, 0x0a, 0x86, + 0x1b, 0xe1, 0xd6, 0x96, 0x13, 0xb8, 0x33, 0x65, 0x26, 0x73, 0x8e, 0x52, 0xb1, 0x60, 0x99, 0x17, + 0x61, 0x09, 0x43, 0x8f, 0xc1, 0x80, 0x13, 0x35, 0xe3, 0x99, 0x01, 0x86, 0x33, 0x42, 0x5b, 0x5a, + 0x8c, 0x9a, 0x31, 0x66, 0xa5, 0x54, 0x96, 0xbc, 0x1f, 0x46, 0xf7, 0xbc, 0xa0, 0x59, 0xf5, 0x22, + 0x26, 0x18, 0x6a, 0xb2, 0xe4, 0x1d, 0x05, 0xc1, 0x1a, 0x16, 0xaa, 0xc1, 0x60, 0x2b, 0x8c, 0x92, + 0x78, 0x66, 0x88, 0x4d, 0xfc, 0x73, 0xb9, 0xdb, 0x8f, 0x8f, 0xbb, 0x16, 0x46, 0x49, 0x3a, 0x14, + 0xfa, 0x2f, 0xc6, 0x9c, 0x10, 0x5a, 0x86, 0x32, 0x09, 0xb6, 0x67, 0x86, 0x19, 0xbd, 0x0f, 0x1d, + 0x4c, 0x6f, 0x25, 0xd8, 0xbe, 0xed, 0x44, 0x29, 0xbf, 0x5a, 0x09, 0xb6, 0x31, 0xad, 0x8d, 0x1a, + 0x50, 0x91, 0xc6, 0xb0, 0x78, 0x66, 0xa4, 0xc8, 0x52, 0xc4, 0x02, 0x1d, 0x93, 0x77, 0xdb, 0x5e, + 0x44, 0xb6, 0x48, 0x90, 0xc4, 0xa9, 0x62, 0x25, 0xa1, 0x31, 0x4e, 0xe9, 0xa2, 0x06, 0x8c, 0x71, + 0xf9, 0xf3, 0x7a, 0xd8, 0x0e, 0x92, 0x78, 0xa6, 0xc2, 0xba, 0x9c, 0x63, 0xb9, 0xb8, 0x9d, 0xd6, + 0x58, 0x9a, 0x16, 0xe4, 0xc7, 0xb4, 0xc2, 0x18, 0x1b, 0x44, 0xd1, 0x9b, 0x30, 0xee, 0x7b, 0xdb, + 0x24, 0x20, 0x71, 0x5c, 0x8b, 0xc2, 0xbb, 0x64, 0x06, 0xd8, 0x68, 0x9e, 0xcc, 0xd3, 0xe2, 0xc3, + 0xbb, 0x64, 0xe9, 0xc4, 0xde, 0xee, 0xdc, 0xf8, 0x35, 0xbd, 0x36, 0x36, 0x89, 0xa1, 0xb7, 0x60, + 0x82, 0x0a, 0xbb, 0x5e, 0x4a, 0x7e, 0xb4, 0x38, 0x79, 0xb4, 0xb7, 0x3b, 0x37, 0x81, 0x8d, 0xea, + 0x38, 0x43, 0x0e, 0xad, 0x43, 0xc5, 0xf7, 0x36, 0x48, 0x63, 0xa7, 0xe1, 0x93, 0x99, 0x31, 0x46, + 0x3b, 0x67, 0x73, 0x5e, 0x93, 0xe8, 0x5c, 0xc1, 0x50, 0x7f, 0x71, 0x4a, 0x08, 0xdd, 0x86, 0xd3, + 0x09, 0x89, 0xb6, 0xbc, 0x80, 0xd9, 0xe8, 0x84, 0xf4, 0xcb, 0x4c, 0x25, 0xe3, 0x6c, 0xd5, 0x9e, + 0x11, 0x13, 0x7b, 0x7a, 0xbd, 0x2b, 0x16, 0xee, 0x51, 0x1b, 0xdd, 0x84, 0x49, 0xb6, 0x9f, 0x6a, + 0x6d, 0xdf, 0xaf, 0x85, 0xbe, 0xd7, 0xd8, 0x99, 0x99, 0x60, 0x04, 0x9f, 0x92, 0x06, 0x90, 0x35, + 0x13, 0x4c, 0x15, 0xc3, 0xf4, 0x1f, 0xce, 0xd6, 0x46, 0x3e, 0x4c, 0xc6, 0xa4, 0xd1, 0x8e, 0xbc, + 0x64, 0x87, 0xae, 0x7d, 0xf2, 0x20, 0x99, 0x99, 0x2c, 0xa2, 0xe8, 0xd6, 0xcd, 0x4a, 0xdc, 0xfa, + 0x94, 0x29, 0xc4, 0x59, 0xd2, 0x94, 0x55, 0xc4, 0x89, 0xeb, 0x05, 0x33, 0x53, 0x8c, 0x03, 0xa9, + 0xfd, 0x55, 0xa7, 0x85, 0x98, 0xc3, 0x98, 0xfd, 0x80, 0xfe, 0xb8, 0x49, 0xb9, 0xf4, 0x09, 0x86, + 0x98, 0xda, 0x0f, 0x24, 0x00, 0xa7, 0x38, 0x54, 0x34, 0x48, 0x92, 0x9d, 0x19, 0xc4, 0x50, 0xd5, + 0x56, 0x5b, 0x5f, 0xff, 0x14, 0xa6, 0xe5, 0xe8, 0x36, 0x0c, 0x93, 0x60, 0x7b, 0x35, 0x0a, 0xb7, + 0x66, 0x4e, 0x16, 0xe1, 0x01, 0x2b, 0x1c, 0x99, 0x9f, 0x1f, 0xa9, 0x0a, 0x23, 0x8a, 0xb1, 0x24, + 0x86, 0x1e, 0xc0, 0x4c, 0x97, 0xaf, 0xc4, 0x3f, 0xca, 0x34, 0xfb, 0x28, 0x1f, 0x17, 0x75, 0x67, + 0xd6, 0x7b, 0xe0, 0xed, 0x1f, 0x00, 0xc3, 0x3d, 0xa9, 0xdb, 0x77, 0x61, 0x42, 0x31, 0x2a, 0xf6, + 0xbd, 0xd1, 0x1c, 0x0c, 0x52, 0x5e, 0x2c, 0x15, 0xfa, 0x0a, 0x9d, 0x54, 0xca, 0xa2, 0x63, 0xcc, + 0xcb, 0xd9, 0xa4, 0x7a, 0x9f, 0x25, 0x4b, 0x3b, 0x09, 0xe1, 0x8a, 0x5d, 0x59, 0x9b, 0x54, 0x09, + 0xc0, 0x29, 0x8e, 0xfd, 0x7f, 0xb9, 0x98, 0x94, 0x72, 0xc3, 0x02, 0x27, 0xc1, 0x79, 0x18, 0xd9, + 0x0c, 0xe3, 0x84, 0x62, 0xb3, 0x36, 0x06, 0x53, 0xc1, 0xe8, 0x8a, 0x28, 0xc7, 0x0a, 0x03, 0xbd, + 0x02, 0xe3, 0x0d, 0xbd, 0x01, 0x71, 0x8c, 0x9d, 0x12, 0x55, 0xcc, 0xd6, 0xb1, 0x89, 0x8b, 0x2e, + 0xc1, 0x08, 0xb3, 0x72, 0x37, 0x42, 0x5f, 0xa8, 0x90, 0xf2, 0x54, 0x1e, 0xa9, 0x89, 0xf2, 0x7d, + 0xed, 0x37, 0x56, 0xd8, 0x54, 0x11, 0xa7, 0x5d, 0x58, 0xab, 0x89, 0x03, 0x44, 0x29, 0xe2, 0x57, + 0x58, 0x29, 0x16, 0x50, 0xfb, 0x9f, 0x95, 0xb4, 0x59, 0xa6, 0x0a, 0x10, 0x41, 0x6f, 0xc0, 0xf0, + 0x7d, 0xc7, 0x4b, 0xbc, 0xa0, 0x29, 0xa4, 0x87, 0x17, 0x0a, 0x9e, 0x26, 0xac, 0xfa, 0x1d, 0x5e, + 0x95, 0x9f, 0x7c, 0xe2, 0x0f, 0x96, 0x04, 0x29, 0xed, 0xa8, 0x1d, 0x04, 0x94, 0x76, 0xa9, 0x7f, + 0xda, 0x98, 0x57, 0xe5, 0xb4, 0xc5, 0x1f, 0x2c, 0x09, 0xa2, 0x0d, 0x00, 0xb9, 0x96, 0x88, 0x2b, + 0xac, 0xcb, 0x1f, 0xe9, 0x87, 0xfc, 0xba, 0xaa, 0xbd, 0x34, 0x41, 0xcf, 0xda, 0xf4, 0x3f, 0xd6, + 0x28, 0xdb, 0x09, 0x13, 0xc2, 0x3a, 0xbb, 0x85, 0x3e, 0x4d, 0xb7, 0xb4, 0x13, 0x25, 0xc4, 0x5d, + 0x4c, 0xb2, 0x06, 0xfa, 0x83, 0x45, 0xec, 0x75, 0x6f, 0x8b, 0xe8, 0xdb, 0x5f, 0x10, 0xc1, 0x29, + 0x3d, 0xfb, 0xbb, 0x65, 0x98, 0xe9, 0xd5, 0x5d, 0xba, 0x24, 0xc9, 0x03, 0x2f, 0x59, 0xa6, 0x62, + 0x92, 0x65, 0x2e, 0xc9, 0x15, 0x51, 0x8e, 0x15, 0x06, 0x5d, 0x1b, 0xb1, 0xd7, 0x94, 0xca, 0xd2, + 0x60, 0xba, 0x36, 0xea, 0xac, 0x14, 0x0b, 0x28, 0xc5, 0x8b, 0x88, 0x13, 0x8b, 0xcb, 0x0d, 0x6d, + 0x0d, 0x61, 0x56, 0x8a, 0x05, 0x54, 0x37, 0x88, 0x0c, 0xe4, 0x18, 0x44, 0x8c, 0x29, 0x1a, 0x7c, + 0xb8, 0x53, 0x84, 0x3e, 0x03, 0xb0, 0xe1, 0x05, 0x5e, 0xbc, 0xc9, 0xa8, 0x0f, 0xf5, 0x4d, 0x5d, + 0x09, 0x59, 0xab, 0x8a, 0x0a, 0xd6, 0x28, 0xa2, 0x97, 0x60, 0x54, 0x6d, 0xcf, 0xb5, 0xea, 0xcc, + 0xb0, 0x69, 0x10, 0x4f, 0x79, 0x55, 0x15, 0xeb, 0x78, 0xf6, 0x3b, 0xd9, 0xf5, 0x22, 0x76, 0x85, + 0x36, 0xbf, 0x56, 0xd1, 0xf9, 0x2d, 0x1d, 0x3c, 0xbf, 0xf6, 0xef, 0x97, 0x61, 0xd2, 0x68, 0xac, + 0x1d, 0x17, 0xe0, 0x68, 0xaf, 0xd1, 0x03, 0xcb, 0x49, 0x88, 0xd8, 0x93, 0xe7, 0xfb, 0xd9, 0x34, + 0xfa, 0xf1, 0x46, 0xf7, 0x02, 0xa7, 0x84, 0x36, 0xa1, 0xe2, 0x3b, 0x31, 0x33, 0xa9, 0x10, 0xb1, + 0x17, 0xfb, 0x23, 0x9b, 0xaa, 0x1f, 0x4e, 0x9c, 0x68, 0xa7, 0x07, 0x6f, 0x25, 0x25, 0x4e, 0x4f, + 0x5b, 0x2a, 0xec, 0xc8, 0x1b, 0x35, 0xd5, 0x1d, 0x2a, 0x11, 0xed, 0x60, 0x0e, 0x43, 0x97, 0x60, + 0x2c, 0x22, 0x6c, 0xa5, 0x2c, 0x53, 0x79, 0x8e, 0x2d, 0xbd, 0xc1, 0x54, 0xf0, 0xc3, 0x1a, 0x0c, + 0x1b, 0x98, 0xa9, 0xdc, 0x3f, 0x74, 0x80, 0xdc, 0xff, 0x0c, 0x0c, 0xb3, 0x1f, 0x6a, 0x55, 0xa8, + 0x2f, 0xb4, 0xc6, 0x8b, 0xb1, 0x84, 0x67, 0x17, 0xd1, 0x48, 0xc1, 0x45, 0xf4, 0x2c, 0x4c, 0x54, + 0x1d, 0xb2, 0x15, 0x06, 0x2b, 0x81, 0xdb, 0x0a, 0xbd, 0x20, 0x41, 0x33, 0x30, 0xc0, 0xce, 0x13, + 0xbe, 0xdf, 0x07, 0x28, 0x05, 0x3c, 0x40, 0x65, 0x77, 0xfb, 0x8f, 0x4a, 0x30, 0x5e, 0x25, 0x3e, + 0x49, 0x08, 0xd7, 0x7b, 0x62, 0xb4, 0x0a, 0xa8, 0x19, 0x39, 0x0d, 0x52, 0x23, 0x91, 0x17, 0xba, + 0x75, 0xd2, 0x08, 0x03, 0x76, 0x11, 0x45, 0x0f, 0xc8, 0xd3, 0x7b, 0xbb, 0x73, 0xe8, 0x72, 0x07, + 0x14, 0x77, 0xa9, 0x81, 0x5c, 0x18, 0x6f, 0x45, 0xc4, 0xb0, 0x1b, 0x5a, 0xf9, 0xa2, 0x46, 0x4d, + 0xaf, 0xc2, 0xa5, 0x61, 0xa3, 0x08, 0x9b, 0x44, 0xd1, 0x27, 0x60, 0x2a, 0x8c, 0x5a, 0x9b, 0x4e, + 0x50, 0x25, 0x2d, 0x12, 0xb8, 0x54, 0x05, 0x10, 0xd6, 0x8e, 0xe9, 0xbd, 0xdd, 0xb9, 0xa9, 0x9b, + 0x19, 0x18, 0xee, 0xc0, 0x46, 0x6f, 0xc0, 0x89, 0x56, 0x14, 0xb6, 0x9c, 0x26, 0x5b, 0x32, 0x42, + 0x5a, 0xe1, 0xbc, 0xe9, 0xfc, 0xde, 0xee, 0xdc, 0x89, 0x5a, 0x16, 0xb8, 0xbf, 0x3b, 0x77, 0x92, + 0x4d, 0x19, 0x2d, 0x49, 0x81, 0xb8, 0x93, 0x8c, 0xfd, 0x2e, 0x9c, 0xaa, 0x86, 0xf7, 0x83, 0xfb, + 0x4e, 0xe4, 0x2e, 0xd6, 0xd6, 0x34, 0xe3, 0xc4, 0xeb, 0x52, 0xf9, 0xe5, 0x17, 0x7c, 0x39, 0x27, + 0x9b, 0x46, 0x83, 0xab, 0x1d, 0xab, 0x9e, 0x4f, 0x7a, 0x98, 0x43, 0xfe, 0x51, 0xc9, 0x68, 0x33, + 0xc5, 0x57, 0x77, 0x17, 0x56, 0xcf, 0xbb, 0x8b, 0x4f, 0xc3, 0xc8, 0x86, 0x47, 0x7c, 0x17, 0x93, + 0x0d, 0xf1, 0xb5, 0x2e, 0x14, 0xb9, 0xdc, 0x59, 0xa5, 0x75, 0xa4, 0x75, 0x8c, 0x2b, 0xd1, 0xab, + 0x82, 0x0c, 0x56, 0x04, 0x51, 0x1b, 0xa6, 0xa4, 0x1e, 0x26, 0xa1, 0x62, 0xb3, 0xbf, 0x50, 0x4c, + 0xcd, 0x33, 0x9b, 0x61, 0x9f, 0x17, 0x67, 0x08, 0xe2, 0x8e, 0x26, 0xa8, 0xfe, 0xbc, 0x45, 0x8f, + 0xba, 0x01, 0xb6, 0xf4, 0x99, 0xfe, 0xcc, 0x4c, 0x01, 0xac, 0xd4, 0xfe, 0x15, 0x0b, 0x1e, 0xe9, + 0x98, 0x2d, 0x61, 0x27, 0x39, 0xb2, 0x6f, 0x94, 0x35, 0x56, 0x94, 0xf2, 0x8d, 0x15, 0xf6, 0x4d, + 0x98, 0x5e, 0xd9, 0x6a, 0x25, 0x3b, 0x55, 0xcf, 0xbc, 0x72, 0x79, 0x19, 0x86, 0xb6, 0x88, 0xeb, + 0xb5, 0xb7, 0xc4, 0x67, 0x9d, 0x93, 0xe7, 0xc2, 0x75, 0x56, 0xba, 0xbf, 0x3b, 0x37, 0x5e, 0x4f, + 0xc2, 0xc8, 0x69, 0x12, 0x5e, 0x80, 0x05, 0xba, 0xfd, 0x23, 0x0b, 0x26, 0x25, 0x7f, 0x58, 0x74, + 0xdd, 0x88, 0xc4, 0x31, 0x9a, 0x85, 0x92, 0xd7, 0x12, 0x84, 0x40, 0x10, 0x2a, 0xad, 0xd5, 0x70, + 0xc9, 0x6b, 0xa1, 0x37, 0xa0, 0xc2, 0x6f, 0xea, 0xd2, 0xc5, 0xd1, 0xe7, 0xcd, 0x1f, 0xd3, 0x0d, + 0xd7, 0x25, 0x0d, 0x9c, 0x92, 0x93, 0x52, 0x32, 0x3b, 0x79, 0xca, 0xe6, 0xbd, 0xd1, 0x15, 0x51, + 0x8e, 0x15, 0x06, 0x3a, 0x07, 0x23, 0x41, 0xe8, 0xf2, 0xcb, 0x54, 0xbe, 0x4f, 0xd9, 0x92, 0xbb, + 0x21, 0xca, 0xb0, 0x82, 0xda, 0x5f, 0xb1, 0x60, 0x4c, 0x8e, 0xb1, 0xa0, 0xc0, 0x4e, 0x37, 0x49, + 0x2a, 0xac, 0xa7, 0x9b, 0x84, 0x0a, 0xdc, 0x0c, 0x62, 0xc8, 0xd9, 0xe5, 0x7e, 0xe4, 0x6c, 0xfb, + 0xd7, 0x4a, 0x30, 0x21, 0xbb, 0x53, 0x6f, 0xdf, 0x8d, 0x09, 0x15, 0x43, 0x2a, 0x0e, 0x9f, 0x7c, + 0x22, 0xd7, 0xd9, 0xf3, 0x79, 0xba, 0x98, 0xf1, 0xcd, 0x52, 0x31, 0x67, 0x51, 0xd2, 0xc1, 0x29, + 0x49, 0xb4, 0x0d, 0x27, 0x82, 0x30, 0x61, 0xc7, 0x9b, 0x82, 0x17, 0xbb, 0xe9, 0xc8, 0xb6, 0xf3, + 0xa8, 0x68, 0xe7, 0xc4, 0x8d, 0x2c, 0x3d, 0xdc, 0xd9, 0x04, 0xba, 0x29, 0x6d, 0x4c, 0x65, 0xd6, + 0xd6, 0xb3, 0xc5, 0xda, 0xea, 0x6d, 0x62, 0xb2, 0x7f, 0xcb, 0x82, 0x8a, 0x44, 0x3b, 0x8e, 0x2b, + 0xaf, 0x3b, 0x30, 0x1c, 0xb3, 0x4f, 0x24, 0xa7, 0xeb, 0x7c, 0xb1, 0x21, 0xf0, 0xef, 0x9a, 0x9e, + 0xe9, 0xfc, 0x7f, 0x8c, 0x25, 0x35, 0x66, 0x6c, 0x57, 0x03, 0x79, 0xdf, 0x19, 0xdb, 0x55, 0xcf, + 0x7a, 0xdf, 0x6c, 0x8d, 0x1b, 0xd6, 0x00, 0x2a, 0x98, 0xb6, 0x22, 0xb2, 0xe1, 0x3d, 0xc8, 0x0a, + 0xa6, 0x35, 0x56, 0x8a, 0x05, 0x14, 0x6d, 0xc0, 0x58, 0x43, 0x9a, 0xa3, 0x53, 0x16, 0xf2, 0xe1, + 0x82, 0xb6, 0x7f, 0x75, 0x8d, 0xc4, 0x5d, 0x93, 0x96, 0x35, 0x4a, 0xd8, 0xa0, 0x4b, 0xf9, 0x54, + 0x7a, 0x53, 0x5e, 0x2e, 0x68, 0xb8, 0x89, 0x48, 0x92, 0xb6, 0xd0, 0xf3, 0x92, 0xdc, 0xfe, 0x86, + 0x05, 0x43, 0xdc, 0x7e, 0x59, 0xcc, 0x08, 0xac, 0x5d, 0x90, 0xa5, 0xf3, 0x79, 0x9b, 0x16, 0x8a, + 0xfb, 0x32, 0x74, 0x07, 0x2a, 0xec, 0x07, 0xb3, 0xc5, 0x94, 0x8b, 0xf8, 0x69, 0xf1, 0xf6, 0xf5, + 0xae, 0xde, 0x96, 0x04, 0x70, 0x4a, 0xcb, 0xfe, 0x7e, 0x99, 0xb2, 0xbe, 0x14, 0xd5, 0x38, 0xdb, + 0xad, 0xe3, 0x38, 0xdb, 0x4b, 0x47, 0x7f, 0xb6, 0xbf, 0x0b, 0x93, 0x0d, 0xed, 0x82, 0x2e, 0xfd, + 0xe2, 0x17, 0x0b, 0x2e, 0x2b, 0xed, 0x56, 0x8f, 0xdb, 0xeb, 0x96, 0x4d, 0x72, 0x38, 0x4b, 0x1f, + 0x11, 0x18, 0xe3, 0xeb, 0x41, 0xb4, 0x37, 0xc0, 0xda, 0x5b, 0x28, 0xb2, 0xc2, 0xf4, 0xc6, 0xd8, + 0x2a, 0xae, 0x6b, 0x84, 0xb0, 0x41, 0xd6, 0xfe, 0xa5, 0x41, 0x18, 0x5c, 0xd9, 0x26, 0x41, 0x72, + 0x0c, 0xac, 0x6e, 0x0b, 0x26, 0xbc, 0x60, 0x3b, 0xf4, 0xb7, 0x89, 0xcb, 0xe1, 0x87, 0x3b, 0xde, + 0x4f, 0x8b, 0x46, 0x26, 0xd6, 0x0c, 0x62, 0x38, 0x43, 0xfc, 0x28, 0x2c, 0x05, 0xaf, 0xc1, 0x10, + 0x5f, 0x19, 0xc2, 0x4c, 0x90, 0x63, 0xcf, 0x67, 0x13, 0x2b, 0x76, 0x50, 0x6a, 0xcf, 0xe0, 0x57, + 0x09, 0x82, 0x10, 0x7a, 0x07, 0x26, 0x36, 0xbc, 0x28, 0x4e, 0xa8, 0xb2, 0x1f, 0x27, 0xce, 0x56, + 0xeb, 0x10, 0x36, 0x02, 0x35, 0x23, 0xab, 0x06, 0x25, 0x9c, 0xa1, 0x8c, 0x9a, 0x30, 0x4e, 0x55, + 0xd4, 0xb4, 0xa9, 0xe1, 0xbe, 0x9b, 0x52, 0x26, 0xc2, 0x6b, 0x3a, 0x21, 0x6c, 0xd2, 0xa5, 0x2c, + 0xa9, 0xc1, 0x54, 0xda, 0x11, 0x26, 0xdd, 0x28, 0x96, 0xc4, 0x75, 0x59, 0x0e, 0xa3, 0x9c, 0x8d, + 0x79, 0xca, 0x54, 0x4c, 0xce, 0x96, 0xfa, 0xc3, 0xd8, 0xdf, 0xa2, 0x67, 0x31, 0x9d, 0xc3, 0x63, + 0x38, 0xbe, 0xae, 0x98, 0xc7, 0xd7, 0x93, 0x05, 0xbe, 0x6c, 0x8f, 0xa3, 0xeb, 0x6d, 0x18, 0xd5, + 0x3e, 0x3c, 0x5a, 0x80, 0x4a, 0x43, 0x3a, 0x73, 0x08, 0x2e, 0xae, 0x44, 0x29, 0xe5, 0xe5, 0x81, + 0x53, 0x1c, 0x3a, 0x2f, 0x54, 0x04, 0xcd, 0xba, 0x7e, 0x51, 0x01, 0x15, 0x33, 0x88, 0xfd, 0x02, + 0xc0, 0xca, 0x03, 0xd2, 0x58, 0xe4, 0x2a, 0x9e, 0x76, 0xbf, 0x67, 0xf5, 0xbe, 0xdf, 0xb3, 0xbf, + 0x69, 0xc1, 0xc4, 0xea, 0xb2, 0x21, 0xd3, 0xcf, 0x03, 0x70, 0xd9, 0xf8, 0xce, 0x9d, 0x1b, 0xd2, + 0x7e, 0xcd, 0x8d, 0x8c, 0xaa, 0x14, 0x6b, 0x18, 0xe8, 0x51, 0x28, 0xfb, 0xed, 0x40, 0x88, 0xac, + 0xc3, 0x7b, 0xbb, 0x73, 0xe5, 0x6b, 0xed, 0x00, 0xd3, 0x32, 0xcd, 0xc7, 0xaa, 0x5c, 0xd8, 0xc7, + 0x2a, 0xdf, 0xdb, 0xf8, 0x6b, 0x65, 0x98, 0x5a, 0xf5, 0xc9, 0x03, 0xa3, 0xd7, 0x4f, 0xc3, 0x90, + 0x1b, 0x79, 0xdb, 0x24, 0xca, 0x0a, 0x02, 0x55, 0x56, 0x8a, 0x05, 0xb4, 0xb0, 0xdb, 0xd7, 0x5b, + 0x9d, 0x07, 0xf9, 0xd1, 0xb9, 0xbc, 0xe5, 0x8e, 0x19, 0x6d, 0xc0, 0x30, 0xbf, 0x0f, 0x8e, 0x67, + 0x06, 0xd9, 0x52, 0x7c, 0xe5, 0xe0, 0xce, 0x64, 0xe7, 0x67, 0x5e, 0xd8, 0x57, 0xb8, 0xc3, 0x8d, + 0xe2, 0x65, 0xa2, 0x14, 0x4b, 0xe2, 0xb3, 0x1f, 0x83, 0x31, 0x1d, 0xb3, 0x2f, 0xcf, 0x9b, 0xbf, + 0x6c, 0xc1, 0xc9, 0x55, 0x3f, 0x6c, 0xdc, 0xcb, 0xf8, 0xe5, 0xbd, 0x04, 0xa3, 0x74, 0x33, 0xc5, + 0x86, 0xd3, 0xaa, 0xe1, 0x9d, 0x2b, 0x40, 0x58, 0xc7, 0xd3, 0xaa, 0xdd, 0xba, 0xb5, 0x56, 0xed, + 0xe6, 0xd4, 0x2b, 0x40, 0x58, 0xc7, 0xb3, 0x7f, 0xc7, 0x82, 0xc7, 0x2f, 0x2f, 0xaf, 0xd4, 0x48, + 0x14, 0x7b, 0x71, 0x42, 0x82, 0xa4, 0xc3, 0xaf, 0x98, 0xca, 0x8c, 0xae, 0xd6, 0x95, 0x54, 0x66, + 0xac, 0xb2, 0x5e, 0x08, 0xe8, 0xfb, 0xc5, 0xb9, 0xfe, 0x1b, 0x16, 0x9c, 0xbc, 0xec, 0x25, 0x98, + 0xb4, 0xc2, 0xac, 0x2b, 0x70, 0x44, 0x5a, 0x61, 0xec, 0x25, 0x61, 0xb4, 0x93, 0x75, 0x05, 0xc6, + 0x0a, 0x82, 0x35, 0x2c, 0xde, 0xf2, 0xb6, 0x17, 0xd3, 0x9e, 0x96, 0x4c, 0x55, 0x17, 0x8b, 0x72, + 0xac, 0x30, 0xe8, 0xc0, 0x5c, 0x2f, 0x62, 0x22, 0xc3, 0x8e, 0xd8, 0xc1, 0x6a, 0x60, 0x55, 0x09, + 0xc0, 0x29, 0x8e, 0xfd, 0x77, 0x2c, 0x38, 0x75, 0xd9, 0x6f, 0xc7, 0x09, 0x89, 0x36, 0x62, 0xa3, + 0xb3, 0x2f, 0x40, 0x85, 0x48, 0xe1, 0x5e, 0xf4, 0x55, 0x1d, 0x1a, 0x4a, 0xea, 0xe7, 0x7e, 0xc8, + 0x0a, 0xaf, 0x80, 0xbb, 0x6b, 0x7f, 0xce, 0x99, 0xbf, 0x51, 0x82, 0xf1, 0x2b, 0xeb, 0xeb, 0xb5, + 0xcb, 0x24, 0x11, 0x5c, 0x32, 0xdf, 0x28, 0x85, 0x35, 0x8d, 0xfc, 0x20, 0xe1, 0xa7, 0x9d, 0x78, + 0xfe, 0x3c, 0x0f, 0x3c, 0x99, 0x5f, 0x0b, 0x92, 0x9b, 0x51, 0x3d, 0x89, 0xbc, 0xa0, 0xd9, 0x55, + 0x87, 0x97, 0xbc, 0xbc, 0xdc, 0x8b, 0x97, 0xa3, 0x17, 0x60, 0x88, 0x45, 0xbe, 0x48, 0xe1, 0xe3, + 0x83, 0x4a, 0x4e, 0x60, 0xa5, 0xfb, 0xbb, 0x73, 0x95, 0x5b, 0x78, 0x8d, 0xff, 0xc1, 0x02, 0x15, + 0xbd, 0x05, 0xa3, 0x9b, 0x49, 0xd2, 0xba, 0x42, 0x1c, 0x97, 0x44, 0x92, 0x4f, 0x9c, 0x3b, 0x98, + 0x4f, 0xd0, 0xe9, 0xe0, 0x15, 0xd2, 0xad, 0x95, 0x96, 0xc5, 0x58, 0xa7, 0x68, 0xd7, 0x01, 0x52, + 0xd8, 0x43, 0xd2, 0x41, 0xec, 0x9f, 0x2f, 0xc1, 0xf0, 0x15, 0x27, 0x70, 0x7d, 0x12, 0xa1, 0x55, + 0x18, 0x20, 0x0f, 0x48, 0x43, 0x1c, 0xe4, 0x39, 0x5d, 0x4f, 0x0f, 0x3b, 0x6e, 0x57, 0xa3, 0xff, + 0x31, 0xab, 0x8f, 0x30, 0x0c, 0xd3, 0x7e, 0x5f, 0x56, 0x5e, 0xe2, 0xcf, 0xe5, 0xcf, 0x82, 0x5a, + 0x14, 0xfc, 0xa4, 0x14, 0x45, 0x58, 0x12, 0x62, 0x16, 0xa8, 0x46, 0xab, 0x4e, 0xd9, 0x5b, 0x52, + 0x4c, 0xb3, 0x5b, 0x5f, 0xae, 0x71, 0x74, 0x41, 0x97, 0x5b, 0xa0, 0x64, 0x21, 0x4e, 0xc9, 0xd9, + 0xeb, 0x50, 0xa1, 0x1f, 0x7f, 0xd1, 0xf7, 0x9c, 0x83, 0xcd, 0x60, 0xcf, 0x41, 0x45, 0x1a, 0xa2, + 0x62, 0xe1, 0x72, 0xce, 0xa8, 0x4a, 0x3b, 0x55, 0x8c, 0x53, 0xb8, 0x7d, 0x09, 0xa6, 0xd9, 0x2d, + 0xaf, 0x93, 0x6c, 0x1a, 0x7b, 0x31, 0x77, 0xd1, 0xdb, 0xdf, 0x1e, 0x80, 0x13, 0x6b, 0xf5, 0xe5, + 0xba, 0x69, 0x91, 0xbc, 0x04, 0x63, 0xfc, 0xd8, 0xa7, 0x4b, 0xd9, 0xf1, 0x45, 0x7d, 0x75, 0x33, + 0xb1, 0xae, 0xc1, 0xb0, 0x81, 0x89, 0x1e, 0x87, 0xb2, 0xf7, 0x6e, 0x90, 0xf5, 0x15, 0x5c, 0x7b, + 0xed, 0x06, 0xa6, 0xe5, 0x14, 0x4c, 0x25, 0x08, 0xce, 0x3a, 0x15, 0x58, 0x49, 0x11, 0xaf, 0xc2, + 0x84, 0x17, 0x37, 0x62, 0x6f, 0x2d, 0xa0, 0x7c, 0xc5, 0x69, 0xc8, 0x4d, 0x91, 0x8a, 0xfc, 0xb4, + 0xab, 0x0a, 0x8a, 0x33, 0xd8, 0x1a, 0x1f, 0x1f, 0x2c, 0x2c, 0x85, 0xe4, 0x3a, 0xa1, 0x53, 0x01, + 0xab, 0xc5, 0x46, 0x17, 0x33, 0xcf, 0x23, 0x21, 0x60, 0xf1, 0x01, 0xc7, 0x58, 0xc2, 0xd0, 0x65, + 0x38, 0xd1, 0xd8, 0x74, 0x5a, 0x8b, 0xed, 0x64, 0xb3, 0xea, 0xc5, 0x8d, 0x70, 0x9b, 0x44, 0x3b, + 0x4c, 0x00, 0x1e, 0x49, 0x6d, 0x5a, 0x0a, 0xb0, 0x7c, 0x65, 0xb1, 0x46, 0x31, 0x71, 0x67, 0x1d, + 0x53, 0x20, 0x81, 0x23, 0x10, 0x48, 0x16, 0x61, 0x52, 0xb6, 0x5a, 0x27, 0x31, 0x3b, 0x22, 0x46, + 0x59, 0x3f, 0x55, 0x2c, 0x8f, 0x28, 0x56, 0xbd, 0xcc, 0xe2, 0xdb, 0xef, 0x40, 0x45, 0x79, 0xca, + 0x49, 0x07, 0x51, 0xab, 0x87, 0x83, 0x68, 0x3e, 0x73, 0x97, 0xb6, 0xf3, 0x72, 0x57, 0xdb, 0xf9, + 0x3f, 0xb1, 0x20, 0x75, 0xf5, 0x41, 0x18, 0x2a, 0xad, 0x90, 0xdd, 0xb3, 0x45, 0xf2, 0x42, 0xfb, + 0xa9, 0x9c, 0x3d, 0xcf, 0x79, 0x0e, 0x9f, 0x90, 0x9a, 0xac, 0x8b, 0x53, 0x32, 0xe8, 0x1a, 0x0c, + 0xb7, 0x22, 0x52, 0x4f, 0x58, 0x74, 0x47, 0x1f, 0x14, 0xf9, 0x42, 0xe0, 0x35, 0xb1, 0x24, 0x61, + 0xff, 0x0b, 0x0b, 0xe0, 0x9a, 0xb7, 0xe5, 0x25, 0xd8, 0x09, 0x9a, 0xe4, 0x18, 0x14, 0xeb, 0x1b, + 0x30, 0x10, 0xb7, 0x48, 0xa3, 0xd8, 0x4d, 0x69, 0xda, 0xb3, 0x7a, 0x8b, 0x34, 0xd2, 0xcf, 0x41, + 0xff, 0x61, 0x46, 0xc7, 0xfe, 0x1e, 0xc0, 0x44, 0x8a, 0x46, 0x95, 0x1b, 0xf4, 0xbc, 0x11, 0xd6, + 0xf0, 0x68, 0x26, 0xac, 0xa1, 0xc2, 0xb0, 0xb5, 0x48, 0x86, 0x04, 0xca, 0x5b, 0xce, 0x03, 0xa1, + 0x4b, 0xbd, 0x54, 0xb4, 0x43, 0xb4, 0xa5, 0xf9, 0xeb, 0xce, 0x03, 0x2e, 0xba, 0x3e, 0x27, 0x17, + 0xd2, 0x75, 0xe7, 0xc1, 0x3e, 0xbf, 0x0f, 0x65, 0xdc, 0x89, 0x2a, 0x6f, 0x5f, 0xf8, 0xe3, 0xf4, + 0x3f, 0x3b, 0x86, 0x68, 0x73, 0xac, 0x55, 0x2f, 0x10, 0xa6, 0xe0, 0x3e, 0x5b, 0xf5, 0x82, 0x6c, + 0xab, 0x5e, 0x50, 0xa0, 0x55, 0x8f, 0xf9, 0xff, 0x0e, 0x8b, 0x1b, 0x14, 0xe6, 0x3c, 0x39, 0x7a, + 0xf1, 0xa3, 0x7d, 0x35, 0x2d, 0xae, 0x62, 0x78, 0xf3, 0x0b, 0x52, 0x5e, 0x17, 0xa5, 0xb9, 0x5d, + 0x90, 0x4d, 0xa3, 0xbf, 0x6b, 0xc1, 0x84, 0xf8, 0x8d, 0xc9, 0xbb, 0x6d, 0x12, 0x27, 0x42, 0x2e, + 0xf8, 0xc4, 0x61, 0x7a, 0x23, 0x48, 0xf0, 0x4e, 0x7d, 0x44, 0xb2, 0x5f, 0x13, 0x98, 0xdb, 0xb7, + 0x4c, 0x7f, 0xd0, 0xf7, 0x2c, 0x98, 0xde, 0x72, 0x1e, 0xf0, 0x16, 0x79, 0x19, 0x76, 0x12, 0x2f, + 0x14, 0x0e, 0xa2, 0xab, 0xfd, 0xae, 0x93, 0x0e, 0x42, 0xbc, 0xbb, 0xd2, 0xf7, 0x6b, 0xba, 0x1b, + 0x4a, 0x6e, 0xa7, 0xbb, 0xf6, 0x70, 0x76, 0x03, 0x46, 0xe4, 0xc2, 0xec, 0xa2, 0x29, 0x55, 0x75, + 0xf1, 0x27, 0xc7, 0x2e, 0x31, 0x2f, 0xad, 0x8b, 0xf3, 0xaf, 0xb5, 0x9d, 0x20, 0xf1, 0x92, 0x1d, + 0x4d, 0xb3, 0x62, 0xed, 0x88, 0xa5, 0x78, 0xa4, 0xed, 0xbc, 0x03, 0x63, 0xfa, 0xba, 0x3b, 0xd2, + 0xb6, 0xde, 0x85, 0x93, 0x5d, 0x56, 0xd5, 0x91, 0x36, 0x79, 0x1f, 0x1e, 0xed, 0xb9, 0x3e, 0x8e, + 0xb2, 0x61, 0xfb, 0x37, 0x2c, 0x9d, 0x75, 0x1e, 0x83, 0xdd, 0xea, 0xba, 0x69, 0xb7, 0x3a, 0x57, + 0x74, 0x0f, 0xf5, 0x30, 0x5e, 0x6d, 0xe8, 0xdd, 0xa7, 0x47, 0x02, 0x5a, 0x87, 0x21, 0x9f, 0x96, + 0xc8, 0x6b, 0xc3, 0xf3, 0xfd, 0xec, 0xd2, 0x54, 0x02, 0x63, 0xe5, 0x31, 0x16, 0xb4, 0xec, 0xef, + 0x59, 0x30, 0xf0, 0xe7, 0x18, 0x74, 0xd5, 0x41, 0x5a, 0x64, 0x21, 0x98, 0xc7, 0xce, 0xfd, 0x95, + 0x07, 0x09, 0x09, 0x62, 0x26, 0xc6, 0xf7, 0x72, 0x7c, 0x18, 0xa5, 0x4d, 0x49, 0x3f, 0x96, 0x57, + 0x60, 0xdc, 0x77, 0xee, 0x12, 0x5f, 0xda, 0xdc, 0xb3, 0x4a, 0xef, 0x35, 0x1d, 0x88, 0x4d, 0x5c, + 0x5a, 0x79, 0x43, 0xbf, 0x92, 0x10, 0x42, 0x92, 0xaa, 0x6c, 0xdc, 0x57, 0x60, 0x13, 0x97, 0x6a, + 0x5d, 0xf7, 0x9d, 0xa4, 0xb1, 0x29, 0x14, 0x62, 0xd5, 0xdd, 0x3b, 0xb4, 0x10, 0x73, 0x18, 0x15, + 0xf6, 0xe4, 0x8a, 0xbd, 0x4d, 0x22, 0x26, 0xec, 0x71, 0xa1, 0x5a, 0x09, 0x7b, 0xd8, 0x04, 0xe3, + 0x2c, 0x3e, 0xfa, 0x18, 0x4c, 0xd0, 0xc9, 0x09, 0xdb, 0x89, 0xf4, 0xd2, 0x19, 0x64, 0x5e, 0x3a, + 0xcc, 0xc9, 0x7b, 0xdd, 0x80, 0xe0, 0x0c, 0xa6, 0xfd, 0x16, 0x9c, 0xbc, 0x16, 0x3a, 0xee, 0x92, + 0xe3, 0x3b, 0x41, 0x83, 0x44, 0x6b, 0x41, 0x33, 0xd7, 0x03, 0x40, 0xbf, 0xa5, 0x2f, 0xe5, 0xdd, + 0xd2, 0xdb, 0x11, 0x20, 0xbd, 0x01, 0xe1, 0x5f, 0xf6, 0x26, 0x0c, 0x7b, 0xbc, 0x29, 0xb1, 0x6c, + 0x2f, 0xe4, 0x49, 0xd0, 0x1d, 0x7d, 0xd4, 0xfc, 0xa5, 0x78, 0x01, 0x96, 0x24, 0xa9, 0xbe, 0xd5, + 0x4d, 0xe4, 0xce, 0x57, 0x94, 0xed, 0xbf, 0x6a, 0xc1, 0xe4, 0x8d, 0x4c, 0x54, 0xf0, 0xd3, 0x30, + 0xc4, 0xb3, 0x54, 0x64, 0xad, 0x54, 0x75, 0x56, 0x8a, 0x05, 0xf4, 0xa1, 0x1b, 0x49, 0x7e, 0xb1, + 0x04, 0x15, 0xe6, 0xa9, 0xdc, 0xa2, 0xba, 0xd3, 0xd1, 0x8b, 0xa9, 0xd7, 0x0d, 0x31, 0x35, 0x47, + 0x51, 0x57, 0x1d, 0xeb, 0x25, 0xa5, 0xa2, 0x5b, 0x2a, 0x5a, 0xb6, 0x90, 0x8e, 0x9e, 0x12, 0xe4, + 0x11, 0x95, 0x13, 0x66, 0x70, 0xad, 0x8c, 0xa4, 0x65, 0xf7, 0xe6, 0x0a, 0xf7, 0x7d, 0x77, 0x6f, + 0xae, 0x7a, 0xd6, 0x83, 0x39, 0xd5, 0xb4, 0xce, 0x33, 0xf6, 0xfd, 0xb3, 0xcc, 0xff, 0xd4, 0xf1, + 0xbd, 0xcf, 0x12, 0x15, 0x74, 0x3e, 0x27, 0xfc, 0x49, 0x45, 0xe9, 0x3e, 0xe3, 0x33, 0xe2, 0x1f, + 0xcf, 0x29, 0x90, 0x56, 0xb1, 0xaf, 0xc0, 0x64, 0x66, 0xea, 0xd0, 0x4b, 0x30, 0xd8, 0xda, 0x74, + 0x62, 0x92, 0x71, 0x05, 0x1a, 0xac, 0xd1, 0xc2, 0xfd, 0xdd, 0xb9, 0x09, 0x55, 0x81, 0x95, 0x60, + 0x8e, 0x6d, 0x7f, 0xb1, 0x04, 0x03, 0x37, 0x42, 0xf7, 0x38, 0x96, 0xda, 0x15, 0x63, 0xa9, 0x3d, + 0x9d, 0x9f, 0x91, 0xa4, 0xe7, 0x2a, 0xab, 0x65, 0x56, 0xd9, 0xb9, 0x02, 0xb4, 0x0e, 0x5e, 0x60, + 0x5b, 0x30, 0xca, 0x32, 0x9e, 0x08, 0x5f, 0xa8, 0x17, 0x0c, 0xcd, 0x6a, 0x2e, 0xa3, 0x59, 0x4d, + 0x6a, 0xa8, 0x9a, 0x7e, 0xf5, 0x0c, 0x0c, 0x0b, 0xdf, 0x9b, 0xac, 0xf7, 0xad, 0xc0, 0xc5, 0x12, + 0x6e, 0xff, 0xf3, 0x32, 0x18, 0x19, 0x56, 0xd0, 0x6f, 0x59, 0x30, 0x1f, 0xf1, 0x48, 0x26, 0xb7, + 0xda, 0x8e, 0xbc, 0xa0, 0x59, 0x6f, 0x6c, 0x12, 0xb7, 0xed, 0x7b, 0x41, 0x73, 0xad, 0x19, 0x84, + 0xaa, 0x78, 0xe5, 0x01, 0x69, 0xb4, 0x99, 0xa9, 0xbb, 0x70, 0x62, 0x17, 0x75, 0xef, 0x7c, 0x71, + 0x6f, 0x77, 0x6e, 0x1e, 0xf7, 0xd5, 0x0a, 0xee, 0xb3, 0x57, 0xe8, 0x0f, 0x2d, 0x58, 0xe0, 0x39, + 0x46, 0x8a, 0x8f, 0xa4, 0x90, 0x46, 0x5a, 0x93, 0x44, 0x53, 0x72, 0xeb, 0x24, 0xda, 0x5a, 0x7a, + 0x59, 0x4c, 0xf2, 0x42, 0xad, 0xbf, 0x56, 0x71, 0xbf, 0xdd, 0xb4, 0xff, 0x75, 0x19, 0xc6, 0xe9, + 0x7c, 0xa6, 0x79, 0x05, 0x5e, 0x32, 0x96, 0xc9, 0x13, 0x99, 0x65, 0x72, 0xc2, 0x40, 0x7e, 0x38, + 0x29, 0x05, 0x62, 0x38, 0xe1, 0x3b, 0x71, 0x72, 0x85, 0x38, 0x51, 0x72, 0x97, 0x38, 0xec, 0x7a, + 0x37, 0xeb, 0x3a, 0x52, 0xe0, 0xc6, 0x58, 0xd9, 0xbe, 0xae, 0x65, 0x89, 0xe1, 0x4e, 0xfa, 0x68, + 0x1b, 0x10, 0xbb, 0x4a, 0x8e, 0x9c, 0x20, 0xe6, 0x63, 0xf1, 0x84, 0x69, 0xbc, 0xbf, 0x56, 0x67, + 0x45, 0xab, 0xe8, 0x5a, 0x07, 0x35, 0xdc, 0xa5, 0x05, 0xcd, 0x59, 0x60, 0xb0, 0xa8, 0xb3, 0xc0, + 0x50, 0x8e, 0xdb, 0xfb, 0x97, 0x2c, 0x38, 0x49, 0x3f, 0x8b, 0xe9, 0x22, 0x1d, 0xa3, 0x10, 0x26, + 0xe9, 0xb2, 0xf3, 0x49, 0x22, 0xcb, 0xc4, 0xfe, 0xca, 0x91, 0xac, 0x4d, 0x3a, 0xa9, 0xf8, 0x76, + 0xd5, 0x24, 0x86, 0xb3, 0xd4, 0xed, 0x6f, 0x5a, 0xc0, 0x9c, 0x16, 0x8f, 0xe1, 0x30, 0xbb, 0x6c, + 0x1e, 0x66, 0x76, 0x3e, 0xc7, 0xe8, 0x71, 0x8e, 0xbd, 0x08, 0x53, 0x14, 0x5a, 0x8b, 0xc2, 0x07, + 0x3b, 0x52, 0xd0, 0xce, 0xb7, 0x66, 0x7f, 0xa9, 0xc4, 0xb7, 0x8d, 0x0a, 0xc9, 0x44, 0x5f, 0xb6, + 0x60, 0xa4, 0xe1, 0xb4, 0x9c, 0x06, 0xcf, 0x4f, 0x55, 0xc0, 0x3a, 0x63, 0xd4, 0x9f, 0x5f, 0x16, + 0x75, 0xb9, 0x65, 0xe1, 0xc3, 0x72, 0xe8, 0xb2, 0x38, 0xd7, 0x9a, 0xa0, 0x1a, 0x9f, 0xbd, 0x07, + 0xe3, 0x06, 0xb1, 0x23, 0x55, 0x43, 0xbf, 0x6c, 0x71, 0xa6, 0xaf, 0x54, 0x85, 0xfb, 0x70, 0x22, + 0xd0, 0xfe, 0x53, 0x76, 0x26, 0x25, 0xe3, 0xf9, 0xe2, 0x6c, 0x9d, 0x71, 0x41, 0xcd, 0x41, 0x33, + 0x43, 0x10, 0x77, 0xb6, 0x61, 0xff, 0xb2, 0x05, 0x8f, 0xe8, 0x88, 0x5a, 0x0c, 0x6d, 0x9e, 0xdd, + 0xb8, 0x0a, 0x23, 0x61, 0x8b, 0x44, 0x4e, 0xaa, 0x16, 0x9d, 0x93, 0xf3, 0x7f, 0x53, 0x94, 0xef, + 0xef, 0xce, 0x4d, 0xeb, 0xd4, 0x65, 0x39, 0x56, 0x35, 0x91, 0x0d, 0x43, 0x6c, 0x5e, 0x62, 0x11, + 0xfd, 0xcc, 0xf2, 0x35, 0xb1, 0x7b, 0xa9, 0x18, 0x0b, 0x88, 0xfd, 0x37, 0x2c, 0xbe, 0xdc, 0xf4, + 0xae, 0xa3, 0xcf, 0xc1, 0xd4, 0x16, 0xd5, 0xa0, 0x56, 0x1e, 0xb4, 0x22, 0x6e, 0xf5, 0x96, 0x33, + 0xf6, 0x52, 0xf1, 0x19, 0xd3, 0x86, 0xbb, 0x34, 0x23, 0x7a, 0x3f, 0x75, 0x3d, 0x43, 0x16, 0x77, + 0x34, 0x64, 0xff, 0xfd, 0x12, 0xdf, 0xb3, 0x4c, 0x86, 0x7b, 0x06, 0x86, 0x5b, 0xa1, 0xbb, 0xbc, + 0x56, 0xc5, 0x62, 0xae, 0x14, 0xd3, 0xa9, 0xf1, 0x62, 0x2c, 0xe1, 0xe8, 0x22, 0x00, 0x79, 0x90, + 0x90, 0x28, 0x70, 0x7c, 0x75, 0x93, 0xae, 0x44, 0xa5, 0x15, 0x05, 0xc1, 0x1a, 0x16, 0xad, 0xd3, + 0x8a, 0xc2, 0x6d, 0xcf, 0x65, 0xc1, 0x1f, 0x65, 0xb3, 0x4e, 0x4d, 0x41, 0xb0, 0x86, 0x45, 0xf5, + 0xd6, 0x76, 0x10, 0xf3, 0x63, 0xcc, 0xb9, 0x2b, 0xd2, 0x0b, 0x8d, 0xa4, 0x7a, 0xeb, 0x2d, 0x1d, + 0x88, 0x4d, 0x5c, 0x74, 0x15, 0x86, 0x12, 0x87, 0xdd, 0x0f, 0x0f, 0x16, 0x71, 0xb6, 0x59, 0xa7, + 0xb8, 0x7a, 0x3e, 0x27, 0x5a, 0x15, 0x0b, 0x12, 0xf6, 0x7f, 0xaa, 0x00, 0xa4, 0x52, 0x17, 0xfa, + 0x62, 0xe7, 0x86, 0xff, 0x48, 0x51, 0x91, 0xed, 0xe1, 0xed, 0x76, 0xf4, 0x55, 0x0b, 0x46, 0x1d, + 0xdf, 0x0f, 0x1b, 0x4e, 0xc2, 0xa6, 0xa7, 0x54, 0x94, 0xf5, 0x88, 0x9e, 0x2c, 0xa6, 0x75, 0x79, + 0x67, 0x5e, 0x90, 0x77, 0xb6, 0x1a, 0x24, 0xb7, 0x3f, 0x7a, 0x17, 0xd0, 0x87, 0xa5, 0xd4, 0xce, + 0xbf, 0xf0, 0x6c, 0x56, 0x6a, 0xaf, 0x30, 0x86, 0xab, 0x09, 0xec, 0xe8, 0x2d, 0x23, 0x1d, 0xcf, + 0x40, 0x91, 0x08, 0x5e, 0x43, 0x0e, 0xc9, 0xcb, 0xc4, 0x83, 0xde, 0xd0, 0xbd, 0xd2, 0x07, 0x8b, + 0x84, 0xc8, 0x6b, 0xe2, 0x70, 0x8e, 0x47, 0x7a, 0x02, 0x93, 0xae, 0x79, 0xf2, 0x0a, 0xcf, 0xba, + 0x0b, 0xf9, 0x2d, 0x64, 0x8e, 0xec, 0xf4, 0xac, 0xcd, 0x00, 0x70, 0xb6, 0x09, 0xf4, 0x06, 0x8f, + 0x19, 0x58, 0x0b, 0x36, 0x42, 0xe1, 0x5d, 0x77, 0xbe, 0xc0, 0x37, 0xdf, 0x89, 0x13, 0xb2, 0x45, + 0xeb, 0xa4, 0x87, 0xeb, 0x0d, 0x41, 0x05, 0x2b, 0x7a, 0x68, 0x1d, 0x86, 0x58, 0xc0, 0x56, 0x3c, + 0x33, 0x52, 0xc4, 0x12, 0x67, 0xc6, 0x29, 0xa7, 0xfb, 0x87, 0xfd, 0x8d, 0xb1, 0xa0, 0x85, 0xae, + 0xc8, 0x4c, 0x05, 0xf1, 0x5a, 0x70, 0x2b, 0x26, 0x2c, 0x53, 0x41, 0x65, 0xe9, 0x43, 0x69, 0xea, + 0x01, 0x5e, 0xde, 0x35, 0x21, 0xa1, 0x51, 0x93, 0x0a, 0x36, 0xe2, 0xbf, 0xcc, 0x73, 0x38, 0x03, + 0x45, 0x3a, 0x6a, 0x66, 0x45, 0x4c, 0x27, 0xfb, 0xb6, 0x49, 0x0c, 0x67, 0xa9, 0x1f, 0xeb, 0x91, + 0x3a, 0x1b, 0xc0, 0x54, 0x76, 0x53, 0x1e, 0xe9, 0x11, 0xfe, 0xe3, 0x01, 0x98, 0x30, 0x17, 0x07, + 0x5a, 0x80, 0x8a, 0x20, 0xa2, 0xf2, 0x9e, 0xa9, 0x3d, 0x70, 0x5d, 0x02, 0x70, 0x8a, 0xc3, 0x32, + 0xc0, 0xb1, 0xea, 0x9a, 0x5f, 0x55, 0x9a, 0x01, 0x4e, 0x41, 0xb0, 0x86, 0x45, 0x25, 0xe1, 0xbb, + 0x61, 0x98, 0xa8, 0x93, 0x40, 0xad, 0x9b, 0x25, 0x56, 0x8a, 0x05, 0x94, 0x9e, 0x00, 0xf7, 0xe8, + 0xc7, 0xf4, 0x4d, 0xab, 0xa2, 0x3a, 0x01, 0xae, 0xea, 0x40, 0x6c, 0xe2, 0xd2, 0x13, 0x2d, 0x8c, + 0xd9, 0x42, 0x14, 0xf2, 0x76, 0xea, 0xa7, 0x56, 0xe7, 0x41, 0x8c, 0x12, 0x8e, 0x3e, 0x05, 0x8f, + 0xa8, 0x98, 0x43, 0xcc, 0xad, 0xb4, 0xb2, 0xc5, 0x21, 0x43, 0x65, 0x7e, 0x64, 0xb9, 0x3b, 0x1a, + 0xee, 0x55, 0x1f, 0xbd, 0x0a, 0x13, 0x42, 0x56, 0x96, 0x14, 0x87, 0x4d, 0x77, 0x83, 0xab, 0x06, + 0x14, 0x67, 0xb0, 0x51, 0x15, 0xa6, 0x68, 0x09, 0x13, 0x52, 0x25, 0x05, 0x1e, 0x3b, 0xa9, 0x8e, + 0xfa, 0xab, 0x19, 0x38, 0xee, 0xa8, 0x81, 0x16, 0x61, 0x92, 0x0b, 0x2b, 0x54, 0x31, 0x64, 0xdf, + 0x41, 0xb8, 0xc4, 0xaa, 0x8d, 0x70, 0xd3, 0x04, 0xe3, 0x2c, 0x3e, 0xba, 0x04, 0x63, 0x4e, 0xd4, + 0xd8, 0xf4, 0x12, 0xd2, 0x48, 0xda, 0x11, 0xcf, 0x03, 0xa2, 0xf9, 0x6b, 0x2c, 0x6a, 0x30, 0x6c, + 0x60, 0xda, 0x9f, 0x85, 0x93, 0x5d, 0xfc, 0xef, 0xe9, 0xc2, 0x71, 0x5a, 0x9e, 0x1c, 0x53, 0xc6, + 0xe3, 0x6c, 0xb1, 0xb6, 0x26, 0x47, 0xa3, 0x61, 0xd1, 0xd5, 0xc9, 0xcc, 0xd3, 0x5a, 0x5a, 0x52, + 0xb5, 0x3a, 0x57, 0x25, 0x00, 0xa7, 0x38, 0xf6, 0x9f, 0x55, 0x40, 0xb3, 0xde, 0x14, 0xf0, 0x32, + 0xba, 0x04, 0x63, 0x32, 0xd3, 0xae, 0x96, 0xe1, 0x52, 0x0d, 0xf3, 0xb2, 0x06, 0xc3, 0x06, 0x26, + 0xed, 0x5b, 0x20, 0x6d, 0x52, 0x59, 0xff, 0x36, 0x65, 0xac, 0xc2, 0x29, 0x0e, 0x3a, 0x0f, 0x23, + 0x31, 0xf1, 0x37, 0xae, 0x79, 0xc1, 0x3d, 0xb1, 0xb0, 0x15, 0x67, 0xae, 0x8b, 0x72, 0xac, 0x30, + 0xd0, 0x12, 0x94, 0xdb, 0x9e, 0x2b, 0x96, 0xb2, 0x14, 0x1b, 0xca, 0xb7, 0xd6, 0xaa, 0xfb, 0xbb, + 0x73, 0x4f, 0xf4, 0x4a, 0x60, 0x4c, 0xf5, 0xf3, 0x78, 0x9e, 0x6e, 0x3f, 0x5a, 0xb9, 0x9b, 0x9d, + 0x7e, 0xa8, 0x4f, 0x3b, 0xfd, 0x45, 0x00, 0x31, 0x6a, 0xb9, 0x96, 0xcb, 0xe9, 0x57, 0xbb, 0xac, + 0x20, 0x58, 0xc3, 0xa2, 0x5a, 0x7e, 0x23, 0x22, 0x8e, 0x54, 0x84, 0xb9, 0x5f, 0xf8, 0xc8, 0xe1, + 0xb5, 0xfc, 0xe5, 0x2c, 0x31, 0xdc, 0x49, 0x1f, 0x85, 0x70, 0xc2, 0x15, 0x81, 0xad, 0x69, 0xa3, + 0x95, 0xfe, 0x9d, 0xd1, 0x99, 0x4b, 0x4d, 0x96, 0x10, 0xee, 0xa4, 0x8d, 0x3e, 0x03, 0xb3, 0xb2, + 0xb0, 0x33, 0xaa, 0x98, 0x6d, 0x97, 0xf2, 0xd2, 0x99, 0xbd, 0xdd, 0xb9, 0xd9, 0x6a, 0x4f, 0x2c, + 0x7c, 0x00, 0x05, 0xf4, 0x26, 0x0c, 0xb1, 0x7b, 0x9d, 0x78, 0x66, 0x94, 0x9d, 0x78, 0x2f, 0x16, + 0x09, 0x69, 0xa0, 0xab, 0x7e, 0x9e, 0xdd, 0x0e, 0x09, 0x67, 0xdd, 0xf4, 0xb2, 0x8c, 0x15, 0x62, + 0x41, 0x13, 0xb5, 0x60, 0xd4, 0x09, 0x82, 0x30, 0x71, 0xb8, 0x20, 0x36, 0x56, 0x44, 0x96, 0xd4, + 0x9a, 0x58, 0x4c, 0xeb, 0xf2, 0x76, 0x94, 0xff, 0x9f, 0x06, 0xc1, 0x7a, 0x13, 0xe8, 0x3e, 0x4c, + 0x86, 0xf7, 0x29, 0xc3, 0x94, 0x57, 0x1b, 0xf1, 0xcc, 0xb8, 0x39, 0xb0, 0x1c, 0x43, 0xad, 0x51, + 0x59, 0xe3, 0x64, 0x26, 0x51, 0x9c, 0x6d, 0x05, 0xcd, 0x1b, 0xe6, 0xea, 0x89, 0xd4, 0x25, 0x3d, + 0x35, 0x57, 0xeb, 0xd6, 0x69, 0x16, 0xb9, 0xce, 0xdd, 0x50, 0x19, 0x47, 0x98, 0xcc, 0x44, 0xae, + 0xa7, 0x20, 0xac, 0xe3, 0xcd, 0x7e, 0x14, 0x46, 0xb5, 0x89, 0xef, 0xc7, 0xf7, 0x79, 0xf6, 0x55, + 0x98, 0xca, 0x4e, 0x68, 0x5f, 0xbe, 0xd3, 0xff, 0xab, 0x04, 0x93, 0x5d, 0xee, 0x8d, 0xee, 0x79, + 0xcc, 0x7f, 0xdf, 0x60, 0x7d, 0x57, 0xbd, 0xc0, 0xc5, 0x0c, 0x62, 0x32, 0xb0, 0x52, 0x01, 0x06, + 0x26, 0xb9, 0x69, 0xb9, 0x27, 0x37, 0x15, 0x4c, 0x6b, 0xe0, 0xbd, 0x30, 0x2d, 0xf3, 0x9c, 0x18, + 0x2c, 0x74, 0x4e, 0x3c, 0x04, 0x46, 0x67, 0x1c, 0x35, 0xc3, 0x05, 0x8e, 0x9a, 0x6f, 0x94, 0x60, + 0x2a, 0xf5, 0x13, 0x17, 0xe9, 0xb7, 0x8f, 0xfe, 0x1a, 0x62, 0xdd, 0xb8, 0x86, 0xc8, 0xcb, 0xae, + 0x9d, 0xe9, 0x5f, 0xcf, 0x2b, 0x89, 0x37, 0x33, 0x57, 0x12, 0x2f, 0xf6, 0x49, 0xf7, 0xe0, 0xeb, + 0x89, 0xef, 0x96, 0xe0, 0x54, 0xb6, 0xca, 0xb2, 0xef, 0x78, 0x5b, 0xc7, 0x30, 0x5f, 0x9f, 0x32, + 0xe6, 0xeb, 0xe5, 0xfe, 0xc6, 0xc5, 0x3a, 0xd9, 0x73, 0xd2, 0x9c, 0xcc, 0xa4, 0x7d, 0xf4, 0x30, + 0xc4, 0x0f, 0x9e, 0xb9, 0xdf, 0xb3, 0xe0, 0xd1, 0xae, 0xf5, 0x8e, 0xc1, 0xf0, 0xfa, 0xba, 0x69, + 0x78, 0x7d, 0xe1, 0x10, 0xa3, 0xeb, 0x61, 0x89, 0xfd, 0x95, 0x72, 0x8f, 0x51, 0x31, 0xd3, 0xd4, + 0x4d, 0x18, 0x75, 0x1a, 0x0d, 0x12, 0xc7, 0xd7, 0x43, 0x57, 0xe5, 0xc0, 0x7a, 0x9e, 0x9d, 0x2d, + 0x69, 0xf1, 0xfe, 0xee, 0xdc, 0x6c, 0x96, 0x44, 0x0a, 0xc6, 0x3a, 0x05, 0x33, 0x3b, 0x5f, 0xe9, + 0x88, 0xb2, 0xf3, 0x5d, 0x04, 0xd8, 0x56, 0x5a, 0x6c, 0xd6, 0xe2, 0xa5, 0xe9, 0xb7, 0x1a, 0x16, + 0xfa, 0x8b, 0x4c, 0x22, 0xe4, 0x4e, 0x1a, 0x03, 0x66, 0xc8, 0x69, 0xce, 0xf7, 0xd3, 0x1d, 0x3e, + 0x78, 0x64, 0xab, 0xb2, 0x0e, 0x2a, 0x92, 0xe8, 0x13, 0x30, 0x15, 0xf3, 0xfc, 0x09, 0xcb, 0xbe, + 0x13, 0xb3, 0x00, 0x09, 0xc1, 0x4f, 0x59, 0x90, 0x6a, 0x3d, 0x03, 0xc3, 0x1d, 0xd8, 0xf6, 0x77, + 0xca, 0xf0, 0xc1, 0x03, 0x96, 0x2d, 0x5a, 0x34, 0x6f, 0x6d, 0x9f, 0xcb, 0xda, 0x7f, 0x66, 0xbb, + 0x56, 0x36, 0x0c, 0x42, 0x99, 0xaf, 0x5d, 0x7a, 0xcf, 0x5f, 0xfb, 0x6b, 0xba, 0xb5, 0x8e, 0xfb, + 0x6d, 0x5e, 0x3e, 0xf4, 0xc6, 0xfc, 0x49, 0x35, 0xd6, 0x7f, 0xc1, 0x82, 0x27, 0xba, 0x0e, 0xcb, + 0xf0, 0x12, 0x59, 0x80, 0x4a, 0x83, 0x16, 0x6a, 0xe1, 0x4c, 0x69, 0x1c, 0xa1, 0x04, 0xe0, 0x14, + 0xc7, 0x70, 0x06, 0x29, 0xe5, 0x3a, 0x83, 0xfc, 0xb6, 0x05, 0xd3, 0xd9, 0x4e, 0x1c, 0x03, 0xdf, + 0xaa, 0x9b, 0x7c, 0x6b, 0xbe, 0xbf, 0x8f, 0xdf, 0x83, 0x65, 0xfd, 0xb7, 0x09, 0x38, 0xdd, 0x71, + 0xea, 0xf1, 0x59, 0xfc, 0x39, 0x0b, 0x4e, 0x34, 0x99, 0xf4, 0xae, 0xc5, 0x8c, 0x89, 0x71, 0xe5, + 0x04, 0xda, 0x1d, 0x18, 0x6a, 0xc6, 0x75, 0x91, 0x0e, 0x14, 0xdc, 0xd9, 0x18, 0xfa, 0x8a, 0x05, + 0xd3, 0xce, 0xfd, 0xb8, 0xe3, 0x71, 0x18, 0xb1, 0x90, 0x5e, 0xcd, 0x31, 0x96, 0xe5, 0x3c, 0x2b, + 0xb3, 0x34, 0xb3, 0xb7, 0x3b, 0x37, 0xdd, 0x0d, 0x0b, 0x77, 0x6d, 0x95, 0x7e, 0xdf, 0x4d, 0x11, + 0x3b, 0x52, 0x2c, 0xfa, 0xb1, 0x5b, 0xa4, 0x09, 0x67, 0x6b, 0x12, 0x82, 0x15, 0x45, 0xf4, 0x36, + 0x54, 0x9a, 0x32, 0x4c, 0x2c, 0xcb, 0x36, 0x7b, 0x4c, 0x73, 0xb7, 0xa8, 0x32, 0xee, 0xbb, 0xaf, + 0x40, 0x38, 0x25, 0x8a, 0xae, 0x40, 0x39, 0xd8, 0x88, 0x45, 0x40, 0x76, 0x9e, 0x0f, 0x90, 0xe9, + 0x79, 0xc5, 0x63, 0x58, 0x6f, 0xac, 0xd6, 0x31, 0x25, 0x41, 0x29, 0x45, 0x77, 0x5d, 0x61, 0x25, + 0xce, 0xa1, 0x84, 0x97, 0xaa, 0x9d, 0x94, 0xf0, 0x52, 0x15, 0x53, 0x12, 0xa8, 0x06, 0x83, 0x2c, + 0x32, 0x45, 0x98, 0x80, 0x73, 0xa2, 0xf6, 0x3b, 0xe2, 0x6f, 0x78, 0x12, 0x49, 0x56, 0x8c, 0x39, + 0x21, 0xb4, 0x0e, 0x43, 0x0d, 0xf6, 0x0e, 0x82, 0xd0, 0xcd, 0xf3, 0xf2, 0x59, 0x74, 0xbc, 0x99, + 0xc0, 0xef, 0xbd, 0x78, 0x39, 0x16, 0xb4, 0x18, 0x55, 0xd2, 0xda, 0xdc, 0x88, 0x85, 0xf2, 0x9d, + 0x47, 0xb5, 0xe3, 0x45, 0x0b, 0x41, 0x95, 0x95, 0x63, 0x41, 0x0b, 0x55, 0xa1, 0xb4, 0xd1, 0x10, + 0x81, 0x2b, 0x39, 0xa6, 0x5f, 0x33, 0x20, 0x79, 0x69, 0x68, 0x6f, 0x77, 0xae, 0xb4, 0xba, 0x8c, + 0x4b, 0x1b, 0x0d, 0xf4, 0x3a, 0x0c, 0x6f, 0xf0, 0x10, 0x53, 0x91, 0x77, 0xf6, 0x42, 0x5e, 0x1c, + 0x6c, 0x47, 0x3c, 0x2a, 0x8f, 0xcf, 0x10, 0x00, 0x2c, 0xc9, 0xb1, 0x94, 0x7c, 0x2a, 0x68, 0x56, + 0x24, 0x9e, 0x9d, 0xef, 0x2f, 0xc8, 0x56, 0xe8, 0xa4, 0xaa, 0x14, 0x6b, 0x14, 0xe9, 0x9a, 0x77, + 0xe4, 0x93, 0x2e, 0x2c, 0xe9, 0x6c, 0xee, 0x9a, 0xef, 0xfa, 0x02, 0x0c, 0x5f, 0xf3, 0x0a, 0x84, + 0x53, 0xa2, 0xa8, 0x0d, 0xe3, 0xdb, 0x71, 0x6b, 0x93, 0xc8, 0xad, 0xcf, 0x32, 0xd1, 0x8e, 0x5e, + 0xfc, 0x78, 0x4e, 0x7a, 0x61, 0x51, 0xc5, 0x8b, 0x92, 0xb6, 0xe3, 0x77, 0x70, 0x30, 0x96, 0x03, + 0xed, 0xb6, 0x4e, 0x16, 0x9b, 0xad, 0xd0, 0x4f, 0xf2, 0x6e, 0x3b, 0xbc, 0xbb, 0x93, 0x10, 0x91, + 0xa9, 0x36, 0xe7, 0x93, 0xbc, 0xc6, 0x91, 0x3b, 0x3f, 0x89, 0x00, 0x60, 0x49, 0x4e, 0x4d, 0x19, + 0xe3, 0xc6, 0x53, 0x85, 0xa7, 0xac, 0x63, 0x0c, 0xe9, 0x94, 0x31, 0xee, 0x9b, 0x12, 0x65, 0x5c, + 0xb7, 0xb5, 0x19, 0x26, 0x61, 0x90, 0xe1, 0xfd, 0x27, 0x8a, 0x70, 0xdd, 0x5a, 0x97, 0x9a, 0x9d, + 0x5c, 0xb7, 0x1b, 0x16, 0xee, 0xda, 0x2a, 0x0a, 0x60, 0xa2, 0x15, 0x46, 0xc9, 0xfd, 0x30, 0x92, + 0xeb, 0x10, 0x15, 0xd2, 0x11, 0x8d, 0x3a, 0xa2, 0x6d, 0xe6, 0x86, 0x6b, 0x42, 0x70, 0x86, 0x3a, + 0xfd, 0x74, 0x71, 0xc3, 0xf1, 0xc9, 0xda, 0xcd, 0x99, 0x93, 0x45, 0x3e, 0x5d, 0x9d, 0x23, 0x77, + 0x7e, 0x3a, 0x01, 0xc0, 0x92, 0x9c, 0xfd, 0xcb, 0x43, 0x9d, 0x82, 0x03, 0x53, 0x0d, 0xfe, 0x7a, + 0xe7, 0x4d, 0xec, 0x27, 0xfa, 0xd7, 0x80, 0x1f, 0xe2, 0x9d, 0xec, 0x57, 0x2c, 0x38, 0xdd, 0xea, + 0x2a, 0x16, 0x88, 0xa3, 0xb7, 0x5f, 0x45, 0x9a, 0x4f, 0x8b, 0x4a, 0x28, 0xdd, 0x1d, 0x8e, 0x7b, + 0xb4, 0x99, 0x15, 0xa6, 0xcb, 0xef, 0x59, 0x98, 0xbe, 0x03, 0x23, 0x4c, 0xfa, 0x4b, 0xd3, 0xc5, + 0xf4, 0x99, 0x59, 0x85, 0x1d, 0xe2, 0xcb, 0x82, 0x04, 0x56, 0xc4, 0xe8, 0xc4, 0x3d, 0x9e, 0x1d, + 0x04, 0x26, 0x0c, 0x2c, 0xd2, 0x18, 0x72, 0x4d, 0x65, 0x55, 0xcc, 0xc4, 0xe3, 0xb5, 0x83, 0x90, + 0xf7, 0xf3, 0x10, 0xf0, 0xc1, 0x8d, 0xa1, 0x6a, 0x17, 0x55, 0x69, 0xc8, 0xbc, 0x76, 0xc9, 0x57, + 0x97, 0x8e, 0x57, 0xc4, 0xff, 0x07, 0x56, 0x17, 0x89, 0x94, 0xab, 0x65, 0x1f, 0x37, 0xd5, 0xb2, + 0xa7, 0xb3, 0x6a, 0x59, 0x87, 0x31, 0xc6, 0xd0, 0xc8, 0x8a, 0xa7, 0x61, 0x2d, 0x9a, 0x0f, 0xc7, + 0xf6, 0xe1, 0x6c, 0x1e, 0xbb, 0x63, 0xae, 0x58, 0xae, 0xba, 0x84, 0x4c, 0x5d, 0xb1, 0xdc, 0xb5, + 0x2a, 0x66, 0x90, 0xa2, 0x29, 0x15, 0xec, 0x9f, 0x2f, 0x41, 0xb9, 0x16, 0xba, 0xc7, 0x60, 0x5c, + 0xba, 0x6c, 0x18, 0x97, 0x9e, 0xca, 0x7d, 0xe2, 0xaf, 0xa7, 0x29, 0xe9, 0x66, 0xc6, 0x94, 0xf4, + 0x33, 0xf9, 0xa4, 0x0e, 0x36, 0x1c, 0x7d, 0xaf, 0x0c, 0xfa, 0x23, 0x85, 0xe8, 0x3f, 0x1c, 0xc6, + 0x43, 0xb7, 0x5c, 0xec, 0xdd, 0x42, 0xd1, 0x06, 0xf3, 0xe4, 0x92, 0x71, 0x7d, 0x3f, 0xb1, 0x8e, + 0xba, 0x77, 0x88, 0xd7, 0xdc, 0x4c, 0x88, 0x9b, 0x1d, 0xd8, 0xf1, 0x39, 0xea, 0xfe, 0xa9, 0x05, + 0x93, 0x99, 0xd6, 0x91, 0xdf, 0x2d, 0x20, 0xe8, 0x90, 0xe6, 0xa2, 0x13, 0xb9, 0x11, 0x44, 0xf3, + 0x00, 0xca, 0xea, 0x2f, 0x4d, 0x32, 0x4c, 0x3a, 0x55, 0xd7, 0x02, 0x31, 0xd6, 0x30, 0xd0, 0x4b, + 0x30, 0x9a, 0x84, 0xad, 0xd0, 0x0f, 0x9b, 0x3b, 0x57, 0x89, 0x4c, 0xf6, 0xa1, 0x6e, 0x4c, 0xd6, + 0x53, 0x10, 0xd6, 0xf1, 0xec, 0xef, 0x97, 0x21, 0xfb, 0xc4, 0xe5, 0xff, 0x5f, 0xa7, 0x3f, 0x39, + 0xeb, 0xf4, 0x0f, 0x2c, 0x98, 0xa2, 0xad, 0x33, 0xd7, 0x19, 0xe9, 0x50, 0xab, 0xde, 0x84, 0xb0, + 0x0e, 0x78, 0x13, 0xe2, 0x69, 0xca, 0xed, 0xdc, 0xb0, 0x9d, 0x08, 0x23, 0x92, 0xc6, 0xc4, 0x68, + 0x29, 0x16, 0x50, 0x81, 0x47, 0xa2, 0x48, 0x44, 0x1e, 0xe9, 0x78, 0x24, 0x8a, 0xb0, 0x80, 0xca, + 0x27, 0x23, 0x06, 0x7a, 0x3c, 0x19, 0xc1, 0xd2, 0x65, 0x09, 0x77, 0x0d, 0x21, 0x56, 0x68, 0xe9, + 0xb2, 0xa4, 0x1f, 0x47, 0x8a, 0x63, 0x7f, 0xab, 0x0c, 0x63, 0xb5, 0xd0, 0x4d, 0x3d, 0xe5, 0x5f, + 0x34, 0x3c, 0xe5, 0xcf, 0x66, 0x3c, 0xe5, 0xa7, 0x74, 0xdc, 0x87, 0xe3, 0x28, 0x2f, 0xd2, 0xaa, + 0xb1, 0x47, 0x4d, 0x0e, 0xe9, 0x24, 0x6f, 0xa4, 0x55, 0x53, 0x84, 0xb0, 0x49, 0xf7, 0xa7, 0xc9, + 0x39, 0xfe, 0xff, 0x58, 0x30, 0x51, 0x0b, 0x5d, 0xba, 0x40, 0x7f, 0x9a, 0x56, 0xa3, 0x9e, 0x8c, + 0x6d, 0xe8, 0x80, 0x64, 0x6c, 0xbf, 0x6a, 0xc1, 0x70, 0x2d, 0x74, 0x8f, 0xc1, 0xc0, 0xba, 0x6a, + 0x1a, 0x58, 0x9f, 0xc8, 0xe5, 0xbc, 0x3d, 0x6c, 0xaa, 0xdf, 0x29, 0xc3, 0x38, 0xed, 0x71, 0xd8, + 0x94, 0xdf, 0xcb, 0x98, 0x1b, 0xab, 0xc0, 0xdc, 0x50, 0x91, 0x30, 0xf4, 0xfd, 0xf0, 0x7e, 0xf6, + 0xdb, 0xad, 0xb2, 0x52, 0x2c, 0xa0, 0xe8, 0x3c, 0x8c, 0xb4, 0x22, 0xb2, 0xed, 0x85, 0xed, 0x38, + 0x1b, 0xc5, 0x58, 0x13, 0xe5, 0x58, 0x61, 0xa0, 0x17, 0x61, 0x2c, 0xf6, 0x82, 0x06, 0x91, 0xce, + 0x1c, 0x03, 0xcc, 0x99, 0x83, 0xe7, 0xbd, 0xd4, 0xca, 0xb1, 0x81, 0x85, 0xee, 0x40, 0x85, 0xfd, + 0x67, 0x3b, 0xa8, 0xff, 0x37, 0x1f, 0x78, 0x6e, 0x15, 0x49, 0x00, 0xa7, 0xb4, 0xd0, 0x45, 0x80, + 0x44, 0xba, 0x9d, 0xc4, 0x22, 0xb9, 0x8c, 0x92, 0x4b, 0x95, 0x43, 0x4a, 0x8c, 0x35, 0x2c, 0xf4, + 0x1c, 0x54, 0x12, 0xc7, 0xf3, 0xaf, 0x79, 0x01, 0x89, 0x85, 0xdb, 0x8e, 0xc8, 0x61, 0x2d, 0x0a, + 0x71, 0x0a, 0xa7, 0xe7, 0x3d, 0x8b, 0xa1, 0xe6, 0xef, 0xc9, 0x8c, 0x30, 0x6c, 0x76, 0xde, 0x5f, + 0x53, 0xa5, 0x58, 0xc3, 0xb0, 0x2f, 0xc1, 0xa9, 0x5a, 0xe8, 0xd6, 0xc2, 0x28, 0x59, 0x0d, 0xa3, + 0xfb, 0x4e, 0xe4, 0xca, 0xef, 0x37, 0x27, 0x53, 0x27, 0xd3, 0x33, 0x79, 0x90, 0xdb, 0x1c, 0x8d, + 0x54, 0xc8, 0x2f, 0xb0, 0x13, 0xbf, 0xcf, 0x10, 0x8c, 0xdf, 0x2f, 0x03, 0xaa, 0x31, 0xc7, 0x18, + 0xe3, 0xf9, 0xa1, 0x4d, 0x98, 0x88, 0xc9, 0x35, 0x2f, 0x68, 0x3f, 0x10, 0xa4, 0x8a, 0xc5, 0xbc, + 0xd4, 0x57, 0xf4, 0x3a, 0xdc, 0xd2, 0x61, 0x96, 0xe1, 0x0c, 0x5d, 0xfa, 0x65, 0xa3, 0x76, 0xb0, + 0x18, 0xdf, 0x8a, 0x49, 0x24, 0x9e, 0xdb, 0xf9, 0x28, 0xbb, 0x08, 0x94, 0x85, 0xfb, 0xbb, 0x73, + 0xe7, 0x72, 0xdc, 0x1b, 0x02, 0xef, 0x01, 0xc5, 0x5c, 0xab, 0xe2, 0x94, 0x16, 0x5d, 0x68, 0xec, + 0xcf, 0x8d, 0x30, 0xc0, 0x61, 0x98, 0xc8, 0xa5, 0xc9, 0x9e, 0x6a, 0xd0, 0xca, 0xb1, 0x81, 0x85, + 0x62, 0x40, 0x71, 0xbb, 0xd5, 0xf2, 0xd9, 0xbd, 0xa4, 0xe3, 0x5f, 0x8e, 0xc2, 0x76, 0x8b, 0xfb, + 0x52, 0x97, 0x97, 0x96, 0x29, 0x0f, 0xae, 0x77, 0x40, 0xf7, 0x77, 0xe7, 0x9e, 0xc9, 0xef, 0x20, + 0xc3, 0x5d, 0xab, 0xe2, 0x2e, 0xe4, 0x11, 0x86, 0xe1, 0x8d, 0x98, 0xfd, 0x16, 0x91, 0xda, 0x97, + 0x98, 0x21, 0xb4, 0xce, 0x8a, 0xfa, 0x23, 0x2f, 0x09, 0xd9, 0x9f, 0x67, 0xc7, 0x2c, 0x7b, 0x8d, + 0x25, 0x69, 0x47, 0x04, 0x6d, 0xc1, 0x78, 0x8b, 0x1d, 0xa5, 0x49, 0x14, 0xfa, 0x3e, 0x91, 0x52, + 0xee, 0xe1, 0x1c, 0x84, 0xf8, 0xfb, 0x0b, 0x3a, 0x39, 0x6c, 0x52, 0xb7, 0xff, 0xfb, 0x04, 0xe3, + 0x98, 0xe2, 0xd2, 0x79, 0x58, 0xb8, 0x02, 0x0b, 0x79, 0xf2, 0x43, 0x45, 0xde, 0x55, 0x4b, 0x4f, + 0x23, 0xe1, 0x58, 0x8c, 0x25, 0x15, 0xf4, 0x69, 0xe6, 0xe8, 0xce, 0xd9, 0x54, 0xf1, 0xd7, 0x22, + 0x39, 0xbe, 0xe1, 0xe4, 0x2e, 0x48, 0x60, 0x8d, 0x1c, 0xba, 0x06, 0xe3, 0xe2, 0xf1, 0x0e, 0x61, + 0x2c, 0x29, 0x1b, 0x8a, 0xfe, 0x38, 0xd6, 0x81, 0xfb, 0xd9, 0x02, 0x6c, 0x56, 0x46, 0x4d, 0x78, + 0x5c, 0x7b, 0x9c, 0xaa, 0x8b, 0x33, 0x1b, 0xe7, 0x7f, 0x4f, 0xec, 0xed, 0xce, 0x3d, 0xbe, 0x7e, + 0x10, 0x22, 0x3e, 0x98, 0x0e, 0xba, 0x09, 0xa7, 0x9c, 0x46, 0xe2, 0x6d, 0x93, 0x2a, 0x71, 0x5c, + 0xdf, 0x0b, 0x88, 0x19, 0xfb, 0xff, 0xe8, 0xde, 0xee, 0xdc, 0xa9, 0xc5, 0x6e, 0x08, 0xb8, 0x7b, + 0x3d, 0xf4, 0x71, 0xa8, 0xb8, 0x41, 0x2c, 0xe6, 0x60, 0xc8, 0x78, 0x8b, 0xad, 0x52, 0xbd, 0x51, + 0x57, 0xe3, 0x4f, 0xff, 0xe0, 0xb4, 0x02, 0x7a, 0x17, 0xc6, 0xf4, 0xe0, 0x22, 0xf1, 0x06, 0xe0, + 0xcb, 0x85, 0xb4, 0x78, 0x23, 0x22, 0x87, 0xdb, 0x11, 0x95, 0xd3, 0xa8, 0x11, 0xac, 0x63, 0x34, + 0x81, 0x3e, 0x09, 0x28, 0x26, 0xd1, 0xb6, 0xd7, 0x20, 0x8b, 0x0d, 0x96, 0xb2, 0x96, 0x59, 0x9a, + 0x46, 0x8c, 0xe8, 0x09, 0x54, 0xef, 0xc0, 0xc0, 0x5d, 0x6a, 0xa1, 0x2b, 0x94, 0xff, 0xe9, 0xa5, + 0xc2, 0xc7, 0x57, 0x8a, 0xa7, 0x33, 0x55, 0xd2, 0x8a, 0x48, 0xc3, 0x49, 0x88, 0x6b, 0x52, 0xc4, + 0x99, 0x7a, 0xf4, 0x74, 0x54, 0xaf, 0x12, 0x80, 0xe9, 0x99, 0xda, 0xf9, 0x32, 0x01, 0xd5, 0xf6, + 0x36, 0xc3, 0x38, 0xb9, 0x41, 0x92, 0xfb, 0x61, 0x74, 0x4f, 0xa4, 0xf9, 0x4a, 0xf3, 0xff, 0xa5, + 0x20, 0xac, 0xe3, 0x51, 0x49, 0x8e, 0x5d, 0xe1, 0xad, 0x55, 0xd9, 0xfd, 0xc8, 0x48, 0xba, 0x77, + 0xae, 0xf0, 0x62, 0x2c, 0xe1, 0x12, 0x75, 0xad, 0xb6, 0xcc, 0xee, 0x3a, 0x32, 0xa8, 0x6b, 0xb5, + 0x65, 0x2c, 0xe1, 0x28, 0xec, 0x7c, 0xf1, 0x6e, 0xa2, 0xc8, 0xbd, 0x53, 0xe7, 0x79, 0x52, 0xf0, + 0xd1, 0xbb, 0x07, 0x30, 0xa5, 0x5e, 0xdd, 0xe3, 0x99, 0xd0, 0xe2, 0x99, 0x49, 0xb6, 0x70, 0x0e, + 0x93, 0x50, 0x4d, 0x59, 0x17, 0xd7, 0x32, 0x34, 0x71, 0x47, 0x2b, 0x46, 0x0e, 0x8b, 0xa9, 0xdc, + 0x97, 0x26, 0x16, 0xa0, 0x12, 0xb7, 0xef, 0xba, 0xe1, 0x96, 0xe3, 0x05, 0xec, 0x42, 0x42, 0x7f, + 0xb7, 0x5f, 0x02, 0x70, 0x8a, 0x83, 0x6a, 0x30, 0xe2, 0x08, 0x45, 0x52, 0x5c, 0x1c, 0xe4, 0xc4, + 0xb8, 0x4b, 0xb5, 0x93, 0xdb, 0x78, 0xe5, 0x3f, 0xac, 0xa8, 0xa0, 0x57, 0x60, 0x5c, 0x84, 0x68, + 0x09, 0x57, 0xca, 0x93, 0xa6, 0x3b, 0x7f, 0x5d, 0x07, 0x62, 0x13, 0x17, 0x35, 0x61, 0x82, 0x52, + 0x49, 0x19, 0xe0, 0xcc, 0x74, 0x7f, 0x3c, 0x54, 0xcb, 0xe9, 0xad, 0x93, 0xc1, 0x19, 0xb2, 0xc8, + 0x85, 0xc7, 0x9c, 0x76, 0x12, 0x6e, 0xd1, 0x9d, 0x60, 0xee, 0x93, 0xf5, 0xf0, 0x1e, 0x09, 0x66, + 0x4e, 0xb1, 0x15, 0x78, 0x76, 0x6f, 0x77, 0xee, 0xb1, 0xc5, 0x03, 0xf0, 0xf0, 0x81, 0x54, 0xd0, + 0x5b, 0x30, 0x9a, 0x84, 0xbe, 0xf0, 0x90, 0x8e, 0x67, 0x4e, 0x17, 0xc9, 0xac, 0xb3, 0xae, 0x2a, + 0xe8, 0xc6, 0x14, 0x45, 0x04, 0xeb, 0x14, 0xd1, 0xdb, 0x30, 0x46, 0xbf, 0xfd, 0x75, 0xa7, 0xd5, + 0xf2, 0x82, 0x66, 0x3c, 0xf3, 0x48, 0x91, 0xd9, 0x52, 0x79, 0x23, 0xcd, 0xfd, 0xcb, 0x8a, 0x48, + 0x8c, 0x0d, 0x8a, 0xb3, 0x3f, 0x0b, 0x27, 0x3a, 0x98, 0x5e, 0x5f, 0x6e, 0xaa, 0xff, 0x71, 0x10, + 0x2a, 0xca, 0x72, 0x89, 0x16, 0x4c, 0x23, 0xf5, 0xa3, 0x59, 0x23, 0xf5, 0x08, 0x15, 0x14, 0x75, + 0xbb, 0xf4, 0x67, 0xba, 0xbc, 0xe4, 0xfe, 0x6c, 0xee, 0x2e, 0x2f, 0x1e, 0x39, 0xd6, 0xc7, 0x7b, + 0xf7, 0xa9, 0xf6, 0x3a, 0x70, 0xa0, 0xf6, 0x5a, 0xf0, 0x75, 0x42, 0xaa, 0xa7, 0xb6, 0x42, 0x77, + 0xad, 0x96, 0x7d, 0x7c, 0xab, 0x46, 0x0b, 0x31, 0x87, 0x31, 0xfd, 0x82, 0x9e, 0xda, 0x4c, 0xbf, + 0x18, 0x3e, 0xa4, 0x7e, 0x21, 0x09, 0xe0, 0x94, 0x16, 0xda, 0x86, 0x13, 0x0d, 0xf3, 0x2d, 0x35, + 0x15, 0x0f, 0xf6, 0x7c, 0x1f, 0x6f, 0x99, 0xb5, 0xb5, 0x87, 0x56, 0x96, 0xb3, 0xf4, 0x70, 0x67, + 0x13, 0xe8, 0x15, 0x18, 0x79, 0x37, 0x8c, 0xd9, 0xf5, 0x89, 0x38, 0xba, 0x64, 0xdc, 0xcd, 0xc8, + 0x6b, 0x37, 0xeb, 0xac, 0x7c, 0x7f, 0x77, 0x6e, 0xb4, 0x16, 0xba, 0xf2, 0x2f, 0x56, 0x15, 0xd0, + 0x17, 0x2c, 0x38, 0x65, 0xec, 0x64, 0xd5, 0x73, 0x38, 0x4c, 0xcf, 0x1f, 0x17, 0x2d, 0x9f, 0x5a, + 0xeb, 0x46, 0x13, 0x77, 0x6f, 0xca, 0xfe, 0xb7, 0xdc, 0x54, 0x2b, 0x8c, 0x37, 0x24, 0x6e, 0xfb, + 0xc7, 0xf1, 0xe8, 0xc1, 0x4d, 0xc3, 0xae, 0xf4, 0x10, 0x2e, 0x0b, 0xfe, 0xbd, 0xc5, 0x2e, 0x0b, + 0xd6, 0xc9, 0x56, 0xcb, 0x77, 0x92, 0xe3, 0xf0, 0x62, 0xfe, 0x34, 0x8c, 0x24, 0xa2, 0xb5, 0x62, + 0x2f, 0x36, 0x68, 0xdd, 0x63, 0x97, 0x28, 0xea, 0xe8, 0x93, 0xa5, 0x58, 0x11, 0xb4, 0xff, 0x25, + 0xff, 0x2a, 0x12, 0x72, 0x0c, 0x16, 0x91, 0x1b, 0xa6, 0x45, 0xe4, 0x99, 0xc2, 0x63, 0xe9, 0x61, + 0x19, 0xf9, 0xbe, 0x39, 0x02, 0xa6, 0xa1, 0xfc, 0xe4, 0xdc, 0x66, 0xd9, 0xbf, 0x64, 0xc1, 0x74, + 0x37, 0xb7, 0x02, 0x2a, 0xc2, 0x70, 0xfd, 0x48, 0xdd, 0xf3, 0xa9, 0x59, 0xbd, 0x2d, 0xca, 0xb1, + 0xc2, 0x28, 0x9c, 0x42, 0xbd, 0xbf, 0x14, 0x55, 0x37, 0xc1, 0x7c, 0x95, 0x0f, 0xbd, 0xca, 0x83, + 0x16, 0x2c, 0xf5, 0x6c, 0x5e, 0x7f, 0x01, 0x0b, 0xf6, 0xb7, 0x4b, 0x30, 0xcd, 0x8d, 0xed, 0x8b, + 0xdb, 0xa1, 0xe7, 0xd6, 0x42, 0x57, 0x84, 0x70, 0xb8, 0x30, 0xd6, 0xd2, 0xd4, 0xdb, 0x62, 0x29, + 0x6f, 0x74, 0x85, 0x38, 0x55, 0x29, 0xf4, 0x52, 0x6c, 0x50, 0xa5, 0xad, 0x90, 0x6d, 0xaf, 0xa1, + 0x6c, 0xb7, 0xa5, 0xbe, 0x4f, 0x06, 0xd5, 0xca, 0x8a, 0x46, 0x07, 0x1b, 0x54, 0x8f, 0xe0, 0xe5, + 0x13, 0xfb, 0xef, 0x59, 0xf0, 0x48, 0x8f, 0xb4, 0x38, 0xb4, 0xb9, 0xfb, 0xec, 0x82, 0x43, 0x3c, + 0xfb, 0xa8, 0x9a, 0xe3, 0xd7, 0x1e, 0x58, 0x40, 0xd1, 0x5d, 0x00, 0x7e, 0x6d, 0x41, 0xa5, 0xe9, + 0xec, 0x9d, 0x7a, 0xc1, 0xe4, 0x13, 0x5a, 0x5e, 0x02, 0xf5, 0xec, 0xbf, 0x46, 0xd5, 0xfe, 0x66, + 0x19, 0x06, 0xf9, 0xeb, 0xe2, 0x35, 0x18, 0xde, 0xe4, 0x69, 0x7a, 0xfb, 0xcb, 0x12, 0x9c, 0xaa, + 0x2f, 0xbc, 0x00, 0x4b, 0x32, 0xe8, 0x3a, 0x9c, 0xa4, 0x27, 0x8b, 0xe7, 0xf8, 0x55, 0xe2, 0x3b, + 0x3b, 0x52, 0x1f, 0xe6, 0xcf, 0x61, 0xc8, 0xbc, 0xed, 0x27, 0xd7, 0x3a, 0x51, 0x70, 0xb7, 0x7a, + 0xe8, 0xd5, 0x8e, 0xac, 0x7a, 0x3c, 0xfd, 0xb1, 0x92, 0x85, 0x0f, 0xce, 0xac, 0x47, 0x25, 0xf6, + 0x56, 0x87, 0xe6, 0xaf, 0x3d, 0xe2, 0x6c, 0x6a, 0xfb, 0x26, 0x2e, 0xf3, 0xa1, 0x68, 0x33, 0xdf, + 0x91, 0xf5, 0xcd, 0x88, 0xc4, 0x9b, 0xa1, 0xef, 0x8a, 0xf7, 0x47, 0x53, 0x1f, 0x8a, 0x0c, 0x1c, + 0x77, 0xd4, 0xa0, 0x54, 0x36, 0x1c, 0xcf, 0x6f, 0x47, 0x24, 0xa5, 0x32, 0x64, 0x52, 0x59, 0xcd, + 0xc0, 0x71, 0x47, 0x0d, 0xba, 0xb6, 0x4e, 0x89, 0x27, 0x2b, 0x65, 0x10, 0xb8, 0x60, 0x41, 0x9f, + 0x82, 0x61, 0x19, 0x0a, 0x50, 0x28, 0x57, 0x89, 0x70, 0x90, 0x50, 0xcf, 0x5f, 0x6a, 0xcf, 0xa3, + 0x89, 0x20, 0x00, 0x49, 0xef, 0x30, 0x4f, 0x23, 0xfe, 0x89, 0x05, 0x27, 0xbb, 0xb8, 0xb4, 0x71, + 0x96, 0xd6, 0xf4, 0xe2, 0x44, 0x3d, 0xce, 0xa0, 0xb1, 0x34, 0x5e, 0x8e, 0x15, 0x06, 0xdd, 0x2d, + 0x9c, 0x69, 0x66, 0x19, 0xa5, 0x70, 0x75, 0x11, 0xd0, 0xfe, 0x18, 0x25, 0x3a, 0x0b, 0x03, 0xed, + 0x98, 0x44, 0xf2, 0x9d, 0x42, 0xc9, 0xe7, 0x6f, 0xc5, 0x24, 0xc2, 0x0c, 0x42, 0xc5, 0xd6, 0xa6, + 0xb2, 0x08, 0x6a, 0x62, 0x2b, 0xb3, 0xee, 0x61, 0x0e, 0xb3, 0xbf, 0x56, 0x86, 0xc9, 0x8c, 0x6b, + 0x2b, 0xed, 0xc8, 0x56, 0x18, 0x78, 0x49, 0xa8, 0xf2, 0xc7, 0xf1, 0xa7, 0xd1, 0x48, 0x6b, 0xf3, + 0xba, 0x28, 0xc7, 0x0a, 0x03, 0x3d, 0x2d, 0x9f, 0xa6, 0xcd, 0x3e, 0x3a, 0xb1, 0x54, 0x35, 0x5e, + 0xa7, 0x2d, 0xfa, 0x60, 0xcc, 0x93, 0x30, 0xd0, 0x0a, 0xd5, 0x4b, 0xe3, 0xea, 0x7b, 0xe2, 0xa5, + 0x6a, 0x2d, 0x0c, 0x7d, 0xcc, 0x80, 0xe8, 0x29, 0x31, 0xfa, 0xcc, 0x0d, 0x0d, 0x76, 0xdc, 0x30, + 0xd6, 0xa6, 0xe0, 0x19, 0x18, 0xbe, 0x47, 0x76, 0x22, 0x2f, 0x68, 0x66, 0xef, 0xa7, 0xae, 0xf2, + 0x62, 0x2c, 0xe1, 0x66, 0x0e, 0xf6, 0xe1, 0x23, 0x7e, 0x14, 0x66, 0x24, 0xf7, 0x1c, 0xfc, 0x8e, + 0x05, 0x93, 0x2c, 0xa9, 0xaa, 0x48, 0x41, 0xe0, 0x85, 0xc1, 0x31, 0xc8, 0x18, 0x4f, 0xc2, 0x60, + 0x44, 0x1b, 0xcd, 0xbe, 0xea, 0xc0, 0x7a, 0x82, 0x39, 0x0c, 0x3d, 0x06, 0x03, 0xac, 0x0b, 0xf4, + 0x33, 0x8e, 0xf1, 0xdc, 0xed, 0x55, 0x27, 0x71, 0x30, 0x2b, 0x65, 0xd1, 0x64, 0x98, 0xb4, 0x7c, + 0x8f, 0x77, 0x3a, 0x35, 0xe8, 0xbe, 0xdf, 0xa2, 0xc9, 0xba, 0x76, 0xf2, 0x61, 0x45, 0x93, 0x75, + 0x27, 0x7e, 0xb0, 0x9c, 0xff, 0x3f, 0x4a, 0x70, 0xa6, 0x6b, 0xbd, 0xf4, 0xa6, 0x7b, 0xd5, 0xb8, + 0xe9, 0xbe, 0x98, 0xb9, 0xe9, 0xb6, 0x0f, 0xae, 0xfd, 0x70, 0xee, 0xbe, 0xbb, 0x5f, 0x49, 0x97, + 0x8f, 0xf1, 0x4a, 0x7a, 0xa0, 0xa8, 0x88, 0x33, 0x98, 0x23, 0xe2, 0xfc, 0x9e, 0x05, 0x8f, 0x76, + 0x9d, 0xb2, 0xf7, 0x5d, 0xf8, 0x5e, 0xd7, 0x5e, 0xf6, 0xd0, 0x4e, 0x7e, 0xb1, 0xdc, 0x63, 0x54, + 0x4c, 0x4f, 0x39, 0x47, 0xb9, 0x10, 0x03, 0xc6, 0x42, 0x78, 0x1b, 0xe3, 0x1c, 0x88, 0x97, 0x61, + 0x05, 0x45, 0xb1, 0x16, 0xfe, 0xc6, 0x3b, 0xb9, 0x72, 0xc8, 0x0d, 0x35, 0x6f, 0x5a, 0xe2, 0xf5, + 0xbc, 0x0a, 0xd9, 0xa0, 0xb8, 0x3b, 0x9a, 0xe6, 0x59, 0x3e, 0x8c, 0xe6, 0x39, 0xd6, 0x5d, 0xeb, + 0x44, 0x8b, 0x30, 0xb9, 0xe5, 0x05, 0xec, 0x2d, 0x59, 0x53, 0x7a, 0x52, 0x31, 0xc8, 0xd7, 0x4d, + 0x30, 0xce, 0xe2, 0xcf, 0xbe, 0x02, 0xe3, 0x87, 0xb7, 0xae, 0xfd, 0xa8, 0x0c, 0x1f, 0x3c, 0x80, + 0x29, 0xf0, 0xd3, 0xc1, 0xf8, 0x2e, 0xda, 0xe9, 0xd0, 0xf1, 0x6d, 0x6a, 0x30, 0xbd, 0xd1, 0xf6, + 0xfd, 0x1d, 0xe6, 0x27, 0x46, 0x5c, 0x89, 0x21, 0x84, 0x1a, 0xf5, 0x68, 0xfd, 0x6a, 0x17, 0x1c, + 0xdc, 0xb5, 0x26, 0xfa, 0x24, 0xa0, 0xf0, 0x2e, 0x4b, 0x3b, 0xec, 0xa6, 0x79, 0x23, 0xd8, 0x27, + 0x28, 0xa7, 0x5b, 0xf5, 0x66, 0x07, 0x06, 0xee, 0x52, 0x8b, 0xca, 0xa9, 0xec, 0xbd, 0x7b, 0xd5, + 0xad, 0x8c, 0x9c, 0x8a, 0x75, 0x20, 0x36, 0x71, 0xd1, 0x65, 0x38, 0xe1, 0x6c, 0x3b, 0x1e, 0x4f, + 0x23, 0x26, 0x09, 0x70, 0x41, 0x55, 0xd9, 0xaf, 0x16, 0xb3, 0x08, 0xb8, 0xb3, 0x0e, 0x6a, 0x19, + 0x06, 0x49, 0xfe, 0xe0, 0xc0, 0xc7, 0x0f, 0xb1, 0x82, 0x0b, 0x9b, 0x28, 0xed, 0xff, 0x62, 0xd1, + 0xa3, 0xaf, 0xcb, 0xb3, 0xa3, 0x74, 0x46, 0x94, 0x81, 0x4d, 0x0b, 0xe7, 0x53, 0x33, 0xb2, 0xac, + 0x03, 0xb1, 0x89, 0xcb, 0x97, 0x46, 0x9c, 0xba, 0xad, 0x1b, 0xd2, 0xa6, 0x88, 0x84, 0x55, 0x18, + 0x54, 0x82, 0x76, 0xbd, 0x6d, 0x2f, 0x0e, 0x23, 0xb1, 0x81, 0xfa, 0x74, 0x62, 0x4e, 0xf9, 0x65, + 0x95, 0x93, 0xc1, 0x92, 0x9e, 0xfd, 0xf5, 0x12, 0x8c, 0xcb, 0x16, 0x5f, 0x6b, 0x87, 0x89, 0x73, + 0x0c, 0x47, 0xfa, 0x6b, 0xc6, 0x91, 0xbe, 0x50, 0x2c, 0x30, 0x98, 0x75, 0xae, 0xe7, 0x51, 0xfe, + 0xa9, 0xcc, 0x51, 0x7e, 0xa1, 0x1f, 0xa2, 0x07, 0x1f, 0xe1, 0xff, 0xc6, 0x82, 0x13, 0x06, 0xfe, + 0x31, 0x9c, 0x24, 0x35, 0xf3, 0x24, 0x79, 0xae, 0x8f, 0xd1, 0xf4, 0x38, 0x41, 0xbe, 0x55, 0xca, + 0x8c, 0x82, 0x9d, 0x1c, 0x9f, 0x83, 0x81, 0x4d, 0x27, 0x72, 0x8b, 0xe5, 0xd4, 0xec, 0xa8, 0x3e, + 0x7f, 0xc5, 0x89, 0x5c, 0xce, 0xff, 0xcf, 0xab, 0x47, 0xd1, 0x9c, 0xc8, 0xcd, 0x8d, 0xe6, 0x60, + 0x8d, 0xa2, 0x4b, 0x30, 0x14, 0x37, 0xc2, 0x96, 0xf2, 0x77, 0x3d, 0xcb, 0x1f, 0x4c, 0xa3, 0x25, + 0xfb, 0xbb, 0x73, 0xc8, 0x6c, 0x8e, 0x16, 0x63, 0x81, 0x3f, 0xdb, 0x84, 0x8a, 0x6a, 0xfa, 0x48, + 0x3d, 0xfe, 0xff, 0x6b, 0x19, 0x4e, 0x76, 0x59, 0x2b, 0xe8, 0xf3, 0xc6, 0xbc, 0xbd, 0xd2, 0xf7, + 0x62, 0x7b, 0x8f, 0x33, 0xf7, 0x79, 0xa6, 0x29, 0xb9, 0x62, 0x75, 0x1c, 0xa2, 0xf9, 0x5b, 0x31, + 0xc9, 0x36, 0x4f, 0x8b, 0xf2, 0x9b, 0xa7, 0xcd, 0x1e, 0xdb, 0xf4, 0xd3, 0x86, 0x54, 0x4f, 0x8f, + 0xf4, 0x3b, 0xff, 0x95, 0x01, 0x98, 0xee, 0x96, 0x81, 0x00, 0x7d, 0xc9, 0xca, 0x3c, 0x9c, 0xf1, + 0x6a, 0xff, 0x69, 0x0c, 0xf8, 0x6b, 0x1a, 0x22, 0x6b, 0xcf, 0xbc, 0xf9, 0x94, 0x46, 0xee, 0x8c, + 0x8b, 0xd6, 0x59, 0x1c, 0x56, 0xc4, 0x1f, 0x41, 0x91, 0x5c, 0xe1, 0x13, 0x87, 0xe8, 0x8a, 0x78, + 0x47, 0x25, 0xce, 0xc4, 0x61, 0xc9, 0xe2, 0xfc, 0x38, 0x2c, 0xd9, 0x87, 0x59, 0x0f, 0x46, 0xb5, + 0x71, 0x1d, 0xe9, 0x32, 0xb8, 0x47, 0x8f, 0x28, 0xad, 0xdf, 0x47, 0xba, 0x14, 0xfe, 0xb6, 0x05, + 0x19, 0xe7, 0x34, 0x65, 0x96, 0xb1, 0x7a, 0x9a, 0x65, 0xce, 0xc2, 0x40, 0x14, 0xfa, 0x24, 0xfb, + 0xa8, 0x03, 0x0e, 0x7d, 0x82, 0x19, 0x44, 0xbd, 0x93, 0x5c, 0xee, 0xf5, 0x4e, 0x32, 0xd5, 0xd3, + 0x7d, 0xb2, 0x4d, 0xa4, 0x91, 0x44, 0xb1, 0xf1, 0x6b, 0xb4, 0x10, 0x73, 0x98, 0xfd, 0xeb, 0x03, + 0x70, 0xb2, 0x4b, 0x54, 0x1f, 0xd5, 0x90, 0x9a, 0x4e, 0x42, 0xee, 0x3b, 0x3b, 0xd9, 0xe4, 0xb2, + 0x97, 0x79, 0x31, 0x96, 0x70, 0xe6, 0x54, 0xcb, 0x13, 0xd4, 0x65, 0x4c, 0x57, 0x22, 0x2f, 0x9d, + 0x80, 0x1e, 0xfd, 0x8b, 0xba, 0x17, 0x01, 0xe2, 0xd8, 0x5f, 0x09, 0xa8, 0x84, 0xe7, 0x0a, 0xe7, + 0xdd, 0x34, 0xaf, 0x61, 0xfd, 0x9a, 0x80, 0x60, 0x0d, 0x0b, 0x55, 0x61, 0xaa, 0x15, 0x85, 0x09, + 0x37, 0x0c, 0x56, 0xb9, 0xab, 0xc5, 0xa0, 0x19, 0x35, 0x56, 0xcb, 0xc0, 0x71, 0x47, 0x0d, 0xf4, + 0x12, 0x8c, 0x8a, 0x48, 0xb2, 0x5a, 0x18, 0xfa, 0xc2, 0x8c, 0xa4, 0xee, 0xe3, 0xeb, 0x29, 0x08, + 0xeb, 0x78, 0x5a, 0x35, 0x66, 0x6d, 0x1c, 0xee, 0x5a, 0x8d, 0x5b, 0x1c, 0x35, 0xbc, 0x4c, 0x9e, + 0x92, 0x91, 0x42, 0x79, 0x4a, 0x52, 0xc3, 0x5a, 0xa5, 0xf0, 0x45, 0x0c, 0xe4, 0x1a, 0xa0, 0x7e, + 0xa7, 0x0c, 0x43, 0xfc, 0x53, 0x1c, 0x83, 0x94, 0x57, 0x13, 0x26, 0xa5, 0x42, 0x39, 0x21, 0x78, + 0xaf, 0xe6, 0xab, 0x4e, 0xe2, 0x70, 0xd6, 0xa4, 0x76, 0x48, 0x6a, 0x86, 0x42, 0xf3, 0xc6, 0x1e, + 0x9a, 0xcd, 0x58, 0x4a, 0x80, 0xd3, 0xd0, 0x76, 0xd4, 0x26, 0x40, 0xcc, 0x5e, 0x75, 0xa5, 0x34, + 0x44, 0xe6, 0xdb, 0x17, 0x0b, 0xf5, 0xa3, 0xae, 0xaa, 0xf1, 0xde, 0xa4, 0xcb, 0x52, 0x01, 0xb0, + 0x46, 0x7b, 0xf6, 0x65, 0xa8, 0x28, 0xe4, 0x3c, 0x15, 0x72, 0x4c, 0x67, 0x6d, 0x7f, 0x01, 0x26, + 0x33, 0x6d, 0xf5, 0xa5, 0x81, 0xfe, 0xa6, 0x05, 0x93, 0xbc, 0xcb, 0x2b, 0xc1, 0xb6, 0x60, 0x05, + 0x5f, 0xb4, 0x60, 0xda, 0xef, 0xb2, 0x13, 0xc5, 0x67, 0x3e, 0xcc, 0x1e, 0x56, 0xca, 0x67, 0x37, + 0x28, 0xee, 0xda, 0x1a, 0x3a, 0x07, 0x23, 0xfc, 0x91, 0x6a, 0xc7, 0x17, 0x9e, 0xe2, 0x63, 0x3c, + 0xe7, 0x37, 0x2f, 0xc3, 0x0a, 0x6a, 0xff, 0xd8, 0x82, 0x13, 0x7c, 0x10, 0x57, 0xc9, 0x8e, 0x52, + 0xaf, 0xde, 0x27, 0xc3, 0x10, 0xd9, 0xcd, 0x4b, 0x3d, 0xb2, 0x9b, 0xeb, 0xa3, 0x2c, 0x1f, 0x38, + 0xca, 0x6f, 0x5b, 0x20, 0x56, 0xe8, 0x31, 0xe8, 0x0f, 0x6b, 0xa6, 0xfe, 0xf0, 0xa1, 0x22, 0x8b, + 0xbe, 0x87, 0xe2, 0xf0, 0x0b, 0x25, 0x98, 0xe2, 0x08, 0xe9, 0x8d, 0xcc, 0xfb, 0xe5, 0xe3, 0xf4, + 0xf7, 0xea, 0x8e, 0x7a, 0xea, 0xb4, 0xfb, 0x48, 0x8d, 0x6f, 0x39, 0x70, 0xe0, 0xb7, 0xfc, 0x33, + 0x0b, 0x10, 0x9f, 0x93, 0xec, 0x0b, 0xdf, 0xfc, 0x74, 0xd3, 0xcc, 0x01, 0x29, 0xe7, 0x50, 0x10, + 0xac, 0x61, 0x3d, 0xe4, 0x21, 0x64, 0xee, 0xc3, 0xca, 0xf9, 0xf7, 0x61, 0x7d, 0x8c, 0xfa, 0x7f, + 0x96, 0x21, 0xeb, 0xac, 0x89, 0xde, 0x86, 0xb1, 0x86, 0xd3, 0x72, 0xee, 0x7a, 0xbe, 0x97, 0x78, + 0x24, 0x2e, 0x76, 0xe1, 0xbe, 0xac, 0xd5, 0x10, 0xd7, 0x50, 0x5a, 0x09, 0x36, 0x28, 0xa2, 0x79, + 0x80, 0x56, 0xe4, 0x6d, 0x7b, 0x3e, 0x69, 0x32, 0x8d, 0x87, 0xc5, 0x9c, 0xf0, 0xbb, 0x63, 0x59, + 0x8a, 0x35, 0x8c, 0x2e, 0x31, 0x0a, 0xe5, 0xe3, 0x88, 0x51, 0x18, 0x38, 0xc2, 0x18, 0x85, 0xc1, + 0x42, 0x31, 0x0a, 0x18, 0x4e, 0xcb, 0x83, 0x9e, 0xfe, 0x5f, 0xf5, 0x7c, 0x22, 0xe4, 0x3c, 0x1e, + 0xbf, 0x32, 0xbb, 0xb7, 0x3b, 0x77, 0x1a, 0x77, 0xc5, 0xc0, 0x3d, 0x6a, 0xda, 0x6d, 0x38, 0x59, + 0x27, 0x91, 0xc7, 0xf2, 0x74, 0xba, 0xe9, 0xbe, 0xfb, 0x0c, 0x54, 0xa2, 0xcc, 0x96, 0xef, 0x33, + 0x49, 0x81, 0x96, 0xd9, 0x4d, 0x6e, 0xf1, 0x94, 0xa4, 0xfd, 0xd7, 0x4a, 0x30, 0x2c, 0x5c, 0x3a, + 0x8f, 0x41, 0x50, 0xb9, 0x6a, 0x98, 0xa3, 0x9e, 0xc9, 0xe3, 0x95, 0xac, 0x5b, 0x3d, 0x0d, 0x51, + 0xf5, 0x8c, 0x21, 0xea, 0xb9, 0x62, 0xe4, 0x0e, 0x36, 0x41, 0xfd, 0xe3, 0x32, 0x4c, 0x98, 0x2e, + 0xae, 0xc7, 0x30, 0x2d, 0xaf, 0xc3, 0x70, 0x2c, 0xbc, 0xad, 0x4b, 0x45, 0xfc, 0xfb, 0xb2, 0x9f, + 0x38, 0xbd, 0xb5, 0x17, 0xfe, 0xd5, 0x92, 0x5c, 0x57, 0x87, 0xee, 0xf2, 0xb1, 0x38, 0x74, 0xe7, + 0x79, 0x1e, 0x0f, 0x3c, 0x0c, 0xcf, 0x63, 0xfb, 0x07, 0xec, 0x78, 0xd0, 0xcb, 0x8f, 0xe1, 0xc8, + 0x7f, 0xcd, 0x3c, 0x48, 0xce, 0x17, 0x5a, 0x77, 0xa2, 0x7b, 0x3d, 0x8e, 0xfe, 0xef, 0x5a, 0x30, + 0x2a, 0x10, 0x8f, 0x61, 0x00, 0x9f, 0x34, 0x07, 0xf0, 0x54, 0xa1, 0x01, 0xf4, 0xe8, 0xf9, 0xd7, + 0x4b, 0xaa, 0xe7, 0xb5, 0x30, 0x4a, 0x0a, 0x65, 0x25, 0x1f, 0xa1, 0x6a, 0x62, 0xd8, 0x08, 0x7d, + 0x21, 0xec, 0x3d, 0x96, 0x86, 0x2b, 0xf2, 0xf2, 0x7d, 0xed, 0x37, 0x56, 0xd8, 0x2c, 0x9a, 0x2e, + 0x8c, 0x12, 0x71, 0xd8, 0xa6, 0xd1, 0x74, 0x61, 0x94, 0x60, 0x06, 0x41, 0x2e, 0x40, 0xfa, 0xbc, + 0xbe, 0x88, 0xf4, 0xed, 0xbd, 0x5b, 0xdb, 0x89, 0xe7, 0xcf, 0x7b, 0x41, 0x12, 0x27, 0xd1, 0xfc, + 0x5a, 0x90, 0xdc, 0x8c, 0xb8, 0x82, 0xa0, 0xc5, 0x1f, 0x2a, 0x5a, 0x58, 0xa3, 0x2b, 0x43, 0x4a, + 0x58, 0x1b, 0x83, 0xe6, 0x6d, 0xd3, 0x0d, 0x51, 0x8e, 0x15, 0x86, 0xfd, 0x32, 0xe3, 0xec, 0x6c, + 0x82, 0xfa, 0x0b, 0x0d, 0xfc, 0x57, 0x83, 0x6a, 0x6a, 0x99, 0x09, 0xf9, 0x86, 0x1e, 0x80, 0x58, + 0x94, 0x7d, 0xd2, 0x2e, 0xe8, 0x3e, 0xd7, 0x69, 0xbc, 0x22, 0x22, 0x1d, 0x57, 0x94, 0x2f, 0x17, + 0xe6, 0xc8, 0x7d, 0x5c, 0x4a, 0xb2, 0x44, 0x8c, 0x2c, 0xfb, 0xdc, 0x5a, 0x2d, 0x9b, 0x4b, 0x7e, + 0x59, 0x02, 0x70, 0x8a, 0x83, 0x16, 0x84, 0xf2, 0xc9, 0xad, 0x33, 0x1f, 0xcc, 0x28, 0x9f, 0x72, + 0x4a, 0x34, 0xed, 0xf3, 0x02, 0x8c, 0xaa, 0xe7, 0x79, 0x6a, 0xfc, 0x61, 0x94, 0x0a, 0x97, 0xc5, + 0x56, 0xd2, 0x62, 0xac, 0xe3, 0xa0, 0x75, 0x98, 0x8c, 0xf9, 0xdb, 0x41, 0x32, 0xb6, 0x43, 0x18, + 0x19, 0x9e, 0xcd, 0x3c, 0xe9, 0x2f, 0xc1, 0xfb, 0xac, 0x88, 0x6f, 0x65, 0x19, 0x0d, 0x92, 0x25, + 0x81, 0x5e, 0x85, 0x09, 0x5f, 0x7f, 0x18, 0xb5, 0x26, 0x6c, 0x10, 0xca, 0x45, 0xcd, 0x78, 0x36, + 0xb5, 0x86, 0x33, 0xd8, 0xe8, 0x75, 0x98, 0xd1, 0x4b, 0x44, 0x42, 0x24, 0x27, 0x68, 0x92, 0x58, + 0xbc, 0x33, 0xf2, 0xd8, 0xde, 0xee, 0xdc, 0xcc, 0xb5, 0x1e, 0x38, 0xb8, 0x67, 0x6d, 0x74, 0x09, + 0xc6, 0xe4, 0xf0, 0xb5, 0x48, 0xa8, 0xd4, 0x39, 0x52, 0x83, 0x61, 0x03, 0xf3, 0xbd, 0xdd, 0xdb, + 0x7e, 0x8e, 0x56, 0xd6, 0xce, 0x5d, 0xf4, 0x0e, 0x8c, 0xe9, 0x7d, 0xcc, 0x1e, 0xa8, 0xf9, 0x8f, + 0xcd, 0x8a, 0xf3, 0x5b, 0xf5, 0x5c, 0x87, 0x61, 0x83, 0xb6, 0x7d, 0x13, 0x86, 0xea, 0x3b, 0x71, + 0x23, 0xf1, 0x0b, 0x30, 0xa5, 0x27, 0x8d, 0x21, 0xa4, 0x1b, 0x86, 0x3d, 0x7c, 0x25, 0x46, 0x64, + 0x7f, 0xd9, 0x82, 0xc9, 0xf5, 0xe5, 0x5a, 0x3d, 0x6c, 0xdc, 0x23, 0xc9, 0x22, 0xd7, 0xcf, 0xb0, + 0xe0, 0x49, 0xd6, 0x21, 0x79, 0x4d, 0x37, 0x2e, 0x76, 0x16, 0x06, 0x36, 0xc3, 0x38, 0xc9, 0xda, + 0x38, 0xaf, 0x84, 0x71, 0x82, 0x19, 0xc4, 0xfe, 0x63, 0x0b, 0x06, 0xd9, 0xbb, 0x4e, 0x79, 0x6f, + 0x82, 0x15, 0x19, 0x17, 0x7a, 0x09, 0x86, 0xc8, 0xc6, 0x06, 0x69, 0x24, 0x62, 0x7b, 0xca, 0x78, + 0x81, 0xa1, 0x15, 0x56, 0x4a, 0x37, 0x1d, 0x6b, 0x8c, 0xff, 0xc5, 0x02, 0x19, 0x7d, 0x1a, 0x2a, + 0x89, 0xb7, 0x45, 0x16, 0x5d, 0x57, 0x18, 0x15, 0xfb, 0x73, 0x61, 0x51, 0x4c, 0x60, 0x5d, 0x12, + 0xc1, 0x29, 0x3d, 0xfb, 0xab, 0x25, 0x80, 0x34, 0x1e, 0x28, 0x6f, 0x98, 0x4b, 0x1d, 0x4f, 0x9f, + 0x3d, 0xdd, 0xe5, 0xe9, 0x33, 0x94, 0x12, 0xec, 0xf2, 0xf0, 0x99, 0x9a, 0xaa, 0x72, 0xa1, 0xa9, + 0x1a, 0xe8, 0x67, 0xaa, 0x96, 0xe1, 0x44, 0x1a, 0xcf, 0x64, 0x06, 0x86, 0xb2, 0x44, 0xa8, 0xeb, + 0x59, 0x20, 0xee, 0xc4, 0xb7, 0xbf, 0x6a, 0x81, 0x70, 0x7a, 0x2c, 0xb0, 0xa0, 0x5d, 0xf9, 0x4c, + 0x91, 0x91, 0xb1, 0xed, 0xd9, 0x22, 0xfe, 0xa0, 0x22, 0x4f, 0x9b, 0xda, 0x62, 0x46, 0x76, 0x36, + 0x83, 0xaa, 0xfd, 0x6b, 0x16, 0x8c, 0x72, 0xf0, 0x75, 0x26, 0x2b, 0xe7, 0xf7, 0xab, 0xaf, 0x2c, + 0xbb, 0xec, 0x05, 0x1f, 0x4a, 0x58, 0x65, 0x5b, 0xd5, 0x5f, 0xf0, 0x91, 0x00, 0x9c, 0xe2, 0xa0, + 0x67, 0x60, 0x38, 0x6e, 0xdf, 0x65, 0xe8, 0x19, 0x0f, 0xc8, 0x3a, 0x2f, 0xc6, 0x12, 0x6e, 0xff, + 0xd3, 0x12, 0x4c, 0x65, 0x1d, 0x60, 0x11, 0x86, 0x21, 0x2e, 0x3b, 0x67, 0xc5, 0xae, 0x83, 0xec, + 0x39, 0x9a, 0x03, 0x2d, 0xf0, 0x77, 0xa8, 0x99, 0xe1, 0x5d, 0x50, 0x42, 0x1b, 0x30, 0xea, 0x86, + 0xf7, 0x83, 0xfb, 0x4e, 0xe4, 0x2e, 0xd6, 0xd6, 0xc4, 0x97, 0xc8, 0x71, 0x59, 0xaa, 0xa6, 0x15, + 0x74, 0xf7, 0x5c, 0x66, 0x5f, 0x48, 0x41, 0x58, 0x27, 0x4c, 0x75, 0xc5, 0x46, 0x18, 0x6c, 0x78, + 0xcd, 0xeb, 0x4e, 0xab, 0xd8, 0xe5, 0xfc, 0xb2, 0x44, 0xd7, 0xda, 0x18, 0x17, 0xf9, 0x28, 0x38, + 0x00, 0xa7, 0x24, 0xed, 0x5f, 0x9d, 0x06, 0x63, 0x2d, 0x18, 0xa9, 0x70, 0xad, 0x87, 0x9e, 0x0a, + 0xf7, 0x4d, 0x18, 0x21, 0x5b, 0xad, 0x64, 0xa7, 0xea, 0x45, 0xc5, 0x12, 0x9b, 0xaf, 0x08, 0xec, + 0x4e, 0xea, 0x12, 0x82, 0x15, 0xc5, 0x1e, 0x89, 0x8d, 0xcb, 0xef, 0x8b, 0xc4, 0xc6, 0x03, 0x7f, + 0x2e, 0x89, 0x8d, 0x5f, 0x87, 0xe1, 0xa6, 0x97, 0x60, 0xd2, 0x0a, 0x45, 0x82, 0x8f, 0x9c, 0xc5, + 0x73, 0x99, 0x23, 0x77, 0xa6, 0xbc, 0x14, 0x00, 0x2c, 0xc9, 0xa1, 0x75, 0xb5, 0xa9, 0x86, 0x8a, + 0x1c, 0xf7, 0x9d, 0xf6, 0xbe, 0xae, 0xdb, 0x4a, 0x24, 0x32, 0x1e, 0x7e, 0xef, 0x89, 0x8c, 0x55, + 0xfa, 0xe1, 0x91, 0x87, 0x95, 0x7e, 0xd8, 0x48, 0xe3, 0x5c, 0x39, 0x8a, 0x34, 0xce, 0x5f, 0xb5, + 0xe0, 0x54, 0xab, 0x5b, 0x12, 0x74, 0x91, 0x48, 0xf8, 0x67, 0x0f, 0x91, 0x16, 0xde, 0x68, 0x9a, + 0x25, 0x2c, 0xe8, 0x8a, 0x86, 0xbb, 0x37, 0x2c, 0xf3, 0x41, 0x8f, 0xbe, 0xf7, 0x7c, 0xd0, 0x47, + 0x9d, 0x71, 0x38, 0xcd, 0x0e, 0x3d, 0x7e, 0x24, 0xd9, 0xa1, 0x27, 0x1e, 0x62, 0x76, 0x68, 0x2d, + 0xaf, 0xf3, 0xe4, 0xc3, 0xcd, 0xeb, 0xbc, 0x69, 0x9e, 0x4b, 0x3c, 0x8d, 0xf0, 0x4b, 0x85, 0xcf, + 0x25, 0xa3, 0x85, 0x83, 0x4f, 0x26, 0x9e, 0xe1, 0xfa, 0xc4, 0x7b, 0xcc, 0x70, 0x6d, 0xe4, 0x89, + 0x46, 0x47, 0x91, 0x27, 0xfa, 0x6d, 0xfd, 0x04, 0x3d, 0x59, 0xa4, 0x05, 0x75, 0x50, 0x76, 0xb6, + 0xd0, 0xed, 0x0c, 0xed, 0xcc, 0x44, 0x3d, 0x7d, 0xdc, 0x99, 0xa8, 0x4f, 0x1d, 0x61, 0x26, 0xea, + 0xd3, 0xc7, 0x9a, 0x89, 0xfa, 0x91, 0xf7, 0x49, 0x26, 0xea, 0x99, 0xe3, 0xca, 0x44, 0xfd, 0xe8, + 0x43, 0xcd, 0x44, 0x4d, 0x3f, 0x5d, 0x4b, 0x86, 0x91, 0xcd, 0xcc, 0x16, 0xf9, 0x74, 0x5d, 0xa3, + 0xce, 0xf8, 0xa7, 0x53, 0x20, 0x9c, 0x12, 0xb5, 0xff, 0x12, 0x9c, 0x39, 0x78, 0xe9, 0xa6, 0x1e, + 0x1b, 0xb5, 0xd4, 0x16, 0x96, 0xf1, 0xd8, 0x60, 0x62, 0xa1, 0x86, 0x55, 0x38, 0x55, 0xee, 0xb7, + 0x2c, 0x78, 0xa4, 0x47, 0x26, 0xc9, 0xc2, 0x31, 0x98, 0x2d, 0x98, 0x6c, 0x99, 0x55, 0x0b, 0x87, + 0x74, 0x1b, 0x99, 0x2b, 0x95, 0x9f, 0x7c, 0x06, 0x80, 0xb3, 0xe4, 0x97, 0x3e, 0xf4, 0xc3, 0x1f, + 0x9d, 0xf9, 0xc0, 0xef, 0xfe, 0xe8, 0xcc, 0x07, 0xfe, 0xf0, 0x47, 0x67, 0x3e, 0xf0, 0x73, 0x7b, + 0x67, 0xac, 0x1f, 0xee, 0x9d, 0xb1, 0x7e, 0x77, 0xef, 0x8c, 0xf5, 0x27, 0x7b, 0x67, 0xac, 0xaf, + 0xfe, 0xf8, 0xcc, 0x07, 0xde, 0x28, 0x6d, 0x5f, 0xf8, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xda, + 0x87, 0x52, 0x9e, 0x37, 0xcb, 0x00, 0x00, } diff --git a/pkg/api/v1/types.generated.go b/pkg/api/v1/types.generated.go index 1f2f57945e..7e81fa3d65 100644 --- a/pkg/api/v1/types.generated.go +++ b/pkg/api/v1/types.generated.go @@ -35864,6 +35864,7 @@ func (x *PodSecurityContext) CodecEncodeSelf(e *codec1978.Encoder) { yym8 := z.EncBinary() _ = yym8 if false { + } else if z.HasExtensions() && z.EncExt(yy7) { } else { r.EncodeInt(int64(yy7)) } @@ -35883,6 +35884,7 @@ func (x *PodSecurityContext) CodecEncodeSelf(e *codec1978.Encoder) { yym10 := z.EncBinary() _ = yym10 if false { + } else if z.HasExtensions() && z.EncExt(yy9) { } else { r.EncodeInt(int64(yy9)) } @@ -35934,7 +35936,7 @@ func (x *PodSecurityContext) CodecEncodeSelf(e *codec1978.Encoder) { _ = yym17 if false { } else { - z.F.EncSliceInt64V(x.SupplementalGroups, false, e) + h.encSlicetypes_UnixGroupID(([]pkg1_types.UnixGroupID)(x.SupplementalGroups), e) } } } else { @@ -35952,7 +35954,7 @@ func (x *PodSecurityContext) CodecEncodeSelf(e *codec1978.Encoder) { _ = yym18 if false { } else { - z.F.EncSliceInt64V(x.SupplementalGroups, false, e) + h.encSlicetypes_UnixGroupID(([]pkg1_types.UnixGroupID)(x.SupplementalGroups), e) } } } @@ -35967,6 +35969,7 @@ func (x *PodSecurityContext) CodecEncodeSelf(e *codec1978.Encoder) { yym21 := z.EncBinary() _ = yym21 if false { + } else if z.HasExtensions() && z.EncExt(yy20) { } else { r.EncodeInt(int64(yy20)) } @@ -35986,6 +35989,7 @@ func (x *PodSecurityContext) CodecEncodeSelf(e *codec1978.Encoder) { yym23 := z.EncBinary() _ = yym23 if false { + } else if z.HasExtensions() && z.EncExt(yy22) { } else { r.EncodeInt(int64(yy22)) } @@ -36071,11 +36075,12 @@ func (x *PodSecurityContext) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) } } else { if x.RunAsUser == nil { - x.RunAsUser = new(int64) + x.RunAsUser = new(pkg1_types.UnixUserID) } yym6 := z.DecBinary() _ = yym6 if false { + } else if z.HasExtensions() && z.DecExt(x.RunAsUser) { } else { *((*int64)(x.RunAsUser)) = int64(r.DecodeInt(64)) } @@ -36105,7 +36110,7 @@ func (x *PodSecurityContext) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) _ = yym10 if false { } else { - z.F.DecSliceInt64X(yyv9, false, d) + h.decSlicetypes_UnixGroupID((*[]pkg1_types.UnixGroupID)(yyv9), d) } } case "fsGroup": @@ -36115,11 +36120,12 @@ func (x *PodSecurityContext) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) } } else { if x.FSGroup == nil { - x.FSGroup = new(int64) + x.FSGroup = new(pkg1_types.UnixGroupID) } yym12 := z.DecBinary() _ = yym12 if false { + } else if z.HasExtensions() && z.DecExt(x.FSGroup) { } else { *((*int64)(x.FSGroup)) = int64(r.DecodeInt(64)) } @@ -36176,11 +36182,12 @@ func (x *PodSecurityContext) codecDecodeSelfFromArray(l int, d *codec1978.Decode } } else { if x.RunAsUser == nil { - x.RunAsUser = new(int64) + x.RunAsUser = new(pkg1_types.UnixUserID) } yym16 := z.DecBinary() _ = yym16 if false { + } else if z.HasExtensions() && z.DecExt(x.RunAsUser) { } else { *((*int64)(x.RunAsUser)) = int64(r.DecodeInt(64)) } @@ -36230,7 +36237,7 @@ func (x *PodSecurityContext) codecDecodeSelfFromArray(l int, d *codec1978.Decode _ = yym20 if false { } else { - z.F.DecSliceInt64X(yyv19, false, d) + h.decSlicetypes_UnixGroupID((*[]pkg1_types.UnixGroupID)(yyv19), d) } } yyj13++ @@ -36250,11 +36257,12 @@ func (x *PodSecurityContext) codecDecodeSelfFromArray(l int, d *codec1978.Decode } } else { if x.FSGroup == nil { - x.FSGroup = new(int64) + x.FSGroup = new(pkg1_types.UnixGroupID) } yym22 := z.DecBinary() _ = yym22 if false { + } else if z.HasExtensions() && z.DecExt(x.FSGroup) { } else { *((*int64)(x.FSGroup)) = int64(r.DecodeInt(64)) } @@ -66020,6 +66028,7 @@ func (x *SecurityContext) CodecEncodeSelf(e *codec1978.Encoder) { yym16 := z.EncBinary() _ = yym16 if false { + } else if z.HasExtensions() && z.EncExt(yy15) { } else { r.EncodeInt(int64(yy15)) } @@ -66039,6 +66048,7 @@ func (x *SecurityContext) CodecEncodeSelf(e *codec1978.Encoder) { yym18 := z.EncBinary() _ = yym18 if false { + } else if z.HasExtensions() && z.EncExt(yy17) { } else { r.EncodeInt(int64(yy17)) } @@ -66221,11 +66231,12 @@ func (x *SecurityContext) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { } } else { if x.RunAsUser == nil { - x.RunAsUser = new(int64) + x.RunAsUser = new(pkg1_types.UnixUserID) } yym9 := z.DecBinary() _ = yym9 if false { + } else if z.HasExtensions() && z.DecExt(x.RunAsUser) { } else { *((*int64)(x.RunAsUser)) = int64(r.DecodeInt(64)) } @@ -66361,11 +66372,12 @@ func (x *SecurityContext) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) } } else { if x.RunAsUser == nil { - x.RunAsUser = new(int64) + x.RunAsUser = new(pkg1_types.UnixUserID) } yym20 := z.DecBinary() _ = yym20 if false { + } else if z.HasExtensions() && z.DecExt(x.RunAsUser) { } else { *((*int64)(x.RunAsUser)) = int64(r.DecodeInt(64)) } @@ -70239,6 +70251,143 @@ func (x codecSelfer1234) decSliceHostAlias(v *[]HostAlias, d *codec1978.Decoder) } } +func (x codecSelfer1234) encSlicetypes_UnixGroupID(v []pkg1_types.UnixGroupID, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv1 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2 := z.EncBinary() + _ = yym2 + if false { + } else if z.HasExtensions() && z.EncExt(yyv1) { + } else { + r.EncodeInt(int64(yyv1)) + } + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSlicetypes_UnixGroupID(v *[]pkg1_types.UnixGroupID, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv1 := *v + yyh1, yyl1 := z.DecSliceHelperStart() + var yyc1 bool + _ = yyc1 + if yyl1 == 0 { + if yyv1 == nil { + yyv1 = []pkg1_types.UnixGroupID{} + yyc1 = true + } else if len(yyv1) != 0 { + yyv1 = yyv1[:0] + yyc1 = true + } + } else if yyl1 > 0 { + var yyrr1, yyrl1 int + var yyrt1 bool + _, _ = yyrl1, yyrt1 + yyrr1 = yyl1 // len(yyv1) + if yyl1 > cap(yyv1) { + + yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 8) + if yyrt1 { + if yyrl1 <= cap(yyv1) { + yyv1 = yyv1[:yyrl1] + } else { + yyv1 = make([]pkg1_types.UnixGroupID, yyrl1) + } + } else { + yyv1 = make([]pkg1_types.UnixGroupID, yyrl1) + } + yyc1 = true + yyrr1 = len(yyv1) + } else if yyl1 != len(yyv1) { + yyv1 = yyv1[:yyl1] + yyc1 = true + } + yyj1 := 0 + for ; yyj1 < yyrr1; yyj1++ { + yyh1.ElemContainerState(yyj1) + if r.TryDecodeAsNil() { + yyv1[yyj1] = 0 + } else { + yyv2 := &yyv1[yyj1] + yym3 := z.DecBinary() + _ = yym3 + if false { + } else if z.HasExtensions() && z.DecExt(yyv2) { + } else { + *((*int64)(yyv2)) = int64(r.DecodeInt(64)) + } + } + + } + if yyrt1 { + for ; yyj1 < yyl1; yyj1++ { + yyv1 = append(yyv1, 0) + yyh1.ElemContainerState(yyj1) + if r.TryDecodeAsNil() { + yyv1[yyj1] = 0 + } else { + yyv4 := &yyv1[yyj1] + yym5 := z.DecBinary() + _ = yym5 + if false { + } else if z.HasExtensions() && z.DecExt(yyv4) { + } else { + *((*int64)(yyv4)) = int64(r.DecodeInt(64)) + } + } + + } + } + + } else { + yyj1 := 0 + for ; !r.CheckBreak(); yyj1++ { + + if yyj1 >= len(yyv1) { + yyv1 = append(yyv1, 0) // var yyz1 pkg1_types.UnixGroupID + yyc1 = true + } + yyh1.ElemContainerState(yyj1) + if yyj1 < len(yyv1) { + if r.TryDecodeAsNil() { + yyv1[yyj1] = 0 + } else { + yyv6 := &yyv1[yyj1] + yym7 := z.DecBinary() + _ = yym7 + if false { + } else if z.HasExtensions() && z.DecExt(yyv6) { + } else { + *((*int64)(yyv6)) = int64(r.DecodeInt(64)) + } + } + + } else { + z.DecSwallow() + } + + } + if yyj1 < len(yyv1) { + yyv1 = yyv1[:yyj1] + yyc1 = true + } else if yyj1 == 0 && yyv1 == nil { + yyv1 = []pkg1_types.UnixGroupID{} + yyc1 = true + } + } + yyh1.End() + if yyc1 { + *v = yyv1 + } +} + func (x codecSelfer1234) encSlicePodCondition(v []PodCondition, e *codec1978.Encoder) { var h codecSelfer1234 z, r := codec1978.GenHelperEncoder(e) diff --git a/pkg/api/v1/types.go b/pkg/api/v1/types.go index 47e751e021..2d8528f8d5 100644 --- a/pkg/api/v1/types.go +++ b/pkg/api/v1/types.go @@ -2440,7 +2440,7 @@ type PodSecurityContext struct { // PodSecurityContext, the value specified in SecurityContext takes precedence // for that container. // +optional - RunAsUser *int64 `json:"runAsUser,omitempty" protobuf:"varint,2,opt,name=runAsUser"` + RunAsUser *types.UnixUserID `json:"runAsUser,omitempty" protobuf:"varint,2,opt,name=runAsUser,casttype=k8s.io/apimachinery/pkg/types.UnixUserID"` // Indicates that the container must run as a non-root user. // If true, the Kubelet will validate the image at runtime to ensure that it // does not run as UID 0 (root) and fail to start the container if it does. @@ -2453,7 +2453,7 @@ type PodSecurityContext struct { // to the container's primary GID. If unspecified, no groups will be added to // any container. // +optional - SupplementalGroups []int64 `json:"supplementalGroups,omitempty" protobuf:"varint,4,rep,name=supplementalGroups"` + SupplementalGroups []types.UnixGroupID `json:"supplementalGroups,omitempty" protobuf:"varint,4,rep,name=supplementalGroups,casttype=k8s.io/apimachinery/pkg/types.UnixGroupID"` // A special supplemental group that applies to all containers in a pod. // Some volume types allow the Kubelet to change the ownership of that volume // to be owned by the pod: @@ -2464,7 +2464,7 @@ type PodSecurityContext struct { // // If unset, the Kubelet will not modify the ownership and permissions of any volume. // +optional - FSGroup *int64 `json:"fsGroup,omitempty" protobuf:"varint,5,opt,name=fsGroup"` + FSGroup *types.UnixGroupID `json:"fsGroup,omitempty" protobuf:"varint,5,opt,name=fsGroup,casttype=k8s.io/apimachinery/pkg/types.UnixGroupID"` } // PodQOSClass defines the supported qos classes of Pods. @@ -4369,7 +4369,7 @@ type SecurityContext struct { // May also be set in PodSecurityContext. If set in both SecurityContext and // PodSecurityContext, the value specified in SecurityContext takes precedence. // +optional - RunAsUser *int64 `json:"runAsUser,omitempty" protobuf:"varint,4,opt,name=runAsUser"` + RunAsUser *types.UnixUserID `json:"runAsUser,omitempty" protobuf:"varint,4,opt,name=runAsUser,casttype=k8s.io/apimachinery/pkg/types.UnixUserID"` // Indicates that the container must run as a non-root user. // If true, the Kubelet will validate the image at runtime to ensure that it // does not run as UID 0 (root) and fail to start the container if it does. diff --git a/pkg/api/v1/zz_generated.conversion.go b/pkg/api/v1/zz_generated.conversion.go index c62c240bdb..59162ce2f6 100644 --- a/pkg/api/v1/zz_generated.conversion.go +++ b/pkg/api/v1/zz_generated.conversion.go @@ -3412,10 +3412,10 @@ func Convert_api_PodProxyOptions_To_v1_PodProxyOptions(in *api.PodProxyOptions, func autoConvert_v1_PodSecurityContext_To_api_PodSecurityContext(in *PodSecurityContext, out *api.PodSecurityContext, s conversion.Scope) error { out.SELinuxOptions = (*api.SELinuxOptions)(unsafe.Pointer(in.SELinuxOptions)) - out.RunAsUser = (*int64)(unsafe.Pointer(in.RunAsUser)) + out.RunAsUser = (*types.UnixUserID)(unsafe.Pointer(in.RunAsUser)) out.RunAsNonRoot = (*bool)(unsafe.Pointer(in.RunAsNonRoot)) - out.SupplementalGroups = *(*[]int64)(unsafe.Pointer(&in.SupplementalGroups)) - out.FSGroup = (*int64)(unsafe.Pointer(in.FSGroup)) + out.SupplementalGroups = *(*[]types.UnixGroupID)(unsafe.Pointer(&in.SupplementalGroups)) + out.FSGroup = (*types.UnixGroupID)(unsafe.Pointer(in.FSGroup)) return nil } @@ -3424,10 +3424,10 @@ func autoConvert_api_PodSecurityContext_To_v1_PodSecurityContext(in *api.PodSecu // INFO: in.HostPID opted out of conversion generation // INFO: in.HostIPC opted out of conversion generation out.SELinuxOptions = (*SELinuxOptions)(unsafe.Pointer(in.SELinuxOptions)) - out.RunAsUser = (*int64)(unsafe.Pointer(in.RunAsUser)) + out.RunAsUser = (*types.UnixUserID)(unsafe.Pointer(in.RunAsUser)) out.RunAsNonRoot = (*bool)(unsafe.Pointer(in.RunAsNonRoot)) - out.SupplementalGroups = *(*[]int64)(unsafe.Pointer(&in.SupplementalGroups)) - out.FSGroup = (*int64)(unsafe.Pointer(in.FSGroup)) + out.SupplementalGroups = *(*[]types.UnixGroupID)(unsafe.Pointer(&in.SupplementalGroups)) + out.FSGroup = (*types.UnixGroupID)(unsafe.Pointer(in.FSGroup)) return nil } @@ -4487,7 +4487,7 @@ func autoConvert_v1_SecurityContext_To_api_SecurityContext(in *SecurityContext, out.Capabilities = (*api.Capabilities)(unsafe.Pointer(in.Capabilities)) out.Privileged = (*bool)(unsafe.Pointer(in.Privileged)) out.SELinuxOptions = (*api.SELinuxOptions)(unsafe.Pointer(in.SELinuxOptions)) - out.RunAsUser = (*int64)(unsafe.Pointer(in.RunAsUser)) + out.RunAsUser = (*types.UnixUserID)(unsafe.Pointer(in.RunAsUser)) out.RunAsNonRoot = (*bool)(unsafe.Pointer(in.RunAsNonRoot)) out.ReadOnlyRootFilesystem = (*bool)(unsafe.Pointer(in.ReadOnlyRootFilesystem)) return nil @@ -4502,7 +4502,7 @@ func autoConvert_api_SecurityContext_To_v1_SecurityContext(in *api.SecurityConte out.Capabilities = (*Capabilities)(unsafe.Pointer(in.Capabilities)) out.Privileged = (*bool)(unsafe.Pointer(in.Privileged)) out.SELinuxOptions = (*SELinuxOptions)(unsafe.Pointer(in.SELinuxOptions)) - out.RunAsUser = (*int64)(unsafe.Pointer(in.RunAsUser)) + out.RunAsUser = (*types.UnixUserID)(unsafe.Pointer(in.RunAsUser)) out.RunAsNonRoot = (*bool)(unsafe.Pointer(in.RunAsNonRoot)) out.ReadOnlyRootFilesystem = (*bool)(unsafe.Pointer(in.ReadOnlyRootFilesystem)) return nil diff --git a/pkg/api/v1/zz_generated.deepcopy.go b/pkg/api/v1/zz_generated.deepcopy.go index ab45047c68..7a5eefe214 100644 --- a/pkg/api/v1/zz_generated.deepcopy.go +++ b/pkg/api/v1/zz_generated.deepcopy.go @@ -2317,7 +2317,7 @@ func DeepCopy_v1_PodSecurityContext(in interface{}, out interface{}, c *conversi } if in.RunAsUser != nil { in, out := &in.RunAsUser, &out.RunAsUser - *out = new(int64) + *out = new(types.UnixUserID) **out = **in } if in.RunAsNonRoot != nil { @@ -2327,12 +2327,12 @@ func DeepCopy_v1_PodSecurityContext(in interface{}, out interface{}, c *conversi } if in.SupplementalGroups != nil { in, out := &in.SupplementalGroups, &out.SupplementalGroups - *out = make([]int64, len(*in)) + *out = make([]types.UnixGroupID, len(*in)) copy(*out, *in) } if in.FSGroup != nil { in, out := &in.FSGroup, &out.FSGroup - *out = new(int64) + *out = new(types.UnixGroupID) **out = **in } return nil @@ -3076,7 +3076,7 @@ func DeepCopy_v1_SecurityContext(in interface{}, out interface{}, c *conversion. } if in.RunAsUser != nil { in, out := &in.RunAsUser, &out.RunAsUser - *out = new(int64) + *out = new(types.UnixUserID) **out = **in } if in.RunAsNonRoot != nil { diff --git a/pkg/api/validation/BUILD b/pkg/api/validation/BUILD index 5d6ebbfb47..5cfeb6fcb6 100644 --- a/pkg/api/validation/BUILD +++ b/pkg/api/validation/BUILD @@ -82,6 +82,7 @@ go_test( "//vendor/k8s.io/apimachinery/pkg/api/testing:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/intstr:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", diff --git a/pkg/api/validation/schema.go b/pkg/api/validation/schema.go index 635bc39279..c20897191e 100644 --- a/pkg/api/validation/schema.go +++ b/pkg/api/validation/schema.go @@ -359,7 +359,7 @@ func (s *SwaggerSchema) isGenericArray(p swagger.ModelProperty) bool { } // This matches type name in the swagger spec, such as "v1.Binding". -var versionRegexp = regexp.MustCompile(`^(v.+|unversioned)\..*`) +var versionRegexp = regexp.MustCompile(`^(v.+|unversioned|types)\..*`) func (s *SwaggerSchema) validateField(value interface{}, fieldName, fieldType string, fieldDetails *swagger.ModelProperty) []error { allErrs := []error{} diff --git a/pkg/api/validation/validation.go b/pkg/api/validation/validation.go index ca501ca367..bf69f1fa47 100644 --- a/pkg/api/validation/validation.go +++ b/pkg/api/validation/validation.go @@ -2430,17 +2430,17 @@ func ValidatePodSecurityContext(securityContext *api.PodSecurityContext, spec *a allErrs = append(allErrs, validateHostNetwork(securityContext.HostNetwork, spec.Containers, specPath.Child("containers"))...) allErrs = append(allErrs, validateHostNetworkNoHostAliases(securityContext.HostNetwork, spec.HostAliases, specPath)...) if securityContext.FSGroup != nil { - for _, msg := range validation.IsValidGroupId(*securityContext.FSGroup) { + for _, msg := range validation.IsValidGroupID(*securityContext.FSGroup) { allErrs = append(allErrs, field.Invalid(fldPath.Child("fsGroup"), *(securityContext.FSGroup), msg)) } } if securityContext.RunAsUser != nil { - for _, msg := range validation.IsValidUserId(*securityContext.RunAsUser) { + for _, msg := range validation.IsValidUserID(*securityContext.RunAsUser) { allErrs = append(allErrs, field.Invalid(fldPath.Child("runAsUser"), *(securityContext.RunAsUser), msg)) } } for g, gid := range securityContext.SupplementalGroups { - for _, msg := range validation.IsValidGroupId(gid) { + for _, msg := range validation.IsValidGroupID(gid) { allErrs = append(allErrs, field.Invalid(fldPath.Child("supplementalGroups").Index(g), gid, msg)) } } diff --git a/pkg/api/validation/validation_test.go b/pkg/api/validation/validation_test.go index 19d728f2ad..2ee90b544f 100644 --- a/pkg/api/validation/validation_test.go +++ b/pkg/api/validation/validation_test.go @@ -23,6 +23,7 @@ import ( "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/intstr" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/validation/field" @@ -3121,8 +3122,12 @@ func TestValidateDNSPolicy(t *testing.T) { func TestValidatePodSpec(t *testing.T) { activeDeadlineSeconds := int64(30) - minID := int64(0) - maxID := int64(2147483647) + + minUserID := types.UnixUserID(0) + maxUserID := types.UnixUserID(2147483647) + minGroupID := types.UnixGroupID(0) + maxGroupID := types.UnixGroupID(2147483647) + successCases := []api.PodSpec{ { // Populate basic fields, leave defaults for most. Volumes: []api.Volume{{Name: "vol", VolumeSource: api.VolumeSource{EmptyDir: &api.EmptyDirVolumeSource{}}}}, @@ -3161,9 +3166,9 @@ func TestValidatePodSpec(t *testing.T) { { // Populate RunAsUser SupplementalGroups FSGroup with minID 0 Containers: []api.Container{{Name: "ctr", Image: "image", ImagePullPolicy: "IfNotPresent", TerminationMessagePolicy: "File"}}, SecurityContext: &api.PodSecurityContext{ - SupplementalGroups: []int64{minID}, - RunAsUser: &minID, - FSGroup: &minID, + SupplementalGroups: []types.UnixGroupID{minGroupID}, + RunAsUser: &minUserID, + FSGroup: &minGroupID, }, RestartPolicy: api.RestartPolicyAlways, DNSPolicy: api.DNSClusterFirst, @@ -3171,9 +3176,9 @@ func TestValidatePodSpec(t *testing.T) { { // Populate RunAsUser SupplementalGroups FSGroup with maxID 2147483647 Containers: []api.Container{{Name: "ctr", Image: "image", ImagePullPolicy: "IfNotPresent", TerminationMessagePolicy: "File"}}, SecurityContext: &api.PodSecurityContext{ - SupplementalGroups: []int64{maxID}, - RunAsUser: &maxID, - FSGroup: &maxID, + SupplementalGroups: []types.UnixGroupID{maxGroupID}, + RunAsUser: &maxUserID, + FSGroup: &maxGroupID, }, RestartPolicy: api.RestartPolicyAlways, DNSPolicy: api.DNSClusterFirst, @@ -3217,8 +3222,12 @@ func TestValidatePodSpec(t *testing.T) { } activeDeadlineSeconds = int64(0) - minID = int64(-1) - maxID = int64(2147483648) + + minUserID = types.UnixUserID(-1) + maxUserID = types.UnixUserID(2147483648) + minGroupID = types.UnixGroupID(-1) + maxGroupID = types.UnixGroupID(2147483648) + failureCases := map[string]api.PodSpec{ "bad volume": { Volumes: []api.Volume{{}}, @@ -3291,7 +3300,7 @@ func TestValidatePodSpec(t *testing.T) { Containers: []api.Container{{Name: "ctr", Image: "image", ImagePullPolicy: "IfNotPresent", TerminationMessagePolicy: "File"}}, SecurityContext: &api.PodSecurityContext{ HostNetwork: false, - SupplementalGroups: []int64{maxID, 1234}, + SupplementalGroups: []types.UnixGroupID{maxGroupID, 1234}, }, RestartPolicy: api.RestartPolicyAlways, DNSPolicy: api.DNSClusterFirst, @@ -3300,7 +3309,7 @@ func TestValidatePodSpec(t *testing.T) { Containers: []api.Container{{Name: "ctr", Image: "image", ImagePullPolicy: "IfNotPresent", TerminationMessagePolicy: "File"}}, SecurityContext: &api.PodSecurityContext{ HostNetwork: false, - SupplementalGroups: []int64{minID, 1234}, + SupplementalGroups: []types.UnixGroupID{minGroupID, 1234}, }, RestartPolicy: api.RestartPolicyAlways, DNSPolicy: api.DNSClusterFirst, @@ -3309,7 +3318,7 @@ func TestValidatePodSpec(t *testing.T) { Containers: []api.Container{{Name: "ctr", Image: "image", ImagePullPolicy: "IfNotPresent", TerminationMessagePolicy: "File"}}, SecurityContext: &api.PodSecurityContext{ HostNetwork: false, - RunAsUser: &maxID, + RunAsUser: &maxUserID, }, RestartPolicy: api.RestartPolicyAlways, DNSPolicy: api.DNSClusterFirst, @@ -3318,7 +3327,7 @@ func TestValidatePodSpec(t *testing.T) { Containers: []api.Container{{Name: "ctr", Image: "image", ImagePullPolicy: "IfNotPresent", TerminationMessagePolicy: "File"}}, SecurityContext: &api.PodSecurityContext{ HostNetwork: false, - RunAsUser: &minID, + RunAsUser: &minUserID, }, RestartPolicy: api.RestartPolicyAlways, DNSPolicy: api.DNSClusterFirst, @@ -3327,7 +3336,7 @@ func TestValidatePodSpec(t *testing.T) { Containers: []api.Container{{Name: "ctr", Image: "image", ImagePullPolicy: "IfNotPresent", TerminationMessagePolicy: "File"}}, SecurityContext: &api.PodSecurityContext{ HostNetwork: false, - FSGroup: &maxID, + FSGroup: &maxGroupID, }, RestartPolicy: api.RestartPolicyAlways, DNSPolicy: api.DNSClusterFirst, @@ -3336,7 +3345,7 @@ func TestValidatePodSpec(t *testing.T) { Containers: []api.Container{{Name: "ctr", Image: "image", ImagePullPolicy: "IfNotPresent", TerminationMessagePolicy: "File"}}, SecurityContext: &api.PodSecurityContext{ HostNetwork: false, - FSGroup: &minID, + FSGroup: &minGroupID, }, RestartPolicy: api.RestartPolicyAlways, DNSPolicy: api.DNSClusterFirst, @@ -8721,7 +8730,7 @@ func TestValidateTLSSecret(t *testing.T) { func TestValidateSecurityContext(t *testing.T) { priv := false - var runAsUser int64 = 1 + runAsUser := types.UnixUserID(1) fullValidSC := func() *api.SecurityContext { return &api.SecurityContext{ Privileged: &priv, @@ -8773,7 +8782,7 @@ func TestValidateSecurityContext(t *testing.T) { privRequestWithGlobalDeny.Privileged = &requestPrivileged negativeRunAsUser := fullValidSC() - var negativeUser int64 = -1 + negativeUser := types.UnixUserID(-1) negativeRunAsUser.RunAsUser = &negativeUser errorCases := map[string]struct { diff --git a/pkg/api/zz_generated.deepcopy.go b/pkg/api/zz_generated.deepcopy.go index c58ccb4993..5df4094ef6 100644 --- a/pkg/api/zz_generated.deepcopy.go +++ b/pkg/api/zz_generated.deepcopy.go @@ -2335,7 +2335,7 @@ func DeepCopy_api_PodSecurityContext(in interface{}, out interface{}, c *convers } if in.RunAsUser != nil { in, out := &in.RunAsUser, &out.RunAsUser - *out = new(int64) + *out = new(types.UnixUserID) **out = **in } if in.RunAsNonRoot != nil { @@ -2345,12 +2345,12 @@ func DeepCopy_api_PodSecurityContext(in interface{}, out interface{}, c *convers } if in.SupplementalGroups != nil { in, out := &in.SupplementalGroups, &out.SupplementalGroups - *out = make([]int64, len(*in)) + *out = make([]types.UnixGroupID, len(*in)) copy(*out, *in) } if in.FSGroup != nil { in, out := &in.FSGroup, &out.FSGroup - *out = new(int64) + *out = new(types.UnixGroupID) **out = **in } return nil @@ -3082,7 +3082,7 @@ func DeepCopy_api_SecurityContext(in interface{}, out interface{}, c *conversion } if in.RunAsUser != nil { in, out := &in.RunAsUser, &out.RunAsUser - *out = new(int64) + *out = new(types.UnixUserID) **out = **in } if in.RunAsNonRoot != nil { diff --git a/pkg/apis/extensions/BUILD b/pkg/apis/extensions/BUILD index a9de8e682e..2bb7260d28 100644 --- a/pkg/apis/extensions/BUILD +++ b/pkg/apis/extensions/BUILD @@ -32,6 +32,7 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/conversion:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/intstr:go_default_library", ], ) diff --git a/pkg/apis/extensions/types.go b/pkg/apis/extensions/types.go index 68b91ec817..d1d8c317e8 100644 --- a/pkg/apis/extensions/types.go +++ b/pkg/apis/extensions/types.go @@ -31,6 +31,7 @@ package extensions import ( "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/intstr" "k8s.io/kubernetes/pkg/api" ) @@ -948,15 +949,23 @@ type RunAsUserStrategyOptions struct { Rule RunAsUserStrategy // Ranges are the allowed ranges of uids that may be used. // +optional - Ranges []IDRange + Ranges []UserIDRange } -// IDRange provides a min/max of an allowed range of IDs. -type IDRange struct { +// UserIDRange provides a min/max of an allowed range of UserIDs. +type UserIDRange struct { // Min is the start of the range, inclusive. - Min int64 + Min types.UnixUserID // Max is the end of the range, inclusive. - Max int64 + Max types.UnixUserID +} + +// GroupIDRange provides a min/max of an allowed range of GroupIDs. +type GroupIDRange struct { + // Min is the start of the range, inclusive. + Min types.UnixGroupID + // Max is the end of the range, inclusive. + Max types.UnixGroupID } // RunAsUserStrategy denotes strategy types for generating RunAsUser values for a @@ -980,7 +989,7 @@ type FSGroupStrategyOptions struct { // Ranges are the allowed ranges of fs groups. If you would like to force a single // fs group then supply a single range with the same start and end. // +optional - Ranges []IDRange + Ranges []GroupIDRange } // FSGroupStrategyType denotes strategy types for generating FSGroup values for a @@ -1002,7 +1011,7 @@ type SupplementalGroupsStrategyOptions struct { // Ranges are the allowed ranges of supplemental groups. If you would like to force a single // supplemental group then supply a single range with the same start and end. // +optional - Ranges []IDRange + Ranges []GroupIDRange } // SupplementalGroupsStrategyType denotes strategy types for determining valid supplemental diff --git a/pkg/apis/extensions/v1beta1/zz_generated.conversion.go b/pkg/apis/extensions/v1beta1/zz_generated.conversion.go index fd9251bf3f..f2032b2c46 100644 --- a/pkg/apis/extensions/v1beta1/zz_generated.conversion.go +++ b/pkg/apis/extensions/v1beta1/zz_generated.conversion.go @@ -81,8 +81,6 @@ func RegisterConversions(scheme *runtime.Scheme) error { Convert_extensions_HTTPIngressRuleValue_To_v1beta1_HTTPIngressRuleValue, Convert_v1beta1_HostPortRange_To_extensions_HostPortRange, Convert_extensions_HostPortRange_To_v1beta1_HostPortRange, - Convert_v1beta1_IDRange_To_extensions_IDRange, - Convert_extensions_IDRange_To_v1beta1_IDRange, Convert_v1beta1_Ingress_To_extensions_Ingress, Convert_extensions_Ingress_To_v1beta1_Ingress, Convert_v1beta1_IngressBackend_To_extensions_IngressBackend, @@ -684,7 +682,7 @@ func autoConvert_extensions_DeploymentStrategy_To_v1beta1_DeploymentStrategy(in func autoConvert_v1beta1_FSGroupStrategyOptions_To_extensions_FSGroupStrategyOptions(in *FSGroupStrategyOptions, out *extensions.FSGroupStrategyOptions, s conversion.Scope) error { out.Rule = extensions.FSGroupStrategyType(in.Rule) - out.Ranges = *(*[]extensions.IDRange)(unsafe.Pointer(&in.Ranges)) + out.Ranges = *(*[]extensions.GroupIDRange)(unsafe.Pointer(&in.Ranges)) return nil } @@ -776,28 +774,6 @@ func Convert_extensions_HostPortRange_To_v1beta1_HostPortRange(in *extensions.Ho return autoConvert_extensions_HostPortRange_To_v1beta1_HostPortRange(in, out, s) } -func autoConvert_v1beta1_IDRange_To_extensions_IDRange(in *IDRange, out *extensions.IDRange, s conversion.Scope) error { - out.Min = in.Min - out.Max = in.Max - return nil -} - -// Convert_v1beta1_IDRange_To_extensions_IDRange is an autogenerated conversion function. -func Convert_v1beta1_IDRange_To_extensions_IDRange(in *IDRange, out *extensions.IDRange, s conversion.Scope) error { - return autoConvert_v1beta1_IDRange_To_extensions_IDRange(in, out, s) -} - -func autoConvert_extensions_IDRange_To_v1beta1_IDRange(in *extensions.IDRange, out *IDRange, s conversion.Scope) error { - out.Min = in.Min - out.Max = in.Max - return nil -} - -// Convert_extensions_IDRange_To_v1beta1_IDRange is an autogenerated conversion function. -func Convert_extensions_IDRange_To_v1beta1_IDRange(in *extensions.IDRange, out *IDRange, s conversion.Scope) error { - return autoConvert_extensions_IDRange_To_v1beta1_IDRange(in, out, s) -} - func autoConvert_v1beta1_Ingress_To_extensions_Ingress(in *Ingress, out *extensions.Ingress, s conversion.Scope) error { out.ObjectMeta = in.ObjectMeta if err := Convert_v1beta1_IngressSpec_To_extensions_IngressSpec(&in.Spec, &out.Spec, s); err != nil { @@ -1504,7 +1480,7 @@ func autoConvert_extensions_RollingUpdateDeployment_To_v1beta1_RollingUpdateDepl func autoConvert_v1beta1_RunAsUserStrategyOptions_To_extensions_RunAsUserStrategyOptions(in *RunAsUserStrategyOptions, out *extensions.RunAsUserStrategyOptions, s conversion.Scope) error { out.Rule = extensions.RunAsUserStrategy(in.Rule) - out.Ranges = *(*[]extensions.IDRange)(unsafe.Pointer(&in.Ranges)) + out.Ranges = *(*[]extensions.UserIDRange)(unsafe.Pointer(&in.Ranges)) return nil } @@ -1613,7 +1589,7 @@ func autoConvert_extensions_ScaleStatus_To_v1beta1_ScaleStatus(in *extensions.Sc func autoConvert_v1beta1_SupplementalGroupsStrategyOptions_To_extensions_SupplementalGroupsStrategyOptions(in *SupplementalGroupsStrategyOptions, out *extensions.SupplementalGroupsStrategyOptions, s conversion.Scope) error { out.Rule = extensions.SupplementalGroupsStrategyType(in.Rule) - out.Ranges = *(*[]extensions.IDRange)(unsafe.Pointer(&in.Ranges)) + out.Ranges = *(*[]extensions.GroupIDRange)(unsafe.Pointer(&in.Ranges)) return nil } diff --git a/pkg/apis/extensions/validation/validation.go b/pkg/apis/extensions/validation/validation.go index de22dfcc1d..fa5cefca5c 100644 --- a/pkg/apis/extensions/validation/validation.go +++ b/pkg/apis/extensions/validation/validation.go @@ -750,7 +750,7 @@ func validatePSPRunAsUser(fldPath *field.Path, runAsUser *extensions.RunAsUserSt // validate range settings for idx, rng := range runAsUser.Ranges { - allErrs = append(allErrs, validateIDRanges(fldPath.Child("ranges").Index(idx), rng)...) + allErrs = append(allErrs, validateUserIDRange(fldPath.Child("ranges").Index(idx), rng)...) } return allErrs @@ -769,7 +769,7 @@ func validatePSPFSGroup(fldPath *field.Path, groupOptions *extensions.FSGroupStr } for idx, rng := range groupOptions.Ranges { - allErrs = append(allErrs, validateIDRanges(fldPath.Child("ranges").Index(idx), rng)...) + allErrs = append(allErrs, validateGroupIDRange(fldPath.Child("ranges").Index(idx), rng)...) } return allErrs } @@ -787,7 +787,7 @@ func validatePSPSupplementalGroup(fldPath *field.Path, groupOptions *extensions. } for idx, rng := range groupOptions.Ranges { - allErrs = append(allErrs, validateIDRanges(fldPath.Child("ranges").Index(idx), rng)...) + allErrs = append(allErrs, validateGroupIDRange(fldPath.Child("ranges").Index(idx), rng)...) } return allErrs } @@ -837,20 +837,28 @@ func validatePodSecurityPolicySysctls(fldPath *field.Path, sysctls []string) fie return allErrs } +func validateUserIDRange(fldPath *field.Path, rng extensions.UserIDRange) field.ErrorList { + return validateIDRanges(fldPath, int64(rng.Min), int64(rng.Max)) +} + +func validateGroupIDRange(fldPath *field.Path, rng extensions.GroupIDRange) field.ErrorList { + return validateIDRanges(fldPath, int64(rng.Min), int64(rng.Max)) +} + // validateIDRanges ensures the range is valid. -func validateIDRanges(fldPath *field.Path, rng extensions.IDRange) field.ErrorList { +func validateIDRanges(fldPath *field.Path, min, max int64) field.ErrorList { allErrs := field.ErrorList{} // if 0 <= Min <= Max then we do not need to validate max. It is always greater than or // equal to 0 and Min. - if rng.Min < 0 { - allErrs = append(allErrs, field.Invalid(fldPath.Child("min"), rng.Min, "min cannot be negative")) + if min < 0 { + allErrs = append(allErrs, field.Invalid(fldPath.Child("min"), min, "min cannot be negative")) } - if rng.Max < 0 { - allErrs = append(allErrs, field.Invalid(fldPath.Child("max"), rng.Max, "max cannot be negative")) + if max < 0 { + allErrs = append(allErrs, field.Invalid(fldPath.Child("max"), max, "max cannot be negative")) } - if rng.Min > rng.Max { - allErrs = append(allErrs, field.Invalid(fldPath.Child("min"), rng.Min, "min cannot be greater than max")) + if min > max { + allErrs = append(allErrs, field.Invalid(fldPath.Child("min"), min, "min cannot be greater than max")) } return allErrs diff --git a/pkg/apis/extensions/validation/validation_test.go b/pkg/apis/extensions/validation/validation_test.go index 6bfe9beba8..8ded02a59b 100644 --- a/pkg/apis/extensions/validation/validation_test.go +++ b/pkg/apis/extensions/validation/validation_test.go @@ -2346,9 +2346,7 @@ func TestValidatePodSecurityPolicy(t *testing.T) { invalidUIDPSP := validPSP() invalidUIDPSP.Spec.RunAsUser.Rule = extensions.RunAsUserStrategyMustRunAs - invalidUIDPSP.Spec.RunAsUser.Ranges = []extensions.IDRange{ - {Min: -1, Max: 1}, - } + invalidUIDPSP.Spec.RunAsUser.Ranges = []extensions.UserIDRange{{Min: -1, Max: 1}} missingObjectMetaName := validPSP() missingObjectMetaName.ObjectMeta.Name = "" @@ -2366,17 +2364,17 @@ func TestValidatePodSecurityPolicy(t *testing.T) { invalidSupGroupStratType.Spec.SupplementalGroups.Rule = "invalid" invalidRangeMinGreaterThanMax := validPSP() - invalidRangeMinGreaterThanMax.Spec.FSGroup.Ranges = []extensions.IDRange{ + invalidRangeMinGreaterThanMax.Spec.FSGroup.Ranges = []extensions.GroupIDRange{ {Min: 2, Max: 1}, } invalidRangeNegativeMin := validPSP() - invalidRangeNegativeMin.Spec.FSGroup.Ranges = []extensions.IDRange{ + invalidRangeNegativeMin.Spec.FSGroup.Ranges = []extensions.GroupIDRange{ {Min: -1, Max: 10}, } invalidRangeNegativeMax := validPSP() - invalidRangeNegativeMax.Spec.FSGroup.Ranges = []extensions.IDRange{ + invalidRangeNegativeMax.Spec.FSGroup.Ranges = []extensions.GroupIDRange{ {Min: 1, Max: -10}, } @@ -2558,7 +2556,7 @@ func TestValidatePodSecurityPolicy(t *testing.T) { mustRunAs.Spec.FSGroup.Rule = extensions.FSGroupStrategyMustRunAs mustRunAs.Spec.SupplementalGroups.Rule = extensions.SupplementalGroupsStrategyMustRunAs mustRunAs.Spec.RunAsUser.Rule = extensions.RunAsUserStrategyMustRunAs - mustRunAs.Spec.RunAsUser.Ranges = []extensions.IDRange{ + mustRunAs.Spec.RunAsUser.Ranges = []extensions.UserIDRange{ {Min: 1, Max: 1}, } mustRunAs.Spec.SELinux.Rule = extensions.SELinuxStrategyMustRunAs diff --git a/pkg/apis/extensions/zz_generated.deepcopy.go b/pkg/apis/extensions/zz_generated.deepcopy.go index d2187b5e42..a208d844fc 100644 --- a/pkg/apis/extensions/zz_generated.deepcopy.go +++ b/pkg/apis/extensions/zz_generated.deepcopy.go @@ -55,10 +55,10 @@ func RegisterDeepCopies(scheme *runtime.Scheme) error { conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_DeploymentStatus, InType: reflect.TypeOf(&DeploymentStatus{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_DeploymentStrategy, InType: reflect.TypeOf(&DeploymentStrategy{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_FSGroupStrategyOptions, InType: reflect.TypeOf(&FSGroupStrategyOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_GroupIDRange, InType: reflect.TypeOf(&GroupIDRange{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_HTTPIngressPath, InType: reflect.TypeOf(&HTTPIngressPath{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_HTTPIngressRuleValue, InType: reflect.TypeOf(&HTTPIngressRuleValue{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_HostPortRange, InType: reflect.TypeOf(&HostPortRange{})}, - conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_IDRange, InType: reflect.TypeOf(&IDRange{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_Ingress, InType: reflect.TypeOf(&Ingress{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_IngressBackend, InType: reflect.TypeOf(&IngressBackend{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_IngressList, InType: reflect.TypeOf(&IngressList{})}, @@ -95,6 +95,7 @@ func RegisterDeepCopies(scheme *runtime.Scheme) error { conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_ThirdPartyResourceData, InType: reflect.TypeOf(&ThirdPartyResourceData{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_ThirdPartyResourceDataList, InType: reflect.TypeOf(&ThirdPartyResourceDataList{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_ThirdPartyResourceList, InType: reflect.TypeOf(&ThirdPartyResourceList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_UserIDRange, InType: reflect.TypeOf(&UserIDRange{})}, ) } @@ -386,13 +387,22 @@ func DeepCopy_extensions_FSGroupStrategyOptions(in interface{}, out interface{}, *out = *in if in.Ranges != nil { in, out := &in.Ranges, &out.Ranges - *out = make([]IDRange, len(*in)) + *out = make([]GroupIDRange, len(*in)) copy(*out, *in) } return nil } } +func DeepCopy_extensions_GroupIDRange(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*GroupIDRange) + out := out.(*GroupIDRange) + *out = *in + return nil + } +} + func DeepCopy_extensions_HTTPIngressPath(in interface{}, out interface{}, c *conversion.Cloner) error { { in := in.(*HTTPIngressPath) @@ -425,15 +435,6 @@ func DeepCopy_extensions_HostPortRange(in interface{}, out interface{}, c *conve } } -func DeepCopy_extensions_IDRange(in interface{}, out interface{}, c *conversion.Cloner) error { - { - in := in.(*IDRange) - out := out.(*IDRange) - *out = *in - return nil - } -} - func DeepCopy_extensions_Ingress(in interface{}, out interface{}, c *conversion.Cloner) error { { in := in.(*Ingress) @@ -906,7 +907,7 @@ func DeepCopy_extensions_RunAsUserStrategyOptions(in interface{}, out interface{ *out = *in if in.Ranges != nil { in, out := &in.Ranges, &out.Ranges - *out = make([]IDRange, len(*in)) + *out = make([]UserIDRange, len(*in)) copy(*out, *in) } return nil @@ -977,7 +978,7 @@ func DeepCopy_extensions_SupplementalGroupsStrategyOptions(in interface{}, out i *out = *in if in.Ranges != nil { in, out := &in.Ranges, &out.Ranges - *out = make([]IDRange, len(*in)) + *out = make([]GroupIDRange, len(*in)) copy(*out, *in) } return nil @@ -1057,3 +1058,12 @@ func DeepCopy_extensions_ThirdPartyResourceList(in interface{}, out interface{}, return nil } } + +func DeepCopy_extensions_UserIDRange(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*UserIDRange) + out := out.(*UserIDRange) + *out = *in + return nil + } +} diff --git a/pkg/kubelet/dockershim/securitycontext/BUILD b/pkg/kubelet/dockershim/securitycontext/BUILD index 21a6ddcf34..1b48859b45 100644 --- a/pkg/kubelet/dockershim/securitycontext/BUILD +++ b/pkg/kubelet/dockershim/securitycontext/BUILD @@ -36,6 +36,7 @@ go_test( "//pkg/api/testing:go_default_library", "//pkg/api/v1:go_default_library", "//vendor/github.com/docker/engine-api/types/container:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", ], ) diff --git a/pkg/kubelet/dockershim/securitycontext/provider_test.go b/pkg/kubelet/dockershim/securitycontext/provider_test.go index 3e271d90b1..3df2f2f657 100644 --- a/pkg/kubelet/dockershim/securitycontext/provider_test.go +++ b/pkg/kubelet/dockershim/securitycontext/provider_test.go @@ -23,13 +23,14 @@ import ( "testing" dockercontainer "github.com/docker/engine-api/types/container" + "k8s.io/apimachinery/pkg/types" apitesting "k8s.io/kubernetes/pkg/api/testing" "k8s.io/kubernetes/pkg/api/v1" ) func TestModifyContainerConfig(t *testing.T) { - var uid int64 = 123 - var overrideUid int64 = 321 + userID := types.UnixUserID(123) + overrideUserID := types.UnixUserID(321) cases := []struct { name string @@ -40,10 +41,10 @@ func TestModifyContainerConfig(t *testing.T) { { name: "container.SecurityContext.RunAsUser set", sc: &v1.SecurityContext{ - RunAsUser: &uid, + RunAsUser: &userID, }, expected: &dockercontainer.Config{ - User: strconv.FormatInt(uid, 10), + User: strconv.FormatInt(int64(userID), 10), }, }, { @@ -54,22 +55,22 @@ func TestModifyContainerConfig(t *testing.T) { { name: "pod.Spec.SecurityContext.RunAsUser set", podSc: &v1.PodSecurityContext{ - RunAsUser: &uid, + RunAsUser: &userID, }, expected: &dockercontainer.Config{ - User: strconv.FormatInt(uid, 10), + User: strconv.FormatInt(int64(userID), 10), }, }, { name: "container.SecurityContext.RunAsUser overrides pod.Spec.SecurityContext.RunAsUser", podSc: &v1.PodSecurityContext{ - RunAsUser: &uid, + RunAsUser: &userID, }, sc: &v1.SecurityContext{ - RunAsUser: &overrideUid, + RunAsUser: &overrideUserID, }, expected: &dockercontainer.Config{ - User: strconv.FormatInt(overrideUid, 10), + User: strconv.FormatInt(int64(overrideUserID), 10), }, }, } @@ -176,7 +177,7 @@ func TestModifyHostConfig(t *testing.T) { func TestModifyHostConfigPodSecurityContext(t *testing.T) { supplementalGroupsSC := &v1.PodSecurityContext{} - supplementalGroupsSC.SupplementalGroups = []int64{2222} + supplementalGroupsSC.SupplementalGroups = []types.UnixGroupID{2222} supplementalGroupHC := fullValidHostConfig() supplementalGroupHC.GroupAdd = []string{"2222"} fsGroupHC := fullValidHostConfig() @@ -185,7 +186,7 @@ func TestModifyHostConfigPodSecurityContext(t *testing.T) { extraSupplementalGroupHC.GroupAdd = []string{"1234"} bothHC := fullValidHostConfig() bothHC.GroupAdd = []string{"2222", "1234"} - fsGroup := int64(1234) + fsGroup := types.UnixGroupID(1234) extraSupplementalGroup := []int64{1234} testCases := map[string]struct { @@ -210,7 +211,7 @@ func TestModifyHostConfigPodSecurityContext(t *testing.T) { }, "FSGroup + SupplementalGroups": { securityContext: &v1.PodSecurityContext{ - SupplementalGroups: []int64{2222}, + SupplementalGroups: []types.UnixGroupID{2222}, FSGroup: &fsGroup, }, expected: bothHC, diff --git a/pkg/kubelet/kubelet_volumes_test.go b/pkg/kubelet/kubelet_volumes_test.go index fab479966a..54eb794e34 100644 --- a/pkg/kubelet/kubelet_volumes_test.go +++ b/pkg/kubelet/kubelet_volumes_test.go @@ -452,10 +452,10 @@ func (f *stubVolume) CanMount() error { return nil } -func (f *stubVolume) SetUp(fsGroup *int64) error { +func (f *stubVolume) SetUp(fsGroup *types.UnixGroupID) error { return nil } -func (f *stubVolume) SetUpAt(dir string, fsGroup *int64) error { +func (f *stubVolume) SetUpAt(dir string, fsGroup *types.UnixGroupID) error { return nil } diff --git a/pkg/kubelet/kuberuntime/kuberuntime_sandbox.go b/pkg/kubelet/kuberuntime/kuberuntime_sandbox.go index b88be53ad1..c9d3697c9e 100644 --- a/pkg/kubelet/kuberuntime/kuberuntime_sandbox.go +++ b/pkg/kubelet/kuberuntime/kuberuntime_sandbox.go @@ -138,7 +138,7 @@ func (m *kubeGenericRuntimeManager) generatePodSandboxLinuxConfig(pod *v1.Pod, c if pod.Spec.SecurityContext != nil { sc := pod.Spec.SecurityContext if sc.RunAsUser != nil { - lc.SecurityContext.RunAsUser = &runtimeapi.Int64Value{Value: *sc.RunAsUser} + lc.SecurityContext.RunAsUser = &runtimeapi.Int64Value{Value: int64(*sc.RunAsUser)} } lc.SecurityContext.NamespaceOptions = &runtimeapi.NamespaceOption{ HostNetwork: pod.Spec.HostNetwork, @@ -147,13 +147,15 @@ func (m *kubeGenericRuntimeManager) generatePodSandboxLinuxConfig(pod *v1.Pod, c } if sc.FSGroup != nil { - lc.SecurityContext.SupplementalGroups = append(lc.SecurityContext.SupplementalGroups, *sc.FSGroup) + lc.SecurityContext.SupplementalGroups = append(lc.SecurityContext.SupplementalGroups, int64(*sc.FSGroup)) } if groups := m.runtimeHelper.GetExtraSupplementalGroupsForPod(pod); len(groups) > 0 { lc.SecurityContext.SupplementalGroups = append(lc.SecurityContext.SupplementalGroups, groups...) } if sc.SupplementalGroups != nil { - lc.SecurityContext.SupplementalGroups = append(lc.SecurityContext.SupplementalGroups, sc.SupplementalGroups...) + for _, sg := range sc.SupplementalGroups { + lc.SecurityContext.SupplementalGroups = append(lc.SecurityContext.SupplementalGroups, int64(sg)) + } } if sc.SELinuxOptions != nil { lc.SecurityContext.SelinuxOptions = &runtimeapi.SELinuxOption{ diff --git a/pkg/kubelet/kuberuntime/security_context.go b/pkg/kubelet/kuberuntime/security_context.go index 2254a42151..8e9a3a9e0f 100644 --- a/pkg/kubelet/kuberuntime/security_context.go +++ b/pkg/kubelet/kuberuntime/security_context.go @@ -53,11 +53,13 @@ func (m *kubeGenericRuntimeManager) determineEffectiveSecurityContext(pod *v1.Po podSc := pod.Spec.SecurityContext if podSc != nil { if podSc.FSGroup != nil { - synthesized.SupplementalGroups = append(synthesized.SupplementalGroups, *podSc.FSGroup) + synthesized.SupplementalGroups = append(synthesized.SupplementalGroups, int64(*podSc.FSGroup)) } if podSc.SupplementalGroups != nil { - synthesized.SupplementalGroups = append(synthesized.SupplementalGroups, podSc.SupplementalGroups...) + for _, sg := range podSc.SupplementalGroups { + synthesized.SupplementalGroups = append(synthesized.SupplementalGroups, int64(sg)) + } } } if groups := m.runtimeHelper.GetExtraSupplementalGroupsForPod(pod); len(groups) > 0 { @@ -99,7 +101,7 @@ func convertToRuntimeSecurityContext(securityContext *v1.SecurityContext) *runti SelinuxOptions: convertToRuntimeSELinuxOption(securityContext.SELinuxOptions), } if securityContext.RunAsUser != nil { - sc.RunAsUser = &runtimeapi.Int64Value{Value: *securityContext.RunAsUser} + sc.RunAsUser = &runtimeapi.Int64Value{Value: int64(*securityContext.RunAsUser)} } if securityContext.Privileged != nil { sc.Privileged = *securityContext.Privileged diff --git a/pkg/kubelet/rkt/rkt_test.go b/pkg/kubelet/rkt/rkt_test.go index d38a48c3e9..a083e98db4 100644 --- a/pkg/kubelet/rkt/rkt_test.go +++ b/pkg/kubelet/rkt/rkt_test.go @@ -972,10 +972,10 @@ func TestSetApp(t *testing.T) { } defer os.RemoveAll(tmpDir) - rootUser := int64(0) - nonRootUser := int64(42) + rootUser := kubetypes.UnixUserID(0) + nonRootUser := kubetypes.UnixUserID(42) runAsNonRootTrue := true - fsgid := int64(3) + fsgid := kubetypes.UnixGroupID(3) tests := []struct { container *v1.Container @@ -1081,8 +1081,11 @@ func TestSetApp(t *testing.T) { RunAsNonRoot: &runAsNonRootTrue, }, podCtx: &v1.PodSecurityContext{ - SupplementalGroups: []int64{1, 2}, - FSGroup: &fsgid, + SupplementalGroups: []kubetypes.UnixGroupID{ + kubetypes.UnixGroupID(1), + kubetypes.UnixGroupID(2), + }, + FSGroup: &fsgid, }, supplementalGids: []int64{4}, expect: &appctypes.App{ @@ -1143,8 +1146,11 @@ func TestSetApp(t *testing.T) { RunAsNonRoot: &runAsNonRootTrue, }, podCtx: &v1.PodSecurityContext{ - SupplementalGroups: []int64{1, 2}, - FSGroup: &fsgid, + SupplementalGroups: []kubetypes.UnixGroupID{ + kubetypes.UnixGroupID(1), + kubetypes.UnixGroupID(2), + }, + FSGroup: &fsgid, }, supplementalGids: []int64{4}, expect: &appctypes.App{ diff --git a/pkg/kubelet/volumemanager/BUILD b/pkg/kubelet/volumemanager/BUILD index f48c97498f..855089f3a8 100644 --- a/pkg/kubelet/volumemanager/BUILD +++ b/pkg/kubelet/volumemanager/BUILD @@ -59,6 +59,7 @@ go_test( "//pkg/volume/util/types:go_default_library", "//pkg/volume/util/volumehelper:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/k8s.io/client-go/tools/record:go_default_library", "//vendor/k8s.io/client-go/util/testing:go_default_library", diff --git a/pkg/kubelet/volumemanager/volume_manager.go b/pkg/kubelet/volumemanager/volume_manager.go index da2f4a5f47..7bd2535390 100644 --- a/pkg/kubelet/volumemanager/volume_manager.go +++ b/pkg/kubelet/volumemanager/volume_manager.go @@ -434,7 +434,7 @@ func getExtraSupplementalGid(volumeGidValue string, pod *v1.Pod) (int64, bool) { if pod.Spec.SecurityContext != nil { for _, existingGid := range pod.Spec.SecurityContext.SupplementalGroups { - if gid == existingGid { + if gid == int64(existingGid) { return 0, false } } diff --git a/pkg/kubelet/volumemanager/volume_manager_test.go b/pkg/kubelet/volumemanager/volume_manager_test.go index 93b2e834fa..290e212abb 100644 --- a/pkg/kubelet/volumemanager/volume_manager_test.go +++ b/pkg/kubelet/volumemanager/volume_manager_test.go @@ -24,6 +24,7 @@ import ( "time" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + kubetypes "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/client-go/tools/record" utiltesting "k8s.io/client-go/util/testing" @@ -115,7 +116,7 @@ func TestGetExtraSupplementalGroupsForPod(t *testing.T) { expected: []int64{777}, }, { - gidAnnotation: strconv.FormatInt(existingGid, 10), + gidAnnotation: strconv.FormatInt(int64(existingGid), 10), expected: []int64{}, }, { @@ -240,7 +241,7 @@ func createObjects() (*v1.Node, *v1.Pod, *v1.PersistentVolume, *v1.PersistentVol }, }, SecurityContext: &v1.PodSecurityContext{ - SupplementalGroups: []int64{555}, + SupplementalGroups: []kubetypes.UnixGroupID{555}, }, }, } diff --git a/pkg/security/podsecuritypolicy/BUILD b/pkg/security/podsecuritypolicy/BUILD index 339282846b..4a13e2f54e 100644 --- a/pkg/security/podsecuritypolicy/BUILD +++ b/pkg/security/podsecuritypolicy/BUILD @@ -29,6 +29,7 @@ go_library( "//pkg/security/podsecuritypolicy/user:go_default_library", "//pkg/security/podsecuritypolicy/util:go_default_library", "//pkg/util/maps:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/errors:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", ], @@ -48,6 +49,7 @@ go_test( "//pkg/security/podsecuritypolicy/util:go_default_library", "//vendor/github.com/davecgh/go-spew/spew:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/diff:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", ], diff --git a/pkg/security/podsecuritypolicy/group/BUILD b/pkg/security/podsecuritypolicy/group/BUILD index d599281500..7e94065758 100644 --- a/pkg/security/podsecuritypolicy/group/BUILD +++ b/pkg/security/podsecuritypolicy/group/BUILD @@ -21,6 +21,7 @@ go_library( "//pkg/api:go_default_library", "//pkg/apis/extensions:go_default_library", "//pkg/security/podsecuritypolicy/util:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", ], ) @@ -36,6 +37,7 @@ go_test( deps = [ "//pkg/api:go_default_library", "//pkg/apis/extensions:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", ], ) diff --git a/pkg/security/podsecuritypolicy/group/mustrunas.go b/pkg/security/podsecuritypolicy/group/mustrunas.go index 086418086b..30763853f9 100644 --- a/pkg/security/podsecuritypolicy/group/mustrunas.go +++ b/pkg/security/podsecuritypolicy/group/mustrunas.go @@ -19,6 +19,7 @@ package group import ( "fmt" + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/extensions" @@ -27,14 +28,14 @@ import ( // mustRunAs implements the GroupStrategy interface type mustRunAs struct { - ranges []extensions.IDRange + ranges []extensions.GroupIDRange field string } var _ GroupStrategy = &mustRunAs{} // NewMustRunAs provides a new MustRunAs strategy based on ranges. -func NewMustRunAs(ranges []extensions.IDRange, field string) (GroupStrategy, error) { +func NewMustRunAs(ranges []extensions.GroupIDRange, field string) (GroupStrategy, error) { if len(ranges) == 0 { return nil, fmt.Errorf("ranges must be supplied for MustRunAs") } @@ -46,14 +47,14 @@ func NewMustRunAs(ranges []extensions.IDRange, field string) (GroupStrategy, err // Generate creates the group based on policy rules. By default this returns the first group of the // first range (min val). -func (s *mustRunAs) Generate(pod *api.Pod) ([]int64, error) { - return []int64{s.ranges[0].Min}, nil +func (s *mustRunAs) Generate(pod *api.Pod) ([]types.UnixGroupID, error) { + return []types.UnixGroupID{s.ranges[0].Min}, nil } // Generate a single value to be applied. This is used for FSGroup. This strategy will return // the first group of the first range (min val). -func (s *mustRunAs) GenerateSingle(pod *api.Pod) (*int64, error) { - single := new(int64) +func (s *mustRunAs) GenerateSingle(pod *api.Pod) (*types.UnixGroupID, error) { + single := new(types.UnixGroupID) *single = s.ranges[0].Min return single, nil } @@ -61,7 +62,7 @@ func (s *mustRunAs) GenerateSingle(pod *api.Pod) (*int64, error) { // Validate ensures that the specified values fall within the range of the strategy. // Groups are passed in here to allow this strategy to support multiple group fields (fsgroup and // supplemental groups). -func (s *mustRunAs) Validate(pod *api.Pod, groups []int64) field.ErrorList { +func (s *mustRunAs) Validate(pod *api.Pod, groups []types.UnixGroupID) field.ErrorList { allErrs := field.ErrorList{} if pod.Spec.SecurityContext == nil { @@ -83,9 +84,9 @@ func (s *mustRunAs) Validate(pod *api.Pod, groups []int64) field.ErrorList { return allErrs } -func (s *mustRunAs) isGroupValid(group int64) bool { +func (s *mustRunAs) isGroupValid(group types.UnixGroupID) bool { for _, rng := range s.ranges { - if psputil.FallsInRange(group, rng) { + if psputil.GroupFallsInRange(group, rng) { return true } } diff --git a/pkg/security/podsecuritypolicy/group/mustrunas_test.go b/pkg/security/podsecuritypolicy/group/mustrunas_test.go index e3473aef90..3e6ff6c218 100644 --- a/pkg/security/podsecuritypolicy/group/mustrunas_test.go +++ b/pkg/security/podsecuritypolicy/group/mustrunas_test.go @@ -19,20 +19,21 @@ package group import ( "testing" + "k8s.io/apimachinery/pkg/types" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/extensions" ) func TestMustRunAsOptions(t *testing.T) { tests := map[string]struct { - ranges []extensions.IDRange + ranges []extensions.GroupIDRange pass bool }{ "empty": { - ranges: []extensions.IDRange{}, + ranges: []extensions.GroupIDRange{}, }, "ranges": { - ranges: []extensions.IDRange{ + ranges: []extensions.GroupIDRange{ {Min: 1, Max: 1}, }, pass: true, @@ -52,27 +53,27 @@ func TestMustRunAsOptions(t *testing.T) { func TestGenerate(t *testing.T) { tests := map[string]struct { - ranges []extensions.IDRange - expected []int64 + ranges []extensions.GroupIDRange + expected []types.UnixGroupID }{ "multi value": { - ranges: []extensions.IDRange{ + ranges: []extensions.GroupIDRange{ {Min: 1, Max: 2}, }, - expected: []int64{1}, + expected: []types.UnixGroupID{1}, }, "single value": { - ranges: []extensions.IDRange{ + ranges: []extensions.GroupIDRange{ {Min: 1, Max: 1}, }, - expected: []int64{1}, + expected: []types.UnixGroupID{1}, }, "multi range": { - ranges: []extensions.IDRange{ + ranges: []extensions.GroupIDRange{ {Min: 1, Max: 1}, {Min: 2, Max: 500}, }, - expected: []int64{1}, + expected: []types.UnixGroupID{1}, }, } @@ -118,59 +119,59 @@ func TestValidate(t *testing.T) { } tests := map[string]struct { - ranges []extensions.IDRange + ranges []extensions.GroupIDRange pod *api.Pod - groups []int64 + groups []types.UnixGroupID pass bool }{ "nil security context": { pod: &api.Pod{}, - ranges: []extensions.IDRange{ + ranges: []extensions.GroupIDRange{ {Min: 1, Max: 3}, }, }, "empty groups": { pod: validPod(), - ranges: []extensions.IDRange{ + ranges: []extensions.GroupIDRange{ {Min: 1, Max: 3}, }, }, "not in range": { pod: validPod(), - groups: []int64{5}, - ranges: []extensions.IDRange{ + groups: []types.UnixGroupID{5}, + ranges: []extensions.GroupIDRange{ {Min: 1, Max: 3}, {Min: 4, Max: 4}, }, }, "in range 1": { pod: validPod(), - groups: []int64{2}, - ranges: []extensions.IDRange{ + groups: []types.UnixGroupID{2}, + ranges: []extensions.GroupIDRange{ {Min: 1, Max: 3}, }, pass: true, }, "in range boundry min": { pod: validPod(), - groups: []int64{1}, - ranges: []extensions.IDRange{ + groups: []types.UnixGroupID{1}, + ranges: []extensions.GroupIDRange{ {Min: 1, Max: 3}, }, pass: true, }, "in range boundry max": { pod: validPod(), - groups: []int64{3}, - ranges: []extensions.IDRange{ + groups: []types.UnixGroupID{3}, + ranges: []extensions.GroupIDRange{ {Min: 1, Max: 3}, }, pass: true, }, "singular range": { pod: validPod(), - groups: []int64{4}, - ranges: []extensions.IDRange{ + groups: []types.UnixGroupID{4}, + ranges: []extensions.GroupIDRange{ {Min: 4, Max: 4}, }, pass: true, diff --git a/pkg/security/podsecuritypolicy/group/runasany.go b/pkg/security/podsecuritypolicy/group/runasany.go index 0d3f1182e0..e2f728e5d7 100644 --- a/pkg/security/podsecuritypolicy/group/runasany.go +++ b/pkg/security/podsecuritypolicy/group/runasany.go @@ -17,6 +17,7 @@ limitations under the License. package group import ( + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/kubernetes/pkg/api" ) @@ -33,17 +34,17 @@ func NewRunAsAny() (GroupStrategy, error) { } // Generate creates the group based on policy rules. This strategy returns an empty slice. -func (s *runAsAny) Generate(pod *api.Pod) ([]int64, error) { - return []int64{}, nil +func (s *runAsAny) Generate(pod *api.Pod) ([]types.UnixGroupID, error) { + return []types.UnixGroupID{}, nil } // Generate a single value to be applied. This is used for FSGroup. This strategy returns nil. -func (s *runAsAny) GenerateSingle(pod *api.Pod) (*int64, error) { +func (s *runAsAny) GenerateSingle(pod *api.Pod) (*types.UnixGroupID, error) { return nil, nil } // Validate ensures that the specified values fall within the range of the strategy. -func (s *runAsAny) Validate(pod *api.Pod, groups []int64) field.ErrorList { +func (s *runAsAny) Validate(pod *api.Pod, groups []types.UnixGroupID) field.ErrorList { return field.ErrorList{} } diff --git a/pkg/security/podsecuritypolicy/group/types.go b/pkg/security/podsecuritypolicy/group/types.go index fa3a11d97d..50245f539c 100644 --- a/pkg/security/podsecuritypolicy/group/types.go +++ b/pkg/security/podsecuritypolicy/group/types.go @@ -17,6 +17,7 @@ limitations under the License. package group import ( + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/kubernetes/pkg/api" ) @@ -26,10 +27,10 @@ type GroupStrategy interface { // Generate creates the group based on policy rules. The underlying implementation can // decide whether it will return a full range of values or a subset of values from the // configured ranges. - Generate(pod *api.Pod) ([]int64, error) + Generate(pod *api.Pod) ([]types.UnixGroupID, error) // Generate a single value to be applied. The underlying implementation decides which // value to return if configured with multiple ranges. This is used for FSGroup. - GenerateSingle(pod *api.Pod) (*int64, error) + GenerateSingle(pod *api.Pod) (*types.UnixGroupID, error) // Validate ensures that the specified values fall within the range of the strategy. - Validate(pod *api.Pod, groups []int64) field.ErrorList + Validate(pod *api.Pod, groups []types.UnixGroupID) field.ErrorList } diff --git a/pkg/security/podsecuritypolicy/provider.go b/pkg/security/podsecuritypolicy/provider.go index a267dd250a..0f72f79c11 100644 --- a/pkg/security/podsecuritypolicy/provider.go +++ b/pkg/security/podsecuritypolicy/provider.go @@ -19,6 +19,7 @@ package podsecuritypolicy import ( "fmt" + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/extensions" @@ -194,7 +195,7 @@ func (s *simpleProvider) ValidatePodSecurityContext(pod *api.Pod, fldPath *field return allErrs } - fsGroups := []int64{} + fsGroups := []types.UnixGroupID{} if pod.Spec.SecurityContext.FSGroup != nil { fsGroups = append(fsGroups, *pod.Spec.SecurityContext.FSGroup) } diff --git a/pkg/security/podsecuritypolicy/provider_test.go b/pkg/security/podsecuritypolicy/provider_test.go index 3e29ec1ae6..c50ccd99b6 100644 --- a/pkg/security/podsecuritypolicy/provider_test.go +++ b/pkg/security/podsecuritypolicy/provider_test.go @@ -25,6 +25,7 @@ import ( "github.com/davecgh/go-spew/spew" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/diff" "k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/kubernetes/pkg/api" @@ -69,13 +70,13 @@ func TestCreatePodSecurityContextNonmutating(t *testing.T) { // these are pod mutating strategies that are tested above FSGroup: extensions.FSGroupStrategyOptions{ Rule: extensions.FSGroupStrategyMustRunAs, - Ranges: []extensions.IDRange{ + Ranges: []extensions.GroupIDRange{ {Min: 1, Max: 1}, }, }, SupplementalGroups: extensions.SupplementalGroupsStrategyOptions{ Rule: extensions.SupplementalGroupsStrategyMustRunAs, - Ranges: []extensions.IDRange{ + Ranges: []extensions.GroupIDRange{ {Min: 1, Max: 1}, }, }, @@ -124,7 +125,7 @@ func TestCreateContainerSecurityContextNonmutating(t *testing.T) { // Create a PSP with strategies that will populate a blank security context createPSP := func() *extensions.PodSecurityPolicy { - var uid int64 = 1 + uid := types.UnixUserID(1) return &extensions.PodSecurityPolicy{ ObjectMeta: metav1.ObjectMeta{ Name: "psp-sa", @@ -138,7 +139,7 @@ func TestCreateContainerSecurityContextNonmutating(t *testing.T) { RequiredDropCapabilities: []api.Capability{"bar"}, RunAsUser: extensions.RunAsUserStrategyOptions{ Rule: extensions.RunAsUserStrategyMustRunAs, - Ranges: []extensions.IDRange{{Min: uid, Max: uid}}, + Ranges: []extensions.UserIDRange{{Min: uid, Max: uid}}, }, SELinux: extensions.SELinuxStrategyOptions{ Rule: extensions.SELinuxStrategyMustRunAs, @@ -195,22 +196,22 @@ func TestValidatePodSecurityContextFailures(t *testing.T) { failHostIPCPod.Spec.SecurityContext.HostIPC = true failSupplementalGroupPod := defaultPod() - failSupplementalGroupPod.Spec.SecurityContext.SupplementalGroups = []int64{999} + failSupplementalGroupPod.Spec.SecurityContext.SupplementalGroups = []types.UnixGroupID{999} failSupplementalGroupPSP := defaultPSP() failSupplementalGroupPSP.Spec.SupplementalGroups = extensions.SupplementalGroupsStrategyOptions{ Rule: extensions.SupplementalGroupsStrategyMustRunAs, - Ranges: []extensions.IDRange{ + Ranges: []extensions.GroupIDRange{ {Min: 1, Max: 1}, }, } failFSGroupPod := defaultPod() - fsGroup := int64(999) + fsGroup := types.UnixGroupID(999) failFSGroupPod.Spec.SecurityContext.FSGroup = &fsGroup failFSGroupPSP := defaultPSP() failFSGroupPSP.Spec.FSGroup = extensions.FSGroupStrategyOptions{ Rule: extensions.FSGroupStrategyMustRunAs, - Ranges: []extensions.IDRange{ + Ranges: []extensions.GroupIDRange{ {Min: 1, Max: 1}, }, } @@ -352,11 +353,11 @@ func TestValidatePodSecurityContextFailures(t *testing.T) { func TestValidateContainerSecurityContextFailures(t *testing.T) { // fail user strat failUserPSP := defaultPSP() - var uid int64 = 999 - var badUID int64 = 1 + uid := types.UnixUserID(999) + badUID := types.UnixUserID(1) failUserPSP.Spec.RunAsUser = extensions.RunAsUserStrategyOptions{ Rule: extensions.RunAsUserStrategyMustRunAs, - Ranges: []extensions.IDRange{{Min: uid, Max: uid}}, + Ranges: []extensions.UserIDRange{{Min: uid, Max: uid}}, } failUserPod := defaultPod() failUserPod.Spec.Containers[0].SecurityContext.RunAsUser = &badUID @@ -511,22 +512,22 @@ func TestValidatePodSecurityContextSuccess(t *testing.T) { supGroupPSP := defaultPSP() supGroupPSP.Spec.SupplementalGroups = extensions.SupplementalGroupsStrategyOptions{ Rule: extensions.SupplementalGroupsStrategyMustRunAs, - Ranges: []extensions.IDRange{ + Ranges: []extensions.GroupIDRange{ {Min: 1, Max: 5}, }, } supGroupPod := defaultPod() - supGroupPod.Spec.SecurityContext.SupplementalGroups = []int64{3} + supGroupPod.Spec.SecurityContext.SupplementalGroups = []types.UnixGroupID{3} fsGroupPSP := defaultPSP() fsGroupPSP.Spec.FSGroup = extensions.FSGroupStrategyOptions{ Rule: extensions.FSGroupStrategyMustRunAs, - Ranges: []extensions.IDRange{ + Ranges: []extensions.GroupIDRange{ {Min: 1, Max: 5}, }, } fsGroupPod := defaultPod() - fsGroup := int64(3) + fsGroup := types.UnixGroupID(3) fsGroupPod.Spec.SecurityContext.FSGroup = &fsGroup seLinuxPod := defaultPod() @@ -649,10 +650,10 @@ func TestValidateContainerSecurityContextSuccess(t *testing.T) { // success user strat userPSP := defaultPSP() - var uid int64 = 999 + uid := types.UnixUserID(999) userPSP.Spec.RunAsUser = extensions.RunAsUserStrategyOptions{ Rule: extensions.RunAsUserStrategyMustRunAs, - Ranges: []extensions.IDRange{{Min: uid, Max: uid}}, + Ranges: []extensions.UserIDRange{{Min: uid, Max: uid}}, } userPod := defaultPod() userPod.Spec.Containers[0].SecurityContext.RunAsUser = &uid diff --git a/pkg/security/podsecuritypolicy/user/BUILD b/pkg/security/podsecuritypolicy/user/BUILD index e7bed5b3ef..9588123f0a 100644 --- a/pkg/security/podsecuritypolicy/user/BUILD +++ b/pkg/security/podsecuritypolicy/user/BUILD @@ -22,6 +22,7 @@ go_library( "//pkg/api:go_default_library", "//pkg/apis/extensions:go_default_library", "//pkg/security/podsecuritypolicy/util:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", ], ) @@ -38,6 +39,7 @@ go_test( deps = [ "//pkg/api:go_default_library", "//pkg/apis/extensions:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", ], ) diff --git a/pkg/security/podsecuritypolicy/user/mustrunas.go b/pkg/security/podsecuritypolicy/user/mustrunas.go index e68be43c3f..5e32bd222f 100644 --- a/pkg/security/podsecuritypolicy/user/mustrunas.go +++ b/pkg/security/podsecuritypolicy/user/mustrunas.go @@ -19,6 +19,7 @@ package user import ( "fmt" + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/extensions" @@ -44,7 +45,7 @@ func NewMustRunAs(options *extensions.RunAsUserStrategyOptions) (RunAsUserStrate } // Generate creates the uid based on policy rules. MustRunAs returns the first range's Min. -func (s *mustRunAs) Generate(pod *api.Pod, container *api.Container) (*int64, error) { +func (s *mustRunAs) Generate(pod *api.Pod, container *api.Container) (*types.UnixUserID, error) { return &s.opts.Ranges[0].Min, nil } @@ -74,9 +75,9 @@ func (s *mustRunAs) Validate(pod *api.Pod, container *api.Container) field.Error return allErrs } -func (s *mustRunAs) isValidUID(id int64) bool { +func (s *mustRunAs) isValidUID(id types.UnixUserID) bool { for _, rng := range s.opts.Ranges { - if psputil.FallsInRange(id, rng) { + if psputil.UserFallsInRange(id, rng) { return true } } diff --git a/pkg/security/podsecuritypolicy/user/mustrunas_test.go b/pkg/security/podsecuritypolicy/user/mustrunas_test.go index 82b7dcd1ff..fa439382b1 100644 --- a/pkg/security/podsecuritypolicy/user/mustrunas_test.go +++ b/pkg/security/podsecuritypolicy/user/mustrunas_test.go @@ -20,6 +20,7 @@ import ( "strings" "testing" + "k8s.io/apimachinery/pkg/types" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/extensions" ) @@ -39,7 +40,7 @@ func TestNewMustRunAs(t *testing.T) { }, "valid opts": { opts: &extensions.RunAsUserStrategyOptions{ - Ranges: []extensions.IDRange{ + Ranges: []extensions.UserIDRange{ {Min: 1, Max: 1}, }, }, @@ -59,7 +60,7 @@ func TestNewMustRunAs(t *testing.T) { func TestGenerate(t *testing.T) { opts := &extensions.RunAsUserStrategyOptions{ - Ranges: []extensions.IDRange{ + Ranges: []extensions.UserIDRange{ {Min: 1, Max: 1}, }, } @@ -78,12 +79,15 @@ func TestGenerate(t *testing.T) { func TestValidate(t *testing.T) { opts := &extensions.RunAsUserStrategyOptions{ - Ranges: []extensions.IDRange{ + Ranges: []extensions.UserIDRange{ {Min: 1, Max: 1}, {Min: 10, Max: 20}, }, } + validID := types.UnixUserID(15) + invalidID := types.UnixUserID(21) + tests := map[string]struct { container *api.Container expectedMsg string @@ -91,7 +95,7 @@ func TestValidate(t *testing.T) { "good container": { container: &api.Container{ SecurityContext: &api.SecurityContext{ - RunAsUser: int64Ptr(15), + RunAsUser: &validID, }, }, }, @@ -112,7 +116,7 @@ func TestValidate(t *testing.T) { "invalid id": { container: &api.Container{ SecurityContext: &api.SecurityContext{ - RunAsUser: int64Ptr(21), + RunAsUser: &invalidID, }, }, expectedMsg: "does not match required range", @@ -146,7 +150,3 @@ func TestValidate(t *testing.T) { } } } - -func int64Ptr(i int64) *int64 { - return &i -} diff --git a/pkg/security/podsecuritypolicy/user/nonroot.go b/pkg/security/podsecuritypolicy/user/nonroot.go index 84f2deb147..9b0455509a 100644 --- a/pkg/security/podsecuritypolicy/user/nonroot.go +++ b/pkg/security/podsecuritypolicy/user/nonroot.go @@ -19,6 +19,7 @@ package user import ( "fmt" + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/extensions" @@ -34,7 +35,7 @@ func NewRunAsNonRoot(options *extensions.RunAsUserStrategyOptions) (RunAsUserStr // Generate creates the uid based on policy rules. This strategy does return a UID. It assumes // that the user will specify a UID or the container image specifies a UID. -func (s *nonRoot) Generate(pod *api.Pod, container *api.Container) (*int64, error) { +func (s *nonRoot) Generate(pod *api.Pod, container *api.Container) (*types.UnixUserID, error) { return nil, nil } diff --git a/pkg/security/podsecuritypolicy/user/nonroot_test.go b/pkg/security/podsecuritypolicy/user/nonroot_test.go index 041333ae55..819a2bcb3e 100644 --- a/pkg/security/podsecuritypolicy/user/nonroot_test.go +++ b/pkg/security/podsecuritypolicy/user/nonroot_test.go @@ -19,6 +19,7 @@ package user import ( "testing" + "k8s.io/apimachinery/pkg/types" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/extensions" ) @@ -49,8 +50,8 @@ func TestNonRootGenerate(t *testing.T) { } func TestNonRootValidate(t *testing.T) { - var uid int64 = 1 - var badUID int64 = 0 + goodUID := types.UnixUserID(1) + badUID := types.UnixUserID(0) s, err := NewRunAsNonRoot(&extensions.RunAsUserStrategyOptions{}) if err != nil { t.Fatalf("unexpected error initializing NewMustRunAs %v", err) @@ -66,7 +67,7 @@ func TestNonRootValidate(t *testing.T) { t.Errorf("expected errors from root uid but got none") } - container.SecurityContext.RunAsUser = &uid + container.SecurityContext.RunAsUser = &goodUID errs = s.Validate(nil, container) if len(errs) != 0 { t.Errorf("expected no errors from non-root uid but got %v", errs) diff --git a/pkg/security/podsecuritypolicy/user/runasany.go b/pkg/security/podsecuritypolicy/user/runasany.go index ffee679320..ddd8833ff0 100644 --- a/pkg/security/podsecuritypolicy/user/runasany.go +++ b/pkg/security/podsecuritypolicy/user/runasany.go @@ -17,6 +17,7 @@ limitations under the License. package user import ( + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/extensions" @@ -33,7 +34,7 @@ func NewRunAsAny(options *extensions.RunAsUserStrategyOptions) (RunAsUserStrateg } // Generate creates the uid based on policy rules. -func (s *runAsAny) Generate(pod *api.Pod, container *api.Container) (*int64, error) { +func (s *runAsAny) Generate(pod *api.Pod, container *api.Container) (*types.UnixUserID, error) { return nil, nil } diff --git a/pkg/security/podsecuritypolicy/user/types.go b/pkg/security/podsecuritypolicy/user/types.go index 8e754c32f6..8a2ba06499 100644 --- a/pkg/security/podsecuritypolicy/user/types.go +++ b/pkg/security/podsecuritypolicy/user/types.go @@ -17,6 +17,7 @@ limitations under the License. package user import ( + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/validation/field" "k8s.io/kubernetes/pkg/api" ) @@ -24,7 +25,7 @@ import ( // RunAsUserStrategy defines the interface for all uid constraint strategies. type RunAsUserStrategy interface { // Generate creates the uid based on policy rules. - Generate(pod *api.Pod, container *api.Container) (*int64, error) + Generate(pod *api.Pod, container *api.Container) (*types.UnixUserID, error) // Validate ensures that the specified values fall within the range of the strategy. Validate(pod *api.Pod, container *api.Container) field.ErrorList } diff --git a/pkg/security/podsecuritypolicy/util/BUILD b/pkg/security/podsecuritypolicy/util/BUILD index 2343551c4d..0d8a581f72 100644 --- a/pkg/security/podsecuritypolicy/util/BUILD +++ b/pkg/security/podsecuritypolicy/util/BUILD @@ -18,6 +18,7 @@ go_library( deps = [ "//pkg/api:go_default_library", "//pkg/apis/extensions:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", ], ) diff --git a/pkg/security/podsecuritypolicy/util/util.go b/pkg/security/podsecuritypolicy/util/util.go index ff8a63aa70..b424846cf8 100644 --- a/pkg/security/podsecuritypolicy/util/util.go +++ b/pkg/security/podsecuritypolicy/util/util.go @@ -19,6 +19,7 @@ package util import ( "fmt" + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/sets" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/apis/extensions" @@ -158,7 +159,12 @@ func PSPAllowsFSType(psp *extensions.PodSecurityPolicy, fsType extensions.FSType return false } -// FallsInRange is a utility to determine it the id falls in the valid range. -func FallsInRange(id int64, rng extensions.IDRange) bool { +// UserFallsInRange is a utility to determine it the id falls in the valid range. +func UserFallsInRange(id types.UnixUserID, rng extensions.UserIDRange) bool { + return id >= rng.Min && id <= rng.Max +} + +// GroupFallsInRange is a utility to determine it the id falls in the valid range. +func GroupFallsInRange(id types.UnixGroupID, rng extensions.GroupIDRange) bool { return id >= rng.Min && id <= rng.Max } diff --git a/pkg/securitycontext/BUILD b/pkg/securitycontext/BUILD index 1f461d8307..49abb73774 100644 --- a/pkg/securitycontext/BUILD +++ b/pkg/securitycontext/BUILD @@ -19,6 +19,7 @@ go_library( deps = [ "//pkg/api:go_default_library", "//pkg/api/v1:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", ], ) @@ -27,7 +28,10 @@ go_test( srcs = ["util_test.go"], library = ":go_default_library", tags = ["automanaged"], - deps = ["//pkg/api/v1:go_default_library"], + deps = [ + "//pkg/api/v1:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", + ], ) filegroup( diff --git a/pkg/securitycontext/util.go b/pkg/securitycontext/util.go index dacc25f202..c01cac4e35 100644 --- a/pkg/securitycontext/util.go +++ b/pkg/securitycontext/util.go @@ -20,6 +20,7 @@ import ( "fmt" "strings" + "k8s.io/apimachinery/pkg/types" "k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api/v1" ) @@ -119,7 +120,7 @@ func DetermineEffectiveSecurityContext(pod *v1.Pod, container *v1.Container) *v1 } if containerSc.RunAsUser != nil { - effectiveSc.RunAsUser = new(int64) + effectiveSc.RunAsUser = new(types.UnixUserID) *effectiveSc.RunAsUser = *containerSc.RunAsUser } @@ -148,7 +149,7 @@ func securityContextFromPodSecurityContext(pod *v1.Pod) *v1.SecurityContext { *synthesized.SELinuxOptions = *pod.Spec.SecurityContext.SELinuxOptions } if pod.Spec.SecurityContext.RunAsUser != nil { - synthesized.RunAsUser = new(int64) + synthesized.RunAsUser = new(types.UnixUserID) *synthesized.RunAsUser = *pod.Spec.SecurityContext.RunAsUser } @@ -191,7 +192,7 @@ func InternalDetermineEffectiveSecurityContext(pod *api.Pod, container *api.Cont } if containerSc.RunAsUser != nil { - effectiveSc.RunAsUser = new(int64) + effectiveSc.RunAsUser = new(types.UnixUserID) *effectiveSc.RunAsUser = *containerSc.RunAsUser } @@ -220,7 +221,7 @@ func internalSecurityContextFromPodSecurityContext(pod *api.Pod) *api.SecurityCo *synthesized.SELinuxOptions = *pod.Spec.SecurityContext.SELinuxOptions } if pod.Spec.SecurityContext.RunAsUser != nil { - synthesized.RunAsUser = new(int64) + synthesized.RunAsUser = new(types.UnixUserID) *synthesized.RunAsUser = *pod.Spec.SecurityContext.RunAsUser } diff --git a/pkg/securitycontext/util_test.go b/pkg/securitycontext/util_test.go index 92a6105474..b0bbc46fbf 100644 --- a/pkg/securitycontext/util_test.go +++ b/pkg/securitycontext/util_test.go @@ -19,6 +19,7 @@ package securitycontext import ( "testing" + "k8s.io/apimachinery/pkg/types" "k8s.io/kubernetes/pkg/api/v1" ) @@ -84,13 +85,13 @@ func compareContexts(name string, ex, ac *v1.SELinuxOptions, t *testing.T) { } } -func containerWithUser(ptr *int64) *v1.Container { +func containerWithUser(ptr *types.UnixUserID) *v1.Container { return &v1.Container{SecurityContext: &v1.SecurityContext{RunAsUser: ptr}} } func TestHaRootUID(t *testing.T) { - var nonRoot int64 = 1 - var root int64 = 0 + nonRoot := types.UnixUserID(1) + root := types.UnixUserID(0) tests := map[string]struct { container *v1.Container @@ -120,7 +121,7 @@ func TestHaRootUID(t *testing.T) { } func TestHasRunAsUser(t *testing.T) { - var runAsUser int64 = 0 + runAsUser := types.UnixUserID(0) tests := map[string]struct { container *v1.Container @@ -147,8 +148,8 @@ func TestHasRunAsUser(t *testing.T) { } func TestHasRootRunAsUser(t *testing.T) { - var nonRoot int64 = 1 - var root int64 = 0 + nonRoot := types.UnixUserID(1) + root := types.UnixUserID(0) tests := map[string]struct { container *v1.Container diff --git a/pkg/volume/aws_ebs/aws_ebs.go b/pkg/volume/aws_ebs/aws_ebs.go index af80b7273e..77dce23966 100644 --- a/pkg/volume/aws_ebs/aws_ebs.go +++ b/pkg/volume/aws_ebs/aws_ebs.go @@ -293,12 +293,12 @@ func (b *awsElasticBlockStoreMounter) CanMount() error { } // SetUp attaches the disk and bind mounts to the volume path. -func (b *awsElasticBlockStoreMounter) SetUp(fsGroup *int64) error { +func (b *awsElasticBlockStoreMounter) SetUp(fsGroup *types.UnixGroupID) error { return b.SetUpAt(b.GetPath(), fsGroup) } // SetUpAt attaches the disk and bind mounts to the volume path. -func (b *awsElasticBlockStoreMounter) SetUpAt(dir string, fsGroup *int64) error { +func (b *awsElasticBlockStoreMounter) SetUpAt(dir string, fsGroup *types.UnixGroupID) error { // TODO: handle failed mounts here. notMnt, err := b.mounter.IsLikelyNotMountPoint(dir) glog.V(4).Infof("PersistentDisk set up: %s %v %v", dir, !notMnt, err) diff --git a/pkg/volume/azure_dd/azure_dd.go b/pkg/volume/azure_dd/azure_dd.go index edffe4fd75..7d4a41acfe 100644 --- a/pkg/volume/azure_dd/azure_dd.go +++ b/pkg/volume/azure_dd/azure_dd.go @@ -234,12 +234,12 @@ func (b *azureDiskMounter) CanMount() error { } // SetUp attaches the disk and bind mounts to the volume path. -func (b *azureDiskMounter) SetUp(fsGroup *int64) error { +func (b *azureDiskMounter) SetUp(fsGroup *types.UnixGroupID) error { return b.SetUpAt(b.GetPath(), fsGroup) } // SetUpAt attaches the disk and bind mounts to the volume path. -func (b *azureDiskMounter) SetUpAt(dir string, fsGroup *int64) error { +func (b *azureDiskMounter) SetUpAt(dir string, fsGroup *types.UnixGroupID) error { b.plugin.volumeLocks.LockKey(b.diskName) defer b.plugin.volumeLocks.UnlockKey(b.diskName) diff --git a/pkg/volume/azure_file/azure_file.go b/pkg/volume/azure_file/azure_file.go index 788df3f748..0aeae26b8f 100644 --- a/pkg/volume/azure_file/azure_file.go +++ b/pkg/volume/azure_file/azure_file.go @@ -189,11 +189,11 @@ func (b *azureFileMounter) CanMount() error { } // SetUp attaches the disk and bind mounts to the volume path. -func (b *azureFileMounter) SetUp(fsGroup *int64) error { +func (b *azureFileMounter) SetUp(fsGroup *types.UnixGroupID) error { return b.SetUpAt(b.GetPath(), fsGroup) } -func (b *azureFileMounter) SetUpAt(dir string, fsGroup *int64) error { +func (b *azureFileMounter) SetUpAt(dir string, fsGroup *types.UnixGroupID) error { notMnt, err := b.mounter.IsLikelyNotMountPoint(dir) glog.V(4).Infof("AzureFile mount set up: %s %v %v", dir, !notMnt, err) if err != nil && !os.IsNotExist(err) { diff --git a/pkg/volume/cephfs/cephfs.go b/pkg/volume/cephfs/cephfs.go index 043124cec8..01f645d090 100644 --- a/pkg/volume/cephfs/cephfs.go +++ b/pkg/volume/cephfs/cephfs.go @@ -217,12 +217,12 @@ func (cephfsMounter *cephfsMounter) CanMount() error { } // SetUp attaches the disk and bind mounts to the volume path. -func (cephfsVolume *cephfsMounter) SetUp(fsGroup *int64) error { +func (cephfsVolume *cephfsMounter) SetUp(fsGroup *types.UnixGroupID) error { return cephfsVolume.SetUpAt(cephfsVolume.GetPath(), fsGroup) } // SetUpAt attaches the disk and bind mounts to the volume path. -func (cephfsVolume *cephfsMounter) SetUpAt(dir string, fsGroup *int64) error { +func (cephfsVolume *cephfsMounter) SetUpAt(dir string, fsGroup *types.UnixGroupID) error { notMnt, err := cephfsVolume.mounter.IsLikelyNotMountPoint(dir) glog.V(4).Infof("CephFS mount set up: %s %v %v", dir, !notMnt, err) if err != nil && !os.IsNotExist(err) { diff --git a/pkg/volume/cinder/cinder.go b/pkg/volume/cinder/cinder.go index 047e735568..3ef8c8f372 100644 --- a/pkg/volume/cinder/cinder.go +++ b/pkg/volume/cinder/cinder.go @@ -298,12 +298,12 @@ func (b *cinderVolumeMounter) CanMount() error { return nil } -func (b *cinderVolumeMounter) SetUp(fsGroup *int64) error { +func (b *cinderVolumeMounter) SetUp(fsGroup *types.UnixGroupID) error { return b.SetUpAt(b.GetPath(), fsGroup) } // SetUp bind mounts to the volume path. -func (b *cinderVolumeMounter) SetUpAt(dir string, fsGroup *int64) error { +func (b *cinderVolumeMounter) SetUpAt(dir string, fsGroup *types.UnixGroupID) error { glog.V(5).Infof("Cinder SetUp %s to %s", b.pdName, dir) b.plugin.volumeLocks.LockKey(b.pdName) diff --git a/pkg/volume/configmap/configmap.go b/pkg/volume/configmap/configmap.go index 6d8d484dea..1134a068b6 100644 --- a/pkg/volume/configmap/configmap.go +++ b/pkg/volume/configmap/configmap.go @@ -158,11 +158,11 @@ func (b *configMapVolumeMounter) CanMount() error { return nil } -func (b *configMapVolumeMounter) SetUp(fsGroup *int64) error { +func (b *configMapVolumeMounter) SetUp(fsGroup *types.UnixGroupID) error { return b.SetUpAt(b.GetPath(), fsGroup) } -func (b *configMapVolumeMounter) SetUpAt(dir string, fsGroup *int64) error { +func (b *configMapVolumeMounter) SetUpAt(dir string, fsGroup *types.UnixGroupID) error { glog.V(3).Infof("Setting up volume %v for pod %v at %v", b.volName, b.pod.UID, dir) // Wrap EmptyDir, let it do the setup. diff --git a/pkg/volume/configmap/configmap_test.go b/pkg/volume/configmap/configmap_test.go index 60682b751c..9f6e401626 100644 --- a/pkg/volume/configmap/configmap_test.go +++ b/pkg/volume/configmap/configmap_test.go @@ -333,7 +333,7 @@ func TestPlugin(t *testing.T) { t.Errorf("Got unexpected path: %s", volumePath) } - fsGroup := int64(1001) + fsGroup := types.UnixGroupID(1001) err = mounter.SetUp(&fsGroup) if err != nil { t.Errorf("Failed to setup volume: %v", err) @@ -391,7 +391,7 @@ func TestPluginReboot(t *testing.T) { t.Errorf("Got unexpected path: %s", volumePath) } - fsGroup := int64(1001) + fsGroup := types.UnixGroupID(1001) err = mounter.SetUp(&fsGroup) if err != nil { t.Errorf("Failed to setup volume: %v", err) @@ -453,7 +453,7 @@ func TestPluginOptional(t *testing.T) { t.Errorf("Got unexpected path: %s", volumePath) } - fsGroup := int64(1001) + fsGroup := types.UnixGroupID(1001) err = mounter.SetUp(&fsGroup) if err != nil { t.Errorf("Failed to setup volume: %v", err) @@ -528,7 +528,7 @@ func TestPluginKeysOptional(t *testing.T) { t.Errorf("Got unexpected path: %s", volumePath) } - fsGroup := int64(1001) + fsGroup := types.UnixGroupID(1001) err = mounter.SetUp(&fsGroup) if err != nil { t.Errorf("Failed to setup volume: %v", err) diff --git a/pkg/volume/downwardapi/downwardapi.go b/pkg/volume/downwardapi/downwardapi.go index aac6eb730c..b31b01544c 100644 --- a/pkg/volume/downwardapi/downwardapi.go +++ b/pkg/volume/downwardapi/downwardapi.go @@ -168,11 +168,11 @@ func (b *downwardAPIVolumeMounter) CanMount() error { // This function is not idempotent by design. We want the data to be refreshed periodically. // The internal sync interval of kubelet will drive the refresh of data. // TODO: Add volume specific ticker and refresh loop -func (b *downwardAPIVolumeMounter) SetUp(fsGroup *int64) error { +func (b *downwardAPIVolumeMounter) SetUp(fsGroup *types.UnixGroupID) error { return b.SetUpAt(b.GetPath(), fsGroup) } -func (b *downwardAPIVolumeMounter) SetUpAt(dir string, fsGroup *int64) error { +func (b *downwardAPIVolumeMounter) SetUpAt(dir string, fsGroup *types.UnixGroupID) error { glog.V(3).Infof("Setting up a downwardAPI volume %v for pod %v/%v at %v", b.volName, b.pod.Namespace, b.pod.Name, dir) // Wrap EmptyDir. Here we rely on the idempotency of the wrapped plugin to avoid repeatedly mounting wrapped, err := b.plugin.host.NewWrapperMounter(b.volName, wrappedVolumeSpec(), b.pod, *b.opts) diff --git a/pkg/volume/empty_dir/empty_dir.go b/pkg/volume/empty_dir/empty_dir.go index a42121a492..e2596471ab 100644 --- a/pkg/volume/empty_dir/empty_dir.go +++ b/pkg/volume/empty_dir/empty_dir.go @@ -191,12 +191,12 @@ func (b *emptyDir) CanMount() error { } // SetUp creates new directory. -func (ed *emptyDir) SetUp(fsGroup *int64) error { +func (ed *emptyDir) SetUp(fsGroup *types.UnixGroupID) error { return ed.SetUpAt(ed.GetPath(), fsGroup) } // SetUpAt creates new directory. -func (ed *emptyDir) SetUpAt(dir string, fsGroup *int64) error { +func (ed *emptyDir) SetUpAt(dir string, fsGroup *types.UnixGroupID) error { notMnt, err := ed.mounter.IsLikelyNotMountPoint(dir) // Getting an os.IsNotExist err from is a contingency; the directory // may not exist yet, in which case, setup should run. diff --git a/pkg/volume/fc/disk_manager.go b/pkg/volume/fc/disk_manager.go index 7a0e210fb7..e3324796d9 100644 --- a/pkg/volume/fc/disk_manager.go +++ b/pkg/volume/fc/disk_manager.go @@ -20,6 +20,7 @@ import ( "os" "github.com/golang/glog" + "k8s.io/apimachinery/pkg/types" "k8s.io/kubernetes/pkg/util/mount" "k8s.io/kubernetes/pkg/volume" ) @@ -34,7 +35,7 @@ type diskManager interface { } // utility to mount a disk based filesystem -func diskSetUp(manager diskManager, b fcDiskMounter, volPath string, mounter mount.Interface, fsGroup *int64) error { +func diskSetUp(manager diskManager, b fcDiskMounter, volPath string, mounter mount.Interface, fsGroup *types.UnixGroupID) error { globalPDPath := manager.MakeGlobalPDName(*b.fcDisk) // TODO: handle failed mounts here. noMnt, err := mounter.IsLikelyNotMountPoint(volPath) diff --git a/pkg/volume/fc/fc.go b/pkg/volume/fc/fc.go index 2d98773a99..ebbc92c2cf 100644 --- a/pkg/volume/fc/fc.go +++ b/pkg/volume/fc/fc.go @@ -204,11 +204,11 @@ func (b *fcDiskMounter) CanMount() error { return nil } -func (b *fcDiskMounter) SetUp(fsGroup *int64) error { +func (b *fcDiskMounter) SetUp(fsGroup *types.UnixGroupID) error { return b.SetUpAt(b.GetPath(), fsGroup) } -func (b *fcDiskMounter) SetUpAt(dir string, fsGroup *int64) error { +func (b *fcDiskMounter) SetUpAt(dir string, fsGroup *types.UnixGroupID) error { // diskSetUp checks mountpoints and prevent repeated calls err := diskSetUp(b.manager, *b, dir, b.mounter, fsGroup) if err != nil { diff --git a/pkg/volume/flexvolume/mounter-defaults.go b/pkg/volume/flexvolume/mounter-defaults.go index a9e35aef19..b51bfb482a 100644 --- a/pkg/volume/flexvolume/mounter-defaults.go +++ b/pkg/volume/flexvolume/mounter-defaults.go @@ -18,8 +18,10 @@ package flexvolume import ( "fmt" + "github.com/golang/glog" + "k8s.io/apimachinery/pkg/types" "k8s.io/kubernetes/pkg/volume" ) @@ -27,7 +29,7 @@ type mounterDefaults flexVolumeMounter // SetUpAt is part of the volume.Mounter interface. // This implementation relies on the attacher's device mount path and does a bind mount to dir. -func (f *mounterDefaults) SetUpAt(dir string, fsGroup *int64) error { +func (f *mounterDefaults) SetUpAt(dir string, fsGroup *types.UnixGroupID) error { glog.Warning(logPrefix(f.plugin), "using default SetUpAt to ", dir) a, err := f.plugin.NewAttacher() diff --git a/pkg/volume/flexvolume/mounter.go b/pkg/volume/flexvolume/mounter.go index d73a15695f..ba13d633f2 100644 --- a/pkg/volume/flexvolume/mounter.go +++ b/pkg/volume/flexvolume/mounter.go @@ -19,6 +19,7 @@ package flexvolume import ( "strconv" + "k8s.io/apimachinery/pkg/types" "k8s.io/kubernetes/pkg/util/exec" "k8s.io/kubernetes/pkg/util/mount" "k8s.io/kubernetes/pkg/volume" @@ -43,12 +44,12 @@ var _ volume.Mounter = &flexVolumeMounter{} // Mounter interface // SetUp creates new directory. -func (f *flexVolumeMounter) SetUp(fsGroup *int64) error { +func (f *flexVolumeMounter) SetUp(fsGroup *types.UnixGroupID) error { return f.SetUpAt(f.GetPath(), fsGroup) } // SetUpAt creates new directory. -func (f *flexVolumeMounter) SetUpAt(dir string, fsGroup *int64) error { +func (f *flexVolumeMounter) SetUpAt(dir string, fsGroup *types.UnixGroupID) error { // Mount only once. alreadyMounted, err := prepareForMount(f.mounter, dir) if err != nil { @@ -72,7 +73,7 @@ func (f *flexVolumeMounter) SetUpAt(dir string, fsGroup *int64) error { // Implicit parameters if fsGroup != nil { - extraOptions[optionFSGroup] = strconv.FormatInt(*fsGroup, 10) + extraOptions[optionFSGroup] = strconv.FormatInt(int64(*fsGroup), 10) } call.AppendSpec(f.spec, f.plugin.host, extraOptions) diff --git a/pkg/volume/flexvolume/mounter_test.go b/pkg/volume/flexvolume/mounter_test.go index 5f1200a489..c852cceac0 100644 --- a/pkg/volume/flexvolume/mounter_test.go +++ b/pkg/volume/flexvolume/mounter_test.go @@ -19,6 +19,7 @@ package flexvolume import ( "testing" + "k8s.io/apimachinery/pkg/types" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/util/mount" ) @@ -47,6 +48,6 @@ func TestSetUpAt(t *testing.T) { m, _ := plugin.newMounterInternal(spec, pod, mounter, plugin.runner) m.SetUpAt(rootDir+"/mount-dir", nil) - fsGroup := int64(42) + fsGroup := types.UnixGroupID(42) m.SetUpAt(rootDir+"/mount-dir", &fsGroup) } diff --git a/pkg/volume/flocker/flocker.go b/pkg/volume/flocker/flocker.go index 8f44fae6e4..c46750660b 100644 --- a/pkg/volume/flocker/flocker.go +++ b/pkg/volume/flocker/flocker.go @@ -232,7 +232,7 @@ func (b *flockerVolumeMounter) GetPath() string { } // SetUp bind mounts the disk global mount to the volume path. -func (b *flockerVolumeMounter) SetUp(fsGroup *int64) error { +func (b *flockerVolumeMounter) SetUp(fsGroup *types.UnixGroupID) error { return b.SetUpAt(b.GetPath(), fsGroup) } @@ -274,7 +274,7 @@ control service: need to update the Primary UUID for this volume. 5. Wait until the Primary UUID was updated or timeout. */ -func (b *flockerVolumeMounter) SetUpAt(dir string, fsGroup *int64) error { +func (b *flockerVolumeMounter) SetUpAt(dir string, fsGroup *types.UnixGroupID) error { var err error if b.flockerClient == nil { b.flockerClient, err = b.newFlockerClient() diff --git a/pkg/volume/gce_pd/gce_pd.go b/pkg/volume/gce_pd/gce_pd.go index cc8915d31a..069a7f20a4 100644 --- a/pkg/volume/gce_pd/gce_pd.go +++ b/pkg/volume/gce_pd/gce_pd.go @@ -256,12 +256,12 @@ func (b *gcePersistentDiskMounter) CanMount() error { } // SetUp bind mounts the disk global mount to the volume path. -func (b *gcePersistentDiskMounter) SetUp(fsGroup *int64) error { +func (b *gcePersistentDiskMounter) SetUp(fsGroup *types.UnixGroupID) error { return b.SetUpAt(b.GetPath(), fsGroup) } // SetUp bind mounts the disk global mount to the give volume path. -func (b *gcePersistentDiskMounter) SetUpAt(dir string, fsGroup *int64) error { +func (b *gcePersistentDiskMounter) SetUpAt(dir string, fsGroup *types.UnixGroupID) error { // TODO: handle failed mounts here. notMnt, err := b.mounter.IsLikelyNotMountPoint(dir) glog.V(4).Infof("GCE PersistentDisk set up: Dir (%s) PD name (%q) Mounted (%t) Error (%v), ReadOnly (%t)", dir, b.pdName, !notMnt, err, b.readOnly) diff --git a/pkg/volume/git_repo/git_repo.go b/pkg/volume/git_repo/git_repo.go index 18b61d9c3e..ac6026ad5f 100644 --- a/pkg/volume/git_repo/git_repo.go +++ b/pkg/volume/git_repo/git_repo.go @@ -171,12 +171,12 @@ func (b *gitRepoVolumeMounter) CanMount() error { } // SetUp creates new directory and clones a git repo. -func (b *gitRepoVolumeMounter) SetUp(fsGroup *int64) error { +func (b *gitRepoVolumeMounter) SetUp(fsGroup *types.UnixGroupID) error { return b.SetUpAt(b.GetPath(), fsGroup) } // SetUpAt creates new directory and clones a git repo. -func (b *gitRepoVolumeMounter) SetUpAt(dir string, fsGroup *int64) error { +func (b *gitRepoVolumeMounter) SetUpAt(dir string, fsGroup *types.UnixGroupID) error { if volumeutil.IsReady(b.getMetaDir()) { return nil } diff --git a/pkg/volume/glusterfs/glusterfs.go b/pkg/volume/glusterfs/glusterfs.go index 87434edb92..98c13dfa17 100644 --- a/pkg/volume/glusterfs/glusterfs.go +++ b/pkg/volume/glusterfs/glusterfs.go @@ -251,11 +251,11 @@ func (b *glusterfsMounter) CanMount() error { } // SetUp attaches the disk and bind mounts to the volume path. -func (b *glusterfsMounter) SetUp(fsGroup *int64) error { +func (b *glusterfsMounter) SetUp(fsGroup *types.UnixGroupID) error { return b.SetUpAt(b.GetPath(), fsGroup) } -func (b *glusterfsMounter) SetUpAt(dir string, fsGroup *int64) error { +func (b *glusterfsMounter) SetUpAt(dir string, fsGroup *types.UnixGroupID) error { notMnt, err := b.mounter.IsLikelyNotMountPoint(dir) glog.V(4).Infof("glusterfs: mount set up: %s %v %v", dir, !notMnt, err) if err != nil && !os.IsNotExist(err) { diff --git a/pkg/volume/host_path/host_path.go b/pkg/volume/host_path/host_path.go index 9c49235c64..df94a9b6a3 100644 --- a/pkg/volume/host_path/host_path.go +++ b/pkg/volume/host_path/host_path.go @@ -203,12 +203,12 @@ func (b *hostPathMounter) CanMount() error { } // SetUp does nothing. -func (b *hostPathMounter) SetUp(fsGroup *int64) error { +func (b *hostPathMounter) SetUp(fsGroup *types.UnixGroupID) error { return nil } // SetUpAt does not make sense for host paths - probably programmer error. -func (b *hostPathMounter) SetUpAt(dir string, fsGroup *int64) error { +func (b *hostPathMounter) SetUpAt(dir string, fsGroup *types.UnixGroupID) error { return fmt.Errorf("SetUpAt() does not make sense for host paths") } diff --git a/pkg/volume/iscsi/disk_manager.go b/pkg/volume/iscsi/disk_manager.go index 2c470b9b1b..31c189d148 100644 --- a/pkg/volume/iscsi/disk_manager.go +++ b/pkg/volume/iscsi/disk_manager.go @@ -20,6 +20,7 @@ import ( "os" "github.com/golang/glog" + "k8s.io/apimachinery/pkg/types" "k8s.io/kubernetes/pkg/util/mount" "k8s.io/kubernetes/pkg/volume" ) @@ -34,7 +35,7 @@ type diskManager interface { } // utility to mount a disk based filesystem -func diskSetUp(manager diskManager, b iscsiDiskMounter, volPath string, mounter mount.Interface, fsGroup *int64) error { +func diskSetUp(manager diskManager, b iscsiDiskMounter, volPath string, mounter mount.Interface, fsGroup *types.UnixGroupID) error { globalPDPath := manager.MakeGlobalPDName(*b.iscsiDisk) // TODO: handle failed mounts here. notMnt, err := mounter.IsLikelyNotMountPoint(volPath) diff --git a/pkg/volume/iscsi/iscsi.go b/pkg/volume/iscsi/iscsi.go index e7e83e96e0..9293523c25 100644 --- a/pkg/volume/iscsi/iscsi.go +++ b/pkg/volume/iscsi/iscsi.go @@ -236,11 +236,11 @@ func (b *iscsiDiskMounter) CanMount() error { return nil } -func (b *iscsiDiskMounter) SetUp(fsGroup *int64) error { +func (b *iscsiDiskMounter) SetUp(fsGroup *types.UnixGroupID) error { return b.SetUpAt(b.GetPath(), fsGroup) } -func (b *iscsiDiskMounter) SetUpAt(dir string, fsGroup *int64) error { +func (b *iscsiDiskMounter) SetUpAt(dir string, fsGroup *types.UnixGroupID) error { // diskSetUp checks mountpoints and prevent repeated calls err := diskSetUp(b.manager, *b, dir, b.mounter, fsGroup) if err != nil { diff --git a/pkg/volume/nfs/nfs.go b/pkg/volume/nfs/nfs.go index 251dc86aac..323c14cd3e 100644 --- a/pkg/volume/nfs/nfs.go +++ b/pkg/volume/nfs/nfs.go @@ -233,11 +233,11 @@ func (b *nfsMounter) GetAttributes() volume.Attributes { } // SetUp attaches the disk and bind mounts to the volume path. -func (b *nfsMounter) SetUp(fsGroup *int64) error { +func (b *nfsMounter) SetUp(fsGroup *types.UnixGroupID) error { return b.SetUpAt(b.GetPath(), fsGroup) } -func (b *nfsMounter) SetUpAt(dir string, fsGroup *int64) error { +func (b *nfsMounter) SetUpAt(dir string, fsGroup *types.UnixGroupID) error { notMnt, err := b.mounter.IsLikelyNotMountPoint(dir) glog.V(4).Infof("NFS mount set up: %s %v %v", dir, !notMnt, err) if err != nil && !os.IsNotExist(err) { diff --git a/pkg/volume/photon_pd/photon_pd.go b/pkg/volume/photon_pd/photon_pd.go index c3d1d0287f..5a1783a78c 100644 --- a/pkg/volume/photon_pd/photon_pd.go +++ b/pkg/volume/photon_pd/photon_pd.go @@ -194,12 +194,12 @@ func (b *photonPersistentDiskMounter) CanMount() error { } // SetUp attaches the disk and bind mounts to the volume path. -func (b *photonPersistentDiskMounter) SetUp(fsGroup *int64) error { +func (b *photonPersistentDiskMounter) SetUp(fsGroup *types.UnixGroupID) error { return b.SetUpAt(b.GetPath(), fsGroup) } // SetUp attaches the disk and bind mounts to the volume path. -func (b *photonPersistentDiskMounter) SetUpAt(dir string, fsGroup *int64) error { +func (b *photonPersistentDiskMounter) SetUpAt(dir string, fsGroup *types.UnixGroupID) error { glog.V(4).Infof("Photon Persistent Disk setup %s to %s", b.pdID, dir) // TODO: handle failed mounts here. diff --git a/pkg/volume/portworx/portworx.go b/pkg/volume/portworx/portworx.go index 96302e636a..31f0c01979 100644 --- a/pkg/volume/portworx/portworx.go +++ b/pkg/volume/portworx/portworx.go @@ -255,12 +255,12 @@ func (b *portworxVolumeMounter) CanMount() error { } // SetUp attaches the disk and bind mounts to the volume path. -func (b *portworxVolumeMounter) SetUp(fsGroup *int64) error { +func (b *portworxVolumeMounter) SetUp(fsGroup *types.UnixGroupID) error { return b.SetUpAt(b.GetPath(), fsGroup) } // SetUpAt attaches the disk and bind mounts to the volume path. -func (b *portworxVolumeMounter) SetUpAt(dir string, fsGroup *int64) error { +func (b *portworxVolumeMounter) SetUpAt(dir string, fsGroup *types.UnixGroupID) error { notMnt, err := b.mounter.IsLikelyNotMountPoint(dir) glog.V(4).Infof("Portworx Volume set up: %s %v %v", dir, !notMnt, err) if err != nil && !os.IsNotExist(err) { diff --git a/pkg/volume/projected/projected.go b/pkg/volume/projected/projected.go index 5ff87d78ec..310d867436 100644 --- a/pkg/volume/projected/projected.go +++ b/pkg/volume/projected/projected.go @@ -175,11 +175,11 @@ func (s *projectedVolumeMounter) CanMount() error { return nil } -func (s *projectedVolumeMounter) SetUp(fsGroup *int64) error { +func (s *projectedVolumeMounter) SetUp(fsGroup *types.UnixGroupID) error { return s.SetUpAt(s.GetPath(), fsGroup) } -func (s *projectedVolumeMounter) SetUpAt(dir string, fsGroup *int64) error { +func (s *projectedVolumeMounter) SetUpAt(dir string, fsGroup *types.UnixGroupID) error { glog.V(3).Infof("Setting up volume %v for pod %v at %v", s.volName, s.pod.UID, dir) wrapped, err := s.plugin.host.NewWrapperMounter(s.volName, wrappedVolumeSpec(), s.pod, *s.opts) diff --git a/pkg/volume/quobyte/quobyte.go b/pkg/volume/quobyte/quobyte.go index 68f647fa39..10bb7677f2 100644 --- a/pkg/volume/quobyte/quobyte.go +++ b/pkg/volume/quobyte/quobyte.go @@ -237,12 +237,12 @@ func (mounter *quobyteMounter) CanMount() error { } // SetUp attaches the disk and bind mounts to the volume path. -func (mounter *quobyteMounter) SetUp(fsGroup *int64) error { +func (mounter *quobyteMounter) SetUp(fsGroup *types.UnixGroupID) error { pluginDir := mounter.plugin.host.GetPluginDir(strings.EscapeQualifiedNameForDisk(quobytePluginName)) return mounter.SetUpAt(pluginDir, fsGroup) } -func (mounter *quobyteMounter) SetUpAt(dir string, fsGroup *int64) error { +func (mounter *quobyteMounter) SetUpAt(dir string, fsGroup *types.UnixGroupID) error { // Check if Quobyte is already mounted on the host in the Plugin Dir // if so we can use this mountpoint instead of creating a new one // IsLikelyNotMountPoint wouldn't check the mount type diff --git a/pkg/volume/rbd/disk_manager.go b/pkg/volume/rbd/disk_manager.go index b65c6e998b..2d5de0eec7 100644 --- a/pkg/volume/rbd/disk_manager.go +++ b/pkg/volume/rbd/disk_manager.go @@ -26,6 +26,7 @@ import ( "os" "github.com/golang/glog" + "k8s.io/apimachinery/pkg/types" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/util/mount" "k8s.io/kubernetes/pkg/volume" @@ -45,7 +46,7 @@ type diskManager interface { } // utility to mount a disk based filesystem -func diskSetUp(manager diskManager, b rbdMounter, volPath string, mounter mount.Interface, fsGroup *int64) error { +func diskSetUp(manager diskManager, b rbdMounter, volPath string, mounter mount.Interface, fsGroup *types.UnixGroupID) error { globalPDPath := manager.MakeGlobalPDName(*b.rbd) // TODO: handle failed mounts here. notMnt, err := mounter.IsLikelyNotMountPoint(volPath) diff --git a/pkg/volume/rbd/rbd.go b/pkg/volume/rbd/rbd.go index c32d09172a..240b10773b 100644 --- a/pkg/volume/rbd/rbd.go +++ b/pkg/volume/rbd/rbd.go @@ -396,11 +396,11 @@ func (b *rbdMounter) CanMount() error { return nil } -func (b *rbdMounter) SetUp(fsGroup *int64) error { +func (b *rbdMounter) SetUp(fsGroup *types.UnixGroupID) error { return b.SetUpAt(b.GetPath(), fsGroup) } -func (b *rbdMounter) SetUpAt(dir string, fsGroup *int64) error { +func (b *rbdMounter) SetUpAt(dir string, fsGroup *types.UnixGroupID) error { // diskSetUp checks mountpoints and prevent repeated calls glog.V(4).Infof("rbd: attempting to SetUp and mount %s", dir) err := diskSetUp(b.manager, *b, dir, b.mounter, fsGroup) diff --git a/pkg/volume/scaleio/sio_volume.go b/pkg/volume/scaleio/sio_volume.go index d7242a3a2f..8ff53049d3 100644 --- a/pkg/volume/scaleio/sio_volume.go +++ b/pkg/volume/scaleio/sio_volume.go @@ -78,12 +78,12 @@ func (v *sioVolume) CanMount() error { return nil } -func (v *sioVolume) SetUp(fsGroup *int64) error { +func (v *sioVolume) SetUp(fsGroup *types.UnixGroupID) error { return v.SetUpAt(v.GetPath(), fsGroup) } // SetUp bind mounts the disk global mount to the volume path. -func (v *sioVolume) SetUpAt(dir string, fsGroup *int64) error { +func (v *sioVolume) SetUpAt(dir string, fsGroup *types.UnixGroupID) error { v.plugin.volumeMtx.LockKey(v.volSpecName) defer v.plugin.volumeMtx.UnlockKey(v.volSpecName) diff --git a/pkg/volume/secret/secret.go b/pkg/volume/secret/secret.go index 9f73bc80ae..ae638bb4f0 100644 --- a/pkg/volume/secret/secret.go +++ b/pkg/volume/secret/secret.go @@ -178,11 +178,11 @@ func (b *secretVolumeMounter) CanMount() error { return nil } -func (b *secretVolumeMounter) SetUp(fsGroup *int64) error { +func (b *secretVolumeMounter) SetUp(fsGroup *types.UnixGroupID) error { return b.SetUpAt(b.GetPath(), fsGroup) } -func (b *secretVolumeMounter) SetUpAt(dir string, fsGroup *int64) error { +func (b *secretVolumeMounter) SetUpAt(dir string, fsGroup *types.UnixGroupID) error { glog.V(3).Infof("Setting up volume %v for pod %v at %v", b.volName, b.pod.UID, dir) // Wrap EmptyDir, let it do the setup. diff --git a/pkg/volume/testing/testing.go b/pkg/volume/testing/testing.go index 2c20cf5d2f..9c859c1338 100644 --- a/pkg/volume/testing/testing.go +++ b/pkg/volume/testing/testing.go @@ -339,7 +339,7 @@ func (fv *FakeVolume) CanMount() error { return nil } -func (fv *FakeVolume) SetUp(fsGroup *int64) error { +func (fv *FakeVolume) SetUp(fsGroup *types.UnixGroupID) error { fv.Lock() defer fv.Unlock() fv.SetUpCallCount++ @@ -352,7 +352,7 @@ func (fv *FakeVolume) GetSetUpCallCount() int { return fv.SetUpCallCount } -func (fv *FakeVolume) SetUpAt(dir string, fsGroup *int64) error { +func (fv *FakeVolume) SetUpAt(dir string, fsGroup *types.UnixGroupID) error { return os.MkdirAll(dir, 0750) } diff --git a/pkg/volume/util/operationexecutor/operation_generator.go b/pkg/volume/util/operationexecutor/operation_generator.go index 8b2b0f17f9..ccc86debd6 100644 --- a/pkg/volume/util/operationexecutor/operation_generator.go +++ b/pkg/volume/util/operationexecutor/operation_generator.go @@ -440,7 +440,7 @@ func (og *operationGenerator) GenerateMountVolumeFunc( volumeAttacher, _ = attachableVolumePlugin.NewAttacher() } - var fsGroup *int64 + var fsGroup *types.UnixGroupID if volumeToMount.Pod.Spec.SecurityContext != nil && volumeToMount.Pod.Spec.SecurityContext.FSGroup != nil { fsGroup = volumeToMount.Pod.Spec.SecurityContext.FSGroup diff --git a/pkg/volume/volume.go b/pkg/volume/volume.go index 76c96d2e22..86a8ff7404 100644 --- a/pkg/volume/volume.go +++ b/pkg/volume/volume.go @@ -109,14 +109,14 @@ type Mounter interface { // content should be owned by 'fsGroup' so that it can be // accessed by the pod. This may be called more than once, so // implementations must be idempotent. - SetUp(fsGroup *int64) error + SetUp(fsGroup *types.UnixGroupID) error // SetUpAt prepares and mounts/unpacks the volume to the // specified directory path, which may or may not exist yet. // The mount point and its content should be owned by // 'fsGroup' so that it can be accessed by the pod. This may // be called more than once, so implementations must be // idempotent. - SetUpAt(dir string, fsGroup *int64) error + SetUpAt(dir string, fsGroup *types.UnixGroupID) error // GetAttributes returns the attributes of the mounter. GetAttributes() Attributes } diff --git a/pkg/volume/volume_linux.go b/pkg/volume/volume_linux.go index ef1f45208c..c13ee2b81f 100644 --- a/pkg/volume/volume_linux.go +++ b/pkg/volume/volume_linux.go @@ -24,6 +24,8 @@ import ( "os" + "k8s.io/apimachinery/pkg/types" + "github.com/golang/glog" ) @@ -35,7 +37,7 @@ const ( // SetVolumeOwnership modifies the given volume to be owned by // fsGroup, and sets SetGid so that newly created files are owned by // fsGroup. If fsGroup is nil nothing is done. -func SetVolumeOwnership(mounter Mounter, fsGroup *int64) error { +func SetVolumeOwnership(mounter Mounter, fsGroup *types.UnixGroupID) error { if fsGroup == nil { return nil diff --git a/pkg/volume/volume_unsupported.go b/pkg/volume/volume_unsupported.go index 45a6cc5ca7..db873f0f59 100644 --- a/pkg/volume/volume_unsupported.go +++ b/pkg/volume/volume_unsupported.go @@ -18,6 +18,8 @@ limitations under the License. package volume -func SetVolumeOwnership(mounter Mounter, fsGroup *int64) error { +import "k8s.io/apimachinery/pkg/types" + +func SetVolumeOwnership(mounter Mounter, fsGroup *types.UnixGroupID) error { return nil } diff --git a/pkg/volume/vsphere_volume/vsphere_volume.go b/pkg/volume/vsphere_volume/vsphere_volume.go index 4f8df5b240..c1767f129e 100644 --- a/pkg/volume/vsphere_volume/vsphere_volume.go +++ b/pkg/volume/vsphere_volume/vsphere_volume.go @@ -193,7 +193,7 @@ func (b *vsphereVolumeMounter) GetAttributes() volume.Attributes { } // SetUp attaches the disk and bind mounts to the volume path. -func (b *vsphereVolumeMounter) SetUp(fsGroup *int64) error { +func (b *vsphereVolumeMounter) SetUp(fsGroup *types.UnixGroupID) error { return b.SetUpAt(b.GetPath(), fsGroup) } @@ -205,7 +205,7 @@ func (b *vsphereVolumeMounter) CanMount() error { } // SetUp attaches the disk and bind mounts to the volume path. -func (b *vsphereVolumeMounter) SetUpAt(dir string, fsGroup *int64) error { +func (b *vsphereVolumeMounter) SetUpAt(dir string, fsGroup *types.UnixGroupID) error { glog.V(5).Infof("vSphere volume setup %s to %s", b.volPath, dir) // TODO: handle failed mounts here. diff --git a/plugin/pkg/admission/security/podsecuritypolicy/BUILD b/plugin/pkg/admission/security/podsecuritypolicy/BUILD index 475d0384d2..23c4fbb81a 100644 --- a/plugin/pkg/admission/security/podsecuritypolicy/BUILD +++ b/plugin/pkg/admission/security/podsecuritypolicy/BUILD @@ -50,6 +50,7 @@ go_test( "//pkg/security/podsecuritypolicy/util:go_default_library", "//vendor/github.com/stretchr/testify/assert:go_default_library", "//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/diff:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/k8s.io/apiserver/pkg/admission:go_default_library", diff --git a/plugin/pkg/admission/security/podsecuritypolicy/admission_test.go b/plugin/pkg/admission/security/podsecuritypolicy/admission_test.go index e8767b15d8..a3bc6d7e5a 100644 --- a/plugin/pkg/admission/security/podsecuritypolicy/admission_test.go +++ b/plugin/pkg/admission/security/podsecuritypolicy/admission_test.go @@ -25,6 +25,7 @@ import ( "github.com/stretchr/testify/assert" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/diff" "k8s.io/apimachinery/pkg/util/sets" kadmission "k8s.io/apiserver/pkg/admission" @@ -834,7 +835,8 @@ func TestAdmitRunAsUser(t *testing.T) { // doesn't matter if we set it here or on the container, the // admission controller uses DetermineEffectiveSC to get the defaulting // behavior so it can validate what will be applied at runtime - pod.Spec.SecurityContext.RunAsUser = &user + userID := types.UnixUserID(user) + pod.Spec.SecurityContext.RunAsUser = &userID return pod } @@ -853,7 +855,7 @@ func TestAdmitRunAsUser(t *testing.T) { pod *kapi.Pod psps []*extensions.PodSecurityPolicy shouldPass bool - expectedRunAsUser *int + expectedRunAsUser *types.UnixUserID expectedPSP string }{ "runAsAny no pod request": { @@ -867,7 +869,7 @@ func TestAdmitRunAsUser(t *testing.T) { pod: createPodWithRunAsUser(1), psps: []*extensions.PodSecurityPolicy{runAsAny}, shouldPass: true, - expectedRunAsUser: intPtr(1), + expectedRunAsUser: userIDPtr(1), expectedPSP: runAsAny.Name, }, "mustRunAs pod request out of range": { @@ -879,14 +881,14 @@ func TestAdmitRunAsUser(t *testing.T) { pod: createPodWithRunAsUser(999), psps: []*extensions.PodSecurityPolicy{mustRunAs}, shouldPass: true, - expectedRunAsUser: intPtr(int(mustRunAs.Spec.RunAsUser.Ranges[0].Min)), + expectedRunAsUser: &mustRunAs.Spec.RunAsUser.Ranges[0].Min, expectedPSP: mustRunAs.Name, }, "mustRunAs no pod request": { pod: goodPod(), psps: []*extensions.PodSecurityPolicy{mustRunAs}, shouldPass: true, - expectedRunAsUser: intPtr(int(mustRunAs.Spec.RunAsUser.Ranges[0].Min)), + expectedRunAsUser: &mustRunAs.Spec.RunAsUser.Ranges[0].Min, expectedPSP: mustRunAs.Name, }, "runAsNonRoot no pod request": { @@ -905,7 +907,7 @@ func TestAdmitRunAsUser(t *testing.T) { pod: createPodWithRunAsUser(1), psps: []*extensions.PodSecurityPolicy{runAsNonRoot}, shouldPass: true, - expectedRunAsUser: intPtr(1), + expectedRunAsUser: userIDPtr(1), expectedPSP: runAsNonRoot.Name, }, } @@ -926,7 +928,7 @@ func TestAdmitRunAsUser(t *testing.T) { t.Errorf("%s expected RunAsUser to be nil but found: %v", k, *v.pod.Spec.Containers[0].SecurityContext.RunAsUser) continue } - if int64(*v.expectedRunAsUser) != *v.pod.Spec.Containers[0].SecurityContext.RunAsUser { + if *v.expectedRunAsUser != *v.pod.Spec.Containers[0].SecurityContext.RunAsUser { t.Errorf("%s expected RunAsUser to be: %v but found %v", k, *v.expectedRunAsUser, *v.pod.Spec.Containers[0].SecurityContext.RunAsUser) } } @@ -939,7 +941,8 @@ func TestAdmitSupplementalGroups(t *testing.T) { // doesn't matter if we set it here or on the container, the // admission controller uses DetermineEffectiveSC to get the defaulting // behavior so it can validate what will be applied at runtime - pod.Spec.SecurityContext.SupplementalGroups = []int64{group} + groupID := types.UnixGroupID(group) + pod.Spec.SecurityContext.SupplementalGroups = []types.UnixGroupID{groupID} return pod } @@ -954,28 +957,28 @@ func TestAdmitSupplementalGroups(t *testing.T) { pod *kapi.Pod psps []*extensions.PodSecurityPolicy shouldPass bool - expectedSupGroups []int64 + expectedSupGroups []types.UnixGroupID expectedPSP string }{ "runAsAny no pod request": { pod: goodPod(), psps: []*extensions.PodSecurityPolicy{runAsAny}, shouldPass: true, - expectedSupGroups: []int64{}, + expectedSupGroups: []types.UnixGroupID{}, expectedPSP: runAsAny.Name, }, "runAsAny pod request": { pod: createPodWithSupGroup(1), psps: []*extensions.PodSecurityPolicy{runAsAny}, shouldPass: true, - expectedSupGroups: []int64{1}, + expectedSupGroups: []types.UnixGroupID{1}, expectedPSP: runAsAny.Name, }, "mustRunAs no pod request": { pod: goodPod(), psps: []*extensions.PodSecurityPolicy{mustRunAs}, shouldPass: true, - expectedSupGroups: []int64{mustRunAs.Spec.SupplementalGroups.Ranges[0].Min}, + expectedSupGroups: []types.UnixGroupID{mustRunAs.Spec.SupplementalGroups.Ranges[0].Min}, expectedPSP: mustRunAs.Name, }, "mustRunAs bad pod request": { @@ -987,7 +990,7 @@ func TestAdmitSupplementalGroups(t *testing.T) { pod: createPodWithSupGroup(999), psps: []*extensions.PodSecurityPolicy{mustRunAs}, shouldPass: true, - expectedSupGroups: []int64{999}, + expectedSupGroups: []types.UnixGroupID{999}, expectedPSP: mustRunAs.Name, }, } @@ -1012,12 +1015,12 @@ func TestAdmitSupplementalGroups(t *testing.T) { } func TestAdmitFSGroup(t *testing.T) { - createPodWithFSGroup := func(group int64) *kapi.Pod { + createPodWithFSGroup := func(group int) *kapi.Pod { pod := goodPod() // doesn't matter if we set it here or on the container, the // admission controller uses DetermineEffectiveSC to get the defaulting // behavior so it can validate what will be applied at runtime - pod.Spec.SecurityContext.FSGroup = &group + pod.Spec.SecurityContext.FSGroup = groupIDPtr(group) return pod } @@ -1032,7 +1035,7 @@ func TestAdmitFSGroup(t *testing.T) { pod *kapi.Pod psps []*extensions.PodSecurityPolicy shouldPass bool - expectedFSGroup *int64 + expectedFSGroup *types.UnixGroupID expectedPSP string }{ "runAsAny no pod request": { @@ -1046,7 +1049,7 @@ func TestAdmitFSGroup(t *testing.T) { pod: createPodWithFSGroup(1), psps: []*extensions.PodSecurityPolicy{runAsAny}, shouldPass: true, - expectedFSGroup: int64Ptr(1), + expectedFSGroup: groupIDPtr(1), expectedPSP: runAsAny.Name, }, "mustRunAs no pod request": { @@ -1065,7 +1068,7 @@ func TestAdmitFSGroup(t *testing.T) { pod: createPodWithFSGroup(999), psps: []*extensions.PodSecurityPolicy{mustRunAs}, shouldPass: true, - expectedFSGroup: int64Ptr(999), + expectedFSGroup: groupIDPtr(999), expectedPSP: mustRunAs.Name, }, } @@ -1707,8 +1710,8 @@ func restrictivePSP() *extensions.PodSecurityPolicy { Spec: extensions.PodSecurityPolicySpec{ RunAsUser: extensions.RunAsUserStrategyOptions{ Rule: extensions.RunAsUserStrategyMustRunAs, - Ranges: []extensions.IDRange{ - {Min: 999, Max: 999}, + Ranges: []extensions.UserIDRange{ + {Min: types.UnixUserID(999), Max: types.UnixUserID(999)}, }, }, SELinux: extensions.SELinuxStrategyOptions{ @@ -1719,14 +1722,14 @@ func restrictivePSP() *extensions.PodSecurityPolicy { }, FSGroup: extensions.FSGroupStrategyOptions{ Rule: extensions.FSGroupStrategyMustRunAs, - Ranges: []extensions.IDRange{ - {Min: 999, Max: 999}, + Ranges: []extensions.GroupIDRange{ + {Min: types.UnixGroupID(999), Max: types.UnixGroupID(999)}, }, }, SupplementalGroups: extensions.SupplementalGroupsStrategyOptions{ Rule: extensions.SupplementalGroupsStrategyMustRunAs, - Ranges: []extensions.IDRange{ - {Min: 999, Max: 999}, + Ranges: []extensions.GroupIDRange{ + {Min: types.UnixGroupID(999), Max: types.UnixGroupID(999)}, }, }, }, @@ -1771,11 +1774,12 @@ func goodPod() *kapi.Pod { } } -func intPtr(i int) *int { - return &i +func userIDPtr(i int) *types.UnixUserID { + userID := types.UnixUserID(i) + return &userID } -func int64Ptr(i int) *int64 { - i64 := int64(i) - return &i64 +func groupIDPtr(i int) *types.UnixGroupID { + groupID := types.UnixGroupID(i) + return &groupID } diff --git a/plugin/pkg/admission/securitycontext/scdeny/BUILD b/plugin/pkg/admission/securitycontext/scdeny/BUILD index 095ef49a0c..d23770ac8b 100644 --- a/plugin/pkg/admission/securitycontext/scdeny/BUILD +++ b/plugin/pkg/admission/securitycontext/scdeny/BUILD @@ -27,6 +27,7 @@ go_test( tags = ["automanaged"], deps = [ "//pkg/api:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", "//vendor/k8s.io/apiserver/pkg/admission:go_default_library", ], ) diff --git a/plugin/pkg/admission/securitycontext/scdeny/admission_test.go b/plugin/pkg/admission/securitycontext/scdeny/admission_test.go index faeeab1e2c..4b7758e23b 100644 --- a/plugin/pkg/admission/securitycontext/scdeny/admission_test.go +++ b/plugin/pkg/admission/securitycontext/scdeny/admission_test.go @@ -19,6 +19,7 @@ package scdeny import ( "testing" + "k8s.io/apimachinery/pkg/types" "k8s.io/apiserver/pkg/admission" "k8s.io/kubernetes/pkg/api" ) @@ -27,7 +28,7 @@ import ( func TestAdmission(t *testing.T) { handler := NewSecurityContextDeny() - var runAsUser int64 = 1 + runAsUser := types.UnixUserID(1) priv := true cases := []struct { @@ -115,7 +116,7 @@ func TestPodSecurityContextAdmission(t *testing.T) { }, } - fsGroup := int64(1001) + fsGroup := types.UnixGroupID(1001) tests := []struct { securityContext api.PodSecurityContext @@ -127,7 +128,7 @@ func TestPodSecurityContextAdmission(t *testing.T) { }, { securityContext: api.PodSecurityContext{ - SupplementalGroups: []int64{1234}, + SupplementalGroups: []types.UnixGroupID{types.UnixGroupID(1234)}, }, errorExpected: true, }, diff --git a/staging/src/k8s.io/apimachinery/pkg/util/validation/BUILD b/staging/src/k8s.io/apimachinery/pkg/util/validation/BUILD index 5b5d461e9d..5deabcdbf5 100644 --- a/staging/src/k8s.io/apimachinery/pkg/util/validation/BUILD +++ b/staging/src/k8s.io/apimachinery/pkg/util/validation/BUILD @@ -13,10 +13,12 @@ go_test( srcs = ["validation_test.go"], library = ":go_default_library", tags = ["automanaged"], + deps = ["//vendor/k8s.io/apimachinery/pkg/types:go_default_library"], ) go_library( name = "go_default_library", srcs = ["validation.go"], tags = ["automanaged"], + deps = ["//vendor/k8s.io/apimachinery/pkg/types:go_default_library"], ) diff --git a/staging/src/k8s.io/apimachinery/pkg/util/validation/validation.go b/staging/src/k8s.io/apimachinery/pkg/util/validation/validation.go index a0afc26e73..1e5b85047c 100644 --- a/staging/src/k8s.io/apimachinery/pkg/util/validation/validation.go +++ b/staging/src/k8s.io/apimachinery/pkg/util/validation/validation.go @@ -22,6 +22,8 @@ import ( "net" "regexp" "strings" + + "k8s.io/apimachinery/pkg/types" ) const qnameCharFmt string = "[A-Za-z0-9]" @@ -197,16 +199,16 @@ const ( maxGroupID = math.MaxInt32 ) -// IsValidGroupId tests that the argument is a valid Unix GID. -func IsValidGroupId(gid int64) []string { +// IsValidGroupID tests that the argument is a valid Unix GID. +func IsValidGroupID(gid types.UnixGroupID) []string { if minGroupID <= gid && gid <= maxGroupID { return nil } return []string{InclusiveRangeError(minGroupID, maxGroupID)} } -// IsValidUserId tests that the argument is a valid Unix UID. -func IsValidUserId(uid int64) []string { +// IsValidUserID tests that the argument is a valid Unix UID. +func IsValidUserID(uid types.UnixUserID) []string { if minUserID <= uid && uid <= maxUserID { return nil } diff --git a/staging/src/k8s.io/apimachinery/pkg/util/validation/validation_test.go b/staging/src/k8s.io/apimachinery/pkg/util/validation/validation_test.go index 7dfa73e532..cb807c899d 100644 --- a/staging/src/k8s.io/apimachinery/pkg/util/validation/validation_test.go +++ b/staging/src/k8s.io/apimachinery/pkg/util/validation/validation_test.go @@ -19,6 +19,8 @@ package validation import ( "strings" "testing" + + "k8s.io/apimachinery/pkg/types" ) func TestIsDNS1123Label(t *testing.T) { @@ -154,33 +156,49 @@ func TestIsValidPortNum(t *testing.T) { } } -func TestIsValidGroupId(t *testing.T) { - goodValues := []int64{0, 1, 1000, 65535, 2147483647} +func createGroupIDs(ids ...int64) []types.UnixGroupID { + var output []types.UnixGroupID + for _, id := range ids { + output = append(output, types.UnixGroupID(id)) + } + return output +} + +func createUserIDs(ids ...int64) []types.UnixUserID { + var output []types.UnixUserID + for _, id := range ids { + output = append(output, types.UnixUserID(id)) + } + return output +} + +func TestIsValidGroupID(t *testing.T) { + goodValues := createGroupIDs(0, 1, 1000, 65535, 2147483647) for _, val := range goodValues { - if msgs := IsValidGroupId(val); len(msgs) != 0 { + if msgs := IsValidGroupID(val); len(msgs) != 0 { t.Errorf("expected true for '%d': %v", val, msgs) } } - badValues := []int64{-1, -1003, 2147483648, 4147483647} + badValues := createGroupIDs(-1, -1003, 2147483648, 4147483647) for _, val := range badValues { - if msgs := IsValidGroupId(val); len(msgs) == 0 { + if msgs := IsValidGroupID(val); len(msgs) == 0 { t.Errorf("expected false for '%d'", val) } } } -func TestIsValidUserId(t *testing.T) { - goodValues := []int64{0, 1, 1000, 65535, 2147483647} +func TestIsValidUserID(t *testing.T) { + goodValues := createUserIDs(0, 1, 1000, 65535, 2147483647) for _, val := range goodValues { - if msgs := IsValidUserId(val); len(msgs) != 0 { + if msgs := IsValidUserID(val); len(msgs) != 0 { t.Errorf("expected true for '%d': %v", val, msgs) } } - badValues := []int64{-1, -1003, 2147483648, 4147483647} + badValues := createUserIDs(-1, -1003, 2147483648, 4147483647) for _, val := range badValues { - if msgs := IsValidUserId(val); len(msgs) == 0 { + if msgs := IsValidUserID(val); len(msgs) == 0 { t.Errorf("expected false for '%d'", val) } } diff --git a/staging/src/k8s.io/client-go/pkg/api/types.go b/staging/src/k8s.io/client-go/pkg/api/types.go index 52e6dae81b..984d827855 100644 --- a/staging/src/k8s.io/client-go/pkg/api/types.go +++ b/staging/src/k8s.io/client-go/pkg/api/types.go @@ -2153,7 +2153,7 @@ type PodSecurityContext struct { // PodSecurityContext, the value specified in SecurityContext takes precedence // for that container. // +optional - RunAsUser *int64 + RunAsUser *types.UnixUserID // Indicates that the container must run as a non-root user. // If true, the Kubelet will validate the image at runtime to ensure that it // does not run as UID 0 (root) and fail to start the container if it does. @@ -2166,7 +2166,7 @@ type PodSecurityContext struct { // to the container's primary GID. If unspecified, no groups will be added to // any container. // +optional - SupplementalGroups []int64 + SupplementalGroups []types.UnixGroupID // A special supplemental group that applies to all containers in a pod. // Some volume types allow the Kubelet to change the ownership of that volume // to be owned by the pod: @@ -2177,7 +2177,7 @@ type PodSecurityContext struct { // // If unset, the Kubelet will not modify the ownership and permissions of any volume. // +optional - FSGroup *int64 + FSGroup *types.UnixGroupID } // PodQOSClass defines the supported qos classes of Pods. @@ -3780,7 +3780,7 @@ type SecurityContext struct { // May also be set in PodSecurityContext. If set in both SecurityContext and // PodSecurityContext, the value specified in SecurityContext takes precedence. // +optional - RunAsUser *int64 + RunAsUser *types.UnixUserID // Indicates that the container must run as a non-root user. // If true, the Kubelet will validate the image at runtime to ensure that it // does not run as UID 0 (root) and fail to start the container if it does. diff --git a/staging/src/k8s.io/client-go/pkg/api/v1/generated.pb.go b/staging/src/k8s.io/client-go/pkg/api/v1/generated.pb.go index 645ea323d5..b52d86d3fd 100644 --- a/staging/src/k8s.io/client-go/pkg/api/v1/generated.pb.go +++ b/staging/src/k8s.io/client-go/pkg/api/v1/generated.pb.go @@ -32766,7 +32766,7 @@ func (m *PodSecurityContext) Unmarshal(dAtA []byte) error { if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field RunAsUser", wireType) } - var v int64 + var v k8s_io_apimachinery_pkg_types.UnixUserID for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -32776,7 +32776,7 @@ func (m *PodSecurityContext) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - v |= (int64(b) & 0x7F) << shift + v |= (k8s_io_apimachinery_pkg_types.UnixUserID(b) & 0x7F) << shift if b < 0x80 { break } @@ -32805,7 +32805,7 @@ func (m *PodSecurityContext) Unmarshal(dAtA []byte) error { m.RunAsNonRoot = &b case 4: if wireType == 0 { - var v int64 + var v k8s_io_apimachinery_pkg_types.UnixGroupID for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -32815,7 +32815,7 @@ func (m *PodSecurityContext) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - v |= (int64(b) & 0x7F) << shift + v |= (k8s_io_apimachinery_pkg_types.UnixGroupID(b) & 0x7F) << shift if b < 0x80 { break } @@ -32845,7 +32845,7 @@ func (m *PodSecurityContext) Unmarshal(dAtA []byte) error { return io.ErrUnexpectedEOF } for iNdEx < postIndex { - var v int64 + var v k8s_io_apimachinery_pkg_types.UnixGroupID for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -32855,7 +32855,7 @@ func (m *PodSecurityContext) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - v |= (int64(b) & 0x7F) << shift + v |= (k8s_io_apimachinery_pkg_types.UnixGroupID(b) & 0x7F) << shift if b < 0x80 { break } @@ -32869,7 +32869,7 @@ func (m *PodSecurityContext) Unmarshal(dAtA []byte) error { if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field FSGroup", wireType) } - var v int64 + var v k8s_io_apimachinery_pkg_types.UnixGroupID for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -32879,7 +32879,7 @@ func (m *PodSecurityContext) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - v |= (int64(b) & 0x7F) << shift + v |= (k8s_io_apimachinery_pkg_types.UnixGroupID(b) & 0x7F) << shift if b < 0x80 { break } @@ -39518,7 +39518,7 @@ func (m *SecurityContext) Unmarshal(dAtA []byte) error { if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field RunAsUser", wireType) } - var v int64 + var v k8s_io_apimachinery_pkg_types.UnixUserID for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowGenerated @@ -39528,7 +39528,7 @@ func (m *SecurityContext) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - v |= (int64(b) & 0x7F) << shift + v |= (k8s_io_apimachinery_pkg_types.UnixUserID(b) & 0x7F) << shift if b < 0x80 { break } @@ -43147,702 +43147,704 @@ func init() { } var fileDescriptorGenerated = []byte{ - // 11145 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7d, 0x8c, 0x24, 0xc7, - 0x75, 0x18, 0xae, 0x9e, 0xd9, 0xaf, 0x79, 0xfb, 0x5d, 0xb7, 0x77, 0x5c, 0xae, 0xc8, 0xdb, 0x63, - 0x53, 0xa4, 0x8f, 0xe4, 0x71, 0x57, 0x77, 0x24, 0x45, 0x4a, 0xd4, 0x8f, 0xd6, 0xee, 0xce, 0xee, - 0xdd, 0xea, 0xbe, 0x86, 0x35, 0x7b, 0x77, 0x14, 0xc5, 0x9f, 0xc8, 0xbe, 0xe9, 0xda, 0xd9, 0xe6, - 0xf5, 0x76, 0x0f, 0xbb, 0x7b, 0xf6, 0x6e, 0xa5, 0x08, 0xb0, 0x15, 0x41, 0x4a, 0x00, 0x25, 0x91, - 0xe1, 0x08, 0x08, 0x9c, 0x00, 0x0a, 0x0c, 0xc4, 0x51, 0x3e, 0x1d, 0x45, 0xd0, 0x87, 0x61, 0x39, - 0x1f, 0x8e, 0xe5, 0xc8, 0x40, 0xe2, 0x08, 0x30, 0x12, 0x3b, 0x30, 0xb2, 0xb6, 0x56, 0x88, 0xff, - 0x08, 0x90, 0xfc, 0x11, 0xff, 0x77, 0x09, 0x82, 0xa0, 0x3e, 0xbb, 0xaa, 0x67, 0x66, 0xbb, 0x67, - 0x79, 0xbb, 0x3e, 0x09, 0xf9, 0x6f, 0xa6, 0xde, 0xab, 0x57, 0x1f, 0x5d, 0xf5, 0xea, 0xbd, 0x57, - 0xef, 0xbd, 0x82, 0x73, 0x77, 0x5e, 0x89, 0x17, 0xbc, 0x70, 0xf1, 0x4e, 0xfb, 0x36, 0x89, 0x02, - 0x92, 0x90, 0x78, 0xb1, 0x75, 0xa7, 0xb9, 0xe8, 0xb4, 0xbc, 0xc5, 0x9d, 0xf3, 0x8b, 0x4d, 0x12, - 0x90, 0xc8, 0x49, 0x88, 0xbb, 0xd0, 0x8a, 0xc2, 0x24, 0x44, 0x8f, 0x71, 0xec, 0x85, 0x14, 0x7b, - 0xa1, 0x75, 0xa7, 0xb9, 0xe0, 0xb4, 0xbc, 0x85, 0x9d, 0xf3, 0x73, 0xcf, 0x37, 0xbd, 0x64, 0xab, - 0x7d, 0x7b, 0xa1, 0x11, 0x6e, 0x2f, 0x36, 0xc3, 0x66, 0xb8, 0xc8, 0x2a, 0xdd, 0x6e, 0x6f, 0xb2, - 0x7f, 0xec, 0x0f, 0xfb, 0xc5, 0x89, 0xcd, 0xbd, 0x28, 0x9a, 0x76, 0x5a, 0xde, 0xb6, 0xd3, 0xd8, - 0xf2, 0x02, 0x12, 0xed, 0xaa, 0xc6, 0x23, 0x12, 0x87, 0xed, 0xa8, 0x41, 0xb2, 0x5d, 0x38, 0xb0, - 0x56, 0xbc, 0xb8, 0x4d, 0x12, 0xa7, 0x4b, 0xc7, 0xe7, 0x16, 0x7b, 0xd5, 0x8a, 0xda, 0x41, 0xe2, - 0x6d, 0x77, 0x36, 0xf3, 0x91, 0xbc, 0x0a, 0x71, 0x63, 0x8b, 0x6c, 0x3b, 0x1d, 0xf5, 0x5e, 0xe8, - 0x55, 0xaf, 0x9d, 0x78, 0xfe, 0xa2, 0x17, 0x24, 0x71, 0x12, 0x1d, 0x34, 0xa6, 0x98, 0x44, 0x3b, - 0x24, 0x4a, 0x07, 0x44, 0xee, 0x39, 0xdb, 0x2d, 0x9f, 0x74, 0x1b, 0xd3, 0x25, 0xed, 0xd3, 0x3d, - 0xef, 0x34, 0x9b, 0x11, 0x69, 0x3a, 0x49, 0xa8, 0xd5, 0x75, 0x5a, 0x5e, 0x44, 0x9a, 0x5e, 0x9c, - 0x44, 0x4e, 0xe2, 0x85, 0xc1, 0xe2, 0xce, 0x79, 0xc7, 0x6f, 0x6d, 0x39, 0x1d, 0x94, 0xec, 0x3f, - 0xb4, 0xe0, 0xcc, 0xd2, 0xad, 0xfa, 0xaa, 0xef, 0xc4, 0x89, 0xd7, 0x58, 0xf6, 0xc3, 0xc6, 0x9d, - 0x7a, 0x12, 0x46, 0xe4, 0x66, 0xe8, 0xb7, 0xb7, 0x49, 0x9d, 0x7d, 0x08, 0x74, 0x0e, 0x46, 0x76, - 0xd8, 0xff, 0xf5, 0xea, 0xac, 0x75, 0xc6, 0x3a, 0x5b, 0x59, 0x9e, 0xfa, 0xe1, 0xde, 0xfc, 0x07, - 0xf6, 0xf7, 0xe6, 0x47, 0x6e, 0x8a, 0x72, 0xac, 0x30, 0xd0, 0xd3, 0x30, 0xb4, 0x19, 0x6f, 0xec, - 0xb6, 0xc8, 0x6c, 0x89, 0xe1, 0x4e, 0x08, 0xdc, 0xa1, 0xb5, 0x3a, 0x2d, 0xc5, 0x02, 0x8a, 0x16, - 0xa1, 0xd2, 0x72, 0xa2, 0xc4, 0xa3, 0x1d, 0x9c, 0x2d, 0x9f, 0xb1, 0xce, 0x0e, 0x2e, 0x4f, 0x0b, - 0xd4, 0x4a, 0x4d, 0x02, 0x70, 0x8a, 0x43, 0xbb, 0x11, 0x11, 0xc7, 0xbd, 0x1e, 0xf8, 0xbb, 0xb3, - 0x03, 0x67, 0xac, 0xb3, 0x23, 0x69, 0x37, 0xb0, 0x28, 0xc7, 0x0a, 0xc3, 0xfe, 0x5e, 0x09, 0x46, - 0x96, 0x36, 0x37, 0xbd, 0xc0, 0x4b, 0x76, 0xd1, 0x3b, 0x30, 0x16, 0x84, 0x2e, 0x91, 0xff, 0xd9, - 0x28, 0x46, 0x2f, 0x3c, 0xbb, 0x70, 0xd0, 0xa2, 0x5e, 0xb8, 0xa6, 0xd5, 0x58, 0x9e, 0xda, 0xdf, - 0x9b, 0x1f, 0xd3, 0x4b, 0xb0, 0x41, 0x11, 0xbd, 0x05, 0xa3, 0xad, 0xd0, 0x55, 0x0d, 0x94, 0x58, - 0x03, 0xcf, 0x1c, 0xdc, 0x40, 0x2d, 0xad, 0xb0, 0x3c, 0xb9, 0xbf, 0x37, 0x3f, 0xaa, 0x15, 0x60, - 0x9d, 0x1c, 0xf2, 0x61, 0x92, 0xfe, 0x0d, 0x12, 0x4f, 0xb5, 0x50, 0x66, 0x2d, 0x3c, 0x9f, 0xdf, - 0x82, 0x56, 0x69, 0xf9, 0xc4, 0xfe, 0xde, 0xfc, 0x64, 0xa6, 0x10, 0x67, 0x49, 0xdb, 0x9f, 0x85, - 0x89, 0xa5, 0x24, 0x71, 0x1a, 0x5b, 0xc4, 0xe5, 0xdf, 0x17, 0xbd, 0x08, 0x03, 0x81, 0xb3, 0x4d, - 0xc4, 0xd7, 0x3f, 0x23, 0xa6, 0x7d, 0xe0, 0x9a, 0xb3, 0x4d, 0xee, 0xef, 0xcd, 0x4f, 0xdd, 0x08, - 0xbc, 0xf7, 0xda, 0x62, 0xcd, 0xd0, 0x32, 0xcc, 0xb0, 0xd1, 0x05, 0x00, 0x97, 0xec, 0x78, 0x0d, - 0x52, 0x73, 0x92, 0x2d, 0xb1, 0x1a, 0x90, 0xa8, 0x0b, 0x55, 0x05, 0xc1, 0x1a, 0x96, 0xfd, 0x05, - 0x0b, 0x2a, 0x4b, 0x3b, 0xa1, 0xe7, 0xd6, 0x42, 0x37, 0x46, 0x6d, 0x98, 0x6c, 0x45, 0x64, 0x93, - 0x44, 0xaa, 0x68, 0xd6, 0x3a, 0x53, 0x3e, 0x3b, 0x7a, 0xe1, 0x42, 0xce, 0xb8, 0xcd, 0x4a, 0xab, - 0x41, 0x12, 0xed, 0x2e, 0x3f, 0x22, 0x9a, 0x9e, 0xcc, 0x40, 0x71, 0xb6, 0x0d, 0xfb, 0x97, 0x4a, - 0x70, 0x72, 0xe9, 0xb3, 0xed, 0x88, 0x54, 0xbd, 0xf8, 0x4e, 0x76, 0x2b, 0xb8, 0x5e, 0x7c, 0xe7, - 0x5a, 0x3a, 0x19, 0x6a, 0x0d, 0x56, 0x45, 0x39, 0x56, 0x18, 0xe8, 0x79, 0x18, 0xa6, 0xbf, 0x6f, - 0xe0, 0x75, 0x31, 0xfa, 0x13, 0x02, 0x79, 0xb4, 0xea, 0x24, 0x4e, 0x95, 0x83, 0xb0, 0xc4, 0x41, - 0x57, 0x61, 0xb4, 0xc1, 0x38, 0x47, 0xf3, 0x6a, 0xe8, 0x12, 0xf6, 0x85, 0x2b, 0xcb, 0xcf, 0x51, - 0xf4, 0x95, 0xb4, 0xf8, 0xfe, 0xde, 0xfc, 0x2c, 0xef, 0x9b, 0x20, 0xa1, 0xc1, 0xb0, 0x5e, 0x1f, - 0xd9, 0x6a, 0x23, 0x0e, 0x30, 0x4a, 0xd0, 0x65, 0x13, 0x9e, 0xd5, 0xf6, 0xd4, 0x20, 0xdb, 0x53, - 0x63, 0x3d, 0xf6, 0xd3, 0x3f, 0xb4, 0xc4, 0x9c, 0xac, 0x79, 0xbe, 0xc9, 0x1e, 0x2e, 0x00, 0xc4, - 0xa4, 0x11, 0x91, 0x44, 0x9b, 0x15, 0xf5, 0x99, 0xeb, 0x0a, 0x82, 0x35, 0x2c, 0xba, 0xf9, 0xe3, - 0x2d, 0x27, 0x62, 0xab, 0x45, 0xcc, 0x8d, 0xda, 0xfc, 0x75, 0x09, 0xc0, 0x29, 0x8e, 0xb1, 0xf9, - 0xcb, 0xb9, 0x9b, 0xff, 0xb7, 0x2d, 0x18, 0x5e, 0xf6, 0x02, 0xd7, 0x0b, 0x9a, 0xe8, 0x1d, 0x18, - 0xa1, 0x67, 0x83, 0xeb, 0x24, 0x8e, 0xd8, 0xf7, 0x1f, 0x96, 0x8b, 0x47, 0x67, 0xd5, 0x72, 0xf9, - 0xc4, 0x0b, 0x14, 0x9b, 0x2e, 0xa2, 0xeb, 0xb7, 0xdf, 0x25, 0x8d, 0xe4, 0x2a, 0x49, 0x9c, 0x74, - 0x38, 0x69, 0x19, 0x56, 0x54, 0xd1, 0x0d, 0x18, 0x4a, 0x9c, 0xa8, 0x49, 0x12, 0xb1, 0xed, 0x73, - 0x36, 0x25, 0xa7, 0x81, 0xe9, 0x92, 0x23, 0x41, 0x83, 0xa4, 0x0c, 0x72, 0x83, 0x11, 0xc1, 0x82, - 0x98, 0xdd, 0x80, 0xb1, 0x15, 0xa7, 0xe5, 0xdc, 0xf6, 0x7c, 0x2f, 0xf1, 0x48, 0x8c, 0x7e, 0x0e, - 0xca, 0x8e, 0xeb, 0xb2, 0x0d, 0x50, 0x59, 0x3e, 0xb9, 0xbf, 0x37, 0x5f, 0x5e, 0x72, 0xdd, 0xfb, - 0x7b, 0xf3, 0xa0, 0xb0, 0x76, 0x31, 0xc5, 0x40, 0xcf, 0xc2, 0x80, 0x1b, 0x85, 0xad, 0xd9, 0x12, - 0xc3, 0x3c, 0x45, 0x77, 0x6a, 0x35, 0x0a, 0x5b, 0x19, 0x54, 0x86, 0x63, 0xff, 0xa0, 0x04, 0x68, - 0x85, 0xb4, 0xb6, 0xd6, 0xea, 0xc6, 0x37, 0x3d, 0x0b, 0x23, 0xdb, 0x61, 0xe0, 0x25, 0x61, 0x14, - 0x8b, 0x06, 0xd9, 0xba, 0xb8, 0x2a, 0xca, 0xb0, 0x82, 0xa2, 0x33, 0x30, 0xd0, 0x4a, 0xb7, 0xf7, - 0x98, 0x64, 0x0d, 0x6c, 0x63, 0x33, 0x08, 0xc5, 0x68, 0xc7, 0x24, 0x12, 0xeb, 0x59, 0x61, 0xdc, - 0x88, 0x49, 0x84, 0x19, 0x24, 0x5d, 0x41, 0x74, 0x6d, 0x89, 0xd5, 0x9a, 0x59, 0x41, 0x14, 0x82, - 0x35, 0x2c, 0xf4, 0x36, 0x54, 0xf8, 0x3f, 0x4c, 0x36, 0xd9, 0xd2, 0xcd, 0x65, 0x0a, 0x57, 0xc2, - 0x86, 0xe3, 0x67, 0x27, 0x7f, 0x9c, 0xad, 0x38, 0x49, 0x08, 0xa7, 0x34, 0x8d, 0x15, 0x37, 0x94, - 0xbb, 0xe2, 0xfe, 0x96, 0x05, 0x68, 0xc5, 0x0b, 0x5c, 0x12, 0x1d, 0xc3, 0xd1, 0xd9, 0xdf, 0x66, - 0xf8, 0x63, 0xda, 0xb5, 0x70, 0xbb, 0x15, 0x06, 0x24, 0x48, 0x56, 0xc2, 0xc0, 0xe5, 0xc7, 0xe9, - 0xc7, 0x60, 0x20, 0xa1, 0x4d, 0xf1, 0x6e, 0x3d, 0x2d, 0x3f, 0x0b, 0x6d, 0xe0, 0xfe, 0xde, 0xfc, - 0xa9, 0xce, 0x1a, 0xac, 0x0b, 0xac, 0x0e, 0xfa, 0x28, 0x0c, 0xc5, 0x89, 0x93, 0xb4, 0x63, 0xd1, - 0xd1, 0x27, 0x64, 0x47, 0xeb, 0xac, 0xf4, 0xfe, 0xde, 0xfc, 0xa4, 0xaa, 0xc6, 0x8b, 0xb0, 0xa8, - 0x80, 0x9e, 0x81, 0xe1, 0x6d, 0x12, 0xc7, 0x4e, 0x53, 0x32, 0xb8, 0x49, 0x51, 0x77, 0xf8, 0x2a, - 0x2f, 0xc6, 0x12, 0x8e, 0x9e, 0x84, 0x41, 0x12, 0x45, 0x61, 0x24, 0x56, 0xc4, 0xb8, 0x40, 0x1c, - 0x5c, 0xa5, 0x85, 0x98, 0xc3, 0xec, 0xff, 0x6c, 0xc1, 0xa4, 0xea, 0x2b, 0x6f, 0xeb, 0x18, 0xb6, - 0xbc, 0x0b, 0xd0, 0x90, 0x03, 0x8c, 0xd9, 0x46, 0xd3, 0xda, 0xe8, 0xbe, 0xfc, 0x3a, 0x27, 0x34, - 0x6d, 0x43, 0x15, 0xc5, 0x58, 0xa3, 0x6b, 0xff, 0x5b, 0x0b, 0x4e, 0x64, 0xc6, 0x76, 0xc5, 0x8b, - 0x13, 0xf4, 0x56, 0xc7, 0xf8, 0x16, 0x8a, 0x8d, 0x8f, 0xd6, 0x66, 0xa3, 0x53, 0xeb, 0x45, 0x96, - 0x68, 0x63, 0xc3, 0x30, 0xe8, 0x25, 0x64, 0x5b, 0x0e, 0xeb, 0xf9, 0x82, 0xc3, 0xe2, 0xfd, 0x4b, - 0xbf, 0xd2, 0x3a, 0xa5, 0x81, 0x39, 0x29, 0xfb, 0x7f, 0x59, 0x50, 0x59, 0x09, 0x83, 0x4d, 0xaf, - 0x79, 0xd5, 0x69, 0x1d, 0xc3, 0xf7, 0xa9, 0xc3, 0x00, 0xa3, 0xce, 0x87, 0x70, 0x3e, 0x6f, 0x08, - 0xa2, 0x63, 0x0b, 0xf4, 0x4c, 0xe5, 0xc2, 0x82, 0x62, 0x53, 0xb4, 0x08, 0x33, 0x62, 0x73, 0x2f, - 0x43, 0x45, 0x21, 0xa0, 0x29, 0x28, 0xdf, 0x21, 0x5c, 0x92, 0xac, 0x60, 0xfa, 0x13, 0xcd, 0xc0, - 0xe0, 0x8e, 0xe3, 0xb7, 0xc5, 0xe6, 0xc5, 0xfc, 0xcf, 0xc7, 0x4a, 0xaf, 0x58, 0xf6, 0x0f, 0xd8, - 0x0e, 0x14, 0x8d, 0xac, 0x06, 0x3b, 0x82, 0x39, 0x7c, 0xd1, 0x82, 0x19, 0xbf, 0x0b, 0x53, 0x12, - 0x73, 0x72, 0x18, 0x76, 0xf6, 0x98, 0xe8, 0xf6, 0x4c, 0x37, 0x28, 0xee, 0xda, 0x1a, 0xe5, 0xf5, - 0x61, 0x8b, 0x2e, 0x38, 0xc7, 0x67, 0x5d, 0x17, 0x32, 0xc0, 0x75, 0x51, 0x86, 0x15, 0xd4, 0xfe, - 0x33, 0x0b, 0x66, 0xd4, 0x38, 0x2e, 0x93, 0xdd, 0x3a, 0xf1, 0x49, 0x23, 0x09, 0xa3, 0x87, 0x65, - 0x24, 0x8f, 0xf3, 0x6f, 0xc2, 0x79, 0xd2, 0xa8, 0x20, 0x50, 0xbe, 0x4c, 0x76, 0xf9, 0x07, 0xd2, - 0x07, 0x5a, 0x3e, 0x70, 0xa0, 0xbf, 0x69, 0xc1, 0xb8, 0x1a, 0xe8, 0x31, 0x6c, 0xb9, 0x2b, 0xe6, - 0x96, 0xfb, 0xb9, 0x82, 0xeb, 0xb5, 0xc7, 0x66, 0xfb, 0x9b, 0x25, 0xca, 0x36, 0x04, 0x4e, 0x2d, - 0x0a, 0xe9, 0x24, 0x51, 0x8e, 0xff, 0x90, 0x7c, 0xa5, 0xfe, 0x06, 0x7b, 0x99, 0xec, 0x6e, 0x84, - 0x54, 0x9a, 0xe8, 0x3e, 0x58, 0xe3, 0xa3, 0x0e, 0x1c, 0xf8, 0x51, 0x7f, 0xaf, 0x04, 0x27, 0xd5, - 0xb4, 0x18, 0xa7, 0xf4, 0xcf, 0xe4, 0xc4, 0x9c, 0x87, 0x51, 0x97, 0x6c, 0x3a, 0x6d, 0x3f, 0x51, - 0xda, 0xc4, 0x20, 0x57, 0x33, 0xab, 0x69, 0x31, 0xd6, 0x71, 0xfa, 0x98, 0xcb, 0xaf, 0x8f, 0x32, - 0x7e, 0x9e, 0x38, 0x74, 0xd5, 0x53, 0x09, 0x4f, 0x53, 0x0f, 0xc7, 0x74, 0xf5, 0x50, 0xa8, 0x82, - 0x4f, 0xc2, 0xa0, 0xb7, 0x4d, 0xcf, 0xfc, 0x92, 0x79, 0x94, 0xaf, 0xd3, 0x42, 0xcc, 0x61, 0xe8, - 0x29, 0x18, 0x6e, 0x84, 0xdb, 0xdb, 0x4e, 0xe0, 0xce, 0x96, 0x99, 0xcc, 0x39, 0x4a, 0xc5, 0x82, - 0x15, 0x5e, 0x84, 0x25, 0x0c, 0x3d, 0x06, 0x03, 0x4e, 0xd4, 0x8c, 0x67, 0x07, 0x18, 0xce, 0x08, - 0x6d, 0x69, 0x29, 0x6a, 0xc6, 0x98, 0x95, 0x52, 0x59, 0xf2, 0x6e, 0x18, 0xdd, 0xf1, 0x82, 0x66, - 0xd5, 0x8b, 0x98, 0x60, 0xa8, 0xc9, 0x92, 0xb7, 0x14, 0x04, 0x6b, 0x58, 0xa8, 0x06, 0x83, 0xad, - 0x30, 0x4a, 0xe2, 0xd9, 0x21, 0x36, 0xf1, 0xcf, 0xe5, 0x6e, 0x3f, 0x3e, 0xee, 0x5a, 0x18, 0x25, - 0xe9, 0x50, 0xe8, 0xbf, 0x18, 0x73, 0x42, 0x68, 0x05, 0xca, 0x24, 0xd8, 0x99, 0x1d, 0x66, 0xf4, - 0x3e, 0x74, 0x30, 0xbd, 0xd5, 0x60, 0xe7, 0xa6, 0x13, 0xa5, 0xfc, 0x6a, 0x35, 0xd8, 0xc1, 0xb4, - 0x36, 0x6a, 0x40, 0x45, 0x1a, 0xc3, 0xe2, 0xd9, 0x91, 0x22, 0x4b, 0x11, 0x0b, 0x74, 0x4c, 0xde, - 0x6b, 0x7b, 0x11, 0xd9, 0x26, 0x41, 0x12, 0xa7, 0x8a, 0x95, 0x84, 0xc6, 0x38, 0xa5, 0x8b, 0x1a, - 0x30, 0xc6, 0xe5, 0xcf, 0xab, 0x61, 0x3b, 0x48, 0xe2, 0xd9, 0x0a, 0xeb, 0x72, 0x8e, 0xe5, 0xe2, - 0x66, 0x5a, 0x63, 0x79, 0x46, 0x90, 0x1f, 0xd3, 0x0a, 0x63, 0x6c, 0x10, 0x45, 0x6f, 0xc1, 0xb8, - 0xef, 0xed, 0x90, 0x80, 0xc4, 0x71, 0x2d, 0x0a, 0x6f, 0x93, 0x59, 0x60, 0xa3, 0x79, 0x32, 0x4f, - 0x8b, 0x0f, 0x6f, 0x93, 0xe5, 0xe9, 0xfd, 0xbd, 0xf9, 0xf1, 0x2b, 0x7a, 0x6d, 0x6c, 0x12, 0x43, - 0x6f, 0xc3, 0x04, 0x15, 0x76, 0xbd, 0x94, 0xfc, 0x68, 0x71, 0xf2, 0x68, 0x7f, 0x6f, 0x7e, 0x02, - 0x1b, 0xd5, 0x71, 0x86, 0x1c, 0xda, 0x80, 0x8a, 0xef, 0x6d, 0x92, 0xc6, 0x6e, 0xc3, 0x27, 0xb3, - 0x63, 0x8c, 0x76, 0xce, 0xe6, 0xbc, 0x22, 0xd1, 0xb9, 0x82, 0xa1, 0xfe, 0xe2, 0x94, 0x10, 0xba, - 0x09, 0xa7, 0x12, 0x12, 0x6d, 0x7b, 0x01, 0xb3, 0xd1, 0x09, 0xe9, 0x97, 0x99, 0x4a, 0xc6, 0xd9, - 0xaa, 0x3d, 0x2d, 0x26, 0xf6, 0xd4, 0x46, 0x57, 0x2c, 0xdc, 0xa3, 0x36, 0xba, 0x0e, 0x93, 0x6c, - 0x3f, 0xd5, 0xda, 0xbe, 0x5f, 0x0b, 0x7d, 0xaf, 0xb1, 0x3b, 0x3b, 0xc1, 0x08, 0x3e, 0x25, 0x0d, - 0x20, 0xeb, 0x26, 0x98, 0x2a, 0x86, 0xe9, 0x3f, 0x9c, 0xad, 0x8d, 0x7c, 0x98, 0x8c, 0x49, 0xa3, - 0x1d, 0x79, 0xc9, 0x2e, 0x5d, 0xfb, 0xe4, 0x5e, 0x32, 0x3b, 0x59, 0x44, 0xd1, 0xad, 0x9b, 0x95, - 0xb8, 0xf5, 0x29, 0x53, 0x88, 0xb3, 0xa4, 0x29, 0xab, 0x88, 0x13, 0xd7, 0x0b, 0x66, 0xa7, 0x18, - 0x07, 0x52, 0xfb, 0xab, 0x4e, 0x0b, 0x31, 0x87, 0x31, 0xfb, 0x01, 0xfd, 0x71, 0x9d, 0x72, 0xe9, - 0x69, 0x86, 0x98, 0xda, 0x0f, 0x24, 0x00, 0xa7, 0x38, 0x54, 0x34, 0x48, 0x92, 0xdd, 0x59, 0xc4, - 0x50, 0xd5, 0x56, 0xdb, 0xd8, 0xf8, 0x14, 0xa6, 0xe5, 0xe8, 0x26, 0x0c, 0x93, 0x60, 0x67, 0x2d, - 0x0a, 0xb7, 0x67, 0x4f, 0x14, 0xe1, 0x01, 0xab, 0x1c, 0x99, 0x9f, 0x1f, 0xa9, 0x0a, 0x23, 0x8a, - 0xb1, 0x24, 0x86, 0xee, 0xc1, 0x6c, 0x97, 0xaf, 0xc4, 0x3f, 0xca, 0x0c, 0xfb, 0x28, 0x1f, 0x17, - 0x75, 0x67, 0x37, 0x7a, 0xe0, 0xdd, 0x3f, 0x00, 0x86, 0x7b, 0x52, 0xb7, 0x6f, 0xc3, 0x84, 0x62, - 0x54, 0xec, 0x7b, 0xa3, 0x79, 0x18, 0xa4, 0xbc, 0x58, 0x2a, 0xf4, 0x15, 0x3a, 0xa9, 0x94, 0x45, - 0xc7, 0x98, 0x97, 0xb3, 0x49, 0xf5, 0x3e, 0x4b, 0x96, 0x77, 0x13, 0xc2, 0x15, 0xbb, 0xb2, 0x36, - 0xa9, 0x12, 0x80, 0x53, 0x1c, 0xfb, 0xff, 0x70, 0x31, 0x29, 0xe5, 0x86, 0x05, 0x4e, 0x82, 0x73, - 0x30, 0xb2, 0x15, 0xc6, 0x09, 0xc5, 0x66, 0x6d, 0x0c, 0xa6, 0x82, 0xd1, 0x25, 0x51, 0x8e, 0x15, - 0x06, 0x7a, 0x15, 0xc6, 0x1b, 0x7a, 0x03, 0xe2, 0x18, 0x3b, 0x29, 0xaa, 0x98, 0xad, 0x63, 0x13, - 0x17, 0xbd, 0x02, 0x23, 0xcc, 0xca, 0xdd, 0x08, 0x7d, 0xa1, 0x42, 0xca, 0x53, 0x79, 0xa4, 0x26, - 0xca, 0xef, 0x6b, 0xbf, 0xb1, 0xc2, 0xa6, 0x8a, 0x38, 0xed, 0xc2, 0x7a, 0x4d, 0x1c, 0x20, 0x4a, - 0x11, 0xbf, 0xc4, 0x4a, 0xb1, 0x80, 0xda, 0xff, 0xac, 0xa4, 0xcd, 0x32, 0x55, 0x80, 0x08, 0x7a, - 0x13, 0x86, 0xef, 0x3a, 0x5e, 0xe2, 0x05, 0x4d, 0x21, 0x3d, 0xbc, 0x50, 0xf0, 0x34, 0x61, 0xd5, - 0x6f, 0xf1, 0xaa, 0xfc, 0xe4, 0x13, 0x7f, 0xb0, 0x24, 0x48, 0x69, 0x47, 0xed, 0x20, 0xa0, 0xb4, - 0x4b, 0xfd, 0xd3, 0xc6, 0xbc, 0x2a, 0xa7, 0x2d, 0xfe, 0x60, 0x49, 0x10, 0x6d, 0x02, 0xc8, 0xb5, - 0x44, 0x5c, 0x61, 0x5d, 0xfe, 0x48, 0x3f, 0xe4, 0x37, 0x54, 0xed, 0xe5, 0x09, 0x7a, 0xd6, 0xa6, - 0xff, 0xb1, 0x46, 0xd9, 0x4e, 0x98, 0x10, 0xd6, 0xd9, 0x2d, 0xf4, 0x69, 0xba, 0xa5, 0x9d, 0x28, - 0x21, 0xee, 0x52, 0x92, 0x35, 0xd0, 0x1f, 0x2c, 0x62, 0x6f, 0x78, 0xdb, 0x44, 0xdf, 0xfe, 0x82, - 0x08, 0x4e, 0xe9, 0xd9, 0xdf, 0x2d, 0xc3, 0x6c, 0xaf, 0xee, 0xd2, 0x25, 0x49, 0xee, 0x79, 0xc9, - 0x0a, 0x15, 0x93, 0x2c, 0x73, 0x49, 0xae, 0x8a, 0x72, 0xac, 0x30, 0xe8, 0xda, 0x88, 0xbd, 0xa6, - 0x54, 0x96, 0x06, 0xd3, 0xb5, 0x51, 0x67, 0xa5, 0x58, 0x40, 0x29, 0x5e, 0x44, 0x9c, 0x58, 0x5c, - 0x6e, 0x68, 0x6b, 0x08, 0xb3, 0x52, 0x2c, 0xa0, 0xba, 0x41, 0x64, 0x20, 0xc7, 0x20, 0x62, 0x4c, - 0xd1, 0xe0, 0x83, 0x9d, 0x22, 0xf4, 0x19, 0x80, 0x4d, 0x2f, 0xf0, 0xe2, 0x2d, 0x46, 0x7d, 0xa8, - 0x6f, 0xea, 0x4a, 0xc8, 0x5a, 0x53, 0x54, 0xb0, 0x46, 0x11, 0xbd, 0x04, 0xa3, 0x6a, 0x7b, 0xae, - 0x57, 0x67, 0x87, 0x4d, 0x83, 0x78, 0xca, 0xab, 0xaa, 0x58, 0xc7, 0xb3, 0xdf, 0xcd, 0xae, 0x17, - 0xb1, 0x2b, 0xb4, 0xf9, 0xb5, 0x8a, 0xce, 0x6f, 0xe9, 0xe0, 0xf9, 0xb5, 0xff, 0x53, 0x19, 0x26, - 0x8d, 0xc6, 0xda, 0x71, 0x01, 0x8e, 0xf6, 0x3a, 0x3d, 0xb0, 0x9c, 0x84, 0x88, 0x3d, 0x79, 0xae, - 0x9f, 0x4d, 0xa3, 0x1f, 0x6f, 0x74, 0x2f, 0x70, 0x4a, 0x68, 0x0b, 0x2a, 0xbe, 0x13, 0x33, 0x93, - 0x0a, 0x11, 0x7b, 0xb1, 0x3f, 0xb2, 0xa9, 0xfa, 0xe1, 0xc4, 0x89, 0x76, 0x7a, 0xf0, 0x56, 0x52, - 0xe2, 0xf4, 0xb4, 0xa5, 0xc2, 0x8e, 0xbc, 0x51, 0x53, 0xdd, 0xa1, 0x12, 0xd1, 0x2e, 0xe6, 0x30, - 0xf4, 0x0a, 0x8c, 0x45, 0x84, 0xad, 0x94, 0x15, 0x2a, 0xcf, 0xb1, 0xa5, 0x37, 0x98, 0x0a, 0x7e, - 0x58, 0x83, 0x61, 0x03, 0x33, 0x95, 0xfb, 0x87, 0x0e, 0x90, 0xfb, 0x9f, 0x81, 0x61, 0xf6, 0x43, - 0xad, 0x0a, 0xf5, 0x85, 0xd6, 0x79, 0x31, 0x96, 0xf0, 0xec, 0x22, 0x1a, 0x29, 0xb8, 0x88, 0x9e, - 0x85, 0x89, 0xaa, 0x43, 0xb6, 0xc3, 0x60, 0x35, 0x70, 0x5b, 0xa1, 0x17, 0x24, 0x68, 0x16, 0x06, - 0xd8, 0x79, 0xc2, 0xf7, 0xfb, 0x00, 0xa5, 0x80, 0x07, 0xa8, 0xec, 0x6e, 0xff, 0x71, 0x09, 0xc6, - 0xab, 0xc4, 0x27, 0x09, 0xe1, 0x7a, 0x4f, 0x8c, 0xd6, 0x00, 0x35, 0x23, 0xa7, 0x41, 0x6a, 0x24, - 0xf2, 0x42, 0xb7, 0x4e, 0x1a, 0x61, 0xc0, 0x2e, 0xa2, 0xe8, 0x01, 0x79, 0x6a, 0x7f, 0x6f, 0x1e, - 0x5d, 0xec, 0x80, 0xe2, 0x2e, 0x35, 0x90, 0x0b, 0xe3, 0xad, 0x88, 0x18, 0x76, 0x43, 0x2b, 0x5f, - 0xd4, 0xa8, 0xe9, 0x55, 0xb8, 0x34, 0x6c, 0x14, 0x61, 0x93, 0x28, 0xfa, 0x04, 0x4c, 0x85, 0x51, - 0x6b, 0xcb, 0x09, 0xaa, 0xa4, 0x45, 0x02, 0x97, 0xaa, 0x00, 0xc2, 0xda, 0x31, 0xb3, 0xbf, 0x37, - 0x3f, 0x75, 0x3d, 0x03, 0xc3, 0x1d, 0xd8, 0xe8, 0x4d, 0x98, 0x6e, 0x45, 0x61, 0xcb, 0x69, 0xb2, - 0x25, 0x23, 0xa4, 0x15, 0xce, 0x9b, 0xce, 0xed, 0xef, 0xcd, 0x4f, 0xd7, 0xb2, 0xc0, 0xfb, 0x7b, - 0xf3, 0x27, 0xd8, 0x94, 0xd1, 0x92, 0x14, 0x88, 0x3b, 0xc9, 0xd8, 0xef, 0xc1, 0xc9, 0x6a, 0x78, - 0x37, 0xb8, 0xeb, 0x44, 0xee, 0x52, 0x6d, 0x5d, 0x33, 0x4e, 0xbc, 0x21, 0x95, 0x5f, 0x7e, 0xc1, - 0x97, 0x73, 0xb2, 0x69, 0x34, 0xb8, 0xda, 0xb1, 0xe6, 0xf9, 0xa4, 0x87, 0x39, 0xe4, 0x1f, 0x95, - 0x8c, 0x36, 0x53, 0x7c, 0x75, 0x77, 0x61, 0xf5, 0xbc, 0xbb, 0xf8, 0x34, 0x8c, 0x6c, 0x7a, 0xc4, - 0x77, 0x31, 0xd9, 0x14, 0x5f, 0xeb, 0x7c, 0x91, 0xcb, 0x9d, 0x35, 0x5a, 0x47, 0x5a, 0xc7, 0xb8, - 0x12, 0xbd, 0x26, 0xc8, 0x60, 0x45, 0x10, 0xb5, 0x61, 0x4a, 0xea, 0x61, 0x12, 0x2a, 0x36, 0xfb, - 0x0b, 0xc5, 0xd4, 0x3c, 0xb3, 0x19, 0xf6, 0x79, 0x71, 0x86, 0x20, 0xee, 0x68, 0x82, 0xea, 0xcf, - 0xdb, 0xf4, 0xa8, 0x1b, 0x60, 0x4b, 0x9f, 0xe9, 0xcf, 0xcc, 0x14, 0xc0, 0x4a, 0xed, 0x5f, 0xb3, - 0xe0, 0x91, 0x8e, 0xd9, 0x12, 0x76, 0x92, 0x23, 0xfb, 0x46, 0x59, 0x63, 0x45, 0x29, 0xdf, 0x58, - 0x61, 0x5f, 0x87, 0x99, 0xd5, 0xed, 0x56, 0xb2, 0x5b, 0xf5, 0xcc, 0x2b, 0x97, 0x97, 0x61, 0x68, - 0x9b, 0xb8, 0x5e, 0x7b, 0x5b, 0x7c, 0xd6, 0x79, 0x79, 0x2e, 0x5c, 0x65, 0xa5, 0xf7, 0xf7, 0xe6, - 0xc7, 0xeb, 0x49, 0x18, 0x39, 0x4d, 0xc2, 0x0b, 0xb0, 0x40, 0xb7, 0x7f, 0x6c, 0xc1, 0xa4, 0xe4, - 0x0f, 0x4b, 0xae, 0x1b, 0x91, 0x38, 0x46, 0x73, 0x50, 0xf2, 0x5a, 0x82, 0x10, 0x08, 0x42, 0xa5, - 0xf5, 0x1a, 0x2e, 0x79, 0x2d, 0xf4, 0x26, 0x54, 0xf8, 0x4d, 0x5d, 0xba, 0x38, 0xfa, 0xbc, 0xf9, - 0x63, 0xba, 0xe1, 0x86, 0xa4, 0x81, 0x53, 0x72, 0x52, 0x4a, 0x66, 0x27, 0x4f, 0xd9, 0xbc, 0x37, - 0xba, 0x24, 0xca, 0xb1, 0xc2, 0x40, 0x67, 0x61, 0x24, 0x08, 0x5d, 0x7e, 0x99, 0xca, 0xf7, 0x29, - 0x5b, 0x72, 0xd7, 0x44, 0x19, 0x56, 0x50, 0xfb, 0x2b, 0x16, 0x8c, 0xc9, 0x31, 0x16, 0x14, 0xd8, - 0xe9, 0x26, 0x49, 0x85, 0xf5, 0x74, 0x93, 0x50, 0x81, 0x9b, 0x41, 0x0c, 0x39, 0xbb, 0xdc, 0x8f, - 0x9c, 0x6d, 0xff, 0x46, 0x09, 0x26, 0x64, 0x77, 0xea, 0xed, 0xdb, 0x31, 0xa1, 0x62, 0x48, 0xc5, - 0xe1, 0x93, 0x4f, 0xe4, 0x3a, 0x7b, 0x3e, 0x4f, 0x17, 0x33, 0xbe, 0x59, 0x2a, 0xe6, 0x2c, 0x49, - 0x3a, 0x38, 0x25, 0x89, 0x76, 0x60, 0x3a, 0x08, 0x13, 0x76, 0xbc, 0x29, 0x78, 0xb1, 0x9b, 0x8e, - 0x6c, 0x3b, 0x8f, 0x8a, 0x76, 0xa6, 0xaf, 0x65, 0xe9, 0xe1, 0xce, 0x26, 0xd0, 0x75, 0x69, 0x63, - 0x2a, 0xb3, 0xb6, 0x9e, 0x2d, 0xd6, 0x56, 0x6f, 0x13, 0x93, 0xfd, 0xbb, 0x16, 0x54, 0x24, 0xda, - 0x71, 0x5c, 0x79, 0xdd, 0x82, 0xe1, 0x98, 0x7d, 0x22, 0x39, 0x5d, 0xe7, 0x8a, 0x0d, 0x81, 0x7f, - 0xd7, 0xf4, 0x4c, 0xe7, 0xff, 0x63, 0x2c, 0xa9, 0x31, 0x63, 0xbb, 0x1a, 0xc8, 0x43, 0x67, 0x6c, - 0x57, 0x3d, 0xeb, 0x7d, 0xb3, 0x35, 0x6e, 0x58, 0x03, 0xa8, 0x60, 0xda, 0x8a, 0xc8, 0xa6, 0x77, - 0x2f, 0x2b, 0x98, 0xd6, 0x58, 0x29, 0x16, 0x50, 0xb4, 0x09, 0x63, 0x0d, 0x69, 0x8e, 0x4e, 0x59, - 0xc8, 0x87, 0x0b, 0xda, 0xfe, 0xd5, 0x35, 0x12, 0x77, 0x4d, 0x5a, 0xd1, 0x28, 0x61, 0x83, 0x2e, - 0xe5, 0x53, 0xe9, 0x4d, 0x79, 0xb9, 0xa0, 0xe1, 0x26, 0x22, 0x49, 0xda, 0x42, 0xcf, 0x4b, 0x72, - 0xfb, 0x1b, 0x16, 0x0c, 0x71, 0xfb, 0x65, 0x31, 0x23, 0xb0, 0x76, 0x41, 0x96, 0xce, 0xe7, 0x4d, - 0x5a, 0x28, 0xee, 0xcb, 0xd0, 0x2d, 0xa8, 0xb0, 0x1f, 0xcc, 0x16, 0x53, 0x2e, 0xe2, 0xa7, 0xc5, - 0xdb, 0xd7, 0xbb, 0x7a, 0x53, 0x12, 0xc0, 0x29, 0x2d, 0xfb, 0xfb, 0x65, 0xca, 0xfa, 0x52, 0x54, - 0xe3, 0x6c, 0xb7, 0x8e, 0xe3, 0x6c, 0x2f, 0x1d, 0xfd, 0xd9, 0xfe, 0x1e, 0x4c, 0x36, 0xb4, 0x0b, - 0xba, 0xf4, 0x8b, 0x5f, 0x28, 0xb8, 0xac, 0xb4, 0x5b, 0x3d, 0x6e, 0xaf, 0x5b, 0x31, 0xc9, 0xe1, - 0x2c, 0x7d, 0x44, 0x60, 0x8c, 0xaf, 0x07, 0xd1, 0xde, 0x00, 0x6b, 0x6f, 0xb1, 0xc8, 0x0a, 0xd3, - 0x1b, 0x63, 0xab, 0xb8, 0xae, 0x11, 0xc2, 0x06, 0x59, 0xfb, 0x57, 0x06, 0x61, 0x70, 0x75, 0x87, - 0x04, 0xc9, 0x31, 0xb0, 0xba, 0x6d, 0x98, 0xf0, 0x82, 0x9d, 0xd0, 0xdf, 0x21, 0x2e, 0x87, 0x1f, - 0xee, 0x78, 0x3f, 0x25, 0x1a, 0x99, 0x58, 0x37, 0x88, 0xe1, 0x0c, 0xf1, 0xa3, 0xb0, 0x14, 0xbc, - 0x0e, 0x43, 0x7c, 0x65, 0x08, 0x33, 0x41, 0x8e, 0x3d, 0x9f, 0x4d, 0xac, 0xd8, 0x41, 0xa9, 0x3d, - 0x83, 0x5f, 0x25, 0x08, 0x42, 0xe8, 0x5d, 0x98, 0xd8, 0xf4, 0xa2, 0x38, 0xa1, 0xca, 0x7e, 0x9c, - 0x38, 0xdb, 0xad, 0x43, 0xd8, 0x08, 0xd4, 0x8c, 0xac, 0x19, 0x94, 0x70, 0x86, 0x32, 0x6a, 0xc2, - 0x38, 0x55, 0x51, 0xd3, 0xa6, 0x86, 0xfb, 0x6e, 0x4a, 0x99, 0x08, 0xaf, 0xe8, 0x84, 0xb0, 0x49, - 0x97, 0xb2, 0xa4, 0x06, 0x53, 0x69, 0x47, 0x98, 0x74, 0xa3, 0x58, 0x12, 0xd7, 0x65, 0x39, 0x8c, - 0x72, 0x36, 0xe6, 0x29, 0x53, 0x31, 0x39, 0x5b, 0xea, 0x0f, 0x63, 0x7f, 0x8b, 0x9e, 0xc5, 0x74, - 0x0e, 0x8f, 0xe1, 0xf8, 0xba, 0x64, 0x1e, 0x5f, 0x4f, 0x16, 0xf8, 0xb2, 0x3d, 0x8e, 0xae, 0x77, - 0x60, 0x54, 0xfb, 0xf0, 0x68, 0x11, 0x2a, 0x0d, 0xe9, 0xcc, 0x21, 0xb8, 0xb8, 0x12, 0xa5, 0x94, - 0x97, 0x07, 0x4e, 0x71, 0xe8, 0xbc, 0x50, 0x11, 0x34, 0xeb, 0xfa, 0x45, 0x05, 0x54, 0xcc, 0x20, - 0xf6, 0x0b, 0x00, 0xab, 0xf7, 0x48, 0x63, 0x89, 0xab, 0x78, 0xda, 0xfd, 0x9e, 0xd5, 0xfb, 0x7e, - 0xcf, 0xfe, 0xa6, 0x05, 0x13, 0x6b, 0x2b, 0x86, 0x4c, 0xbf, 0x00, 0xc0, 0x65, 0xe3, 0x5b, 0xb7, - 0xae, 0x49, 0xfb, 0x35, 0x37, 0x32, 0xaa, 0x52, 0xac, 0x61, 0xa0, 0x47, 0xa1, 0xec, 0xb7, 0x03, - 0x21, 0xb2, 0x0e, 0xef, 0xef, 0xcd, 0x97, 0xaf, 0xb4, 0x03, 0x4c, 0xcb, 0x34, 0x1f, 0xab, 0x72, - 0x61, 0x1f, 0xab, 0x7c, 0x6f, 0xe3, 0xaf, 0x95, 0x61, 0x6a, 0xcd, 0x27, 0xf7, 0x8c, 0x5e, 0x3f, - 0x0d, 0x43, 0x6e, 0xe4, 0xed, 0x90, 0x28, 0x2b, 0x08, 0x54, 0x59, 0x29, 0x16, 0xd0, 0xc2, 0x6e, - 0x5f, 0x6f, 0x77, 0x1e, 0xe4, 0x47, 0xe7, 0xf2, 0x96, 0x3b, 0x66, 0xb4, 0x09, 0xc3, 0xfc, 0x3e, - 0x38, 0x9e, 0x1d, 0x64, 0x4b, 0xf1, 0xd5, 0x83, 0x3b, 0x93, 0x9d, 0x9f, 0x05, 0x61, 0x5f, 0xe1, - 0x0e, 0x37, 0x8a, 0x97, 0x89, 0x52, 0x2c, 0x89, 0xcf, 0x7d, 0x0c, 0xc6, 0x74, 0xcc, 0xbe, 0x3c, - 0x6f, 0xfe, 0xb2, 0x05, 0x27, 0xd6, 0xfc, 0xb0, 0x71, 0x27, 0xe3, 0x97, 0xf7, 0x12, 0x8c, 0xd2, - 0xcd, 0x14, 0x1b, 0x4e, 0xab, 0x86, 0x77, 0xae, 0x00, 0x61, 0x1d, 0x4f, 0xab, 0x76, 0xe3, 0xc6, - 0x7a, 0xb5, 0x9b, 0x53, 0xaf, 0x00, 0x61, 0x1d, 0xcf, 0xfe, 0x7d, 0x0b, 0x1e, 0xbf, 0xb8, 0xb2, - 0x5a, 0x23, 0x51, 0xec, 0xc5, 0x09, 0x09, 0x92, 0x0e, 0xbf, 0x62, 0x2a, 0x33, 0xba, 0x5a, 0x57, - 0x52, 0x99, 0xb1, 0xca, 0x7a, 0x21, 0xa0, 0x0f, 0x8b, 0x73, 0xfd, 0x37, 0x2c, 0x38, 0x71, 0xd1, - 0x4b, 0x30, 0x69, 0x85, 0x59, 0x57, 0xe0, 0x88, 0xb4, 0xc2, 0xd8, 0x4b, 0xc2, 0x68, 0x37, 0xeb, - 0x0a, 0x8c, 0x15, 0x04, 0x6b, 0x58, 0xbc, 0xe5, 0x1d, 0x2f, 0xa6, 0x3d, 0x2d, 0x99, 0xaa, 0x2e, - 0x16, 0xe5, 0x58, 0x61, 0xd0, 0x81, 0xb9, 0x5e, 0xc4, 0x44, 0x86, 0x5d, 0xb1, 0x83, 0xd5, 0xc0, - 0xaa, 0x12, 0x80, 0x53, 0x1c, 0xfb, 0xef, 0x58, 0x70, 0xf2, 0xa2, 0xdf, 0x8e, 0x13, 0x12, 0x6d, - 0xc6, 0x46, 0x67, 0x5f, 0x80, 0x0a, 0x91, 0xc2, 0xbd, 0xe8, 0xab, 0x3a, 0x34, 0x94, 0xd4, 0xcf, - 0xfd, 0x90, 0x15, 0x5e, 0x01, 0x77, 0xd7, 0xfe, 0x9c, 0x33, 0x7f, 0xab, 0x04, 0xe3, 0x97, 0x36, - 0x36, 0x6a, 0x17, 0x49, 0x22, 0xb8, 0x64, 0xbe, 0x51, 0x0a, 0x6b, 0x1a, 0xf9, 0x41, 0xc2, 0x4f, - 0x3b, 0xf1, 0xfc, 0x05, 0x1e, 0x78, 0xb2, 0xb0, 0x1e, 0x24, 0xd7, 0xa3, 0x7a, 0x12, 0x79, 0x41, - 0xb3, 0xab, 0x0e, 0x2f, 0x79, 0x79, 0xb9, 0x17, 0x2f, 0x47, 0x2f, 0xc0, 0x10, 0x8b, 0x7c, 0x91, - 0xc2, 0xc7, 0x07, 0x95, 0x9c, 0xc0, 0x4a, 0xef, 0xef, 0xcd, 0x57, 0x6e, 0xe0, 0x75, 0xfe, 0x07, - 0x0b, 0x54, 0xf4, 0x36, 0x8c, 0x6e, 0x25, 0x49, 0xeb, 0x12, 0x71, 0x5c, 0x12, 0x49, 0x3e, 0x71, - 0xf6, 0x60, 0x3e, 0x41, 0xa7, 0x83, 0x57, 0x48, 0xb7, 0x56, 0x5a, 0x16, 0x63, 0x9d, 0xa2, 0x5d, - 0x07, 0x48, 0x61, 0x0f, 0x48, 0x07, 0xb1, 0x7f, 0xb1, 0x04, 0xc3, 0x97, 0x9c, 0xc0, 0xf5, 0x49, - 0x84, 0xd6, 0x60, 0x80, 0xdc, 0x23, 0x0d, 0x71, 0x90, 0xe7, 0x74, 0x3d, 0x3d, 0xec, 0xb8, 0x5d, - 0x8d, 0xfe, 0xc7, 0xac, 0x3e, 0xc2, 0x30, 0x4c, 0xfb, 0x7d, 0x51, 0x79, 0x89, 0x3f, 0x97, 0x3f, - 0x0b, 0x6a, 0x51, 0xf0, 0x93, 0x52, 0x14, 0x61, 0x49, 0x88, 0x59, 0xa0, 0x1a, 0xad, 0x3a, 0x65, - 0x6f, 0x49, 0x31, 0xcd, 0x6e, 0x63, 0xa5, 0xc6, 0xd1, 0x05, 0x5d, 0x6e, 0x81, 0x92, 0x85, 0x38, - 0x25, 0x67, 0x6f, 0x40, 0x85, 0x7e, 0xfc, 0x25, 0xdf, 0x73, 0x0e, 0x36, 0x83, 0x3d, 0x07, 0x15, - 0x69, 0x88, 0x8a, 0x85, 0xcb, 0x39, 0xa3, 0x2a, 0xed, 0x54, 0x31, 0x4e, 0xe1, 0xf6, 0x2b, 0x30, - 0xc3, 0x6e, 0x79, 0x9d, 0x64, 0xcb, 0xd8, 0x8b, 0xb9, 0x8b, 0xde, 0xfe, 0xf6, 0x00, 0x4c, 0xaf, - 0xd7, 0x57, 0xea, 0xa6, 0x45, 0xf2, 0x15, 0x18, 0xe3, 0xc7, 0x3e, 0x5d, 0xca, 0x8e, 0x2f, 0xea, - 0xab, 0x9b, 0x89, 0x0d, 0x0d, 0x86, 0x0d, 0x4c, 0xf4, 0x38, 0x94, 0xbd, 0xf7, 0x82, 0xac, 0xaf, - 0xe0, 0xfa, 0xeb, 0xd7, 0x30, 0x2d, 0xa7, 0x60, 0x2a, 0x41, 0x70, 0xd6, 0xa9, 0xc0, 0x4a, 0x8a, - 0x78, 0x0d, 0x26, 0xbc, 0xb8, 0x11, 0x7b, 0xeb, 0x01, 0xe5, 0x2b, 0x4e, 0x43, 0x6e, 0x8a, 0x54, - 0xe4, 0xa7, 0x5d, 0x55, 0x50, 0x9c, 0xc1, 0xd6, 0xf8, 0xf8, 0x60, 0x61, 0x29, 0x24, 0xd7, 0x09, - 0x9d, 0x0a, 0x58, 0x2d, 0x36, 0xba, 0x98, 0x79, 0x1e, 0x09, 0x01, 0x8b, 0x0f, 0x38, 0xc6, 0x12, - 0x86, 0x2e, 0xc2, 0x74, 0x63, 0xcb, 0x69, 0x2d, 0xb5, 0x93, 0xad, 0xaa, 0x17, 0x37, 0xc2, 0x1d, - 0x12, 0xed, 0x32, 0x01, 0x78, 0x24, 0xb5, 0x69, 0x29, 0xc0, 0xca, 0xa5, 0xa5, 0x1a, 0xc5, 0xc4, - 0x9d, 0x75, 0x4c, 0x81, 0x04, 0x8e, 0x40, 0x20, 0x59, 0x82, 0x49, 0xd9, 0x6a, 0x9d, 0xc4, 0xec, - 0x88, 0x18, 0x65, 0xfd, 0x54, 0xb1, 0x3c, 0xa2, 0x58, 0xf5, 0x32, 0x8b, 0x6f, 0xbf, 0x0b, 0x15, - 0xe5, 0x29, 0x27, 0x1d, 0x44, 0xad, 0x1e, 0x0e, 0xa2, 0xf9, 0xcc, 0x5d, 0xda, 0xce, 0xcb, 0x5d, - 0x6d, 0xe7, 0xff, 0xc4, 0x82, 0xd4, 0xd5, 0x07, 0x61, 0xa8, 0xb4, 0x42, 0x76, 0xcf, 0x16, 0xc9, - 0x0b, 0xed, 0xa7, 0x72, 0xf6, 0x3c, 0xe7, 0x39, 0x7c, 0x42, 0x6a, 0xb2, 0x2e, 0x4e, 0xc9, 0xa0, - 0x2b, 0x30, 0xdc, 0x8a, 0x48, 0x3d, 0x61, 0xd1, 0x1d, 0x7d, 0x50, 0xe4, 0x0b, 0x81, 0xd7, 0xc4, - 0x92, 0x84, 0xfd, 0x2f, 0x2c, 0x80, 0x2b, 0xde, 0xb6, 0x97, 0x60, 0x27, 0x68, 0x92, 0x63, 0x50, - 0xac, 0xaf, 0xc1, 0x40, 0xdc, 0x22, 0x8d, 0x62, 0x37, 0xa5, 0x69, 0xcf, 0xea, 0x2d, 0xd2, 0x48, - 0x3f, 0x07, 0xfd, 0x87, 0x19, 0x1d, 0xfb, 0x7b, 0x00, 0x13, 0x29, 0x1a, 0x55, 0x6e, 0xd0, 0xf3, - 0x46, 0x58, 0xc3, 0xa3, 0x99, 0xb0, 0x86, 0x0a, 0xc3, 0xd6, 0x22, 0x19, 0x12, 0x28, 0x6f, 0x3b, - 0xf7, 0x84, 0x2e, 0xf5, 0x52, 0xd1, 0x0e, 0xd1, 0x96, 0x16, 0xae, 0x3a, 0xf7, 0xb8, 0xe8, 0xfa, - 0x9c, 0x5c, 0x48, 0x57, 0x9d, 0x7b, 0xf7, 0xf9, 0x7d, 0x28, 0xe3, 0x4e, 0x54, 0x79, 0xfb, 0xc2, - 0x9f, 0xa4, 0xff, 0xd9, 0x31, 0x44, 0x9b, 0x63, 0xad, 0x7a, 0x81, 0x30, 0x05, 0xf7, 0xd9, 0xaa, - 0x17, 0x64, 0x5b, 0xf5, 0x82, 0x02, 0xad, 0x7a, 0xcc, 0xff, 0x77, 0x58, 0xdc, 0xa0, 0x30, 0xe7, - 0xc9, 0xd1, 0x0b, 0x1f, 0xed, 0xab, 0x69, 0x71, 0x15, 0xc3, 0x9b, 0x5f, 0x94, 0xf2, 0xba, 0x28, - 0xcd, 0xed, 0x82, 0x6c, 0x1a, 0xfd, 0x5d, 0x0b, 0x26, 0xc4, 0x6f, 0x4c, 0xde, 0x6b, 0x93, 0x38, - 0x11, 0x72, 0xc1, 0x27, 0x0e, 0xd3, 0x1b, 0x41, 0x82, 0x77, 0xea, 0x23, 0x92, 0xfd, 0x9a, 0xc0, - 0xdc, 0xbe, 0x65, 0xfa, 0x83, 0xbe, 0x67, 0xc1, 0xcc, 0xb6, 0x73, 0x8f, 0xb7, 0xc8, 0xcb, 0xb0, - 0x93, 0x78, 0xa1, 0x70, 0x10, 0x5d, 0xeb, 0x77, 0x9d, 0x74, 0x10, 0xe2, 0xdd, 0x95, 0xbe, 0x5f, - 0x33, 0xdd, 0x50, 0x72, 0x3b, 0xdd, 0xb5, 0x87, 0x73, 0x9b, 0x30, 0x22, 0x17, 0x66, 0x17, 0x4d, - 0xa9, 0xaa, 0x8b, 0x3f, 0x39, 0x76, 0x89, 0x05, 0x69, 0x5d, 0x5c, 0x78, 0xbd, 0xed, 0x04, 0x89, - 0x97, 0xec, 0x6a, 0x9a, 0x15, 0x6b, 0x47, 0x2c, 0xc5, 0x23, 0x6d, 0xe7, 0x5d, 0x18, 0xd3, 0xd7, - 0xdd, 0x91, 0xb6, 0xf5, 0x1e, 0x9c, 0xe8, 0xb2, 0xaa, 0x8e, 0xb4, 0xc9, 0xbb, 0xf0, 0x68, 0xcf, - 0xf5, 0x71, 0x94, 0x0d, 0xdb, 0xbf, 0x65, 0xe9, 0xac, 0xf3, 0x18, 0xec, 0x56, 0x57, 0x4d, 0xbb, - 0xd5, 0xd9, 0xa2, 0x7b, 0xa8, 0x87, 0xf1, 0x6a, 0x53, 0xef, 0x3e, 0x3d, 0x12, 0xd0, 0x06, 0x0c, - 0xf9, 0xb4, 0x44, 0x5e, 0x1b, 0x9e, 0xeb, 0x67, 0x97, 0xa6, 0x12, 0x18, 0x2b, 0x8f, 0xb1, 0xa0, - 0x65, 0x7f, 0xcf, 0x82, 0x81, 0xbf, 0xc0, 0xa0, 0xab, 0x0e, 0xd2, 0x22, 0x0b, 0xc1, 0x02, 0x76, - 0xee, 0xae, 0xde, 0x4b, 0x48, 0x10, 0x33, 0x31, 0xbe, 0x97, 0xe3, 0xc3, 0x28, 0x6d, 0x4a, 0xfa, - 0xb1, 0xbc, 0x0a, 0xe3, 0xbe, 0x73, 0x9b, 0xf8, 0xd2, 0xe6, 0x9e, 0x55, 0x7a, 0xaf, 0xe8, 0x40, - 0x6c, 0xe2, 0xd2, 0xca, 0x9b, 0xfa, 0x95, 0x84, 0x10, 0x92, 0x54, 0x65, 0xe3, 0xbe, 0x02, 0x9b, - 0xb8, 0x54, 0xeb, 0xba, 0xeb, 0x24, 0x8d, 0x2d, 0xa1, 0x10, 0xab, 0xee, 0xde, 0xa2, 0x85, 0x98, - 0xc3, 0xa8, 0xb0, 0x27, 0x57, 0xec, 0x4d, 0x12, 0x31, 0x61, 0x8f, 0x0b, 0xd5, 0x4a, 0xd8, 0xc3, - 0x26, 0x18, 0x67, 0xf1, 0xd1, 0xc7, 0x60, 0x82, 0x4e, 0x4e, 0xd8, 0x4e, 0xa4, 0x97, 0xce, 0x20, - 0xf3, 0xd2, 0x61, 0x4e, 0xde, 0x1b, 0x06, 0x04, 0x67, 0x30, 0xed, 0xb7, 0xe1, 0xc4, 0x95, 0xd0, - 0x71, 0x97, 0x1d, 0xdf, 0x09, 0x1a, 0x24, 0x5a, 0x0f, 0x9a, 0xb9, 0x1e, 0x00, 0xfa, 0x2d, 0x7d, - 0x29, 0xef, 0x96, 0xde, 0x8e, 0x00, 0xe9, 0x0d, 0x08, 0xff, 0xb2, 0xb7, 0x60, 0xd8, 0xe3, 0x4d, - 0x89, 0x65, 0x7b, 0x3e, 0x4f, 0x82, 0xee, 0xe8, 0xa3, 0xe6, 0x2f, 0xc5, 0x0b, 0xb0, 0x24, 0x49, - 0xf5, 0xad, 0x6e, 0x22, 0x77, 0xbe, 0xa2, 0x6c, 0xff, 0x55, 0x0b, 0x26, 0xaf, 0x65, 0xa2, 0x82, - 0x9f, 0x86, 0x21, 0x9e, 0xa5, 0x22, 0x6b, 0xa5, 0xaa, 0xb3, 0x52, 0x2c, 0xa0, 0x0f, 0xdc, 0x48, - 0xf2, 0xcb, 0x25, 0xa8, 0x30, 0x4f, 0xe5, 0x16, 0xd5, 0x9d, 0x8e, 0x5e, 0x4c, 0xbd, 0x6a, 0x88, - 0xa9, 0x39, 0x8a, 0xba, 0xea, 0x58, 0x2f, 0x29, 0x15, 0xdd, 0x50, 0xd1, 0xb2, 0x85, 0x74, 0xf4, - 0x94, 0x20, 0x8f, 0xa8, 0x9c, 0x30, 0x83, 0x6b, 0x65, 0x24, 0x2d, 0xbb, 0x37, 0x57, 0xb8, 0x0f, - 0xdd, 0xbd, 0xb9, 0xea, 0x59, 0x0f, 0xe6, 0x54, 0xd3, 0x3a, 0xcf, 0xd8, 0xf7, 0xcf, 0x33, 0xff, - 0x53, 0xc7, 0xf7, 0x3e, 0x4b, 0x54, 0xd0, 0xf9, 0xbc, 0xf0, 0x27, 0x15, 0xa5, 0xf7, 0x19, 0x9f, - 0x11, 0xff, 0x78, 0x4e, 0x81, 0xb4, 0x8a, 0x7d, 0x09, 0x26, 0x33, 0x53, 0x87, 0x5e, 0x82, 0xc1, - 0xd6, 0x96, 0x13, 0x93, 0x8c, 0x2b, 0xd0, 0x60, 0x8d, 0x16, 0xde, 0xdf, 0x9b, 0x9f, 0x50, 0x15, - 0x58, 0x09, 0xe6, 0xd8, 0xf6, 0x17, 0x4b, 0x30, 0x70, 0x2d, 0x74, 0x8f, 0x63, 0xa9, 0x5d, 0x32, - 0x96, 0xda, 0xd3, 0xf9, 0x19, 0x49, 0x7a, 0xae, 0xb2, 0x5a, 0x66, 0x95, 0x9d, 0x2d, 0x40, 0xeb, - 0xe0, 0x05, 0xb6, 0x0d, 0xa3, 0x2c, 0xe3, 0x89, 0xf0, 0x85, 0x7a, 0xc1, 0xd0, 0xac, 0xe6, 0x33, - 0x9a, 0xd5, 0xa4, 0x86, 0xaa, 0xe9, 0x57, 0xcf, 0xc0, 0xb0, 0xf0, 0xbd, 0xc9, 0x7a, 0xdf, 0x0a, - 0x5c, 0x2c, 0xe1, 0xf6, 0x3f, 0x2f, 0x83, 0x91, 0x61, 0x05, 0xfd, 0xae, 0x05, 0x0b, 0x11, 0x8f, - 0x64, 0x72, 0xab, 0xed, 0xc8, 0x0b, 0x9a, 0xf5, 0xc6, 0x16, 0x71, 0xdb, 0xbe, 0x17, 0x34, 0xd7, - 0x9b, 0x41, 0xa8, 0x8a, 0x57, 0xef, 0x91, 0x46, 0x9b, 0x99, 0xba, 0x0b, 0x27, 0x76, 0x51, 0xf7, - 0xce, 0x17, 0xf6, 0xf7, 0xe6, 0x17, 0x70, 0x5f, 0xad, 0xe0, 0x3e, 0x7b, 0x85, 0xfe, 0xc8, 0x82, - 0x45, 0x9e, 0x63, 0xa4, 0xf8, 0x48, 0x0a, 0x69, 0xa4, 0x35, 0x49, 0x34, 0x25, 0xb7, 0x41, 0xa2, - 0xed, 0xe5, 0x97, 0xc5, 0x24, 0x2f, 0xd6, 0xfa, 0x6b, 0x15, 0xf7, 0xdb, 0x4d, 0xfb, 0x5f, 0x97, - 0x61, 0x9c, 0xce, 0x67, 0x9a, 0x57, 0xe0, 0x25, 0x63, 0x99, 0x3c, 0x91, 0x59, 0x26, 0xd3, 0x06, - 0xf2, 0x83, 0x49, 0x29, 0x10, 0xc3, 0xb4, 0xef, 0xc4, 0xc9, 0x25, 0xe2, 0x44, 0xc9, 0x6d, 0xe2, - 0xb0, 0xeb, 0xdd, 0xac, 0xeb, 0x48, 0x81, 0x1b, 0x63, 0x65, 0xfb, 0xba, 0x92, 0x25, 0x86, 0x3b, - 0xe9, 0xa3, 0x1d, 0x40, 0xec, 0x2a, 0x39, 0x72, 0x82, 0x98, 0x8f, 0xc5, 0x13, 0xa6, 0xf1, 0xfe, - 0x5a, 0x9d, 0x13, 0xad, 0xa2, 0x2b, 0x1d, 0xd4, 0x70, 0x97, 0x16, 0x34, 0x67, 0x81, 0xc1, 0xa2, - 0xce, 0x02, 0x43, 0x39, 0x6e, 0xef, 0x5f, 0xb2, 0xe0, 0x04, 0xfd, 0x2c, 0xa6, 0x8b, 0x74, 0x8c, - 0x42, 0x98, 0xa4, 0xcb, 0xce, 0x27, 0x89, 0x2c, 0x13, 0xfb, 0x2b, 0x47, 0xb2, 0x36, 0xe9, 0xa4, - 0xe2, 0xdb, 0x65, 0x93, 0x18, 0xce, 0x52, 0xb7, 0xbf, 0x69, 0x01, 0x73, 0x5a, 0x3c, 0x86, 0xc3, - 0xec, 0xa2, 0x79, 0x98, 0xd9, 0xf9, 0x1c, 0xa3, 0xc7, 0x39, 0xf6, 0x22, 0x4c, 0x51, 0x68, 0x2d, - 0x0a, 0xef, 0xed, 0x4a, 0x41, 0x3b, 0xdf, 0x9a, 0xfd, 0xa5, 0x12, 0xdf, 0x36, 0x2a, 0x24, 0x13, - 0x7d, 0xd9, 0x82, 0x91, 0x86, 0xd3, 0x72, 0x1a, 0x3c, 0x3f, 0x55, 0x01, 0xeb, 0x8c, 0x51, 0x7f, - 0x61, 0x45, 0xd4, 0xe5, 0x96, 0x85, 0x0f, 0xcb, 0xa1, 0xcb, 0xe2, 0x5c, 0x6b, 0x82, 0x6a, 0x7c, - 0xee, 0x0e, 0x8c, 0x1b, 0xc4, 0x8e, 0x54, 0x0d, 0xfd, 0xb2, 0xc5, 0x99, 0xbe, 0x52, 0x15, 0xee, - 0xc2, 0x74, 0xa0, 0xfd, 0xa7, 0xec, 0x4c, 0x4a, 0xc6, 0x0b, 0xc5, 0xd9, 0x3a, 0xe3, 0x82, 0x9a, - 0x83, 0x66, 0x86, 0x20, 0xee, 0x6c, 0xc3, 0xfe, 0x55, 0x0b, 0x1e, 0xd1, 0x11, 0xb5, 0x18, 0xda, - 0x3c, 0xbb, 0x71, 0x15, 0x46, 0xc2, 0x16, 0x89, 0x9c, 0x54, 0x2d, 0x3a, 0x2b, 0xe7, 0xff, 0xba, - 0x28, 0xbf, 0xbf, 0x37, 0x3f, 0xa3, 0x53, 0x97, 0xe5, 0x58, 0xd5, 0x44, 0x36, 0x0c, 0xb1, 0x79, - 0x89, 0x45, 0xf4, 0x33, 0xcb, 0xd7, 0xc4, 0xee, 0xa5, 0x62, 0x2c, 0x20, 0xf6, 0xdf, 0xb0, 0xf8, - 0x72, 0xd3, 0xbb, 0x8e, 0x3e, 0x07, 0x53, 0xdb, 0x54, 0x83, 0x5a, 0xbd, 0xd7, 0x8a, 0xb8, 0xd5, - 0x5b, 0xce, 0xd8, 0x4b, 0xc5, 0x67, 0x4c, 0x1b, 0xee, 0xf2, 0xac, 0xe8, 0xfd, 0xd4, 0xd5, 0x0c, - 0x59, 0xdc, 0xd1, 0x90, 0xfd, 0xf7, 0x4b, 0x7c, 0xcf, 0x32, 0x19, 0xee, 0x19, 0x18, 0x6e, 0x85, - 0xee, 0xca, 0x7a, 0x15, 0x8b, 0xb9, 0x52, 0x4c, 0xa7, 0xc6, 0x8b, 0xb1, 0x84, 0xa3, 0x0b, 0x00, - 0xe4, 0x5e, 0x42, 0xa2, 0xc0, 0xf1, 0xd5, 0x4d, 0xba, 0x12, 0x95, 0x56, 0x15, 0x04, 0x6b, 0x58, - 0xb4, 0x4e, 0x2b, 0x0a, 0x77, 0x3c, 0x97, 0x05, 0x7f, 0x94, 0xcd, 0x3a, 0x35, 0x05, 0xc1, 0x1a, - 0x16, 0xd5, 0x5b, 0xdb, 0x41, 0xcc, 0x8f, 0x31, 0xe7, 0xb6, 0x48, 0x2f, 0x34, 0x92, 0xea, 0xad, - 0x37, 0x74, 0x20, 0x36, 0x71, 0xd1, 0x65, 0x18, 0x4a, 0x1c, 0x76, 0x3f, 0x3c, 0x58, 0xc4, 0xd9, - 0x66, 0x83, 0xe2, 0xea, 0xf9, 0x9c, 0x68, 0x55, 0x2c, 0x48, 0xd8, 0xff, 0xb1, 0x02, 0x90, 0x4a, - 0x5d, 0xe8, 0x8b, 0x9d, 0x1b, 0xfe, 0x23, 0x45, 0x45, 0xb6, 0x07, 0xb7, 0xdb, 0xd1, 0x57, 0x2d, - 0x18, 0x75, 0x7c, 0x3f, 0x6c, 0x38, 0x09, 0x9b, 0x9e, 0x52, 0x51, 0xd6, 0x23, 0x7a, 0xb2, 0x94, - 0xd6, 0xe5, 0x9d, 0x79, 0x41, 0xde, 0xd9, 0x6a, 0x90, 0xdc, 0xfe, 0xe8, 0x5d, 0x40, 0x1f, 0x96, - 0x52, 0x3b, 0xff, 0xc2, 0x73, 0x59, 0xa9, 0xbd, 0xc2, 0x18, 0xae, 0x26, 0xb0, 0xa3, 0xb7, 0x8d, - 0x74, 0x3c, 0x03, 0x45, 0x22, 0x78, 0x0d, 0x39, 0x24, 0x2f, 0x13, 0x0f, 0x7a, 0x53, 0xf7, 0x4a, - 0x1f, 0x2c, 0x12, 0x22, 0xaf, 0x89, 0xc3, 0x39, 0x1e, 0xe9, 0x09, 0x4c, 0xba, 0xe6, 0xc9, 0x2b, - 0x3c, 0xeb, 0xce, 0xe7, 0xb7, 0x90, 0x39, 0xb2, 0xd3, 0xb3, 0x36, 0x03, 0xc0, 0xd9, 0x26, 0xd0, - 0x9b, 0x3c, 0x66, 0x60, 0x3d, 0xd8, 0x0c, 0x85, 0x77, 0xdd, 0xb9, 0x02, 0xdf, 0x7c, 0x37, 0x4e, - 0xc8, 0x36, 0xad, 0x93, 0x1e, 0xae, 0xd7, 0x04, 0x15, 0xac, 0xe8, 0xa1, 0x0d, 0x18, 0x62, 0x01, - 0x5b, 0xf1, 0xec, 0x48, 0x11, 0x4b, 0x9c, 0x19, 0xa7, 0x9c, 0xee, 0x1f, 0xf6, 0x37, 0xc6, 0x82, - 0x16, 0xba, 0x24, 0x33, 0x15, 0xc4, 0xeb, 0xc1, 0x8d, 0x98, 0xb0, 0x4c, 0x05, 0x95, 0xe5, 0x0f, - 0xa5, 0xa9, 0x07, 0x78, 0x79, 0xd7, 0x84, 0x84, 0x46, 0x4d, 0x2a, 0xd8, 0x88, 0xff, 0x32, 0xcf, - 0xe1, 0x2c, 0x14, 0xe9, 0xa8, 0x99, 0x15, 0x31, 0x9d, 0xec, 0x9b, 0x26, 0x31, 0x9c, 0xa5, 0x7e, - 0xac, 0x47, 0xea, 0x5c, 0x00, 0x53, 0xd9, 0x4d, 0x79, 0xa4, 0x47, 0xf8, 0x4f, 0x06, 0x60, 0xc2, - 0x5c, 0x1c, 0x68, 0x11, 0x2a, 0x82, 0x88, 0xca, 0x7b, 0xa6, 0xf6, 0xc0, 0x55, 0x09, 0xc0, 0x29, - 0x0e, 0xcb, 0x00, 0xc7, 0xaa, 0x6b, 0x7e, 0x55, 0x69, 0x06, 0x38, 0x05, 0xc1, 0x1a, 0x16, 0x95, - 0x84, 0x6f, 0x87, 0x61, 0xa2, 0x4e, 0x02, 0xb5, 0x6e, 0x96, 0x59, 0x29, 0x16, 0x50, 0x7a, 0x02, - 0xdc, 0xa1, 0x1f, 0xd3, 0x37, 0xad, 0x8a, 0xea, 0x04, 0xb8, 0xac, 0x03, 0xb1, 0x89, 0x4b, 0x4f, - 0xb4, 0x30, 0x66, 0x0b, 0x51, 0xc8, 0xdb, 0xa9, 0x9f, 0x5a, 0x9d, 0x07, 0x31, 0x4a, 0x38, 0xfa, - 0x14, 0x3c, 0xa2, 0x62, 0x0e, 0x31, 0xb7, 0xd2, 0xca, 0x16, 0x87, 0x0c, 0x95, 0xf9, 0x91, 0x95, - 0xee, 0x68, 0xb8, 0x57, 0x7d, 0xf4, 0x1a, 0x4c, 0x08, 0x59, 0x59, 0x52, 0x1c, 0x36, 0xdd, 0x0d, - 0x2e, 0x1b, 0x50, 0x9c, 0xc1, 0x46, 0x55, 0x98, 0xa2, 0x25, 0x4c, 0x48, 0x95, 0x14, 0x78, 0xec, - 0xa4, 0x3a, 0xea, 0x2f, 0x67, 0xe0, 0xb8, 0xa3, 0x06, 0x5a, 0x82, 0x49, 0x2e, 0xac, 0x50, 0xc5, - 0x90, 0x7d, 0x07, 0xe1, 0x12, 0xab, 0x36, 0xc2, 0x75, 0x13, 0x8c, 0xb3, 0xf8, 0xe8, 0x15, 0x18, - 0x73, 0xa2, 0xc6, 0x96, 0x97, 0x90, 0x46, 0xd2, 0x8e, 0x78, 0x1e, 0x10, 0xcd, 0x5f, 0x63, 0x49, - 0x83, 0x61, 0x03, 0xd3, 0xfe, 0x2c, 0x9c, 0xe8, 0xe2, 0x7f, 0x4f, 0x17, 0x8e, 0xd3, 0xf2, 0xe4, - 0x98, 0x32, 0x1e, 0x67, 0x4b, 0xb5, 0x75, 0x39, 0x1a, 0x0d, 0x8b, 0xae, 0x4e, 0x66, 0x9e, 0xd6, - 0xd2, 0x92, 0xaa, 0xd5, 0xb9, 0x26, 0x01, 0x38, 0xc5, 0xb1, 0xff, 0xbc, 0x02, 0x9a, 0xf5, 0xa6, - 0x80, 0x97, 0xd1, 0x2b, 0x30, 0x26, 0x33, 0xed, 0x6a, 0x19, 0x2e, 0xd5, 0x30, 0x2f, 0x6a, 0x30, - 0x6c, 0x60, 0xd2, 0xbe, 0x05, 0xd2, 0x26, 0x95, 0xf5, 0x6f, 0x53, 0xc6, 0x2a, 0x9c, 0xe2, 0xa0, - 0x73, 0x30, 0x12, 0x13, 0x7f, 0xf3, 0x8a, 0x17, 0xdc, 0x11, 0x0b, 0x5b, 0x71, 0xe6, 0xba, 0x28, - 0xc7, 0x0a, 0x03, 0x2d, 0x43, 0xb9, 0xed, 0xb9, 0x62, 0x29, 0x4b, 0xb1, 0xa1, 0x7c, 0x63, 0xbd, - 0x7a, 0x7f, 0x6f, 0xfe, 0x89, 0x5e, 0x09, 0x8c, 0xa9, 0x7e, 0x1e, 0x2f, 0xd0, 0xed, 0x47, 0x2b, - 0x77, 0xb3, 0xd3, 0x0f, 0xf5, 0x69, 0xa7, 0xbf, 0x00, 0x20, 0x46, 0x2d, 0xd7, 0x72, 0x39, 0xfd, - 0x6a, 0x17, 0x15, 0x04, 0x6b, 0x58, 0x54, 0xcb, 0x6f, 0x44, 0xc4, 0x91, 0x8a, 0x30, 0xf7, 0x0b, - 0x1f, 0x39, 0xbc, 0x96, 0xbf, 0x92, 0x25, 0x86, 0x3b, 0xe9, 0xa3, 0x10, 0xa6, 0x5d, 0x11, 0xd8, - 0x9a, 0x36, 0x5a, 0xe9, 0xdf, 0x19, 0x9d, 0xb9, 0xd4, 0x64, 0x09, 0xe1, 0x4e, 0xda, 0xe8, 0x33, - 0x30, 0x27, 0x0b, 0x3b, 0xa3, 0x8a, 0xd9, 0x76, 0x29, 0x2f, 0x9f, 0xde, 0xdf, 0x9b, 0x9f, 0xab, - 0xf6, 0xc4, 0xc2, 0x07, 0x50, 0x40, 0x6f, 0xc1, 0x10, 0xbb, 0xd7, 0x89, 0x67, 0x47, 0xd9, 0x89, - 0xf7, 0x62, 0x91, 0x90, 0x06, 0xba, 0xea, 0x17, 0xd8, 0xed, 0x90, 0x70, 0xd6, 0x4d, 0x2f, 0xcb, - 0x58, 0x21, 0x16, 0x34, 0x51, 0x0b, 0x46, 0x9d, 0x20, 0x08, 0x13, 0x87, 0x0b, 0x62, 0x63, 0x45, - 0x64, 0x49, 0xad, 0x89, 0xa5, 0xb4, 0x2e, 0x6f, 0x47, 0xf9, 0xff, 0x69, 0x10, 0xac, 0x37, 0x81, - 0xee, 0xc2, 0x64, 0x78, 0x97, 0x32, 0x4c, 0x79, 0xb5, 0x11, 0xcf, 0x8e, 0x9b, 0x03, 0xcb, 0x31, - 0xd4, 0x1a, 0x95, 0x35, 0x4e, 0x66, 0x12, 0xc5, 0xd9, 0x56, 0xd0, 0x82, 0x61, 0xae, 0x9e, 0x48, - 0x5d, 0xd2, 0x53, 0x73, 0xb5, 0x6e, 0x9d, 0x66, 0x91, 0xeb, 0xdc, 0x0d, 0x95, 0x71, 0x84, 0xc9, - 0x4c, 0xe4, 0x7a, 0x0a, 0xc2, 0x3a, 0xde, 0xdc, 0x47, 0x61, 0x54, 0x9b, 0xf8, 0x7e, 0x7c, 0x9f, - 0xe7, 0x5e, 0x83, 0xa9, 0xec, 0x84, 0xf6, 0xe5, 0x3b, 0xfd, 0x3f, 0x4b, 0x30, 0xd9, 0xe5, 0xde, - 0xe8, 0x8e, 0xc7, 0xfc, 0xf7, 0x0d, 0xd6, 0x77, 0xd9, 0x0b, 0x5c, 0xcc, 0x20, 0x26, 0x03, 0x2b, - 0x15, 0x60, 0x60, 0x92, 0x9b, 0x96, 0x7b, 0x72, 0x53, 0xc1, 0xb4, 0x06, 0xde, 0x0f, 0xd3, 0x32, - 0xcf, 0x89, 0xc1, 0x42, 0xe7, 0xc4, 0x03, 0x60, 0x74, 0xc6, 0x51, 0x33, 0x5c, 0xe0, 0xa8, 0xf9, - 0x46, 0x09, 0xa6, 0x52, 0x3f, 0x71, 0x91, 0x7e, 0xfb, 0xe8, 0xaf, 0x21, 0x36, 0x8c, 0x6b, 0x88, - 0xbc, 0xec, 0xda, 0x99, 0xfe, 0xf5, 0xbc, 0x92, 0x78, 0x2b, 0x73, 0x25, 0xf1, 0x62, 0x9f, 0x74, - 0x0f, 0xbe, 0x9e, 0xf8, 0x6e, 0x09, 0x4e, 0x66, 0xab, 0xac, 0xf8, 0x8e, 0xb7, 0x7d, 0x0c, 0xf3, - 0xf5, 0x29, 0x63, 0xbe, 0x5e, 0xee, 0x6f, 0x5c, 0xac, 0x93, 0x3d, 0x27, 0xcd, 0xc9, 0x4c, 0xda, - 0x47, 0x0f, 0x43, 0xfc, 0xe0, 0x99, 0xfb, 0x03, 0x0b, 0x1e, 0xed, 0x5a, 0xef, 0x18, 0x0c, 0xaf, - 0x6f, 0x98, 0x86, 0xd7, 0x17, 0x0e, 0x31, 0xba, 0x1e, 0x96, 0xd8, 0x5f, 0x2b, 0xf7, 0x18, 0x15, - 0x33, 0x4d, 0x5d, 0x87, 0x51, 0xa7, 0xd1, 0x20, 0x71, 0x7c, 0x35, 0x74, 0x55, 0x0e, 0xac, 0xe7, - 0xd9, 0xd9, 0x92, 0x16, 0xdf, 0xdf, 0x9b, 0x9f, 0xcb, 0x92, 0x48, 0xc1, 0x58, 0xa7, 0x60, 0x66, - 0xe7, 0x2b, 0x1d, 0x51, 0x76, 0xbe, 0x0b, 0x00, 0x3b, 0x4a, 0x8b, 0xcd, 0x5a, 0xbc, 0x34, 0xfd, - 0x56, 0xc3, 0x42, 0xff, 0x3f, 0x93, 0x08, 0xb9, 0x93, 0xc6, 0x80, 0x19, 0x72, 0x9a, 0xf3, 0xfd, - 0x74, 0x87, 0x0f, 0x1e, 0xd9, 0xaa, 0xac, 0x83, 0x8a, 0x24, 0xfa, 0x04, 0x4c, 0xc5, 0x3c, 0x7f, - 0xc2, 0x8a, 0xef, 0xc4, 0x2c, 0x40, 0x42, 0xf0, 0x53, 0x16, 0xa4, 0x5a, 0xcf, 0xc0, 0x70, 0x07, - 0xb6, 0xfd, 0x9d, 0x32, 0x7c, 0xf0, 0x80, 0x65, 0x8b, 0x96, 0xcc, 0x5b, 0xdb, 0xe7, 0xb2, 0xf6, - 0x9f, 0xb9, 0xae, 0x95, 0x0d, 0x83, 0x50, 0xe6, 0x6b, 0x97, 0xde, 0xf7, 0xd7, 0xfe, 0x9a, 0x6e, - 0xad, 0xe3, 0x7e, 0x9b, 0x17, 0x0f, 0xbd, 0x31, 0x7f, 0x5a, 0x8d, 0xf5, 0x5f, 0xb0, 0xe0, 0x89, - 0xae, 0xc3, 0x32, 0xbc, 0x44, 0x16, 0xa1, 0xd2, 0xa0, 0x85, 0x5a, 0x38, 0x53, 0x1a, 0x47, 0x28, - 0x01, 0x38, 0xc5, 0x31, 0x9c, 0x41, 0x4a, 0xb9, 0xce, 0x20, 0xbf, 0x67, 0xc1, 0x4c, 0xb6, 0x13, - 0xc7, 0xc0, 0xb7, 0xea, 0x26, 0xdf, 0x5a, 0xe8, 0xef, 0xe3, 0xf7, 0x60, 0x59, 0xff, 0x6d, 0x02, - 0x4e, 0x75, 0x9c, 0x7a, 0x7c, 0x16, 0x7f, 0xc1, 0x82, 0xe9, 0x26, 0x93, 0xde, 0xb5, 0x98, 0x31, - 0x31, 0xae, 0x9c, 0x40, 0xbb, 0x03, 0x43, 0xcd, 0xb8, 0x2e, 0xd2, 0x81, 0x82, 0x3b, 0x1b, 0x43, - 0x5f, 0xb1, 0x60, 0xc6, 0xb9, 0x1b, 0x77, 0x3c, 0x0e, 0x23, 0x16, 0xd2, 0x6b, 0x39, 0xc6, 0xb2, - 0x9c, 0x67, 0x65, 0x96, 0x67, 0xf7, 0xf7, 0xe6, 0x67, 0xba, 0x61, 0xe1, 0xae, 0xad, 0xd2, 0xef, - 0xbb, 0x25, 0x62, 0x47, 0x8a, 0x45, 0x3f, 0x76, 0x8b, 0x34, 0xe1, 0x6c, 0x4d, 0x42, 0xb0, 0xa2, - 0x88, 0xde, 0x81, 0x4a, 0x53, 0x86, 0x89, 0x65, 0xd9, 0x66, 0x8f, 0x69, 0xee, 0x16, 0x55, 0xc6, - 0x7d, 0xf7, 0x15, 0x08, 0xa7, 0x44, 0xd1, 0x25, 0x28, 0x07, 0x9b, 0xb1, 0x08, 0xc8, 0xce, 0xf3, - 0x01, 0x32, 0x3d, 0xaf, 0x78, 0x0c, 0xeb, 0xb5, 0xb5, 0x3a, 0xa6, 0x24, 0x28, 0xa5, 0xe8, 0xb6, - 0x2b, 0xac, 0xc4, 0x39, 0x94, 0xf0, 0x72, 0xb5, 0x93, 0x12, 0x5e, 0xae, 0x62, 0x4a, 0x02, 0xd5, - 0x60, 0x90, 0x45, 0xa6, 0x08, 0x13, 0x70, 0x4e, 0xd4, 0x7e, 0x47, 0xfc, 0x0d, 0x4f, 0x22, 0xc9, - 0x8a, 0x31, 0x27, 0x84, 0x36, 0x60, 0xa8, 0xc1, 0xde, 0x41, 0x10, 0xba, 0x79, 0x5e, 0x3e, 0x8b, - 0x8e, 0x37, 0x13, 0xf8, 0xbd, 0x17, 0x2f, 0xc7, 0x82, 0x16, 0xa3, 0x4a, 0x5a, 0x5b, 0x9b, 0xb1, - 0x50, 0xbe, 0xf3, 0xa8, 0x76, 0xbc, 0x68, 0x21, 0xa8, 0xb2, 0x72, 0x2c, 0x68, 0xa1, 0x2a, 0x94, - 0x36, 0x1b, 0x22, 0x70, 0x25, 0xc7, 0xf4, 0x6b, 0x06, 0x24, 0x2f, 0x0f, 0xed, 0xef, 0xcd, 0x97, - 0xd6, 0x56, 0x70, 0x69, 0xb3, 0x81, 0xde, 0x80, 0xe1, 0x4d, 0x1e, 0x62, 0x2a, 0xf2, 0xce, 0x9e, - 0xcf, 0x8b, 0x83, 0xed, 0x88, 0x47, 0xe5, 0xf1, 0x19, 0x02, 0x80, 0x25, 0x39, 0x96, 0x92, 0x4f, - 0x05, 0xcd, 0x8a, 0xc4, 0xb3, 0x0b, 0xfd, 0x05, 0xd9, 0x0a, 0x9d, 0x54, 0x95, 0x62, 0x8d, 0x22, - 0x5d, 0xf3, 0x8e, 0x7c, 0xd2, 0x85, 0x25, 0x9d, 0xcd, 0x5d, 0xf3, 0x5d, 0x5f, 0x80, 0xe1, 0x6b, - 0x5e, 0x81, 0x70, 0x4a, 0x14, 0xb5, 0x61, 0x7c, 0x27, 0x6e, 0x6d, 0x11, 0xb9, 0xf5, 0x59, 0x26, - 0xda, 0xd1, 0x0b, 0x1f, 0xcf, 0x49, 0x2f, 0x2c, 0xaa, 0x78, 0x51, 0xd2, 0x76, 0xfc, 0x0e, 0x0e, - 0xc6, 0x72, 0xa0, 0xdd, 0xd4, 0xc9, 0x62, 0xb3, 0x15, 0xfa, 0x49, 0xde, 0x6b, 0x87, 0xb7, 0x77, - 0x13, 0x22, 0x32, 0xd5, 0xe6, 0x7c, 0x92, 0xd7, 0x39, 0x72, 0xe7, 0x27, 0x11, 0x00, 0x2c, 0xc9, - 0xa9, 0x29, 0x63, 0xdc, 0x78, 0xaa, 0xf0, 0x94, 0x75, 0x8c, 0x21, 0x9d, 0x32, 0xc6, 0x7d, 0x53, - 0xa2, 0x8c, 0xeb, 0xb6, 0xb6, 0xc2, 0x24, 0x0c, 0x32, 0xbc, 0x7f, 0xba, 0x08, 0xd7, 0xad, 0x75, - 0xa9, 0xd9, 0xc9, 0x75, 0xbb, 0x61, 0xe1, 0xae, 0xad, 0xa2, 0x00, 0x26, 0x5a, 0x61, 0x94, 0xdc, - 0x0d, 0x23, 0xb9, 0x0e, 0x51, 0x21, 0x1d, 0xd1, 0xa8, 0x23, 0xda, 0x66, 0x6e, 0xb8, 0x26, 0x04, - 0x67, 0xa8, 0xd3, 0x4f, 0x17, 0x37, 0x1c, 0x9f, 0xac, 0x5f, 0x9f, 0x3d, 0x51, 0xe4, 0xd3, 0xd5, - 0x39, 0x72, 0xe7, 0xa7, 0x13, 0x00, 0x2c, 0xc9, 0xd9, 0xbf, 0x3a, 0xd4, 0x29, 0x38, 0x30, 0xd5, - 0xe0, 0xaf, 0x77, 0xde, 0xc4, 0x7e, 0xa2, 0x7f, 0x0d, 0xf8, 0x01, 0xde, 0xc9, 0x7e, 0xc5, 0x82, - 0x53, 0xad, 0xae, 0x62, 0x81, 0x38, 0x7a, 0xfb, 0x55, 0xa4, 0xf9, 0xb4, 0xa8, 0x84, 0xd2, 0xdd, - 0xe1, 0xb8, 0x47, 0x9b, 0x59, 0x61, 0xba, 0xfc, 0xbe, 0x85, 0xe9, 0x5b, 0x30, 0xc2, 0xa4, 0xbf, - 0x34, 0x5d, 0x4c, 0x9f, 0x99, 0x55, 0xd8, 0x21, 0xbe, 0x22, 0x48, 0x60, 0x45, 0x8c, 0x4e, 0xdc, - 0xe3, 0xd9, 0x41, 0x60, 0xc2, 0xc0, 0x22, 0x8d, 0x21, 0xd7, 0x54, 0xd6, 0xc4, 0x4c, 0x3c, 0x5e, - 0x3b, 0x08, 0xf9, 0x7e, 0x1e, 0x02, 0x3e, 0xb8, 0x31, 0x54, 0xed, 0xa2, 0x2a, 0x0d, 0x99, 0xd7, - 0x2e, 0xf9, 0xea, 0xd2, 0xf1, 0x8a, 0xf8, 0xff, 0xc0, 0xea, 0x22, 0x91, 0x72, 0xb5, 0xec, 0xe3, - 0xa6, 0x5a, 0xf6, 0x74, 0x56, 0x2d, 0xeb, 0x30, 0xc6, 0x18, 0x1a, 0x59, 0xf1, 0x34, 0xac, 0x45, - 0xf3, 0xe1, 0xd8, 0x3e, 0x9c, 0xc9, 0x63, 0x77, 0xcc, 0x15, 0xcb, 0x55, 0x97, 0x90, 0xa9, 0x2b, - 0x96, 0xbb, 0x5e, 0xc5, 0x0c, 0x52, 0x34, 0xa5, 0x82, 0xfd, 0x8b, 0x25, 0x28, 0xd7, 0x42, 0xf7, - 0x18, 0x8c, 0x4b, 0x17, 0x0d, 0xe3, 0xd2, 0x53, 0xb9, 0x4f, 0xfc, 0xf5, 0x34, 0x25, 0x5d, 0xcf, - 0x98, 0x92, 0x7e, 0x2e, 0x9f, 0xd4, 0xc1, 0x86, 0xa3, 0xef, 0x95, 0x41, 0x7f, 0xa4, 0x10, 0xfd, - 0xfb, 0xc3, 0x78, 0xe8, 0x96, 0x8b, 0xbd, 0x5b, 0x28, 0xda, 0x60, 0x9e, 0x5c, 0x32, 0xae, 0xef, - 0xa7, 0xd6, 0x51, 0xf7, 0x16, 0xf1, 0x9a, 0x5b, 0x09, 0x71, 0xb3, 0x03, 0x3b, 0x3e, 0x47, 0xdd, - 0x3f, 0xb3, 0x60, 0x32, 0xd3, 0x3a, 0xf2, 0xbb, 0x05, 0x04, 0x1d, 0xd2, 0x5c, 0x34, 0x9d, 0x1b, - 0x41, 0xb4, 0x00, 0xa0, 0xac, 0xfe, 0xd2, 0x24, 0xc3, 0xa4, 0x53, 0x75, 0x2d, 0x10, 0x63, 0x0d, - 0x03, 0xbd, 0x04, 0xa3, 0x49, 0xd8, 0x0a, 0xfd, 0xb0, 0xb9, 0x7b, 0x99, 0xc8, 0x64, 0x1f, 0xea, - 0xc6, 0x64, 0x23, 0x05, 0x61, 0x1d, 0xcf, 0xfe, 0x7e, 0x19, 0xb2, 0x4f, 0x5c, 0xfe, 0xbf, 0x75, - 0xfa, 0xd3, 0xb3, 0x4e, 0xff, 0xd0, 0x82, 0x29, 0xda, 0x3a, 0x73, 0x9d, 0x91, 0x0e, 0xb5, 0xea, - 0x4d, 0x08, 0xeb, 0x80, 0x37, 0x21, 0x9e, 0xa6, 0xdc, 0xce, 0x0d, 0xdb, 0x89, 0x30, 0x22, 0x69, - 0x4c, 0x8c, 0x96, 0x62, 0x01, 0x15, 0x78, 0x24, 0x8a, 0x44, 0xe4, 0x91, 0x8e, 0x47, 0xa2, 0x08, - 0x0b, 0xa8, 0x7c, 0x32, 0x62, 0xa0, 0xc7, 0x93, 0x11, 0x2c, 0x5d, 0x96, 0x70, 0xd7, 0x10, 0x62, - 0x85, 0x96, 0x2e, 0x4b, 0xfa, 0x71, 0xa4, 0x38, 0xf6, 0xb7, 0xca, 0x30, 0x56, 0x0b, 0xdd, 0xd4, - 0x53, 0xfe, 0x45, 0xc3, 0x53, 0xfe, 0x4c, 0xc6, 0x53, 0x7e, 0x4a, 0xc7, 0x7d, 0x30, 0x8e, 0xf2, - 0x22, 0xad, 0x1a, 0x7b, 0xd4, 0xe4, 0x90, 0x4e, 0xf2, 0x46, 0x5a, 0x35, 0x45, 0x08, 0x9b, 0x74, - 0x7f, 0x96, 0x9c, 0xe3, 0xff, 0xb7, 0x05, 0x13, 0xb5, 0xd0, 0xa5, 0x0b, 0xf4, 0x67, 0x69, 0x35, - 0xea, 0xc9, 0xd8, 0x86, 0x0e, 0x48, 0xc6, 0xf6, 0xeb, 0x16, 0x0c, 0xd7, 0x42, 0xf7, 0x18, 0x0c, - 0xac, 0x6b, 0xa6, 0x81, 0xf5, 0x89, 0x5c, 0xce, 0xdb, 0xc3, 0xa6, 0xfa, 0x9d, 0x32, 0x8c, 0xd3, - 0x1e, 0x87, 0x4d, 0xf9, 0xbd, 0x8c, 0xb9, 0xb1, 0x0a, 0xcc, 0x0d, 0x15, 0x09, 0x43, 0xdf, 0x0f, - 0xef, 0x66, 0xbf, 0xdd, 0x1a, 0x2b, 0xc5, 0x02, 0x8a, 0xce, 0xc1, 0x48, 0x2b, 0x22, 0x3b, 0x5e, - 0xd8, 0x8e, 0xb3, 0x51, 0x8c, 0x35, 0x51, 0x8e, 0x15, 0x06, 0x7a, 0x11, 0xc6, 0x62, 0x2f, 0x68, - 0x10, 0xe9, 0xcc, 0x31, 0xc0, 0x9c, 0x39, 0x78, 0xde, 0x4b, 0xad, 0x1c, 0x1b, 0x58, 0xe8, 0x16, - 0x54, 0xd8, 0x7f, 0xb6, 0x83, 0xfa, 0x7f, 0xf3, 0x81, 0xe7, 0x56, 0x91, 0x04, 0x70, 0x4a, 0x0b, - 0x5d, 0x00, 0x48, 0xa4, 0xdb, 0x49, 0x2c, 0x92, 0xcb, 0x28, 0xb9, 0x54, 0x39, 0xa4, 0xc4, 0x58, - 0xc3, 0x42, 0xcf, 0x41, 0x25, 0x71, 0x3c, 0xff, 0x8a, 0x17, 0x90, 0x58, 0xb8, 0xed, 0x88, 0x1c, - 0xd6, 0xa2, 0x10, 0xa7, 0x70, 0x7a, 0xde, 0xb3, 0x18, 0x6a, 0xfe, 0x9e, 0xcc, 0x08, 0xc3, 0x66, - 0xe7, 0xfd, 0x15, 0x55, 0x8a, 0x35, 0x0c, 0xfb, 0x15, 0x38, 0x59, 0x0b, 0xdd, 0x5a, 0x18, 0x25, - 0x6b, 0x61, 0x74, 0xd7, 0x89, 0x5c, 0xf9, 0xfd, 0xe6, 0x65, 0xea, 0x64, 0x7a, 0x26, 0x0f, 0x72, - 0x9b, 0xa3, 0x91, 0x0a, 0xf9, 0x05, 0x76, 0xe2, 0xf7, 0x19, 0x82, 0xf1, 0xa3, 0x12, 0xa0, 0x1a, - 0x73, 0x8c, 0x31, 0x9e, 0x1f, 0xda, 0x82, 0x89, 0x98, 0x5c, 0xf1, 0x82, 0xf6, 0x3d, 0x41, 0xaa, - 0x58, 0xcc, 0x4b, 0x7d, 0x55, 0xaf, 0xc3, 0x2d, 0x1d, 0x66, 0x19, 0xce, 0xd0, 0xa5, 0x93, 0x19, - 0xb5, 0x83, 0xa5, 0xf8, 0x46, 0x4c, 0x22, 0xf1, 0xdc, 0x0e, 0x9b, 0x4c, 0x2c, 0x0b, 0x71, 0x0a, - 0xa7, 0x8b, 0x87, 0xfd, 0xb9, 0x16, 0x06, 0x38, 0x0c, 0x13, 0xb9, 0xdc, 0xd8, 0xf3, 0x0b, 0x5a, - 0x39, 0x36, 0xb0, 0xd0, 0x1a, 0xa0, 0xb8, 0xdd, 0x6a, 0xf9, 0xec, 0xae, 0xd1, 0xf1, 0x2f, 0x46, - 0x61, 0xbb, 0xc5, 0xfd, 0xa3, 0xc5, 0xcb, 0x05, 0xf5, 0x0e, 0x28, 0xee, 0x52, 0x83, 0x32, 0x8b, - 0xcd, 0x98, 0xfd, 0x16, 0x01, 0xd5, 0xdc, 0x5e, 0x59, 0x67, 0x45, 0x58, 0xc2, 0xec, 0xcf, 0xb3, - 0x03, 0x8e, 0xbd, 0x83, 0x92, 0xb4, 0x23, 0x82, 0xb6, 0x61, 0xbc, 0xc5, 0x0e, 0xb1, 0x24, 0x0a, - 0x7d, 0x9f, 0x48, 0xf9, 0xf2, 0x70, 0xae, 0x39, 0xfc, 0xe5, 0x03, 0x9d, 0x1c, 0x36, 0xa9, 0xdb, - 0xff, 0x7d, 0x82, 0xf1, 0x2a, 0x71, 0xdd, 0x3b, 0x2c, 0x9c, 0x70, 0x85, 0x24, 0xf7, 0xa1, 0x22, - 0x2f, 0x9a, 0xa5, 0xe7, 0x80, 0x70, 0xe9, 0xc5, 0x92, 0x0a, 0xfa, 0x34, 0x73, 0x31, 0xe7, 0x0c, - 0xa2, 0xf8, 0x3b, 0x8d, 0x1c, 0xdf, 0x70, 0x2f, 0x17, 0x24, 0xb0, 0x46, 0x0e, 0x5d, 0x81, 0x71, - 0xf1, 0x6c, 0x86, 0x30, 0x53, 0x94, 0x0d, 0x15, 0x7b, 0x1c, 0xeb, 0xc0, 0xfb, 0xd9, 0x02, 0x6c, - 0x56, 0x46, 0x4d, 0x78, 0x5c, 0x7b, 0x16, 0xaa, 0x8b, 0x1b, 0x19, 0xe7, 0x3c, 0x4f, 0xec, 0xef, - 0xcd, 0x3f, 0xbe, 0x71, 0x10, 0x22, 0x3e, 0x98, 0x0e, 0xba, 0x0e, 0x27, 0x9d, 0x46, 0xe2, 0xed, - 0x90, 0x2a, 0x71, 0x5c, 0xdf, 0x0b, 0x88, 0x19, 0x75, 0xff, 0xe8, 0xfe, 0xde, 0xfc, 0xc9, 0xa5, - 0x6e, 0x08, 0xb8, 0x7b, 0x3d, 0xf4, 0x71, 0xa8, 0xb8, 0x41, 0x2c, 0xe6, 0x60, 0xc8, 0x78, 0x05, - 0xad, 0x52, 0xbd, 0x56, 0x57, 0xe3, 0x4f, 0xff, 0xe0, 0xb4, 0x02, 0x7a, 0x8f, 0xbf, 0xf2, 0xaf, - 0xb4, 0x19, 0xfe, 0xfa, 0xde, 0xcb, 0x85, 0xf4, 0x67, 0x23, 0x16, 0x86, 0x5b, 0xf0, 0x94, 0xbb, - 0xa6, 0x11, 0x26, 0x63, 0x34, 0x81, 0x3e, 0x09, 0x28, 0x26, 0xd1, 0x8e, 0xd7, 0x20, 0x4b, 0x0d, - 0x96, 0x2c, 0x96, 0xd9, 0x78, 0x46, 0x8c, 0xb8, 0x05, 0x54, 0xef, 0xc0, 0xc0, 0x5d, 0x6a, 0xa1, - 0x4b, 0x94, 0xf3, 0xe8, 0xa5, 0xc2, 0xbb, 0x56, 0x0a, 0x86, 0xb3, 0x55, 0xd2, 0x8a, 0x48, 0xc3, - 0x49, 0x88, 0x6b, 0x52, 0xc4, 0x99, 0x7a, 0xf4, 0x5c, 0x52, 0xef, 0x01, 0x80, 0xe9, 0x13, 0xda, - 0xf9, 0x26, 0x00, 0xd5, 0xb3, 0xb6, 0xc2, 0x38, 0xb9, 0x46, 0x92, 0xbb, 0x61, 0x74, 0x47, 0x24, - 0xd8, 0x4a, 0x33, 0xef, 0xa5, 0x20, 0xac, 0xe3, 0x51, 0x19, 0x8a, 0x5d, 0x9e, 0xad, 0x57, 0xd9, - 0xcd, 0xc4, 0x48, 0xba, 0x77, 0x2e, 0xf1, 0x62, 0x2c, 0xe1, 0x12, 0x75, 0xbd, 0xb6, 0xc2, 0x6e, - 0x19, 0x32, 0xa8, 0xeb, 0xb5, 0x15, 0x2c, 0xe1, 0x28, 0xec, 0x7c, 0x6b, 0x6e, 0xa2, 0xc8, 0x8d, - 0x4f, 0x27, 0x27, 0x2f, 0xf8, 0xdc, 0xdc, 0x3d, 0x98, 0x52, 0xef, 0xdd, 0xf1, 0x1c, 0x64, 0xf1, - 0xec, 0x24, 0x5b, 0x38, 0x87, 0x49, 0x65, 0xa6, 0xec, 0x7a, 0xeb, 0x19, 0x9a, 0xb8, 0xa3, 0x15, - 0x23, 0x7b, 0xc4, 0x54, 0xee, 0x1b, 0x0f, 0x8b, 0x50, 0x89, 0xdb, 0xb7, 0xdd, 0x70, 0xdb, 0xf1, - 0x02, 0x76, 0x15, 0xa0, 0xbf, 0x98, 0x2f, 0x01, 0x38, 0xc5, 0x41, 0x35, 0x18, 0x71, 0x84, 0x0a, - 0x27, 0x4c, 0xf6, 0x39, 0xd1, 0xe5, 0x52, 0xe1, 0xe3, 0xd6, 0x55, 0xf9, 0x0f, 0x2b, 0x2a, 0xe8, - 0x55, 0x18, 0x17, 0xc1, 0x51, 0xc2, 0x89, 0xf1, 0x84, 0xe9, 0x48, 0x5f, 0xd7, 0x81, 0xd8, 0xc4, - 0x45, 0x4d, 0x98, 0xa0, 0x54, 0x52, 0x06, 0x38, 0x3b, 0xd3, 0x1f, 0x0f, 0xd5, 0xb2, 0x69, 0xeb, - 0x64, 0x70, 0x86, 0x2c, 0x72, 0xe1, 0x31, 0xa7, 0x9d, 0x84, 0xdb, 0x74, 0x27, 0x98, 0xfb, 0x64, - 0x23, 0xbc, 0x43, 0x82, 0xd9, 0x93, 0x6c, 0x05, 0x9e, 0xd9, 0xdf, 0x9b, 0x7f, 0x6c, 0xe9, 0x00, - 0x3c, 0x7c, 0x20, 0x15, 0xf4, 0x36, 0x8c, 0x26, 0xa1, 0x2f, 0x7c, 0x93, 0xe3, 0xd9, 0x53, 0x45, - 0x72, 0xda, 0x6c, 0xa8, 0x0a, 0xba, 0x19, 0x43, 0x11, 0xc1, 0x3a, 0x45, 0xf4, 0x0e, 0x8c, 0xd1, - 0x6f, 0x7f, 0xd5, 0x69, 0xb5, 0xbc, 0xa0, 0x19, 0xcf, 0x3e, 0x52, 0x64, 0xb6, 0x54, 0xc6, 0x46, - 0x73, 0xff, 0xb2, 0x22, 0x12, 0x63, 0x83, 0xe2, 0xdc, 0xcf, 0xc3, 0x74, 0x07, 0xd3, 0xeb, 0xcb, - 0x41, 0xf4, 0x3f, 0x0c, 0x42, 0x45, 0xd9, 0x0c, 0xd1, 0xa2, 0x69, 0x1e, 0x7e, 0x34, 0x6b, 0x1e, - 0x1e, 0xa1, 0x22, 0x9a, 0x6e, 0x11, 0xfe, 0x4c, 0x97, 0x37, 0xd4, 0x9f, 0xcd, 0xdd, 0xe5, 0xc5, - 0x63, 0xb6, 0xfa, 0x78, 0x69, 0x3e, 0xd5, 0x1b, 0x07, 0x0e, 0xd4, 0x1b, 0x0b, 0xbe, 0x0b, 0x48, - 0x35, 0xc4, 0x56, 0xe8, 0xae, 0xd7, 0xb2, 0xcf, 0x5e, 0xd5, 0x68, 0x21, 0xe6, 0x30, 0x26, 0xd9, - 0xd3, 0x53, 0x9b, 0x49, 0xf6, 0xc3, 0x87, 0x94, 0xec, 0x25, 0x01, 0x9c, 0xd2, 0x42, 0x3b, 0x30, - 0xdd, 0x30, 0x5f, 0x31, 0x53, 0x91, 0x58, 0xcf, 0xf7, 0xf1, 0x8a, 0x58, 0x5b, 0x7b, 0xe2, 0x64, - 0x25, 0x4b, 0x0f, 0x77, 0x36, 0x81, 0x5e, 0x85, 0x91, 0xf7, 0xc2, 0x98, 0x5d, 0x5c, 0x88, 0xa3, - 0x4b, 0x46, 0xbc, 0x8c, 0xbc, 0x7e, 0xbd, 0xce, 0xca, 0xef, 0xef, 0xcd, 0x8f, 0xd6, 0x42, 0x57, - 0xfe, 0xc5, 0xaa, 0x02, 0xfa, 0x82, 0x05, 0x27, 0x8d, 0x9d, 0xac, 0x7a, 0x0e, 0x87, 0xe9, 0xf9, - 0xe3, 0xa2, 0xe5, 0x93, 0xeb, 0xdd, 0x68, 0xe2, 0xee, 0x4d, 0xd9, 0xbf, 0xc3, 0x8d, 0xa4, 0xc2, - 0x6c, 0x42, 0xe2, 0xb6, 0x7f, 0x1c, 0xcf, 0x0d, 0x5c, 0x37, 0x2c, 0x3a, 0x0f, 0xc0, 0x4c, 0xff, - 0xef, 0x2c, 0x66, 0xa6, 0xdf, 0x20, 0xdb, 0x2d, 0xdf, 0x49, 0x8e, 0xc3, 0x7f, 0xf8, 0xd3, 0x30, - 0x92, 0x88, 0xd6, 0x8a, 0xbd, 0x95, 0xa0, 0x75, 0x8f, 0x5d, 0x5f, 0xa8, 0xa3, 0x4f, 0x96, 0x62, - 0x45, 0xd0, 0xfe, 0x97, 0xfc, 0xab, 0x48, 0xc8, 0x31, 0xd8, 0x22, 0xae, 0x99, 0xb6, 0x88, 0x67, - 0x0a, 0x8f, 0xa5, 0x87, 0x4d, 0xe2, 0xfb, 0xe6, 0x08, 0x98, 0x86, 0xf2, 0xd3, 0x73, 0x8f, 0x64, - 0xff, 0x8a, 0x05, 0x33, 0xdd, 0x2e, 0xf4, 0xa9, 0x08, 0xc3, 0xf5, 0x23, 0x75, 0xc3, 0xa6, 0x66, - 0xf5, 0xa6, 0x28, 0xc7, 0x0a, 0xa3, 0x70, 0xf2, 0xf2, 0xfe, 0x92, 0x43, 0x5d, 0x07, 0xf3, 0x3d, - 0x3c, 0xf4, 0x1a, 0x0f, 0x17, 0xb0, 0xd4, 0x83, 0x75, 0xfd, 0x85, 0x0a, 0xd8, 0xdf, 0x2e, 0xc1, - 0x0c, 0x37, 0x73, 0x2f, 0xed, 0x84, 0x9e, 0x5b, 0x0b, 0x5d, 0x11, 0x3c, 0xe1, 0xc2, 0x58, 0x4b, - 0x53, 0x6f, 0x8b, 0x25, 0x9b, 0xd1, 0x15, 0xe2, 0x54, 0xa5, 0xd0, 0x4b, 0xb1, 0x41, 0x95, 0xb6, - 0x42, 0x76, 0xbc, 0x86, 0xb2, 0x9a, 0x96, 0xfa, 0x3e, 0x19, 0x54, 0x2b, 0xab, 0x1a, 0x1d, 0x6c, - 0x50, 0x3d, 0x82, 0x37, 0x47, 0xec, 0xbf, 0x67, 0xc1, 0x23, 0x3d, 0x12, 0xd2, 0xd0, 0xe6, 0xee, - 0xb2, 0xab, 0x05, 0xf1, 0xe0, 0xa2, 0x6a, 0x8e, 0x5f, 0x38, 0x60, 0x01, 0x45, 0xb7, 0x01, 0xf8, - 0x85, 0x01, 0x7b, 0x7e, 0xbf, 0x54, 0xc4, 0xe3, 0xa9, 0x23, 0xed, 0x83, 0x96, 0x11, 0x40, 0x3d, - 0xb8, 0xaf, 0x51, 0xb5, 0xbf, 0x59, 0x86, 0x41, 0xfe, 0xae, 0x77, 0x0d, 0x86, 0xb7, 0x78, 0x82, - 0xdc, 0xfe, 0xf2, 0xf3, 0xa6, 0xea, 0x0b, 0x2f, 0xc0, 0x92, 0x0c, 0xba, 0x0a, 0x27, 0xe8, 0xc9, - 0xe2, 0x39, 0x7e, 0x95, 0xf8, 0xce, 0xae, 0xd4, 0x87, 0xf9, 0x43, 0x14, 0x32, 0x63, 0xfa, 0x89, - 0xf5, 0x4e, 0x14, 0xdc, 0xad, 0x1e, 0x7a, 0xad, 0x23, 0x9f, 0x1d, 0x4f, 0x3c, 0xac, 0x64, 0xe1, - 0x83, 0x73, 0xda, 0x51, 0x89, 0xbd, 0xd5, 0xa1, 0xf9, 0x6b, 0xcf, 0x27, 0x9b, 0xda, 0xbe, 0x89, - 0xcb, 0xbc, 0x17, 0xda, 0xcc, 0x6b, 0x63, 0x63, 0x2b, 0x22, 0xf1, 0x56, 0xe8, 0xbb, 0xe2, 0xe5, - 0xcf, 0xd4, 0x7b, 0x21, 0x03, 0xc7, 0x1d, 0x35, 0x28, 0x95, 0x4d, 0xc7, 0xf3, 0xdb, 0x11, 0x49, - 0xa9, 0x0c, 0x99, 0x54, 0xd6, 0x32, 0x70, 0xdc, 0x51, 0x83, 0xae, 0xad, 0x93, 0xe2, 0xb1, 0x48, - 0x19, 0x7e, 0x2d, 0x58, 0xd0, 0xa7, 0x60, 0x58, 0x3a, 0xe1, 0x17, 0xca, 0x12, 0x22, 0x5c, 0x13, - 0xd4, 0xc3, 0x93, 0xda, 0xc3, 0x64, 0xc2, 0xfd, 0x5e, 0xd2, 0x3b, 0xcc, 0xa3, 0x84, 0x7f, 0x6a, - 0xc1, 0x89, 0x2e, 0xce, 0x64, 0x9c, 0xa5, 0x35, 0xbd, 0x38, 0x51, 0xcf, 0x22, 0x68, 0x2c, 0x8d, - 0x97, 0x63, 0x85, 0x41, 0x77, 0x0b, 0x67, 0x9a, 0x59, 0x46, 0x29, 0x9c, 0x4c, 0x04, 0xb4, 0x3f, - 0x46, 0x89, 0xce, 0xc0, 0x40, 0x3b, 0x26, 0x91, 0x7c, 0x21, 0x50, 0xf2, 0x79, 0x66, 0x69, 0x64, - 0x10, 0x2a, 0xb6, 0x36, 0x95, 0x91, 0x4f, 0x13, 0x5b, 0xb9, 0x99, 0x8f, 0xc3, 0xec, 0xaf, 0x95, - 0x61, 0x32, 0xe3, 0x54, 0x4a, 0x3b, 0xb2, 0x1d, 0x06, 0x5e, 0x12, 0xaa, 0xcc, 0x6d, 0xfc, 0x51, - 0x32, 0xd2, 0xda, 0xba, 0x2a, 0xca, 0xb1, 0xc2, 0x40, 0x4f, 0xcb, 0x47, 0x61, 0xb3, 0xcf, 0x3d, - 0x2c, 0x57, 0x8d, 0x77, 0x61, 0x8b, 0x3e, 0xd5, 0xf2, 0x24, 0x0c, 0xb4, 0x42, 0xf5, 0xc6, 0xb7, - 0xfa, 0x9e, 0x78, 0xb9, 0x5a, 0x0b, 0x43, 0x1f, 0x33, 0x20, 0x7a, 0x4a, 0x8c, 0x3e, 0x73, 0x37, - 0x82, 0x1d, 0x37, 0x8c, 0xb5, 0x29, 0x78, 0x06, 0x86, 0xef, 0x90, 0xdd, 0xc8, 0x0b, 0x9a, 0xd9, - 0x9b, 0xa1, 0xcb, 0xbc, 0x18, 0x4b, 0xb8, 0x99, 0xfd, 0x7c, 0xf8, 0x88, 0x9f, 0x63, 0x19, 0xc9, - 0x3d, 0x07, 0xbf, 0x63, 0xc1, 0x24, 0x4b, 0x67, 0x2a, 0x82, 0xff, 0xbd, 0x30, 0x38, 0x06, 0x19, - 0xe3, 0x49, 0x18, 0x8c, 0x68, 0xa3, 0xd9, 0xf7, 0x14, 0x58, 0x4f, 0x30, 0x87, 0xa1, 0xc7, 0x60, - 0x80, 0x75, 0x81, 0x7e, 0xc6, 0x31, 0x9e, 0x35, 0xbd, 0xea, 0x24, 0x0e, 0x66, 0xa5, 0x2c, 0x8e, - 0x0b, 0x93, 0x96, 0xef, 0xf1, 0x4e, 0xa7, 0x06, 0xdd, 0x87, 0x2d, 0x8e, 0xab, 0x6b, 0x27, 0x1f, - 0x54, 0x1c, 0x57, 0x77, 0xe2, 0x07, 0xcb, 0xf9, 0xff, 0xa3, 0x04, 0xa7, 0xbb, 0xd6, 0x4b, 0xef, - 0x98, 0xd7, 0x8c, 0x3b, 0xe6, 0x0b, 0x99, 0x3b, 0x66, 0xfb, 0xe0, 0xda, 0x0f, 0xe6, 0xd6, 0xb9, - 0xfb, 0x65, 0x70, 0xf9, 0x18, 0x2f, 0x83, 0x07, 0x8a, 0x8a, 0x38, 0x83, 0x39, 0x22, 0xce, 0x1f, - 0x58, 0xf0, 0x68, 0xd7, 0x29, 0x7b, 0xe8, 0x02, 0xe7, 0xba, 0xf6, 0xb2, 0x87, 0x76, 0xf2, 0xcb, - 0xe5, 0x1e, 0xa3, 0x62, 0x7a, 0xca, 0x59, 0xca, 0x85, 0x18, 0x30, 0x16, 0xc2, 0xdb, 0x18, 0xe7, - 0x40, 0xbc, 0x0c, 0x2b, 0x28, 0x8a, 0xb5, 0xc0, 0x33, 0xde, 0xc9, 0xd5, 0x43, 0x6e, 0xa8, 0x05, - 0xd3, 0x12, 0xaf, 0x67, 0x34, 0xc8, 0x86, 0xa3, 0xdd, 0xd2, 0x34, 0xcf, 0xf2, 0x61, 0x34, 0xcf, - 0xb1, 0xee, 0x5a, 0x27, 0x5a, 0x82, 0xc9, 0x6d, 0x2f, 0x60, 0xaf, 0xb8, 0x9a, 0xd2, 0x93, 0x8a, - 0xfe, 0xbd, 0x6a, 0x82, 0x71, 0x16, 0x7f, 0xee, 0x55, 0x18, 0x3f, 0xbc, 0x75, 0xed, 0xc7, 0x65, - 0xf8, 0xe0, 0x01, 0x4c, 0x81, 0x9f, 0x0e, 0xc6, 0x77, 0xd1, 0x4e, 0x87, 0x8e, 0x6f, 0x53, 0x83, - 0x99, 0xcd, 0xb6, 0xef, 0xef, 0x32, 0x0f, 0x2d, 0xe2, 0x4a, 0x0c, 0x21, 0xd4, 0xa8, 0xe7, 0xe2, - 0xd7, 0xba, 0xe0, 0xe0, 0xae, 0x35, 0xd1, 0x27, 0x01, 0x85, 0xb7, 0x59, 0xc2, 0x5f, 0x37, 0xcd, - 0xd8, 0xc0, 0x3e, 0x41, 0x39, 0xdd, 0xaa, 0xd7, 0x3b, 0x30, 0x70, 0x97, 0x5a, 0x54, 0x4e, 0x65, - 0x2f, 0xcd, 0xab, 0x6e, 0x65, 0xe4, 0x54, 0xac, 0x03, 0xb1, 0x89, 0x8b, 0x2e, 0xc2, 0xb4, 0xb3, - 0xe3, 0x78, 0x3c, 0x81, 0x97, 0x24, 0xc0, 0x05, 0x55, 0x65, 0xbf, 0x5a, 0xca, 0x22, 0xe0, 0xce, - 0x3a, 0xa8, 0x65, 0x18, 0x24, 0x79, 0xaa, 0xff, 0x8f, 0x1f, 0x62, 0x05, 0x17, 0x36, 0x51, 0xda, - 0xff, 0xc5, 0xa2, 0x47, 0x5f, 0x97, 0x07, 0x3f, 0xe9, 0x8c, 0x28, 0x03, 0x9b, 0x16, 0x48, 0xa7, - 0x66, 0x64, 0x45, 0x07, 0x62, 0x13, 0x97, 0x2f, 0x8d, 0x38, 0x75, 0x18, 0x37, 0xa4, 0x4d, 0x11, - 0x83, 0xaa, 0x30, 0xa8, 0x04, 0xed, 0x7a, 0x3b, 0x5e, 0x1c, 0x46, 0x62, 0x03, 0xf5, 0xe9, 0x3e, - 0x9c, 0xf2, 0xcb, 0x2a, 0x27, 0x83, 0x25, 0x3d, 0xfb, 0xeb, 0x25, 0x18, 0x97, 0x2d, 0xbe, 0xde, - 0x0e, 0x13, 0xe7, 0x18, 0x8e, 0xf4, 0xd7, 0x8d, 0x23, 0x7d, 0xb1, 0x58, 0x48, 0x2e, 0xeb, 0x5c, - 0xcf, 0xa3, 0xfc, 0x53, 0x99, 0xa3, 0xfc, 0x7c, 0x3f, 0x44, 0x0f, 0x3e, 0xc2, 0xff, 0x8d, 0x05, - 0xd3, 0x06, 0xfe, 0x31, 0x9c, 0x24, 0x35, 0xf3, 0x24, 0x79, 0xae, 0x8f, 0xd1, 0xf4, 0x38, 0x41, - 0xbe, 0x55, 0xca, 0x8c, 0x82, 0x9d, 0x1c, 0x9f, 0x83, 0x81, 0x2d, 0x27, 0x72, 0x8b, 0x65, 0xb3, - 0xec, 0xa8, 0xbe, 0x70, 0xc9, 0x89, 0x5c, 0xce, 0xff, 0xcf, 0xa9, 0xe7, 0xc8, 0x9c, 0xc8, 0xcd, - 0x8d, 0xa3, 0x60, 0x8d, 0xa2, 0x57, 0x60, 0x28, 0x6e, 0x84, 0x2d, 0xe5, 0x69, 0x7a, 0x86, 0x3f, - 0x55, 0x46, 0x4b, 0xee, 0xef, 0xcd, 0x23, 0xb3, 0x39, 0x5a, 0x8c, 0x05, 0xfe, 0x5c, 0x13, 0x2a, - 0xaa, 0xe9, 0x23, 0xf5, 0xb5, 0xff, 0xaf, 0x65, 0x38, 0xd1, 0x65, 0xad, 0xa0, 0xcf, 0x1b, 0xf3, - 0xf6, 0x6a, 0xdf, 0x8b, 0xed, 0x7d, 0xce, 0xdc, 0xe7, 0x99, 0xa6, 0xe4, 0x8a, 0xd5, 0x71, 0x88, - 0xe6, 0x6f, 0xc4, 0x24, 0xdb, 0x3c, 0x2d, 0xca, 0x6f, 0x9e, 0x36, 0x7b, 0x6c, 0xd3, 0x4f, 0x1b, - 0x52, 0x3d, 0x3d, 0xd2, 0xef, 0xfc, 0x57, 0x06, 0x60, 0xa6, 0x5b, 0xec, 0x3f, 0xfa, 0x92, 0x95, - 0x79, 0xb2, 0xe2, 0xb5, 0xfe, 0x13, 0x08, 0xf0, 0x77, 0x2c, 0x44, 0xbe, 0x9c, 0x05, 0xf3, 0x11, - 0x8b, 0xdc, 0x19, 0x17, 0xad, 0xb3, 0x08, 0xa8, 0x88, 0x3f, 0x3f, 0x22, 0xb9, 0xc2, 0x27, 0x0e, - 0xd1, 0x15, 0xf1, 0x82, 0x49, 0x9c, 0x89, 0x80, 0x92, 0xc5, 0xf9, 0x11, 0x50, 0xb2, 0x0f, 0x73, - 0x1e, 0x8c, 0x6a, 0xe3, 0x3a, 0xd2, 0x65, 0x70, 0x87, 0x1e, 0x51, 0x5a, 0xbf, 0x8f, 0x74, 0x29, - 0xfc, 0x6d, 0x0b, 0x32, 0x6e, 0x61, 0xca, 0x2c, 0x63, 0xf5, 0x34, 0xcb, 0x9c, 0x81, 0x81, 0x28, - 0xf4, 0x49, 0xf6, 0x39, 0x05, 0x1c, 0xfa, 0x04, 0x33, 0x88, 0x7a, 0xa1, 0xb8, 0xdc, 0xeb, 0x85, - 0x62, 0xaa, 0xa7, 0xfb, 0x64, 0x87, 0x48, 0x23, 0x89, 0x62, 0xe3, 0x57, 0x68, 0x21, 0xe6, 0x30, - 0xfb, 0x37, 0x07, 0xe0, 0x44, 0x97, 0x78, 0x3a, 0xaa, 0x21, 0x35, 0x9d, 0x84, 0xdc, 0x75, 0x76, - 0xb3, 0x69, 0x5d, 0x2f, 0xf2, 0x62, 0x2c, 0xe1, 0xcc, 0x9d, 0x95, 0xa7, 0x86, 0xcb, 0x98, 0xae, - 0x44, 0x46, 0x38, 0x01, 0x3d, 0xfa, 0xb7, 0x6c, 0x2f, 0x00, 0xc4, 0xb1, 0xbf, 0x1a, 0x50, 0x09, - 0xcf, 0x15, 0x6e, 0xb3, 0x69, 0x46, 0xc1, 0xfa, 0x15, 0x01, 0xc1, 0x1a, 0x16, 0xaa, 0xc2, 0x54, - 0x2b, 0x0a, 0x13, 0x6e, 0x18, 0xac, 0x72, 0x57, 0x8b, 0x41, 0x33, 0x5e, 0xab, 0x96, 0x81, 0xe3, - 0x8e, 0x1a, 0xe8, 0x25, 0x18, 0x15, 0x31, 0x5c, 0xb5, 0x30, 0xf4, 0x85, 0x19, 0x49, 0xdd, 0xc7, - 0xd7, 0x53, 0x10, 0xd6, 0xf1, 0xb4, 0x6a, 0xcc, 0xda, 0x38, 0xdc, 0xb5, 0x1a, 0xb7, 0x38, 0x6a, - 0x78, 0x99, 0x0c, 0x21, 0x23, 0x85, 0x32, 0x84, 0xa4, 0x86, 0xb5, 0x4a, 0xe1, 0x8b, 0x18, 0xc8, - 0x35, 0x40, 0xfd, 0x7e, 0x19, 0x86, 0xf8, 0xa7, 0x38, 0x06, 0x29, 0xaf, 0x26, 0x4c, 0x4a, 0x85, - 0xb2, 0x31, 0xf0, 0x5e, 0x2d, 0x54, 0x9d, 0xc4, 0xe1, 0xac, 0x49, 0xed, 0x90, 0xd4, 0x0c, 0x85, - 0x16, 0x8c, 0x3d, 0x34, 0x97, 0xb1, 0x94, 0x00, 0xa7, 0xa1, 0xed, 0xa8, 0x2d, 0x80, 0x98, 0xbd, - 0xa7, 0x4a, 0x69, 0x88, 0x9c, 0xb3, 0x2f, 0x16, 0xea, 0x47, 0x5d, 0x55, 0xe3, 0xbd, 0x49, 0x97, - 0xa5, 0x02, 0x60, 0x8d, 0xf6, 0xdc, 0xcb, 0x50, 0x51, 0xc8, 0x79, 0x2a, 0xe4, 0x98, 0xce, 0xda, - 0xfe, 0x3f, 0x98, 0xcc, 0xb4, 0xd5, 0x97, 0x06, 0xfa, 0xdb, 0x16, 0x4c, 0xf2, 0x2e, 0xaf, 0x06, - 0x3b, 0x82, 0x15, 0x7c, 0xd1, 0x82, 0x19, 0xbf, 0xcb, 0x4e, 0x14, 0x9f, 0xf9, 0x30, 0x7b, 0x58, - 0x29, 0x9f, 0xdd, 0xa0, 0xb8, 0x6b, 0x6b, 0xe8, 0x2c, 0x8c, 0xf0, 0xe7, 0xa1, 0x1d, 0x5f, 0xf8, - 0x68, 0x8f, 0xf1, 0x6c, 0xdb, 0xbc, 0x0c, 0x2b, 0xa8, 0xfd, 0x13, 0x0b, 0xa6, 0xf9, 0x20, 0x2e, - 0x93, 0x5d, 0xa5, 0x5e, 0x3d, 0x24, 0xc3, 0x10, 0x79, 0xc5, 0x4b, 0x3d, 0xf2, 0x8a, 0xeb, 0xa3, - 0x2c, 0x1f, 0x38, 0xca, 0x6f, 0x5b, 0x20, 0x56, 0xe8, 0x31, 0xe8, 0x0f, 0xeb, 0xa6, 0xfe, 0xf0, - 0xa1, 0x22, 0x8b, 0xbe, 0x87, 0xe2, 0xf0, 0x4b, 0x25, 0x98, 0xe2, 0x08, 0xe9, 0x8d, 0xcc, 0xc3, - 0xf2, 0x71, 0xfa, 0x7b, 0xef, 0x46, 0x3d, 0x32, 0xda, 0x7d, 0xa4, 0xc6, 0xb7, 0x1c, 0x38, 0xf0, - 0x5b, 0xfe, 0xb9, 0x05, 0x88, 0xcf, 0x49, 0xf6, 0x6d, 0x6d, 0x7e, 0xba, 0x69, 0xe6, 0x80, 0x94, - 0x73, 0x28, 0x08, 0xd6, 0xb0, 0x1e, 0xf0, 0x10, 0x32, 0xf7, 0x61, 0xe5, 0xfc, 0xfb, 0xb0, 0x3e, - 0x46, 0xfd, 0x3b, 0x65, 0xc8, 0x3a, 0x6b, 0xa2, 0x77, 0x60, 0xac, 0xe1, 0xb4, 0x9c, 0xdb, 0x9e, - 0xef, 0x25, 0x1e, 0x89, 0x8b, 0x5d, 0xb8, 0xaf, 0x68, 0x35, 0xc4, 0x35, 0x94, 0x56, 0x82, 0x0d, - 0x8a, 0x68, 0x01, 0xa0, 0x15, 0x79, 0x3b, 0x9e, 0x4f, 0x9a, 0x4c, 0xe3, 0x61, 0xd1, 0x1e, 0xfc, - 0xee, 0x58, 0x96, 0x62, 0x0d, 0xa3, 0x4b, 0x74, 0x40, 0xf9, 0x38, 0xa2, 0x03, 0x06, 0xfa, 0x8c, - 0x0e, 0x18, 0x2c, 0x14, 0x1d, 0x80, 0xe1, 0x94, 0x3c, 0xbc, 0xe9, 0xff, 0x35, 0xcf, 0x27, 0x42, - 0x76, 0xe3, 0xd1, 0x20, 0x73, 0xfb, 0x7b, 0xf3, 0xa7, 0x70, 0x57, 0x0c, 0xdc, 0xa3, 0xa6, 0xdd, - 0x86, 0x13, 0x75, 0x12, 0x79, 0x2c, 0xeb, 0xa5, 0x9b, 0xee, 0xa5, 0xcf, 0x40, 0x25, 0xca, 0x6c, - 0xe3, 0x3e, 0x43, 0xfe, 0xb5, 0x3c, 0x69, 0x72, 0xdb, 0xa6, 0x24, 0xed, 0xbf, 0x56, 0x82, 0x61, - 0xe1, 0xa6, 0x79, 0x0c, 0xc2, 0xc7, 0x65, 0xc3, 0xc4, 0xf4, 0x4c, 0x1e, 0xff, 0x63, 0xdd, 0xea, - 0x69, 0x5c, 0xaa, 0x67, 0x8c, 0x4b, 0xcf, 0x15, 0x23, 0x77, 0xb0, 0x59, 0xe9, 0x1f, 0x97, 0x61, - 0xc2, 0x74, 0x5b, 0x3d, 0x86, 0x69, 0x79, 0x03, 0x86, 0x63, 0xe1, 0x41, 0x5d, 0x2a, 0xe2, 0xb3, - 0x97, 0xfd, 0xc4, 0xe9, 0x4d, 0xbc, 0xf0, 0x99, 0x96, 0xe4, 0xba, 0x3a, 0x69, 0x97, 0x8f, 0xc5, - 0x49, 0x3b, 0xcf, 0x9b, 0x78, 0xe0, 0x41, 0x78, 0x13, 0xdb, 0x3f, 0x60, 0x2c, 0x5f, 0x2f, 0x3f, - 0x86, 0x63, 0xfc, 0x75, 0xf3, 0x70, 0x38, 0x57, 0x68, 0xdd, 0x89, 0xee, 0xf5, 0x38, 0xce, 0xbf, - 0x6b, 0xc1, 0xa8, 0x40, 0x3c, 0x86, 0x01, 0x7c, 0xd2, 0x1c, 0xc0, 0x53, 0x85, 0x06, 0xd0, 0xa3, - 0xe7, 0x5f, 0x2f, 0xa9, 0x9e, 0xd7, 0xc2, 0x28, 0x29, 0x94, 0xe3, 0x7b, 0x84, 0xaa, 0x7e, 0x61, - 0x23, 0xf4, 0x85, 0x00, 0xf7, 0x58, 0x1a, 0xfc, 0xc7, 0xcb, 0xef, 0x6b, 0xbf, 0xb1, 0xc2, 0x66, - 0xb1, 0x69, 0x61, 0x94, 0x88, 0x03, 0x34, 0x8d, 0x4d, 0x0b, 0xa3, 0x04, 0x33, 0x08, 0x72, 0x01, - 0xd2, 0xc7, 0xea, 0x45, 0xdc, 0x6c, 0xef, 0xdd, 0xda, 0x4e, 0x3c, 0x7f, 0xc1, 0x0b, 0x92, 0x38, - 0x89, 0x16, 0xd6, 0x83, 0xe4, 0x7a, 0xc4, 0x85, 0x7e, 0x2d, 0x9a, 0x4f, 0xd1, 0xc2, 0x1a, 0x5d, - 0x19, 0x26, 0xc2, 0xda, 0x18, 0x34, 0x6f, 0x90, 0xae, 0x89, 0x72, 0xac, 0x30, 0xec, 0x97, 0x19, - 0x67, 0x67, 0x13, 0xd4, 0x5f, 0xa0, 0xdd, 0xbf, 0x1a, 0x54, 0x53, 0xcb, 0xcc, 0xc2, 0xd7, 0xf4, - 0x70, 0xbe, 0xa2, 0xec, 0x93, 0x76, 0x41, 0xf7, 0xa3, 0x4e, 0xa3, 0xff, 0x10, 0xe9, 0xb8, 0x76, - 0x7c, 0xb9, 0x30, 0x47, 0xee, 0xe3, 0xa2, 0x91, 0xa5, 0x35, 0x64, 0xb9, 0xdc, 0xd6, 0x6b, 0xd9, - 0xcc, 0xec, 0x2b, 0x12, 0x80, 0x53, 0x1c, 0xb4, 0x28, 0x14, 0x4a, 0x6e, 0x71, 0xf9, 0x60, 0x46, - 0xa1, 0x94, 0x53, 0xa2, 0x69, 0x94, 0xe7, 0x61, 0x54, 0x3d, 0x76, 0x53, 0xe3, 0xcf, 0x8c, 0x54, - 0xb8, 0x7c, 0xb5, 0x9a, 0x16, 0x63, 0x1d, 0x07, 0x6d, 0xc0, 0x64, 0xcc, 0x5f, 0xe2, 0x91, 0xf1, - 0x1a, 0xc2, 0x70, 0xf0, 0x6c, 0xe6, 0x81, 0x7c, 0x09, 0xbe, 0xcf, 0x8a, 0xf8, 0x56, 0x96, 0x11, - 0x1e, 0x59, 0x12, 0xe8, 0x35, 0x98, 0xf0, 0xf5, 0x67, 0x46, 0x6b, 0xc2, 0xae, 0xa0, 0xdc, 0xce, - 0x8c, 0x47, 0x48, 0x6b, 0x38, 0x83, 0x8d, 0xde, 0x80, 0x59, 0xbd, 0x44, 0xa4, 0x17, 0x72, 0x82, - 0x26, 0x89, 0xc5, 0xab, 0x1d, 0x8f, 0xed, 0xef, 0xcd, 0xcf, 0x5e, 0xe9, 0x81, 0x83, 0x7b, 0xd6, - 0x46, 0xaf, 0xc0, 0x98, 0x1c, 0xbe, 0x16, 0xdd, 0x94, 0x3a, 0x3c, 0x6a, 0x30, 0x6c, 0x60, 0xbe, - 0xbf, 0xbb, 0xd8, 0xcf, 0xd1, 0xca, 0xda, 0xb9, 0x8b, 0xde, 0x85, 0x31, 0xbd, 0x8f, 0xd9, 0x03, - 0x35, 0xff, 0xe9, 0x56, 0x71, 0x7e, 0xab, 0x9e, 0xeb, 0x30, 0x6c, 0xd0, 0xb6, 0xaf, 0xc3, 0x50, - 0x7d, 0x37, 0x6e, 0x24, 0x7e, 0x01, 0xa6, 0xf4, 0xa4, 0x31, 0x84, 0x74, 0xc3, 0xb0, 0x67, 0xa4, - 0xc4, 0x88, 0xec, 0x2f, 0x5b, 0x30, 0xb9, 0xb1, 0x52, 0xab, 0x87, 0x8d, 0x3b, 0x24, 0x59, 0xe2, - 0x3a, 0x17, 0x16, 0x3c, 0xc9, 0x3a, 0x24, 0xaf, 0xe9, 0xc6, 0xc5, 0xce, 0xc0, 0xc0, 0x56, 0x18, - 0x27, 0x59, 0xbb, 0xe5, 0xa5, 0x30, 0x4e, 0x30, 0x83, 0xd8, 0x7f, 0x62, 0xc1, 0x20, 0x7b, 0x25, - 0x29, 0xef, 0x85, 0xad, 0x22, 0xe3, 0x42, 0x2f, 0xc1, 0x10, 0xd9, 0xdc, 0x24, 0x8d, 0x44, 0x6c, - 0x4f, 0x19, 0x03, 0x30, 0xb4, 0xca, 0x4a, 0xe9, 0xa6, 0x63, 0x8d, 0xf1, 0xbf, 0x58, 0x20, 0xa3, - 0x4f, 0x43, 0x25, 0xf1, 0xb6, 0xc9, 0x92, 0xeb, 0x0a, 0x43, 0x61, 0x7f, 0x6e, 0x29, 0x8a, 0x09, - 0x6c, 0x48, 0x22, 0x38, 0xa5, 0x67, 0x7f, 0xb5, 0x04, 0x90, 0xc6, 0xf8, 0xe4, 0x0d, 0x73, 0xb9, - 0xe3, 0x21, 0xb1, 0xa7, 0xbb, 0x3c, 0x24, 0x86, 0x52, 0x82, 0x5d, 0x9e, 0x11, 0x53, 0x53, 0x55, - 0x2e, 0x34, 0x55, 0x03, 0xfd, 0x4c, 0xd5, 0x0a, 0x4c, 0xa7, 0x31, 0x4a, 0x66, 0xb0, 0x27, 0x4b, - 0x2b, 0xba, 0x91, 0x05, 0xe2, 0x4e, 0x7c, 0xfb, 0xab, 0x16, 0x08, 0x47, 0xc6, 0x02, 0x0b, 0xda, - 0x95, 0x8f, 0xfe, 0x18, 0xf9, 0xcf, 0x9e, 0x2d, 0xe2, 0xe3, 0x29, 0xb2, 0x9e, 0xa9, 0x2d, 0x66, - 0xe4, 0x3a, 0x33, 0xa8, 0xda, 0xbf, 0x61, 0xc1, 0x28, 0x07, 0x5f, 0x65, 0xb2, 0x72, 0x7e, 0xbf, - 0xfa, 0xca, 0x59, 0xcb, 0xde, 0xc3, 0xa1, 0x84, 0x55, 0xee, 0x52, 0xfd, 0x3d, 0x1c, 0x09, 0xc0, - 0x29, 0x0e, 0x7a, 0x06, 0x86, 0xe3, 0xf6, 0x6d, 0x86, 0x9e, 0xf1, 0x6a, 0xac, 0xf3, 0x62, 0x2c, - 0xe1, 0xf6, 0x3f, 0x2d, 0xc1, 0x54, 0xd6, 0xa9, 0x15, 0x61, 0x18, 0xe2, 0xb2, 0x73, 0x56, 0xec, - 0x3a, 0xc8, 0x46, 0xa3, 0x39, 0xc5, 0x02, 0x7f, 0xd5, 0x99, 0x19, 0xd3, 0x05, 0x25, 0xb4, 0x09, - 0xa3, 0x6e, 0x78, 0x37, 0xb8, 0xeb, 0x44, 0xee, 0x52, 0x6d, 0x5d, 0x7c, 0x89, 0x1c, 0x37, 0xa4, - 0x6a, 0x5a, 0x41, 0x77, 0xb9, 0x65, 0x36, 0x83, 0x14, 0x84, 0x75, 0xc2, 0x54, 0x57, 0x6c, 0x84, - 0xc1, 0xa6, 0xd7, 0xbc, 0xea, 0xb4, 0x8a, 0x5d, 0xb8, 0xaf, 0x48, 0x74, 0xad, 0x8d, 0x71, 0x91, - 0xdd, 0x81, 0x03, 0x70, 0x4a, 0xd2, 0xfe, 0xf5, 0x19, 0x30, 0xd6, 0x82, 0x91, 0x58, 0xd6, 0x7a, - 0xe0, 0x89, 0x65, 0xdf, 0x82, 0x11, 0xb2, 0xdd, 0x4a, 0x76, 0xab, 0x5e, 0x54, 0x2c, 0x4d, 0xf8, - 0xaa, 0xc0, 0xee, 0xa4, 0x2e, 0x21, 0x58, 0x51, 0xec, 0x91, 0x26, 0xb8, 0xfc, 0x50, 0xa4, 0x09, - 0x1e, 0xf8, 0x0b, 0x49, 0x13, 0xfc, 0x06, 0x0c, 0x37, 0xbd, 0x04, 0x93, 0x56, 0x28, 0xd2, 0x65, - 0xe4, 0x2c, 0x9e, 0x8b, 0x1c, 0xb9, 0x33, 0x81, 0xa4, 0x00, 0x60, 0x49, 0x0e, 0x6d, 0xa8, 0x4d, - 0x35, 0x54, 0xe4, 0xb8, 0xef, 0xb4, 0xe1, 0x75, 0xdd, 0x56, 0x22, 0x2d, 0xf0, 0xf0, 0xfb, 0x4f, - 0x0b, 0xac, 0x92, 0xf9, 0x8e, 0x3c, 0xa8, 0x64, 0xbe, 0x46, 0x52, 0xe4, 0xca, 0x51, 0x24, 0x45, - 0xfe, 0xaa, 0x05, 0x27, 0x5b, 0xdd, 0x52, 0x8a, 0x8b, 0xb4, 0xbc, 0x3f, 0x7f, 0x88, 0x24, 0xeb, - 0x46, 0xd3, 0x2c, 0x09, 0x41, 0x57, 0x34, 0xdc, 0xbd, 0x61, 0x99, 0x5d, 0x79, 0xf4, 0xfd, 0x67, - 0x57, 0x3e, 0xea, 0xfc, 0xbd, 0x69, 0xae, 0xe5, 0xf1, 0x23, 0xc9, 0xb5, 0x3c, 0xf1, 0x00, 0x73, - 0x2d, 0x6b, 0x59, 0x92, 0x27, 0x1f, 0x6c, 0x96, 0xe4, 0x2d, 0xf3, 0x5c, 0xe2, 0x49, 0x79, 0x5f, - 0x2a, 0x7c, 0x2e, 0x19, 0x2d, 0x1c, 0x7c, 0x32, 0xf1, 0x7c, 0xd1, 0xd3, 0xef, 0x33, 0x5f, 0xb4, - 0x91, 0x75, 0x19, 0x1d, 0x45, 0xd6, 0xe5, 0x77, 0xf4, 0x13, 0xf4, 0x44, 0x91, 0x16, 0xd4, 0x41, - 0xd9, 0xd9, 0x42, 0xb7, 0x33, 0xb4, 0x33, 0xaf, 0xf3, 0xcc, 0x71, 0xe7, 0x75, 0x3e, 0x79, 0x84, - 0x79, 0x9d, 0x4f, 0x1d, 0x6b, 0x5e, 0xe7, 0x47, 0x1e, 0x92, 0xbc, 0xce, 0xb3, 0xc7, 0x95, 0xd7, - 0xf9, 0xd1, 0x07, 0x9a, 0xd7, 0x99, 0x7e, 0xba, 0x96, 0x0c, 0x0d, 0x9b, 0x9d, 0x2b, 0xf2, 0xe9, - 0xba, 0x46, 0x92, 0xf1, 0x4f, 0xa7, 0x40, 0x38, 0x25, 0x6a, 0xff, 0x25, 0x38, 0x7d, 0xf0, 0xd2, - 0x4d, 0xbd, 0x30, 0x6a, 0xa9, 0x2d, 0x2c, 0xe3, 0x85, 0xc1, 0xc4, 0x42, 0x0d, 0xab, 0x70, 0xe2, - 0xd9, 0x6f, 0x59, 0xf0, 0x48, 0x8f, 0xbc, 0x8c, 0x85, 0xe3, 0x2a, 0x5b, 0x30, 0xd9, 0x32, 0xab, - 0x16, 0x0e, 0xd3, 0x36, 0xf2, 0x40, 0x2a, 0xdf, 0xf7, 0x0c, 0x00, 0x67, 0xc9, 0x2f, 0x7f, 0xe8, - 0x87, 0x3f, 0x3e, 0xfd, 0x81, 0x1f, 0xfd, 0xf8, 0xf4, 0x07, 0xfe, 0xe8, 0xc7, 0xa7, 0x3f, 0xf0, - 0x0b, 0xfb, 0xa7, 0xad, 0x1f, 0xee, 0x9f, 0xb6, 0x7e, 0xb4, 0x7f, 0xda, 0xfa, 0xd3, 0xfd, 0xd3, - 0xd6, 0x57, 0x7f, 0x72, 0xfa, 0x03, 0x6f, 0x96, 0x76, 0xce, 0xff, 0xdf, 0x00, 0x00, 0x00, 0xff, - 0xff, 0xb3, 0xcf, 0x87, 0xf8, 0x85, 0xca, 0x00, 0x00, + // 11175 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x8c, 0x24, 0xc7, + 0x75, 0x98, 0x7a, 0x66, 0xbf, 0xe6, 0xed, 0xe7, 0xd5, 0xed, 0x1d, 0x97, 0x2b, 0xf2, 0xf6, 0xd8, + 0x14, 0xe9, 0x23, 0x79, 0xdc, 0xd5, 0x1d, 0x49, 0xf1, 0x24, 0x2a, 0xb4, 0x76, 0x77, 0x76, 0xef, + 0x56, 0xf7, 0x35, 0xac, 0xd9, 0xbb, 0xa3, 0x28, 0x46, 0x64, 0xdf, 0x74, 0xed, 0x6c, 0xf3, 0x7a, + 0xbb, 0x87, 0xdd, 0x3d, 0x7b, 0xb7, 0x52, 0x04, 0xd8, 0x8a, 0x20, 0x25, 0x80, 0x92, 0xc8, 0x70, + 0x04, 0x04, 0x4e, 0x00, 0x05, 0x06, 0xe2, 0x28, 0x9f, 0x8e, 0x22, 0xe8, 0xc3, 0xb0, 0x9c, 0x0f, + 0x27, 0x72, 0x64, 0x20, 0x71, 0x0c, 0x18, 0xb1, 0x1d, 0x18, 0x59, 0x5b, 0x2b, 0xc4, 0x3f, 0x02, + 0x24, 0x08, 0xe2, 0x7f, 0x9b, 0x20, 0x08, 0xea, 0xb3, 0xab, 0x7a, 0x66, 0xb6, 0x7b, 0x96, 0xb7, + 0x6b, 0x4a, 0xc8, 0xbf, 0x99, 0x7a, 0xaf, 0x5e, 0x7d, 0x74, 0xd5, 0xab, 0xf7, 0x5e, 0xbd, 0xf7, + 0x0a, 0xce, 0xdf, 0xbb, 0x14, 0xcf, 0x7b, 0xe1, 0xc2, 0xbd, 0xf6, 0x5d, 0x12, 0x05, 0x24, 0x21, + 0xf1, 0x42, 0xeb, 0x5e, 0x73, 0xc1, 0x69, 0x79, 0x0b, 0xdb, 0x17, 0x16, 0x9a, 0x24, 0x20, 0x91, + 0x93, 0x10, 0x77, 0xbe, 0x15, 0x85, 0x49, 0x88, 0x1e, 0xe3, 0xd8, 0xf3, 0x29, 0xf6, 0x7c, 0xeb, + 0x5e, 0x73, 0xde, 0x69, 0x79, 0xf3, 0xdb, 0x17, 0x66, 0x9f, 0x6f, 0x7a, 0xc9, 0x66, 0xfb, 0xee, + 0x7c, 0x23, 0xdc, 0x5a, 0x68, 0x86, 0xcd, 0x70, 0x81, 0x55, 0xba, 0xdb, 0xde, 0x60, 0xff, 0xd8, + 0x1f, 0xf6, 0x8b, 0x13, 0x9b, 0x7d, 0x51, 0x34, 0xed, 0xb4, 0xbc, 0x2d, 0xa7, 0xb1, 0xe9, 0x05, + 0x24, 0xda, 0x51, 0x8d, 0x47, 0x24, 0x0e, 0xdb, 0x51, 0x83, 0x64, 0xbb, 0x70, 0x60, 0xad, 0x78, + 0x61, 0x8b, 0x24, 0x4e, 0x97, 0x8e, 0xcf, 0x2e, 0xf4, 0xaa, 0x15, 0xb5, 0x83, 0xc4, 0xdb, 0xea, + 0x6c, 0xe6, 0x23, 0x79, 0x15, 0xe2, 0xc6, 0x26, 0xd9, 0x72, 0x3a, 0xea, 0xbd, 0xd0, 0xab, 0x5e, + 0x3b, 0xf1, 0xfc, 0x05, 0x2f, 0x48, 0xe2, 0x24, 0x3a, 0x68, 0x4c, 0x31, 0x89, 0xb6, 0x49, 0x94, + 0x0e, 0x88, 0x3c, 0x70, 0xb6, 0x5a, 0x3e, 0xe9, 0x36, 0xa6, 0x2b, 0xda, 0xa7, 0x7b, 0xde, 0x69, + 0x36, 0x23, 0xd2, 0x74, 0x92, 0x50, 0xab, 0xeb, 0xb4, 0xbc, 0x88, 0x34, 0xbd, 0x38, 0x89, 0x9c, + 0xc4, 0x0b, 0x83, 0x85, 0xed, 0x0b, 0x8e, 0xdf, 0xda, 0x74, 0x3a, 0x28, 0xd9, 0x7f, 0x60, 0xc1, + 0xd9, 0xc5, 0x3b, 0xf5, 0x15, 0xdf, 0x89, 0x13, 0xaf, 0xb1, 0xe4, 0x87, 0x8d, 0x7b, 0xf5, 0x24, + 0x8c, 0xc8, 0xed, 0xd0, 0x6f, 0x6f, 0x91, 0x3a, 0xfb, 0x10, 0xe8, 0x3c, 0x8c, 0x6c, 0xb3, 0xff, + 0x6b, 0xd5, 0x19, 0xeb, 0xac, 0x75, 0xae, 0xb2, 0x34, 0xf5, 0xc3, 0xdd, 0xb9, 0x0f, 0xec, 0xed, + 0xce, 0x8d, 0xdc, 0x16, 0xe5, 0x58, 0x61, 0xa0, 0xa7, 0x61, 0x68, 0x23, 0x5e, 0xdf, 0x69, 0x91, + 0x99, 0x12, 0xc3, 0x9d, 0x10, 0xb8, 0x43, 0xab, 0x75, 0x5a, 0x8a, 0x05, 0x14, 0x2d, 0x40, 0xa5, + 0xe5, 0x44, 0x89, 0x47, 0x3b, 0x38, 0x53, 0x3e, 0x6b, 0x9d, 0x1b, 0x5c, 0x3a, 0x21, 0x50, 0x2b, + 0x35, 0x09, 0xc0, 0x29, 0x0e, 0xed, 0x46, 0x44, 0x1c, 0xf7, 0x66, 0xe0, 0xef, 0xcc, 0x0c, 0x9c, + 0xb5, 0xce, 0x8d, 0xa4, 0xdd, 0xc0, 0xa2, 0x1c, 0x2b, 0x0c, 0xfb, 0x7b, 0x25, 0x18, 0x59, 0xdc, + 0xd8, 0xf0, 0x02, 0x2f, 0xd9, 0x41, 0x6f, 0xc3, 0x58, 0x10, 0xba, 0x44, 0xfe, 0x67, 0xa3, 0x18, + 0xbd, 0xf8, 0xec, 0xfc, 0x41, 0x8b, 0x7a, 0xfe, 0x86, 0x56, 0x63, 0x69, 0x6a, 0x6f, 0x77, 0x6e, + 0x4c, 0x2f, 0xc1, 0x06, 0x45, 0xf4, 0x26, 0x8c, 0xb6, 0x42, 0x57, 0x35, 0x50, 0x62, 0x0d, 0x3c, + 0x73, 0x70, 0x03, 0xb5, 0xb4, 0xc2, 0xd2, 0xe4, 0xde, 0xee, 0xdc, 0xa8, 0x56, 0x80, 0x75, 0x72, + 0xc8, 0x87, 0x49, 0xfa, 0x37, 0x48, 0x3c, 0xd5, 0x42, 0x99, 0xb5, 0xf0, 0x7c, 0x7e, 0x0b, 0x5a, + 0xa5, 0xa5, 0x93, 0x7b, 0xbb, 0x73, 0x93, 0x99, 0x42, 0x9c, 0x25, 0x6d, 0x7f, 0x16, 0x26, 0x16, + 0x93, 0xc4, 0x69, 0x6c, 0x12, 0x97, 0x7f, 0x5f, 0xf4, 0x22, 0x0c, 0x04, 0xce, 0x16, 0x11, 0x5f, + 0xff, 0xac, 0x98, 0xf6, 0x81, 0x1b, 0xce, 0x16, 0xd9, 0xdf, 0x9d, 0x9b, 0xba, 0x15, 0x78, 0xef, + 0xb6, 0xc5, 0x9a, 0xa1, 0x65, 0x98, 0x61, 0xa3, 0x8b, 0x00, 0x2e, 0xd9, 0xf6, 0x1a, 0xa4, 0xe6, + 0x24, 0x9b, 0x62, 0x35, 0x20, 0x51, 0x17, 0xaa, 0x0a, 0x82, 0x35, 0x2c, 0xfb, 0x0b, 0x16, 0x54, + 0x16, 0xb7, 0x43, 0xcf, 0xad, 0x85, 0x6e, 0x8c, 0xda, 0x30, 0xd9, 0x8a, 0xc8, 0x06, 0x89, 0x54, + 0xd1, 0x8c, 0x75, 0xb6, 0x7c, 0x6e, 0xf4, 0xe2, 0xc5, 0x9c, 0x71, 0x9b, 0x95, 0x56, 0x82, 0x24, + 0xda, 0x59, 0x7a, 0x44, 0x34, 0x3d, 0x99, 0x81, 0xe2, 0x6c, 0x1b, 0xf6, 0x2f, 0x94, 0xe0, 0xd4, + 0xe2, 0x67, 0xdb, 0x11, 0xa9, 0x7a, 0xf1, 0xbd, 0xec, 0x56, 0x70, 0xbd, 0xf8, 0xde, 0x8d, 0x74, + 0x32, 0xd4, 0x1a, 0xac, 0x8a, 0x72, 0xac, 0x30, 0xd0, 0xf3, 0x30, 0x4c, 0x7f, 0xdf, 0xc2, 0x6b, + 0x62, 0xf4, 0x27, 0x05, 0xf2, 0x68, 0xd5, 0x49, 0x9c, 0x2a, 0x07, 0x61, 0x89, 0x83, 0xae, 0xc3, + 0x68, 0x83, 0x71, 0x8e, 0xe6, 0xf5, 0xd0, 0x25, 0xec, 0x0b, 0x57, 0x96, 0x9e, 0xa3, 0xe8, 0xcb, + 0x69, 0xf1, 0xfe, 0xee, 0xdc, 0x0c, 0xef, 0x9b, 0x20, 0xa1, 0xc1, 0xb0, 0x5e, 0x1f, 0xd9, 0x6a, + 0x23, 0x0e, 0x30, 0x4a, 0xd0, 0x65, 0x13, 0x9e, 0xd3, 0xf6, 0xd4, 0x20, 0xdb, 0x53, 0x63, 0x3d, + 0xf6, 0xd3, 0x3f, 0xb4, 0xc4, 0x9c, 0xac, 0x7a, 0xbe, 0xc9, 0x1e, 0x2e, 0x02, 0xc4, 0xa4, 0x11, + 0x91, 0x44, 0x9b, 0x15, 0xf5, 0x99, 0xeb, 0x0a, 0x82, 0x35, 0x2c, 0xba, 0xf9, 0xe3, 0x4d, 0x27, + 0x62, 0xab, 0x45, 0xcc, 0x8d, 0xda, 0xfc, 0x75, 0x09, 0xc0, 0x29, 0x8e, 0xb1, 0xf9, 0xcb, 0xb9, + 0x9b, 0xff, 0x37, 0x2d, 0x18, 0x5e, 0xf2, 0x02, 0xd7, 0x0b, 0x9a, 0xe8, 0x6d, 0x18, 0xa1, 0x67, + 0x83, 0xeb, 0x24, 0x8e, 0xd8, 0xf7, 0x1f, 0x96, 0x8b, 0x47, 0x67, 0xd5, 0x72, 0xf9, 0xc4, 0xf3, + 0x14, 0x9b, 0x2e, 0xa2, 0x9b, 0x77, 0xdf, 0x21, 0x8d, 0xe4, 0x3a, 0x49, 0x9c, 0x74, 0x38, 0x69, + 0x19, 0x56, 0x54, 0xd1, 0x2d, 0x18, 0x4a, 0x9c, 0xa8, 0x49, 0x12, 0xb1, 0xed, 0x73, 0x36, 0x25, + 0xa7, 0x81, 0xe9, 0x92, 0x23, 0x41, 0x83, 0xa4, 0x0c, 0x72, 0x9d, 0x11, 0xc1, 0x82, 0x98, 0xdd, + 0x80, 0xb1, 0x65, 0xa7, 0xe5, 0xdc, 0xf5, 0x7c, 0x2f, 0xf1, 0x48, 0x8c, 0x7e, 0x06, 0xca, 0x8e, + 0xeb, 0xb2, 0x0d, 0x50, 0x59, 0x3a, 0xb5, 0xb7, 0x3b, 0x57, 0x5e, 0x74, 0xdd, 0xfd, 0xdd, 0x39, + 0x50, 0x58, 0x3b, 0x98, 0x62, 0xa0, 0x67, 0x61, 0xc0, 0x8d, 0xc2, 0xd6, 0x4c, 0x89, 0x61, 0x9e, + 0xa6, 0x3b, 0xb5, 0x1a, 0x85, 0xad, 0x0c, 0x2a, 0xc3, 0xb1, 0x7f, 0x50, 0x02, 0xb4, 0x4c, 0x5a, + 0x9b, 0xab, 0x75, 0xe3, 0x9b, 0x9e, 0x83, 0x91, 0xad, 0x30, 0xf0, 0x92, 0x30, 0x8a, 0x45, 0x83, + 0x6c, 0x5d, 0x5c, 0x17, 0x65, 0x58, 0x41, 0xd1, 0x59, 0x18, 0x68, 0xa5, 0xdb, 0x7b, 0x4c, 0xb2, + 0x06, 0xb6, 0xb1, 0x19, 0x84, 0x62, 0xb4, 0x63, 0x12, 0x89, 0xf5, 0xac, 0x30, 0x6e, 0xc5, 0x24, + 0xc2, 0x0c, 0x92, 0xae, 0x20, 0xba, 0xb6, 0xc4, 0x6a, 0xcd, 0xac, 0x20, 0x0a, 0xc1, 0x1a, 0x16, + 0x7a, 0x0b, 0x2a, 0xfc, 0x1f, 0x26, 0x1b, 0x6c, 0xe9, 0xe6, 0x32, 0x85, 0x6b, 0x61, 0xc3, 0xf1, + 0xb3, 0x93, 0x3f, 0xce, 0x56, 0x9c, 0x24, 0x84, 0x53, 0x9a, 0xc6, 0x8a, 0x1b, 0xca, 0x5d, 0x71, + 0x7f, 0xcb, 0x02, 0xb4, 0xec, 0x05, 0x2e, 0x89, 0x8e, 0xe1, 0xe8, 0xec, 0x6f, 0x33, 0xfc, 0x11, + 0xed, 0x5a, 0xb8, 0xd5, 0x0a, 0x03, 0x12, 0x24, 0xcb, 0x61, 0xe0, 0xf2, 0xe3, 0xf4, 0x63, 0x30, + 0x90, 0xd0, 0xa6, 0x78, 0xb7, 0x9e, 0x96, 0x9f, 0x85, 0x36, 0xb0, 0xbf, 0x3b, 0x77, 0xba, 0xb3, + 0x06, 0xeb, 0x02, 0xab, 0x83, 0x3e, 0x0a, 0x43, 0x71, 0xe2, 0x24, 0xed, 0x58, 0x74, 0xf4, 0x09, + 0xd9, 0xd1, 0x3a, 0x2b, 0xdd, 0xdf, 0x9d, 0x9b, 0x54, 0xd5, 0x78, 0x11, 0x16, 0x15, 0xd0, 0x33, + 0x30, 0xbc, 0x45, 0xe2, 0xd8, 0x69, 0x4a, 0x06, 0x37, 0x29, 0xea, 0x0e, 0x5f, 0xe7, 0xc5, 0x58, + 0xc2, 0xd1, 0x93, 0x30, 0x48, 0xa2, 0x28, 0x8c, 0xc4, 0x8a, 0x18, 0x17, 0x88, 0x83, 0x2b, 0xb4, + 0x10, 0x73, 0x98, 0xfd, 0x9f, 0x2d, 0x98, 0x54, 0x7d, 0xe5, 0x6d, 0x1d, 0xc3, 0x96, 0x77, 0x01, + 0x1a, 0x72, 0x80, 0x31, 0xdb, 0x68, 0x5a, 0x1b, 0xdd, 0x97, 0x5f, 0xe7, 0x84, 0xa6, 0x6d, 0xa8, + 0xa2, 0x18, 0x6b, 0x74, 0xed, 0x7f, 0x67, 0xc1, 0xc9, 0xcc, 0xd8, 0xae, 0x79, 0x71, 0x82, 0xde, + 0xec, 0x18, 0xdf, 0x7c, 0xb1, 0xf1, 0xd1, 0xda, 0x6c, 0x74, 0x6a, 0xbd, 0xc8, 0x12, 0x6d, 0x6c, + 0x18, 0x06, 0xbd, 0x84, 0x6c, 0xc9, 0x61, 0x3d, 0x5f, 0x70, 0x58, 0xbc, 0x7f, 0xe9, 0x57, 0x5a, + 0xa3, 0x34, 0x30, 0x27, 0x65, 0xff, 0x6f, 0x0b, 0x2a, 0xcb, 0x61, 0xb0, 0xe1, 0x35, 0xaf, 0x3b, + 0xad, 0x63, 0xf8, 0x3e, 0x75, 0x18, 0x60, 0xd4, 0xf9, 0x10, 0x2e, 0xe4, 0x0d, 0x41, 0x74, 0x6c, + 0x9e, 0x9e, 0xa9, 0x5c, 0x58, 0x50, 0x6c, 0x8a, 0x16, 0x61, 0x46, 0x6c, 0xf6, 0x65, 0xa8, 0x28, + 0x04, 0x34, 0x05, 0xe5, 0x7b, 0x84, 0x4b, 0x92, 0x15, 0x4c, 0x7f, 0xa2, 0x69, 0x18, 0xdc, 0x76, + 0xfc, 0xb6, 0xd8, 0xbc, 0x98, 0xff, 0xf9, 0x58, 0xe9, 0x92, 0x65, 0xff, 0x80, 0xed, 0x40, 0xd1, + 0xc8, 0x4a, 0xb0, 0x2d, 0x98, 0xc3, 0x17, 0x2d, 0x98, 0xf6, 0xbb, 0x30, 0x25, 0x31, 0x27, 0x87, + 0x61, 0x67, 0x8f, 0x89, 0x6e, 0x4f, 0x77, 0x83, 0xe2, 0xae, 0xad, 0x51, 0x5e, 0x1f, 0xb6, 0xe8, + 0x82, 0x73, 0x7c, 0xd6, 0x75, 0x21, 0x03, 0xdc, 0x14, 0x65, 0x58, 0x41, 0xed, 0x3f, 0xb5, 0x60, + 0x5a, 0x8d, 0xe3, 0x2a, 0xd9, 0xa9, 0x13, 0x9f, 0x34, 0x92, 0x30, 0x7a, 0xbf, 0x8c, 0xe4, 0x71, + 0xfe, 0x4d, 0x38, 0x4f, 0x1a, 0x15, 0x04, 0xca, 0x57, 0xc9, 0x0e, 0xff, 0x40, 0xfa, 0x40, 0xcb, + 0x07, 0x0e, 0xf4, 0xd7, 0x2d, 0x18, 0x57, 0x03, 0x3d, 0x86, 0x2d, 0x77, 0xcd, 0xdc, 0x72, 0x3f, + 0x53, 0x70, 0xbd, 0xf6, 0xd8, 0x6c, 0x7f, 0xb3, 0x44, 0xd9, 0x86, 0xc0, 0xa9, 0x45, 0x21, 0x9d, + 0x24, 0xca, 0xf1, 0xdf, 0x27, 0x5f, 0xa9, 0xbf, 0xc1, 0x5e, 0x25, 0x3b, 0xeb, 0x21, 0x95, 0x26, + 0xba, 0x0f, 0xd6, 0xf8, 0xa8, 0x03, 0x07, 0x7e, 0xd4, 0xdf, 0x2e, 0xc1, 0x29, 0x35, 0x2d, 0xc6, + 0x29, 0xfd, 0x53, 0x39, 0x31, 0x17, 0x60, 0xd4, 0x25, 0x1b, 0x4e, 0xdb, 0x4f, 0x94, 0x36, 0x31, + 0xc8, 0xd5, 0xcc, 0x6a, 0x5a, 0x8c, 0x75, 0x9c, 0x3e, 0xe6, 0xf2, 0xeb, 0xa3, 0x8c, 0x9f, 0x27, + 0x0e, 0x5d, 0xf5, 0x54, 0xc2, 0xd3, 0xd4, 0xc3, 0x31, 0x5d, 0x3d, 0x14, 0xaa, 0xe0, 0x93, 0x30, + 0xe8, 0x6d, 0xd1, 0x33, 0xbf, 0x64, 0x1e, 0xe5, 0x6b, 0xb4, 0x10, 0x73, 0x18, 0x7a, 0x0a, 0x86, + 0x1b, 0xe1, 0xd6, 0x96, 0x13, 0xb8, 0x33, 0x65, 0x26, 0x73, 0x8e, 0x52, 0xb1, 0x60, 0x99, 0x17, + 0x61, 0x09, 0x43, 0x8f, 0xc1, 0x80, 0x13, 0x35, 0xe3, 0x99, 0x01, 0x86, 0x33, 0x42, 0x5b, 0x5a, + 0x8c, 0x9a, 0x31, 0x66, 0xa5, 0x54, 0x96, 0xbc, 0x1f, 0x46, 0xf7, 0xbc, 0xa0, 0x59, 0xf5, 0x22, + 0x26, 0x18, 0x6a, 0xb2, 0xe4, 0x1d, 0x05, 0xc1, 0x1a, 0x16, 0xaa, 0xc1, 0x60, 0x2b, 0x8c, 0x92, + 0x78, 0x66, 0x88, 0x4d, 0xfc, 0x73, 0xb9, 0xdb, 0x8f, 0x8f, 0xbb, 0x16, 0x46, 0x49, 0x3a, 0x14, + 0xfa, 0x2f, 0xc6, 0x9c, 0x10, 0x5a, 0x86, 0x32, 0x09, 0xb6, 0x67, 0x86, 0x19, 0xbd, 0x0f, 0x1d, + 0x4c, 0x6f, 0x25, 0xd8, 0xbe, 0xed, 0x44, 0x29, 0xbf, 0x5a, 0x09, 0xb6, 0x31, 0xad, 0x8d, 0x1a, + 0x50, 0x91, 0xc6, 0xb0, 0x78, 0x66, 0xa4, 0xc8, 0x52, 0xc4, 0x02, 0x1d, 0x93, 0x77, 0xdb, 0x5e, + 0x44, 0xb6, 0x48, 0x90, 0xc4, 0xa9, 0x62, 0x25, 0xa1, 0x31, 0x4e, 0xe9, 0xa2, 0x06, 0x8c, 0x71, + 0xf9, 0xf3, 0x7a, 0xd8, 0x0e, 0x92, 0x78, 0xa6, 0xc2, 0xba, 0x9c, 0x63, 0xb9, 0xb8, 0x9d, 0xd6, + 0x58, 0x9a, 0x16, 0xe4, 0xc7, 0xb4, 0xc2, 0x18, 0x1b, 0x44, 0xd1, 0x9b, 0x30, 0xee, 0x7b, 0xdb, + 0x24, 0x20, 0x71, 0x5c, 0x8b, 0xc2, 0xbb, 0x64, 0x06, 0xd8, 0x68, 0x9e, 0xcc, 0xd3, 0xe2, 0xc3, + 0xbb, 0x64, 0xe9, 0xc4, 0xde, 0xee, 0xdc, 0xf8, 0x35, 0xbd, 0x36, 0x36, 0x89, 0xa1, 0xb7, 0x60, + 0x82, 0x0a, 0xbb, 0x5e, 0x4a, 0x7e, 0xb4, 0x38, 0x79, 0xb4, 0xb7, 0x3b, 0x37, 0x81, 0x8d, 0xea, + 0x38, 0x43, 0x0e, 0xad, 0x43, 0xc5, 0xf7, 0x36, 0x48, 0x63, 0xa7, 0xe1, 0x93, 0x99, 0x31, 0x46, + 0x3b, 0x67, 0x73, 0x5e, 0x93, 0xe8, 0x5c, 0xc1, 0x50, 0x7f, 0x71, 0x4a, 0x08, 0xdd, 0x86, 0xd3, + 0x09, 0x89, 0xb6, 0xbc, 0x80, 0xd9, 0xe8, 0x84, 0xf4, 0xcb, 0x4c, 0x25, 0xe3, 0x6c, 0xd5, 0x9e, + 0x11, 0x13, 0x7b, 0x7a, 0xbd, 0x2b, 0x16, 0xee, 0x51, 0x1b, 0xdd, 0x84, 0x49, 0xb6, 0x9f, 0x6a, + 0x6d, 0xdf, 0xaf, 0x85, 0xbe, 0xd7, 0xd8, 0x99, 0x99, 0x60, 0x04, 0x9f, 0x92, 0x06, 0x90, 0x35, + 0x13, 0x4c, 0x15, 0xc3, 0xf4, 0x1f, 0xce, 0xd6, 0x46, 0x3e, 0x4c, 0xc6, 0xa4, 0xd1, 0x8e, 0xbc, + 0x64, 0x87, 0xae, 0x7d, 0xf2, 0x20, 0x99, 0x99, 0x2c, 0xa2, 0xe8, 0xd6, 0xcd, 0x4a, 0xdc, 0xfa, + 0x94, 0x29, 0xc4, 0x59, 0xd2, 0x94, 0x55, 0xc4, 0x89, 0xeb, 0x05, 0x33, 0x53, 0x8c, 0x03, 0xa9, + 0xfd, 0x55, 0xa7, 0x85, 0x98, 0xc3, 0x98, 0xfd, 0x80, 0xfe, 0xb8, 0x49, 0xb9, 0xf4, 0x09, 0x86, + 0x98, 0xda, 0x0f, 0x24, 0x00, 0xa7, 0x38, 0x54, 0x34, 0x48, 0x92, 0x9d, 0x19, 0xc4, 0x50, 0xd5, + 0x56, 0x5b, 0x5f, 0xff, 0x14, 0xa6, 0xe5, 0xe8, 0x36, 0x0c, 0x93, 0x60, 0x7b, 0x35, 0x0a, 0xb7, + 0x66, 0x4e, 0x16, 0xe1, 0x01, 0x2b, 0x1c, 0x99, 0x9f, 0x1f, 0xa9, 0x0a, 0x23, 0x8a, 0xb1, 0x24, + 0x86, 0x1e, 0xc0, 0x4c, 0x97, 0xaf, 0xc4, 0x3f, 0xca, 0x34, 0xfb, 0x28, 0x1f, 0x17, 0x75, 0x67, + 0xd6, 0x7b, 0xe0, 0xed, 0x1f, 0x00, 0xc3, 0x3d, 0xa9, 0xdb, 0x77, 0x61, 0x42, 0x31, 0x2a, 0xf6, + 0xbd, 0xd1, 0x1c, 0x0c, 0x52, 0x5e, 0x2c, 0x15, 0xfa, 0x0a, 0x9d, 0x54, 0xca, 0xa2, 0x63, 0xcc, + 0xcb, 0xd9, 0xa4, 0x7a, 0x9f, 0x25, 0x4b, 0x3b, 0x09, 0xe1, 0x8a, 0x5d, 0x59, 0x9b, 0x54, 0x09, + 0xc0, 0x29, 0x8e, 0xfd, 0x7f, 0xb9, 0x98, 0x94, 0x72, 0xc3, 0x02, 0x27, 0xc1, 0x79, 0x18, 0xd9, + 0x0c, 0xe3, 0x84, 0x62, 0xb3, 0x36, 0x06, 0x53, 0xc1, 0xe8, 0x8a, 0x28, 0xc7, 0x0a, 0x03, 0xbd, + 0x02, 0xe3, 0x0d, 0xbd, 0x01, 0x71, 0x8c, 0x9d, 0x12, 0x55, 0xcc, 0xd6, 0xb1, 0x89, 0x8b, 0x2e, + 0xc1, 0x08, 0xb3, 0x72, 0x37, 0x42, 0x5f, 0xa8, 0x90, 0xf2, 0x54, 0x1e, 0xa9, 0x89, 0xf2, 0x7d, + 0xed, 0x37, 0x56, 0xd8, 0x54, 0x11, 0xa7, 0x5d, 0x58, 0xab, 0x89, 0x03, 0x44, 0x29, 0xe2, 0x57, + 0x58, 0x29, 0x16, 0x50, 0xfb, 0x9f, 0x95, 0xb4, 0x59, 0xa6, 0x0a, 0x10, 0x41, 0x6f, 0xc0, 0xf0, + 0x7d, 0xc7, 0x4b, 0xbc, 0xa0, 0x29, 0xa4, 0x87, 0x17, 0x0a, 0x9e, 0x26, 0xac, 0xfa, 0x1d, 0x5e, + 0x95, 0x9f, 0x7c, 0xe2, 0x0f, 0x96, 0x04, 0x29, 0xed, 0xa8, 0x1d, 0x04, 0x94, 0x76, 0xa9, 0x7f, + 0xda, 0x98, 0x57, 0xe5, 0xb4, 0xc5, 0x1f, 0x2c, 0x09, 0xa2, 0x0d, 0x00, 0xb9, 0x96, 0x88, 0x2b, + 0xac, 0xcb, 0x1f, 0xe9, 0x87, 0xfc, 0xba, 0xaa, 0xbd, 0x34, 0x41, 0xcf, 0xda, 0xf4, 0x3f, 0xd6, + 0x28, 0xdb, 0x09, 0x13, 0xc2, 0x3a, 0xbb, 0x85, 0x3e, 0x4d, 0xb7, 0xb4, 0x13, 0x25, 0xc4, 0x5d, + 0x4c, 0xb2, 0x06, 0xfa, 0x83, 0x45, 0xec, 0x75, 0x6f, 0x8b, 0xe8, 0xdb, 0x5f, 0x10, 0xc1, 0x29, + 0x3d, 0xfb, 0xbb, 0x65, 0x98, 0xe9, 0xd5, 0x5d, 0xba, 0x24, 0xc9, 0x03, 0x2f, 0x59, 0xa6, 0x62, + 0x92, 0x65, 0x2e, 0xc9, 0x15, 0x51, 0x8e, 0x15, 0x06, 0x5d, 0x1b, 0xb1, 0xd7, 0x94, 0xca, 0xd2, + 0x60, 0xba, 0x36, 0xea, 0xac, 0x14, 0x0b, 0x28, 0xc5, 0x8b, 0x88, 0x13, 0x8b, 0xcb, 0x0d, 0x6d, + 0x0d, 0x61, 0x56, 0x8a, 0x05, 0x54, 0x37, 0x88, 0x0c, 0xe4, 0x18, 0x44, 0x8c, 0x29, 0x1a, 0x7c, + 0xb8, 0x53, 0x84, 0x3e, 0x03, 0xb0, 0xe1, 0x05, 0x5e, 0xbc, 0xc9, 0xa8, 0x0f, 0xf5, 0x4d, 0x5d, + 0x09, 0x59, 0xab, 0x8a, 0x0a, 0xd6, 0x28, 0xa2, 0x97, 0x60, 0x54, 0x6d, 0xcf, 0xb5, 0xea, 0xcc, + 0xb0, 0x69, 0x10, 0x4f, 0x79, 0x55, 0x15, 0xeb, 0x78, 0xf6, 0x3b, 0xd9, 0xf5, 0x22, 0x76, 0x85, + 0x36, 0xbf, 0x56, 0xd1, 0xf9, 0x2d, 0x1d, 0x3c, 0xbf, 0xf6, 0xef, 0x97, 0x61, 0xd2, 0x68, 0xac, + 0x1d, 0x17, 0xe0, 0x68, 0xaf, 0xd1, 0x03, 0xcb, 0x49, 0x88, 0xd8, 0x93, 0xe7, 0xfb, 0xd9, 0x34, + 0xfa, 0xf1, 0x46, 0xf7, 0x02, 0xa7, 0x84, 0x36, 0xa1, 0xe2, 0x3b, 0x31, 0x33, 0xa9, 0x10, 0xb1, + 0x17, 0xfb, 0x23, 0x9b, 0xaa, 0x1f, 0x4e, 0x9c, 0x68, 0xa7, 0x07, 0x6f, 0x25, 0x25, 0x4e, 0x4f, + 0x5b, 0x2a, 0xec, 0xc8, 0x1b, 0x35, 0xd5, 0x1d, 0x2a, 0x11, 0xed, 0x60, 0x0e, 0x43, 0x97, 0x60, + 0x2c, 0x22, 0x6c, 0xa5, 0x2c, 0x53, 0x79, 0x8e, 0x2d, 0xbd, 0xc1, 0x54, 0xf0, 0xc3, 0x1a, 0x0c, + 0x1b, 0x98, 0xa9, 0xdc, 0x3f, 0x74, 0x80, 0xdc, 0xff, 0x0c, 0x0c, 0xb3, 0x1f, 0x6a, 0x55, 0xa8, + 0x2f, 0xb4, 0xc6, 0x8b, 0xb1, 0x84, 0x67, 0x17, 0xd1, 0x48, 0xc1, 0x45, 0xf4, 0x2c, 0x4c, 0x54, + 0x1d, 0xb2, 0x15, 0x06, 0x2b, 0x81, 0xdb, 0x0a, 0xbd, 0x20, 0x41, 0x33, 0x30, 0xc0, 0xce, 0x13, + 0xbe, 0xdf, 0x07, 0x28, 0x05, 0x3c, 0x40, 0x65, 0x77, 0xfb, 0x8f, 0x4a, 0x30, 0x5e, 0x25, 0x3e, + 0x49, 0x08, 0xd7, 0x7b, 0x62, 0xb4, 0x0a, 0xa8, 0x19, 0x39, 0x0d, 0x52, 0x23, 0x91, 0x17, 0xba, + 0x75, 0xd2, 0x08, 0x03, 0x76, 0x11, 0x45, 0x0f, 0xc8, 0xd3, 0x7b, 0xbb, 0x73, 0xe8, 0x72, 0x07, + 0x14, 0x77, 0xa9, 0x81, 0x5c, 0x18, 0x6f, 0x45, 0xc4, 0xb0, 0x1b, 0x5a, 0xf9, 0xa2, 0x46, 0x4d, + 0xaf, 0xc2, 0xa5, 0x61, 0xa3, 0x08, 0x9b, 0x44, 0xd1, 0x27, 0x60, 0x2a, 0x8c, 0x5a, 0x9b, 0x4e, + 0x50, 0x25, 0x2d, 0x12, 0xb8, 0x54, 0x05, 0x10, 0xd6, 0x8e, 0xe9, 0xbd, 0xdd, 0xb9, 0xa9, 0x9b, + 0x19, 0x18, 0xee, 0xc0, 0x46, 0x6f, 0xc0, 0x89, 0x56, 0x14, 0xb6, 0x9c, 0x26, 0x5b, 0x32, 0x42, + 0x5a, 0xe1, 0xbc, 0xe9, 0xfc, 0xde, 0xee, 0xdc, 0x89, 0x5a, 0x16, 0xb8, 0xbf, 0x3b, 0x77, 0x92, + 0x4d, 0x19, 0x2d, 0x49, 0x81, 0xb8, 0x93, 0x8c, 0xfd, 0x2e, 0x9c, 0xaa, 0x86, 0xf7, 0x83, 0xfb, + 0x4e, 0xe4, 0x2e, 0xd6, 0xd6, 0x34, 0xe3, 0xc4, 0xeb, 0x52, 0xf9, 0xe5, 0x17, 0x7c, 0x39, 0x27, + 0x9b, 0x46, 0x83, 0xab, 0x1d, 0xab, 0x9e, 0x4f, 0x7a, 0x98, 0x43, 0xfe, 0x51, 0xc9, 0x68, 0x33, + 0xc5, 0x57, 0x77, 0x17, 0x56, 0xcf, 0xbb, 0x8b, 0x4f, 0xc3, 0xc8, 0x86, 0x47, 0x7c, 0x17, 0x93, + 0x0d, 0xf1, 0xb5, 0x2e, 0x14, 0xb9, 0xdc, 0x59, 0xa5, 0x75, 0xa4, 0x75, 0x8c, 0x2b, 0xd1, 0xab, + 0x82, 0x0c, 0x56, 0x04, 0x51, 0x1b, 0xa6, 0xa4, 0x1e, 0x26, 0xa1, 0x62, 0xb3, 0xbf, 0x50, 0x4c, + 0xcd, 0x33, 0x9b, 0x61, 0x9f, 0x17, 0x67, 0x08, 0xe2, 0x8e, 0x26, 0xa8, 0xfe, 0xbc, 0x45, 0x8f, + 0xba, 0x01, 0xb6, 0xf4, 0x99, 0xfe, 0xcc, 0x4c, 0x01, 0xac, 0xd4, 0xfe, 0x15, 0x0b, 0x1e, 0xe9, + 0x98, 0x2d, 0x61, 0x27, 0x39, 0xb2, 0x6f, 0x94, 0x35, 0x56, 0x94, 0xf2, 0x8d, 0x15, 0xf6, 0x4d, + 0x98, 0x5e, 0xd9, 0x6a, 0x25, 0x3b, 0x55, 0xcf, 0xbc, 0x72, 0x79, 0x19, 0x86, 0xb6, 0x88, 0xeb, + 0xb5, 0xb7, 0xc4, 0x67, 0x9d, 0x93, 0xe7, 0xc2, 0x75, 0x56, 0xba, 0xbf, 0x3b, 0x37, 0x5e, 0x4f, + 0xc2, 0xc8, 0x69, 0x12, 0x5e, 0x80, 0x05, 0xba, 0xfd, 0x23, 0x0b, 0x26, 0x25, 0x7f, 0x58, 0x74, + 0xdd, 0x88, 0xc4, 0x31, 0x9a, 0x85, 0x92, 0xd7, 0x12, 0x84, 0x40, 0x10, 0x2a, 0xad, 0xd5, 0x70, + 0xc9, 0x6b, 0xa1, 0x37, 0xa0, 0xc2, 0x6f, 0xea, 0xd2, 0xc5, 0xd1, 0xe7, 0xcd, 0x1f, 0xd3, 0x0d, + 0xd7, 0x25, 0x0d, 0x9c, 0x92, 0x93, 0x52, 0x32, 0x3b, 0x79, 0xca, 0xe6, 0xbd, 0xd1, 0x15, 0x51, + 0x8e, 0x15, 0x06, 0x3a, 0x07, 0x23, 0x41, 0xe8, 0xf2, 0xcb, 0x54, 0xbe, 0x4f, 0xd9, 0x92, 0xbb, + 0x21, 0xca, 0xb0, 0x82, 0xda, 0x5f, 0xb1, 0x60, 0x4c, 0x8e, 0xb1, 0xa0, 0xc0, 0x4e, 0x37, 0x49, + 0x2a, 0xac, 0xa7, 0x9b, 0x84, 0x0a, 0xdc, 0x0c, 0x62, 0xc8, 0xd9, 0xe5, 0x7e, 0xe4, 0x6c, 0xfb, + 0xd7, 0x4a, 0x30, 0x21, 0xbb, 0x53, 0x6f, 0xdf, 0x8d, 0x09, 0x15, 0x43, 0x2a, 0x0e, 0x9f, 0x7c, + 0x22, 0xd7, 0xd9, 0xf3, 0x79, 0xba, 0x98, 0xf1, 0xcd, 0x52, 0x31, 0x67, 0x51, 0xd2, 0xc1, 0x29, + 0x49, 0xb4, 0x0d, 0x27, 0x82, 0x30, 0x61, 0xc7, 0x9b, 0x82, 0x17, 0xbb, 0xe9, 0xc8, 0xb6, 0xf3, + 0xa8, 0x68, 0xe7, 0xc4, 0x8d, 0x2c, 0x3d, 0xdc, 0xd9, 0x04, 0xba, 0x29, 0x6d, 0x4c, 0x65, 0xd6, + 0xd6, 0xb3, 0xc5, 0xda, 0xea, 0x6d, 0x62, 0xb2, 0x7f, 0xcb, 0x82, 0x8a, 0x44, 0x3b, 0x8e, 0x2b, + 0xaf, 0x3b, 0x30, 0x1c, 0xb3, 0x4f, 0x24, 0xa7, 0xeb, 0x7c, 0xb1, 0x21, 0xf0, 0xef, 0x9a, 0x9e, + 0xe9, 0xfc, 0x7f, 0x8c, 0x25, 0x35, 0x66, 0x6c, 0x57, 0x03, 0x79, 0xdf, 0x19, 0xdb, 0x55, 0xcf, + 0x7a, 0xdf, 0x6c, 0x8d, 0x1b, 0xd6, 0x00, 0x2a, 0x98, 0xb6, 0x22, 0xb2, 0xe1, 0x3d, 0xc8, 0x0a, + 0xa6, 0x35, 0x56, 0x8a, 0x05, 0x14, 0x6d, 0xc0, 0x58, 0x43, 0x9a, 0xa3, 0x53, 0x16, 0xf2, 0xe1, + 0x82, 0xb6, 0x7f, 0x75, 0x8d, 0xc4, 0x5d, 0x93, 0x96, 0x35, 0x4a, 0xd8, 0xa0, 0x4b, 0xf9, 0x54, + 0x7a, 0x53, 0x5e, 0x2e, 0x68, 0xb8, 0x89, 0x48, 0x92, 0xb6, 0xd0, 0xf3, 0x92, 0xdc, 0xfe, 0x86, + 0x05, 0x43, 0xdc, 0x7e, 0x59, 0xcc, 0x08, 0xac, 0x5d, 0x90, 0xa5, 0xf3, 0x79, 0x9b, 0x16, 0x8a, + 0xfb, 0x32, 0x74, 0x07, 0x2a, 0xec, 0x07, 0xb3, 0xc5, 0x94, 0x8b, 0xf8, 0x69, 0xf1, 0xf6, 0xf5, + 0xae, 0xde, 0x96, 0x04, 0x70, 0x4a, 0xcb, 0xfe, 0x7e, 0x99, 0xb2, 0xbe, 0x14, 0xd5, 0x38, 0xdb, + 0xad, 0xe3, 0x38, 0xdb, 0x4b, 0x47, 0x7f, 0xb6, 0xbf, 0x0b, 0x93, 0x0d, 0xed, 0x82, 0x2e, 0xfd, + 0xe2, 0x17, 0x0b, 0x2e, 0x2b, 0xed, 0x56, 0x8f, 0xdb, 0xeb, 0x96, 0x4d, 0x72, 0x38, 0x4b, 0x1f, + 0x11, 0x18, 0xe3, 0xeb, 0x41, 0xb4, 0x37, 0xc0, 0xda, 0x5b, 0x28, 0xb2, 0xc2, 0xf4, 0xc6, 0xd8, + 0x2a, 0xae, 0x6b, 0x84, 0xb0, 0x41, 0xd6, 0xfe, 0xa5, 0x41, 0x18, 0x5c, 0xd9, 0x26, 0x41, 0x72, + 0x0c, 0xac, 0x6e, 0x0b, 0x26, 0xbc, 0x60, 0x3b, 0xf4, 0xb7, 0x89, 0xcb, 0xe1, 0x87, 0x3b, 0xde, + 0x4f, 0x8b, 0x46, 0x26, 0xd6, 0x0c, 0x62, 0x38, 0x43, 0xfc, 0x28, 0x2c, 0x05, 0xaf, 0xc1, 0x10, + 0x5f, 0x19, 0xc2, 0x4c, 0x90, 0x63, 0xcf, 0x67, 0x13, 0x2b, 0x76, 0x50, 0x6a, 0xcf, 0xe0, 0x57, + 0x09, 0x82, 0x10, 0x7a, 0x07, 0x26, 0x36, 0xbc, 0x28, 0x4e, 0xa8, 0xb2, 0x1f, 0x27, 0xce, 0x56, + 0xeb, 0x10, 0x36, 0x02, 0x35, 0x23, 0xab, 0x06, 0x25, 0x9c, 0xa1, 0x8c, 0x9a, 0x30, 0x4e, 0x55, + 0xd4, 0xb4, 0xa9, 0xe1, 0xbe, 0x9b, 0x52, 0x26, 0xc2, 0x6b, 0x3a, 0x21, 0x6c, 0xd2, 0xa5, 0x2c, + 0xa9, 0xc1, 0x54, 0xda, 0x11, 0x26, 0xdd, 0x28, 0x96, 0xc4, 0x75, 0x59, 0x0e, 0xa3, 0x9c, 0x8d, + 0x79, 0xca, 0x54, 0x4c, 0xce, 0x96, 0xfa, 0xc3, 0xd8, 0xdf, 0xa2, 0x67, 0x31, 0x9d, 0xc3, 0x63, + 0x38, 0xbe, 0xae, 0x98, 0xc7, 0xd7, 0x93, 0x05, 0xbe, 0x6c, 0x8f, 0xa3, 0xeb, 0x6d, 0x18, 0xd5, + 0x3e, 0x3c, 0x5a, 0x80, 0x4a, 0x43, 0x3a, 0x73, 0x08, 0x2e, 0xae, 0x44, 0x29, 0xe5, 0xe5, 0x81, + 0x53, 0x1c, 0x3a, 0x2f, 0x54, 0x04, 0xcd, 0xba, 0x7e, 0x51, 0x01, 0x15, 0x33, 0x88, 0xfd, 0x02, + 0xc0, 0xca, 0x03, 0xd2, 0x58, 0xe4, 0x2a, 0x9e, 0x76, 0xbf, 0x67, 0xf5, 0xbe, 0xdf, 0xb3, 0xbf, + 0x69, 0xc1, 0xc4, 0xea, 0xb2, 0x21, 0xd3, 0xcf, 0x03, 0x70, 0xd9, 0xf8, 0xce, 0x9d, 0x1b, 0xd2, + 0x7e, 0xcd, 0x8d, 0x8c, 0xaa, 0x14, 0x6b, 0x18, 0xe8, 0x51, 0x28, 0xfb, 0xed, 0x40, 0x88, 0xac, + 0xc3, 0x7b, 0xbb, 0x73, 0xe5, 0x6b, 0xed, 0x00, 0xd3, 0x32, 0xcd, 0xc7, 0xaa, 0x5c, 0xd8, 0xc7, + 0x2a, 0xdf, 0xdb, 0xf8, 0x6b, 0x65, 0x98, 0x5a, 0xf5, 0xc9, 0x03, 0xa3, 0xd7, 0x4f, 0xc3, 0x90, + 0x1b, 0x79, 0xdb, 0x24, 0xca, 0x0a, 0x02, 0x55, 0x56, 0x8a, 0x05, 0xb4, 0xb0, 0xdb, 0xd7, 0x5b, + 0x9d, 0x07, 0xf9, 0xd1, 0xb9, 0xbc, 0xe5, 0x8e, 0x19, 0x6d, 0xc0, 0x30, 0xbf, 0x0f, 0x8e, 0x67, + 0x06, 0xd9, 0x52, 0x7c, 0xe5, 0xe0, 0xce, 0x64, 0xe7, 0x67, 0x5e, 0xd8, 0x57, 0xb8, 0xc3, 0x8d, + 0xe2, 0x65, 0xa2, 0x14, 0x4b, 0xe2, 0xb3, 0x1f, 0x83, 0x31, 0x1d, 0xb3, 0x2f, 0xcf, 0x9b, 0xbf, + 0x6c, 0xc1, 0xc9, 0x55, 0x3f, 0x6c, 0xdc, 0xcb, 0xf8, 0xe5, 0xbd, 0x04, 0xa3, 0x74, 0x33, 0xc5, + 0x86, 0xd3, 0xaa, 0xe1, 0x9d, 0x2b, 0x40, 0x58, 0xc7, 0xd3, 0xaa, 0xdd, 0xba, 0xb5, 0x56, 0xed, + 0xe6, 0xd4, 0x2b, 0x40, 0x58, 0xc7, 0xb3, 0x7f, 0xc7, 0x82, 0xc7, 0x2f, 0x2f, 0xaf, 0xd4, 0x48, + 0x14, 0x7b, 0x71, 0x42, 0x82, 0xa4, 0xc3, 0xaf, 0x98, 0xca, 0x8c, 0xae, 0xd6, 0x95, 0x54, 0x66, + 0xac, 0xb2, 0x5e, 0x08, 0xe8, 0xfb, 0xc5, 0xb9, 0xfe, 0x1b, 0x16, 0x9c, 0xbc, 0xec, 0x25, 0x98, + 0xb4, 0xc2, 0xac, 0x2b, 0x70, 0x44, 0x5a, 0x61, 0xec, 0x25, 0x61, 0xb4, 0x93, 0x75, 0x05, 0xc6, + 0x0a, 0x82, 0x35, 0x2c, 0xde, 0xf2, 0xb6, 0x17, 0xd3, 0x9e, 0x96, 0x4c, 0x55, 0x17, 0x8b, 0x72, + 0xac, 0x30, 0xe8, 0xc0, 0x5c, 0x2f, 0x62, 0x22, 0xc3, 0x8e, 0xd8, 0xc1, 0x6a, 0x60, 0x55, 0x09, + 0xc0, 0x29, 0x8e, 0xfd, 0x77, 0x2c, 0x38, 0x75, 0xd9, 0x6f, 0xc7, 0x09, 0x89, 0x36, 0x62, 0xa3, + 0xb3, 0x2f, 0x40, 0x85, 0x48, 0xe1, 0x5e, 0xf4, 0x55, 0x1d, 0x1a, 0x4a, 0xea, 0xe7, 0x7e, 0xc8, + 0x0a, 0xaf, 0x80, 0xbb, 0x6b, 0x7f, 0xce, 0x99, 0xbf, 0x51, 0x82, 0xf1, 0x2b, 0xeb, 0xeb, 0xb5, + 0xcb, 0x24, 0x11, 0x5c, 0x32, 0xdf, 0x28, 0x85, 0x35, 0x8d, 0xfc, 0x20, 0xe1, 0xa7, 0x9d, 0x78, + 0xfe, 0x3c, 0x0f, 0x3c, 0x99, 0x5f, 0x0b, 0x92, 0x9b, 0x51, 0x3d, 0x89, 0xbc, 0xa0, 0xd9, 0x55, + 0x87, 0x97, 0xbc, 0xbc, 0xdc, 0x8b, 0x97, 0xa3, 0x17, 0x60, 0x88, 0x45, 0xbe, 0x48, 0xe1, 0xe3, + 0x83, 0x4a, 0x4e, 0x60, 0xa5, 0xfb, 0xbb, 0x73, 0x95, 0x5b, 0x78, 0x8d, 0xff, 0xc1, 0x02, 0x15, + 0xbd, 0x05, 0xa3, 0x9b, 0x49, 0xd2, 0xba, 0x42, 0x1c, 0x97, 0x44, 0x92, 0x4f, 0x9c, 0x3b, 0x98, + 0x4f, 0xd0, 0xe9, 0xe0, 0x15, 0xd2, 0xad, 0x95, 0x96, 0xc5, 0x58, 0xa7, 0x68, 0xd7, 0x01, 0x52, + 0xd8, 0x43, 0xd2, 0x41, 0xec, 0x9f, 0x2f, 0xc1, 0xf0, 0x15, 0x27, 0x70, 0x7d, 0x12, 0xa1, 0x55, + 0x18, 0x20, 0x0f, 0x48, 0x43, 0x1c, 0xe4, 0x39, 0x5d, 0x4f, 0x0f, 0x3b, 0x6e, 0x57, 0xa3, 0xff, + 0x31, 0xab, 0x8f, 0x30, 0x0c, 0xd3, 0x7e, 0x5f, 0x56, 0x5e, 0xe2, 0xcf, 0xe5, 0xcf, 0x82, 0x5a, + 0x14, 0xfc, 0xa4, 0x14, 0x45, 0x58, 0x12, 0x62, 0x16, 0xa8, 0x46, 0xab, 0x4e, 0xd9, 0x5b, 0x52, + 0x4c, 0xb3, 0x5b, 0x5f, 0xae, 0x71, 0x74, 0x41, 0x97, 0x5b, 0xa0, 0x64, 0x21, 0x4e, 0xc9, 0xd9, + 0xeb, 0x50, 0xa1, 0x1f, 0x7f, 0xd1, 0xf7, 0x9c, 0x83, 0xcd, 0x60, 0xcf, 0x41, 0x45, 0x1a, 0xa2, + 0x62, 0xe1, 0x72, 0xce, 0xa8, 0x4a, 0x3b, 0x55, 0x8c, 0x53, 0xb8, 0x7d, 0x09, 0xa6, 0xd9, 0x2d, + 0xaf, 0x93, 0x6c, 0x1a, 0x7b, 0x31, 0x77, 0xd1, 0xdb, 0xdf, 0x1e, 0x80, 0x13, 0x6b, 0xf5, 0xe5, + 0xba, 0x69, 0x91, 0xbc, 0x04, 0x63, 0xfc, 0xd8, 0xa7, 0x4b, 0xd9, 0xf1, 0x45, 0x7d, 0x75, 0x33, + 0xb1, 0xae, 0xc1, 0xb0, 0x81, 0x89, 0x1e, 0x87, 0xb2, 0xf7, 0x6e, 0x90, 0xf5, 0x15, 0x5c, 0x7b, + 0xed, 0x06, 0xa6, 0xe5, 0x14, 0x4c, 0x25, 0x08, 0xce, 0x3a, 0x15, 0x58, 0x49, 0x11, 0xaf, 0xc2, + 0x84, 0x17, 0x37, 0x62, 0x6f, 0x2d, 0xa0, 0x7c, 0xc5, 0x69, 0xc8, 0x4d, 0x91, 0x8a, 0xfc, 0xb4, + 0xab, 0x0a, 0x8a, 0x33, 0xd8, 0x1a, 0x1f, 0x1f, 0x2c, 0x2c, 0x85, 0xe4, 0x3a, 0xa1, 0x53, 0x01, + 0xab, 0xc5, 0x46, 0x17, 0x33, 0xcf, 0x23, 0x21, 0x60, 0xf1, 0x01, 0xc7, 0x58, 0xc2, 0xd0, 0x65, + 0x38, 0xd1, 0xd8, 0x74, 0x5a, 0x8b, 0xed, 0x64, 0xb3, 0xea, 0xc5, 0x8d, 0x70, 0x9b, 0x44, 0x3b, + 0x4c, 0x00, 0x1e, 0x49, 0x6d, 0x5a, 0x0a, 0xb0, 0x7c, 0x65, 0xb1, 0x46, 0x31, 0x71, 0x67, 0x1d, + 0x53, 0x20, 0x81, 0x23, 0x10, 0x48, 0x16, 0x61, 0x52, 0xb6, 0x5a, 0x27, 0x31, 0x3b, 0x22, 0x46, + 0x59, 0x3f, 0x55, 0x2c, 0x8f, 0x28, 0x56, 0xbd, 0xcc, 0xe2, 0xdb, 0xef, 0x40, 0x45, 0x79, 0xca, + 0x49, 0x07, 0x51, 0xab, 0x87, 0x83, 0x68, 0x3e, 0x73, 0x97, 0xb6, 0xf3, 0x72, 0x57, 0xdb, 0xf9, + 0x3f, 0xb1, 0x20, 0x75, 0xf5, 0x41, 0x18, 0x2a, 0xad, 0x90, 0xdd, 0xb3, 0x45, 0xf2, 0x42, 0xfb, + 0xa9, 0x9c, 0x3d, 0xcf, 0x79, 0x0e, 0x9f, 0x90, 0x9a, 0xac, 0x8b, 0x53, 0x32, 0xe8, 0x1a, 0x0c, + 0xb7, 0x22, 0x52, 0x4f, 0x58, 0x74, 0x47, 0x1f, 0x14, 0xf9, 0x42, 0xe0, 0x35, 0xb1, 0x24, 0x61, + 0xff, 0x0b, 0x0b, 0xe0, 0x9a, 0xb7, 0xe5, 0x25, 0xd8, 0x09, 0x9a, 0xe4, 0x18, 0x14, 0xeb, 0x1b, + 0x30, 0x10, 0xb7, 0x48, 0xa3, 0xd8, 0x4d, 0x69, 0xda, 0xb3, 0x7a, 0x8b, 0x34, 0xd2, 0xcf, 0x41, + 0xff, 0x61, 0x46, 0xc7, 0xfe, 0x1e, 0xc0, 0x44, 0x8a, 0x46, 0x95, 0x1b, 0xf4, 0xbc, 0x11, 0xd6, + 0xf0, 0x68, 0x26, 0xac, 0xa1, 0xc2, 0xb0, 0xb5, 0x48, 0x86, 0x04, 0xca, 0x5b, 0xce, 0x03, 0xa1, + 0x4b, 0xbd, 0x54, 0xb4, 0x43, 0xb4, 0xa5, 0xf9, 0xeb, 0xce, 0x03, 0x2e, 0xba, 0x3e, 0x27, 0x17, + 0xd2, 0x75, 0xe7, 0xc1, 0x3e, 0xbf, 0x0f, 0x65, 0xdc, 0x89, 0x2a, 0x6f, 0x5f, 0xf8, 0xe3, 0xf4, + 0x3f, 0x3b, 0x86, 0x68, 0x73, 0xac, 0x55, 0x2f, 0x10, 0xa6, 0xe0, 0x3e, 0x5b, 0xf5, 0x82, 0x6c, + 0xab, 0x5e, 0x50, 0xa0, 0x55, 0x8f, 0xf9, 0xff, 0x0e, 0x8b, 0x1b, 0x14, 0xe6, 0x3c, 0x39, 0x7a, + 0xf1, 0xa3, 0x7d, 0x35, 0x2d, 0xae, 0x62, 0x78, 0xf3, 0x0b, 0x52, 0x5e, 0x17, 0xa5, 0xb9, 0x5d, + 0x90, 0x4d, 0xa3, 0xbf, 0x6b, 0xc1, 0x84, 0xf8, 0x8d, 0xc9, 0xbb, 0x6d, 0x12, 0x27, 0x42, 0x2e, + 0xf8, 0xc4, 0x61, 0x7a, 0x23, 0x48, 0xf0, 0x4e, 0x7d, 0x44, 0xb2, 0x5f, 0x13, 0x98, 0xdb, 0xb7, + 0x4c, 0x7f, 0xd0, 0xf7, 0x2c, 0x98, 0xde, 0x72, 0x1e, 0xf0, 0x16, 0x79, 0x19, 0x76, 0x12, 0x2f, + 0x14, 0x0e, 0xa2, 0xab, 0xfd, 0xae, 0x93, 0x0e, 0x42, 0xbc, 0xbb, 0xd2, 0xf7, 0x6b, 0xba, 0x1b, + 0x4a, 0x6e, 0xa7, 0xbb, 0xf6, 0x70, 0x76, 0x03, 0x46, 0xe4, 0xc2, 0xec, 0xa2, 0x29, 0x55, 0x75, + 0xf1, 0x27, 0xc7, 0x2e, 0x31, 0x2f, 0xad, 0x8b, 0xf3, 0xaf, 0xb5, 0x9d, 0x20, 0xf1, 0x92, 0x1d, + 0x4d, 0xb3, 0x62, 0xed, 0x88, 0xa5, 0x78, 0xa4, 0xed, 0xbc, 0x03, 0x63, 0xfa, 0xba, 0x3b, 0xd2, + 0xb6, 0xde, 0x85, 0x93, 0x5d, 0x56, 0xd5, 0x91, 0x36, 0x79, 0x1f, 0x1e, 0xed, 0xb9, 0x3e, 0x8e, + 0xb2, 0x61, 0xfb, 0x37, 0x2c, 0x9d, 0x75, 0x1e, 0x83, 0xdd, 0xea, 0xba, 0x69, 0xb7, 0x3a, 0x57, + 0x74, 0x0f, 0xf5, 0x30, 0x5e, 0x6d, 0xe8, 0xdd, 0xa7, 0x47, 0x02, 0x5a, 0x87, 0x21, 0x9f, 0x96, + 0xc8, 0x6b, 0xc3, 0xf3, 0xfd, 0xec, 0xd2, 0x54, 0x02, 0x63, 0xe5, 0x31, 0x16, 0xb4, 0xec, 0xef, + 0x59, 0x30, 0xf0, 0xe7, 0x18, 0x74, 0xd5, 0x41, 0x5a, 0x64, 0x21, 0x98, 0xc7, 0xce, 0xfd, 0x95, + 0x07, 0x09, 0x09, 0x62, 0x26, 0xc6, 0xf7, 0x72, 0x7c, 0x18, 0xa5, 0x4d, 0x49, 0x3f, 0x96, 0x57, + 0x60, 0xdc, 0x77, 0xee, 0x12, 0x5f, 0xda, 0xdc, 0xb3, 0x4a, 0xef, 0x35, 0x1d, 0x88, 0x4d, 0x5c, + 0x5a, 0x79, 0x43, 0xbf, 0x92, 0x10, 0x42, 0x92, 0xaa, 0x6c, 0xdc, 0x57, 0x60, 0x13, 0x97, 0x6a, + 0x5d, 0xf7, 0x9d, 0xa4, 0xb1, 0x29, 0x14, 0x62, 0xd5, 0xdd, 0x3b, 0xb4, 0x10, 0x73, 0x18, 0x15, + 0xf6, 0xe4, 0x8a, 0xbd, 0x4d, 0x22, 0x26, 0xec, 0x71, 0xa1, 0x5a, 0x09, 0x7b, 0xd8, 0x04, 0xe3, + 0x2c, 0x3e, 0xfa, 0x18, 0x4c, 0xd0, 0xc9, 0x09, 0xdb, 0x89, 0xf4, 0xd2, 0x19, 0x64, 0x5e, 0x3a, + 0xcc, 0xc9, 0x7b, 0xdd, 0x80, 0xe0, 0x0c, 0xa6, 0xfd, 0x16, 0x9c, 0xbc, 0x16, 0x3a, 0xee, 0x92, + 0xe3, 0x3b, 0x41, 0x83, 0x44, 0x6b, 0x41, 0x33, 0xd7, 0x03, 0x40, 0xbf, 0xa5, 0x2f, 0xe5, 0xdd, + 0xd2, 0xdb, 0x11, 0x20, 0xbd, 0x01, 0xe1, 0x5f, 0xf6, 0x26, 0x0c, 0x7b, 0xbc, 0x29, 0xb1, 0x6c, + 0x2f, 0xe4, 0x49, 0xd0, 0x1d, 0x7d, 0xd4, 0xfc, 0xa5, 0x78, 0x01, 0x96, 0x24, 0xa9, 0xbe, 0xd5, + 0x4d, 0xe4, 0xce, 0x57, 0x94, 0xed, 0xbf, 0x6a, 0xc1, 0xe4, 0x8d, 0x4c, 0x54, 0xf0, 0xd3, 0x30, + 0xc4, 0xb3, 0x54, 0x64, 0xad, 0x54, 0x75, 0x56, 0x8a, 0x05, 0xf4, 0xa1, 0x1b, 0x49, 0x7e, 0xb1, + 0x04, 0x15, 0xe6, 0xa9, 0xdc, 0xa2, 0xba, 0xd3, 0xd1, 0x8b, 0xa9, 0xd7, 0x0d, 0x31, 0x35, 0x47, + 0x51, 0x57, 0x1d, 0xeb, 0x25, 0xa5, 0xa2, 0x5b, 0x2a, 0x5a, 0xb6, 0x90, 0x8e, 0x9e, 0x12, 0xe4, + 0x11, 0x95, 0x13, 0x66, 0x70, 0xad, 0x8c, 0xa4, 0x65, 0xf7, 0xe6, 0x0a, 0xf7, 0x7d, 0x77, 0x6f, + 0xae, 0x7a, 0xd6, 0x83, 0x39, 0xd5, 0xb4, 0xce, 0x33, 0xf6, 0xfd, 0xb3, 0xcc, 0xff, 0xd4, 0xf1, + 0xbd, 0xcf, 0x12, 0x15, 0x74, 0x3e, 0x27, 0xfc, 0x49, 0x45, 0xe9, 0x3e, 0xe3, 0x33, 0xe2, 0x1f, + 0xcf, 0x29, 0x90, 0x56, 0xb1, 0xaf, 0xc0, 0x64, 0x66, 0xea, 0xd0, 0x4b, 0x30, 0xd8, 0xda, 0x74, + 0x62, 0x92, 0x71, 0x05, 0x1a, 0xac, 0xd1, 0xc2, 0xfd, 0xdd, 0xb9, 0x09, 0x55, 0x81, 0x95, 0x60, + 0x8e, 0x6d, 0x7f, 0xb1, 0x04, 0x03, 0x37, 0x42, 0xf7, 0x38, 0x96, 0xda, 0x15, 0x63, 0xa9, 0x3d, + 0x9d, 0x9f, 0x91, 0xa4, 0xe7, 0x2a, 0xab, 0x65, 0x56, 0xd9, 0xb9, 0x02, 0xb4, 0x0e, 0x5e, 0x60, + 0x5b, 0x30, 0xca, 0x32, 0x9e, 0x08, 0x5f, 0xa8, 0x17, 0x0c, 0xcd, 0x6a, 0x2e, 0xa3, 0x59, 0x4d, + 0x6a, 0xa8, 0x9a, 0x7e, 0xf5, 0x0c, 0x0c, 0x0b, 0xdf, 0x9b, 0xac, 0xf7, 0xad, 0xc0, 0xc5, 0x12, + 0x6e, 0xff, 0xf3, 0x32, 0x18, 0x19, 0x56, 0xd0, 0x6f, 0x59, 0x30, 0x1f, 0xf1, 0x48, 0x26, 0xb7, + 0xda, 0x8e, 0xbc, 0xa0, 0x59, 0x6f, 0x6c, 0x12, 0xb7, 0xed, 0x7b, 0x41, 0x73, 0xad, 0x19, 0x84, + 0xaa, 0x78, 0xe5, 0x01, 0x69, 0xb4, 0x99, 0xa9, 0xbb, 0x70, 0x62, 0x17, 0x75, 0xef, 0x7c, 0x71, + 0x6f, 0x77, 0x6e, 0x1e, 0xf7, 0xd5, 0x0a, 0xee, 0xb3, 0x57, 0xe8, 0x0f, 0x2d, 0x58, 0xe0, 0x39, + 0x46, 0x8a, 0x8f, 0xa4, 0x90, 0x46, 0x5a, 0x93, 0x44, 0x53, 0x72, 0xeb, 0x24, 0xda, 0x5a, 0x7a, + 0x59, 0x4c, 0xf2, 0x42, 0xad, 0xbf, 0x56, 0x71, 0xbf, 0xdd, 0xb4, 0xff, 0x75, 0x19, 0xc6, 0xe9, + 0x7c, 0xa6, 0x79, 0x05, 0x5e, 0x32, 0x96, 0xc9, 0x13, 0x99, 0x65, 0x72, 0xc2, 0x40, 0x7e, 0x38, + 0x29, 0x05, 0x62, 0x38, 0xe1, 0x3b, 0x71, 0x72, 0x85, 0x38, 0x51, 0x72, 0x97, 0x38, 0xec, 0x7a, + 0x37, 0xeb, 0x3a, 0x52, 0xe0, 0xc6, 0x58, 0xd9, 0xbe, 0xae, 0x65, 0x89, 0xe1, 0x4e, 0xfa, 0x68, + 0x1b, 0x10, 0xbb, 0x4a, 0x8e, 0x9c, 0x20, 0xe6, 0x63, 0xf1, 0x84, 0x69, 0xbc, 0xbf, 0x56, 0x67, + 0x45, 0xab, 0xe8, 0x5a, 0x07, 0x35, 0xdc, 0xa5, 0x05, 0xcd, 0x59, 0x60, 0xb0, 0xa8, 0xb3, 0xc0, + 0x50, 0x8e, 0xdb, 0xfb, 0x97, 0x2c, 0x38, 0x49, 0x3f, 0x8b, 0xe9, 0x22, 0x1d, 0xa3, 0x10, 0x26, + 0xe9, 0xb2, 0xf3, 0x49, 0x22, 0xcb, 0xc4, 0xfe, 0xca, 0x91, 0xac, 0x4d, 0x3a, 0xa9, 0xf8, 0x76, + 0xd5, 0x24, 0x86, 0xb3, 0xd4, 0xed, 0x6f, 0x5a, 0xc0, 0x9c, 0x16, 0x8f, 0xe1, 0x30, 0xbb, 0x6c, + 0x1e, 0x66, 0x76, 0x3e, 0xc7, 0xe8, 0x71, 0x8e, 0xbd, 0x08, 0x53, 0x14, 0x5a, 0x8b, 0xc2, 0x07, + 0x3b, 0x52, 0xd0, 0xce, 0xb7, 0x66, 0x7f, 0xa9, 0xc4, 0xb7, 0x8d, 0x0a, 0xc9, 0x44, 0x5f, 0xb6, + 0x60, 0xa4, 0xe1, 0xb4, 0x9c, 0x06, 0xcf, 0x4f, 0x55, 0xc0, 0x3a, 0x63, 0xd4, 0x9f, 0x5f, 0x16, + 0x75, 0xb9, 0x65, 0xe1, 0xc3, 0x72, 0xe8, 0xb2, 0x38, 0xd7, 0x9a, 0xa0, 0x1a, 0x9f, 0xbd, 0x07, + 0xe3, 0x06, 0xb1, 0x23, 0x55, 0x43, 0xbf, 0x6c, 0x71, 0xa6, 0xaf, 0x54, 0x85, 0xfb, 0x70, 0x22, + 0xd0, 0xfe, 0x53, 0x76, 0x26, 0x25, 0xe3, 0xf9, 0xe2, 0x6c, 0x9d, 0x71, 0x41, 0xcd, 0x41, 0x33, + 0x43, 0x10, 0x77, 0xb6, 0x61, 0xff, 0xb2, 0x05, 0x8f, 0xe8, 0x88, 0x5a, 0x0c, 0x6d, 0x9e, 0xdd, + 0xb8, 0x0a, 0x23, 0x61, 0x8b, 0x44, 0x4e, 0xaa, 0x16, 0x9d, 0x93, 0xf3, 0x7f, 0x53, 0x94, 0xef, + 0xef, 0xce, 0x4d, 0xeb, 0xd4, 0x65, 0x39, 0x56, 0x35, 0x91, 0x0d, 0x43, 0x6c, 0x5e, 0x62, 0x11, + 0xfd, 0xcc, 0xf2, 0x35, 0xb1, 0x7b, 0xa9, 0x18, 0x0b, 0x88, 0xfd, 0x37, 0x2c, 0xbe, 0xdc, 0xf4, + 0xae, 0xa3, 0xcf, 0xc1, 0xd4, 0x16, 0xd5, 0xa0, 0x56, 0x1e, 0xb4, 0x22, 0x6e, 0xf5, 0x96, 0x33, + 0xf6, 0x52, 0xf1, 0x19, 0xd3, 0x86, 0xbb, 0x34, 0x23, 0x7a, 0x3f, 0x75, 0x3d, 0x43, 0x16, 0x77, + 0x34, 0x64, 0xff, 0xfd, 0x12, 0xdf, 0xb3, 0x4c, 0x86, 0x7b, 0x06, 0x86, 0x5b, 0xa1, 0xbb, 0xbc, + 0x56, 0xc5, 0x62, 0xae, 0x14, 0xd3, 0xa9, 0xf1, 0x62, 0x2c, 0xe1, 0xe8, 0x22, 0x00, 0x79, 0x90, + 0x90, 0x28, 0x70, 0x7c, 0x75, 0x93, 0xae, 0x44, 0xa5, 0x15, 0x05, 0xc1, 0x1a, 0x16, 0xad, 0xd3, + 0x8a, 0xc2, 0x6d, 0xcf, 0x65, 0xc1, 0x1f, 0x65, 0xb3, 0x4e, 0x4d, 0x41, 0xb0, 0x86, 0x45, 0xf5, + 0xd6, 0x76, 0x10, 0xf3, 0x63, 0xcc, 0xb9, 0x2b, 0xd2, 0x0b, 0x8d, 0xa4, 0x7a, 0xeb, 0x2d, 0x1d, + 0x88, 0x4d, 0x5c, 0x74, 0x15, 0x86, 0x12, 0x87, 0xdd, 0x0f, 0x0f, 0x16, 0x71, 0xb6, 0x59, 0xa7, + 0xb8, 0x7a, 0x3e, 0x27, 0x5a, 0x15, 0x0b, 0x12, 0xf6, 0x7f, 0xaa, 0x00, 0xa4, 0x52, 0x17, 0xfa, + 0x62, 0xe7, 0x86, 0xff, 0x48, 0x51, 0x91, 0xed, 0xe1, 0xed, 0x76, 0xf4, 0x55, 0x0b, 0x46, 0x1d, + 0xdf, 0x0f, 0x1b, 0x4e, 0xc2, 0xa6, 0xa7, 0x54, 0x94, 0xf5, 0x88, 0x9e, 0x2c, 0xa6, 0x75, 0x79, + 0x67, 0x5e, 0x90, 0x77, 0xb6, 0x1a, 0x24, 0xb7, 0x3f, 0x7a, 0x17, 0xd0, 0x87, 0xa5, 0xd4, 0xce, + 0xbf, 0xf0, 0x6c, 0x56, 0x6a, 0xaf, 0x30, 0x86, 0xab, 0x09, 0xec, 0xe8, 0x2d, 0x23, 0x1d, 0xcf, + 0x40, 0x91, 0x08, 0x5e, 0x43, 0x0e, 0xc9, 0xcb, 0xc4, 0x83, 0xde, 0xd0, 0xbd, 0xd2, 0x07, 0x8b, + 0x84, 0xc8, 0x6b, 0xe2, 0x70, 0x8e, 0x47, 0x7a, 0x02, 0x93, 0xae, 0x79, 0xf2, 0x0a, 0xcf, 0xba, + 0x0b, 0xf9, 0x2d, 0x64, 0x8e, 0xec, 0xf4, 0xac, 0xcd, 0x00, 0x70, 0xb6, 0x09, 0xf4, 0x06, 0x8f, + 0x19, 0x58, 0x0b, 0x36, 0x42, 0xe1, 0x5d, 0x77, 0xbe, 0xc0, 0x37, 0xdf, 0x89, 0x13, 0xb2, 0x45, + 0xeb, 0xa4, 0x87, 0xeb, 0x0d, 0x41, 0x05, 0x2b, 0x7a, 0x68, 0x1d, 0x86, 0x58, 0xc0, 0x56, 0x3c, + 0x33, 0x52, 0xc4, 0x12, 0x67, 0xc6, 0x29, 0xa7, 0xfb, 0x87, 0xfd, 0x8d, 0xb1, 0xa0, 0x85, 0xae, + 0xc8, 0x4c, 0x05, 0xf1, 0x5a, 0x70, 0x2b, 0x26, 0x2c, 0x53, 0x41, 0x65, 0xe9, 0x43, 0x69, 0xea, + 0x01, 0x5e, 0xde, 0x35, 0x21, 0xa1, 0x51, 0x93, 0x0a, 0x36, 0xe2, 0xbf, 0xcc, 0x73, 0x38, 0x03, + 0x45, 0x3a, 0x6a, 0x66, 0x45, 0x4c, 0x27, 0xfb, 0xb6, 0x49, 0x0c, 0x67, 0xa9, 0x1f, 0xeb, 0x91, + 0x3a, 0x1b, 0xc0, 0x54, 0x76, 0x53, 0x1e, 0xe9, 0x11, 0xfe, 0xe3, 0x01, 0x98, 0x30, 0x17, 0x07, + 0x5a, 0x80, 0x8a, 0x20, 0xa2, 0xf2, 0x9e, 0xa9, 0x3d, 0x70, 0x5d, 0x02, 0x70, 0x8a, 0xc3, 0x32, + 0xc0, 0xb1, 0xea, 0x9a, 0x5f, 0x55, 0x9a, 0x01, 0x4e, 0x41, 0xb0, 0x86, 0x45, 0x25, 0xe1, 0xbb, + 0x61, 0x98, 0xa8, 0x93, 0x40, 0xad, 0x9b, 0x25, 0x56, 0x8a, 0x05, 0x94, 0x9e, 0x00, 0xf7, 0xe8, + 0xc7, 0xf4, 0x4d, 0xab, 0xa2, 0x3a, 0x01, 0xae, 0xea, 0x40, 0x6c, 0xe2, 0xd2, 0x13, 0x2d, 0x8c, + 0xd9, 0x42, 0x14, 0xf2, 0x76, 0xea, 0xa7, 0x56, 0xe7, 0x41, 0x8c, 0x12, 0x8e, 0x3e, 0x05, 0x8f, + 0xa8, 0x98, 0x43, 0xcc, 0xad, 0xb4, 0xb2, 0xc5, 0x21, 0x43, 0x65, 0x7e, 0x64, 0xb9, 0x3b, 0x1a, + 0xee, 0x55, 0x1f, 0xbd, 0x0a, 0x13, 0x42, 0x56, 0x96, 0x14, 0x87, 0x4d, 0x77, 0x83, 0xab, 0x06, + 0x14, 0x67, 0xb0, 0x51, 0x15, 0xa6, 0x68, 0x09, 0x13, 0x52, 0x25, 0x05, 0x1e, 0x3b, 0xa9, 0x8e, + 0xfa, 0xab, 0x19, 0x38, 0xee, 0xa8, 0x81, 0x16, 0x61, 0x92, 0x0b, 0x2b, 0x54, 0x31, 0x64, 0xdf, + 0x41, 0xb8, 0xc4, 0xaa, 0x8d, 0x70, 0xd3, 0x04, 0xe3, 0x2c, 0x3e, 0xba, 0x04, 0x63, 0x4e, 0xd4, + 0xd8, 0xf4, 0x12, 0xd2, 0x48, 0xda, 0x11, 0xcf, 0x03, 0xa2, 0xf9, 0x6b, 0x2c, 0x6a, 0x30, 0x6c, + 0x60, 0xda, 0x9f, 0x85, 0x93, 0x5d, 0xfc, 0xef, 0xe9, 0xc2, 0x71, 0x5a, 0x9e, 0x1c, 0x53, 0xc6, + 0xe3, 0x6c, 0xb1, 0xb6, 0x26, 0x47, 0xa3, 0x61, 0xd1, 0xd5, 0xc9, 0xcc, 0xd3, 0x5a, 0x5a, 0x52, + 0xb5, 0x3a, 0x57, 0x25, 0x00, 0xa7, 0x38, 0xf6, 0x9f, 0x55, 0x40, 0xb3, 0xde, 0x14, 0xf0, 0x32, + 0xba, 0x04, 0x63, 0x32, 0xd3, 0xae, 0x96, 0xe1, 0x52, 0x0d, 0xf3, 0xb2, 0x06, 0xc3, 0x06, 0x26, + 0xed, 0x5b, 0x20, 0x6d, 0x52, 0x59, 0xff, 0x36, 0x65, 0xac, 0xc2, 0x29, 0x0e, 0x3a, 0x0f, 0x23, + 0x31, 0xf1, 0x37, 0xae, 0x79, 0xc1, 0x3d, 0xb1, 0xb0, 0x15, 0x67, 0xae, 0x8b, 0x72, 0xac, 0x30, + 0xd0, 0x12, 0x94, 0xdb, 0x9e, 0x2b, 0x96, 0xb2, 0x14, 0x1b, 0xca, 0xb7, 0xd6, 0xaa, 0xfb, 0xbb, + 0x73, 0x4f, 0xf4, 0x4a, 0x60, 0x4c, 0xf5, 0xf3, 0x78, 0x9e, 0x6e, 0x3f, 0x5a, 0xb9, 0x9b, 0x9d, + 0x7e, 0xa8, 0x4f, 0x3b, 0xfd, 0x45, 0x00, 0x31, 0x6a, 0xb9, 0x96, 0xcb, 0xe9, 0x57, 0xbb, 0xac, + 0x20, 0x58, 0xc3, 0xa2, 0x5a, 0x7e, 0x23, 0x22, 0x8e, 0x54, 0x84, 0xb9, 0x5f, 0xf8, 0xc8, 0xe1, + 0xb5, 0xfc, 0xe5, 0x2c, 0x31, 0xdc, 0x49, 0x1f, 0x85, 0x70, 0xc2, 0x15, 0x81, 0xad, 0x69, 0xa3, + 0x95, 0xfe, 0x9d, 0xd1, 0x99, 0x4b, 0x4d, 0x96, 0x10, 0xee, 0xa4, 0x8d, 0x3e, 0x03, 0xb3, 0xb2, + 0xb0, 0x33, 0xaa, 0x98, 0x6d, 0x97, 0xf2, 0xd2, 0x99, 0xbd, 0xdd, 0xb9, 0xd9, 0x6a, 0x4f, 0x2c, + 0x7c, 0x00, 0x05, 0xf4, 0x26, 0x0c, 0xb1, 0x7b, 0x9d, 0x78, 0x66, 0x94, 0x9d, 0x78, 0x2f, 0x16, + 0x09, 0x69, 0xa0, 0xab, 0x7e, 0x9e, 0xdd, 0x0e, 0x09, 0x67, 0xdd, 0xf4, 0xb2, 0x8c, 0x15, 0x62, + 0x41, 0x13, 0xb5, 0x60, 0xd4, 0x09, 0x82, 0x30, 0x71, 0xb8, 0x20, 0x36, 0x56, 0x44, 0x96, 0xd4, + 0x9a, 0x58, 0x4c, 0xeb, 0xf2, 0x76, 0x94, 0xff, 0x9f, 0x06, 0xc1, 0x7a, 0x13, 0xe8, 0x3e, 0x4c, + 0x86, 0xf7, 0x29, 0xc3, 0x94, 0x57, 0x1b, 0xf1, 0xcc, 0xb8, 0x39, 0xb0, 0x1c, 0x43, 0xad, 0x51, + 0x59, 0xe3, 0x64, 0x26, 0x51, 0x9c, 0x6d, 0x05, 0xcd, 0x1b, 0xe6, 0xea, 0x89, 0xd4, 0x25, 0x3d, + 0x35, 0x57, 0xeb, 0xd6, 0x69, 0x16, 0xb9, 0xce, 0xdd, 0x50, 0x19, 0x47, 0x98, 0xcc, 0x44, 0xae, + 0xa7, 0x20, 0xac, 0xe3, 0xcd, 0x7e, 0x14, 0x46, 0xb5, 0x89, 0xef, 0xc7, 0xf7, 0x79, 0xf6, 0x55, + 0x98, 0xca, 0x4e, 0x68, 0x5f, 0xbe, 0xd3, 0xff, 0xab, 0x04, 0x93, 0x5d, 0xee, 0x8d, 0xee, 0x79, + 0xcc, 0x7f, 0xdf, 0x60, 0x7d, 0x57, 0xbd, 0xc0, 0xc5, 0x0c, 0x62, 0x32, 0xb0, 0x52, 0x01, 0x06, + 0x26, 0xb9, 0x69, 0xb9, 0x27, 0x37, 0x15, 0x4c, 0x6b, 0xe0, 0xbd, 0x30, 0x2d, 0xf3, 0x9c, 0x18, + 0x2c, 0x74, 0x4e, 0x3c, 0x04, 0x46, 0x67, 0x1c, 0x35, 0xc3, 0x05, 0x8e, 0x9a, 0x6f, 0x94, 0x60, + 0x2a, 0xf5, 0x13, 0x17, 0xe9, 0xb7, 0x8f, 0xfe, 0x1a, 0x62, 0xdd, 0xb8, 0x86, 0xc8, 0xcb, 0xae, + 0x9d, 0xe9, 0x5f, 0xcf, 0x2b, 0x89, 0x37, 0x33, 0x57, 0x12, 0x2f, 0xf6, 0x49, 0xf7, 0xe0, 0xeb, + 0x89, 0xef, 0x96, 0xe0, 0x54, 0xb6, 0xca, 0xb2, 0xef, 0x78, 0x5b, 0xc7, 0x30, 0x5f, 0x9f, 0x32, + 0xe6, 0xeb, 0xe5, 0xfe, 0xc6, 0xc5, 0x3a, 0xd9, 0x73, 0xd2, 0x9c, 0xcc, 0xa4, 0x7d, 0xf4, 0x30, + 0xc4, 0x0f, 0x9e, 0xb9, 0xdf, 0xb3, 0xe0, 0xd1, 0xae, 0xf5, 0x8e, 0xc1, 0xf0, 0xfa, 0xba, 0x69, + 0x78, 0x7d, 0xe1, 0x10, 0xa3, 0xeb, 0x61, 0x89, 0xfd, 0x95, 0x72, 0x8f, 0x51, 0x31, 0xd3, 0xd4, + 0x4d, 0x18, 0x75, 0x1a, 0x0d, 0x12, 0xc7, 0xd7, 0x43, 0x57, 0xe5, 0xc0, 0x7a, 0x9e, 0x9d, 0x2d, + 0x69, 0xf1, 0xfe, 0xee, 0xdc, 0x6c, 0x96, 0x44, 0x0a, 0xc6, 0x3a, 0x05, 0x33, 0x3b, 0x5f, 0xe9, + 0x88, 0xb2, 0xf3, 0x5d, 0x04, 0xd8, 0x56, 0x5a, 0x6c, 0xd6, 0xe2, 0xa5, 0xe9, 0xb7, 0x1a, 0x16, + 0xfa, 0x8b, 0x4c, 0x22, 0xe4, 0x4e, 0x1a, 0x03, 0x66, 0xc8, 0x69, 0xce, 0xf7, 0xd3, 0x1d, 0x3e, + 0x78, 0x64, 0xab, 0xb2, 0x0e, 0x2a, 0x92, 0xe8, 0x13, 0x30, 0x15, 0xf3, 0xfc, 0x09, 0xcb, 0xbe, + 0x13, 0xb3, 0x00, 0x09, 0xc1, 0x4f, 0x59, 0x90, 0x6a, 0x3d, 0x03, 0xc3, 0x1d, 0xd8, 0xf6, 0x77, + 0xca, 0xf0, 0xc1, 0x03, 0x96, 0x2d, 0x5a, 0x34, 0x6f, 0x6d, 0x9f, 0xcb, 0xda, 0x7f, 0x66, 0xbb, + 0x56, 0x36, 0x0c, 0x42, 0x99, 0xaf, 0x5d, 0x7a, 0xcf, 0x5f, 0xfb, 0x6b, 0xba, 0xb5, 0x8e, 0xfb, + 0x6d, 0x5e, 0x3e, 0xf4, 0xc6, 0xfc, 0x49, 0x35, 0xd6, 0x7f, 0xc1, 0x82, 0x27, 0xba, 0x0e, 0xcb, + 0xf0, 0x12, 0x59, 0x80, 0x4a, 0x83, 0x16, 0x6a, 0xe1, 0x4c, 0x69, 0x1c, 0xa1, 0x04, 0xe0, 0x14, + 0xc7, 0x70, 0x06, 0x29, 0xe5, 0x3a, 0x83, 0xfc, 0xb6, 0x05, 0xd3, 0xd9, 0x4e, 0x1c, 0x03, 0xdf, + 0xaa, 0x9b, 0x7c, 0x6b, 0xbe, 0xbf, 0x8f, 0xdf, 0x83, 0x65, 0xfd, 0xb7, 0x09, 0x38, 0xdd, 0x71, + 0xea, 0xf1, 0x59, 0xfc, 0x39, 0x0b, 0x4e, 0x34, 0x99, 0xf4, 0xae, 0xc5, 0x8c, 0x89, 0x71, 0xe5, + 0x04, 0xda, 0x1d, 0x18, 0x6a, 0xc6, 0x75, 0x91, 0x0e, 0x14, 0xdc, 0xd9, 0x18, 0xfa, 0x8a, 0x05, + 0xd3, 0xce, 0xfd, 0xb8, 0xe3, 0x71, 0x18, 0xb1, 0x90, 0x5e, 0xcd, 0x31, 0x96, 0xe5, 0x3c, 0x2b, + 0xb3, 0x34, 0xb3, 0xb7, 0x3b, 0x37, 0xdd, 0x0d, 0x0b, 0x77, 0x6d, 0x95, 0x7e, 0xdf, 0x4d, 0x11, + 0x3b, 0x52, 0x2c, 0xfa, 0xb1, 0x5b, 0xa4, 0x09, 0x67, 0x6b, 0x12, 0x82, 0x15, 0x45, 0xf4, 0x36, + 0x54, 0x9a, 0x32, 0x4c, 0x2c, 0xcb, 0x36, 0x7b, 0x4c, 0x73, 0xb7, 0xa8, 0x32, 0xee, 0xbb, 0xaf, + 0x40, 0x38, 0x25, 0x8a, 0xae, 0x40, 0x39, 0xd8, 0x88, 0x45, 0x40, 0x76, 0x9e, 0x0f, 0x90, 0xe9, + 0x79, 0xc5, 0x63, 0x58, 0x6f, 0xac, 0xd6, 0x31, 0x25, 0x41, 0x29, 0x45, 0x77, 0x5d, 0x61, 0x25, + 0xce, 0xa1, 0x84, 0x97, 0xaa, 0x9d, 0x94, 0xf0, 0x52, 0x15, 0x53, 0x12, 0xa8, 0x06, 0x83, 0x2c, + 0x32, 0x45, 0x98, 0x80, 0x73, 0xa2, 0xf6, 0x3b, 0xe2, 0x6f, 0x78, 0x12, 0x49, 0x56, 0x8c, 0x39, + 0x21, 0xb4, 0x0e, 0x43, 0x0d, 0xf6, 0x0e, 0x82, 0xd0, 0xcd, 0xf3, 0xf2, 0x59, 0x74, 0xbc, 0x99, + 0xc0, 0xef, 0xbd, 0x78, 0x39, 0x16, 0xb4, 0x18, 0x55, 0xd2, 0xda, 0xdc, 0x88, 0x85, 0xf2, 0x9d, + 0x47, 0xb5, 0xe3, 0x45, 0x0b, 0x41, 0x95, 0x95, 0x63, 0x41, 0x0b, 0x55, 0xa1, 0xb4, 0xd1, 0x10, + 0x81, 0x2b, 0x39, 0xa6, 0x5f, 0x33, 0x20, 0x79, 0x69, 0x68, 0x6f, 0x77, 0xae, 0xb4, 0xba, 0x8c, + 0x4b, 0x1b, 0x0d, 0xf4, 0x3a, 0x0c, 0x6f, 0xf0, 0x10, 0x53, 0x91, 0x77, 0xf6, 0x42, 0x5e, 0x1c, + 0x6c, 0x47, 0x3c, 0x2a, 0x8f, 0xcf, 0x10, 0x00, 0x2c, 0xc9, 0xb1, 0x94, 0x7c, 0x2a, 0x68, 0x56, + 0x24, 0x9e, 0x9d, 0xef, 0x2f, 0xc8, 0x56, 0xe8, 0xa4, 0xaa, 0x14, 0x6b, 0x14, 0xe9, 0x9a, 0x77, + 0xe4, 0x93, 0x2e, 0x2c, 0xe9, 0x6c, 0xee, 0x9a, 0xef, 0xfa, 0x02, 0x0c, 0x5f, 0xf3, 0x0a, 0x84, + 0x53, 0xa2, 0xa8, 0x0d, 0xe3, 0xdb, 0x71, 0x6b, 0x93, 0xc8, 0xad, 0xcf, 0x32, 0xd1, 0x8e, 0x5e, + 0xfc, 0x78, 0x4e, 0x7a, 0x61, 0x51, 0xc5, 0x8b, 0x92, 0xb6, 0xe3, 0x77, 0x70, 0x30, 0x96, 0x03, + 0xed, 0xb6, 0x4e, 0x16, 0x9b, 0xad, 0xd0, 0x4f, 0xf2, 0x6e, 0x3b, 0xbc, 0xbb, 0x93, 0x10, 0x91, + 0xa9, 0x36, 0xe7, 0x93, 0xbc, 0xc6, 0x91, 0x3b, 0x3f, 0x89, 0x00, 0x60, 0x49, 0x4e, 0x4d, 0x19, + 0xe3, 0xc6, 0x53, 0x85, 0xa7, 0xac, 0x63, 0x0c, 0xe9, 0x94, 0x31, 0xee, 0x9b, 0x12, 0x65, 0x5c, + 0xb7, 0xb5, 0x19, 0x26, 0x61, 0x90, 0xe1, 0xfd, 0x27, 0x8a, 0x70, 0xdd, 0x5a, 0x97, 0x9a, 0x9d, + 0x5c, 0xb7, 0x1b, 0x16, 0xee, 0xda, 0x2a, 0x0a, 0x60, 0xa2, 0x15, 0x46, 0xc9, 0xfd, 0x30, 0x92, + 0xeb, 0x10, 0x15, 0xd2, 0x11, 0x8d, 0x3a, 0xa2, 0x6d, 0xe6, 0x86, 0x6b, 0x42, 0x70, 0x86, 0x3a, + 0xfd, 0x74, 0x71, 0xc3, 0xf1, 0xc9, 0xda, 0xcd, 0x99, 0x93, 0x45, 0x3e, 0x5d, 0x9d, 0x23, 0x77, + 0x7e, 0x3a, 0x01, 0xc0, 0x92, 0x9c, 0xfd, 0xcb, 0x43, 0x9d, 0x82, 0x03, 0x53, 0x0d, 0xfe, 0x7a, + 0xe7, 0x4d, 0xec, 0x27, 0xfa, 0xd7, 0x80, 0x1f, 0xe2, 0x9d, 0xec, 0x57, 0x2c, 0x38, 0xdd, 0xea, + 0x2a, 0x16, 0x88, 0xa3, 0xb7, 0x5f, 0x45, 0x9a, 0x4f, 0x8b, 0x4a, 0x28, 0xdd, 0x1d, 0x8e, 0x7b, + 0xb4, 0x99, 0x15, 0xa6, 0xcb, 0xef, 0x59, 0x98, 0xbe, 0x03, 0x23, 0x4c, 0xfa, 0x4b, 0xd3, 0xc5, + 0xf4, 0x99, 0x59, 0x85, 0x1d, 0xe2, 0xcb, 0x82, 0x04, 0x56, 0xc4, 0xe8, 0xc4, 0x3d, 0x9e, 0x1d, + 0x04, 0x26, 0x0c, 0x2c, 0xd2, 0x18, 0x72, 0x4d, 0x65, 0x55, 0xcc, 0xc4, 0xe3, 0xb5, 0x83, 0x90, + 0xf7, 0xf3, 0x10, 0xf0, 0xc1, 0x8d, 0xa1, 0x6a, 0x17, 0x55, 0x69, 0xc8, 0xbc, 0x76, 0xc9, 0x57, + 0x97, 0x8e, 0x57, 0xc4, 0xff, 0x07, 0x56, 0x17, 0x89, 0x94, 0xab, 0x65, 0x1f, 0x37, 0xd5, 0xb2, + 0xa7, 0xb3, 0x6a, 0x59, 0x87, 0x31, 0xc6, 0xd0, 0xc8, 0x8a, 0xa7, 0x61, 0x2d, 0x9a, 0x0f, 0xc7, + 0xf6, 0xe1, 0x6c, 0x1e, 0xbb, 0x63, 0xae, 0x58, 0xae, 0xba, 0x84, 0x4c, 0x5d, 0xb1, 0xdc, 0xb5, + 0x2a, 0x66, 0x90, 0xa2, 0x29, 0x15, 0xec, 0x9f, 0x2f, 0x41, 0xb9, 0x16, 0xba, 0xc7, 0x60, 0x5c, + 0xba, 0x6c, 0x18, 0x97, 0x9e, 0xca, 0x7d, 0xe2, 0xaf, 0xa7, 0x29, 0xe9, 0x66, 0xc6, 0x94, 0xf4, + 0x33, 0xf9, 0xa4, 0x0e, 0x36, 0x1c, 0x7d, 0xaf, 0x0c, 0xfa, 0x23, 0x85, 0xe8, 0x3f, 0x1c, 0xc6, + 0x43, 0xb7, 0x5c, 0xec, 0xdd, 0x42, 0xd1, 0x06, 0xf3, 0xe4, 0x92, 0x71, 0x7d, 0x3f, 0xb1, 0x8e, + 0xba, 0x77, 0x88, 0xd7, 0xdc, 0x4c, 0x88, 0x9b, 0x1d, 0xd8, 0xf1, 0x39, 0xea, 0xfe, 0xa9, 0x05, + 0x93, 0x99, 0xd6, 0x91, 0xdf, 0x2d, 0x20, 0xe8, 0x90, 0xe6, 0xa2, 0x13, 0xb9, 0x11, 0x44, 0xf3, + 0x00, 0xca, 0xea, 0x2f, 0x4d, 0x32, 0x4c, 0x3a, 0x55, 0xd7, 0x02, 0x31, 0xd6, 0x30, 0xd0, 0x4b, + 0x30, 0x9a, 0x84, 0xad, 0xd0, 0x0f, 0x9b, 0x3b, 0x57, 0x89, 0x4c, 0xf6, 0xa1, 0x6e, 0x4c, 0xd6, + 0x53, 0x10, 0xd6, 0xf1, 0xec, 0xef, 0x97, 0x21, 0xfb, 0xc4, 0xe5, 0xff, 0x5f, 0xa7, 0x3f, 0x39, + 0xeb, 0xf4, 0x0f, 0x2c, 0x98, 0xa2, 0xad, 0x33, 0xd7, 0x19, 0xe9, 0x50, 0xab, 0xde, 0x84, 0xb0, + 0x0e, 0x78, 0x13, 0xe2, 0x69, 0xca, 0xed, 0xdc, 0xb0, 0x9d, 0x08, 0x23, 0x92, 0xc6, 0xc4, 0x68, + 0x29, 0x16, 0x50, 0x81, 0x47, 0xa2, 0x48, 0x44, 0x1e, 0xe9, 0x78, 0x24, 0x8a, 0xb0, 0x80, 0xca, + 0x27, 0x23, 0x06, 0x7a, 0x3c, 0x19, 0xc1, 0xd2, 0x65, 0x09, 0x77, 0x0d, 0x21, 0x56, 0x68, 0xe9, + 0xb2, 0xa4, 0x1f, 0x47, 0x8a, 0x63, 0x7f, 0xab, 0x0c, 0x63, 0xb5, 0xd0, 0x4d, 0x3d, 0xe5, 0x5f, + 0x34, 0x3c, 0xe5, 0xcf, 0x66, 0x3c, 0xe5, 0xa7, 0x74, 0xdc, 0x87, 0xe3, 0x28, 0x2f, 0xd2, 0xaa, + 0xb1, 0x47, 0x4d, 0x0e, 0xe9, 0x24, 0x6f, 0xa4, 0x55, 0x53, 0x84, 0xb0, 0x49, 0xf7, 0xa7, 0xc9, + 0x39, 0xfe, 0xff, 0x58, 0x30, 0x51, 0x0b, 0x5d, 0xba, 0x40, 0x7f, 0x9a, 0x56, 0xa3, 0x9e, 0x8c, + 0x6d, 0xe8, 0x80, 0x64, 0x6c, 0xbf, 0x6a, 0xc1, 0x70, 0x2d, 0x74, 0x8f, 0xc1, 0xc0, 0xba, 0x6a, + 0x1a, 0x58, 0x9f, 0xc8, 0xe5, 0xbc, 0x3d, 0x6c, 0xaa, 0xdf, 0x29, 0xc3, 0x38, 0xed, 0x71, 0xd8, + 0x94, 0xdf, 0xcb, 0x98, 0x1b, 0xab, 0xc0, 0xdc, 0x50, 0x91, 0x30, 0xf4, 0xfd, 0xf0, 0x7e, 0xf6, + 0xdb, 0xad, 0xb2, 0x52, 0x2c, 0xa0, 0xe8, 0x3c, 0x8c, 0xb4, 0x22, 0xb2, 0xed, 0x85, 0xed, 0x38, + 0x1b, 0xc5, 0x58, 0x13, 0xe5, 0x58, 0x61, 0xa0, 0x17, 0x61, 0x2c, 0xf6, 0x82, 0x06, 0x91, 0xce, + 0x1c, 0x03, 0xcc, 0x99, 0x83, 0xe7, 0xbd, 0xd4, 0xca, 0xb1, 0x81, 0x85, 0xee, 0x40, 0x85, 0xfd, + 0x67, 0x3b, 0xa8, 0xff, 0x37, 0x1f, 0x78, 0x6e, 0x15, 0x49, 0x00, 0xa7, 0xb4, 0xd0, 0x45, 0x80, + 0x44, 0xba, 0x9d, 0xc4, 0x22, 0xb9, 0x8c, 0x92, 0x4b, 0x95, 0x43, 0x4a, 0x8c, 0x35, 0x2c, 0xf4, + 0x1c, 0x54, 0x12, 0xc7, 0xf3, 0xaf, 0x79, 0x01, 0x89, 0x85, 0xdb, 0x8e, 0xc8, 0x61, 0x2d, 0x0a, + 0x71, 0x0a, 0xa7, 0xe7, 0x3d, 0x8b, 0xa1, 0xe6, 0xef, 0xc9, 0x8c, 0x30, 0x6c, 0x76, 0xde, 0x5f, + 0x53, 0xa5, 0x58, 0xc3, 0xb0, 0x2f, 0xc1, 0xa9, 0x5a, 0xe8, 0xd6, 0xc2, 0x28, 0x59, 0x0d, 0xa3, + 0xfb, 0x4e, 0xe4, 0xca, 0xef, 0x37, 0x27, 0x53, 0x27, 0xd3, 0x33, 0x79, 0x90, 0xdb, 0x1c, 0x8d, + 0x54, 0xc8, 0x2f, 0xb0, 0x13, 0xbf, 0xcf, 0x10, 0x8c, 0xdf, 0x2f, 0x03, 0xaa, 0x31, 0xc7, 0x18, + 0xe3, 0xf9, 0xa1, 0x4d, 0x98, 0x88, 0xc9, 0x35, 0x2f, 0x68, 0x3f, 0x10, 0xa4, 0x8a, 0xc5, 0xbc, + 0xd4, 0x57, 0xf4, 0x3a, 0xdc, 0xd2, 0x61, 0x96, 0xe1, 0x0c, 0x5d, 0xfa, 0x65, 0xa3, 0x76, 0xb0, + 0x18, 0xdf, 0x8a, 0x49, 0x24, 0x9e, 0xdb, 0xf9, 0x28, 0xbb, 0x08, 0x94, 0x85, 0xfb, 0xbb, 0x73, + 0xe7, 0x72, 0xdc, 0x1b, 0x02, 0xef, 0x01, 0xc5, 0x5c, 0xab, 0xe2, 0x94, 0x16, 0x5d, 0x68, 0xec, + 0xcf, 0x8d, 0x30, 0xc0, 0x61, 0x98, 0xc8, 0xa5, 0xc9, 0x9e, 0x6a, 0xd0, 0xca, 0xb1, 0x81, 0x85, + 0x62, 0x40, 0x71, 0xbb, 0xd5, 0xf2, 0xd9, 0xbd, 0xa4, 0xe3, 0x5f, 0x8e, 0xc2, 0x76, 0x8b, 0xfb, + 0x52, 0x97, 0x97, 0x96, 0x29, 0x0f, 0xae, 0x77, 0x40, 0xf7, 0x77, 0xe7, 0x9e, 0xc9, 0xef, 0x20, + 0xc3, 0x5d, 0xab, 0xe2, 0x2e, 0xe4, 0x11, 0x86, 0xe1, 0x8d, 0x98, 0xfd, 0x16, 0x91, 0xda, 0x97, + 0x98, 0x21, 0xb4, 0xce, 0x8a, 0xfa, 0x23, 0x2f, 0x09, 0xd9, 0x9f, 0x67, 0xc7, 0x2c, 0x7b, 0x8d, + 0x25, 0x69, 0x47, 0x04, 0x6d, 0xc1, 0x78, 0x8b, 0x1d, 0xa5, 0x49, 0x14, 0xfa, 0x3e, 0x91, 0x52, + 0xee, 0xe1, 0x1c, 0x84, 0xf8, 0xfb, 0x0b, 0x3a, 0x39, 0x6c, 0x52, 0xb7, 0xff, 0xfb, 0x04, 0xe3, + 0x98, 0xe2, 0xd2, 0x79, 0x58, 0xb8, 0x02, 0x0b, 0x79, 0xf2, 0x43, 0x45, 0xde, 0x55, 0x4b, 0x4f, + 0x23, 0xe1, 0x58, 0x8c, 0x25, 0x15, 0xf4, 0x69, 0xe6, 0xe8, 0xce, 0xd9, 0x54, 0xf1, 0xd7, 0x22, + 0x39, 0xbe, 0xe1, 0xe4, 0x2e, 0x48, 0x60, 0x8d, 0x1c, 0xba, 0x06, 0xe3, 0xe2, 0xf1, 0x0e, 0x61, + 0x2c, 0x29, 0x1b, 0x8a, 0xfe, 0x38, 0xd6, 0x81, 0xfb, 0xd9, 0x02, 0x6c, 0x56, 0x46, 0x4d, 0x78, + 0x5c, 0x7b, 0x9c, 0xaa, 0x8b, 0x33, 0x1b, 0xe7, 0x7f, 0x4f, 0xec, 0xed, 0xce, 0x3d, 0xbe, 0x7e, + 0x10, 0x22, 0x3e, 0x98, 0x0e, 0xba, 0x09, 0xa7, 0x9c, 0x46, 0xe2, 0x6d, 0x93, 0x2a, 0x71, 0x5c, + 0xdf, 0x0b, 0x88, 0x19, 0xfb, 0xff, 0xe8, 0xde, 0xee, 0xdc, 0xa9, 0xc5, 0x6e, 0x08, 0xb8, 0x7b, + 0x3d, 0xf4, 0x71, 0xa8, 0xb8, 0x41, 0x2c, 0xe6, 0x60, 0xc8, 0x78, 0x8b, 0xad, 0x52, 0xbd, 0x51, + 0x57, 0xe3, 0x4f, 0xff, 0xe0, 0xb4, 0x02, 0x7a, 0x17, 0xc6, 0xf4, 0xe0, 0x22, 0xf1, 0x06, 0xe0, + 0xcb, 0x85, 0xb4, 0x78, 0x23, 0x22, 0x87, 0xdb, 0x11, 0x95, 0xd3, 0xa8, 0x11, 0xac, 0x63, 0x34, + 0x81, 0x3e, 0x09, 0x28, 0x26, 0xd1, 0xb6, 0xd7, 0x20, 0x8b, 0x0d, 0x96, 0xb2, 0x96, 0x59, 0x9a, + 0x46, 0x8c, 0xe8, 0x09, 0x54, 0xef, 0xc0, 0xc0, 0x5d, 0x6a, 0xa1, 0x2b, 0x94, 0xff, 0xe9, 0xa5, + 0xc2, 0xc7, 0x57, 0x8a, 0xa7, 0x33, 0x55, 0xd2, 0x8a, 0x48, 0xc3, 0x49, 0x88, 0x6b, 0x52, 0xc4, + 0x99, 0x7a, 0xf4, 0x74, 0x54, 0xaf, 0x12, 0x80, 0xe9, 0x99, 0xda, 0xf9, 0x32, 0x01, 0xd5, 0xf6, + 0x36, 0xc3, 0x38, 0xb9, 0x41, 0x92, 0xfb, 0x61, 0x74, 0x4f, 0xa4, 0xf9, 0x4a, 0xf3, 0xff, 0xa5, + 0x20, 0xac, 0xe3, 0x51, 0x49, 0x8e, 0x5d, 0xe1, 0xad, 0x55, 0xd9, 0xfd, 0xc8, 0x48, 0xba, 0x77, + 0xae, 0xf0, 0x62, 0x2c, 0xe1, 0x12, 0x75, 0xad, 0xb6, 0xcc, 0xee, 0x3a, 0x32, 0xa8, 0x6b, 0xb5, + 0x65, 0x2c, 0xe1, 0x28, 0xec, 0x7c, 0xf1, 0x6e, 0xa2, 0xc8, 0xbd, 0x53, 0xe7, 0x79, 0x52, 0xf0, + 0xd1, 0xbb, 0x07, 0x30, 0xa5, 0x5e, 0xdd, 0xe3, 0x99, 0xd0, 0xe2, 0x99, 0x49, 0xb6, 0x70, 0x0e, + 0x93, 0x50, 0x4d, 0x59, 0x17, 0xd7, 0x32, 0x34, 0x71, 0x47, 0x2b, 0x46, 0x0e, 0x8b, 0xa9, 0xdc, + 0x97, 0x26, 0x16, 0xa0, 0x12, 0xb7, 0xef, 0xba, 0xe1, 0x96, 0xe3, 0x05, 0xec, 0x42, 0x42, 0x7f, + 0xb7, 0x5f, 0x02, 0x70, 0x8a, 0x83, 0x6a, 0x30, 0xe2, 0x08, 0x45, 0x52, 0x5c, 0x1c, 0xe4, 0xc4, + 0xb8, 0x4b, 0xb5, 0x93, 0xdb, 0x78, 0xe5, 0x3f, 0xac, 0xa8, 0xa0, 0x57, 0x60, 0x5c, 0x84, 0x68, + 0x09, 0x57, 0xca, 0x93, 0xa6, 0x3b, 0x7f, 0x5d, 0x07, 0x62, 0x13, 0x17, 0x35, 0x61, 0x82, 0x52, + 0x49, 0x19, 0xe0, 0xcc, 0x74, 0x7f, 0x3c, 0x54, 0xcb, 0xe9, 0xad, 0x93, 0xc1, 0x19, 0xb2, 0xc8, + 0x85, 0xc7, 0x9c, 0x76, 0x12, 0x6e, 0xd1, 0x9d, 0x60, 0xee, 0x93, 0xf5, 0xf0, 0x1e, 0x09, 0x66, + 0x4e, 0xb1, 0x15, 0x78, 0x76, 0x6f, 0x77, 0xee, 0xb1, 0xc5, 0x03, 0xf0, 0xf0, 0x81, 0x54, 0xd0, + 0x5b, 0x30, 0x9a, 0x84, 0xbe, 0xf0, 0x90, 0x8e, 0x67, 0x4e, 0x17, 0xc9, 0xac, 0xb3, 0xae, 0x2a, + 0xe8, 0xc6, 0x14, 0x45, 0x04, 0xeb, 0x14, 0xd1, 0xdb, 0x30, 0x46, 0xbf, 0xfd, 0x75, 0xa7, 0xd5, + 0xf2, 0x82, 0x66, 0x3c, 0xf3, 0x48, 0x91, 0xd9, 0x52, 0x79, 0x23, 0xcd, 0xfd, 0xcb, 0x8a, 0x48, + 0x8c, 0x0d, 0x8a, 0xb3, 0x3f, 0x0b, 0x27, 0x3a, 0x98, 0x5e, 0x5f, 0x6e, 0xaa, 0xff, 0x71, 0x10, + 0x2a, 0xca, 0x72, 0x89, 0x16, 0x4c, 0x23, 0xf5, 0xa3, 0x59, 0x23, 0xf5, 0x08, 0x15, 0x14, 0x75, + 0xbb, 0xf4, 0x67, 0xba, 0xbc, 0xe4, 0xfe, 0x6c, 0xee, 0x2e, 0x2f, 0x1e, 0x39, 0xd6, 0xc7, 0x7b, + 0xf7, 0xa9, 0xf6, 0x3a, 0x70, 0xa0, 0xf6, 0x5a, 0xf0, 0x75, 0x42, 0xaa, 0xa7, 0xb6, 0x42, 0x77, + 0xad, 0x96, 0x7d, 0x7c, 0xab, 0x46, 0x0b, 0x31, 0x87, 0x31, 0xfd, 0x82, 0x9e, 0xda, 0x4c, 0xbf, + 0x18, 0x3e, 0xa4, 0x7e, 0x21, 0x09, 0xe0, 0x94, 0x16, 0xda, 0x86, 0x13, 0x0d, 0xf3, 0x2d, 0x35, + 0x15, 0x0f, 0xf6, 0x7c, 0x1f, 0x6f, 0x99, 0xb5, 0xb5, 0x87, 0x56, 0x96, 0xb3, 0xf4, 0x70, 0x67, + 0x13, 0xe8, 0x15, 0x18, 0x79, 0x37, 0x8c, 0xd9, 0xf5, 0x89, 0x38, 0xba, 0x64, 0xdc, 0xcd, 0xc8, + 0x6b, 0x37, 0xeb, 0xac, 0x7c, 0x7f, 0x77, 0x6e, 0xb4, 0x16, 0xba, 0xf2, 0x2f, 0x56, 0x15, 0xd0, + 0x17, 0x2c, 0x38, 0x65, 0xec, 0x64, 0xd5, 0x73, 0x38, 0x4c, 0xcf, 0x1f, 0x17, 0x2d, 0x9f, 0x5a, + 0xeb, 0x46, 0x13, 0x77, 0x6f, 0xca, 0xfe, 0xb7, 0xdc, 0x54, 0x2b, 0x8c, 0x37, 0x24, 0x6e, 0xfb, + 0xc7, 0xf1, 0xe8, 0xc1, 0x4d, 0xc3, 0xae, 0xf4, 0x10, 0x2e, 0x0b, 0xfe, 0xbd, 0xc5, 0x2e, 0x0b, + 0xd6, 0xc9, 0x56, 0xcb, 0x77, 0x92, 0xe3, 0xf0, 0x62, 0xfe, 0x34, 0x8c, 0x24, 0xa2, 0xb5, 0x62, + 0x2f, 0x36, 0x68, 0xdd, 0x63, 0x97, 0x28, 0xea, 0xe8, 0x93, 0xa5, 0x58, 0x11, 0xb4, 0xff, 0x25, + 0xff, 0x2a, 0x12, 0x72, 0x0c, 0x16, 0x91, 0x1b, 0xa6, 0x45, 0xe4, 0x99, 0xc2, 0x63, 0xe9, 0x61, + 0x19, 0xf9, 0xbe, 0x39, 0x02, 0xa6, 0xa1, 0xfc, 0xe4, 0xdc, 0x66, 0xd9, 0xbf, 0x64, 0xc1, 0x74, + 0x37, 0xb7, 0x02, 0x2a, 0xc2, 0x70, 0xfd, 0x48, 0xdd, 0xf3, 0xa9, 0x59, 0xbd, 0x2d, 0xca, 0xb1, + 0xc2, 0x28, 0x9c, 0x42, 0xbd, 0xbf, 0x14, 0x55, 0x37, 0xc1, 0x7c, 0x95, 0x0f, 0xbd, 0xca, 0x83, + 0x16, 0x2c, 0xf5, 0x6c, 0x5e, 0x7f, 0x01, 0x0b, 0xf6, 0xb7, 0x4b, 0x30, 0xcd, 0x8d, 0xed, 0x8b, + 0xdb, 0xa1, 0xe7, 0xd6, 0x42, 0x57, 0x84, 0x70, 0xb8, 0x30, 0xd6, 0xd2, 0xd4, 0xdb, 0x62, 0x29, + 0x6f, 0x74, 0x85, 0x38, 0x55, 0x29, 0xf4, 0x52, 0x6c, 0x50, 0xa5, 0xad, 0x90, 0x6d, 0xaf, 0xa1, + 0x6c, 0xb7, 0xa5, 0xbe, 0x4f, 0x06, 0xd5, 0xca, 0x8a, 0x46, 0x07, 0x1b, 0x54, 0x8f, 0xe0, 0xe5, + 0x13, 0xfb, 0xef, 0x59, 0xf0, 0x48, 0x8f, 0xb4, 0x38, 0xb4, 0xb9, 0xfb, 0xec, 0x82, 0x43, 0x3c, + 0xfb, 0xa8, 0x9a, 0xe3, 0xd7, 0x1e, 0x58, 0x40, 0xd1, 0x5d, 0x00, 0x7e, 0x6d, 0x41, 0xa5, 0xe9, + 0xec, 0x9d, 0x7a, 0xc1, 0xe4, 0x13, 0x5a, 0x5e, 0x02, 0xf5, 0xec, 0xbf, 0x46, 0xd5, 0xfe, 0x66, + 0x19, 0x06, 0xf9, 0xeb, 0xe2, 0x35, 0x18, 0xde, 0xe4, 0x69, 0x7a, 0xfb, 0xcb, 0x12, 0x9c, 0xaa, + 0x2f, 0xbc, 0x00, 0x4b, 0x32, 0xe8, 0x3a, 0x9c, 0xa4, 0x27, 0x8b, 0xe7, 0xf8, 0x55, 0xe2, 0x3b, + 0x3b, 0x52, 0x1f, 0xe6, 0xcf, 0x61, 0xc8, 0xbc, 0xed, 0x27, 0xd7, 0x3a, 0x51, 0x70, 0xb7, 0x7a, + 0xe8, 0xd5, 0x8e, 0xac, 0x7a, 0x3c, 0xfd, 0xb1, 0x92, 0x85, 0x0f, 0xce, 0xac, 0x47, 0x25, 0xf6, + 0x56, 0x87, 0xe6, 0xaf, 0x3d, 0xe2, 0x6c, 0x6a, 0xfb, 0x26, 0x2e, 0xf3, 0xa1, 0x68, 0x33, 0xdf, + 0x91, 0xf5, 0xcd, 0x88, 0xc4, 0x9b, 0xa1, 0xef, 0x8a, 0xf7, 0x47, 0x53, 0x1f, 0x8a, 0x0c, 0x1c, + 0x77, 0xd4, 0xa0, 0x54, 0x36, 0x1c, 0xcf, 0x6f, 0x47, 0x24, 0xa5, 0x32, 0x64, 0x52, 0x59, 0xcd, + 0xc0, 0x71, 0x47, 0x0d, 0xba, 0xb6, 0x4e, 0x89, 0x27, 0x2b, 0x65, 0x10, 0xb8, 0x60, 0x41, 0x9f, + 0x82, 0x61, 0x19, 0x0a, 0x50, 0x28, 0x57, 0x89, 0x70, 0x90, 0x50, 0xcf, 0x5f, 0x6a, 0xcf, 0xa3, + 0x89, 0x20, 0x00, 0x49, 0xef, 0x30, 0x4f, 0x23, 0xfe, 0x89, 0x05, 0x27, 0xbb, 0xb8, 0xb4, 0x71, + 0x96, 0xd6, 0xf4, 0xe2, 0x44, 0x3d, 0xce, 0xa0, 0xb1, 0x34, 0x5e, 0x8e, 0x15, 0x06, 0xdd, 0x2d, + 0x9c, 0x69, 0x66, 0x19, 0xa5, 0x70, 0x75, 0x11, 0xd0, 0xfe, 0x18, 0x25, 0x3a, 0x0b, 0x03, 0xed, + 0x98, 0x44, 0xf2, 0x9d, 0x42, 0xc9, 0xe7, 0x6f, 0xc5, 0x24, 0xc2, 0x0c, 0x42, 0xc5, 0xd6, 0xa6, + 0xb2, 0x08, 0x6a, 0x62, 0x2b, 0xb3, 0xee, 0x61, 0x0e, 0xb3, 0xbf, 0x56, 0x86, 0xc9, 0x8c, 0x6b, + 0x2b, 0xed, 0xc8, 0x56, 0x18, 0x78, 0x49, 0xa8, 0xf2, 0xc7, 0xf1, 0xa7, 0xd1, 0x48, 0x6b, 0xf3, + 0xba, 0x28, 0xc7, 0x0a, 0x03, 0x3d, 0x2d, 0x9f, 0xa6, 0xcd, 0x3e, 0x3a, 0xb1, 0x54, 0x35, 0x5e, + 0xa7, 0x2d, 0xfa, 0x60, 0xcc, 0x93, 0x30, 0xd0, 0x0a, 0xd5, 0x4b, 0xe3, 0xea, 0x7b, 0xe2, 0xa5, + 0x6a, 0x2d, 0x0c, 0x7d, 0xcc, 0x80, 0xe8, 0x29, 0x31, 0xfa, 0xcc, 0x0d, 0x0d, 0x76, 0xdc, 0x30, + 0xd6, 0xa6, 0xe0, 0x19, 0x18, 0xbe, 0x47, 0x76, 0x22, 0x2f, 0x68, 0x66, 0xef, 0xa7, 0xae, 0xf2, + 0x62, 0x2c, 0xe1, 0x66, 0x0e, 0xf6, 0xe1, 0x23, 0x7e, 0x14, 0x66, 0x24, 0xf7, 0x1c, 0xfc, 0x8e, + 0x05, 0x93, 0x2c, 0xa9, 0xaa, 0x48, 0x41, 0xe0, 0x85, 0xc1, 0x31, 0xc8, 0x18, 0x4f, 0xc2, 0x60, + 0x44, 0x1b, 0xcd, 0xbe, 0xea, 0xc0, 0x7a, 0x82, 0x39, 0x0c, 0x3d, 0x06, 0x03, 0xac, 0x0b, 0xf4, + 0x33, 0x8e, 0xf1, 0xdc, 0xed, 0x55, 0x27, 0x71, 0x30, 0x2b, 0x65, 0xd1, 0x64, 0x98, 0xb4, 0x7c, + 0x8f, 0x77, 0x3a, 0x35, 0xe8, 0xbe, 0xdf, 0xa2, 0xc9, 0xba, 0x76, 0xf2, 0x61, 0x45, 0x93, 0x75, + 0x27, 0x7e, 0xb0, 0x9c, 0xff, 0x3f, 0x4a, 0x70, 0xa6, 0x6b, 0xbd, 0xf4, 0xa6, 0x7b, 0xd5, 0xb8, + 0xe9, 0xbe, 0x98, 0xb9, 0xe9, 0xb6, 0x0f, 0xae, 0xfd, 0x70, 0xee, 0xbe, 0xbb, 0x5f, 0x49, 0x97, + 0x8f, 0xf1, 0x4a, 0x7a, 0xa0, 0xa8, 0x88, 0x33, 0x98, 0x23, 0xe2, 0xfc, 0x9e, 0x05, 0x8f, 0x76, + 0x9d, 0xb2, 0xf7, 0x5d, 0xf8, 0x5e, 0xd7, 0x5e, 0xf6, 0xd0, 0x4e, 0x7e, 0xb1, 0xdc, 0x63, 0x54, + 0x4c, 0x4f, 0x39, 0x47, 0xb9, 0x10, 0x03, 0xc6, 0x42, 0x78, 0x1b, 0xe3, 0x1c, 0x88, 0x97, 0x61, + 0x05, 0x45, 0xb1, 0x16, 0xfe, 0xc6, 0x3b, 0xb9, 0x72, 0xc8, 0x0d, 0x35, 0x6f, 0x5a, 0xe2, 0xf5, + 0xbc, 0x0a, 0xd9, 0xa0, 0xb8, 0x3b, 0x9a, 0xe6, 0x59, 0x3e, 0x8c, 0xe6, 0x39, 0xd6, 0x5d, 0xeb, + 0x44, 0x8b, 0x30, 0xb9, 0xe5, 0x05, 0xec, 0x2d, 0x59, 0x53, 0x7a, 0x52, 0x31, 0xc8, 0xd7, 0x4d, + 0x30, 0xce, 0xe2, 0xcf, 0xbe, 0x02, 0xe3, 0x87, 0xb7, 0xae, 0xfd, 0xa8, 0x0c, 0x1f, 0x3c, 0x80, + 0x29, 0xf0, 0xd3, 0xc1, 0xf8, 0x2e, 0xda, 0xe9, 0xd0, 0xf1, 0x6d, 0x6a, 0x30, 0xbd, 0xd1, 0xf6, + 0xfd, 0x1d, 0xe6, 0x27, 0x46, 0x5c, 0x89, 0x21, 0x84, 0x1a, 0xf5, 0x68, 0xfd, 0x6a, 0x17, 0x1c, + 0xdc, 0xb5, 0x26, 0xfa, 0x24, 0xa0, 0xf0, 0x2e, 0x4b, 0x3b, 0xec, 0xa6, 0x79, 0x23, 0xd8, 0x27, + 0x28, 0xa7, 0x5b, 0xf5, 0x66, 0x07, 0x06, 0xee, 0x52, 0x8b, 0xca, 0xa9, 0xec, 0xbd, 0x7b, 0xd5, + 0xad, 0x8c, 0x9c, 0x8a, 0x75, 0x20, 0x36, 0x71, 0xd1, 0x65, 0x38, 0xe1, 0x6c, 0x3b, 0x1e, 0x4f, + 0x23, 0x26, 0x09, 0x70, 0x41, 0x55, 0xd9, 0xaf, 0x16, 0xb3, 0x08, 0xb8, 0xb3, 0x0e, 0x6a, 0x19, + 0x06, 0x49, 0xfe, 0xe0, 0xc0, 0xc7, 0x0f, 0xb1, 0x82, 0x0b, 0x9b, 0x28, 0xed, 0xff, 0x62, 0xd1, + 0xa3, 0xaf, 0xcb, 0xb3, 0xa3, 0x74, 0x46, 0x94, 0x81, 0x4d, 0x0b, 0xe7, 0x53, 0x33, 0xb2, 0xac, + 0x03, 0xb1, 0x89, 0xcb, 0x97, 0x46, 0x9c, 0xba, 0xad, 0x1b, 0xd2, 0xa6, 0x88, 0x84, 0x55, 0x18, + 0x54, 0x82, 0x76, 0xbd, 0x6d, 0x2f, 0x0e, 0x23, 0xb1, 0x81, 0xfa, 0x74, 0x62, 0x4e, 0xf9, 0x65, + 0x95, 0x93, 0xc1, 0x92, 0x9e, 0xfd, 0xf5, 0x12, 0x8c, 0xcb, 0x16, 0x5f, 0x6b, 0x87, 0x89, 0x73, + 0x0c, 0x47, 0xfa, 0x6b, 0xc6, 0x91, 0xbe, 0x50, 0x2c, 0x30, 0x98, 0x75, 0xae, 0xe7, 0x51, 0xfe, + 0xa9, 0xcc, 0x51, 0x7e, 0xa1, 0x1f, 0xa2, 0x07, 0x1f, 0xe1, 0xff, 0xc6, 0x82, 0x13, 0x06, 0xfe, + 0x31, 0x9c, 0x24, 0x35, 0xf3, 0x24, 0x79, 0xae, 0x8f, 0xd1, 0xf4, 0x38, 0x41, 0xbe, 0x55, 0xca, + 0x8c, 0x82, 0x9d, 0x1c, 0x9f, 0x83, 0x81, 0x4d, 0x27, 0x72, 0x8b, 0xe5, 0xd4, 0xec, 0xa8, 0x3e, + 0x7f, 0xc5, 0x89, 0x5c, 0xce, 0xff, 0xcf, 0xab, 0x47, 0xd1, 0x9c, 0xc8, 0xcd, 0x8d, 0xe6, 0x60, + 0x8d, 0xa2, 0x4b, 0x30, 0x14, 0x37, 0xc2, 0x96, 0xf2, 0x77, 0x3d, 0xcb, 0x1f, 0x4c, 0xa3, 0x25, + 0xfb, 0xbb, 0x73, 0xc8, 0x6c, 0x8e, 0x16, 0x63, 0x81, 0x3f, 0xdb, 0x84, 0x8a, 0x6a, 0xfa, 0x48, + 0x3d, 0xfe, 0xff, 0x6b, 0x19, 0x4e, 0x76, 0x59, 0x2b, 0xe8, 0xf3, 0xc6, 0xbc, 0xbd, 0xd2, 0xf7, + 0x62, 0x7b, 0x8f, 0x33, 0xf7, 0x79, 0xa6, 0x29, 0xb9, 0x62, 0x75, 0x1c, 0xa2, 0xf9, 0x5b, 0x31, + 0xc9, 0x36, 0x4f, 0x8b, 0xf2, 0x9b, 0xa7, 0xcd, 0x1e, 0xdb, 0xf4, 0xd3, 0x86, 0x54, 0x4f, 0x8f, + 0xf4, 0x3b, 0xff, 0x95, 0x01, 0x98, 0xee, 0x96, 0x81, 0x00, 0x7d, 0xc9, 0xca, 0x3c, 0x9c, 0xf1, + 0x6a, 0xff, 0x69, 0x0c, 0xf8, 0x6b, 0x1a, 0x22, 0x6b, 0xcf, 0xbc, 0xf9, 0x94, 0x46, 0xee, 0x8c, + 0x8b, 0xd6, 0x59, 0x1c, 0x56, 0xc4, 0x1f, 0x41, 0x91, 0x5c, 0xe1, 0x13, 0x87, 0xe8, 0x8a, 0x78, + 0x47, 0x25, 0xce, 0xc4, 0x61, 0xc9, 0xe2, 0xfc, 0x38, 0x2c, 0xd9, 0x87, 0x59, 0x0f, 0x46, 0xb5, + 0x71, 0x1d, 0xe9, 0x32, 0xb8, 0x47, 0x8f, 0x28, 0xad, 0xdf, 0x47, 0xba, 0x14, 0xfe, 0xb6, 0x05, + 0x19, 0xe7, 0x34, 0x65, 0x96, 0xb1, 0x7a, 0x9a, 0x65, 0xce, 0xc2, 0x40, 0x14, 0xfa, 0x24, 0xfb, + 0xa8, 0x03, 0x0e, 0x7d, 0x82, 0x19, 0x44, 0xbd, 0x93, 0x5c, 0xee, 0xf5, 0x4e, 0x32, 0xd5, 0xd3, + 0x7d, 0xb2, 0x4d, 0xa4, 0x91, 0x44, 0xb1, 0xf1, 0x6b, 0xb4, 0x10, 0x73, 0x98, 0xfd, 0xeb, 0x03, + 0x70, 0xb2, 0x4b, 0x54, 0x1f, 0xd5, 0x90, 0x9a, 0x4e, 0x42, 0xee, 0x3b, 0x3b, 0xd9, 0xe4, 0xb2, + 0x97, 0x79, 0x31, 0x96, 0x70, 0xe6, 0x54, 0xcb, 0x13, 0xd4, 0x65, 0x4c, 0x57, 0x22, 0x2f, 0x9d, + 0x80, 0x1e, 0xfd, 0x8b, 0xba, 0x17, 0x01, 0xe2, 0xd8, 0x5f, 0x09, 0xa8, 0x84, 0xe7, 0x0a, 0xe7, + 0xdd, 0x34, 0xaf, 0x61, 0xfd, 0x9a, 0x80, 0x60, 0x0d, 0x0b, 0x55, 0x61, 0xaa, 0x15, 0x85, 0x09, + 0x37, 0x0c, 0x56, 0xb9, 0xab, 0xc5, 0xa0, 0x19, 0x35, 0x56, 0xcb, 0xc0, 0x71, 0x47, 0x0d, 0xf4, + 0x12, 0x8c, 0x8a, 0x48, 0xb2, 0x5a, 0x18, 0xfa, 0xc2, 0x8c, 0xa4, 0xee, 0xe3, 0xeb, 0x29, 0x08, + 0xeb, 0x78, 0x5a, 0x35, 0x66, 0x6d, 0x1c, 0xee, 0x5a, 0x8d, 0x5b, 0x1c, 0x35, 0xbc, 0x4c, 0x9e, + 0x92, 0x91, 0x42, 0x79, 0x4a, 0x52, 0xc3, 0x5a, 0xa5, 0xf0, 0x45, 0x0c, 0xe4, 0x1a, 0xa0, 0x7e, + 0xa7, 0x0c, 0x43, 0xfc, 0x53, 0x1c, 0x83, 0x94, 0x57, 0x13, 0x26, 0xa5, 0x42, 0x39, 0x21, 0x78, + 0xaf, 0xe6, 0xab, 0x4e, 0xe2, 0x70, 0xd6, 0xa4, 0x76, 0x48, 0x6a, 0x86, 0x42, 0xf3, 0xc6, 0x1e, + 0x9a, 0xcd, 0x58, 0x4a, 0x80, 0xd3, 0xd0, 0x76, 0xd4, 0x26, 0x40, 0xcc, 0x5e, 0x75, 0xa5, 0x34, + 0x44, 0xe6, 0xdb, 0x17, 0x0b, 0xf5, 0xa3, 0xae, 0xaa, 0xf1, 0xde, 0xa4, 0xcb, 0x52, 0x01, 0xb0, + 0x46, 0x7b, 0xf6, 0x65, 0xa8, 0x28, 0xe4, 0x3c, 0x15, 0x72, 0x4c, 0x67, 0x6d, 0x7f, 0x01, 0x26, + 0x33, 0x6d, 0xf5, 0xa5, 0x81, 0xfe, 0xa6, 0x05, 0x93, 0xbc, 0xcb, 0x2b, 0xc1, 0xb6, 0x60, 0x05, + 0x5f, 0xb4, 0x60, 0xda, 0xef, 0xb2, 0x13, 0xc5, 0x67, 0x3e, 0xcc, 0x1e, 0x56, 0xca, 0x67, 0x37, + 0x28, 0xee, 0xda, 0x1a, 0x3a, 0x07, 0x23, 0xfc, 0x91, 0x6a, 0xc7, 0x17, 0x9e, 0xe2, 0x63, 0x3c, + 0xe7, 0x37, 0x2f, 0xc3, 0x0a, 0x6a, 0xff, 0xd8, 0x82, 0x13, 0x7c, 0x10, 0x57, 0xc9, 0x8e, 0x52, + 0xaf, 0xde, 0x27, 0xc3, 0x10, 0xd9, 0xcd, 0x4b, 0x3d, 0xb2, 0x9b, 0xeb, 0xa3, 0x2c, 0x1f, 0x38, + 0xca, 0x6f, 0x5b, 0x20, 0x56, 0xe8, 0x31, 0xe8, 0x0f, 0x6b, 0xa6, 0xfe, 0xf0, 0xa1, 0x22, 0x8b, + 0xbe, 0x87, 0xe2, 0xf0, 0x0b, 0x25, 0x98, 0xe2, 0x08, 0xe9, 0x8d, 0xcc, 0xfb, 0xe5, 0xe3, 0xf4, + 0xf7, 0xea, 0x8e, 0x7a, 0xea, 0xb4, 0xfb, 0x48, 0x8d, 0x6f, 0x39, 0x70, 0xe0, 0xb7, 0xfc, 0x33, + 0x0b, 0x10, 0x9f, 0x93, 0xec, 0x0b, 0xdf, 0xfc, 0x74, 0xd3, 0xcc, 0x01, 0x29, 0xe7, 0x50, 0x10, + 0xac, 0x61, 0x3d, 0xe4, 0x21, 0x64, 0xee, 0xc3, 0xca, 0xf9, 0xf7, 0x61, 0x7d, 0x8c, 0xfa, 0x7f, + 0x96, 0x21, 0xeb, 0xac, 0x89, 0xde, 0x86, 0xb1, 0x86, 0xd3, 0x72, 0xee, 0x7a, 0xbe, 0x97, 0x78, + 0x24, 0x2e, 0x76, 0xe1, 0xbe, 0xac, 0xd5, 0x10, 0xd7, 0x50, 0x5a, 0x09, 0x36, 0x28, 0xa2, 0x79, + 0x80, 0x56, 0xe4, 0x6d, 0x7b, 0x3e, 0x69, 0x32, 0x8d, 0x87, 0xc5, 0x9c, 0xf0, 0xbb, 0x63, 0x59, + 0x8a, 0x35, 0x8c, 0x2e, 0x31, 0x0a, 0xe5, 0xe3, 0x88, 0x51, 0x18, 0x38, 0xc2, 0x18, 0x85, 0xc1, + 0x42, 0x31, 0x0a, 0x18, 0x4e, 0xcb, 0x83, 0x9e, 0xfe, 0x5f, 0xf5, 0x7c, 0x22, 0xe4, 0x3c, 0x1e, + 0xbf, 0x32, 0xbb, 0xb7, 0x3b, 0x77, 0x1a, 0x77, 0xc5, 0xc0, 0x3d, 0x6a, 0xda, 0x6d, 0x38, 0x59, + 0x27, 0x91, 0xc7, 0xf2, 0x74, 0xba, 0xe9, 0xbe, 0xfb, 0x0c, 0x54, 0xa2, 0xcc, 0x96, 0xef, 0x33, + 0x49, 0x81, 0x96, 0xd9, 0x4d, 0x6e, 0xf1, 0x94, 0xa4, 0xfd, 0xd7, 0x4a, 0x30, 0x2c, 0x5c, 0x3a, + 0x8f, 0x41, 0x50, 0xb9, 0x6a, 0x98, 0xa3, 0x9e, 0xc9, 0xe3, 0x95, 0xac, 0x5b, 0x3d, 0x0d, 0x51, + 0xf5, 0x8c, 0x21, 0xea, 0xb9, 0x62, 0xe4, 0x0e, 0x36, 0x41, 0xfd, 0xe3, 0x32, 0x4c, 0x98, 0x2e, + 0xae, 0xc7, 0x30, 0x2d, 0xaf, 0xc3, 0x70, 0x2c, 0xbc, 0xad, 0x4b, 0x45, 0xfc, 0xfb, 0xb2, 0x9f, + 0x38, 0xbd, 0xb5, 0x17, 0xfe, 0xd5, 0x92, 0x5c, 0x57, 0x87, 0xee, 0xf2, 0xb1, 0x38, 0x74, 0xe7, + 0x79, 0x1e, 0x0f, 0x3c, 0x0c, 0xcf, 0x63, 0xfb, 0x07, 0xec, 0x78, 0xd0, 0xcb, 0x8f, 0xe1, 0xc8, + 0x7f, 0xcd, 0x3c, 0x48, 0xce, 0x17, 0x5a, 0x77, 0xa2, 0x7b, 0x3d, 0x8e, 0xfe, 0xef, 0x5a, 0x30, + 0x2a, 0x10, 0x8f, 0x61, 0x00, 0x9f, 0x34, 0x07, 0xf0, 0x54, 0xa1, 0x01, 0xf4, 0xe8, 0xf9, 0xd7, + 0x4b, 0xaa, 0xe7, 0xb5, 0x30, 0x4a, 0x0a, 0x65, 0x25, 0x1f, 0xa1, 0x6a, 0x62, 0xd8, 0x08, 0x7d, + 0x21, 0xec, 0x3d, 0x96, 0x86, 0x2b, 0xf2, 0xf2, 0x7d, 0xed, 0x37, 0x56, 0xd8, 0x2c, 0x9a, 0x2e, + 0x8c, 0x12, 0x71, 0xd8, 0xa6, 0xd1, 0x74, 0x61, 0x94, 0x60, 0x06, 0x41, 0x2e, 0x40, 0xfa, 0xbc, + 0xbe, 0x88, 0xf4, 0xed, 0xbd, 0x5b, 0xdb, 0x89, 0xe7, 0xcf, 0x7b, 0x41, 0x12, 0x27, 0xd1, 0xfc, + 0x5a, 0x90, 0xdc, 0x8c, 0xb8, 0x82, 0xa0, 0xc5, 0x1f, 0x2a, 0x5a, 0x58, 0xa3, 0x2b, 0x43, 0x4a, + 0x58, 0x1b, 0x83, 0xe6, 0x6d, 0xd3, 0x0d, 0x51, 0x8e, 0x15, 0x86, 0xfd, 0x32, 0xe3, 0xec, 0x6c, + 0x82, 0xfa, 0x0b, 0x0d, 0xfc, 0x57, 0x83, 0x6a, 0x6a, 0x99, 0x09, 0xf9, 0x86, 0x1e, 0x80, 0x58, + 0x94, 0x7d, 0xd2, 0x2e, 0xe8, 0x3e, 0xd7, 0x69, 0xbc, 0x22, 0x22, 0x1d, 0x57, 0x94, 0x2f, 0x17, + 0xe6, 0xc8, 0x7d, 0x5c, 0x4a, 0xb2, 0x44, 0x8c, 0x2c, 0xfb, 0xdc, 0x5a, 0x2d, 0x9b, 0x4b, 0x7e, + 0x59, 0x02, 0x70, 0x8a, 0x83, 0x16, 0x84, 0xf2, 0xc9, 0xad, 0x33, 0x1f, 0xcc, 0x28, 0x9f, 0x72, + 0x4a, 0x34, 0xed, 0xf3, 0x02, 0x8c, 0xaa, 0xe7, 0x79, 0x6a, 0xfc, 0x61, 0x94, 0x0a, 0x97, 0xc5, + 0x56, 0xd2, 0x62, 0xac, 0xe3, 0xa0, 0x75, 0x98, 0x8c, 0xf9, 0xdb, 0x41, 0x32, 0xb6, 0x43, 0x18, + 0x19, 0x9e, 0xcd, 0x3c, 0xe9, 0x2f, 0xc1, 0xfb, 0xac, 0x88, 0x6f, 0x65, 0x19, 0x0d, 0x92, 0x25, + 0x81, 0x5e, 0x85, 0x09, 0x5f, 0x7f, 0x18, 0xb5, 0x26, 0x6c, 0x10, 0xca, 0x45, 0xcd, 0x78, 0x36, + 0xb5, 0x86, 0x33, 0xd8, 0xe8, 0x75, 0x98, 0xd1, 0x4b, 0x44, 0x42, 0x24, 0x27, 0x68, 0x92, 0x58, + 0xbc, 0x33, 0xf2, 0xd8, 0xde, 0xee, 0xdc, 0xcc, 0xb5, 0x1e, 0x38, 0xb8, 0x67, 0x6d, 0x74, 0x09, + 0xc6, 0xe4, 0xf0, 0xb5, 0x48, 0xa8, 0xd4, 0x39, 0x52, 0x83, 0x61, 0x03, 0xf3, 0xbd, 0xdd, 0xdb, + 0x7e, 0x8e, 0x56, 0xd6, 0xce, 0x5d, 0xf4, 0x0e, 0x8c, 0xe9, 0x7d, 0xcc, 0x1e, 0xa8, 0xf9, 0x8f, + 0xcd, 0x8a, 0xf3, 0x5b, 0xf5, 0x5c, 0x87, 0x61, 0x83, 0xb6, 0x7d, 0x13, 0x86, 0xea, 0x3b, 0x71, + 0x23, 0xf1, 0x0b, 0x30, 0xa5, 0x27, 0x8d, 0x21, 0xa4, 0x1b, 0x86, 0x3d, 0x7c, 0x25, 0x46, 0x64, + 0x7f, 0xd9, 0x82, 0xc9, 0xf5, 0xe5, 0x5a, 0x3d, 0x6c, 0xdc, 0x23, 0xc9, 0x22, 0xd7, 0xcf, 0xb0, + 0xe0, 0x49, 0xd6, 0x21, 0x79, 0x4d, 0x37, 0x2e, 0x76, 0x16, 0x06, 0x36, 0xc3, 0x38, 0xc9, 0xda, + 0x38, 0xaf, 0x84, 0x71, 0x82, 0x19, 0xc4, 0xfe, 0x63, 0x0b, 0x06, 0xd9, 0xbb, 0x4e, 0x79, 0x6f, + 0x82, 0x15, 0x19, 0x17, 0x7a, 0x09, 0x86, 0xc8, 0xc6, 0x06, 0x69, 0x24, 0x62, 0x7b, 0xca, 0x78, + 0x81, 0xa1, 0x15, 0x56, 0x4a, 0x37, 0x1d, 0x6b, 0x8c, 0xff, 0xc5, 0x02, 0x19, 0x7d, 0x1a, 0x2a, + 0x89, 0xb7, 0x45, 0x16, 0x5d, 0x57, 0x18, 0x15, 0xfb, 0x73, 0x61, 0x51, 0x4c, 0x60, 0x5d, 0x12, + 0xc1, 0x29, 0x3d, 0xfb, 0xab, 0x25, 0x80, 0x34, 0x1e, 0x28, 0x6f, 0x98, 0x4b, 0x1d, 0x4f, 0x9f, + 0x3d, 0xdd, 0xe5, 0xe9, 0x33, 0x94, 0x12, 0xec, 0xf2, 0xf0, 0x99, 0x9a, 0xaa, 0x72, 0xa1, 0xa9, + 0x1a, 0xe8, 0x67, 0xaa, 0x96, 0xe1, 0x44, 0x1a, 0xcf, 0x64, 0x06, 0x86, 0xb2, 0x44, 0xa8, 0xeb, + 0x59, 0x20, 0xee, 0xc4, 0xb7, 0xbf, 0x6a, 0x81, 0x70, 0x7a, 0x2c, 0xb0, 0xa0, 0x5d, 0xf9, 0x4c, + 0x91, 0x91, 0xb1, 0xed, 0xd9, 0x22, 0xfe, 0xa0, 0x22, 0x4f, 0x9b, 0xda, 0x62, 0x46, 0x76, 0x36, + 0x83, 0xaa, 0xfd, 0x6b, 0x16, 0x8c, 0x72, 0xf0, 0x75, 0x26, 0x2b, 0xe7, 0xf7, 0xab, 0xaf, 0x2c, + 0xbb, 0xec, 0x05, 0x1f, 0x4a, 0x58, 0x65, 0x5b, 0xd5, 0x5f, 0xf0, 0x91, 0x00, 0x9c, 0xe2, 0xa0, + 0x67, 0x60, 0x38, 0x6e, 0xdf, 0x65, 0xe8, 0x19, 0x0f, 0xc8, 0x3a, 0x2f, 0xc6, 0x12, 0x6e, 0xff, + 0xd3, 0x12, 0x4c, 0x65, 0x1d, 0x60, 0x11, 0x86, 0x21, 0x2e, 0x3b, 0x67, 0xc5, 0xae, 0x83, 0xec, + 0x39, 0x9a, 0x03, 0x2d, 0xf0, 0x77, 0xa8, 0x99, 0xe1, 0x5d, 0x50, 0x42, 0x1b, 0x30, 0xea, 0x86, + 0xf7, 0x83, 0xfb, 0x4e, 0xe4, 0x2e, 0xd6, 0xd6, 0xc4, 0x97, 0xc8, 0x71, 0x59, 0xaa, 0xa6, 0x15, + 0x74, 0xf7, 0x5c, 0x66, 0x5f, 0x48, 0x41, 0x58, 0x27, 0x4c, 0x75, 0xc5, 0x46, 0x18, 0x6c, 0x78, + 0xcd, 0xeb, 0x4e, 0xab, 0xd8, 0xe5, 0xfc, 0xb2, 0x44, 0xd7, 0xda, 0x18, 0x17, 0xf9, 0x28, 0x38, + 0x00, 0xa7, 0x24, 0xed, 0x5f, 0x9d, 0x06, 0x63, 0x2d, 0x18, 0xa9, 0x70, 0xad, 0x87, 0x9e, 0x0a, + 0xf7, 0x4d, 0x18, 0x21, 0x5b, 0xad, 0x64, 0xa7, 0xea, 0x45, 0xc5, 0x12, 0x9b, 0xaf, 0x08, 0xec, + 0x4e, 0xea, 0x12, 0x82, 0x15, 0xc5, 0x1e, 0x89, 0x8d, 0xcb, 0xef, 0x8b, 0xc4, 0xc6, 0x03, 0x7f, + 0x2e, 0x89, 0x8d, 0x5f, 0x87, 0xe1, 0xa6, 0x97, 0x60, 0xd2, 0x0a, 0x45, 0x82, 0x8f, 0x9c, 0xc5, + 0x73, 0x99, 0x23, 0x77, 0xa6, 0xbc, 0x14, 0x00, 0x2c, 0xc9, 0xa1, 0x75, 0xb5, 0xa9, 0x86, 0x8a, + 0x1c, 0xf7, 0x9d, 0xf6, 0xbe, 0xae, 0xdb, 0x4a, 0x24, 0x32, 0x1e, 0x7e, 0xef, 0x89, 0x8c, 0x55, + 0xfa, 0xe1, 0x91, 0x87, 0x95, 0x7e, 0xd8, 0x48, 0xe3, 0x5c, 0x39, 0x8a, 0x34, 0xce, 0x5f, 0xb5, + 0xe0, 0x54, 0xab, 0x5b, 0x12, 0x74, 0x91, 0x48, 0xf8, 0x67, 0x0f, 0x91, 0x16, 0xde, 0x68, 0x9a, + 0x25, 0x2c, 0xe8, 0x8a, 0x86, 0xbb, 0x37, 0x2c, 0xf3, 0x41, 0x8f, 0xbe, 0xf7, 0x7c, 0xd0, 0x47, + 0x9d, 0x71, 0x38, 0xcd, 0x0e, 0x3d, 0x7e, 0x24, 0xd9, 0xa1, 0x27, 0x1e, 0x62, 0x76, 0x68, 0x2d, + 0xaf, 0xf3, 0xe4, 0xc3, 0xcd, 0xeb, 0xbc, 0x69, 0x9e, 0x4b, 0x3c, 0x8d, 0xf0, 0x4b, 0x85, 0xcf, + 0x25, 0xa3, 0x85, 0x83, 0x4f, 0x26, 0x9e, 0xe1, 0xfa, 0xc4, 0x7b, 0xcc, 0x70, 0x6d, 0xe4, 0x89, + 0x46, 0x47, 0x91, 0x27, 0xfa, 0x6d, 0xfd, 0x04, 0x3d, 0x59, 0xa4, 0x05, 0x75, 0x50, 0x76, 0xb6, + 0xd0, 0xed, 0x0c, 0xed, 0xcc, 0x44, 0x3d, 0x7d, 0xdc, 0x99, 0xa8, 0x4f, 0x1d, 0x61, 0x26, 0xea, + 0xd3, 0xc7, 0x9a, 0x89, 0xfa, 0x91, 0xf7, 0x49, 0x26, 0xea, 0x99, 0xe3, 0xca, 0x44, 0xfd, 0xe8, + 0x43, 0xcd, 0x44, 0x4d, 0x3f, 0x5d, 0x4b, 0x86, 0x91, 0xcd, 0xcc, 0x16, 0xf9, 0x74, 0x5d, 0xa3, + 0xce, 0xf8, 0xa7, 0x53, 0x20, 0x9c, 0x12, 0xb5, 0xff, 0x12, 0x9c, 0x39, 0x78, 0xe9, 0xa6, 0x1e, + 0x1b, 0xb5, 0xd4, 0x16, 0x96, 0xf1, 0xd8, 0x60, 0x62, 0xa1, 0x86, 0x55, 0x38, 0x55, 0xee, 0xb7, + 0x2c, 0x78, 0xa4, 0x47, 0x26, 0xc9, 0xc2, 0x31, 0x98, 0x2d, 0x98, 0x6c, 0x99, 0x55, 0x0b, 0x87, + 0x74, 0x1b, 0x99, 0x2b, 0x95, 0x9f, 0x7c, 0x06, 0x80, 0xb3, 0xe4, 0x97, 0x3e, 0xf4, 0xc3, 0x1f, + 0x9d, 0xf9, 0xc0, 0xef, 0xfe, 0xe8, 0xcc, 0x07, 0xfe, 0xf0, 0x47, 0x67, 0x3e, 0xf0, 0x73, 0x7b, + 0x67, 0xac, 0x1f, 0xee, 0x9d, 0xb1, 0x7e, 0x77, 0xef, 0x8c, 0xf5, 0x27, 0x7b, 0x67, 0xac, 0xaf, + 0xfe, 0xf8, 0xcc, 0x07, 0xde, 0x28, 0x6d, 0x5f, 0xf8, 0x7f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xda, + 0x87, 0x52, 0x9e, 0x37, 0xcb, 0x00, 0x00, } diff --git a/staging/src/k8s.io/client-go/pkg/api/v1/types.generated.go b/staging/src/k8s.io/client-go/pkg/api/v1/types.generated.go index 1f2f57945e..7e81fa3d65 100644 --- a/staging/src/k8s.io/client-go/pkg/api/v1/types.generated.go +++ b/staging/src/k8s.io/client-go/pkg/api/v1/types.generated.go @@ -35864,6 +35864,7 @@ func (x *PodSecurityContext) CodecEncodeSelf(e *codec1978.Encoder) { yym8 := z.EncBinary() _ = yym8 if false { + } else if z.HasExtensions() && z.EncExt(yy7) { } else { r.EncodeInt(int64(yy7)) } @@ -35883,6 +35884,7 @@ func (x *PodSecurityContext) CodecEncodeSelf(e *codec1978.Encoder) { yym10 := z.EncBinary() _ = yym10 if false { + } else if z.HasExtensions() && z.EncExt(yy9) { } else { r.EncodeInt(int64(yy9)) } @@ -35934,7 +35936,7 @@ func (x *PodSecurityContext) CodecEncodeSelf(e *codec1978.Encoder) { _ = yym17 if false { } else { - z.F.EncSliceInt64V(x.SupplementalGroups, false, e) + h.encSlicetypes_UnixGroupID(([]pkg1_types.UnixGroupID)(x.SupplementalGroups), e) } } } else { @@ -35952,7 +35954,7 @@ func (x *PodSecurityContext) CodecEncodeSelf(e *codec1978.Encoder) { _ = yym18 if false { } else { - z.F.EncSliceInt64V(x.SupplementalGroups, false, e) + h.encSlicetypes_UnixGroupID(([]pkg1_types.UnixGroupID)(x.SupplementalGroups), e) } } } @@ -35967,6 +35969,7 @@ func (x *PodSecurityContext) CodecEncodeSelf(e *codec1978.Encoder) { yym21 := z.EncBinary() _ = yym21 if false { + } else if z.HasExtensions() && z.EncExt(yy20) { } else { r.EncodeInt(int64(yy20)) } @@ -35986,6 +35989,7 @@ func (x *PodSecurityContext) CodecEncodeSelf(e *codec1978.Encoder) { yym23 := z.EncBinary() _ = yym23 if false { + } else if z.HasExtensions() && z.EncExt(yy22) { } else { r.EncodeInt(int64(yy22)) } @@ -36071,11 +36075,12 @@ func (x *PodSecurityContext) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) } } else { if x.RunAsUser == nil { - x.RunAsUser = new(int64) + x.RunAsUser = new(pkg1_types.UnixUserID) } yym6 := z.DecBinary() _ = yym6 if false { + } else if z.HasExtensions() && z.DecExt(x.RunAsUser) { } else { *((*int64)(x.RunAsUser)) = int64(r.DecodeInt(64)) } @@ -36105,7 +36110,7 @@ func (x *PodSecurityContext) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) _ = yym10 if false { } else { - z.F.DecSliceInt64X(yyv9, false, d) + h.decSlicetypes_UnixGroupID((*[]pkg1_types.UnixGroupID)(yyv9), d) } } case "fsGroup": @@ -36115,11 +36120,12 @@ func (x *PodSecurityContext) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) } } else { if x.FSGroup == nil { - x.FSGroup = new(int64) + x.FSGroup = new(pkg1_types.UnixGroupID) } yym12 := z.DecBinary() _ = yym12 if false { + } else if z.HasExtensions() && z.DecExt(x.FSGroup) { } else { *((*int64)(x.FSGroup)) = int64(r.DecodeInt(64)) } @@ -36176,11 +36182,12 @@ func (x *PodSecurityContext) codecDecodeSelfFromArray(l int, d *codec1978.Decode } } else { if x.RunAsUser == nil { - x.RunAsUser = new(int64) + x.RunAsUser = new(pkg1_types.UnixUserID) } yym16 := z.DecBinary() _ = yym16 if false { + } else if z.HasExtensions() && z.DecExt(x.RunAsUser) { } else { *((*int64)(x.RunAsUser)) = int64(r.DecodeInt(64)) } @@ -36230,7 +36237,7 @@ func (x *PodSecurityContext) codecDecodeSelfFromArray(l int, d *codec1978.Decode _ = yym20 if false { } else { - z.F.DecSliceInt64X(yyv19, false, d) + h.decSlicetypes_UnixGroupID((*[]pkg1_types.UnixGroupID)(yyv19), d) } } yyj13++ @@ -36250,11 +36257,12 @@ func (x *PodSecurityContext) codecDecodeSelfFromArray(l int, d *codec1978.Decode } } else { if x.FSGroup == nil { - x.FSGroup = new(int64) + x.FSGroup = new(pkg1_types.UnixGroupID) } yym22 := z.DecBinary() _ = yym22 if false { + } else if z.HasExtensions() && z.DecExt(x.FSGroup) { } else { *((*int64)(x.FSGroup)) = int64(r.DecodeInt(64)) } @@ -66020,6 +66028,7 @@ func (x *SecurityContext) CodecEncodeSelf(e *codec1978.Encoder) { yym16 := z.EncBinary() _ = yym16 if false { + } else if z.HasExtensions() && z.EncExt(yy15) { } else { r.EncodeInt(int64(yy15)) } @@ -66039,6 +66048,7 @@ func (x *SecurityContext) CodecEncodeSelf(e *codec1978.Encoder) { yym18 := z.EncBinary() _ = yym18 if false { + } else if z.HasExtensions() && z.EncExt(yy17) { } else { r.EncodeInt(int64(yy17)) } @@ -66221,11 +66231,12 @@ func (x *SecurityContext) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { } } else { if x.RunAsUser == nil { - x.RunAsUser = new(int64) + x.RunAsUser = new(pkg1_types.UnixUserID) } yym9 := z.DecBinary() _ = yym9 if false { + } else if z.HasExtensions() && z.DecExt(x.RunAsUser) { } else { *((*int64)(x.RunAsUser)) = int64(r.DecodeInt(64)) } @@ -66361,11 +66372,12 @@ func (x *SecurityContext) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) } } else { if x.RunAsUser == nil { - x.RunAsUser = new(int64) + x.RunAsUser = new(pkg1_types.UnixUserID) } yym20 := z.DecBinary() _ = yym20 if false { + } else if z.HasExtensions() && z.DecExt(x.RunAsUser) { } else { *((*int64)(x.RunAsUser)) = int64(r.DecodeInt(64)) } @@ -70239,6 +70251,143 @@ func (x codecSelfer1234) decSliceHostAlias(v *[]HostAlias, d *codec1978.Decoder) } } +func (x codecSelfer1234) encSlicetypes_UnixGroupID(v []pkg1_types.UnixGroupID, e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + r.EncodeArrayStart(len(v)) + for _, yyv1 := range v { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym2 := z.EncBinary() + _ = yym2 + if false { + } else if z.HasExtensions() && z.EncExt(yyv1) { + } else { + r.EncodeInt(int64(yyv1)) + } + } + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) +} + +func (x codecSelfer1234) decSlicetypes_UnixGroupID(v *[]pkg1_types.UnixGroupID, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + + yyv1 := *v + yyh1, yyl1 := z.DecSliceHelperStart() + var yyc1 bool + _ = yyc1 + if yyl1 == 0 { + if yyv1 == nil { + yyv1 = []pkg1_types.UnixGroupID{} + yyc1 = true + } else if len(yyv1) != 0 { + yyv1 = yyv1[:0] + yyc1 = true + } + } else if yyl1 > 0 { + var yyrr1, yyrl1 int + var yyrt1 bool + _, _ = yyrl1, yyrt1 + yyrr1 = yyl1 // len(yyv1) + if yyl1 > cap(yyv1) { + + yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 8) + if yyrt1 { + if yyrl1 <= cap(yyv1) { + yyv1 = yyv1[:yyrl1] + } else { + yyv1 = make([]pkg1_types.UnixGroupID, yyrl1) + } + } else { + yyv1 = make([]pkg1_types.UnixGroupID, yyrl1) + } + yyc1 = true + yyrr1 = len(yyv1) + } else if yyl1 != len(yyv1) { + yyv1 = yyv1[:yyl1] + yyc1 = true + } + yyj1 := 0 + for ; yyj1 < yyrr1; yyj1++ { + yyh1.ElemContainerState(yyj1) + if r.TryDecodeAsNil() { + yyv1[yyj1] = 0 + } else { + yyv2 := &yyv1[yyj1] + yym3 := z.DecBinary() + _ = yym3 + if false { + } else if z.HasExtensions() && z.DecExt(yyv2) { + } else { + *((*int64)(yyv2)) = int64(r.DecodeInt(64)) + } + } + + } + if yyrt1 { + for ; yyj1 < yyl1; yyj1++ { + yyv1 = append(yyv1, 0) + yyh1.ElemContainerState(yyj1) + if r.TryDecodeAsNil() { + yyv1[yyj1] = 0 + } else { + yyv4 := &yyv1[yyj1] + yym5 := z.DecBinary() + _ = yym5 + if false { + } else if z.HasExtensions() && z.DecExt(yyv4) { + } else { + *((*int64)(yyv4)) = int64(r.DecodeInt(64)) + } + } + + } + } + + } else { + yyj1 := 0 + for ; !r.CheckBreak(); yyj1++ { + + if yyj1 >= len(yyv1) { + yyv1 = append(yyv1, 0) // var yyz1 pkg1_types.UnixGroupID + yyc1 = true + } + yyh1.ElemContainerState(yyj1) + if yyj1 < len(yyv1) { + if r.TryDecodeAsNil() { + yyv1[yyj1] = 0 + } else { + yyv6 := &yyv1[yyj1] + yym7 := z.DecBinary() + _ = yym7 + if false { + } else if z.HasExtensions() && z.DecExt(yyv6) { + } else { + *((*int64)(yyv6)) = int64(r.DecodeInt(64)) + } + } + + } else { + z.DecSwallow() + } + + } + if yyj1 < len(yyv1) { + yyv1 = yyv1[:yyj1] + yyc1 = true + } else if yyj1 == 0 && yyv1 == nil { + yyv1 = []pkg1_types.UnixGroupID{} + yyc1 = true + } + } + yyh1.End() + if yyc1 { + *v = yyv1 + } +} + func (x codecSelfer1234) encSlicePodCondition(v []PodCondition, e *codec1978.Encoder) { var h codecSelfer1234 z, r := codec1978.GenHelperEncoder(e) diff --git a/staging/src/k8s.io/client-go/pkg/api/v1/types.go b/staging/src/k8s.io/client-go/pkg/api/v1/types.go index 47e751e021..2d8528f8d5 100644 --- a/staging/src/k8s.io/client-go/pkg/api/v1/types.go +++ b/staging/src/k8s.io/client-go/pkg/api/v1/types.go @@ -2440,7 +2440,7 @@ type PodSecurityContext struct { // PodSecurityContext, the value specified in SecurityContext takes precedence // for that container. // +optional - RunAsUser *int64 `json:"runAsUser,omitempty" protobuf:"varint,2,opt,name=runAsUser"` + RunAsUser *types.UnixUserID `json:"runAsUser,omitempty" protobuf:"varint,2,opt,name=runAsUser,casttype=k8s.io/apimachinery/pkg/types.UnixUserID"` // Indicates that the container must run as a non-root user. // If true, the Kubelet will validate the image at runtime to ensure that it // does not run as UID 0 (root) and fail to start the container if it does. @@ -2453,7 +2453,7 @@ type PodSecurityContext struct { // to the container's primary GID. If unspecified, no groups will be added to // any container. // +optional - SupplementalGroups []int64 `json:"supplementalGroups,omitempty" protobuf:"varint,4,rep,name=supplementalGroups"` + SupplementalGroups []types.UnixGroupID `json:"supplementalGroups,omitempty" protobuf:"varint,4,rep,name=supplementalGroups,casttype=k8s.io/apimachinery/pkg/types.UnixGroupID"` // A special supplemental group that applies to all containers in a pod. // Some volume types allow the Kubelet to change the ownership of that volume // to be owned by the pod: @@ -2464,7 +2464,7 @@ type PodSecurityContext struct { // // If unset, the Kubelet will not modify the ownership and permissions of any volume. // +optional - FSGroup *int64 `json:"fsGroup,omitempty" protobuf:"varint,5,opt,name=fsGroup"` + FSGroup *types.UnixGroupID `json:"fsGroup,omitempty" protobuf:"varint,5,opt,name=fsGroup,casttype=k8s.io/apimachinery/pkg/types.UnixGroupID"` } // PodQOSClass defines the supported qos classes of Pods. @@ -4369,7 +4369,7 @@ type SecurityContext struct { // May also be set in PodSecurityContext. If set in both SecurityContext and // PodSecurityContext, the value specified in SecurityContext takes precedence. // +optional - RunAsUser *int64 `json:"runAsUser,omitempty" protobuf:"varint,4,opt,name=runAsUser"` + RunAsUser *types.UnixUserID `json:"runAsUser,omitempty" protobuf:"varint,4,opt,name=runAsUser,casttype=k8s.io/apimachinery/pkg/types.UnixUserID"` // Indicates that the container must run as a non-root user. // If true, the Kubelet will validate the image at runtime to ensure that it // does not run as UID 0 (root) and fail to start the container if it does. diff --git a/staging/src/k8s.io/client-go/pkg/api/v1/zz_generated.conversion.go b/staging/src/k8s.io/client-go/pkg/api/v1/zz_generated.conversion.go index 597832926a..e83f26d203 100644 --- a/staging/src/k8s.io/client-go/pkg/api/v1/zz_generated.conversion.go +++ b/staging/src/k8s.io/client-go/pkg/api/v1/zz_generated.conversion.go @@ -3412,10 +3412,10 @@ func Convert_api_PodProxyOptions_To_v1_PodProxyOptions(in *api.PodProxyOptions, func autoConvert_v1_PodSecurityContext_To_api_PodSecurityContext(in *PodSecurityContext, out *api.PodSecurityContext, s conversion.Scope) error { out.SELinuxOptions = (*api.SELinuxOptions)(unsafe.Pointer(in.SELinuxOptions)) - out.RunAsUser = (*int64)(unsafe.Pointer(in.RunAsUser)) + out.RunAsUser = (*types.UnixUserID)(unsafe.Pointer(in.RunAsUser)) out.RunAsNonRoot = (*bool)(unsafe.Pointer(in.RunAsNonRoot)) - out.SupplementalGroups = *(*[]int64)(unsafe.Pointer(&in.SupplementalGroups)) - out.FSGroup = (*int64)(unsafe.Pointer(in.FSGroup)) + out.SupplementalGroups = *(*[]types.UnixGroupID)(unsafe.Pointer(&in.SupplementalGroups)) + out.FSGroup = (*types.UnixGroupID)(unsafe.Pointer(in.FSGroup)) return nil } @@ -3424,10 +3424,10 @@ func autoConvert_api_PodSecurityContext_To_v1_PodSecurityContext(in *api.PodSecu // INFO: in.HostPID opted out of conversion generation // INFO: in.HostIPC opted out of conversion generation out.SELinuxOptions = (*SELinuxOptions)(unsafe.Pointer(in.SELinuxOptions)) - out.RunAsUser = (*int64)(unsafe.Pointer(in.RunAsUser)) + out.RunAsUser = (*types.UnixUserID)(unsafe.Pointer(in.RunAsUser)) out.RunAsNonRoot = (*bool)(unsafe.Pointer(in.RunAsNonRoot)) - out.SupplementalGroups = *(*[]int64)(unsafe.Pointer(&in.SupplementalGroups)) - out.FSGroup = (*int64)(unsafe.Pointer(in.FSGroup)) + out.SupplementalGroups = *(*[]types.UnixGroupID)(unsafe.Pointer(&in.SupplementalGroups)) + out.FSGroup = (*types.UnixGroupID)(unsafe.Pointer(in.FSGroup)) return nil } @@ -4487,7 +4487,7 @@ func autoConvert_v1_SecurityContext_To_api_SecurityContext(in *SecurityContext, out.Capabilities = (*api.Capabilities)(unsafe.Pointer(in.Capabilities)) out.Privileged = (*bool)(unsafe.Pointer(in.Privileged)) out.SELinuxOptions = (*api.SELinuxOptions)(unsafe.Pointer(in.SELinuxOptions)) - out.RunAsUser = (*int64)(unsafe.Pointer(in.RunAsUser)) + out.RunAsUser = (*types.UnixUserID)(unsafe.Pointer(in.RunAsUser)) out.RunAsNonRoot = (*bool)(unsafe.Pointer(in.RunAsNonRoot)) out.ReadOnlyRootFilesystem = (*bool)(unsafe.Pointer(in.ReadOnlyRootFilesystem)) return nil @@ -4502,7 +4502,7 @@ func autoConvert_api_SecurityContext_To_v1_SecurityContext(in *api.SecurityConte out.Capabilities = (*Capabilities)(unsafe.Pointer(in.Capabilities)) out.Privileged = (*bool)(unsafe.Pointer(in.Privileged)) out.SELinuxOptions = (*SELinuxOptions)(unsafe.Pointer(in.SELinuxOptions)) - out.RunAsUser = (*int64)(unsafe.Pointer(in.RunAsUser)) + out.RunAsUser = (*types.UnixUserID)(unsafe.Pointer(in.RunAsUser)) out.RunAsNonRoot = (*bool)(unsafe.Pointer(in.RunAsNonRoot)) out.ReadOnlyRootFilesystem = (*bool)(unsafe.Pointer(in.ReadOnlyRootFilesystem)) return nil diff --git a/staging/src/k8s.io/client-go/pkg/api/v1/zz_generated.deepcopy.go b/staging/src/k8s.io/client-go/pkg/api/v1/zz_generated.deepcopy.go index ab45047c68..7a5eefe214 100644 --- a/staging/src/k8s.io/client-go/pkg/api/v1/zz_generated.deepcopy.go +++ b/staging/src/k8s.io/client-go/pkg/api/v1/zz_generated.deepcopy.go @@ -2317,7 +2317,7 @@ func DeepCopy_v1_PodSecurityContext(in interface{}, out interface{}, c *conversi } if in.RunAsUser != nil { in, out := &in.RunAsUser, &out.RunAsUser - *out = new(int64) + *out = new(types.UnixUserID) **out = **in } if in.RunAsNonRoot != nil { @@ -2327,12 +2327,12 @@ func DeepCopy_v1_PodSecurityContext(in interface{}, out interface{}, c *conversi } if in.SupplementalGroups != nil { in, out := &in.SupplementalGroups, &out.SupplementalGroups - *out = make([]int64, len(*in)) + *out = make([]types.UnixGroupID, len(*in)) copy(*out, *in) } if in.FSGroup != nil { in, out := &in.FSGroup, &out.FSGroup - *out = new(int64) + *out = new(types.UnixGroupID) **out = **in } return nil @@ -3076,7 +3076,7 @@ func DeepCopy_v1_SecurityContext(in interface{}, out interface{}, c *conversion. } if in.RunAsUser != nil { in, out := &in.RunAsUser, &out.RunAsUser - *out = new(int64) + *out = new(types.UnixUserID) **out = **in } if in.RunAsNonRoot != nil { diff --git a/staging/src/k8s.io/client-go/pkg/api/zz_generated.deepcopy.go b/staging/src/k8s.io/client-go/pkg/api/zz_generated.deepcopy.go index c58ccb4993..5df4094ef6 100644 --- a/staging/src/k8s.io/client-go/pkg/api/zz_generated.deepcopy.go +++ b/staging/src/k8s.io/client-go/pkg/api/zz_generated.deepcopy.go @@ -2335,7 +2335,7 @@ func DeepCopy_api_PodSecurityContext(in interface{}, out interface{}, c *convers } if in.RunAsUser != nil { in, out := &in.RunAsUser, &out.RunAsUser - *out = new(int64) + *out = new(types.UnixUserID) **out = **in } if in.RunAsNonRoot != nil { @@ -2345,12 +2345,12 @@ func DeepCopy_api_PodSecurityContext(in interface{}, out interface{}, c *convers } if in.SupplementalGroups != nil { in, out := &in.SupplementalGroups, &out.SupplementalGroups - *out = make([]int64, len(*in)) + *out = make([]types.UnixGroupID, len(*in)) copy(*out, *in) } if in.FSGroup != nil { in, out := &in.FSGroup, &out.FSGroup - *out = new(int64) + *out = new(types.UnixGroupID) **out = **in } return nil @@ -3082,7 +3082,7 @@ func DeepCopy_api_SecurityContext(in interface{}, out interface{}, c *conversion } if in.RunAsUser != nil { in, out := &in.RunAsUser, &out.RunAsUser - *out = new(int64) + *out = new(types.UnixUserID) **out = **in } if in.RunAsNonRoot != nil { diff --git a/staging/src/k8s.io/client-go/pkg/apis/extensions/BUILD b/staging/src/k8s.io/client-go/pkg/apis/extensions/BUILD index 95cb77d78a..529181ac24 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/extensions/BUILD +++ b/staging/src/k8s.io/client-go/pkg/apis/extensions/BUILD @@ -23,6 +23,7 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/conversion:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/intstr:go_default_library", "//vendor/k8s.io/client-go/pkg/api:go_default_library", ], diff --git a/staging/src/k8s.io/client-go/pkg/apis/extensions/types.go b/staging/src/k8s.io/client-go/pkg/apis/extensions/types.go index 93888c1a3a..4a6631d3a8 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/extensions/types.go +++ b/staging/src/k8s.io/client-go/pkg/apis/extensions/types.go @@ -31,6 +31,7 @@ package extensions import ( "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/intstr" "k8s.io/client-go/pkg/api" ) @@ -948,15 +949,23 @@ type RunAsUserStrategyOptions struct { Rule RunAsUserStrategy // Ranges are the allowed ranges of uids that may be used. // +optional - Ranges []IDRange + Ranges []UserIDRange } -// IDRange provides a min/max of an allowed range of IDs. -type IDRange struct { +// UserIDRange provides a min/max of an allowed range of UserIDs. +type UserIDRange struct { // Min is the start of the range, inclusive. - Min int64 + Min types.UnixUserID // Max is the end of the range, inclusive. - Max int64 + Max types.UnixUserID +} + +// GroupIDRange provides a min/max of an allowed range of GroupIDs. +type GroupIDRange struct { + // Min is the start of the range, inclusive. + Min types.UnixGroupID + // Max is the end of the range, inclusive. + Max types.UnixGroupID } // RunAsUserStrategy denotes strategy types for generating RunAsUser values for a @@ -980,7 +989,7 @@ type FSGroupStrategyOptions struct { // Ranges are the allowed ranges of fs groups. If you would like to force a single // fs group then supply a single range with the same start and end. // +optional - Ranges []IDRange + Ranges []GroupIDRange } // FSGroupStrategyType denotes strategy types for generating FSGroup values for a @@ -1002,7 +1011,7 @@ type SupplementalGroupsStrategyOptions struct { // Ranges are the allowed ranges of supplemental groups. If you would like to force a single // supplemental group then supply a single range with the same start and end. // +optional - Ranges []IDRange + Ranges []GroupIDRange } // SupplementalGroupsStrategyType denotes strategy types for determining valid supplemental diff --git a/staging/src/k8s.io/client-go/pkg/apis/extensions/v1beta1/zz_generated.conversion.go b/staging/src/k8s.io/client-go/pkg/apis/extensions/v1beta1/zz_generated.conversion.go index dbe5ce04b0..e90fa6af11 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/extensions/v1beta1/zz_generated.conversion.go +++ b/staging/src/k8s.io/client-go/pkg/apis/extensions/v1beta1/zz_generated.conversion.go @@ -81,8 +81,6 @@ func RegisterConversions(scheme *runtime.Scheme) error { Convert_extensions_HTTPIngressRuleValue_To_v1beta1_HTTPIngressRuleValue, Convert_v1beta1_HostPortRange_To_extensions_HostPortRange, Convert_extensions_HostPortRange_To_v1beta1_HostPortRange, - Convert_v1beta1_IDRange_To_extensions_IDRange, - Convert_extensions_IDRange_To_v1beta1_IDRange, Convert_v1beta1_Ingress_To_extensions_Ingress, Convert_extensions_Ingress_To_v1beta1_Ingress, Convert_v1beta1_IngressBackend_To_extensions_IngressBackend, @@ -684,7 +682,7 @@ func autoConvert_extensions_DeploymentStrategy_To_v1beta1_DeploymentStrategy(in func autoConvert_v1beta1_FSGroupStrategyOptions_To_extensions_FSGroupStrategyOptions(in *FSGroupStrategyOptions, out *extensions.FSGroupStrategyOptions, s conversion.Scope) error { out.Rule = extensions.FSGroupStrategyType(in.Rule) - out.Ranges = *(*[]extensions.IDRange)(unsafe.Pointer(&in.Ranges)) + out.Ranges = *(*[]extensions.GroupIDRange)(unsafe.Pointer(&in.Ranges)) return nil } @@ -776,28 +774,6 @@ func Convert_extensions_HostPortRange_To_v1beta1_HostPortRange(in *extensions.Ho return autoConvert_extensions_HostPortRange_To_v1beta1_HostPortRange(in, out, s) } -func autoConvert_v1beta1_IDRange_To_extensions_IDRange(in *IDRange, out *extensions.IDRange, s conversion.Scope) error { - out.Min = in.Min - out.Max = in.Max - return nil -} - -// Convert_v1beta1_IDRange_To_extensions_IDRange is an autogenerated conversion function. -func Convert_v1beta1_IDRange_To_extensions_IDRange(in *IDRange, out *extensions.IDRange, s conversion.Scope) error { - return autoConvert_v1beta1_IDRange_To_extensions_IDRange(in, out, s) -} - -func autoConvert_extensions_IDRange_To_v1beta1_IDRange(in *extensions.IDRange, out *IDRange, s conversion.Scope) error { - out.Min = in.Min - out.Max = in.Max - return nil -} - -// Convert_extensions_IDRange_To_v1beta1_IDRange is an autogenerated conversion function. -func Convert_extensions_IDRange_To_v1beta1_IDRange(in *extensions.IDRange, out *IDRange, s conversion.Scope) error { - return autoConvert_extensions_IDRange_To_v1beta1_IDRange(in, out, s) -} - func autoConvert_v1beta1_Ingress_To_extensions_Ingress(in *Ingress, out *extensions.Ingress, s conversion.Scope) error { out.ObjectMeta = in.ObjectMeta if err := Convert_v1beta1_IngressSpec_To_extensions_IngressSpec(&in.Spec, &out.Spec, s); err != nil { @@ -1504,7 +1480,7 @@ func autoConvert_extensions_RollingUpdateDeployment_To_v1beta1_RollingUpdateDepl func autoConvert_v1beta1_RunAsUserStrategyOptions_To_extensions_RunAsUserStrategyOptions(in *RunAsUserStrategyOptions, out *extensions.RunAsUserStrategyOptions, s conversion.Scope) error { out.Rule = extensions.RunAsUserStrategy(in.Rule) - out.Ranges = *(*[]extensions.IDRange)(unsafe.Pointer(&in.Ranges)) + out.Ranges = *(*[]extensions.UserIDRange)(unsafe.Pointer(&in.Ranges)) return nil } @@ -1613,7 +1589,7 @@ func autoConvert_extensions_ScaleStatus_To_v1beta1_ScaleStatus(in *extensions.Sc func autoConvert_v1beta1_SupplementalGroupsStrategyOptions_To_extensions_SupplementalGroupsStrategyOptions(in *SupplementalGroupsStrategyOptions, out *extensions.SupplementalGroupsStrategyOptions, s conversion.Scope) error { out.Rule = extensions.SupplementalGroupsStrategyType(in.Rule) - out.Ranges = *(*[]extensions.IDRange)(unsafe.Pointer(&in.Ranges)) + out.Ranges = *(*[]extensions.GroupIDRange)(unsafe.Pointer(&in.Ranges)) return nil } diff --git a/staging/src/k8s.io/client-go/pkg/apis/extensions/zz_generated.deepcopy.go b/staging/src/k8s.io/client-go/pkg/apis/extensions/zz_generated.deepcopy.go index 93409cb610..9013779641 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/extensions/zz_generated.deepcopy.go +++ b/staging/src/k8s.io/client-go/pkg/apis/extensions/zz_generated.deepcopy.go @@ -55,10 +55,10 @@ func RegisterDeepCopies(scheme *runtime.Scheme) error { conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_DeploymentStatus, InType: reflect.TypeOf(&DeploymentStatus{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_DeploymentStrategy, InType: reflect.TypeOf(&DeploymentStrategy{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_FSGroupStrategyOptions, InType: reflect.TypeOf(&FSGroupStrategyOptions{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_GroupIDRange, InType: reflect.TypeOf(&GroupIDRange{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_HTTPIngressPath, InType: reflect.TypeOf(&HTTPIngressPath{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_HTTPIngressRuleValue, InType: reflect.TypeOf(&HTTPIngressRuleValue{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_HostPortRange, InType: reflect.TypeOf(&HostPortRange{})}, - conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_IDRange, InType: reflect.TypeOf(&IDRange{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_Ingress, InType: reflect.TypeOf(&Ingress{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_IngressBackend, InType: reflect.TypeOf(&IngressBackend{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_IngressList, InType: reflect.TypeOf(&IngressList{})}, @@ -95,6 +95,7 @@ func RegisterDeepCopies(scheme *runtime.Scheme) error { conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_ThirdPartyResourceData, InType: reflect.TypeOf(&ThirdPartyResourceData{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_ThirdPartyResourceDataList, InType: reflect.TypeOf(&ThirdPartyResourceDataList{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_ThirdPartyResourceList, InType: reflect.TypeOf(&ThirdPartyResourceList{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_extensions_UserIDRange, InType: reflect.TypeOf(&UserIDRange{})}, ) } @@ -386,13 +387,22 @@ func DeepCopy_extensions_FSGroupStrategyOptions(in interface{}, out interface{}, *out = *in if in.Ranges != nil { in, out := &in.Ranges, &out.Ranges - *out = make([]IDRange, len(*in)) + *out = make([]GroupIDRange, len(*in)) copy(*out, *in) } return nil } } +func DeepCopy_extensions_GroupIDRange(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*GroupIDRange) + out := out.(*GroupIDRange) + *out = *in + return nil + } +} + func DeepCopy_extensions_HTTPIngressPath(in interface{}, out interface{}, c *conversion.Cloner) error { { in := in.(*HTTPIngressPath) @@ -425,15 +435,6 @@ func DeepCopy_extensions_HostPortRange(in interface{}, out interface{}, c *conve } } -func DeepCopy_extensions_IDRange(in interface{}, out interface{}, c *conversion.Cloner) error { - { - in := in.(*IDRange) - out := out.(*IDRange) - *out = *in - return nil - } -} - func DeepCopy_extensions_Ingress(in interface{}, out interface{}, c *conversion.Cloner) error { { in := in.(*Ingress) @@ -906,7 +907,7 @@ func DeepCopy_extensions_RunAsUserStrategyOptions(in interface{}, out interface{ *out = *in if in.Ranges != nil { in, out := &in.Ranges, &out.Ranges - *out = make([]IDRange, len(*in)) + *out = make([]UserIDRange, len(*in)) copy(*out, *in) } return nil @@ -977,7 +978,7 @@ func DeepCopy_extensions_SupplementalGroupsStrategyOptions(in interface{}, out i *out = *in if in.Ranges != nil { in, out := &in.Ranges, &out.Ranges - *out = make([]IDRange, len(*in)) + *out = make([]GroupIDRange, len(*in)) copy(*out, *in) } return nil @@ -1057,3 +1058,12 @@ func DeepCopy_extensions_ThirdPartyResourceList(in interface{}, out interface{}, return nil } } + +func DeepCopy_extensions_UserIDRange(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*UserIDRange) + out := out.(*UserIDRange) + *out = *in + return nil + } +} diff --git a/test/e2e/common/BUILD b/test/e2e/common/BUILD index 40ec2162ba..05b9257ce9 100644 --- a/test/e2e/common/BUILD +++ b/test/e2e/common/BUILD @@ -57,6 +57,7 @@ go_library( "//vendor/k8s.io/apimachinery/pkg/fields:go_default_library", "//vendor/k8s.io/apimachinery/pkg/labels:go_default_library", "//vendor/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//vendor/k8s.io/apimachinery/pkg/types:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/intstr:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/sets:go_default_library", "//vendor/k8s.io/apimachinery/pkg/util/uuid:go_default_library", diff --git a/test/e2e/common/configmap.go b/test/e2e/common/configmap.go index 1580157c5a..400a1644eb 100644 --- a/test/e2e/common/configmap.go +++ b/test/e2e/common/configmap.go @@ -22,13 +22,13 @@ import ( "path" "time" + . "github.com/onsi/ginkgo" + . "github.com/onsi/gomega" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/uuid" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/test/e2e/framework" - - . "github.com/onsi/ginkgo" - . "github.com/onsi/gomega" ) var _ = framework.KubeDescribe("ConfigMap", func() { @@ -523,6 +523,9 @@ func newEnvFromConfigMap(f *framework.Framework, name string) *v1.ConfigMap { } func doConfigMapE2EWithoutMappings(f *framework.Framework, uid, fsGroup int64, defaultMode *int32) { + userID := types.UnixUserID(uid) + groupID := types.UnixGroupID(fsGroup) + var ( name = "configmap-test-volume-" + string(uuid.NewUUID()) volumeName = "configmap-volume" @@ -573,13 +576,14 @@ func doConfigMapE2EWithoutMappings(f *framework.Framework, uid, fsGroup int64, d }, } - if uid != 0 { - pod.Spec.SecurityContext.RunAsUser = &uid + if userID != 0 { + pod.Spec.SecurityContext.RunAsUser = &userID } - if fsGroup != 0 { - pod.Spec.SecurityContext.FSGroup = &fsGroup + if groupID != 0 { + pod.Spec.SecurityContext.FSGroup = &groupID } + if defaultMode != nil { pod.Spec.Volumes[0].VolumeSource.ConfigMap.DefaultMode = defaultMode } else { @@ -596,6 +600,9 @@ func doConfigMapE2EWithoutMappings(f *framework.Framework, uid, fsGroup int64, d } func doConfigMapE2EWithMappings(f *framework.Framework, uid, fsGroup int64, itemMode *int32) { + userID := types.UnixUserID(uid) + groupID := types.UnixGroupID(fsGroup) + var ( name = "configmap-test-volume-map-" + string(uuid.NewUUID()) volumeName = "configmap-volume" @@ -653,13 +660,14 @@ func doConfigMapE2EWithMappings(f *framework.Framework, uid, fsGroup int64, item }, } - if uid != 0 { - pod.Spec.SecurityContext.RunAsUser = &uid + if userID != 0 { + pod.Spec.SecurityContext.RunAsUser = &userID } - if fsGroup != 0 { - pod.Spec.SecurityContext.FSGroup = &fsGroup + if groupID != 0 { + pod.Spec.SecurityContext.FSGroup = &groupID } + if itemMode != nil { pod.Spec.Volumes[0].VolumeSource.ConfigMap.Items[0].Mode = itemMode } else { diff --git a/test/e2e/common/downwardapi_volume.go b/test/e2e/common/downwardapi_volume.go index 2e85ccd64d..65dc7d617c 100644 --- a/test/e2e/common/downwardapi_volume.go +++ b/test/e2e/common/downwardapi_volume.go @@ -28,6 +28,7 @@ import ( . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" + "k8s.io/apimachinery/pkg/types" ) var _ = framework.KubeDescribe("Downward API volume", func() { @@ -70,8 +71,8 @@ var _ = framework.KubeDescribe("Downward API volume", func() { It("should provide podname as non-root with fsgroup [Feature:FSGroup] [Volume]", func() { podName := "metadata-volume-" + string(uuid.NewUUID()) - uid := int64(1001) - gid := int64(1234) + uid := types.UnixUserID(1001) + gid := types.UnixGroupID(1234) pod := downwardAPIVolumePodForSimpleTest(podName, "/etc/podname") pod.Spec.SecurityContext = &v1.PodSecurityContext{ RunAsUser: &uid, @@ -84,8 +85,8 @@ var _ = framework.KubeDescribe("Downward API volume", func() { It("should provide podname as non-root with fsgroup and defaultMode [Feature:FSGroup] [Volume]", func() { podName := "metadata-volume-" + string(uuid.NewUUID()) - uid := int64(1001) - gid := int64(1234) + uid := types.UnixUserID(1001) + gid := types.UnixGroupID(1234) mode := int32(0440) /* setting fsGroup sets mode to at least 440 */ pod := downwardAPIVolumePodForModeTest(podName, "/etc/podname", &mode, nil) pod.Spec.SecurityContext = &v1.PodSecurityContext{ diff --git a/test/e2e/common/empty_dir.go b/test/e2e/common/empty_dir.go index 7b358849bb..fda397bca8 100644 --- a/test/e2e/common/empty_dir.go +++ b/test/e2e/common/empty_dir.go @@ -27,6 +27,7 @@ import ( "k8s.io/kubernetes/test/e2e/framework" . "github.com/onsi/ginkgo" + "k8s.io/apimachinery/pkg/types" ) const ( @@ -137,7 +138,7 @@ func doTestSetgidFSGroup(f *framework.Framework, image string, medium v1.Storage fmt.Sprintf("--file_owner=%v", filePath), } - fsGroup := int64(123) + fsGroup := types.UnixGroupID(123) pod.Spec.SecurityContext.FSGroup = &fsGroup msg := fmt.Sprintf("emptydir 0644 on %v", formatMedium(medium)) @@ -164,7 +165,7 @@ func doTestVolumeModeFSGroup(f *framework.Framework, image string, medium v1.Sto fmt.Sprintf("--file_perm=%v", volumePath), } - fsGroup := int64(1001) + fsGroup := types.UnixGroupID(1001) pod.Spec.SecurityContext.FSGroup = &fsGroup msg := fmt.Sprintf("emptydir volume type on %v", formatMedium(medium)) @@ -191,7 +192,7 @@ func doTest0644FSGroup(f *framework.Framework, image string, medium v1.StorageMe fmt.Sprintf("--file_perm=%v", filePath), } - fsGroup := int64(123) + fsGroup := types.UnixGroupID(123) pod.Spec.SecurityContext.FSGroup = &fsGroup msg := fmt.Sprintf("emptydir 0644 on %v", formatMedium(medium)) diff --git a/test/e2e/common/projected.go b/test/e2e/common/projected.go index 8853c6786d..02c75e409a 100644 --- a/test/e2e/common/projected.go +++ b/test/e2e/common/projected.go @@ -29,6 +29,7 @@ import ( . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" + "k8s.io/apimachinery/pkg/types" ) var _ = framework.KubeDescribe("Projected", func() { @@ -46,8 +47,8 @@ var _ = framework.KubeDescribe("Projected", func() { It("should be consumable from pods in volume as non-root with defaultMode and fsGroup set [Conformance] [Volume]", func() { defaultMode := int32(0440) /* setting fsGroup sets mode to at least 440 */ - fsGroup := int64(1001) - uid := int64(1000) + fsGroup := types.UnixGroupID(1001) + uid := types.UnixUserID(1000) doProjectedSecretE2EWithoutMapping(f, &defaultMode, "projected-secret-test-"+string(uuid.NewUUID()), &fsGroup, &uid) }) @@ -833,8 +834,8 @@ var _ = framework.KubeDescribe("Projected", func() { It("should provide podname as non-root with fsgroup [Feature:FSGroup] [Volume]", func() { podName := "metadata-volume-" + string(uuid.NewUUID()) - uid := int64(1001) - gid := int64(1234) + uid := types.UnixUserID(1001) + gid := types.UnixGroupID(1234) pod := downwardAPIVolumePodForSimpleTest(podName, "/etc/podname") pod.Spec.SecurityContext = &v1.PodSecurityContext{ RunAsUser: &uid, @@ -847,8 +848,8 @@ var _ = framework.KubeDescribe("Projected", func() { It("should provide podname as non-root with fsgroup and defaultMode [Feature:FSGroup] [Volume]", func() { podName := "metadata-volume-" + string(uuid.NewUUID()) - uid := int64(1001) - gid := int64(1234) + uid := types.UnixUserID(1001) + gid := types.UnixGroupID(1234) mode := int32(0440) /* setting fsGroup sets mode to at least 440 */ pod := projectedDownwardAPIVolumePodForModeTest(podName, "/etc/podname", &mode, nil) pod.Spec.SecurityContext = &v1.PodSecurityContext{ @@ -1023,7 +1024,8 @@ var _ = framework.KubeDescribe("Projected", func() { }) }) -func doProjectedSecretE2EWithoutMapping(f *framework.Framework, defaultMode *int32, secretName string, fsGroup *int64, uid *int64) { +func doProjectedSecretE2EWithoutMapping(f *framework.Framework, defaultMode *int32, + secretName string, fsGroup *types.UnixGroupID, uid *types.UnixUserID) { var ( volumeName = "projected-secret-volume" volumeMountPath = "/etc/projected-secret-volume" @@ -1183,6 +1185,9 @@ func doProjectedSecretE2EWithMapping(f *framework.Framework, mode *int32) { } func doProjectedConfigMapE2EWithoutMappings(f *framework.Framework, uid, fsGroup int64, defaultMode *int32) { + userID := types.UnixUserID(uid) + groupID := types.UnixGroupID(fsGroup) + var ( name = "projected-configmap-test-volume-" + string(uuid.NewUUID()) volumeName = "projected-configmap-volume" @@ -1239,13 +1244,14 @@ func doProjectedConfigMapE2EWithoutMappings(f *framework.Framework, uid, fsGroup }, } - if uid != 0 { - pod.Spec.SecurityContext.RunAsUser = &uid + if userID != 0 { + pod.Spec.SecurityContext.RunAsUser = &userID } - if fsGroup != 0 { - pod.Spec.SecurityContext.FSGroup = &fsGroup + if groupID != 0 { + pod.Spec.SecurityContext.FSGroup = &groupID } + if defaultMode != nil { //pod.Spec.Volumes[0].VolumeSource.Projected.Sources[0].ConfigMap.DefaultMode = defaultMode pod.Spec.Volumes[0].VolumeSource.Projected.DefaultMode = defaultMode @@ -1263,6 +1269,9 @@ func doProjectedConfigMapE2EWithoutMappings(f *framework.Framework, uid, fsGroup } func doProjectedConfigMapE2EWithMappings(f *framework.Framework, uid, fsGroup int64, itemMode *int32) { + userID := types.UnixUserID(uid) + groupID := types.UnixGroupID(fsGroup) + var ( name = "projected-configmap-test-volume-map-" + string(uuid.NewUUID()) volumeName = "projected-configmap-volume" @@ -1326,13 +1335,14 @@ func doProjectedConfigMapE2EWithMappings(f *framework.Framework, uid, fsGroup in }, } - if uid != 0 { - pod.Spec.SecurityContext.RunAsUser = &uid + if userID != 0 { + pod.Spec.SecurityContext.RunAsUser = &userID } - if fsGroup != 0 { - pod.Spec.SecurityContext.FSGroup = &fsGroup + if groupID != 0 { + pod.Spec.SecurityContext.FSGroup = &groupID } + if itemMode != nil { //pod.Spec.Volumes[0].VolumeSource.ConfigMap.Items[0].Mode = itemMode pod.Spec.Volumes[0].VolumeSource.Projected.DefaultMode = itemMode diff --git a/test/e2e/common/secrets.go b/test/e2e/common/secrets.go index 488ce974b9..4dd0e5308e 100644 --- a/test/e2e/common/secrets.go +++ b/test/e2e/common/secrets.go @@ -29,6 +29,7 @@ import ( . "github.com/onsi/ginkgo" . "github.com/onsi/gomega" + "k8s.io/apimachinery/pkg/types" ) var _ = framework.KubeDescribe("Secrets", func() { @@ -45,8 +46,8 @@ var _ = framework.KubeDescribe("Secrets", func() { It("should be consumable from pods in volume as non-root with defaultMode and fsGroup set [Conformance] [Volume]", func() { defaultMode := int32(0440) /* setting fsGroup sets mode to at least 440 */ - fsGroup := int64(1001) - uid := int64(1000) + fsGroup := types.UnixGroupID(1001) + uid := types.UnixUserID(1000) doSecretE2EWithoutMapping(f, &defaultMode, "secret-test-"+string(uuid.NewUUID()), &fsGroup, &uid) }) @@ -453,7 +454,8 @@ func secretForTest(namespace, name string) *v1.Secret { } } -func doSecretE2EWithoutMapping(f *framework.Framework, defaultMode *int32, secretName string, fsGroup *int64, uid *int64) { +func doSecretE2EWithoutMapping(f *framework.Framework, defaultMode *int32, secretName string, + fsGroup *types.UnixGroupID, uid *types.UnixUserID) { var ( volumeName = "secret-volume" volumeMountPath = "/etc/secret-volume" diff --git a/test/e2e/framework/volume_util.go b/test/e2e/framework/volume_util.go index 0d1450fe1a..e22a42b768 100644 --- a/test/e2e/framework/volume_util.go +++ b/test/e2e/framework/volume_util.go @@ -46,6 +46,7 @@ import ( apierrs "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/client/clientset_generated/clientset" @@ -223,7 +224,7 @@ func VolumeTestCleanup(f *Framework, config VolumeTestConfig) { // and check that the pod sees expected data, e.g. from the server pod. // Multiple VolumeTests can be specified to mount multiple volumes to a single // pod. -func TestVolumeClient(client clientset.Interface, config VolumeTestConfig, fsGroup *int64, tests []VolumeTest) { +func TestVolumeClient(client clientset.Interface, config VolumeTestConfig, fsGroup *types.UnixGroupID, tests []VolumeTest) { By(fmt.Sprint("starting ", config.Prefix, " client")) clientPod := &v1.Pod{ TypeMeta: metav1.TypeMeta{ diff --git a/test/e2e/security_context.go b/test/e2e/security_context.go index 199e2f9752..0656943bdd 100644 --- a/test/e2e/security_context.go +++ b/test/e2e/security_context.go @@ -26,6 +26,7 @@ import ( "fmt" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/uuid" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/test/e2e/framework" @@ -65,33 +66,33 @@ var _ = framework.KubeDescribe("Security Context [Feature:SecurityContext]", fun It("should support pod.Spec.SecurityContext.SupplementalGroups", func() { pod := scTestPod(false, false) pod.Spec.Containers[0].Command = []string{"id", "-G"} - pod.Spec.SecurityContext.SupplementalGroups = []int64{1234, 5678} + pod.Spec.SecurityContext.SupplementalGroups = []types.UnixGroupID{1234, 5678} groups := []string{"1234", "5678"} f.TestContainerOutput("pod.Spec.SecurityContext.SupplementalGroups", pod, 0, groups) }) It("should support pod.Spec.SecurityContext.RunAsUser", func() { pod := scTestPod(false, false) - var uid int64 = 1001 - pod.Spec.SecurityContext.RunAsUser = &uid + userID := types.UnixUserID(1001) + pod.Spec.SecurityContext.RunAsUser = &userID pod.Spec.Containers[0].Command = []string{"sh", "-c", "id -u"} f.TestContainerOutput("pod.Spec.SecurityContext.RunAsUser", pod, 0, []string{ - fmt.Sprintf("%v", uid), + fmt.Sprintf("%v", userID), }) }) It("should support container.SecurityContext.RunAsUser", func() { pod := scTestPod(false, false) - var uid int64 = 1001 - var overrideUid int64 = 1002 - pod.Spec.SecurityContext.RunAsUser = &uid + userID := types.UnixUserID(1001) + overrideUserID := types.UnixUserID(1002) + pod.Spec.SecurityContext.RunAsUser = &userID pod.Spec.Containers[0].SecurityContext = new(v1.SecurityContext) - pod.Spec.Containers[0].SecurityContext.RunAsUser = &overrideUid + pod.Spec.Containers[0].SecurityContext.RunAsUser = &overrideUserID pod.Spec.Containers[0].Command = []string{"sh", "-c", "id -u"} f.TestContainerOutput("pod.Spec.SecurityContext.RunAsUser", pod, 0, []string{ - fmt.Sprintf("%v", overrideUid), + fmt.Sprintf("%v", overrideUserID), }) }) diff --git a/test/e2e/storage/volumes.go b/test/e2e/storage/volumes.go index fed03ccaf6..9eb37922e0 100644 --- a/test/e2e/storage/volumes.go +++ b/test/e2e/storage/volumes.go @@ -264,7 +264,7 @@ var _ = framework.KubeDescribe("Volumes [Volume]", func() { ExpectedContent: "Hello from iSCSI", }, } - fsGroup := int64(1234) + fsGroup := types.UnixGroupID(1234) framework.TestVolumeClient(cs, config, &fsGroup, tests) }) }) @@ -343,7 +343,7 @@ var _ = framework.KubeDescribe("Volumes [Volume]", func() { ExpectedContent: "Hello from RBD", }, } - fsGroup := int64(1234) + fsGroup := types.UnixGroupID(1234) framework.TestVolumeClient(cs, config, &fsGroup, tests) }) }) @@ -496,7 +496,7 @@ var _ = framework.KubeDescribe("Volumes [Volume]", func() { framework.InjectHtml(cs, config, tests[0].Volume, tests[0].ExpectedContent) - fsGroup := int64(1234) + fsGroup := types.UnixGroupID(1234) framework.TestVolumeClient(cs, config, &fsGroup, tests) }) }) @@ -550,7 +550,7 @@ var _ = framework.KubeDescribe("Volumes [Volume]", func() { framework.InjectHtml(cs, config, tests[0].Volume, tests[0].ExpectedContent) - fsGroup := int64(1234) + fsGroup := types.UnixGroupID(1234) framework.TestVolumeClient(cs, config, &fsGroup, tests) }) }) @@ -682,7 +682,7 @@ var _ = framework.KubeDescribe("Volumes [Volume]", func() { framework.InjectHtml(cs, config, tests[0].Volume, tests[0].ExpectedContent) - fsGroup := int64(1234) + fsGroup := types.UnixGroupID(1234) framework.TestVolumeClient(cs, config, &fsGroup, tests) }) }) @@ -732,7 +732,7 @@ var _ = framework.KubeDescribe("Volumes [Volume]", func() { framework.InjectHtml(cs, config, tests[0].Volume, tests[0].ExpectedContent) - fsGroup := int64(1234) + fsGroup := types.UnixGroupID(1234) framework.TestVolumeClient(cs, config, &fsGroup, tests) }) }) diff --git a/test/e2e_node/runtime_conformance_test.go b/test/e2e_node/runtime_conformance_test.go index 9dfd45829d..2099396193 100644 --- a/test/e2e_node/runtime_conformance_test.go +++ b/test/e2e_node/runtime_conformance_test.go @@ -21,6 +21,7 @@ import ( "path" "time" + "k8s.io/apimachinery/pkg/types" "k8s.io/apimachinery/pkg/util/uuid" "k8s.io/kubernetes/pkg/api/v1" "k8s.io/kubernetes/pkg/kubelet/images" @@ -129,8 +130,8 @@ while true; do sleep 1; done } }) - rootUser := int64(0) - nonRootUser := int64(10000) + rootUser := types.UnixUserID(0) + nonRootUser := types.UnixUserID(10000) for _, testCase := range []struct { name string container v1.Container