From 052325a054b0c550321fe77b068ea8c49ec35ab3 Mon Sep 17 00:00:00 2001 From: shuangkun Date: Tue, 12 Nov 2024 22:26:04 +0800 Subject: [PATCH 01/10] feat: pass secret to workflow as input. Fixes:#5506 Signed-off-by: shuangkun --- api/jsonschema/schema.json | 4 + api/openapi-spec/swagger.json | 4 + docs/executor_swagger.md | 1 + docs/fields.md | 1 + .../argoproj.io_clusterworkflowtemplates.yaml | 130 ++ .../crds/full/argoproj.io_cronworkflows.yaml | 130 ++ .../argoproj.io_workfloweventbindings.yaml | 13 + .../base/crds/full/argoproj.io_workflows.yaml | 351 ++++ .../full/argoproj.io_workflowtaskresults.yaml | 13 + .../full/argoproj.io_workflowtasksets.yaml | 65 + .../full/argoproj.io_workflowtemplates.yaml | 130 ++ .../argoproj.io_workfloweventbindings.yaml | 13 + .../argoproj.io_workflowtaskresults.yaml | 13 + manifests/quick-start-minimal.yaml | 26 + manifests/quick-start-mysql.yaml | 26 + manifests/quick-start-postgres.yaml | 26 + pkg/apis/workflow/v1alpha1/generated.pb.go | 1451 +++++++++-------- pkg/apis/workflow/v1alpha1/generated.proto | 3 + .../workflow/v1alpha1/openapi_generated.go | 8 +- pkg/apis/workflow/v1alpha1/workflow_types.go | 3 + .../v1alpha1/zz_generated.deepcopy.go | 5 + pkg/plugins/executor/swagger.yml | 2 + workflow/common/common.go | 5 + workflow/common/secret.go | 42 + workflow/common/util.go | 60 +- workflow/common/util_test.go | 12 +- workflow/controller/controller.go | 13 + workflow/controller/dag.go | 2 +- workflow/controller/indexes/indexes.go | 1 + workflow/controller/indexes/secret_index.go | 20 + workflow/controller/operator.go | 2 +- workflow/controller/workflowpod.go | 2 +- workflow/validate/validate.go | 2 +- 33 files changed, 1868 insertions(+), 711 deletions(-) create mode 100644 workflow/common/secret.go create mode 100644 workflow/controller/indexes/secret_index.go diff --git a/api/jsonschema/schema.json b/api/jsonschema/schema.json index b853e72e2f53..0452f9f90f92 100644 --- a/api/jsonschema/schema.json +++ b/api/jsonschema/schema.json @@ -7455,6 +7455,10 @@ "description": "Path in the container to retrieve an output parameter value from in container templates", "type": "string" }, + "secretKeyRef": { + "$ref": "#/definitions/io.k8s.api.core.v1.SecretKeySelector", + "description": "SecretKeyRef is secret selector for input parameter configuration" + }, "supplied": { "$ref": "#/definitions/io.argoproj.workflow.v1alpha1.SuppliedValueFrom", "description": "Supplied value to be filled in directly, either through the CLI, API, etc." diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index 7ccfacd9d8fe..90785584ac30 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -11480,6 +11480,10 @@ "description": "Path in the container to retrieve an output parameter value from in container templates", "type": "string" }, + "secretKeyRef": { + "description": "SecretKeyRef is secret selector for input parameter configuration", + "$ref": "#/definitions/io.k8s.api.core.v1.SecretKeySelector" + }, "supplied": { "description": "Supplied value to be filled in directly, either through the CLI, API, etc.", "$ref": "#/definitions/io.argoproj.workflow.v1alpha1.SuppliedValueFrom" diff --git a/docs/executor_swagger.md b/docs/executor_swagger.md index 622463a7300e..571aa4ea196e 100644 --- a/docs/executor_swagger.md +++ b/docs/executor_swagger.md @@ -4049,6 +4049,7 @@ intent and helps make sure that UIDs and names do not get conflated. | jsonPath | string| `string` | | | JSONPath of a resource to retrieve an output parameter value from in resource templates | | | parameter | string| `string` | | | Parameter reference to a step or dag task in which to retrieve an output parameter value from
(e.g. '{{steps.mystep.outputs.myparam}}') | | | path | string| `string` | | | Path in the container to retrieve an output parameter value from in container templates | | +| secretKeyRef | [SecretKeySelector](#secret-key-selector)| `SecretKeySelector` | | | | | | supplied | [SuppliedValueFrom](#supplied-value-from)| `SuppliedValueFrom` | | | | | diff --git a/docs/fields.md b/docs/fields.md index fce94b502d96..70722ece2a70 100644 --- a/docs/fields.md +++ b/docs/fields.md @@ -3721,6 +3721,7 @@ ValueFrom describes a location in which to obtain the value to a parameter |`jsonPath`|`string`|JSONPath of a resource to retrieve an output parameter value from in resource templates| |`parameter`|`string`|Parameter reference to a step or dag task in which to retrieve an output parameter value from (e.g. '{{steps.mystep.outputs.myparam}}')| |`path`|`string`|Path in the container to retrieve an output parameter value from in container templates| +|`secretKeyRef`|[`SecretKeySelector`](#secretkeyselector)|SecretKeyRef is secret selector for input parameter configuration| |`supplied`|[`SuppliedValueFrom`](#suppliedvaluefrom)|Supplied value to be filled in directly, either through the CLI, API, etc.| ## Counter diff --git a/manifests/base/crds/full/argoproj.io_clusterworkflowtemplates.yaml b/manifests/base/crds/full/argoproj.io_clusterworkflowtemplates.yaml index 0cc5f7ca2477..b23fd53918a8 100644 --- a/manifests/base/crds/full/argoproj.io_clusterworkflowtemplates.yaml +++ b/manifests/base/crds/full/argoproj.io_clusterworkflowtemplates.yaml @@ -1087,6 +1087,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -1782,6 +1795,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -5138,6 +5164,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -5778,6 +5817,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -7801,6 +7853,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -8535,6 +8600,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -14435,6 +14513,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -15075,6 +15166,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -17098,6 +17202,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -17832,6 +17949,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object diff --git a/manifests/base/crds/full/argoproj.io_cronworkflows.yaml b/manifests/base/crds/full/argoproj.io_cronworkflows.yaml index 2f40c0771299..8e675c838bb5 100644 --- a/manifests/base/crds/full/argoproj.io_cronworkflows.yaml +++ b/manifests/base/crds/full/argoproj.io_cronworkflows.yaml @@ -1121,6 +1121,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -1816,6 +1829,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -5172,6 +5198,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -5812,6 +5851,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -7835,6 +7887,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -8569,6 +8634,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -14469,6 +14547,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -15109,6 +15200,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -17132,6 +17236,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -17866,6 +17983,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object diff --git a/manifests/base/crds/full/argoproj.io_workfloweventbindings.yaml b/manifests/base/crds/full/argoproj.io_workfloweventbindings.yaml index 4c483822f853..02648118df9d 100644 --- a/manifests/base/crds/full/argoproj.io_workfloweventbindings.yaml +++ b/manifests/base/crds/full/argoproj.io_workfloweventbindings.yaml @@ -651,6 +651,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object diff --git a/manifests/base/crds/full/argoproj.io_workflows.yaml b/manifests/base/crds/full/argoproj.io_workflows.yaml index da9968304348..398750253fea 100644 --- a/manifests/base/crds/full/argoproj.io_workflows.yaml +++ b/manifests/base/crds/full/argoproj.io_workflows.yaml @@ -1101,6 +1101,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -1796,6 +1809,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -5152,6 +5178,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -5792,6 +5831,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -7815,6 +7867,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -8549,6 +8614,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -14449,6 +14527,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -15089,6 +15180,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -17112,6 +17216,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -17846,6 +17963,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -22743,6 +22873,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -23397,6 +23540,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -24067,6 +24223,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -27829,6 +27998,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -28469,6 +28651,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -30492,6 +30687,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -31226,6 +31434,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -35215,6 +35436,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -35910,6 +36144,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -39266,6 +39513,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -39906,6 +40166,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -41929,6 +42202,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -42663,6 +42949,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -48563,6 +48862,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -49203,6 +49515,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -51226,6 +51551,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -51960,6 +52298,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object diff --git a/manifests/base/crds/full/argoproj.io_workflowtaskresults.yaml b/manifests/base/crds/full/argoproj.io_workflowtaskresults.yaml index ebcdcb835fea..b96a3e65db9c 100644 --- a/manifests/base/crds/full/argoproj.io_workflowtaskresults.yaml +++ b/manifests/base/crds/full/argoproj.io_workflowtaskresults.yaml @@ -642,6 +642,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object diff --git a/manifests/base/crds/full/argoproj.io_workflowtasksets.yaml b/manifests/base/crds/full/argoproj.io_workflowtasksets.yaml index 1811733493d8..0a68be830e91 100644 --- a/manifests/base/crds/full/argoproj.io_workflowtasksets.yaml +++ b/manifests/base/crds/full/argoproj.io_workflowtasksets.yaml @@ -3000,6 +3000,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -3640,6 +3653,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -5663,6 +5689,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -6397,6 +6436,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -9950,6 +10002,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object diff --git a/manifests/base/crds/full/argoproj.io_workflowtemplates.yaml b/manifests/base/crds/full/argoproj.io_workflowtemplates.yaml index 330b98e7f927..7e115e9b8e42 100644 --- a/manifests/base/crds/full/argoproj.io_workflowtemplates.yaml +++ b/manifests/base/crds/full/argoproj.io_workflowtemplates.yaml @@ -1086,6 +1086,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -1781,6 +1794,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -5137,6 +5163,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -5777,6 +5816,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -7800,6 +7852,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -8534,6 +8599,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -14434,6 +14512,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -15074,6 +15165,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -17097,6 +17201,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -17831,6 +17948,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object diff --git a/manifests/base/crds/minimal/argoproj.io_workfloweventbindings.yaml b/manifests/base/crds/minimal/argoproj.io_workfloweventbindings.yaml index 4c483822f853..02648118df9d 100644 --- a/manifests/base/crds/minimal/argoproj.io_workfloweventbindings.yaml +++ b/manifests/base/crds/minimal/argoproj.io_workfloweventbindings.yaml @@ -651,6 +651,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object diff --git a/manifests/base/crds/minimal/argoproj.io_workflowtaskresults.yaml b/manifests/base/crds/minimal/argoproj.io_workflowtaskresults.yaml index ebcdcb835fea..b96a3e65db9c 100644 --- a/manifests/base/crds/minimal/argoproj.io_workflowtaskresults.yaml +++ b/manifests/base/crds/minimal/argoproj.io_workflowtaskresults.yaml @@ -642,6 +642,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object diff --git a/manifests/quick-start-minimal.yaml b/manifests/quick-start-minimal.yaml index 78ad3e0e6f80..2167bf4c4fab 100644 --- a/manifests/quick-start-minimal.yaml +++ b/manifests/quick-start-minimal.yaml @@ -1867,6 +1867,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -2596,6 +2609,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object diff --git a/manifests/quick-start-mysql.yaml b/manifests/quick-start-mysql.yaml index 9cb62fe1bd6a..6e6ead3f4092 100644 --- a/manifests/quick-start-mysql.yaml +++ b/manifests/quick-start-mysql.yaml @@ -1867,6 +1867,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -2596,6 +2609,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object diff --git a/manifests/quick-start-postgres.yaml b/manifests/quick-start-postgres.yaml index 7cb175c2cea6..24fe62bca791 100644 --- a/manifests/quick-start-postgres.yaml +++ b/manifests/quick-start-postgres.yaml @@ -1867,6 +1867,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object @@ -2596,6 +2609,19 @@ spec: type: string path: type: string + secretKeyRef: + properties: + key: + type: string + name: + default: "" + type: string + optional: + type: boolean + required: + - key + type: object + x-kubernetes-map-type: atomic supplied: type: object type: object diff --git a/pkg/apis/workflow/v1alpha1/generated.pb.go b/pkg/apis/workflow/v1alpha1/generated.pb.go index 90ddb8a58c04..16fcd2f93eed 100644 --- a/pkg/apis/workflow/v1alpha1/generated.pb.go +++ b/pkg/apis/workflow/v1alpha1/generated.pb.go @@ -4448,705 +4448,705 @@ func init() { } var fileDescriptor_724696e352c3df5f = []byte{ - // 11163 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0xbd, 0x6b, 0x70, 0x64, 0xc7, - 0x75, 0x18, 0xcc, 0x3b, 0xc0, 0xe0, 0x71, 0xf0, 0x58, 0x6c, 0xef, 0x6b, 0x88, 0x25, 0x17, 0xf4, - 0xa5, 0xc8, 0x8f, 0xb4, 0x28, 0xac, 0xb9, 0x94, 0xbe, 0x30, 0x52, 0x22, 0x09, 0x8f, 0x05, 0x16, - 0x04, 0xb0, 0x00, 0x7b, 0xb0, 0xbb, 0x26, 0x45, 0x4b, 0xba, 0x98, 0x69, 0xcc, 0x5c, 0x62, 0xe6, - 0xde, 0xe1, 0xbd, 0x77, 0xb0, 0x0b, 0x3e, 0x24, 0x85, 0x7a, 0xc7, 0xb2, 0x15, 0xcb, 0x92, 0x2c, - 0x29, 0x49, 0x95, 0xa2, 0x48, 0x09, 0x4b, 0x76, 0x25, 0x65, 0xff, 0x4a, 0xd9, 0xff, 0x52, 0x29, - 0x97, 0x52, 0x4e, 0x25, 0x72, 0x45, 0x29, 0xeb, 0x87, 0x0d, 0x46, 0x9b, 0x44, 0x95, 0x4a, 0xa2, - 0xaa, 0x58, 0x15, 0x27, 0xf1, 0xe6, 0x51, 0xa9, 0x7e, 0xde, 0xee, 0x3b, 0x77, 0xb0, 0x03, 0x6c, - 0x03, 0xab, 0xb2, 0x7f, 0x01, 0x73, 0xfa, 0xf4, 0x39, 0xdd, 0x7d, 0xbb, 0x4f, 0x9f, 0x3e, 0xe7, - 0xf4, 0x69, 0x58, 0xaf, 0xf9, 0x49, 0xbd, 0xbd, 0x39, 0x5d, 0x09, 0x9b, 0x17, 0xbd, 0xa8, 0x16, - 0xb6, 0xa2, 0xf0, 0x65, 0xf6, 0xcf, 0xbb, 0x6e, 0x86, 0xd1, 0xf6, 0x56, 0x23, 0xbc, 0x19, 0x5f, - 0xdc, 0x79, 0xe6, 0x62, 0x6b, 0xbb, 0x76, 0xd1, 0x6b, 0xf9, 0xf1, 0x45, 0x09, 0xbd, 0xb8, 0xf3, - 0xb4, 0xd7, 0x68, 0xd5, 0xbd, 0xa7, 0x2f, 0xd6, 0x48, 0x40, 0x22, 0x2f, 0x21, 0xd5, 0xe9, 0x56, - 0x14, 0x26, 0x21, 0xfa, 0x60, 0x4a, 0x71, 0x5a, 0x52, 0x64, 0xff, 0x7c, 0x44, 0x51, 0x9c, 0xde, - 0x79, 0x66, 0xba, 0xb5, 0x5d, 0x9b, 0xa6, 0x14, 0xa7, 0x25, 0x74, 0x5a, 0x52, 0x9c, 0x7c, 0x97, - 0xd6, 0xa6, 0x5a, 0x58, 0x0b, 0x2f, 0x32, 0xc2, 0x9b, 0xed, 0x2d, 0xf6, 0x8b, 0xfd, 0x60, 0xff, - 0x71, 0x86, 0x93, 0xee, 0xf6, 0xb3, 0xf1, 0xb4, 0x1f, 0xd2, 0xf6, 0x5d, 0xac, 0x84, 0x11, 0xb9, - 0xb8, 0xd3, 0xd1, 0xa8, 0xc9, 0x77, 0x68, 0x38, 0xad, 0xb0, 0xe1, 0x57, 0x76, 0xf3, 0xb0, 0xde, - 0x9d, 0x62, 0x35, 0xbd, 0x4a, 0xdd, 0x0f, 0x48, 0xb4, 0x9b, 0x76, 0xbd, 0x49, 0x12, 0x2f, 0xaf, - 0xd6, 0xc5, 0x6e, 0xb5, 0xa2, 0x76, 0x90, 0xf8, 0x4d, 0xd2, 0x51, 0xe1, 0xff, 0xbf, 0x5b, 0x85, - 0xb8, 0x52, 0x27, 0x4d, 0xaf, 0xa3, 0xde, 0x33, 0xdd, 0xea, 0xb5, 0x13, 0xbf, 0x71, 0xd1, 0x0f, - 0x92, 0x38, 0x89, 0xb2, 0x95, 0xdc, 0xcb, 0x30, 0x30, 0xd3, 0x0c, 0xdb, 0x41, 0x82, 0xde, 0x07, - 0xc5, 0x1d, 0xaf, 0xd1, 0x26, 0x25, 0xe7, 0x11, 0xe7, 0x89, 0xe1, 0xd9, 0xc7, 0xbe, 0xb7, 0x37, - 0xf5, 0xc0, 0xed, 0xbd, 0xa9, 0xe2, 0x75, 0x0a, 0xbc, 0xb3, 0x37, 0x75, 0x9a, 0x04, 0x95, 0xb0, - 0xea, 0x07, 0xb5, 0x8b, 0x2f, 0xc7, 0x61, 0x30, 0x7d, 0xb5, 0xdd, 0xdc, 0x24, 0x11, 0xe6, 0x75, - 0xdc, 0x7f, 0x5d, 0x80, 0x13, 0x33, 0x51, 0xa5, 0xee, 0xef, 0x90, 0x72, 0x42, 0xe9, 0xd7, 0x76, - 0x51, 0x1d, 0xfa, 0x12, 0x2f, 0x62, 0xe4, 0x46, 0x2e, 0xad, 0x4e, 0xdf, 0xeb, 0x77, 0x9f, 0xde, - 0xf0, 0x22, 0x49, 0x7b, 0x76, 0xf0, 0xf6, 0xde, 0x54, 0xdf, 0x86, 0x17, 0x61, 0xca, 0x02, 0x35, - 0xa0, 0x3f, 0x08, 0x03, 0x52, 0x2a, 0x30, 0x56, 0x57, 0xef, 0x9d, 0xd5, 0xd5, 0x30, 0x50, 0xfd, - 0x98, 0x1d, 0xba, 0xbd, 0x37, 0xd5, 0x4f, 0x21, 0x98, 0x71, 0xa1, 0xfd, 0x7a, 0xd5, 0x6f, 0x95, - 0xfa, 0x6c, 0xf5, 0xeb, 0x45, 0xbf, 0x65, 0xf6, 0xeb, 0x45, 0xbf, 0x85, 0x29, 0x0b, 0xf7, 0xf3, - 0x05, 0x18, 0x9e, 0x89, 0x6a, 0xed, 0x26, 0x09, 0x92, 0x18, 0x7d, 0x1c, 0xa0, 0xe5, 0x45, 0x5e, - 0x93, 0x24, 0x24, 0x8a, 0x4b, 0xce, 0x23, 0x7d, 0x4f, 0x8c, 0x5c, 0x5a, 0xbe, 0x77, 0xf6, 0xeb, - 0x92, 0xe6, 0x2c, 0x12, 0x9f, 0x1c, 0x14, 0x28, 0xc6, 0x1a, 0x4b, 0xf4, 0x1a, 0x0c, 0x7b, 0x51, - 0xe2, 0x6f, 0x79, 0x95, 0x24, 0x2e, 0x15, 0x18, 0xff, 0xe7, 0xee, 0x9d, 0xff, 0x8c, 0x20, 0x39, - 0x7b, 0x52, 0xb0, 0x1f, 0x96, 0x90, 0x18, 0xa7, 0xfc, 0xdc, 0xdf, 0xed, 0x87, 0x91, 0x99, 0x28, - 0x59, 0x9c, 0x2b, 0x27, 0x5e, 0xd2, 0x8e, 0xd1, 0x1f, 0x38, 0x70, 0x2a, 0xe6, 0xc3, 0xe6, 0x93, - 0x78, 0x3d, 0x0a, 0x2b, 0x24, 0x8e, 0x49, 0x55, 0x8c, 0xcb, 0x96, 0x95, 0x76, 0x49, 0x66, 0xd3, - 0xe5, 0x4e, 0x46, 0x97, 0x83, 0x24, 0xda, 0x9d, 0x7d, 0x5a, 0xb4, 0xf9, 0x54, 0x0e, 0xc6, 0x9b, - 0x6f, 0x4f, 0x21, 0xd9, 0x15, 0x4a, 0x89, 0x7f, 0x62, 0x9c, 0xd7, 0x6a, 0xf4, 0x75, 0x07, 0x46, - 0x5b, 0x61, 0x35, 0xc6, 0xa4, 0x12, 0xb6, 0x5b, 0xa4, 0x2a, 0x86, 0xf7, 0x23, 0x76, 0xbb, 0xb1, - 0xae, 0x71, 0xe0, 0xed, 0x3f, 0x2d, 0xda, 0x3f, 0xaa, 0x17, 0x61, 0xa3, 0x29, 0xe8, 0x59, 0x18, - 0x0d, 0xc2, 0xa4, 0xdc, 0x22, 0x15, 0x7f, 0xcb, 0x27, 0x55, 0x36, 0xf1, 0x87, 0xd2, 0x9a, 0x57, - 0xb5, 0x32, 0x6c, 0x60, 0x4e, 0x2e, 0x40, 0xa9, 0xdb, 0xc8, 0xa1, 0x09, 0xe8, 0xdb, 0x26, 0xbb, - 0x5c, 0xd8, 0x60, 0xfa, 0x2f, 0x3a, 0x2d, 0x05, 0x10, 0x5d, 0xc6, 0x43, 0x42, 0xb2, 0xbc, 0xb7, - 0xf0, 0xac, 0x33, 0xf9, 0x01, 0x38, 0xd9, 0xd1, 0xf4, 0x83, 0x10, 0x70, 0xbf, 0x3f, 0x00, 0x43, - 0xf2, 0x53, 0xa0, 0x47, 0xa0, 0x3f, 0xf0, 0x9a, 0x52, 0xce, 0x8d, 0x8a, 0x7e, 0xf4, 0x5f, 0xf5, - 0x9a, 0x74, 0x85, 0x7b, 0x4d, 0x42, 0x31, 0x5a, 0x5e, 0x52, 0x67, 0x74, 0x34, 0x8c, 0x75, 0x2f, - 0xa9, 0x63, 0x56, 0x82, 0x1e, 0x82, 0xfe, 0x66, 0x58, 0x25, 0x6c, 0x2c, 0x8a, 0x5c, 0x42, 0xac, - 0x86, 0x55, 0x82, 0x19, 0x94, 0xd6, 0xdf, 0x8a, 0xc2, 0x66, 0xa9, 0xdf, 0xac, 0xbf, 0x10, 0x85, - 0x4d, 0xcc, 0x4a, 0xd0, 0xd7, 0x1c, 0x98, 0x90, 0x73, 0x7b, 0x25, 0xac, 0x78, 0x89, 0x1f, 0x06, - 0xa5, 0x22, 0x93, 0x28, 0xd8, 0xde, 0x92, 0x92, 0x94, 0x67, 0x4b, 0xa2, 0x09, 0x13, 0xd9, 0x12, - 0xdc, 0xd1, 0x0a, 0x74, 0x09, 0xa0, 0xd6, 0x08, 0x37, 0xbd, 0x06, 0x1d, 0x90, 0xd2, 0x00, 0xeb, - 0x82, 0x92, 0x0c, 0x8b, 0xaa, 0x04, 0x6b, 0x58, 0xe8, 0x16, 0x0c, 0x7a, 0x5c, 0xfa, 0x97, 0x06, - 0x59, 0x27, 0x9e, 0xb7, 0xd1, 0x09, 0x63, 0x3b, 0x99, 0x1d, 0xb9, 0xbd, 0x37, 0x35, 0x28, 0x80, - 0x58, 0xb2, 0x43, 0x4f, 0xc1, 0x50, 0xd8, 0xa2, 0xed, 0xf6, 0x1a, 0xa5, 0x21, 0x36, 0x31, 0x27, - 0x44, 0x5b, 0x87, 0xd6, 0x04, 0x1c, 0x2b, 0x0c, 0xf4, 0x24, 0x0c, 0xc6, 0xed, 0x4d, 0xfa, 0x1d, - 0x4b, 0xc3, 0xac, 0x63, 0x27, 0x04, 0xf2, 0x60, 0x99, 0x83, 0xb1, 0x2c, 0x47, 0xef, 0x81, 0x91, - 0x88, 0x54, 0xda, 0x51, 0x4c, 0xe8, 0x87, 0x2d, 0x01, 0xa3, 0x7d, 0x4a, 0xa0, 0x8f, 0xe0, 0xb4, - 0x08, 0xeb, 0x78, 0xe8, 0xfd, 0x30, 0x4e, 0x3f, 0xf0, 0xe5, 0x5b, 0xad, 0x88, 0xc4, 0x31, 0xfd, - 0xaa, 0x23, 0x8c, 0xd1, 0x59, 0x51, 0x73, 0x7c, 0xc1, 0x28, 0xc5, 0x19, 0x6c, 0xf4, 0x3a, 0x80, - 0xa7, 0x64, 0x46, 0x69, 0x94, 0x0d, 0xe6, 0x8a, 0xbd, 0x19, 0xb1, 0x38, 0x37, 0x3b, 0x4e, 0xbf, - 0x63, 0xfa, 0x1b, 0x6b, 0xfc, 0xe8, 0xf8, 0x54, 0x49, 0x83, 0x24, 0xa4, 0x5a, 0x1a, 0x63, 0x1d, - 0x56, 0xe3, 0x33, 0xcf, 0xc1, 0x58, 0x96, 0xbb, 0x7f, 0xbb, 0x00, 0x1a, 0x15, 0x34, 0x0b, 0x43, - 0x42, 0xae, 0x89, 0x25, 0x39, 0xfb, 0xb8, 0xfc, 0x0e, 0xf2, 0x0b, 0xde, 0xd9, 0xcb, 0x95, 0x87, - 0xaa, 0x1e, 0x7a, 0x03, 0x46, 0x5a, 0x61, 0x75, 0x95, 0x24, 0x5e, 0xd5, 0x4b, 0x3c, 0xb1, 0x9b, - 0x5b, 0xd8, 0x61, 0x24, 0xc5, 0xd9, 0x13, 0xf4, 0xd3, 0xad, 0xa7, 0x2c, 0xb0, 0xce, 0x0f, 0x3d, - 0x07, 0x28, 0x26, 0xd1, 0x8e, 0x5f, 0x21, 0x33, 0x95, 0x0a, 0x55, 0x89, 0xd8, 0x02, 0xe8, 0x63, - 0x9d, 0x99, 0x14, 0x9d, 0x41, 0xe5, 0x0e, 0x0c, 0x9c, 0x53, 0xcb, 0xfd, 0x41, 0x01, 0xc6, 0xb5, - 0xbe, 0xb6, 0x48, 0x05, 0xbd, 0xe5, 0xc0, 0x09, 0xb5, 0x9d, 0xcd, 0xee, 0x5e, 0xa5, 0xb3, 0x8a, - 0x6f, 0x56, 0xc4, 0xe6, 0xf7, 0xa5, 0xbc, 0xd4, 0x4f, 0xc1, 0x87, 0xcb, 0xfa, 0x73, 0xa2, 0x0f, - 0x27, 0x32, 0xa5, 0x38, 0xdb, 0xac, 0xc9, 0xaf, 0x3a, 0x70, 0x3a, 0x8f, 0x44, 0x8e, 0xcc, 0xad, - 0xeb, 0x32, 0xd7, 0xaa, 0xf0, 0xa2, 0x5c, 0x69, 0x67, 0x74, 0x39, 0xfe, 0x7f, 0x0b, 0x30, 0xa1, - 0x4f, 0x21, 0xa6, 0x09, 0xfc, 0x53, 0x07, 0xce, 0xc8, 0x1e, 0x60, 0x12, 0xb7, 0x1b, 0x99, 0xe1, - 0x6d, 0x5a, 0x1d, 0x5e, 0xbe, 0x93, 0xce, 0xe4, 0xf1, 0xe3, 0xc3, 0xfc, 0xb0, 0x18, 0xe6, 0x33, - 0xb9, 0x38, 0x38, 0xbf, 0xa9, 0x93, 0xdf, 0x76, 0x60, 0xb2, 0x3b, 0xd1, 0x9c, 0x81, 0x6f, 0x99, - 0x03, 0xff, 0xa2, 0xbd, 0x4e, 0x72, 0xf6, 0x6c, 0xf8, 0x59, 0x67, 0xf5, 0x0f, 0xf0, 0x5b, 0x43, - 0xd0, 0xb1, 0x87, 0xa0, 0xa7, 0x61, 0x44, 0x88, 0xe3, 0x95, 0xb0, 0x16, 0xb3, 0x46, 0x0e, 0xf1, - 0xb5, 0x36, 0x93, 0x82, 0xb1, 0x8e, 0x83, 0xaa, 0x50, 0x88, 0x9f, 0x11, 0x4d, 0xb7, 0x20, 0xde, - 0xca, 0xcf, 0x28, 0x2d, 0x72, 0xe0, 0xf6, 0xde, 0x54, 0xa1, 0xfc, 0x0c, 0x2e, 0xc4, 0xcf, 0x50, - 0x4d, 0xbd, 0xe6, 0x27, 0xf6, 0x34, 0xf5, 0x45, 0x3f, 0x51, 0x7c, 0x98, 0xa6, 0xbe, 0xe8, 0x27, - 0x98, 0xb2, 0xa0, 0x27, 0x90, 0x7a, 0x92, 0xb4, 0xd8, 0x8e, 0x6f, 0xe5, 0x04, 0x72, 0x65, 0x63, - 0x63, 0x5d, 0xf1, 0x62, 0xfa, 0x05, 0x85, 0x60, 0xc6, 0x05, 0x7d, 0xce, 0xa1, 0x23, 0xce, 0x0b, - 0xc3, 0x68, 0x57, 0x28, 0x0e, 0xd7, 0xec, 0x4d, 0x81, 0x30, 0xda, 0x55, 0xcc, 0xc5, 0x87, 0x54, - 0x05, 0x58, 0x67, 0xcd, 0x3a, 0x5e, 0xdd, 0x8a, 0x99, 0x9e, 0x60, 0xa7, 0xe3, 0xf3, 0x0b, 0xe5, - 0x4c, 0xc7, 0xe7, 0x17, 0xca, 0x98, 0x71, 0xa1, 0x1f, 0x34, 0xf2, 0x6e, 0x0a, 0x1d, 0xc3, 0xc2, - 0x07, 0xc5, 0xde, 0x4d, 0xf3, 0x83, 0x62, 0xef, 0x26, 0xa6, 0x2c, 0x28, 0xa7, 0x30, 0x8e, 0x99, - 0x4a, 0x61, 0x85, 0xd3, 0x5a, 0xb9, 0x6c, 0x72, 0x5a, 0x2b, 0x97, 0x31, 0x65, 0xc1, 0x26, 0x69, - 0x25, 0x66, 0xfa, 0x88, 0x9d, 0x49, 0x3a, 0x97, 0xe1, 0xb4, 0x38, 0x57, 0xc6, 0x94, 0x05, 0x15, - 0x19, 0xde, 0xab, 0xed, 0x88, 0x2b, 0x33, 0x23, 0x97, 0xd6, 0x2c, 0xcc, 0x17, 0x4a, 0x4e, 0x71, - 0x1b, 0xbe, 0xbd, 0x37, 0x55, 0x64, 0x20, 0xcc, 0x19, 0xb9, 0xbf, 0xdf, 0x97, 0x8a, 0x0b, 0x29, - 0xcf, 0xd1, 0xaf, 0xb1, 0x8d, 0x50, 0xc8, 0x02, 0xa1, 0xfa, 0x3a, 0x47, 0xa6, 0xfa, 0x9e, 0xe2, - 0x3b, 0x9e, 0xc1, 0x0e, 0x67, 0xf9, 0xa3, 0x2f, 0x39, 0x9d, 0x67, 0x5b, 0xcf, 0xfe, 0x5e, 0x96, - 0x6e, 0xcc, 0x7c, 0xaf, 0xd8, 0xf7, 0xc8, 0x3b, 0xf9, 0x39, 0x27, 0x55, 0x22, 0xe2, 0x6e, 0xfb, - 0xc0, 0x47, 0xcd, 0x7d, 0xc0, 0xe2, 0x81, 0x5c, 0x97, 0xfb, 0x9f, 0x77, 0x60, 0x4c, 0xc2, 0xa9, - 0x7a, 0x1c, 0xa3, 0x5b, 0x30, 0x24, 0x5b, 0x2a, 0xbe, 0x9e, 0x4d, 0x5b, 0x80, 0x52, 0xe2, 0x55, - 0x63, 0x14, 0x37, 0xf7, 0xad, 0x01, 0x40, 0xe9, 0x5e, 0xd5, 0x0a, 0x63, 0x9f, 0x49, 0xa2, 0x43, - 0xec, 0x42, 0x81, 0xb6, 0x0b, 0x5d, 0xb7, 0xb9, 0x0b, 0xa5, 0xcd, 0x32, 0xf6, 0xa3, 0x2f, 0x65, - 0xe4, 0x36, 0xdf, 0x98, 0x3e, 0x72, 0x24, 0x72, 0x5b, 0x6b, 0xc2, 0xfe, 0x12, 0x7c, 0x47, 0x48, - 0x70, 0xbe, 0x75, 0xfd, 0xa2, 0x5d, 0x09, 0xae, 0xb5, 0x22, 0x2b, 0xcb, 0x23, 0x2e, 0x61, 0xf9, - 0xde, 0x75, 0xc3, 0xaa, 0x84, 0xd5, 0xb8, 0x9a, 0xb2, 0x36, 0xe2, 0xb2, 0x76, 0xc0, 0x16, 0x4f, - 0x4d, 0xd6, 0x66, 0x79, 0x2a, 0xa9, 0xfb, 0xaa, 0x94, 0xba, 0x7c, 0xd7, 0x7a, 0xc1, 0xb2, 0xd4, - 0xd5, 0xf8, 0x76, 0xca, 0xdf, 0x57, 0xe0, 0x4c, 0x27, 0x1e, 0x26, 0x5b, 0xe8, 0x22, 0x0c, 0x57, - 0xc2, 0x60, 0xcb, 0xaf, 0xad, 0x7a, 0x2d, 0x71, 0x5e, 0x53, 0xb2, 0x68, 0x4e, 0x16, 0xe0, 0x14, - 0x07, 0x3d, 0xcc, 0x05, 0x0f, 0xb7, 0x88, 0x8c, 0x08, 0xd4, 0xbe, 0x65, 0xb2, 0xcb, 0xa4, 0xd0, - 0x7b, 0x87, 0xbe, 0xf6, 0xcd, 0xa9, 0x07, 0x3e, 0xf1, 0xc7, 0x8f, 0x3c, 0xe0, 0xfe, 0x61, 0x1f, - 0x9c, 0xcf, 0xe5, 0x29, 0xb4, 0xf5, 0xdf, 0x32, 0xb4, 0x75, 0xad, 0x5c, 0x48, 0x91, 0x1b, 0x36, - 0x15, 0x59, 0x8d, 0x7c, 0x9e, 0x5e, 0xae, 0x15, 0xe3, 0xfc, 0x46, 0xd1, 0x81, 0x0a, 0xbc, 0x26, - 0x89, 0x5b, 0x5e, 0x85, 0x88, 0xde, 0xab, 0x81, 0xba, 0x2a, 0x0b, 0x70, 0x8a, 0xc3, 0x8f, 0xd0, - 0x5b, 0x5e, 0xbb, 0x91, 0x08, 0x43, 0x99, 0x76, 0x84, 0x66, 0x60, 0x2c, 0xcb, 0xd1, 0xdf, 0x71, - 0x00, 0x75, 0x72, 0x15, 0x0b, 0x71, 0xe3, 0x28, 0xc6, 0x61, 0xf6, 0xec, 0x6d, 0xed, 0x10, 0xae, - 0xf5, 0x34, 0xa7, 0x1d, 0xda, 0x37, 0xfd, 0x58, 0xba, 0x0f, 0xf1, 0xc3, 0x41, 0x0f, 0x36, 0x34, - 0x66, 0x6a, 0xa9, 0x54, 0x48, 0x1c, 0x73, 0x73, 0x9c, 0x6e, 0x6a, 0x61, 0x60, 0x2c, 0xcb, 0xd1, - 0x14, 0x14, 0x49, 0x14, 0x85, 0x91, 0x38, 0x6b, 0xb3, 0x69, 0x7c, 0x99, 0x02, 0x30, 0x87, 0xbb, - 0x3f, 0x2e, 0x40, 0xa9, 0xdb, 0xe9, 0x04, 0xfd, 0x8e, 0x76, 0xae, 0x16, 0x27, 0x27, 0x71, 0xf0, - 0x0b, 0x8f, 0xee, 0x4c, 0x94, 0x3d, 0x00, 0x76, 0x39, 0x61, 0x8b, 0x52, 0x9c, 0x6d, 0xe0, 0xe4, - 0x97, 0xb5, 0x13, 0xb6, 0x4e, 0x22, 0x67, 0x83, 0xdf, 0x32, 0x37, 0xf8, 0x75, 0xdb, 0x9d, 0xd2, - 0xb7, 0xf9, 0x3f, 0x29, 0xc2, 0x29, 0x59, 0x5a, 0x26, 0x74, 0xab, 0x7c, 0xbe, 0x4d, 0xa2, 0x5d, - 0xf4, 0x47, 0x0e, 0x9c, 0xf6, 0xb2, 0xa6, 0x1b, 0x9f, 0x1c, 0xc1, 0x40, 0x6b, 0x5c, 0xa7, 0x67, - 0x72, 0x38, 0xf2, 0x81, 0xbe, 0x24, 0x06, 0xfa, 0x74, 0x1e, 0x4a, 0x17, 0xbb, 0x7b, 0x6e, 0x07, - 0xd0, 0xb3, 0x30, 0x2a, 0xe1, 0xcc, 0xdc, 0xc3, 0x97, 0xb8, 0x32, 0x6e, 0xcf, 0x68, 0x65, 0xd8, - 0xc0, 0xa4, 0x35, 0x13, 0xd2, 0x6c, 0x35, 0xbc, 0x84, 0x68, 0x86, 0x22, 0x55, 0x73, 0x43, 0x2b, - 0xc3, 0x06, 0x26, 0x7a, 0x1c, 0x06, 0x82, 0xb0, 0x4a, 0x96, 0xaa, 0xc2, 0x40, 0x3c, 0x2e, 0xea, - 0x0c, 0x5c, 0x65, 0x50, 0x2c, 0x4a, 0xd1, 0x63, 0xa9, 0x35, 0xae, 0xc8, 0x96, 0xd0, 0x48, 0x9e, - 0x25, 0x0e, 0xfd, 0x3d, 0x07, 0x86, 0x69, 0x8d, 0x8d, 0xdd, 0x16, 0xa1, 0x7b, 0x1b, 0xfd, 0x22, - 0xd5, 0xa3, 0xf9, 0x22, 0x57, 0x25, 0x1b, 0xd3, 0xd4, 0x31, 0xac, 0xe0, 0x6f, 0xbe, 0x3d, 0x35, - 0x24, 0x7f, 0xe0, 0xb4, 0x55, 0x93, 0x8b, 0xf0, 0x60, 0xd7, 0xaf, 0x79, 0x20, 0x57, 0xc0, 0x5f, - 0x83, 0x71, 0xb3, 0x11, 0x07, 0xf2, 0x03, 0xfc, 0x13, 0x6d, 0xd9, 0xf1, 0x7e, 0x09, 0x79, 0x76, - 0xdf, 0xb4, 0x59, 0x35, 0x19, 0xe6, 0xc5, 0xd4, 0x33, 0x27, 0xc3, 0xbc, 0x98, 0x0c, 0xf3, 0xee, - 0x1f, 0x38, 0xe9, 0xd2, 0xd4, 0xd4, 0x3c, 0xba, 0x31, 0xb7, 0xa3, 0x86, 0x10, 0xc4, 0x6a, 0x63, - 0xbe, 0x86, 0x57, 0x30, 0x85, 0xa3, 0x2f, 0x6b, 0xd2, 0x91, 0x56, 0x6b, 0x0b, 0xb7, 0x86, 0x25, - 0x13, 0xbd, 0x41, 0xb8, 0x53, 0xfe, 0x89, 0x02, 0x9c, 0x6d, 0x82, 0xfb, 0xa5, 0x02, 0x3c, 0xbc, - 0xaf, 0xd2, 0x9a, 0xdb, 0x70, 0xe7, 0xbe, 0x37, 0x9c, 0x6e, 0x6b, 0x11, 0x69, 0x85, 0xd7, 0xf0, - 0x8a, 0xf8, 0x5e, 0x6a, 0x5b, 0xc3, 0x1c, 0x8c, 0x65, 0x39, 0x55, 0x1d, 0xb6, 0xc9, 0xee, 0x42, - 0x18, 0x35, 0xbd, 0x44, 0x48, 0x07, 0xa5, 0x3a, 0x2c, 0xcb, 0x02, 0x9c, 0xe2, 0xb8, 0x7f, 0xe4, - 0x40, 0xb6, 0x01, 0xc8, 0x83, 0xf1, 0x76, 0x4c, 0x22, 0xba, 0xa5, 0x96, 0x49, 0x25, 0x22, 0x72, - 0x7a, 0x3e, 0x36, 0xcd, 0xbd, 0xfd, 0xb4, 0x87, 0xd3, 0x95, 0x30, 0x22, 0xd3, 0x3b, 0x4f, 0x4f, - 0x73, 0x8c, 0x65, 0xb2, 0x5b, 0x26, 0x0d, 0x42, 0x69, 0xcc, 0xa2, 0xdb, 0x7b, 0x53, 0xe3, 0xd7, - 0x0c, 0x02, 0x38, 0x43, 0x90, 0xb2, 0x68, 0x79, 0x71, 0x7c, 0x33, 0x8c, 0xaa, 0x82, 0x45, 0xe1, - 0xc0, 0x2c, 0xd6, 0x0d, 0x02, 0x38, 0x43, 0xd0, 0xfd, 0x01, 0x3d, 0x3e, 0xea, 0x5a, 0x2b, 0xfa, - 0x26, 0xd5, 0x7d, 0x28, 0x64, 0xb6, 0x11, 0x6e, 0xce, 0x85, 0x41, 0xe2, 0xf9, 0x01, 0x91, 0xc1, - 0x02, 0x1b, 0x96, 0x74, 0x64, 0x83, 0x76, 0x6a, 0xc3, 0xef, 0x2c, 0xc3, 0x39, 0x6d, 0xa1, 0x3a, - 0xce, 0x66, 0x23, 0xdc, 0xcc, 0x7a, 0x01, 0x29, 0x12, 0x66, 0x25, 0xee, 0x4f, 0x1d, 0x38, 0xd7, - 0x45, 0x19, 0x47, 0x5f, 0x75, 0x60, 0x6c, 0xf3, 0x67, 0xa2, 0x6f, 0x66, 0x33, 0xd0, 0xfb, 0x61, - 0x9c, 0x02, 0xe8, 0x4e, 0x24, 0xe6, 0x66, 0xc1, 0xf4, 0x50, 0xcd, 0x1a, 0xa5, 0x38, 0x83, 0xed, - 0xfe, 0x7a, 0x01, 0x72, 0xb8, 0xa0, 0xa7, 0x60, 0x88, 0x04, 0xd5, 0x56, 0xe8, 0x07, 0x89, 0x10, - 0x46, 0x4a, 0xea, 0x5d, 0x16, 0x70, 0xac, 0x30, 0xc4, 0xf9, 0x43, 0x0c, 0x4c, 0xa1, 0xe3, 0xfc, - 0x21, 0x5a, 0x9e, 0xe2, 0xa0, 0x1a, 0x4c, 0x78, 0xdc, 0xbf, 0xc2, 0xe6, 0x1e, 0x9b, 0xa6, 0x7d, - 0x07, 0x99, 0xa6, 0xa7, 0x99, 0xfb, 0x33, 0x43, 0x02, 0x77, 0x10, 0x45, 0xef, 0x81, 0x91, 0x76, - 0x4c, 0xca, 0xf3, 0xcb, 0x73, 0x11, 0xa9, 0xf2, 0x53, 0xb1, 0xe6, 0xf7, 0xbb, 0x96, 0x16, 0x61, - 0x1d, 0xcf, 0xfd, 0x67, 0x0e, 0x0c, 0xce, 0x7a, 0x95, 0xed, 0x70, 0x6b, 0x8b, 0x0e, 0x45, 0xb5, - 0x1d, 0xa5, 0x86, 0x2d, 0x6d, 0x28, 0xe6, 0x05, 0x1c, 0x2b, 0x0c, 0xb4, 0x01, 0x03, 0x7c, 0xc1, - 0x8b, 0x65, 0xf7, 0x0b, 0x5a, 0x7f, 0x54, 0x1c, 0x0f, 0x9b, 0x0e, 0xed, 0xc4, 0x6f, 0x4c, 0xf3, - 0x38, 0x9e, 0xe9, 0xa5, 0x20, 0x59, 0x8b, 0xca, 0x49, 0xe4, 0x07, 0xb5, 0x59, 0xa0, 0xdb, 0xc5, - 0x02, 0xa3, 0x81, 0x05, 0x2d, 0xda, 0x8d, 0xa6, 0x77, 0x4b, 0xb2, 0x13, 0xe2, 0x47, 0x75, 0x63, - 0x35, 0x2d, 0xc2, 0x3a, 0x9e, 0xfb, 0x87, 0x0e, 0x0c, 0xcf, 0x7a, 0xb1, 0x5f, 0xf9, 0x0b, 0x24, - 0x7c, 0x3e, 0x0c, 0xc5, 0x39, 0xaf, 0x52, 0x27, 0xe8, 0x5a, 0xf6, 0xd0, 0x3b, 0x72, 0xe9, 0x89, - 0x3c, 0x36, 0xea, 0x00, 0xac, 0x73, 0x1a, 0xeb, 0x76, 0x34, 0x76, 0xdf, 0x76, 0x60, 0x7c, 0xae, - 0xe1, 0x93, 0x20, 0x99, 0x23, 0x51, 0xc2, 0x06, 0xae, 0x06, 0x13, 0x15, 0x05, 0x39, 0xcc, 0xd0, - 0xb1, 0xd9, 0x3a, 0x97, 0x21, 0x81, 0x3b, 0x88, 0xa2, 0x2a, 0x9c, 0xe0, 0xb0, 0x74, 0x55, 0x1c, - 0x68, 0xfc, 0x98, 0x75, 0x74, 0xce, 0xa4, 0x80, 0xb3, 0x24, 0xdd, 0x9f, 0x38, 0x70, 0x6e, 0xae, - 0xd1, 0x8e, 0x13, 0x12, 0xdd, 0x10, 0xd2, 0x48, 0xaa, 0xb7, 0xe8, 0xa3, 0x30, 0xd4, 0x94, 0x1e, - 0x5b, 0xe7, 0x2e, 0x13, 0x98, 0xc9, 0x33, 0x8a, 0x4d, 0x1b, 0xb3, 0xb6, 0xf9, 0x32, 0xa9, 0x24, - 0xab, 0x24, 0xf1, 0xd2, 0xf0, 0x82, 0x14, 0x86, 0x15, 0x55, 0xd4, 0x82, 0xfe, 0xb8, 0x45, 0x2a, - 0xf6, 0xa2, 0xbb, 0x64, 0x1f, 0xca, 0x2d, 0x52, 0x49, 0xe5, 0x3a, 0xf3, 0x35, 0x32, 0x4e, 0xee, - 0xff, 0x72, 0xe0, 0x7c, 0x97, 0xfe, 0xae, 0xf8, 0x71, 0x82, 0x5e, 0xea, 0xe8, 0xf3, 0x74, 0x6f, - 0x7d, 0xa6, 0xb5, 0x59, 0x8f, 0x95, 0x40, 0x90, 0x10, 0xad, 0xbf, 0x1f, 0x83, 0xa2, 0x9f, 0x90, - 0xa6, 0x34, 0x43, 0x5b, 0x30, 0x18, 0x75, 0xe9, 0xcb, 0xec, 0x98, 0x8c, 0xf1, 0x5b, 0xa2, 0xfc, - 0x30, 0x67, 0xeb, 0x6e, 0xc3, 0xc0, 0x5c, 0xd8, 0x68, 0x37, 0x83, 0xde, 0x22, 0x65, 0x92, 0xdd, - 0x16, 0xc9, 0xee, 0x91, 0x4c, 0xfd, 0x67, 0x25, 0xd2, 0x70, 0xd4, 0x97, 0x6f, 0x38, 0x72, 0xff, - 0xb9, 0x03, 0x74, 0x55, 0x55, 0x7d, 0xe1, 0x49, 0xe4, 0xe4, 0x38, 0xc3, 0x87, 0x75, 0x72, 0x77, - 0xf6, 0xa6, 0xc6, 0x14, 0xa2, 0x46, 0xff, 0xc3, 0x30, 0x10, 0xb3, 0x23, 0xb9, 0x68, 0xc3, 0x82, - 0xd4, 0x9f, 0xf9, 0x41, 0xfd, 0xce, 0xde, 0x54, 0x4f, 0x61, 0x9b, 0xd3, 0x8a, 0xb6, 0x70, 0x7a, - 0x0a, 0xaa, 0x54, 0xe1, 0x6b, 0x92, 0x38, 0xf6, 0x6a, 0xf2, 0x84, 0xa7, 0x14, 0xbe, 0x55, 0x0e, - 0xc6, 0xb2, 0xdc, 0xfd, 0x8a, 0x03, 0x63, 0x6a, 0xf3, 0xa2, 0xea, 0x3b, 0xba, 0xaa, 0x6f, 0x73, - 0x7c, 0xa6, 0x3c, 0xdc, 0x45, 0xe2, 0x88, 0x8d, 0x7c, 0xff, 0x5d, 0xf0, 0xdd, 0x30, 0x5a, 0x25, - 0x2d, 0x12, 0x54, 0x49, 0x50, 0xa1, 0xc7, 0x6f, 0x3a, 0x43, 0x86, 0x67, 0x27, 0xe8, 0x79, 0x73, - 0x5e, 0x83, 0x63, 0x03, 0xcb, 0xfd, 0x96, 0x03, 0x0f, 0x2a, 0x72, 0x65, 0x92, 0x60, 0x92, 0x44, - 0xbb, 0x2a, 0x4c, 0xf3, 0x60, 0xbb, 0xd5, 0x0d, 0xaa, 0xff, 0x26, 0x11, 0x67, 0x7e, 0xb8, 0xed, - 0x6a, 0x84, 0x6b, 0xcb, 0x8c, 0x08, 0x96, 0xd4, 0xdc, 0x5f, 0xed, 0x83, 0xd3, 0x7a, 0x23, 0x95, - 0x80, 0xf9, 0xa4, 0x03, 0xa0, 0x46, 0x80, 0x6e, 0xc8, 0x7d, 0x76, 0x7c, 0x57, 0xc6, 0x97, 0x4a, - 0x45, 0x90, 0x02, 0xc7, 0x58, 0x63, 0x8b, 0x5e, 0x80, 0xd1, 0x1d, 0xba, 0x28, 0xc8, 0x2a, 0x55, - 0x17, 0xe2, 0x52, 0x1f, 0x6b, 0xc6, 0x54, 0xde, 0xc7, 0xbc, 0x9e, 0xe2, 0xa5, 0xe6, 0x00, 0x0d, - 0x18, 0x63, 0x83, 0x14, 0x3d, 0xe9, 0x8c, 0x45, 0xfa, 0x27, 0x11, 0x36, 0xf1, 0x0f, 0x59, 0xec, - 0x63, 0xf6, 0xab, 0xcf, 0x9e, 0xbc, 0xbd, 0x37, 0x35, 0x66, 0x80, 0xb0, 0xd9, 0x08, 0xf7, 0x05, - 0x60, 0x63, 0xe1, 0x07, 0x6d, 0xb2, 0x16, 0xa0, 0x47, 0xa5, 0x8d, 0x8e, 0xfb, 0x55, 0x94, 0xe4, - 0xd0, 0xed, 0x74, 0xf4, 0x2c, 0xbb, 0xe5, 0xf9, 0x0d, 0x16, 0xbe, 0x48, 0xb1, 0xd4, 0x59, 0x76, - 0x81, 0x41, 0xb1, 0x28, 0x75, 0xa7, 0x61, 0x70, 0x8e, 0xf6, 0x9d, 0x44, 0x94, 0xae, 0x1e, 0x75, - 0x3c, 0x66, 0x44, 0x1d, 0xcb, 0xe8, 0xe2, 0x0d, 0x38, 0x33, 0x17, 0x11, 0x2f, 0x21, 0xe5, 0x67, - 0x66, 0xdb, 0x95, 0x6d, 0x92, 0xf0, 0xd0, 0xae, 0x18, 0xbd, 0x0f, 0xc6, 0x42, 0xb6, 0x65, 0xac, - 0x84, 0x95, 0x6d, 0x3f, 0xa8, 0x09, 0x93, 0xeb, 0x19, 0x41, 0x65, 0x6c, 0x4d, 0x2f, 0xc4, 0x26, - 0xae, 0xfb, 0xef, 0x0b, 0x30, 0x3a, 0x17, 0x85, 0x81, 0x14, 0x8b, 0xc7, 0xb0, 0x95, 0x25, 0xc6, - 0x56, 0x66, 0xc1, 0xdd, 0xa9, 0xb7, 0xbf, 0xdb, 0x76, 0x86, 0x5e, 0x57, 0x22, 0xb2, 0xcf, 0xd6, - 0x11, 0xc4, 0xe0, 0xcb, 0x68, 0xa7, 0x1f, 0xdb, 0x14, 0xa0, 0xee, 0x7f, 0x70, 0x60, 0x42, 0x47, - 0x3f, 0x86, 0x1d, 0x34, 0x36, 0x77, 0xd0, 0xab, 0x76, 0xfb, 0xdb, 0x65, 0xdb, 0x7c, 0x7b, 0xd0, - 0xec, 0x27, 0xf3, 0x75, 0x7f, 0xcd, 0x81, 0xd1, 0x9b, 0x1a, 0x40, 0x74, 0xd6, 0xb6, 0x12, 0xf3, - 0x0e, 0x29, 0x66, 0x74, 0xe8, 0x9d, 0xcc, 0x6f, 0x6c, 0xb4, 0x84, 0xca, 0xfd, 0xb8, 0x52, 0x27, - 0xd5, 0x76, 0x43, 0x6e, 0xdf, 0x6a, 0x48, 0xcb, 0x02, 0x8e, 0x15, 0x06, 0x7a, 0x09, 0x4e, 0x56, - 0xc2, 0xa0, 0xd2, 0x8e, 0x22, 0x12, 0x54, 0x76, 0xd7, 0xd9, 0x1d, 0x09, 0xb1, 0x21, 0x4e, 0x8b, - 0x6a, 0x27, 0xe7, 0xb2, 0x08, 0x77, 0xf2, 0x80, 0xb8, 0x93, 0x10, 0x77, 0x16, 0xc4, 0x74, 0xcb, - 0x12, 0x07, 0x2e, 0xcd, 0x59, 0xc0, 0xc0, 0x58, 0x96, 0xa3, 0x6b, 0x70, 0x2e, 0x4e, 0xbc, 0x28, - 0xf1, 0x83, 0xda, 0x3c, 0xf1, 0xaa, 0x0d, 0x3f, 0xa0, 0x47, 0x89, 0x30, 0xa8, 0x72, 0x57, 0x62, - 0xdf, 0xec, 0xf9, 0xdb, 0x7b, 0x53, 0xe7, 0xca, 0xf9, 0x28, 0xb8, 0x5b, 0x5d, 0xf4, 0x61, 0x98, - 0x14, 0xee, 0x88, 0xad, 0x76, 0xe3, 0xb9, 0x70, 0x33, 0xbe, 0xe2, 0xc7, 0xf4, 0x1c, 0xbf, 0xe2, - 0x37, 0xfd, 0x84, 0x39, 0x0c, 0x8b, 0xb3, 0x17, 0x6e, 0xef, 0x4d, 0x4d, 0x96, 0xbb, 0x62, 0xe1, - 0x7d, 0x28, 0x20, 0x0c, 0x67, 0xb9, 0xf0, 0xeb, 0xa0, 0x3d, 0xc8, 0x68, 0x4f, 0xde, 0xde, 0x9b, - 0x3a, 0xbb, 0x90, 0x8b, 0x81, 0xbb, 0xd4, 0xa4, 0x5f, 0x30, 0xf1, 0x9b, 0xe4, 0xd5, 0x30, 0x20, - 0x2c, 0x50, 0x45, 0xfb, 0x82, 0x1b, 0x02, 0x8e, 0x15, 0x06, 0x7a, 0x39, 0x9d, 0x89, 0x74, 0xb9, - 0x88, 0x80, 0x93, 0x83, 0x4b, 0x38, 0x76, 0x34, 0xb9, 0xa1, 0x51, 0x62, 0x91, 0x94, 0x06, 0x6d, - 0xf4, 0x29, 0x07, 0x46, 0xe3, 0x24, 0x54, 0xf7, 0x1a, 0x44, 0xc4, 0x89, 0x85, 0x69, 0x5f, 0xd6, - 0xa8, 0x72, 0xc5, 0x47, 0x87, 0x60, 0x83, 0x2b, 0x7a, 0x27, 0x0c, 0xcb, 0x09, 0x1c, 0x97, 0x46, - 0x98, 0xae, 0xc4, 0x8e, 0x71, 0x72, 0x7e, 0xc7, 0x38, 0x2d, 0xa7, 0xaa, 0xec, 0xcd, 0x3a, 0x09, - 0x58, 0xcc, 0xad, 0xa6, 0xca, 0xde, 0xa8, 0x93, 0x00, 0xb3, 0x12, 0xf7, 0xc7, 0x7d, 0x80, 0x3a, - 0x05, 0x1f, 0x5a, 0x86, 0x01, 0xaf, 0x92, 0xf8, 0x3b, 0x32, 0xde, 0xf0, 0xd1, 0x3c, 0xa5, 0x80, - 0x0f, 0x20, 0x26, 0x5b, 0x84, 0xce, 0x7b, 0x92, 0x4a, 0xcb, 0x19, 0x56, 0x15, 0x0b, 0x12, 0x28, - 0x84, 0x93, 0x0d, 0x2f, 0x4e, 0x64, 0x0b, 0xab, 0xf4, 0x43, 0x8a, 0xed, 0xe2, 0xe7, 0x7b, 0xfb, - 0x54, 0xb4, 0xc6, 0xec, 0x19, 0xba, 0x1e, 0x57, 0xb2, 0x84, 0x70, 0x27, 0x6d, 0xf4, 0x71, 0xa6, - 0x5d, 0x71, 0xd5, 0x57, 0xaa, 0x35, 0xcb, 0x56, 0x34, 0x0f, 0x4e, 0xd3, 0xd0, 0xac, 0x04, 0x1b, - 0xac, 0xb1, 0x44, 0x17, 0x61, 0x98, 0xad, 0x1b, 0x52, 0x25, 0x7c, 0xf5, 0xf7, 0xa5, 0x4a, 0x70, - 0x59, 0x16, 0xe0, 0x14, 0x47, 0xd3, 0x32, 0xf8, 0x82, 0xef, 0xa2, 0x65, 0xa0, 0x67, 0xa1, 0xd8, - 0xaa, 0x7b, 0xb1, 0x8c, 0x61, 0x77, 0xa5, 0xd4, 0x5e, 0xa7, 0x40, 0x26, 0x9a, 0xb4, 0x6f, 0xc9, - 0x80, 0x98, 0x57, 0x70, 0xff, 0x05, 0xc0, 0xe0, 0xfc, 0xcc, 0xe2, 0x86, 0x17, 0x6f, 0xf7, 0x70, - 0x06, 0xa2, 0xcb, 0x50, 0x28, 0xab, 0x59, 0x41, 0x2a, 0x95, 0x58, 0xac, 0x30, 0x50, 0x00, 0x03, - 0x7e, 0x40, 0x25, 0x4f, 0x69, 0xdc, 0x96, 0x9f, 0x41, 0x9d, 0xe7, 0x98, 0x21, 0x68, 0x89, 0x51, - 0xc7, 0x82, 0x0b, 0x7a, 0x1d, 0x86, 0x3d, 0x79, 0x85, 0x48, 0xec, 0xff, 0xcb, 0x36, 0x0c, 0xe8, - 0x82, 0xa4, 0x1e, 0xc2, 0x24, 0x40, 0x38, 0x65, 0x88, 0x3e, 0xe1, 0xc0, 0x88, 0xec, 0x3a, 0x26, - 0x5b, 0xc2, 0xb7, 0xbd, 0x6a, 0xaf, 0xcf, 0x98, 0x6c, 0xf1, 0xf8, 0x16, 0x0d, 0x80, 0x75, 0x96, - 0x1d, 0x67, 0xa6, 0x62, 0x2f, 0x67, 0x26, 0x74, 0x13, 0x86, 0x6f, 0xfa, 0x49, 0x9d, 0xed, 0xf0, - 0xc2, 0xa7, 0xb6, 0x70, 0xef, 0xad, 0xa6, 0xe4, 0xd2, 0x11, 0xbb, 0x21, 0x19, 0xe0, 0x94, 0x17, - 0x5d, 0x0e, 0xf4, 0x07, 0xbb, 0x82, 0xc5, 0xf6, 0x86, 0x61, 0xb3, 0x02, 0x2b, 0xc0, 0x29, 0x0e, - 0x1d, 0xe2, 0x51, 0xfa, 0xab, 0x4c, 0x5e, 0x69, 0x53, 0xd1, 0x22, 0x62, 0x16, 0x2d, 0xcc, 0x2b, - 0x49, 0x91, 0x0f, 0xd6, 0x0d, 0x8d, 0x07, 0x36, 0x38, 0x2a, 0xd1, 0x39, 0xdc, 0x4d, 0x74, 0xa2, - 0xd7, 0xf9, 0x19, 0x8e, 0x1f, 0x26, 0xc4, 0x6e, 0xb0, 0x62, 0xe7, 0x7c, 0xc3, 0x69, 0xf2, 0x6b, - 0x0d, 0xe9, 0x6f, 0xac, 0xf1, 0xa3, 0x12, 0x23, 0x0c, 0x2e, 0xdf, 0xf2, 0x13, 0x71, 0x19, 0x43, - 0x49, 0x8c, 0x35, 0x06, 0xc5, 0xa2, 0x94, 0xc7, 0x6e, 0xd0, 0x49, 0x10, 0x8b, 0x5d, 0x40, 0x8b, - 0xdd, 0x60, 0x60, 0x2c, 0xcb, 0xd1, 0xdf, 0x75, 0xa0, 0x58, 0x0f, 0xc3, 0xed, 0xb8, 0x34, 0xc6, - 0x26, 0x87, 0x05, 0x9d, 0x5a, 0x48, 0x9c, 0xe9, 0x2b, 0x94, 0xac, 0x79, 0xbd, 0xac, 0xc8, 0x60, - 0x77, 0xf6, 0xa6, 0xc6, 0x57, 0xfc, 0x2d, 0x52, 0xd9, 0xad, 0x34, 0x08, 0x83, 0xbc, 0xf9, 0xb6, - 0x06, 0xb9, 0xbc, 0x43, 0x82, 0x04, 0xf3, 0x56, 0x4d, 0x7e, 0xde, 0x01, 0x48, 0x09, 0xe5, 0x38, - 0x49, 0x89, 0x19, 0x56, 0x60, 0xe1, 0x40, 0x6d, 0x34, 0x4d, 0xf7, 0xba, 0xfe, 0x2b, 0x07, 0x46, - 0x68, 0xe7, 0xa4, 0x08, 0x7c, 0x1c, 0x06, 0x12, 0x2f, 0xaa, 0x11, 0xe9, 0x28, 0x50, 0x9f, 0x63, - 0x83, 0x41, 0xb1, 0x28, 0x45, 0x01, 0x14, 0x13, 0x2f, 0xde, 0x96, 0x6a, 0xfc, 0x92, 0xb5, 0x21, - 0x4e, 0x35, 0x78, 0xfa, 0x2b, 0xc6, 0x9c, 0x0d, 0x7a, 0x02, 0x86, 0xe8, 0xd6, 0xb1, 0xe0, 0xc5, - 0x32, 0x76, 0x67, 0x94, 0x0a, 0xf1, 0x05, 0x01, 0xc3, 0xaa, 0xd4, 0xfd, 0xf5, 0x02, 0xf4, 0xcf, - 0xf3, 0x03, 0xdd, 0x40, 0x1c, 0xb6, 0xa3, 0x0a, 0x11, 0x8a, 0xbd, 0x85, 0x39, 0x4d, 0xe9, 0x96, - 0x19, 0x4d, 0xed, 0x48, 0xc5, 0x7e, 0x63, 0xc1, 0x0b, 0x7d, 0xd9, 0x81, 0xf1, 0x24, 0xf2, 0x82, - 0x78, 0x8b, 0xb9, 0x64, 0xfc, 0x30, 0x10, 0x43, 0x64, 0x61, 0x16, 0x6e, 0x18, 0x74, 0xcb, 0x09, - 0x69, 0xa5, 0x9e, 0x21, 0xb3, 0x0c, 0x67, 0xda, 0xe0, 0xfe, 0x86, 0x03, 0x90, 0xb6, 0x1e, 0x7d, - 0xce, 0x81, 0x31, 0x4f, 0x8f, 0x19, 0x15, 0x63, 0xb4, 0x66, 0xcf, 0x7f, 0xcb, 0xc8, 0x72, 0x5b, - 0x86, 0x01, 0xc2, 0x26, 0x63, 0xf7, 0x3d, 0x50, 0x64, 0xab, 0x83, 0x1d, 0x7a, 0x84, 0xed, 0x3b, - 0x6b, 0xec, 0x92, 0x36, 0x71, 0xac, 0x30, 0xdc, 0x97, 0x60, 0xfc, 0xf2, 0x2d, 0x52, 0x69, 0x27, - 0x61, 0xc4, 0x2d, 0xff, 0x5d, 0xee, 0x08, 0x39, 0x87, 0xba, 0x23, 0xf4, 0x5d, 0x07, 0x46, 0xb4, - 0x00, 0x42, 0xba, 0x53, 0xd7, 0xe6, 0xca, 0xdc, 0xc0, 0x21, 0x86, 0x6a, 0xd9, 0x4a, 0x88, 0x22, - 0x27, 0x99, 0x6e, 0x23, 0x0a, 0x84, 0x53, 0x86, 0x77, 0x09, 0xf0, 0x73, 0x7f, 0xdf, 0x81, 0x33, - 0xb9, 0xd1, 0x8e, 0xf7, 0xb9, 0xd9, 0x86, 0x93, 0xbd, 0xd0, 0x83, 0x93, 0xfd, 0xb7, 0x1d, 0x48, - 0x29, 0x51, 0x51, 0xb4, 0x99, 0xb6, 0x5c, 0x13, 0x45, 0x82, 0x93, 0x28, 0x45, 0xaf, 0xc3, 0x39, - 0xf3, 0x0b, 0x1e, 0xd2, 0xdf, 0xc2, 0x0f, 0xa7, 0xf9, 0x94, 0x70, 0x37, 0x16, 0xee, 0xd7, 0x1d, - 0x28, 0x2e, 0x7a, 0xed, 0x1a, 0xe9, 0xc9, 0x5c, 0x46, 0xe5, 0x58, 0x44, 0xbc, 0x46, 0x22, 0x8f, - 0x0e, 0x42, 0x8e, 0x61, 0x01, 0xc3, 0xaa, 0x14, 0xcd, 0xc0, 0x70, 0xd8, 0x22, 0x86, 0x8f, 0xf0, - 0x51, 0x39, 0x7a, 0x6b, 0xb2, 0x80, 0x6e, 0x3b, 0x8c, 0xbb, 0x82, 0xe0, 0xb4, 0x96, 0xfb, 0x8d, - 0x01, 0x18, 0xd1, 0xee, 0xc5, 0x50, 0x5d, 0x20, 0x22, 0xad, 0x30, 0xab, 0x2f, 0xd3, 0x09, 0x83, - 0x59, 0x09, 0x5d, 0x83, 0x11, 0xd9, 0xf1, 0x63, 0x2e, 0xb6, 0x8c, 0x35, 0x88, 0x05, 0x1c, 0x2b, - 0x0c, 0x34, 0x05, 0xc5, 0x2a, 0x69, 0x25, 0x75, 0xd6, 0xbc, 0x7e, 0x1e, 0x1c, 0x38, 0x4f, 0x01, - 0x98, 0xc3, 0x29, 0xc2, 0x16, 0x49, 0x2a, 0x75, 0x66, 0x19, 0x16, 0xd1, 0x83, 0x0b, 0x14, 0x80, - 0x39, 0x3c, 0xc7, 0x8b, 0x59, 0x3c, 0x7a, 0x2f, 0xe6, 0x80, 0x65, 0x2f, 0x26, 0x6a, 0xc1, 0xa9, - 0x38, 0xae, 0xaf, 0x47, 0xfe, 0x8e, 0x97, 0x90, 0x74, 0xf6, 0x0d, 0x1e, 0x84, 0xcf, 0x39, 0x76, - 0x53, 0xbd, 0x7c, 0x25, 0x4b, 0x05, 0xe7, 0x91, 0x46, 0x65, 0x38, 0xe3, 0x07, 0x31, 0xa9, 0xb4, - 0x23, 0xb2, 0x54, 0x0b, 0xc2, 0x88, 0x5c, 0x09, 0x63, 0x4a, 0x4e, 0xdc, 0xb3, 0x55, 0xf1, 0xb4, - 0x4b, 0x79, 0x48, 0x38, 0xbf, 0x2e, 0x5a, 0x84, 0x93, 0x55, 0x3f, 0xf6, 0x36, 0x1b, 0xa4, 0xdc, - 0xde, 0x6c, 0x86, 0xfc, 0x68, 0x3e, 0xcc, 0x08, 0x3e, 0x28, 0xed, 0x48, 0xf3, 0x59, 0x04, 0xdc, - 0x59, 0x07, 0x3d, 0x0b, 0xa3, 0xb1, 0x1f, 0xd4, 0x1a, 0x64, 0x36, 0xf2, 0x82, 0x4a, 0x5d, 0x5c, - 0xd0, 0x55, 0xf6, 0xf6, 0xb2, 0x56, 0x86, 0x0d, 0x4c, 0xb6, 0xe6, 0x79, 0x9d, 0x8c, 0x36, 0x28, - 0xb0, 0x45, 0x29, 0x9a, 0x81, 0x13, 0xb2, 0x0f, 0xe5, 0x6d, 0xbf, 0xb5, 0xb1, 0x52, 0x66, 0x5a, - 0xe1, 0x50, 0x1a, 0x2d, 0xb4, 0x64, 0x16, 0xe3, 0x2c, 0xbe, 0xfb, 0x43, 0x07, 0x46, 0xf5, 0x70, - 0x78, 0xaa, 0xac, 0x43, 0x7d, 0x7e, 0xa1, 0xcc, 0xb7, 0x13, 0x7b, 0x4a, 0xc3, 0x15, 0x45, 0x33, - 0x3d, 0x6f, 0xa7, 0x30, 0xac, 0xf1, 0xec, 0xe1, 0x72, 0xfb, 0xa3, 0x50, 0xdc, 0x0a, 0xa9, 0x4e, - 0xd3, 0x67, 0xda, 0xfa, 0x17, 0x28, 0x10, 0xf3, 0x32, 0xf7, 0xbf, 0x39, 0x70, 0x36, 0x3f, 0xd2, - 0xff, 0x67, 0xa1, 0x93, 0x97, 0x00, 0x68, 0x57, 0x8c, 0x7d, 0x41, 0x4b, 0x6f, 0x21, 0x4b, 0xb0, - 0x86, 0xd5, 0x5b, 0xb7, 0xff, 0x65, 0x01, 0x34, 0x9e, 0xe8, 0x0b, 0x0e, 0x8c, 0x51, 0xb6, 0xcb, - 0xd1, 0xa6, 0xd1, 0xdb, 0x35, 0x3b, 0xbd, 0x55, 0x64, 0x53, 0x97, 0x86, 0x01, 0xc6, 0x26, 0x73, - 0xf4, 0x4e, 0x18, 0xf6, 0xaa, 0xd5, 0x88, 0xc4, 0xb1, 0x72, 0x0e, 0x32, 0x83, 0xd7, 0x8c, 0x04, - 0xe2, 0xb4, 0x9c, 0xca, 0xe1, 0x7a, 0x75, 0x2b, 0xa6, 0xa2, 0x4d, 0xc8, 0x7e, 0x25, 0x87, 0x29, - 0x13, 0x0a, 0xc7, 0x0a, 0x03, 0x5d, 0x87, 0xb3, 0x55, 0x2f, 0xf1, 0xb8, 0x0a, 0x48, 0xa2, 0xf5, - 0x28, 0x4c, 0x48, 0x85, 0xed, 0x1b, 0x3c, 0x88, 0xf5, 0x82, 0xa8, 0x7b, 0x76, 0x3e, 0x17, 0x0b, - 0x77, 0xa9, 0xed, 0xfe, 0x4a, 0x3f, 0x98, 0x7d, 0x42, 0x55, 0x38, 0xb1, 0x1d, 0x6d, 0xce, 0xb1, - 0x98, 0x8d, 0xc3, 0xc4, 0x4e, 0xb0, 0x98, 0x86, 0x65, 0x93, 0x02, 0xce, 0x92, 0x14, 0x5c, 0x96, - 0xc9, 0x6e, 0xe2, 0x6d, 0x1e, 0x3a, 0x72, 0x62, 0xd9, 0xa4, 0x80, 0xb3, 0x24, 0xd1, 0x7b, 0x60, - 0x64, 0x3b, 0xda, 0x94, 0xbb, 0x47, 0x36, 0x0c, 0x67, 0x39, 0x2d, 0xc2, 0x3a, 0x1e, 0xfd, 0x34, - 0xdb, 0xd1, 0x26, 0xdd, 0xb0, 0x65, 0x12, 0x09, 0xf5, 0x69, 0x96, 0x05, 0x1c, 0x2b, 0x0c, 0xd4, - 0x02, 0xb4, 0x2d, 0x47, 0x4f, 0x45, 0xa8, 0x88, 0x4d, 0xae, 0xf7, 0x00, 0x17, 0x76, 0x35, 0x60, - 0xb9, 0x83, 0x0e, 0xce, 0xa1, 0x8d, 0x5e, 0x80, 0x73, 0xdb, 0xd1, 0xa6, 0xd0, 0x63, 0xd6, 0x23, - 0x3f, 0xa8, 0xf8, 0x2d, 0x23, 0x61, 0xc4, 0x94, 0x68, 0xee, 0xb9, 0xe5, 0x7c, 0x34, 0xdc, 0xad, - 0xbe, 0xfb, 0x3b, 0xfd, 0xc0, 0xae, 0xba, 0x52, 0x31, 0xdd, 0x24, 0x49, 0x3d, 0xac, 0x66, 0x55, - 0xb3, 0x55, 0x06, 0xc5, 0xa2, 0x54, 0x06, 0xc0, 0x16, 0xba, 0x04, 0xc0, 0xde, 0x84, 0xc1, 0x3a, - 0xf1, 0xaa, 0x24, 0x92, 0xc6, 0xcd, 0x15, 0x3b, 0x97, 0x73, 0xaf, 0x30, 0xa2, 0xa9, 0x85, 0x80, - 0xff, 0x8e, 0xb1, 0xe4, 0x86, 0xde, 0x0b, 0xe3, 0x54, 0xc7, 0x0a, 0xdb, 0x89, 0xf4, 0x4f, 0x70, - 0xe3, 0x26, 0xdb, 0xec, 0x37, 0x8c, 0x12, 0x9c, 0xc1, 0x44, 0xf3, 0x30, 0x21, 0x7c, 0x09, 0xca, - 0x68, 0x2a, 0x06, 0x56, 0x65, 0xf2, 0x28, 0x67, 0xca, 0x71, 0x47, 0x0d, 0x16, 0xc0, 0x18, 0x56, - 0xb9, 0x3b, 0x59, 0x0f, 0x60, 0x0c, 0xab, 0xbb, 0x98, 0x95, 0xa0, 0x57, 0x61, 0x88, 0xfe, 0x5d, - 0x88, 0xc2, 0xa6, 0x30, 0x1b, 0xad, 0xdb, 0x19, 0x1d, 0xca, 0x43, 0x1c, 0x62, 0x99, 0xee, 0x39, - 0x2b, 0xb8, 0x60, 0xc5, 0x8f, 0x1e, 0xa5, 0xf4, 0xed, 0xf2, 0x3a, 0x89, 0xfc, 0xad, 0x5d, 0xa6, - 0xcf, 0x0c, 0xa5, 0x47, 0xa9, 0xa5, 0x0e, 0x0c, 0x9c, 0x53, 0xcb, 0xfd, 0x42, 0x01, 0x46, 0xf5, - 0x1b, 0xd3, 0x77, 0x8b, 0x8a, 0x8e, 0xd3, 0x49, 0xc1, 0x0f, 0xce, 0x57, 0x2c, 0x74, 0xfb, 0x6e, - 0x13, 0xa2, 0x0e, 0xfd, 0x5e, 0x5b, 0x28, 0xb2, 0x56, 0xec, 0x73, 0xac, 0xc7, 0xed, 0xa4, 0xce, - 0xaf, 0xd6, 0xb1, 0x78, 0x65, 0xc6, 0xc1, 0xfd, 0x74, 0x1f, 0x0c, 0xc9, 0x42, 0xf4, 0x29, 0x07, - 0x20, 0x8d, 0x1b, 0x13, 0xa2, 0x74, 0xdd, 0x46, 0x50, 0x91, 0x1e, 0xf2, 0xa6, 0x99, 0xf9, 0x15, - 0x1c, 0x6b, 0x7c, 0x51, 0x02, 0x03, 0x21, 0x6d, 0xdc, 0x25, 0x7b, 0xb7, 0xfe, 0xd7, 0x28, 0xe3, - 0x4b, 0x8c, 0x7b, 0x6a, 0xd1, 0x63, 0x30, 0x2c, 0x78, 0xd1, 0xc3, 0xe9, 0xa6, 0x0c, 0x67, 0xb4, - 0x67, 0xfd, 0x56, 0x11, 0x92, 0xe9, 0x59, 0x53, 0x81, 0x70, 0xca, 0xd0, 0x7d, 0x1a, 0xc6, 0xcd, - 0xc5, 0x40, 0x0f, 0x2b, 0x9b, 0xbb, 0x09, 0xe1, 0xa6, 0x90, 0x51, 0x7e, 0x58, 0x99, 0xa5, 0x00, - 0xcc, 0xe1, 0xee, 0x0f, 0x1c, 0x80, 0x54, 0xbc, 0xf4, 0xe0, 0x7d, 0x78, 0x54, 0xb7, 0xe3, 0x75, - 0x3b, 0x11, 0x7e, 0x1c, 0x86, 0xd9, 0x3f, 0x6c, 0xa1, 0xf7, 0xd9, 0x0a, 0x3e, 0x48, 0xdb, 0x29, - 0x96, 0x3a, 0xd3, 0x35, 0xae, 0x4b, 0x46, 0x38, 0xe5, 0xe9, 0x86, 0x30, 0x91, 0xc5, 0x46, 0x1f, - 0x82, 0xd1, 0x58, 0x6e, 0xab, 0xe9, 0xfd, 0xbf, 0x1e, 0xb7, 0x5f, 0xee, 0xfa, 0xd3, 0xaa, 0x63, - 0x83, 0x98, 0xbb, 0x06, 0x03, 0x56, 0x87, 0xd0, 0xfd, 0x8e, 0x03, 0xc3, 0xcc, 0xfb, 0x5a, 0x8b, - 0xbc, 0x66, 0x5a, 0xa5, 0x6f, 0x9f, 0x51, 0x8f, 0x61, 0x90, 0x9b, 0x0f, 0x64, 0xd4, 0x92, 0x05, - 0x29, 0xc3, 0x93, 0xf5, 0xa5, 0x52, 0x86, 0xdb, 0x29, 0x62, 0x2c, 0x39, 0xb9, 0x9f, 0x29, 0xc0, - 0xc0, 0x52, 0xd0, 0x6a, 0xff, 0xa5, 0x4f, 0x18, 0xb7, 0x0a, 0xfd, 0x4b, 0x09, 0x69, 0x9a, 0x79, - 0x0d, 0x47, 0x67, 0x1f, 0xd3, 0x73, 0x1a, 0x96, 0xcc, 0x9c, 0x86, 0xd8, 0xbb, 0x29, 0x83, 0xfa, - 0x84, 0xf9, 0x3a, 0xbd, 0x03, 0xf9, 0x14, 0x0c, 0xaf, 0x78, 0x9b, 0xa4, 0xb1, 0x4c, 0x76, 0xd9, - 0x8d, 0x45, 0x1e, 0x60, 0xe2, 0xa4, 0x36, 0x07, 0x23, 0x18, 0x64, 0x1e, 0xc6, 0x19, 0xb6, 0x5a, - 0x0c, 0xf4, 0x44, 0x42, 0xd2, 0xa4, 0x50, 0x8e, 0x79, 0x22, 0xd1, 0x12, 0x42, 0x69, 0x58, 0xee, - 0x34, 0x8c, 0xa4, 0x54, 0x7a, 0xe0, 0xfa, 0xd3, 0x02, 0x8c, 0x19, 0x56, 0x78, 0xc3, 0x37, 0xe9, - 0xdc, 0xd5, 0x37, 0x69, 0xf8, 0x0a, 0x0b, 0xf7, 0xdb, 0x57, 0xd8, 0x77, 0xfc, 0xbe, 0x42, 0xf3, - 0x23, 0xf5, 0xf7, 0xf4, 0x91, 0x1a, 0xd0, 0xbf, 0xe2, 0x07, 0xdb, 0xbd, 0xc9, 0x99, 0xb8, 0x12, - 0xb6, 0x3a, 0xe4, 0x4c, 0x99, 0x02, 0x31, 0x2f, 0x93, 0x9a, 0x4b, 0x5f, 0xbe, 0xe6, 0xe2, 0x7e, - 0xca, 0x81, 0xd1, 0x55, 0x2f, 0xf0, 0xb7, 0x48, 0x9c, 0xb0, 0x79, 0x95, 0x1c, 0xe9, 0xcd, 0xb5, - 0xd1, 0x2e, 0x39, 0x18, 0xde, 0x74, 0xe0, 0xe4, 0x2a, 0x69, 0x86, 0xfe, 0xab, 0x5e, 0x1a, 0x33, - 0x4b, 0xdb, 0x5e, 0xf7, 0x13, 0x11, 0x22, 0xa8, 0xda, 0x7e, 0xc5, 0x4f, 0x30, 0x85, 0xdf, 0xc5, - 0xc4, 0xcc, 0xee, 0x84, 0xd0, 0x03, 0x9a, 0x76, 0x9b, 0x32, 0x8d, 0x86, 0x95, 0x05, 0x38, 0xc5, - 0x71, 0x7f, 0xd7, 0x81, 0x41, 0xde, 0x08, 0x15, 0x66, 0xec, 0x74, 0xa1, 0x5d, 0x87, 0x22, 0xab, - 0x27, 0x66, 0xf5, 0xa2, 0x05, 0xf5, 0x87, 0x92, 0xe3, 0x6b, 0x90, 0xfd, 0x8b, 0x39, 0x03, 0x76, - 0x6c, 0xf1, 0x6e, 0xcd, 0xa8, 0x70, 0xe1, 0xf4, 0xd8, 0xc2, 0xa0, 0x58, 0x94, 0xba, 0xdf, 0xe8, - 0x83, 0x21, 0x95, 0x7a, 0x8c, 0x25, 0x86, 0x08, 0x82, 0x30, 0xf1, 0x78, 0x18, 0x06, 0x97, 0xd5, - 0x1f, 0xb2, 0x97, 0xfa, 0x6c, 0x7a, 0x26, 0xa5, 0xce, 0x5d, 0x8b, 0xea, 0x10, 0xaa, 0x95, 0x60, - 0xbd, 0x11, 0xe8, 0x63, 0x30, 0xd0, 0xa0, 0xd2, 0x47, 0x8a, 0xee, 0xeb, 0x16, 0x9b, 0xc3, 0xc4, - 0x9a, 0x68, 0x89, 0x1a, 0x21, 0x0e, 0xc4, 0x82, 0xeb, 0xe4, 0xfb, 0x61, 0x22, 0xdb, 0xea, 0xbb, - 0x5d, 0xf6, 0x1c, 0xd6, 0xaf, 0x8a, 0xfe, 0x55, 0x21, 0x3d, 0x0f, 0x5e, 0xd5, 0x7d, 0x1e, 0x46, - 0x56, 0x49, 0x12, 0xf9, 0x15, 0x46, 0xe0, 0x6e, 0x93, 0xab, 0x27, 0xfd, 0xe1, 0xb3, 0x6c, 0xb2, - 0x52, 0x9a, 0x31, 0x7a, 0x1d, 0xa0, 0x15, 0x85, 0xf4, 0xfc, 0x4a, 0xda, 0xf2, 0x63, 0x5b, 0xd0, - 0x87, 0xd7, 0x15, 0x4d, 0xee, 0x0d, 0x4f, 0x7f, 0x63, 0x8d, 0x9f, 0xfb, 0x22, 0x14, 0x57, 0xdb, - 0x09, 0xb9, 0xd5, 0x83, 0xc4, 0x3a, 0x68, 0xf6, 0x03, 0xf7, 0x43, 0x30, 0xca, 0x68, 0x5f, 0x09, - 0x1b, 0x74, 0x5b, 0xa5, 0x43, 0xd3, 0xa4, 0xbf, 0xb3, 0xfe, 0x0a, 0x86, 0x84, 0x79, 0x19, 0x5d, - 0x32, 0xf5, 0xb0, 0x51, 0x55, 0x37, 0xc1, 0xd4, 0x84, 0xb8, 0xc2, 0xa0, 0x58, 0x94, 0xba, 0x9f, - 0x2c, 0xc0, 0x08, 0xab, 0x28, 0xc4, 0xcd, 0x2e, 0x0c, 0xd6, 0x39, 0x1f, 0x31, 0x86, 0x16, 0xe2, - 0xcb, 0xf4, 0xd6, 0x6b, 0x67, 0x39, 0x0e, 0xc0, 0x92, 0x1f, 0x65, 0x7d, 0xd3, 0xf3, 0x13, 0xca, - 0xba, 0x70, 0xb4, 0xac, 0x6f, 0x70, 0x36, 0x58, 0xf2, 0x73, 0x7f, 0x09, 0xd8, 0x0d, 0xeb, 0x85, - 0x86, 0x57, 0xe3, 0x23, 0x17, 0x6e, 0x93, 0xaa, 0x90, 0xb9, 0xda, 0xc8, 0x51, 0x28, 0x16, 0xa5, - 0xfc, 0xd6, 0x6a, 0x12, 0xf9, 0x2a, 0x32, 0x5b, 0xbb, 0xb5, 0xca, 0xc0, 0x32, 0x0e, 0xbf, 0xea, - 0x7e, 0xa5, 0x00, 0xc0, 0x12, 0xd5, 0xf1, 0x8b, 0xd1, 0xbf, 0x20, 0x83, 0xa8, 0x4c, 0x1f, 0xa7, - 0x0a, 0xa2, 0x62, 0x57, 0xbf, 0xf5, 0xe0, 0x29, 0xfd, 0xc2, 0x44, 0x61, 0xff, 0x0b, 0x13, 0xa8, - 0x05, 0x83, 0x61, 0x3b, 0xa1, 0xba, 0xaa, 0xd8, 0xec, 0x2d, 0xb8, 0xf8, 0xd7, 0x38, 0x41, 0x7e, - 0xcb, 0x40, 0xfc, 0xc0, 0x92, 0x0d, 0x7a, 0x16, 0x86, 0x5a, 0x51, 0x58, 0xa3, 0x7b, 0xb7, 0xd8, - 0xde, 0x1f, 0x92, 0xfa, 0xd0, 0xba, 0x80, 0xdf, 0xd1, 0xfe, 0xc7, 0x0a, 0xdb, 0xfd, 0xe3, 0x09, - 0x3e, 0x2e, 0x62, 0xee, 0x4d, 0x42, 0xc1, 0x97, 0x96, 0x29, 0x10, 0x24, 0x0a, 0x4b, 0xf3, 0xb8, - 0xe0, 0x57, 0xd5, 0xba, 0x2a, 0x74, 0x5d, 0x57, 0xef, 0x81, 0x91, 0xaa, 0x1f, 0xb7, 0x1a, 0xde, - 0xee, 0xd5, 0x1c, 0xb3, 0xe0, 0x7c, 0x5a, 0x84, 0x75, 0x3c, 0xf4, 0x94, 0xb8, 0x1e, 0xd3, 0x6f, - 0x98, 0x82, 0xe4, 0xf5, 0x98, 0xf4, 0xe2, 0x3d, 0xbf, 0x19, 0x93, 0x4d, 0x50, 0x50, 0xec, 0x39, - 0x41, 0x41, 0x56, 0x13, 0x1b, 0x38, 0x7e, 0x4d, 0xec, 0x7d, 0x30, 0x26, 0x7f, 0x32, 0xf5, 0xa8, - 0x74, 0x9a, 0xb5, 0x5e, 0x99, 0xc1, 0x37, 0xf4, 0x42, 0x6c, 0xe2, 0xa6, 0x93, 0x76, 0xb0, 0xd7, - 0x49, 0x7b, 0x09, 0x60, 0x33, 0x6c, 0x07, 0x55, 0x2f, 0xda, 0x5d, 0x9a, 0x17, 0xc1, 0xb4, 0x4a, - 0xf1, 0x9b, 0x55, 0x25, 0x58, 0xc3, 0xd2, 0x27, 0xfa, 0xf0, 0x5d, 0x26, 0xfa, 0x87, 0x60, 0x98, - 0x05, 0x1e, 0x93, 0xea, 0x4c, 0x22, 0xa2, 0x9f, 0x0e, 0x12, 0xcd, 0x99, 0xc6, 0x43, 0x4a, 0x22, - 0x38, 0xa5, 0x87, 0x3e, 0x0c, 0xb0, 0xe5, 0x07, 0x7e, 0x5c, 0x67, 0xd4, 0x47, 0x0e, 0x4c, 0x5d, - 0xf5, 0x73, 0x41, 0x51, 0xc1, 0x1a, 0x45, 0xf4, 0x12, 0x9c, 0x24, 0x71, 0xe2, 0x37, 0xbd, 0x84, - 0x54, 0xd5, 0x85, 0xd2, 0x12, 0xb3, 0x65, 0xaa, 0xd0, 0xef, 0xcb, 0x59, 0x84, 0x3b, 0x79, 0x40, - 0xdc, 0x49, 0xc8, 0x58, 0x91, 0x93, 0x07, 0x59, 0x91, 0xe8, 0x7f, 0x3a, 0x70, 0x32, 0x22, 0x3c, - 0x24, 0x26, 0x56, 0x0d, 0x3b, 0xc3, 0xc4, 0x71, 0xc5, 0x46, 0x0e, 0x78, 0x95, 0xec, 0x05, 0x67, - 0xb9, 0x70, 0xc5, 0x85, 0xc8, 0xde, 0x77, 0x94, 0xdf, 0xc9, 0x03, 0xbe, 0xf9, 0xf6, 0xd4, 0x54, - 0xe7, 0x5b, 0x04, 0x8a, 0x38, 0x5d, 0x79, 0x7f, 0xf3, 0xed, 0xa9, 0x09, 0xf9, 0x3b, 0x1d, 0xb4, - 0x8e, 0x4e, 0xd2, 0x6d, 0xb5, 0x15, 0x56, 0x97, 0xd6, 0x45, 0x98, 0x9a, 0xda, 0x56, 0xd7, 0x29, - 0x10, 0xf3, 0x32, 0xf4, 0x04, 0x0c, 0x55, 0x3d, 0xd2, 0x0c, 0x03, 0x95, 0xcd, 0x97, 0x69, 0xf3, - 0xf3, 0x02, 0x86, 0x55, 0x29, 0x3d, 0x43, 0x04, 0x62, 0x4b, 0x29, 0x9d, 0xb7, 0x75, 0x86, 0x90, - 0x9b, 0x14, 0xe7, 0x2a, 0x7f, 0x61, 0xc5, 0x09, 0x35, 0x60, 0xc0, 0x67, 0x86, 0x0a, 0x11, 0x09, - 0x6b, 0xc1, 0x3a, 0xc2, 0x0d, 0x1f, 0x32, 0x0e, 0x96, 0x89, 0x7e, 0xc1, 0x43, 0xdf, 0x6b, 0x4e, - 0x1c, 0xcf, 0x5e, 0xf3, 0x04, 0x0c, 0x55, 0xea, 0x7e, 0xa3, 0x1a, 0x91, 0xa0, 0x34, 0xc1, 0x4e, - 0xec, 0x6c, 0x24, 0xe6, 0x04, 0x0c, 0xab, 0x52, 0xf4, 0x57, 0x60, 0x2c, 0x6c, 0x27, 0x4c, 0xb4, - 0xd0, 0x71, 0x8a, 0x4b, 0x27, 0x19, 0x3a, 0x8b, 0x6b, 0x5a, 0xd3, 0x0b, 0xb0, 0x89, 0x47, 0x45, - 0x7c, 0x3d, 0x8c, 0x59, 0x5e, 0x22, 0x26, 0xe2, 0xcf, 0x9a, 0x22, 0xfe, 0x8a, 0x56, 0x86, 0x0d, - 0x4c, 0xf4, 0x35, 0x07, 0x4e, 0x36, 0xb3, 0x07, 0xb8, 0xd2, 0x39, 0x36, 0x32, 0x65, 0x1b, 0x8a, - 0x7e, 0x86, 0x34, 0x8f, 0x48, 0xef, 0x00, 0xe3, 0xce, 0x46, 0xb0, 0x0c, 0x61, 0xf1, 0x6e, 0x50, - 0xa9, 0x47, 0x61, 0x60, 0x36, 0xef, 0x41, 0x5b, 0xf7, 0xe2, 0xd8, 0xda, 0xce, 0x63, 0x31, 0xfb, - 0xe0, 0xed, 0xbd, 0xa9, 0x33, 0xb9, 0x45, 0x38, 0xbf, 0x51, 0x93, 0xf3, 0x70, 0x36, 0x5f, 0x3e, - 0xdc, 0xed, 0xc4, 0xd1, 0xa7, 0x9f, 0x38, 0x16, 0xe0, 0xc1, 0xae, 0x8d, 0xa2, 0x3b, 0x8d, 0xd4, - 0x36, 0x1d, 0x73, 0xa7, 0xe9, 0xd0, 0x0e, 0xc7, 0x61, 0x54, 0x7f, 0xbc, 0xc2, 0xfd, 0x3f, 0x7d, - 0x00, 0xa9, 0x9d, 0x1c, 0x79, 0x30, 0xce, 0x6d, 0xf2, 0x4b, 0xf3, 0x87, 0xbe, 0xd1, 0x3f, 0x67, - 0x10, 0xc0, 0x19, 0x82, 0xa8, 0x09, 0x88, 0x43, 0xf8, 0xef, 0xc3, 0xf8, 0x56, 0x99, 0x2b, 0x72, - 0xae, 0x83, 0x08, 0xce, 0x21, 0x4c, 0x7b, 0x94, 0x84, 0xdb, 0x24, 0xb8, 0x86, 0x57, 0x0e, 0x93, - 0x16, 0x82, 0x7b, 0xe3, 0x0c, 0x02, 0x38, 0x43, 0x10, 0xb9, 0x30, 0xc0, 0x6c, 0x33, 0x32, 0x76, - 0x9c, 0x89, 0x17, 0xa6, 0x69, 0xc4, 0x58, 0x94, 0xa0, 0xaf, 0x38, 0x30, 0x2e, 0xb3, 0x5b, 0x30, - 0x6b, 0xa8, 0x8c, 0x1a, 0xbf, 0x66, 0xcb, 0xcf, 0x71, 0x59, 0xa7, 0x9e, 0xc6, 0x64, 0x1a, 0xe0, - 0x18, 0x67, 0x1a, 0xe1, 0xbe, 0x00, 0xa7, 0x72, 0xaa, 0x5b, 0x39, 0xd1, 0x7e, 0xd7, 0x81, 0x11, - 0x2d, 0xe9, 0x22, 0x7a, 0x1d, 0x86, 0xc3, 0xb2, 0xf5, 0x40, 0xc0, 0xb5, 0x72, 0x47, 0x20, 0xa0, - 0x02, 0xe1, 0x94, 0x61, 0x2f, 0xf1, 0x8b, 0xb9, 0x19, 0x22, 0xef, 0x73, 0xb3, 0x0f, 0x1c, 0xbf, - 0xf8, 0x2b, 0x45, 0x48, 0x29, 0x1d, 0x30, 0xeb, 0x4a, 0x1a, 0xed, 0x58, 0xd8, 0x37, 0xda, 0xb1, - 0x0a, 0x27, 0x3c, 0xe6, 0x4b, 0x3e, 0x64, 0xae, 0x15, 0x9e, 0x73, 0xd7, 0xa4, 0x80, 0xb3, 0x24, - 0x29, 0x97, 0x38, 0xad, 0xca, 0xb8, 0xf4, 0x1f, 0x98, 0x4b, 0xd9, 0xa4, 0x80, 0xb3, 0x24, 0xd1, - 0x4b, 0x50, 0xaa, 0xb0, 0xbb, 0xc3, 0xbc, 0x8f, 0x4b, 0x5b, 0x57, 0xc3, 0x64, 0x3d, 0x22, 0x31, - 0x09, 0x12, 0x91, 0x55, 0xed, 0x11, 0x31, 0x0a, 0xa5, 0xb9, 0x2e, 0x78, 0xb8, 0x2b, 0x05, 0x7a, - 0x4c, 0x61, 0xce, 0x68, 0x3f, 0xd9, 0x65, 0x42, 0x44, 0x78, 0xe9, 0xd5, 0x31, 0xa5, 0xac, 0x17, - 0x62, 0x13, 0x17, 0xfd, 0xb2, 0x03, 0x63, 0x0d, 0x69, 0xae, 0xc7, 0xed, 0x86, 0x4c, 0x11, 0x8a, - 0xad, 0x4c, 0xbf, 0x15, 0x9d, 0x32, 0xd7, 0x25, 0x0c, 0x10, 0x36, 0x79, 0x67, 0x13, 0xdf, 0x0c, - 0xf5, 0x98, 0xf8, 0xe6, 0x07, 0x0e, 0x4c, 0x64, 0xb9, 0xa1, 0x6d, 0x78, 0xb8, 0xe9, 0x45, 0xdb, - 0x4b, 0xc1, 0x56, 0xc4, 0xee, 0x88, 0x24, 0x7c, 0x32, 0xcc, 0x6c, 0x25, 0x24, 0x9a, 0xf7, 0x76, - 0xb9, 0xfb, 0xb3, 0xa8, 0xde, 0x98, 0x7a, 0x78, 0x75, 0x3f, 0x64, 0xbc, 0x3f, 0x2d, 0x54, 0x86, - 0x33, 0x14, 0x81, 0xe5, 0xc5, 0xf3, 0xc3, 0x20, 0x65, 0x52, 0x60, 0x4c, 0x54, 0x9c, 0xe2, 0x6a, - 0x1e, 0x12, 0xce, 0xaf, 0xeb, 0x5e, 0x86, 0x01, 0x7e, 0x65, 0xef, 0x9e, 0xfc, 0x47, 0xee, 0xbf, - 0x29, 0x80, 0x54, 0x0c, 0xff, 0x72, 0xbb, 0xe3, 0xe8, 0x26, 0x1a, 0x31, 0x93, 0x92, 0xb0, 0x76, - 0xb0, 0x4d, 0x54, 0x64, 0xa0, 0x14, 0x25, 0x54, 0x63, 0x26, 0xb7, 0xfc, 0x64, 0x2e, 0xac, 0x4a, - 0x1b, 0x07, 0xd3, 0x98, 0x2f, 0x0b, 0x18, 0x56, 0xa5, 0xee, 0xa7, 0x1c, 0x18, 0xa3, 0xbd, 0x6c, - 0x34, 0x48, 0xa3, 0x9c, 0x90, 0x56, 0x8c, 0x62, 0x28, 0xc6, 0xf4, 0x1f, 0x7b, 0xa6, 0xc0, 0xf4, - 0x9a, 0x27, 0x69, 0x69, 0xce, 0x1a, 0xca, 0x04, 0x73, 0x5e, 0xee, 0x5b, 0x7d, 0x30, 0xac, 0x06, - 0xbb, 0x07, 0x7b, 0xea, 0xa5, 0x34, 0x39, 0x2c, 0x97, 0xc0, 0x25, 0x2d, 0x31, 0xec, 0x1d, 0x3a, - 0x74, 0xc1, 0x2e, 0xcf, 0x92, 0x91, 0x66, 0x89, 0x7d, 0xca, 0x74, 0x35, 0x9f, 0xd5, 0xe7, 0x9f, - 0x86, 0x2f, 0x7c, 0xce, 0xb7, 0x74, 0x4f, 0x7f, 0xbf, 0xad, 0xdd, 0x4c, 0xb9, 0x31, 0xbb, 0xbb, - 0xf8, 0x33, 0xef, 0x06, 0x15, 0x7b, 0x7a, 0x37, 0xe8, 0x49, 0xe8, 0x27, 0x41, 0xbb, 0xc9, 0x54, - 0xa5, 0x61, 0x76, 0x44, 0xe8, 0xbf, 0x1c, 0xb4, 0x9b, 0x66, 0xcf, 0x18, 0x0a, 0x7a, 0x3f, 0x8c, - 0x54, 0x49, 0x5c, 0x89, 0x7c, 0x96, 0xfa, 0x41, 0x58, 0x76, 0x1e, 0x62, 0xe6, 0xb2, 0x14, 0x6c, - 0x56, 0xd4, 0x2b, 0xb8, 0xaf, 0xc2, 0xc0, 0x7a, 0xa3, 0x5d, 0xf3, 0x03, 0xd4, 0x82, 0x01, 0x9e, - 0x08, 0x42, 0xec, 0xf6, 0x16, 0xce, 0x9d, 0x5c, 0x54, 0x68, 0x51, 0x28, 0xfc, 0xb6, 0xaf, 0xe0, - 0xe3, 0x7e, 0xb2, 0x00, 0xf4, 0x68, 0xbe, 0x38, 0x87, 0xfe, 0x7a, 0xc7, 0x33, 0x39, 0x3f, 0x97, - 0xf3, 0x4c, 0xce, 0x18, 0x43, 0xce, 0x79, 0x21, 0xa7, 0x01, 0x63, 0xcc, 0x39, 0x22, 0xf7, 0x40, - 0xa1, 0x56, 0x3f, 0xd3, 0x63, 0xee, 0x04, 0xbd, 0xaa, 0xd8, 0x11, 0x74, 0x10, 0x36, 0x89, 0xa3, - 0x55, 0x38, 0xc5, 0x73, 0x8c, 0xce, 0x93, 0x86, 0xb7, 0x9b, 0xc9, 0x25, 0x76, 0x5e, 0xbe, 0x7c, - 0x36, 0xdf, 0x89, 0x82, 0xf3, 0xea, 0xb9, 0xbf, 0xd7, 0x0f, 0x9a, 0x4b, 0xa2, 0x87, 0xd5, 0xf2, - 0x4a, 0xc6, 0x01, 0xb5, 0x6a, 0xc5, 0x01, 0x25, 0xbd, 0x3a, 0x5c, 0x02, 0x99, 0x3e, 0x27, 0xda, - 0xa8, 0x3a, 0x69, 0xb4, 0x44, 0x1f, 0x55, 0xa3, 0xae, 0x90, 0x46, 0x0b, 0xb3, 0x12, 0x75, 0xd7, - 0xb1, 0xbf, 0xeb, 0x5d, 0xc7, 0x3a, 0x14, 0x6b, 0x5e, 0xbb, 0x46, 0x44, 0x04, 0xa6, 0x05, 0x5f, - 0x23, 0xbb, 0x7d, 0xc1, 0x7d, 0x8d, 0xec, 0x5f, 0xcc, 0x19, 0xd0, 0xc5, 0x5e, 0x97, 0x21, 0x29, - 0xc2, 0x48, 0x6b, 0x61, 0xb1, 0xab, 0x28, 0x17, 0xbe, 0xd8, 0xd5, 0x4f, 0x9c, 0x32, 0x43, 0x2d, - 0x18, 0xac, 0xf0, 0x0c, 0x2e, 0x42, 0x67, 0x59, 0xb2, 0x71, 0x99, 0x93, 0x11, 0xe4, 0xd6, 0x14, - 0xf1, 0x03, 0x4b, 0x36, 0xee, 0x45, 0x18, 0xd1, 0x5e, 0xeb, 0xa0, 0x9f, 0x41, 0x25, 0x0f, 0xd1, - 0x3e, 0xc3, 0xbc, 0x97, 0x78, 0x98, 0x95, 0xb8, 0xdf, 0xea, 0x07, 0x65, 0x4b, 0xd3, 0xaf, 0x1e, - 0x7a, 0x15, 0x2d, 0xd5, 0x91, 0x71, 0x0d, 0x3f, 0x0c, 0xb0, 0x28, 0xa5, 0x7a, 0x5d, 0x93, 0x44, - 0x35, 0x75, 0x8e, 0x16, 0xe2, 0x5a, 0xe9, 0x75, 0xab, 0x7a, 0x21, 0x36, 0x71, 0xa9, 0x52, 0xde, - 0x14, 0x2e, 0xfa, 0x6c, 0x60, 0xb5, 0x74, 0xdd, 0x63, 0x85, 0xc1, 0x72, 0x25, 0x34, 0x35, 0x8f, - 0xbe, 0x08, 0xc4, 0xb4, 0xe1, 0x50, 0xd2, 0xa8, 0xf2, 0x80, 0x29, 0x1d, 0x82, 0x0d, 0xae, 0x68, - 0x11, 0x4e, 0xc6, 0x24, 0x59, 0xbb, 0x19, 0x90, 0x48, 0x65, 0x29, 0x10, 0xc9, 0x38, 0xd4, 0xc5, - 0x8c, 0x72, 0x16, 0x01, 0x77, 0xd6, 0xc9, 0x8d, 0x5d, 0x2d, 0x1e, 0x38, 0x76, 0x75, 0x1e, 0x26, - 0xb6, 0x3c, 0xbf, 0xd1, 0x8e, 0x48, 0xd7, 0x08, 0xd8, 0x85, 0x4c, 0x39, 0xee, 0xa8, 0xc1, 0xee, - 0x06, 0x35, 0xbc, 0x5a, 0x5c, 0x1a, 0xd4, 0xee, 0x06, 0x51, 0x00, 0xe6, 0x70, 0xf7, 0x37, 0x1d, - 0xe0, 0x59, 0x90, 0x66, 0xb6, 0xb6, 0xfc, 0xc0, 0x4f, 0x76, 0xd1, 0xd7, 0x1d, 0x98, 0x08, 0xc2, - 0x2a, 0x99, 0x09, 0x12, 0x5f, 0x02, 0xed, 0xa5, 0xa6, 0x67, 0xbc, 0xae, 0x66, 0xc8, 0xf3, 0x94, - 0x1a, 0x59, 0x28, 0xee, 0x68, 0x86, 0x7b, 0x0e, 0xce, 0xe4, 0x12, 0x70, 0x7f, 0xd0, 0x07, 0x66, - 0x32, 0x27, 0xf4, 0x3c, 0x14, 0x1b, 0x2c, 0xbd, 0x88, 0x73, 0xc8, 0x2c, 0x5d, 0x6c, 0xac, 0x78, - 0xfe, 0x11, 0x4e, 0x09, 0xcd, 0xc3, 0x08, 0xcb, 0x10, 0x25, 0x92, 0xbf, 0x14, 0x8c, 0xac, 0x0a, - 0x23, 0x38, 0x2d, 0xba, 0x63, 0xfe, 0xc4, 0x7a, 0x35, 0xf4, 0x1a, 0x0c, 0x6e, 0xf2, 0x3c, 0x99, - 0xf6, 0x7c, 0x7e, 0x22, 0xf1, 0x26, 0xd3, 0x8d, 0x64, 0x16, 0xce, 0x3b, 0xe9, 0xbf, 0x58, 0x72, - 0x44, 0xbb, 0x30, 0xe4, 0xc9, 0x6f, 0xda, 0x6f, 0xeb, 0xa2, 0x86, 0x31, 0x7f, 0x44, 0xc4, 0x8c, - 0xfc, 0x86, 0x8a, 0x5d, 0x26, 0xb4, 0xa8, 0xd8, 0x53, 0x68, 0xd1, 0x77, 0x1c, 0x80, 0xf4, 0x51, - 0x11, 0x74, 0x0b, 0x86, 0xe2, 0x67, 0x0c, 0x43, 0x85, 0x8d, 0x4b, 0xfe, 0x82, 0xa2, 0x76, 0x11, - 0x56, 0x40, 0xb0, 0xe2, 0x76, 0x37, 0xe3, 0xca, 0x4f, 0x1d, 0x38, 0x9d, 0xf7, 0xf8, 0xc9, 0x7d, - 0x6c, 0xf1, 0x41, 0xed, 0x2a, 0xa2, 0xc2, 0x7a, 0x44, 0xb6, 0xfc, 0x5b, 0x39, 0xd9, 0x9a, 0x79, - 0x01, 0x4e, 0x71, 0xdc, 0x3f, 0x1d, 0x04, 0xc5, 0xf8, 0x88, 0xec, 0x30, 0x8f, 0xd3, 0x33, 0x53, - 0x2d, 0xd5, 0xb9, 0x14, 0x1e, 0x66, 0x50, 0x2c, 0x4a, 0xe9, 0xb9, 0x49, 0x06, 0xc5, 0x0b, 0x91, - 0xcd, 0x66, 0xa1, 0x0c, 0x9e, 0xc7, 0xaa, 0x34, 0xcf, 0xb2, 0x53, 0x3c, 0x16, 0xcb, 0xce, 0x80, - 0x7d, 0xcb, 0x4e, 0x13, 0x50, 0xcc, 0x17, 0x0a, 0x33, 0xa7, 0x08, 0x46, 0xa3, 0x07, 0x36, 0x34, - 0x97, 0x3b, 0x88, 0xe0, 0x1c, 0xc2, 0x2c, 0x86, 0x22, 0x6c, 0x90, 0x19, 0x7c, 0x55, 0x1c, 0x3e, - 0xd2, 0x18, 0x0a, 0x0e, 0xc6, 0xb2, 0xfc, 0x90, 0xa6, 0x14, 0xf4, 0xdb, 0xce, 0x3e, 0xb6, 0xaa, - 0x61, 0x5b, 0x5b, 0x50, 0x6e, 0x26, 0x3d, 0x76, 0x92, 0x3a, 0x8c, 0x01, 0xec, 0x1b, 0x0e, 0x9c, - 0x24, 0x41, 0x25, 0xda, 0x65, 0x74, 0x04, 0x35, 0xe1, 0xe2, 0xbe, 0x66, 0x63, 0xad, 0x5f, 0xce, - 0x12, 0xe7, 0x9e, 0xa4, 0x0e, 0x30, 0xee, 0x6c, 0x06, 0x5a, 0x83, 0xa1, 0x8a, 0x27, 0xe6, 0xc5, - 0xc8, 0x41, 0xe6, 0x05, 0x77, 0xd4, 0xcd, 0x88, 0xd9, 0xa0, 0x88, 0xb8, 0x3f, 0x2e, 0xc0, 0xa9, - 0x9c, 0x26, 0xb1, 0xfb, 0x5a, 0x4d, 0xba, 0x00, 0x96, 0xaa, 0xd9, 0xe5, 0xbf, 0x2c, 0xe0, 0x58, - 0x61, 0xa0, 0x75, 0x38, 0xbd, 0xdd, 0x8c, 0x53, 0x2a, 0x73, 0x61, 0x90, 0x90, 0x5b, 0x52, 0x18, - 0x48, 0xf7, 0xf7, 0xe9, 0xe5, 0x1c, 0x1c, 0x9c, 0x5b, 0x93, 0x6a, 0x4b, 0x24, 0xf0, 0x36, 0x1b, - 0x24, 0x2d, 0x12, 0xb7, 0x18, 0x95, 0xb6, 0x74, 0x39, 0x53, 0x8e, 0x3b, 0x6a, 0xa0, 0xcf, 0x39, - 0x70, 0x3e, 0x26, 0xd1, 0x0e, 0x89, 0xca, 0x7e, 0x95, 0xcc, 0xb5, 0xe3, 0x24, 0x6c, 0x92, 0xe8, - 0x90, 0xd6, 0xd9, 0xa9, 0xdb, 0x7b, 0x53, 0xe7, 0xcb, 0xdd, 0xa9, 0xe1, 0xfd, 0x58, 0xb9, 0x9f, - 0x73, 0x60, 0xbc, 0xcc, 0xce, 0xee, 0x4a, 0x75, 0xb7, 0x9d, 0x4b, 0xf5, 0x71, 0x95, 0xba, 0x23, - 0x23, 0x84, 0xcd, 0x64, 0x1b, 0xee, 0xcb, 0x30, 0x51, 0x26, 0x4d, 0xaf, 0x55, 0x67, 0xb7, 0x98, - 0x79, 0xf8, 0xd7, 0x45, 0x18, 0x8e, 0x25, 0x2c, 0xfb, 0x7c, 0x92, 0x42, 0xc6, 0x29, 0x0e, 0x7a, - 0x8c, 0x87, 0xaa, 0xc9, 0x0b, 0x47, 0xc3, 0xfc, 0x90, 0xc3, 0xe3, 0xdb, 0x62, 0x2c, 0xcb, 0xdc, - 0xb7, 0x1c, 0x18, 0x4d, 0xeb, 0x93, 0x2d, 0x54, 0x83, 0x13, 0x15, 0xed, 0xb2, 0x5e, 0x7a, 0x4d, - 0xa2, 0xf7, 0x7b, 0x7d, 0x3c, 0xc5, 0xb3, 0x49, 0x04, 0x67, 0xa9, 0x1e, 0x3c, 0xd2, 0xef, 0x8b, - 0x05, 0x38, 0xa1, 0x9a, 0x2a, 0xfc, 0x94, 0x6f, 0x64, 0x03, 0xf2, 0xb0, 0x8d, 0x24, 0x44, 0xe6, - 0xd8, 0xef, 0x13, 0x94, 0xf7, 0x46, 0x36, 0x28, 0xef, 0x48, 0xd9, 0x77, 0xb8, 0x5e, 0xbf, 0x53, - 0x80, 0x21, 0x95, 0x12, 0xe9, 0x79, 0x28, 0xb2, 0x93, 0xeb, 0xbd, 0xe9, 0xdf, 0xec, 0x14, 0x8c, - 0x39, 0x25, 0x4a, 0x92, 0x05, 0xfd, 0x1c, 0x3a, 0xf1, 0xee, 0x30, 0xb7, 0x5f, 0x7a, 0x51, 0x82, - 0x39, 0x25, 0xb4, 0x0c, 0x7d, 0x24, 0xa8, 0x0a, 0x45, 0xfc, 0xe0, 0x04, 0xd9, 0x43, 0x67, 0x97, - 0x83, 0x2a, 0xa6, 0x54, 0x58, 0x5e, 0x36, 0xae, 0x6f, 0x65, 0x9e, 0xb5, 0x11, 0xca, 0x96, 0x28, - 0x75, 0x67, 0xc1, 0xc8, 0xd9, 0x77, 0xa8, 0x9b, 0x11, 0xbf, 0xdc, 0x07, 0x03, 0xe5, 0xf6, 0x26, - 0x3d, 0x96, 0x7c, 0xdb, 0x81, 0x53, 0x37, 0x33, 0x99, 0xad, 0xd3, 0x75, 0x72, 0xcd, 0x9e, 0x1d, - 0x58, 0x0f, 0x5e, 0x53, 0xd6, 0xaf, 0x9c, 0x42, 0x9c, 0xd7, 0x1c, 0x23, 0xb9, 0x6c, 0xdf, 0x91, - 0x24, 0x97, 0xbd, 0x75, 0xc4, 0xb7, 0x37, 0xc6, 0xba, 0xdd, 0xdc, 0x70, 0x7f, 0xaf, 0x08, 0xc0, - 0xbf, 0xc6, 0x5a, 0x2b, 0xe9, 0xc5, 0xb2, 0xf7, 0x2c, 0x8c, 0xd6, 0x48, 0x40, 0x22, 0x19, 0x9a, - 0x98, 0x79, 0x75, 0x69, 0x51, 0x2b, 0xc3, 0x06, 0x26, 0x9b, 0x2c, 0x41, 0x12, 0xed, 0x72, 0x55, - 0x3b, 0x7b, 0x43, 0x43, 0x95, 0x60, 0x0d, 0x0b, 0x4d, 0x1b, 0x8e, 0x17, 0xee, 0xc3, 0x1f, 0xdf, - 0xc7, 0x4f, 0xf2, 0x7e, 0x18, 0x37, 0x33, 0xb1, 0x08, 0x85, 0x4f, 0xf9, 0xdc, 0xcd, 0x04, 0x2e, - 0x38, 0x83, 0x4d, 0x17, 0x42, 0x35, 0xda, 0xc5, 0xed, 0x40, 0x68, 0x7e, 0x6a, 0x21, 0xcc, 0x33, - 0x28, 0x16, 0xa5, 0x2c, 0x85, 0x05, 0xdb, 0x03, 0x39, 0x5c, 0xa4, 0xc1, 0x48, 0x53, 0x58, 0x68, - 0x65, 0xd8, 0xc0, 0xa4, 0x1c, 0x84, 0x65, 0x14, 0xcc, 0xa5, 0x96, 0x31, 0x67, 0xb6, 0x60, 0x3c, - 0x34, 0x2d, 0x3a, 0x5c, 0x0d, 0x7a, 0x77, 0x8f, 0x53, 0xcf, 0xa8, 0xcb, 0x63, 0x25, 0x32, 0x06, - 0xa0, 0x0c, 0x7d, 0xaa, 0xfa, 0xea, 0x17, 0x19, 0x46, 0xcd, 0xc8, 0xd6, 0xae, 0x77, 0x0d, 0xd6, - 0xe1, 0x74, 0x2b, 0xac, 0xae, 0x47, 0x7e, 0x18, 0xf9, 0xc9, 0xee, 0x5c, 0xc3, 0x8b, 0x63, 0x36, - 0x31, 0xc6, 0x4c, 0x95, 0x68, 0x3d, 0x07, 0x07, 0xe7, 0xd6, 0xa4, 0x67, 0xa2, 0x96, 0x00, 0xb2, - 0xf8, 0xb2, 0x22, 0x57, 0xea, 0x24, 0x22, 0x56, 0xa5, 0xee, 0x29, 0x38, 0x59, 0x6e, 0xb7, 0x5a, - 0x0d, 0x9f, 0x54, 0x95, 0x63, 0xc3, 0xfd, 0x00, 0x9c, 0x10, 0xa9, 0x67, 0x95, 0x02, 0x72, 0xa0, - 0x44, 0xe9, 0xee, 0x7f, 0xec, 0x83, 0x13, 0x99, 0x68, 0x1e, 0xf4, 0x5a, 0x56, 0x6d, 0xb0, 0x93, - 0x12, 0x55, 0x53, 0x18, 0x44, 0x7e, 0xd3, 0x3c, 0x15, 0xa4, 0x2e, 0x43, 0xf1, 0xad, 0x5d, 0x81, - 0x61, 0x01, 0xeb, 0x7c, 0x57, 0x31, 0xe2, 0xf9, 0x3f, 0x06, 0xa0, 0xd8, 0xca, 0x5b, 0xf7, 0xb6, - 0xfb, 0xc9, 0xd6, 0xaf, 0x82, 0xc4, 0x58, 0xe3, 0x88, 0x02, 0x18, 0x64, 0x0d, 0x21, 0xf2, 0xde, - 0xa5, 0xb5, 0xbe, 0x32, 0xad, 0x6d, 0x95, 0xd3, 0xc6, 0x92, 0x89, 0xfb, 0xd9, 0x02, 0xe4, 0x87, - 0x8c, 0xa1, 0x8f, 0x75, 0x7e, 0xf0, 0xe7, 0x2d, 0x0e, 0x84, 0x88, 0x59, 0xeb, 0xfe, 0xcd, 0x03, - 0xf3, 0x9b, 0xaf, 0x5a, 0x1a, 0x07, 0xc1, 0xb7, 0xe3, 0xcb, 0xbb, 0xff, 0xc3, 0x81, 0x91, 0x8d, - 0x8d, 0x15, 0xb5, 0xb5, 0x63, 0x38, 0x1b, 0xf3, 0x94, 0x06, 0xcc, 0xb3, 0x3e, 0x17, 0x36, 0x5b, - 0xdc, 0xd1, 0x2e, 0x02, 0x00, 0x58, 0xd6, 0xe3, 0x72, 0x2e, 0x06, 0xee, 0x52, 0x13, 0x2d, 0xc1, - 0x29, 0xbd, 0xa4, 0xac, 0x3d, 0x32, 0x59, 0x14, 0x19, 0x8e, 0x3a, 0x8b, 0x71, 0x5e, 0x9d, 0x2c, - 0x29, 0x61, 0x50, 0x66, 0xdb, 0x73, 0x0e, 0x29, 0x51, 0x8c, 0xf3, 0xea, 0xb8, 0x6b, 0x30, 0xb2, - 0xe1, 0x45, 0xaa, 0xe3, 0x1f, 0x84, 0x89, 0x4a, 0xd8, 0x94, 0xea, 0xca, 0x0a, 0xd9, 0x21, 0x0d, - 0xd1, 0x65, 0xfe, 0xb2, 0x4b, 0xa6, 0x0c, 0x77, 0x60, 0xbb, 0xff, 0xf5, 0x02, 0xa8, 0x2b, 0x9a, - 0x3d, 0xec, 0xa8, 0x2d, 0x15, 0x4c, 0x5b, 0xb4, 0x1c, 0x4c, 0xab, 0xf6, 0x96, 0x4c, 0x40, 0x6d, - 0x92, 0x06, 0xd4, 0x0e, 0xd8, 0x0e, 0xa8, 0x55, 0x4a, 0x76, 0x47, 0x50, 0xed, 0x57, 0x1d, 0x18, - 0x0d, 0xc2, 0x2a, 0x51, 0x1e, 0xd0, 0x41, 0xb6, 0xc2, 0x5f, 0xb2, 0x77, 0x37, 0x81, 0x07, 0x87, - 0x0a, 0xf2, 0x3c, 0xd0, 0x5b, 0x6d, 0xc9, 0x7a, 0x11, 0x36, 0xda, 0x81, 0x16, 0x34, 0xd3, 0x32, - 0xf7, 0xe0, 0x3c, 0x94, 0x77, 0x44, 0xbb, 0xab, 0x9d, 0xf8, 0x96, 0xa6, 0x27, 0x0e, 0xdb, 0x32, - 0x99, 0xca, 0x7b, 0x77, 0x9a, 0x23, 0x4a, 0x26, 0xee, 0x4e, 0xf5, 0x47, 0x17, 0x06, 0x78, 0x44, - 0xb8, 0xc8, 0xa5, 0xc5, 0xfc, 0xa3, 0x3c, 0x5a, 0x1c, 0x8b, 0x12, 0x94, 0xc8, 0x28, 0x8b, 0x11, - 0x5b, 0xcf, 0x70, 0x18, 0x51, 0x1c, 0xf9, 0x61, 0x16, 0xe8, 0x39, 0xfd, 0xe8, 0x3f, 0xda, 0xcb, - 0xd1, 0x7f, 0xac, 0xeb, 0xb1, 0xff, 0x0b, 0x0e, 0x8c, 0x56, 0xb4, 0x67, 0x31, 0x4a, 0x4f, 0xd8, - 0x7a, 0xfe, 0x3b, 0xef, 0xf5, 0x12, 0xee, 0x76, 0x33, 0x9e, 0xe1, 0x30, 0xb8, 0xb3, 0x04, 0xa2, - 0xcc, 0xce, 0xc1, 0x54, 0x1d, 0x2b, 0x89, 0x39, 0x4c, 0xbb, 0x89, 0x8c, 0x56, 0xa5, 0x30, 0x2c, - 0x78, 0xa1, 0xd7, 0x61, 0x48, 0x5e, 0x2a, 0x10, 0xc1, 0xf7, 0xd8, 0x86, 0x1f, 0xc4, 0x74, 0xb6, - 0xca, 0xac, 0x83, 0x1c, 0x8a, 0x15, 0x47, 0x54, 0x87, 0xbe, 0xaa, 0x57, 0x13, 0x61, 0xf8, 0xab, - 0x76, 0xb2, 0xba, 0x4a, 0x9e, 0xec, 0x48, 0x3a, 0x3f, 0xb3, 0x88, 0x29, 0x0b, 0x74, 0x2b, 0x7d, - 0x57, 0x60, 0xc2, 0xda, 0xee, 0x6b, 0xaa, 0x85, 0x5c, 0x27, 0xe8, 0x78, 0xa6, 0xa0, 0x2a, 0xfc, - 0xd3, 0xff, 0x1f, 0x63, 0xbb, 0x60, 0x27, 0x2d, 0x2c, 0x4f, 0xf4, 0x92, 0xfa, 0xb8, 0x29, 0x97, - 0x7a, 0x92, 0xb4, 0x4a, 0x3f, 0x6f, 0x8b, 0x0b, 0x4b, 0x57, 0xc2, 0x5f, 0x6a, 0xdf, 0xd8, 0x58, - 0xc7, 0x8c, 0x3a, 0x6a, 0xc0, 0x40, 0x8b, 0x85, 0xce, 0x94, 0xde, 0x69, 0x6b, 0x6f, 0xe1, 0xa1, - 0x38, 0x7c, 0x6e, 0xf2, 0xff, 0xb1, 0xe0, 0x81, 0x2e, 0xc3, 0x20, 0x7f, 0x1e, 0x87, 0x5f, 0x83, - 0x18, 0xb9, 0x34, 0xd9, 0xfd, 0x91, 0x9d, 0x74, 0xa3, 0xe0, 0xbf, 0x63, 0x2c, 0xeb, 0xa2, 0x2f, - 0x3a, 0x30, 0x4e, 0x25, 0x6a, 0xfa, 0x9e, 0x4f, 0x09, 0xd9, 0x92, 0x59, 0xd7, 0x62, 0xaa, 0x91, - 0x48, 0x59, 0xa3, 0x8e, 0x85, 0x4b, 0x06, 0x3b, 0x9c, 0x61, 0x8f, 0xde, 0x80, 0xa1, 0xd8, 0xaf, - 0x92, 0x8a, 0x17, 0xc5, 0xa5, 0x53, 0x47, 0xd3, 0x94, 0xd4, 0x23, 0x26, 0x18, 0x61, 0xc5, 0x12, - 0xfd, 0x1a, 0x7b, 0x50, 0xb5, 0x52, 0xf7, 0x77, 0xc8, 0x4a, 0x58, 0xe1, 0xc7, 0x98, 0xd3, 0xb6, - 0xd6, 0xbe, 0xf4, 0xfd, 0x49, 0xca, 0xc2, 0x51, 0x64, 0xb2, 0xc3, 0x59, 0xfe, 0xe8, 0x6f, 0x38, - 0x70, 0x86, 0x3f, 0x7c, 0x90, 0x7d, 0xcb, 0xe3, 0xcc, 0x21, 0x4d, 0x52, 0xec, 0xfe, 0xc6, 0x4c, - 0x1e, 0x49, 0x9c, 0xcf, 0x89, 0xa5, 0x29, 0x36, 0x9f, 0x5f, 0x3a, 0x6b, 0xd5, 0x33, 0xdc, 0xfb, - 0x93, 0x4b, 0xe8, 0x69, 0x18, 0x69, 0x89, 0xed, 0xd0, 0x8f, 0x9b, 0xec, 0x36, 0x4e, 0x1f, 0xbf, - 0x27, 0xb9, 0x9e, 0x82, 0xb1, 0x8e, 0x63, 0xe4, 0xac, 0x7e, 0x72, 0xbf, 0x9c, 0xd5, 0xe8, 0x1a, - 0x8c, 0x24, 0x61, 0x43, 0xa4, 0x6d, 0x8d, 0x4b, 0x25, 0x36, 0x03, 0x2f, 0xe4, 0xad, 0xad, 0x0d, - 0x85, 0x96, 0x9e, 0xdc, 0x53, 0x58, 0x8c, 0x75, 0x3a, 0x2c, 0x02, 0x5a, 0x3c, 0x28, 0x11, 0xb1, - 0x23, 0xfb, 0x83, 0x99, 0x08, 0x68, 0xbd, 0x10, 0x9b, 0xb8, 0x68, 0x11, 0x4e, 0xb6, 0x3a, 0xce, - 0xfc, 0xfc, 0x16, 0xa0, 0x0a, 0x3a, 0xe9, 0x3c, 0xf0, 0x77, 0xd6, 0x31, 0x4e, 0xfb, 0xe7, 0xf7, - 0x3b, 0xed, 0x77, 0xc9, 0xe0, 0xfc, 0xd0, 0x61, 0x32, 0x38, 0xa3, 0x2a, 0x3c, 0xe4, 0xb5, 0x93, - 0x90, 0xa5, 0xe4, 0x31, 0xab, 0xf0, 0x60, 0xf0, 0x47, 0x78, 0x7c, 0xf9, 0xed, 0xbd, 0xa9, 0x87, - 0x66, 0xf6, 0xc1, 0xc3, 0xfb, 0x52, 0x41, 0xaf, 0xc2, 0x10, 0x11, 0x59, 0xa8, 0x4b, 0x3f, 0x67, - 0x4b, 0x49, 0x30, 0xf3, 0x5a, 0xcb, 0x38, 0x5b, 0x0e, 0xc3, 0x8a, 0x1f, 0xda, 0x80, 0x91, 0x7a, - 0x18, 0x27, 0x33, 0x0d, 0xdf, 0x8b, 0x49, 0x5c, 0x7a, 0x98, 0x4d, 0x9a, 0x5c, 0xdd, 0xeb, 0x8a, - 0x44, 0x4b, 0xe7, 0xcc, 0x95, 0xb4, 0x26, 0xd6, 0xc9, 0x20, 0xc2, 0xfc, 0xc3, 0x2c, 0x12, 0x5e, - 0xfa, 0xbe, 0x2e, 0xb0, 0x8e, 0x3d, 0x9e, 0x47, 0x79, 0x3d, 0xac, 0x96, 0x4d, 0x6c, 0xe5, 0x20, - 0xd6, 0x81, 0x38, 0x4b, 0x13, 0x3d, 0x0b, 0xa3, 0xad, 0xb0, 0x5a, 0x6e, 0x91, 0xca, 0xba, 0x97, - 0x54, 0xea, 0xa5, 0x29, 0xd3, 0xca, 0xb8, 0xae, 0x95, 0x61, 0x03, 0x13, 0xb5, 0x60, 0xb0, 0xc9, - 0x73, 0x35, 0x94, 0x1e, 0xb5, 0x75, 0xb6, 0x11, 0xc9, 0x1f, 0x84, 0x0d, 0x81, 0xff, 0xc0, 0x92, - 0x0d, 0xfa, 0xfb, 0x0e, 0x9c, 0xc8, 0xdc, 0x2f, 0x2b, 0xbd, 0xc3, 0x9a, 0xca, 0x62, 0x12, 0x9e, - 0x7d, 0x9c, 0x0d, 0x9f, 0x09, 0xbc, 0xd3, 0x09, 0xc2, 0xd9, 0x16, 0xf1, 0x71, 0x61, 0x09, 0x57, - 0x4a, 0x8f, 0xd9, 0x1b, 0x17, 0x46, 0x50, 0x8e, 0x0b, 0xfb, 0x81, 0x25, 0x1b, 0xf4, 0x24, 0x0c, - 0x8a, 0xdc, 0x88, 0xa5, 0xc7, 0x4d, 0xaf, 0xbb, 0x48, 0xa1, 0x88, 0x65, 0xf9, 0xe4, 0x07, 0xe0, - 0x64, 0xc7, 0xd1, 0xed, 0x40, 0x59, 0x3f, 0x7e, 0xc3, 0x01, 0xfd, 0x42, 0xba, 0xf5, 0xa7, 0x5f, - 0x9e, 0x85, 0xd1, 0x0a, 0x7f, 0x89, 0x93, 0x5f, 0x69, 0xef, 0x37, 0xed, 0xbd, 0x73, 0x5a, 0x19, - 0x36, 0x30, 0xdd, 0x2b, 0x80, 0x3a, 0xf3, 0xf2, 0x1f, 0xca, 0x71, 0xf2, 0x0f, 0x1d, 0x18, 0x33, - 0x74, 0x06, 0xeb, 0x7e, 0xd5, 0x05, 0x40, 0x4d, 0x3f, 0x8a, 0xc2, 0x48, 0x7f, 0xf2, 0x50, 0xa4, - 0x9d, 0x60, 0xf1, 0x16, 0xab, 0x1d, 0xa5, 0x38, 0xa7, 0x86, 0xfb, 0x8f, 0xfb, 0x21, 0x0d, 0x34, - 0x57, 0x59, 0x8b, 0x9d, 0xae, 0x59, 0x8b, 0x9f, 0x82, 0xa1, 0x97, 0xe3, 0x30, 0x58, 0x4f, 0x73, - 0x1b, 0xab, 0x6f, 0xf1, 0x5c, 0x79, 0xed, 0x2a, 0xc3, 0x54, 0x18, 0x0c, 0xfb, 0x95, 0x05, 0xbf, - 0x91, 0x74, 0x26, 0xbf, 0x7d, 0xee, 0x79, 0x0e, 0xc7, 0x0a, 0x83, 0xbd, 0x7e, 0xb8, 0x43, 0x94, - 0x23, 0x20, 0x7d, 0xfd, 0x90, 0x3f, 0xb9, 0xc1, 0xca, 0xd0, 0x45, 0x18, 0x56, 0x4e, 0x04, 0xe1, - 0x99, 0x50, 0x23, 0xa5, 0x3c, 0x0d, 0x38, 0xc5, 0x61, 0x0a, 0xa1, 0x30, 0x3c, 0x0b, 0x13, 0x4a, - 0xd9, 0xc6, 0xf1, 0x24, 0x63, 0xca, 0xe6, 0xb2, 0x5d, 0x82, 0xb1, 0x62, 0x99, 0xe7, 0x5b, 0x1e, - 0x3e, 0x12, 0xdf, 0xb2, 0x76, 0xeb, 0xa1, 0xd8, 0xeb, 0xad, 0x07, 0x73, 0x6e, 0x0f, 0xf5, 0x34, - 0xb7, 0x3f, 0xdd, 0x07, 0x83, 0xd7, 0x49, 0xc4, 0xd2, 0xc6, 0x3f, 0x09, 0x83, 0x3b, 0xfc, 0xdf, - 0xec, 0x95, 0x59, 0x81, 0x81, 0x65, 0x39, 0xfd, 0x6e, 0x9b, 0x6d, 0xbf, 0x51, 0x9d, 0x4f, 0x57, - 0x71, 0x9a, 0xd6, 0x51, 0x16, 0xe0, 0x14, 0x87, 0x56, 0xa8, 0x51, 0xcd, 0xbe, 0xd9, 0xf4, 0x3b, - 0x1e, 0xf6, 0x5f, 0x94, 0x05, 0x38, 0xc5, 0x41, 0x8f, 0xc3, 0x40, 0xcd, 0x4f, 0x36, 0xbc, 0x5a, - 0xd6, 0x33, 0xba, 0xc8, 0xa0, 0x58, 0x94, 0x32, 0xb7, 0x98, 0x9f, 0x6c, 0x44, 0x84, 0x59, 0x76, - 0x3b, 0x32, 0x76, 0x2c, 0x6a, 0x65, 0xd8, 0xc0, 0x64, 0x4d, 0x0a, 0x45, 0xcf, 0x44, 0x9c, 0x6c, - 0xda, 0x24, 0x59, 0x80, 0x53, 0x1c, 0x3a, 0xff, 0x2b, 0x61, 0xb3, 0xe5, 0x37, 0x44, 0x04, 0xb7, - 0x36, 0xff, 0xe7, 0x04, 0x1c, 0x2b, 0x0c, 0x8a, 0x4d, 0x45, 0x18, 0x15, 0x3f, 0xd9, 0x97, 0xe6, - 0xd6, 0x05, 0x1c, 0x2b, 0x0c, 0xf7, 0x3a, 0x8c, 0xf1, 0x95, 0x3c, 0xd7, 0xf0, 0xfc, 0xe6, 0xe2, - 0x1c, 0xba, 0xdc, 0x71, 0xeb, 0xe1, 0xc9, 0x9c, 0x5b, 0x0f, 0x67, 0x8c, 0x4a, 0x9d, 0xb7, 0x1f, - 0xdc, 0x1f, 0x16, 0x60, 0xe8, 0x18, 0x1f, 0xeb, 0x3c, 0xf6, 0x77, 0xa7, 0xd1, 0xad, 0xcc, 0x43, - 0x9d, 0xeb, 0x36, 0x2f, 0x31, 0xed, 0xfb, 0x48, 0xe7, 0x7f, 0x2a, 0xc0, 0x59, 0x89, 0x2a, 0xcf, - 0x72, 0x8b, 0x73, 0xec, 0x01, 0xb4, 0xa3, 0x1f, 0xe8, 0xc8, 0x18, 0xe8, 0x75, 0x7b, 0xa7, 0xd1, - 0xc5, 0xb9, 0xae, 0x43, 0xfd, 0x6a, 0x66, 0xa8, 0xb1, 0x55, 0xae, 0xfb, 0x0f, 0xf6, 0x9f, 0x3b, - 0x30, 0x99, 0x3f, 0xd8, 0xc7, 0xf0, 0x36, 0xea, 0x1b, 0xe6, 0xdb, 0xa8, 0xbf, 0x68, 0x6f, 0x8a, - 0x99, 0x5d, 0xe9, 0xf2, 0x4a, 0xea, 0x7f, 0x77, 0xe0, 0xb4, 0xac, 0xc0, 0x76, 0xcf, 0x59, 0x3f, - 0x60, 0xc1, 0x3b, 0x47, 0x3f, 0xcd, 0x5e, 0x37, 0xa6, 0xd9, 0x8b, 0xf6, 0x3a, 0xae, 0xf7, 0xa3, - 0xeb, 0x9b, 0xf2, 0x7f, 0xe6, 0x40, 0x29, 0xaf, 0xc2, 0x31, 0x7c, 0xf2, 0xd7, 0xcc, 0x4f, 0x7e, - 0xfd, 0x68, 0x7a, 0xde, 0xfd, 0x83, 0x97, 0xba, 0x0d, 0x14, 0x6a, 0x48, 0xbd, 0xca, 0xb1, 0xe5, - 0x93, 0xe6, 0x2c, 0xf2, 0x15, 0xb4, 0x06, 0x0c, 0xc4, 0x2c, 0x4a, 0x45, 0x4c, 0x81, 0x2b, 0x36, - 0xb4, 0x2d, 0x4a, 0x4f, 0xd8, 0xd8, 0xd9, 0xff, 0x58, 0xf0, 0x70, 0x7f, 0xb3, 0x00, 0xe7, 0xd4, - 0x9b, 0xc7, 0x64, 0x87, 0x34, 0xd2, 0xf5, 0xc1, 0x5e, 0xc8, 0xf0, 0xd4, 0x4f, 0x7b, 0x2f, 0x64, - 0xa4, 0x2c, 0xd2, 0xb5, 0x90, 0xc2, 0xb0, 0xc6, 0x13, 0x95, 0xe1, 0x0c, 0x7b, 0xd1, 0x62, 0xc1, - 0x0f, 0xbc, 0x86, 0xff, 0x2a, 0x89, 0x30, 0x69, 0x86, 0x3b, 0x5e, 0x43, 0x68, 0xea, 0xea, 0xd6, - 0xf4, 0x42, 0x1e, 0x12, 0xce, 0xaf, 0xdb, 0x71, 0xe2, 0xee, 0xeb, 0xf5, 0xc4, 0xed, 0xfe, 0x89, - 0x03, 0xa3, 0xc7, 0xf8, 0x42, 0x74, 0x68, 0x2e, 0x89, 0xe7, 0xec, 0x2d, 0x89, 0x2e, 0xcb, 0x60, - 0xaf, 0x08, 0x1d, 0x8f, 0xe6, 0xa2, 0xcf, 0x38, 0x2a, 0x8e, 0x87, 0xc7, 0x4b, 0x7e, 0xd8, 0x5e, - 0x3b, 0x0e, 0x92, 0x6a, 0x13, 0x7d, 0x23, 0x93, 0x7f, 0xb4, 0x60, 0x2b, 0x89, 0x56, 0x47, 0x6b, - 0x0e, 0x91, 0x87, 0xf4, 0xab, 0x0e, 0x00, 0x6f, 0xa7, 0x48, 0x5f, 0x4e, 0xdb, 0xb6, 0x79, 0x64, - 0x23, 0x45, 0x99, 0xf0, 0xa6, 0xa9, 0x25, 0x94, 0x16, 0x60, 0xad, 0x25, 0xf7, 0x90, 0x60, 0xf4, - 0x9e, 0x73, 0x9b, 0x7e, 0xd1, 0x81, 0x13, 0x99, 0xe6, 0xe6, 0xd4, 0xdf, 0x32, 0xdf, 0x78, 0xb4, - 0xa0, 0x59, 0x99, 0x49, 0xad, 0x75, 0xe3, 0xc9, 0x7f, 0x71, 0xc1, 0x78, 0x6d, 0x1c, 0xbd, 0x06, - 0xc3, 0xd2, 0xf2, 0x21, 0xa7, 0xb7, 0xcd, 0xb7, 0x6e, 0xd5, 0xf1, 0x46, 0x42, 0x62, 0x9c, 0xf2, - 0xcb, 0x84, 0x09, 0x16, 0x7a, 0x0a, 0x13, 0xbc, 0xbf, 0x2f, 0xe5, 0xe6, 0xdb, 0xa5, 0xfb, 0x8f, - 0xc4, 0x2e, 0xfd, 0x90, 0x75, 0xbb, 0xf4, 0xc3, 0xc7, 0x6c, 0x97, 0xd6, 0x9c, 0x84, 0xc5, 0x7b, - 0x70, 0x12, 0xbe, 0x06, 0xa7, 0x77, 0xd2, 0x43, 0xa7, 0x9a, 0x49, 0x22, 0x75, 0xd3, 0x93, 0xb9, - 0xd6, 0x68, 0x7a, 0x80, 0x8e, 0x13, 0x12, 0x24, 0xda, 0x71, 0x35, 0x8d, 0x50, 0xbc, 0x9e, 0x43, - 0x0e, 0xe7, 0x32, 0xc9, 0x7a, 0x7b, 0x06, 0x7b, 0xf0, 0xf6, 0xbc, 0xe5, 0xc0, 0x19, 0xaf, 0xe3, - 0x9a, 0x1d, 0x26, 0x5b, 0x22, 0xe4, 0xe4, 0x86, 0x3d, 0x15, 0xc2, 0x20, 0x2f, 0xdc, 0x6a, 0x79, - 0x45, 0x38, 0xbf, 0x41, 0xe8, 0xb1, 0xd4, 0xf5, 0xce, 0xe3, 0x5a, 0xf3, 0xfd, 0xe4, 0xdf, 0xc8, - 0xc6, 0xf3, 0x00, 0x1b, 0xfa, 0x8f, 0xda, 0x3d, 0x6d, 0x5b, 0x88, 0xe9, 0x19, 0xb9, 0x87, 0x98, - 0x9e, 0x8c, 0xeb, 0x6d, 0xd4, 0x92, 0xeb, 0x2d, 0x80, 0x09, 0xbf, 0xe9, 0xd5, 0xc8, 0x7a, 0xbb, - 0xd1, 0xe0, 0xf7, 0x66, 0xe4, 0x6b, 0xc4, 0xb9, 0x16, 0xbc, 0x95, 0xb0, 0xe2, 0x35, 0xb2, 0xef, - 0xd0, 0xab, 0xfb, 0x41, 0x4b, 0x19, 0x4a, 0xb8, 0x83, 0x36, 0x9d, 0xb0, 0x2c, 0x87, 0x20, 0x49, - 0xe8, 0x68, 0xb3, 0xc0, 0x91, 0x21, 0x3e, 0x61, 0xaf, 0xa4, 0x60, 0xac, 0xe3, 0xa0, 0x65, 0x18, - 0xae, 0x06, 0xb1, 0xb8, 0x31, 0x7c, 0x82, 0x09, 0xb3, 0x77, 0x51, 0x11, 0x38, 0x7f, 0xb5, 0xac, - 0xee, 0x0a, 0x3f, 0x94, 0x93, 0x14, 0x53, 0x95, 0xe3, 0xb4, 0x3e, 0x5a, 0x65, 0xc4, 0xc4, 0x3b, - 0x6b, 0x3c, 0x9e, 0xe3, 0x91, 0x2e, 0x0e, 0xa3, 0xf9, 0xab, 0xf2, 0xa5, 0xb8, 0x31, 0xc1, 0x4e, - 0x3c, 0x98, 0x96, 0x52, 0xd0, 0x5e, 0x85, 0x3e, 0xb9, 0xef, 0xab, 0xd0, 0x2c, 0x1b, 0x6e, 0xd2, - 0x50, 0xee, 0xe1, 0x0b, 0xd6, 0xb2, 0xe1, 0xa6, 0x91, 0x92, 0x22, 0x1b, 0x6e, 0x0a, 0xc0, 0x3a, - 0x4b, 0xb4, 0xd6, 0xcd, 0x4d, 0x7e, 0x8a, 0x09, 0x8d, 0x83, 0x3b, 0xbd, 0x75, 0x7f, 0xe9, 0xe9, - 0x7d, 0xfd, 0xa5, 0x1d, 0xfe, 0xdd, 0x33, 0x07, 0xf0, 0xef, 0xd6, 0x59, 0x9e, 0xd2, 0xc5, 0x39, - 0xe1, 0x52, 0xb7, 0x70, 0xbe, 0x63, 0x99, 0x51, 0x78, 0xe4, 0x29, 0xfb, 0x17, 0x73, 0x06, 0x5d, - 0x03, 0xc8, 0xcf, 0x1d, 0x3a, 0x80, 0x9c, 0x8a, 0xe7, 0x14, 0xce, 0x12, 0xde, 0x16, 0x85, 0x78, - 0x4e, 0xc1, 0x58, 0xc7, 0xc9, 0x7a, 0x4b, 0x1f, 0x3c, 0x32, 0x6f, 0xe9, 0xe4, 0x31, 0x78, 0x4b, - 0xcf, 0xf7, 0xec, 0x2d, 0xbd, 0x05, 0xa7, 0x5a, 0x61, 0x75, 0xde, 0x8f, 0xa3, 0x36, 0xbb, 0x48, - 0x38, 0xdb, 0xae, 0xd6, 0x48, 0xc2, 0xdc, 0xad, 0x23, 0x97, 0xde, 0xa5, 0x37, 0xb2, 0xc5, 0x16, - 0xb2, 0x5c, 0xa3, 0x99, 0x0a, 0xcc, 0x74, 0xc2, 0xa2, 0x6e, 0x73, 0x0a, 0x71, 0x1e, 0x0b, 0xdd, - 0x4f, 0xfb, 0xc8, 0xf1, 0xf8, 0x69, 0x3f, 0x08, 0x43, 0x71, 0xbd, 0x9d, 0x54, 0xc3, 0x9b, 0x01, - 0x73, 0xc6, 0x0f, 0xcf, 0xbe, 0x43, 0x99, 0xb2, 0x05, 0xfc, 0xce, 0xde, 0xd4, 0x84, 0xfc, 0x5f, - 0xb3, 0x62, 0x0b, 0x08, 0xfa, 0x66, 0x97, 0xfb, 0x4a, 0xee, 0x51, 0xde, 0x57, 0x3a, 0x77, 0xa0, - 0xbb, 0x4a, 0x79, 0xce, 0xe8, 0x47, 0x7f, 0xe6, 0x9c, 0xd1, 0x5f, 0x77, 0x60, 0x6c, 0x47, 0x77, - 0x19, 0x08, 0x87, 0xb9, 0x85, 0xc0, 0x1d, 0xc3, 0x13, 0x31, 0xeb, 0x52, 0x39, 0x67, 0x80, 0xee, - 0x64, 0x01, 0xd8, 0x6c, 0x49, 0x4e, 0x50, 0xd1, 0x63, 0xf7, 0x2b, 0xa8, 0xe8, 0x0d, 0x26, 0xc7, - 0xe4, 0x21, 0x97, 0x79, 0xd1, 0xed, 0xc6, 0x14, 0x4b, 0x99, 0xa8, 0x42, 0x8a, 0x75, 0x7e, 0xe8, - 0x0b, 0x0e, 0x4c, 0xc8, 0x73, 0x99, 0x70, 0xf9, 0xc5, 0x22, 0x2a, 0xd2, 0xe6, 0x71, 0x90, 0x85, - 0xd5, 0x6f, 0x64, 0xf8, 0xe0, 0x0e, 0xce, 0x54, 0xaa, 0xab, 0x20, 0xb4, 0x5a, 0xcc, 0x82, 0x7f, - 0x85, 0x0e, 0x33, 0x93, 0x82, 0xb1, 0x8e, 0x83, 0xbe, 0xe5, 0x40, 0xb1, 0x1e, 0x86, 0xdb, 0x71, - 0xe9, 0x49, 0x26, 0xd0, 0x5f, 0xb0, 0xac, 0x9b, 0x5e, 0xa1, 0xb4, 0xb9, 0x52, 0xfa, 0xb4, 0xb4, - 0x1d, 0x31, 0xd8, 0x9d, 0xbd, 0xa9, 0x71, 0xe3, 0x39, 0xa7, 0xf8, 0xcd, 0xb7, 0x35, 0x88, 0xb0, - 0x6d, 0xb2, 0xa6, 0xa1, 0x2f, 0x3b, 0x30, 0x71, 0x33, 0x63, 0xd0, 0x10, 0x61, 0xa1, 0xd8, 0xbe, - 0xa9, 0x84, 0x0f, 0x77, 0x16, 0x8a, 0x3b, 0x5a, 0x80, 0x3e, 0x6f, 0x1a, 0x3a, 0x79, 0xfc, 0xa8, - 0xc5, 0x01, 0xcc, 0x18, 0x56, 0xf9, 0xb5, 0xa0, 0x7c, 0x8b, 0xe7, 0x3d, 0xc7, 0x87, 0x4c, 0xd2, - 0xce, 0xa4, 0x1f, 0x2b, 0xa7, 0x2a, 0x31, 0xed, 0x2d, 0x16, 0x16, 0xbb, 0xf1, 0xf9, 0x75, 0x73, - 0xcb, 0x97, 0xcf, 0xc2, 0xb8, 0xe9, 0xdb, 0x43, 0xef, 0x36, 0x9f, 0xea, 0xb8, 0x90, 0x7d, 0xf5, - 0x60, 0x4c, 0xe2, 0x1b, 0x2f, 0x1f, 0x18, 0x4f, 0x13, 0x14, 0x8e, 0xf4, 0x69, 0x82, 0xbe, 0xe3, - 0x79, 0x9a, 0x60, 0xe2, 0x28, 0x9e, 0x26, 0x38, 0x79, 0xa0, 0xa7, 0x09, 0xb4, 0xa7, 0x21, 0xfa, - 0xef, 0xf2, 0x34, 0xc4, 0x0c, 0x9c, 0x90, 0x77, 0x7f, 0x88, 0xc8, 0xfe, 0xce, 0xdd, 0xfe, 0xea, - 0x95, 0xf1, 0x39, 0xb3, 0x18, 0x67, 0xf1, 0xe9, 0x22, 0x2b, 0x06, 0xac, 0xe6, 0x80, 0xad, 0x77, - 0xa3, 0xcc, 0xa9, 0xc5, 0x8e, 0xcf, 0x42, 0x44, 0xc9, 0x68, 0xe7, 0x22, 0x83, 0xdd, 0x91, 0xff, - 0x60, 0xde, 0x02, 0xf4, 0x12, 0x94, 0xc2, 0xad, 0xad, 0x46, 0xe8, 0x55, 0xd3, 0xf7, 0x13, 0x64, - 0x5c, 0x02, 0xbf, 0xab, 0xaa, 0xd2, 0xed, 0xae, 0x75, 0xc1, 0xc3, 0x5d, 0x29, 0xa0, 0xb7, 0xa8, - 0x62, 0x92, 0x84, 0x11, 0xa9, 0xa6, 0xb6, 0x9a, 0x61, 0xd6, 0x67, 0x62, 0xbd, 0xcf, 0x65, 0x93, - 0x0f, 0xef, 0xbd, 0xfa, 0x28, 0x99, 0x52, 0x9c, 0x6d, 0x16, 0x8a, 0xe0, 0x6c, 0x2b, 0xcf, 0x54, - 0x14, 0x8b, 0x1b, 0x4b, 0xfb, 0x19, 0xac, 0xd4, 0x5b, 0xda, 0xb9, 0xc6, 0xa6, 0x18, 0x77, 0xa1, - 0xac, 0xbf, 0x71, 0x30, 0x74, 0x3c, 0x6f, 0x1c, 0x7c, 0x1c, 0xa0, 0x22, 0xb3, 0xad, 0x49, 0xe3, - 0xc3, 0xb2, 0x95, 0xab, 0x34, 0x9c, 0xa6, 0xf6, 0xac, 0xac, 0x62, 0x83, 0x35, 0x96, 0xe8, 0x7f, - 0xe7, 0x3e, 0x02, 0xc2, 0x2d, 0x2c, 0x35, 0xeb, 0x73, 0xe2, 0x67, 0xee, 0x21, 0x90, 0x7f, 0xe0, - 0xc0, 0x24, 0x9f, 0x79, 0x59, 0xe5, 0x9e, 0xaa, 0x16, 0xe2, 0x6e, 0x8f, 0xed, 0xd0, 0x15, 0x9e, - 0x35, 0xc9, 0xe0, 0xca, 0x1c, 0xdd, 0xfb, 0xb4, 0x04, 0x7d, 0x35, 0xe7, 0x48, 0x71, 0xc2, 0x96, - 0xcd, 0x32, 0xff, 0x29, 0x87, 0x53, 0xb7, 0x7b, 0x39, 0x45, 0xfc, 0xa3, 0xae, 0x26, 0x55, 0xc4, - 0x9a, 0xf7, 0x4b, 0x47, 0x64, 0x52, 0xd5, 0xdf, 0x9b, 0x38, 0x90, 0x61, 0xf5, 0x8b, 0x0e, 0x4c, - 0x78, 0x99, 0x50, 0x13, 0x66, 0x07, 0xb2, 0x62, 0x93, 0x9a, 0x89, 0xd2, 0xf8, 0x15, 0xa6, 0xe4, - 0x65, 0xa3, 0x5a, 0x70, 0x07, 0x73, 0xf4, 0x43, 0x07, 0xce, 0x27, 0x5e, 0xbc, 0xcd, 0xb3, 0x39, - 0xc7, 0xe9, 0x5d, 0x5d, 0xd1, 0xb8, 0xd3, 0x6c, 0x35, 0xbe, 0x62, 0x7d, 0x35, 0x6e, 0x74, 0xe7, - 0xc9, 0xd7, 0xe5, 0xa3, 0x62, 0x5d, 0x9e, 0xdf, 0x07, 0x13, 0xef, 0xd7, 0xf4, 0xc9, 0xcf, 0x38, - 0xfc, 0xd5, 0xaf, 0xae, 0x2a, 0xdf, 0xa6, 0xa9, 0xf2, 0xad, 0xd8, 0x7c, 0x77, 0x48, 0xd7, 0x3d, - 0x7f, 0xd5, 0x81, 0xd3, 0x79, 0x3b, 0x52, 0x4e, 0x93, 0x3e, 0x6a, 0x36, 0xc9, 0xe2, 0x29, 0x4b, - 0x6f, 0x90, 0x95, 0x67, 0x4f, 0x26, 0xaf, 0xc2, 0x23, 0x77, 0xfb, 0x8a, 0x77, 0xa3, 0x37, 0xa4, - 0xab, 0xc5, 0x7f, 0x36, 0xac, 0x79, 0x21, 0x13, 0xd2, 0xb2, 0x1e, 0xc3, 0x1d, 0xc0, 0x80, 0x1f, - 0x34, 0xfc, 0x80, 0x88, 0xfb, 0x9a, 0x36, 0xcf, 0xb0, 0xe2, 0xd9, 0x22, 0x4a, 0x1d, 0x0b, 0x2e, - 0xf7, 0xd9, 0x29, 0x99, 0x7d, 0x08, 0xae, 0xff, 0xf8, 0x1f, 0x82, 0xbb, 0x09, 0xc3, 0x37, 0xfd, - 0xa4, 0xce, 0x82, 0x29, 0x84, 0xaf, 0xcf, 0xc2, 0x3d, 0x47, 0x4a, 0x2e, 0xed, 0xfb, 0x0d, 0xc9, - 0x00, 0xa7, 0xbc, 0xd0, 0x45, 0xce, 0x98, 0x45, 0x6e, 0x67, 0x43, 0x6a, 0x6f, 0xc8, 0x02, 0x9c, - 0xe2, 0xd0, 0xc1, 0x1a, 0xa5, 0xbf, 0x64, 0x0e, 0x28, 0x91, 0x19, 0xd9, 0x46, 0xc6, 0x4b, 0x41, - 0x91, 0xdf, 0x26, 0xbe, 0xa1, 0xf1, 0xc0, 0x06, 0x47, 0x95, 0x9c, 0x7a, 0xa8, 0x6b, 0x72, 0xea, - 0xd7, 0x99, 0xc2, 0x96, 0xf8, 0x41, 0x9b, 0xac, 0x05, 0x22, 0xde, 0x7b, 0xc5, 0xce, 0xdd, 0x67, - 0x4e, 0x93, 0x1f, 0xc1, 0xd3, 0xdf, 0x58, 0xe3, 0xa7, 0xb9, 0x5c, 0x46, 0xf6, 0x75, 0xb9, 0xa4, - 0x26, 0x97, 0x51, 0xeb, 0x26, 0x97, 0x84, 0xb4, 0xac, 0x98, 0x5c, 0x7e, 0xa6, 0xcc, 0x01, 0x7f, - 0xee, 0x00, 0x52, 0x7a, 0x97, 0x12, 0xa8, 0xc7, 0x10, 0x54, 0xf9, 0x09, 0x07, 0x20, 0x50, 0xcf, - 0x85, 0xda, 0xdd, 0x05, 0x39, 0xcd, 0xb4, 0x01, 0x29, 0x0c, 0x6b, 0x3c, 0xdd, 0x3f, 0x75, 0xd2, - 0xd8, 0xe5, 0xb4, 0xef, 0xc7, 0x10, 0x44, 0xb6, 0x6b, 0x06, 0x91, 0x6d, 0x58, 0x34, 0xdd, 0xab, - 0x6e, 0x74, 0x09, 0x27, 0xfb, 0x49, 0x01, 0x4e, 0xe8, 0xc8, 0x65, 0x72, 0x1c, 0x1f, 0xfb, 0xa6, - 0x11, 0x41, 0x7b, 0xcd, 0x6e, 0x7f, 0xcb, 0xc2, 0x03, 0x94, 0x17, 0xad, 0xfd, 0xf1, 0x4c, 0xb4, - 0xf6, 0x0d, 0xfb, 0xac, 0xf7, 0x0f, 0xd9, 0xfe, 0xcf, 0x0e, 0x9c, 0xca, 0xd4, 0x38, 0x86, 0x09, - 0xb6, 0x63, 0x4e, 0xb0, 0xe7, 0xad, 0xf7, 0xba, 0xcb, 0xec, 0xfa, 0x76, 0xa1, 0xa3, 0xb7, 0xec, - 0x10, 0xf7, 0x69, 0x07, 0x8a, 0x54, 0x5b, 0x96, 0xf1, 0x5c, 0x1f, 0x3d, 0x92, 0x19, 0xc0, 0xf4, - 0x7a, 0x21, 0x9d, 0x55, 0xfb, 0x18, 0x0c, 0x73, 0xee, 0x93, 0x9f, 0x72, 0x00, 0x52, 0xa4, 0xfb, - 0xa5, 0x02, 0xbb, 0xdf, 0x2d, 0xc0, 0x99, 0xdc, 0x69, 0x84, 0x3e, 0xab, 0x2c, 0x72, 0x8e, 0xed, - 0x68, 0x45, 0x83, 0x91, 0x6e, 0x98, 0x1b, 0x33, 0x0c, 0x73, 0xc2, 0x1e, 0x77, 0xbf, 0x0e, 0x30, - 0x42, 0x4c, 0x6b, 0x83, 0xf5, 0x63, 0x27, 0x0d, 0x80, 0x55, 0x79, 0x8d, 0xfe, 0x02, 0x5e, 0xe2, - 0x71, 0x7f, 0xa2, 0xdd, 0x70, 0x90, 0x1d, 0x3d, 0x06, 0x59, 0x71, 0xd3, 0x94, 0x15, 0xd8, 0xbe, - 0x1f, 0xb9, 0x8b, 0xb0, 0x78, 0x05, 0xf2, 0x1c, 0xcb, 0xbd, 0x25, 0x81, 0x34, 0xae, 0xc3, 0x16, - 0x7a, 0xbe, 0x0e, 0x3b, 0x06, 0x23, 0x2f, 0xfa, 0x2a, 0x81, 0xe8, 0xec, 0xf4, 0xf7, 0x7e, 0x74, - 0xe1, 0x81, 0xef, 0xff, 0xe8, 0xc2, 0x03, 0x3f, 0xfc, 0xd1, 0x85, 0x07, 0x3e, 0x71, 0xfb, 0x82, - 0xf3, 0xbd, 0xdb, 0x17, 0x9c, 0xef, 0xdf, 0xbe, 0xe0, 0xfc, 0xf0, 0xf6, 0x05, 0xe7, 0xdf, 0xde, - 0xbe, 0xe0, 0xfc, 0xad, 0x7f, 0x77, 0xe1, 0x81, 0x17, 0x87, 0x64, 0xc7, 0xfe, 0x5f, 0x00, 0x00, - 0x00, 0xff, 0xff, 0xc9, 0x42, 0x1f, 0x61, 0xd5, 0xd8, 0x00, 0x00, + // 11167 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x7d, 0x6d, 0x70, 0x24, 0xc7, + 0x75, 0x18, 0x67, 0x81, 0xc5, 0xc7, 0xc3, 0xc7, 0xe1, 0xfa, 0xbe, 0x96, 0x38, 0xf2, 0x40, 0x0f, + 0x45, 0x86, 0xb4, 0x28, 0x9c, 0x79, 0x94, 0x12, 0x46, 0x4a, 0x24, 0xe1, 0xe3, 0x80, 0x03, 0x01, + 0x1c, 0xc0, 0x5e, 0xdc, 0x9d, 0x49, 0xd1, 0x92, 0x06, 0xbb, 0x8d, 0xdd, 0x21, 0x76, 0x67, 0x96, + 0x33, 0xb3, 0xb8, 0x03, 0x3f, 0x24, 0x85, 0xfa, 0x8e, 0x65, 0x2b, 0x96, 0x25, 0x59, 0x52, 0x92, + 0x2a, 0x45, 0x91, 0x12, 0x96, 0xec, 0x4a, 0x95, 0xfd, 0x2b, 0x65, 0xff, 0x4b, 0xa5, 0x5c, 0x4a, + 0x39, 0x95, 0xc8, 0x15, 0xa5, 0xac, 0x1f, 0x36, 0x18, 0x5d, 0x12, 0x55, 0x2a, 0x89, 0xaa, 0x62, + 0x55, 0x9c, 0xc4, 0x97, 0x8f, 0x4a, 0xf5, 0xe7, 0x74, 0xcf, 0xce, 0xe2, 0x16, 0xb8, 0x06, 0x4e, + 0x65, 0xff, 0x02, 0xf6, 0xf5, 0xeb, 0xf7, 0xba, 0x7b, 0xba, 0x5f, 0xbf, 0x7e, 0xef, 0xf5, 0x6b, + 0x58, 0xaf, 0xf9, 0x49, 0xbd, 0xbd, 0x39, 0x5d, 0x09, 0x9b, 0x17, 0xbd, 0xa8, 0x16, 0xb6, 0xa2, + 0xf0, 0x65, 0xf6, 0xcf, 0xbb, 0x6e, 0x86, 0xd1, 0xf6, 0x56, 0x23, 0xbc, 0x19, 0x5f, 0xdc, 0x79, + 0xe6, 0x62, 0x6b, 0xbb, 0x76, 0xd1, 0x6b, 0xf9, 0xf1, 0x45, 0x09, 0xbd, 0xb8, 0xf3, 0xb4, 0xd7, + 0x68, 0xd5, 0xbd, 0xa7, 0x2f, 0xd6, 0x48, 0x40, 0x22, 0x2f, 0x21, 0xd5, 0xe9, 0x56, 0x14, 0x26, + 0x21, 0xfa, 0x60, 0x4a, 0x71, 0x5a, 0x52, 0x64, 0xff, 0x7c, 0x44, 0x51, 0x9c, 0xde, 0x79, 0x66, + 0xba, 0xb5, 0x5d, 0x9b, 0xa6, 0x14, 0xa7, 0x25, 0x74, 0x5a, 0x52, 0x9c, 0x7c, 0x97, 0xd6, 0xa6, + 0x5a, 0x58, 0x0b, 0x2f, 0x32, 0xc2, 0x9b, 0xed, 0x2d, 0xf6, 0x8b, 0xfd, 0x60, 0xff, 0x71, 0x86, + 0x93, 0xee, 0xf6, 0xb3, 0xf1, 0xb4, 0x1f, 0xd2, 0xf6, 0x5d, 0xac, 0x84, 0x11, 0xb9, 0xb8, 0xd3, + 0xd1, 0xa8, 0xc9, 0x77, 0x68, 0x38, 0xad, 0xb0, 0xe1, 0x57, 0x76, 0xf3, 0xb0, 0xde, 0x9d, 0x62, + 0x35, 0xbd, 0x4a, 0xdd, 0x0f, 0x48, 0xb4, 0x9b, 0x76, 0xbd, 0x49, 0x12, 0x2f, 0xaf, 0xd6, 0xc5, + 0x6e, 0xb5, 0xa2, 0x76, 0x90, 0xf8, 0x4d, 0xd2, 0x51, 0xe1, 0xaf, 0xde, 0xad, 0x42, 0x5c, 0xa9, + 0x93, 0xa6, 0xd7, 0x51, 0xef, 0x99, 0x6e, 0xf5, 0xda, 0x89, 0xdf, 0xb8, 0xe8, 0x07, 0x49, 0x9c, + 0x44, 0xd9, 0x4a, 0xee, 0x65, 0x18, 0x98, 0x69, 0x86, 0xed, 0x20, 0x41, 0xef, 0x83, 0xe2, 0x8e, + 0xd7, 0x68, 0x93, 0x92, 0xf3, 0x88, 0xf3, 0xc4, 0xf0, 0xec, 0x63, 0xdf, 0xdb, 0x9b, 0x7a, 0xe0, + 0xf6, 0xde, 0x54, 0xf1, 0x3a, 0x05, 0xde, 0xd9, 0x9b, 0x3a, 0x4d, 0x82, 0x4a, 0x58, 0xf5, 0x83, + 0xda, 0xc5, 0x97, 0xe3, 0x30, 0x98, 0xbe, 0xda, 0x6e, 0x6e, 0x92, 0x08, 0xf3, 0x3a, 0xee, 0xbf, + 0x29, 0xc0, 0x89, 0x99, 0xa8, 0x52, 0xf7, 0x77, 0x48, 0x39, 0xa1, 0xf4, 0x6b, 0xbb, 0xa8, 0x0e, + 0x7d, 0x89, 0x17, 0x31, 0x72, 0x23, 0x97, 0x56, 0xa7, 0xef, 0xf5, 0xbb, 0x4f, 0x6f, 0x78, 0x91, + 0xa4, 0x3d, 0x3b, 0x78, 0x7b, 0x6f, 0xaa, 0x6f, 0xc3, 0x8b, 0x30, 0x65, 0x81, 0x1a, 0xd0, 0x1f, + 0x84, 0x01, 0x29, 0x15, 0x18, 0xab, 0xab, 0xf7, 0xce, 0xea, 0x6a, 0x18, 0xa8, 0x7e, 0xcc, 0x0e, + 0xdd, 0xde, 0x9b, 0xea, 0xa7, 0x10, 0xcc, 0xb8, 0xd0, 0x7e, 0xbd, 0xea, 0xb7, 0x4a, 0x7d, 0xb6, + 0xfa, 0xf5, 0xa2, 0xdf, 0x32, 0xfb, 0xf5, 0xa2, 0xdf, 0xc2, 0x94, 0x85, 0xfb, 0xf9, 0x02, 0x0c, + 0xcf, 0x44, 0xb5, 0x76, 0x93, 0x04, 0x49, 0x8c, 0x3e, 0x0e, 0xd0, 0xf2, 0x22, 0xaf, 0x49, 0x12, + 0x12, 0xc5, 0x25, 0xe7, 0x91, 0xbe, 0x27, 0x46, 0x2e, 0x2d, 0xdf, 0x3b, 0xfb, 0x75, 0x49, 0x73, + 0x16, 0x89, 0x4f, 0x0e, 0x0a, 0x14, 0x63, 0x8d, 0x25, 0x7a, 0x0d, 0x86, 0xbd, 0x28, 0xf1, 0xb7, + 0xbc, 0x4a, 0x12, 0x97, 0x0a, 0x8c, 0xff, 0x73, 0xf7, 0xce, 0x7f, 0x46, 0x90, 0x9c, 0x3d, 0x29, + 0xd8, 0x0f, 0x4b, 0x48, 0x8c, 0x53, 0x7e, 0xee, 0xef, 0xf6, 0xc3, 0xc8, 0x4c, 0x94, 0x2c, 0xce, + 0x95, 0x13, 0x2f, 0x69, 0xc7, 0xe8, 0x0f, 0x1c, 0x38, 0x15, 0xf3, 0x61, 0xf3, 0x49, 0xbc, 0x1e, + 0x85, 0x15, 0x12, 0xc7, 0xa4, 0x2a, 0xc6, 0x65, 0xcb, 0x4a, 0xbb, 0x24, 0xb3, 0xe9, 0x72, 0x27, + 0xa3, 0xcb, 0x41, 0x12, 0xed, 0xce, 0x3e, 0x2d, 0xda, 0x7c, 0x2a, 0x07, 0xe3, 0xcd, 0xb7, 0xa7, + 0x90, 0xec, 0x0a, 0xa5, 0xc4, 0x3f, 0x31, 0xce, 0x6b, 0x35, 0xfa, 0xba, 0x03, 0xa3, 0xad, 0xb0, + 0x1a, 0x63, 0x52, 0x09, 0xdb, 0x2d, 0x52, 0x15, 0xc3, 0xfb, 0x11, 0xbb, 0xdd, 0x58, 0xd7, 0x38, + 0xf0, 0xf6, 0x9f, 0x16, 0xed, 0x1f, 0xd5, 0x8b, 0xb0, 0xd1, 0x14, 0xf4, 0x2c, 0x8c, 0x06, 0x61, + 0x52, 0x6e, 0x91, 0x8a, 0xbf, 0xe5, 0x93, 0x2a, 0x9b, 0xf8, 0x43, 0x69, 0xcd, 0xab, 0x5a, 0x19, + 0x36, 0x30, 0x27, 0x17, 0xa0, 0xd4, 0x6d, 0xe4, 0xd0, 0x04, 0xf4, 0x6d, 0x93, 0x5d, 0x2e, 0x6c, + 0x30, 0xfd, 0x17, 0x9d, 0x96, 0x02, 0x88, 0x2e, 0xe3, 0x21, 0x21, 0x59, 0xde, 0x5b, 0x78, 0xd6, + 0x99, 0xfc, 0x00, 0x9c, 0xec, 0x68, 0xfa, 0x41, 0x08, 0xb8, 0xdf, 0x1f, 0x80, 0x21, 0xf9, 0x29, + 0xd0, 0x23, 0xd0, 0x1f, 0x78, 0x4d, 0x29, 0xe7, 0x46, 0x45, 0x3f, 0xfa, 0xaf, 0x7a, 0x4d, 0xba, + 0xc2, 0xbd, 0x26, 0xa1, 0x18, 0x2d, 0x2f, 0xa9, 0x33, 0x3a, 0x1a, 0xc6, 0xba, 0x97, 0xd4, 0x31, + 0x2b, 0x41, 0x0f, 0x41, 0x7f, 0x33, 0xac, 0x12, 0x36, 0x16, 0x45, 0x2e, 0x21, 0x56, 0xc3, 0x2a, + 0xc1, 0x0c, 0x4a, 0xeb, 0x6f, 0x45, 0x61, 0xb3, 0xd4, 0x6f, 0xd6, 0x5f, 0x88, 0xc2, 0x26, 0x66, + 0x25, 0xe8, 0x6b, 0x0e, 0x4c, 0xc8, 0xb9, 0xbd, 0x12, 0x56, 0xbc, 0xc4, 0x0f, 0x83, 0x52, 0x91, + 0x49, 0x14, 0x6c, 0x6f, 0x49, 0x49, 0xca, 0xb3, 0x25, 0xd1, 0x84, 0x89, 0x6c, 0x09, 0xee, 0x68, + 0x05, 0xba, 0x04, 0x50, 0x6b, 0x84, 0x9b, 0x5e, 0x83, 0x0e, 0x48, 0x69, 0x80, 0x75, 0x41, 0x49, + 0x86, 0x45, 0x55, 0x82, 0x35, 0x2c, 0x74, 0x0b, 0x06, 0x3d, 0x2e, 0xfd, 0x4b, 0x83, 0xac, 0x13, + 0xcf, 0xdb, 0xe8, 0x84, 0xb1, 0x9d, 0xcc, 0x8e, 0xdc, 0xde, 0x9b, 0x1a, 0x14, 0x40, 0x2c, 0xd9, + 0xa1, 0xa7, 0x60, 0x28, 0x6c, 0xd1, 0x76, 0x7b, 0x8d, 0xd2, 0x10, 0x9b, 0x98, 0x13, 0xa2, 0xad, + 0x43, 0x6b, 0x02, 0x8e, 0x15, 0x06, 0x7a, 0x12, 0x06, 0xe3, 0xf6, 0x26, 0xfd, 0x8e, 0xa5, 0x61, + 0xd6, 0xb1, 0x13, 0x02, 0x79, 0xb0, 0xcc, 0xc1, 0x58, 0x96, 0xa3, 0xf7, 0xc0, 0x48, 0x44, 0x2a, + 0xed, 0x28, 0x26, 0xf4, 0xc3, 0x96, 0x80, 0xd1, 0x3e, 0x25, 0xd0, 0x47, 0x70, 0x5a, 0x84, 0x75, + 0x3c, 0xf4, 0x7e, 0x18, 0xa7, 0x1f, 0xf8, 0xf2, 0xad, 0x56, 0x44, 0xe2, 0x98, 0x7e, 0xd5, 0x11, + 0xc6, 0xe8, 0xac, 0xa8, 0x39, 0xbe, 0x60, 0x94, 0xe2, 0x0c, 0x36, 0x7a, 0x1d, 0xc0, 0x53, 0x32, + 0xa3, 0x34, 0xca, 0x06, 0x73, 0xc5, 0xde, 0x8c, 0x58, 0x9c, 0x9b, 0x1d, 0xa7, 0xdf, 0x31, 0xfd, + 0x8d, 0x35, 0x7e, 0x74, 0x7c, 0xaa, 0xa4, 0x41, 0x12, 0x52, 0x2d, 0x8d, 0xb1, 0x0e, 0xab, 0xf1, + 0x99, 0xe7, 0x60, 0x2c, 0xcb, 0xdd, 0xbf, 0x5b, 0x00, 0x8d, 0x0a, 0x9a, 0x85, 0x21, 0x21, 0xd7, + 0xc4, 0x92, 0x9c, 0x7d, 0x5c, 0x7e, 0x07, 0xf9, 0x05, 0xef, 0xec, 0xe5, 0xca, 0x43, 0x55, 0x0f, + 0xbd, 0x01, 0x23, 0xad, 0xb0, 0xba, 0x4a, 0x12, 0xaf, 0xea, 0x25, 0x9e, 0xd8, 0xcd, 0x2d, 0xec, + 0x30, 0x92, 0xe2, 0xec, 0x09, 0xfa, 0xe9, 0xd6, 0x53, 0x16, 0x58, 0xe7, 0x87, 0x9e, 0x03, 0x14, + 0x93, 0x68, 0xc7, 0xaf, 0x90, 0x99, 0x4a, 0x85, 0xaa, 0x44, 0x6c, 0x01, 0xf4, 0xb1, 0xce, 0x4c, + 0x8a, 0xce, 0xa0, 0x72, 0x07, 0x06, 0xce, 0xa9, 0xe5, 0xfe, 0xa0, 0x00, 0xe3, 0x5a, 0x5f, 0x5b, + 0xa4, 0x82, 0xde, 0x72, 0xe0, 0x84, 0xda, 0xce, 0x66, 0x77, 0xaf, 0xd2, 0x59, 0xc5, 0x37, 0x2b, + 0x62, 0xf3, 0xfb, 0x52, 0x5e, 0xea, 0xa7, 0xe0, 0xc3, 0x65, 0xfd, 0x39, 0xd1, 0x87, 0x13, 0x99, + 0x52, 0x9c, 0x6d, 0xd6, 0xe4, 0x57, 0x1d, 0x38, 0x9d, 0x47, 0x22, 0x47, 0xe6, 0xd6, 0x75, 0x99, + 0x6b, 0x55, 0x78, 0x51, 0xae, 0xb4, 0x33, 0xba, 0x1c, 0xff, 0x7f, 0x05, 0x98, 0xd0, 0xa7, 0x10, + 0xd3, 0x04, 0xfe, 0x99, 0x03, 0x67, 0x64, 0x0f, 0x30, 0x89, 0xdb, 0x8d, 0xcc, 0xf0, 0x36, 0xad, + 0x0e, 0x2f, 0xdf, 0x49, 0x67, 0xf2, 0xf8, 0xf1, 0x61, 0x7e, 0x58, 0x0c, 0xf3, 0x99, 0x5c, 0x1c, + 0x9c, 0xdf, 0xd4, 0xc9, 0x6f, 0x3b, 0x30, 0xd9, 0x9d, 0x68, 0xce, 0xc0, 0xb7, 0xcc, 0x81, 0x7f, + 0xd1, 0x5e, 0x27, 0x39, 0x7b, 0x36, 0xfc, 0xac, 0xb3, 0xfa, 0x07, 0xf8, 0xad, 0x21, 0xe8, 0xd8, + 0x43, 0xd0, 0xd3, 0x30, 0x22, 0xc4, 0xf1, 0x4a, 0x58, 0x8b, 0x59, 0x23, 0x87, 0xf8, 0x5a, 0x9b, + 0x49, 0xc1, 0x58, 0xc7, 0x41, 0x55, 0x28, 0xc4, 0xcf, 0x88, 0xa6, 0x5b, 0x10, 0x6f, 0xe5, 0x67, + 0x94, 0x16, 0x39, 0x70, 0x7b, 0x6f, 0xaa, 0x50, 0x7e, 0x06, 0x17, 0xe2, 0x67, 0xa8, 0xa6, 0x5e, + 0xf3, 0x13, 0x7b, 0x9a, 0xfa, 0xa2, 0x9f, 0x28, 0x3e, 0x4c, 0x53, 0x5f, 0xf4, 0x13, 0x4c, 0x59, + 0xd0, 0x13, 0x48, 0x3d, 0x49, 0x5a, 0x6c, 0xc7, 0xb7, 0x72, 0x02, 0xb9, 0xb2, 0xb1, 0xb1, 0xae, + 0x78, 0x31, 0xfd, 0x82, 0x42, 0x30, 0xe3, 0x82, 0x3e, 0xe7, 0xd0, 0x11, 0xe7, 0x85, 0x61, 0xb4, + 0x2b, 0x14, 0x87, 0x6b, 0xf6, 0xa6, 0x40, 0x18, 0xed, 0x2a, 0xe6, 0xe2, 0x43, 0xaa, 0x02, 0xac, + 0xb3, 0x66, 0x1d, 0xaf, 0x6e, 0xc5, 0x4c, 0x4f, 0xb0, 0xd3, 0xf1, 0xf9, 0x85, 0x72, 0xa6, 0xe3, + 0xf3, 0x0b, 0x65, 0xcc, 0xb8, 0xd0, 0x0f, 0x1a, 0x79, 0x37, 0x85, 0x8e, 0x61, 0xe1, 0x83, 0x62, + 0xef, 0xa6, 0xf9, 0x41, 0xb1, 0x77, 0x13, 0x53, 0x16, 0x94, 0x53, 0x18, 0xc7, 0x4c, 0xa5, 0xb0, + 0xc2, 0x69, 0xad, 0x5c, 0x36, 0x39, 0xad, 0x95, 0xcb, 0x98, 0xb2, 0x60, 0x93, 0xb4, 0x12, 0x33, + 0x7d, 0xc4, 0xce, 0x24, 0x9d, 0xcb, 0x70, 0x5a, 0x9c, 0x2b, 0x63, 0xca, 0x82, 0x8a, 0x0c, 0xef, + 0xd5, 0x76, 0xc4, 0x95, 0x99, 0x91, 0x4b, 0x6b, 0x16, 0xe6, 0x0b, 0x25, 0xa7, 0xb8, 0x0d, 0xdf, + 0xde, 0x9b, 0x2a, 0x32, 0x10, 0xe6, 0x8c, 0xdc, 0xdf, 0xef, 0x4b, 0xc5, 0x85, 0x94, 0xe7, 0xe8, + 0xd7, 0xd8, 0x46, 0x28, 0x64, 0x81, 0x50, 0x7d, 0x9d, 0x23, 0x53, 0x7d, 0x4f, 0xf1, 0x1d, 0xcf, + 0x60, 0x87, 0xb3, 0xfc, 0xd1, 0x97, 0x9c, 0xce, 0xb3, 0xad, 0x67, 0x7f, 0x2f, 0x4b, 0x37, 0x66, + 0xbe, 0x57, 0xec, 0x7b, 0xe4, 0x9d, 0xfc, 0x9c, 0x93, 0x2a, 0x11, 0x71, 0xb7, 0x7d, 0xe0, 0xa3, + 0xe6, 0x3e, 0x60, 0xf1, 0x40, 0xae, 0xcb, 0xfd, 0xcf, 0x3b, 0x30, 0x26, 0xe1, 0x54, 0x3d, 0x8e, + 0xd1, 0x2d, 0x18, 0x92, 0x2d, 0x15, 0x5f, 0xcf, 0xa6, 0x2d, 0x40, 0x29, 0xf1, 0xaa, 0x31, 0x8a, + 0x9b, 0xfb, 0xd6, 0x00, 0xa0, 0x74, 0xaf, 0x6a, 0x85, 0xb1, 0xcf, 0x24, 0xd1, 0x21, 0x76, 0xa1, + 0x40, 0xdb, 0x85, 0xae, 0xdb, 0xdc, 0x85, 0xd2, 0x66, 0x19, 0xfb, 0xd1, 0x97, 0x32, 0x72, 0x9b, + 0x6f, 0x4c, 0x1f, 0x39, 0x12, 0xb9, 0xad, 0x35, 0x61, 0x7f, 0x09, 0xbe, 0x23, 0x24, 0x38, 0xdf, + 0xba, 0x7e, 0xd1, 0xae, 0x04, 0xd7, 0x5a, 0x91, 0x95, 0xe5, 0x11, 0x97, 0xb0, 0x7c, 0xef, 0xba, + 0x61, 0x55, 0xc2, 0x6a, 0x5c, 0x4d, 0x59, 0x1b, 0x71, 0x59, 0x3b, 0x60, 0x8b, 0xa7, 0x26, 0x6b, + 0xb3, 0x3c, 0x95, 0xd4, 0x7d, 0x55, 0x4a, 0x5d, 0xbe, 0x6b, 0xbd, 0x60, 0x59, 0xea, 0x6a, 0x7c, + 0x3b, 0xe5, 0xef, 0x2b, 0x70, 0xa6, 0x13, 0x0f, 0x93, 0x2d, 0x74, 0x11, 0x86, 0x2b, 0x61, 0xb0, + 0xe5, 0xd7, 0x56, 0xbd, 0x96, 0x38, 0xaf, 0x29, 0x59, 0x34, 0x27, 0x0b, 0x70, 0x8a, 0x83, 0x1e, + 0xe6, 0x82, 0x87, 0x5b, 0x44, 0x46, 0x04, 0x6a, 0xdf, 0x32, 0xd9, 0x65, 0x52, 0xe8, 0xbd, 0x43, + 0x5f, 0xfb, 0xe6, 0xd4, 0x03, 0x9f, 0xf8, 0xe3, 0x47, 0x1e, 0x70, 0xff, 0xb0, 0x0f, 0xce, 0xe7, + 0xf2, 0x14, 0xda, 0xfa, 0x6f, 0x19, 0xda, 0xba, 0x56, 0x2e, 0xa4, 0xc8, 0x0d, 0x9b, 0x8a, 0xac, + 0x46, 0x3e, 0x4f, 0x2f, 0xd7, 0x8a, 0x71, 0x7e, 0xa3, 0xe8, 0x40, 0x05, 0x5e, 0x93, 0xc4, 0x2d, + 0xaf, 0x42, 0x44, 0xef, 0xd5, 0x40, 0x5d, 0x95, 0x05, 0x38, 0xc5, 0xe1, 0x47, 0xe8, 0x2d, 0xaf, + 0xdd, 0x48, 0x84, 0xa1, 0x4c, 0x3b, 0x42, 0x33, 0x30, 0x96, 0xe5, 0xe8, 0xef, 0x39, 0x80, 0x3a, + 0xb9, 0x8a, 0x85, 0xb8, 0x71, 0x14, 0xe3, 0x30, 0x7b, 0xf6, 0xb6, 0x76, 0x08, 0xd7, 0x7a, 0x9a, + 0xd3, 0x0e, 0xed, 0x9b, 0x7e, 0x2c, 0xdd, 0x87, 0xf8, 0xe1, 0xa0, 0x07, 0x1b, 0x1a, 0x33, 0xb5, + 0x54, 0x2a, 0x24, 0x8e, 0xb9, 0x39, 0x4e, 0x37, 0xb5, 0x30, 0x30, 0x96, 0xe5, 0x68, 0x0a, 0x8a, + 0x24, 0x8a, 0xc2, 0x48, 0x9c, 0xb5, 0xd9, 0x34, 0xbe, 0x4c, 0x01, 0x98, 0xc3, 0xdd, 0x1f, 0x17, + 0xa0, 0xd4, 0xed, 0x74, 0x82, 0x7e, 0x47, 0x3b, 0x57, 0x8b, 0x93, 0x93, 0x38, 0xf8, 0x85, 0x47, + 0x77, 0x26, 0xca, 0x1e, 0x00, 0xbb, 0x9c, 0xb0, 0x45, 0x29, 0xce, 0x36, 0x70, 0xf2, 0xcb, 0xda, + 0x09, 0x5b, 0x27, 0x91, 0xb3, 0xc1, 0x6f, 0x99, 0x1b, 0xfc, 0xba, 0xed, 0x4e, 0xe9, 0xdb, 0xfc, + 0x9f, 0x14, 0xe1, 0x94, 0x2c, 0x2d, 0x13, 0xba, 0x55, 0x3e, 0xdf, 0x26, 0xd1, 0x2e, 0xfa, 0x23, + 0x07, 0x4e, 0x7b, 0x59, 0xd3, 0x8d, 0x4f, 0x8e, 0x60, 0xa0, 0x35, 0xae, 0xd3, 0x33, 0x39, 0x1c, + 0xf9, 0x40, 0x5f, 0x12, 0x03, 0x7d, 0x3a, 0x0f, 0xa5, 0x8b, 0xdd, 0x3d, 0xb7, 0x03, 0xe8, 0x59, + 0x18, 0x95, 0x70, 0x66, 0xee, 0xe1, 0x4b, 0x5c, 0x19, 0xb7, 0x67, 0xb4, 0x32, 0x6c, 0x60, 0xd2, + 0x9a, 0x09, 0x69, 0xb6, 0x1a, 0x5e, 0x42, 0x34, 0x43, 0x91, 0xaa, 0xb9, 0xa1, 0x95, 0x61, 0x03, + 0x13, 0x3d, 0x0e, 0x03, 0x41, 0x58, 0x25, 0x4b, 0x55, 0x61, 0x20, 0x1e, 0x17, 0x75, 0x06, 0xae, + 0x32, 0x28, 0x16, 0xa5, 0xe8, 0xb1, 0xd4, 0x1a, 0x57, 0x64, 0x4b, 0x68, 0x24, 0xcf, 0x12, 0x87, + 0xfe, 0x81, 0x03, 0xc3, 0xb4, 0xc6, 0xc6, 0x6e, 0x8b, 0xd0, 0xbd, 0x8d, 0x7e, 0x91, 0xea, 0xd1, + 0x7c, 0x91, 0xab, 0x92, 0x8d, 0x69, 0xea, 0x18, 0x56, 0xf0, 0x37, 0xdf, 0x9e, 0x1a, 0x92, 0x3f, + 0x70, 0xda, 0xaa, 0xc9, 0x45, 0x78, 0xb0, 0xeb, 0xd7, 0x3c, 0x90, 0x2b, 0xe0, 0x6f, 0xc0, 0xb8, + 0xd9, 0x88, 0x03, 0xf9, 0x01, 0xfe, 0xa9, 0xb6, 0xec, 0x78, 0xbf, 0x84, 0x3c, 0xbb, 0x6f, 0xda, + 0xac, 0x9a, 0x0c, 0xf3, 0x62, 0xea, 0x99, 0x93, 0x61, 0x5e, 0x4c, 0x86, 0x79, 0xf7, 0x0f, 0x9c, + 0x74, 0x69, 0x6a, 0x6a, 0x1e, 0xdd, 0x98, 0xdb, 0x51, 0x43, 0x08, 0x62, 0xb5, 0x31, 0x5f, 0xc3, + 0x2b, 0x98, 0xc2, 0xd1, 0x97, 0x35, 0xe9, 0x48, 0xab, 0xb5, 0x85, 0x5b, 0xc3, 0x92, 0x89, 0xde, + 0x20, 0xdc, 0x29, 0xff, 0x44, 0x01, 0xce, 0x36, 0xc1, 0xfd, 0x52, 0x01, 0x1e, 0xde, 0x57, 0x69, + 0xcd, 0x6d, 0xb8, 0x73, 0xdf, 0x1b, 0x4e, 0xb7, 0xb5, 0x88, 0xb4, 0xc2, 0x6b, 0x78, 0x45, 0x7c, + 0x2f, 0xb5, 0xad, 0x61, 0x0e, 0xc6, 0xb2, 0x9c, 0xaa, 0x0e, 0xdb, 0x64, 0x77, 0x21, 0x8c, 0x9a, + 0x5e, 0x22, 0xa4, 0x83, 0x52, 0x1d, 0x96, 0x65, 0x01, 0x4e, 0x71, 0xdc, 0x3f, 0x72, 0x20, 0xdb, + 0x00, 0xe4, 0xc1, 0x78, 0x3b, 0x26, 0x11, 0xdd, 0x52, 0xcb, 0xa4, 0x12, 0x11, 0x39, 0x3d, 0x1f, + 0x9b, 0xe6, 0xde, 0x7e, 0xda, 0xc3, 0xe9, 0x4a, 0x18, 0x91, 0xe9, 0x9d, 0xa7, 0xa7, 0x39, 0xc6, + 0x32, 0xd9, 0x2d, 0x93, 0x06, 0xa1, 0x34, 0x66, 0xd1, 0xed, 0xbd, 0xa9, 0xf1, 0x6b, 0x06, 0x01, + 0x9c, 0x21, 0x48, 0x59, 0xb4, 0xbc, 0x38, 0xbe, 0x19, 0x46, 0x55, 0xc1, 0xa2, 0x70, 0x60, 0x16, + 0xeb, 0x06, 0x01, 0x9c, 0x21, 0xe8, 0xfe, 0x80, 0x1e, 0x1f, 0x75, 0xad, 0x15, 0x7d, 0x93, 0xea, + 0x3e, 0x14, 0x32, 0xdb, 0x08, 0x37, 0xe7, 0xc2, 0x20, 0xf1, 0xfc, 0x80, 0xc8, 0x60, 0x81, 0x0d, + 0x4b, 0x3a, 0xb2, 0x41, 0x3b, 0xb5, 0xe1, 0x77, 0x96, 0xe1, 0x9c, 0xb6, 0x50, 0x1d, 0x67, 0xb3, + 0x11, 0x6e, 0x66, 0xbd, 0x80, 0x14, 0x09, 0xb3, 0x12, 0xf7, 0xa7, 0x0e, 0x9c, 0xeb, 0xa2, 0x8c, + 0xa3, 0xaf, 0x3a, 0x30, 0xb6, 0xf9, 0x33, 0xd1, 0x37, 0xb3, 0x19, 0xe8, 0xfd, 0x30, 0x4e, 0x01, + 0x74, 0x27, 0x12, 0x73, 0xb3, 0x60, 0x7a, 0xa8, 0x66, 0x8d, 0x52, 0x9c, 0xc1, 0x76, 0x7f, 0xbd, + 0x00, 0x39, 0x5c, 0xd0, 0x53, 0x30, 0x44, 0x82, 0x6a, 0x2b, 0xf4, 0x83, 0x44, 0x08, 0x23, 0x25, + 0xf5, 0x2e, 0x0b, 0x38, 0x56, 0x18, 0xe2, 0xfc, 0x21, 0x06, 0xa6, 0xd0, 0x71, 0xfe, 0x10, 0x2d, + 0x4f, 0x71, 0x50, 0x0d, 0x26, 0x3c, 0xee, 0x5f, 0x61, 0x73, 0x8f, 0x4d, 0xd3, 0xbe, 0x83, 0x4c, + 0xd3, 0xd3, 0xcc, 0xfd, 0x99, 0x21, 0x81, 0x3b, 0x88, 0xa2, 0xf7, 0xc0, 0x48, 0x3b, 0x26, 0xe5, + 0xf9, 0xe5, 0xb9, 0x88, 0x54, 0xf9, 0xa9, 0x58, 0xf3, 0xfb, 0x5d, 0x4b, 0x8b, 0xb0, 0x8e, 0xe7, + 0xfe, 0x73, 0x07, 0x06, 0x67, 0xbd, 0xca, 0x76, 0xb8, 0xb5, 0x45, 0x87, 0xa2, 0xda, 0x8e, 0x52, + 0xc3, 0x96, 0x36, 0x14, 0xf3, 0x02, 0x8e, 0x15, 0x06, 0xda, 0x80, 0x01, 0xbe, 0xe0, 0xc5, 0xb2, + 0xfb, 0x05, 0xad, 0x3f, 0x2a, 0x8e, 0x87, 0x4d, 0x87, 0x76, 0xe2, 0x37, 0xa6, 0x79, 0x1c, 0xcf, + 0xf4, 0x52, 0x90, 0xac, 0x45, 0xe5, 0x24, 0xf2, 0x83, 0xda, 0x2c, 0xd0, 0xed, 0x62, 0x81, 0xd1, + 0xc0, 0x82, 0x16, 0xed, 0x46, 0xd3, 0xbb, 0x25, 0xd9, 0x09, 0xf1, 0xa3, 0xba, 0xb1, 0x9a, 0x16, + 0x61, 0x1d, 0xcf, 0xfd, 0x43, 0x07, 0x86, 0x67, 0xbd, 0xd8, 0xaf, 0xfc, 0x05, 0x12, 0x3e, 0x1f, + 0x86, 0xe2, 0x9c, 0x57, 0xa9, 0x13, 0x74, 0x2d, 0x7b, 0xe8, 0x1d, 0xb9, 0xf4, 0x44, 0x1e, 0x1b, + 0x75, 0x00, 0xd6, 0x39, 0x8d, 0x75, 0x3b, 0x1a, 0xbb, 0x6f, 0x3b, 0x30, 0x3e, 0xd7, 0xf0, 0x49, + 0x90, 0xcc, 0x91, 0x28, 0x61, 0x03, 0x57, 0x83, 0x89, 0x8a, 0x82, 0x1c, 0x66, 0xe8, 0xd8, 0x6c, + 0x9d, 0xcb, 0x90, 0xc0, 0x1d, 0x44, 0x51, 0x15, 0x4e, 0x70, 0x58, 0xba, 0x2a, 0x0e, 0x34, 0x7e, + 0xcc, 0x3a, 0x3a, 0x67, 0x52, 0xc0, 0x59, 0x92, 0xee, 0x4f, 0x1c, 0x38, 0x37, 0xd7, 0x68, 0xc7, + 0x09, 0x89, 0x6e, 0x08, 0x69, 0x24, 0xd5, 0x5b, 0xf4, 0x51, 0x18, 0x6a, 0x4a, 0x8f, 0xad, 0x73, + 0x97, 0x09, 0xcc, 0xe4, 0x19, 0xc5, 0xa6, 0x8d, 0x59, 0xdb, 0x7c, 0x99, 0x54, 0x92, 0x55, 0x92, + 0x78, 0x69, 0x78, 0x41, 0x0a, 0xc3, 0x8a, 0x2a, 0x6a, 0x41, 0x7f, 0xdc, 0x22, 0x15, 0x7b, 0xd1, + 0x5d, 0xb2, 0x0f, 0xe5, 0x16, 0xa9, 0xa4, 0x72, 0x9d, 0xf9, 0x1a, 0x19, 0x27, 0xf7, 0x7f, 0x3b, + 0x70, 0xbe, 0x4b, 0x7f, 0x57, 0xfc, 0x38, 0x41, 0x2f, 0x75, 0xf4, 0x79, 0xba, 0xb7, 0x3e, 0xd3, + 0xda, 0xac, 0xc7, 0x4a, 0x20, 0x48, 0x88, 0xd6, 0xdf, 0x8f, 0x41, 0xd1, 0x4f, 0x48, 0x53, 0x9a, + 0xa1, 0x2d, 0x18, 0x8c, 0xba, 0xf4, 0x65, 0x76, 0x4c, 0xc6, 0xf8, 0x2d, 0x51, 0x7e, 0x98, 0xb3, + 0x75, 0xb7, 0x61, 0x60, 0x2e, 0x6c, 0xb4, 0x9b, 0x41, 0x6f, 0x91, 0x32, 0xc9, 0x6e, 0x8b, 0x64, + 0xf7, 0x48, 0xa6, 0xfe, 0xb3, 0x12, 0x69, 0x38, 0xea, 0xcb, 0x37, 0x1c, 0xb9, 0xff, 0xc2, 0x01, + 0xba, 0xaa, 0xaa, 0xbe, 0xf0, 0x24, 0x72, 0x72, 0x9c, 0xe1, 0xc3, 0x3a, 0xb9, 0x3b, 0x7b, 0x53, + 0x63, 0x0a, 0x51, 0xa3, 0xff, 0x61, 0x18, 0x88, 0xd9, 0x91, 0x5c, 0xb4, 0x61, 0x41, 0xea, 0xcf, + 0xfc, 0xa0, 0x7e, 0x67, 0x6f, 0xaa, 0xa7, 0xb0, 0xcd, 0x69, 0x45, 0x5b, 0x38, 0x3d, 0x05, 0x55, + 0xaa, 0xf0, 0x35, 0x49, 0x1c, 0x7b, 0x35, 0x79, 0xc2, 0x53, 0x0a, 0xdf, 0x2a, 0x07, 0x63, 0x59, + 0xee, 0x7e, 0xc5, 0x81, 0x31, 0xb5, 0x79, 0x51, 0xf5, 0x1d, 0x5d, 0xd5, 0xb7, 0x39, 0x3e, 0x53, + 0x1e, 0xee, 0x22, 0x71, 0xc4, 0x46, 0xbe, 0xff, 0x2e, 0xf8, 0x6e, 0x18, 0xad, 0x92, 0x16, 0x09, + 0xaa, 0x24, 0xa8, 0xd0, 0xe3, 0x37, 0x9d, 0x21, 0xc3, 0xb3, 0x13, 0xf4, 0xbc, 0x39, 0xaf, 0xc1, + 0xb1, 0x81, 0xe5, 0x7e, 0xcb, 0x81, 0x07, 0x15, 0xb9, 0x32, 0x49, 0x30, 0x49, 0xa2, 0x5d, 0x15, + 0xa6, 0x79, 0xb0, 0xdd, 0xea, 0x06, 0xd5, 0x7f, 0x93, 0x88, 0x33, 0x3f, 0xdc, 0x76, 0x35, 0xc2, + 0xb5, 0x65, 0x46, 0x04, 0x4b, 0x6a, 0xee, 0xaf, 0xf6, 0xc1, 0x69, 0xbd, 0x91, 0x4a, 0xc0, 0x7c, + 0xd2, 0x01, 0x50, 0x23, 0x40, 0x37, 0xe4, 0x3e, 0x3b, 0xbe, 0x2b, 0xe3, 0x4b, 0xa5, 0x22, 0x48, + 0x81, 0x63, 0xac, 0xb1, 0x45, 0x2f, 0xc0, 0xe8, 0x0e, 0x5d, 0x14, 0x64, 0x95, 0xaa, 0x0b, 0x71, + 0xa9, 0x8f, 0x35, 0x63, 0x2a, 0xef, 0x63, 0x5e, 0x4f, 0xf1, 0x52, 0x73, 0x80, 0x06, 0x8c, 0xb1, + 0x41, 0x8a, 0x9e, 0x74, 0xc6, 0x22, 0xfd, 0x93, 0x08, 0x9b, 0xf8, 0x87, 0x2c, 0xf6, 0x31, 0xfb, + 0xd5, 0x67, 0x4f, 0xde, 0xde, 0x9b, 0x1a, 0x33, 0x40, 0xd8, 0x6c, 0x84, 0xfb, 0x02, 0xb0, 0xb1, + 0xf0, 0x83, 0x36, 0x59, 0x0b, 0xd0, 0xa3, 0xd2, 0x46, 0xc7, 0xfd, 0x2a, 0x4a, 0x72, 0xe8, 0x76, + 0x3a, 0x7a, 0x96, 0xdd, 0xf2, 0xfc, 0x06, 0x0b, 0x5f, 0xa4, 0x58, 0xea, 0x2c, 0xbb, 0xc0, 0xa0, + 0x58, 0x94, 0xba, 0xd3, 0x30, 0x38, 0x47, 0xfb, 0x4e, 0x22, 0x4a, 0x57, 0x8f, 0x3a, 0x1e, 0x33, + 0xa2, 0x8e, 0x65, 0x74, 0xf1, 0x06, 0x9c, 0x99, 0x8b, 0x88, 0x97, 0x90, 0xf2, 0x33, 0xb3, 0xed, + 0xca, 0x36, 0x49, 0x78, 0x68, 0x57, 0x8c, 0xde, 0x07, 0x63, 0x21, 0xdb, 0x32, 0x56, 0xc2, 0xca, + 0xb6, 0x1f, 0xd4, 0x84, 0xc9, 0xf5, 0x8c, 0xa0, 0x32, 0xb6, 0xa6, 0x17, 0x62, 0x13, 0xd7, 0xfd, + 0x0f, 0x05, 0x18, 0x9d, 0x8b, 0xc2, 0x40, 0x8a, 0xc5, 0x63, 0xd8, 0xca, 0x12, 0x63, 0x2b, 0xb3, + 0xe0, 0xee, 0xd4, 0xdb, 0xdf, 0x6d, 0x3b, 0x43, 0xaf, 0x2b, 0x11, 0xd9, 0x67, 0xeb, 0x08, 0x62, + 0xf0, 0x65, 0xb4, 0xd3, 0x8f, 0x6d, 0x0a, 0x50, 0xf7, 0x3f, 0x3a, 0x30, 0xa1, 0xa3, 0x1f, 0xc3, + 0x0e, 0x1a, 0x9b, 0x3b, 0xe8, 0x55, 0xbb, 0xfd, 0xed, 0xb2, 0x6d, 0xbe, 0x3d, 0x68, 0xf6, 0x93, + 0xf9, 0xba, 0xbf, 0xe6, 0xc0, 0xe8, 0x4d, 0x0d, 0x20, 0x3a, 0x6b, 0x5b, 0x89, 0x79, 0x87, 0x14, + 0x33, 0x3a, 0xf4, 0x4e, 0xe6, 0x37, 0x36, 0x5a, 0x42, 0xe5, 0x7e, 0x5c, 0xa9, 0x93, 0x6a, 0xbb, + 0x21, 0xb7, 0x6f, 0x35, 0xa4, 0x65, 0x01, 0xc7, 0x0a, 0x03, 0xbd, 0x04, 0x27, 0x2b, 0x61, 0x50, + 0x69, 0x47, 0x11, 0x09, 0x2a, 0xbb, 0xeb, 0xec, 0x8e, 0x84, 0xd8, 0x10, 0xa7, 0x45, 0xb5, 0x93, + 0x73, 0x59, 0x84, 0x3b, 0x79, 0x40, 0xdc, 0x49, 0x88, 0x3b, 0x0b, 0x62, 0xba, 0x65, 0x89, 0x03, + 0x97, 0xe6, 0x2c, 0x60, 0x60, 0x2c, 0xcb, 0xd1, 0x35, 0x38, 0x17, 0x27, 0x5e, 0x94, 0xf8, 0x41, + 0x6d, 0x9e, 0x78, 0xd5, 0x86, 0x1f, 0xd0, 0xa3, 0x44, 0x18, 0x54, 0xb9, 0x2b, 0xb1, 0x6f, 0xf6, + 0xfc, 0xed, 0xbd, 0xa9, 0x73, 0xe5, 0x7c, 0x14, 0xdc, 0xad, 0x2e, 0xfa, 0x30, 0x4c, 0x0a, 0x77, + 0xc4, 0x56, 0xbb, 0xf1, 0x5c, 0xb8, 0x19, 0x5f, 0xf1, 0x63, 0x7a, 0x8e, 0x5f, 0xf1, 0x9b, 0x7e, + 0xc2, 0x1c, 0x86, 0xc5, 0xd9, 0x0b, 0xb7, 0xf7, 0xa6, 0x26, 0xcb, 0x5d, 0xb1, 0xf0, 0x3e, 0x14, + 0x10, 0x86, 0xb3, 0x5c, 0xf8, 0x75, 0xd0, 0x1e, 0x64, 0xb4, 0x27, 0x6f, 0xef, 0x4d, 0x9d, 0x5d, + 0xc8, 0xc5, 0xc0, 0x5d, 0x6a, 0xd2, 0x2f, 0x98, 0xf8, 0x4d, 0xf2, 0x6a, 0x18, 0x10, 0x16, 0xa8, + 0xa2, 0x7d, 0xc1, 0x0d, 0x01, 0xc7, 0x0a, 0x03, 0xbd, 0x9c, 0xce, 0x44, 0xba, 0x5c, 0x44, 0xc0, + 0xc9, 0xc1, 0x25, 0x1c, 0x3b, 0x9a, 0xdc, 0xd0, 0x28, 0xb1, 0x48, 0x4a, 0x83, 0x36, 0xfa, 0x94, + 0x03, 0xa3, 0x71, 0x12, 0xaa, 0x7b, 0x0d, 0x22, 0xe2, 0xc4, 0xc2, 0xb4, 0x2f, 0x6b, 0x54, 0xb9, + 0xe2, 0xa3, 0x43, 0xb0, 0xc1, 0x15, 0xbd, 0x13, 0x86, 0xe5, 0x04, 0x8e, 0x4b, 0x23, 0x4c, 0x57, + 0x62, 0xc7, 0x38, 0x39, 0xbf, 0x63, 0x9c, 0x96, 0x53, 0x55, 0xf6, 0x66, 0x9d, 0x04, 0x2c, 0xe6, + 0x56, 0x53, 0x65, 0x6f, 0xd4, 0x49, 0x80, 0x59, 0x89, 0xfb, 0xe3, 0x3e, 0x40, 0x9d, 0x82, 0x0f, + 0x2d, 0xc3, 0x80, 0x57, 0x49, 0xfc, 0x1d, 0x19, 0x6f, 0xf8, 0x68, 0x9e, 0x52, 0xc0, 0x07, 0x10, + 0x93, 0x2d, 0x42, 0xe7, 0x3d, 0x49, 0xa5, 0xe5, 0x0c, 0xab, 0x8a, 0x05, 0x09, 0x14, 0xc2, 0xc9, + 0x86, 0x17, 0x27, 0xb2, 0x85, 0x55, 0xfa, 0x21, 0xc5, 0x76, 0xf1, 0xf3, 0xbd, 0x7d, 0x2a, 0x5a, + 0x63, 0xf6, 0x0c, 0x5d, 0x8f, 0x2b, 0x59, 0x42, 0xb8, 0x93, 0x36, 0xfa, 0x38, 0xd3, 0xae, 0xb8, + 0xea, 0x2b, 0xd5, 0x9a, 0x65, 0x2b, 0x9a, 0x07, 0xa7, 0x69, 0x68, 0x56, 0x82, 0x0d, 0xd6, 0x58, + 0xa2, 0x8b, 0x30, 0xcc, 0xd6, 0x0d, 0xa9, 0x12, 0xbe, 0xfa, 0xfb, 0x52, 0x25, 0xb8, 0x2c, 0x0b, + 0x70, 0x8a, 0xa3, 0x69, 0x19, 0x7c, 0xc1, 0x77, 0xd1, 0x32, 0xd0, 0xb3, 0x50, 0x6c, 0xd5, 0xbd, + 0x58, 0xc6, 0xb0, 0xbb, 0x52, 0x6a, 0xaf, 0x53, 0x20, 0x13, 0x4d, 0xda, 0xb7, 0x64, 0x40, 0xcc, + 0x2b, 0xb8, 0xff, 0x12, 0x60, 0x70, 0x7e, 0x66, 0x71, 0xc3, 0x8b, 0xb7, 0x7b, 0x38, 0x03, 0xd1, + 0x65, 0x28, 0x94, 0xd5, 0xac, 0x20, 0x95, 0x4a, 0x2c, 0x56, 0x18, 0x28, 0x80, 0x01, 0x3f, 0xa0, + 0x92, 0xa7, 0x34, 0x6e, 0xcb, 0xcf, 0xa0, 0xce, 0x73, 0xcc, 0x10, 0xb4, 0xc4, 0xa8, 0x63, 0xc1, + 0x05, 0xbd, 0x0e, 0xc3, 0x9e, 0xbc, 0x42, 0x24, 0xf6, 0xff, 0x65, 0x1b, 0x06, 0x74, 0x41, 0x52, + 0x0f, 0x61, 0x12, 0x20, 0x9c, 0x32, 0x44, 0x9f, 0x70, 0x60, 0x44, 0x76, 0x1d, 0x93, 0x2d, 0xe1, + 0xdb, 0x5e, 0xb5, 0xd7, 0x67, 0x4c, 0xb6, 0x78, 0x7c, 0x8b, 0x06, 0xc0, 0x3a, 0xcb, 0x8e, 0x33, + 0x53, 0xb1, 0x97, 0x33, 0x13, 0xba, 0x09, 0xc3, 0x37, 0xfd, 0xa4, 0xce, 0x76, 0x78, 0xe1, 0x53, + 0x5b, 0xb8, 0xf7, 0x56, 0x53, 0x72, 0xe9, 0x88, 0xdd, 0x90, 0x0c, 0x70, 0xca, 0x8b, 0x2e, 0x07, + 0xfa, 0x83, 0x5d, 0xc1, 0x62, 0x7b, 0xc3, 0xb0, 0x59, 0x81, 0x15, 0xe0, 0x14, 0x87, 0x0e, 0xf1, + 0x28, 0xfd, 0x55, 0x26, 0xaf, 0xb4, 0xa9, 0x68, 0x11, 0x31, 0x8b, 0x16, 0xe6, 0x95, 0xa4, 0xc8, + 0x07, 0xeb, 0x86, 0xc6, 0x03, 0x1b, 0x1c, 0x95, 0xe8, 0x1c, 0xee, 0x26, 0x3a, 0xd1, 0xeb, 0xfc, + 0x0c, 0xc7, 0x0f, 0x13, 0x62, 0x37, 0x58, 0xb1, 0x73, 0xbe, 0xe1, 0x34, 0xf9, 0xb5, 0x86, 0xf4, + 0x37, 0xd6, 0xf8, 0x51, 0x89, 0x11, 0x06, 0x97, 0x6f, 0xf9, 0x89, 0xb8, 0x8c, 0xa1, 0x24, 0xc6, + 0x1a, 0x83, 0x62, 0x51, 0xca, 0x63, 0x37, 0xe8, 0x24, 0x88, 0xc5, 0x2e, 0xa0, 0xc5, 0x6e, 0x30, + 0x30, 0x96, 0xe5, 0xe8, 0xef, 0x3b, 0x50, 0xac, 0x87, 0xe1, 0x76, 0x5c, 0x1a, 0x63, 0x93, 0xc3, + 0x82, 0x4e, 0x2d, 0x24, 0xce, 0xf4, 0x15, 0x4a, 0xd6, 0xbc, 0x5e, 0x56, 0x64, 0xb0, 0x3b, 0x7b, + 0x53, 0xe3, 0x2b, 0xfe, 0x16, 0xa9, 0xec, 0x56, 0x1a, 0x84, 0x41, 0xde, 0x7c, 0x5b, 0x83, 0x5c, + 0xde, 0x21, 0x41, 0x82, 0x79, 0xab, 0x26, 0x3f, 0xef, 0x00, 0xa4, 0x84, 0x72, 0x9c, 0xa4, 0xc4, + 0x0c, 0x2b, 0xb0, 0x70, 0xa0, 0x36, 0x9a, 0xa6, 0x7b, 0x5d, 0xff, 0xb5, 0x03, 0x23, 0xb4, 0x73, + 0x52, 0x04, 0x3e, 0x0e, 0x03, 0x89, 0x17, 0xd5, 0x88, 0x74, 0x14, 0xa8, 0xcf, 0xb1, 0xc1, 0xa0, + 0x58, 0x94, 0xa2, 0x00, 0x8a, 0x89, 0x17, 0x6f, 0x4b, 0x35, 0x7e, 0xc9, 0xda, 0x10, 0xa7, 0x1a, + 0x3c, 0xfd, 0x15, 0x63, 0xce, 0x06, 0x3d, 0x01, 0x43, 0x74, 0xeb, 0x58, 0xf0, 0x62, 0x19, 0xbb, + 0x33, 0x4a, 0x85, 0xf8, 0x82, 0x80, 0x61, 0x55, 0xea, 0xfe, 0x7a, 0x01, 0xfa, 0xe7, 0xf9, 0x81, + 0x6e, 0x20, 0x0e, 0xdb, 0x51, 0x85, 0x08, 0xc5, 0xde, 0xc2, 0x9c, 0xa6, 0x74, 0xcb, 0x8c, 0xa6, + 0x76, 0xa4, 0x62, 0xbf, 0xb1, 0xe0, 0x85, 0xbe, 0xec, 0xc0, 0x78, 0x12, 0x79, 0x41, 0xbc, 0xc5, + 0x5c, 0x32, 0x7e, 0x18, 0x88, 0x21, 0xb2, 0x30, 0x0b, 0x37, 0x0c, 0xba, 0xe5, 0x84, 0xb4, 0x52, + 0xcf, 0x90, 0x59, 0x86, 0x33, 0x6d, 0x70, 0x7f, 0xc3, 0x01, 0x48, 0x5b, 0x8f, 0x3e, 0xe7, 0xc0, + 0x98, 0xa7, 0xc7, 0x8c, 0x8a, 0x31, 0x5a, 0xb3, 0xe7, 0xbf, 0x65, 0x64, 0xb9, 0x2d, 0xc3, 0x00, + 0x61, 0x93, 0xb1, 0xfb, 0x1e, 0x28, 0xb2, 0xd5, 0xc1, 0x0e, 0x3d, 0xc2, 0xf6, 0x9d, 0x35, 0x76, + 0x49, 0x9b, 0x38, 0x56, 0x18, 0xee, 0x4b, 0x30, 0x7e, 0xf9, 0x16, 0xa9, 0xb4, 0x93, 0x30, 0xe2, + 0x96, 0xff, 0x2e, 0x77, 0x84, 0x9c, 0x43, 0xdd, 0x11, 0xfa, 0xae, 0x03, 0x23, 0x5a, 0x00, 0x21, + 0xdd, 0xa9, 0x6b, 0x73, 0x65, 0x6e, 0xe0, 0x10, 0x43, 0xb5, 0x6c, 0x25, 0x44, 0x91, 0x93, 0x4c, + 0xb7, 0x11, 0x05, 0xc2, 0x29, 0xc3, 0xbb, 0x04, 0xf8, 0xb9, 0xbf, 0xef, 0xc0, 0x99, 0xdc, 0x68, + 0xc7, 0xfb, 0xdc, 0x6c, 0xc3, 0xc9, 0x5e, 0xe8, 0xc1, 0xc9, 0xfe, 0xdb, 0x0e, 0xa4, 0x94, 0xa8, + 0x28, 0xda, 0x4c, 0x5b, 0xae, 0x89, 0x22, 0xc1, 0x49, 0x94, 0xa2, 0xd7, 0xe1, 0x9c, 0xf9, 0x05, + 0x0f, 0xe9, 0x6f, 0xe1, 0x87, 0xd3, 0x7c, 0x4a, 0xb8, 0x1b, 0x0b, 0xf7, 0xeb, 0x0e, 0x14, 0x17, + 0xbd, 0x76, 0x8d, 0xf4, 0x64, 0x2e, 0xa3, 0x72, 0x2c, 0x22, 0x5e, 0x23, 0x91, 0x47, 0x07, 0x21, + 0xc7, 0xb0, 0x80, 0x61, 0x55, 0x8a, 0x66, 0x60, 0x38, 0x6c, 0x11, 0xc3, 0x47, 0xf8, 0xa8, 0x1c, + 0xbd, 0x35, 0x59, 0x40, 0xb7, 0x1d, 0xc6, 0x5d, 0x41, 0x70, 0x5a, 0xcb, 0xfd, 0xc6, 0x00, 0x8c, + 0x68, 0xf7, 0x62, 0xa8, 0x2e, 0x10, 0x91, 0x56, 0x98, 0xd5, 0x97, 0xe9, 0x84, 0xc1, 0xac, 0x84, + 0xae, 0xc1, 0x88, 0xec, 0xf8, 0x31, 0x17, 0x5b, 0xc6, 0x1a, 0xc4, 0x02, 0x8e, 0x15, 0x06, 0x9a, + 0x82, 0x62, 0x95, 0xb4, 0x92, 0x3a, 0x6b, 0x5e, 0x3f, 0x0f, 0x0e, 0x9c, 0xa7, 0x00, 0xcc, 0xe1, + 0x14, 0x61, 0x8b, 0x24, 0x95, 0x3a, 0xb3, 0x0c, 0x8b, 0xe8, 0xc1, 0x05, 0x0a, 0xc0, 0x1c, 0x9e, + 0xe3, 0xc5, 0x2c, 0x1e, 0xbd, 0x17, 0x73, 0xc0, 0xb2, 0x17, 0x13, 0xb5, 0xe0, 0x54, 0x1c, 0xd7, + 0xd7, 0x23, 0x7f, 0xc7, 0x4b, 0x48, 0x3a, 0xfb, 0x06, 0x0f, 0xc2, 0xe7, 0x1c, 0xbb, 0xa9, 0x5e, + 0xbe, 0x92, 0xa5, 0x82, 0xf3, 0x48, 0xa3, 0x32, 0x9c, 0xf1, 0x83, 0x98, 0x54, 0xda, 0x11, 0x59, + 0xaa, 0x05, 0x61, 0x44, 0xae, 0x84, 0x31, 0x25, 0x27, 0xee, 0xd9, 0xaa, 0x78, 0xda, 0xa5, 0x3c, + 0x24, 0x9c, 0x5f, 0x17, 0x2d, 0xc2, 0xc9, 0xaa, 0x1f, 0x7b, 0x9b, 0x0d, 0x52, 0x6e, 0x6f, 0x36, + 0x43, 0x7e, 0x34, 0x1f, 0x66, 0x04, 0x1f, 0x94, 0x76, 0xa4, 0xf9, 0x2c, 0x02, 0xee, 0xac, 0x83, + 0x9e, 0x85, 0xd1, 0xd8, 0x0f, 0x6a, 0x0d, 0x32, 0x1b, 0x79, 0x41, 0xa5, 0x2e, 0x2e, 0xe8, 0x2a, + 0x7b, 0x7b, 0x59, 0x2b, 0xc3, 0x06, 0x26, 0x5b, 0xf3, 0xbc, 0x4e, 0x46, 0x1b, 0x14, 0xd8, 0xa2, + 0x14, 0xcd, 0xc0, 0x09, 0xd9, 0x87, 0xf2, 0xb6, 0xdf, 0xda, 0x58, 0x29, 0x33, 0xad, 0x70, 0x28, + 0x8d, 0x16, 0x5a, 0x32, 0x8b, 0x71, 0x16, 0xdf, 0xfd, 0xa1, 0x03, 0xa3, 0x7a, 0x38, 0x3c, 0x55, + 0xd6, 0xa1, 0x3e, 0xbf, 0x50, 0xe6, 0xdb, 0x89, 0x3d, 0xa5, 0xe1, 0x8a, 0xa2, 0x99, 0x9e, 0xb7, + 0x53, 0x18, 0xd6, 0x78, 0xf6, 0x70, 0xb9, 0xfd, 0x51, 0x28, 0x6e, 0x85, 0x54, 0xa7, 0xe9, 0x33, + 0x6d, 0xfd, 0x0b, 0x14, 0x88, 0x79, 0x99, 0xfb, 0xdf, 0x1d, 0x38, 0x9b, 0x1f, 0xe9, 0xff, 0xb3, + 0xd0, 0xc9, 0x4b, 0x00, 0xb4, 0x2b, 0xc6, 0xbe, 0xa0, 0xa5, 0xb7, 0x90, 0x25, 0x58, 0xc3, 0xea, + 0xad, 0xdb, 0xff, 0xaa, 0x00, 0x1a, 0x4f, 0xf4, 0x05, 0x07, 0xc6, 0x28, 0xdb, 0xe5, 0x68, 0xd3, + 0xe8, 0xed, 0x9a, 0x9d, 0xde, 0x2a, 0xb2, 0xa9, 0x4b, 0xc3, 0x00, 0x63, 0x93, 0x39, 0x7a, 0x27, + 0x0c, 0x7b, 0xd5, 0x6a, 0x44, 0xe2, 0x58, 0x39, 0x07, 0x99, 0xc1, 0x6b, 0x46, 0x02, 0x71, 0x5a, + 0x4e, 0xe5, 0x70, 0xbd, 0xba, 0x15, 0x53, 0xd1, 0x26, 0x64, 0xbf, 0x92, 0xc3, 0x94, 0x09, 0x85, + 0x63, 0x85, 0x81, 0xae, 0xc3, 0xd9, 0xaa, 0x97, 0x78, 0x5c, 0x05, 0x24, 0xd1, 0x7a, 0x14, 0x26, + 0xa4, 0xc2, 0xf6, 0x0d, 0x1e, 0xc4, 0x7a, 0x41, 0xd4, 0x3d, 0x3b, 0x9f, 0x8b, 0x85, 0xbb, 0xd4, + 0x76, 0x7f, 0xa5, 0x1f, 0xcc, 0x3e, 0xa1, 0x2a, 0x9c, 0xd8, 0x8e, 0x36, 0xe7, 0x58, 0xcc, 0xc6, + 0x61, 0x62, 0x27, 0x58, 0x4c, 0xc3, 0xb2, 0x49, 0x01, 0x67, 0x49, 0x0a, 0x2e, 0xcb, 0x64, 0x37, + 0xf1, 0x36, 0x0f, 0x1d, 0x39, 0xb1, 0x6c, 0x52, 0xc0, 0x59, 0x92, 0xe8, 0x3d, 0x30, 0xb2, 0x1d, + 0x6d, 0xca, 0xdd, 0x23, 0x1b, 0x86, 0xb3, 0x9c, 0x16, 0x61, 0x1d, 0x8f, 0x7e, 0x9a, 0xed, 0x68, + 0x93, 0x6e, 0xd8, 0x32, 0x89, 0x84, 0xfa, 0x34, 0xcb, 0x02, 0x8e, 0x15, 0x06, 0x6a, 0x01, 0xda, + 0x96, 0xa3, 0xa7, 0x22, 0x54, 0xc4, 0x26, 0xd7, 0x7b, 0x80, 0x0b, 0xbb, 0x1a, 0xb0, 0xdc, 0x41, + 0x07, 0xe7, 0xd0, 0x46, 0x2f, 0xc0, 0xb9, 0xed, 0x68, 0x53, 0xe8, 0x31, 0xeb, 0x91, 0x1f, 0x54, + 0xfc, 0x96, 0x91, 0x30, 0x62, 0x4a, 0x34, 0xf7, 0xdc, 0x72, 0x3e, 0x1a, 0xee, 0x56, 0xdf, 0xfd, + 0x9d, 0x7e, 0x60, 0x57, 0x5d, 0xa9, 0x98, 0x6e, 0x92, 0xa4, 0x1e, 0x56, 0xb3, 0xaa, 0xd9, 0x2a, + 0x83, 0x62, 0x51, 0x2a, 0x03, 0x60, 0x0b, 0x5d, 0x02, 0x60, 0x6f, 0xc2, 0x60, 0x9d, 0x78, 0x55, + 0x12, 0x49, 0xe3, 0xe6, 0x8a, 0x9d, 0xcb, 0xb9, 0x57, 0x18, 0xd1, 0xd4, 0x42, 0xc0, 0x7f, 0xc7, + 0x58, 0x72, 0x43, 0xef, 0x85, 0x71, 0xaa, 0x63, 0x85, 0xed, 0x44, 0xfa, 0x27, 0xb8, 0x71, 0x93, + 0x6d, 0xf6, 0x1b, 0x46, 0x09, 0xce, 0x60, 0xa2, 0x79, 0x98, 0x10, 0xbe, 0x04, 0x65, 0x34, 0x15, + 0x03, 0xab, 0x32, 0x79, 0x94, 0x33, 0xe5, 0xb8, 0xa3, 0x06, 0x0b, 0x60, 0x0c, 0xab, 0xdc, 0x9d, + 0xac, 0x07, 0x30, 0x86, 0xd5, 0x5d, 0xcc, 0x4a, 0xd0, 0xab, 0x30, 0x44, 0xff, 0x2e, 0x44, 0x61, + 0x53, 0x98, 0x8d, 0xd6, 0xed, 0x8c, 0x0e, 0xe5, 0x21, 0x0e, 0xb1, 0x4c, 0xf7, 0x9c, 0x15, 0x5c, + 0xb0, 0xe2, 0x47, 0x8f, 0x52, 0xfa, 0x76, 0x79, 0x9d, 0x44, 0xfe, 0xd6, 0x2e, 0xd3, 0x67, 0x86, + 0xd2, 0xa3, 0xd4, 0x52, 0x07, 0x06, 0xce, 0xa9, 0xe5, 0x7e, 0xa1, 0x00, 0xa3, 0xfa, 0x8d, 0xe9, + 0xbb, 0x45, 0x45, 0xc7, 0xe9, 0xa4, 0xe0, 0x07, 0xe7, 0x2b, 0x16, 0xba, 0x7d, 0xb7, 0x09, 0x51, + 0x87, 0x7e, 0xaf, 0x2d, 0x14, 0x59, 0x2b, 0xf6, 0x39, 0xd6, 0xe3, 0x76, 0x52, 0xe7, 0x57, 0xeb, + 0x58, 0xbc, 0x32, 0xe3, 0xe0, 0x7e, 0xba, 0x0f, 0x86, 0x64, 0x21, 0xfa, 0x94, 0x03, 0x90, 0xc6, + 0x8d, 0x09, 0x51, 0xba, 0x6e, 0x23, 0xa8, 0x48, 0x0f, 0x79, 0xd3, 0xcc, 0xfc, 0x0a, 0x8e, 0x35, + 0xbe, 0x28, 0x81, 0x81, 0x90, 0x36, 0xee, 0x92, 0xbd, 0x5b, 0xff, 0x6b, 0x94, 0xf1, 0x25, 0xc6, + 0x3d, 0xb5, 0xe8, 0x31, 0x18, 0x16, 0xbc, 0xe8, 0xe1, 0x74, 0x53, 0x86, 0x33, 0xda, 0xb3, 0x7e, + 0xab, 0x08, 0xc9, 0xf4, 0xac, 0xa9, 0x40, 0x38, 0x65, 0xe8, 0x3e, 0x0d, 0xe3, 0xe6, 0x62, 0xa0, + 0x87, 0x95, 0xcd, 0xdd, 0x84, 0x70, 0x53, 0xc8, 0x28, 0x3f, 0xac, 0xcc, 0x52, 0x00, 0xe6, 0x70, + 0xf7, 0x07, 0x0e, 0x40, 0x2a, 0x5e, 0x7a, 0xf0, 0x3e, 0x3c, 0xaa, 0xdb, 0xf1, 0xba, 0x9d, 0x08, + 0x3f, 0x0e, 0xc3, 0xec, 0x1f, 0xb6, 0xd0, 0xfb, 0x6c, 0x05, 0x1f, 0xa4, 0xed, 0x14, 0x4b, 0x9d, + 0xe9, 0x1a, 0xd7, 0x25, 0x23, 0x9c, 0xf2, 0x74, 0x43, 0x98, 0xc8, 0x62, 0xa3, 0x0f, 0xc1, 0x68, + 0x2c, 0xb7, 0xd5, 0xf4, 0xfe, 0x5f, 0x8f, 0xdb, 0x2f, 0x77, 0xfd, 0x69, 0xd5, 0xb1, 0x41, 0xcc, + 0x5d, 0x83, 0x01, 0xab, 0x43, 0xe8, 0x7e, 0xc7, 0x81, 0x61, 0xe6, 0x7d, 0xad, 0x45, 0x5e, 0x33, + 0xad, 0xd2, 0xb7, 0xcf, 0xa8, 0xc7, 0x30, 0xc8, 0xcd, 0x07, 0x32, 0x6a, 0xc9, 0x82, 0x94, 0xe1, + 0xc9, 0xfa, 0x52, 0x29, 0xc3, 0xed, 0x14, 0x31, 0x96, 0x9c, 0xdc, 0xcf, 0x14, 0x60, 0x60, 0x29, + 0x68, 0xb5, 0xff, 0xd2, 0x27, 0x8c, 0x5b, 0x85, 0xfe, 0xa5, 0x84, 0x34, 0xcd, 0xbc, 0x86, 0xa3, + 0xb3, 0x8f, 0xe9, 0x39, 0x0d, 0x4b, 0x66, 0x4e, 0x43, 0xec, 0xdd, 0x94, 0x41, 0x7d, 0xc2, 0x7c, + 0x9d, 0xde, 0x81, 0x7c, 0x0a, 0x86, 0x57, 0xbc, 0x4d, 0xd2, 0x58, 0x26, 0xbb, 0xec, 0xc6, 0x22, + 0x0f, 0x30, 0x71, 0x52, 0x9b, 0x83, 0x11, 0x0c, 0x32, 0x0f, 0xe3, 0x0c, 0x5b, 0x2d, 0x06, 0x7a, + 0x22, 0x21, 0x69, 0x52, 0x28, 0xc7, 0x3c, 0x91, 0x68, 0x09, 0xa1, 0x34, 0x2c, 0x77, 0x1a, 0x46, + 0x52, 0x2a, 0x3d, 0x70, 0xfd, 0x69, 0x01, 0xc6, 0x0c, 0x2b, 0xbc, 0xe1, 0x9b, 0x74, 0xee, 0xea, + 0x9b, 0x34, 0x7c, 0x85, 0x85, 0xfb, 0xed, 0x2b, 0xec, 0x3b, 0x7e, 0x5f, 0xa1, 0xf9, 0x91, 0xfa, + 0x7b, 0xfa, 0x48, 0x0d, 0xe8, 0x5f, 0xf1, 0x83, 0xed, 0xde, 0xe4, 0x4c, 0x5c, 0x09, 0x5b, 0x1d, + 0x72, 0xa6, 0x4c, 0x81, 0x98, 0x97, 0x49, 0xcd, 0xa5, 0x2f, 0x5f, 0x73, 0x71, 0x3f, 0xe5, 0xc0, + 0xe8, 0xaa, 0x17, 0xf8, 0x5b, 0x24, 0x4e, 0xd8, 0xbc, 0x4a, 0x8e, 0xf4, 0xe6, 0xda, 0x68, 0x97, + 0x1c, 0x0c, 0x6f, 0x3a, 0x70, 0x72, 0x95, 0x34, 0x43, 0xff, 0x55, 0x2f, 0x8d, 0x99, 0xa5, 0x6d, + 0xaf, 0xfb, 0x89, 0x08, 0x11, 0x54, 0x6d, 0xbf, 0xe2, 0x27, 0x98, 0xc2, 0xef, 0x62, 0x62, 0x66, + 0x77, 0x42, 0xe8, 0x01, 0x4d, 0xbb, 0x4d, 0x99, 0x46, 0xc3, 0xca, 0x02, 0x9c, 0xe2, 0xb8, 0xbf, + 0xeb, 0xc0, 0x20, 0x6f, 0x84, 0x0a, 0x33, 0x76, 0xba, 0xd0, 0xae, 0x43, 0x91, 0xd5, 0x13, 0xb3, + 0x7a, 0xd1, 0x82, 0xfa, 0x43, 0xc9, 0xf1, 0x35, 0xc8, 0xfe, 0xc5, 0x9c, 0x01, 0x3b, 0xb6, 0x78, + 0xb7, 0x66, 0x54, 0xb8, 0x70, 0x7a, 0x6c, 0x61, 0x50, 0x2c, 0x4a, 0xdd, 0x6f, 0xf4, 0xc1, 0x90, + 0x4a, 0x3d, 0xc6, 0x12, 0x43, 0x04, 0x41, 0x98, 0x78, 0x3c, 0x0c, 0x83, 0xcb, 0xea, 0x0f, 0xd9, + 0x4b, 0x7d, 0x36, 0x3d, 0x93, 0x52, 0xe7, 0xae, 0x45, 0x75, 0x08, 0xd5, 0x4a, 0xb0, 0xde, 0x08, + 0xf4, 0x31, 0x18, 0x68, 0x50, 0xe9, 0x23, 0x45, 0xf7, 0x75, 0x8b, 0xcd, 0x61, 0x62, 0x4d, 0xb4, + 0x44, 0x8d, 0x10, 0x07, 0x62, 0xc1, 0x75, 0xf2, 0xfd, 0x30, 0x91, 0x6d, 0xf5, 0xdd, 0x2e, 0x7b, + 0x0e, 0xeb, 0x57, 0x45, 0xff, 0xba, 0x90, 0x9e, 0x07, 0xaf, 0xea, 0x3e, 0x0f, 0x23, 0xab, 0x24, + 0x89, 0xfc, 0x0a, 0x23, 0x70, 0xb7, 0xc9, 0xd5, 0x93, 0xfe, 0xf0, 0x59, 0x36, 0x59, 0x29, 0xcd, + 0x18, 0xbd, 0x0e, 0xd0, 0x8a, 0x42, 0x7a, 0x7e, 0x25, 0x6d, 0xf9, 0xb1, 0x2d, 0xe8, 0xc3, 0xeb, + 0x8a, 0x26, 0xf7, 0x86, 0xa7, 0xbf, 0xb1, 0xc6, 0xcf, 0x7d, 0x11, 0x8a, 0xab, 0xed, 0x84, 0xdc, + 0xea, 0x41, 0x62, 0x1d, 0x34, 0xfb, 0x81, 0xfb, 0x21, 0x18, 0x65, 0xb4, 0xaf, 0x84, 0x0d, 0xba, + 0xad, 0xd2, 0xa1, 0x69, 0xd2, 0xdf, 0x59, 0x7f, 0x05, 0x43, 0xc2, 0xbc, 0x8c, 0x2e, 0x99, 0x7a, + 0xd8, 0xa8, 0xaa, 0x9b, 0x60, 0x6a, 0x42, 0x5c, 0x61, 0x50, 0x2c, 0x4a, 0xdd, 0x4f, 0x16, 0x60, + 0x84, 0x55, 0x14, 0xe2, 0x66, 0x17, 0x06, 0xeb, 0x9c, 0x8f, 0x18, 0x43, 0x0b, 0xf1, 0x65, 0x7a, + 0xeb, 0xb5, 0xb3, 0x1c, 0x07, 0x60, 0xc9, 0x8f, 0xb2, 0xbe, 0xe9, 0xf9, 0x09, 0x65, 0x5d, 0x38, + 0x5a, 0xd6, 0x37, 0x38, 0x1b, 0x2c, 0xf9, 0xb9, 0xbf, 0x04, 0xec, 0x86, 0xf5, 0x42, 0xc3, 0xab, + 0xf1, 0x91, 0x0b, 0xb7, 0x49, 0x55, 0xc8, 0x5c, 0x6d, 0xe4, 0x28, 0x14, 0x8b, 0x52, 0x7e, 0x6b, + 0x35, 0x89, 0x7c, 0x15, 0x99, 0xad, 0xdd, 0x5a, 0x65, 0x60, 0x19, 0x87, 0x5f, 0x75, 0xbf, 0x52, + 0x00, 0x60, 0x89, 0xea, 0xf8, 0xc5, 0xe8, 0x5f, 0x90, 0x41, 0x54, 0xa6, 0x8f, 0x53, 0x05, 0x51, + 0xb1, 0xab, 0xdf, 0x7a, 0xf0, 0x94, 0x7e, 0x61, 0xa2, 0xb0, 0xff, 0x85, 0x09, 0xd4, 0x82, 0xc1, + 0xb0, 0x9d, 0x50, 0x5d, 0x55, 0x6c, 0xf6, 0x16, 0x5c, 0xfc, 0x6b, 0x9c, 0x20, 0xbf, 0x65, 0x20, + 0x7e, 0x60, 0xc9, 0x06, 0x3d, 0x0b, 0x43, 0xad, 0x28, 0xac, 0xd1, 0xbd, 0x5b, 0x6c, 0xef, 0x0f, + 0x49, 0x7d, 0x68, 0x5d, 0xc0, 0xef, 0x68, 0xff, 0x63, 0x85, 0xed, 0xfe, 0xf1, 0x04, 0x1f, 0x17, + 0x31, 0xf7, 0x26, 0xa1, 0xe0, 0x4b, 0xcb, 0x14, 0x08, 0x12, 0x85, 0xa5, 0x79, 0x5c, 0xf0, 0xab, + 0x6a, 0x5d, 0x15, 0xba, 0xae, 0xab, 0xf7, 0xc0, 0x48, 0xd5, 0x8f, 0x5b, 0x0d, 0x6f, 0xf7, 0x6a, + 0x8e, 0x59, 0x70, 0x3e, 0x2d, 0xc2, 0x3a, 0x1e, 0x7a, 0x4a, 0x5c, 0x8f, 0xe9, 0x37, 0x4c, 0x41, + 0xf2, 0x7a, 0x4c, 0x7a, 0xf1, 0x9e, 0xdf, 0x8c, 0xc9, 0x26, 0x28, 0x28, 0xf6, 0x9c, 0xa0, 0x20, + 0xab, 0x89, 0x0d, 0x1c, 0xbf, 0x26, 0xf6, 0x3e, 0x18, 0x93, 0x3f, 0x99, 0x7a, 0x54, 0x3a, 0xcd, + 0x5a, 0xaf, 0xcc, 0xe0, 0x1b, 0x7a, 0x21, 0x36, 0x71, 0xd3, 0x49, 0x3b, 0xd8, 0xeb, 0xa4, 0xbd, + 0x04, 0xb0, 0x19, 0xb6, 0x83, 0xaa, 0x17, 0xed, 0x2e, 0xcd, 0x8b, 0x60, 0x5a, 0xa5, 0xf8, 0xcd, + 0xaa, 0x12, 0xac, 0x61, 0xe9, 0x13, 0x7d, 0xf8, 0x2e, 0x13, 0xfd, 0x43, 0x30, 0xcc, 0x02, 0x8f, + 0x49, 0x75, 0x26, 0x11, 0xd1, 0x4f, 0x07, 0x89, 0xe6, 0x4c, 0xe3, 0x21, 0x25, 0x11, 0x9c, 0xd2, + 0x43, 0x1f, 0x06, 0xd8, 0xf2, 0x03, 0x3f, 0xae, 0x33, 0xea, 0x23, 0x07, 0xa6, 0xae, 0xfa, 0xb9, + 0xa0, 0xa8, 0x60, 0x8d, 0x22, 0x7a, 0x09, 0x4e, 0x92, 0x38, 0xf1, 0x9b, 0x5e, 0x42, 0xaa, 0xea, + 0x42, 0x69, 0x89, 0xd9, 0x32, 0x55, 0xe8, 0xf7, 0xe5, 0x2c, 0xc2, 0x9d, 0x3c, 0x20, 0xee, 0x24, + 0x64, 0xac, 0xc8, 0xc9, 0x83, 0xac, 0x48, 0xf4, 0xbf, 0x1c, 0x38, 0x19, 0x11, 0x1e, 0x12, 0x13, + 0xab, 0x86, 0x9d, 0x61, 0xe2, 0xb8, 0x62, 0x23, 0x07, 0xbc, 0x4a, 0xf6, 0x82, 0xb3, 0x5c, 0xb8, + 0xe2, 0x42, 0x64, 0xef, 0x3b, 0xca, 0xef, 0xe4, 0x01, 0xdf, 0x7c, 0x7b, 0x6a, 0xaa, 0xf3, 0x2d, + 0x02, 0x45, 0x9c, 0xae, 0xbc, 0xbf, 0xfd, 0xf6, 0xd4, 0x84, 0xfc, 0x9d, 0x0e, 0x5a, 0x47, 0x27, + 0xe9, 0xb6, 0xda, 0x0a, 0xab, 0x4b, 0xeb, 0x22, 0x4c, 0x4d, 0x6d, 0xab, 0xeb, 0x14, 0x88, 0x79, + 0x19, 0x7a, 0x02, 0x86, 0xaa, 0x1e, 0x69, 0x86, 0x81, 0xca, 0xe6, 0xcb, 0xb4, 0xf9, 0x79, 0x01, + 0xc3, 0xaa, 0x94, 0x9e, 0x21, 0x02, 0xb1, 0xa5, 0x94, 0xce, 0xdb, 0x3a, 0x43, 0xc8, 0x4d, 0x8a, + 0x73, 0x95, 0xbf, 0xb0, 0xe2, 0x84, 0x1a, 0x30, 0xe0, 0x33, 0x43, 0x85, 0x88, 0x84, 0xb5, 0x60, + 0x1d, 0xe1, 0x86, 0x0f, 0x19, 0x07, 0xcb, 0x44, 0xbf, 0xe0, 0xa1, 0xef, 0x35, 0x27, 0x8e, 0x67, + 0xaf, 0x79, 0x02, 0x86, 0x2a, 0x75, 0xbf, 0x51, 0x8d, 0x48, 0x50, 0x9a, 0x60, 0x27, 0x76, 0x36, + 0x12, 0x73, 0x02, 0x86, 0x55, 0x29, 0xfa, 0x6b, 0x30, 0x16, 0xb6, 0x13, 0x26, 0x5a, 0xe8, 0x38, + 0xc5, 0xa5, 0x93, 0x0c, 0x9d, 0xc5, 0x35, 0xad, 0xe9, 0x05, 0xd8, 0xc4, 0xa3, 0x22, 0xbe, 0x1e, + 0xc6, 0x2c, 0x2f, 0x11, 0x13, 0xf1, 0x67, 0x4d, 0x11, 0x7f, 0x45, 0x2b, 0xc3, 0x06, 0x26, 0xfa, + 0x9a, 0x03, 0x27, 0x9b, 0xd9, 0x03, 0x5c, 0xe9, 0x1c, 0x1b, 0x99, 0xb2, 0x0d, 0x45, 0x3f, 0x43, + 0x9a, 0x47, 0xa4, 0x77, 0x80, 0x71, 0x67, 0x23, 0x58, 0x86, 0xb0, 0x78, 0x37, 0xa8, 0xd4, 0xa3, + 0x30, 0x30, 0x9b, 0xf7, 0xa0, 0xad, 0x7b, 0x71, 0x6c, 0x6d, 0xe7, 0xb1, 0x98, 0x7d, 0xf0, 0xf6, + 0xde, 0xd4, 0x99, 0xdc, 0x22, 0x9c, 0xdf, 0xa8, 0xc9, 0x79, 0x38, 0x9b, 0x2f, 0x1f, 0xee, 0x76, + 0xe2, 0xe8, 0xd3, 0x4f, 0x1c, 0x0b, 0xf0, 0x60, 0xd7, 0x46, 0xd1, 0x9d, 0x46, 0x6a, 0x9b, 0x8e, + 0xb9, 0xd3, 0x74, 0x68, 0x87, 0xe3, 0x30, 0xaa, 0x3f, 0x5e, 0xe1, 0xfe, 0xdf, 0x3e, 0x80, 0xd4, + 0x4e, 0x8e, 0x3c, 0x18, 0xe7, 0x36, 0xf9, 0xa5, 0xf9, 0x43, 0xdf, 0xe8, 0x9f, 0x33, 0x08, 0xe0, + 0x0c, 0x41, 0xd4, 0x04, 0xc4, 0x21, 0xfc, 0xf7, 0x61, 0x7c, 0xab, 0xcc, 0x15, 0x39, 0xd7, 0x41, + 0x04, 0xe7, 0x10, 0xa6, 0x3d, 0x4a, 0xc2, 0x6d, 0x12, 0x5c, 0xc3, 0x2b, 0x87, 0x49, 0x0b, 0xc1, + 0xbd, 0x71, 0x06, 0x01, 0x9c, 0x21, 0x88, 0x5c, 0x18, 0x60, 0xb6, 0x19, 0x19, 0x3b, 0xce, 0xc4, + 0x0b, 0xd3, 0x34, 0x62, 0x2c, 0x4a, 0xd0, 0x57, 0x1c, 0x18, 0x97, 0xd9, 0x2d, 0x98, 0x35, 0x54, + 0x46, 0x8d, 0x5f, 0xb3, 0xe5, 0xe7, 0xb8, 0xac, 0x53, 0x4f, 0x63, 0x32, 0x0d, 0x70, 0x8c, 0x33, + 0x8d, 0x70, 0x5f, 0x80, 0x53, 0x39, 0xd5, 0xad, 0x9c, 0x68, 0xbf, 0xeb, 0xc0, 0x88, 0x96, 0x74, + 0x11, 0xbd, 0x0e, 0xc3, 0x61, 0xd9, 0x7a, 0x20, 0xe0, 0x5a, 0xb9, 0x23, 0x10, 0x50, 0x81, 0x70, + 0xca, 0xb0, 0x97, 0xf8, 0xc5, 0xdc, 0x0c, 0x91, 0xf7, 0xb9, 0xd9, 0x07, 0x8e, 0x5f, 0xfc, 0x95, + 0x22, 0xa4, 0x94, 0x0e, 0x98, 0x75, 0x25, 0x8d, 0x76, 0x2c, 0xec, 0x1b, 0xed, 0x58, 0x85, 0x13, + 0x1e, 0xf3, 0x25, 0x1f, 0x32, 0xd7, 0x0a, 0xcf, 0xb9, 0x6b, 0x52, 0xc0, 0x59, 0x92, 0x94, 0x4b, + 0x9c, 0x56, 0x65, 0x5c, 0xfa, 0x0f, 0xcc, 0xa5, 0x6c, 0x52, 0xc0, 0x59, 0x92, 0xe8, 0x25, 0x28, + 0x55, 0xd8, 0xdd, 0x61, 0xde, 0xc7, 0xa5, 0xad, 0xab, 0x61, 0xb2, 0x1e, 0x91, 0x98, 0x04, 0x89, + 0xc8, 0xaa, 0xf6, 0x88, 0x18, 0x85, 0xd2, 0x5c, 0x17, 0x3c, 0xdc, 0x95, 0x02, 0x3d, 0xa6, 0x30, + 0x67, 0xb4, 0x9f, 0xec, 0x32, 0x21, 0x22, 0xbc, 0xf4, 0xea, 0x98, 0x52, 0xd6, 0x0b, 0xb1, 0x89, + 0x8b, 0x7e, 0xd9, 0x81, 0xb1, 0x86, 0x34, 0xd7, 0xe3, 0x76, 0x43, 0xa6, 0x08, 0xc5, 0x56, 0xa6, + 0xdf, 0x8a, 0x4e, 0x99, 0xeb, 0x12, 0x06, 0x08, 0x9b, 0xbc, 0xb3, 0x89, 0x6f, 0x86, 0x7a, 0x4c, + 0x7c, 0xf3, 0x03, 0x07, 0x26, 0xb2, 0xdc, 0xd0, 0x36, 0x3c, 0xdc, 0xf4, 0xa2, 0xed, 0xa5, 0x60, + 0x2b, 0x62, 0x77, 0x44, 0x12, 0x3e, 0x19, 0x66, 0xb6, 0x12, 0x12, 0xcd, 0x7b, 0xbb, 0xdc, 0xfd, + 0x59, 0x54, 0x6f, 0x4c, 0x3d, 0xbc, 0xba, 0x1f, 0x32, 0xde, 0x9f, 0x16, 0x2a, 0xc3, 0x19, 0x8a, + 0xc0, 0xf2, 0xe2, 0xf9, 0x61, 0x90, 0x32, 0x29, 0x30, 0x26, 0x2a, 0x4e, 0x71, 0x35, 0x0f, 0x09, + 0xe7, 0xd7, 0x75, 0x2f, 0xc3, 0x00, 0xbf, 0xb2, 0x77, 0x4f, 0xfe, 0x23, 0xf7, 0xdf, 0x16, 0x40, + 0x2a, 0x86, 0x7f, 0xb9, 0xdd, 0x71, 0x74, 0x13, 0x8d, 0x98, 0x49, 0x49, 0x58, 0x3b, 0xd8, 0x26, + 0x2a, 0x32, 0x50, 0x8a, 0x12, 0xaa, 0x31, 0x93, 0x5b, 0x7e, 0x32, 0x17, 0x56, 0xa5, 0x8d, 0x83, + 0x69, 0xcc, 0x97, 0x05, 0x0c, 0xab, 0x52, 0xf7, 0x53, 0x0e, 0x8c, 0xd1, 0x5e, 0x36, 0x1a, 0xa4, + 0x51, 0x4e, 0x48, 0x2b, 0x46, 0x31, 0x14, 0x63, 0xfa, 0x8f, 0x3d, 0x53, 0x60, 0x7a, 0xcd, 0x93, + 0xb4, 0x34, 0x67, 0x0d, 0x65, 0x82, 0x39, 0x2f, 0xf7, 0xad, 0x3e, 0x18, 0x56, 0x83, 0xdd, 0x83, + 0x3d, 0xf5, 0x52, 0x9a, 0x1c, 0x96, 0x4b, 0xe0, 0x92, 0x96, 0x18, 0xf6, 0x0e, 0x1d, 0xba, 0x60, + 0x97, 0x67, 0xc9, 0x48, 0xb3, 0xc4, 0x3e, 0x65, 0xba, 0x9a, 0xcf, 0xea, 0xf3, 0x4f, 0xc3, 0x17, + 0x3e, 0xe7, 0x5b, 0xba, 0xa7, 0xbf, 0xdf, 0xd6, 0x6e, 0xa6, 0xdc, 0x98, 0xdd, 0x5d, 0xfc, 0x99, + 0x77, 0x83, 0x8a, 0x3d, 0xbd, 0x1b, 0xf4, 0x24, 0xf4, 0x93, 0xa0, 0xdd, 0x64, 0xaa, 0xd2, 0x30, + 0x3b, 0x22, 0xf4, 0x5f, 0x0e, 0xda, 0x4d, 0xb3, 0x67, 0x0c, 0x05, 0xbd, 0x1f, 0x46, 0xaa, 0x24, + 0xae, 0x44, 0x3e, 0x4b, 0xfd, 0x20, 0x2c, 0x3b, 0x0f, 0x31, 0x73, 0x59, 0x0a, 0x36, 0x2b, 0xea, + 0x15, 0xdc, 0x57, 0x61, 0x60, 0xbd, 0xd1, 0xae, 0xf9, 0x01, 0x6a, 0xc1, 0x00, 0x4f, 0x04, 0x21, + 0x76, 0x7b, 0x0b, 0xe7, 0x4e, 0x2e, 0x2a, 0xb4, 0x28, 0x14, 0x7e, 0xdb, 0x57, 0xf0, 0x71, 0x3f, + 0x59, 0x00, 0x7a, 0x34, 0x5f, 0x9c, 0x43, 0x7f, 0xb3, 0xe3, 0x99, 0x9c, 0x9f, 0xcb, 0x79, 0x26, + 0x67, 0x8c, 0x21, 0xe7, 0xbc, 0x90, 0xd3, 0x80, 0x31, 0xe6, 0x1c, 0x91, 0x7b, 0xa0, 0x50, 0xab, + 0x9f, 0xe9, 0x31, 0x77, 0x82, 0x5e, 0x55, 0xec, 0x08, 0x3a, 0x08, 0x9b, 0xc4, 0xd1, 0x2a, 0x9c, + 0xe2, 0x39, 0x46, 0xe7, 0x49, 0xc3, 0xdb, 0xcd, 0xe4, 0x12, 0x3b, 0x2f, 0x5f, 0x3e, 0x9b, 0xef, + 0x44, 0xc1, 0x79, 0xf5, 0xdc, 0xdf, 0xeb, 0x07, 0xcd, 0x25, 0xd1, 0xc3, 0x6a, 0x79, 0x25, 0xe3, + 0x80, 0x5a, 0xb5, 0xe2, 0x80, 0x92, 0x5e, 0x1d, 0x2e, 0x81, 0x4c, 0x9f, 0x13, 0x6d, 0x54, 0x9d, + 0x34, 0x5a, 0xa2, 0x8f, 0xaa, 0x51, 0x57, 0x48, 0xa3, 0x85, 0x59, 0x89, 0xba, 0xeb, 0xd8, 0xdf, + 0xf5, 0xae, 0x63, 0x1d, 0x8a, 0x35, 0xaf, 0x5d, 0x23, 0x22, 0x02, 0xd3, 0x82, 0xaf, 0x91, 0xdd, + 0xbe, 0xe0, 0xbe, 0x46, 0xf6, 0x2f, 0xe6, 0x0c, 0xe8, 0x62, 0xaf, 0xcb, 0x90, 0x14, 0x61, 0xa4, + 0xb5, 0xb0, 0xd8, 0x55, 0x94, 0x0b, 0x5f, 0xec, 0xea, 0x27, 0x4e, 0x99, 0xa1, 0x16, 0x0c, 0x56, + 0x78, 0x06, 0x17, 0xa1, 0xb3, 0x2c, 0xd9, 0xb8, 0xcc, 0xc9, 0x08, 0x72, 0x6b, 0x8a, 0xf8, 0x81, + 0x25, 0x1b, 0xf7, 0x22, 0x8c, 0x68, 0xaf, 0x75, 0xd0, 0xcf, 0xa0, 0x92, 0x87, 0x68, 0x9f, 0x61, + 0xde, 0x4b, 0x3c, 0xcc, 0x4a, 0xdc, 0x6f, 0xf5, 0x83, 0xb2, 0xa5, 0xe9, 0x57, 0x0f, 0xbd, 0x8a, + 0x96, 0xea, 0xc8, 0xb8, 0x86, 0x1f, 0x06, 0x58, 0x94, 0x52, 0xbd, 0xae, 0x49, 0xa2, 0x9a, 0x3a, + 0x47, 0x0b, 0x71, 0xad, 0xf4, 0xba, 0x55, 0xbd, 0x10, 0x9b, 0xb8, 0x54, 0x29, 0x6f, 0x0a, 0x17, + 0x7d, 0x36, 0xb0, 0x5a, 0xba, 0xee, 0xb1, 0xc2, 0x60, 0xb9, 0x12, 0x9a, 0x9a, 0x47, 0x5f, 0x04, + 0x62, 0xda, 0x70, 0x28, 0x69, 0x54, 0x79, 0xc0, 0x94, 0x0e, 0xc1, 0x06, 0x57, 0xb4, 0x08, 0x27, + 0x63, 0x92, 0xac, 0xdd, 0x0c, 0x48, 0xa4, 0xb2, 0x14, 0x88, 0x64, 0x1c, 0xea, 0x62, 0x46, 0x39, + 0x8b, 0x80, 0x3b, 0xeb, 0xe4, 0xc6, 0xae, 0x16, 0x0f, 0x1c, 0xbb, 0x3a, 0x0f, 0x13, 0x5b, 0x9e, + 0xdf, 0x68, 0x47, 0xa4, 0x6b, 0x04, 0xec, 0x42, 0xa6, 0x1c, 0x77, 0xd4, 0x60, 0x77, 0x83, 0x1a, + 0x5e, 0x2d, 0x2e, 0x0d, 0x6a, 0x77, 0x83, 0x28, 0x00, 0x73, 0xb8, 0xfb, 0x9b, 0x0e, 0xf0, 0x2c, + 0x48, 0x33, 0x5b, 0x5b, 0x7e, 0xe0, 0x27, 0xbb, 0xe8, 0xeb, 0x0e, 0x4c, 0x04, 0x61, 0x95, 0xcc, + 0x04, 0x89, 0x2f, 0x81, 0xf6, 0x52, 0xd3, 0x33, 0x5e, 0x57, 0x33, 0xe4, 0x79, 0x4a, 0x8d, 0x2c, + 0x14, 0x77, 0x34, 0xc3, 0x3d, 0x07, 0x67, 0x72, 0x09, 0xb8, 0x3f, 0xe8, 0x03, 0x33, 0x99, 0x13, + 0x7a, 0x1e, 0x8a, 0x0d, 0x96, 0x5e, 0xc4, 0x39, 0x64, 0x96, 0x2e, 0x36, 0x56, 0x3c, 0xff, 0x08, + 0xa7, 0x84, 0xe6, 0x61, 0x84, 0x65, 0x88, 0x12, 0xc9, 0x5f, 0x0a, 0x46, 0x56, 0x85, 0x11, 0x9c, + 0x16, 0xdd, 0x31, 0x7f, 0x62, 0xbd, 0x1a, 0x7a, 0x0d, 0x06, 0x37, 0x79, 0x9e, 0x4c, 0x7b, 0x3e, + 0x3f, 0x91, 0x78, 0x93, 0xe9, 0x46, 0x32, 0x0b, 0xe7, 0x9d, 0xf4, 0x5f, 0x2c, 0x39, 0xa2, 0x5d, + 0x18, 0xf2, 0xe4, 0x37, 0xed, 0xb7, 0x75, 0x51, 0xc3, 0x98, 0x3f, 0x22, 0x62, 0x46, 0x7e, 0x43, + 0xc5, 0x2e, 0x13, 0x5a, 0x54, 0xec, 0x29, 0xb4, 0xe8, 0x3b, 0x0e, 0x40, 0xfa, 0xa8, 0x08, 0xba, + 0x05, 0x43, 0xf1, 0x33, 0x86, 0xa1, 0xc2, 0xc6, 0x25, 0x7f, 0x41, 0x51, 0xbb, 0x08, 0x2b, 0x20, + 0x58, 0x71, 0xbb, 0x9b, 0x71, 0xe5, 0xa7, 0x0e, 0x9c, 0xce, 0x7b, 0xfc, 0xe4, 0x3e, 0xb6, 0xf8, + 0xa0, 0x76, 0x15, 0x51, 0x61, 0x3d, 0x22, 0x5b, 0xfe, 0xad, 0x9c, 0x6c, 0xcd, 0xbc, 0x00, 0xa7, + 0x38, 0xee, 0x9f, 0x0e, 0x82, 0x62, 0x7c, 0x44, 0x76, 0x98, 0xc7, 0xe9, 0x99, 0xa9, 0x96, 0xea, + 0x5c, 0x0a, 0x0f, 0x33, 0x28, 0x16, 0xa5, 0xf4, 0xdc, 0x24, 0x83, 0xe2, 0x85, 0xc8, 0x66, 0xb3, + 0x50, 0x06, 0xcf, 0x63, 0x55, 0x9a, 0x67, 0xd9, 0x29, 0x1e, 0x8b, 0x65, 0x67, 0xc0, 0xbe, 0x65, + 0xa7, 0x09, 0x28, 0xe6, 0x0b, 0x85, 0x99, 0x53, 0x04, 0xa3, 0xd1, 0x03, 0x1b, 0x9a, 0xcb, 0x1d, + 0x44, 0x70, 0x0e, 0x61, 0x16, 0x43, 0x11, 0x36, 0xc8, 0x0c, 0xbe, 0x2a, 0x0e, 0x1f, 0x69, 0x0c, + 0x05, 0x07, 0x63, 0x59, 0x7e, 0x48, 0x53, 0x0a, 0xfa, 0x6d, 0x67, 0x1f, 0x5b, 0xd5, 0xb0, 0xad, + 0x2d, 0x28, 0x37, 0x93, 0x1e, 0x3b, 0x49, 0x1d, 0xc6, 0x00, 0xf6, 0x0d, 0x07, 0x4e, 0x92, 0xa0, + 0x12, 0xed, 0x32, 0x3a, 0x82, 0x9a, 0x70, 0x71, 0x5f, 0xb3, 0xb1, 0xd6, 0x2f, 0x67, 0x89, 0x73, + 0x4f, 0x52, 0x07, 0x18, 0x77, 0x36, 0x03, 0xad, 0xc1, 0x50, 0xc5, 0x13, 0xf3, 0x62, 0xe4, 0x20, + 0xf3, 0x82, 0x3b, 0xea, 0x66, 0xc4, 0x6c, 0x50, 0x44, 0xdc, 0x1f, 0x17, 0xe0, 0x54, 0x4e, 0x93, + 0xd8, 0x7d, 0xad, 0x26, 0x5d, 0x00, 0x4b, 0xd5, 0xec, 0xf2, 0x5f, 0x16, 0x70, 0xac, 0x30, 0xd0, + 0x3a, 0x9c, 0xde, 0x6e, 0xc6, 0x29, 0x95, 0xb9, 0x30, 0x48, 0xc8, 0x2d, 0x29, 0x0c, 0xa4, 0xfb, + 0xfb, 0xf4, 0x72, 0x0e, 0x0e, 0xce, 0xad, 0x49, 0xb5, 0x25, 0x12, 0x78, 0x9b, 0x0d, 0x92, 0x16, + 0x89, 0x5b, 0x8c, 0x4a, 0x5b, 0xba, 0x9c, 0x29, 0xc7, 0x1d, 0x35, 0xd0, 0xe7, 0x1c, 0x38, 0x1f, + 0x93, 0x68, 0x87, 0x44, 0x65, 0xbf, 0x4a, 0xe6, 0xda, 0x71, 0x12, 0x36, 0x49, 0x74, 0x48, 0xeb, + 0xec, 0xd4, 0xed, 0xbd, 0xa9, 0xf3, 0xe5, 0xee, 0xd4, 0xf0, 0x7e, 0xac, 0xdc, 0xcf, 0x39, 0x30, + 0x5e, 0x66, 0x67, 0x77, 0xa5, 0xba, 0xdb, 0xce, 0xa5, 0xfa, 0xb8, 0x4a, 0xdd, 0x91, 0x11, 0xc2, + 0x66, 0xb2, 0x0d, 0xf7, 0x65, 0x98, 0x28, 0x93, 0xa6, 0xd7, 0xaa, 0xb3, 0x5b, 0xcc, 0x3c, 0xfc, + 0xeb, 0x22, 0x0c, 0xc7, 0x12, 0x96, 0x7d, 0x3e, 0x49, 0x21, 0xe3, 0x14, 0x07, 0x3d, 0xc6, 0x43, + 0xd5, 0xe4, 0x85, 0xa3, 0x61, 0x7e, 0xc8, 0xe1, 0xf1, 0x6d, 0x31, 0x96, 0x65, 0xee, 0x5b, 0x0e, + 0x8c, 0xa6, 0xf5, 0xc9, 0x16, 0xaa, 0xc1, 0x89, 0x8a, 0x76, 0x59, 0x2f, 0xbd, 0x26, 0xd1, 0xfb, + 0xbd, 0x3e, 0x9e, 0xe2, 0xd9, 0x24, 0x82, 0xb3, 0x54, 0x0f, 0x1e, 0xe9, 0xf7, 0xc5, 0x02, 0x9c, + 0x50, 0x4d, 0x15, 0x7e, 0xca, 0x37, 0xb2, 0x01, 0x79, 0xd8, 0x46, 0x12, 0x22, 0x73, 0xec, 0xf7, + 0x09, 0xca, 0x7b, 0x23, 0x1b, 0x94, 0x77, 0xa4, 0xec, 0x3b, 0x5c, 0xaf, 0xdf, 0x29, 0xc0, 0x90, + 0x4a, 0x89, 0xf4, 0x3c, 0x14, 0xd9, 0xc9, 0xf5, 0xde, 0xf4, 0x6f, 0x76, 0x0a, 0xc6, 0x9c, 0x12, + 0x25, 0xc9, 0x82, 0x7e, 0x0e, 0x9d, 0x78, 0x77, 0x98, 0xdb, 0x2f, 0xbd, 0x28, 0xc1, 0x9c, 0x12, + 0x5a, 0x86, 0x3e, 0x12, 0x54, 0x85, 0x22, 0x7e, 0x70, 0x82, 0xec, 0xa1, 0xb3, 0xcb, 0x41, 0x15, + 0x53, 0x2a, 0x2c, 0x2f, 0x1b, 0xd7, 0xb7, 0x32, 0xcf, 0xda, 0x08, 0x65, 0x4b, 0x94, 0xba, 0xb3, + 0x60, 0xe4, 0xec, 0x3b, 0xd4, 0xcd, 0x88, 0x5f, 0xee, 0x83, 0x81, 0x72, 0x7b, 0x93, 0x1e, 0x4b, + 0xbe, 0xed, 0xc0, 0xa9, 0x9b, 0x99, 0xcc, 0xd6, 0xe9, 0x3a, 0xb9, 0x66, 0xcf, 0x0e, 0xac, 0x07, + 0xaf, 0x29, 0xeb, 0x57, 0x4e, 0x21, 0xce, 0x6b, 0x8e, 0x91, 0x5c, 0xb6, 0xef, 0x48, 0x92, 0xcb, + 0xde, 0x3a, 0xe2, 0xdb, 0x1b, 0x63, 0xdd, 0x6e, 0x6e, 0xb8, 0xbf, 0x57, 0x04, 0xe0, 0x5f, 0x63, + 0xad, 0x95, 0xf4, 0x62, 0xd9, 0x7b, 0x16, 0x46, 0x6b, 0x24, 0x20, 0x91, 0x0c, 0x4d, 0xcc, 0xbc, + 0xba, 0xb4, 0xa8, 0x95, 0x61, 0x03, 0x93, 0x4d, 0x96, 0x20, 0x89, 0x76, 0xb9, 0xaa, 0x9d, 0xbd, + 0xa1, 0xa1, 0x4a, 0xb0, 0x86, 0x85, 0xa6, 0x0d, 0xc7, 0x0b, 0xf7, 0xe1, 0x8f, 0xef, 0xe3, 0x27, + 0x79, 0x3f, 0x8c, 0x9b, 0x99, 0x58, 0x84, 0xc2, 0xa7, 0x7c, 0xee, 0x66, 0x02, 0x17, 0x9c, 0xc1, + 0xa6, 0x0b, 0xa1, 0x1a, 0xed, 0xe2, 0x76, 0x20, 0x34, 0x3f, 0xb5, 0x10, 0xe6, 0x19, 0x14, 0x8b, + 0x52, 0x96, 0xc2, 0x82, 0xed, 0x81, 0x1c, 0x2e, 0xd2, 0x60, 0xa4, 0x29, 0x2c, 0xb4, 0x32, 0x6c, + 0x60, 0x52, 0x0e, 0xc2, 0x32, 0x0a, 0xe6, 0x52, 0xcb, 0x98, 0x33, 0x5b, 0x30, 0x1e, 0x9a, 0x16, + 0x1d, 0xae, 0x06, 0xbd, 0xbb, 0xc7, 0xa9, 0x67, 0xd4, 0xe5, 0xb1, 0x12, 0x19, 0x03, 0x50, 0x86, + 0x3e, 0x55, 0x7d, 0xf5, 0x8b, 0x0c, 0xa3, 0x66, 0x64, 0x6b, 0xd7, 0xbb, 0x06, 0xeb, 0x70, 0xba, + 0x15, 0x56, 0xd7, 0x23, 0x3f, 0x8c, 0xfc, 0x64, 0x77, 0xae, 0xe1, 0xc5, 0x31, 0x9b, 0x18, 0x63, + 0xa6, 0x4a, 0xb4, 0x9e, 0x83, 0x83, 0x73, 0x6b, 0xd2, 0x33, 0x51, 0x4b, 0x00, 0x59, 0x7c, 0x59, + 0x91, 0x2b, 0x75, 0x12, 0x11, 0xab, 0x52, 0xf7, 0x14, 0x9c, 0x2c, 0xb7, 0x5b, 0xad, 0x86, 0x4f, + 0xaa, 0xca, 0xb1, 0xe1, 0x7e, 0x00, 0x4e, 0x88, 0xd4, 0xb3, 0x4a, 0x01, 0x39, 0x50, 0xa2, 0x74, + 0xf7, 0x3f, 0xf5, 0xc1, 0x89, 0x4c, 0x34, 0x0f, 0x7a, 0x2d, 0xab, 0x36, 0xd8, 0x49, 0x89, 0xaa, + 0x29, 0x0c, 0x22, 0xbf, 0x69, 0x9e, 0x0a, 0x52, 0x97, 0xa1, 0xf8, 0xd6, 0xae, 0xc0, 0xb0, 0x80, + 0x75, 0xbe, 0xab, 0x18, 0xf1, 0xfc, 0x1f, 0x03, 0x50, 0x6c, 0xe5, 0xad, 0x7b, 0xdb, 0xfd, 0x64, + 0xeb, 0x57, 0x41, 0x62, 0xac, 0x71, 0x44, 0x01, 0x0c, 0xb2, 0x86, 0x10, 0x79, 0xef, 0xd2, 0x5a, + 0x5f, 0x99, 0xd6, 0xb6, 0xca, 0x69, 0x63, 0xc9, 0xc4, 0xfd, 0x6c, 0x01, 0xf2, 0x43, 0xc6, 0xd0, + 0xc7, 0x3a, 0x3f, 0xf8, 0xf3, 0x16, 0x07, 0x42, 0xc4, 0xac, 0x75, 0xff, 0xe6, 0x81, 0xf9, 0xcd, + 0x57, 0x2d, 0x8d, 0x83, 0xe0, 0xdb, 0xf1, 0xe5, 0xdd, 0xff, 0xe9, 0xc0, 0xc8, 0xc6, 0xc6, 0x8a, + 0xda, 0xda, 0x31, 0x9c, 0x8d, 0x79, 0x4a, 0x03, 0xe6, 0x59, 0x9f, 0x0b, 0x9b, 0x2d, 0xee, 0x68, + 0x17, 0x01, 0x00, 0x2c, 0xeb, 0x71, 0x39, 0x17, 0x03, 0x77, 0xa9, 0x89, 0x96, 0xe0, 0x94, 0x5e, + 0x52, 0xd6, 0x1e, 0x99, 0x2c, 0x8a, 0x0c, 0x47, 0x9d, 0xc5, 0x38, 0xaf, 0x4e, 0x96, 0x94, 0x30, + 0x28, 0xb3, 0xed, 0x39, 0x87, 0x94, 0x28, 0xc6, 0x79, 0x75, 0xdc, 0x35, 0x18, 0xd9, 0xf0, 0x22, + 0xd5, 0xf1, 0x0f, 0xc2, 0x44, 0x25, 0x6c, 0x4a, 0x75, 0x65, 0x85, 0xec, 0x90, 0x86, 0xe8, 0x32, + 0x7f, 0xd9, 0x25, 0x53, 0x86, 0x3b, 0xb0, 0xdd, 0xff, 0x76, 0x01, 0xd4, 0x15, 0xcd, 0x1e, 0x76, + 0xd4, 0x96, 0x0a, 0xa6, 0x2d, 0x5a, 0x0e, 0xa6, 0x55, 0x7b, 0x4b, 0x26, 0xa0, 0x36, 0x49, 0x03, + 0x6a, 0x07, 0x6c, 0x07, 0xd4, 0x2a, 0x25, 0xbb, 0x23, 0xa8, 0xf6, 0xab, 0x0e, 0x8c, 0x06, 0x61, + 0x95, 0x28, 0x0f, 0xe8, 0x20, 0x5b, 0xe1, 0x2f, 0xd9, 0xbb, 0x9b, 0xc0, 0x83, 0x43, 0x05, 0x79, + 0x1e, 0xe8, 0xad, 0xb6, 0x64, 0xbd, 0x08, 0x1b, 0xed, 0x40, 0x0b, 0x9a, 0x69, 0x99, 0x7b, 0x70, + 0x1e, 0xca, 0x3b, 0xa2, 0xdd, 0xd5, 0x4e, 0x7c, 0x4b, 0xd3, 0x13, 0x87, 0x6d, 0x99, 0x4c, 0xe5, + 0xbd, 0x3b, 0xcd, 0x11, 0x25, 0x13, 0x77, 0xa7, 0xfa, 0xa3, 0x0b, 0x03, 0x3c, 0x22, 0x5c, 0xe4, + 0xd2, 0x62, 0xfe, 0x51, 0x1e, 0x2d, 0x8e, 0x45, 0x09, 0x4a, 0x64, 0x94, 0xc5, 0x88, 0xad, 0x67, + 0x38, 0x8c, 0x28, 0x8e, 0xfc, 0x30, 0x0b, 0xf4, 0x9c, 0x7e, 0xf4, 0x1f, 0xed, 0xe5, 0xe8, 0x3f, + 0xd6, 0xf5, 0xd8, 0xff, 0x05, 0x07, 0x46, 0x2b, 0xda, 0xb3, 0x18, 0xa5, 0x27, 0x6c, 0x3d, 0xff, + 0x9d, 0xf7, 0x7a, 0x09, 0x77, 0xbb, 0x19, 0xcf, 0x70, 0x18, 0xdc, 0x59, 0x02, 0x51, 0x66, 0xe7, + 0x60, 0xaa, 0x8e, 0x95, 0xc4, 0x1c, 0xa6, 0xdd, 0x44, 0x46, 0xab, 0x52, 0x18, 0x16, 0xbc, 0xd0, + 0xeb, 0x30, 0x24, 0x2f, 0x15, 0x88, 0xe0, 0x7b, 0x6c, 0xc3, 0x0f, 0x62, 0x3a, 0x5b, 0x65, 0xd6, + 0x41, 0x0e, 0xc5, 0x8a, 0x23, 0xaa, 0x43, 0x5f, 0xd5, 0xab, 0x89, 0x30, 0xfc, 0x55, 0x3b, 0x59, + 0x5d, 0x25, 0x4f, 0x76, 0x24, 0x9d, 0x9f, 0x59, 0xc4, 0x94, 0x05, 0xba, 0x95, 0xbe, 0x2b, 0x30, + 0x61, 0x6d, 0xf7, 0x35, 0xd5, 0x42, 0xae, 0x13, 0x74, 0x3c, 0x53, 0x50, 0x15, 0xfe, 0xe9, 0xbf, + 0xc2, 0xd8, 0x2e, 0xd8, 0x49, 0x0b, 0xcb, 0x13, 0xbd, 0xa4, 0x3e, 0x6e, 0xca, 0xa5, 0x9e, 0x24, + 0xad, 0xd2, 0xcf, 0xdb, 0xe2, 0xc2, 0xd2, 0x95, 0xf0, 0x97, 0xda, 0x37, 0x36, 0xd6, 0x31, 0xa3, + 0x8e, 0x1a, 0x30, 0xd0, 0x62, 0xa1, 0x33, 0xa5, 0x77, 0xda, 0xda, 0x5b, 0x78, 0x28, 0x0e, 0x9f, + 0x9b, 0xfc, 0x7f, 0x2c, 0x78, 0xa0, 0xcb, 0x30, 0xc8, 0x9f, 0xc7, 0xe1, 0xd7, 0x20, 0x46, 0x2e, + 0x4d, 0x76, 0x7f, 0x64, 0x27, 0xdd, 0x28, 0xf8, 0xef, 0x18, 0xcb, 0xba, 0xe8, 0x8b, 0x0e, 0x8c, + 0x53, 0x89, 0x9a, 0xbe, 0xe7, 0x53, 0x42, 0xb6, 0x64, 0xd6, 0xb5, 0x98, 0x6a, 0x24, 0x52, 0xd6, + 0xa8, 0x63, 0xe1, 0x92, 0xc1, 0x0e, 0x67, 0xd8, 0xa3, 0x37, 0x60, 0x28, 0xf6, 0xab, 0xa4, 0xe2, + 0x45, 0x71, 0xe9, 0xd4, 0xd1, 0x34, 0x25, 0xf5, 0x88, 0x09, 0x46, 0x58, 0xb1, 0x44, 0xbf, 0xc6, + 0x1e, 0x54, 0xad, 0xd4, 0xfd, 0x1d, 0xb2, 0x12, 0x56, 0xf8, 0x31, 0xe6, 0xb4, 0xad, 0xb5, 0x2f, + 0x7d, 0x7f, 0x92, 0xb2, 0x70, 0x14, 0x99, 0xec, 0x70, 0x96, 0x3f, 0xfa, 0x5b, 0x0e, 0x9c, 0xe1, + 0x0f, 0x1f, 0x64, 0xdf, 0xf2, 0x38, 0x73, 0x48, 0x93, 0x14, 0xbb, 0xbf, 0x31, 0x93, 0x47, 0x12, + 0xe7, 0x73, 0x62, 0x69, 0x8a, 0xcd, 0xe7, 0x97, 0xce, 0x5a, 0xf5, 0x0c, 0xf7, 0xfe, 0xe4, 0x12, + 0x7a, 0x1a, 0x46, 0x5a, 0x62, 0x3b, 0xf4, 0xe3, 0x26, 0xbb, 0x8d, 0xd3, 0xc7, 0xef, 0x49, 0xae, + 0xa7, 0x60, 0xac, 0xe3, 0x18, 0x39, 0xab, 0x9f, 0xdc, 0x2f, 0x67, 0x35, 0xba, 0x06, 0x23, 0x49, + 0xd8, 0x10, 0x69, 0x5b, 0xe3, 0x52, 0x89, 0xcd, 0xc0, 0x0b, 0x79, 0x6b, 0x6b, 0x43, 0xa1, 0xa5, + 0x27, 0xf7, 0x14, 0x16, 0x63, 0x9d, 0x0e, 0x8b, 0x80, 0x16, 0x0f, 0x4a, 0x44, 0xec, 0xc8, 0xfe, + 0x60, 0x26, 0x02, 0x5a, 0x2f, 0xc4, 0x26, 0x2e, 0x5a, 0x84, 0x93, 0xad, 0x8e, 0x33, 0x3f, 0xbf, + 0x05, 0xa8, 0x82, 0x4e, 0x3a, 0x0f, 0xfc, 0x9d, 0x75, 0x8c, 0xd3, 0xfe, 0xf9, 0xfd, 0x4e, 0xfb, + 0x5d, 0x32, 0x38, 0x3f, 0x74, 0x98, 0x0c, 0xce, 0xa8, 0x0a, 0x0f, 0x79, 0xed, 0x24, 0x64, 0x29, + 0x79, 0xcc, 0x2a, 0x3c, 0x18, 0xfc, 0x11, 0x1e, 0x5f, 0x7e, 0x7b, 0x6f, 0xea, 0xa1, 0x99, 0x7d, + 0xf0, 0xf0, 0xbe, 0x54, 0xd0, 0xab, 0x30, 0x44, 0x44, 0x16, 0xea, 0xd2, 0xcf, 0xd9, 0x52, 0x12, + 0xcc, 0xbc, 0xd6, 0x32, 0xce, 0x96, 0xc3, 0xb0, 0xe2, 0x87, 0x36, 0x60, 0xa4, 0x1e, 0xc6, 0xc9, + 0x4c, 0xc3, 0xf7, 0x62, 0x12, 0x97, 0x1e, 0x66, 0x93, 0x26, 0x57, 0xf7, 0xba, 0x22, 0xd1, 0xd2, + 0x39, 0x73, 0x25, 0xad, 0x89, 0x75, 0x32, 0x88, 0x30, 0xff, 0x30, 0x8b, 0x84, 0x97, 0xbe, 0xaf, + 0x0b, 0xac, 0x63, 0x8f, 0xe7, 0x51, 0x5e, 0x0f, 0xab, 0x65, 0x13, 0x5b, 0x39, 0x88, 0x75, 0x20, + 0xce, 0xd2, 0x44, 0xcf, 0xc2, 0x68, 0x2b, 0xac, 0x96, 0x5b, 0xa4, 0xb2, 0xee, 0x25, 0x95, 0x7a, + 0x69, 0xca, 0xb4, 0x32, 0xae, 0x6b, 0x65, 0xd8, 0xc0, 0x44, 0x2d, 0x18, 0x6c, 0xf2, 0x5c, 0x0d, + 0xa5, 0x47, 0x6d, 0x9d, 0x6d, 0x44, 0xf2, 0x07, 0x61, 0x43, 0xe0, 0x3f, 0xb0, 0x64, 0x83, 0xfe, + 0xa1, 0x03, 0x27, 0x32, 0xf7, 0xcb, 0x4a, 0xef, 0xb0, 0xa6, 0xb2, 0x98, 0x84, 0x67, 0x1f, 0x67, + 0xc3, 0x67, 0x02, 0xef, 0x74, 0x82, 0x70, 0xb6, 0x45, 0x7c, 0x5c, 0x58, 0xc2, 0x95, 0xd2, 0x63, + 0xf6, 0xc6, 0x85, 0x11, 0x94, 0xe3, 0xc2, 0x7e, 0x60, 0xc9, 0x06, 0x3d, 0x09, 0x83, 0x22, 0x37, + 0x62, 0xe9, 0x71, 0xd3, 0xeb, 0x2e, 0x52, 0x28, 0x62, 0x59, 0x3e, 0xf9, 0x01, 0x38, 0xd9, 0x71, + 0x74, 0x3b, 0x50, 0xd6, 0x8f, 0xdf, 0x70, 0x40, 0xbf, 0x90, 0x6e, 0xfd, 0xe9, 0x97, 0x67, 0x61, + 0xb4, 0xc2, 0x5f, 0xe2, 0xe4, 0x57, 0xda, 0xfb, 0x4d, 0x7b, 0xef, 0x9c, 0x56, 0x86, 0x0d, 0x4c, + 0xf7, 0x0a, 0xa0, 0xce, 0xbc, 0xfc, 0x87, 0x72, 0x9c, 0xfc, 0x63, 0x07, 0xc6, 0x0c, 0x9d, 0xc1, + 0xba, 0x5f, 0x75, 0x01, 0x50, 0xd3, 0x8f, 0xa2, 0x30, 0xd2, 0x9f, 0x3c, 0x14, 0x69, 0x27, 0x58, + 0xbc, 0xc5, 0x6a, 0x47, 0x29, 0xce, 0xa9, 0xe1, 0x7e, 0xa1, 0x08, 0x69, 0xa0, 0xb9, 0xca, 0x5a, + 0xec, 0x74, 0xcd, 0x5a, 0xfc, 0x14, 0x0c, 0xbd, 0x1c, 0x87, 0xc1, 0x7a, 0x9a, 0xdb, 0x58, 0x7d, + 0x8b, 0xe7, 0xca, 0x6b, 0x57, 0x19, 0xa6, 0xc2, 0x60, 0xd8, 0xaf, 0x2c, 0xf8, 0x8d, 0xa4, 0x33, + 0xf9, 0xed, 0x73, 0xcf, 0x73, 0x38, 0x56, 0x18, 0xec, 0xf5, 0xc3, 0x1d, 0xa2, 0x1c, 0x01, 0xe9, + 0xeb, 0x87, 0xfc, 0xc9, 0x0d, 0x56, 0x86, 0x2e, 0xc2, 0xb0, 0x72, 0x22, 0x08, 0xcf, 0x84, 0x1a, + 0x29, 0xe5, 0x69, 0xc0, 0x29, 0x0e, 0x53, 0x08, 0x85, 0xe1, 0x59, 0x98, 0x50, 0xca, 0x36, 0x8e, + 0x27, 0x19, 0x53, 0x36, 0x97, 0xed, 0x12, 0x8c, 0x15, 0xcb, 0x3c, 0xdf, 0xf2, 0xf0, 0x91, 0xf8, + 0x96, 0xb3, 0x89, 0xfe, 0xc0, 0x62, 0xa2, 0x3f, 0xfd, 0x4a, 0x45, 0xb1, 0xd7, 0x2b, 0x15, 0xe6, + 0xc2, 0x19, 0xea, 0x69, 0xe1, 0x7c, 0xba, 0x0f, 0x06, 0xaf, 0x93, 0x88, 0xe5, 0xa4, 0x7f, 0x12, + 0x06, 0x77, 0xf8, 0xbf, 0xd9, 0xfb, 0xb8, 0x02, 0x03, 0xcb, 0x72, 0x3a, 0x29, 0x36, 0xdb, 0x7e, + 0xa3, 0x3a, 0x9f, 0x8a, 0x88, 0x34, 0x67, 0xa4, 0x2c, 0xc0, 0x29, 0x0e, 0xad, 0x50, 0xa3, 0xc7, + 0x86, 0x66, 0xd3, 0x4f, 0xb2, 0x71, 0x68, 0x8b, 0xb2, 0x00, 0xa7, 0x38, 0xe8, 0x71, 0x18, 0xa8, + 0xf9, 0xc9, 0x86, 0x57, 0xcb, 0xba, 0x5d, 0x17, 0x19, 0x14, 0x8b, 0x52, 0xe6, 0x73, 0xf3, 0x93, + 0x8d, 0x88, 0x30, 0xb3, 0x71, 0x47, 0x3a, 0x90, 0x45, 0xad, 0x0c, 0x1b, 0x98, 0xac, 0x49, 0xa1, + 0xe8, 0x99, 0x08, 0xc2, 0x4d, 0x9b, 0x24, 0x0b, 0x70, 0x8a, 0x43, 0x17, 0x57, 0x25, 0x6c, 0xb6, + 0xfc, 0x86, 0x08, 0x0f, 0xd7, 0x16, 0xd7, 0x9c, 0x80, 0x63, 0x85, 0x41, 0xb1, 0xa9, 0x7c, 0xa4, + 0xb2, 0x2d, 0xfb, 0x8c, 0xdd, 0xba, 0x80, 0x63, 0x85, 0xe1, 0x5e, 0x87, 0x31, 0x2e, 0x26, 0xe6, + 0x1a, 0x9e, 0xdf, 0x5c, 0x9c, 0x43, 0x97, 0x3b, 0xae, 0x54, 0x3c, 0x99, 0x73, 0xa5, 0xe2, 0x8c, + 0x51, 0xa9, 0xf3, 0x6a, 0x85, 0xfb, 0xc3, 0x02, 0x0c, 0x1d, 0xe3, 0x4b, 0xa0, 0xc7, 0xfe, 0xa8, + 0x35, 0xba, 0x95, 0x79, 0x05, 0x74, 0xdd, 0xe6, 0x0d, 0xa9, 0x7d, 0x5f, 0x00, 0xfd, 0xcf, 0x05, + 0x38, 0x2b, 0x51, 0xe5, 0x41, 0x71, 0x71, 0x8e, 0xbd, 0xae, 0x76, 0xf4, 0x03, 0x1d, 0x19, 0x03, + 0xbd, 0x6e, 0xef, 0xa8, 0xbb, 0x38, 0xd7, 0x75, 0xa8, 0x5f, 0xcd, 0x0c, 0x35, 0xb6, 0xca, 0x75, + 0xff, 0xc1, 0xfe, 0x73, 0x07, 0x26, 0xf3, 0x07, 0xfb, 0x18, 0x1e, 0x5e, 0x7d, 0xc3, 0x7c, 0x78, + 0xf5, 0x17, 0xed, 0x4d, 0x31, 0xb3, 0x2b, 0x5d, 0x9e, 0x60, 0xfd, 0x1f, 0x0e, 0x9c, 0x96, 0x15, + 0xd8, 0xd6, 0x3c, 0xeb, 0x07, 0x2c, 0x32, 0xe8, 0xe8, 0xa7, 0xd9, 0xeb, 0xc6, 0x34, 0x7b, 0xd1, + 0x5e, 0xc7, 0xf5, 0x7e, 0x74, 0x7d, 0xb0, 0xfe, 0xcf, 0x1c, 0x28, 0xe5, 0x55, 0x38, 0x86, 0x4f, + 0xfe, 0x9a, 0xf9, 0xc9, 0xaf, 0x1f, 0x4d, 0xcf, 0xbb, 0x7f, 0xf0, 0x52, 0xb7, 0x81, 0x42, 0x0d, + 0xa9, 0xb4, 0x39, 0xb6, 0x1c, 0xde, 0x9c, 0x45, 0xbe, 0xf6, 0xd7, 0x80, 0x81, 0x98, 0x85, 0xc0, + 0x88, 0x29, 0x70, 0xc5, 0x86, 0x2a, 0x47, 0xe9, 0x09, 0x03, 0x3e, 0xfb, 0x1f, 0x0b, 0x1e, 0xee, + 0x6f, 0x16, 0xe0, 0x9c, 0x7a, 0x50, 0x99, 0xec, 0x90, 0x46, 0xba, 0x3e, 0xd8, 0xf3, 0x1b, 0x9e, + 0xfa, 0x69, 0xef, 0xf9, 0x8d, 0x94, 0x45, 0xba, 0x16, 0x52, 0x18, 0xd6, 0x78, 0xa2, 0x32, 0x9c, + 0x61, 0xcf, 0x65, 0x2c, 0xf8, 0x81, 0xd7, 0xf0, 0x5f, 0x25, 0x11, 0x26, 0xcd, 0x70, 0xc7, 0x6b, + 0x88, 0x63, 0x80, 0xba, 0x92, 0xbd, 0x90, 0x87, 0x84, 0xf3, 0xeb, 0x76, 0x1c, 0xe7, 0xfb, 0x7a, + 0x3d, 0xce, 0xbb, 0x7f, 0xe2, 0xc0, 0xe8, 0x31, 0x3e, 0x3f, 0x1d, 0x9a, 0x4b, 0xe2, 0x39, 0x7b, + 0x4b, 0xa2, 0xcb, 0x32, 0xd8, 0x2b, 0x42, 0xc7, 0x8b, 0xbc, 0xe8, 0x33, 0x8e, 0x0a, 0x12, 0xe2, + 0xc1, 0x98, 0x1f, 0xb6, 0xd7, 0x8e, 0x83, 0xe4, 0xf1, 0x44, 0xdf, 0xc8, 0x24, 0x37, 0x2d, 0xd8, + 0xca, 0xd0, 0xd5, 0xd1, 0x9a, 0x43, 0x24, 0x39, 0xfd, 0xaa, 0x03, 0xc0, 0xdb, 0x29, 0x72, 0xa3, + 0xd3, 0xb6, 0x6d, 0x1e, 0xd9, 0x48, 0x51, 0x26, 0xbc, 0x69, 0x6a, 0x09, 0xa5, 0x05, 0x58, 0x6b, + 0xc9, 0x3d, 0x64, 0x2f, 0xbd, 0xe7, 0xc4, 0xa9, 0x5f, 0x74, 0xe0, 0x44, 0xa6, 0xb9, 0x39, 0xf5, + 0xb7, 0xcc, 0x07, 0x24, 0x2d, 0x68, 0x56, 0x66, 0xc6, 0x6c, 0xdd, 0x32, 0xf3, 0x5f, 0x5d, 0x30, + 0x9e, 0x32, 0x47, 0xaf, 0xc1, 0xb0, 0x34, 0xab, 0xc8, 0xe9, 0x6d, 0xf3, 0x21, 0x5d, 0x75, 0xbc, + 0x91, 0x90, 0x18, 0xa7, 0xfc, 0x32, 0x31, 0x88, 0x85, 0x9e, 0x62, 0x10, 0xef, 0xef, 0x33, 0xbc, + 0xf9, 0x46, 0xef, 0xfe, 0x23, 0x31, 0x7a, 0x3f, 0x64, 0xdd, 0xe8, 0xfd, 0xf0, 0x31, 0x1b, 0xbd, + 0x35, 0x0f, 0x64, 0xf1, 0x1e, 0x3c, 0x90, 0xaf, 0xc1, 0xe9, 0x9d, 0xf4, 0xd0, 0xa9, 0x66, 0x92, + 0xc8, 0x0b, 0xf5, 0x64, 0xae, 0xa9, 0x9b, 0x1e, 0xa0, 0xe3, 0x84, 0x04, 0x89, 0x76, 0x5c, 0x4d, + 0xc3, 0x1f, 0xaf, 0xe7, 0x90, 0xc3, 0xb9, 0x4c, 0xb2, 0xae, 0xa4, 0xc1, 0x1e, 0x5c, 0x49, 0x6f, + 0x39, 0x70, 0xc6, 0xeb, 0xb8, 0xc3, 0x87, 0xc9, 0x96, 0x88, 0x67, 0xb9, 0x61, 0x4f, 0x85, 0x30, + 0xc8, 0x0b, 0x9f, 0x5d, 0x5e, 0x11, 0xce, 0x6f, 0x10, 0x7a, 0x2c, 0xf5, 0xeb, 0xf3, 0xa0, 0xd9, + 0x7c, 0x27, 0xfc, 0x37, 0xb2, 0xc1, 0x42, 0xc0, 0x86, 0xfe, 0xa3, 0x76, 0x4f, 0xdb, 0x16, 0x02, + 0x86, 0x46, 0xee, 0x21, 0x60, 0x28, 0xe3, 0xd7, 0x1b, 0xb5, 0xe4, 0xd7, 0x0b, 0x60, 0xc2, 0x6f, + 0x7a, 0x35, 0xb2, 0xde, 0x6e, 0x34, 0xb8, 0xf9, 0x4d, 0x3e, 0x75, 0x9c, 0x6b, 0x1e, 0x5c, 0x09, + 0x2b, 0x5e, 0x23, 0xfb, 0xc8, 0xbd, 0xba, 0x7c, 0xb4, 0x94, 0xa1, 0x84, 0x3b, 0x68, 0xd3, 0x09, + 0xcb, 0x12, 0x14, 0x92, 0x84, 0x8e, 0x36, 0x8b, 0x4a, 0x19, 0xe2, 0x13, 0xf6, 0x4a, 0x0a, 0xc6, + 0x3a, 0x0e, 0x5a, 0x86, 0xe1, 0x6a, 0x10, 0x8b, 0xeb, 0xc8, 0x27, 0x98, 0x30, 0x7b, 0x17, 0x15, + 0x81, 0xf3, 0x57, 0xcb, 0xea, 0x22, 0xf2, 0x43, 0x39, 0x19, 0x37, 0x55, 0x39, 0x4e, 0xeb, 0xa3, + 0x55, 0x46, 0x4c, 0x3c, 0xe2, 0xc6, 0x83, 0x45, 0x1e, 0xe9, 0xe2, 0x8d, 0x9a, 0xbf, 0x2a, 0x9f, + 0xa1, 0x1b, 0x13, 0xec, 0xc4, 0x6b, 0x6c, 0x29, 0x05, 0xed, 0xc9, 0xe9, 0x93, 0xfb, 0x3e, 0x39, + 0xcd, 0x52, 0xed, 0x26, 0x0d, 0xe5, 0x7b, 0xbe, 0x60, 0x2d, 0xd5, 0x6e, 0x1a, 0x86, 0x29, 0x52, + 0xed, 0xa6, 0x00, 0xac, 0xb3, 0x44, 0x6b, 0xdd, 0x7c, 0xf0, 0xa7, 0x98, 0xd0, 0x38, 0xb8, 0x47, + 0x5d, 0x77, 0xc6, 0x9e, 0xde, 0xd7, 0x19, 0xdb, 0xe1, 0x3c, 0x3e, 0x73, 0x00, 0xe7, 0x71, 0x9d, + 0x25, 0x41, 0x5d, 0x9c, 0x13, 0xfe, 0x7a, 0x0b, 0xe7, 0x3b, 0x96, 0x76, 0x85, 0x87, 0xb5, 0xb2, + 0x7f, 0x31, 0x67, 0xd0, 0x35, 0x3a, 0xfd, 0xdc, 0xa1, 0xa3, 0xd3, 0xa9, 0x78, 0x4e, 0xe1, 0x2c, + 0x9b, 0x6e, 0x51, 0x88, 0xe7, 0x14, 0x8c, 0x75, 0x9c, 0xac, 0x2b, 0xf6, 0xc1, 0x23, 0x73, 0xc5, + 0x4e, 0x1e, 0x83, 0x2b, 0xf6, 0x7c, 0xcf, 0xae, 0xd8, 0x5b, 0x70, 0xaa, 0x15, 0x56, 0xe7, 0xfd, + 0x38, 0x6a, 0xb3, 0x5b, 0x8a, 0xb3, 0xed, 0x6a, 0x8d, 0x24, 0xcc, 0x97, 0x3b, 0x72, 0xe9, 0x5d, + 0x7a, 0x23, 0x5b, 0x6c, 0x21, 0xcb, 0x35, 0x9a, 0xa9, 0xc0, 0x4c, 0x27, 0x2c, 0xa4, 0x37, 0xa7, + 0x10, 0xe7, 0xb1, 0xd0, 0x9d, 0xc0, 0x8f, 0x1c, 0x8f, 0x13, 0xf8, 0x83, 0x30, 0x14, 0xd7, 0xdb, + 0x49, 0x35, 0xbc, 0x19, 0x30, 0x4f, 0xff, 0xf0, 0xec, 0x3b, 0x94, 0x29, 0x5b, 0xc0, 0xef, 0xec, + 0x4d, 0x4d, 0xc8, 0xff, 0x35, 0x2b, 0xb6, 0x80, 0xa0, 0x6f, 0x76, 0xb9, 0x0c, 0xe5, 0x1e, 0xe5, + 0x65, 0xa8, 0x73, 0x07, 0xba, 0x08, 0x95, 0xe7, 0xe9, 0x7e, 0xf4, 0x67, 0xce, 0xd3, 0xfd, 0x75, + 0x07, 0xc6, 0x76, 0x74, 0x97, 0x81, 0xf0, 0xc6, 0x5b, 0x88, 0x0a, 0x32, 0x3c, 0x11, 0xb3, 0x2e, + 0x95, 0x73, 0x06, 0xe8, 0x4e, 0x16, 0x80, 0xcd, 0x96, 0xe4, 0x44, 0x2c, 0x3d, 0x76, 0xbf, 0x22, + 0x96, 0xde, 0x60, 0x72, 0x4c, 0x1e, 0x72, 0x99, 0x8b, 0xde, 0x6e, 0xc0, 0xb2, 0x94, 0x89, 0x2a, + 0x5e, 0x59, 0xe7, 0x87, 0xbe, 0xe0, 0xc0, 0x84, 0x3c, 0x97, 0x09, 0x97, 0x5f, 0x2c, 0x42, 0x2e, + 0x6d, 0x1e, 0x07, 0x59, 0xcc, 0xfe, 0x46, 0x86, 0x0f, 0xee, 0xe0, 0x4c, 0xa5, 0xba, 0x8a, 0x70, + 0xab, 0xc5, 0x2c, 0xb2, 0x58, 0xe8, 0x30, 0x33, 0x29, 0x18, 0xeb, 0x38, 0xe8, 0x5b, 0x0e, 0x14, + 0xeb, 0x61, 0xb8, 0x1d, 0x97, 0x9e, 0x64, 0x02, 0xfd, 0x05, 0xcb, 0xba, 0xe9, 0x15, 0x4a, 0x9b, + 0x2b, 0xa5, 0x4f, 0x4b, 0xdb, 0x11, 0x83, 0xdd, 0xd9, 0x9b, 0x1a, 0x37, 0xde, 0x8a, 0x8a, 0xdf, + 0x7c, 0x5b, 0x83, 0x08, 0xdb, 0x26, 0x6b, 0x1a, 0xfa, 0xb2, 0x03, 0x13, 0x37, 0x33, 0x06, 0x0d, + 0x11, 0x73, 0x8a, 0xed, 0x9b, 0x4a, 0xf8, 0x70, 0x67, 0xa1, 0xb8, 0xa3, 0x05, 0xe8, 0xf3, 0xa6, + 0xa1, 0x93, 0x07, 0xa7, 0x5a, 0x1c, 0xc0, 0x8c, 0x61, 0x95, 0xdf, 0x39, 0xca, 0xb7, 0x78, 0xde, + 0x73, 0xf0, 0xc9, 0x24, 0xed, 0x4c, 0xfa, 0xb1, 0x72, 0xaa, 0x12, 0xd3, 0xde, 0x62, 0x61, 0xb1, + 0x1b, 0x9f, 0x5f, 0x37, 0xb7, 0x7c, 0xf9, 0x2c, 0x8c, 0x9b, 0xbe, 0x3d, 0xf4, 0x6e, 0xf3, 0x1d, + 0x90, 0x0b, 0xd9, 0x27, 0x15, 0xc6, 0x24, 0xbe, 0xf1, 0xac, 0x82, 0xf1, 0xee, 0x41, 0xe1, 0x48, + 0xdf, 0x3d, 0xe8, 0x3b, 0x9e, 0x77, 0x0f, 0x26, 0x8e, 0xe2, 0xdd, 0x83, 0x93, 0x07, 0x7a, 0xf7, + 0x40, 0x7b, 0x77, 0xa2, 0xff, 0x2e, 0xef, 0x4e, 0xcc, 0xc0, 0x09, 0x79, 0xb1, 0x88, 0x88, 0xd4, + 0xf2, 0xdc, 0xed, 0xaf, 0x9e, 0x30, 0x9f, 0x33, 0x8b, 0x71, 0x16, 0x9f, 0x2e, 0xb2, 0x62, 0xc0, + 0x6a, 0x0e, 0xd8, 0x7a, 0x94, 0xca, 0x9c, 0x5a, 0xec, 0xf8, 0x2c, 0x44, 0x94, 0x0c, 0xa5, 0x2e, + 0x32, 0xd8, 0x1d, 0xf9, 0x0f, 0xe6, 0x2d, 0x40, 0x2f, 0x41, 0x29, 0xdc, 0xda, 0x6a, 0x84, 0x5e, + 0x35, 0x7d, 0x9c, 0x41, 0xc6, 0x25, 0xf0, 0x8b, 0xb0, 0x2a, 0x97, 0xef, 0x5a, 0x17, 0x3c, 0xdc, + 0x95, 0x02, 0x7a, 0x8b, 0x2a, 0x26, 0x49, 0x18, 0x91, 0x6a, 0x6a, 0xab, 0x19, 0x66, 0x7d, 0x26, + 0xd6, 0xfb, 0x5c, 0x36, 0xf9, 0xf0, 0xde, 0xab, 0x8f, 0x92, 0x29, 0xc5, 0xd9, 0x66, 0xa1, 0x08, + 0xce, 0xb6, 0xf2, 0x4c, 0x45, 0xb1, 0xb8, 0x0e, 0xb5, 0x9f, 0xc1, 0x4a, 0x3d, 0xd4, 0x9d, 0x6b, + 0x6c, 0x8a, 0x71, 0x17, 0xca, 0xfa, 0x03, 0x0a, 0x43, 0xc7, 0xf3, 0x80, 0xc2, 0xc7, 0x01, 0x2a, + 0x32, 0x95, 0x9b, 0x34, 0x3e, 0x2c, 0x5b, 0xb9, 0xa7, 0xc3, 0x69, 0x6a, 0x6f, 0xd6, 0x2a, 0x36, + 0x58, 0x63, 0x89, 0xfe, 0x4f, 0xee, 0x0b, 0x23, 0xdc, 0xc2, 0x52, 0xb3, 0x3e, 0x27, 0x7e, 0xe6, + 0x5e, 0x19, 0xf9, 0x47, 0x0e, 0x4c, 0xf2, 0x99, 0x97, 0x55, 0xee, 0xa9, 0x6a, 0x21, 0x2e, 0x0e, + 0xd9, 0x0e, 0x5d, 0xe1, 0x29, 0x99, 0x0c, 0xae, 0xcc, 0xd1, 0xbd, 0x4f, 0x4b, 0xd0, 0x57, 0x73, + 0x8e, 0x14, 0x27, 0x6c, 0xd9, 0x2c, 0xf3, 0xdf, 0x89, 0x38, 0x75, 0xbb, 0x97, 0x53, 0xc4, 0x3f, + 0xe9, 0x6a, 0x52, 0x45, 0xac, 0x79, 0xbf, 0x74, 0x44, 0x26, 0x55, 0xfd, 0x31, 0x8b, 0x03, 0x19, + 0x56, 0xbf, 0xe8, 0xc0, 0x84, 0x97, 0x09, 0x35, 0x61, 0x76, 0x20, 0x2b, 0x36, 0xa9, 0x99, 0x28, + 0x8d, 0x5f, 0x61, 0x4a, 0x5e, 0x36, 0xaa, 0x05, 0x77, 0x30, 0x47, 0x3f, 0x74, 0xe0, 0x7c, 0xe2, + 0xc5, 0xdb, 0x3c, 0x55, 0x74, 0x9c, 0x5e, 0x04, 0x16, 0x8d, 0x3b, 0xcd, 0x56, 0xe3, 0x2b, 0xd6, + 0x57, 0xe3, 0x46, 0x77, 0x9e, 0x7c, 0x5d, 0x3e, 0x2a, 0xd6, 0xe5, 0xf9, 0x7d, 0x30, 0xf1, 0x7e, + 0x4d, 0x9f, 0xfc, 0x8c, 0xc3, 0x9f, 0x14, 0xeb, 0xaa, 0xf2, 0x6d, 0x9a, 0x2a, 0xdf, 0x8a, 0xcd, + 0x47, 0x8d, 0x74, 0xdd, 0xf3, 0x57, 0x1d, 0x38, 0x9d, 0xb7, 0x23, 0xe5, 0x34, 0xe9, 0xa3, 0x66, + 0x93, 0x2c, 0x9e, 0xb2, 0xf4, 0x06, 0x59, 0x79, 0x53, 0x65, 0xf2, 0x2a, 0x3c, 0x72, 0xb7, 0xaf, + 0x78, 0x37, 0x7a, 0x43, 0xba, 0x5a, 0xfc, 0x67, 0xc3, 0x9a, 0x17, 0x32, 0x21, 0x2d, 0xeb, 0x01, + 0xe2, 0x01, 0x0c, 0xf8, 0x41, 0xc3, 0x0f, 0x88, 0xb8, 0x0c, 0x6a, 0xf3, 0x0c, 0x2b, 0xde, 0x44, + 0xa2, 0xd4, 0xb1, 0xe0, 0x72, 0x9f, 0x9d, 0x92, 0xd9, 0x57, 0xe6, 0xfa, 0x8f, 0xff, 0x95, 0xb9, + 0x9b, 0x30, 0x7c, 0xd3, 0x4f, 0xea, 0x2c, 0x98, 0x42, 0xf8, 0xfa, 0x2c, 0x5c, 0xa2, 0xa4, 0xe4, + 0xd2, 0xbe, 0xdf, 0x90, 0x0c, 0x70, 0xca, 0x0b, 0x5d, 0xe4, 0x8c, 0x59, 0x58, 0x78, 0x36, 0xa4, + 0xf6, 0x86, 0x2c, 0xc0, 0x29, 0x0e, 0x1d, 0xac, 0x51, 0xfa, 0x4b, 0x26, 0x98, 0x12, 0x69, 0x97, + 0x6d, 0xa4, 0xd3, 0x14, 0x14, 0x79, 0xa4, 0xf5, 0x0d, 0x8d, 0x07, 0x36, 0x38, 0xaa, 0xcc, 0xd7, + 0x43, 0x5d, 0x33, 0x5f, 0xbf, 0xce, 0x14, 0xb6, 0xc4, 0x0f, 0xda, 0x64, 0x2d, 0x10, 0xc1, 0xe4, + 0x2b, 0x76, 0x2e, 0x56, 0x73, 0x9a, 0xfc, 0x08, 0x9e, 0xfe, 0xc6, 0x1a, 0x3f, 0xcd, 0xe5, 0x32, + 0xb2, 0xaf, 0xcb, 0x25, 0x35, 0xb9, 0x8c, 0x5a, 0x37, 0xb9, 0x24, 0xa4, 0x65, 0xc5, 0xe4, 0xf2, + 0x33, 0x65, 0x0e, 0xf8, 0x73, 0x07, 0x90, 0xd2, 0xbb, 0x94, 0x40, 0x3d, 0x86, 0xa0, 0xca, 0x4f, + 0x38, 0x00, 0x81, 0x7a, 0x8b, 0xd4, 0xee, 0x2e, 0xc8, 0x69, 0xa6, 0x0d, 0x48, 0x61, 0x58, 0xe3, + 0xe9, 0xfe, 0xa9, 0x93, 0xc6, 0x2e, 0xa7, 0x7d, 0x3f, 0x86, 0x20, 0xb2, 0x5d, 0x33, 0x88, 0x6c, + 0xc3, 0xa2, 0xe9, 0x5e, 0x75, 0xa3, 0x4b, 0x38, 0xd9, 0x4f, 0x0a, 0x70, 0x42, 0x47, 0x2e, 0x93, + 0xe3, 0xf8, 0xd8, 0x37, 0x8d, 0x08, 0xda, 0x6b, 0x76, 0xfb, 0x5b, 0x16, 0x1e, 0xa0, 0xbc, 0x68, + 0xed, 0x8f, 0x67, 0xa2, 0xb5, 0x6f, 0xd8, 0x67, 0xbd, 0x7f, 0xc8, 0xf6, 0x7f, 0x71, 0xe0, 0x54, + 0xa6, 0xc6, 0x31, 0x4c, 0xb0, 0x1d, 0x73, 0x82, 0x3d, 0x6f, 0xbd, 0xd7, 0x5d, 0x66, 0xd7, 0xb7, + 0x0b, 0x1d, 0xbd, 0x65, 0x87, 0xb8, 0x4f, 0x3b, 0x50, 0xa4, 0xda, 0xb2, 0x8c, 0xe7, 0xfa, 0xe8, + 0x91, 0xcc, 0x00, 0xa6, 0xd7, 0x0b, 0xe9, 0xac, 0xda, 0xc7, 0x60, 0x98, 0x73, 0x9f, 0xfc, 0x94, + 0x03, 0x90, 0x22, 0xdd, 0x2f, 0x15, 0xd8, 0xfd, 0x6e, 0x01, 0xce, 0xe4, 0x4e, 0x23, 0xf4, 0x59, + 0x65, 0x91, 0x73, 0x6c, 0x47, 0x2b, 0x1a, 0x8c, 0x74, 0xc3, 0xdc, 0x98, 0x61, 0x98, 0x13, 0xf6, + 0xb8, 0xfb, 0x75, 0x80, 0x11, 0x62, 0x5a, 0x1b, 0xac, 0x1f, 0x3b, 0x69, 0x00, 0xac, 0x4a, 0x9a, + 0xf4, 0x17, 0xf0, 0x12, 0x8f, 0xfb, 0x13, 0xed, 0x86, 0x83, 0xec, 0xe8, 0x31, 0xc8, 0x8a, 0x9b, + 0xa6, 0xac, 0xc0, 0xf6, 0xfd, 0xc8, 0x5d, 0x84, 0xc5, 0x2b, 0x90, 0xe7, 0x58, 0xee, 0x2d, 0xc3, + 0xa4, 0x71, 0xd7, 0xb6, 0xd0, 0xf3, 0x5d, 0xdb, 0x31, 0x18, 0x79, 0xd1, 0x57, 0xd9, 0x49, 0x67, + 0xa7, 0xbf, 0xf7, 0xa3, 0x0b, 0x0f, 0x7c, 0xff, 0x47, 0x17, 0x1e, 0xf8, 0xe1, 0x8f, 0x2e, 0x3c, + 0xf0, 0x89, 0xdb, 0x17, 0x9c, 0xef, 0xdd, 0xbe, 0xe0, 0x7c, 0xff, 0xf6, 0x05, 0xe7, 0x87, 0xb7, + 0x2f, 0x38, 0xff, 0xee, 0xf6, 0x05, 0xe7, 0xef, 0xfc, 0xfb, 0x0b, 0x0f, 0xbc, 0x38, 0x24, 0x3b, + 0xf6, 0xff, 0x03, 0x00, 0x00, 0xff, 0xff, 0xad, 0x28, 0x86, 0x3c, 0x32, 0xd9, 0x00, 0x00, } func (m *Amount) Marshal() (dAtA []byte, err error) { @@ -12153,6 +12153,18 @@ func (m *ValueFrom) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if m.SecretKeyRef != nil { + { + size, err := m.SecretKeyRef.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintGenerated(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x52 + } if m.ConfigMapKeyRef != nil { { size, err := m.ConfigMapKeyRef.MarshalToSizedBuffer(dAtA[:i]) @@ -16757,6 +16769,10 @@ func (m *ValueFrom) Size() (n int) { l = m.ConfigMapKeyRef.Size() n += 1 + l + sovGenerated(uint64(l)) } + if m.SecretKeyRef != nil { + l = m.SecretKeyRef.Size() + n += 1 + l + sovGenerated(uint64(l)) + } return n } @@ -19280,6 +19296,7 @@ func (this *ValueFrom) String() string { `Event:` + fmt.Sprintf("%v", this.Event) + `,`, `Expression:` + fmt.Sprintf("%v", this.Expression) + `,`, `ConfigMapKeyRef:` + strings.Replace(fmt.Sprintf("%v", this.ConfigMapKeyRef), "ConfigMapKeySelector", "v1.ConfigMapKeySelector", 1) + `,`, + `SecretKeyRef:` + strings.Replace(fmt.Sprintf("%v", this.SecretKeyRef), "SecretKeySelector", "v1.SecretKeySelector", 1) + `,`, `}`, }, "") return s @@ -41665,6 +41682,42 @@ func (m *ValueFrom) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SecretKeyRef", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthGenerated + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SecretKeyRef == nil { + m.SecretKeyRef = &v1.SecretKeySelector{} + } + if err := m.SecretKeyRef.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) diff --git a/pkg/apis/workflow/v1alpha1/generated.proto b/pkg/apis/workflow/v1alpha1/generated.proto index 95eddbdf358b..254676373891 100644 --- a/pkg/apis/workflow/v1alpha1/generated.proto +++ b/pkg/apis/workflow/v1alpha1/generated.proto @@ -1806,6 +1806,9 @@ message ValueFrom { // ConfigMapKeyRef is configmap selector for input parameter configuration optional k8s.io.api.core.v1.ConfigMapKeySelector configMapKeyRef = 9; + // SecretKeyRef is secret selector for input parameter configuration + optional k8s.io.api.core.v1.SecretKeySelector secretKeyRef = 10; + // Default specifies a value to be used if retrieving the value from the specified source fails optional string default = 5; diff --git a/pkg/apis/workflow/v1alpha1/openapi_generated.go b/pkg/apis/workflow/v1alpha1/openapi_generated.go index c8215312264c..54b6697d7048 100644 --- a/pkg/apis/workflow/v1alpha1/openapi_generated.go +++ b/pkg/apis/workflow/v1alpha1/openapi_generated.go @@ -7069,6 +7069,12 @@ func schema_pkg_apis_workflow_v1alpha1_ValueFrom(ref common.ReferenceCallback) c Ref: ref("k8s.io/api/core/v1.ConfigMapKeySelector"), }, }, + "secretKeyRef": { + SchemaProps: spec.SchemaProps{ + Description: "SecretKeyRef is secret selector for input parameter configuration", + Ref: ref("k8s.io/api/core/v1.SecretKeySelector"), + }, + }, "default": { SchemaProps: spec.SchemaProps{ Description: "Default specifies a value to be used if retrieving the value from the specified source fails", @@ -7087,7 +7093,7 @@ func schema_pkg_apis_workflow_v1alpha1_ValueFrom(ref common.ReferenceCallback) c }, }, Dependencies: []string{ - "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.SuppliedValueFrom", "k8s.io/api/core/v1.ConfigMapKeySelector"}, + "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1.SuppliedValueFrom", "k8s.io/api/core/v1.ConfigMapKeySelector", "k8s.io/api/core/v1.SecretKeySelector"}, } } diff --git a/pkg/apis/workflow/v1alpha1/workflow_types.go b/pkg/apis/workflow/v1alpha1/workflow_types.go index c90ebd76dd38..695901315929 100644 --- a/pkg/apis/workflow/v1alpha1/workflow_types.go +++ b/pkg/apis/workflow/v1alpha1/workflow_types.go @@ -907,6 +907,9 @@ type ValueFrom struct { // ConfigMapKeyRef is configmap selector for input parameter configuration ConfigMapKeyRef *apiv1.ConfigMapKeySelector `json:"configMapKeyRef,omitempty" protobuf:"bytes,9,opt,name=configMapKeyRef"` + // SecretKeyRef is secret selector for input parameter configuration + SecretKeyRef *apiv1.SecretKeySelector `json:"secretKeyRef,omitempty" protobuf:"bytes,10,opt,name=secretKeyRef"` + // Default specifies a value to be used if retrieving the value from the specified source fails Default *AnyString `json:"default,omitempty" protobuf:"bytes,5,opt,name=default"` diff --git a/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go index 7592ca05ced8..94ba1577a384 100644 --- a/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/workflow/v1alpha1/zz_generated.deepcopy.go @@ -3438,6 +3438,11 @@ func (in *ValueFrom) DeepCopyInto(out *ValueFrom) { *out = new(v1.ConfigMapKeySelector) (*in).DeepCopyInto(*out) } + if in.SecretKeyRef != nil { + in, out := &in.SecretKeyRef, &out.SecretKeyRef + *out = new(v1.SecretKeySelector) + (*in).DeepCopyInto(*out) + } if in.Default != nil { in, out := &in.Default, &out.Default *out = new(AnyString) diff --git a/pkg/plugins/executor/swagger.yml b/pkg/plugins/executor/swagger.yml index 6830ec022f9f..d14f01ec02aa 100644 --- a/pkg/plugins/executor/swagger.yml +++ b/pkg/plugins/executor/swagger.yml @@ -4759,6 +4759,8 @@ definitions: path: description: Path in the container to retrieve an output parameter value from in container templates type: string + secretKeyRef: + $ref: '#/definitions/SecretKeySelector' supplied: $ref: '#/definitions/SuppliedValueFrom' type: object diff --git a/workflow/common/common.go b/workflow/common/common.go index 42b241b2a5be..ca27f9a4f3c5 100644 --- a/workflow/common/common.go +++ b/workflow/common/common.go @@ -216,6 +216,11 @@ const ( // LabelValueTypeConfigMapExecutorPlugin is a key for configmaps that contains an executor plugin. LabelValueTypeConfigMapExecutorPlugin = "ExecutorPlugin" + // LabelKeySecretType is the label key for the type of secret. + LabelKeySecretType = "workflows.argoproj.io/secret-type" + // LabelValueTypeSecretParameter is a key for secrets that contains parameter values. + LabelValueTypeSecretParameter = "Parameter" + // LocalVarPodName is a step level variable that references the name of the pod LocalVarPodName = "pod.name" // LocalVarRetries is a step level variable that references the retries number if retryStrategy is specified diff --git a/workflow/common/secret.go b/workflow/common/secret.go new file mode 100644 index 000000000000..75c0ee63f1d8 --- /dev/null +++ b/workflow/common/secret.go @@ -0,0 +1,42 @@ +package common + +import ( + "fmt" + + apiv1 "k8s.io/api/core/v1" + + "github.com/argoproj/argo-workflows/v3/errors" +) + +type SecretStore interface { + GetByKey(key string) (interface{}, bool, error) +} + +// GetSecretValue retrieves a secret value +func GetSecretValue(secretStore SecretStore, namespace, name, key string) (string, error) { + obj, exists, err := secretStore.GetByKey(namespace + "/" + name) + if err != nil { + return "", err + } + if exists { + secret, ok := obj.(*apiv1.Secret) + + if !ok { + return "", fmt.Errorf("unable to convert object %s to configmap when syncing Secrets", name) + } + if secretType := secret.Labels[LabelKeySecretType]; secretType != LabelValueTypeSecretParameter { + return "", fmt.Errorf( + "Secret '%s' needs to have the label %s: %s to load parameters", + name, LabelKeySecretType, LabelValueTypeSecretParameter) + } + secretValueBytes, ok := secret.Data[key] + secretValue := string(secretValueBytes) + + if !ok { + return "", errors.Errorf(errors.CodeNotFound, "Secret '%s' does not have the key '%s'", name, key) + } + return secretValue, nil + } + return "", errors.Errorf(errors.CodeNotFound, "Secret '%s' does not exist. Please make sure it has the label %s: %s to be detectable by the controller", + name, LabelKeySecretType, LabelValueTypeSecretParameter) +} diff --git a/workflow/common/util.go b/workflow/common/util.go index 4b5aa0278225..dd6971840dcc 100644 --- a/workflow/common/util.go +++ b/workflow/common/util.go @@ -165,12 +165,47 @@ func substituteAndGetConfigMapValue(inParam *wfv1.Parameter, globalParams Parame return nil } +func substituteAndGetSecretValue(inParam *wfv1.Parameter, globalParams Parameters, namespace string, secretStore SecretStore) error { + if inParam.ValueFrom != nil && inParam.ValueFrom.SecretKeyRef != nil { + if secretStore != nil { + // SubstituteParams is called only at the end of this method. To support parametrization of the secret + // we need to perform a substitution here over the name and the key of the SecretKeyRef. + secretName, err := substituteSecretKeyRefParam(inParam.ValueFrom.SecretKeyRef.Name, globalParams) + if err != nil { + log.WithError(err).Error("unable to substitute name for SecretKeyRef") + return err + } + secretKey, err := substituteSecretKeyRefParam(inParam.ValueFrom.SecretKeyRef.Key, globalParams) + if err != nil { + log.WithError(err).Error("unable to substitute key for SecretKeyRef") + return err + } + + cmValue, err := GetSecretValue(secretStore, namespace, secretName, secretKey) + if err != nil { + if inParam.ValueFrom.Default != nil && errors.IsCode(errors.CodeNotFound, err) { + inParam.Value = inParam.ValueFrom.Default + } else { + return errors.Errorf(errors.CodeBadRequest, "unable to retrieve inputs.parameters.%s from Secret: %s", inParam.Name, err) + } + } else { + inParam.Value = wfv1.AnyStringPtr(cmValue) + } + } + } else { + if inParam.Value == nil { + return errors.Errorf(errors.CodeBadRequest, "inputs.parameters.%s was not supplied", inParam.Name) + } + } + return nil +} + // ProcessArgs sets in the inputs, the values either passed via arguments, or the hardwired values // It substitutes: // * parameters in the template from the arguments // * global parameters (e.g. {{workflow.parameters.XX}}, {{workflow.name}}, {{workflow.status}}) // * local parameters (e.g. {{pod.name}}) -func ProcessArgs(tmpl *wfv1.Template, args wfv1.ArgumentsProvider, globalParams, localParams Parameters, validateOnly bool, namespace string, configMapStore ConfigMapStore) (*wfv1.Template, error) { +func ProcessArgs(tmpl *wfv1.Template, args wfv1.ArgumentsProvider, globalParams, localParams Parameters, validateOnly bool, namespace string, configMapStore ConfigMapStore, secretStore SecretStore) (*wfv1.Template, error) { // For each input parameter: // 1) check if was supplied as argument. if so use the supplied value from arg // 2) if not, use default value. @@ -190,6 +225,12 @@ func ProcessArgs(tmpl *wfv1.Template, args wfv1.ArgumentsProvider, globalParams, return nil, err } + // substitute secret string and get value from store + err = substituteAndGetSecretValue(&inParam, globalParams, namespace, secretStore) + if err != nil { + return nil, err + } + newTmpl.Inputs.Parameters[i] = inParam } @@ -236,6 +277,23 @@ func substituteConfigMapKeyRefParam(in string, globalParams Parameters) (string, return in, nil } +// substituteSecretKeyRefParam check if SecretKeyRef's key is a param and perform the substitution. +func substituteSecretKeyRefParam(in string, globalParams Parameters) (string, error) { + if strings.HasPrefix(in, "{{") && strings.HasSuffix(in, "}}") { + k := strings.TrimSuffix(strings.TrimPrefix(in, "{{"), "}}") + k = strings.Trim(k, " ") + + v, ok := globalParams[k] + if !ok { + err := errors.InternalError(fmt.Sprintf("parameter %s not found", k)) + log.WithError(err).Error() + return "", err + } + return v, nil + } + return in, nil +} + // SubstituteParams returns a new copy of the template with global, pod, and input parameters substituted func SubstituteParams(tmpl *wfv1.Template, globalParams, localParams Parameters) (*wfv1.Template, error) { tmplBytes, err := json.Marshal(tmpl) diff --git a/workflow/common/util_test.go b/workflow/common/util_test.go index a5b02c882d8d..8d96a26e7c90 100644 --- a/workflow/common/util_test.go +++ b/workflow/common/util_test.go @@ -260,13 +260,13 @@ func TestOverridableDefaultInputArts(t *testing.T) { globalParams := make(map[string]string) localParams := make(map[string]string) - newTmpl, err := ProcessArgs(&tmpl, &inputs, globalParams, localParams, false, "", nil) + newTmpl, err := ProcessArgs(&tmpl, &inputs, globalParams, localParams, false, "", nil, nil) require.NoError(t, err) assert.NotNil(t, newTmpl) assert.Equal(t, newTmpl.Inputs.Artifacts[0].Raw.Data, rawArt.Data) inputs.Artifacts = []wfv1.Artifact{inputArt} - newTmpl, err = ProcessArgs(&tmpl, &inputs, globalParams, localParams, false, "", nil) + newTmpl, err = ProcessArgs(&tmpl, &inputs, globalParams, localParams, false, "", nil, nil) require.NoError(t, err) assert.NotNil(t, newTmpl) assert.Equal(t, newTmpl.Inputs.Artifacts[0].Raw.Data, inputRawArt.Data) @@ -311,12 +311,12 @@ func TestOverridableTemplateInputParamsValue(t *testing.T) { globalParams := make(map[string]string) localParams := make(map[string]string) - newTmpl, err := ProcessArgs(&tmpl, &valueArgs, globalParams, localParams, false, "", configMapStore) + newTmpl, err := ProcessArgs(&tmpl, &valueArgs, globalParams, localParams, false, "", configMapStore, nil) require.NoError(t, err) assert.NotNil(t, newTmpl) assert.Equal(t, newTmpl.Inputs.Parameters[0].Value.String(), valueArgs.Parameters[0].Value.String()) - newTmpl, err = ProcessArgs(&tmpl, &valueFromArgs, globalParams, localParams, false, "", configMapStore) + newTmpl, err = ProcessArgs(&tmpl, &valueFromArgs, globalParams, localParams, false, "", configMapStore, nil) require.NoError(t, err) assert.NotNil(t, newTmpl) assert.Equal(t, newTmpl.Inputs.Parameters[0].Value.String(), overrideConfigMapValue) @@ -369,12 +369,12 @@ func TestOverridableTemplateInputParamsValueFrom(t *testing.T) { globalParams := map[string]string{paramName: "overrideValue"} localParams := make(map[string]string) - newTmpl, err := ProcessArgs(&tmpl, &valueArgs, globalParams, localParams, false, "", configMapStore) + newTmpl, err := ProcessArgs(&tmpl, &valueArgs, globalParams, localParams, false, "", configMapStore, nil) require.NoError(t, err) assert.NotNil(t, newTmpl) assert.Equal(t, newTmpl.Inputs.Parameters[0].Value.String(), valueArgs.Parameters[0].Value.String()) - newTmpl, err = ProcessArgs(&tmpl, &valueFromArgs, globalParams, localParams, false, "", configMapStore) + newTmpl, err = ProcessArgs(&tmpl, &valueFromArgs, globalParams, localParams, false, "", configMapStore, nil) require.NoError(t, err) assert.NotNil(t, newTmpl) assert.Equal(t, newTmpl.Inputs.Parameters[0].Value.String(), overrideConfigMapValue) diff --git a/workflow/controller/controller.go b/workflow/controller/controller.go index ccce9cd43107..413fe5168e5b 100644 --- a/workflow/controller/controller.go +++ b/workflow/controller/controller.go @@ -126,6 +126,7 @@ type WorkflowController struct { cwftmplInformer wfextvv1alpha1.ClusterWorkflowTemplateInformer podInformer cache.SharedIndexInformer configMapInformer cache.SharedIndexInformer + secretInformer cache.SharedIndexInformer wfQueue workqueue.RateLimitingInterface podCleanupQueue workqueue.RateLimitingInterface // pods to be deleted or labelled depend on GC strategy wfArchiveQueue workqueue.RateLimitingInterface @@ -317,6 +318,7 @@ func (wfc *WorkflowController) Run(ctx context.Context, wfWorkers, workflowTTLWo wfc.updateEstimatorFactory() wfc.configMapInformer = wfc.newConfigMapInformer() + wfc.secretInformer = wfc.newSecretInformer() // Create Synchronization Manager wfc.createSynchronizationManager(ctx) @@ -333,6 +335,7 @@ func (wfc *WorkflowController) Run(ctx context.Context, wfWorkers, workflowTTLWo go wfc.wftmplInformer.Informer().Run(ctx.Done()) go wfc.podInformer.Run(ctx.Done()) go wfc.configMapInformer.Run(ctx.Done()) + go wfc.secretInformer.Run(ctx.Done()) go wfc.wfTaskSetInformer.Informer().Run(ctx.Done()) go wfc.artGCTaskInformer.Informer().Run(ctx.Done()) go wfc.taskResultInformer.Run(ctx.Done()) @@ -345,6 +348,7 @@ func (wfc *WorkflowController) Run(ctx context.Context, wfWorkers, workflowTTLWo wfc.wftmplInformer.Informer().HasSynced, wfc.podInformer.HasSynced, wfc.configMapInformer.HasSynced, + wfc.secretInformer.HasSynced, wfc.wfTaskSetInformer.Informer().HasSynced, wfc.artGCTaskInformer.Informer().HasSynced, wfc.taskResultInformer.HasSynced, @@ -1373,6 +1377,15 @@ func (wfc *WorkflowController) newConfigMapInformer() cache.SharedIndexInformer return indexInformer } +func (wfc *WorkflowController) newSecretInformer() cache.SharedIndexInformer { + indexInformer := v1.NewFilteredSecretInformer(wfc.kubeclientset, wfc.GetManagedNamespace(), 20*time.Minute, cache.Indexers{ + indexes.SecretLabelsIndex: indexes.SecretIndexFunc, + }, func(opts *metav1.ListOptions) { + opts.LabelSelector = common.LabelKeySecretType + }) + return indexInformer +} + // call this func whenever the configuration changes, or when the workflow informer changes func (wfc *WorkflowController) updateEstimatorFactory() { wfc.estimatorFactory = estimation.NewEstimatorFactory(wfc.wfInformer, wfc.hydrator, wfc.wfArchive) diff --git a/workflow/controller/dag.go b/workflow/controller/dag.go index 8f708eb02d05..39b60d7610db 100644 --- a/workflow/controller/dag.go +++ b/workflow/controller/dag.go @@ -447,7 +447,7 @@ func (woc *wfOperationCtx) executeDAGTask(ctx context.Context, dagCtx *dagContex } } - processedTmpl, err := common.ProcessArgs(tmpl, &task.Arguments, woc.globalParams, map[string]string{}, true, woc.wf.Namespace, woc.controller.configMapInformer.GetIndexer()) + processedTmpl, err := common.ProcessArgs(tmpl, &task.Arguments, woc.globalParams, map[string]string{}, true, woc.wf.Namespace, woc.controller.configMapInformer.GetIndexer(), woc.controller.secretInformer.GetIndexer()) if err != nil { woc.markNodeError(node.Name, err) } diff --git a/workflow/controller/indexes/indexes.go b/workflow/controller/indexes/indexes.go index 8d484288c788..5312566f2d52 100644 --- a/workflow/controller/indexes/indexes.go +++ b/workflow/controller/indexes/indexes.go @@ -15,6 +15,7 @@ const ( WorkflowPhaseIndex = "workflow.phase" PodPhaseIndex = "pod.phase" ConfigMapLabelsIndex = "configmap.labels" + SecretLabelsIndex = "secret.labels" ConditionsIndex = "status.conditions" SemaphoreConfigIndexName = "bySemaphoreConfigMap" UIDIndex = "uid" diff --git a/workflow/controller/indexes/secret_index.go b/workflow/controller/indexes/secret_index.go new file mode 100644 index 000000000000..e44fcb1d7c23 --- /dev/null +++ b/workflow/controller/indexes/secret_index.go @@ -0,0 +1,20 @@ +package indexes + +import ( + corev1 "k8s.io/api/core/v1" + + "github.com/argoproj/argo-workflows/v3/workflow/common" +) + +func SecretIndexFunc(obj interface{}) ([]string, error) { + secret, ok := obj.(*corev1.Secret) + + if !ok { + return nil, nil + } + v, ok := secret.GetLabels()[common.LabelKeySecretType] + if !ok { + return nil, nil + } + return []string{v}, nil +} diff --git a/workflow/controller/operator.go b/workflow/controller/operator.go index c4120f0c6d2e..72861edaa7bf 100644 --- a/workflow/controller/operator.go +++ b/workflow/controller/operator.go @@ -1934,7 +1934,7 @@ func (woc *wfOperationCtx) executeTemplate(ctx context.Context, nodeName string, } // Inputs has been processed with arguments already, so pass empty arguments. - processedTmpl, err := common.ProcessArgs(resolvedTmpl, &args, woc.globalParams, localParams, false, woc.wf.Namespace, woc.controller.configMapInformer.GetIndexer()) + processedTmpl, err := common.ProcessArgs(resolvedTmpl, &args, woc.globalParams, localParams, false, woc.wf.Namespace, woc.controller.configMapInformer.GetIndexer(), woc.controller.secretInformer.GetIndexer()) if err != nil { return woc.initializeNodeOrMarkError(node, nodeName, templateScope, orgTmpl, opts.boundaryID, opts.nodeFlag, err), err } diff --git a/workflow/controller/workflowpod.go b/workflow/controller/workflowpod.go index f793060d1fcf..0592fa62de58 100644 --- a/workflow/controller/workflowpod.go +++ b/workflow/controller/workflowpod.go @@ -364,7 +364,7 @@ func (woc *wfOperationCtx) createWorkflowPod(ctx context.Context, nodeName strin } newTmpl := tmpl.DeepCopy() newTmpl.PodSpecPatch = woc.execWf.Spec.PodSpecPatch - processedTmpl, err := common.ProcessArgs(newTmpl, &wfv1.Arguments{}, woc.globalParams, localParams, false, woc.wf.Namespace, woc.controller.configMapInformer.GetIndexer()) + processedTmpl, err := common.ProcessArgs(newTmpl, &wfv1.Arguments{}, woc.globalParams, localParams, false, woc.wf.Namespace, woc.controller.configMapInformer.GetIndexer(), woc.controller.secretInformer.GetIndexer()) if err != nil { return nil, errors.Wrap(err, "", "Failed to substitute the PodSpecPatch variables") } diff --git a/workflow/validate/validate.go b/workflow/validate/validate.go index f27375a7b3a9..122a8e3fe45f 100644 --- a/workflow/validate/validate.go +++ b/workflow/validate/validate.go @@ -458,7 +458,7 @@ func (ctx *templateValidationCtx) validateTemplate(tmpl *wfv1.Template, tmplCtx } } - newTmpl, err := common.ProcessArgs(tmpl, args, ctx.globalParams, localParams, true, "", nil) + newTmpl, err := common.ProcessArgs(tmpl, args, ctx.globalParams, localParams, true, "", nil, nil) if err != nil { return errors.Errorf(errors.CodeBadRequest, "templates.%s %s", tmpl.Name, err) } From 23830f6be8bebe74f5175e26ba1bef3fb9b2d3e1 Mon Sep 17 00:00:00 2001 From: shuangkun Date: Thu, 14 Nov 2024 11:59:27 +0800 Subject: [PATCH 02/10] fix: test Signed-off-by: shuangkun --- .../arguments-parameters-from-secret.yaml | 29 +++++ ...m-secret-referenced-as-local-variable.yaml | 28 +++++ examples/global-parameters-from-secret.yaml | 27 +++++ .../secrets/simple-parameters-secret.yaml | 10 ++ examples/validation_test.go | 2 +- hack/test-examples.sh | 2 + workflow/common/util.go | 7 +- workflow/common/util_test.go | 103 ++++++++++++++++++ .../controller/indexes/secret_index_test.go | 27 +++++ workflow/controller/operator.go | 17 +++ workflow/validate/validate_test.go | 25 +++++ 11 files changed, 274 insertions(+), 3 deletions(-) create mode 100644 examples/arguments-parameters-from-secret.yaml create mode 100644 examples/global-parameters-from-secret-referenced-as-local-variable.yaml create mode 100644 examples/global-parameters-from-secret.yaml create mode 100644 examples/secrets/simple-parameters-secret.yaml create mode 100644 workflow/controller/indexes/secret_index_test.go diff --git a/examples/arguments-parameters-from-secret.yaml b/examples/arguments-parameters-from-secret.yaml new file mode 100644 index 000000000000..908431bfaef5 --- /dev/null +++ b/examples/arguments-parameters-from-secret.yaml @@ -0,0 +1,29 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Workflow +metadata: + generateName: arguments-parameters-from-secret- + labels: + workflows.argoproj.io/test: "true" + annotations: + workflows.argoproj.io/description: | + This example demonstrates loading parameter values from a Secret. + Note that the "simple-parameters" Secret (defined in `examples/secrets/simple-parameters-secret.yaml`) needs to be created first before submitting this workflow. + workflows.argoproj.io/verify.py: | + assert status["phase"] == "Succeeded" +spec: + entrypoint: print-message-from-secret + + templates: + - name: print-message-from-secret + inputs: + parameters: + # Parameters can also be passed via secret reference. + - name: message + valueFrom: + secretKeyRef: + name: simple-parameters + key: msg + container: + image: busybox + command: ["echo"] + args: ["{{inputs.parameters.message}}"] diff --git a/examples/global-parameters-from-secret-referenced-as-local-variable.yaml b/examples/global-parameters-from-secret-referenced-as-local-variable.yaml new file mode 100644 index 000000000000..dd88b1021ca1 --- /dev/null +++ b/examples/global-parameters-from-secret-referenced-as-local-variable.yaml @@ -0,0 +1,28 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Workflow +metadata: + generateName: global-parameter-from-secret-referenced-as-local-variable- + labels: + workflows.argoproj.io/test: "true" + annotations: + workflows.argoproj.io/description: | + This example demonstrates how a global parameter from a Secret can be referenced as a template local variable. + Note that the "simple-parameters" Secret (defined in `examples/secrets/simple-parameters-secret.yaml`) needs to be created first before submitting this workflow. +spec: + entrypoint: print-message + arguments: + parameters: + - name: message + valueFrom: + secretKeyRef: + name: simple-parameters + key: msg + templates: + - name: print-message + inputs: + parameters: + - name: message + container: + image: busybox + command: ["echo"] + args: ["{{inputs.parameters.message}}"] diff --git a/examples/global-parameters-from-secret.yaml b/examples/global-parameters-from-secret.yaml new file mode 100644 index 000000000000..fa5a1f4a5bb5 --- /dev/null +++ b/examples/global-parameters-from-secret.yaml @@ -0,0 +1,27 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Workflow +metadata: + generateName: global-parameter-values-from-secret- + labels: + workflows.argoproj.io/test: "true" + annotations: + workflows.argoproj.io/description: | + This example demonstrates loading global parameter values from a Secret. + Note that the "simple-parameters" Secret (defined in `examples/secrets/simple-parameters-secret.yaml`) needs to be created first before submitting this workflow. +spec: + entrypoint: print-message + # Parameters can also be passed via configmap reference. + arguments: + parameters: + - name: message + valueFrom: + secretKeyRef: + name: simple-parameters + key: msg + + templates: + - name: print-message + container: + image: busybox + command: ["echo"] + args: ["{{workflow.parameters.message}}"] diff --git a/examples/secrets/simple-parameters-secret.yaml b/examples/secrets/simple-parameters-secret.yaml new file mode 100644 index 000000000000..6e3c32610112 --- /dev/null +++ b/examples/secrets/simple-parameters-secret.yaml @@ -0,0 +1,10 @@ +apiVersion: v1 +kind: Secret +metadata: + name: simple-parameters + labels: + # Note that this label is required for the informer to detect this Secret. + workflows.argoproj.io/secret-type: Parameter +data: + msg: "aGVsbG8gd29ybGQK" + diff --git a/examples/validation_test.go b/examples/validation_test.go index 14f28e7ebb82..408bd2c1260e 100644 --- a/examples/validation_test.go +++ b/examples/validation_test.go @@ -7,7 +7,7 @@ import ( ) func TestValidateExamples(t *testing.T) { - failures, err := ValidateArgoYamlRecursively(".", []string{"testvolume.yaml", "simple-parameters-configmap.yaml", "memoize-simple.yaml"}) + failures, err := ValidateArgoYamlRecursively(".", []string{"testvolume.yaml", "simple-parameters-configmap.yaml", "memoize-simple.yaml", "simple-parameters-secret.yaml"}) if err != nil { t.Errorf("There was an error: %s", err) } diff --git a/hack/test-examples.sh b/hack/test-examples.sh index 78ddec9135e0..a6970b79e98c 100755 --- a/hack/test-examples.sh +++ b/hack/test-examples.sh @@ -3,6 +3,8 @@ set -eu -o pipefail # Load the configmaps that contains the parameter values used for certain examples. kubectl apply -f examples/configmaps/simple-parameters-configmap.yaml +# Load the secrets that contains the parameter values used for certain examples. +kubectl apply -f examples/secrets/simple-parameters-secret.yaml echo "Checking for banned images..." grep -lR 'workflows.argoproj.io/test' examples/* | while read f ; do diff --git a/workflow/common/util.go b/workflow/common/util.go index dd6971840dcc..89256e8d55b5 100644 --- a/workflow/common/util.go +++ b/workflow/common/util.go @@ -158,6 +158,9 @@ func substituteAndGetConfigMapValue(inParam *wfv1.Parameter, globalParams Parame } } } else { + if inParam.ValueFrom != nil && inParam.ValueFrom.SecretKeyRef != nil { + return nil + } if inParam.Value == nil { return errors.Errorf(errors.CodeBadRequest, "inputs.parameters.%s was not supplied", inParam.Name) } @@ -181,7 +184,7 @@ func substituteAndGetSecretValue(inParam *wfv1.Parameter, globalParams Parameter return err } - cmValue, err := GetSecretValue(secretStore, namespace, secretName, secretKey) + secretValue, err := GetSecretValue(secretStore, namespace, secretName, secretKey) if err != nil { if inParam.ValueFrom.Default != nil && errors.IsCode(errors.CodeNotFound, err) { inParam.Value = inParam.ValueFrom.Default @@ -189,7 +192,7 @@ func substituteAndGetSecretValue(inParam *wfv1.Parameter, globalParams Parameter return errors.Errorf(errors.CodeBadRequest, "unable to retrieve inputs.parameters.%s from Secret: %s", inParam.Name, err) } } else { - inParam.Value = wfv1.AnyStringPtr(cmValue) + inParam.Value = wfv1.AnyStringPtr(secretValue) } } } else { diff --git a/workflow/common/util_test.go b/workflow/common/util_test.go index 8d96a26e7c90..a43c9ff05e64 100644 --- a/workflow/common/util_test.go +++ b/workflow/common/util_test.go @@ -280,6 +280,14 @@ func (cs mockConfigMapStore) GetByKey(key string) (interface{}, bool, error) { return cs.getByKey(key) } +type mockSecretStore struct { + getByKey func(key string) (interface{}, bool, error) +} + +func (cs mockSecretStore) GetByKey(key string) (interface{}, bool, error) { + return cs.getByKey(key) +} + func TestOverridableTemplateInputParamsValue(t *testing.T) { tmpl := wfv1.Template{} tmpl.Name = "artifact-printing" @@ -379,3 +387,98 @@ func TestOverridableTemplateInputParamsValueFrom(t *testing.T) { assert.NotNil(t, newTmpl) assert.Equal(t, newTmpl.Inputs.Parameters[0].Value.String(), overrideConfigMapValue) } + +func TestOverridableTemplateInputParamsValueBySecret(t *testing.T) { + tmpl := wfv1.Template{} + tmpl.Name = "artifact-printing" + + paramName := "value-from-param" + + overrideSecretName := "override-secret-name" + overrideSecretKey := "override-secret-key" + overrideSecretValue := "override-secret-value" + + secretStore := mockSecretStore{} + secretStore.getByKey = func(key string) (interface{}, bool, error) { + return &corev1.Secret{ObjectMeta: metav1.ObjectMeta{ + Labels: map[string]string{LabelKeySecretType: LabelValueTypeSecretParameter}}, + Data: map[string][]byte{overrideSecretKey: []byte(overrideSecretValue)}, + }, true, nil + } + + tmpl.Inputs.Parameters = []wfv1.Parameter{{Name: paramName, Value: wfv1.AnyStringPtr("abc")}} + + valueArgs := wfv1.Inputs{Parameters: []wfv1.Parameter{{Name: paramName, Value: wfv1.AnyStringPtr("override")}}} + valueFromArgs := wfv1.Inputs{Parameters: []wfv1.Parameter{{Name: paramName, ValueFrom: &wfv1.ValueFrom{SecretKeyRef: &corev1.SecretKeySelector{ + LocalObjectReference: corev1.LocalObjectReference{ + Name: overrideSecretName, + }, + Key: overrideSecretKey, + }}}}} + + globalParams := make(map[string]string) + localParams := make(map[string]string) + + newTmpl, err := ProcessArgs(&tmpl, &valueArgs, globalParams, localParams, false, "", nil, secretStore) + require.NoError(t, err) + assert.NotNil(t, newTmpl) + assert.Equal(t, newTmpl.Inputs.Parameters[0].Value.String(), valueArgs.Parameters[0].Value.String()) + + newTmpl, err = ProcessArgs(&tmpl, &valueFromArgs, globalParams, localParams, false, "", nil, secretStore) + require.NoError(t, err) + assert.NotNil(t, newTmpl) + assert.Equal(t, newTmpl.Inputs.Parameters[0].Value.String(), overrideSecretValue) +} + +func TestOverridableTemplateInputParamsValueFromBySecret(t *testing.T) { + tmpl := wfv1.Template{} + tmpl.Name = "artifact-printing" + + paramName := "value-from-param" + + secretName := "secret-map-name" + secretKey := "secret-map-key" + secretValue := "secret-map-value" + + overrideSecretName := "override-secret-name" + overrideSecretKey := "override-secret-key" + overrideSecretValue := "override-secret-value" + + secretStore := mockSecretStore{} + secretStore.getByKey = func(key string) (interface{}, bool, error) { + return &corev1.Secret{ObjectMeta: metav1.ObjectMeta{ + Labels: map[string]string{LabelKeySecretType: LabelValueTypeSecretParameter}}, + Data: map[string][]byte{secretKey: []byte(secretValue), overrideSecretKey: []byte(overrideSecretValue)}, + }, true, nil + } + + tmpl.Inputs.Parameters = []wfv1.Parameter{{Name: paramName, ValueFrom: &wfv1.ValueFrom{ + SecretKeyRef: &corev1.SecretKeySelector{ + LocalObjectReference: corev1.LocalObjectReference{ + Name: secretName, + }, + Key: secretKey, + }, + }}} + + valueArgs := wfv1.Inputs{Parameters: []wfv1.Parameter{{Name: paramName, Value: wfv1.AnyStringPtr("override")}}} + valueFromArgs := wfv1.Inputs{Parameters: []wfv1.Parameter{{Name: paramName, ValueFrom: &wfv1.ValueFrom{SecretKeyRef: &corev1.SecretKeySelector{ + LocalObjectReference: corev1.LocalObjectReference{ + Name: overrideSecretName, + }, + Key: overrideSecretKey, + }}}}} + + globalParams := map[string]string{paramName: "overrideValue"} + localParams := make(map[string]string) + + newTmpl, err := ProcessArgs(&tmpl, &valueArgs, globalParams, localParams, false, "", nil, secretStore) + require.NoError(t, err) + assert.NotNil(t, newTmpl) + assert.Equal(t, newTmpl.Inputs.Parameters[0].Value.String(), valueArgs.Parameters[0].Value.String()) + + newTmpl, err = ProcessArgs(&tmpl, &valueFromArgs, globalParams, localParams, false, "", nil, secretStore) + require.NoError(t, err) + assert.NotNil(t, newTmpl) + assert.Equal(t, newTmpl.Inputs.Parameters[0].Value.String(), overrideSecretValue) +} diff --git a/workflow/controller/indexes/secret_index_test.go b/workflow/controller/indexes/secret_index_test.go new file mode 100644 index 000000000000..69483597f994 --- /dev/null +++ b/workflow/controller/indexes/secret_index_test.go @@ -0,0 +1,27 @@ +package indexes + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + + "github.com/argoproj/argo-workflows/v3/workflow/common" +) + +func TestSecretIndexFunc(t *testing.T) { + t.Run("NoLabel", func(t *testing.T) { + values, err := SecretIndexFunc(&corev1.Secret{}) + require.NoError(t, err) + assert.Empty(t, values) + }) + t.Run("HasLabel", func(t *testing.T) { + values, err := SecretIndexFunc(&corev1.Secret{ + ObjectMeta: metav1.ObjectMeta{Labels: map[string]string{common.LabelKeySecretType: common.LabelValueTypeSecretParameter}}, + }) + require.NoError(t, err) + assert.ElementsMatch(t, values, []string{common.LabelValueTypeSecretParameter}) + }) +} diff --git a/workflow/controller/operator.go b/workflow/controller/operator.go index 72861edaa7bf..cd9aac28d526 100644 --- a/workflow/controller/operator.go +++ b/workflow/controller/operator.go @@ -660,6 +660,23 @@ func (woc *wfOperationCtx) setGlobalParameters(executionParameters wfv1.Argument } else { return fmt.Errorf("either value or valueFrom must be specified in order to set global parameter %s", param.Name) } + if param.ValueFrom != nil && param.ValueFrom.SecretKeyRef != nil { + secretValue, err := common.GetSecretValue(woc.controller.secretInformer.GetIndexer(), woc.wf.ObjectMeta.Namespace, param.ValueFrom.SecretKeyRef.Name, param.ValueFrom.SecretKeyRef.Key) + if err != nil { + if param.ValueFrom.Default != nil { + woc.globalParams["workflow.parameters."+param.Name] = param.ValueFrom.Default.String() + } else { + return fmt.Errorf("failed to set global parameter %s from secret with name %s and key %s: %w", + param.Name, param.ValueFrom.SecretKeyRef.Name, param.ValueFrom.SecretKeyRef.Key, err) + } + } else { + woc.globalParams["workflow.parameters."+param.Name] = secretValue + } + } else if param.Value != nil { + woc.globalParams["workflow.parameters."+param.Name] = param.Value.String() + } else { + return fmt.Errorf("either value or valueFrom must be specified in order to set global parameter %s", param.Name) + } } if woc.wf.Status.Outputs != nil { for _, param := range woc.wf.Status.Outputs.Parameters { diff --git a/workflow/validate/validate_test.go b/workflow/validate/validate_test.go index 3f541cfb5cac..c3ff572895d6 100644 --- a/workflow/validate/validate_test.go +++ b/workflow/validate/validate_test.go @@ -474,6 +474,31 @@ func TestParamWithValueFromConfigMapRef(t *testing.T) { require.NoError(t, err) } +var paramWithValueFromSecretRef = ` +apiVersion: argoproj.io/v1alpha1 +kind: Workflow +metadata: + generateName: hello-world- +spec: + entrypoint: whalesay + templates: + - name: whalesay + inputs: + parameters: + - name: message + valueFrom: + secretKeyRef: + name: simple-config + key: msg + container: + image: docker/whalesay:latest +` + +func TestParamWithValueFromSecretRef(t *testing.T) { + err := validate(paramWithValueFromSecretRef) + require.NoError(t, err) +} + var paramWithoutValue = ` apiVersion: argoproj.io/v1alpha1 kind: Workflow From 19527028a9be010065a32a6e9d8a7701911692bb Mon Sep 17 00:00:00 2001 From: shuangkun Date: Thu, 14 Nov 2024 13:25:22 +0800 Subject: [PATCH 03/10] feat: add watch Permission for controller. Signed-off-by: shuangkun --- .../workflow-controller-rbac/workflow-controller-role.yaml | 1 + .../workflow-controller-rbac/workflow-controller-role.yaml | 1 + manifests/quick-start-minimal.yaml | 1 + manifests/quick-start-mysql.yaml | 1 + manifests/quick-start-postgres.yaml | 1 + 5 files changed, 5 insertions(+) diff --git a/manifests/cluster-install/workflow-controller-rbac/workflow-controller-role.yaml b/manifests/cluster-install/workflow-controller-rbac/workflow-controller-role.yaml index a4693c35864d..7417c4353280 100755 --- a/manifests/cluster-install/workflow-controller-rbac/workflow-controller-role.yaml +++ b/manifests/cluster-install/workflow-controller-rbac/workflow-controller-role.yaml @@ -17,4 +17,5 @@ rules: - secrets verbs: - get + - watch diff --git a/manifests/namespace-install/workflow-controller-rbac/workflow-controller-role.yaml b/manifests/namespace-install/workflow-controller-rbac/workflow-controller-role.yaml index 4e8df30fa5f2..e0e988fa6ff7 100644 --- a/manifests/namespace-install/workflow-controller-rbac/workflow-controller-role.yaml +++ b/manifests/namespace-install/workflow-controller-rbac/workflow-controller-role.yaml @@ -88,6 +88,7 @@ rules: - secrets verbs: - get + - watch - apiGroups: - argoproj.io resources: diff --git a/manifests/quick-start-minimal.yaml b/manifests/quick-start-minimal.yaml index 2167bf4c4fab..2a75d34ba568 100644 --- a/manifests/quick-start-minimal.yaml +++ b/manifests/quick-start-minimal.yaml @@ -2757,6 +2757,7 @@ rules: - secrets verbs: - get + - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role diff --git a/manifests/quick-start-mysql.yaml b/manifests/quick-start-mysql.yaml index 6e6ead3f4092..4d88676956d9 100644 --- a/manifests/quick-start-mysql.yaml +++ b/manifests/quick-start-mysql.yaml @@ -2757,6 +2757,7 @@ rules: - secrets verbs: - get + - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role diff --git a/manifests/quick-start-postgres.yaml b/manifests/quick-start-postgres.yaml index 24fe62bca791..c7862808ce84 100644 --- a/manifests/quick-start-postgres.yaml +++ b/manifests/quick-start-postgres.yaml @@ -2757,6 +2757,7 @@ rules: - secrets verbs: - get + - watch --- apiVersion: rbac.authorization.k8s.io/v1 kind: Role From c1f6ab7885f4cb6280f81634fa0ea235e360c882 Mon Sep 17 00:00:00 2001 From: shuangkun Date: Thu, 14 Nov 2024 14:00:24 +0800 Subject: [PATCH 04/10] fix: add docs Signed-off-by: shuangkun --- docs/fields.md | 68 ++++ .../IoArgoprojWorkflowV1alpha1ValueFrom.md | 1 + ...o_argoproj_workflow_v1alpha1_value_from.py | 6 + .../docs/ClusterWorkflowTemplateServiceApi.md | 210 ++++++++++ .../client/docs/CronWorkflowServiceApi.md | 210 ++++++++++ .../IoArgoprojWorkflowV1alpha1ValueFrom.md | 1 + sdks/python/client/docs/WorkflowServiceApi.md | 370 ++++++++++++++++++ .../client/docs/WorkflowTemplateServiceApi.md | 210 ++++++++++ 8 files changed, 1076 insertions(+) diff --git a/docs/fields.md b/docs/fields.md index 70722ece2a70..47aa1d0284b0 100644 --- a/docs/fields.md +++ b/docs/fields.md @@ -13,6 +13,8 @@ Workflow is the definition of a workflow resource - [`arguments-parameters-from-configmap.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/arguments-parameters-from-configmap.yaml) +- [`arguments-parameters-from-secret.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/arguments-parameters-from-secret.yaml) + - [`arguments-parameters.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/arguments-parameters.yaml) - [`artifact-disable-archive.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/artifact-disable-archive.yaml) @@ -149,6 +151,10 @@ Workflow is the definition of a workflow resource - [`global-parameters-from-configmap.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-configmap.yaml) +- [`global-parameters-from-secret-referenced-as-local-variable.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-secret-referenced-as-local-variable.yaml) + +- [`global-parameters-from-secret.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-secret.yaml) + - [`global-parameters.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters.yaml) - [`handle-large-output-results.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/handle-large-output-results.yaml) @@ -467,6 +473,8 @@ WorkflowSpec is the specification of a Workflow. - [`arguments-parameters-from-configmap.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/arguments-parameters-from-configmap.yaml) +- [`arguments-parameters-from-secret.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/arguments-parameters-from-secret.yaml) + - [`arguments-parameters.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/arguments-parameters.yaml) - [`artifact-disable-archive.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/artifact-disable-archive.yaml) @@ -621,6 +629,10 @@ WorkflowSpec is the specification of a Workflow. - [`global-parameters-from-configmap.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-configmap.yaml) +- [`global-parameters-from-secret-referenced-as-local-variable.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-secret-referenced-as-local-variable.yaml) + +- [`global-parameters-from-secret.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-secret.yaml) + - [`global-parameters.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters.yaml) - [`handle-large-output-results.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/handle-large-output-results.yaml) @@ -920,6 +932,8 @@ CronWorkflowSpec is the specification of a CronWorkflow - [`arguments-parameters-from-configmap.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/arguments-parameters-from-configmap.yaml) +- [`arguments-parameters-from-secret.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/arguments-parameters-from-secret.yaml) + - [`arguments-parameters.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/arguments-parameters.yaml) - [`artifact-disable-archive.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/artifact-disable-archive.yaml) @@ -1074,6 +1088,10 @@ CronWorkflowSpec is the specification of a CronWorkflow - [`global-parameters-from-configmap.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-configmap.yaml) +- [`global-parameters-from-secret-referenced-as-local-variable.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-secret-referenced-as-local-variable.yaml) + +- [`global-parameters-from-secret.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-secret.yaml) + - [`global-parameters.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters.yaml) - [`handle-large-output-results.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/handle-large-output-results.yaml) @@ -1418,6 +1436,10 @@ Arguments to a template - [`global-parameters-from-configmap.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-configmap.yaml) +- [`global-parameters-from-secret-referenced-as-local-variable.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-secret-referenced-as-local-variable.yaml) + +- [`global-parameters-from-secret.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-secret.yaml) + - [`global-parameters.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters.yaml) - [`handle-large-output-results.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/handle-large-output-results.yaml) @@ -2186,6 +2208,8 @@ Parameter indicate a passed string parameter to a service template with an optio - [`arguments-parameters-from-configmap.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/arguments-parameters-from-configmap.yaml) +- [`arguments-parameters-from-secret.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/arguments-parameters-from-secret.yaml) + - [`arguments-parameters.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/arguments-parameters.yaml) - [`artifact-path-placeholders.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/artifact-path-placeholders.yaml) @@ -2266,6 +2290,10 @@ Parameter indicate a passed string parameter to a service template with an optio - [`global-parameters-from-configmap.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-configmap.yaml) +- [`global-parameters-from-secret-referenced-as-local-variable.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-secret-referenced-as-local-variable.yaml) + +- [`global-parameters-from-secret.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-secret.yaml) + - [`global-parameters.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters.yaml) - [`handle-large-output-results.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/handle-large-output-results.yaml) @@ -2746,6 +2774,8 @@ Inputs are the mechanism for passing parameters, artifacts, volumes from one tem - [`arguments-parameters-from-configmap.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/arguments-parameters-from-configmap.yaml) +- [`arguments-parameters-from-secret.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/arguments-parameters-from-secret.yaml) + - [`arguments-parameters.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/arguments-parameters.yaml) - [`artifact-disable-archive.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/artifact-disable-archive.yaml) @@ -2822,6 +2852,8 @@ Inputs are the mechanism for passing parameters, artifacts, volumes from one tem - [`global-parameters-from-configmap-referenced-as-local-variable.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-configmap-referenced-as-local-variable.yaml) +- [`global-parameters-from-secret-referenced-as-local-variable.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-secret-referenced-as-local-variable.yaml) + - [`handle-large-output-results.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/handle-large-output-results.yaml) - [`hdfs-artifact.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/hdfs-artifact.yaml) @@ -3665,6 +3697,8 @@ ValueFrom describes a location in which to obtain the value to a parameter - [`arguments-parameters-from-configmap.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/arguments-parameters-from-configmap.yaml) +- [`arguments-parameters-from-secret.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/arguments-parameters-from-secret.yaml) + - [`artifact-path-placeholders.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/artifact-path-placeholders.yaml) - [`conditional-parameters.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/conditional-parameters.yaml) @@ -3687,6 +3721,10 @@ ValueFrom describes a location in which to obtain the value to a parameter - [`global-parameters-from-configmap.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-configmap.yaml) +- [`global-parameters-from-secret-referenced-as-local-variable.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-secret-referenced-as-local-variable.yaml) + +- [`global-parameters-from-secret.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-secret.yaml) + - [`handle-large-output-results.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/handle-large-output-results.yaml) - [`intermediate-parameters.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/intermediate-parameters.yaml) @@ -3785,6 +3823,8 @@ MetricLabel is a single label for a prometheus metric - [`arguments-parameters-from-configmap.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/arguments-parameters-from-configmap.yaml) +- [`arguments-parameters-from-secret.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/arguments-parameters-from-secret.yaml) + - [`conditional-artifacts.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/conditional-artifacts.yaml) - [`conditional-parameters.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/conditional-parameters.yaml) @@ -3819,6 +3859,10 @@ MetricLabel is a single label for a prometheus metric - [`global-parameters-from-configmap.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-configmap.yaml) +- [`global-parameters-from-secret-referenced-as-local-variable.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-secret-referenced-as-local-variable.yaml) + +- [`global-parameters-from-secret.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-secret.yaml) + - [`hello-world.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/hello-world.yaml) - [`http-hello-world.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/http-hello-world.yaml) @@ -4573,6 +4617,8 @@ _No description available_ - [`arguments-parameters-from-configmap.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/arguments-parameters-from-configmap.yaml) +- [`arguments-parameters-from-secret.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/arguments-parameters-from-secret.yaml) + - [`artifact-path-placeholders.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/artifact-path-placeholders.yaml) - [`conditional-parameters.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/conditional-parameters.yaml) @@ -4595,6 +4641,10 @@ _No description available_ - [`global-parameters-from-configmap.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-configmap.yaml) +- [`global-parameters-from-secret-referenced-as-local-variable.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-secret-referenced-as-local-variable.yaml) + +- [`global-parameters-from-secret.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-secret.yaml) + - [`handle-large-output-results.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/handle-large-output-results.yaml) - [`intermediate-parameters.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/intermediate-parameters.yaml) @@ -4694,6 +4744,8 @@ ObjectMeta is metadata that all persisted resources must have, which includes al - [`arguments-parameters-from-configmap.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/arguments-parameters-from-configmap.yaml) +- [`arguments-parameters-from-secret.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/arguments-parameters-from-secret.yaml) + - [`arguments-parameters.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/arguments-parameters.yaml) - [`artifact-disable-archive.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/artifact-disable-archive.yaml) @@ -4848,6 +4900,10 @@ ObjectMeta is metadata that all persisted resources must have, which includes al - [`global-parameters-from-configmap.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-configmap.yaml) +- [`global-parameters-from-secret-referenced-as-local-variable.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-secret-referenced-as-local-variable.yaml) + +- [`global-parameters-from-secret.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-secret.yaml) + - [`global-parameters.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters.yaml) - [`handle-large-output-results.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/handle-large-output-results.yaml) @@ -5352,6 +5408,8 @@ A single application container that you want to run within a pod. - [`arguments-parameters-from-configmap.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/arguments-parameters-from-configmap.yaml) +- [`arguments-parameters-from-secret.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/arguments-parameters-from-secret.yaml) + - [`arguments-parameters.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/arguments-parameters.yaml) - [`artifact-disable-archive.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/artifact-disable-archive.yaml) @@ -5466,6 +5524,10 @@ A single application container that you want to run within a pod. - [`global-parameters-from-configmap.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-configmap.yaml) +- [`global-parameters-from-secret-referenced-as-local-variable.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-secret-referenced-as-local-variable.yaml) + +- [`global-parameters-from-secret.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-secret.yaml) + - [`global-parameters.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters.yaml) - [`handle-large-output-results.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/handle-large-output-results.yaml) @@ -6483,6 +6545,8 @@ EnvVarSource represents a source for the value of an EnvVar. - [`arguments-parameters-from-configmap.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/arguments-parameters-from-configmap.yaml) +- [`arguments-parameters-from-secret.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/arguments-parameters-from-secret.yaml) + - [`artifact-path-placeholders.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/artifact-path-placeholders.yaml) - [`conditional-parameters.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/conditional-parameters.yaml) @@ -6505,6 +6569,10 @@ EnvVarSource represents a source for the value of an EnvVar. - [`global-parameters-from-configmap.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-configmap.yaml) +- [`global-parameters-from-secret-referenced-as-local-variable.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-secret-referenced-as-local-variable.yaml) + +- [`global-parameters-from-secret.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/global-parameters-from-secret.yaml) + - [`handle-large-output-results.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/handle-large-output-results.yaml) - [`intermediate-parameters.yaml`](https://github.com/argoproj/argo-workflows/blob/main/examples/intermediate-parameters.yaml) diff --git a/sdks/java/client/docs/IoArgoprojWorkflowV1alpha1ValueFrom.md b/sdks/java/client/docs/IoArgoprojWorkflowV1alpha1ValueFrom.md index 046d505babd1..46033674aacc 100644 --- a/sdks/java/client/docs/IoArgoprojWorkflowV1alpha1ValueFrom.md +++ b/sdks/java/client/docs/IoArgoprojWorkflowV1alpha1ValueFrom.md @@ -16,6 +16,7 @@ Name | Type | Description | Notes **jsonPath** | **String** | JSONPath of a resource to retrieve an output parameter value from in resource templates | [optional] **parameter** | **String** | Parameter reference to a step or dag task in which to retrieve an output parameter value from (e.g. '{{steps.mystep.outputs.myparam}}') | [optional] **path** | **String** | Path in the container to retrieve an output parameter value from in container templates | [optional] +**secretKeyRef** | [**io.kubernetes.client.openapi.models.V1SecretKeySelector**](io.kubernetes.client.openapi.models.V1SecretKeySelector.md) | | [optional] **supplied** | **Object** | SuppliedValueFrom is a placeholder for a value to be filled in directly, either through the CLI, API, etc. | [optional] diff --git a/sdks/python/client/argo_workflows/model/io_argoproj_workflow_v1alpha1_value_from.py b/sdks/python/client/argo_workflows/model/io_argoproj_workflow_v1alpha1_value_from.py index 87dc28fb6e66..2994d9fefd50 100644 --- a/sdks/python/client/argo_workflows/model/io_argoproj_workflow_v1alpha1_value_from.py +++ b/sdks/python/client/argo_workflows/model/io_argoproj_workflow_v1alpha1_value_from.py @@ -31,7 +31,9 @@ def lazy_import(): from argo_workflows.model.config_map_key_selector import ConfigMapKeySelector + from argo_workflows.model.secret_key_selector import SecretKeySelector globals()['ConfigMapKeySelector'] = ConfigMapKeySelector + globals()['SecretKeySelector'] = SecretKeySelector class IoArgoprojWorkflowV1alpha1ValueFrom(ModelNormal): @@ -95,6 +97,7 @@ def openapi_types(): 'json_path': (str,), # noqa: E501 'parameter': (str,), # noqa: E501 'path': (str,), # noqa: E501 + 'secret_key_ref': (SecretKeySelector,), # noqa: E501 'supplied': (bool, date, datetime, dict, float, int, list, str, none_type,), # noqa: E501 } @@ -112,6 +115,7 @@ def discriminator(): 'json_path': 'jsonPath', # noqa: E501 'parameter': 'parameter', # noqa: E501 'path': 'path', # noqa: E501 + 'secret_key_ref': 'secretKeyRef', # noqa: E501 'supplied': 'supplied', # noqa: E501 } @@ -164,6 +168,7 @@ def _from_openapi_data(cls, *args, **kwargs): # noqa: E501 json_path (str): JSONPath of a resource to retrieve an output parameter value from in resource templates. [optional] # noqa: E501 parameter (str): Parameter reference to a step or dag task in which to retrieve an output parameter value from (e.g. '{{steps.mystep.outputs.myparam}}'). [optional] # noqa: E501 path (str): Path in the container to retrieve an output parameter value from in container templates. [optional] # noqa: E501 + secret_key_ref (SecretKeySelector): [optional] # noqa: E501 supplied (bool, date, datetime, dict, float, int, list, str, none_type): SuppliedValueFrom is a placeholder for a value to be filled in directly, either through the CLI, API, etc.. [optional] # noqa: E501 """ @@ -254,6 +259,7 @@ def __init__(self, *args, **kwargs): # noqa: E501 json_path (str): JSONPath of a resource to retrieve an output parameter value from in resource templates. [optional] # noqa: E501 parameter (str): Parameter reference to a step or dag task in which to retrieve an output parameter value from (e.g. '{{steps.mystep.outputs.myparam}}'). [optional] # noqa: E501 path (str): Path in the container to retrieve an output parameter value from in container templates. [optional] # noqa: E501 + secret_key_ref (SecretKeySelector): [optional] # noqa: E501 supplied (bool, date, datetime, dict, float, int, list, str, none_type): SuppliedValueFrom is a placeholder for a value to be filled in directly, either through the CLI, API, etc.. [optional] # noqa: E501 """ diff --git a/sdks/python/client/docs/ClusterWorkflowTemplateServiceApi.md b/sdks/python/client/docs/ClusterWorkflowTemplateServiceApi.md index f0d815b1073b..fcb91e941322 100644 --- a/sdks/python/client/docs/ClusterWorkflowTemplateServiceApi.md +++ b/sdks/python/client/docs/ClusterWorkflowTemplateServiceApi.md @@ -611,6 +611,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -930,6 +935,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -2465,6 +2475,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -2754,6 +2769,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -3654,6 +3674,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -3986,6 +4011,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -5176,6 +5206,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -5461,6 +5496,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -7276,6 +7316,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -7565,6 +7610,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -8465,6 +8515,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -8797,6 +8852,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -9987,6 +10047,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -10272,6 +10337,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -12118,6 +12188,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -12437,6 +12512,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -13972,6 +14052,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -14261,6 +14346,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -15161,6 +15251,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -15493,6 +15588,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -16683,6 +16783,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -16968,6 +17073,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -18783,6 +18893,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -19072,6 +19187,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -19972,6 +20092,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -20304,6 +20429,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -21494,6 +21624,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -21779,6 +21914,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -23531,6 +23671,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -23850,6 +23995,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -25385,6 +25535,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -25674,6 +25829,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -26574,6 +26734,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -26906,6 +27071,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -28096,6 +28266,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -28381,6 +28556,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -30196,6 +30376,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -30485,6 +30670,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -31385,6 +31575,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -31717,6 +31912,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -32907,6 +33107,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -33192,6 +33397,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), diff --git a/sdks/python/client/docs/CronWorkflowServiceApi.md b/sdks/python/client/docs/CronWorkflowServiceApi.md index 361bc77da1a1..9eb6edb2f0b1 100644 --- a/sdks/python/client/docs/CronWorkflowServiceApi.md +++ b/sdks/python/client/docs/CronWorkflowServiceApi.md @@ -671,6 +671,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -990,6 +995,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -2525,6 +2535,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -2814,6 +2829,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -3714,6 +3734,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -4046,6 +4071,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -5236,6 +5266,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -5521,6 +5556,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -7336,6 +7376,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -7625,6 +7670,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -8525,6 +8575,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -8857,6 +8912,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -10047,6 +10107,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -10332,6 +10397,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -12260,6 +12330,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -12579,6 +12654,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -14114,6 +14194,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -14403,6 +14488,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -15303,6 +15393,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -15635,6 +15730,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -16825,6 +16925,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -17110,6 +17215,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -18925,6 +19035,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -19214,6 +19329,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -20114,6 +20234,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -20446,6 +20571,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -21636,6 +21766,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -21921,6 +22056,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -23936,6 +24076,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -24255,6 +24400,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -25790,6 +25940,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -26079,6 +26234,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -26979,6 +27139,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -27311,6 +27476,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -28501,6 +28671,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -28786,6 +28961,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -30601,6 +30781,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -30890,6 +31075,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -31790,6 +31980,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -32122,6 +32317,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -33312,6 +33512,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -33597,6 +33802,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), diff --git a/sdks/python/client/docs/IoArgoprojWorkflowV1alpha1ValueFrom.md b/sdks/python/client/docs/IoArgoprojWorkflowV1alpha1ValueFrom.md index d603c7bddb90..56864436f5bd 100644 --- a/sdks/python/client/docs/IoArgoprojWorkflowV1alpha1ValueFrom.md +++ b/sdks/python/client/docs/IoArgoprojWorkflowV1alpha1ValueFrom.md @@ -13,6 +13,7 @@ Name | Type | Description | Notes **json_path** | **str** | JSONPath of a resource to retrieve an output parameter value from in resource templates | [optional] **parameter** | **str** | Parameter reference to a step or dag task in which to retrieve an output parameter value from (e.g. '{{steps.mystep.outputs.myparam}}') | [optional] **path** | **str** | Path in the container to retrieve an output parameter value from in container templates | [optional] +**secret_key_ref** | [**SecretKeySelector**](SecretKeySelector.md) | | [optional] **supplied** | **bool, date, datetime, dict, float, int, list, str, none_type** | SuppliedValueFrom is a placeholder for a value to be filled in directly, either through the CLI, API, etc. | [optional] **any string name** | **bool, date, datetime, dict, float, int, list, str, none_type** | any string name can be used but the value must be the correct type | [optional] diff --git a/sdks/python/client/docs/WorkflowServiceApi.md b/sdks/python/client/docs/WorkflowServiceApi.md index 5065bd3ce070..ef1b716dd3c0 100644 --- a/sdks/python/client/docs/WorkflowServiceApi.md +++ b/sdks/python/client/docs/WorkflowServiceApi.md @@ -626,6 +626,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -945,6 +950,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -2480,6 +2490,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -2769,6 +2784,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -3669,6 +3689,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -4001,6 +4026,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -5191,6 +5221,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -5476,6 +5511,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -7291,6 +7331,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -7580,6 +7625,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -8480,6 +8530,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -8812,6 +8867,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -10002,6 +10062,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -10287,6 +10352,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -11750,6 +11820,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -12044,6 +12119,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -12346,6 +12426,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -14092,6 +14177,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -14381,6 +14471,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -15281,6 +15376,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -15613,6 +15713,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -16803,6 +16908,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -17088,6 +17198,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -18070,6 +18185,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -18389,6 +18509,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -19924,6 +20049,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -20213,6 +20343,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -21113,6 +21248,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -21445,6 +21585,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -22635,6 +22780,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -22920,6 +23070,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -24735,6 +24890,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -25024,6 +25184,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -25924,6 +26089,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -26256,6 +26426,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -27446,6 +27621,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -27731,6 +27911,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -29619,6 +29804,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -29938,6 +30128,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -31473,6 +31668,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -31762,6 +31962,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -32662,6 +32867,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -32994,6 +33204,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -34184,6 +34399,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -34469,6 +34689,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -36284,6 +36509,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -36573,6 +36803,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -37473,6 +37708,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -37805,6 +38045,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -38995,6 +39240,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -39280,6 +39530,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -40743,6 +40998,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -41037,6 +41297,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -41339,6 +41604,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -43085,6 +43355,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -43374,6 +43649,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -44274,6 +44554,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -44606,6 +44891,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -45796,6 +46086,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -46081,6 +46376,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -47063,6 +47363,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -47382,6 +47687,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -48917,6 +49227,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -49206,6 +49521,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -50106,6 +50426,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -50438,6 +50763,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -51628,6 +51958,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -51913,6 +52248,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -53728,6 +54068,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -54017,6 +54362,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -54917,6 +55267,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -55249,6 +55604,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -56439,6 +56799,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -56724,6 +57089,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), diff --git a/sdks/python/client/docs/WorkflowTemplateServiceApi.md b/sdks/python/client/docs/WorkflowTemplateServiceApi.md index 2319839824d7..27976e4275b2 100644 --- a/sdks/python/client/docs/WorkflowTemplateServiceApi.md +++ b/sdks/python/client/docs/WorkflowTemplateServiceApi.md @@ -613,6 +613,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -932,6 +937,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -2467,6 +2477,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -2756,6 +2771,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -3656,6 +3676,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -3988,6 +4013,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -5178,6 +5208,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -5463,6 +5498,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -7278,6 +7318,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -7567,6 +7612,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -8467,6 +8517,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -8799,6 +8854,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -9989,6 +10049,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -10274,6 +10339,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -12127,6 +12197,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -12446,6 +12521,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -13981,6 +14061,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -14270,6 +14355,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -15170,6 +15260,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -15502,6 +15597,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -16692,6 +16792,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -16977,6 +17082,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -18792,6 +18902,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -19081,6 +19196,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -19981,6 +20101,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -20313,6 +20438,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -21503,6 +21633,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -21788,6 +21923,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -23554,6 +23694,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -23873,6 +24018,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -25408,6 +25558,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -25697,6 +25852,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -26597,6 +26757,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -26929,6 +27094,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -28119,6 +28289,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -28404,6 +28579,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -30219,6 +30399,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -30508,6 +30693,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -31408,6 +31598,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -31740,6 +31935,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -32930,6 +33130,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), @@ -33215,6 +33420,11 @@ with argo_workflows.ApiClient(configuration) as api_client: json_path="json_path_example", parameter="parameter_example", path="path_example", + secret_key_ref=SecretKeySelector( + key="key_example", + name="name_example", + optional=True, + ), supplied={}, ), ), From 8e399fe807daa9d52fd15bb052ceb340bf906772 Mon Sep 17 00:00:00 2001 From: shuangkun Date: Thu, 14 Nov 2024 14:14:03 +0800 Subject: [PATCH 05/10] fix: change log. Co-authored-by: shuangkun Co-authored-by: Jinsu Park Signed-off-by: shuangkun --- workflow/common/secret.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/workflow/common/secret.go b/workflow/common/secret.go index 75c0ee63f1d8..1cd41e6436f4 100644 --- a/workflow/common/secret.go +++ b/workflow/common/secret.go @@ -22,7 +22,7 @@ func GetSecretValue(secretStore SecretStore, namespace, name, key string) (strin secret, ok := obj.(*apiv1.Secret) if !ok { - return "", fmt.Errorf("unable to convert object %s to configmap when syncing Secrets", name) + return "", fmt.Errorf("unable to convert object %s to secret when syncing Secrets", name) } if secretType := secret.Labels[LabelKeySecretType]; secretType != LabelValueTypeSecretParameter { return "", fmt.Errorf( From 70b03b4628720c4238de981cf95efd09dae935ba Mon Sep 17 00:00:00 2001 From: shuangkun Date: Thu, 14 Nov 2024 15:42:53 +0800 Subject: [PATCH 06/10] fix: fetch info. Signed-off-by: shuangkun --- workflow/common/util.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/workflow/common/util.go b/workflow/common/util.go index 89256e8d55b5..91b2ed9268b0 100644 --- a/workflow/common/util.go +++ b/workflow/common/util.go @@ -196,6 +196,9 @@ func substituteAndGetSecretValue(inParam *wfv1.Parameter, globalParams Parameter } } } else { + if inParam.ValueFrom != nil && inParam.ValueFrom.ConfigMapKeyRef != nil { + return nil + } if inParam.Value == nil { return errors.Errorf(errors.CodeBadRequest, "inputs.parameters.%s was not supplied", inParam.Name) } From 4891935206f6ab5a773a329e56c0739801f7d5c2 Mon Sep 17 00:00:00 2001 From: shuangkun Date: Thu, 14 Nov 2024 15:55:00 +0800 Subject: [PATCH 07/10] fix: secret log. Signed-off-by: shuangkun --- examples/global-parameters-from-secret.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/global-parameters-from-secret.yaml b/examples/global-parameters-from-secret.yaml index fa5a1f4a5bb5..4577c2640dbd 100644 --- a/examples/global-parameters-from-secret.yaml +++ b/examples/global-parameters-from-secret.yaml @@ -10,7 +10,7 @@ metadata: Note that the "simple-parameters" Secret (defined in `examples/secrets/simple-parameters-secret.yaml`) needs to be created first before submitting this workflow. spec: entrypoint: print-message - # Parameters can also be passed via configmap reference. + # Parameters can also be passed via secret reference. arguments: parameters: - name: message From ef43d747bfb854a06280006035aedcc28863bdb7 Mon Sep 17 00:00:00 2001 From: shuangkun Date: Thu, 14 Nov 2024 16:27:45 +0800 Subject: [PATCH 08/10] fix: golbal parameters. Signed-off-by: shuangkun --- workflow/controller/operator.go | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/workflow/controller/operator.go b/workflow/controller/operator.go index cd9aac28d526..69d8a895611e 100644 --- a/workflow/controller/operator.go +++ b/workflow/controller/operator.go @@ -655,12 +655,7 @@ func (woc *wfOperationCtx) setGlobalParameters(executionParameters wfv1.Argument } else { woc.globalParams["workflow.parameters."+param.Name] = cmValue } - } else if param.Value != nil { - woc.globalParams["workflow.parameters."+param.Name] = param.Value.String() - } else { - return fmt.Errorf("either value or valueFrom must be specified in order to set global parameter %s", param.Name) - } - if param.ValueFrom != nil && param.ValueFrom.SecretKeyRef != nil { + } else if param.ValueFrom != nil && param.ValueFrom.SecretKeyRef != nil { secretValue, err := common.GetSecretValue(woc.controller.secretInformer.GetIndexer(), woc.wf.ObjectMeta.Namespace, param.ValueFrom.SecretKeyRef.Name, param.ValueFrom.SecretKeyRef.Key) if err != nil { if param.ValueFrom.Default != nil { From 17449cc89b95dc051e8a17e2c570f84ddd4cdf6e Mon Sep 17 00:00:00 2001 From: shuangkun Date: Thu, 14 Nov 2024 16:53:38 +0800 Subject: [PATCH 09/10] fix: allow secretKeyRef. Signed-off-by: shuangkun --- workflow/validate/validate.go | 6 +++--- workflow/validate/validate_dag_test.go | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/workflow/validate/validate.go b/workflow/validate/validate.go index 122a8e3fe45f..3888c73312ab 100644 --- a/workflow/validate/validate.go +++ b/workflow/validate/validate.go @@ -886,12 +886,12 @@ func validateArgumentsValues(prefix string, arguments wfv1.Arguments, allowEmpty if param.ValueFrom != nil { // check for valid valueFrom sub-parameters // INFO: default needs to be accompanied by ConfigMapKeyRef. - if param.ValueFrom.ConfigMapKeyRef == nil && param.ValueFrom.Event == "" && param.ValueFrom.Supplied == nil { - return errors.Errorf(errors.CodeBadRequest, "%s%s.valueFrom only allows: default, configMapKeyRef and supplied", prefix, param.Name) + if param.ValueFrom.ConfigMapKeyRef == nil && param.ValueFrom.SecretKeyRef == nil && param.ValueFrom.Event == "" && param.ValueFrom.Supplied == nil { + return errors.Errorf(errors.CodeBadRequest, "%s%s.valueFrom only allows: default, configMapKeyRef, secretKeyRef and supplied", prefix, param.Name) } // check for invalid valueFrom sub-parameters if param.ValueFrom.Path != "" || param.ValueFrom.JSONPath != "" || param.ValueFrom.Parameter != "" || param.ValueFrom.Expression != "" { - return errors.Errorf(errors.CodeBadRequest, "%s%s.valueFrom only allows: default, configMapKeyRef and supplied", prefix, param.Name) + return errors.Errorf(errors.CodeBadRequest, "%s%s.valueFrom only allows: default, configMapKeyRef, secretKeyRef and supplied", prefix, param.Name) } } // validate enum diff --git a/workflow/validate/validate_dag_test.go b/workflow/validate/validate_dag_test.go index e0c1c00f93a2..f769a4647393 100644 --- a/workflow/validate/validate_dag_test.go +++ b/workflow/validate/validate_dag_test.go @@ -1055,7 +1055,7 @@ spec: func TestDAGMissingParamValueInTask(t *testing.T) { err := validate(dagMissingParamValueInTask) - require.ErrorContains(t, err, ".valueFrom only allows: default, configMapKeyRef and supplied") + require.ErrorContains(t, err, ".valueFrom only allows: default, configMapKeyRef, secretKeyRef and supplied") } var dagArgParamValueFromConfigMapInTask = ` @@ -1118,5 +1118,5 @@ spec: func TestFailDAGArgParamValueFromPathInTask(t *testing.T) { err := validate(failDagArgParamValueFromPathInTask) - require.ErrorContains(t, err, "valueFrom only allows: default, configMapKeyRef and supplied") + require.ErrorContains(t, err, "valueFrom only allows: default, configMapKeyRef, secretKeyRef and supplied") } From 5d65f3c2b68f7ef876a6b47db8329b2c5e348fe9 Mon Sep 17 00:00:00 2001 From: shuangkun Date: Thu, 14 Nov 2024 21:47:00 +0800 Subject: [PATCH 10/10] fix: add secret informer. Signed-off-by: shuangkun --- workflow/common/util_test.go | 4 ++-- workflow/controller/controller_test.go | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/workflow/common/util_test.go b/workflow/common/util_test.go index a43c9ff05e64..1a727f54948b 100644 --- a/workflow/common/util_test.go +++ b/workflow/common/util_test.go @@ -284,8 +284,8 @@ type mockSecretStore struct { getByKey func(key string) (interface{}, bool, error) } -func (cs mockSecretStore) GetByKey(key string) (interface{}, bool, error) { - return cs.getByKey(key) +func (ss mockSecretStore) GetByKey(key string) (interface{}, bool, error) { + return ss.getByKey(key) } func TestOverridableTemplateInputParamsValue(t *testing.T) { diff --git a/workflow/controller/controller_test.go b/workflow/controller/controller_test.go index c7746f4b15fe..45f9e568e431 100644 --- a/workflow/controller/controller_test.go +++ b/workflow/controller/controller_test.go @@ -328,6 +328,7 @@ func newController(options ...interface{}) (context.CancelFunc, *WorkflowControl _ = wfc.addWorkflowInformerHandlers(ctx) wfc.podInformer = wfc.newPodInformer(ctx) wfc.configMapInformer = wfc.newConfigMapInformer() + wfc.secretInformer = wfc.newSecretInformer() wfc.createSynchronizationManager(ctx) _ = wfc.initManagers(ctx)