From 32169a49b756f28033fee184ddb83987f2ba97ef Mon Sep 17 00:00:00 2001 From: Ying Huang Date: Thu, 19 Mar 2020 09:06:32 -0700 Subject: [PATCH] Api server data partition reset on the fly (#123) * Api server data partition reset on the fly. . Add data partition configuration and serviceGroups for api server . Reset etcd data watch based on partition changes in api server . Fix unit tests and integration tests * Api server data partition reset on the fly - auto generated code * Bring back one commented out integration test. Fix copyright header. * Add integration test for api server data partition reset --- .gitignore | 1 + api/openapi-spec/swagger.json | 2055 +++++++--- cmd/kube-apiserver/app/BUILD | 1 + cmd/kube-apiserver/app/aggregator.go | 1 + cmd/kube-apiserver/app/options/options.go | 2 + cmd/kube-apiserver/app/server.go | 17 +- pkg/apis/core/register.go | 2 + pkg/apis/core/types.go | 39 + pkg/apis/core/v1/zz_generated.conversion.go | 72 + pkg/apis/core/validation/validation.go | 18 + pkg/apis/core/zz_generated.deepcopy.go | 59 + .../controller_framework.go | 2 +- .../controllerinstancemanager.go | 24 +- pkg/master/BUILD | 1 + pkg/master/controller.go | 9 + pkg/master/master.go | 7 + pkg/master/reconcilers/none.go | 1 + pkg/master/storageversionhashdata/data.go | 1 + pkg/printers/internalversion/printers.go | 37 + pkg/registry/BUILD | 1 + pkg/registry/core/datapartition/BUILD | 34 + pkg/registry/core/datapartition/storage/BUILD | 53 + .../core/datapartition/storage/storage.go | 64 + .../datapartition/storage/storage_test.go | 119 + pkg/registry/core/datapartition/strategy.go | 86 + pkg/registry/core/rest/BUILD | 1 + pkg/registry/core/rest/storage_core.go | 6 +- .../src/k8s.io/api/core/v1/generated.pb.go | 3542 ++++++++++------- .../src/k8s.io/api/core/v1/generated.proto | 29 + staging/src/k8s.io/api/core/v1/register.go | 2 + staging/src/k8s.io/api/core/v1/types.go | 39 + .../core/v1/types_swagger_doc_generated.go | 22 + .../api/core/v1/zz_generated.deepcopy.go | 59 + .../HEAD/core.v1.DataPartitionConfig.json | 50 + .../HEAD/core.v1.DataPartitionConfig.pb | Bin 0 -> 297 bytes .../HEAD/core.v1.DataPartitionConfig.yaml | 40 + .../k8s.io/apimachinery/pkg/watch/watch.go | 108 +- .../src/k8s.io/apiserver/pkg/storage/BUILD | 1 + .../apiserver/pkg/storage/datapartition/BUILD | 36 + .../datapartition/datapartitionmanager.go | 235 ++ .../pkg/storage/datapartition/update.go | 44 + .../k8s.io/apiserver/pkg/storage/etcd3/BUILD | 2 + .../apiserver/pkg/storage/etcd3/store.go | 19 +- .../apiserver/pkg/storage/etcd3/store_test.go | 14 +- .../apiserver/pkg/storage/etcd3/watcher.go | 98 +- .../pkg/storage/etcd3/watcher_test.go | 4 +- .../pkg/storage/storagebackend/factory/BUILD | 1 + .../storage/storagebackend/factory/etcd3.go | 7 +- .../pkg/storage/tests/cacher_test.go | 2 +- .../k8s.io/client-go/informers/core/v1/BUILD | 1 + .../informers/core/v1/datapartitionconfig.go | 88 + .../client-go/informers/core/v1/interface.go | 7 + .../src/k8s.io/client-go/informers/generic.go | 2 + .../client-go/kubernetes/typed/core/v1/BUILD | 1 + .../kubernetes/typed/core/v1/core_client.go | 5 + .../typed/core/v1/datapartitionconfig.go | 176 + .../kubernetes/typed/core/v1/fake/BUILD | 1 + .../typed/core/v1/fake/fake_core_client.go | 5 + .../core/v1/fake/fake_datapartitionconfig.go | 127 + .../typed/core/v1/generated_expansion.go | 2 + .../k8s.io/client-go/listers/core/v1/BUILD | 1 + .../listers/core/v1/datapartitionconfig.go | 65 + .../listers/core/v1/expansion_generated.go | 4 + .../listers/rbac/v1/clusterrolebinding.go | 1 + .../rbac/v1alpha1/clusterrolebinding.go | 1 + .../rbac/v1beta1/clusterrolebinding.go | 1 + .../k8s.io/client-go/tools/cache/reflector.go | 42 +- .../client-go/tools/watch/retrywatcher.go | 39 +- .../pkg/apis/apiregistration/types.go | 2 + .../apis/apiregistration/v1/generated.pb.go | 145 +- .../apis/apiregistration/v1/generated.proto | 3 + .../pkg/apis/apiregistration/v1/types.go | 2 + .../v1/zz_generated.conversion.go | 3 + .../apiregistration/v1beta1/generated.pb.go | 146 +- .../apiregistration/v1beta1/generated.proto | 5 + .../pkg/apis/apiregistration/v1beta1/types.go | 1 + .../v1beta1/zz_generated.conversion.go | 3 + .../apiregistration/zz_generated.deepcopy.go | 1 + test/integration/apiserver/BUILD | 1 + .../apiserver/apiserver_partition_test.go | 121 +- test/integration/etcd/data.go | 4 + test/integration/etcd/multi_tenancy_data.go | 4 + .../multi_tenancy_etcd_storage_path_test.go | 2 +- test/integration/examples/apiserver_test.go | 2 +- test/integration/framework/BUILD | 1 + test/integration/framework/master_utils.go | 26 +- test/integration/framework/test_server.go | 2 +- 87 files changed, 5759 insertions(+), 2351 deletions(-) create mode 100644 pkg/registry/core/datapartition/BUILD create mode 100644 pkg/registry/core/datapartition/storage/BUILD create mode 100644 pkg/registry/core/datapartition/storage/storage.go create mode 100644 pkg/registry/core/datapartition/storage/storage_test.go create mode 100644 pkg/registry/core/datapartition/strategy.go create mode 100644 staging/src/k8s.io/api/testdata/HEAD/core.v1.DataPartitionConfig.json create mode 100644 staging/src/k8s.io/api/testdata/HEAD/core.v1.DataPartitionConfig.pb create mode 100644 staging/src/k8s.io/api/testdata/HEAD/core.v1.DataPartitionConfig.yaml create mode 100644 staging/src/k8s.io/apiserver/pkg/storage/datapartition/BUILD create mode 100644 staging/src/k8s.io/apiserver/pkg/storage/datapartition/datapartitionmanager.go create mode 100644 staging/src/k8s.io/apiserver/pkg/storage/datapartition/update.go create mode 100644 staging/src/k8s.io/client-go/informers/core/v1/datapartitionconfig.go create mode 100644 staging/src/k8s.io/client-go/kubernetes/typed/core/v1/datapartitionconfig.go create mode 100644 staging/src/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_datapartitionconfig.go create mode 100644 staging/src/k8s.io/client-go/listers/core/v1/datapartitionconfig.go diff --git a/.gitignore b/.gitignore index 5fc643e98a9..a007548ad75 100644 --- a/.gitignore +++ b/.gitignore @@ -121,6 +121,7 @@ zz_generated_*_test.go # Just in time generated data in the source, should never be committed /test/e2e/generated/bindata.go +/cmd/kube-apiserver/app/testing/testdata/* # This file used by some vendor repos (e.g. github.com/go-openapi/...) to store secret variables and should not be ignored !\.drone\.sec diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index c60ba4046dd..073afce105b 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -7230,6 +7230,86 @@ ], "type": "object" }, + "io.k8s.api.core.v1.DataPartitionConfig": { + "description": "DataPartitionConfig contains api server data partition configurations. Name in ObjectMeta is used for identitification", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", + "type": "string" + }, + "endTenant": { + "description": "End tenant is exclusive", + "type": "string" + }, + "isEndTenantValid": { + "description": "Whether this is an open end end", + "type": "boolean" + }, + "isStartTenantValid": { + "description": "Whether this is an open end start", + "type": "boolean" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" + }, + "serviceGroupId": { + "description": "Which service group is using this data configuration", + "type": "string" + }, + "startTenant": { + "description": "Start tenant is inclusive", + "type": "string" + } + }, + "required": [ + "startTenant", + "endTenant", + "serviceGroupId" + ], + "type": "object", + "x-kubernetes-group-version-kind": [ + { + "group": "", + "kind": "DataPartitionConfig", + "version": "v1" + } + ] + }, + "io.k8s.api.core.v1.DataPartitionConfigList": { + "description": "DataPartitionConfigList is a list of data partition configurations that api server data partition use", + "properties": { + "apiVersion": { + "description": "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources", + "type": "string" + }, + "items": { + "description": "List of data partition configuration", + "items": { + "$ref": "#/definitions/io.k8s.api.core.v1.DataPartitionConfig" + }, + "type": "array" + }, + "kind": { + "description": "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds", + "type": "string" + }, + "metadata": { + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ListMeta" + } + }, + "type": "object", + "x-kubernetes-group-version-kind": [ + { + "group": "", + "kind": "DataPartitionConfigList", + "version": "v1" + } + ] + }, "io.k8s.api.core.v1.DownwardAPIProjection": { "description": "Represents downward API info for projecting into a projected volume. Note that this is identical to a downwardAPI volume source without the default mode.", "properties": { @@ -18970,6 +19050,9 @@ "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1.ServiceReference", "description": "Service is a reference to the service for this API server. It must communicate on port 443 If the Service is nil, that means the handling for the API groupversion is handled locally on this server. The call will simply delegate to the normal handler chain to be fulfilled." }, + "serviceGroupId": { + "type": "string" + }, "version": { "description": "Version is the API version this server hosts. For example, \"v1\"", "type": "string" @@ -19141,6 +19224,10 @@ "$ref": "#/definitions/io.k8s.kube-aggregator.pkg.apis.apiregistration.v1beta1.ServiceReference", "description": "Service is a reference to the service for this API server. It must communicate on port 443 If the Service is nil, that means the handling for the API groupversion is handled locally on this server. The call will simply delegate to the normal handler chain to be fulfilled." }, + "serviceGroupId": { + "description": "leaving this here so everyone remembers why proto index 6 is skipped Priority int64 `json:\"priority\" protobuf:\"varint,6,opt,name=priority\"`", + "type": "string" + }, "version": { "description": "Version is the API version this server hosts. For example, \"v1\"", "type": "string" @@ -20216,325 +20303,911 @@ } } }, - "/api/v1/endpoints": { - "get": { - "consumes": [ - "*/*" - ], - "description": "list or watch objects of kind Endpoints", - "operationId": "listCoreV1EndpointsForWholeScope", - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.EndpointsList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Endpoints", - "version": "v1" - } - }, - "parameters": [ - { - "description": "allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored. If the feature gate WatchBookmarks is not enabled in apiserver, this field is ignored.\n\nThis field is alpha and can be changed or removed without notice.", - "in": "query", - "name": "allowWatchBookmarks", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "in": "query", - "name": "continue", - "type": "string", - "uniqueItems": true - }, - { - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "in": "query", - "name": "fieldSelector", - "type": "string", - "uniqueItems": true - }, - { - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "in": "query", - "name": "labelSelector", - "type": "string", - "uniqueItems": true - }, - { - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "in": "query", - "name": "limit", - "type": "integer", - "uniqueItems": true - }, - { - "description": "If 'true', then the output is pretty printed.", - "in": "query", - "name": "pretty", - "type": "string", - "uniqueItems": true - }, - { - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "in": "query", - "name": "resourceVersion", - "type": "string", - "uniqueItems": true - }, - { - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "in": "query", - "name": "timeoutSeconds", - "type": "integer", - "uniqueItems": true - }, - { - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "in": "query", - "name": "watch", - "type": "boolean", - "uniqueItems": true - } - ] - }, - "/api/v1/events": { - "get": { - "consumes": [ - "*/*" - ], - "description": "list or watch objects of kind Event", - "operationId": "listCoreV1EventForWholeScope", - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.EventList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Event", - "version": "v1" - } - }, - "parameters": [ - { - "description": "allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored. If the feature gate WatchBookmarks is not enabled in apiserver, this field is ignored.\n\nThis field is alpha and can be changed or removed without notice.", - "in": "query", - "name": "allowWatchBookmarks", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "in": "query", - "name": "continue", - "type": "string", - "uniqueItems": true - }, - { - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "in": "query", - "name": "fieldSelector", - "type": "string", - "uniqueItems": true - }, - { - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "in": "query", - "name": "labelSelector", - "type": "string", - "uniqueItems": true - }, - { - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "in": "query", - "name": "limit", - "type": "integer", - "uniqueItems": true - }, - { - "description": "If 'true', then the output is pretty printed.", - "in": "query", - "name": "pretty", - "type": "string", - "uniqueItems": true - }, - { - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "in": "query", - "name": "resourceVersion", - "type": "string", - "uniqueItems": true - }, - { - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "in": "query", - "name": "timeoutSeconds", - "type": "integer", - "uniqueItems": true - }, - { - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "in": "query", - "name": "watch", - "type": "boolean", - "uniqueItems": true - } - ] - }, - "/api/v1/limitranges": { - "get": { - "consumes": [ - "*/*" - ], - "description": "list or watch objects of kind LimitRange", - "operationId": "listCoreV1LimitRangeForWholeScope", - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.LimitRangeList" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "x-kubernetes-action": "list", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "LimitRange", - "version": "v1" - } - }, - "parameters": [ - { - "description": "allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored. If the feature gate WatchBookmarks is not enabled in apiserver, this field is ignored.\n\nThis field is alpha and can be changed or removed without notice.", - "in": "query", - "name": "allowWatchBookmarks", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "in": "query", - "name": "continue", - "type": "string", - "uniqueItems": true - }, - { - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "in": "query", - "name": "fieldSelector", - "type": "string", - "uniqueItems": true - }, - { - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "in": "query", - "name": "labelSelector", - "type": "string", - "uniqueItems": true - }, - { - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "in": "query", - "name": "limit", - "type": "integer", - "uniqueItems": true - }, - { - "description": "If 'true', then the output is pretty printed.", - "in": "query", - "name": "pretty", - "type": "string", - "uniqueItems": true - }, - { - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "in": "query", - "name": "resourceVersion", - "type": "string", - "uniqueItems": true - }, - { - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "in": "query", - "name": "timeoutSeconds", - "type": "integer", - "uniqueItems": true - }, - { - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "in": "query", - "name": "watch", - "type": "boolean", - "uniqueItems": true - } - ] - }, - "/api/v1/namespaces": { - "get": { + "/api/v1/datapartitionconfigs": { + "delete": { "consumes": [ "*/*" ], - "description": "list or watch objects of kind Namespace", - "operationId": "listCoreV1LegacyTenantedNamespace", + "description": "delete collection of DataPartitionConfig", + "operationId": "deleteCoreV1CollectionDataPartitionConfig", + "parameters": [ + { + "description": "allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored. If the feature gate WatchBookmarks is not enabled in apiserver, this field is ignored.\n\nThis field is alpha and can be changed or removed without notice.", + "in": "query", + "name": "allowWatchBookmarks", + "type": "boolean", + "uniqueItems": true + }, + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" + } + }, + { + "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", + "in": "query", + "name": "continue", + "type": "string", + "uniqueItems": true + }, + { + "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "in": "query", + "name": "dryRun", + "type": "string", + "uniqueItems": true + }, + { + "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", + "in": "query", + "name": "fieldSelector", + "type": "string", + "uniqueItems": true + }, + { + "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", + "in": "query", + "name": "gracePeriodSeconds", + "type": "integer", + "uniqueItems": true + }, + { + "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", + "in": "query", + "name": "labelSelector", + "type": "string", + "uniqueItems": true + }, + { + "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", + "in": "query", + "name": "limit", + "type": "integer", + "uniqueItems": true + }, + { + "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", + "in": "query", + "name": "orphanDependents", + "type": "boolean", + "uniqueItems": true + }, + { + "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", + "in": "query", + "name": "propagationPolicy", + "type": "string", + "uniqueItems": true + }, + { + "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", + "in": "query", + "name": "resourceVersion", + "type": "string", + "uniqueItems": true + }, + { + "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", + "in": "query", + "name": "timeoutSeconds", + "type": "integer", + "uniqueItems": true + }, + { + "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", + "in": "query", + "name": "watch", + "type": "boolean", + "uniqueItems": true + } + ], + "produces": [ + "application/json", + "application/yaml", + "application/vnd.kubernetes.protobuf" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" + } + }, + "401": { + "description": "Unauthorized" + } + }, + "schemes": [ + "https" + ], + "tags": [ + "core_v1" + ], + "x-kubernetes-action": "deletecollection", + "x-kubernetes-group-version-kind": { + "group": "", + "kind": "DataPartitionConfig", + "version": "v1" + } + }, + "get": { + "consumes": [ + "*/*" + ], + "description": "list or watch objects of kind DataPartitionConfig", + "operationId": "listCoreV1DataPartitionConfig", + "parameters": [ + { + "description": "allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored. If the feature gate WatchBookmarks is not enabled in apiserver, this field is ignored.\n\nThis field is alpha and can be changed or removed without notice.", + "in": "query", + "name": "allowWatchBookmarks", + "type": "boolean", + "uniqueItems": true + }, + { + "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", + "in": "query", + "name": "continue", + "type": "string", + "uniqueItems": true + }, + { + "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", + "in": "query", + "name": "fieldSelector", + "type": "string", + "uniqueItems": true + }, + { + "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", + "in": "query", + "name": "labelSelector", + "type": "string", + "uniqueItems": true + }, + { + "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", + "in": "query", + "name": "limit", + "type": "integer", + "uniqueItems": true + }, + { + "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", + "in": "query", + "name": "resourceVersion", + "type": "string", + "uniqueItems": true + }, + { + "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", + "in": "query", + "name": "timeoutSeconds", + "type": "integer", + "uniqueItems": true + }, + { + "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", + "in": "query", + "name": "watch", + "type": "boolean", + "uniqueItems": true + } + ], + "produces": [ + "application/json", + "application/yaml", + "application/vnd.kubernetes.protobuf", + "application/json;stream=watch", + "application/vnd.kubernetes.protobuf;stream=watch" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/io.k8s.api.core.v1.DataPartitionConfigList" + } + }, + "401": { + "description": "Unauthorized" + } + }, + "schemes": [ + "https" + ], + "tags": [ + "core_v1" + ], + "x-kubernetes-action": "list", + "x-kubernetes-group-version-kind": { + "group": "", + "kind": "DataPartitionConfig", + "version": "v1" + } + }, + "parameters": [ + { + "description": "If 'true', then the output is pretty printed.", + "in": "query", + "name": "pretty", + "type": "string", + "uniqueItems": true + } + ], + "post": { + "consumes": [ + "*/*" + ], + "description": "create a DataPartitionConfig", + "operationId": "createCoreV1DataPartitionConfig", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/io.k8s.api.core.v1.DataPartitionConfig" + } + }, + { + "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "in": "query", + "name": "dryRun", + "type": "string", + "uniqueItems": true + }, + { + "description": "fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.", + "in": "query", + "name": "fieldManager", + "type": "string", + "uniqueItems": true + } + ], + "produces": [ + "application/json", + "application/yaml", + "application/vnd.kubernetes.protobuf" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/io.k8s.api.core.v1.DataPartitionConfig" + } + }, + "201": { + "description": "Created", + "schema": { + "$ref": "#/definitions/io.k8s.api.core.v1.DataPartitionConfig" + } + }, + "202": { + "description": "Accepted", + "schema": { + "$ref": "#/definitions/io.k8s.api.core.v1.DataPartitionConfig" + } + }, + "401": { + "description": "Unauthorized" + } + }, + "schemes": [ + "https" + ], + "tags": [ + "core_v1" + ], + "x-kubernetes-action": "post", + "x-kubernetes-group-version-kind": { + "group": "", + "kind": "DataPartitionConfig", + "version": "v1" + } + } + }, + "/api/v1/datapartitionconfigs/{name}": { + "delete": { + "consumes": [ + "*/*" + ], + "description": "delete a DataPartitionConfig", + "operationId": "deleteCoreV1DataPartitionConfig", + "parameters": [ + { + "in": "body", + "name": "body", + "schema": { + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.DeleteOptions" + } + }, + { + "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "in": "query", + "name": "dryRun", + "type": "string", + "uniqueItems": true + }, + { + "description": "The duration in seconds before the object should be deleted. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period for the specified type will be used. Defaults to a per object value if not specified. zero means delete immediately.", + "in": "query", + "name": "gracePeriodSeconds", + "type": "integer", + "uniqueItems": true + }, + { + "description": "Deprecated: please use the PropagationPolicy, this field will be deprecated in 1.7. Should the dependent objects be orphaned. If true/false, the \"orphan\" finalizer will be added to/removed from the object's finalizers list. Either this field or PropagationPolicy may be set, but not both.", + "in": "query", + "name": "orphanDependents", + "type": "boolean", + "uniqueItems": true + }, + { + "description": "Whether and how garbage collection will be performed. Either this field or OrphanDependents may be set, but not both. The default policy is decided by the existing finalizer set in the metadata.finalizers and the resource-specific default policy. Acceptable values are: 'Orphan' - orphan the dependents; 'Background' - allow the garbage collector to delete the dependents in the background; 'Foreground' - a cascading policy that deletes all dependents in the foreground.", + "in": "query", + "name": "propagationPolicy", + "type": "string", + "uniqueItems": true + } + ], + "produces": [ + "application/json", + "application/yaml", + "application/vnd.kubernetes.protobuf" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" + } + }, + "202": { + "description": "Accepted", + "schema": { + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Status" + } + }, + "401": { + "description": "Unauthorized" + } + }, + "schemes": [ + "https" + ], + "tags": [ + "core_v1" + ], + "x-kubernetes-action": "delete", + "x-kubernetes-group-version-kind": { + "group": "", + "kind": "DataPartitionConfig", + "version": "v1" + } + }, + "get": { + "consumes": [ + "*/*" + ], + "description": "read the specified DataPartitionConfig", + "operationId": "readCoreV1DataPartitionConfig", + "parameters": [ + { + "description": "Should the export be exact. Exact export maintains cluster-specific fields like 'Namespace'. Deprecated. Planned for removal in 1.18.", + "in": "query", + "name": "exact", + "type": "boolean", + "uniqueItems": true + }, + { + "description": "Should this value be exported. Export strips fields that a user can not specify. Deprecated. Planned for removal in 1.18.", + "in": "query", + "name": "export", + "type": "boolean", + "uniqueItems": true + } + ], + "produces": [ + "application/json", + "application/yaml", + "application/vnd.kubernetes.protobuf" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/io.k8s.api.core.v1.DataPartitionConfig" + } + }, + "401": { + "description": "Unauthorized" + } + }, + "schemes": [ + "https" + ], + "tags": [ + "core_v1" + ], + "x-kubernetes-action": "get", + "x-kubernetes-group-version-kind": { + "group": "", + "kind": "DataPartitionConfig", + "version": "v1" + } + }, + "parameters": [ + { + "description": "name of the DataPartitionConfig", + "in": "path", + "name": "name", + "required": true, + "type": "string", + "uniqueItems": true + }, + { + "description": "If 'true', then the output is pretty printed.", + "in": "query", + "name": "pretty", + "type": "string", + "uniqueItems": true + } + ], + "patch": { + "consumes": [ + "application/json-patch+json", + "application/merge-patch+json", + "application/strategic-merge-patch+json" + ], + "description": "partially update the specified DataPartitionConfig", + "operationId": "patchCoreV1DataPartitionConfig", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.Patch" + } + }, + { + "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "in": "query", + "name": "dryRun", + "type": "string", + "uniqueItems": true + }, + { + "description": "fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint. This field is required for apply requests (application/apply-patch) but optional for non-apply patch types (JsonPatch, MergePatch, StrategicMergePatch).", + "in": "query", + "name": "fieldManager", + "type": "string", + "uniqueItems": true + }, + { + "description": "Force is going to \"force\" Apply requests. It means user will re-acquire conflicting fields owned by other people. Force flag must be unset for non-apply patch requests.", + "in": "query", + "name": "force", + "type": "boolean", + "uniqueItems": true + } + ], + "produces": [ + "application/json", + "application/yaml", + "application/vnd.kubernetes.protobuf" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/io.k8s.api.core.v1.DataPartitionConfig" + } + }, + "401": { + "description": "Unauthorized" + } + }, + "schemes": [ + "https" + ], + "tags": [ + "core_v1" + ], + "x-kubernetes-action": "patch", + "x-kubernetes-group-version-kind": { + "group": "", + "kind": "DataPartitionConfig", + "version": "v1" + } + }, + "put": { + "consumes": [ + "*/*" + ], + "description": "replace the specified DataPartitionConfig", + "operationId": "replaceCoreV1DataPartitionConfig", + "parameters": [ + { + "in": "body", + "name": "body", + "required": true, + "schema": { + "$ref": "#/definitions/io.k8s.api.core.v1.DataPartitionConfig" + } + }, + { + "description": "When present, indicates that modifications should not be persisted. An invalid or unrecognized dryRun directive will result in an error response and no further processing of the request. Valid values are: - All: all dry run stages will be processed", + "in": "query", + "name": "dryRun", + "type": "string", + "uniqueItems": true + }, + { + "description": "fieldManager is a name associated with the actor or entity that is making these changes. The value must be less than or 128 characters long, and only contain printable characters, as defined by https://golang.org/pkg/unicode/#IsPrint.", + "in": "query", + "name": "fieldManager", + "type": "string", + "uniqueItems": true + } + ], + "produces": [ + "application/json", + "application/yaml", + "application/vnd.kubernetes.protobuf" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/io.k8s.api.core.v1.DataPartitionConfig" + } + }, + "201": { + "description": "Created", + "schema": { + "$ref": "#/definitions/io.k8s.api.core.v1.DataPartitionConfig" + } + }, + "401": { + "description": "Unauthorized" + } + }, + "schemes": [ + "https" + ], + "tags": [ + "core_v1" + ], + "x-kubernetes-action": "put", + "x-kubernetes-group-version-kind": { + "group": "", + "kind": "DataPartitionConfig", + "version": "v1" + } + } + }, + "/api/v1/endpoints": { + "get": { + "consumes": [ + "*/*" + ], + "description": "list or watch objects of kind Endpoints", + "operationId": "listCoreV1EndpointsForWholeScope", + "produces": [ + "application/json", + "application/yaml", + "application/vnd.kubernetes.protobuf", + "application/json;stream=watch", + "application/vnd.kubernetes.protobuf;stream=watch" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/io.k8s.api.core.v1.EndpointsList" + } + }, + "401": { + "description": "Unauthorized" + } + }, + "schemes": [ + "https" + ], + "tags": [ + "core_v1" + ], + "x-kubernetes-action": "list", + "x-kubernetes-group-version-kind": { + "group": "", + "kind": "Endpoints", + "version": "v1" + } + }, + "parameters": [ + { + "description": "allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored. If the feature gate WatchBookmarks is not enabled in apiserver, this field is ignored.\n\nThis field is alpha and can be changed or removed without notice.", + "in": "query", + "name": "allowWatchBookmarks", + "type": "boolean", + "uniqueItems": true + }, + { + "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", + "in": "query", + "name": "continue", + "type": "string", + "uniqueItems": true + }, + { + "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", + "in": "query", + "name": "fieldSelector", + "type": "string", + "uniqueItems": true + }, + { + "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", + "in": "query", + "name": "labelSelector", + "type": "string", + "uniqueItems": true + }, + { + "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", + "in": "query", + "name": "limit", + "type": "integer", + "uniqueItems": true + }, + { + "description": "If 'true', then the output is pretty printed.", + "in": "query", + "name": "pretty", + "type": "string", + "uniqueItems": true + }, + { + "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", + "in": "query", + "name": "resourceVersion", + "type": "string", + "uniqueItems": true + }, + { + "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", + "in": "query", + "name": "timeoutSeconds", + "type": "integer", + "uniqueItems": true + }, + { + "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", + "in": "query", + "name": "watch", + "type": "boolean", + "uniqueItems": true + } + ] + }, + "/api/v1/events": { + "get": { + "consumes": [ + "*/*" + ], + "description": "list or watch objects of kind Event", + "operationId": "listCoreV1EventForWholeScope", + "produces": [ + "application/json", + "application/yaml", + "application/vnd.kubernetes.protobuf", + "application/json;stream=watch", + "application/vnd.kubernetes.protobuf;stream=watch" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/io.k8s.api.core.v1.EventList" + } + }, + "401": { + "description": "Unauthorized" + } + }, + "schemes": [ + "https" + ], + "tags": [ + "core_v1" + ], + "x-kubernetes-action": "list", + "x-kubernetes-group-version-kind": { + "group": "", + "kind": "Event", + "version": "v1" + } + }, + "parameters": [ + { + "description": "allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored. If the feature gate WatchBookmarks is not enabled in apiserver, this field is ignored.\n\nThis field is alpha and can be changed or removed without notice.", + "in": "query", + "name": "allowWatchBookmarks", + "type": "boolean", + "uniqueItems": true + }, + { + "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", + "in": "query", + "name": "continue", + "type": "string", + "uniqueItems": true + }, + { + "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", + "in": "query", + "name": "fieldSelector", + "type": "string", + "uniqueItems": true + }, + { + "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", + "in": "query", + "name": "labelSelector", + "type": "string", + "uniqueItems": true + }, + { + "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", + "in": "query", + "name": "limit", + "type": "integer", + "uniqueItems": true + }, + { + "description": "If 'true', then the output is pretty printed.", + "in": "query", + "name": "pretty", + "type": "string", + "uniqueItems": true + }, + { + "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", + "in": "query", + "name": "resourceVersion", + "type": "string", + "uniqueItems": true + }, + { + "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", + "in": "query", + "name": "timeoutSeconds", + "type": "integer", + "uniqueItems": true + }, + { + "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", + "in": "query", + "name": "watch", + "type": "boolean", + "uniqueItems": true + } + ] + }, + "/api/v1/limitranges": { + "get": { + "consumes": [ + "*/*" + ], + "description": "list or watch objects of kind LimitRange", + "operationId": "listCoreV1LimitRangeForWholeScope", + "produces": [ + "application/json", + "application/yaml", + "application/vnd.kubernetes.protobuf", + "application/json;stream=watch", + "application/vnd.kubernetes.protobuf;stream=watch" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/io.k8s.api.core.v1.LimitRangeList" + } + }, + "401": { + "description": "Unauthorized" + } + }, + "schemes": [ + "https" + ], + "tags": [ + "core_v1" + ], + "x-kubernetes-action": "list", + "x-kubernetes-group-version-kind": { + "group": "", + "kind": "LimitRange", + "version": "v1" + } + }, + "parameters": [ + { + "description": "allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored. If the feature gate WatchBookmarks is not enabled in apiserver, this field is ignored.\n\nThis field is alpha and can be changed or removed without notice.", + "in": "query", + "name": "allowWatchBookmarks", + "type": "boolean", + "uniqueItems": true + }, + { + "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", + "in": "query", + "name": "continue", + "type": "string", + "uniqueItems": true + }, + { + "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", + "in": "query", + "name": "fieldSelector", + "type": "string", + "uniqueItems": true + }, + { + "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", + "in": "query", + "name": "labelSelector", + "type": "string", + "uniqueItems": true + }, + { + "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", + "in": "query", + "name": "limit", + "type": "integer", + "uniqueItems": true + }, + { + "description": "If 'true', then the output is pretty printed.", + "in": "query", + "name": "pretty", + "type": "string", + "uniqueItems": true + }, + { + "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", + "in": "query", + "name": "resourceVersion", + "type": "string", + "uniqueItems": true + }, + { + "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", + "in": "query", + "name": "timeoutSeconds", + "type": "integer", + "uniqueItems": true + }, + { + "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", + "in": "query", + "name": "watch", + "type": "boolean", + "uniqueItems": true + } + ] + }, + "/api/v1/namespaces": { + "get": { + "consumes": [ + "*/*" + ], + "description": "list or watch objects of kind Namespace", + "operationId": "listCoreV1LegacyTenantedNamespace", "parameters": [ { "description": "allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored. If the feature gate WatchBookmarks is not enabled in apiserver, this field is ignored.\n\nThis field is alpha and can be changed or removed without notice.", @@ -49696,13 +50369,461 @@ } ] }, - "/api/v1/tenants/{tenant}/resourcequotas": { + "/api/v1/tenants/{tenant}/resourcequotas": { + "get": { + "consumes": [ + "*/*" + ], + "description": "list or watch objects of kind ResourceQuota", + "operationId": "listCoreV1TenantedResourceQuotaForOneTenant", + "produces": [ + "application/json", + "application/yaml", + "application/vnd.kubernetes.protobuf", + "application/json;stream=watch", + "application/vnd.kubernetes.protobuf;stream=watch" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/io.k8s.api.core.v1.ResourceQuotaList" + } + }, + "401": { + "description": "Unauthorized" + } + }, + "schemes": [ + "https" + ], + "tags": [ + "core_v1" + ], + "x-kubernetes-action": "list", + "x-kubernetes-group-version-kind": { + "group": "", + "kind": "ResourceQuota", + "version": "v1" + } + }, + "parameters": [ + { + "description": "allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored. If the feature gate WatchBookmarks is not enabled in apiserver, this field is ignored.\n\nThis field is alpha and can be changed or removed without notice.", + "in": "query", + "name": "allowWatchBookmarks", + "type": "boolean", + "uniqueItems": true + }, + { + "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", + "in": "query", + "name": "continue", + "type": "string", + "uniqueItems": true + }, + { + "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", + "in": "query", + "name": "fieldSelector", + "type": "string", + "uniqueItems": true + }, + { + "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", + "in": "query", + "name": "labelSelector", + "type": "string", + "uniqueItems": true + }, + { + "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", + "in": "query", + "name": "limit", + "type": "integer", + "uniqueItems": true + }, + { + "description": "If 'true', then the output is pretty printed.", + "in": "query", + "name": "pretty", + "type": "string", + "uniqueItems": true + }, + { + "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", + "in": "query", + "name": "resourceVersion", + "type": "string", + "uniqueItems": true + }, + { + "description": "object name and auth scope, for different end users", + "in": "path", + "name": "tenant", + "required": true, + "type": "string", + "uniqueItems": true + }, + { + "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", + "in": "query", + "name": "timeoutSeconds", + "type": "integer", + "uniqueItems": true + }, + { + "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", + "in": "query", + "name": "watch", + "type": "boolean", + "uniqueItems": true + } + ] + }, + "/api/v1/tenants/{tenant}/secrets": { + "get": { + "consumes": [ + "*/*" + ], + "description": "list or watch objects of kind Secret", + "operationId": "listCoreV1TenantedSecretForOneTenant", + "produces": [ + "application/json", + "application/yaml", + "application/vnd.kubernetes.protobuf", + "application/json;stream=watch", + "application/vnd.kubernetes.protobuf;stream=watch" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/io.k8s.api.core.v1.SecretList" + } + }, + "401": { + "description": "Unauthorized" + } + }, + "schemes": [ + "https" + ], + "tags": [ + "core_v1" + ], + "x-kubernetes-action": "list", + "x-kubernetes-group-version-kind": { + "group": "", + "kind": "Secret", + "version": "v1" + } + }, + "parameters": [ + { + "description": "allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored. If the feature gate WatchBookmarks is not enabled in apiserver, this field is ignored.\n\nThis field is alpha and can be changed or removed without notice.", + "in": "query", + "name": "allowWatchBookmarks", + "type": "boolean", + "uniqueItems": true + }, + { + "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", + "in": "query", + "name": "continue", + "type": "string", + "uniqueItems": true + }, + { + "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", + "in": "query", + "name": "fieldSelector", + "type": "string", + "uniqueItems": true + }, + { + "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", + "in": "query", + "name": "labelSelector", + "type": "string", + "uniqueItems": true + }, + { + "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", + "in": "query", + "name": "limit", + "type": "integer", + "uniqueItems": true + }, + { + "description": "If 'true', then the output is pretty printed.", + "in": "query", + "name": "pretty", + "type": "string", + "uniqueItems": true + }, + { + "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", + "in": "query", + "name": "resourceVersion", + "type": "string", + "uniqueItems": true + }, + { + "description": "object name and auth scope, for different end users", + "in": "path", + "name": "tenant", + "required": true, + "type": "string", + "uniqueItems": true + }, + { + "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", + "in": "query", + "name": "timeoutSeconds", + "type": "integer", + "uniqueItems": true + }, + { + "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", + "in": "query", + "name": "watch", + "type": "boolean", + "uniqueItems": true + } + ] + }, + "/api/v1/tenants/{tenant}/serviceaccounts": { + "get": { + "consumes": [ + "*/*" + ], + "description": "list or watch objects of kind ServiceAccount", + "operationId": "listCoreV1TenantedServiceAccountForOneTenant", + "produces": [ + "application/json", + "application/yaml", + "application/vnd.kubernetes.protobuf", + "application/json;stream=watch", + "application/vnd.kubernetes.protobuf;stream=watch" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/io.k8s.api.core.v1.ServiceAccountList" + } + }, + "401": { + "description": "Unauthorized" + } + }, + "schemes": [ + "https" + ], + "tags": [ + "core_v1" + ], + "x-kubernetes-action": "list", + "x-kubernetes-group-version-kind": { + "group": "", + "kind": "ServiceAccount", + "version": "v1" + } + }, + "parameters": [ + { + "description": "allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored. If the feature gate WatchBookmarks is not enabled in apiserver, this field is ignored.\n\nThis field is alpha and can be changed or removed without notice.", + "in": "query", + "name": "allowWatchBookmarks", + "type": "boolean", + "uniqueItems": true + }, + { + "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", + "in": "query", + "name": "continue", + "type": "string", + "uniqueItems": true + }, + { + "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", + "in": "query", + "name": "fieldSelector", + "type": "string", + "uniqueItems": true + }, + { + "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", + "in": "query", + "name": "labelSelector", + "type": "string", + "uniqueItems": true + }, + { + "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", + "in": "query", + "name": "limit", + "type": "integer", + "uniqueItems": true + }, + { + "description": "If 'true', then the output is pretty printed.", + "in": "query", + "name": "pretty", + "type": "string", + "uniqueItems": true + }, + { + "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", + "in": "query", + "name": "resourceVersion", + "type": "string", + "uniqueItems": true + }, + { + "description": "object name and auth scope, for different end users", + "in": "path", + "name": "tenant", + "required": true, + "type": "string", + "uniqueItems": true + }, + { + "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", + "in": "query", + "name": "timeoutSeconds", + "type": "integer", + "uniqueItems": true + }, + { + "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", + "in": "query", + "name": "watch", + "type": "boolean", + "uniqueItems": true + } + ] + }, + "/api/v1/tenants/{tenant}/services": { + "get": { + "consumes": [ + "*/*" + ], + "description": "list or watch objects of kind Service", + "operationId": "listCoreV1TenantedServiceForOneTenant", + "produces": [ + "application/json", + "application/yaml", + "application/vnd.kubernetes.protobuf", + "application/json;stream=watch", + "application/vnd.kubernetes.protobuf;stream=watch" + ], + "responses": { + "200": { + "description": "OK", + "schema": { + "$ref": "#/definitions/io.k8s.api.core.v1.ServiceList" + } + }, + "401": { + "description": "Unauthorized" + } + }, + "schemes": [ + "https" + ], + "tags": [ + "core_v1" + ], + "x-kubernetes-action": "list", + "x-kubernetes-group-version-kind": { + "group": "", + "kind": "Service", + "version": "v1" + } + }, + "parameters": [ + { + "description": "allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored. If the feature gate WatchBookmarks is not enabled in apiserver, this field is ignored.\n\nThis field is alpha and can be changed or removed without notice.", + "in": "query", + "name": "allowWatchBookmarks", + "type": "boolean", + "uniqueItems": true + }, + { + "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", + "in": "query", + "name": "continue", + "type": "string", + "uniqueItems": true + }, + { + "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", + "in": "query", + "name": "fieldSelector", + "type": "string", + "uniqueItems": true + }, + { + "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", + "in": "query", + "name": "labelSelector", + "type": "string", + "uniqueItems": true + }, + { + "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", + "in": "query", + "name": "limit", + "type": "integer", + "uniqueItems": true + }, + { + "description": "If 'true', then the output is pretty printed.", + "in": "query", + "name": "pretty", + "type": "string", + "uniqueItems": true + }, + { + "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", + "in": "query", + "name": "resourceVersion", + "type": "string", + "uniqueItems": true + }, + { + "description": "object name and auth scope, for different end users", + "in": "path", + "name": "tenant", + "required": true, + "type": "string", + "uniqueItems": true + }, + { + "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", + "in": "query", + "name": "timeoutSeconds", + "type": "integer", + "uniqueItems": true + }, + { + "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", + "in": "query", + "name": "watch", + "type": "boolean", + "uniqueItems": true + } + ] + }, + "/api/v1/watch/actions": { "get": { "consumes": [ "*/*" ], - "description": "list or watch objects of kind ResourceQuota", - "operationId": "listCoreV1TenantedResourceQuotaForOneTenant", + "description": "watch individual changes to a list of Action. deprecated: use the 'watch' parameter with a list operation instead.", + "operationId": "watchCoreV1ActionListForWholeScope", "produces": [ "application/json", "application/yaml", @@ -49714,7 +50835,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ResourceQuotaList" + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" } }, "401": { @@ -49727,10 +50848,10 @@ "tags": [ "core_v1" ], - "x-kubernetes-action": "list", + "x-kubernetes-action": "watchlist", "x-kubernetes-group-version-kind": { "group": "", - "kind": "ResourceQuota", + "kind": "Action", "version": "v1" } }, @@ -49784,14 +50905,6 @@ "type": "string", "uniqueItems": true }, - { - "description": "object name and auth scope, for different end users", - "in": "path", - "name": "tenant", - "required": true, - "type": "string", - "uniqueItems": true - }, { "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", "in": "query", @@ -49808,13 +50921,13 @@ } ] }, - "/api/v1/tenants/{tenant}/secrets": { + "/api/v1/watch/configmaps": { "get": { "consumes": [ "*/*" ], - "description": "list or watch objects of kind Secret", - "operationId": "listCoreV1TenantedSecretForOneTenant", + "description": "watch individual changes to a list of ConfigMap. deprecated: use the 'watch' parameter with a list operation instead.", + "operationId": "watchCoreV1ConfigMapListForWholeScope", "produces": [ "application/json", "application/yaml", @@ -49826,7 +50939,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.SecretList" + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" } }, "401": { @@ -49839,10 +50952,10 @@ "tags": [ "core_v1" ], - "x-kubernetes-action": "list", + "x-kubernetes-action": "watchlist", "x-kubernetes-group-version-kind": { "group": "", - "kind": "Secret", + "kind": "ConfigMap", "version": "v1" } }, @@ -49896,14 +51009,6 @@ "type": "string", "uniqueItems": true }, - { - "description": "object name and auth scope, for different end users", - "in": "path", - "name": "tenant", - "required": true, - "type": "string", - "uniqueItems": true - }, { "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", "in": "query", @@ -49920,13 +51025,13 @@ } ] }, - "/api/v1/tenants/{tenant}/serviceaccounts": { + "/api/v1/watch/controllerinstances": { "get": { "consumes": [ "*/*" ], - "description": "list or watch objects of kind ServiceAccount", - "operationId": "listCoreV1TenantedServiceAccountForOneTenant", + "description": "watch individual changes to a list of ControllerInstance. deprecated: use the 'watch' parameter with a list operation instead.", + "operationId": "watchCoreV1ControllerInstanceList", "produces": [ "application/json", "application/yaml", @@ -49938,7 +51043,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ServiceAccountList" + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" } }, "401": { @@ -49951,10 +51056,10 @@ "tags": [ "core_v1" ], - "x-kubernetes-action": "list", + "x-kubernetes-action": "watchlist", "x-kubernetes-group-version-kind": { "group": "", - "kind": "ServiceAccount", + "kind": "ControllerInstance", "version": "v1" } }, @@ -50008,14 +51113,6 @@ "type": "string", "uniqueItems": true }, - { - "description": "object name and auth scope, for different end users", - "in": "path", - "name": "tenant", - "required": true, - "type": "string", - "uniqueItems": true - }, { "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", "in": "query", @@ -50032,13 +51129,13 @@ } ] }, - "/api/v1/tenants/{tenant}/services": { + "/api/v1/watch/controllerinstances/{name}": { "get": { "consumes": [ "*/*" ], - "description": "list or watch objects of kind Service", - "operationId": "listCoreV1TenantedServiceForOneTenant", + "description": "watch changes to an object of kind ControllerInstance. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", + "operationId": "watchCoreV1ControllerInstance", "produces": [ "application/json", "application/yaml", @@ -50050,7 +51147,7 @@ "200": { "description": "OK", "schema": { - "$ref": "#/definitions/io.k8s.api.core.v1.ServiceList" + "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" } }, "401": { @@ -50063,10 +51160,10 @@ "tags": [ "core_v1" ], - "x-kubernetes-action": "list", + "x-kubernetes-action": "watch", "x-kubernetes-group-version-kind": { "group": "", - "kind": "Service", + "kind": "ControllerInstance", "version": "v1" } }, @@ -50107,221 +51204,13 @@ "uniqueItems": true }, { - "description": "If 'true', then the output is pretty printed.", - "in": "query", - "name": "pretty", - "type": "string", - "uniqueItems": true - }, - { - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "in": "query", - "name": "resourceVersion", - "type": "string", - "uniqueItems": true - }, - { - "description": "object name and auth scope, for different end users", + "description": "name of the ControllerInstance", "in": "path", - "name": "tenant", + "name": "name", "required": true, "type": "string", "uniqueItems": true }, - { - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "in": "query", - "name": "timeoutSeconds", - "type": "integer", - "uniqueItems": true - }, - { - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "in": "query", - "name": "watch", - "type": "boolean", - "uniqueItems": true - } - ] - }, - "/api/v1/watch/actions": { - "get": { - "consumes": [ - "*/*" - ], - "description": "watch individual changes to a list of Action. deprecated: use the 'watch' parameter with a list operation instead.", - "operationId": "watchCoreV1ActionListForWholeScope", - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "Action", - "version": "v1" - } - }, - "parameters": [ - { - "description": "allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored. If the feature gate WatchBookmarks is not enabled in apiserver, this field is ignored.\n\nThis field is alpha and can be changed or removed without notice.", - "in": "query", - "name": "allowWatchBookmarks", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "in": "query", - "name": "continue", - "type": "string", - "uniqueItems": true - }, - { - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "in": "query", - "name": "fieldSelector", - "type": "string", - "uniqueItems": true - }, - { - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "in": "query", - "name": "labelSelector", - "type": "string", - "uniqueItems": true - }, - { - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "in": "query", - "name": "limit", - "type": "integer", - "uniqueItems": true - }, - { - "description": "If 'true', then the output is pretty printed.", - "in": "query", - "name": "pretty", - "type": "string", - "uniqueItems": true - }, - { - "description": "When specified with a watch call, shows changes that occur after that particular version of a resource. Defaults to changes from the beginning of history. When specified for list: - if unset, then the result is returned from remote storage based on quorum-read flag; - if it's 0, then we simply return what we currently have in cache, no guarantee; - if set to non zero, then the result is at least as fresh as given rv.", - "in": "query", - "name": "resourceVersion", - "type": "string", - "uniqueItems": true - }, - { - "description": "Timeout for the list/watch call. This limits the duration of the call, regardless of any activity or inactivity.", - "in": "query", - "name": "timeoutSeconds", - "type": "integer", - "uniqueItems": true - }, - { - "description": "Watch for changes to the described resources and return them as a stream of add, update, and remove notifications. Specify resourceVersion.", - "in": "query", - "name": "watch", - "type": "boolean", - "uniqueItems": true - } - ] - }, - "/api/v1/watch/configmaps": { - "get": { - "consumes": [ - "*/*" - ], - "description": "watch individual changes to a list of ConfigMap. deprecated: use the 'watch' parameter with a list operation instead.", - "operationId": "watchCoreV1ConfigMapListForWholeScope", - "produces": [ - "application/json", - "application/yaml", - "application/vnd.kubernetes.protobuf", - "application/json;stream=watch", - "application/vnd.kubernetes.protobuf;stream=watch" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.WatchEvent" - } - }, - "401": { - "description": "Unauthorized" - } - }, - "schemes": [ - "https" - ], - "tags": [ - "core_v1" - ], - "x-kubernetes-action": "watchlist", - "x-kubernetes-group-version-kind": { - "group": "", - "kind": "ConfigMap", - "version": "v1" - } - }, - "parameters": [ - { - "description": "allowWatchBookmarks requests watch events with type \"BOOKMARK\". Servers that do not implement bookmarks may ignore this flag and bookmarks are sent at the server's discretion. Clients should not assume bookmarks are returned at any specific interval, nor may they assume the server will send any BOOKMARK event during a session. If this is not a watch, this field is ignored. If the feature gate WatchBookmarks is not enabled in apiserver, this field is ignored.\n\nThis field is alpha and can be changed or removed without notice.", - "in": "query", - "name": "allowWatchBookmarks", - "type": "boolean", - "uniqueItems": true - }, - { - "description": "The continue option should be set when retrieving more results from the server. Since this value is server defined, clients may only use the continue value from a previous query result with identical query parameters (except for the value of continue) and the server may reject a continue value it does not recognize. If the specified continue value is no longer valid whether due to expiration (generally five to fifteen minutes) or a configuration change on the server, the server will respond with a 410 ResourceExpired error together with a continue token. If the client needs a consistent list, it must restart their list without the continue field. Otherwise, the client may send another list request with the token received with the 410 error, the server will respond with a list starting from the next key, but from the latest snapshot, which is inconsistent from the previous list results - objects that are created, modified, or deleted after the first list request will be included in the response, as long as their keys are after the \"next key\".\n\nThis field is not supported when watch is true. Clients may start a watch from the last resourceVersion value returned by the server and not miss any modifications.", - "in": "query", - "name": "continue", - "type": "string", - "uniqueItems": true - }, - { - "description": "A selector to restrict the list of returned objects by their fields. Defaults to everything.", - "in": "query", - "name": "fieldSelector", - "type": "string", - "uniqueItems": true - }, - { - "description": "A selector to restrict the list of returned objects by their labels. Defaults to everything.", - "in": "query", - "name": "labelSelector", - "type": "string", - "uniqueItems": true - }, - { - "description": "limit is a maximum number of responses to return for a list call. If more items exist, the server will set the `continue` field on the list metadata to a value that can be used with the same initial query to retrieve the next set of results. Setting a limit may return fewer than the requested amount of items (up to zero items) in the event all requested objects are filtered out and clients should only use the presence of the continue field to determine whether more results are available. Servers may choose not to support the limit argument and will return all of the available results. If limit is specified and the continue field is empty, clients may assume that no more results are available. This field is not supported if watch is true.\n\nThe server guarantees that the objects returned when using continue will be identical to issuing a single list call without a limit - that is, no objects created, modified, or deleted after the first request is issued will be included in any subsequent continued requests. This is sometimes referred to as a consistent snapshot, and ensures that a client that is using limit to receive smaller chunks of a very large result can ensure they see all possible objects. If objects are updated during a chunked list the version of the object that was present at the time the first list result was calculated is returned.", - "in": "query", - "name": "limit", - "type": "integer", - "uniqueItems": true - }, { "description": "If 'true', then the output is pretty printed.", "in": "query", @@ -50352,13 +51241,13 @@ } ] }, - "/api/v1/watch/controllerinstances": { + "/api/v1/watch/datapartitionconfigs": { "get": { "consumes": [ "*/*" ], - "description": "watch individual changes to a list of ControllerInstance. deprecated: use the 'watch' parameter with a list operation instead.", - "operationId": "watchCoreV1ControllerInstanceList", + "description": "watch individual changes to a list of DataPartitionConfig. deprecated: use the 'watch' parameter with a list operation instead.", + "operationId": "watchCoreV1DataPartitionConfigList", "produces": [ "application/json", "application/yaml", @@ -50386,7 +51275,7 @@ "x-kubernetes-action": "watchlist", "x-kubernetes-group-version-kind": { "group": "", - "kind": "ControllerInstance", + "kind": "DataPartitionConfig", "version": "v1" } }, @@ -50456,13 +51345,13 @@ } ] }, - "/api/v1/watch/controllerinstances/{name}": { + "/api/v1/watch/datapartitionconfigs/{name}": { "get": { "consumes": [ "*/*" ], - "description": "watch changes to an object of kind ControllerInstance. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", - "operationId": "watchCoreV1ControllerInstance", + "description": "watch changes to an object of kind DataPartitionConfig. deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter.", + "operationId": "watchCoreV1DataPartitionConfig", "produces": [ "application/json", "application/yaml", @@ -50490,7 +51379,7 @@ "x-kubernetes-action": "watch", "x-kubernetes-group-version-kind": { "group": "", - "kind": "ControllerInstance", + "kind": "DataPartitionConfig", "version": "v1" } }, @@ -50531,7 +51420,7 @@ "uniqueItems": true }, { - "description": "name of the ControllerInstance", + "description": "name of the DataPartitionConfig", "in": "path", "name": "name", "required": true, diff --git a/cmd/kube-apiserver/app/BUILD b/cmd/kube-apiserver/app/BUILD index 9a2731e5020..1b06456d85c 100644 --- a/cmd/kube-apiserver/app/BUILD +++ b/cmd/kube-apiserver/app/BUILD @@ -54,6 +54,7 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/server/healthz:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server/options:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server/storage:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/storage/datapartition:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/etcd3/preflight:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/term:go_default_library", diff --git a/cmd/kube-apiserver/app/aggregator.go b/cmd/kube-apiserver/app/aggregator.go index 2cedb55cdc9..b8bee765153 100644 --- a/cmd/kube-apiserver/app/aggregator.go +++ b/cmd/kube-apiserver/app/aggregator.go @@ -1,5 +1,6 @@ /* Copyright 2017 The Kubernetes Authors. +Copyright 2020 Authors of Arktos - file modified. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/cmd/kube-apiserver/app/options/options.go b/cmd/kube-apiserver/app/options/options.go index 8b9ce5f9142..05f26a85a82 100644 --- a/cmd/kube-apiserver/app/options/options.go +++ b/cmd/kube-apiserver/app/options/options.go @@ -73,6 +73,8 @@ type ServerRunOptions struct { ServiceAccountSigningKeyFile string ServiceAccountIssuer serviceaccount.TokenGenerator ServiceAccountTokenMaxExpiration time.Duration + + ServiceGroupId string } // NewServerRunOptions creates a new ServerRunOptions object with default parameters diff --git a/cmd/kube-apiserver/app/server.go b/cmd/kube-apiserver/app/server.go index d75b3d65523..b0b3197cdb4 100644 --- a/cmd/kube-apiserver/app/server.go +++ b/cmd/kube-apiserver/app/server.go @@ -24,6 +24,7 @@ import ( "crypto/tls" "fmt" "io/ioutil" + "k8s.io/apiserver/pkg/storage/datapartition" "net" "net/http" "net/url" @@ -178,7 +179,7 @@ func CreateServerChain(completedOptions completedServerRunOptions, stopCh <-chan return nil, err } - kubeAPIServer, err := CreateKubeAPIServer(kubeAPIServerConfig, apiExtensionsServer.GenericAPIServer, admissionPostStartHook) + kubeAPIServer, err := CreateKubeAPIServer(kubeAPIServerConfig, apiExtensionsServer.GenericAPIServer, admissionPostStartHook, stopCh) if err != nil { return nil, err } @@ -212,13 +213,14 @@ func CreateServerChain(completedOptions completedServerRunOptions, stopCh <-chan } // CreateKubeAPIServer creates and wires a workable kube-apiserver -func CreateKubeAPIServer(kubeAPIServerConfig *master.Config, delegateAPIServer genericapiserver.DelegationTarget, admissionPostStartHook genericapiserver.PostStartHookFunc) (*master.Master, error) { +func CreateKubeAPIServer(kubeAPIServerConfig *master.Config, delegateAPIServer genericapiserver.DelegationTarget, admissionPostStartHook genericapiserver.PostStartHookFunc, stopCh <-chan struct{}) (*master.Master, error) { kubeAPIServer, err := kubeAPIServerConfig.Complete().New(delegateAPIServer) if err != nil { return nil, err } kubeAPIServer.GenericAPIServer.AddPostStartHookOrDie("start-kube-apiserver-admission-initializer", admissionPostStartHook) + go kubeAPIServerConfig.ExtraConfig.DataPartitionManager.Run(stopCh) return kubeAPIServer, nil } @@ -351,6 +353,7 @@ func CreateKubeAPIServerConfig( EndpointReconcilerType: reconcilers.Type(s.EndpointReconcilerType), MasterCount: s.MasterCount, + ServiceGroupId: s.ServiceGroupId, ServiceAccountIssuer: s.ServiceAccountIssuer, ServiceAccountMaxExpiration: s.ServiceAccountTokenMaxExpiration, @@ -359,6 +362,12 @@ func CreateKubeAPIServerConfig( }, } + config.ExtraConfig.DataPartitionManager = datapartition.GetDataPartitionConfigManager() + if config.ExtraConfig.DataPartitionManager == nil { + config.ExtraConfig.DataPartitionManager = datapartition.NewDataPartitionConfigManager( + config.ExtraConfig.ServiceGroupId, config.ExtraConfig.VersionedInformers.Core().V1().DataPartitionConfigs()) + } + if nodeTunneler != nil { // Use the nodeTunneler's dialer to connect to the kubelet config.ExtraConfig.KubeletClientConfig.Dial = nodeTunneler.Dial @@ -629,6 +638,10 @@ func Complete(s *options.ServerRunOptions) (completedServerRunOptions, error) { } } } + + // service group - for data partition + // TODO - read service group id from commandline config + s.ServiceGroupId = "0" options.ServerRunOptions = s return options, nil } diff --git a/pkg/apis/core/register.go b/pkg/apis/core/register.go index 3635e80541a..505195c7e51 100644 --- a/pkg/apis/core/register.go +++ b/pkg/apis/core/register.go @@ -100,6 +100,8 @@ func addKnownTypes(scheme *runtime.Scheme) error { &CustomAction{}, &Action{}, &ActionList{}, + &DataPartitionConfig{}, + &DataPartitionConfigList{}, ) return nil diff --git a/pkg/apis/core/types.go b/pkg/apis/core/types.go index 93edb0b8095..6df55488326 100644 --- a/pkg/apis/core/types.go +++ b/pkg/apis/core/types.go @@ -5246,3 +5246,42 @@ type ControllerInstanceList struct { // List of controller instance Items []ControllerInstance } + +// +genclient +// +genclient:nonNamespaced +// +genclient:nonTenanted + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// DataPartitionConfig contains data partition configuration instance with name +type DataPartitionConfig struct { + metav1.TypeMeta + metav1.ObjectMeta + + // Start tenant is inclusive + StartTenant string + + // Whether this is an open end start + IsStartTenantValid bool + + // End tenant is exclusive + EndTenant string + + // Whether this is an open end end + IsEndTenantValid bool + + // Which service group is using this data configuration + ServiceGroupId string +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// DataPartitionConfigList holds the data partition configuration list +type DataPartitionConfigList struct { + metav1.TypeMeta + // +optional + metav1.ListMeta + + // List of data partition configuration + Items []DataPartitionConfig +} diff --git a/pkg/apis/core/v1/zz_generated.conversion.go b/pkg/apis/core/v1/zz_generated.conversion.go index 845fd6d34dd..40f8cc84635 100644 --- a/pkg/apis/core/v1/zz_generated.conversion.go +++ b/pkg/apis/core/v1/zz_generated.conversion.go @@ -471,6 +471,26 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*v1.DataPartitionConfig)(nil), (*core.DataPartitionConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1_DataPartitionConfig_To_core_DataPartitionConfig(a.(*v1.DataPartitionConfig), b.(*core.DataPartitionConfig), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*core.DataPartitionConfig)(nil), (*v1.DataPartitionConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_core_DataPartitionConfig_To_v1_DataPartitionConfig(a.(*core.DataPartitionConfig), b.(*v1.DataPartitionConfig), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*v1.DataPartitionConfigList)(nil), (*core.DataPartitionConfigList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1_DataPartitionConfigList_To_core_DataPartitionConfigList(a.(*v1.DataPartitionConfigList), b.(*core.DataPartitionConfigList), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*core.DataPartitionConfigList)(nil), (*v1.DataPartitionConfigList)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_core_DataPartitionConfigList_To_v1_DataPartitionConfigList(a.(*core.DataPartitionConfigList), b.(*v1.DataPartitionConfigList), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*v1.DownwardAPIProjection)(nil), (*core.DownwardAPIProjection)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1_DownwardAPIProjection_To_core_DownwardAPIProjection(a.(*v1.DownwardAPIProjection), b.(*core.DownwardAPIProjection), scope) }); err != nil { @@ -3548,6 +3568,58 @@ func Convert_core_DaemonEndpoint_To_v1_DaemonEndpoint(in *core.DaemonEndpoint, o return autoConvert_core_DaemonEndpoint_To_v1_DaemonEndpoint(in, out, s) } +func autoConvert_v1_DataPartitionConfig_To_core_DataPartitionConfig(in *v1.DataPartitionConfig, out *core.DataPartitionConfig, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + out.StartTenant = in.StartTenant + out.IsStartTenantValid = in.IsStartTenantValid + out.EndTenant = in.EndTenant + out.IsEndTenantValid = in.IsEndTenantValid + out.ServiceGroupId = in.ServiceGroupId + return nil +} + +// Convert_v1_DataPartitionConfig_To_core_DataPartitionConfig is an autogenerated conversion function. +func Convert_v1_DataPartitionConfig_To_core_DataPartitionConfig(in *v1.DataPartitionConfig, out *core.DataPartitionConfig, s conversion.Scope) error { + return autoConvert_v1_DataPartitionConfig_To_core_DataPartitionConfig(in, out, s) +} + +func autoConvert_core_DataPartitionConfig_To_v1_DataPartitionConfig(in *core.DataPartitionConfig, out *v1.DataPartitionConfig, s conversion.Scope) error { + out.ObjectMeta = in.ObjectMeta + out.StartTenant = in.StartTenant + out.IsStartTenantValid = in.IsStartTenantValid + out.EndTenant = in.EndTenant + out.IsEndTenantValid = in.IsEndTenantValid + out.ServiceGroupId = in.ServiceGroupId + return nil +} + +// Convert_core_DataPartitionConfig_To_v1_DataPartitionConfig is an autogenerated conversion function. +func Convert_core_DataPartitionConfig_To_v1_DataPartitionConfig(in *core.DataPartitionConfig, out *v1.DataPartitionConfig, s conversion.Scope) error { + return autoConvert_core_DataPartitionConfig_To_v1_DataPartitionConfig(in, out, s) +} + +func autoConvert_v1_DataPartitionConfigList_To_core_DataPartitionConfigList(in *v1.DataPartitionConfigList, out *core.DataPartitionConfigList, s conversion.Scope) error { + out.ListMeta = in.ListMeta + out.Items = *(*[]core.DataPartitionConfig)(unsafe.Pointer(&in.Items)) + return nil +} + +// Convert_v1_DataPartitionConfigList_To_core_DataPartitionConfigList is an autogenerated conversion function. +func Convert_v1_DataPartitionConfigList_To_core_DataPartitionConfigList(in *v1.DataPartitionConfigList, out *core.DataPartitionConfigList, s conversion.Scope) error { + return autoConvert_v1_DataPartitionConfigList_To_core_DataPartitionConfigList(in, out, s) +} + +func autoConvert_core_DataPartitionConfigList_To_v1_DataPartitionConfigList(in *core.DataPartitionConfigList, out *v1.DataPartitionConfigList, s conversion.Scope) error { + out.ListMeta = in.ListMeta + out.Items = *(*[]v1.DataPartitionConfig)(unsafe.Pointer(&in.Items)) + return nil +} + +// Convert_core_DataPartitionConfigList_To_v1_DataPartitionConfigList is an autogenerated conversion function. +func Convert_core_DataPartitionConfigList_To_v1_DataPartitionConfigList(in *core.DataPartitionConfigList, out *v1.DataPartitionConfigList, s conversion.Scope) error { + return autoConvert_core_DataPartitionConfigList_To_v1_DataPartitionConfigList(in, out, s) +} + func autoConvert_v1_DownwardAPIProjection_To_core_DownwardAPIProjection(in *v1.DownwardAPIProjection, out *core.DownwardAPIProjection, s conversion.Scope) error { out.Items = *(*[]core.DownwardAPIVolumeFile)(unsafe.Pointer(&in.Items)) return nil diff --git a/pkg/apis/core/validation/validation.go b/pkg/apis/core/validation/validation.go index 60eac5f2f47..f3e156aba65 100644 --- a/pkg/apis/core/validation/validation.go +++ b/pkg/apis/core/validation/validation.go @@ -206,6 +206,9 @@ var ValidateReplicationControllerName = apimachineryvalidation.NameIsDNSSubdomai // trailing dashes are allowed. var ValidateServiceName = apimachineryvalidation.NameIsDNS1035Label +// ValidateDataPartitionName can be used to check whether given data partition name is valid. +var ValidateDataPartitionName = apimachineryvalidation.NameIsDNSSubdomain + // ValidateNodeName can be used to check whether the given node name is valid. // Prefix indicates this name will be used as part of generation, in which case // trailing dashes are allowed. @@ -4166,6 +4169,21 @@ func ValidateServiceStatusUpdate(service, oldService *core.Service) field.ErrorL return allErrs } +func ValidateDataPartitionConfig(dataPartitionConfig *core.DataPartitionConfig) field.ErrorList { + allErrs := ValidateObjectMeta(&dataPartitionConfig.ObjectMeta, false, false, ValidateDataPartitionName, field.NewPath("metadata")) + return allErrs +} + +func ValidateDataPartitionConfigUpdate(newDataPartitionConfig *core.DataPartitionConfig, oldDataPartitionConfig *core.DataPartitionConfig) field.ErrorList { + allErrs := ValidateObjectMeta(&newDataPartitionConfig.ObjectMeta, false, false, ValidateDataPartitionName, field.NewPath("metadata")) + if newDataPartitionConfig.Name != oldDataPartitionConfig.Name { + klog.Infof("Intended to update data partition config name. Not allowed. new name [%v], old name [%v]", newDataPartitionConfig.Name, oldDataPartitionConfig.Name) + nameDiff := diff.ObjectDiff(newDataPartitionConfig.Name, oldDataPartitionConfig.Name) + allErrs = append(allErrs, field.Forbidden(field.NewPath("Name"), fmt.Sprintf("Update data configuration name is not allowed. %v", nameDiff))) + } + return allErrs +} + // ValidateReplicationController tests if required fields in the replication controller are set. func ValidateReplicationController(controller *core.ReplicationController) field.ErrorList { allErrs := ValidateObjectMeta(&controller.ObjectMeta, true, true, ValidateReplicationControllerName, field.NewPath("metadata")) diff --git a/pkg/apis/core/zz_generated.deepcopy.go b/pkg/apis/core/zz_generated.deepcopy.go index a3e25214524..2e539cd7bab 100644 --- a/pkg/apis/core/zz_generated.deepcopy.go +++ b/pkg/apis/core/zz_generated.deepcopy.go @@ -1185,6 +1185,65 @@ func (in *DaemonEndpoint) DeepCopy() *DaemonEndpoint { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DataPartitionConfig) DeepCopyInto(out *DataPartitionConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DataPartitionConfig. +func (in *DataPartitionConfig) DeepCopy() *DataPartitionConfig { + if in == nil { + return nil + } + out := new(DataPartitionConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *DataPartitionConfig) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DataPartitionConfigList) DeepCopyInto(out *DataPartitionConfigList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]DataPartitionConfig, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DataPartitionConfigList. +func (in *DataPartitionConfigList) DeepCopy() *DataPartitionConfigList { + if in == nil { + return nil + } + out := new(DataPartitionConfigList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *DataPartitionConfigList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DownwardAPIProjection) DeepCopyInto(out *DownwardAPIProjection) { *out = *in diff --git a/pkg/cloudfabric-controller/controllerframework/controller_framework.go b/pkg/cloudfabric-controller/controllerframework/controller_framework.go index f99cc1eee35..ceb7b42aa5c 100644 --- a/pkg/cloudfabric-controller/controllerframework/controller_framework.go +++ b/pkg/cloudfabric-controller/controllerframework/controller_framework.go @@ -184,7 +184,7 @@ func (c *ControllerBase) WatchInstanceUpdate(stopCh <-chan struct{}) { break case updatedType, ok := <-c.controllerInstanceUpdateCh.Read: if !ok { - klog.Errorf("Unexpected controller instance update message") + klog.Error("Unexpected controller instance update message") return } klog.Infof("Got controller instance update massage. Updated Controller Type %s, current controller instance type %s, key %d", updatedType, c.controllerType, c.controllerKey) diff --git a/pkg/cloudfabric-controller/controllerframework/controllerinstancemanager.go b/pkg/cloudfabric-controller/controllerframework/controllerinstancemanager.go index be289f7f826..c352670c7a2 100644 --- a/pkg/cloudfabric-controller/controllerframework/controllerinstancemanager.go +++ b/pkg/cloudfabric-controller/controllerframework/controllerinstancemanager.go @@ -121,13 +121,13 @@ func (cim *ControllerInstanceManager) addControllerInstance(obj interface{}) { cim.deleteControllerInstance(newControllerInstance) return } - klog.Infof("Received event for NEW controller instance %v. CIM %v", newControllerInstance.Name, cim.instanceId) + klog.V(3).Infof("Received event for NEW controller instance %v. CIM %v", newControllerInstance.Name, cim.instanceId) cim.mux.Lock() - klog.Infof("mux acquired addControllerInstance. CIM %v", cim.instanceId) + klog.V(4).Infof("mux acquired addControllerInstance. CIM %v", cim.instanceId) defer func() { cim.mux.Unlock() - klog.Infof("mux released addControllerInstance. CIM %v", cim.instanceId) + klog.V(4).Infof("mux released addControllerInstance. CIM %v", cim.instanceId) }() if cim.currentControllers == nil { @@ -140,7 +140,7 @@ func (cim *ControllerInstanceManager) addControllerInstance(obj interface{}) { existingInstance, ok1 := existingInstancesForType[newControllerInstance.Name] if ok1 { cim.updateControllerInstance(&existingInstance, newControllerInstance) - klog.Infof("Got existing controller instance %s in AddFunc. CIM %v", newControllerInstance.Name, cim.instanceId) + klog.V(4).Infof("Got existing controller instance %s in AddFunc. CIM %v", newControllerInstance.Name, cim.instanceId) return } } @@ -165,7 +165,7 @@ func (cim *ControllerInstanceManager) updateControllerInstance(old, cur interfac } if newRev < oldRev { - klog.Infof("Got staled controller instance %s in UpdateFunc. Existing Version %s, new instance version %s. CIM %v", + klog.V(3).Infof("Got staled controller instance %s in UpdateFunc. Existing Version %s, new instance version %s. CIM %v", oldControllerInstance.Name, oldControllerInstance.ResourceVersion, curControllerInstance.ResourceVersion, cim.instanceId) return } @@ -195,7 +195,7 @@ func (cim *ControllerInstanceManager) updateControllerInstance(old, cur interfac if curControllerInstance.WorkloadNum != oldControllerInstance.WorkloadNum || curControllerInstance.IsLocked != oldControllerInstance.IsLocked || curControllerInstance.ControllerKey != oldControllerInstance.ControllerKey { - klog.Infof("Notify controller instance %v was updated. CIM %v", curControllerInstance.Name, cim.instanceId) + klog.V(4).Infof("Notify controller instance %v was updated. CIM %v", curControllerInstance.Name, cim.instanceId) cim.notifyHandler(curControllerInstance) } } @@ -215,12 +215,12 @@ func (cim *ControllerInstanceManager) deleteControllerInstance(obj interface{}) } } - klog.Infof("Received event for delete controller instance %v. CIM %v", controllerinstance.Name, cim.instanceId) + klog.V(3).Infof("Received event for delete controller instance %v. CIM %v", controllerinstance.Name, cim.instanceId) cim.mux.Lock() - klog.Infof("mux acquired deleteControllerInstance. CIM %v", cim.instanceId) + klog.V(4).Infof("mux acquired deleteControllerInstance. CIM %v", cim.instanceId) defer func() { cim.mux.Unlock() - klog.Infof("mux released deleteControllerInstance. CIM %v", cim.instanceId) + klog.V(4).Infof("mux released deleteControllerInstance. CIM %v", cim.instanceId) }() if l, ok := cim.currentControllers[controllerinstance.ControllerType]; ok { @@ -261,17 +261,17 @@ func (cim *ControllerInstanceManager) ListControllerInstances(controllerType str func (cim *ControllerInstanceManager) syncControllerInstances() error { cim.mux.Lock() - klog.Infof("mux acquired syncControllerInstances. CIM %v", cim.instanceId) + klog.V(4).Infof("mux acquired syncControllerInstances. CIM %v", cim.instanceId) defer func() { cim.mux.Unlock() - klog.Infof("mux released syncControllerInstances. CIM %v", cim.instanceId) + klog.V(4).Infof("mux released syncControllerInstances. CIM %v", cim.instanceId) }() controllerInstanceList, err := cim.kubeClient.CoreV1().ControllerInstances().List(metav1.ListOptions{}) if err != nil { return err } - klog.Infof("Found %d of controller instances from registry. CIM %v", len(controllerInstanceList.Items), cim.instanceId) + klog.V(3).Infof("Found %d of controller instances from registry. CIM %v", len(controllerInstanceList.Items), cim.instanceId) for _, controllerInstance := range controllerInstanceList.Items { controllersByType, ok := cim.currentControllers[controllerInstance.ControllerType] diff --git a/pkg/master/BUILD b/pkg/master/BUILD index a65878f3c51..d7f5b3d8f80 100644 --- a/pkg/master/BUILD +++ b/pkg/master/BUILD @@ -116,6 +116,7 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/server:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server/healthz:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server/storage:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/storage/datapartition:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/storagebackend/factory:go_default_library", "//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library", "//staging/src/k8s.io/client-go/informers:go_default_library", diff --git a/pkg/master/controller.go b/pkg/master/controller.go index 3e90b84f692..f72ea53bf7f 100644 --- a/pkg/master/controller.go +++ b/pkg/master/controller.go @@ -1,5 +1,6 @@ /* Copyright 2014 The Kubernetes Authors. +Copyright 2020 Authors of Arktos - file modified. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -45,6 +46,8 @@ import ( const kubernetesServiceName = "kubernetes" +//var KubeApiServerEndpointName = "apiservice.1" + // Controller is the controller manager for the core bootstrap Kubernetes // controller loops, which manage creating the "kubernetes" service, the // "default", "kube-system" and "kube-public" namespaces, and provide the IP @@ -79,6 +82,8 @@ type Controller struct { PublicServicePort int KubernetesServiceNodePort int + DataPartitionConfig []corev1.DataPartitionConfig + runner *async.Runner } @@ -143,6 +148,7 @@ func (c *Controller) Start() { } // Reconcile during first run removing itself until server is ready. + //endpointPorts := createEndpointPortSpec(c.PublicServicePort, KubeApiServerEndpointName, c.ExtraEndpointPorts) endpointPorts := createEndpointPortSpec(c.PublicServicePort, "https", c.ExtraEndpointPorts) if err := c.EndpointReconciler.RemoveEndpoints(kubernetesServiceName, c.PublicIP, endpointPorts); err != nil { klog.Errorf("Unable to remove old endpoints from kubernetes service: %v", err) @@ -169,6 +175,7 @@ func (c *Controller) Stop() { if c.runner != nil { c.runner.Stop() } + //endpointPorts := createEndpointPortSpec(c.PublicServicePort, KubeApiServerEndpointName, c.ExtraEndpointPorts) endpointPorts := createEndpointPortSpec(c.PublicServicePort, "https", c.ExtraEndpointPorts) finishedReconciling := make(chan struct{}) go func() { @@ -230,10 +237,12 @@ func (c *Controller) UpdateKubernetesService(reconcile bool) error { return err } + //servicePorts, serviceType := createPortAndServiceSpec(c.ServicePort, c.PublicServicePort, c.KubernetesServiceNodePort, KubeApiServerEndpointName, c.ExtraServicePorts) servicePorts, serviceType := createPortAndServiceSpec(c.ServicePort, c.PublicServicePort, c.KubernetesServiceNodePort, "https", c.ExtraServicePorts) if err := c.CreateOrUpdateMasterServiceIfNeeded(kubernetesServiceName, c.ServiceIP, servicePorts, serviceType, reconcile); err != nil { return err } + //endpointPorts := createEndpointPortSpec(c.PublicServicePort, KubeApiServerEndpointName, c.ExtraEndpointPorts) endpointPorts := createEndpointPortSpec(c.PublicServicePort, "https", c.ExtraEndpointPorts) if err := c.EndpointReconciler.ReconcileEndpoints(kubernetesServiceName, c.PublicIP, endpointPorts, reconcile); err != nil { return err diff --git a/pkg/master/master.go b/pkg/master/master.go index ac3b603c0c2..3d49d42ae0a 100644 --- a/pkg/master/master.go +++ b/pkg/master/master.go @@ -1,5 +1,6 @@ /* Copyright 2014 The Kubernetes Authors. +Copyright 2020 Authors of Arktos - file modified. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -18,6 +19,7 @@ package master import ( "fmt" + "k8s.io/apiserver/pkg/storage/datapartition" "net" "net/http" "reflect" @@ -157,6 +159,11 @@ type ExtraConfig struct { // same value for this field. (Numbers > 1 currently untested.) MasterCount int + // Service Group Id for this service instance; service group id is mapped to data partition + ServiceGroupId string + DataPartitionConfig apiv1.DataPartitionConfig + DataPartitionManager *datapartition.DataPartitionConfigManager + // MasterEndpointReconcileTTL sets the time to live in seconds of an // endpoint record recorded by each master. The endpoints are checked at an // interval that is 2/3 of this value and this value defaults to 15s if diff --git a/pkg/master/reconcilers/none.go b/pkg/master/reconcilers/none.go index 2eb49741bbd..f7154cf9680 100644 --- a/pkg/master/reconcilers/none.go +++ b/pkg/master/reconcilers/none.go @@ -1,5 +1,6 @@ /* Copyright 2017 The Kubernetes Authors. +Copyright 2020 Authors of Arktos - file modified. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/pkg/master/storageversionhashdata/data.go b/pkg/master/storageversionhashdata/data.go index 09411f6a15b..afbfb408b71 100644 --- a/pkg/master/storageversionhashdata/data.go +++ b/pkg/master/storageversionhashdata/data.go @@ -46,6 +46,7 @@ var GVRToStorageVersionHash = map[string]string{ "v1/actions": "CDVjb9Zn97o=", "v1/configmaps": "qFsyl6wFWjQ=", "v1/controllerinstances": "HX8UpZZPgz8=", + "v1/datapartitionconfigs": "fJCt9dZHskg=", "v1/endpoints": "fWeeMqaN/OA=", "v1/events": "r2yiGXH7wu8=", "v1/limitranges": "EBKMFVe6cwo=", diff --git a/pkg/printers/internalversion/printers.go b/pkg/printers/internalversion/printers.go index a4265a8c94d..c604e55793f 100644 --- a/pkg/printers/internalversion/printers.go +++ b/pkg/printers/internalversion/printers.go @@ -203,6 +203,18 @@ func AddHandlers(h printers.PrintHandler) { h.TableHandler(serviceColumnDefinitions, printService) h.TableHandler(serviceColumnDefinitions, printServiceList) + dataPartitionConfigColumnDefinition := []metav1.TableColumnDefinition{ + {Name: "Name", Type: "string", Format: "name", Description: metav1.ObjectMeta{}.SwaggerDoc()["name"]}, + {Name: "StartTenant", Type: "string", Description: apiv1.DataPartitionConfig{}.SwaggerDoc()["startTenant"]}, + {Name: "IsStartTenantValid", Type: "string", Description: apiv1.DataPartitionConfig{}.SwaggerDoc()["isStartTenantValid"]}, + {Name: "EndTenant", Type: "string", Description: apiv1.DataPartitionConfig{}.SwaggerDoc()["endTenant"]}, + {Name: "IsEndTenantValid", Type: "string", Description: apiv1.DataPartitionConfig{}.SwaggerDoc()["isEndTenantValid"]}, + {Name: "ServiceGroupId", Type: "string", Description: apiv1.DataPartitionConfig{}.SwaggerDoc()["serviceGroupId"]}, + } + + h.TableHandler(dataPartitionConfigColumnDefinition, printDataPartition) + h.TableHandler(dataPartitionConfigColumnDefinition, printDataPartitionList) + ingressColumnDefinitions := []metav1beta1.TableColumnDefinition{ {Name: "Name", Type: "string", Format: "name", Description: metav1.ObjectMeta{}.SwaggerDoc()["name"]}, {Name: "Hosts", Type: "string", Description: "Hosts that incoming requests are matched against before the ingress rule"}, @@ -1046,6 +1058,31 @@ func printServiceList(list *api.ServiceList, options printers.PrintOptions) ([]m return rows, nil } +func printDataPartition(obj *api.DataPartitionConfig, options printers.PrintOptions) ([]metav1beta1.TableRow, error) { + row := metav1beta1.TableRow{ + Object: runtime.RawExtension{Object: obj}, + } + row.Cells = append(row.Cells, obj.Name) + row.Cells = append(row.Cells, obj.StartTenant) + row.Cells = append(row.Cells, obj.IsStartTenantValid) + row.Cells = append(row.Cells, obj.EndTenant) + row.Cells = append(row.Cells, obj.IsEndTenantValid) + row.Cells = append(row.Cells, obj.ServiceGroupId) + return []metav1beta1.TableRow{row}, nil +} + +func printDataPartitionList(list *api.DataPartitionConfigList, options printers.PrintOptions) ([]metav1beta1.TableRow, error) { + rows := make([]metav1beta1.TableRow, 0, len(list.Items)) + for i := range list.Items { + r, err := printDataPartition(&list.Items[i], options) + if err != nil { + return nil, err + } + rows = append(rows, r...) + } + return rows, nil +} + func formatHosts(rules []networking.IngressRule) string { list := []string{} max := 3 diff --git a/pkg/registry/BUILD b/pkg/registry/BUILD index 4bacf2df794..f8a823de687 100644 --- a/pkg/registry/BUILD +++ b/pkg/registry/BUILD @@ -55,6 +55,7 @@ filegroup( "//pkg/registry/core/componentstatus:all-srcs", "//pkg/registry/core/configmap:all-srcs", "//pkg/registry/core/controllerinstance:all-srcs", + "//pkg/registry/core/datapartition:all-srcs", "//pkg/registry/core/endpoint:all-srcs", "//pkg/registry/core/event:all-srcs", "//pkg/registry/core/limitrange:all-srcs", diff --git a/pkg/registry/core/datapartition/BUILD b/pkg/registry/core/datapartition/BUILD new file mode 100644 index 00000000000..54c306206bd --- /dev/null +++ b/pkg/registry/core/datapartition/BUILD @@ -0,0 +1,34 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = ["strategy.go"], + importpath = "k8s.io/kubernetes/pkg/registry/core/datapartition", + visibility = ["//visibility:public"], + deps = [ + "//pkg/api/legacyscheme:go_default_library", + "//pkg/apis/core:go_default_library", + "//pkg/apis/core/validation:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/registry/rest:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/storage/names:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [ + ":package-srcs", + "//pkg/registry/core/datapartition/storage:all-srcs", + ], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/pkg/registry/core/datapartition/storage/BUILD b/pkg/registry/core/datapartition/storage/BUILD new file mode 100644 index 00000000000..ab762885309 --- /dev/null +++ b/pkg/registry/core/datapartition/storage/BUILD @@ -0,0 +1,53 @@ +package(default_visibility = ["//visibility:public"]) + +load( + "@io_bazel_rules_go//go:def.bzl", + "go_library", + "go_test", +) + +go_test( + name = "go_default_test", + srcs = ["storage_test.go"], + embed = [":go_default_library"], + deps = [ + "//pkg/apis/core:go_default_library", + "//pkg/registry/registrytest:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/endpoints/request:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/registry/generic:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/registry/generic/testing:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/registry/rest:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/storage/etcd/testing:go_default_library", + ], +) + +go_library( + name = "go_default_library", + srcs = ["storage.go"], + importpath = "k8s.io/kubernetes/pkg/registry/core/datapartition/storage", + deps = [ + "//pkg/apis/core:go_default_library", + "//pkg/printers:go_default_library", + "//pkg/printers/internalversion:go_default_library", + "//pkg/printers/storage:go_default_library", + "//pkg/registry/core/datapartition:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/registry/generic:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/registry/generic/registry:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/registry/rest:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], +) diff --git a/pkg/registry/core/datapartition/storage/storage.go b/pkg/registry/core/datapartition/storage/storage.go new file mode 100644 index 00000000000..cf15df8ea99 --- /dev/null +++ b/pkg/registry/core/datapartition/storage/storage.go @@ -0,0 +1,64 @@ +/* +Copyright 2020 Authors of Arktos. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package storage + +import ( + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apiserver/pkg/registry/generic" + genericregistry "k8s.io/apiserver/pkg/registry/generic/registry" + "k8s.io/apiserver/pkg/registry/rest" + api "k8s.io/kubernetes/pkg/apis/core" + "k8s.io/kubernetes/pkg/printers" + printersinternal "k8s.io/kubernetes/pkg/printers/internalversion" + printerstorage "k8s.io/kubernetes/pkg/printers/storage" + "k8s.io/kubernetes/pkg/registry/core/datapartition" +) + +// REST implements a RESTStorage for DataPartitionConfig +type REST struct { + *genericregistry.Store +} + +const TTL = 300 // time-to-live in seconds + +// NewREST returns a RESTStorage object that will work with DataPartitionConfig objects. +func NewREST(optsGetter generic.RESTOptionsGetter) *REST { + store := &genericregistry.Store{ + NewFunc: func() runtime.Object { return &api.DataPartitionConfig{} }, + NewListFunc: func() runtime.Object { return &api.DataPartitionConfigList{} }, + DefaultQualifiedResource: api.Resource("datapartitionconfigs"), + + CreateStrategy: datapartition.Strategy, + UpdateStrategy: datapartition.Strategy, + DeleteStrategy: datapartition.Strategy, + + TableConvertor: printerstorage.TableConvertor{TableGenerator: printers.NewTableGenerator().With(printersinternal.AddHandlers)}, + } + options := &generic.StoreOptions{RESTOptions: optsGetter} + if err := store.CompleteWithOptions(options); err != nil { + panic(err) // TODO: Propagate error up + } + return &REST{store} +} + +// Implement ShortNamesProvider +var _ rest.ShortNamesProvider = &REST{} + +// ShortNames implements the ShortNamesProvider interface. Returns a list of short names for a resource. +func (r *REST) ShortNames() []string { + return []string{"datapartition"} +} diff --git a/pkg/registry/core/datapartition/storage/storage_test.go b/pkg/registry/core/datapartition/storage/storage_test.go new file mode 100644 index 00000000000..4d63172b3a5 --- /dev/null +++ b/pkg/registry/core/datapartition/storage/storage_test.go @@ -0,0 +1,119 @@ +/* +Copyright 2020 Authors of Arktos. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package storage + +import ( + "testing" + + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + genericapirequest "k8s.io/apiserver/pkg/endpoints/request" + "k8s.io/apiserver/pkg/registry/generic" + genericregistrytest "k8s.io/apiserver/pkg/registry/generic/testing" + "k8s.io/apiserver/pkg/registry/rest" + etcdtesting "k8s.io/apiserver/pkg/storage/etcd/testing" + + api "k8s.io/kubernetes/pkg/apis/core" + "k8s.io/kubernetes/pkg/registry/registrytest" +) + +func newStorage(t *testing.T) (*REST, *etcdtesting.EtcdTestServer) { + etcdStorage, server := registrytest.NewEtcdStorage(t, "") + restOptions := generic.RESTOptions{StorageConfig: etcdStorage, Decorator: generic.UndecoratedStorage, DeleteCollectionWorkers: 1, ResourcePrefix: "datapartitionconfigs"} + dataPartitionStorage := NewREST(restOptions) + return dataPartitionStorage, server +} + +func validNewDataPartitionConfig() *api.DataPartitionConfig { + return &api.DataPartitionConfig{ + StartTenant: "tenanta", + IsStartTenantValid: true, + EndTenant: "tenantz", + IsEndTenantValid: true, + ServiceGroupId: "0", + ObjectMeta: metav1.ObjectMeta{ + Name: "foo", + }, + } +} + +func TestCreate(t *testing.T) { + storage, server := newStorage(t) + defer server.Terminate(t) + defer storage.DestroyFunc() + test := genericregistrytest.New(t, storage.Store).ClusterScope() + dataPartition := validNewDataPartitionConfig() + test.TestCreate( + // valid + dataPartition, + // invalid + &api.DataPartitionConfig{ + ObjectMeta: metav1.ObjectMeta{Name: "bad value"}, + }, + ) +} + +func TestCreateSetsFields(t *testing.T) { + storage, server := newStorage(t) + defer server.Terminate(t) + defer storage.DestroyFunc() + dataPartition := validNewDataPartitionConfig() + ctx := genericapirequest.NewContext() + _, err := storage.Store.Create(ctx, dataPartition, rest.ValidateAllObjectFunc, &metav1.CreateOptions{}) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + + object, err := storage.Get(ctx, "foo", &metav1.GetOptions{}) + if err != nil { + t.Errorf("unexpected error: %v", err) + } + actual := object.(*api.DataPartitionConfig) + if actual.Name != dataPartition.Name { + t.Errorf("unexpected data partition name: %#v", actual) + } + if actual.StartTenant != dataPartition.StartTenant { + t.Errorf("unexpected start tenant: %#v", actual) + } + if actual.IsStartTenantValid != dataPartition.IsStartTenantValid { + t.Errorf("unexpected isStartTenantValid: %#v", actual) + } + if actual.EndTenant != dataPartition.EndTenant { + t.Errorf("unexpected end tenant: %#v", actual) + } + if actual.IsEndTenantValid != dataPartition.IsEndTenantValid { + t.Errorf("unexpected IsEndTenantValid: %#v", actual) + } + if actual.ServiceGroupId != dataPartition.ServiceGroupId { + t.Errorf("unexpected ServiceGroupId: %#v", actual) + } +} + +func TestGet(t *testing.T) { + storage, server := newStorage(t) + defer server.Terminate(t) + defer storage.Store.DestroyFunc() + test := genericregistrytest.New(t, storage.Store).ClusterScope() + test.TestGet(validNewDataPartitionConfig()) +} + +func TestList(t *testing.T) { + storage, server := newStorage(t) + defer server.Terminate(t) + defer storage.Store.DestroyFunc() + test := genericregistrytest.New(t, storage.Store).ClusterScope() + test.TestList(validNewDataPartitionConfig()) +} diff --git a/pkg/registry/core/datapartition/strategy.go b/pkg/registry/core/datapartition/strategy.go new file mode 100644 index 00000000000..55e8c0e0b4e --- /dev/null +++ b/pkg/registry/core/datapartition/strategy.go @@ -0,0 +1,86 @@ +/* +Copyright 2020 Authors of Arktos. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package datapartition + +import ( + "context" + + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/validation/field" + "k8s.io/apiserver/pkg/registry/rest" + "k8s.io/apiserver/pkg/storage/names" + "k8s.io/kubernetes/pkg/api/legacyscheme" + api "k8s.io/kubernetes/pkg/apis/core" + "k8s.io/kubernetes/pkg/apis/core/validation" +) + +// strategy implements behavior for DataPartitionConfig objects +type strategy struct { + runtime.ObjectTyper + names.NameGenerator +} + +// Strategy is the default logic that applies when creating and updating DataPartitionConfig +// objects via the REST API. +var Strategy = strategy{legacyscheme.Scheme, names.SimpleNameGenerator} + +// Strategy should implement rest.RESTCreateStrategy +var _ rest.RESTCreateStrategy = Strategy + +// Strategy should implement rest.RESTUpdateStrategy +var _ rest.RESTUpdateStrategy = Strategy + +func (strategy) NamespaceScoped() bool { + return false +} + +func (strategy) TenantScoped() bool { + return false +} + +func (strategy) PrepareForCreate(ctx context.Context, obj runtime.Object) { + _ = obj.(*api.DataPartitionConfig) +} + +func (strategy) Validate(ctx context.Context, obj runtime.Object) field.ErrorList { + dataPartitionConfig := obj.(*api.DataPartitionConfig) + + return validation.ValidateDataPartitionConfig(dataPartitionConfig) +} + +// Canonicalize normalizes the object after validation. +func (strategy) Canonicalize(obj runtime.Object) { +} + +func (strategy) AllowCreateOnUpdate() bool { + return false + return false +} + +func (strategy) PrepareForUpdate(ctx context.Context, newObj, oldObj runtime.Object) { + _ = oldObj.(*api.DataPartitionConfig) + _ = newObj.(*api.DataPartitionConfig) +} + +func (strategy) AllowUnconditionalUpdate() bool { + return true +} + +func (strategy) ValidateUpdate(ctx context.Context, obj, old runtime.Object) field.ErrorList { + errorList := validation.ValidateDataPartitionConfig(obj.(*api.DataPartitionConfig)) + return append(errorList, validation.ValidateDataPartitionConfigUpdate(obj.(*api.DataPartitionConfig), old.(*api.DataPartitionConfig))...) +} diff --git a/pkg/registry/core/rest/BUILD b/pkg/registry/core/rest/BUILD index 5b87cdd01f0..6c82a74477b 100644 --- a/pkg/registry/core/rest/BUILD +++ b/pkg/registry/core/rest/BUILD @@ -31,6 +31,7 @@ go_library( "//pkg/registry/core/componentstatus:go_default_library", "//pkg/registry/core/configmap/storage:go_default_library", "//pkg/registry/core/controllerinstance/storage:go_default_library", + "//pkg/registry/core/datapartition/storage:go_default_library", "//pkg/registry/core/endpoint/storage:go_default_library", "//pkg/registry/core/event/storage:go_default_library", "//pkg/registry/core/limitrange/storage:go_default_library", diff --git a/pkg/registry/core/rest/storage_core.go b/pkg/registry/core/rest/storage_core.go index 5ebb77a59fc..4cf24b841b2 100644 --- a/pkg/registry/core/rest/storage_core.go +++ b/pkg/registry/core/rest/storage_core.go @@ -48,6 +48,7 @@ import ( "k8s.io/kubernetes/pkg/registry/core/componentstatus" configmapstore "k8s.io/kubernetes/pkg/registry/core/configmap/storage" controllerstore "k8s.io/kubernetes/pkg/registry/core/controllerinstance/storage" + datapartitionstore "k8s.io/kubernetes/pkg/registry/core/datapartition/storage" endpointsstore "k8s.io/kubernetes/pkg/registry/core/endpoint/storage" eventstore "k8s.io/kubernetes/pkg/registry/core/event/storage" limitrangestore "k8s.io/kubernetes/pkg/registry/core/limitrange/storage" @@ -139,6 +140,8 @@ func (c LegacyRESTStorageProvider) NewLegacyRESTStorage(restOptionsGetter generi endpointsStorage := endpointsstore.NewREST(restOptionsGetter) + dataPartitionStorage := datapartitionstore.NewREST(restOptionsGetter) + nodeStorage, err := nodestore.NewStorage(restOptionsGetter, c.KubeletClientConfig, c.ProxyTransport) if err != nil { return LegacyRESTStorage{}, genericapiserver.APIGroupInfo{}, err @@ -216,7 +219,8 @@ func (c LegacyRESTStorageProvider) NewLegacyRESTStorage(restOptionsGetter generi "services/proxy": serviceRestProxy, "services/status": serviceStatusStorage, - "endpoints": endpointsStorage, + "endpoints": endpointsStorage, + "datapartitionconfigs": dataPartitionStorage, "nodes": nodeStorage.Node, "nodes/status": nodeStorage.Status, diff --git a/staging/src/k8s.io/api/core/v1/generated.pb.go b/staging/src/k8s.io/api/core/v1/generated.pb.go index 76293162682..ef826d9dd60 100644 --- a/staging/src/k8s.io/api/core/v1/generated.pb.go +++ b/staging/src/k8s.io/api/core/v1/generated.pb.go @@ -67,6 +67,8 @@ limitations under the License. ControllerInstanceList CustomAction DaemonEndpoint + DataPartitionConfig + DataPartitionConfigList DownwardAPIProjection DownwardAPIVolumeFile DownwardAPIVolumeSource @@ -464,782 +466,792 @@ func (m *DaemonEndpoint) Reset() { *m = DaemonEndpoint{} } func (*DaemonEndpoint) ProtoMessage() {} func (*DaemonEndpoint) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{42} } +func (m *DataPartitionConfig) Reset() { *m = DataPartitionConfig{} } +func (*DataPartitionConfig) ProtoMessage() {} +func (*DataPartitionConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{43} } + +func (m *DataPartitionConfigList) Reset() { *m = DataPartitionConfigList{} } +func (*DataPartitionConfigList) ProtoMessage() {} +func (*DataPartitionConfigList) Descriptor() ([]byte, []int) { + return fileDescriptorGenerated, []int{44} +} + func (m *DownwardAPIProjection) Reset() { *m = DownwardAPIProjection{} } func (*DownwardAPIProjection) ProtoMessage() {} -func (*DownwardAPIProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{43} } +func (*DownwardAPIProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{45} } func (m *DownwardAPIVolumeFile) Reset() { *m = DownwardAPIVolumeFile{} } func (*DownwardAPIVolumeFile) ProtoMessage() {} -func (*DownwardAPIVolumeFile) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{44} } +func (*DownwardAPIVolumeFile) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{46} } func (m *DownwardAPIVolumeSource) Reset() { *m = DownwardAPIVolumeSource{} } func (*DownwardAPIVolumeSource) ProtoMessage() {} func (*DownwardAPIVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{45} + return fileDescriptorGenerated, []int{47} } func (m *EmptyDirVolumeSource) Reset() { *m = EmptyDirVolumeSource{} } func (*EmptyDirVolumeSource) ProtoMessage() {} -func (*EmptyDirVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{46} } +func (*EmptyDirVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{48} } func (m *EndpointAddress) Reset() { *m = EndpointAddress{} } func (*EndpointAddress) ProtoMessage() {} -func (*EndpointAddress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{47} } +func (*EndpointAddress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{49} } func (m *EndpointPort) Reset() { *m = EndpointPort{} } func (*EndpointPort) ProtoMessage() {} -func (*EndpointPort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{48} } +func (*EndpointPort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{50} } func (m *EndpointSubset) Reset() { *m = EndpointSubset{} } func (*EndpointSubset) ProtoMessage() {} -func (*EndpointSubset) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{49} } +func (*EndpointSubset) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{51} } func (m *Endpoints) Reset() { *m = Endpoints{} } func (*Endpoints) ProtoMessage() {} -func (*Endpoints) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{50} } +func (*Endpoints) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{52} } func (m *EndpointsList) Reset() { *m = EndpointsList{} } func (*EndpointsList) ProtoMessage() {} -func (*EndpointsList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{51} } +func (*EndpointsList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{53} } func (m *EnvFromSource) Reset() { *m = EnvFromSource{} } func (*EnvFromSource) ProtoMessage() {} -func (*EnvFromSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{52} } +func (*EnvFromSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{54} } func (m *EnvVar) Reset() { *m = EnvVar{} } func (*EnvVar) ProtoMessage() {} -func (*EnvVar) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{53} } +func (*EnvVar) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{55} } func (m *EnvVarSource) Reset() { *m = EnvVarSource{} } func (*EnvVarSource) ProtoMessage() {} -func (*EnvVarSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{54} } +func (*EnvVarSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{56} } func (m *Event) Reset() { *m = Event{} } func (*Event) ProtoMessage() {} -func (*Event) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{55} } +func (*Event) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{57} } func (m *EventList) Reset() { *m = EventList{} } func (*EventList) ProtoMessage() {} -func (*EventList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{56} } +func (*EventList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{58} } func (m *EventSeries) Reset() { *m = EventSeries{} } func (*EventSeries) ProtoMessage() {} -func (*EventSeries) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{57} } +func (*EventSeries) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{59} } func (m *EventSource) Reset() { *m = EventSource{} } func (*EventSource) ProtoMessage() {} -func (*EventSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{58} } +func (*EventSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{60} } func (m *ExecAction) Reset() { *m = ExecAction{} } func (*ExecAction) ProtoMessage() {} -func (*ExecAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{59} } +func (*ExecAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{61} } func (m *FCVolumeSource) Reset() { *m = FCVolumeSource{} } func (*FCVolumeSource) ProtoMessage() {} -func (*FCVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{60} } +func (*FCVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{62} } func (m *FlexPersistentVolumeSource) Reset() { *m = FlexPersistentVolumeSource{} } func (*FlexPersistentVolumeSource) ProtoMessage() {} func (*FlexPersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{61} + return fileDescriptorGenerated, []int{63} } func (m *FlexVolumeSource) Reset() { *m = FlexVolumeSource{} } func (*FlexVolumeSource) ProtoMessage() {} -func (*FlexVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{62} } +func (*FlexVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{64} } func (m *FlockerVolumeSource) Reset() { *m = FlockerVolumeSource{} } func (*FlockerVolumeSource) ProtoMessage() {} -func (*FlockerVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{63} } +func (*FlockerVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{65} } func (m *GCEPersistentDiskVolumeSource) Reset() { *m = GCEPersistentDiskVolumeSource{} } func (*GCEPersistentDiskVolumeSource) ProtoMessage() {} func (*GCEPersistentDiskVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{64} + return fileDescriptorGenerated, []int{66} } func (m *GitRepoVolumeSource) Reset() { *m = GitRepoVolumeSource{} } func (*GitRepoVolumeSource) ProtoMessage() {} -func (*GitRepoVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{65} } +func (*GitRepoVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{67} } func (m *GlusterfsPersistentVolumeSource) Reset() { *m = GlusterfsPersistentVolumeSource{} } func (*GlusterfsPersistentVolumeSource) ProtoMessage() {} func (*GlusterfsPersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{66} + return fileDescriptorGenerated, []int{68} } func (m *GlusterfsVolumeSource) Reset() { *m = GlusterfsVolumeSource{} } func (*GlusterfsVolumeSource) ProtoMessage() {} -func (*GlusterfsVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{67} } +func (*GlusterfsVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{69} } func (m *HTTPGetAction) Reset() { *m = HTTPGetAction{} } func (*HTTPGetAction) ProtoMessage() {} -func (*HTTPGetAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{68} } +func (*HTTPGetAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{70} } func (m *HTTPHeader) Reset() { *m = HTTPHeader{} } func (*HTTPHeader) ProtoMessage() {} -func (*HTTPHeader) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{69} } +func (*HTTPHeader) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{71} } func (m *Handler) Reset() { *m = Handler{} } func (*Handler) ProtoMessage() {} -func (*Handler) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{70} } +func (*Handler) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{72} } func (m *HostAlias) Reset() { *m = HostAlias{} } func (*HostAlias) ProtoMessage() {} -func (*HostAlias) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{71} } +func (*HostAlias) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{73} } func (m *HostPathVolumeSource) Reset() { *m = HostPathVolumeSource{} } func (*HostPathVolumeSource) ProtoMessage() {} -func (*HostPathVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{72} } +func (*HostPathVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{74} } func (m *ISCSIPersistentVolumeSource) Reset() { *m = ISCSIPersistentVolumeSource{} } func (*ISCSIPersistentVolumeSource) ProtoMessage() {} func (*ISCSIPersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{73} + return fileDescriptorGenerated, []int{75} } func (m *ISCSIVolumeSource) Reset() { *m = ISCSIVolumeSource{} } func (*ISCSIVolumeSource) ProtoMessage() {} -func (*ISCSIVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{74} } +func (*ISCSIVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{76} } func (m *KeyToPath) Reset() { *m = KeyToPath{} } func (*KeyToPath) ProtoMessage() {} -func (*KeyToPath) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{75} } +func (*KeyToPath) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{77} } func (m *Lifecycle) Reset() { *m = Lifecycle{} } func (*Lifecycle) ProtoMessage() {} -func (*Lifecycle) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{76} } +func (*Lifecycle) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{78} } func (m *LimitRange) Reset() { *m = LimitRange{} } func (*LimitRange) ProtoMessage() {} -func (*LimitRange) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{77} } +func (*LimitRange) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{79} } func (m *LimitRangeItem) Reset() { *m = LimitRangeItem{} } func (*LimitRangeItem) ProtoMessage() {} -func (*LimitRangeItem) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{78} } +func (*LimitRangeItem) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{80} } func (m *LimitRangeList) Reset() { *m = LimitRangeList{} } func (*LimitRangeList) ProtoMessage() {} -func (*LimitRangeList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{79} } +func (*LimitRangeList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{81} } func (m *LimitRangeSpec) Reset() { *m = LimitRangeSpec{} } func (*LimitRangeSpec) ProtoMessage() {} -func (*LimitRangeSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{80} } +func (*LimitRangeSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{82} } func (m *List) Reset() { *m = List{} } func (*List) ProtoMessage() {} -func (*List) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{81} } +func (*List) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{83} } func (m *LoadBalancerIngress) Reset() { *m = LoadBalancerIngress{} } func (*LoadBalancerIngress) ProtoMessage() {} -func (*LoadBalancerIngress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{82} } +func (*LoadBalancerIngress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{84} } func (m *LoadBalancerStatus) Reset() { *m = LoadBalancerStatus{} } func (*LoadBalancerStatus) ProtoMessage() {} -func (*LoadBalancerStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{83} } +func (*LoadBalancerStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{85} } func (m *LocalObjectReference) Reset() { *m = LocalObjectReference{} } func (*LocalObjectReference) ProtoMessage() {} -func (*LocalObjectReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{84} } +func (*LocalObjectReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{86} } func (m *LocalVolumeSource) Reset() { *m = LocalVolumeSource{} } func (*LocalVolumeSource) ProtoMessage() {} -func (*LocalVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{85} } +func (*LocalVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{87} } func (m *NFSVolumeSource) Reset() { *m = NFSVolumeSource{} } func (*NFSVolumeSource) ProtoMessage() {} -func (*NFSVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{86} } +func (*NFSVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{88} } func (m *NICStatus) Reset() { *m = NICStatus{} } func (*NICStatus) ProtoMessage() {} -func (*NICStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{87} } +func (*NICStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{89} } func (m *Namespace) Reset() { *m = Namespace{} } func (*Namespace) ProtoMessage() {} -func (*Namespace) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{88} } +func (*Namespace) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{90} } func (m *NamespaceList) Reset() { *m = NamespaceList{} } func (*NamespaceList) ProtoMessage() {} -func (*NamespaceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{89} } +func (*NamespaceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{91} } func (m *NamespaceSpec) Reset() { *m = NamespaceSpec{} } func (*NamespaceSpec) ProtoMessage() {} -func (*NamespaceSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{90} } +func (*NamespaceSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{92} } func (m *NamespaceStatus) Reset() { *m = NamespaceStatus{} } func (*NamespaceStatus) ProtoMessage() {} -func (*NamespaceStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{91} } +func (*NamespaceStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{93} } func (m *Nic) Reset() { *m = Nic{} } func (*Nic) ProtoMessage() {} -func (*Nic) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{92} } +func (*Nic) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{94} } func (m *Node) Reset() { *m = Node{} } func (*Node) ProtoMessage() {} -func (*Node) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{93} } +func (*Node) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{95} } func (m *NodeAddress) Reset() { *m = NodeAddress{} } func (*NodeAddress) ProtoMessage() {} -func (*NodeAddress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{94} } +func (*NodeAddress) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{96} } func (m *NodeAffinity) Reset() { *m = NodeAffinity{} } func (*NodeAffinity) ProtoMessage() {} -func (*NodeAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{95} } +func (*NodeAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{97} } func (m *NodeCondition) Reset() { *m = NodeCondition{} } func (*NodeCondition) ProtoMessage() {} -func (*NodeCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{96} } +func (*NodeCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{98} } func (m *NodeConfigSource) Reset() { *m = NodeConfigSource{} } func (*NodeConfigSource) ProtoMessage() {} -func (*NodeConfigSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{97} } +func (*NodeConfigSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{99} } func (m *NodeConfigStatus) Reset() { *m = NodeConfigStatus{} } func (*NodeConfigStatus) ProtoMessage() {} -func (*NodeConfigStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{98} } +func (*NodeConfigStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{100} } func (m *NodeDaemonEndpoints) Reset() { *m = NodeDaemonEndpoints{} } func (*NodeDaemonEndpoints) ProtoMessage() {} -func (*NodeDaemonEndpoints) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{99} } +func (*NodeDaemonEndpoints) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{101} } func (m *NodeList) Reset() { *m = NodeList{} } func (*NodeList) ProtoMessage() {} -func (*NodeList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{100} } +func (*NodeList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{102} } func (m *NodeProxyOptions) Reset() { *m = NodeProxyOptions{} } func (*NodeProxyOptions) ProtoMessage() {} -func (*NodeProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{101} } +func (*NodeProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{103} } func (m *NodeResources) Reset() { *m = NodeResources{} } func (*NodeResources) ProtoMessage() {} -func (*NodeResources) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{102} } +func (*NodeResources) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{104} } func (m *NodeSelector) Reset() { *m = NodeSelector{} } func (*NodeSelector) ProtoMessage() {} -func (*NodeSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{103} } +func (*NodeSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{105} } func (m *NodeSelectorRequirement) Reset() { *m = NodeSelectorRequirement{} } func (*NodeSelectorRequirement) ProtoMessage() {} func (*NodeSelectorRequirement) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{104} + return fileDescriptorGenerated, []int{106} } func (m *NodeSelectorTerm) Reset() { *m = NodeSelectorTerm{} } func (*NodeSelectorTerm) ProtoMessage() {} -func (*NodeSelectorTerm) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{105} } +func (*NodeSelectorTerm) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{107} } func (m *NodeSpec) Reset() { *m = NodeSpec{} } func (*NodeSpec) ProtoMessage() {} -func (*NodeSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{106} } +func (*NodeSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{108} } func (m *NodeStatus) Reset() { *m = NodeStatus{} } func (*NodeStatus) ProtoMessage() {} -func (*NodeStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{107} } +func (*NodeStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{109} } func (m *NodeSystemInfo) Reset() { *m = NodeSystemInfo{} } func (*NodeSystemInfo) ProtoMessage() {} -func (*NodeSystemInfo) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{108} } +func (*NodeSystemInfo) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{110} } func (m *ObjectFieldSelector) Reset() { *m = ObjectFieldSelector{} } func (*ObjectFieldSelector) ProtoMessage() {} -func (*ObjectFieldSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{109} } +func (*ObjectFieldSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{111} } func (m *ObjectReference) Reset() { *m = ObjectReference{} } func (*ObjectReference) ProtoMessage() {} -func (*ObjectReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{110} } +func (*ObjectReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{112} } func (m *PersistentVolume) Reset() { *m = PersistentVolume{} } func (*PersistentVolume) ProtoMessage() {} -func (*PersistentVolume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{111} } +func (*PersistentVolume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{113} } func (m *PersistentVolumeClaim) Reset() { *m = PersistentVolumeClaim{} } func (*PersistentVolumeClaim) ProtoMessage() {} -func (*PersistentVolumeClaim) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{112} } +func (*PersistentVolumeClaim) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{114} } func (m *PersistentVolumeClaimCondition) Reset() { *m = PersistentVolumeClaimCondition{} } func (*PersistentVolumeClaimCondition) ProtoMessage() {} func (*PersistentVolumeClaimCondition) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{113} + return fileDescriptorGenerated, []int{115} } func (m *PersistentVolumeClaimList) Reset() { *m = PersistentVolumeClaimList{} } func (*PersistentVolumeClaimList) ProtoMessage() {} func (*PersistentVolumeClaimList) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{114} + return fileDescriptorGenerated, []int{116} } func (m *PersistentVolumeClaimSpec) Reset() { *m = PersistentVolumeClaimSpec{} } func (*PersistentVolumeClaimSpec) ProtoMessage() {} func (*PersistentVolumeClaimSpec) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{115} + return fileDescriptorGenerated, []int{117} } func (m *PersistentVolumeClaimStatus) Reset() { *m = PersistentVolumeClaimStatus{} } func (*PersistentVolumeClaimStatus) ProtoMessage() {} func (*PersistentVolumeClaimStatus) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{116} + return fileDescriptorGenerated, []int{118} } func (m *PersistentVolumeClaimVolumeSource) Reset() { *m = PersistentVolumeClaimVolumeSource{} } func (*PersistentVolumeClaimVolumeSource) ProtoMessage() {} func (*PersistentVolumeClaimVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{117} + return fileDescriptorGenerated, []int{119} } func (m *PersistentVolumeList) Reset() { *m = PersistentVolumeList{} } func (*PersistentVolumeList) ProtoMessage() {} -func (*PersistentVolumeList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{118} } +func (*PersistentVolumeList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{120} } func (m *PersistentVolumeSource) Reset() { *m = PersistentVolumeSource{} } func (*PersistentVolumeSource) ProtoMessage() {} func (*PersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{119} + return fileDescriptorGenerated, []int{121} } func (m *PersistentVolumeSpec) Reset() { *m = PersistentVolumeSpec{} } func (*PersistentVolumeSpec) ProtoMessage() {} -func (*PersistentVolumeSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{120} } +func (*PersistentVolumeSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{122} } func (m *PersistentVolumeStatus) Reset() { *m = PersistentVolumeStatus{} } func (*PersistentVolumeStatus) ProtoMessage() {} func (*PersistentVolumeStatus) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{121} + return fileDescriptorGenerated, []int{123} } func (m *PhotonPersistentDiskVolumeSource) Reset() { *m = PhotonPersistentDiskVolumeSource{} } func (*PhotonPersistentDiskVolumeSource) ProtoMessage() {} func (*PhotonPersistentDiskVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{122} + return fileDescriptorGenerated, []int{124} } func (m *Pod) Reset() { *m = Pod{} } func (*Pod) ProtoMessage() {} -func (*Pod) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{123} } +func (*Pod) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{125} } func (m *PodAffinity) Reset() { *m = PodAffinity{} } func (*PodAffinity) ProtoMessage() {} -func (*PodAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{124} } +func (*PodAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{126} } func (m *PodAffinityTerm) Reset() { *m = PodAffinityTerm{} } func (*PodAffinityTerm) ProtoMessage() {} -func (*PodAffinityTerm) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{125} } +func (*PodAffinityTerm) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{127} } func (m *PodAntiAffinity) Reset() { *m = PodAntiAffinity{} } func (*PodAntiAffinity) ProtoMessage() {} -func (*PodAntiAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{126} } +func (*PodAntiAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{128} } func (m *PodAttachOptions) Reset() { *m = PodAttachOptions{} } func (*PodAttachOptions) ProtoMessage() {} -func (*PodAttachOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{127} } +func (*PodAttachOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{129} } func (m *PodCondition) Reset() { *m = PodCondition{} } func (*PodCondition) ProtoMessage() {} -func (*PodCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{128} } +func (*PodCondition) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{130} } func (m *PodDNSConfig) Reset() { *m = PodDNSConfig{} } func (*PodDNSConfig) ProtoMessage() {} -func (*PodDNSConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{129} } +func (*PodDNSConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{131} } func (m *PodDNSConfigOption) Reset() { *m = PodDNSConfigOption{} } func (*PodDNSConfigOption) ProtoMessage() {} -func (*PodDNSConfigOption) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{130} } +func (*PodDNSConfigOption) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{132} } func (m *PodExecOptions) Reset() { *m = PodExecOptions{} } func (*PodExecOptions) ProtoMessage() {} -func (*PodExecOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{131} } +func (*PodExecOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{133} } func (m *PodList) Reset() { *m = PodList{} } func (*PodList) ProtoMessage() {} -func (*PodList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{132} } +func (*PodList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{134} } func (m *PodLogOptions) Reset() { *m = PodLogOptions{} } func (*PodLogOptions) ProtoMessage() {} -func (*PodLogOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{133} } +func (*PodLogOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{135} } func (m *PodPortForwardOptions) Reset() { *m = PodPortForwardOptions{} } func (*PodPortForwardOptions) ProtoMessage() {} -func (*PodPortForwardOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{134} } +func (*PodPortForwardOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{136} } func (m *PodProxyOptions) Reset() { *m = PodProxyOptions{} } func (*PodProxyOptions) ProtoMessage() {} -func (*PodProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{135} } +func (*PodProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{137} } func (m *PodReadinessGate) Reset() { *m = PodReadinessGate{} } func (*PodReadinessGate) ProtoMessage() {} -func (*PodReadinessGate) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{136} } +func (*PodReadinessGate) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{138} } func (m *PodSecurityContext) Reset() { *m = PodSecurityContext{} } func (*PodSecurityContext) ProtoMessage() {} -func (*PodSecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{137} } +func (*PodSecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{139} } func (m *PodSignature) Reset() { *m = PodSignature{} } func (*PodSignature) ProtoMessage() {} -func (*PodSignature) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{138} } +func (*PodSignature) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{140} } func (m *PodSpec) Reset() { *m = PodSpec{} } func (*PodSpec) ProtoMessage() {} -func (*PodSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{139} } +func (*PodSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{141} } func (m *PodStatus) Reset() { *m = PodStatus{} } func (*PodStatus) ProtoMessage() {} -func (*PodStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{140} } +func (*PodStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{142} } func (m *PodStatusResult) Reset() { *m = PodStatusResult{} } func (*PodStatusResult) ProtoMessage() {} -func (*PodStatusResult) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{141} } +func (*PodStatusResult) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{143} } func (m *PodTemplate) Reset() { *m = PodTemplate{} } func (*PodTemplate) ProtoMessage() {} -func (*PodTemplate) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{142} } +func (*PodTemplate) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{144} } func (m *PodTemplateList) Reset() { *m = PodTemplateList{} } func (*PodTemplateList) ProtoMessage() {} -func (*PodTemplateList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{143} } +func (*PodTemplateList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{145} } func (m *PodTemplateSpec) Reset() { *m = PodTemplateSpec{} } func (*PodTemplateSpec) ProtoMessage() {} -func (*PodTemplateSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{144} } +func (*PodTemplateSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{146} } func (m *PortworxVolumeSource) Reset() { *m = PortworxVolumeSource{} } func (*PortworxVolumeSource) ProtoMessage() {} -func (*PortworxVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{145} } +func (*PortworxVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{147} } func (m *Preconditions) Reset() { *m = Preconditions{} } func (*Preconditions) ProtoMessage() {} -func (*Preconditions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{146} } +func (*Preconditions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{148} } func (m *PreferAvoidPodsEntry) Reset() { *m = PreferAvoidPodsEntry{} } func (*PreferAvoidPodsEntry) ProtoMessage() {} -func (*PreferAvoidPodsEntry) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{147} } +func (*PreferAvoidPodsEntry) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{149} } func (m *PreferredSchedulingTerm) Reset() { *m = PreferredSchedulingTerm{} } func (*PreferredSchedulingTerm) ProtoMessage() {} func (*PreferredSchedulingTerm) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{148} + return fileDescriptorGenerated, []int{150} } func (m *Probe) Reset() { *m = Probe{} } func (*Probe) ProtoMessage() {} -func (*Probe) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{149} } +func (*Probe) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{151} } func (m *ProjectedVolumeSource) Reset() { *m = ProjectedVolumeSource{} } func (*ProjectedVolumeSource) ProtoMessage() {} -func (*ProjectedVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{150} } +func (*ProjectedVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{152} } func (m *QuobyteVolumeSource) Reset() { *m = QuobyteVolumeSource{} } func (*QuobyteVolumeSource) ProtoMessage() {} -func (*QuobyteVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{151} } +func (*QuobyteVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{153} } func (m *RBDPersistentVolumeSource) Reset() { *m = RBDPersistentVolumeSource{} } func (*RBDPersistentVolumeSource) ProtoMessage() {} func (*RBDPersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{152} + return fileDescriptorGenerated, []int{154} } func (m *RBDVolumeSource) Reset() { *m = RBDVolumeSource{} } func (*RBDVolumeSource) ProtoMessage() {} -func (*RBDVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{153} } +func (*RBDVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{155} } func (m *RangeAllocation) Reset() { *m = RangeAllocation{} } func (*RangeAllocation) ProtoMessage() {} -func (*RangeAllocation) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{154} } +func (*RangeAllocation) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{156} } func (m *RebootAction) Reset() { *m = RebootAction{} } func (*RebootAction) ProtoMessage() {} -func (*RebootAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{155} } +func (*RebootAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{157} } func (m *RebootParams) Reset() { *m = RebootParams{} } func (*RebootParams) ProtoMessage() {} -func (*RebootParams) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{156} } +func (*RebootParams) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{158} } func (m *RebootStatus) Reset() { *m = RebootStatus{} } func (*RebootStatus) ProtoMessage() {} -func (*RebootStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{157} } +func (*RebootStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{159} } func (m *ReplicationController) Reset() { *m = ReplicationController{} } func (*ReplicationController) ProtoMessage() {} -func (*ReplicationController) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{158} } +func (*ReplicationController) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{160} } func (m *ReplicationControllerCondition) Reset() { *m = ReplicationControllerCondition{} } func (*ReplicationControllerCondition) ProtoMessage() {} func (*ReplicationControllerCondition) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{159} + return fileDescriptorGenerated, []int{161} } func (m *ReplicationControllerList) Reset() { *m = ReplicationControllerList{} } func (*ReplicationControllerList) ProtoMessage() {} func (*ReplicationControllerList) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{160} + return fileDescriptorGenerated, []int{162} } func (m *ReplicationControllerSpec) Reset() { *m = ReplicationControllerSpec{} } func (*ReplicationControllerSpec) ProtoMessage() {} func (*ReplicationControllerSpec) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{161} + return fileDescriptorGenerated, []int{163} } func (m *ReplicationControllerStatus) Reset() { *m = ReplicationControllerStatus{} } func (*ReplicationControllerStatus) ProtoMessage() {} func (*ReplicationControllerStatus) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{162} + return fileDescriptorGenerated, []int{164} } func (m *ResourceFieldSelector) Reset() { *m = ResourceFieldSelector{} } func (*ResourceFieldSelector) ProtoMessage() {} -func (*ResourceFieldSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{163} } +func (*ResourceFieldSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{165} } func (m *ResourceQuota) Reset() { *m = ResourceQuota{} } func (*ResourceQuota) ProtoMessage() {} -func (*ResourceQuota) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{164} } +func (*ResourceQuota) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{166} } func (m *ResourceQuotaList) Reset() { *m = ResourceQuotaList{} } func (*ResourceQuotaList) ProtoMessage() {} -func (*ResourceQuotaList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{165} } +func (*ResourceQuotaList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{167} } func (m *ResourceQuotaSpec) Reset() { *m = ResourceQuotaSpec{} } func (*ResourceQuotaSpec) ProtoMessage() {} -func (*ResourceQuotaSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{166} } +func (*ResourceQuotaSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{168} } func (m *ResourceQuotaStatus) Reset() { *m = ResourceQuotaStatus{} } func (*ResourceQuotaStatus) ProtoMessage() {} -func (*ResourceQuotaStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{167} } +func (*ResourceQuotaStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{169} } func (m *ResourceRequirements) Reset() { *m = ResourceRequirements{} } func (*ResourceRequirements) ProtoMessage() {} -func (*ResourceRequirements) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{168} } +func (*ResourceRequirements) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{170} } func (m *RestoreAction) Reset() { *m = RestoreAction{} } func (*RestoreAction) ProtoMessage() {} -func (*RestoreAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{169} } +func (*RestoreAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{171} } func (m *RestoreParams) Reset() { *m = RestoreParams{} } func (*RestoreParams) ProtoMessage() {} -func (*RestoreParams) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{170} } +func (*RestoreParams) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{172} } func (m *RestoreStatus) Reset() { *m = RestoreStatus{} } func (*RestoreStatus) ProtoMessage() {} -func (*RestoreStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{171} } +func (*RestoreStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{173} } func (m *SELinuxOptions) Reset() { *m = SELinuxOptions{} } func (*SELinuxOptions) ProtoMessage() {} -func (*SELinuxOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{172} } +func (*SELinuxOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{174} } func (m *ScaleIOPersistentVolumeSource) Reset() { *m = ScaleIOPersistentVolumeSource{} } func (*ScaleIOPersistentVolumeSource) ProtoMessage() {} func (*ScaleIOPersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{173} + return fileDescriptorGenerated, []int{175} } func (m *ScaleIOVolumeSource) Reset() { *m = ScaleIOVolumeSource{} } func (*ScaleIOVolumeSource) ProtoMessage() {} -func (*ScaleIOVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{174} } +func (*ScaleIOVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{176} } func (m *ScopeSelector) Reset() { *m = ScopeSelector{} } func (*ScopeSelector) ProtoMessage() {} -func (*ScopeSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{175} } +func (*ScopeSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{177} } func (m *ScopedResourceSelectorRequirement) Reset() { *m = ScopedResourceSelectorRequirement{} } func (*ScopedResourceSelectorRequirement) ProtoMessage() {} func (*ScopedResourceSelectorRequirement) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{176} + return fileDescriptorGenerated, []int{178} } func (m *Secret) Reset() { *m = Secret{} } func (*Secret) ProtoMessage() {} -func (*Secret) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{177} } +func (*Secret) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{179} } func (m *SecretEnvSource) Reset() { *m = SecretEnvSource{} } func (*SecretEnvSource) ProtoMessage() {} -func (*SecretEnvSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{178} } +func (*SecretEnvSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{180} } func (m *SecretKeySelector) Reset() { *m = SecretKeySelector{} } func (*SecretKeySelector) ProtoMessage() {} -func (*SecretKeySelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{179} } +func (*SecretKeySelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{181} } func (m *SecretList) Reset() { *m = SecretList{} } func (*SecretList) ProtoMessage() {} -func (*SecretList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{180} } +func (*SecretList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{182} } func (m *SecretProjection) Reset() { *m = SecretProjection{} } func (*SecretProjection) ProtoMessage() {} -func (*SecretProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{181} } +func (*SecretProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{183} } func (m *SecretReference) Reset() { *m = SecretReference{} } func (*SecretReference) ProtoMessage() {} -func (*SecretReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{182} } +func (*SecretReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{184} } func (m *SecretVolumeSource) Reset() { *m = SecretVolumeSource{} } func (*SecretVolumeSource) ProtoMessage() {} -func (*SecretVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{183} } +func (*SecretVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{185} } func (m *SecurityContext) Reset() { *m = SecurityContext{} } func (*SecurityContext) ProtoMessage() {} -func (*SecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{184} } +func (*SecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{186} } func (m *SerializedReference) Reset() { *m = SerializedReference{} } func (*SerializedReference) ProtoMessage() {} -func (*SerializedReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{185} } +func (*SerializedReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{187} } func (m *Service) Reset() { *m = Service{} } func (*Service) ProtoMessage() {} -func (*Service) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{186} } +func (*Service) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{188} } func (m *ServiceAccount) Reset() { *m = ServiceAccount{} } func (*ServiceAccount) ProtoMessage() {} -func (*ServiceAccount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{187} } +func (*ServiceAccount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{189} } func (m *ServiceAccountList) Reset() { *m = ServiceAccountList{} } func (*ServiceAccountList) ProtoMessage() {} -func (*ServiceAccountList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{188} } +func (*ServiceAccountList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{190} } func (m *ServiceAccountTokenProjection) Reset() { *m = ServiceAccountTokenProjection{} } func (*ServiceAccountTokenProjection) ProtoMessage() {} func (*ServiceAccountTokenProjection) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{189} + return fileDescriptorGenerated, []int{191} } func (m *ServiceList) Reset() { *m = ServiceList{} } func (*ServiceList) ProtoMessage() {} -func (*ServiceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{190} } +func (*ServiceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{192} } func (m *ServicePort) Reset() { *m = ServicePort{} } func (*ServicePort) ProtoMessage() {} -func (*ServicePort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{191} } +func (*ServicePort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{193} } func (m *ServiceProxyOptions) Reset() { *m = ServiceProxyOptions{} } func (*ServiceProxyOptions) ProtoMessage() {} -func (*ServiceProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{192} } +func (*ServiceProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{194} } func (m *ServiceSpec) Reset() { *m = ServiceSpec{} } func (*ServiceSpec) ProtoMessage() {} -func (*ServiceSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{193} } +func (*ServiceSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{195} } func (m *ServiceStatus) Reset() { *m = ServiceStatus{} } func (*ServiceStatus) ProtoMessage() {} -func (*ServiceStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{194} } +func (*ServiceStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{196} } func (m *SessionAffinityConfig) Reset() { *m = SessionAffinityConfig{} } func (*SessionAffinityConfig) ProtoMessage() {} -func (*SessionAffinityConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{195} } +func (*SessionAffinityConfig) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{197} } func (m *SnapshotAction) Reset() { *m = SnapshotAction{} } func (*SnapshotAction) ProtoMessage() {} -func (*SnapshotAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{196} } +func (*SnapshotAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{198} } func (m *SnapshotParams) Reset() { *m = SnapshotParams{} } func (*SnapshotParams) ProtoMessage() {} -func (*SnapshotParams) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{197} } +func (*SnapshotParams) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{199} } func (m *SnapshotStatus) Reset() { *m = SnapshotStatus{} } func (*SnapshotStatus) ProtoMessage() {} -func (*SnapshotStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{198} } +func (*SnapshotStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{200} } func (m *StorageOSPersistentVolumeSource) Reset() { *m = StorageOSPersistentVolumeSource{} } func (*StorageOSPersistentVolumeSource) ProtoMessage() {} func (*StorageOSPersistentVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{199} + return fileDescriptorGenerated, []int{201} } func (m *StorageOSVolumeSource) Reset() { *m = StorageOSVolumeSource{} } func (*StorageOSVolumeSource) ProtoMessage() {} -func (*StorageOSVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{200} } +func (*StorageOSVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{202} } func (m *Sysctl) Reset() { *m = Sysctl{} } func (*Sysctl) ProtoMessage() {} -func (*Sysctl) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{201} } +func (*Sysctl) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{203} } func (m *TCPSocketAction) Reset() { *m = TCPSocketAction{} } func (*TCPSocketAction) ProtoMessage() {} -func (*TCPSocketAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{202} } +func (*TCPSocketAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{204} } func (m *Taint) Reset() { *m = Taint{} } func (*Taint) ProtoMessage() {} -func (*Taint) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{203} } +func (*Taint) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{205} } func (m *Tenant) Reset() { *m = Tenant{} } func (*Tenant) ProtoMessage() {} -func (*Tenant) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{204} } +func (*Tenant) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{206} } func (m *TenantList) Reset() { *m = TenantList{} } func (*TenantList) ProtoMessage() {} -func (*TenantList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{205} } +func (*TenantList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{207} } func (m *TenantSpec) Reset() { *m = TenantSpec{} } func (*TenantSpec) ProtoMessage() {} -func (*TenantSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{206} } +func (*TenantSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{208} } func (m *TenantStatus) Reset() { *m = TenantStatus{} } func (*TenantStatus) ProtoMessage() {} -func (*TenantStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{207} } +func (*TenantStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{209} } func (m *Toleration) Reset() { *m = Toleration{} } func (*Toleration) ProtoMessage() {} -func (*Toleration) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{208} } +func (*Toleration) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{210} } func (m *TopologySelectorLabelRequirement) Reset() { *m = TopologySelectorLabelRequirement{} } func (*TopologySelectorLabelRequirement) ProtoMessage() {} func (*TopologySelectorLabelRequirement) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{209} + return fileDescriptorGenerated, []int{211} } func (m *TopologySelectorTerm) Reset() { *m = TopologySelectorTerm{} } func (*TopologySelectorTerm) ProtoMessage() {} -func (*TopologySelectorTerm) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{210} } +func (*TopologySelectorTerm) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{212} } func (m *TypedLocalObjectReference) Reset() { *m = TypedLocalObjectReference{} } func (*TypedLocalObjectReference) ProtoMessage() {} func (*TypedLocalObjectReference) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{211} + return fileDescriptorGenerated, []int{213} } func (m *VirtualMachine) Reset() { *m = VirtualMachine{} } func (*VirtualMachine) ProtoMessage() {} -func (*VirtualMachine) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{212} } +func (*VirtualMachine) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{214} } func (m *VirtualMachineStatus) Reset() { *m = VirtualMachineStatus{} } func (*VirtualMachineStatus) ProtoMessage() {} -func (*VirtualMachineStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{213} } +func (*VirtualMachineStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{215} } func (m *Volume) Reset() { *m = Volume{} } func (*Volume) ProtoMessage() {} -func (*Volume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{214} } +func (*Volume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{216} } func (m *VolumeDevice) Reset() { *m = VolumeDevice{} } func (*VolumeDevice) ProtoMessage() {} -func (*VolumeDevice) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{215} } +func (*VolumeDevice) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{217} } func (m *VolumeMount) Reset() { *m = VolumeMount{} } func (*VolumeMount) ProtoMessage() {} -func (*VolumeMount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{216} } +func (*VolumeMount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{218} } func (m *VolumeNodeAffinity) Reset() { *m = VolumeNodeAffinity{} } func (*VolumeNodeAffinity) ProtoMessage() {} -func (*VolumeNodeAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{217} } +func (*VolumeNodeAffinity) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{219} } func (m *VolumeProjection) Reset() { *m = VolumeProjection{} } func (*VolumeProjection) ProtoMessage() {} -func (*VolumeProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{218} } +func (*VolumeProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{220} } func (m *VolumeSource) Reset() { *m = VolumeSource{} } func (*VolumeSource) ProtoMessage() {} -func (*VolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{219} } +func (*VolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{221} } func (m *VsphereVirtualDiskVolumeSource) Reset() { *m = VsphereVirtualDiskVolumeSource{} } func (*VsphereVirtualDiskVolumeSource) ProtoMessage() {} func (*VsphereVirtualDiskVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{220} + return fileDescriptorGenerated, []int{222} } func (m *WeightedPodAffinityTerm) Reset() { *m = WeightedPodAffinityTerm{} } func (*WeightedPodAffinityTerm) ProtoMessage() {} func (*WeightedPodAffinityTerm) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{221} + return fileDescriptorGenerated, []int{223} } func (m *WindowsSecurityContextOptions) Reset() { *m = WindowsSecurityContextOptions{} } func (*WindowsSecurityContextOptions) ProtoMessage() {} func (*WindowsSecurityContextOptions) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{222} + return fileDescriptorGenerated, []int{224} } func init() { @@ -1286,6 +1298,8 @@ func init() { proto.RegisterType((*ControllerInstanceList)(nil), "k8s.io.api.core.v1.ControllerInstanceList") proto.RegisterType((*CustomAction)(nil), "k8s.io.api.core.v1.CustomAction") proto.RegisterType((*DaemonEndpoint)(nil), "k8s.io.api.core.v1.DaemonEndpoint") + proto.RegisterType((*DataPartitionConfig)(nil), "k8s.io.api.core.v1.DataPartitionConfig") + proto.RegisterType((*DataPartitionConfigList)(nil), "k8s.io.api.core.v1.DataPartitionConfigList") proto.RegisterType((*DownwardAPIProjection)(nil), "k8s.io.api.core.v1.DownwardAPIProjection") proto.RegisterType((*DownwardAPIVolumeFile)(nil), "k8s.io.api.core.v1.DownwardAPIVolumeFile") proto.RegisterType((*DownwardAPIVolumeSource)(nil), "k8s.io.api.core.v1.DownwardAPIVolumeSource") @@ -3580,6 +3594,98 @@ func (m *DaemonEndpoint) MarshalTo(dAtA []byte) (int, error) { return i, nil } +func (m *DataPartitionConfig) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DataPartitionConfig) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) + n53, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n53 + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.StartTenant))) + i += copy(dAtA[i:], m.StartTenant) + dAtA[i] = 0x18 + i++ + if m.IsStartTenantValid { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i++ + dAtA[i] = 0x22 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.EndTenant))) + i += copy(dAtA[i:], m.EndTenant) + dAtA[i] = 0x28 + i++ + if m.IsEndTenantValid { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i++ + dAtA[i] = 0x32 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ServiceGroupId))) + i += copy(dAtA[i:], m.ServiceGroupId) + return i, nil +} + +func (m *DataPartitionConfigList) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalTo(dAtA) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DataPartitionConfigList) MarshalTo(dAtA []byte) (int, error) { + var i int + _ = i + var l int + _ = l + dAtA[i] = 0xa + i++ + i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) + n54, err := m.ListMeta.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n54 + if len(m.Items) > 0 { + for _, msg := range m.Items { + dAtA[i] = 0x12 + i++ + i = encodeVarintGenerated(dAtA, i, uint64(msg.Size())) + n, err := msg.MarshalTo(dAtA[i:]) + if err != nil { + return 0, err + } + i += n + } + } + return i, nil +} + func (m *DownwardAPIProjection) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -3633,21 +3739,21 @@ func (m *DownwardAPIVolumeFile) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.FieldRef.Size())) - n53, err := m.FieldRef.MarshalTo(dAtA[i:]) + n55, err := m.FieldRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n53 + i += n55 } if m.ResourceFieldRef != nil { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ResourceFieldRef.Size())) - n54, err := m.ResourceFieldRef.MarshalTo(dAtA[i:]) + n56, err := m.ResourceFieldRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n54 + i += n56 } if m.Mode != nil { dAtA[i] = 0x20 @@ -3715,11 +3821,11 @@ func (m *EmptyDirVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SizeLimit.Size())) - n55, err := m.SizeLimit.MarshalTo(dAtA[i:]) + n57, err := m.SizeLimit.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n55 + i += n57 } return i, nil } @@ -3747,11 +3853,11 @@ func (m *EndpointAddress) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.TargetRef.Size())) - n56, err := m.TargetRef.MarshalTo(dAtA[i:]) + n58, err := m.TargetRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n56 + i += n58 } dAtA[i] = 0x1a i++ @@ -3867,11 +3973,11 @@ func (m *Endpoints) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n57, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n59, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n57 + i += n59 if len(m.Subsets) > 0 { for _, msg := range m.Subsets { dAtA[i] = 0x12 @@ -3905,11 +4011,11 @@ func (m *EndpointsList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n58, err := m.ListMeta.MarshalTo(dAtA[i:]) + n60, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n58 + i += n60 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -3948,21 +4054,21 @@ func (m *EnvFromSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ConfigMapRef.Size())) - n59, err := m.ConfigMapRef.MarshalTo(dAtA[i:]) + n61, err := m.ConfigMapRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n59 + i += n61 } if m.SecretRef != nil { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n60, err := m.SecretRef.MarshalTo(dAtA[i:]) + n62, err := m.SecretRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n60 + i += n62 } return i, nil } @@ -3994,11 +4100,11 @@ func (m *EnvVar) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ValueFrom.Size())) - n61, err := m.ValueFrom.MarshalTo(dAtA[i:]) + n63, err := m.ValueFrom.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n61 + i += n63 } return i, nil } @@ -4022,41 +4128,41 @@ func (m *EnvVarSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.FieldRef.Size())) - n62, err := m.FieldRef.MarshalTo(dAtA[i:]) + n64, err := m.FieldRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n62 + i += n64 } if m.ResourceFieldRef != nil { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ResourceFieldRef.Size())) - n63, err := m.ResourceFieldRef.MarshalTo(dAtA[i:]) + n65, err := m.ResourceFieldRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n63 + i += n65 } if m.ConfigMapKeyRef != nil { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ConfigMapKeyRef.Size())) - n64, err := m.ConfigMapKeyRef.MarshalTo(dAtA[i:]) + n66, err := m.ConfigMapKeyRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n64 + i += n66 } if m.SecretKeyRef != nil { dAtA[i] = 0x22 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecretKeyRef.Size())) - n65, err := m.SecretKeyRef.MarshalTo(dAtA[i:]) + n67, err := m.SecretKeyRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n65 + i += n67 } return i, nil } @@ -4079,19 +4185,19 @@ func (m *Event) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n66, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n68, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n66 + i += n68 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.InvolvedObject.Size())) - n67, err := m.InvolvedObject.MarshalTo(dAtA[i:]) + n69, err := m.InvolvedObject.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n67 + i += n69 dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) @@ -4103,27 +4209,27 @@ func (m *Event) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Source.Size())) - n68, err := m.Source.MarshalTo(dAtA[i:]) + n70, err := m.Source.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n68 + i += n70 dAtA[i] = 0x32 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.FirstTimestamp.Size())) - n69, err := m.FirstTimestamp.MarshalTo(dAtA[i:]) + n71, err := m.FirstTimestamp.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n69 + i += n71 dAtA[i] = 0x3a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LastTimestamp.Size())) - n70, err := m.LastTimestamp.MarshalTo(dAtA[i:]) + n72, err := m.LastTimestamp.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n70 + i += n72 dAtA[i] = 0x40 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Count)) @@ -4134,20 +4240,20 @@ func (m *Event) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x52 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.EventTime.Size())) - n71, err := m.EventTime.MarshalTo(dAtA[i:]) + n73, err := m.EventTime.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n71 + i += n73 if m.Series != nil { dAtA[i] = 0x5a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Series.Size())) - n72, err := m.Series.MarshalTo(dAtA[i:]) + n74, err := m.Series.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n72 + i += n74 } dAtA[i] = 0x62 i++ @@ -4157,11 +4263,11 @@ func (m *Event) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x6a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Related.Size())) - n73, err := m.Related.MarshalTo(dAtA[i:]) + n75, err := m.Related.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n73 + i += n75 } dAtA[i] = 0x72 i++ @@ -4192,11 +4298,11 @@ func (m *EventList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n74, err := m.ListMeta.MarshalTo(dAtA[i:]) + n76, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n74 + i += n76 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -4233,11 +4339,11 @@ func (m *EventSeries) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LastObservedTime.Size())) - n75, err := m.LastObservedTime.MarshalTo(dAtA[i:]) + n77, err := m.LastObservedTime.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n75 + i += n77 dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.State))) @@ -4396,11 +4502,11 @@ func (m *FlexPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n76, err := m.SecretRef.MarshalTo(dAtA[i:]) + n78, err := m.SecretRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n76 + i += n78 } dAtA[i] = 0x20 i++ @@ -4462,11 +4568,11 @@ func (m *FlexVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n77, err := m.SecretRef.MarshalTo(dAtA[i:]) + n79, err := m.SecretRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n77 + i += n79 } dAtA[i] = 0x20 i++ @@ -4690,11 +4796,11 @@ func (m *HTTPGetAction) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Port.Size())) - n78, err := m.Port.MarshalTo(dAtA[i:]) + n80, err := m.Port.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n78 + i += n80 dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Host))) @@ -4763,31 +4869,31 @@ func (m *Handler) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Exec.Size())) - n79, err := m.Exec.MarshalTo(dAtA[i:]) + n81, err := m.Exec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n79 + i += n81 } if m.HTTPGet != nil { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.HTTPGet.Size())) - n80, err := m.HTTPGet.MarshalTo(dAtA[i:]) + n82, err := m.HTTPGet.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n80 + i += n82 } if m.TCPSocket != nil { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.TCPSocket.Size())) - n81, err := m.TCPSocket.MarshalTo(dAtA[i:]) + n83, err := m.TCPSocket.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n81 + i += n83 } return i, nil } @@ -4926,11 +5032,11 @@ func (m *ISCSIPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x52 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n82, err := m.SecretRef.MarshalTo(dAtA[i:]) + n84, err := m.SecretRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n82 + i += n84 } dAtA[i] = 0x58 i++ @@ -5018,11 +5124,11 @@ func (m *ISCSIVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x52 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n83, err := m.SecretRef.MarshalTo(dAtA[i:]) + n85, err := m.SecretRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n83 + i += n85 } dAtA[i] = 0x58 i++ @@ -5091,21 +5197,21 @@ func (m *Lifecycle) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.PostStart.Size())) - n84, err := m.PostStart.MarshalTo(dAtA[i:]) + n86, err := m.PostStart.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n84 + i += n86 } if m.PreStop != nil { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.PreStop.Size())) - n85, err := m.PreStop.MarshalTo(dAtA[i:]) + n87, err := m.PreStop.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n85 + i += n87 } return i, nil } @@ -5128,19 +5234,19 @@ func (m *LimitRange) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n86, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n88, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n86 + i += n88 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n87, err := m.Spec.MarshalTo(dAtA[i:]) + n89, err := m.Spec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n87 + i += n89 return i, nil } @@ -5187,11 +5293,11 @@ func (m *LimitRangeItem) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n88, err := (&v).MarshalTo(dAtA[i:]) + n90, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n88 + i += n90 } } if len(m.Min) > 0 { @@ -5218,11 +5324,11 @@ func (m *LimitRangeItem) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n89, err := (&v).MarshalTo(dAtA[i:]) + n91, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n89 + i += n91 } } if len(m.Default) > 0 { @@ -5249,11 +5355,11 @@ func (m *LimitRangeItem) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n90, err := (&v).MarshalTo(dAtA[i:]) + n92, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n90 + i += n92 } } if len(m.DefaultRequest) > 0 { @@ -5280,11 +5386,11 @@ func (m *LimitRangeItem) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n91, err := (&v).MarshalTo(dAtA[i:]) + n93, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n91 + i += n93 } } if len(m.MaxLimitRequestRatio) > 0 { @@ -5311,11 +5417,11 @@ func (m *LimitRangeItem) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n92, err := (&v).MarshalTo(dAtA[i:]) + n94, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n92 + i += n94 } } return i, nil @@ -5339,11 +5445,11 @@ func (m *LimitRangeList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n93, err := m.ListMeta.MarshalTo(dAtA[i:]) + n95, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n93 + i += n95 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -5407,11 +5513,11 @@ func (m *List) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n94, err := m.ListMeta.MarshalTo(dAtA[i:]) + n96, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n94 + i += n96 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -5619,27 +5725,27 @@ func (m *Namespace) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n95, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n97, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n95 + i += n97 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n96, err := m.Spec.MarshalTo(dAtA[i:]) + n98, err := m.Spec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n96 + i += n98 dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n97, err := m.Status.MarshalTo(dAtA[i:]) + n99, err := m.Status.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n97 + i += n99 return i, nil } @@ -5661,11 +5767,11 @@ func (m *NamespaceList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n98, err := m.ListMeta.MarshalTo(dAtA[i:]) + n100, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n98 + i += n100 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -5800,27 +5906,27 @@ func (m *Node) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n99, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n101, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n99 + i += n101 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n100, err := m.Spec.MarshalTo(dAtA[i:]) + n102, err := m.Spec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n100 + i += n102 dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n101, err := m.Status.MarshalTo(dAtA[i:]) + n103, err := m.Status.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n101 + i += n103 return i, nil } @@ -5869,11 +5975,11 @@ func (m *NodeAffinity) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.RequiredDuringSchedulingIgnoredDuringExecution.Size())) - n102, err := m.RequiredDuringSchedulingIgnoredDuringExecution.MarshalTo(dAtA[i:]) + n104, err := m.RequiredDuringSchedulingIgnoredDuringExecution.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n102 + i += n104 } if len(m.PreferredDuringSchedulingIgnoredDuringExecution) > 0 { for _, msg := range m.PreferredDuringSchedulingIgnoredDuringExecution { @@ -5916,19 +6022,19 @@ func (m *NodeCondition) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LastHeartbeatTime.Size())) - n103, err := m.LastHeartbeatTime.MarshalTo(dAtA[i:]) + n105, err := m.LastHeartbeatTime.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n103 + i += n105 dAtA[i] = 0x22 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size())) - n104, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) + n106, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n104 + i += n106 dAtA[i] = 0x2a i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) @@ -5959,11 +6065,11 @@ func (m *NodeConfigSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ConfigMap.Size())) - n105, err := m.ConfigMap.MarshalTo(dAtA[i:]) + n107, err := m.ConfigMap.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n105 + i += n107 } return i, nil } @@ -5987,31 +6093,31 @@ func (m *NodeConfigStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Assigned.Size())) - n106, err := m.Assigned.MarshalTo(dAtA[i:]) + n108, err := m.Assigned.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n106 + i += n108 } if m.Active != nil { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Active.Size())) - n107, err := m.Active.MarshalTo(dAtA[i:]) + n109, err := m.Active.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n107 + i += n109 } if m.LastKnownGood != nil { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LastKnownGood.Size())) - n108, err := m.LastKnownGood.MarshalTo(dAtA[i:]) + n110, err := m.LastKnownGood.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n108 + i += n110 } dAtA[i] = 0x22 i++ @@ -6038,11 +6144,11 @@ func (m *NodeDaemonEndpoints) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.KubeletEndpoint.Size())) - n109, err := m.KubeletEndpoint.MarshalTo(dAtA[i:]) + n111, err := m.KubeletEndpoint.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n109 + i += n111 return i, nil } @@ -6064,11 +6170,11 @@ func (m *NodeList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n110, err := m.ListMeta.MarshalTo(dAtA[i:]) + n112, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n110 + i += n112 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -6145,11 +6251,11 @@ func (m *NodeResources) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n111, err := (&v).MarshalTo(dAtA[i:]) + n113, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n111 + i += n113 } } return i, nil @@ -6319,11 +6425,11 @@ func (m *NodeSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x32 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ConfigSource.Size())) - n112, err := m.ConfigSource.MarshalTo(dAtA[i:]) + n114, err := m.ConfigSource.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n112 + i += n114 } return i, nil } @@ -6367,11 +6473,11 @@ func (m *NodeStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n113, err := (&v).MarshalTo(dAtA[i:]) + n115, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n113 + i += n115 } } if len(m.Allocatable) > 0 { @@ -6398,11 +6504,11 @@ func (m *NodeStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n114, err := (&v).MarshalTo(dAtA[i:]) + n116, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n114 + i += n116 } } dAtA[i] = 0x1a @@ -6436,19 +6542,19 @@ func (m *NodeStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x32 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.DaemonEndpoints.Size())) - n115, err := m.DaemonEndpoints.MarshalTo(dAtA[i:]) + n117, err := m.DaemonEndpoints.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n115 + i += n117 dAtA[i] = 0x3a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.NodeInfo.Size())) - n116, err := m.NodeInfo.MarshalTo(dAtA[i:]) + n118, err := m.NodeInfo.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n116 + i += n118 if len(m.Images) > 0 { for _, msg := range m.Images { dAtA[i] = 0x42 @@ -6492,11 +6598,11 @@ func (m *NodeStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x5a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Config.Size())) - n117, err := m.Config.MarshalTo(dAtA[i:]) + n119, err := m.Config.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n117 + i += n119 } return i, nil } @@ -6653,27 +6759,27 @@ func (m *PersistentVolume) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n118, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n120, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n118 + i += n120 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n119, err := m.Spec.MarshalTo(dAtA[i:]) + n121, err := m.Spec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n119 + i += n121 dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n120, err := m.Status.MarshalTo(dAtA[i:]) + n122, err := m.Status.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n120 + i += n122 return i, nil } @@ -6695,27 +6801,27 @@ func (m *PersistentVolumeClaim) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n121, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n123, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n121 + i += n123 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n122, err := m.Spec.MarshalTo(dAtA[i:]) + n124, err := m.Spec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n122 + i += n124 dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n123, err := m.Status.MarshalTo(dAtA[i:]) + n125, err := m.Status.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n123 + i += n125 return i, nil } @@ -6745,19 +6851,19 @@ func (m *PersistentVolumeClaimCondition) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LastProbeTime.Size())) - n124, err := m.LastProbeTime.MarshalTo(dAtA[i:]) + n126, err := m.LastProbeTime.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n124 + i += n126 dAtA[i] = 0x22 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size())) - n125, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) + n127, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n125 + i += n127 dAtA[i] = 0x2a i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) @@ -6787,11 +6893,11 @@ func (m *PersistentVolumeClaimList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n126, err := m.ListMeta.MarshalTo(dAtA[i:]) + n128, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n126 + i += n128 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -6840,11 +6946,11 @@ func (m *PersistentVolumeClaimSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Resources.Size())) - n127, err := m.Resources.MarshalTo(dAtA[i:]) + n129, err := m.Resources.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n127 + i += n129 dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.VolumeName))) @@ -6853,11 +6959,11 @@ func (m *PersistentVolumeClaimSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x22 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Selector.Size())) - n128, err := m.Selector.MarshalTo(dAtA[i:]) + n130, err := m.Selector.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n128 + i += n130 } if m.StorageClassName != nil { dAtA[i] = 0x2a @@ -6875,11 +6981,11 @@ func (m *PersistentVolumeClaimSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x3a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.DataSource.Size())) - n129, err := m.DataSource.MarshalTo(dAtA[i:]) + n131, err := m.DataSource.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n129 + i += n131 } return i, nil } @@ -6942,11 +7048,11 @@ func (m *PersistentVolumeClaimStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n130, err := (&v).MarshalTo(dAtA[i:]) + n132, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n130 + i += n132 } } if len(m.Conditions) > 0 { @@ -7012,11 +7118,11 @@ func (m *PersistentVolumeList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n131, err := m.ListMeta.MarshalTo(dAtA[i:]) + n133, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n131 + i += n133 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -7051,151 +7157,151 @@ func (m *PersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.GCEPersistentDisk.Size())) - n132, err := m.GCEPersistentDisk.MarshalTo(dAtA[i:]) + n134, err := m.GCEPersistentDisk.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n132 + i += n134 } if m.AWSElasticBlockStore != nil { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.AWSElasticBlockStore.Size())) - n133, err := m.AWSElasticBlockStore.MarshalTo(dAtA[i:]) + n135, err := m.AWSElasticBlockStore.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n133 + i += n135 } if m.HostPath != nil { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.HostPath.Size())) - n134, err := m.HostPath.MarshalTo(dAtA[i:]) + n136, err := m.HostPath.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n134 + i += n136 } if m.Glusterfs != nil { dAtA[i] = 0x22 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Glusterfs.Size())) - n135, err := m.Glusterfs.MarshalTo(dAtA[i:]) + n137, err := m.Glusterfs.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n135 + i += n137 } if m.NFS != nil { dAtA[i] = 0x2a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.NFS.Size())) - n136, err := m.NFS.MarshalTo(dAtA[i:]) + n138, err := m.NFS.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n136 + i += n138 } if m.RBD != nil { dAtA[i] = 0x32 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.RBD.Size())) - n137, err := m.RBD.MarshalTo(dAtA[i:]) + n139, err := m.RBD.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n137 + i += n139 } if m.ISCSI != nil { dAtA[i] = 0x3a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ISCSI.Size())) - n138, err := m.ISCSI.MarshalTo(dAtA[i:]) + n140, err := m.ISCSI.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n138 + i += n140 } if m.Cinder != nil { dAtA[i] = 0x42 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Cinder.Size())) - n139, err := m.Cinder.MarshalTo(dAtA[i:]) + n141, err := m.Cinder.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n139 + i += n141 } if m.CephFS != nil { dAtA[i] = 0x4a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.CephFS.Size())) - n140, err := m.CephFS.MarshalTo(dAtA[i:]) + n142, err := m.CephFS.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n140 + i += n142 } if m.FC != nil { dAtA[i] = 0x52 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.FC.Size())) - n141, err := m.FC.MarshalTo(dAtA[i:]) + n143, err := m.FC.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n141 + i += n143 } if m.Flocker != nil { dAtA[i] = 0x5a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Flocker.Size())) - n142, err := m.Flocker.MarshalTo(dAtA[i:]) + n144, err := m.Flocker.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n142 + i += n144 } if m.FlexVolume != nil { dAtA[i] = 0x62 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.FlexVolume.Size())) - n143, err := m.FlexVolume.MarshalTo(dAtA[i:]) + n145, err := m.FlexVolume.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n143 + i += n145 } if m.AzureFile != nil { dAtA[i] = 0x6a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.AzureFile.Size())) - n144, err := m.AzureFile.MarshalTo(dAtA[i:]) + n146, err := m.AzureFile.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n144 + i += n146 } if m.VsphereVolume != nil { dAtA[i] = 0x72 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.VsphereVolume.Size())) - n145, err := m.VsphereVolume.MarshalTo(dAtA[i:]) + n147, err := m.VsphereVolume.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n145 + i += n147 } if m.Quobyte != nil { dAtA[i] = 0x7a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Quobyte.Size())) - n146, err := m.Quobyte.MarshalTo(dAtA[i:]) + n148, err := m.Quobyte.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n146 + i += n148 } if m.AzureDisk != nil { dAtA[i] = 0x82 @@ -7203,11 +7309,11 @@ func (m *PersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.AzureDisk.Size())) - n147, err := m.AzureDisk.MarshalTo(dAtA[i:]) + n149, err := m.AzureDisk.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n147 + i += n149 } if m.PhotonPersistentDisk != nil { dAtA[i] = 0x8a @@ -7215,11 +7321,11 @@ func (m *PersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.PhotonPersistentDisk.Size())) - n148, err := m.PhotonPersistentDisk.MarshalTo(dAtA[i:]) + n150, err := m.PhotonPersistentDisk.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n148 + i += n150 } if m.PortworxVolume != nil { dAtA[i] = 0x92 @@ -7227,11 +7333,11 @@ func (m *PersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.PortworxVolume.Size())) - n149, err := m.PortworxVolume.MarshalTo(dAtA[i:]) + n151, err := m.PortworxVolume.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n149 + i += n151 } if m.ScaleIO != nil { dAtA[i] = 0x9a @@ -7239,11 +7345,11 @@ func (m *PersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ScaleIO.Size())) - n150, err := m.ScaleIO.MarshalTo(dAtA[i:]) + n152, err := m.ScaleIO.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n150 + i += n152 } if m.Local != nil { dAtA[i] = 0xa2 @@ -7251,11 +7357,11 @@ func (m *PersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Local.Size())) - n151, err := m.Local.MarshalTo(dAtA[i:]) + n153, err := m.Local.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n151 + i += n153 } if m.StorageOS != nil { dAtA[i] = 0xaa @@ -7263,11 +7369,11 @@ func (m *PersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.StorageOS.Size())) - n152, err := m.StorageOS.MarshalTo(dAtA[i:]) + n154, err := m.StorageOS.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n152 + i += n154 } if m.CSI != nil { dAtA[i] = 0xb2 @@ -7275,11 +7381,11 @@ func (m *PersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.CSI.Size())) - n153, err := m.CSI.MarshalTo(dAtA[i:]) + n155, err := m.CSI.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n153 + i += n155 } return i, nil } @@ -7323,21 +7429,21 @@ func (m *PersistentVolumeSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n154, err := (&v).MarshalTo(dAtA[i:]) + n156, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n154 + i += n156 } } dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.PersistentVolumeSource.Size())) - n155, err := m.PersistentVolumeSource.MarshalTo(dAtA[i:]) + n157, err := m.PersistentVolumeSource.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n155 + i += n157 if len(m.AccessModes) > 0 { for _, s := range m.AccessModes { dAtA[i] = 0x1a @@ -7357,11 +7463,11 @@ func (m *PersistentVolumeSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x22 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ClaimRef.Size())) - n156, err := m.ClaimRef.MarshalTo(dAtA[i:]) + n158, err := m.ClaimRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n156 + i += n158 } dAtA[i] = 0x2a i++ @@ -7396,11 +7502,11 @@ func (m *PersistentVolumeSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x4a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.NodeAffinity.Size())) - n157, err := m.NodeAffinity.MarshalTo(dAtA[i:]) + n159, err := m.NodeAffinity.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n157 + i += n159 } return i, nil } @@ -7479,27 +7585,27 @@ func (m *Pod) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n158, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n160, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n158 + i += n160 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n159, err := m.Spec.MarshalTo(dAtA[i:]) + n161, err := m.Spec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n159 + i += n161 dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n160, err := m.Status.MarshalTo(dAtA[i:]) + n162, err := m.Status.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n160 + i += n162 return i, nil } @@ -7564,11 +7670,11 @@ func (m *PodAffinityTerm) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LabelSelector.Size())) - n161, err := m.LabelSelector.MarshalTo(dAtA[i:]) + n163, err := m.LabelSelector.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n161 + i += n163 } if len(m.Namespaces) > 0 { for _, s := range m.Namespaces { @@ -7714,19 +7820,19 @@ func (m *PodCondition) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LastProbeTime.Size())) - n162, err := m.LastProbeTime.MarshalTo(dAtA[i:]) + n164, err := m.LastProbeTime.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n162 + i += n164 dAtA[i] = 0x22 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size())) - n163, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) + n165, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n163 + i += n165 dAtA[i] = 0x2a i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) @@ -7913,11 +8019,11 @@ func (m *PodList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n164, err := m.ListMeta.MarshalTo(dAtA[i:]) + n166, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n164 + i += n166 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -7977,11 +8083,11 @@ func (m *PodLogOptions) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SinceTime.Size())) - n165, err := m.SinceTime.MarshalTo(dAtA[i:]) + n167, err := m.SinceTime.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n165 + i += n167 } dAtA[i] = 0x30 i++ @@ -8092,11 +8198,11 @@ func (m *PodSecurityContext) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SELinuxOptions.Size())) - n166, err := m.SELinuxOptions.MarshalTo(dAtA[i:]) + n168, err := m.SELinuxOptions.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n166 + i += n168 } if m.RunAsUser != nil { dAtA[i] = 0x10 @@ -8146,11 +8252,11 @@ func (m *PodSecurityContext) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x42 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.WindowsOptions.Size())) - n167, err := m.WindowsOptions.MarshalTo(dAtA[i:]) + n169, err := m.WindowsOptions.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n167 + i += n169 } return i, nil } @@ -8174,11 +8280,11 @@ func (m *PodSignature) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.PodController.Size())) - n168, err := m.PodController.MarshalTo(dAtA[i:]) + n170, err := m.PodController.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n168 + i += n170 } return i, nil } @@ -8302,11 +8408,11 @@ func (m *PodSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x72 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecurityContext.Size())) - n169, err := m.SecurityContext.MarshalTo(dAtA[i:]) + n171, err := m.SecurityContext.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n169 + i += n171 } if len(m.ImagePullSecrets) > 0 { for _, msg := range m.ImagePullSecrets { @@ -8338,11 +8444,11 @@ func (m *PodSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Affinity.Size())) - n170, err := m.Affinity.MarshalTo(dAtA[i:]) + n172, err := m.Affinity.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n170 + i += n172 } dAtA[i] = 0x9a i++ @@ -8423,11 +8529,11 @@ func (m *PodSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.DNSConfig.Size())) - n171, err := m.DNSConfig.MarshalTo(dAtA[i:]) + n173, err := m.DNSConfig.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n171 + i += n173 } if m.ShareProcessNamespace != nil { dAtA[i] = 0xd8 @@ -8489,11 +8595,11 @@ func (m *PodSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.VirtualMachine.Size())) - n172, err := m.VirtualMachine.MarshalTo(dAtA[i:]) + n174, err := m.VirtualMachine.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n172 + i += n174 } dAtA[i] = 0x8a i++ @@ -8583,11 +8689,11 @@ func (m *PodStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x3a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.StartTime.Size())) - n173, err := m.StartTime.MarshalTo(dAtA[i:]) + n175, err := m.StartTime.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n173 + i += n175 } if len(m.ContainerStatuses) > 0 { for _, msg := range m.ContainerStatuses { @@ -8625,11 +8731,11 @@ func (m *PodStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x62 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.VirtualMachineStatus.Size())) - n174, err := m.VirtualMachineStatus.MarshalTo(dAtA[i:]) + n176, err := m.VirtualMachineStatus.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n174 + i += n176 } if len(m.NICStatuses) > 0 { for _, msg := range m.NICStatuses { @@ -8664,19 +8770,19 @@ func (m *PodStatusResult) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n175, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n177, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n175 + i += n177 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n176, err := m.Status.MarshalTo(dAtA[i:]) + n178, err := m.Status.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n176 + i += n178 return i, nil } @@ -8698,19 +8804,19 @@ func (m *PodTemplate) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n177, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n179, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n177 + i += n179 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Template.Size())) - n178, err := m.Template.MarshalTo(dAtA[i:]) + n180, err := m.Template.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n178 + i += n180 return i, nil } @@ -8732,11 +8838,11 @@ func (m *PodTemplateList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n179, err := m.ListMeta.MarshalTo(dAtA[i:]) + n181, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n179 + i += n181 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -8770,19 +8876,19 @@ func (m *PodTemplateSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n180, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n182, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n180 + i += n182 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n181, err := m.Spec.MarshalTo(dAtA[i:]) + n183, err := m.Spec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n181 + i += n183 return i, nil } @@ -8862,19 +8968,19 @@ func (m *PreferAvoidPodsEntry) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.PodSignature.Size())) - n182, err := m.PodSignature.MarshalTo(dAtA[i:]) + n184, err := m.PodSignature.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n182 + i += n184 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.EvictionTime.Size())) - n183, err := m.EvictionTime.MarshalTo(dAtA[i:]) + n185, err := m.EvictionTime.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n183 + i += n185 dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) @@ -8907,11 +9013,11 @@ func (m *PreferredSchedulingTerm) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Preference.Size())) - n184, err := m.Preference.MarshalTo(dAtA[i:]) + n186, err := m.Preference.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n184 + i += n186 return i, nil } @@ -8933,11 +9039,11 @@ func (m *Probe) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Handler.Size())) - n185, err := m.Handler.MarshalTo(dAtA[i:]) + n187, err := m.Handler.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n185 + i += n187 dAtA[i] = 0x10 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.InitialDelaySeconds)) @@ -9091,11 +9197,11 @@ func (m *RBDPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x3a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n186, err := m.SecretRef.MarshalTo(dAtA[i:]) + n188, err := m.SecretRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n186 + i += n188 } dAtA[i] = 0x40 i++ @@ -9162,11 +9268,11 @@ func (m *RBDVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x3a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n187, err := m.SecretRef.MarshalTo(dAtA[i:]) + n189, err := m.SecretRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n187 + i += n189 } dAtA[i] = 0x40 i++ @@ -9197,11 +9303,11 @@ func (m *RangeAllocation) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n188, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n190, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n188 + i += n190 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Range))) @@ -9301,27 +9407,27 @@ func (m *ReplicationController) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n189, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n191, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n189 + i += n191 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n190, err := m.Spec.MarshalTo(dAtA[i:]) + n192, err := m.Spec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n190 + i += n192 dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n191, err := m.Status.MarshalTo(dAtA[i:]) + n193, err := m.Status.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n191 + i += n193 return i, nil } @@ -9351,11 +9457,11 @@ func (m *ReplicationControllerCondition) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LastTransitionTime.Size())) - n192, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) + n194, err := m.LastTransitionTime.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n192 + i += n194 dAtA[i] = 0x22 i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Reason))) @@ -9385,11 +9491,11 @@ func (m *ReplicationControllerList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n193, err := m.ListMeta.MarshalTo(dAtA[i:]) + n195, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n193 + i += n195 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -9451,11 +9557,11 @@ func (m *ReplicationControllerSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Template.Size())) - n194, err := m.Template.MarshalTo(dAtA[i:]) + n196, err := m.Template.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n194 + i += n196 } dAtA[i] = 0x20 i++ @@ -9534,11 +9640,11 @@ func (m *ResourceFieldSelector) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Divisor.Size())) - n195, err := m.Divisor.MarshalTo(dAtA[i:]) + n197, err := m.Divisor.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n195 + i += n197 return i, nil } @@ -9560,27 +9666,27 @@ func (m *ResourceQuota) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n196, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n198, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n196 + i += n198 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n197, err := m.Spec.MarshalTo(dAtA[i:]) + n199, err := m.Spec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n197 + i += n199 dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n198, err := m.Status.MarshalTo(dAtA[i:]) + n200, err := m.Status.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n198 + i += n200 return i, nil } @@ -9602,11 +9708,11 @@ func (m *ResourceQuotaList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n199, err := m.ListMeta.MarshalTo(dAtA[i:]) + n201, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n199 + i += n201 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -9661,11 +9767,11 @@ func (m *ResourceQuotaSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n200, err := (&v).MarshalTo(dAtA[i:]) + n202, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n200 + i += n202 } } if len(m.Scopes) > 0 { @@ -9687,11 +9793,11 @@ func (m *ResourceQuotaSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ScopeSelector.Size())) - n201, err := m.ScopeSelector.MarshalTo(dAtA[i:]) + n203, err := m.ScopeSelector.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n201 + i += n203 } return i, nil } @@ -9735,11 +9841,11 @@ func (m *ResourceQuotaStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n202, err := (&v).MarshalTo(dAtA[i:]) + n204, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n202 + i += n204 } } if len(m.Used) > 0 { @@ -9766,11 +9872,11 @@ func (m *ResourceQuotaStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n203, err := (&v).MarshalTo(dAtA[i:]) + n205, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n203 + i += n205 } } return i, nil @@ -9815,11 +9921,11 @@ func (m *ResourceRequirements) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n204, err := (&v).MarshalTo(dAtA[i:]) + n206, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n204 + i += n206 } } if len(m.Requests) > 0 { @@ -9846,11 +9952,11 @@ func (m *ResourceRequirements) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64((&v).Size())) - n205, err := (&v).MarshalTo(dAtA[i:]) + n207, err := (&v).MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n205 + i += n207 } } return i, nil @@ -9987,11 +10093,11 @@ func (m *ScaleIOPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n206, err := m.SecretRef.MarshalTo(dAtA[i:]) + n208, err := m.SecretRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n206 + i += n208 } dAtA[i] = 0x20 i++ @@ -10059,11 +10165,11 @@ func (m *ScaleIOVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n207, err := m.SecretRef.MarshalTo(dAtA[i:]) + n209, err := m.SecretRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n207 + i += n209 } dAtA[i] = 0x20 i++ @@ -10193,11 +10299,11 @@ func (m *Secret) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n208, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n210, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n208 + i += n210 if len(m.Data) > 0 { keysForData := make([]string, 0, len(m.Data)) for k := range m.Data { @@ -10273,11 +10379,11 @@ func (m *SecretEnvSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LocalObjectReference.Size())) - n209, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) + n211, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n209 + i += n211 if m.Optional != nil { dAtA[i] = 0x10 i++ @@ -10309,11 +10415,11 @@ func (m *SecretKeySelector) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LocalObjectReference.Size())) - n210, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) + n212, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n210 + i += n212 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Key))) @@ -10349,11 +10455,11 @@ func (m *SecretList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n211, err := m.ListMeta.MarshalTo(dAtA[i:]) + n213, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n211 + i += n213 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -10387,11 +10493,11 @@ func (m *SecretProjection) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LocalObjectReference.Size())) - n212, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) + n214, err := m.LocalObjectReference.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n212 + i += n214 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -10511,11 +10617,11 @@ func (m *SecurityContext) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Capabilities.Size())) - n213, err := m.Capabilities.MarshalTo(dAtA[i:]) + n215, err := m.Capabilities.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n213 + i += n215 } if m.Privileged != nil { dAtA[i] = 0x10 @@ -10531,11 +10637,11 @@ func (m *SecurityContext) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SELinuxOptions.Size())) - n214, err := m.SELinuxOptions.MarshalTo(dAtA[i:]) + n216, err := m.SELinuxOptions.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n214 + i += n216 } if m.RunAsUser != nil { dAtA[i] = 0x20 @@ -10587,11 +10693,11 @@ func (m *SecurityContext) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x52 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.WindowsOptions.Size())) - n215, err := m.WindowsOptions.MarshalTo(dAtA[i:]) + n217, err := m.WindowsOptions.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n215 + i += n217 } return i, nil } @@ -10614,11 +10720,11 @@ func (m *SerializedReference) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Reference.Size())) - n216, err := m.Reference.MarshalTo(dAtA[i:]) + n218, err := m.Reference.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n216 + i += n218 return i, nil } @@ -10640,27 +10746,27 @@ func (m *Service) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n217, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n219, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n217 + i += n219 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n218, err := m.Spec.MarshalTo(dAtA[i:]) + n220, err := m.Spec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n218 + i += n220 dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n219, err := m.Status.MarshalTo(dAtA[i:]) + n221, err := m.Status.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n219 + i += n221 return i, nil } @@ -10682,11 +10788,11 @@ func (m *ServiceAccount) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n220, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n222, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n220 + i += n222 if len(m.Secrets) > 0 { for _, msg := range m.Secrets { dAtA[i] = 0x12 @@ -10742,11 +10848,11 @@ func (m *ServiceAccountList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n221, err := m.ListMeta.MarshalTo(dAtA[i:]) + n223, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n221 + i += n223 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -10811,11 +10917,11 @@ func (m *ServiceList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n222, err := m.ListMeta.MarshalTo(dAtA[i:]) + n224, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n222 + i += n224 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -10860,11 +10966,11 @@ func (m *ServicePort) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x22 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.TargetPort.Size())) - n223, err := m.TargetPort.MarshalTo(dAtA[i:]) + n225, err := m.TargetPort.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n223 + i += n225 dAtA[i] = 0x28 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.NodePort)) @@ -11011,11 +11117,11 @@ func (m *ServiceSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x72 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SessionAffinityConfig.Size())) - n224, err := m.SessionAffinityConfig.MarshalTo(dAtA[i:]) + n226, err := m.SessionAffinityConfig.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n224 + i += n226 } dAtA[i] = 0x82 i++ @@ -11044,11 +11150,11 @@ func (m *ServiceStatus) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.LoadBalancer.Size())) - n225, err := m.LoadBalancer.MarshalTo(dAtA[i:]) + n227, err := m.LoadBalancer.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n225 + i += n227 return i, nil } @@ -11071,11 +11177,11 @@ func (m *SessionAffinityConfig) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ClientIP.Size())) - n226, err := m.ClientIP.MarshalTo(dAtA[i:]) + n228, err := m.ClientIP.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n226 + i += n228 } return i, nil } @@ -11185,11 +11291,11 @@ func (m *StorageOSPersistentVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n227, err := m.SecretRef.MarshalTo(dAtA[i:]) + n229, err := m.SecretRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n227 + i += n229 } return i, nil } @@ -11233,11 +11339,11 @@ func (m *StorageOSVolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x2a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.SecretRef.Size())) - n228, err := m.SecretRef.MarshalTo(dAtA[i:]) + n230, err := m.SecretRef.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n228 + i += n230 } return i, nil } @@ -11286,11 +11392,11 @@ func (m *TCPSocketAction) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Port.Size())) - n229, err := m.Port.MarshalTo(dAtA[i:]) + n231, err := m.Port.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n229 + i += n231 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(len(m.Host))) @@ -11329,11 +11435,11 @@ func (m *Taint) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x22 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.TimeAdded.Size())) - n230, err := m.TimeAdded.MarshalTo(dAtA[i:]) + n232, err := m.TimeAdded.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n230 + i += n232 } return i, nil } @@ -11356,27 +11462,27 @@ func (m *Tenant) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ObjectMeta.Size())) - n231, err := m.ObjectMeta.MarshalTo(dAtA[i:]) + n233, err := m.ObjectMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n231 + i += n233 dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Spec.Size())) - n232, err := m.Spec.MarshalTo(dAtA[i:]) + n234, err := m.Spec.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n232 + i += n234 dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Status.Size())) - n233, err := m.Status.MarshalTo(dAtA[i:]) + n235, err := m.Status.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n233 + i += n235 return i, nil } @@ -11398,11 +11504,11 @@ func (m *TenantList) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ListMeta.Size())) - n234, err := m.ListMeta.MarshalTo(dAtA[i:]) + n236, err := m.ListMeta.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n234 + i += n236 if len(m.Items) > 0 { for _, msg := range m.Items { dAtA[i] = 0x12 @@ -11637,11 +11743,11 @@ func (m *VirtualMachine) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Resources.Size())) - n235, err := m.Resources.MarshalTo(dAtA[i:]) + n237, err := m.Resources.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n235 + i += n237 if len(m.VolumeMounts) > 0 { for _, msg := range m.VolumeMounts { dAtA[i] = 0x22 @@ -11797,11 +11903,11 @@ func (m *Volume) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.VolumeSource.Size())) - n236, err := m.VolumeSource.MarshalTo(dAtA[i:]) + n238, err := m.VolumeSource.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n236 + i += n238 return i, nil } @@ -11898,11 +12004,11 @@ func (m *VolumeNodeAffinity) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Required.Size())) - n237, err := m.Required.MarshalTo(dAtA[i:]) + n239, err := m.Required.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n237 + i += n239 } return i, nil } @@ -11926,41 +12032,41 @@ func (m *VolumeProjection) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Secret.Size())) - n238, err := m.Secret.MarshalTo(dAtA[i:]) + n240, err := m.Secret.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n238 + i += n240 } if m.DownwardAPI != nil { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.DownwardAPI.Size())) - n239, err := m.DownwardAPI.MarshalTo(dAtA[i:]) + n241, err := m.DownwardAPI.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n239 + i += n241 } if m.ConfigMap != nil { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ConfigMap.Size())) - n240, err := m.ConfigMap.MarshalTo(dAtA[i:]) + n242, err := m.ConfigMap.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n240 + i += n242 } if m.ServiceAccountToken != nil { dAtA[i] = 0x22 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ServiceAccountToken.Size())) - n241, err := m.ServiceAccountToken.MarshalTo(dAtA[i:]) + n243, err := m.ServiceAccountToken.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n241 + i += n243 } return i, nil } @@ -11984,151 +12090,151 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0xa i++ i = encodeVarintGenerated(dAtA, i, uint64(m.HostPath.Size())) - n242, err := m.HostPath.MarshalTo(dAtA[i:]) + n244, err := m.HostPath.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n242 + i += n244 } if m.EmptyDir != nil { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.EmptyDir.Size())) - n243, err := m.EmptyDir.MarshalTo(dAtA[i:]) + n245, err := m.EmptyDir.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n243 + i += n245 } if m.GCEPersistentDisk != nil { dAtA[i] = 0x1a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.GCEPersistentDisk.Size())) - n244, err := m.GCEPersistentDisk.MarshalTo(dAtA[i:]) + n246, err := m.GCEPersistentDisk.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n244 + i += n246 } if m.AWSElasticBlockStore != nil { dAtA[i] = 0x22 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.AWSElasticBlockStore.Size())) - n245, err := m.AWSElasticBlockStore.MarshalTo(dAtA[i:]) + n247, err := m.AWSElasticBlockStore.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n245 + i += n247 } if m.GitRepo != nil { dAtA[i] = 0x2a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.GitRepo.Size())) - n246, err := m.GitRepo.MarshalTo(dAtA[i:]) + n248, err := m.GitRepo.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n246 + i += n248 } if m.Secret != nil { dAtA[i] = 0x32 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Secret.Size())) - n247, err := m.Secret.MarshalTo(dAtA[i:]) + n249, err := m.Secret.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n247 + i += n249 } if m.NFS != nil { dAtA[i] = 0x3a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.NFS.Size())) - n248, err := m.NFS.MarshalTo(dAtA[i:]) + n250, err := m.NFS.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n248 + i += n250 } if m.ISCSI != nil { dAtA[i] = 0x42 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ISCSI.Size())) - n249, err := m.ISCSI.MarshalTo(dAtA[i:]) + n251, err := m.ISCSI.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n249 + i += n251 } if m.Glusterfs != nil { dAtA[i] = 0x4a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Glusterfs.Size())) - n250, err := m.Glusterfs.MarshalTo(dAtA[i:]) + n252, err := m.Glusterfs.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n250 + i += n252 } if m.PersistentVolumeClaim != nil { dAtA[i] = 0x52 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.PersistentVolumeClaim.Size())) - n251, err := m.PersistentVolumeClaim.MarshalTo(dAtA[i:]) + n253, err := m.PersistentVolumeClaim.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n251 + i += n253 } if m.RBD != nil { dAtA[i] = 0x5a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.RBD.Size())) - n252, err := m.RBD.MarshalTo(dAtA[i:]) + n254, err := m.RBD.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n252 + i += n254 } if m.FlexVolume != nil { dAtA[i] = 0x62 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.FlexVolume.Size())) - n253, err := m.FlexVolume.MarshalTo(dAtA[i:]) + n255, err := m.FlexVolume.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n253 + i += n255 } if m.Cinder != nil { dAtA[i] = 0x6a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Cinder.Size())) - n254, err := m.Cinder.MarshalTo(dAtA[i:]) + n256, err := m.Cinder.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n254 + i += n256 } if m.CephFS != nil { dAtA[i] = 0x72 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.CephFS.Size())) - n255, err := m.CephFS.MarshalTo(dAtA[i:]) + n257, err := m.CephFS.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n255 + i += n257 } if m.Flocker != nil { dAtA[i] = 0x7a i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Flocker.Size())) - n256, err := m.Flocker.MarshalTo(dAtA[i:]) + n258, err := m.Flocker.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n256 + i += n258 } if m.DownwardAPI != nil { dAtA[i] = 0x82 @@ -12136,11 +12242,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.DownwardAPI.Size())) - n257, err := m.DownwardAPI.MarshalTo(dAtA[i:]) + n259, err := m.DownwardAPI.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n257 + i += n259 } if m.FC != nil { dAtA[i] = 0x8a @@ -12148,11 +12254,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.FC.Size())) - n258, err := m.FC.MarshalTo(dAtA[i:]) + n260, err := m.FC.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n258 + i += n260 } if m.AzureFile != nil { dAtA[i] = 0x92 @@ -12160,11 +12266,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.AzureFile.Size())) - n259, err := m.AzureFile.MarshalTo(dAtA[i:]) + n261, err := m.AzureFile.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n259 + i += n261 } if m.ConfigMap != nil { dAtA[i] = 0x9a @@ -12172,11 +12278,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ConfigMap.Size())) - n260, err := m.ConfigMap.MarshalTo(dAtA[i:]) + n262, err := m.ConfigMap.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n260 + i += n262 } if m.VsphereVolume != nil { dAtA[i] = 0xa2 @@ -12184,11 +12290,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.VsphereVolume.Size())) - n261, err := m.VsphereVolume.MarshalTo(dAtA[i:]) + n263, err := m.VsphereVolume.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n261 + i += n263 } if m.Quobyte != nil { dAtA[i] = 0xaa @@ -12196,11 +12302,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Quobyte.Size())) - n262, err := m.Quobyte.MarshalTo(dAtA[i:]) + n264, err := m.Quobyte.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n262 + i += n264 } if m.AzureDisk != nil { dAtA[i] = 0xb2 @@ -12208,11 +12314,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.AzureDisk.Size())) - n263, err := m.AzureDisk.MarshalTo(dAtA[i:]) + n265, err := m.AzureDisk.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n263 + i += n265 } if m.PhotonPersistentDisk != nil { dAtA[i] = 0xba @@ -12220,11 +12326,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.PhotonPersistentDisk.Size())) - n264, err := m.PhotonPersistentDisk.MarshalTo(dAtA[i:]) + n266, err := m.PhotonPersistentDisk.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n264 + i += n266 } if m.PortworxVolume != nil { dAtA[i] = 0xc2 @@ -12232,11 +12338,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.PortworxVolume.Size())) - n265, err := m.PortworxVolume.MarshalTo(dAtA[i:]) + n267, err := m.PortworxVolume.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n265 + i += n267 } if m.ScaleIO != nil { dAtA[i] = 0xca @@ -12244,11 +12350,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.ScaleIO.Size())) - n266, err := m.ScaleIO.MarshalTo(dAtA[i:]) + n268, err := m.ScaleIO.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n266 + i += n268 } if m.Projected != nil { dAtA[i] = 0xd2 @@ -12256,11 +12362,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.Projected.Size())) - n267, err := m.Projected.MarshalTo(dAtA[i:]) + n269, err := m.Projected.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n267 + i += n269 } if m.StorageOS != nil { dAtA[i] = 0xda @@ -12268,11 +12374,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.StorageOS.Size())) - n268, err := m.StorageOS.MarshalTo(dAtA[i:]) + n270, err := m.StorageOS.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n268 + i += n270 } if m.CSI != nil { dAtA[i] = 0xe2 @@ -12280,11 +12386,11 @@ func (m *VolumeSource) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x1 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.CSI.Size())) - n269, err := m.CSI.MarshalTo(dAtA[i:]) + n271, err := m.CSI.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n269 + i += n271 } return i, nil } @@ -12344,11 +12450,11 @@ func (m *WeightedPodAffinityTerm) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x12 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.PodAffinityTerm.Size())) - n270, err := m.PodAffinityTerm.MarshalTo(dAtA[i:]) + n272, err := m.PodAffinityTerm.MarshalTo(dAtA[i:]) if err != nil { return 0, err } - i += n270 + i += n272 return i, nil } @@ -13159,6 +13265,36 @@ func (m *DaemonEndpoint) Size() (n int) { return n } +func (m *DataPartitionConfig) Size() (n int) { + var l int + _ = l + l = m.ObjectMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.StartTenant) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + l = len(m.EndTenant) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + l = len(m.ServiceGroupId) + n += 1 + l + sovGenerated(uint64(l)) + return n +} + +func (m *DataPartitionConfigList) Size() (n int) { + var l int + _ = l + l = m.ListMeta.Size() + n += 1 + l + sovGenerated(uint64(l)) + if len(m.Items) > 0 { + for _, e := range m.Items { + l = e.Size() + n += 1 + l + sovGenerated(uint64(l)) + } + } + return n +} + func (m *DownwardAPIProjection) Size() (n int) { var l int _ = l @@ -17006,6 +17142,32 @@ func (this *DaemonEndpoint) String() string { }, "") return s } +func (this *DataPartitionConfig) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DataPartitionConfig{`, + `ObjectMeta:` + strings.Replace(strings.Replace(this.ObjectMeta.String(), "ObjectMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ObjectMeta", 1), `&`, ``, 1) + `,`, + `StartTenant:` + fmt.Sprintf("%v", this.StartTenant) + `,`, + `IsStartTenantValid:` + fmt.Sprintf("%v", this.IsStartTenantValid) + `,`, + `EndTenant:` + fmt.Sprintf("%v", this.EndTenant) + `,`, + `IsEndTenantValid:` + fmt.Sprintf("%v", this.IsEndTenantValid) + `,`, + `ServiceGroupId:` + fmt.Sprintf("%v", this.ServiceGroupId) + `,`, + `}`, + }, "") + return s +} +func (this *DataPartitionConfigList) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&DataPartitionConfigList{`, + `ListMeta:` + strings.Replace(strings.Replace(this.ListMeta.String(), "ListMeta", "k8s_io_apimachinery_pkg_apis_meta_v1.ListMeta", 1), `&`, ``, 1) + `,`, + `Items:` + strings.Replace(strings.Replace(fmt.Sprintf("%v", this.Items), "DataPartitionConfig", "DataPartitionConfig", 1), `&`, ``, 1) + `,`, + `}`, + }, "") + return s +} func (this *DownwardAPIProjection) String() string { if this == nil { return "nil" @@ -27062,6 +27224,324 @@ func (m *DaemonEndpoint) Unmarshal(dAtA []byte) error { } return nil } +func (m *DataPartitionConfig) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DataPartitionConfig: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DataPartitionConfig: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ObjectMeta", 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 > l { + return io.ErrUnexpectedEOF + } + if err := m.ObjectMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field StartTenant", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.StartTenant = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field IsStartTenantValid", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.IsStartTenantValid = bool(v != 0) + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EndTenant", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.EndTenant = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field IsEndTenantValid", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.IsEndTenantValid = bool(v != 0) + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ServiceGroupId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ServiceGroupId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *DataPartitionConfigList) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: DataPartitionConfigList: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DataPartitionConfigList: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ListMeta", 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 > l { + return io.ErrUnexpectedEOF + } + if err := m.ListMeta.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Items", 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 > l { + return io.ErrUnexpectedEOF + } + m.Items = append(m.Items, DataPartitionConfig{}) + if err := m.Items[len(m.Items)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipGenerated(dAtA[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *DownwardAPIProjection) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -58327,915 +58807,923 @@ func init() { } var fileDescriptorGenerated = []byte{ - // 14559 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x7d, 0x90, 0x1c, 0xc7, - 0x75, 0x18, 0xae, 0xd9, 0xbd, 0xaf, 0x7d, 0xf7, 0x89, 0x06, 0x40, 0x1e, 0x8e, 0x00, 0x16, 0x1c, - 0x48, 0x20, 0x28, 0x92, 0x07, 0x11, 0x24, 0x25, 0x4a, 0x94, 0x28, 0xdd, 0xdd, 0xde, 0x01, 0x4b, - 0xe0, 0x0e, 0xcb, 0xde, 0x03, 0x20, 0x51, 0x94, 0xac, 0xb9, 0x9d, 0xbe, 0xbb, 0xe1, 0xed, 0xce, - 0x2c, 0x67, 0x66, 0x0f, 0x38, 0xfe, 0xec, 0xfa, 0x39, 0x72, 0xec, 0x58, 0xb1, 0x93, 0x52, 0x25, - 0xae, 0x7c, 0xd8, 0x2e, 0xa7, 0xca, 0x71, 0xca, 0x76, 0xe4, 0xa4, 0xe2, 0xd8, 0xb1, 0x1d, 0xcb, - 0x49, 0xfc, 0x91, 0x54, 0x9c, 0xfc, 0xe1, 0x38, 0xa9, 0x4a, 0x49, 0x15, 0x57, 0x2e, 0x36, 0x9c, - 0x8a, 0xcb, 0x7f, 0xc4, 0x4e, 0x95, 0x53, 0xae, 0xca, 0xc5, 0x65, 0xa7, 0xfa, 0x73, 0xba, 0x67, - 0x67, 0x76, 0xf7, 0xc0, 0xc3, 0x91, 0x76, 0xe9, 0xbf, 0xdd, 0x7e, 0xaf, 0x5f, 0xf7, 0xf4, 0xe7, - 0x7b, 0xaf, 0xdf, 0x07, 0xbc, 0xb2, 0xf3, 0x72, 0x34, 0xef, 0x05, 0x57, 0x76, 0x3a, 0x1b, 0x24, - 0xf4, 0x49, 0x4c, 0xa2, 0x2b, 0xbb, 0xc4, 0x77, 0x83, 0xf0, 0x8a, 0x00, 0x38, 0x6d, 0xef, 0x4a, - 0x23, 0x08, 0xc9, 0x95, 0xdd, 0xe7, 0xaf, 0x6c, 0x11, 0x9f, 0x84, 0x4e, 0x4c, 0xdc, 0xf9, 0x76, - 0x18, 0xc4, 0x01, 0x42, 0x1c, 0x67, 0xde, 0x69, 0x7b, 0xf3, 0x14, 0x67, 0x7e, 0xf7, 0xf9, 0xb9, - 0xe7, 0xb6, 0xbc, 0x78, 0xbb, 0xb3, 0x31, 0xdf, 0x08, 0x5a, 0x57, 0xb6, 0x82, 0xad, 0xe0, 0x0a, - 0x43, 0xdd, 0xe8, 0x6c, 0xb2, 0x7f, 0xec, 0x0f, 0xfb, 0xc5, 0x49, 0xcc, 0xbd, 0x98, 0x34, 0xd3, - 0x72, 0x1a, 0xdb, 0x9e, 0x4f, 0xc2, 0xbd, 0x2b, 0xed, 0x9d, 0x2d, 0xd6, 0x6e, 0x48, 0xa2, 0xa0, - 0x13, 0x36, 0x48, 0xba, 0xe1, 0x9e, 0xb5, 0xa2, 0x2b, 0x2d, 0x12, 0x3b, 0x19, 0xdd, 0x9d, 0xbb, - 0x92, 0x57, 0x2b, 0xec, 0xf8, 0xb1, 0xd7, 0xea, 0x6e, 0xe6, 0xa3, 0xfd, 0x2a, 0x44, 0x8d, 0x6d, - 0xd2, 0x72, 0xba, 0xea, 0xbd, 0x90, 0x57, 0xaf, 0x13, 0x7b, 0xcd, 0x2b, 0x9e, 0x1f, 0x47, 0x71, - 0x98, 0xae, 0x64, 0x7f, 0xc3, 0x82, 0x0b, 0x0b, 0x77, 0xeb, 0xcb, 0x4d, 0x27, 0x8a, 0xbd, 0xc6, - 0x62, 0x33, 0x68, 0xec, 0xd4, 0xe3, 0x20, 0x24, 0x77, 0x82, 0x66, 0xa7, 0x45, 0xea, 0x6c, 0x20, - 0xd0, 0xb3, 0x30, 0xb6, 0xcb, 0xfe, 0x57, 0x2b, 0xb3, 0xd6, 0x05, 0xeb, 0x72, 0x69, 0x71, 0xe6, - 0xd7, 0xf7, 0xcb, 0x1f, 0x78, 0xb0, 0x5f, 0x1e, 0xbb, 0x23, 0xca, 0xb1, 0xc2, 0x40, 0x97, 0x60, - 0x64, 0x33, 0x5a, 0xdf, 0x6b, 0x93, 0xd9, 0x02, 0xc3, 0x9d, 0x12, 0xb8, 0x23, 0x2b, 0x75, 0x5a, - 0x8a, 0x05, 0x14, 0x5d, 0x81, 0x52, 0xdb, 0x09, 0x63, 0x2f, 0xf6, 0x02, 0x7f, 0xb6, 0x78, 0xc1, - 0xba, 0x3c, 0xbc, 0x78, 0x42, 0xa0, 0x96, 0x6a, 0x12, 0x80, 0x13, 0x1c, 0xda, 0x8d, 0x90, 0x38, - 0xee, 0x2d, 0xbf, 0xb9, 0x37, 0x3b, 0x74, 0xc1, 0xba, 0x3c, 0x96, 0x74, 0x03, 0x8b, 0x72, 0xac, - 0x30, 0xec, 0x3f, 0xb6, 0x60, 0x64, 0xa1, 0xc1, 0x2a, 0x7e, 0x09, 0xc6, 0xe8, 0xec, 0xb8, 0x4e, - 0xec, 0xb0, 0xfe, 0x8f, 0x5f, 0xfd, 0xc8, 0x7c, 0xb2, 0x88, 0xd4, 0x60, 0xcd, 0xb7, 0x77, 0xb6, - 0x68, 0x41, 0x34, 0x4f, 0xb1, 0xe7, 0x77, 0x9f, 0x9f, 0xbf, 0xb5, 0xf1, 0x16, 0x69, 0xc4, 0xab, - 0x24, 0x76, 0x16, 0x91, 0x68, 0x0a, 0x92, 0x32, 0xac, 0xa8, 0xa2, 0xcf, 0xc0, 0x50, 0xd4, 0x26, - 0x0d, 0xf6, 0xc5, 0xe3, 0x57, 0xcf, 0xcf, 0x77, 0x2f, 0xd1, 0x79, 0xde, 0x97, 0x7a, 0x9b, 0x34, - 0x16, 0x27, 0x04, 0xad, 0x21, 0xfa, 0x0f, 0xb3, 0x9a, 0xe8, 0x3a, 0x8c, 0x44, 0xb1, 0x13, 0x77, - 0x22, 0x36, 0x14, 0xe3, 0x57, 0x2f, 0xf4, 0xa0, 0xc1, 0xf0, 0x92, 0x71, 0xe5, 0xff, 0xb1, 0xa8, - 0x6f, 0x7f, 0xcd, 0x02, 0xe0, 0x88, 0x37, 0xbd, 0x28, 0x46, 0x6f, 0x76, 0x7d, 0xfc, 0xfc, 0x60, - 0x1f, 0x4f, 0x6b, 0xb3, 0x4f, 0x57, 0xa3, 0x2c, 0x4b, 0xb4, 0x0f, 0xff, 0x34, 0x0c, 0x7b, 0x31, - 0x69, 0x45, 0xb3, 0x85, 0x0b, 0xc5, 0xcb, 0xe3, 0x57, 0xe7, 0xf2, 0x7b, 0xbd, 0x38, 0x29, 0xc8, - 0x0c, 0x57, 0x69, 0x05, 0xcc, 0xeb, 0xd9, 0x3f, 0x52, 0x94, 0xbd, 0xa5, 0x83, 0x41, 0xe7, 0xd8, - 0x0f, 0x5c, 0xb2, 0xe6, 0xb4, 0x48, 0x7a, 0xa9, 0xad, 0x89, 0x72, 0xac, 0x30, 0xd0, 0xd3, 0x30, - 0xda, 0x0e, 0x5c, 0x86, 0xcc, 0xd7, 0xda, 0xb4, 0x40, 0x1e, 0xad, 0xf1, 0x62, 0x2c, 0xe1, 0xe8, - 0x22, 0x0c, 0xb7, 0x03, 0xb7, 0x5a, 0x61, 0xc3, 0x5b, 0x4a, 0x3a, 0x53, 0xa3, 0x85, 0x98, 0xc3, - 0xd0, 0x1d, 0x98, 0x08, 0xc9, 0x46, 0x10, 0xc4, 0xbc, 0x47, 0x6c, 0x95, 0xe5, 0x4c, 0x05, 0xd6, - 0xf0, 0x16, 0x67, 0x1e, 0xec, 0x97, 0x27, 0xf4, 0x12, 0x6c, 0xd0, 0x41, 0x5f, 0x84, 0xa9, 0xc8, - 0x77, 0xda, 0xd1, 0xb6, 0xa2, 0x3c, 0xcc, 0x28, 0xdb, 0x59, 0x94, 0xeb, 0x06, 0xe6, 0x22, 0x7a, - 0xb0, 0x5f, 0x9e, 0x32, 0xcb, 0x70, 0x8a, 0x1a, 0x7a, 0x03, 0x26, 0x43, 0x12, 0xd1, 0x7d, 0x2b, - 0xc8, 0x8f, 0x30, 0xf2, 0x4f, 0x66, 0x77, 0x5c, 0x43, 0x5c, 0x3c, 0xf1, 0x60, 0xbf, 0x3c, 0x69, - 0x14, 0x61, 0x93, 0x94, 0xfd, 0x6f, 0x8a, 0x30, 0xa1, 0xaf, 0x3b, 0x3a, 0x45, 0x8d, 0xa0, 0xd5, - 0x6e, 0x92, 0x98, 0x4f, 0x91, 0xb6, 0x0d, 0x97, 0x44, 0x39, 0x56, 0x18, 0x74, 0xdc, 0x49, 0x18, - 0x06, 0xa1, 0x98, 0x20, 0x35, 0xee, 0xcb, 0xb4, 0x10, 0x73, 0x98, 0x3e, 0x8f, 0xc5, 0x41, 0xe7, - 0x71, 0x68, 0x90, 0x79, 0xe4, 0x5d, 0x16, 0xa3, 0xdd, 0x63, 0x1e, 0xc5, 0x96, 0xd2, 0xe6, 0x51, - 0x6c, 0x2a, 0x83, 0x8e, 0x3e, 0x8f, 0x82, 0xf2, 0x48, 0xff, 0x79, 0x14, 0xb4, 0x8d, 0x79, 0x14, - 0xd4, 0x53, 0xd4, 0xb4, 0x79, 0x14, 0xe4, 0x47, 0xfb, 0xce, 0xa3, 0xa0, 0xae, 0xcf, 0xa3, 0x20, - 0x6e, 0x92, 0xb2, 0x7f, 0xb0, 0x00, 0x63, 0x0b, 0x9b, 0x9b, 0x9e, 0xef, 0xc5, 0x7b, 0x74, 0x80, - 0xe8, 0x26, 0x92, 0xff, 0xc5, 0xc1, 0x90, 0x39, 0x40, 0x6b, 0x1a, 0x1e, 0x1f, 0x20, 0xbd, 0x04, - 0x1b, 0x74, 0x10, 0x86, 0xf1, 0x76, 0xe0, 0x2a, 0xb2, 0xfc, 0x38, 0x2c, 0x67, 0x91, 0xad, 0x25, - 0x68, 0x8b, 0xd3, 0x0f, 0xf6, 0xcb, 0xe3, 0x5a, 0x01, 0xd6, 0x89, 0xa0, 0x0d, 0x98, 0xa6, 0x7f, - 0xfd, 0xd8, 0x53, 0x74, 0xf9, 0x11, 0x79, 0x31, 0x8f, 0xae, 0x86, 0xba, 0x78, 0xf2, 0xc1, 0x7e, - 0x79, 0x3a, 0x55, 0x88, 0xd3, 0x04, 0xed, 0x77, 0x60, 0x6a, 0x21, 0x8e, 0x9d, 0xc6, 0x36, 0x71, - 0xf9, 0x8d, 0x86, 0x5e, 0x84, 0x21, 0x3f, 0x39, 0x84, 0x2e, 0xc8, 0x13, 0x9b, 0xae, 0xc1, 0x83, - 0xfd, 0xf2, 0xcc, 0x6d, 0xdf, 0x7b, 0xbb, 0x23, 0x6e, 0x49, 0xb6, 0x40, 0x19, 0x36, 0xba, 0x0a, - 0xe0, 0x92, 0x5d, 0xaf, 0x41, 0x6a, 0x4e, 0xbc, 0x2d, 0x96, 0xbc, 0xba, 0x39, 0x2a, 0x0a, 0x82, - 0x35, 0x2c, 0xfb, 0x3e, 0x94, 0x16, 0x76, 0x03, 0xcf, 0xad, 0x05, 0x6e, 0x84, 0x76, 0x60, 0xba, - 0x1d, 0x92, 0x4d, 0x12, 0xaa, 0xa2, 0x59, 0x8b, 0x9d, 0xac, 0x97, 0x33, 0x3f, 0xd6, 0x44, 0x5d, - 0xf6, 0xe3, 0x70, 0x6f, 0xf1, 0x71, 0xd1, 0xde, 0x74, 0x0a, 0x8a, 0xd3, 0x94, 0xed, 0x7f, 0x5d, - 0x80, 0xd3, 0x0b, 0xef, 0x74, 0x42, 0x52, 0xf1, 0xa2, 0x9d, 0xf4, 0x8d, 0xef, 0x7a, 0xd1, 0x4e, - 0xd6, 0x31, 0x5c, 0x11, 0xe5, 0x58, 0x61, 0xa0, 0xe7, 0x60, 0x94, 0xfe, 0xbe, 0x8d, 0xab, 0xe2, - 0x93, 0x4f, 0x0a, 0xe4, 0xf1, 0x8a, 0x13, 0x3b, 0x15, 0x0e, 0xc2, 0x12, 0x07, 0xad, 0xc2, 0x78, - 0x83, 0x5d, 0x3b, 0x5b, 0xab, 0x81, 0x2b, 0x77, 0xfc, 0x33, 0x14, 0x7d, 0x29, 0x29, 0x3e, 0xd8, - 0x2f, 0xcf, 0xf2, 0xbe, 0x09, 0x12, 0x1a, 0x0c, 0xeb, 0xf5, 0x91, 0xad, 0xf8, 0x0d, 0x7e, 0x24, - 0x40, 0x06, 0xaf, 0x71, 0x59, 0x63, 0x1d, 0x86, 0xd9, 0x99, 0x35, 0x91, 0xcd, 0x36, 0xa0, 0xe7, - 0x61, 0x68, 0xc7, 0xf3, 0x5d, 0xb6, 0xb1, 0x4b, 0x8b, 0xe7, 0xe8, 0x9c, 0xdf, 0xf0, 0x7c, 0xf7, - 0x60, 0xbf, 0x7c, 0xc2, 0xe8, 0x0e, 0x2d, 0xc4, 0x0c, 0xd5, 0xfe, 0x23, 0x0b, 0xca, 0x0c, 0xb6, - 0xe2, 0x35, 0x49, 0x8d, 0x84, 0x91, 0x17, 0xc5, 0xc4, 0x8f, 0x8d, 0x01, 0xbd, 0x0a, 0x10, 0x91, - 0x46, 0x48, 0x62, 0x6d, 0x48, 0xd5, 0xc2, 0xa8, 0x2b, 0x08, 0xd6, 0xb0, 0x28, 0x83, 0x14, 0x6d, - 0x3b, 0x21, 0xd1, 0xee, 0x37, 0xc5, 0x20, 0xd5, 0x25, 0x00, 0x27, 0x38, 0x06, 0x83, 0x54, 0xec, - 0xc7, 0x20, 0xa1, 0x4f, 0xc1, 0x74, 0xd2, 0x58, 0xd4, 0x76, 0x1a, 0x72, 0x00, 0xd9, 0x96, 0xa9, - 0x9b, 0x20, 0x9c, 0xc6, 0xb5, 0xff, 0xa1, 0x25, 0x16, 0x0f, 0xfd, 0xea, 0xf7, 0xf9, 0xb7, 0xda, - 0xbf, 0x60, 0xc1, 0xe8, 0xa2, 0xe7, 0xbb, 0x9e, 0xbf, 0x75, 0x0c, 0xdc, 0xe0, 0x0d, 0x18, 0x89, - 0x9d, 0x70, 0x8b, 0xc4, 0xe2, 0x00, 0xcc, 0x3c, 0xa8, 0x78, 0x4d, 0x4c, 0x77, 0x24, 0xf1, 0x1b, - 0x24, 0x61, 0xe7, 0xd6, 0x59, 0x55, 0x2c, 0x48, 0xd8, 0x7f, 0x6d, 0x14, 0xce, 0x2c, 0xd5, 0xab, - 0x39, 0xeb, 0xea, 0x12, 0x8c, 0xb8, 0xa1, 0xb7, 0x4b, 0x42, 0x31, 0xce, 0x8a, 0x4a, 0x85, 0x95, - 0x62, 0x01, 0x45, 0x2f, 0xc3, 0x04, 0x67, 0xd0, 0xaf, 0x3b, 0xbe, 0xdb, 0x94, 0x43, 0x7c, 0x4a, - 0x60, 0x4f, 0xdc, 0xd1, 0x60, 0xd8, 0xc0, 0x3c, 0xe4, 0xa2, 0xba, 0x94, 0xda, 0x8c, 0x79, 0xcc, - 0xff, 0x57, 0x2c, 0x98, 0xe1, 0xcd, 0x2c, 0xc4, 0x71, 0xe8, 0x6d, 0x74, 0x62, 0x42, 0xaf, 0x69, - 0x7a, 0xd2, 0x2d, 0x65, 0x8d, 0x56, 0xee, 0x08, 0xcc, 0xdf, 0x49, 0x51, 0xe1, 0x87, 0xe0, 0xac, - 0x68, 0x77, 0x26, 0x0d, 0xc6, 0x5d, 0xcd, 0xa2, 0xef, 0xb2, 0x60, 0xae, 0x11, 0xf8, 0x71, 0x18, - 0x34, 0x9b, 0x24, 0xac, 0x75, 0x36, 0x9a, 0x5e, 0xb4, 0xcd, 0xd7, 0x29, 0x26, 0x9b, 0xe2, 0x8a, - 0xcf, 0x9c, 0x43, 0x85, 0x24, 0xe6, 0xf0, 0xfc, 0x83, 0xfd, 0xf2, 0xdc, 0x52, 0x2e, 0x29, 0xdc, - 0xa3, 0x19, 0xb4, 0x03, 0x88, 0x5e, 0xa5, 0xf5, 0xd8, 0xd9, 0x22, 0x49, 0xe3, 0xa3, 0x83, 0x37, - 0xfe, 0xd8, 0x83, 0xfd, 0x32, 0x5a, 0xeb, 0x22, 0x81, 0x33, 0xc8, 0xa2, 0xb7, 0xe1, 0x14, 0x2d, - 0xed, 0xfa, 0xd6, 0xb1, 0xc1, 0x9b, 0x9b, 0x7d, 0xb0, 0x5f, 0x3e, 0xb5, 0x96, 0x41, 0x04, 0x67, - 0x92, 0x46, 0xdf, 0x69, 0xc1, 0x99, 0xe4, 0xf3, 0x97, 0xef, 0xb7, 0x1d, 0xdf, 0x4d, 0x1a, 0x2e, - 0x0d, 0xde, 0x30, 0x3d, 0x93, 0xcf, 0x2c, 0xe5, 0x51, 0xc2, 0xf9, 0x8d, 0xcc, 0x2d, 0xc1, 0xe9, - 0xcc, 0xd5, 0x82, 0x66, 0xa0, 0xb8, 0x43, 0x38, 0x17, 0x54, 0xc2, 0xf4, 0x27, 0x3a, 0x05, 0xc3, - 0xbb, 0x4e, 0xb3, 0x23, 0x36, 0x0a, 0xe6, 0x7f, 0x3e, 0x51, 0x78, 0xd9, 0xa2, 0xfc, 0xf0, 0xf4, - 0x52, 0xbd, 0xfa, 0x50, 0xbb, 0x50, 0xbf, 0x86, 0x0a, 0x3d, 0xaf, 0xa1, 0xe4, 0x52, 0x2b, 0xe6, - 0x5e, 0x6a, 0xff, 0x7f, 0xc6, 0x16, 0x1a, 0x62, 0x5b, 0xe8, 0xe3, 0x39, 0x5b, 0xe8, 0x88, 0x37, - 0xce, 0x6e, 0xce, 0x2a, 0xe2, 0xec, 0x76, 0x26, 0xc7, 0x72, 0x33, 0x68, 0x38, 0xcd, 0xf4, 0xd1, - 0x77, 0xc8, 0xa5, 0x74, 0x34, 0xf3, 0xd8, 0x80, 0x89, 0x25, 0xa7, 0xed, 0x6c, 0x78, 0x4d, 0x2f, - 0xf6, 0x48, 0x84, 0x9e, 0x82, 0xa2, 0xe3, 0xba, 0x8c, 0xdb, 0x2a, 0x2d, 0x9e, 0x7e, 0xb0, 0x5f, - 0x2e, 0x2e, 0xb8, 0xf4, 0xda, 0x07, 0x85, 0xb5, 0x87, 0x29, 0x06, 0xfa, 0x30, 0x0c, 0xb9, 0x61, - 0xd0, 0x66, 0x12, 0x6f, 0x89, 0xed, 0xba, 0xa1, 0x4a, 0x18, 0xb4, 0x53, 0xa8, 0x0c, 0xc7, 0xfe, - 0xe5, 0x02, 0x9c, 0x5d, 0x22, 0xed, 0xed, 0x95, 0x7a, 0xce, 0xf9, 0x7d, 0x19, 0xc6, 0x5a, 0x81, - 0xef, 0xc5, 0x41, 0x18, 0x89, 0xa6, 0xd9, 0x8a, 0x58, 0x15, 0x65, 0x58, 0x41, 0xd1, 0x05, 0x18, - 0x6a, 0x27, 0x4c, 0xa5, 0x52, 0x21, 0x30, 0x76, 0x92, 0x41, 0x28, 0x46, 0x27, 0x22, 0xa1, 0x58, - 0x31, 0x0a, 0xe3, 0x76, 0x44, 0x42, 0xcc, 0x20, 0xc9, 0xcd, 0x4c, 0xef, 0x6c, 0x71, 0x42, 0xa7, - 0x6e, 0x66, 0x0a, 0xc1, 0x1a, 0x16, 0xaa, 0x41, 0x29, 0x4a, 0xcd, 0xec, 0x40, 0xdb, 0x74, 0x92, - 0x5d, 0xdd, 0x6a, 0x26, 0x13, 0x22, 0xc6, 0x8d, 0x32, 0xd2, 0xf7, 0xea, 0xfe, 0x7a, 0x01, 0x10, - 0x1f, 0xc2, 0x3f, 0x67, 0x03, 0x77, 0xbb, 0x7b, 0xe0, 0x06, 0xdf, 0x12, 0x47, 0x35, 0x7a, 0xff, - 0xdb, 0x82, 0xb3, 0x4b, 0x9e, 0xef, 0x92, 0x30, 0x67, 0x01, 0x3e, 0x1a, 0xdd, 0xde, 0xe1, 0x98, - 0x06, 0x63, 0x89, 0x0d, 0x1d, 0xc1, 0x12, 0xb3, 0xff, 0xd0, 0x02, 0xc4, 0x3f, 0xfb, 0x7d, 0xf7, - 0xb1, 0xb7, 0xbb, 0x3f, 0xf6, 0x08, 0x96, 0x85, 0x7d, 0x13, 0xa6, 0x96, 0x9a, 0x1e, 0xf1, 0xe3, - 0x6a, 0x6d, 0x29, 0xf0, 0x37, 0xbd, 0x2d, 0xf4, 0x09, 0x98, 0x8a, 0xbd, 0x16, 0x09, 0x3a, 0x71, - 0x9d, 0x34, 0x02, 0x9f, 0x49, 0x92, 0xd6, 0xe5, 0x61, 0xae, 0x88, 0x58, 0x37, 0x20, 0x38, 0x85, - 0x69, 0xff, 0x97, 0x02, 0xc0, 0x52, 0xd0, 0x6a, 0x05, 0x7e, 0xd5, 0xdf, 0x0c, 0xe8, 0x06, 0xd1, - 0x84, 0xe1, 0x09, 0x5d, 0x18, 0x16, 0x82, 0xef, 0x45, 0x18, 0xf6, 0x5a, 0xce, 0x16, 0x49, 0xab, - 0x79, 0xaa, 0xb4, 0x10, 0x73, 0x18, 0xfa, 0x1c, 0x94, 0xa4, 0x72, 0x5d, 0xaa, 0x39, 0x2f, 0xe7, - 0xa8, 0x36, 0x18, 0x12, 0x26, 0x6f, 0x77, 0xbc, 0x90, 0xb4, 0x88, 0x1f, 0x47, 0x89, 0x38, 0x20, - 0xa1, 0x11, 0x4e, 0xa8, 0xa1, 0xcf, 0x49, 0xfe, 0x76, 0x35, 0xe8, 0xf8, 0xb1, 0xbc, 0x07, 0x33, - 0x35, 0x0f, 0x77, 0x12, 0xbc, 0x34, 0x03, 0xcc, 0x2b, 0x63, 0x83, 0x14, 0xba, 0x05, 0xd3, 0xac, - 0xfb, 0xb5, 0x4e, 0xb3, 0x59, 0x0b, 0x9a, 0x5e, 0x83, 0x8b, 0x90, 0xa5, 0xc5, 0x0f, 0x49, 0x41, - 0xbb, 0x6a, 0x82, 0xe9, 0x4d, 0x90, 0xfc, 0xc3, 0xe9, 0xda, 0xf6, 0x6f, 0xd1, 0xc5, 0x19, 0xb4, - 0xda, 0x81, 0x4f, 0xfc, 0x78, 0x29, 0xf0, 0x5d, 0xae, 0xde, 0xfe, 0x04, 0x0c, 0xc5, 0x74, 0xb1, - 0xf1, 0x41, 0xbe, 0x24, 0x07, 0x99, 0x2e, 0xb1, 0x83, 0xfd, 0xf2, 0x63, 0xdd, 0x35, 0xd8, 0x22, - 0x64, 0x75, 0xd0, 0xc7, 0x95, 0xf6, 0x98, 0x8f, 0xff, 0x93, 0xa6, 0x6e, 0xf8, 0x60, 0xbf, 0x3c, - 0xad, 0xaa, 0x99, 0xea, 0x62, 0xf4, 0x34, 0x8c, 0xb6, 0x48, 0x14, 0xd1, 0xb9, 0x4b, 0xe9, 0xde, - 0x56, 0x79, 0x31, 0x96, 0xf0, 0x44, 0x97, 0x37, 0x94, 0xaf, 0xcb, 0xb3, 0xff, 0x83, 0x05, 0xd3, - 0xaa, 0xaf, 0x42, 0xaf, 0xf5, 0xe8, 0x45, 0xae, 0x37, 0x00, 0x1a, 0xf2, 0x03, 0xa5, 0x32, 0xfa, - 0x52, 0x26, 0x17, 0xd4, 0x35, 0x8c, 0x09, 0x65, 0x55, 0x14, 0x61, 0x8d, 0x9a, 0xfd, 0x2f, 0x2c, - 0x38, 0x99, 0xfa, 0xa2, 0x63, 0xd0, 0xac, 0x5f, 0x37, 0x35, 0xeb, 0x17, 0x7b, 0x7e, 0x8c, 0xd0, - 0x02, 0x66, 0xab, 0xd8, 0xff, 0x66, 0x11, 0x4a, 0xfc, 0x4c, 0x58, 0x75, 0xda, 0xc7, 0x30, 0x17, - 0x55, 0x18, 0x62, 0xd4, 0x79, 0xc7, 0x9f, 0xca, 0xee, 0xb8, 0xe8, 0xce, 0x7c, 0xc5, 0x89, 0x1d, - 0xce, 0x79, 0xaa, 0x63, 0x85, 0x16, 0x61, 0x46, 0x02, 0x39, 0x00, 0x1b, 0x9e, 0xef, 0x84, 0x7b, - 0xb4, 0x6c, 0xb6, 0xc8, 0x08, 0x3e, 0xd7, 0x9b, 0xe0, 0xa2, 0xc2, 0xe7, 0x64, 0x55, 0x5f, 0x13, - 0x00, 0xd6, 0x88, 0xce, 0x7d, 0x0c, 0x4a, 0x0a, 0xf9, 0x30, 0x0c, 0xe4, 0xdc, 0xa7, 0x60, 0x3a, - 0xd5, 0x56, 0xbf, 0xea, 0x13, 0x3a, 0xff, 0xf9, 0x8b, 0xec, 0x14, 0x10, 0xbd, 0x5e, 0xf6, 0x77, - 0xc5, 0x15, 0xf5, 0x0e, 0x9c, 0x6a, 0x66, 0x9c, 0xfc, 0x62, 0xaa, 0x06, 0xbf, 0x29, 0xce, 0x8a, - 0xcf, 0x3e, 0x95, 0x05, 0xc5, 0x99, 0x6d, 0x50, 0x9e, 0x2a, 0x68, 0xd3, 0x35, 0xef, 0x34, 0x75, - 0xf1, 0xe4, 0x96, 0x28, 0xc3, 0x0a, 0x4a, 0x8f, 0xb0, 0x53, 0xaa, 0xf3, 0x37, 0xc8, 0x5e, 0x9d, - 0x34, 0x49, 0x23, 0x0e, 0xc2, 0xf7, 0xb4, 0xfb, 0xe7, 0xf8, 0xe8, 0xf3, 0x13, 0x70, 0x5c, 0x10, - 0x28, 0xde, 0x20, 0x7b, 0x7c, 0x2a, 0xf4, 0xaf, 0x2b, 0xf6, 0xfc, 0xba, 0x9f, 0xb6, 0x60, 0x52, - 0x7d, 0xdd, 0x31, 0x6c, 0xf5, 0x45, 0x73, 0xab, 0x9f, 0xeb, 0xb9, 0xc0, 0x73, 0x36, 0xf9, 0xd7, - 0x0b, 0x70, 0x46, 0xe1, 0x50, 0x59, 0x8a, 0xff, 0x11, 0xab, 0xea, 0x0a, 0x94, 0x7c, 0xa5, 0xe5, - 0xb3, 0x4c, 0xf5, 0x5a, 0xa2, 0xe3, 0x4b, 0x70, 0xd4, 0x8d, 0x5f, 0xc8, 0xbd, 0xf1, 0x17, 0xa1, - 0xd8, 0xf1, 0x5c, 0x71, 0x67, 0x7c, 0x44, 0x8e, 0xf6, 0xed, 0x6a, 0xe5, 0x60, 0xbf, 0xfc, 0x64, - 0xde, 0x53, 0x34, 0xbd, 0xac, 0xa2, 0xf9, 0xdb, 0xd5, 0x0a, 0xa6, 0x95, 0xd1, 0x02, 0x4c, 0xcb, - 0x2b, 0xfc, 0x0e, 0x65, 0x4f, 0xc5, 0x93, 0x5b, 0x29, 0xd1, 0x61, 0x63, 0x13, 0x8c, 0xd3, 0xf8, - 0xa8, 0x02, 0x33, 0x3b, 0x9d, 0x0d, 0xd2, 0x24, 0x31, 0xff, 0xe0, 0x1b, 0x44, 0x5e, 0xcf, 0x4a, - 0x92, 0xbd, 0x91, 0x82, 0xe3, 0xae, 0x1a, 0xf6, 0x9f, 0xb1, 0x23, 0x5e, 0x8c, 0x5e, 0x2d, 0x0c, - 0xe8, 0xc2, 0xa2, 0xd4, 0xdf, 0xcb, 0xe5, 0x3c, 0xc8, 0xaa, 0xb8, 0x41, 0xf6, 0xd6, 0x03, 0x2a, - 0xc9, 0x64, 0xaf, 0x0a, 0x63, 0xcd, 0x0f, 0xf5, 0x5c, 0xf3, 0x3f, 0x5b, 0x80, 0xd3, 0x6a, 0x04, - 0x0c, 0xa6, 0xf9, 0xcf, 0xfb, 0x18, 0x3c, 0x0f, 0xe3, 0x2e, 0xd9, 0x74, 0x3a, 0xcd, 0x58, 0x3d, - 0x37, 0x0c, 0xf3, 0x27, 0xa7, 0x4a, 0x52, 0x8c, 0x75, 0x9c, 0x43, 0x0c, 0xdb, 0x8f, 0x8d, 0xb3, - 0xbb, 0x35, 0x76, 0xe8, 0x1a, 0x3f, 0x2a, 0x3e, 0xf9, 0x43, 0x30, 0xda, 0x08, 0x5a, 0x2d, 0xc7, - 0x77, 0xd9, 0x95, 0x57, 0x5a, 0x1c, 0xa7, 0xec, 0xd8, 0x12, 0x2f, 0xc2, 0x12, 0x86, 0xce, 0xc2, - 0x90, 0x13, 0x6e, 0x71, 0x5e, 0xb7, 0xb4, 0x38, 0x46, 0x5b, 0x5a, 0x08, 0xb7, 0x22, 0xcc, 0x4a, - 0xa9, 0xc8, 0x7a, 0x2f, 0x08, 0x77, 0x3c, 0x7f, 0xab, 0xe2, 0x85, 0x62, 0x4b, 0xa8, 0xbb, 0xf0, - 0xae, 0x82, 0x60, 0x0d, 0x0b, 0xad, 0xc0, 0x70, 0x3b, 0x08, 0xe3, 0x68, 0x76, 0x84, 0x0d, 0xf7, - 0x93, 0x39, 0x07, 0x11, 0xff, 0xda, 0x5a, 0x10, 0xc6, 0xfa, 0xfb, 0x6b, 0x18, 0x47, 0x98, 0x57, - 0x47, 0x1f, 0x87, 0x22, 0xf1, 0x77, 0x67, 0x47, 0xf3, 0x6d, 0x02, 0x96, 0xfd, 0xdd, 0x3b, 0x4e, - 0x98, 0x9c, 0xd2, 0xcb, 0xfe, 0x2e, 0xa6, 0x75, 0x4c, 0x19, 0x61, 0xec, 0x91, 0xca, 0x08, 0xa5, - 0xa3, 0x93, 0x11, 0x30, 0x4c, 0x36, 0xbd, 0x5d, 0xe2, 0x93, 0x28, 0xaa, 0x85, 0xc1, 0x06, 0x99, - 0x05, 0xd6, 0xf3, 0x33, 0xd9, 0x8f, 0x76, 0xc1, 0x06, 0xe1, 0x0f, 0xb6, 0x37, 0xf5, 0x3a, 0xd8, - 0x24, 0x81, 0x6e, 0xc3, 0x14, 0x15, 0x1a, 0xbd, 0x84, 0xe8, 0x78, 0x3f, 0xa2, 0x4c, 0xb4, 0xc3, - 0x46, 0x25, 0x9c, 0x22, 0x82, 0x5e, 0x83, 0x52, 0xd3, 0xdb, 0x24, 0x8d, 0xbd, 0x46, 0x93, 0xcc, - 0x4e, 0x30, 0x8a, 0x99, 0xdb, 0xea, 0xa6, 0x44, 0xe2, 0x42, 0xa7, 0xfa, 0x8b, 0x93, 0xea, 0xe8, - 0x0e, 0x3c, 0x16, 0x93, 0xb0, 0xe5, 0xf9, 0x0e, 0xdd, 0x0e, 0x42, 0x5e, 0x60, 0x4f, 0x9f, 0x93, - 0x6c, 0xbd, 0x9d, 0x17, 0x43, 0xf7, 0xd8, 0x7a, 0x26, 0x16, 0xce, 0xa9, 0x9d, 0x25, 0x72, 0x4d, - 0xbd, 0x1b, 0x91, 0x0b, 0x6d, 0xb0, 0xb7, 0xae, 0x4e, 0xe8, 0xc5, 0x7b, 0x74, 0xfd, 0x92, 0xfb, - 0xf1, 0xec, 0x74, 0x4f, 0x3d, 0x83, 0x8e, 0xaa, 0x1e, 0xc4, 0xf4, 0x42, 0x9c, 0x26, 0x48, 0xb7, - 0x76, 0x14, 0xbb, 0x9e, 0x3f, 0x3b, 0xc3, 0x4e, 0x0c, 0xb5, 0x33, 0xea, 0xb4, 0x10, 0x73, 0x18, - 0x7b, 0xe7, 0xa2, 0x3f, 0x6e, 0xd1, 0x13, 0xf4, 0x04, 0x43, 0x4c, 0xde, 0xb9, 0x24, 0x00, 0x27, - 0x38, 0x94, 0xa9, 0x89, 0xe3, 0xbd, 0x59, 0xc4, 0x50, 0xd5, 0x76, 0x59, 0x5f, 0xff, 0x1c, 0xa6, - 0xe5, 0xe8, 0x26, 0x8c, 0x12, 0x7f, 0x77, 0x25, 0x0c, 0x5a, 0xb3, 0x27, 0xf3, 0xf7, 0xec, 0x32, - 0x47, 0xe1, 0x07, 0x7a, 0x22, 0xe0, 0x89, 0x62, 0x2c, 0x49, 0xa0, 0xfb, 0x30, 0x9b, 0x31, 0x23, - 0x7c, 0x02, 0x4e, 0xb1, 0x09, 0xf8, 0xa4, 0xa8, 0x3b, 0xbb, 0x9e, 0x83, 0x77, 0xd0, 0x03, 0x86, - 0x73, 0xa9, 0xa3, 0x2f, 0xc0, 0x24, 0xdf, 0x50, 0xfc, 0x91, 0x3c, 0x9a, 0x3d, 0xcd, 0xbe, 0xe6, - 0x42, 0xfe, 0xe6, 0xe4, 0x88, 0x8b, 0xa7, 0x45, 0x87, 0x26, 0xf5, 0xd2, 0x08, 0x9b, 0xd4, 0xec, - 0x0d, 0x98, 0x52, 0xe7, 0x16, 0x5b, 0x3a, 0xa8, 0x0c, 0xc3, 0x8c, 0xdb, 0x11, 0xca, 0xc3, 0x12, - 0x9d, 0x29, 0xc6, 0x09, 0x61, 0x5e, 0xce, 0x66, 0xca, 0x7b, 0x87, 0x2c, 0xee, 0xc5, 0x84, 0x4b, - 0xd5, 0x45, 0x6d, 0xa6, 0x24, 0x00, 0x27, 0x38, 0xf6, 0x9f, 0x72, 0xae, 0x31, 0x39, 0x1c, 0x07, - 0xb8, 0x0e, 0x9e, 0x85, 0xb1, 0xed, 0x20, 0x8a, 0x29, 0x36, 0x6b, 0x63, 0x38, 0xe1, 0x13, 0xaf, - 0x8b, 0x72, 0xac, 0x30, 0xd0, 0x2b, 0x30, 0xd9, 0xd0, 0x1b, 0x10, 0x77, 0x99, 0x1a, 0x02, 0xa3, - 0x75, 0x6c, 0xe2, 0xa2, 0x97, 0x61, 0x8c, 0x99, 0xfc, 0x35, 0x82, 0xa6, 0x60, 0xb2, 0xe4, 0x85, - 0x3c, 0x56, 0x13, 0xe5, 0x07, 0xda, 0x6f, 0xac, 0xb0, 0xd1, 0x25, 0x18, 0xa1, 0x5d, 0xa8, 0xd6, - 0xc4, 0x2d, 0xa2, 0xf4, 0x60, 0xd7, 0x59, 0x29, 0x16, 0x50, 0xfb, 0x6f, 0x14, 0xb4, 0x51, 0xa6, - 0x12, 0x29, 0x41, 0x35, 0x18, 0xbd, 0xe7, 0x78, 0xb1, 0xe7, 0x6f, 0x09, 0x76, 0xe1, 0xe9, 0x9e, - 0x57, 0x0a, 0xab, 0x74, 0x97, 0x57, 0xe0, 0x97, 0x9e, 0xf8, 0x83, 0x25, 0x19, 0x4a, 0x31, 0xec, - 0xf8, 0x3e, 0xa5, 0x58, 0x18, 0x94, 0x22, 0xe6, 0x15, 0x38, 0x45, 0xf1, 0x07, 0x4b, 0x32, 0xe8, - 0x4d, 0x00, 0xb9, 0x2c, 0x89, 0x2b, 0xd4, 0x52, 0xcf, 0xf6, 0x27, 0xba, 0xae, 0xea, 0x2c, 0x4e, - 0xd1, 0x2b, 0x35, 0xf9, 0x8f, 0x35, 0x7a, 0x76, 0xcc, 0xd8, 0xaa, 0xee, 0xce, 0xa0, 0xcf, 0xd3, - 0x93, 0xc0, 0x09, 0x63, 0xe2, 0x2e, 0xc4, 0x62, 0x70, 0x3e, 0x3c, 0x98, 0x4c, 0xb1, 0xee, 0xb5, - 0x88, 0x7e, 0x6a, 0x08, 0x22, 0x38, 0xa1, 0x67, 0xff, 0x7c, 0x11, 0x66, 0xf3, 0xba, 0x4b, 0x17, - 0x1d, 0xb9, 0xef, 0xc5, 0x4b, 0x94, 0x1b, 0xb2, 0xcc, 0x45, 0xb7, 0x2c, 0xca, 0xb1, 0xc2, 0xa0, - 0xb3, 0x1f, 0x79, 0x5b, 0x52, 0x24, 0x1c, 0xd6, 0xcc, 0x0e, 0x59, 0x29, 0x16, 0x50, 0x8a, 0x17, - 0x12, 0x27, 0x12, 0xb6, 0x9c, 0xda, 0x2a, 0xc1, 0xac, 0x14, 0x0b, 0xa8, 0xae, 0x6f, 0x1a, 0xea, - 0xa3, 0x6f, 0x32, 0x86, 0x68, 0xf8, 0x68, 0x87, 0x08, 0x7d, 0x11, 0x60, 0xd3, 0xf3, 0xbd, 0x68, - 0x9b, 0x51, 0x1f, 0x39, 0x34, 0x75, 0xc5, 0x4b, 0xad, 0x28, 0x2a, 0x58, 0xa3, 0x88, 0x5e, 0x82, - 0x71, 0xb5, 0x01, 0xab, 0x15, 0xf6, 0x90, 0xab, 0x19, 0xc6, 0x24, 0xa7, 0x51, 0x05, 0xeb, 0x78, - 0xf6, 0x5b, 0xe9, 0xf5, 0x22, 0x76, 0x80, 0x36, 0xbe, 0xd6, 0xa0, 0xe3, 0x5b, 0xe8, 0x3d, 0xbe, - 0xf6, 0xaf, 0x16, 0x61, 0xda, 0x68, 0xac, 0x13, 0x0d, 0x70, 0x66, 0x5d, 0xa3, 0xf7, 0x9c, 0x13, - 0x13, 0xb1, 0xff, 0xec, 0xfe, 0x5b, 0x45, 0xbf, 0x0b, 0xe9, 0x0e, 0xe0, 0xf5, 0xd1, 0x17, 0xa1, - 0xd4, 0x74, 0x22, 0xa6, 0xbb, 0x22, 0x62, 0xdf, 0x0d, 0x42, 0x2c, 0x91, 0x23, 0x9c, 0x28, 0xd6, - 0xae, 0x1a, 0x4e, 0x3b, 0x21, 0x49, 0x2f, 0x64, 0xca, 0xfb, 0x48, 0x63, 0x61, 0xd5, 0x09, 0xca, - 0x20, 0xed, 0x61, 0x0e, 0x43, 0x2f, 0xc3, 0x44, 0x48, 0xd8, 0xaa, 0x58, 0xa2, 0xac, 0x1c, 0x5b, - 0x66, 0xc3, 0x09, 0xcf, 0x87, 0x35, 0x18, 0x36, 0x30, 0x13, 0x56, 0x7e, 0xa4, 0x07, 0x2b, 0xff, - 0x34, 0x8c, 0xb2, 0x1f, 0x6a, 0x05, 0xa8, 0xd9, 0xa8, 0xf2, 0x62, 0x2c, 0xe1, 0xe9, 0x05, 0x33, - 0x36, 0xe0, 0x82, 0xf9, 0x66, 0x81, 0xe9, 0x91, 0xc4, 0x93, 0x77, 0xd5, 0x8f, 0x62, 0x87, 0xf2, - 0x0d, 0x8f, 0x5e, 0xcd, 0xf7, 0x2a, 0x4c, 0x25, 0x4f, 0xed, 0xda, 0x33, 0xc9, 0x63, 0xa2, 0xd6, - 0xd4, 0x92, 0x01, 0xc5, 0x29, 0x6c, 0x79, 0x9b, 0xf1, 0x12, 0x2a, 0xb6, 0x17, 0xd9, 0x25, 0x6b, - 0xdc, 0x66, 0x0a, 0x88, 0x4d, 0x5c, 0x3a, 0x58, 0x54, 0x6e, 0x69, 0x06, 0x8e, 0xbb, 0xd6, 0x69, - 0xb1, 0x19, 0x1e, 0x4e, 0x06, 0xeb, 0x6e, 0x02, 0xc2, 0x3a, 0x1e, 0x3d, 0xfa, 0xbc, 0xe8, 0x66, - 0xd0, 0xd8, 0x21, 0xae, 0xb0, 0x03, 0x53, 0x47, 0x5f, 0x55, 0x94, 0x63, 0x85, 0x61, 0xff, 0x9a, - 0x05, 0x8f, 0x75, 0x0f, 0xed, 0x31, 0x28, 0x84, 0x6e, 0x98, 0x62, 0xef, 0xa5, 0xbc, 0x5d, 0x61, - 0x76, 0x2c, 0x47, 0x33, 0xf4, 0x2b, 0x45, 0x98, 0x58, 0xea, 0x44, 0x71, 0xd0, 0x3a, 0x36, 0x73, - 0xf8, 0x2b, 0x50, 0x0a, 0xda, 0x24, 0x64, 0xdb, 0x32, 0x6d, 0xcd, 0x75, 0x4b, 0x02, 0x70, 0x82, - 0x83, 0xde, 0x90, 0x06, 0xbb, 0x35, 0x27, 0x74, 0x5a, 0x3d, 0x6d, 0xe0, 0xb1, 0x86, 0xa7, 0xef, - 0xd3, 0xa4, 0x14, 0x1b, 0xb4, 0xd0, 0x46, 0x62, 0xb4, 0x2b, 0xa8, 0x0f, 0xf5, 0x37, 0xda, 0x15, - 0xf4, 0xd5, 0x5a, 0x36, 0xcb, 0x71, 0x8a, 0x22, 0xfa, 0xa2, 0x32, 0xdc, 0x15, 0x4d, 0x0c, 0xf7, - 0x35, 0xdc, 0x15, 0x2d, 0xa8, 0xe5, 0x6e, 0x14, 0x63, 0x93, 0x9c, 0xfd, 0x61, 0x98, 0xaa, 0x38, - 0xa4, 0x15, 0xf8, 0xcb, 0xbe, 0xdb, 0x0e, 0x3c, 0x3f, 0x46, 0xb3, 0x30, 0xc4, 0x58, 0x40, 0x7e, - 0x81, 0x0f, 0x51, 0x2a, 0x78, 0x88, 0x4a, 0xdf, 0xf6, 0x16, 0x9c, 0xae, 0x04, 0xf7, 0xfc, 0x7b, - 0x4e, 0xe8, 0x2e, 0xd4, 0xaa, 0x9a, 0x32, 0x6b, 0x4d, 0xae, 0x2a, 0x6e, 0x51, 0x9a, 0xc9, 0x38, - 0x69, 0x35, 0x39, 0x43, 0xbd, 0xe2, 0x35, 0xf3, 0x16, 0xd6, 0xdf, 0x2e, 0x18, 0x2d, 0x25, 0xf8, - 0xea, 0xc9, 0xdd, 0xca, 0x7d, 0x72, 0x7f, 0x1d, 0xc6, 0x36, 0x3d, 0xd2, 0x74, 0x31, 0xd9, 0x14, - 0xf7, 0xc8, 0x53, 0xf9, 0x46, 0x72, 0x2b, 0x14, 0x53, 0xaa, 0x98, 0xb9, 0x2a, 0x66, 0x45, 0x54, - 0xc6, 0x8a, 0x0c, 0xda, 0x81, 0x19, 0x29, 0xeb, 0x4b, 0xa8, 0x58, 0x47, 0x4f, 0xf7, 0x52, 0x20, - 0x98, 0xc4, 0x4f, 0x3d, 0xd8, 0x2f, 0xcf, 0xe0, 0x14, 0x19, 0xdc, 0x45, 0x18, 0x9d, 0x85, 0xa1, - 0x16, 0xe5, 0x9f, 0xf8, 0xc1, 0xc3, 0x74, 0x2f, 0x4c, 0x8d, 0xc4, 0x4a, 0xed, 0x1f, 0xb6, 0xe0, - 0xf1, 0xae, 0x91, 0x11, 0xea, 0xb4, 0x23, 0x9e, 0x85, 0xb4, 0x7a, 0xab, 0xd0, 0x5f, 0xbd, 0x65, - 0xff, 0x94, 0x05, 0xa7, 0x96, 0x5b, 0xed, 0x78, 0xaf, 0xe2, 0x99, 0xef, 0xe3, 0x1f, 0x83, 0x91, - 0x16, 0x71, 0xbd, 0x4e, 0x4b, 0xcc, 0x5c, 0x59, 0xf2, 0x18, 0xab, 0xac, 0xf4, 0x60, 0xbf, 0x3c, - 0x59, 0x8f, 0x83, 0xd0, 0xd9, 0x22, 0xbc, 0x00, 0x0b, 0x74, 0xc6, 0xa9, 0x79, 0xef, 0x90, 0x9b, - 0x5e, 0xcb, 0x93, 0x46, 0x8f, 0x3d, 0xcf, 0xc3, 0x79, 0x39, 0xa0, 0xf3, 0xaf, 0x77, 0x1c, 0x3f, - 0xf6, 0xe2, 0x3d, 0xf1, 0xb4, 0x2d, 0x89, 0xe0, 0x84, 0x9e, 0xfd, 0x0d, 0x0b, 0xa6, 0xe5, 0xba, - 0x5f, 0x70, 0xdd, 0x90, 0x44, 0x11, 0x9a, 0x83, 0x82, 0xd7, 0x16, 0xbd, 0x04, 0xd1, 0xcb, 0x42, - 0xb5, 0x86, 0x0b, 0x5e, 0x1b, 0xd5, 0xa0, 0xc4, 0x6d, 0x27, 0x93, 0xc5, 0x35, 0x90, 0x05, 0x26, - 0xeb, 0xc1, 0xba, 0xac, 0x89, 0x13, 0x22, 0x52, 0x4c, 0xf3, 0x13, 0x07, 0x05, 0x43, 0x4c, 0xf3, - 0x99, 0x39, 0xb4, 0xc4, 0x40, 0x97, 0x35, 0x1f, 0x16, 0xce, 0xe2, 0x4e, 0x64, 0xfb, 0xaf, 0xd8, - 0xdf, 0x6f, 0xc1, 0x84, 0xfc, 0xb2, 0x01, 0x25, 0x46, 0xba, 0xb5, 0x12, 0x69, 0x31, 0xd9, 0x5a, - 0x54, 0xe2, 0x63, 0x10, 0x43, 0xd0, 0x2b, 0x1e, 0x46, 0xd0, 0xb3, 0x7f, 0xa8, 0x00, 0x53, 0xb2, - 0x3b, 0xf5, 0xce, 0x46, 0x44, 0x62, 0xb4, 0x0e, 0x25, 0x87, 0x0f, 0x39, 0x91, 0x2b, 0xf6, 0x62, - 0xb6, 0x86, 0xc1, 0x98, 0x9f, 0xe4, 0xb8, 0x5f, 0x90, 0xb5, 0x71, 0x42, 0x08, 0x35, 0xe1, 0x84, - 0x1f, 0xc4, 0x8c, 0x0f, 0x53, 0xf0, 0x5e, 0xef, 0x9c, 0x69, 0xea, 0x67, 0x04, 0xf5, 0x13, 0x6b, - 0x69, 0x2a, 0xb8, 0x9b, 0x30, 0x5a, 0x96, 0x5a, 0xcd, 0x62, 0xbe, 0x4e, 0x41, 0x9f, 0x85, 0x6c, - 0xa5, 0xa6, 0xfd, 0x4b, 0x16, 0x94, 0x24, 0xda, 0x71, 0x3c, 0x69, 0xaf, 0xc2, 0x68, 0xc4, 0x26, - 0x41, 0x0e, 0x8d, 0xdd, 0xab, 0xe3, 0x7c, 0xbe, 0x12, 0xf6, 0x92, 0xff, 0x8f, 0xb0, 0xa4, 0xc1, - 0x1e, 0xb5, 0x54, 0xf7, 0xdf, 0x27, 0x8f, 0x5a, 0xaa, 0x3f, 0x39, 0x37, 0xcc, 0xef, 0xb1, 0x3e, - 0x6b, 0xba, 0x2b, 0x2a, 0x05, 0xb5, 0x43, 0xb2, 0xe9, 0xdd, 0x4f, 0x4b, 0x41, 0x35, 0x56, 0x8a, - 0x05, 0x14, 0xbd, 0x09, 0x13, 0x0d, 0xf9, 0x9a, 0x91, 0x1c, 0x03, 0x97, 0x7a, 0xbe, 0xac, 0xa9, - 0x47, 0x58, 0xee, 0xe6, 0xb2, 0xa4, 0xd5, 0xc7, 0x06, 0x35, 0xd3, 0x60, 0xa9, 0xd8, 0xcf, 0x60, - 0x29, 0xa1, 0x9b, 0x6f, 0xbe, 0xf3, 0x23, 0x16, 0x8c, 0x70, 0x9d, 0xf8, 0x60, 0x8f, 0x08, 0xda, - 0x9b, 0x74, 0x32, 0x76, 0x77, 0x68, 0xa1, 0x78, 0x63, 0x46, 0xab, 0x50, 0x62, 0x3f, 0x98, 0x6e, - 0xb0, 0x07, 0x3f, 0xc5, 0x5b, 0xd5, 0x3b, 0x78, 0x47, 0x56, 0xc3, 0x09, 0x05, 0xfb, 0x07, 0x8a, - 0xf4, 0xa8, 0x4a, 0x50, 0x8d, 0x1b, 0xdc, 0x7a, 0x74, 0x37, 0x78, 0xe1, 0x51, 0xdd, 0xe0, 0x5b, - 0x30, 0xdd, 0xd0, 0x5e, 0xb0, 0x93, 0x99, 0xbc, 0xdc, 0x73, 0x91, 0x68, 0x8f, 0xdd, 0x5c, 0x2f, - 0xbc, 0x64, 0x12, 0xc1, 0x69, 0xaa, 0xe8, 0xf3, 0x30, 0xc1, 0xe7, 0x59, 0xb4, 0xc2, 0xb9, 0xcf, - 0x0f, 0xe5, 0xaf, 0x17, 0xbd, 0x09, 0xb6, 0x12, 0xeb, 0x5a, 0x75, 0x6c, 0x10, 0xb3, 0x7f, 0x7e, - 0x0c, 0x86, 0x97, 0x77, 0x89, 0x1f, 0x1f, 0xc3, 0x81, 0xd4, 0x80, 0x29, 0xcf, 0xdf, 0x0d, 0x9a, - 0xbb, 0xc4, 0xe5, 0xf0, 0xc3, 0x5c, 0xae, 0x8a, 0x93, 0xae, 0x1a, 0x24, 0x70, 0x8a, 0xe4, 0xa3, - 0x50, 0x23, 0x5d, 0x83, 0x11, 0x3e, 0xf7, 0x82, 0x2b, 0xcf, 0x7c, 0xf1, 0x61, 0x83, 0x28, 0x76, - 0x41, 0xa2, 0xe2, 0xe2, 0x4f, 0x4c, 0xa2, 0x3a, 0x7a, 0x0b, 0xa6, 0x36, 0xbd, 0x30, 0x8a, 0xd7, - 0xbd, 0x16, 0x89, 0x62, 0xa7, 0xd5, 0x7e, 0x08, 0xb5, 0x91, 0x1a, 0x87, 0x15, 0x83, 0x12, 0x4e, - 0x51, 0x46, 0x5b, 0x30, 0xd9, 0x74, 0xf4, 0xa6, 0x46, 0x0f, 0xdd, 0x94, 0x12, 0x2d, 0x6e, 0xea, - 0x84, 0xb0, 0x49, 0x97, 0x1e, 0x26, 0x0d, 0xa6, 0xf9, 0x18, 0x63, 0x1c, 0x85, 0x3a, 0x4c, 0xb8, - 0xca, 0x83, 0xc3, 0xe8, 0x99, 0xc4, 0x6c, 0xd3, 0x4a, 0xe6, 0x99, 0xa4, 0x59, 0xa0, 0x7d, 0x09, - 0x4a, 0x84, 0x0e, 0x21, 0x25, 0x2c, 0x5e, 0xbf, 0xae, 0x0c, 0xd6, 0xd7, 0x55, 0xaf, 0x11, 0x06, - 0xa6, 0xc2, 0x6e, 0x59, 0x52, 0xc2, 0x09, 0x51, 0xb4, 0x04, 0x23, 0x11, 0x09, 0x3d, 0x12, 0x89, - 0x77, 0xb0, 0x1e, 0xd3, 0xc8, 0xd0, 0xb8, 0xcd, 0x3c, 0xff, 0x8d, 0x45, 0x55, 0xba, 0xbc, 0x1c, - 0xee, 0x22, 0x3b, 0x61, 0x2e, 0x2f, 0xe1, 0xfc, 0x2a, 0xa0, 0xe8, 0x35, 0x18, 0x0d, 0x49, 0x93, - 0x69, 0x84, 0x27, 0x07, 0x5f, 0xe4, 0x5c, 0xc1, 0xcc, 0xeb, 0x61, 0x49, 0x00, 0xdd, 0x00, 0x14, - 0x12, 0xca, 0x43, 0x78, 0xfe, 0x96, 0xb2, 0xd8, 0x12, 0x0f, 0x5a, 0x4f, 0x88, 0xf6, 0x4f, 0xe2, - 0x04, 0x43, 0xca, 0xf5, 0x38, 0xa3, 0x1a, 0xba, 0x06, 0x27, 0x54, 0xa9, 0x14, 0xfc, 0xd9, 0x5b, - 0x56, 0x29, 0xe1, 0x8a, 0x70, 0x1a, 0x01, 0x77, 0xd7, 0xb1, 0x7f, 0x92, 0xb2, 0x33, 0x74, 0xb4, - 0x8e, 0x81, 0x17, 0x78, 0xd5, 0xe4, 0x05, 0xce, 0xe4, 0xce, 0x5c, 0x0e, 0x1f, 0xf0, 0xc0, 0x82, - 0x71, 0x6d, 0x66, 0x93, 0x35, 0x6b, 0xf5, 0x58, 0xb3, 0x1d, 0x98, 0xa1, 0x2b, 0xfd, 0xd6, 0x46, - 0x44, 0xc2, 0x5d, 0xe2, 0xb2, 0x85, 0x59, 0x78, 0xb8, 0x85, 0xa9, 0x4c, 0x49, 0x6e, 0xa6, 0x08, - 0xe2, 0xae, 0x26, 0xd0, 0xc7, 0xa4, 0x7a, 0xb4, 0x68, 0x58, 0x62, 0x72, 0xd5, 0xe7, 0xc1, 0x7e, - 0x79, 0x46, 0xfb, 0x10, 0x5d, 0x1d, 0x6a, 0x7f, 0x49, 0x7e, 0xa3, 0x32, 0xd9, 0x69, 0xa8, 0xc5, - 0x92, 0x32, 0xd9, 0x51, 0xcb, 0x01, 0x27, 0x38, 0x74, 0x8f, 0x52, 0x11, 0x24, 0x6d, 0xb2, 0x43, - 0x05, 0x14, 0xcc, 0x20, 0xf6, 0x0b, 0x00, 0xcb, 0xf7, 0x49, 0x43, 0xa8, 0x81, 0x34, 0x2b, 0x03, - 0x2b, 0xdf, 0xca, 0xc0, 0xfe, 0x4f, 0x16, 0x4c, 0xad, 0x2c, 0x19, 0x62, 0xe2, 0x3c, 0x00, 0x97, - 0x8d, 0xee, 0xde, 0x5d, 0x93, 0x0f, 0x68, 0xfc, 0x0d, 0x44, 0x95, 0x62, 0x0d, 0x03, 0x9d, 0x81, - 0x62, 0xb3, 0xe3, 0x0b, 0x91, 0x65, 0xf4, 0xc1, 0x7e, 0xb9, 0x78, 0xb3, 0xe3, 0x63, 0x5a, 0xa6, - 0xd9, 0x58, 0x17, 0x07, 0xb6, 0xb1, 0xee, 0x1b, 0xfb, 0x01, 0x95, 0x61, 0xf8, 0xde, 0x3d, 0xcf, - 0xe5, 0x1e, 0x65, 0xe2, 0x71, 0xef, 0xee, 0xdd, 0x6a, 0x25, 0xc2, 0xbc, 0xdc, 0xfe, 0x6a, 0x11, - 0xe6, 0x56, 0x9a, 0xe4, 0xfe, 0xbb, 0xf4, 0xaa, 0x1b, 0xd4, 0x42, 0xfc, 0x70, 0xfc, 0xe2, 0x61, - 0xbd, 0x00, 0xfa, 0x8f, 0xc7, 0x26, 0x8c, 0x72, 0x8b, 0x15, 0xe9, 0x63, 0xf7, 0x4a, 0x56, 0xeb, - 0xf9, 0x03, 0x32, 0xcf, 0x2d, 0x5f, 0x84, 0x8b, 0x90, 0xba, 0x69, 0x45, 0x29, 0x96, 0xc4, 0xe7, - 0x3e, 0x01, 0x13, 0x3a, 0xe6, 0xa1, 0xfc, 0x71, 0xfe, 0x52, 0x11, 0x66, 0x68, 0x0f, 0x1e, 0xe9, - 0x44, 0xdc, 0xee, 0x9e, 0x88, 0xa3, 0xf6, 0xc9, 0xe8, 0x3f, 0x1b, 0x6f, 0xa6, 0x67, 0xe3, 0xf9, - 0xbc, 0xd9, 0x38, 0xee, 0x39, 0xf8, 0x2e, 0x0b, 0x4e, 0xae, 0x34, 0x83, 0xc6, 0x4e, 0xca, 0x6f, - 0xe2, 0x25, 0x18, 0xa7, 0xe7, 0x78, 0x64, 0xb8, 0xf4, 0x1a, 0x4e, 0xde, 0x02, 0x84, 0x75, 0x3c, - 0xad, 0xda, 0xed, 0xdb, 0xd5, 0x4a, 0x96, 0x6f, 0xb8, 0x00, 0x61, 0x1d, 0xcf, 0xfe, 0x0d, 0x0b, - 0xce, 0x5d, 0x5b, 0x5a, 0x4e, 0x96, 0x62, 0x97, 0x7b, 0x3a, 0x95, 0x02, 0x5d, 0xad, 0x2b, 0x89, - 0x14, 0x58, 0x61, 0xbd, 0x10, 0xd0, 0xf7, 0x4b, 0x28, 0x9a, 0x9f, 0xb0, 0xe0, 0xe4, 0x35, 0x2f, - 0xa6, 0xd7, 0x72, 0xda, 0x51, 0x9a, 0xde, 0xcb, 0x91, 0x17, 0x07, 0xe1, 0x5e, 0xda, 0x51, 0x1a, - 0x2b, 0x08, 0xd6, 0xb0, 0x78, 0xcb, 0xbb, 0x5e, 0x94, 0x68, 0xd6, 0xb5, 0x96, 0x79, 0x39, 0x56, - 0x18, 0xf4, 0xc3, 0x5c, 0x2f, 0x64, 0xa2, 0xc4, 0x9e, 0x38, 0x61, 0xd5, 0x87, 0x55, 0x24, 0x00, - 0x27, 0x38, 0xf6, 0x1f, 0x58, 0x50, 0xbe, 0xd6, 0xec, 0x44, 0x31, 0x09, 0x37, 0xa3, 0x9c, 0xd3, - 0xf1, 0x05, 0x28, 0x11, 0x29, 0xb8, 0x8b, 0x5e, 0x2b, 0x56, 0x53, 0x49, 0xf4, 0xdc, 0x5f, 0x5b, - 0xe1, 0x0d, 0xe0, 0x85, 0x75, 0x38, 0x37, 0x9a, 0x15, 0x40, 0x44, 0x6f, 0x4b, 0x77, 0x60, 0x67, - 0x9e, 0xb0, 0xcb, 0x5d, 0x50, 0x9c, 0x51, 0xc3, 0xfe, 0x61, 0x0b, 0x4e, 0xab, 0x0f, 0x7e, 0xdf, - 0x7d, 0xa6, 0xfd, 0x33, 0x05, 0x98, 0xbc, 0xbe, 0xbe, 0x5e, 0xbb, 0x46, 0x64, 0xac, 0x97, 0xfe, - 0xba, 0x75, 0xac, 0xa9, 0x08, 0x7b, 0x49, 0x81, 0x9d, 0xd8, 0x6b, 0xce, 0xf3, 0xb8, 0x50, 0xf3, - 0x55, 0x3f, 0xbe, 0x15, 0xd6, 0xe3, 0xd0, 0xf3, 0xb7, 0x32, 0x95, 0x8a, 0x92, 0xb9, 0x28, 0xe6, - 0x31, 0x17, 0xe8, 0x05, 0x18, 0x61, 0x81, 0xa9, 0xe4, 0x24, 0x3c, 0xa1, 0x84, 0x28, 0x56, 0x7a, - 0xb0, 0x5f, 0x2e, 0xdd, 0xc6, 0x55, 0xfe, 0x07, 0x0b, 0x54, 0x74, 0x1b, 0xc6, 0xb7, 0xe3, 0xb8, - 0x7d, 0x9d, 0x38, 0x2e, 0x09, 0xe5, 0x71, 0x98, 0x19, 0x3e, 0x89, 0x0e, 0x02, 0x47, 0x4b, 0x4e, - 0x90, 0xa4, 0x2c, 0xc2, 0x3a, 0x1d, 0xbb, 0x0e, 0x90, 0xc0, 0x8e, 0x48, 0xa1, 0x62, 0xff, 0xae, - 0x05, 0xa3, 0xdc, 0x27, 0x3e, 0x44, 0x9f, 0x84, 0x21, 0x72, 0x9f, 0x34, 0x04, 0xab, 0x9c, 0xd9, - 0xe1, 0x84, 0xd3, 0xe2, 0xcf, 0x03, 0xf4, 0x3f, 0x66, 0xb5, 0xd0, 0x75, 0x18, 0xa5, 0xbd, 0xbd, - 0xa6, 0x02, 0x04, 0x3c, 0x99, 0xf7, 0xc5, 0x6a, 0xda, 0x39, 0x73, 0x26, 0x8a, 0xb0, 0xac, 0xce, - 0x54, 0xdd, 0x8d, 0x76, 0x9d, 0x9e, 0xd8, 0x71, 0x2f, 0xc6, 0x62, 0x7d, 0xa9, 0xc6, 0x91, 0x64, - 0x2c, 0x26, 0xa6, 0xea, 0x96, 0x85, 0x38, 0x21, 0x62, 0xaf, 0x43, 0x89, 0x4e, 0xea, 0x42, 0xd3, - 0x73, 0x7a, 0x6b, 0xd9, 0x9f, 0x81, 0x92, 0xd4, 0x78, 0x47, 0xc2, 0x17, 0x96, 0x51, 0x95, 0x0a, - 0xf1, 0x08, 0x27, 0x70, 0x7b, 0x13, 0x4e, 0x31, 0x7b, 0x26, 0x27, 0xde, 0x36, 0xf6, 0x58, 0xff, - 0xc5, 0xfc, 0xac, 0x90, 0x3c, 0xf9, 0xcc, 0xcc, 0x6a, 0x1e, 0x51, 0x13, 0x92, 0x62, 0x22, 0x85, - 0xda, 0xbf, 0x3f, 0x04, 0x4f, 0x54, 0xeb, 0xf9, 0xe1, 0x12, 0x5e, 0x86, 0x09, 0xce, 0x97, 0xd2, - 0xa5, 0xed, 0x34, 0x45, 0xbb, 0xea, 0x15, 0x71, 0x5d, 0x83, 0x61, 0x03, 0x13, 0x9d, 0x83, 0xa2, - 0xf7, 0xb6, 0x9f, 0x76, 0x2e, 0xa8, 0xbe, 0xbe, 0x86, 0x69, 0x39, 0x05, 0x53, 0x16, 0x97, 0xdf, - 0x1d, 0x0a, 0xac, 0xd8, 0xdc, 0x57, 0x61, 0xca, 0x8b, 0x1a, 0x91, 0x57, 0xf5, 0xe9, 0x39, 0xa3, - 0x9d, 0x54, 0x4a, 0x2b, 0x42, 0x3b, 0xad, 0xa0, 0x38, 0x85, 0xad, 0x5d, 0x64, 0xc3, 0x03, 0xb3, - 0xc9, 0x7d, 0x9d, 0x43, 0xa9, 0x04, 0xd0, 0x66, 0x5f, 0x17, 0x31, 0x53, 0x5d, 0x21, 0x01, 0xf0, - 0x0f, 0x8e, 0xb0, 0x84, 0x51, 0x91, 0xb3, 0xb1, 0xed, 0xb4, 0x17, 0x3a, 0xf1, 0x76, 0xc5, 0x8b, - 0x1a, 0xc1, 0x2e, 0x09, 0xf7, 0x98, 0xb6, 0x60, 0x2c, 0x11, 0x39, 0x15, 0x60, 0xe9, 0xfa, 0x42, - 0x8d, 0x62, 0xe2, 0xee, 0x3a, 0x26, 0x1b, 0x0c, 0x47, 0xc1, 0x06, 0x2f, 0xc0, 0xb4, 0x6c, 0xa6, - 0x4e, 0x22, 0x76, 0x29, 0x8e, 0xb3, 0x8e, 0x29, 0x07, 0x02, 0x51, 0xac, 0xba, 0x95, 0xc6, 0x47, - 0x1f, 0x83, 0x49, 0xcf, 0xf7, 0x62, 0xcf, 0x89, 0x83, 0x90, 0xb1, 0x14, 0x5c, 0x31, 0xc0, 0xec, - 0x73, 0xab, 0x3a, 0x00, 0x9b, 0x78, 0xf6, 0x7f, 0x1f, 0x82, 0x13, 0x6c, 0xda, 0xbe, 0xb5, 0xc2, - 0xde, 0x37, 0x2b, 0xec, 0x76, 0xf7, 0x0a, 0x3b, 0x0a, 0xfe, 0xfe, 0xbd, 0x5c, 0x66, 0x6f, 0x41, - 0x49, 0x79, 0x38, 0x48, 0x17, 0x27, 0x2b, 0xc7, 0xc5, 0xa9, 0x3f, 0xf7, 0x21, 0xdf, 0xad, 0x8b, - 0x99, 0xef, 0xd6, 0x7f, 0xd7, 0x82, 0xc4, 0xd0, 0x1b, 0x5d, 0x87, 0x52, 0x3b, 0x60, 0xc6, 0x54, - 0xa1, 0xb4, 0x50, 0x7c, 0x22, 0xf3, 0xa2, 0xe2, 0x97, 0x22, 0x1f, 0xbf, 0x9a, 0xac, 0x81, 0x93, - 0xca, 0x68, 0x11, 0x46, 0xdb, 0x21, 0xa9, 0xc7, 0x2c, 0x6a, 0x42, 0x5f, 0x3a, 0x7c, 0x8d, 0x70, - 0x7c, 0x2c, 0x2b, 0xda, 0x3f, 0x6b, 0x01, 0xf0, 0xa7, 0x61, 0xc7, 0xdf, 0x3a, 0x0e, 0xfb, 0xa6, - 0x8a, 0x11, 0xd3, 0xd1, 0xce, 0xb6, 0x91, 0x97, 0xfd, 0xc9, 0x8b, 0xeb, 0x68, 0x7f, 0x37, 0xc0, - 0x54, 0x82, 0x56, 0x8d, 0x49, 0x0b, 0x3d, 0x67, 0x38, 0xfa, 0x9e, 0x49, 0x39, 0xfa, 0x96, 0x18, - 0xb6, 0xa6, 0x59, 0x7d, 0x0b, 0x8a, 0x2d, 0xe7, 0xbe, 0x50, 0x9d, 0x3d, 0xd3, 0xbb, 0x1b, 0x94, - 0xfe, 0xfc, 0xaa, 0x73, 0x9f, 0x0b, 0x89, 0xcf, 0xc8, 0x05, 0xb2, 0xea, 0xdc, 0x3f, 0xe0, 0xc6, - 0x6c, 0xec, 0x90, 0xba, 0xe9, 0x45, 0xf1, 0x97, 0xff, 0x5b, 0xf2, 0x9f, 0x2d, 0x3b, 0xda, 0x08, - 0x6b, 0xcb, 0xf3, 0xc5, 0x43, 0xe9, 0x40, 0x6d, 0x79, 0x7e, 0xba, 0x2d, 0xcf, 0x1f, 0xa0, 0x2d, - 0xcf, 0x47, 0xef, 0xc0, 0xa8, 0x30, 0x4a, 0x10, 0xde, 0xda, 0x57, 0x06, 0x68, 0x4f, 0xd8, 0x34, - 0xf0, 0x36, 0xaf, 0x48, 0x21, 0x58, 0x94, 0xf6, 0x6d, 0x57, 0x36, 0x88, 0xfe, 0x96, 0x05, 0x53, - 0xe2, 0x37, 0x26, 0x6f, 0x77, 0x48, 0x14, 0x0b, 0xde, 0xf3, 0xa3, 0x83, 0xf7, 0x41, 0x54, 0xe4, - 0x5d, 0xf9, 0xa8, 0x3c, 0x66, 0x4d, 0x60, 0xdf, 0x1e, 0xa5, 0x7a, 0x81, 0xfe, 0xb1, 0x05, 0xa7, - 0x5a, 0xce, 0x7d, 0xde, 0x22, 0x2f, 0xc3, 0x4e, 0xec, 0x05, 0xc2, 0x23, 0xe7, 0x93, 0x83, 0x4d, - 0x7f, 0x57, 0x75, 0xde, 0x49, 0x69, 0xbc, 0x7f, 0x2a, 0x0b, 0xa5, 0x6f, 0x57, 0x33, 0xfb, 0x35, - 0xb7, 0x09, 0x63, 0x72, 0xbd, 0x65, 0xa8, 0x1a, 0x2a, 0x3a, 0x63, 0x7d, 0x68, 0x9b, 0x10, 0xdd, - 0xdb, 0x96, 0xb6, 0x23, 0xd6, 0xda, 0x23, 0x6d, 0xe7, 0x2d, 0x98, 0xd0, 0xd7, 0xd8, 0x23, 0x6d, - 0xeb, 0x6d, 0x38, 0x99, 0xb1, 0x96, 0x1e, 0x69, 0x93, 0xf7, 0xe0, 0x4c, 0xee, 0xfa, 0x78, 0x94, - 0x0d, 0xdb, 0x3f, 0x63, 0xe9, 0xe7, 0xe0, 0x31, 0xbc, 0x39, 0x2c, 0x99, 0x6f, 0x0e, 0xe7, 0x7b, - 0xef, 0x9c, 0x9c, 0x87, 0x87, 0x37, 0xf5, 0x4e, 0xb3, 0x00, 0xb5, 0xaf, 0xc1, 0x48, 0x93, 0x96, - 0x48, 0x6b, 0x18, 0xbb, 0xff, 0x8e, 0x4c, 0x78, 0x29, 0x56, 0x1e, 0x61, 0x41, 0xc1, 0xfe, 0x05, - 0x0b, 0x86, 0x8e, 0x61, 0x24, 0xb0, 0x39, 0x12, 0xcf, 0xe5, 0x92, 0x16, 0x01, 0xa6, 0xe7, 0xb1, - 0x73, 0x6f, 0xf9, 0x7e, 0x4c, 0xfc, 0x28, 0x3f, 0x6c, 0xef, 0xb7, 0xc1, 0xc9, 0x9b, 0x81, 0xe3, - 0x2e, 0x3a, 0x4d, 0xc7, 0x6f, 0x90, 0xb0, 0xea, 0x6f, 0xf5, 0x35, 0xcb, 0xd2, 0x8d, 0xa8, 0x0a, - 0xfd, 0x8c, 0xa8, 0xec, 0x6d, 0x40, 0x7a, 0x03, 0xc2, 0x3a, 0x1d, 0xc3, 0xa8, 0xc7, 0x9b, 0x12, - 0xc3, 0xff, 0x54, 0x36, 0x77, 0xd7, 0xd5, 0x33, 0xcd, 0xee, 0x9a, 0x17, 0x60, 0x49, 0xc8, 0x7e, - 0x19, 0x32, 0x3d, 0x52, 0xfb, 0xab, 0x0d, 0xec, 0xcf, 0xc1, 0x09, 0x56, 0xf3, 0x90, 0x22, 0xad, - 0x9d, 0xd2, 0x4a, 0x66, 0xc4, 0xf6, 0xb2, 0xbf, 0x62, 0xc1, 0xf4, 0x5a, 0x2a, 0xe4, 0xd1, 0x25, - 0xf6, 0x00, 0x9a, 0xa1, 0x0c, 0xaf, 0xb3, 0x52, 0x2c, 0xa0, 0x47, 0xae, 0x83, 0xfa, 0x69, 0x0b, - 0x4a, 0x6b, 0xd5, 0xa5, 0x81, 0x1d, 0x04, 0x2e, 0xc1, 0x08, 0x65, 0xec, 0x95, 0xc6, 0x37, 0xd1, - 0xce, 0xb2, 0x52, 0x2c, 0xa0, 0xe8, 0xaa, 0xf9, 0x52, 0x76, 0x36, 0xfd, 0x52, 0x36, 0xce, 0xbd, - 0xb7, 0x0c, 0x9f, 0x81, 0xc4, 0x3c, 0x60, 0xa8, 0x97, 0x79, 0x80, 0xfd, 0x67, 0xb4, 0xcf, 0xca, - 0x9b, 0xfd, 0xd1, 0x33, 0x8b, 0x4b, 0x06, 0xb3, 0x98, 0xa9, 0xcf, 0x51, 0xdd, 0xc9, 0x8d, 0x01, - 0x7e, 0x23, 0x15, 0x03, 0xfc, 0x62, 0x6f, 0x32, 0xbd, 0xc3, 0x80, 0xff, 0xb4, 0x05, 0x93, 0x0a, - 0xf7, 0x7d, 0x62, 0xef, 0xa5, 0xfa, 0x93, 0x73, 0xaa, 0xd4, 0xb4, 0x2e, 0xb3, 0xd3, 0xf6, 0xd3, - 0xcc, 0x49, 0xc7, 0x69, 0x7a, 0xef, 0x10, 0x15, 0xe7, 0xab, 0x2c, 0x9c, 0x6e, 0x44, 0xe9, 0xc1, - 0x7e, 0x79, 0x52, 0xfd, 0xe3, 0x71, 0x45, 0x93, 0x2a, 0xf6, 0x75, 0x98, 0x4e, 0x0d, 0x18, 0x7a, - 0x09, 0x86, 0xdb, 0xdb, 0x4e, 0x44, 0x52, 0x36, 0xae, 0xc3, 0x35, 0x5a, 0x78, 0xb0, 0x5f, 0x9e, - 0x52, 0x15, 0x58, 0x09, 0xe6, 0xd8, 0xf6, 0x5f, 0x2d, 0x40, 0x71, 0xcd, 0x6b, 0x0c, 0xb0, 0xfe, - 0xaf, 0x02, 0x44, 0x9d, 0x0d, 0x5f, 0x3c, 0x96, 0xa4, 0x82, 0x00, 0xd7, 0x15, 0x04, 0x6b, 0x58, - 0x6a, 0xcf, 0xb8, 0xe9, 0x77, 0x50, 0xb6, 0x67, 0x5c, 0xb1, 0x67, 0x5c, 0x74, 0x05, 0x4a, 0x5e, - 0x5b, 0x98, 0x36, 0x8a, 0x2d, 0xa0, 0x14, 0xfa, 0x55, 0x09, 0xc0, 0x09, 0x0e, 0xf3, 0x1f, 0x75, - 0xb6, 0x84, 0x50, 0x9f, 0xf8, 0x8f, 0x3a, 0x5b, 0x98, 0x96, 0xa3, 0x97, 0x60, 0xdc, 0x6b, 0xef, - 0x7e, 0x74, 0xd9, 0x77, 0x36, 0x9a, 0xc4, 0x15, 0x12, 0xbd, 0x52, 0xb0, 0x56, 0x13, 0x10, 0xd6, - 0xf1, 0xec, 0xff, 0x65, 0xc1, 0xd0, 0x5a, 0xe0, 0x1e, 0x8f, 0x9b, 0x89, 0xbe, 0xb3, 0xce, 0xe6, - 0x85, 0xa8, 0xce, 0xdd, 0x54, 0x2b, 0xa9, 0x4d, 0x75, 0x3e, 0x97, 0x42, 0xef, 0xfd, 0xd4, 0x82, - 0x71, 0x16, 0xf8, 0x5a, 0x8c, 0xeb, 0x0b, 0x86, 0x10, 0x57, 0x4e, 0x09, 0x71, 0xd3, 0x1a, 0xaa, - 0x26, 0xca, 0x3d, 0x0d, 0xa3, 0xc2, 0x08, 0x36, 0xed, 0x9b, 0x25, 0x67, 0x4e, 0xc2, 0xed, 0x1f, - 0x29, 0x82, 0x11, 0x68, 0x1b, 0xfd, 0x92, 0x05, 0xf3, 0x21, 0x77, 0x76, 0x77, 0x2b, 0x9d, 0xd0, - 0xf3, 0xb7, 0xea, 0x8d, 0x6d, 0xe2, 0x76, 0x9a, 0x9e, 0xbf, 0x55, 0xdd, 0xf2, 0x03, 0x55, 0xbc, - 0x7c, 0x9f, 0x34, 0x3a, 0xec, 0x25, 0xab, 0x4f, 0x54, 0x6f, 0x65, 0x64, 0x76, 0xf5, 0xc1, 0x7e, - 0x79, 0x1e, 0x1f, 0x8a, 0x36, 0x3e, 0x64, 0x5f, 0xd0, 0x6f, 0x58, 0x70, 0x85, 0xc7, 0x9f, 0x1e, - 0xbc, 0xff, 0x3d, 0x44, 0xde, 0x9a, 0x24, 0x95, 0x10, 0x59, 0x27, 0x61, 0x6b, 0xf1, 0x63, 0x62, - 0x40, 0xaf, 0xd4, 0x0e, 0xd7, 0x16, 0x3e, 0x6c, 0xe7, 0xec, 0x5f, 0x29, 0xc2, 0xa4, 0x88, 0xb3, - 0x22, 0x02, 0x78, 0xbd, 0x64, 0x2c, 0x89, 0x27, 0x53, 0x4b, 0xe2, 0x84, 0x81, 0x7c, 0x34, 0xb1, - 0xbb, 0x22, 0x38, 0xd1, 0x74, 0xa2, 0xf8, 0x3a, 0x71, 0xc2, 0x78, 0x83, 0x38, 0xdc, 0xf8, 0xaa, - 0x78, 0x68, 0x43, 0x31, 0xa5, 0x63, 0xbb, 0x99, 0x26, 0x86, 0xbb, 0xe9, 0xa3, 0x5d, 0x40, 0xcc, - 0x82, 0x2c, 0x74, 0xfc, 0x88, 0x7f, 0x8b, 0x27, 0x1e, 0x7d, 0x0e, 0xd7, 0xea, 0x9c, 0x68, 0x15, - 0xdd, 0xec, 0xa2, 0x86, 0x33, 0x5a, 0xd0, 0xae, 0xfe, 0xe1, 0x41, 0x2d, 0x03, 0x47, 0xfa, 0x38, - 0x40, 0xfa, 0x30, 0xd3, 0x15, 0x2a, 0xe7, 0x0d, 0x28, 0x29, 0x0b, 0x4e, 0x71, 0xe8, 0xf4, 0x8e, - 0x38, 0x95, 0xa6, 0xc0, 0xf5, 0x60, 0x89, 0xf5, 0x70, 0x42, 0xce, 0xfe, 0x27, 0x05, 0xa3, 0x41, - 0x3e, 0x89, 0x6b, 0x30, 0xe6, 0x44, 0x91, 0xb7, 0xe5, 0x13, 0x57, 0xec, 0xd8, 0x0f, 0xe6, 0xed, - 0x58, 0xa3, 0x19, 0x66, 0x45, 0xbb, 0x20, 0x6a, 0x62, 0x45, 0x03, 0x5d, 0xe7, 0x26, 0x6e, 0xbb, - 0x52, 0x68, 0x1b, 0x8c, 0x1a, 0x48, 0x23, 0xb8, 0x5d, 0x82, 0x45, 0x7d, 0xf4, 0x05, 0x6e, 0x83, - 0x78, 0xc3, 0x0f, 0xee, 0xf9, 0xd7, 0x82, 0x40, 0x3a, 0x47, 0x0f, 0x46, 0xf0, 0x84, 0xb4, 0x3c, - 0x54, 0xd5, 0xb1, 0x49, 0x6d, 0xb0, 0x70, 0x72, 0xdf, 0x0e, 0x27, 0x29, 0x69, 0xd3, 0xfb, 0x29, - 0x42, 0x04, 0xa6, 0x45, 0x10, 0x1f, 0x59, 0x26, 0xc6, 0x2e, 0x53, 0x1e, 0x33, 0x6b, 0x27, 0x5a, - 0xdb, 0x1b, 0x26, 0x09, 0x9c, 0xa6, 0x69, 0xff, 0xb8, 0x05, 0xcc, 0x6f, 0xe3, 0x18, 0xf8, 0xa7, - 0x4f, 0x99, 0xfc, 0xd3, 0x6c, 0xde, 0x20, 0xe7, 0xb0, 0x4e, 0x2f, 0xf2, 0x95, 0x55, 0x0b, 0x83, - 0xfb, 0x7b, 0xc2, 0xfe, 0xa3, 0xbf, 0x28, 0x62, 0xff, 0x5f, 0x8b, 0x1f, 0x62, 0x2a, 0x5e, 0x0a, - 0xfa, 0x0e, 0x18, 0x6b, 0x38, 0x6d, 0xa7, 0xc1, 0xb3, 0x42, 0xe4, 0xaa, 0xe5, 0x8c, 0x4a, 0xf3, - 0x4b, 0xa2, 0x06, 0x57, 0x33, 0x7d, 0x44, 0xa5, 0x03, 0x11, 0xc5, 0x7d, 0x55, 0x4b, 0xaa, 0xc9, - 0xb9, 0x1d, 0x98, 0x34, 0x88, 0x3d, 0x52, 0x9d, 0xc4, 0x77, 0xf0, 0x2b, 0x56, 0x05, 0x2f, 0x6b, - 0xc1, 0x09, 0x5f, 0xfb, 0x4f, 0x2f, 0x14, 0x29, 0x67, 0x7e, 0xb0, 0xdf, 0x25, 0xca, 0x6e, 0x1f, - 0xcd, 0x2f, 0x25, 0x45, 0x06, 0x77, 0x53, 0xb6, 0x7f, 0xd4, 0x82, 0xc7, 0x75, 0x44, 0x2d, 0x94, - 0x4d, 0x3f, 0x45, 0x7f, 0x05, 0xc6, 0xb8, 0xf3, 0xa4, 0x4a, 0xac, 0x72, 0x59, 0x0e, 0xfa, 0x2d, - 0x51, 0x7e, 0x20, 0x62, 0x2a, 0x4b, 0xea, 0xb2, 0x1c, 0xab, 0x9a, 0x54, 0x10, 0x65, 0x83, 0x11, - 0x89, 0x30, 0x43, 0xec, 0x0c, 0x60, 0x6f, 0xde, 0x11, 0x16, 0x10, 0xfb, 0xf7, 0x2d, 0xbe, 0xb0, - 0xf4, 0xae, 0xa3, 0xb7, 0x61, 0xa6, 0xe5, 0xc4, 0x8d, 0xed, 0xe5, 0xfb, 0xed, 0x90, 0xbf, 0x6f, - 0xc8, 0x71, 0x7a, 0xa6, 0xdf, 0x38, 0x69, 0x1f, 0x99, 0x98, 0x55, 0xae, 0xa6, 0x88, 0xe1, 0x2e, - 0xf2, 0x68, 0x03, 0xc6, 0x59, 0x19, 0xb3, 0xdf, 0x8f, 0x7a, 0xb1, 0x06, 0x79, 0xad, 0x29, 0xae, - 0x76, 0x35, 0xa1, 0x83, 0x75, 0xa2, 0xf6, 0x97, 0x8b, 0x7c, 0xb7, 0x33, 0xd1, 0x83, 0xe7, 0xa4, - 0x59, 0xaa, 0x56, 0xb0, 0x98, 0x05, 0x3d, 0x27, 0x0d, 0x2d, 0xc6, 0x12, 0x8e, 0x5e, 0x01, 0x20, - 0xf7, 0x63, 0x12, 0xfa, 0x4e, 0x53, 0x09, 0xbd, 0xca, 0xb0, 0xb7, 0x12, 0xac, 0x05, 0xf1, 0xed, - 0x88, 0x7c, 0xdb, 0xb2, 0x42, 0xc1, 0x1a, 0x3a, 0x95, 0x16, 0xda, 0x61, 0xb0, 0xeb, 0xb9, 0xcc, - 0xeb, 0xbb, 0x68, 0x4a, 0x0b, 0x35, 0x05, 0xc1, 0x1a, 0x16, 0x7a, 0x05, 0x26, 0x3b, 0x7e, 0xc4, - 0x39, 0x14, 0xca, 0x90, 0x0b, 0x1b, 0x24, 0x65, 0x9e, 0x72, 0x5b, 0x07, 0x62, 0x13, 0x17, 0x2d, - 0xc0, 0x48, 0xec, 0x30, 0xa3, 0x96, 0xe1, 0x7c, 0x6b, 0xdc, 0x75, 0x8a, 0xa1, 0xe7, 0x24, 0xa0, - 0x15, 0xb0, 0xa8, 0x88, 0xde, 0x90, 0xde, 0x35, 0xfc, 0xac, 0x17, 0x66, 0xf0, 0x83, 0xdd, 0x0b, - 0x9a, 0x6f, 0x8d, 0x30, 0xaf, 0x37, 0x68, 0xd9, 0xbf, 0x51, 0x02, 0x48, 0xd8, 0x71, 0xf4, 0x4e, - 0xd7, 0x79, 0xf4, 0x6c, 0x6f, 0x06, 0xfe, 0xe8, 0x0e, 0x23, 0xf4, 0x3d, 0x16, 0x8c, 0x3b, 0xcd, - 0x66, 0xd0, 0x70, 0x62, 0x36, 0xca, 0x85, 0xde, 0xe7, 0xa1, 0x68, 0x7f, 0x21, 0xa9, 0xc1, 0xbb, - 0xf0, 0x82, 0x5c, 0x78, 0x1a, 0xa4, 0x6f, 0x2f, 0xf4, 0x86, 0xd1, 0x47, 0xa4, 0xc8, 0xca, 0x97, - 0xc7, 0x5c, 0x5a, 0x64, 0x2d, 0xb1, 0xa3, 0x5f, 0x93, 0x56, 0xd1, 0x6d, 0x23, 0x1e, 0xea, 0x50, - 0x7e, 0x68, 0x20, 0x83, 0x2b, 0xed, 0x17, 0x0a, 0x15, 0xd5, 0x74, 0x77, 0xc0, 0xe1, 0xfc, 0xf8, - 0x59, 0x9a, 0xf8, 0xd3, 0xc7, 0x15, 0xf0, 0x2d, 0x98, 0x76, 0xcd, 0xbb, 0x5d, 0xac, 0xa6, 0xa7, - 0xf2, 0xe8, 0xa6, 0x58, 0x81, 0xe4, 0x36, 0x4f, 0x01, 0x70, 0x9a, 0x30, 0xaa, 0x71, 0xc7, 0xcc, - 0xaa, 0xbf, 0x19, 0x08, 0x77, 0x0a, 0x3b, 0x77, 0x2e, 0xf7, 0xa2, 0x98, 0xb4, 0x28, 0xa6, 0x99, - 0x80, 0x8c, 0x96, 0x60, 0x45, 0x05, 0xbd, 0x06, 0x23, 0x2c, 0x7c, 0x43, 0x34, 0x3b, 0x96, 0xaf, - 0x0d, 0x36, 0x23, 0x0f, 0x25, 0x9b, 0x8a, 0xfd, 0x8d, 0xb0, 0xa0, 0x80, 0xae, 0xcb, 0xf0, 0x64, - 0x51, 0xd5, 0xbf, 0x1d, 0x11, 0x16, 0x9e, 0xac, 0xb4, 0xf8, 0xc1, 0x24, 0xf2, 0x18, 0x2f, 0xcf, - 0xcc, 0x3e, 0x64, 0xd4, 0xa4, 0xcc, 0x91, 0xf8, 0x2f, 0x93, 0x1a, 0xcd, 0x42, 0x7e, 0xf7, 0xcc, - 0xc4, 0x47, 0xc9, 0x70, 0xde, 0x31, 0x49, 0xe0, 0x34, 0x4d, 0xca, 0x68, 0xf2, 0x9d, 0x2b, 0x1c, - 0x32, 0xfa, 0xed, 0x7f, 0x2e, 0x5f, 0xb3, 0x4b, 0x86, 0x97, 0x60, 0x51, 0xff, 0x58, 0x6f, 0xfd, - 0x39, 0x1f, 0x66, 0xd2, 0x5b, 0xf4, 0x91, 0x72, 0x19, 0xbf, 0x3b, 0x04, 0x53, 0xe6, 0x92, 0x42, - 0x57, 0xa0, 0x24, 0x88, 0xa8, 0x40, 0xe4, 0x6a, 0x97, 0xac, 0x4a, 0x00, 0x4e, 0x70, 0x98, 0x4a, - 0x89, 0x55, 0xd7, 0x0c, 0x69, 0x13, 0x95, 0x92, 0x82, 0x60, 0x0d, 0x8b, 0xca, 0x4b, 0x1b, 0x41, - 0x10, 0xab, 0x4b, 0x45, 0xad, 0xbb, 0x45, 0x56, 0x8a, 0x05, 0x94, 0x5e, 0x26, 0x3b, 0x24, 0xf4, - 0x49, 0xd3, 0x0c, 0xc1, 0xa9, 0x2e, 0x93, 0x1b, 0x3a, 0x10, 0x9b, 0xb8, 0xf4, 0x96, 0x0c, 0x22, - 0xb6, 0x90, 0x85, 0x54, 0x96, 0x18, 0x26, 0xd7, 0x79, 0x20, 0x14, 0x09, 0x47, 0x9f, 0x83, 0xc7, - 0x55, 0xdc, 0x12, 0xcc, 0x5f, 0x1a, 0x64, 0x8b, 0x23, 0x86, 0x12, 0xe5, 0xf1, 0xa5, 0x6c, 0x34, - 0x9c, 0x57, 0x1f, 0xbd, 0x0a, 0x53, 0x82, 0x73, 0x97, 0x14, 0x47, 0x4d, 0xe3, 0x97, 0x1b, 0x06, - 0x14, 0xa7, 0xb0, 0x65, 0x10, 0x51, 0xc6, 0x3c, 0x4b, 0x0a, 0x63, 0xdd, 0x41, 0x44, 0x75, 0x38, - 0xee, 0xaa, 0x81, 0x16, 0x60, 0x5a, 0x44, 0xb4, 0xf0, 0xb7, 0xf8, 0x9c, 0x08, 0x7f, 0x29, 0xb5, - 0xa5, 0x6e, 0x99, 0x60, 0x9c, 0xc6, 0x47, 0x2f, 0xc3, 0x84, 0x13, 0x36, 0xb6, 0xbd, 0x98, 0x34, - 0xe2, 0x4e, 0xc8, 0x1d, 0xa9, 0x34, 0xeb, 0xa1, 0x05, 0x0d, 0x86, 0x0d, 0x4c, 0xfb, 0x1d, 0x38, - 0x99, 0xe1, 0x6a, 0x49, 0x17, 0x8e, 0xd3, 0xf6, 0xe4, 0x37, 0xa5, 0x4c, 0x8c, 0x17, 0x6a, 0x55, - 0xf9, 0x35, 0x1a, 0x16, 0x5d, 0x9d, 0xcc, 0x25, 0x53, 0xcb, 0x61, 0xa6, 0x56, 0xe7, 0x8a, 0x04, - 0xe0, 0x04, 0xc7, 0xfe, 0xc1, 0x22, 0x4c, 0x67, 0xbc, 0x9e, 0xb0, 0x3c, 0x5a, 0x29, 0xd9, 0x23, - 0x49, 0x9b, 0x65, 0xc6, 0xa4, 0x2d, 0x1c, 0x22, 0x26, 0x6d, 0xb1, 0x5f, 0x4c, 0xda, 0xa1, 0x77, - 0x13, 0x93, 0xd6, 0x1c, 0xb1, 0xe1, 0x81, 0x46, 0x2c, 0x23, 0x8e, 0xed, 0xc8, 0x21, 0xe3, 0xd8, - 0x1a, 0x83, 0x3e, 0xda, 0x7f, 0xd0, 0xe9, 0xf6, 0x8e, 0x89, 0xef, 0x08, 0xc7, 0x3d, 0x6d, 0x7b, - 0xaf, 0xb3, 0x52, 0x2c, 0xa0, 0xf6, 0x0f, 0x14, 0x60, 0x26, 0x6d, 0x0d, 0x79, 0x0c, 0x6a, 0xdb, - 0xd7, 0x0c, 0xb5, 0x6d, 0x76, 0xf6, 0xba, 0xb4, 0x8d, 0x66, 0x9e, 0x0a, 0x17, 0xa7, 0x54, 0xb8, - 0x1f, 0x1e, 0x88, 0x5a, 0x6f, 0x75, 0xee, 0xdf, 0x2f, 0xc0, 0xe9, 0x74, 0x95, 0xa5, 0xa6, 0xe3, - 0xb5, 0x8e, 0x61, 0x6c, 0x6e, 0x19, 0x63, 0xf3, 0xdc, 0x20, 0x5f, 0xc3, 0xba, 0x96, 0x3b, 0x40, - 0x77, 0x53, 0x03, 0x74, 0x65, 0x70, 0x92, 0xbd, 0x47, 0xe9, 0x1b, 0x45, 0x38, 0x9f, 0x59, 0x2f, - 0xd1, 0x7a, 0xae, 0x18, 0x5a, 0xcf, 0xab, 0x29, 0xad, 0xa7, 0xdd, 0xbb, 0xf6, 0xd1, 0xa8, 0x41, - 0x85, 0xaf, 0x2c, 0x8b, 0x6f, 0xfa, 0x90, 0x2a, 0x50, 0xc3, 0x57, 0x56, 0x11, 0xc2, 0x26, 0xdd, - 0xbf, 0x48, 0xaa, 0xcf, 0x7f, 0x67, 0xc1, 0x99, 0xcc, 0xb9, 0x39, 0x06, 0x55, 0xd7, 0x9a, 0xa9, - 0xea, 0x7a, 0x7a, 0xe0, 0xd5, 0x9a, 0xa3, 0xfb, 0xfa, 0xb5, 0xa1, 0x9c, 0x6f, 0x61, 0x82, 0xfc, - 0x2d, 0x18, 0x77, 0x1a, 0x0d, 0x12, 0x45, 0xab, 0x81, 0xab, 0xe2, 0x7d, 0x3e, 0xc7, 0xe4, 0xb1, - 0xa4, 0xf8, 0x60, 0xbf, 0x3c, 0x97, 0x26, 0x91, 0x80, 0xb1, 0x4e, 0xc1, 0x0c, 0x51, 0x5c, 0x38, - 0xd2, 0x10, 0xc5, 0x57, 0x01, 0x76, 0x15, 0x57, 0x9f, 0x56, 0x06, 0x68, 0xfc, 0xbe, 0x86, 0x85, - 0xbe, 0x00, 0x63, 0x91, 0xb8, 0xee, 0xc5, 0x52, 0x7c, 0x61, 0xc0, 0xb9, 0x72, 0x36, 0x48, 0xd3, - 0x0c, 0xca, 0xa0, 0xf4, 0x26, 0x8a, 0x24, 0xfa, 0x0c, 0xcc, 0x44, 0x3c, 0xe6, 0xcf, 0x52, 0xd3, - 0x89, 0x98, 0xc3, 0x8b, 0x58, 0x85, 0x2c, 0xd2, 0x42, 0x3d, 0x05, 0xc3, 0x5d, 0xd8, 0x68, 0x45, - 0x7e, 0x14, 0x0b, 0x50, 0xc4, 0x17, 0xe6, 0xa5, 0xe4, 0x83, 0x44, 0xb6, 0xcf, 0x53, 0xe9, 0xe1, - 0x67, 0x03, 0xaf, 0xd5, 0x44, 0x5f, 0x00, 0xa0, 0xcb, 0x47, 0xe8, 0x1c, 0x46, 0xf3, 0x0f, 0x4f, - 0x7a, 0xaa, 0xb8, 0x99, 0x26, 0xbe, 0xcc, 0x4b, 0xb5, 0xa2, 0x88, 0x60, 0x8d, 0xa0, 0xfd, 0x03, - 0x43, 0xf0, 0x44, 0x8f, 0x33, 0x12, 0x2d, 0x98, 0xef, 0xc6, 0xcf, 0xa4, 0x85, 0xf0, 0xb9, 0xcc, - 0xca, 0x86, 0x54, 0x9e, 0x5a, 0x8a, 0x85, 0x77, 0xbd, 0x14, 0xbf, 0xcf, 0xd2, 0xd4, 0x23, 0xdc, - 0x6a, 0xf3, 0x53, 0x87, 0x3c, 0xfb, 0x8f, 0x50, 0x5f, 0xb2, 0x99, 0xa1, 0x74, 0xb8, 0x3a, 0x70, - 0x77, 0x06, 0xd6, 0x42, 0x1c, 0xaf, 0x92, 0xf8, 0xcb, 0x16, 0x3c, 0x99, 0xd9, 0x5f, 0xc3, 0x36, - 0xe7, 0x0a, 0x94, 0x1a, 0xb4, 0x50, 0x73, 0x4a, 0x4c, 0xbc, 0xb5, 0x25, 0x00, 0x27, 0x38, 0x86, - 0x09, 0x4e, 0xa1, 0xaf, 0x09, 0xce, 0xbf, 0xb2, 0xa0, 0x6b, 0x7f, 0x1c, 0xc3, 0x41, 0x5d, 0x35, - 0x0f, 0xea, 0x0f, 0x0e, 0x32, 0x97, 0x39, 0x67, 0xf4, 0x1f, 0x4e, 0xc3, 0x63, 0x39, 0x4e, 0x39, - 0xbb, 0x70, 0x62, 0xab, 0x41, 0x4c, 0x77, 0x4f, 0xf1, 0x31, 0x99, 0x9e, 0xb1, 0x3d, 0x7d, 0x43, - 0x59, 0xea, 0xbe, 0x13, 0x5d, 0x28, 0xb8, 0xbb, 0x09, 0xf4, 0x65, 0x0b, 0x4e, 0x39, 0xf7, 0xa2, - 0x65, 0x7a, 0xe1, 0x7a, 0x8d, 0xc5, 0x66, 0xd0, 0xd8, 0xa1, 0xa7, 0x99, 0x5c, 0x33, 0x2f, 0x66, - 0x2a, 0x4b, 0xee, 0xd6, 0xbb, 0xf0, 0x8d, 0xe6, 0x59, 0x2e, 0xc3, 0x2c, 0x2c, 0x9c, 0xd9, 0x16, - 0xc2, 0x22, 0x02, 0x34, 0x65, 0xfb, 0x7b, 0x38, 0x24, 0x67, 0x79, 0x4f, 0xf1, 0x23, 0x5b, 0x42, - 0xb0, 0xa2, 0x83, 0xbe, 0x04, 0xa5, 0x2d, 0xe9, 0xd2, 0x98, 0x71, 0x25, 0x24, 0x03, 0xd9, 0xdb, - 0xd1, 0x93, 0x3f, 0x64, 0x2a, 0x24, 0x9c, 0x10, 0x45, 0xaf, 0x42, 0xd1, 0xdf, 0x8c, 0x7a, 0xa5, - 0x03, 0x4c, 0x19, 0xaf, 0x71, 0xb7, 0xff, 0xb5, 0x95, 0x3a, 0xa6, 0x15, 0xd1, 0x75, 0x28, 0x86, - 0x1b, 0xae, 0xd0, 0xf4, 0x65, 0x9e, 0xe1, 0x78, 0xb1, 0x92, 0xd3, 0x2b, 0x46, 0x09, 0x2f, 0x56, - 0x30, 0x25, 0x81, 0x6a, 0x30, 0xcc, 0x3c, 0x59, 0xc4, 0x7d, 0x90, 0xc9, 0xf9, 0xf6, 0xf0, 0x08, - 0xe3, 0xb1, 0x01, 0x18, 0x02, 0xe6, 0x84, 0xd0, 0x3a, 0x8c, 0x34, 0x58, 0xea, 0x38, 0x91, 0x7e, - 0xe0, 0x23, 0x99, 0x3a, 0xbd, 0x1e, 0x39, 0xf5, 0x84, 0x8a, 0x8b, 0x61, 0x60, 0x41, 0x8b, 0x51, - 0x25, 0xed, 0xed, 0xcd, 0x48, 0xa4, 0x3a, 0xcd, 0xa6, 0xda, 0x23, 0x55, 0xa4, 0xa0, 0xca, 0x30, - 0xb0, 0xa0, 0x85, 0x3e, 0x01, 0x85, 0xcd, 0x86, 0x70, 0x74, 0xc9, 0x54, 0xee, 0x99, 0x91, 0x1b, - 0x16, 0x47, 0x1e, 0xec, 0x97, 0x0b, 0x2b, 0x4b, 0xb8, 0xb0, 0xd9, 0x40, 0x6b, 0x30, 0xba, 0xc9, - 0x7d, 0xbd, 0x85, 0xfe, 0xee, 0xa9, 0x6c, 0x37, 0xf4, 0x2e, 0x77, 0x70, 0xee, 0xa0, 0x21, 0x00, - 0x58, 0x12, 0x61, 0x01, 0x95, 0x95, 0xcf, 0xba, 0xc8, 0x2c, 0x30, 0x7f, 0xb8, 0x38, 0x03, 0xfc, - 0x7e, 0x4e, 0x3c, 0xdf, 0xb1, 0x46, 0x91, 0xae, 0x6a, 0x47, 0xe6, 0x9b, 0x16, 0x41, 0x59, 0x32, - 0x57, 0x75, 0x9f, 0x54, 0xdc, 0x7c, 0x55, 0x2b, 0x24, 0x9c, 0x10, 0x45, 0x3b, 0x30, 0xb9, 0x1b, - 0xb5, 0xb7, 0x89, 0xdc, 0xd2, 0x2c, 0x46, 0x4b, 0xce, 0x15, 0x76, 0x47, 0x20, 0x7a, 0x61, 0xdc, - 0x71, 0x9a, 0x5d, 0xa7, 0x10, 0x7b, 0xfd, 0xbe, 0xa3, 0x13, 0xc3, 0x26, 0x6d, 0x3a, 0xfc, 0x6f, - 0x77, 0x82, 0x8d, 0xbd, 0x98, 0x88, 0x54, 0x04, 0x99, 0xc3, 0xff, 0x3a, 0x47, 0xe9, 0x1e, 0x7e, - 0x01, 0xc0, 0x92, 0x08, 0xba, 0x23, 0x86, 0x87, 0x9d, 0x9e, 0x33, 0xf9, 0x51, 0xb3, 0x32, 0x13, - 0xbe, 0x6b, 0x83, 0xc2, 0x4e, 0xcb, 0x84, 0x14, 0x3b, 0x25, 0xdb, 0xdb, 0x41, 0x1c, 0xf8, 0xa9, - 0x13, 0xfa, 0x44, 0xfe, 0x29, 0x59, 0xcb, 0xc0, 0xef, 0x3e, 0x25, 0xb3, 0xb0, 0x70, 0x66, 0x5b, - 0xc8, 0x85, 0xa9, 0x76, 0x10, 0xc6, 0xf7, 0x82, 0x50, 0xae, 0x2f, 0xd4, 0x43, 0xaf, 0x60, 0x60, - 0x8a, 0x16, 0x59, 0x6a, 0x0c, 0x13, 0x82, 0x53, 0x34, 0xd1, 0x67, 0x61, 0x34, 0x6a, 0x38, 0x4d, - 0x52, 0xbd, 0x35, 0x7b, 0x32, 0xff, 0xfa, 0xa9, 0x73, 0x94, 0x9c, 0xd5, 0xc5, 0x26, 0x47, 0xa0, - 0x60, 0x49, 0x0e, 0xad, 0xc0, 0x30, 0xcb, 0x6f, 0xc3, 0xb2, 0x28, 0xe4, 0x04, 0xff, 0xea, 0x32, - 0x25, 0xe6, 0x67, 0x13, 0x2b, 0xc6, 0xbc, 0x3a, 0xdd, 0x03, 0x82, 0xbd, 0x0e, 0xa2, 0xd9, 0xd3, - 0xf9, 0x7b, 0x40, 0x70, 0xe5, 0xb7, 0xea, 0xbd, 0xf6, 0x80, 0x42, 0xc2, 0x09, 0x51, 0x7a, 0x32, - 0xd3, 0xd3, 0xf4, 0xb1, 0x1e, 0x86, 0x2f, 0xb9, 0x67, 0x29, 0x3b, 0x99, 0xe9, 0x49, 0x4a, 0x49, - 0xd8, 0xbf, 0x3d, 0xda, 0xcd, 0xb3, 0x30, 0x81, 0xec, 0x2f, 0x5b, 0x5d, 0x6f, 0x7a, 0x1f, 0x1d, - 0x54, 0x3f, 0x74, 0x84, 0xdc, 0xea, 0x97, 0x2d, 0x78, 0xac, 0x9d, 0xf9, 0x21, 0x82, 0x01, 0x18, - 0x4c, 0xcd, 0xc4, 0x3f, 0x5d, 0x65, 0x3a, 0xc9, 0x86, 0xe3, 0x9c, 0x96, 0xd2, 0x12, 0x41, 0xf1, - 0x5d, 0x4b, 0x04, 0xab, 0x30, 0xc6, 0x98, 0xcc, 0x3e, 0xa9, 0x54, 0xd3, 0x82, 0x11, 0x63, 0x25, - 0x96, 0x44, 0x45, 0xac, 0x48, 0xa0, 0xef, 0xb7, 0xe0, 0x5c, 0xba, 0xeb, 0x98, 0x30, 0xb0, 0x91, - 0x0b, 0x73, 0x45, 0x7c, 0xff, 0xb9, 0x5a, 0x2f, 0xe4, 0x83, 0x7e, 0x08, 0xb8, 0x77, 0x63, 0xa8, - 0x92, 0x21, 0x8c, 0x8e, 0x98, 0x8a, 0xfa, 0x01, 0x04, 0xd2, 0x17, 0x61, 0xa2, 0x15, 0x74, 0xfc, - 0x58, 0xd8, 0xc9, 0x08, 0xd7, 0x54, 0xf6, 0x30, 0xbd, 0xaa, 0x95, 0x63, 0x03, 0x2b, 0x25, 0xc6, - 0x8e, 0x3d, 0xb4, 0x18, 0xfb, 0x26, 0x4c, 0xf8, 0x9a, 0x61, 0xa7, 0xe0, 0x07, 0x2e, 0xe5, 0x67, - 0x3a, 0xd1, 0xcd, 0x40, 0x79, 0x2f, 0xf5, 0x12, 0x6c, 0x50, 0x3b, 0x5e, 0xd9, 0xe8, 0x27, 0xad, - 0x0c, 0xa6, 0x9e, 0x4b, 0xcb, 0x9f, 0x34, 0xa5, 0xe5, 0x4b, 0x69, 0x69, 0xb9, 0x4b, 0xf9, 0x6a, - 0x08, 0xca, 0x83, 0x27, 0x31, 0x18, 0x34, 0x60, 0xa0, 0xdd, 0x84, 0x0b, 0xfd, 0xae, 0x25, 0x66, - 0x30, 0xe5, 0xaa, 0x27, 0xb9, 0xc4, 0x60, 0xca, 0xad, 0x56, 0x30, 0x83, 0x0c, 0x1a, 0x51, 0xc6, - 0xfe, 0x9f, 0x16, 0x14, 0x6b, 0x81, 0x7b, 0x0c, 0xca, 0xe4, 0x4f, 0x19, 0xca, 0xe4, 0x27, 0xb2, - 0x2f, 0x44, 0x37, 0x57, 0x75, 0xbc, 0x9c, 0x52, 0x1d, 0x9f, 0xcb, 0x23, 0xd0, 0x5b, 0x51, 0xfc, - 0x63, 0x45, 0x18, 0xaf, 0x05, 0xae, 0xb2, 0x56, 0xfe, 0xb5, 0x87, 0xb1, 0x56, 0xce, 0x8d, 0xff, - 0xab, 0x51, 0x66, 0x76, 0x56, 0xd2, 0xdb, 0xf2, 0xcf, 0x99, 0xd1, 0xf2, 0x5d, 0xe2, 0x6d, 0x6d, - 0xc7, 0xc4, 0x4d, 0x7f, 0xce, 0xf1, 0x19, 0x2d, 0xff, 0x0f, 0x0b, 0xa6, 0x53, 0xad, 0xa3, 0x26, - 0x4c, 0x36, 0x75, 0x4d, 0xa0, 0x58, 0xa7, 0x0f, 0xa5, 0x44, 0x14, 0x46, 0x9f, 0x5a, 0x11, 0x36, - 0x89, 0xa3, 0x79, 0x00, 0xf5, 0xa2, 0x27, 0x35, 0x60, 0x8c, 0xeb, 0x57, 0x4f, 0x7e, 0x11, 0xd6, - 0x30, 0xd0, 0x4b, 0x30, 0x1e, 0x07, 0xed, 0xa0, 0x19, 0x6c, 0xed, 0xc9, 0x1c, 0x11, 0x5a, 0x0c, - 0xa9, 0xf5, 0x04, 0x84, 0x75, 0x3c, 0xfb, 0x27, 0x8a, 0xfc, 0x43, 0xfd, 0xd8, 0xfb, 0xd6, 0x9a, - 0x7c, 0x7f, 0xaf, 0xc9, 0x6f, 0x58, 0x30, 0x43, 0x5b, 0x67, 0x66, 0x25, 0xf2, 0xb2, 0x55, 0xc9, - 0xd4, 0xac, 0x1e, 0xc9, 0xd4, 0x2e, 0xd1, 0xb3, 0xcb, 0x0d, 0x3a, 0xb1, 0xd0, 0xa0, 0x69, 0x87, - 0x13, 0x2d, 0xc5, 0x02, 0x2a, 0xf0, 0x48, 0x18, 0x0a, 0x67, 0x37, 0x1d, 0x8f, 0x84, 0x21, 0x16, - 0x50, 0x99, 0x6b, 0x6d, 0x28, 0x27, 0xd7, 0x1a, 0x8b, 0xc8, 0x28, 0x0c, 0x10, 0x04, 0xdb, 0xa3, - 0x45, 0x64, 0x94, 0x96, 0x09, 0x09, 0x8e, 0xfd, 0x33, 0x45, 0x98, 0xa8, 0x05, 0x6e, 0xf2, 0x56, - 0xf6, 0xa2, 0xf1, 0x56, 0x76, 0x21, 0xf5, 0x56, 0x36, 0xa3, 0xe3, 0x7e, 0xeb, 0x65, 0xec, 0xbd, - 0x7a, 0x19, 0xfb, 0x97, 0x16, 0x9b, 0xb5, 0xca, 0x5a, 0x5d, 0x24, 0xd2, 0x7f, 0x1e, 0xc6, 0xd9, - 0x81, 0xc4, 0xbc, 0x2b, 0xe5, 0x03, 0x12, 0xcb, 0xb0, 0xb0, 0x96, 0x14, 0x63, 0x1d, 0x07, 0x5d, - 0x86, 0xb1, 0x88, 0x38, 0x61, 0x63, 0x5b, 0x9d, 0x71, 0xe2, 0x79, 0x85, 0x97, 0x61, 0x05, 0x45, - 0xaf, 0x27, 0xc1, 0x00, 0x8b, 0xf9, 0xc9, 0x5e, 0xf4, 0xfe, 0xf0, 0x2d, 0x92, 0x1f, 0x01, 0xd0, - 0xbe, 0x0b, 0xa8, 0x1b, 0x7f, 0x00, 0xbf, 0xb5, 0xb2, 0x19, 0x05, 0xab, 0xd4, 0x15, 0x01, 0xeb, - 0x4f, 0x2c, 0x98, 0xaa, 0x05, 0x2e, 0xdd, 0xba, 0x7f, 0x91, 0xf6, 0xa9, 0x1e, 0x09, 0x75, 0xa4, - 0x47, 0x24, 0xd4, 0x7f, 0x60, 0xc1, 0x68, 0x2d, 0x70, 0x8f, 0x41, 0xef, 0xfe, 0x49, 0x53, 0xef, - 0xfe, 0x78, 0xce, 0x92, 0xc8, 0x51, 0xb5, 0xff, 0x5c, 0x11, 0x26, 0x69, 0x3f, 0x83, 0x2d, 0x39, - 0x4b, 0xc6, 0x88, 0x58, 0x03, 0x8c, 0x08, 0x65, 0x73, 0x83, 0x66, 0x33, 0xb8, 0x97, 0x9e, 0xb1, - 0x15, 0x56, 0x8a, 0x05, 0x14, 0x3d, 0x0b, 0x63, 0xed, 0x90, 0xec, 0x7a, 0x81, 0xe0, 0x1f, 0xb5, - 0x57, 0x8c, 0x9a, 0x28, 0xc7, 0x0a, 0x83, 0xca, 0x5d, 0x91, 0xe7, 0x37, 0x48, 0x9d, 0x34, 0x02, - 0xdf, 0xe5, 0xaa, 0xe9, 0xa2, 0x08, 0x71, 0xae, 0x95, 0x63, 0x03, 0x0b, 0xdd, 0x85, 0x12, 0xfb, - 0xcf, 0x4e, 0x94, 0xc3, 0x67, 0x81, 0x13, 0x79, 0x45, 0x04, 0x01, 0x9c, 0xd0, 0x42, 0x57, 0x01, - 0x62, 0x19, 0x06, 0x3b, 0x12, 0xae, 0x8f, 0x8a, 0xd7, 0x56, 0x01, 0xb2, 0x23, 0xac, 0x61, 0xa1, - 0x67, 0xa0, 0x14, 0x3b, 0x5e, 0xf3, 0xa6, 0xe7, 0x93, 0x88, 0xa9, 0x9c, 0x8b, 0x32, 0x6d, 0x88, - 0x28, 0xc4, 0x09, 0x9c, 0xf2, 0x3a, 0xcc, 0xd3, 0x9f, 0xe7, 0x90, 0x1c, 0x63, 0xd8, 0x8c, 0xd7, - 0xb9, 0xa9, 0x4a, 0xb1, 0x86, 0x61, 0xbf, 0x0c, 0xa7, 0x6b, 0x81, 0x5b, 0x0b, 0xc2, 0x78, 0x25, - 0x08, 0xef, 0x39, 0xa1, 0x2b, 0xe7, 0xaf, 0x2c, 0x33, 0x58, 0xd0, 0xb3, 0x67, 0x98, 0xef, 0x4c, - 0x23, 0x37, 0xc5, 0x0b, 0x8c, 0xdb, 0x39, 0xa4, 0xf3, 0x47, 0x83, 0xdd, 0xbb, 0x2a, 0x5d, 0xec, - 0x35, 0x27, 0x26, 0xe8, 0x16, 0x4b, 0xca, 0x95, 0x5c, 0x41, 0xa2, 0xfa, 0xd3, 0x5a, 0x52, 0xae, - 0x04, 0x98, 0x79, 0x67, 0x99, 0xf5, 0xed, 0x9f, 0x1a, 0x62, 0xa7, 0x51, 0x2a, 0x7b, 0x2a, 0xfa, - 0x22, 0x4c, 0x45, 0xe4, 0xa6, 0xe7, 0x77, 0xee, 0x4b, 0x21, 0xbc, 0x87, 0xfb, 0x4e, 0x7d, 0x59, - 0xc7, 0xe4, 0xaa, 0x3c, 0xb3, 0x0c, 0xa7, 0xa8, 0xd1, 0x79, 0x0a, 0x3b, 0xfe, 0x42, 0x74, 0x3b, - 0x22, 0xa1, 0xc8, 0xde, 0xc9, 0xe6, 0x09, 0xcb, 0x42, 0x9c, 0xc0, 0xe9, 0xba, 0x64, 0x7f, 0xd6, - 0x02, 0x1f, 0x07, 0x41, 0x2c, 0x57, 0x32, 0xcb, 0x2b, 0xa5, 0x95, 0x63, 0x03, 0x0b, 0xad, 0x00, - 0x8a, 0x3a, 0xed, 0x76, 0x93, 0x3d, 0xec, 0x3b, 0xcd, 0x6b, 0x61, 0xd0, 0x69, 0xf3, 0x57, 0xcf, - 0x22, 0x8f, 0x40, 0x59, 0xef, 0x82, 0xe2, 0x8c, 0x1a, 0xf4, 0xf4, 0xd9, 0x8c, 0xd8, 0x6f, 0xb6, - 0xba, 0x8b, 0x42, 0xbd, 0x5e, 0x67, 0x45, 0x58, 0xc2, 0xe8, 0x62, 0x62, 0xcd, 0x73, 0xcc, 0x91, - 0x64, 0x31, 0x61, 0x55, 0x8a, 0x35, 0x0c, 0xb4, 0x0c, 0xa3, 0xd1, 0x5e, 0xd4, 0x88, 0x45, 0xe8, - 0xad, 0x9c, 0x3c, 0xcc, 0x75, 0x86, 0xa2, 0xa5, 0x0d, 0xe1, 0x55, 0xb0, 0xac, 0x8b, 0x5a, 0x30, - 0x75, 0xcf, 0xf3, 0xdd, 0xe0, 0x5e, 0x24, 0x27, 0x6a, 0x2c, 0x5f, 0x35, 0x7a, 0x97, 0x63, 0xa6, - 0x26, 0xdb, 0x98, 0xb7, 0xbb, 0x06, 0x31, 0x9c, 0x22, 0x6e, 0x7f, 0x07, 0xbb, 0x7b, 0x59, 0x6a, - 0xc9, 0xb8, 0x13, 0x12, 0xd4, 0x82, 0xc9, 0x36, 0x5b, 0x61, 0x22, 0x26, 0xba, 0x58, 0x26, 0x2f, - 0x0e, 0x28, 0x44, 0xdf, 0xa3, 0xe7, 0x9a, 0x52, 0x72, 0x31, 0xe9, 0xa4, 0xa6, 0x93, 0xc3, 0x26, - 0x75, 0xfb, 0x4f, 0x4f, 0xb1, 0x23, 0xbe, 0xce, 0x25, 0xe3, 0x51, 0x61, 0xf1, 0x2c, 0xc4, 0x80, - 0xb9, 0x7c, 0x15, 0x4d, 0x32, 0x80, 0xc2, 0x6a, 0x1a, 0xcb, 0xba, 0xe8, 0x75, 0xf6, 0x28, 0xce, - 0xcf, 0xd5, 0x7e, 0x19, 0xfe, 0x39, 0x96, 0xf1, 0xfe, 0x2d, 0x2a, 0x62, 0x8d, 0x08, 0xba, 0xc9, - 0xb3, 0x8d, 0x39, 0x61, 0x2c, 0x74, 0x70, 0x45, 0x43, 0xc7, 0x32, 0x89, 0x75, 0xe0, 0x41, 0xba, - 0x00, 0x9b, 0x95, 0xd1, 0x16, 0x9c, 0xd3, 0xd2, 0xf2, 0x5e, 0x0b, 0x1d, 0xf6, 0x50, 0xea, 0xb1, - 0x3d, 0xab, 0x1d, 0xd3, 0x4f, 0x3e, 0xd8, 0x2f, 0x9f, 0x5b, 0xef, 0x85, 0x88, 0x7b, 0xd3, 0x41, - 0xb7, 0xe0, 0x34, 0x77, 0x2c, 0xac, 0x10, 0xc7, 0x6d, 0x7a, 0xbe, 0xba, 0x07, 0xf8, 0xb2, 0x3f, - 0xf3, 0x60, 0xbf, 0x7c, 0x7a, 0x21, 0x0b, 0x01, 0x67, 0xd7, 0x43, 0x9f, 0x84, 0x92, 0xeb, 0x47, - 0x62, 0x0c, 0x46, 0x8c, 0x8c, 0xd3, 0xa5, 0xca, 0x5a, 0x5d, 0x7d, 0x7f, 0xf2, 0x07, 0x27, 0x15, - 0xd0, 0x16, 0xd7, 0xc3, 0x29, 0xb1, 0x77, 0xb4, 0x2b, 0x3a, 0x4a, 0x5a, 0x81, 0x62, 0xb8, 0x16, - 0x71, 0x05, 0xb4, 0x32, 0xcd, 0x35, 0xbc, 0x8e, 0x0c, 0xc2, 0xe8, 0x35, 0x40, 0x94, 0x2f, 0xf4, - 0x1a, 0x64, 0xa1, 0xc1, 0x42, 0xd3, 0x33, 0xb5, 0xe5, 0x98, 0xe1, 0xca, 0x81, 0xea, 0x5d, 0x18, - 0x38, 0xa3, 0x16, 0xba, 0x4e, 0xcf, 0x4d, 0xbd, 0x54, 0x98, 0x18, 0x4b, 0x59, 0x62, 0xb6, 0x42, - 0xda, 0x21, 0x69, 0x38, 0x31, 0x71, 0x4d, 0x8a, 0x38, 0x55, 0x8f, 0x5e, 0xdd, 0x2a, 0x4b, 0x15, - 0x98, 0xe1, 0x58, 0xba, 0x33, 0x55, 0x51, 0x31, 0x7c, 0x3b, 0x88, 0xe2, 0x35, 0x12, 0xdf, 0x0b, - 0xc2, 0x1d, 0x11, 0xfd, 0x2e, 0x09, 0xc4, 0x9a, 0x80, 0xb0, 0x8e, 0x47, 0xd9, 0x6e, 0xf6, 0x2a, - 0x5d, 0xad, 0xb0, 0x07, 0xc1, 0xb1, 0x64, 0x9f, 0x5c, 0xe7, 0xc5, 0x58, 0xc2, 0x25, 0x6a, 0xb5, - 0xb6, 0xc4, 0x1e, 0xf7, 0x52, 0xa8, 0xd5, 0xda, 0x12, 0x96, 0x70, 0x44, 0xba, 0xb3, 0x79, 0x4f, - 0xe5, 0x2b, 0x51, 0xbb, 0x6f, 0x9f, 0x01, 0x13, 0x7a, 0xfb, 0x30, 0xa3, 0xf2, 0x88, 0xf3, 0xb0, - 0x80, 0xd1, 0xec, 0x34, 0x5b, 0x24, 0x83, 0xc7, 0x14, 0x54, 0x6a, 0xe9, 0x6a, 0x8a, 0x12, 0xee, - 0xa2, 0x6d, 0x04, 0xc8, 0x99, 0xe9, 0x9b, 0x65, 0xec, 0x0a, 0x94, 0xa2, 0xce, 0x86, 0x1b, 0xb4, - 0x1c, 0xcf, 0x67, 0x6f, 0x71, 0x1a, 0x4f, 0x57, 0x97, 0x00, 0x9c, 0xe0, 0xa0, 0x15, 0x18, 0x73, - 0xa4, 0xce, 0x19, 0xe5, 0x07, 0x53, 0x50, 0x9a, 0x66, 0xee, 0x5f, 0x2c, 0xb5, 0xcc, 0xaa, 0x2e, - 0x7a, 0x05, 0x26, 0x85, 0x3b, 0x19, 0x8f, 0xb7, 0xc1, 0xde, 0xca, 0x34, 0x7f, 0x81, 0xba, 0x0e, - 0xc4, 0x26, 0x2e, 0xfa, 0x02, 0x4c, 0x51, 0x2a, 0xc9, 0xc1, 0x36, 0x7b, 0x6a, 0x90, 0x13, 0x51, - 0xcb, 0x1e, 0xa3, 0x57, 0xc6, 0x29, 0x62, 0xc8, 0x85, 0xb3, 0x4e, 0x27, 0x0e, 0x98, 0xde, 0xde, - 0x5c, 0xff, 0xeb, 0xc1, 0x0e, 0xf1, 0xd9, 0x93, 0xd9, 0xd8, 0xe2, 0x85, 0x07, 0xfb, 0xe5, 0xb3, - 0x0b, 0x3d, 0xf0, 0x70, 0x4f, 0x2a, 0xe8, 0x36, 0x8c, 0xc7, 0x41, 0x53, 0xe4, 0xae, 0x8c, 0x66, - 0x1f, 0xcb, 0x0f, 0x30, 0xb5, 0xae, 0xd0, 0x74, 0x9d, 0x95, 0xaa, 0x8a, 0x75, 0x3a, 0x68, 0x9d, - 0xef, 0x31, 0x16, 0x7a, 0x97, 0x44, 0xb3, 0x8f, 0xe7, 0x0f, 0x8c, 0x8a, 0xd0, 0x6b, 0x6e, 0x41, - 0x51, 0x13, 0xeb, 0x64, 0xd0, 0x35, 0x38, 0xd1, 0x0e, 0xbd, 0x80, 0x2d, 0x6c, 0xf5, 0x66, 0x32, - 0x6b, 0x26, 0x0c, 0xa9, 0xa5, 0x11, 0x70, 0x77, 0x1d, 0x2a, 0xd3, 0xca, 0xc2, 0xd9, 0x33, 0x3c, - 0xfb, 0x1c, 0xe7, 0xf3, 0x79, 0x19, 0x56, 0x50, 0xb4, 0xca, 0xce, 0x65, 0x2e, 0x7d, 0xce, 0xce, - 0xe5, 0x07, 0xa1, 0xd0, 0xa5, 0x54, 0xce, 0x9e, 0xa9, 0xbf, 0x38, 0xa1, 0x40, 0xef, 0x8d, 0x68, - 0xdb, 0x09, 0x49, 0x2d, 0x0c, 0x1a, 0x24, 0xd2, 0xa2, 0x7d, 0x3f, 0xc1, 0x23, 0x84, 0xd2, 0x7b, - 0xa3, 0x9e, 0x85, 0x80, 0xb3, 0xeb, 0x21, 0x17, 0xa6, 0x42, 0x9d, 0xeb, 0x8d, 0x66, 0xcf, 0xf6, - 0xb0, 0x6f, 0x4a, 0xb1, 0xc8, 0xc9, 0x5a, 0x34, 0x8a, 0x23, 0x9c, 0xa2, 0x89, 0x3e, 0x03, 0x33, - 0x22, 0xa0, 0x56, 0x32, 0xee, 0xe7, 0x12, 0xc3, 0x49, 0x9c, 0x82, 0xe1, 0x2e, 0x6c, 0x1e, 0xe3, - 0xdc, 0xd9, 0x68, 0x12, 0xb1, 0x08, 0x6f, 0x7a, 0xfe, 0x4e, 0x34, 0x7b, 0x9e, 0x7d, 0xb5, 0x88, - 0x71, 0x9e, 0x86, 0xe2, 0x8c, 0x1a, 0x68, 0x1d, 0x66, 0xda, 0x21, 0x21, 0x2d, 0xc6, 0x63, 0x89, - 0xeb, 0xb2, 0xcc, 0xbd, 0x86, 0x69, 0x4f, 0x6a, 0x29, 0xd8, 0x41, 0x46, 0x19, 0xee, 0xa2, 0x40, - 0x59, 0xf8, 0x5d, 0x6e, 0xfd, 0x20, 0x5c, 0x96, 0x66, 0x2f, 0xe4, 0xb3, 0xf0, 0x77, 0x0c, 0x4c, - 0xce, 0x0a, 0x9a, 0x65, 0x38, 0x45, 0x8d, 0x4a, 0xf9, 0xbb, 0xed, 0xc6, 0xec, 0x93, 0xa6, 0x0b, - 0xf4, 0x9d, 0xda, 0x12, 0xa6, 0xe5, 0xe8, 0xe3, 0x30, 0xe4, 0x7b, 0x8d, 0x68, 0xd6, 0xce, 0x17, - 0x91, 0xd7, 0x3c, 0xed, 0xcd, 0x63, 0xcd, 0x6b, 0x44, 0x98, 0x55, 0x41, 0x9f, 0x85, 0x09, 0x99, - 0x14, 0x98, 0xf9, 0x02, 0x5e, 0xcc, 0xdf, 0xc0, 0x4b, 0x41, 0xab, 0x15, 0xf8, 0xcc, 0x0f, 0x50, - 0x5d, 0xf5, 0x77, 0xb5, 0xba, 0xd8, 0xa0, 0x34, 0xf7, 0x69, 0x38, 0xd1, 0xc5, 0x23, 0x1c, 0x2a, - 0x03, 0xc3, 0xbf, 0x1d, 0x85, 0x92, 0x7a, 0x6d, 0x41, 0x57, 0xcc, 0x47, 0xb4, 0x33, 0xe9, 0x47, - 0xb4, 0x31, 0x2a, 0xf4, 0xe9, 0xef, 0x66, 0xeb, 0x86, 0x05, 0x66, 0x21, 0x3f, 0xdf, 0xa1, 0x2e, - 0xb6, 0xf5, 0xf5, 0xfa, 0xd4, 0x94, 0x67, 0xc5, 0x81, 0x5f, 0xe3, 0x7a, 0xc6, 0xe7, 0xa2, 0x78, - 0xfc, 0x36, 0x4f, 0xeb, 0xed, 0xf8, 0x65, 0x8f, 0x05, 0x14, 0x5d, 0xa4, 0x92, 0xaf, 0x5b, 0xad, - 0xa5, 0x93, 0x6c, 0xd7, 0x68, 0x21, 0xe6, 0x30, 0xa6, 0x21, 0xa0, 0x0c, 0x2d, 0xd3, 0x10, 0x8c, - 0x3e, 0xa4, 0x86, 0x40, 0x12, 0xc0, 0x09, 0x2d, 0xd4, 0x84, 0x13, 0x0d, 0x33, 0x3f, 0xba, 0xf2, - 0xf4, 0xbc, 0xd8, 0x37, 0x53, 0x79, 0x47, 0xcb, 0x53, 0xb9, 0x94, 0xa6, 0x82, 0xbb, 0x09, 0xa3, - 0x57, 0x60, 0xec, 0xed, 0x20, 0x62, 0xdb, 0x5f, 0x70, 0x75, 0xd2, 0x23, 0x6e, 0xec, 0xf5, 0x5b, - 0x75, 0x56, 0x7e, 0xb0, 0x5f, 0x1e, 0xaf, 0x05, 0xae, 0xfc, 0x8b, 0x55, 0x05, 0x74, 0x1f, 0x4e, - 0x1b, 0x77, 0xa1, 0xea, 0x2e, 0x0c, 0xde, 0xdd, 0x73, 0xa2, 0xb9, 0xd3, 0xd5, 0x2c, 0x4a, 0x38, - 0xbb, 0x01, 0x7a, 0xc1, 0xf8, 0x01, 0x63, 0xfb, 0x89, 0x2b, 0x39, 0x47, 0xc6, 0x20, 0x96, 0xf4, - 0x78, 0x08, 0x29, 0x04, 0xdc, 0x5d, 0x07, 0xed, 0xc2, 0x29, 0xf3, 0x08, 0xe0, 0x4d, 0x08, 0x53, - 0xb2, 0xcb, 0xfd, 0x8f, 0x15, 0xf1, 0x19, 0xcc, 0xb8, 0x28, 0x0b, 0x82, 0x33, 0xe9, 0xd3, 0x7b, - 0xd7, 0xf7, 0x1a, 0x6a, 0xc0, 0x26, 0x7b, 0xc4, 0x2f, 0x93, 0x51, 0xf0, 0x92, 0x7b, 0x57, 0x15, - 0xd1, 0x7b, 0x57, 0x23, 0x63, 0xff, 0x22, 0x7f, 0x6a, 0x13, 0x2d, 0x93, 0xa8, 0xd3, 0x3c, 0x8e, - 0x1c, 0x7d, 0xcb, 0xc6, 0x5b, 0xc1, 0x43, 0x3f, 0xe7, 0xfe, 0xaa, 0xc5, 0x9e, 0x73, 0xd7, 0x49, - 0xab, 0xdd, 0x74, 0xe2, 0xe3, 0xf0, 0x17, 0x7b, 0x1d, 0xc6, 0x62, 0xd1, 0x5a, 0xaf, 0xb4, 0x82, - 0x5a, 0xa7, 0xd8, 0x93, 0xb6, 0xe2, 0x90, 0x65, 0x29, 0x56, 0x64, 0xec, 0x7f, 0xc6, 0x67, 0x40, - 0x42, 0x8e, 0x41, 0x6f, 0x5b, 0x31, 0xf5, 0xb6, 0xe5, 0x3e, 0x5f, 0x90, 0xa3, 0xbf, 0xfd, 0xa7, - 0x66, 0xbf, 0x99, 0x32, 0xe2, 0xfd, 0x6e, 0x47, 0x60, 0xff, 0xa0, 0x05, 0xa7, 0xb2, 0x0c, 0xef, - 0xa8, 0x54, 0xc3, 0x55, 0x21, 0xca, 0xae, 0x42, 0x8d, 0xe0, 0x1d, 0x51, 0x8e, 0x15, 0xc6, 0xc0, - 0x19, 0x7b, 0x0e, 0x17, 0xc1, 0xf2, 0x16, 0x4c, 0xd6, 0x42, 0xa2, 0xdd, 0x68, 0xaf, 0x72, 0x47, - 0x51, 0xde, 0x9f, 0x67, 0x0f, 0xed, 0x24, 0x6a, 0x7f, 0xad, 0x00, 0xa7, 0xf8, 0xc3, 0xe8, 0xc2, - 0x6e, 0xe0, 0xb9, 0xb5, 0xc0, 0x15, 0xd9, 0x96, 0xde, 0x80, 0x89, 0xb6, 0xa6, 0xbf, 0xea, 0x15, - 0x82, 0x4d, 0xd7, 0x73, 0x25, 0xcc, 0x85, 0x5e, 0x8a, 0x0d, 0x5a, 0xc8, 0x85, 0x09, 0xb2, 0xeb, - 0x35, 0xd4, 0xeb, 0x5a, 0xe1, 0xd0, 0x37, 0x9d, 0x6a, 0x65, 0x59, 0xa3, 0x83, 0x0d, 0xaa, 0x8f, - 0x20, 0x01, 0xa7, 0xfd, 0x43, 0x16, 0x3c, 0x9e, 0x13, 0xb0, 0x8d, 0x36, 0x77, 0x8f, 0x3d, 0x41, - 0x8b, 0x5c, 0x7e, 0xaa, 0x39, 0xfe, 0x30, 0x8d, 0x05, 0x14, 0x7d, 0x16, 0x80, 0x3f, 0x2c, 0x53, - 0xb1, 0xba, 0x5f, 0x64, 0x2b, 0x23, 0x28, 0x8f, 0x16, 0x4c, 0x45, 0xd6, 0xc7, 0x1a, 0x2d, 0xfb, - 0xc7, 0x8b, 0x30, 0xcc, 0x1e, 0x32, 0xd1, 0x0a, 0x8c, 0x6e, 0xf3, 0x18, 0xf4, 0x83, 0x84, 0xbb, - 0x4f, 0xf4, 0x13, 0xbc, 0x00, 0xcb, 0xca, 0x68, 0x15, 0x4e, 0xf2, 0x18, 0xfe, 0xcd, 0x0a, 0x69, - 0x3a, 0x7b, 0x52, 0xcd, 0xc5, 0xf3, 0xdf, 0xa9, 0xc0, 0x30, 0xd5, 0x6e, 0x14, 0x9c, 0x55, 0x0f, - 0xbd, 0x0a, 0x53, 0x54, 0x2e, 0x08, 0x3a, 0xb1, 0xa4, 0xc4, 0xa3, 0xf7, 0x2b, 0x41, 0x64, 0xdd, - 0x80, 0xe2, 0x14, 0x36, 0x15, 0xd8, 0xdb, 0x5d, 0x0a, 0xbd, 0xe1, 0x44, 0x60, 0x37, 0x95, 0x78, - 0x26, 0x2e, 0xb3, 0xb8, 0xeb, 0x30, 0xfb, 0xc2, 0xf5, 0xed, 0x90, 0x44, 0xdb, 0x41, 0xd3, 0x65, - 0x2c, 0xdb, 0xb0, 0x66, 0x71, 0x97, 0x82, 0xe3, 0xae, 0x1a, 0x94, 0xca, 0xa6, 0xe3, 0x35, 0x3b, - 0x21, 0x49, 0xa8, 0x8c, 0x98, 0x54, 0x56, 0x52, 0x70, 0xdc, 0x55, 0x83, 0xae, 0xa3, 0xd3, 0xb5, - 0x30, 0xa0, 0x87, 0x97, 0x0c, 0x57, 0xa1, 0xcc, 0x28, 0x47, 0xa5, 0x43, 0x5e, 0x8f, 0x78, 0x4d, - 0xc2, 0xd0, 0x8c, 0x53, 0x30, 0xde, 0x50, 0xeb, 0xc2, 0x15, 0x4f, 0x52, 0x79, 0x98, 0xac, 0xfa, - 0xdf, 0x5b, 0x80, 0x93, 0x19, 0xe6, 0xda, 0xfc, 0xa8, 0xda, 0xf2, 0xa2, 0x58, 0xe5, 0xf8, 0xd2, - 0x8e, 0x2a, 0x5e, 0x8e, 0x15, 0x06, 0xdd, 0x0f, 0xfc, 0x30, 0x4c, 0x1f, 0x80, 0xc2, 0x1c, 0x52, - 0x40, 0x0f, 0x99, 0x2d, 0xeb, 0x02, 0x0c, 0x75, 0x22, 0x22, 0x23, 0xad, 0xa9, 0xf3, 0x9b, 0x3d, - 0x84, 0x30, 0x08, 0x65, 0xb4, 0xb7, 0xd4, 0x1b, 0x84, 0xc6, 0x68, 0xf3, 0x87, 0x05, 0x0e, 0xd3, - 0x7c, 0xce, 0x47, 0x7a, 0xfa, 0x9c, 0x7f, 0xb5, 0x08, 0x67, 0x72, 0x1d, 0x38, 0x68, 0xd7, 0x5b, - 0x81, 0xef, 0xc5, 0x81, 0x7a, 0x4c, 0xe7, 0x31, 0x81, 0x48, 0x7b, 0x7b, 0x55, 0x94, 0x63, 0x85, - 0x81, 0x2e, 0xc1, 0x30, 0xd3, 0x94, 0x75, 0x65, 0x3b, 0x5b, 0xac, 0xf0, 0x00, 0x13, 0x1c, 0x3c, - 0x70, 0x26, 0xc9, 0x8b, 0x30, 0xd4, 0x0e, 0x82, 0x66, 0xfa, 0xd0, 0xa2, 0xdd, 0x0d, 0x82, 0x26, - 0x66, 0x40, 0xf4, 0x21, 0x31, 0x5e, 0xa9, 0xd7, 0x63, 0xec, 0xb8, 0x41, 0xa4, 0x0d, 0xda, 0xd3, - 0x30, 0xba, 0x43, 0xf6, 0x42, 0xcf, 0xdf, 0x4a, 0x5b, 0x15, 0xdc, 0xe0, 0xc5, 0x58, 0xc2, 0xcd, - 0xdc, 0x37, 0xa3, 0x47, 0x9d, 0x02, 0x72, 0xac, 0xef, 0x15, 0xf8, 0x7d, 0x45, 0x98, 0xc6, 0x8b, - 0x95, 0x6f, 0x4d, 0xc4, 0xed, 0xee, 0x89, 0x38, 0xea, 0x14, 0x90, 0xfd, 0x67, 0xe3, 0xe7, 0x2c, - 0x98, 0x66, 0xf1, 0xe1, 0x45, 0x24, 0x1a, 0x2f, 0xf0, 0x8f, 0x81, 0xc5, 0xbb, 0x08, 0xc3, 0x21, - 0x6d, 0x34, 0x9d, 0xe6, 0x8c, 0xf5, 0x04, 0x73, 0x18, 0x3a, 0x0b, 0x43, 0xac, 0x0b, 0x74, 0xf2, - 0x26, 0x78, 0x86, 0x98, 0x8a, 0x13, 0x3b, 0x98, 0x95, 0xda, 0x6b, 0x30, 0x81, 0xc9, 0x46, 0x10, - 0xc8, 0x6c, 0x74, 0xaf, 0xc2, 0x94, 0x4b, 0xef, 0xaa, 0xaa, 0x2f, 0x2f, 0x17, 0xcb, 0xbc, 0x9b, - 0x2a, 0x06, 0x14, 0xa7, 0xb0, 0x13, 0x7a, 0x35, 0x27, 0x74, 0x5a, 0xd1, 0xbb, 0xa6, 0xb7, 0x2e, - 0xe9, 0x09, 0xd9, 0xae, 0x02, 0x33, 0x21, 0xff, 0xcf, 0xaf, 0xa4, 0xcd, 0x4e, 0x53, 0x98, 0xaa, - 0xa8, 0x8b, 0x07, 0xa7, 0xe0, 0xb8, 0xab, 0x06, 0x0b, 0x16, 0x81, 0x49, 0xbb, 0xe9, 0xf1, 0xa9, - 0x4a, 0x1e, 0x0c, 0xdf, 0x1f, 0xc1, 0x22, 0x32, 0xbb, 0xf6, 0xee, 0x82, 0x45, 0x64, 0x93, 0xec, - 0x2d, 0x34, 0xfe, 0x41, 0x01, 0xce, 0x67, 0xd6, 0x1b, 0x38, 0x58, 0x44, 0xef, 0xda, 0x47, 0x63, - 0x12, 0x97, 0x6d, 0xa9, 0x56, 0x3c, 0x46, 0x4b, 0xb5, 0xa1, 0x41, 0xf9, 0xea, 0xe1, 0x01, 0x62, - 0x38, 0x64, 0x0e, 0xd9, 0xfb, 0x24, 0x86, 0x43, 0x66, 0xdf, 0x72, 0x84, 0xde, 0x3f, 0x2b, 0xe4, - 0x7c, 0x0b, 0x13, 0x7f, 0x2f, 0xd3, 0xd3, 0x95, 0x01, 0xe5, 0x81, 0x30, 0xc1, 0x4f, 0x56, 0x5e, - 0x86, 0x15, 0x14, 0x79, 0x5a, 0x34, 0x84, 0x42, 0x7e, 0xae, 0xe3, 0xdc, 0xa6, 0xe6, 0xcd, 0xf7, - 0x5d, 0x35, 0x04, 0x19, 0x91, 0x11, 0x56, 0x35, 0x95, 0x45, 0x71, 0x70, 0x95, 0xc5, 0x44, 0xb6, - 0xba, 0x02, 0x2d, 0xc0, 0x74, 0xcb, 0xf3, 0xe9, 0x65, 0xb1, 0x67, 0x32, 0xea, 0x2a, 0x88, 0xd0, - 0xaa, 0x09, 0xc6, 0x69, 0xfc, 0xb9, 0x57, 0x60, 0xf2, 0xe1, 0x55, 0xcf, 0xdf, 0x28, 0xc2, 0x13, - 0x3d, 0xb6, 0x3d, 0xbf, 0xe1, 0x8c, 0x39, 0xd0, 0x6e, 0xb8, 0xae, 0x79, 0xa8, 0xc1, 0xa9, 0xcd, - 0x4e, 0xb3, 0xb9, 0xc7, 0x8c, 0xc1, 0x89, 0x2b, 0x31, 0x04, 0x27, 0x2d, 0x73, 0x3d, 0x9c, 0x5a, - 0xc9, 0xc0, 0xc1, 0x99, 0x35, 0xd1, 0x6b, 0x80, 0x02, 0x91, 0x68, 0xfd, 0x1a, 0xf1, 0xc5, 0xab, - 0x19, 0x1b, 0xf8, 0x62, 0xb2, 0x19, 0x6f, 0x75, 0x61, 0xe0, 0x8c, 0x5a, 0x54, 0x24, 0xa2, 0x77, - 0xf1, 0x9e, 0xea, 0x56, 0x4a, 0x24, 0xc2, 0x3a, 0x10, 0x9b, 0xb8, 0xe8, 0x1a, 0x9c, 0x70, 0x76, - 0x1d, 0x8f, 0x07, 0xd7, 0x94, 0x04, 0xb8, 0x4c, 0xa4, 0x14, 0x9e, 0x0b, 0x69, 0x04, 0xdc, 0x5d, - 0x27, 0x15, 0x2f, 0x61, 0x24, 0x3f, 0x5e, 0x42, 0xef, 0x73, 0xb1, 0x9f, 0xfe, 0xde, 0xfe, 0xaf, - 0x16, 0xbd, 0xbe, 0xb8, 0x68, 0x63, 0x86, 0x07, 0x7b, 0x85, 0x99, 0x7b, 0x71, 0x85, 0xae, 0x16, - 0xba, 0xe0, 0xb4, 0x66, 0xee, 0x95, 0x00, 0xb1, 0x89, 0xcb, 0x17, 0x44, 0x94, 0x78, 0xcc, 0x19, - 0x82, 0x8d, 0x08, 0x7d, 0xa2, 0x30, 0xd0, 0xe7, 0x60, 0xd4, 0xf5, 0x76, 0xbd, 0x28, 0x08, 0xc5, - 0x66, 0x39, 0xa4, 0xdf, 0x51, 0x72, 0x0e, 0x56, 0x38, 0x19, 0x2c, 0xe9, 0xd9, 0xdf, 0x57, 0x80, - 0x49, 0xd9, 0xe2, 0xeb, 0x9d, 0x20, 0x76, 0x8e, 0xe1, 0x5a, 0xbe, 0x66, 0x5c, 0xcb, 0x1f, 0xea, - 0x15, 0xff, 0x85, 0x75, 0x29, 0xf7, 0x3a, 0xbe, 0x95, 0xba, 0x8e, 0x9f, 0xea, 0x4f, 0xaa, 0xf7, - 0x35, 0xfc, 0xcf, 0x2d, 0x38, 0x61, 0xe0, 0x1f, 0xc3, 0x6d, 0xb0, 0x62, 0xde, 0x06, 0x4f, 0xf6, - 0xfd, 0x86, 0x9c, 0x5b, 0xe0, 0xbb, 0x8b, 0xa9, 0xbe, 0xb3, 0xd3, 0xff, 0x6d, 0x18, 0xda, 0x76, - 0x42, 0xb7, 0x57, 0x3c, 0xea, 0xae, 0x4a, 0xf3, 0xd7, 0x9d, 0xd0, 0xe5, 0x67, 0xf8, 0xb3, 0x2a, - 0x5b, 0xb1, 0x13, 0xba, 0x7d, 0x1d, 0x44, 0x59, 0x53, 0xe8, 0x65, 0x18, 0x89, 0x1a, 0x41, 0x5b, - 0x99, 0x6f, 0x5f, 0xe0, 0x99, 0x8c, 0x69, 0xc9, 0xc1, 0x7e, 0x19, 0x99, 0xcd, 0xd1, 0x62, 0x2c, - 0xf0, 0xd1, 0x1b, 0x30, 0xc9, 0x7e, 0x29, 0xbb, 0xa2, 0x62, 0x7e, 0x4a, 0x98, 0xba, 0x8e, 0xc8, - 0xcd, 0xd3, 0x8c, 0x22, 0x6c, 0x92, 0x9a, 0xdb, 0x82, 0x92, 0xfa, 0xac, 0x47, 0xea, 0xd8, 0xf7, - 0x1f, 0x8b, 0x70, 0x32, 0x63, 0xcd, 0xa1, 0xc8, 0x98, 0x89, 0xe7, 0x07, 0x5c, 0xaa, 0xef, 0x72, - 0x2e, 0x22, 0x26, 0x03, 0xba, 0x62, 0x6d, 0x0d, 0xdc, 0xe8, 0xed, 0x88, 0xa4, 0x1b, 0xa5, 0x45, - 0xfd, 0x1b, 0xa5, 0x8d, 0x1d, 0xdb, 0x50, 0xd3, 0x86, 0x54, 0x4f, 0x1f, 0xe9, 0x9c, 0xfe, 0x51, - 0x11, 0x4e, 0x65, 0x85, 0xa4, 0x42, 0xdf, 0x9e, 0x4a, 0x69, 0xf6, 0xe2, 0xa0, 0xc1, 0xac, 0x78, - 0x9e, 0x33, 0xae, 0xf9, 0x5e, 0x9c, 0x37, 0x93, 0x9c, 0xf5, 0x1d, 0x66, 0xd1, 0x26, 0xf3, 0x06, - 0x0f, 0x79, 0x2a, 0x3a, 0x79, 0x7c, 0x7c, 0x74, 0xe0, 0x0e, 0x88, 0x1c, 0x76, 0x51, 0xca, 0x1b, - 0x5c, 0x16, 0xf7, 0xf7, 0x06, 0x97, 0x2d, 0xcf, 0x79, 0x30, 0xae, 0x7d, 0xcd, 0x23, 0x9d, 0xf1, - 0x1d, 0x7a, 0x5b, 0x69, 0xfd, 0x7e, 0xa4, 0xb3, 0xbe, 0xc4, 0xae, 0xc6, 0x38, 0x08, 0x89, 0x90, - 0xd8, 0xaf, 0x02, 0x44, 0xbe, 0xd3, 0x8e, 0xb6, 0x59, 0x68, 0xd8, 0x54, 0x44, 0xd0, 0xba, 0x82, - 0x60, 0x0d, 0x4b, 0x23, 0x22, 0xc4, 0xf4, 0x87, 0x21, 0xf2, 0x59, 0x45, 0x44, 0x1c, 0x26, 0xd7, - 0xe0, 0x44, 0x28, 0x0a, 0xd2, 0xc2, 0xb9, 0xe2, 0xa3, 0x70, 0x1a, 0x01, 0x77, 0xd7, 0xb1, 0x7f, - 0xc8, 0x82, 0x94, 0x3d, 0xb8, 0x52, 0x78, 0x5a, 0xb9, 0x0a, 0xcf, 0x0b, 0x30, 0x14, 0x06, 0x4d, - 0x92, 0xce, 0x92, 0x86, 0x83, 0x26, 0xc1, 0x0c, 0x42, 0x31, 0xe2, 0x44, 0x8d, 0x35, 0xa1, 0x0b, - 0xab, 0x42, 0x0c, 0xbd, 0x08, 0xc3, 0x4d, 0xb2, 0x4b, 0x9a, 0xe9, 0x0c, 0x16, 0x37, 0x69, 0x21, - 0xe6, 0x30, 0xfb, 0xe7, 0x86, 0xe0, 0x5c, 0xcf, 0x98, 0x11, 0x54, 0xe4, 0xdb, 0x72, 0x62, 0x72, - 0xcf, 0xd9, 0x4b, 0x87, 0x9a, 0xbf, 0xc6, 0x8b, 0xb1, 0x84, 0x33, 0x17, 0x19, 0x1e, 0x5a, 0x36, - 0xa5, 0x1e, 0x16, 0x11, 0x65, 0x05, 0xd4, 0x54, 0x37, 0x16, 0x8f, 0x42, 0xdd, 0x48, 0xa7, 0x3c, - 0x6a, 0xca, 0x44, 0x51, 0x43, 0xa6, 0xb7, 0x44, 0xbd, 0x7e, 0x53, 0xe6, 0x89, 0xd2, 0xb0, 0x50, - 0x05, 0x66, 0xda, 0x61, 0x10, 0x73, 0x6d, 0x7b, 0x85, 0x9b, 0x2a, 0x0e, 0x9b, 0xee, 0xfa, 0xb5, - 0x14, 0x1c, 0x77, 0xd5, 0x40, 0x2f, 0xc1, 0xb8, 0x70, 0xe1, 0xaf, 0x05, 0x41, 0x53, 0x28, 0xf8, - 0xd4, 0x03, 0x7c, 0x3d, 0x01, 0x61, 0x1d, 0x4f, 0xab, 0xc6, 0x54, 0xf8, 0xa3, 0x99, 0xd5, 0xb8, - 0x1a, 0x5f, 0xc3, 0x4b, 0x85, 0xe0, 0x1b, 0x1b, 0x28, 0x04, 0x5f, 0xa2, 0xf2, 0x2c, 0x0d, 0xfc, - 0x6a, 0x09, 0xfd, 0xf3, 0xee, 0x0d, 0xc1, 0x49, 0xb1, 0x70, 0x1e, 0xf5, 0x72, 0xb9, 0xdd, 0xbd, - 0x5c, 0x8e, 0x42, 0x29, 0xfa, 0xad, 0x35, 0x73, 0xdc, 0x6b, 0xe6, 0xfb, 0x2d, 0x30, 0x59, 0x48, - 0xf4, 0xff, 0xe5, 0xe6, 0xea, 0x78, 0x29, 0x97, 0x25, 0x75, 0xe5, 0x25, 0xf9, 0x2e, 0xb3, 0x76, - 0xd8, 0xff, 0xd9, 0x82, 0x27, 0xfb, 0x52, 0x44, 0xcb, 0x50, 0x62, 0x7c, 0xae, 0x26, 0x81, 0x3e, - 0xa5, 0x4c, 0x99, 0x25, 0x20, 0x87, 0xed, 0x4e, 0x6a, 0xa2, 0xe5, 0xae, 0xa4, 0x28, 0x4f, 0x67, - 0x24, 0x45, 0x39, 0x6d, 0x0c, 0xcf, 0x43, 0x66, 0x45, 0xf9, 0xc5, 0x22, 0x8c, 0xf0, 0x15, 0x7f, - 0x0c, 0xa2, 0xe6, 0x8a, 0xd0, 0xc8, 0xf7, 0x08, 0xc2, 0xc7, 0xfb, 0x32, 0x5f, 0x71, 0x62, 0x87, - 0xb3, 0x42, 0xea, 0xb6, 0x4a, 0x74, 0xf7, 0x68, 0xde, 0xb8, 0xcf, 0xe6, 0x52, 0xca, 0x57, 0xe0, - 0x34, 0xb4, 0xdb, 0xed, 0x8b, 0x00, 0x51, 0x1c, 0x7a, 0xfe, 0x16, 0xa5, 0x21, 0xc2, 0x39, 0x7e, - 0xb8, 0x47, 0xeb, 0x75, 0x85, 0xcc, 0xfb, 0x90, 0xec, 0x74, 0x05, 0xc0, 0x1a, 0xc5, 0xb9, 0x8f, - 0x41, 0x49, 0x21, 0xf7, 0xd3, 0x54, 0x4d, 0xe8, 0x0c, 0xd4, 0xa7, 0x60, 0x3a, 0xd5, 0xd6, 0xa1, - 0x14, 0x5d, 0x3f, 0x6f, 0xc1, 0x34, 0xef, 0xf2, 0xb2, 0xbf, 0x2b, 0xce, 0xd4, 0x77, 0xe0, 0x54, - 0x33, 0xe3, 0x6c, 0x13, 0x33, 0x3a, 0xf8, 0x59, 0xa8, 0x14, 0x5b, 0x59, 0x50, 0x9c, 0xd9, 0x06, - 0xba, 0x4c, 0xd7, 0x2d, 0x3d, 0xbb, 0x9c, 0xa6, 0x70, 0xb7, 0x9c, 0xe0, 0x6b, 0x96, 0x97, 0x61, - 0x05, 0xb5, 0xbf, 0x69, 0xc1, 0x09, 0xde, 0xf3, 0x1b, 0x64, 0x4f, 0xed, 0xf0, 0xf7, 0xb2, 0xef, - 0x22, 0x4f, 0x51, 0x21, 0x27, 0x4f, 0x91, 0xfe, 0x69, 0xc5, 0x9e, 0x9f, 0xf6, 0x35, 0x0b, 0xc4, - 0x0a, 0x3c, 0x06, 0x75, 0xc5, 0xa7, 0x4d, 0x75, 0xc5, 0x5c, 0xfe, 0xa2, 0xce, 0xd1, 0x53, 0xfc, - 0x89, 0x05, 0x33, 0x1c, 0x21, 0xb1, 0x26, 0x78, 0x4f, 0xe7, 0x61, 0x90, 0xec, 0xab, 0x37, 0xc8, - 0xde, 0x7a, 0x50, 0x73, 0xe2, 0xed, 0xec, 0x8f, 0x32, 0x26, 0x6b, 0xa8, 0xe7, 0x64, 0xb9, 0x72, - 0x03, 0x1d, 0x22, 0x5b, 0xf2, 0xa1, 0xe3, 0xfd, 0xdb, 0xbf, 0x6f, 0x01, 0xe2, 0xcd, 0x18, 0xec, - 0x0f, 0x65, 0x2a, 0x58, 0xa9, 0x76, 0x5d, 0x24, 0x47, 0x8d, 0x82, 0x60, 0x0d, 0xeb, 0x48, 0x86, - 0x27, 0x65, 0x12, 0x52, 0xec, 0x6f, 0x12, 0x72, 0x88, 0x11, 0xfd, 0xbd, 0x61, 0x48, 0x3b, 0x24, - 0xa1, 0x3b, 0x30, 0xd1, 0x70, 0xda, 0xce, 0x86, 0xd7, 0xf4, 0x62, 0x8f, 0x44, 0xbd, 0x6c, 0xc9, - 0x96, 0x34, 0x3c, 0xf1, 0x88, 0xaf, 0x95, 0x60, 0x83, 0x0e, 0x9a, 0x07, 0x68, 0x87, 0xde, 0xae, - 0xd7, 0x24, 0x5b, 0x4c, 0xab, 0xc2, 0x1c, 0xbc, 0xb9, 0x81, 0x94, 0x2c, 0xc5, 0x1a, 0x46, 0x86, - 0xaf, 0x6e, 0xf1, 0xd1, 0xf9, 0xea, 0x0e, 0x1d, 0xd2, 0x57, 0x77, 0x78, 0x20, 0x5f, 0x5d, 0x0c, - 0x8f, 0x49, 0x16, 0x89, 0xfe, 0x5f, 0xf1, 0x9a, 0x44, 0xf0, 0xc5, 0xdc, 0xed, 0x7b, 0xee, 0xc1, - 0x7e, 0xf9, 0x31, 0x9c, 0x89, 0x81, 0x73, 0x6a, 0xa2, 0xcf, 0xc2, 0xac, 0xd3, 0x6c, 0x06, 0xf7, - 0xd4, 0xa8, 0x2d, 0x47, 0x0d, 0xa7, 0xc9, 0x5f, 0x25, 0x46, 0x19, 0xd5, 0xb3, 0x0f, 0xf6, 0xcb, - 0xb3, 0x0b, 0x39, 0x38, 0x38, 0xb7, 0x76, 0xca, 0xd5, 0x77, 0xac, 0xaf, 0xab, 0xef, 0x27, 0xa1, - 0xd4, 0x0e, 0x83, 0xc6, 0xaa, 0xe6, 0x0f, 0x78, 0x9e, 0x0e, 0x60, 0x4d, 0x16, 0x1e, 0xec, 0x97, - 0x27, 0xd5, 0x1f, 0x76, 0xc3, 0x27, 0x15, 0x32, 0x3c, 0x7c, 0xe1, 0x51, 0x7a, 0xf8, 0xee, 0xc0, - 0xc9, 0x3a, 0x09, 0x3d, 0x96, 0xa0, 0xd9, 0x4d, 0xce, 0x8f, 0x75, 0x28, 0x85, 0xa9, 0x13, 0x73, - 0xa0, 0xc0, 0x75, 0x5a, 0x3c, 0x75, 0x79, 0x42, 0x26, 0x84, 0xec, 0xff, 0x63, 0xc1, 0xa8, 0x70, - 0x85, 0x39, 0x06, 0x46, 0x6d, 0xc1, 0x78, 0x13, 0x28, 0x67, 0xdf, 0x2a, 0xac, 0x33, 0xb9, 0xaf, - 0x01, 0xd5, 0xd4, 0x6b, 0xc0, 0x93, 0xbd, 0x88, 0xf4, 0x7e, 0x07, 0xf8, 0x3b, 0x45, 0x98, 0x32, - 0xbd, 0xd7, 0x8e, 0x61, 0x08, 0xd6, 0x60, 0x34, 0x12, 0xae, 0x92, 0x85, 0x7c, 0xc7, 0x83, 0xf4, - 0x24, 0x26, 0x76, 0x78, 0xc2, 0x39, 0x52, 0x12, 0xc9, 0xf4, 0xc1, 0x2c, 0x3e, 0x42, 0x1f, 0xcc, - 0x7e, 0x0e, 0x84, 0x43, 0x47, 0xe1, 0x40, 0x68, 0x7f, 0x9d, 0xdd, 0x6c, 0x7a, 0xf9, 0x31, 0x30, - 0x3d, 0xd7, 0xcc, 0x3b, 0xd0, 0xee, 0xb1, 0xb2, 0x44, 0xa7, 0x72, 0x98, 0x9f, 0x9f, 0xb5, 0xe0, - 0x5c, 0xc6, 0x57, 0x69, 0x9c, 0xd0, 0xb3, 0x30, 0xe6, 0x74, 0x5c, 0x4f, 0xed, 0x65, 0xed, 0x65, - 0x70, 0x41, 0x94, 0x63, 0x85, 0x81, 0x96, 0xe0, 0x04, 0xb9, 0xdf, 0xf6, 0xf8, 0xd3, 0xac, 0x6e, - 0x2c, 0x5b, 0xe4, 0xc1, 0xbc, 0x97, 0xd3, 0x40, 0xdc, 0x8d, 0xaf, 0xc2, 0x5d, 0x14, 0x73, 0xc3, - 0x5d, 0xfc, 0x23, 0x0b, 0xc6, 0x95, 0x5b, 0xdc, 0x23, 0x1f, 0xed, 0xcf, 0x98, 0xa3, 0xfd, 0x44, - 0x8f, 0xd1, 0xce, 0x19, 0xe6, 0xbf, 0x57, 0x50, 0xfd, 0xad, 0x05, 0x61, 0x3c, 0x00, 0x87, 0xf5, - 0x32, 0x8c, 0xb5, 0xc3, 0x20, 0x0e, 0x1a, 0x41, 0x53, 0x30, 0x58, 0x67, 0x93, 0x68, 0x2c, 0xbc, - 0xfc, 0x40, 0xfb, 0x8d, 0x15, 0x36, 0x1b, 0xbd, 0x20, 0x8c, 0x05, 0x53, 0x93, 0x8c, 0x5e, 0x10, - 0xc6, 0x98, 0x41, 0x90, 0x0b, 0x10, 0x3b, 0xe1, 0x16, 0x89, 0x69, 0x99, 0x08, 0xec, 0x94, 0x7f, - 0x78, 0x74, 0x62, 0xaf, 0x39, 0xef, 0xf9, 0x71, 0x14, 0x87, 0xf3, 0x55, 0x3f, 0xbe, 0x15, 0x72, - 0x79, 0x4d, 0x0b, 0xaf, 0xa2, 0x68, 0x61, 0x8d, 0xae, 0x74, 0x4a, 0x67, 0x6d, 0x0c, 0x9b, 0x36, - 0x06, 0x6b, 0xa2, 0x1c, 0x2b, 0x0c, 0xfb, 0x63, 0xec, 0x2a, 0x61, 0x03, 0x74, 0xb8, 0xc8, 0x27, - 0x7f, 0x32, 0xa6, 0x86, 0x96, 0x3d, 0x30, 0x56, 0xf4, 0xf8, 0x2a, 0xbd, 0x4f, 0x6e, 0xda, 0xb0, - 0xee, 0x86, 0x96, 0x04, 0x61, 0x41, 0x9f, 0xef, 0x32, 0x3d, 0x79, 0xae, 0xcf, 0x15, 0x70, 0x08, - 0x63, 0x13, 0x96, 0x60, 0x80, 0x85, 0x5f, 0xaf, 0xd6, 0xc4, 0x22, 0xd7, 0x12, 0x0c, 0x08, 0x00, - 0x4e, 0x70, 0xd0, 0x15, 0x21, 0xed, 0x0f, 0x19, 0xe9, 0x48, 0xa5, 0xb4, 0x2f, 0x3f, 0x5f, 0x13, - 0xf7, 0x9f, 0x87, 0x71, 0x95, 0x96, 0xb4, 0xc6, 0xb3, 0x3b, 0x8a, 0x30, 0x57, 0xcb, 0x49, 0x31, - 0xd6, 0x71, 0xd0, 0x3a, 0x4c, 0x47, 0x5c, 0xd5, 0xa3, 0xa2, 0x99, 0x72, 0x95, 0xd9, 0x87, 0xa5, - 0xc9, 0x4a, 0xdd, 0x04, 0x1f, 0xb0, 0x22, 0x7e, 0x74, 0x48, 0xcf, 0xf2, 0x34, 0x09, 0xf4, 0x2a, - 0x4c, 0x35, 0x03, 0xc7, 0x5d, 0x74, 0x9a, 0x8e, 0xdf, 0x60, 0xdf, 0x3b, 0x66, 0x66, 0x73, 0xbb, - 0x69, 0x40, 0x71, 0x0a, 0x9b, 0x32, 0x66, 0x7a, 0x89, 0x88, 0xc0, 0xeb, 0xf8, 0x5b, 0x24, 0x12, - 0x49, 0x15, 0x19, 0x63, 0x76, 0x33, 0x07, 0x07, 0xe7, 0xd6, 0x46, 0x2f, 0xc3, 0x84, 0xfc, 0x7c, - 0x2d, 0x6e, 0x42, 0xe2, 0x55, 0xa1, 0xc1, 0xb0, 0x81, 0x89, 0xee, 0xc1, 0x69, 0xf9, 0x7f, 0x3d, - 0x74, 0x36, 0x37, 0xbd, 0x86, 0xf0, 0xc3, 0xe5, 0x8e, 0x72, 0x0b, 0xd2, 0xf3, 0x6e, 0x39, 0x0b, - 0xe9, 0x60, 0xbf, 0x7c, 0x41, 0x8c, 0x5a, 0x26, 0x9c, 0x4d, 0x62, 0x36, 0x7d, 0xb4, 0x0a, 0x27, - 0xb7, 0x89, 0xd3, 0x8c, 0xb7, 0x97, 0xb6, 0x49, 0x63, 0x47, 0x6e, 0x22, 0xe6, 0x53, 0xa7, 0xf9, - 0x22, 0x5c, 0xef, 0x46, 0xc1, 0x59, 0xf5, 0xd0, 0x9b, 0x30, 0xdb, 0xee, 0x6c, 0x34, 0xbd, 0x68, - 0x7b, 0x2d, 0x88, 0x99, 0x95, 0x8c, 0xca, 0xea, 0x29, 0xc2, 0x36, 0xa8, 0x48, 0x14, 0xb5, 0x1c, - 0x3c, 0x9c, 0x4b, 0x01, 0xbd, 0x03, 0xa7, 0x53, 0x8b, 0x41, 0x38, 0x91, 0x4f, 0xe5, 0xc7, 0x33, - 0xaf, 0x67, 0x55, 0x10, 0x4e, 0xe1, 0x59, 0x20, 0x9c, 0xdd, 0x04, 0x3d, 0x7a, 0xa2, 0xce, 0x86, - 0x4f, 0xe2, 0x6a, 0x25, 0x1d, 0x7d, 0xa1, 0x2e, 0xca, 0xb1, 0xc2, 0x78, 0x77, 0x96, 0x56, 0x6f, - 0xd3, 0xca, 0x1a, 0x0b, 0x87, 0xbe, 0x04, 0x13, 0xfa, 0x9a, 0x13, 0xd7, 0xd1, 0xa5, 0x6c, 0x0e, - 0x47, 0x5b, 0x9b, 0x9c, 0x01, 0x54, 0xeb, 0x4f, 0x87, 0x61, 0x83, 0xa2, 0x4d, 0x20, 0x7b, 0x34, - 0xd0, 0x4d, 0x18, 0x6b, 0x34, 0x3d, 0xe2, 0xc7, 0xd5, 0x5a, 0xaf, 0x10, 0x4c, 0x4b, 0x02, 0x47, - 0x0c, 0xaf, 0x08, 0x17, 0xcd, 0xcb, 0xb0, 0xa2, 0x60, 0xbf, 0x06, 0x53, 0xf2, 0xf5, 0x4f, 0x3c, - 0x37, 0xbe, 0x0c, 0x13, 0xf2, 0x0d, 0x50, 0x93, 0xd7, 0x55, 0x97, 0xeb, 0x1a, 0x0c, 0x1b, 0x98, - 0x3a, 0x2d, 0xf1, 0xea, 0xf8, 0xf0, 0xb4, 0x2a, 0x09, 0x2d, 0x31, 0xe4, 0x0f, 0xf3, 0x82, 0xf9, - 0xcb, 0x05, 0x28, 0xf7, 0x89, 0xac, 0x9e, 0x7a, 0x0a, 0xb0, 0x06, 0x7a, 0x0a, 0x58, 0x90, 0xf9, - 0x5a, 0xd7, 0x52, 0xfa, 0x91, 0x54, 0x2e, 0xd6, 0x44, 0x4b, 0x92, 0xc6, 0x1f, 0xd8, 0xe8, 0x5e, - 0x7f, 0x4d, 0x18, 0xea, 0xeb, 0x36, 0x62, 0xbc, 0x22, 0x0e, 0x0f, 0x2e, 0x94, 0xe5, 0xbe, 0x08, - 0xd9, 0x5f, 0x2f, 0xc0, 0x69, 0x35, 0x84, 0x7f, 0x71, 0x07, 0xee, 0x76, 0xf7, 0xc0, 0x1d, 0xc1, - 0x7b, 0x9a, 0x7d, 0x0b, 0x46, 0x78, 0x80, 0xae, 0x01, 0x98, 0xc1, 0x8b, 0x66, 0x34, 0x47, 0xc5, - 0xb2, 0x18, 0x11, 0x1d, 0xff, 0x8a, 0x05, 0xd3, 0xeb, 0x4b, 0xb5, 0x7a, 0xd0, 0xd8, 0x21, 0x72, - 0xc7, 0x62, 0xc1, 0x0b, 0x5a, 0x0f, 0xc9, 0xe3, 0x65, 0x71, 0x8f, 0x17, 0x60, 0x68, 0x3b, 0x88, - 0xe2, 0xf4, 0x63, 0xfb, 0xf5, 0x20, 0x8a, 0x31, 0x83, 0xd8, 0xbf, 0x65, 0xc1, 0x30, 0xcb, 0x32, - 0xde, 0x2f, 0xf5, 0xfd, 0x20, 0xdf, 0x85, 0x5e, 0x82, 0x11, 0xb2, 0xb9, 0x49, 0x1a, 0xb1, 0x98, - 0x55, 0xe9, 0xd9, 0x3e, 0xb2, 0xcc, 0x4a, 0x29, 0x03, 0xc4, 0x1a, 0xe3, 0x7f, 0xb1, 0x40, 0x46, - 0x77, 0xa1, 0x14, 0x7b, 0x2d, 0xb2, 0xe0, 0xba, 0xe2, 0xb9, 0xf2, 0x21, 0x02, 0x09, 0xac, 0x4b, - 0x02, 0x38, 0xa1, 0x65, 0xff, 0xb1, 0x05, 0xc2, 0x47, 0xea, 0x18, 0x64, 0xf0, 0xcf, 0x18, 0x6a, - 0x88, 0xec, 0xb8, 0x34, 0xac, 0x2f, 0xb9, 0x5a, 0x88, 0xeb, 0x29, 0x2d, 0xc4, 0x85, 0x1e, 0x34, - 0x7a, 0x2b, 0x21, 0xbe, 0x66, 0x01, 0x70, 0xc4, 0xf7, 0x89, 0x5a, 0x9f, 0x77, 0x26, 0x47, 0xe4, - 0x5a, 0x95, 0x9d, 0x65, 0x52, 0xc1, 0xa7, 0x01, 0x36, 0x3d, 0x9f, 0x29, 0xaa, 0x94, 0x83, 0x54, - 0x99, 0x25, 0xa8, 0x51, 0xa5, 0x07, 0xfb, 0xe5, 0x49, 0xf5, 0x8f, 0x1f, 0x4f, 0x49, 0x15, 0x7b, - 0x11, 0x26, 0xf4, 0x41, 0x42, 0x57, 0xcd, 0x70, 0x1e, 0x67, 0xd3, 0xe1, 0x3c, 0xc6, 0x39, 0xb6, - 0x1e, 0xd1, 0xc3, 0xfe, 0x6a, 0x01, 0x20, 0x89, 0x18, 0xd4, 0x6f, 0x73, 0x2c, 0x76, 0x3d, 0x81, - 0x5e, 0xca, 0x78, 0x02, 0x45, 0x09, 0xc1, 0x8c, 0xf7, 0x4f, 0xb5, 0xc1, 0x8a, 0x03, 0x6d, 0xb0, - 0xa1, 0xc3, 0x6c, 0xb0, 0x25, 0x38, 0x91, 0x44, 0x3c, 0x32, 0xc3, 0xbf, 0x31, 0x51, 0x7f, 0x3d, - 0x0d, 0xc4, 0xdd, 0xf8, 0x36, 0x81, 0x0b, 0x32, 0xee, 0xb7, 0xe4, 0xc1, 0x98, 0xad, 0xb8, 0xfe, - 0xa4, 0xdc, 0x67, 0x9c, 0x92, 0x37, 0xde, 0x42, 0xee, 0x1b, 0xef, 0x8f, 0x5a, 0x70, 0x2a, 0xdd, - 0x0e, 0x73, 0x59, 0xfe, 0x8a, 0x05, 0xa7, 0xd9, 0x4b, 0x37, 0x6b, 0xb5, 0xfb, 0x5d, 0xfd, 0xc5, - 0xec, 0x48, 0x50, 0xbd, 0x7b, 0x9c, 0x04, 0xdf, 0x58, 0xcd, 0x22, 0x8d, 0xb3, 0x5b, 0xb4, 0xbf, - 0x62, 0xc1, 0x99, 0xdc, 0x74, 0x87, 0xe8, 0x32, 0x8c, 0x39, 0x6d, 0x8f, 0xab, 0x91, 0xc5, 0x4d, - 0xc1, 0x74, 0x30, 0xb5, 0x2a, 0x57, 0x22, 0x2b, 0xa8, 0x4a, 0xd7, 0x5c, 0xc8, 0x4d, 0xd7, 0xdc, - 0x37, 0xfb, 0xb2, 0xfd, 0xf5, 0x51, 0x48, 0xc5, 0xf4, 0x19, 0xec, 0x9a, 0xd2, 0xbd, 0x0a, 0x93, - 0x7d, 0xa9, 0xbb, 0x14, 0x1a, 0x19, 0x37, 0x8b, 0x47, 0x9a, 0x71, 0xf3, 0x73, 0x32, 0xeb, 0x3e, - 0x53, 0x86, 0xcb, 0xac, 0x85, 0xe5, 0x7c, 0xf7, 0x61, 0x86, 0x97, 0x30, 0x9d, 0x5a, 0x61, 0x84, - 0x0d, 0x52, 0xe8, 0x16, 0x4c, 0x2b, 0xfd, 0xa2, 0x91, 0x2c, 0xe5, 0x43, 0x92, 0x3b, 0xa9, 0x9a, - 0xe0, 0x83, 0xfd, 0x32, 0x24, 0xff, 0x70, 0xba, 0x36, 0x7a, 0x09, 0xc6, 0x77, 0xc8, 0x5e, 0xcd, - 0xf1, 0x42, 0x2d, 0xf1, 0x89, 0xb2, 0x4e, 0xb9, 0x91, 0x80, 0xb0, 0x8e, 0x87, 0xae, 0x40, 0x89, - 0x49, 0x5c, 0x8d, 0x1b, 0x64, 0x2f, 0x9d, 0x5a, 0xba, 0x26, 0x01, 0x38, 0xc1, 0xa1, 0xcb, 0xa6, - 0x13, 0x91, 0x90, 0x3d, 0xfb, 0x8f, 0x31, 0x37, 0x40, 0xb6, 0x6c, 0x6e, 0x8b, 0x32, 0xac, 0xa0, - 0xe8, 0x36, 0x3c, 0x1e, 0x87, 0x9d, 0x28, 0x26, 0x2e, 0xfb, 0x94, 0x25, 0x12, 0xc6, 0xde, 0xa6, - 0xd7, 0x70, 0x62, 0x22, 0x24, 0xed, 0x27, 0x1e, 0xec, 0x97, 0x1f, 0x5f, 0xcf, 0x46, 0xc1, 0x79, - 0x75, 0x99, 0xd3, 0xf9, 0x76, 0x27, 0x76, 0x83, 0x7b, 0xfe, 0x22, 0xd9, 0x76, 0x76, 0xbd, 0x20, - 0x14, 0xb2, 0x76, 0xe2, 0x74, 0x9e, 0x82, 0xe3, 0xae, 0x1a, 0x94, 0xa3, 0xdc, 0x08, 0x02, 0xc1, - 0x9e, 0x0b, 0x41, 0x5b, 0xdd, 0x9c, 0x8b, 0x0a, 0x82, 0x35, 0x2c, 0xf4, 0x2a, 0x94, 0xda, 0xc1, - 0x3d, 0xee, 0x0a, 0xc4, 0x84, 0xe4, 0x24, 0xb4, 0x62, 0xa9, 0x26, 0x01, 0xf4, 0x74, 0xbb, 0xd3, - 0x52, 0x7f, 0x71, 0x52, 0x05, 0x7d, 0x01, 0x26, 0xf9, 0x1a, 0xa8, 0x10, 0x2a, 0xdf, 0xc9, 0x68, - 0x32, 0x17, 0xf2, 0xd7, 0x13, 0x47, 0x4c, 0x5c, 0x2e, 0xf4, 0xd2, 0x08, 0x9b, 0xd4, 0x58, 0x0e, - 0xfd, 0x66, 0xd0, 0x71, 0xab, 0xbe, 0x17, 0xcb, 0xe9, 0xa8, 0x37, 0x42, 0xaf, 0xcd, 0x23, 0x20, - 0xea, 0x39, 0xf4, 0xb3, 0xd1, 0x70, 0x5e, 0x7d, 0xfb, 0x4f, 0x8b, 0x90, 0x19, 0x34, 0x67, 0x80, - 0x3d, 0x5c, 0x81, 0x19, 0x33, 0xb0, 0x4e, 0x55, 0x1e, 0x24, 0x6a, 0xba, 0xee, 0xa4, 0xe0, 0xb8, - 0xab, 0x06, 0x7a, 0x1a, 0x46, 0xd9, 0x82, 0xaf, 0xba, 0xe9, 0x28, 0x53, 0x55, 0x5e, 0x8c, 0x25, - 0x3c, 0x39, 0x34, 0x86, 0x7a, 0x1c, 0x1a, 0xf3, 0x30, 0x4c, 0x99, 0x10, 0x92, 0xb2, 0x1e, 0x1b, - 0xa6, 0x9f, 0x45, 0x6f, 0xdb, 0xd1, 0x3b, 0x2c, 0x03, 0x2a, 0xc1, 0x1c, 0x0d, 0x7d, 0x1e, 0x4e, - 0x31, 0xb7, 0xbd, 0x24, 0x86, 0x29, 0x03, 0x8b, 0x6d, 0xf6, 0x94, 0x7a, 0x94, 0xcf, 0xc0, 0xd1, - 0xa9, 0x65, 0x12, 0x41, 0x8b, 0x00, 0x7c, 0x91, 0x30, 0x92, 0x7c, 0x13, 0xda, 0x2a, 0x30, 0x85, - 0x82, 0x1c, 0xd0, 0x13, 0xa5, 0x95, 0xfc, 0xc7, 0x5a, 0x2d, 0xe6, 0xbe, 0x4b, 0x1c, 0x57, 0xfa, - 0x17, 0x27, 0xee, 0xbb, 0xcc, 0x3b, 0x89, 0xc3, 0xa8, 0x8c, 0x2c, 0xc2, 0xbb, 0x2e, 0xa9, 0xe7, - 0xc0, 0xe1, 0xe4, 0xb8, 0xc2, 0x1a, 0x0c, 0x1b, 0x98, 0xf6, 0xf7, 0x58, 0x20, 0x82, 0x0c, 0x0c, - 0x30, 0xe5, 0x6f, 0xc8, 0x63, 0xd3, 0xc8, 0x98, 0xd5, 0x63, 0x99, 0x8b, 0x3c, 0x59, 0xa9, 0x73, - 0x53, 0x68, 0xd7, 0x0c, 0x5a, 0xb6, 0x0b, 0x13, 0xfa, 0x26, 0x18, 0xa0, 0x37, 0x57, 0x01, 0x5c, - 0x86, 0xcb, 0xd2, 0x68, 0x16, 0xcc, 0x9d, 0x5e, 0x51, 0x10, 0xac, 0x61, 0xd9, 0xff, 0xbe, 0x00, - 0xe3, 0xda, 0xe1, 0x3d, 0x40, 0x2b, 0x87, 0x4a, 0xd9, 0x4a, 0x4f, 0x5d, 0xf6, 0xfe, 0x53, 0x4b, - 0x5e, 0x25, 0xd4, 0xa9, 0xbb, 0x2a, 0x01, 0x38, 0xc1, 0xa1, 0xeb, 0x3f, 0xea, 0x6c, 0x30, 0xf4, - 0x94, 0x4b, 0x7c, 0x9d, 0x17, 0x63, 0x09, 0x47, 0x9f, 0x85, 0x19, 0x5e, 0x2f, 0x0c, 0xda, 0xce, - 0x16, 0x7f, 0x72, 0x1e, 0x56, 0xb1, 0x6c, 0x66, 0x56, 0x53, 0xb0, 0x83, 0xfd, 0xf2, 0xa9, 0x74, - 0x19, 0x33, 0x56, 0xe8, 0xa2, 0xc2, 0x0c, 0x20, 0x79, 0x23, 0x94, 0xcb, 0xe8, 0xb2, 0x9b, 0x4c, - 0x40, 0x58, 0xc7, 0xb3, 0xbf, 0x04, 0xa8, 0x3b, 0x57, 0x15, 0x7a, 0x8d, 0x5b, 0xf6, 0x7b, 0x21, - 0x71, 0x7b, 0x19, 0x2f, 0xe8, 0x11, 0x5b, 0xa4, 0x5f, 0x27, 0xaf, 0x85, 0x55, 0x7d, 0xfb, 0xaf, - 0x17, 0x61, 0x26, 0x1d, 0xbf, 0x83, 0xc9, 0x29, 0x4c, 0x38, 0x16, 0xe4, 0x7b, 0xd8, 0xc6, 0x69, - 0x51, 0x3f, 0x18, 0xb3, 0x27, 0xe4, 0x6b, 0x51, 0x1f, 0xbd, 0x09, 0xe3, 0xf4, 0xee, 0xb8, 0xe7, - 0x84, 0xee, 0x42, 0xad, 0x2a, 0x96, 0x73, 0xa6, 0xbe, 0xb1, 0x92, 0xa0, 0xe9, 0x91, 0x44, 0x98, - 0x1d, 0x48, 0x02, 0xc2, 0x3a, 0x39, 0xb4, 0xce, 0xe2, 0xef, 0x6f, 0x7a, 0x5b, 0xab, 0x4e, 0xbb, - 0x97, 0x9b, 0xd7, 0x92, 0x44, 0xd2, 0x28, 0x4f, 0x8a, 0x20, 0xfd, 0x1c, 0x80, 0x13, 0x42, 0xe8, - 0xdb, 0xe1, 0x64, 0x94, 0xf3, 0x44, 0x99, 0x97, 0xba, 0xb0, 0xd7, 0xab, 0xdd, 0xe2, 0xe3, 0x0f, - 0xf6, 0xcb, 0x27, 0xb3, 0x1e, 0x33, 0xb3, 0x9a, 0xb1, 0x7f, 0xf5, 0x24, 0x18, 0x9b, 0xd8, 0xc8, - 0x64, 0x6b, 0x1d, 0x51, 0x26, 0x5b, 0x0c, 0x63, 0xa4, 0xd5, 0x8e, 0xf7, 0x2a, 0x5e, 0xd8, 0x2b, - 0xd3, 0xfa, 0xb2, 0xc0, 0xe9, 0xa6, 0x29, 0x21, 0x58, 0xd1, 0xc9, 0x4e, 0x37, 0x5c, 0x7c, 0x0f, - 0xd3, 0x0d, 0x0f, 0x1d, 0x63, 0xba, 0xe1, 0x35, 0x18, 0xdd, 0xf2, 0x62, 0x4c, 0xda, 0x81, 0x50, - 0x4b, 0x65, 0xae, 0xc3, 0x6b, 0x1c, 0xa5, 0x3b, 0xb1, 0xa5, 0x00, 0x60, 0x49, 0x04, 0xbd, 0xa6, - 0x76, 0xe0, 0x48, 0xbe, 0xce, 0xba, 0xdb, 0x88, 0x2b, 0x73, 0x0f, 0x8a, 0xa4, 0xc2, 0xa3, 0x0f, - 0x9b, 0x54, 0x78, 0x45, 0xa6, 0x02, 0x1e, 0xcb, 0xf7, 0xc9, 0x64, 0x99, 0x7e, 0xfb, 0x24, 0x00, - 0xbe, 0xa3, 0xa7, 0x4f, 0x2e, 0xe5, 0x9f, 0x04, 0x2a, 0x33, 0xf2, 0x80, 0x49, 0x93, 0xbf, 0xc7, - 0x82, 0xd3, 0xed, 0xac, 0x4c, 0xe2, 0xc2, 0xe0, 0xe6, 0xa5, 0x81, 0x53, 0xa5, 0x1b, 0x0d, 0xb2, - 0xa7, 0x8e, 0x4c, 0x34, 0x9c, 0xdd, 0x1c, 0x1d, 0xe8, 0x70, 0xc3, 0x15, 0x59, 0x7f, 0x2f, 0xe6, - 0x64, 0x5f, 0xee, 0x91, 0x73, 0x79, 0x3d, 0x23, 0xd3, 0xef, 0x07, 0xf3, 0x32, 0xfd, 0x0e, 0x9c, - 0xdf, 0xf7, 0x35, 0x95, 0x77, 0x79, 0x32, 0x7f, 0x29, 0xf1, 0xac, 0xca, 0x7d, 0xb3, 0x2d, 0xbf, - 0xa6, 0xb2, 0x2d, 0xf7, 0x08, 0x0c, 0xce, 0x73, 0x29, 0xf7, 0xcd, 0xb1, 0xac, 0xe5, 0x49, 0x9e, - 0x3e, 0x9a, 0x3c, 0xc9, 0xc6, 0x55, 0xc3, 0x53, 0xf5, 0x3e, 0xd3, 0xe7, 0xaa, 0x31, 0xe8, 0xf6, - 0xbe, 0x6c, 0x78, 0x4e, 0xe8, 0x13, 0x0f, 0x95, 0x13, 0xfa, 0x8e, 0x9e, 0x63, 0x19, 0xf5, 0x49, - 0x22, 0x4c, 0x91, 0x06, 0xcc, 0xac, 0x7c, 0x47, 0xbf, 0x00, 0x4f, 0xe6, 0xd3, 0x55, 0xf7, 0x5c, - 0x37, 0xdd, 0xcc, 0x2b, 0xb0, 0x2b, 0x63, 0xf3, 0xa9, 0xe3, 0xc9, 0xd8, 0x7c, 0xfa, 0xc8, 0x33, - 0x36, 0x3f, 0x76, 0x0c, 0x19, 0x9b, 0x1f, 0x7f, 0x4f, 0x33, 0x36, 0xcf, 0x3e, 0x82, 0x8c, 0xcd, - 0x6b, 0x49, 0xc6, 0xe6, 0x33, 0xf9, 0x53, 0x92, 0xe1, 0x44, 0x95, 0x93, 0xa7, 0xf9, 0x0e, 0xb3, - 0xa4, 0xe4, 0x01, 0xe6, 0x44, 0xe4, 0xf2, 0xcc, 0x29, 0xc9, 0x8c, 0x42, 0xc7, 0xa7, 0x44, 0x81, - 0x70, 0x42, 0x8a, 0xd2, 0x4d, 0xf2, 0x36, 0x3f, 0xd1, 0xe3, 0x31, 0x3b, 0xeb, 0x69, 0xac, 0x47, - 0xb6, 0xe6, 0x57, 0x79, 0xb6, 0xe6, 0xb3, 0xf9, 0x27, 0x79, 0xfa, 0xba, 0x33, 0x73, 0x34, 0x7f, - 0x6f, 0x01, 0xce, 0xf7, 0xde, 0x17, 0xc9, 0xbb, 0x5c, 0x2d, 0xb1, 0xa9, 0x49, 0xbd, 0xcb, 0x71, - 0xd9, 0x2a, 0xc1, 0x1a, 0x38, 0x8a, 0xe7, 0x35, 0x38, 0xa1, 0xbc, 0xaf, 0x9a, 0x5e, 0x63, 0x6f, - 0x2d, 0x51, 0x30, 0x2a, 0x0f, 0xd0, 0x7a, 0x1a, 0x01, 0x77, 0xd7, 0x41, 0x0b, 0x30, 0x6d, 0x14, - 0x56, 0x2b, 0x42, 0x86, 0x52, 0x0f, 0x81, 0x75, 0x13, 0x8c, 0xd3, 0xf8, 0xf6, 0x4f, 0x5a, 0xf0, - 0x78, 0x4e, 0x32, 0xc4, 0x81, 0x83, 0x54, 0x6e, 0xc2, 0x74, 0xdb, 0xac, 0xda, 0x27, 0x96, 0xad, - 0x91, 0x72, 0x51, 0xf5, 0x35, 0x05, 0xc0, 0x69, 0xa2, 0xf6, 0xd7, 0x2d, 0x38, 0xd7, 0xd3, 0x12, - 0x17, 0x61, 0x78, 0x6c, 0xab, 0x15, 0x39, 0x4b, 0x21, 0x71, 0x89, 0x1f, 0x7b, 0x4e, 0xb3, 0xde, - 0x26, 0x0d, 0xed, 0x65, 0x95, 0x19, 0x3c, 0x5f, 0x5b, 0xad, 0x2f, 0x74, 0x63, 0xe0, 0x9c, 0x9a, - 0x68, 0x05, 0x50, 0x37, 0x44, 0xcc, 0x30, 0x0b, 0x47, 0xdf, 0x4d, 0x0f, 0x67, 0xd4, 0x58, 0xbc, - 0xfc, 0xeb, 0xbf, 0x73, 0xfe, 0x03, 0xbf, 0xf9, 0x3b, 0xe7, 0x3f, 0xf0, 0xcd, 0xdf, 0x39, 0xff, - 0x81, 0xef, 0x7c, 0x70, 0xde, 0xfa, 0xf5, 0x07, 0xe7, 0xad, 0xdf, 0x7c, 0x70, 0xde, 0xfa, 0xe6, - 0x83, 0xf3, 0xd6, 0x6f, 0x3f, 0x38, 0x6f, 0x7d, 0xf5, 0x77, 0xcf, 0x7f, 0xe0, 0x8d, 0xc2, 0xee, - 0xf3, 0xff, 0x2f, 0x00, 0x00, 0xff, 0xff, 0xf8, 0xc4, 0xad, 0x2d, 0x28, 0x06, 0x01, 0x00, + // 14684 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x90, 0x1c, 0xc7, + 0x75, 0x98, 0x66, 0xf7, 0xbe, 0xf6, 0xdd, 0x27, 0x1a, 0x00, 0x79, 0x38, 0x02, 0x58, 0x70, 0x20, + 0x81, 0xa0, 0x48, 0x1e, 0x44, 0x90, 0x94, 0x28, 0x51, 0xa2, 0x74, 0x77, 0x7b, 0x07, 0x2c, 0x81, + 0x3b, 0x2c, 0x7b, 0x0f, 0x80, 0x44, 0x51, 0xb2, 0xe6, 0x76, 0xfa, 0xee, 0x46, 0xb7, 0x3b, 0xb3, + 0x9c, 0x99, 0x3d, 0xe0, 0x18, 0xbb, 0xe2, 0xc8, 0xb1, 0x63, 0xc5, 0x4e, 0x4a, 0x95, 0xb8, 0xf2, + 0x61, 0xbb, 0x9c, 0x2a, 0xc7, 0x29, 0xdb, 0x91, 0x93, 0x8a, 0x62, 0xc7, 0x76, 0x2c, 0x27, 0xf1, + 0x47, 0x5c, 0x71, 0xf2, 0xc3, 0x71, 0x52, 0x95, 0x92, 0x2a, 0xae, 0x5c, 0x6c, 0x38, 0x15, 0x97, + 0x7f, 0xc4, 0x4e, 0x95, 0x53, 0xae, 0xca, 0xc5, 0x65, 0xa7, 0xfa, 0x73, 0xba, 0x67, 0x67, 0x76, + 0xf7, 0xc0, 0xc3, 0x91, 0x76, 0xe9, 0xdf, 0x6e, 0xbf, 0xd7, 0xaf, 0x7b, 0xfa, 0xf3, 0xbd, 0xd7, + 0xef, 0x03, 0x5e, 0xd9, 0x79, 0x39, 0x9a, 0xf7, 0x82, 0x2b, 0x3b, 0x9d, 0x0d, 0x12, 0xfa, 0x24, + 0x26, 0xd1, 0x95, 0x5d, 0xe2, 0xbb, 0x41, 0x78, 0x45, 0x00, 0x9c, 0xb6, 0x77, 0xa5, 0x11, 0x84, + 0xe4, 0xca, 0xee, 0xf3, 0x57, 0xb6, 0x88, 0x4f, 0x42, 0x27, 0x26, 0xee, 0x7c, 0x3b, 0x0c, 0xe2, + 0x00, 0x21, 0x8e, 0x33, 0xef, 0xb4, 0xbd, 0x79, 0x8a, 0x33, 0xbf, 0xfb, 0xfc, 0xdc, 0x73, 0x5b, + 0x5e, 0xbc, 0xdd, 0xd9, 0x98, 0x6f, 0x04, 0xad, 0x2b, 0x5b, 0xc1, 0x56, 0x70, 0x85, 0xa1, 0x6e, + 0x74, 0x36, 0xd9, 0x3f, 0xf6, 0x87, 0xfd, 0xe2, 0x24, 0xe6, 0x5e, 0x4c, 0x9a, 0x69, 0x39, 0x8d, + 0x6d, 0xcf, 0x27, 0xe1, 0xde, 0x95, 0xf6, 0xce, 0x16, 0x6b, 0x37, 0x24, 0x51, 0xd0, 0x09, 0x1b, + 0x24, 0xdd, 0x70, 0xcf, 0x5a, 0xd1, 0x95, 0x16, 0x89, 0x9d, 0x8c, 0xee, 0xce, 0x5d, 0xc9, 0xab, + 0x15, 0x76, 0xfc, 0xd8, 0x6b, 0x75, 0x37, 0xf3, 0xe1, 0x7e, 0x15, 0xa2, 0xc6, 0x36, 0x69, 0x39, + 0x5d, 0xf5, 0x5e, 0xc8, 0xab, 0xd7, 0x89, 0xbd, 0xe6, 0x15, 0xcf, 0x8f, 0xa3, 0x38, 0x4c, 0x57, + 0xb2, 0xbf, 0x61, 0xc1, 0x85, 0x85, 0xbb, 0xf5, 0xe5, 0xa6, 0x13, 0xc5, 0x5e, 0x63, 0xb1, 0x19, + 0x34, 0x76, 0xea, 0x71, 0x10, 0x92, 0x3b, 0x41, 0xb3, 0xd3, 0x22, 0x75, 0x36, 0x10, 0xe8, 0x59, + 0x18, 0xdb, 0x65, 0xff, 0xab, 0x95, 0x59, 0xeb, 0x82, 0x75, 0xb9, 0xb4, 0x38, 0xf3, 0xeb, 0xfb, + 0xe5, 0xf7, 0x3d, 0xd8, 0x2f, 0x8f, 0xdd, 0x11, 0xe5, 0x58, 0x61, 0xa0, 0x4b, 0x30, 0xb2, 0x19, + 0xad, 0xef, 0xb5, 0xc9, 0x6c, 0x81, 0xe1, 0x4e, 0x09, 0xdc, 0x91, 0x95, 0x3a, 0x2d, 0xc5, 0x02, + 0x8a, 0xae, 0x40, 0xa9, 0xed, 0x84, 0xb1, 0x17, 0x7b, 0x81, 0x3f, 0x5b, 0xbc, 0x60, 0x5d, 0x1e, + 0x5e, 0x3c, 0x21, 0x50, 0x4b, 0x35, 0x09, 0xc0, 0x09, 0x0e, 0xed, 0x46, 0x48, 0x1c, 0xf7, 0x96, + 0xdf, 0xdc, 0x9b, 0x1d, 0xba, 0x60, 0x5d, 0x1e, 0x4b, 0xba, 0x81, 0x45, 0x39, 0x56, 0x18, 0xf6, + 0x1f, 0x5b, 0x30, 0xb2, 0xd0, 0x60, 0x15, 0xbf, 0x00, 0x63, 0x74, 0x76, 0x5c, 0x27, 0x76, 0x58, + 0xff, 0xc7, 0xaf, 0x7e, 0x68, 0x3e, 0x59, 0x44, 0x6a, 0xb0, 0xe6, 0xdb, 0x3b, 0x5b, 0xb4, 0x20, + 0x9a, 0xa7, 0xd8, 0xf3, 0xbb, 0xcf, 0xcf, 0xdf, 0xda, 0xf8, 0x22, 0x69, 0xc4, 0xab, 0x24, 0x76, + 0x16, 0x91, 0x68, 0x0a, 0x92, 0x32, 0xac, 0xa8, 0xa2, 0x4f, 0xc1, 0x50, 0xd4, 0x26, 0x0d, 0xf6, + 0xc5, 0xe3, 0x57, 0xcf, 0xcf, 0x77, 0x2f, 0xd1, 0x79, 0xde, 0x97, 0x7a, 0x9b, 0x34, 0x16, 0x27, + 0x04, 0xad, 0x21, 0xfa, 0x0f, 0xb3, 0x9a, 0xe8, 0x3a, 0x8c, 0x44, 0xb1, 0x13, 0x77, 0x22, 0x36, + 0x14, 0xe3, 0x57, 0x2f, 0xf4, 0xa0, 0xc1, 0xf0, 0x92, 0x71, 0xe5, 0xff, 0xb1, 0xa8, 0x6f, 0x7f, + 0xd5, 0x02, 0xe0, 0x88, 0x37, 0xbd, 0x28, 0x46, 0x6f, 0x76, 0x7d, 0xfc, 0xfc, 0x60, 0x1f, 0x4f, + 0x6b, 0xb3, 0x4f, 0x57, 0xa3, 0x2c, 0x4b, 0xb4, 0x0f, 0xff, 0x24, 0x0c, 0x7b, 0x31, 0x69, 0x45, + 0xb3, 0x85, 0x0b, 0xc5, 0xcb, 0xe3, 0x57, 0xe7, 0xf2, 0x7b, 0xbd, 0x38, 0x29, 0xc8, 0x0c, 0x57, + 0x69, 0x05, 0xcc, 0xeb, 0xd9, 0x3f, 0x52, 0x94, 0xbd, 0xa5, 0x83, 0x41, 0xe7, 0xd8, 0x0f, 0x5c, + 0xb2, 0xe6, 0xb4, 0x48, 0x7a, 0xa9, 0xad, 0x89, 0x72, 0xac, 0x30, 0xd0, 0xd3, 0x30, 0xda, 0x0e, + 0x5c, 0x86, 0xcc, 0xd7, 0xda, 0xb4, 0x40, 0x1e, 0xad, 0xf1, 0x62, 0x2c, 0xe1, 0xe8, 0x22, 0x0c, + 0xb7, 0x03, 0xb7, 0x5a, 0x61, 0xc3, 0x5b, 0x4a, 0x3a, 0x53, 0xa3, 0x85, 0x98, 0xc3, 0xd0, 0x1d, + 0x98, 0x08, 0xc9, 0x46, 0x10, 0xc4, 0xbc, 0x47, 0x6c, 0x95, 0xe5, 0x4c, 0x05, 0xd6, 0xf0, 0x16, + 0x67, 0x1e, 0xec, 0x97, 0x27, 0xf4, 0x12, 0x6c, 0xd0, 0x41, 0x9f, 0x87, 0xa9, 0xc8, 0x77, 0xda, + 0xd1, 0xb6, 0xa2, 0x3c, 0xcc, 0x28, 0xdb, 0x59, 0x94, 0xeb, 0x06, 0xe6, 0x22, 0x7a, 0xb0, 0x5f, + 0x9e, 0x32, 0xcb, 0x70, 0x8a, 0x1a, 0x7a, 0x03, 0x26, 0x43, 0x12, 0xd1, 0x7d, 0x2b, 0xc8, 0x8f, + 0x30, 0xf2, 0x4f, 0x66, 0x77, 0x5c, 0x43, 0x5c, 0x3c, 0xf1, 0x60, 0xbf, 0x3c, 0x69, 0x14, 0x61, + 0x93, 0x94, 0xfd, 0x6b, 0x45, 0x98, 0xd0, 0xd7, 0x1d, 0x9d, 0xa2, 0x46, 0xd0, 0x6a, 0x37, 0x49, + 0xcc, 0xa7, 0x48, 0xdb, 0x86, 0x4b, 0xa2, 0x1c, 0x2b, 0x0c, 0x3a, 0xee, 0x24, 0x0c, 0x83, 0x50, + 0x4c, 0x90, 0x1a, 0xf7, 0x65, 0x5a, 0x88, 0x39, 0x4c, 0x9f, 0xc7, 0xe2, 0xa0, 0xf3, 0x38, 0x34, + 0xc8, 0x3c, 0xf2, 0x2e, 0x8b, 0xd1, 0xee, 0x31, 0x8f, 0x62, 0x4b, 0x69, 0xf3, 0x28, 0x36, 0x95, + 0x41, 0x47, 0x9f, 0x47, 0x41, 0x79, 0xa4, 0xff, 0x3c, 0x0a, 0xda, 0xc6, 0x3c, 0x0a, 0xea, 0x29, + 0x6a, 0xda, 0x3c, 0x0a, 0xf2, 0xa3, 0x7d, 0xe7, 0x51, 0x50, 0xd7, 0xe7, 0x51, 0x10, 0x37, 0x49, + 0xd9, 0x3f, 0x58, 0x80, 0xb1, 0x85, 0xcd, 0x4d, 0xcf, 0xf7, 0xe2, 0x3d, 0x3a, 0x40, 0x74, 0x13, + 0xc9, 0xff, 0xe2, 0x60, 0xc8, 0x1c, 0xa0, 0x35, 0x0d, 0x8f, 0x0f, 0x90, 0x5e, 0x82, 0x0d, 0x3a, + 0x08, 0xc3, 0x78, 0x3b, 0x70, 0x15, 0x59, 0x7e, 0x1c, 0x96, 0xb3, 0xc8, 0xd6, 0x12, 0xb4, 0xc5, + 0xe9, 0x07, 0xfb, 0xe5, 0x71, 0xad, 0x00, 0xeb, 0x44, 0xd0, 0x06, 0x4c, 0xd3, 0xbf, 0x7e, 0xec, + 0x29, 0xba, 0xfc, 0x88, 0xbc, 0x98, 0x47, 0x57, 0x43, 0x5d, 0x3c, 0xf9, 0x60, 0xbf, 0x3c, 0x9d, + 0x2a, 0xc4, 0x69, 0x82, 0xf6, 0xdb, 0x30, 0xb5, 0x10, 0xc7, 0x4e, 0x63, 0x9b, 0xb8, 0xfc, 0x46, + 0x43, 0x2f, 0xc2, 0x90, 0x9f, 0x1c, 0x42, 0x17, 0xe4, 0x89, 0x4d, 0xd7, 0xe0, 0xc1, 0x7e, 0x79, + 0xe6, 0xb6, 0xef, 0xbd, 0xd5, 0x11, 0xb7, 0x24, 0x5b, 0xa0, 0x0c, 0x1b, 0x5d, 0x05, 0x70, 0xc9, + 0xae, 0xd7, 0x20, 0x35, 0x27, 0xde, 0x16, 0x4b, 0x5e, 0xdd, 0x1c, 0x15, 0x05, 0xc1, 0x1a, 0x96, + 0x7d, 0x1f, 0x4a, 0x0b, 0xbb, 0x81, 0xe7, 0xd6, 0x02, 0x37, 0x42, 0x3b, 0x30, 0xdd, 0x0e, 0xc9, + 0x26, 0x09, 0x55, 0xd1, 0xac, 0xc5, 0x4e, 0xd6, 0xcb, 0x99, 0x1f, 0x6b, 0xa2, 0x2e, 0xfb, 0x71, + 0xb8, 0xb7, 0xf8, 0xb8, 0x68, 0x6f, 0x3a, 0x05, 0xc5, 0x69, 0xca, 0xf6, 0xbf, 0x2d, 0xc0, 0xe9, + 0x85, 0xb7, 0x3b, 0x21, 0xa9, 0x78, 0xd1, 0x4e, 0xfa, 0xc6, 0x77, 0xbd, 0x68, 0x27, 0xeb, 0x18, + 0xae, 0x88, 0x72, 0xac, 0x30, 0xd0, 0x73, 0x30, 0x4a, 0x7f, 0xdf, 0xc6, 0x55, 0xf1, 0xc9, 0x27, + 0x05, 0xf2, 0x78, 0xc5, 0x89, 0x9d, 0x0a, 0x07, 0x61, 0x89, 0x83, 0x56, 0x61, 0xbc, 0xc1, 0xae, + 0x9d, 0xad, 0xd5, 0xc0, 0x95, 0x3b, 0xfe, 0x19, 0x8a, 0xbe, 0x94, 0x14, 0x1f, 0xec, 0x97, 0x67, + 0x79, 0xdf, 0x04, 0x09, 0x0d, 0x86, 0xf5, 0xfa, 0xc8, 0x56, 0xfc, 0x06, 0x3f, 0x12, 0x20, 0x83, + 0xd7, 0xb8, 0xac, 0xb1, 0x0e, 0xc3, 0xec, 0xcc, 0x9a, 0xc8, 0x66, 0x1b, 0xd0, 0xf3, 0x30, 0xb4, + 0xe3, 0xf9, 0x2e, 0xdb, 0xd8, 0xa5, 0xc5, 0x73, 0x74, 0xce, 0x6f, 0x78, 0xbe, 0x7b, 0xb0, 0x5f, + 0x3e, 0x61, 0x74, 0x87, 0x16, 0x62, 0x86, 0x6a, 0xff, 0x91, 0x05, 0x65, 0x06, 0x5b, 0xf1, 0x9a, + 0xa4, 0x46, 0xc2, 0xc8, 0x8b, 0x62, 0xe2, 0xc7, 0xc6, 0x80, 0x5e, 0x05, 0x88, 0x48, 0x23, 0x24, + 0xb1, 0x36, 0xa4, 0x6a, 0x61, 0xd4, 0x15, 0x04, 0x6b, 0x58, 0x94, 0x41, 0x8a, 0xb6, 0x9d, 0x90, + 0x68, 0xf7, 0x9b, 0x62, 0x90, 0xea, 0x12, 0x80, 0x13, 0x1c, 0x83, 0x41, 0x2a, 0xf6, 0x63, 0x90, + 0xd0, 0x27, 0x60, 0x3a, 0x69, 0x2c, 0x6a, 0x3b, 0x0d, 0x39, 0x80, 0x6c, 0xcb, 0xd4, 0x4d, 0x10, + 0x4e, 0xe3, 0xda, 0xff, 0xd8, 0x12, 0x8b, 0x87, 0x7e, 0xf5, 0x7b, 0xfc, 0x5b, 0xed, 0x9f, 0xb7, + 0x60, 0x74, 0xd1, 0xf3, 0x5d, 0xcf, 0xdf, 0x3a, 0x06, 0x6e, 0xf0, 0x06, 0x8c, 0xc4, 0x4e, 0xb8, + 0x45, 0x62, 0x71, 0x00, 0x66, 0x1e, 0x54, 0xbc, 0x26, 0xa6, 0x3b, 0x92, 0xf8, 0x0d, 0x92, 0xb0, + 0x73, 0xeb, 0xac, 0x2a, 0x16, 0x24, 0xec, 0xbf, 0x31, 0x0a, 0x67, 0x96, 0xea, 0xd5, 0x9c, 0x75, + 0x75, 0x09, 0x46, 0xdc, 0xd0, 0xdb, 0x25, 0xa1, 0x18, 0x67, 0x45, 0xa5, 0xc2, 0x4a, 0xb1, 0x80, + 0xa2, 0x97, 0x61, 0x82, 0x33, 0xe8, 0xd7, 0x1d, 0xdf, 0x6d, 0xca, 0x21, 0x3e, 0x25, 0xb0, 0x27, + 0xee, 0x68, 0x30, 0x6c, 0x60, 0x1e, 0x72, 0x51, 0x5d, 0x4a, 0x6d, 0xc6, 0x3c, 0xe6, 0xff, 0xcb, + 0x16, 0xcc, 0xf0, 0x66, 0x16, 0xe2, 0x38, 0xf4, 0x36, 0x3a, 0x31, 0xa1, 0xd7, 0x34, 0x3d, 0xe9, + 0x96, 0xb2, 0x46, 0x2b, 0x77, 0x04, 0xe6, 0xef, 0xa4, 0xa8, 0xf0, 0x43, 0x70, 0x56, 0xb4, 0x3b, + 0x93, 0x06, 0xe3, 0xae, 0x66, 0xd1, 0x77, 0x59, 0x30, 0xd7, 0x08, 0xfc, 0x38, 0x0c, 0x9a, 0x4d, + 0x12, 0xd6, 0x3a, 0x1b, 0x4d, 0x2f, 0xda, 0xe6, 0xeb, 0x14, 0x93, 0x4d, 0x71, 0xc5, 0x67, 0xce, + 0xa1, 0x42, 0x12, 0x73, 0x78, 0xfe, 0xc1, 0x7e, 0x79, 0x6e, 0x29, 0x97, 0x14, 0xee, 0xd1, 0x0c, + 0xda, 0x01, 0x44, 0xaf, 0xd2, 0x7a, 0xec, 0x6c, 0x91, 0xa4, 0xf1, 0xd1, 0xc1, 0x1b, 0x7f, 0xec, + 0xc1, 0x7e, 0x19, 0xad, 0x75, 0x91, 0xc0, 0x19, 0x64, 0xd1, 0x5b, 0x70, 0x8a, 0x96, 0x76, 0x7d, + 0xeb, 0xd8, 0xe0, 0xcd, 0xcd, 0x3e, 0xd8, 0x2f, 0x9f, 0x5a, 0xcb, 0x20, 0x82, 0x33, 0x49, 0xa3, + 0xef, 0xb4, 0xe0, 0x4c, 0xf2, 0xf9, 0xcb, 0xf7, 0xdb, 0x8e, 0xef, 0x26, 0x0d, 0x97, 0x06, 0x6f, + 0x98, 0x9e, 0xc9, 0x67, 0x96, 0xf2, 0x28, 0xe1, 0xfc, 0x46, 0xe6, 0x96, 0xe0, 0x74, 0xe6, 0x6a, + 0x41, 0x33, 0x50, 0xdc, 0x21, 0x9c, 0x0b, 0x2a, 0x61, 0xfa, 0x13, 0x9d, 0x82, 0xe1, 0x5d, 0xa7, + 0xd9, 0x11, 0x1b, 0x05, 0xf3, 0x3f, 0x1f, 0x2b, 0xbc, 0x6c, 0x51, 0x7e, 0x78, 0x7a, 0xa9, 0x5e, + 0x7d, 0xa8, 0x5d, 0xa8, 0x5f, 0x43, 0x85, 0x9e, 0xd7, 0x50, 0x72, 0xa9, 0x15, 0x73, 0x2f, 0xb5, + 0xbf, 0x9c, 0xb1, 0x85, 0x86, 0xd8, 0x16, 0xfa, 0x68, 0xce, 0x16, 0x3a, 0xe2, 0x8d, 0xb3, 0x9b, + 0xb3, 0x8a, 0x38, 0xbb, 0x9d, 0xc9, 0xb1, 0xdc, 0x0c, 0x1a, 0x4e, 0x33, 0x7d, 0xf4, 0x1d, 0x72, + 0x29, 0x1d, 0xcd, 0x3c, 0x36, 0x60, 0x62, 0xc9, 0x69, 0x3b, 0x1b, 0x5e, 0xd3, 0x8b, 0x3d, 0x12, + 0xa1, 0xa7, 0xa0, 0xe8, 0xb8, 0x2e, 0xe3, 0xb6, 0x4a, 0x8b, 0xa7, 0x1f, 0xec, 0x97, 0x8b, 0x0b, + 0x2e, 0xbd, 0xf6, 0x41, 0x61, 0xed, 0x61, 0x8a, 0x81, 0x3e, 0x08, 0x43, 0x6e, 0x18, 0xb4, 0x99, + 0xc4, 0x5b, 0x62, 0xbb, 0x6e, 0xa8, 0x12, 0x06, 0xed, 0x14, 0x2a, 0xc3, 0xb1, 0x7f, 0xa9, 0x00, + 0x67, 0x97, 0x48, 0x7b, 0x7b, 0xa5, 0x9e, 0x73, 0x7e, 0x5f, 0x86, 0xb1, 0x56, 0xe0, 0x7b, 0x71, + 0x10, 0x46, 0xa2, 0x69, 0xb6, 0x22, 0x56, 0x45, 0x19, 0x56, 0x50, 0x74, 0x01, 0x86, 0xda, 0x09, + 0x53, 0xa9, 0x54, 0x08, 0x8c, 0x9d, 0x64, 0x10, 0x8a, 0xd1, 0x89, 0x48, 0x28, 0x56, 0x8c, 0xc2, + 0xb8, 0x1d, 0x91, 0x10, 0x33, 0x48, 0x72, 0x33, 0xd3, 0x3b, 0x5b, 0x9c, 0xd0, 0xa9, 0x9b, 0x99, + 0x42, 0xb0, 0x86, 0x85, 0x6a, 0x50, 0x8a, 0x52, 0x33, 0x3b, 0xd0, 0x36, 0x9d, 0x64, 0x57, 0xb7, + 0x9a, 0xc9, 0x84, 0x88, 0x71, 0xa3, 0x8c, 0xf4, 0xbd, 0xba, 0xbf, 0x5e, 0x00, 0xc4, 0x87, 0xf0, + 0xcf, 0xd9, 0xc0, 0xdd, 0xee, 0x1e, 0xb8, 0xc1, 0xb7, 0xc4, 0x51, 0x8d, 0xde, 0xff, 0xb1, 0xe0, + 0xec, 0x92, 0xe7, 0xbb, 0x24, 0xcc, 0x59, 0x80, 0x8f, 0x46, 0xb7, 0x77, 0x38, 0xa6, 0xc1, 0x58, + 0x62, 0x43, 0x47, 0xb0, 0xc4, 0xec, 0x3f, 0xb4, 0x00, 0xf1, 0xcf, 0x7e, 0xcf, 0x7d, 0xec, 0xed, + 0xee, 0x8f, 0x3d, 0x82, 0x65, 0x61, 0xdf, 0x84, 0xa9, 0xa5, 0xa6, 0x47, 0xfc, 0xb8, 0x5a, 0x5b, + 0x0a, 0xfc, 0x4d, 0x6f, 0x0b, 0x7d, 0x0c, 0xa6, 0x62, 0xaf, 0x45, 0x82, 0x4e, 0x5c, 0x27, 0x8d, + 0xc0, 0x67, 0x92, 0xa4, 0x75, 0x79, 0x98, 0x2b, 0x22, 0xd6, 0x0d, 0x08, 0x4e, 0x61, 0xda, 0xff, + 0xb5, 0x00, 0xb0, 0x14, 0xb4, 0x5a, 0x81, 0x5f, 0xf5, 0x37, 0x03, 0xba, 0x41, 0x34, 0x61, 0x78, + 0x42, 0x17, 0x86, 0x85, 0xe0, 0x7b, 0x11, 0x86, 0xbd, 0x96, 0xb3, 0x45, 0xd2, 0x6a, 0x9e, 0x2a, + 0x2d, 0xc4, 0x1c, 0x86, 0x3e, 0x03, 0x25, 0xa9, 0x5c, 0x97, 0x6a, 0xce, 0xcb, 0x39, 0xaa, 0x0d, + 0x86, 0x84, 0xc9, 0x5b, 0x1d, 0x2f, 0x24, 0x2d, 0xe2, 0xc7, 0x51, 0x22, 0x0e, 0x48, 0x68, 0x84, + 0x13, 0x6a, 0xe8, 0x33, 0x92, 0xbf, 0x5d, 0x0d, 0x3a, 0x7e, 0x2c, 0xef, 0xc1, 0x4c, 0xcd, 0xc3, + 0x9d, 0x04, 0x2f, 0xcd, 0x00, 0xf3, 0xca, 0xd8, 0x20, 0x85, 0x6e, 0xc1, 0x34, 0xeb, 0x7e, 0xad, + 0xd3, 0x6c, 0xd6, 0x82, 0xa6, 0xd7, 0xe0, 0x22, 0x64, 0x69, 0xf1, 0x03, 0x52, 0xd0, 0xae, 0x9a, + 0x60, 0x7a, 0x13, 0x24, 0xff, 0x70, 0xba, 0xb6, 0xfd, 0x5b, 0x74, 0x71, 0x06, 0xad, 0x76, 0xe0, + 0x13, 0x3f, 0x5e, 0x0a, 0x7c, 0x97, 0xab, 0xb7, 0x3f, 0x06, 0x43, 0x31, 0x5d, 0x6c, 0x7c, 0x90, + 0x2f, 0xc9, 0x41, 0xa6, 0x4b, 0xec, 0x60, 0xbf, 0xfc, 0x58, 0x77, 0x0d, 0xb6, 0x08, 0x59, 0x1d, + 0xf4, 0x51, 0xa5, 0x3d, 0xe6, 0xe3, 0xff, 0xa4, 0xa9, 0x1b, 0x3e, 0xd8, 0x2f, 0x4f, 0xab, 0x6a, + 0xa6, 0xba, 0x18, 0x3d, 0x0d, 0xa3, 0x2d, 0x12, 0x45, 0x74, 0xee, 0x52, 0xba, 0xb7, 0x55, 0x5e, + 0x8c, 0x25, 0x3c, 0xd1, 0xe5, 0x0d, 0xe5, 0xeb, 0xf2, 0xec, 0xff, 0x68, 0xc1, 0xb4, 0xea, 0xab, + 0xd0, 0x6b, 0x3d, 0x7a, 0x91, 0xeb, 0x0d, 0x80, 0x86, 0xfc, 0x40, 0xa9, 0x8c, 0xbe, 0x94, 0xc9, + 0x05, 0x75, 0x0d, 0x63, 0x42, 0x59, 0x15, 0x45, 0x58, 0xa3, 0x66, 0xff, 0x2b, 0x0b, 0x4e, 0xa6, + 0xbe, 0xe8, 0x18, 0x34, 0xeb, 0xd7, 0x4d, 0xcd, 0xfa, 0xc5, 0x9e, 0x1f, 0x23, 0xb4, 0x80, 0xd9, + 0x2a, 0xf6, 0xbf, 0x5d, 0x84, 0x12, 0x3f, 0x13, 0x56, 0x9d, 0xf6, 0x31, 0xcc, 0x45, 0x15, 0x86, + 0x18, 0x75, 0xde, 0xf1, 0xa7, 0xb2, 0x3b, 0x2e, 0xba, 0x33, 0x5f, 0x71, 0x62, 0x87, 0x73, 0x9e, + 0xea, 0x58, 0xa1, 0x45, 0x98, 0x91, 0x40, 0x0e, 0xc0, 0x86, 0xe7, 0x3b, 0xe1, 0x1e, 0x2d, 0x9b, + 0x2d, 0x32, 0x82, 0xcf, 0xf5, 0x26, 0xb8, 0xa8, 0xf0, 0x39, 0x59, 0xd5, 0xd7, 0x04, 0x80, 0x35, + 0xa2, 0x73, 0x1f, 0x81, 0x92, 0x42, 0x3e, 0x0c, 0x03, 0x39, 0xf7, 0x09, 0x98, 0x4e, 0xb5, 0xd5, + 0xaf, 0xfa, 0x84, 0xce, 0x7f, 0xfe, 0x02, 0x3b, 0x05, 0x44, 0xaf, 0x97, 0xfd, 0x5d, 0x71, 0x45, + 0xbd, 0x0d, 0xa7, 0x9a, 0x19, 0x27, 0xbf, 0x98, 0xaa, 0xc1, 0x6f, 0x8a, 0xb3, 0xe2, 0xb3, 0x4f, + 0x65, 0x41, 0x71, 0x66, 0x1b, 0x94, 0xa7, 0x0a, 0xda, 0x74, 0xcd, 0x3b, 0x4d, 0x5d, 0x3c, 0xb9, + 0x25, 0xca, 0xb0, 0x82, 0xd2, 0x23, 0xec, 0x94, 0xea, 0xfc, 0x0d, 0xb2, 0x57, 0x27, 0x4d, 0xd2, + 0x88, 0x83, 0xf0, 0x5d, 0xed, 0xfe, 0x39, 0x3e, 0xfa, 0xfc, 0x04, 0x1c, 0x17, 0x04, 0x8a, 0x37, + 0xc8, 0x1e, 0x9f, 0x0a, 0xfd, 0xeb, 0x8a, 0x3d, 0xbf, 0xee, 0x6b, 0x16, 0x4c, 0xaa, 0xaf, 0x3b, + 0x86, 0xad, 0xbe, 0x68, 0x6e, 0xf5, 0x73, 0x3d, 0x17, 0x78, 0xce, 0x26, 0xff, 0x7a, 0x01, 0xce, + 0x28, 0x1c, 0x2a, 0x4b, 0xf1, 0x3f, 0x62, 0x55, 0x5d, 0x81, 0x92, 0xaf, 0xb4, 0x7c, 0x96, 0xa9, + 0x5e, 0x4b, 0x74, 0x7c, 0x09, 0x8e, 0xba, 0xf1, 0x0b, 0xb9, 0x37, 0xfe, 0x22, 0x14, 0x3b, 0x9e, + 0x2b, 0xee, 0x8c, 0x0f, 0xc9, 0xd1, 0xbe, 0x5d, 0xad, 0x1c, 0xec, 0x97, 0x9f, 0xcc, 0x7b, 0x8a, + 0xa6, 0x97, 0x55, 0x34, 0x7f, 0xbb, 0x5a, 0xc1, 0xb4, 0x32, 0x5a, 0x80, 0x69, 0x79, 0x85, 0xdf, + 0xa1, 0xec, 0xa9, 0x78, 0x72, 0x2b, 0x25, 0x3a, 0x6c, 0x6c, 0x82, 0x71, 0x1a, 0x1f, 0x55, 0x60, + 0x66, 0xa7, 0xb3, 0x41, 0x9a, 0x24, 0xe6, 0x1f, 0x7c, 0x83, 0xc8, 0xeb, 0x59, 0x49, 0xb2, 0x37, + 0x52, 0x70, 0xdc, 0x55, 0xc3, 0xfe, 0x33, 0x76, 0xc4, 0x8b, 0xd1, 0xab, 0x85, 0x01, 0x5d, 0x58, + 0x94, 0xfa, 0xbb, 0xb9, 0x9c, 0x07, 0x59, 0x15, 0x37, 0xc8, 0xde, 0x7a, 0x40, 0x25, 0x99, 0xec, + 0x55, 0x61, 0xac, 0xf9, 0xa1, 0x9e, 0x6b, 0xfe, 0x67, 0x0a, 0x70, 0x5a, 0x8d, 0x80, 0xc1, 0x34, + 0xff, 0x79, 0x1f, 0x83, 0xe7, 0x61, 0xdc, 0x25, 0x9b, 0x4e, 0xa7, 0x19, 0xab, 0xe7, 0x86, 0x61, + 0xfe, 0xe4, 0x54, 0x49, 0x8a, 0xb1, 0x8e, 0x73, 0x88, 0x61, 0xfb, 0xb1, 0x71, 0x76, 0xb7, 0xc6, + 0x0e, 0x5d, 0xe3, 0x47, 0xc5, 0x27, 0x7f, 0x00, 0x46, 0x1b, 0x41, 0xab, 0xe5, 0xf8, 0x2e, 0xbb, + 0xf2, 0x4a, 0x8b, 0xe3, 0x94, 0x1d, 0x5b, 0xe2, 0x45, 0x58, 0xc2, 0xd0, 0x59, 0x18, 0x72, 0xc2, + 0x2d, 0xce, 0xeb, 0x96, 0x16, 0xc7, 0x68, 0x4b, 0x0b, 0xe1, 0x56, 0x84, 0x59, 0x29, 0x15, 0x59, + 0xef, 0x05, 0xe1, 0x8e, 0xe7, 0x6f, 0x55, 0xbc, 0x50, 0x6c, 0x09, 0x75, 0x17, 0xde, 0x55, 0x10, + 0xac, 0x61, 0xa1, 0x15, 0x18, 0x6e, 0x07, 0x61, 0x1c, 0xcd, 0x8e, 0xb0, 0xe1, 0x7e, 0x32, 0xe7, + 0x20, 0xe2, 0x5f, 0x5b, 0x0b, 0xc2, 0x58, 0x7f, 0x7f, 0x0d, 0xe3, 0x08, 0xf3, 0xea, 0xe8, 0xa3, + 0x50, 0x24, 0xfe, 0xee, 0xec, 0x68, 0xbe, 0x4d, 0xc0, 0xb2, 0xbf, 0x7b, 0xc7, 0x09, 0x93, 0x53, + 0x7a, 0xd9, 0xdf, 0xc5, 0xb4, 0x8e, 0x29, 0x23, 0x8c, 0x3d, 0x52, 0x19, 0xa1, 0x74, 0x74, 0x32, + 0x02, 0x86, 0xc9, 0xa6, 0xb7, 0x4b, 0x7c, 0x12, 0x45, 0xb5, 0x30, 0xd8, 0x20, 0xb3, 0xc0, 0x7a, + 0x7e, 0x26, 0xfb, 0xd1, 0x2e, 0xd8, 0x20, 0xfc, 0xc1, 0xf6, 0xa6, 0x5e, 0x07, 0x9b, 0x24, 0xd0, + 0x6d, 0x98, 0xa2, 0x42, 0xa3, 0x97, 0x10, 0x1d, 0xef, 0x47, 0x94, 0x89, 0x76, 0xd8, 0xa8, 0x84, + 0x53, 0x44, 0xd0, 0x6b, 0x50, 0x6a, 0x7a, 0x9b, 0xa4, 0xb1, 0xd7, 0x68, 0x92, 0xd9, 0x09, 0x46, + 0x31, 0x73, 0x5b, 0xdd, 0x94, 0x48, 0x5c, 0xe8, 0x54, 0x7f, 0x71, 0x52, 0x1d, 0xdd, 0x81, 0xc7, + 0x62, 0x12, 0xb6, 0x3c, 0xdf, 0xa1, 0xdb, 0x41, 0xc8, 0x0b, 0xec, 0xe9, 0x73, 0x92, 0xad, 0xb7, + 0xf3, 0x62, 0xe8, 0x1e, 0x5b, 0xcf, 0xc4, 0xc2, 0x39, 0xb5, 0xb3, 0x44, 0xae, 0xa9, 0x77, 0x22, + 0x72, 0xa1, 0x0d, 0xf6, 0xd6, 0xd5, 0x09, 0xbd, 0x78, 0x8f, 0xae, 0x5f, 0x72, 0x3f, 0x9e, 0x9d, + 0xee, 0xa9, 0x67, 0xd0, 0x51, 0xd5, 0x83, 0x98, 0x5e, 0x88, 0xd3, 0x04, 0xe9, 0xd6, 0x8e, 0x62, + 0xd7, 0xf3, 0x67, 0x67, 0xd8, 0x89, 0xa1, 0x76, 0x46, 0x9d, 0x16, 0x62, 0x0e, 0x63, 0xef, 0x5c, + 0xf4, 0xc7, 0x2d, 0x7a, 0x82, 0x9e, 0x60, 0x88, 0xc9, 0x3b, 0x97, 0x04, 0xe0, 0x04, 0x87, 0x32, + 0x35, 0x71, 0xbc, 0x37, 0x8b, 0x18, 0xaa, 0xda, 0x2e, 0xeb, 0xeb, 0x9f, 0xc1, 0xb4, 0x1c, 0xdd, + 0x84, 0x51, 0xe2, 0xef, 0xae, 0x84, 0x41, 0x6b, 0xf6, 0x64, 0xfe, 0x9e, 0x5d, 0xe6, 0x28, 0xfc, + 0x40, 0x4f, 0x04, 0x3c, 0x51, 0x8c, 0x25, 0x09, 0x74, 0x1f, 0x66, 0x33, 0x66, 0x84, 0x4f, 0xc0, + 0x29, 0x36, 0x01, 0x1f, 0x17, 0x75, 0x67, 0xd7, 0x73, 0xf0, 0x0e, 0x7a, 0xc0, 0x70, 0x2e, 0x75, + 0xf4, 0x39, 0x98, 0xe4, 0x1b, 0x8a, 0x3f, 0x92, 0x47, 0xb3, 0xa7, 0xd9, 0xd7, 0x5c, 0xc8, 0xdf, + 0x9c, 0x1c, 0x71, 0xf1, 0xb4, 0xe8, 0xd0, 0xa4, 0x5e, 0x1a, 0x61, 0x93, 0x9a, 0xbd, 0x01, 0x53, + 0xea, 0xdc, 0x62, 0x4b, 0x07, 0x95, 0x61, 0x98, 0x71, 0x3b, 0x42, 0x79, 0x58, 0xa2, 0x33, 0xc5, + 0x38, 0x21, 0xcc, 0xcb, 0xd9, 0x4c, 0x79, 0x6f, 0x93, 0xc5, 0xbd, 0x98, 0x70, 0xa9, 0xba, 0xa8, + 0xcd, 0x94, 0x04, 0xe0, 0x04, 0xc7, 0xfe, 0x53, 0xce, 0x35, 0x26, 0x87, 0xe3, 0x00, 0xd7, 0xc1, + 0xb3, 0x30, 0xb6, 0x1d, 0x44, 0x31, 0xc5, 0x66, 0x6d, 0x0c, 0x27, 0x7c, 0xe2, 0x75, 0x51, 0x8e, + 0x15, 0x06, 0x7a, 0x05, 0x26, 0x1b, 0x7a, 0x03, 0xe2, 0x2e, 0x53, 0x43, 0x60, 0xb4, 0x8e, 0x4d, + 0x5c, 0xf4, 0x32, 0x8c, 0x31, 0x93, 0xbf, 0x46, 0xd0, 0x14, 0x4c, 0x96, 0xbc, 0x90, 0xc7, 0x6a, + 0xa2, 0xfc, 0x40, 0xfb, 0x8d, 0x15, 0x36, 0xba, 0x04, 0x23, 0xb4, 0x0b, 0xd5, 0x9a, 0xb8, 0x45, + 0x94, 0x1e, 0xec, 0x3a, 0x2b, 0xc5, 0x02, 0x6a, 0xff, 0xad, 0x82, 0x36, 0xca, 0x54, 0x22, 0x25, + 0xa8, 0x06, 0xa3, 0xf7, 0x1c, 0x2f, 0xf6, 0xfc, 0x2d, 0xc1, 0x2e, 0x3c, 0xdd, 0xf3, 0x4a, 0x61, + 0x95, 0xee, 0xf2, 0x0a, 0xfc, 0xd2, 0x13, 0x7f, 0xb0, 0x24, 0x43, 0x29, 0x86, 0x1d, 0xdf, 0xa7, + 0x14, 0x0b, 0x83, 0x52, 0xc4, 0xbc, 0x02, 0xa7, 0x28, 0xfe, 0x60, 0x49, 0x06, 0xbd, 0x09, 0x20, + 0x97, 0x25, 0x71, 0x85, 0x5a, 0xea, 0xd9, 0xfe, 0x44, 0xd7, 0x55, 0x9d, 0xc5, 0x29, 0x7a, 0xa5, + 0x26, 0xff, 0xb1, 0x46, 0xcf, 0x8e, 0x19, 0x5b, 0xd5, 0xdd, 0x19, 0xf4, 0x59, 0x7a, 0x12, 0x38, + 0x61, 0x4c, 0xdc, 0x85, 0x58, 0x0c, 0xce, 0x07, 0x07, 0x93, 0x29, 0xd6, 0xbd, 0x16, 0xd1, 0x4f, + 0x0d, 0x41, 0x04, 0x27, 0xf4, 0xec, 0x9f, 0x2b, 0xc2, 0x6c, 0x5e, 0x77, 0xe9, 0xa2, 0x23, 0xf7, + 0xbd, 0x78, 0x89, 0x72, 0x43, 0x96, 0xb9, 0xe8, 0x96, 0x45, 0x39, 0x56, 0x18, 0x74, 0xf6, 0x23, + 0x6f, 0x4b, 0x8a, 0x84, 0xc3, 0x9a, 0xd9, 0x21, 0x2b, 0xc5, 0x02, 0x4a, 0xf1, 0x42, 0xe2, 0x44, + 0xc2, 0x96, 0x53, 0x5b, 0x25, 0x98, 0x95, 0x62, 0x01, 0xd5, 0xf5, 0x4d, 0x43, 0x7d, 0xf4, 0x4d, + 0xc6, 0x10, 0x0d, 0x1f, 0xed, 0x10, 0xa1, 0xcf, 0x03, 0x6c, 0x7a, 0xbe, 0x17, 0x6d, 0x33, 0xea, + 0x23, 0x87, 0xa6, 0xae, 0x78, 0xa9, 0x15, 0x45, 0x05, 0x6b, 0x14, 0xd1, 0x4b, 0x30, 0xae, 0x36, + 0x60, 0xb5, 0xc2, 0x1e, 0x72, 0x35, 0xc3, 0x98, 0xe4, 0x34, 0xaa, 0x60, 0x1d, 0xcf, 0xfe, 0x62, + 0x7a, 0xbd, 0x88, 0x1d, 0xa0, 0x8d, 0xaf, 0x35, 0xe8, 0xf8, 0x16, 0x7a, 0x8f, 0xaf, 0xfd, 0x2b, + 0x45, 0x98, 0x36, 0x1a, 0xeb, 0x44, 0x03, 0x9c, 0x59, 0xd7, 0xe8, 0x3d, 0xe7, 0xc4, 0x44, 0xec, + 0x3f, 0xbb, 0xff, 0x56, 0xd1, 0xef, 0x42, 0xba, 0x03, 0x78, 0x7d, 0xf4, 0x79, 0x28, 0x35, 0x9d, + 0x88, 0xe9, 0xae, 0x88, 0xd8, 0x77, 0x83, 0x10, 0x4b, 0xe4, 0x08, 0x27, 0x8a, 0xb5, 0xab, 0x86, + 0xd3, 0x4e, 0x48, 0xd2, 0x0b, 0x99, 0xf2, 0x3e, 0xd2, 0x58, 0x58, 0x75, 0x82, 0x32, 0x48, 0x7b, + 0x98, 0xc3, 0xd0, 0xcb, 0x30, 0x11, 0x12, 0xb6, 0x2a, 0x96, 0x28, 0x2b, 0xc7, 0x96, 0xd9, 0x70, + 0xc2, 0xf3, 0x61, 0x0d, 0x86, 0x0d, 0xcc, 0x84, 0x95, 0x1f, 0xe9, 0xc1, 0xca, 0x3f, 0x0d, 0xa3, + 0xec, 0x87, 0x5a, 0x01, 0x6a, 0x36, 0xaa, 0xbc, 0x18, 0x4b, 0x78, 0x7a, 0xc1, 0x8c, 0x0d, 0xb8, + 0x60, 0xbe, 0x59, 0x60, 0x7a, 0x24, 0xf1, 0xe4, 0x5d, 0xf5, 0xa3, 0xd8, 0xa1, 0x7c, 0xc3, 0xa3, + 0x57, 0xf3, 0xbd, 0x0a, 0x53, 0xc9, 0x53, 0xbb, 0xf6, 0x4c, 0xf2, 0x98, 0xa8, 0x35, 0xb5, 0x64, + 0x40, 0x71, 0x0a, 0x5b, 0xde, 0x66, 0xbc, 0x84, 0x8a, 0xed, 0x45, 0x76, 0xc9, 0x1a, 0xb7, 0x99, + 0x02, 0x62, 0x13, 0x97, 0x0e, 0x16, 0x95, 0x5b, 0x9a, 0x81, 0xe3, 0xae, 0x75, 0x5a, 0x6c, 0x86, + 0x87, 0x93, 0xc1, 0xba, 0x9b, 0x80, 0xb0, 0x8e, 0x47, 0x8f, 0x3e, 0x2f, 0xba, 0x19, 0x34, 0x76, + 0x88, 0x2b, 0xec, 0xc0, 0xd4, 0xd1, 0x57, 0x15, 0xe5, 0x58, 0x61, 0xd8, 0xbf, 0x6a, 0xc1, 0x63, + 0xdd, 0x43, 0x7b, 0x0c, 0x0a, 0xa1, 0x1b, 0xa6, 0xd8, 0x7b, 0x29, 0x6f, 0x57, 0x98, 0x1d, 0xcb, + 0xd1, 0x0c, 0xfd, 0x72, 0x11, 0x26, 0x96, 0x3a, 0x51, 0x1c, 0xb4, 0x8e, 0xcd, 0x1c, 0xfe, 0x0a, + 0x94, 0x82, 0x36, 0x09, 0xd9, 0xb6, 0x4c, 0x5b, 0x73, 0xdd, 0x92, 0x00, 0x9c, 0xe0, 0xa0, 0x37, + 0xa4, 0xc1, 0x6e, 0xcd, 0x09, 0x9d, 0x56, 0x4f, 0x1b, 0x78, 0xac, 0xe1, 0xe9, 0xfb, 0x34, 0x29, + 0xc5, 0x06, 0x2d, 0xb4, 0x91, 0x18, 0xed, 0x0a, 0xea, 0x43, 0xfd, 0x8d, 0x76, 0x05, 0x7d, 0xb5, + 0x96, 0xcd, 0x72, 0x9c, 0xa2, 0x88, 0x3e, 0xaf, 0x0c, 0x77, 0x45, 0x13, 0xc3, 0x7d, 0x0d, 0x77, + 0x45, 0x0b, 0x6a, 0xb9, 0x1b, 0xc5, 0xd8, 0x24, 0x67, 0x7f, 0x10, 0xa6, 0x2a, 0x0e, 0x69, 0x05, + 0xfe, 0xb2, 0xef, 0xb6, 0x03, 0xcf, 0x8f, 0xd1, 0x2c, 0x0c, 0x31, 0x16, 0x90, 0x5f, 0xe0, 0x43, + 0x94, 0x0a, 0x1e, 0xa2, 0xd2, 0xb7, 0xfd, 0xb5, 0x22, 0x9c, 0xac, 0x38, 0xb1, 0xa3, 0x7c, 0x28, + 0xc4, 0x7b, 0xe0, 0xa3, 0x9f, 0xf6, 0x97, 0x60, 0x9c, 0x9d, 0x8f, 0xeb, 0xc4, 0x77, 0xfc, 0x38, + 0x6d, 0x0b, 0x5a, 0x4f, 0x40, 0x58, 0xc7, 0x43, 0xaf, 0x01, 0xf2, 0x22, 0x0d, 0x7a, 0xc7, 0x69, + 0x0a, 0xc5, 0xe2, 0xd8, 0xe2, 0x9c, 0xa8, 0x8d, 0xaa, 0x5d, 0x18, 0x38, 0xa3, 0x16, 0x5d, 0x79, + 0xc4, 0x77, 0x45, 0x07, 0x86, 0xcc, 0x95, 0xb7, 0x2c, 0x01, 0x38, 0xc1, 0x41, 0x15, 0x98, 0xf1, + 0x22, 0x05, 0xe1, 0x4d, 0xf3, 0x93, 0x41, 0xe9, 0x0f, 0xab, 0x29, 0x38, 0xee, 0xaa, 0x41, 0xcf, + 0xc2, 0x88, 0x84, 0x54, 0xd6, 0xb8, 0x16, 0x06, 0x9d, 0x76, 0x55, 0xda, 0x8f, 0x26, 0xeb, 0xc7, + 0x80, 0xe2, 0x14, 0xb6, 0xfd, 0x6b, 0x16, 0x3c, 0x9e, 0x31, 0x67, 0xc7, 0x70, 0xd4, 0xdc, 0x34, + 0x8f, 0x9a, 0xcc, 0xd7, 0x9a, 0x8c, 0x9e, 0xe5, 0x9c, 0x35, 0x5b, 0x70, 0xba, 0x12, 0xdc, 0xf3, + 0xef, 0x39, 0xa1, 0xbb, 0x50, 0xab, 0x6a, 0x8a, 0xd4, 0x35, 0xd9, 0x0c, 0xb7, 0x66, 0xce, 0x64, + 0xda, 0xb5, 0x9a, 0x5c, 0x98, 0x5b, 0xf1, 0x9a, 0x79, 0x87, 0xda, 0xdf, 0x2d, 0x18, 0x2d, 0x25, + 0xf8, 0xca, 0xdc, 0xc3, 0xca, 0x35, 0xf7, 0x78, 0x1d, 0xc6, 0x36, 0x3d, 0xd2, 0x74, 0x31, 0xd9, + 0x14, 0x3c, 0xcc, 0x53, 0xf9, 0x06, 0x9a, 0x2b, 0x14, 0x53, 0x3e, 0x6f, 0x70, 0x35, 0xe0, 0x8a, + 0xa8, 0x8c, 0x15, 0x19, 0xb4, 0x03, 0x33, 0x52, 0xcf, 0x24, 0xa1, 0xe2, 0x0c, 0x7b, 0xba, 0x97, + 0xf2, 0xca, 0x24, 0x7e, 0x8a, 0x2e, 0x36, 0x9c, 0x22, 0x83, 0xbb, 0x08, 0xa3, 0xb3, 0x30, 0xd4, + 0xa2, 0xbc, 0x3b, 0xbf, 0xf4, 0x98, 0xde, 0x8f, 0xa9, 0x30, 0x59, 0xa9, 0xfd, 0xc3, 0x74, 0x29, + 0xa5, 0x47, 0x46, 0xa8, 0x72, 0x8f, 0x78, 0x16, 0xd2, 0xaa, 0xd5, 0x42, 0x7f, 0xd5, 0xaa, 0xfd, + 0x53, 0x16, 0x9c, 0x5a, 0x6e, 0xb5, 0xe3, 0xbd, 0x8a, 0x67, 0xda, 0x66, 0x7c, 0x04, 0x46, 0x5a, + 0xc4, 0xf5, 0x3a, 0x2d, 0x31, 0x73, 0x65, 0xc9, 0xdf, 0xae, 0xb2, 0xd2, 0x83, 0xfd, 0xf2, 0x64, + 0x3d, 0x0e, 0x42, 0x67, 0x8b, 0xf0, 0x02, 0x2c, 0xd0, 0x99, 0x94, 0xe0, 0xbd, 0x4d, 0x6e, 0x7a, + 0x2d, 0x4f, 0x1a, 0xdc, 0xf6, 0xdc, 0x20, 0xf3, 0x72, 0x40, 0xe7, 0x5f, 0xef, 0x38, 0x7e, 0xec, + 0xc5, 0x7b, 0xc2, 0xac, 0x42, 0x12, 0xc1, 0x09, 0x3d, 0xfb, 0x1b, 0x16, 0x4c, 0xcb, 0x33, 0x77, + 0xc1, 0x75, 0x43, 0x12, 0x45, 0x68, 0x0e, 0x0a, 0x5e, 0x5b, 0xf4, 0x12, 0x44, 0x2f, 0x0b, 0xd5, + 0x1a, 0x2e, 0x78, 0x6d, 0x54, 0x83, 0x12, 0xb7, 0xdb, 0x4d, 0x16, 0xd7, 0x40, 0xd6, 0xbf, 0xac, + 0x07, 0xeb, 0xb2, 0x26, 0x4e, 0x88, 0x48, 0x15, 0x81, 0x9f, 0x38, 0xc7, 0x18, 0x2a, 0x02, 0x9f, + 0x99, 0xe2, 0x4b, 0x0c, 0x74, 0x59, 0xf3, 0x9f, 0xe2, 0xc7, 0xdf, 0x44, 0xb6, 0xef, 0x94, 0xfd, + 0xfd, 0x16, 0x4c, 0xc8, 0x2f, 0x1b, 0x50, 0x5b, 0x41, 0xb7, 0x56, 0xa2, 0xa9, 0x48, 0xb6, 0x56, + 0x10, 0xc6, 0xfc, 0xee, 0x31, 0x94, 0x0c, 0xc5, 0xc3, 0x28, 0x19, 0xec, 0x1f, 0x2a, 0xc0, 0x94, + 0xec, 0x4e, 0xbd, 0xb3, 0x11, 0x91, 0x18, 0xad, 0x43, 0xc9, 0xe1, 0x43, 0x4e, 0xe4, 0x8a, 0xbd, + 0x98, 0xad, 0xdd, 0x32, 0xe6, 0x27, 0x39, 0xf0, 0x17, 0x64, 0x6d, 0x9c, 0x10, 0x42, 0x4d, 0x38, + 0xe1, 0x07, 0x31, 0x93, 0x01, 0x14, 0xbc, 0xd7, 0x1b, 0x7b, 0x9a, 0xfa, 0x19, 0x41, 0xfd, 0xc4, + 0x5a, 0x9a, 0x0a, 0xee, 0x26, 0x8c, 0x96, 0xa5, 0x46, 0xbd, 0x98, 0xaf, 0xcf, 0xd2, 0x67, 0x21, + 0x5b, 0xa1, 0x6e, 0xff, 0xa2, 0x05, 0x25, 0x89, 0x76, 0x1c, 0xe6, 0x14, 0xab, 0x30, 0x1a, 0xb1, + 0x49, 0x90, 0x43, 0x63, 0xf7, 0xea, 0x38, 0x9f, 0xaf, 0x44, 0xb4, 0xe1, 0xff, 0x23, 0x2c, 0x69, + 0xb0, 0x07, 0x55, 0xd5, 0xfd, 0xf7, 0xc8, 0x83, 0xaa, 0xea, 0x4f, 0xce, 0x0d, 0xf3, 0x7b, 0xac, + 0xcf, 0x9a, 0xde, 0x94, 0x4a, 0xe0, 0xed, 0x90, 0x6c, 0x7a, 0xf7, 0xd3, 0x12, 0x78, 0x8d, 0x95, + 0x62, 0x01, 0x45, 0x6f, 0xc2, 0x44, 0x43, 0xbe, 0xa4, 0x25, 0xc7, 0xc0, 0xa5, 0x9e, 0xaf, 0xba, + 0xca, 0x00, 0x80, 0xbb, 0x58, 0x2d, 0x69, 0xf5, 0xb1, 0x41, 0xcd, 0x34, 0x96, 0x2b, 0xf6, 0x33, + 0x96, 0x4b, 0xe8, 0xe6, 0x9b, 0x8e, 0xfd, 0x88, 0x05, 0x23, 0xfc, 0x3d, 0x66, 0xb0, 0x07, 0x2c, + 0xcd, 0x1e, 0x22, 0x19, 0xbb, 0x3b, 0xb4, 0x50, 0xd8, 0x37, 0xa0, 0x55, 0x28, 0xb1, 0x1f, 0x4c, + 0x2f, 0xdd, 0x83, 0x97, 0xe7, 0xad, 0xea, 0x1d, 0xbc, 0x23, 0xab, 0xe1, 0x84, 0x82, 0xfd, 0x03, + 0x45, 0x7a, 0x54, 0x25, 0xa8, 0xc6, 0x0d, 0x6e, 0x3d, 0xba, 0x1b, 0xbc, 0xf0, 0xa8, 0x6e, 0xf0, + 0x2d, 0x98, 0x6e, 0x68, 0xd6, 0x13, 0xc9, 0x4c, 0x5e, 0xee, 0xb9, 0x48, 0x34, 0x43, 0x0b, 0xfe, + 0x26, 0xb1, 0x64, 0x12, 0xc1, 0x69, 0xaa, 0xe8, 0xb3, 0x30, 0xc1, 0xe7, 0x59, 0xb4, 0xc2, 0x25, + 0x9f, 0x0f, 0xe4, 0xaf, 0x17, 0xbd, 0x09, 0xb6, 0x12, 0xeb, 0x5a, 0x75, 0x6c, 0x10, 0xb3, 0x7f, + 0x6e, 0x0c, 0x86, 0x97, 0x77, 0x89, 0x1f, 0x1f, 0xc3, 0x81, 0xd4, 0x80, 0x29, 0xcf, 0xdf, 0x0d, + 0x9a, 0xbb, 0xc4, 0xe5, 0xf0, 0xc3, 0x5c, 0xae, 0x8a, 0x0b, 0xaf, 0x1a, 0x24, 0x70, 0x8a, 0xe4, + 0xa3, 0x50, 0x61, 0x5e, 0x83, 0x11, 0x3e, 0xf7, 0x42, 0x22, 0xcc, 0x7c, 0x6d, 0x64, 0x83, 0x28, + 0x76, 0x41, 0xa2, 0x5e, 0xe5, 0xcf, 0x9b, 0xa2, 0x3a, 0xfa, 0x22, 0x4c, 0x6d, 0x7a, 0x61, 0x14, + 0xaf, 0x7b, 0x2d, 0x12, 0xc5, 0x4e, 0xab, 0xfd, 0x10, 0x2a, 0x4b, 0x35, 0x0e, 0x2b, 0x06, 0x25, + 0x9c, 0xa2, 0x8c, 0xb6, 0x60, 0xb2, 0xe9, 0xe8, 0x4d, 0x8d, 0x1e, 0xba, 0x29, 0x25, 0xd6, 0xde, + 0xd4, 0x09, 0x61, 0x93, 0x2e, 0x3d, 0x4c, 0x1a, 0x4c, 0xeb, 0x36, 0xc6, 0x38, 0x0a, 0x75, 0x98, + 0x70, 0x75, 0x1b, 0x87, 0xd1, 0x33, 0x89, 0xd9, 0x45, 0x96, 0xcc, 0x33, 0x49, 0xb3, 0x7e, 0xfc, + 0x02, 0x94, 0x08, 0x1d, 0x42, 0x4a, 0x58, 0xbc, 0xbc, 0x5e, 0x19, 0xac, 0xaf, 0xab, 0x5e, 0x23, + 0x0c, 0x4c, 0x65, 0xf1, 0xb2, 0xa4, 0x84, 0x13, 0xa2, 0x68, 0x09, 0x46, 0x22, 0x12, 0x7a, 0x24, + 0x12, 0x6f, 0xb0, 0x3d, 0xa6, 0x91, 0xa1, 0x71, 0x7f, 0x0d, 0xfe, 0x1b, 0x8b, 0xaa, 0x74, 0x79, + 0x39, 0xdc, 0x3d, 0x7b, 0xc2, 0x5c, 0x5e, 0xc2, 0xf1, 0x5a, 0x40, 0xd1, 0x6b, 0x30, 0x1a, 0x92, + 0x26, 0x7b, 0x8d, 0x98, 0x1c, 0x7c, 0x91, 0xf3, 0xc7, 0x0d, 0x5e, 0x0f, 0x4b, 0x02, 0xe8, 0x06, + 0xa0, 0x90, 0x50, 0x1e, 0xc2, 0xf3, 0xb7, 0x94, 0xb5, 0xa0, 0x78, 0x4c, 0x7d, 0x42, 0xb4, 0x7f, + 0x12, 0x27, 0x18, 0x52, 0xa7, 0x84, 0x33, 0xaa, 0xa1, 0x6b, 0x70, 0x42, 0x95, 0x4a, 0xa5, 0x13, + 0x7b, 0x47, 0x2d, 0x25, 0x5c, 0x11, 0x4e, 0x23, 0xe0, 0xee, 0x3a, 0xf6, 0x4f, 0x52, 0x76, 0x86, + 0x8e, 0xd6, 0x31, 0xf0, 0x02, 0xaf, 0x9a, 0xbc, 0xc0, 0x99, 0xdc, 0x99, 0xcb, 0xe1, 0x03, 0x1e, + 0x58, 0x30, 0xae, 0xcd, 0x6c, 0xb2, 0x66, 0xad, 0x1e, 0x6b, 0xb6, 0x03, 0x33, 0x74, 0xa5, 0xdf, + 0xda, 0xa0, 0x72, 0x3e, 0x71, 0xd9, 0xc2, 0x2c, 0x3c, 0xdc, 0xc2, 0x54, 0x6a, 0x88, 0x9b, 0x29, + 0x82, 0xb8, 0xab, 0x09, 0xf4, 0x11, 0xa9, 0x9a, 0x2f, 0x1a, 0x56, 0xc0, 0x5c, 0xed, 0x7e, 0xb0, + 0x5f, 0x9e, 0xd1, 0x3e, 0x44, 0x57, 0xc5, 0xdb, 0x5f, 0x90, 0xdf, 0xa8, 0xcc, 0xc5, 0x1a, 0x6a, + 0xb1, 0xa4, 0xcc, 0xc5, 0xd4, 0x72, 0xc0, 0x09, 0x0e, 0xdd, 0xa3, 0x54, 0x04, 0x49, 0x9b, 0x8b, + 0x51, 0x01, 0x05, 0x33, 0x88, 0xfd, 0x02, 0xc0, 0xf2, 0x7d, 0xd2, 0x10, 0x2a, 0x48, 0xcd, 0xc2, + 0xc5, 0xca, 0xb7, 0x70, 0xb1, 0xff, 0xb3, 0x05, 0x53, 0x2b, 0x4b, 0x86, 0x98, 0x38, 0x0f, 0xc0, + 0x65, 0xa3, 0xbb, 0x77, 0xd7, 0xe4, 0xe3, 0x2d, 0x7f, 0x7f, 0x53, 0xa5, 0x58, 0xc3, 0x40, 0x67, + 0xa0, 0xd8, 0xec, 0xf8, 0x42, 0x64, 0x19, 0x7d, 0xb0, 0x5f, 0x2e, 0xde, 0xec, 0xf8, 0x98, 0x96, + 0x69, 0xf6, 0xfd, 0xc5, 0x81, 0xed, 0xfb, 0xfb, 0xc6, 0x1d, 0x41, 0x65, 0x18, 0xbe, 0x77, 0xcf, + 0x73, 0xb9, 0x37, 0xa3, 0x78, 0x58, 0xbe, 0x7b, 0xb7, 0x5a, 0x89, 0x30, 0x2f, 0xb7, 0xbf, 0x52, + 0x84, 0xb9, 0x95, 0x26, 0xb9, 0xff, 0x0e, 0x3d, 0x3a, 0x07, 0xf5, 0x4e, 0x38, 0x1c, 0xbf, 0x78, + 0x58, 0x0f, 0x94, 0xfe, 0xe3, 0xb1, 0x09, 0xa3, 0xdc, 0x5a, 0x4a, 0xfa, 0x77, 0xbe, 0x92, 0xd5, + 0x7a, 0xfe, 0x80, 0xcc, 0x73, 0xab, 0x2b, 0xe1, 0x9e, 0xa6, 0x6e, 0x5a, 0x51, 0x8a, 0x25, 0xf1, + 0xb9, 0x8f, 0xc1, 0x84, 0x8e, 0x79, 0x28, 0x5f, 0xb0, 0xbf, 0x52, 0x84, 0x19, 0xda, 0x83, 0x47, + 0x3a, 0x11, 0xb7, 0xbb, 0x27, 0xe2, 0xa8, 0xfd, 0x81, 0xfa, 0xcf, 0xc6, 0x9b, 0xe9, 0xd9, 0x78, + 0x3e, 0x6f, 0x36, 0x8e, 0x7b, 0x0e, 0xbe, 0xcb, 0x82, 0x93, 0x2b, 0xcd, 0xa0, 0xb1, 0x93, 0xf2, + 0xd9, 0x79, 0x09, 0xc6, 0xe9, 0x39, 0x1e, 0x19, 0xee, 0xe4, 0x46, 0x80, 0x01, 0x01, 0xc2, 0x3a, + 0x9e, 0x56, 0xed, 0xf6, 0xed, 0x6a, 0x25, 0x2b, 0x2e, 0x81, 0x00, 0x61, 0x1d, 0xcf, 0xfe, 0x0d, + 0x0b, 0xce, 0x5d, 0x5b, 0x5a, 0x4e, 0x96, 0x62, 0x57, 0x68, 0x04, 0x2a, 0x05, 0xba, 0x5a, 0x57, + 0x12, 0x29, 0xb0, 0xc2, 0x7a, 0x21, 0xa0, 0xef, 0x95, 0x30, 0x48, 0x3f, 0x61, 0xc1, 0xc9, 0x6b, + 0x5e, 0x4c, 0xaf, 0xe5, 0xb4, 0x93, 0x3e, 0xbd, 0x97, 0x23, 0x2f, 0x0e, 0xc2, 0xbd, 0xb4, 0x93, + 0x3e, 0x56, 0x10, 0xac, 0x61, 0xf1, 0x96, 0x77, 0xbd, 0x28, 0x79, 0xd5, 0xd1, 0x5a, 0xe6, 0xe5, + 0x58, 0x61, 0xd0, 0x0f, 0x73, 0xbd, 0x90, 0x89, 0x12, 0x7b, 0xe2, 0x84, 0x55, 0x1f, 0x56, 0x91, + 0x00, 0x9c, 0xe0, 0xd8, 0x7f, 0x60, 0x41, 0xf9, 0x5a, 0xb3, 0x13, 0xc5, 0x24, 0xdc, 0x8c, 0x72, + 0x4e, 0xc7, 0x17, 0x98, 0x7e, 0x9f, 0x0b, 0xee, 0xa2, 0xd7, 0x8a, 0xd5, 0x54, 0x12, 0x3d, 0x8f, + 0x15, 0xa0, 0xf0, 0x06, 0xf0, 0x00, 0x3c, 0x9c, 0x0b, 0xd7, 0x0a, 0x20, 0xa2, 0xb7, 0xa5, 0x07, + 0x4f, 0x60, 0x5e, 0xd8, 0xcb, 0x5d, 0x50, 0x9c, 0x51, 0xc3, 0xfe, 0x61, 0x0b, 0x4e, 0xab, 0x0f, + 0x7e, 0xcf, 0x7d, 0xa6, 0xfd, 0xd3, 0x05, 0x98, 0xbc, 0xbe, 0xbe, 0x5e, 0xbb, 0x46, 0x64, 0x9c, + 0xa1, 0xfe, 0xba, 0x75, 0xac, 0xa9, 0x08, 0x7b, 0x49, 0x81, 0x9d, 0xd8, 0x6b, 0xce, 0xf3, 0x98, + 0x64, 0xf3, 0x55, 0x3f, 0xbe, 0x15, 0xd6, 0xe3, 0xd0, 0xf3, 0xb7, 0x32, 0x95, 0x8a, 0x92, 0xb9, + 0x28, 0xe6, 0x31, 0x17, 0xe8, 0x05, 0x18, 0x61, 0x41, 0xd1, 0xe4, 0x24, 0x3c, 0xa1, 0x84, 0x28, + 0x56, 0x7a, 0xb0, 0x5f, 0x2e, 0xdd, 0xc6, 0x55, 0xfe, 0x07, 0x0b, 0x54, 0x74, 0x1b, 0xc6, 0xb7, + 0xe3, 0xb8, 0x7d, 0x9d, 0x38, 0x2e, 0x09, 0xe5, 0x71, 0x98, 0x19, 0xba, 0x8b, 0x0e, 0x02, 0x47, + 0x4b, 0x4e, 0x90, 0xa4, 0x2c, 0xc2, 0x3a, 0x1d, 0xbb, 0x0e, 0x90, 0xc0, 0x8e, 0x48, 0xa1, 0x62, + 0xff, 0xae, 0x05, 0xa3, 0x3c, 0x1e, 0x43, 0x88, 0x3e, 0x0e, 0x43, 0xe4, 0x3e, 0x69, 0x08, 0x56, + 0x39, 0xb3, 0xc3, 0x09, 0xa7, 0xc5, 0x9f, 0x07, 0xe8, 0x7f, 0xcc, 0x6a, 0xa1, 0xeb, 0x30, 0x4a, + 0x7b, 0x7b, 0x4d, 0x05, 0xa7, 0x78, 0x32, 0xef, 0x8b, 0xd5, 0xb4, 0x73, 0xe6, 0x4c, 0x14, 0x61, + 0x59, 0x9d, 0xa9, 0xba, 0x1b, 0xed, 0x3a, 0x3d, 0xb1, 0xe3, 0x5e, 0x8c, 0xc5, 0xfa, 0x52, 0x8d, + 0x23, 0xc9, 0x38, 0x60, 0x4c, 0xd5, 0x2d, 0x0b, 0x71, 0x42, 0xc4, 0x5e, 0x87, 0x12, 0x9d, 0xd4, + 0x85, 0xa6, 0xe7, 0xf4, 0xd6, 0xb2, 0x3f, 0x03, 0x25, 0xa9, 0xf1, 0x8e, 0x84, 0x1f, 0x36, 0xa3, + 0x2a, 0x15, 0xe2, 0x11, 0x4e, 0xe0, 0xf6, 0x26, 0x9c, 0x62, 0xb6, 0x74, 0x4e, 0xbc, 0x6d, 0xec, + 0xb1, 0xfe, 0x8b, 0xf9, 0x59, 0x21, 0x79, 0xf2, 0x99, 0x99, 0xd5, 0xbc, 0xf1, 0x26, 0x24, 0xc5, + 0x44, 0x0a, 0xb5, 0x7f, 0x7f, 0x08, 0x9e, 0xa8, 0xd6, 0xf3, 0x43, 0x75, 0xbc, 0x0c, 0x13, 0x9c, + 0x2f, 0xa5, 0x4b, 0xdb, 0x69, 0x8a, 0x76, 0xd5, 0x0b, 0xf6, 0xba, 0x06, 0xc3, 0x06, 0x26, 0x3a, + 0x07, 0x45, 0xef, 0x2d, 0x3f, 0xed, 0xd8, 0x52, 0x7d, 0x7d, 0x0d, 0xd3, 0x72, 0x0a, 0xa6, 0x2c, + 0x2e, 0xbf, 0x3b, 0x14, 0x58, 0xb1, 0xb9, 0xaf, 0xc2, 0x94, 0x17, 0x35, 0x22, 0xaf, 0xea, 0xd3, + 0x73, 0x46, 0x3b, 0xa9, 0x94, 0x56, 0x84, 0x76, 0x5a, 0x41, 0x71, 0x0a, 0x5b, 0xbb, 0xc8, 0x86, + 0x07, 0x66, 0x93, 0xfb, 0x3a, 0x26, 0x53, 0x09, 0xa0, 0xcd, 0xbe, 0x2e, 0x62, 0x66, 0xe2, 0x42, + 0x02, 0xe0, 0x1f, 0x1c, 0x61, 0x09, 0xa3, 0x22, 0x67, 0x63, 0xdb, 0x69, 0x2f, 0x74, 0xe2, 0xed, + 0x8a, 0x17, 0x35, 0x82, 0x5d, 0x12, 0xee, 0x31, 0x6d, 0xc1, 0x58, 0x22, 0x72, 0x2a, 0xc0, 0xd2, + 0xf5, 0x85, 0x1a, 0xc5, 0xc4, 0xdd, 0x75, 0x4c, 0x36, 0x18, 0x8e, 0x82, 0x0d, 0x5e, 0x80, 0x69, + 0xd9, 0x4c, 0x9d, 0x44, 0xec, 0x52, 0x1c, 0x67, 0x1d, 0x53, 0xce, 0x2b, 0xa2, 0x58, 0x75, 0x2b, + 0x8d, 0x8f, 0x3e, 0x02, 0x93, 0x9e, 0xef, 0xc5, 0x9e, 0x13, 0x07, 0x21, 0x63, 0x29, 0xb8, 0x62, + 0x80, 0xd9, 0x86, 0x57, 0x75, 0x00, 0x36, 0xf1, 0xec, 0xff, 0x31, 0x04, 0x27, 0xd8, 0xb4, 0x7d, + 0x6b, 0x85, 0xbd, 0x67, 0x56, 0xd8, 0xed, 0xee, 0x15, 0x76, 0x14, 0xfc, 0xfd, 0xbb, 0xb9, 0xcc, + 0xbe, 0x08, 0x25, 0xe5, 0x5d, 0x23, 0xdd, 0xeb, 0xac, 0x1c, 0xf7, 0xba, 0xfe, 0xdc, 0x87, 0x7c, + 0xb7, 0x2e, 0x66, 0xbe, 0x5b, 0xff, 0x7d, 0x0b, 0x12, 0x27, 0x03, 0x74, 0x1d, 0x4a, 0xed, 0x80, + 0x19, 0xf2, 0x85, 0xd2, 0x3a, 0xf6, 0x89, 0xcc, 0x8b, 0x8a, 0x5f, 0x8a, 0x7c, 0xfc, 0x6a, 0xb2, + 0x06, 0x4e, 0x2a, 0xa3, 0x45, 0x18, 0x6d, 0x87, 0xa4, 0x1e, 0xb3, 0x88, 0x1d, 0x7d, 0xe9, 0xf0, + 0x35, 0xc2, 0xf1, 0xb1, 0xac, 0x68, 0xff, 0x8c, 0x05, 0xc0, 0x9f, 0x86, 0x1d, 0x7f, 0xeb, 0x38, + 0x6c, 0xeb, 0x2a, 0x46, 0x3c, 0x51, 0x3b, 0xdb, 0x3f, 0x43, 0xf6, 0x27, 0x2f, 0xa6, 0xa8, 0xfd, + 0xdd, 0x00, 0x53, 0x09, 0x5a, 0x35, 0x26, 0x2d, 0xf4, 0x9c, 0xe1, 0x64, 0x7e, 0x26, 0xe5, 0x64, + 0x5e, 0x62, 0xd8, 0x9a, 0x66, 0xf5, 0x8b, 0x50, 0x6c, 0x39, 0xf7, 0x85, 0xea, 0xec, 0x99, 0xde, + 0xdd, 0xa0, 0xf4, 0xe7, 0x57, 0x9d, 0xfb, 0x5c, 0x48, 0x7c, 0x46, 0x2e, 0x90, 0x55, 0xe7, 0xfe, + 0x01, 0x37, 0xa4, 0x64, 0x87, 0xd4, 0x4d, 0x2f, 0x8a, 0xbf, 0xf4, 0xdf, 0x93, 0xff, 0x6c, 0xd9, + 0xd1, 0x46, 0x58, 0x5b, 0x9e, 0x2f, 0x1e, 0x4a, 0x07, 0x6a, 0xcb, 0xf3, 0xd3, 0x6d, 0x79, 0xfe, + 0x00, 0x6d, 0x79, 0x3e, 0x7a, 0x1b, 0x46, 0x85, 0x51, 0x82, 0x88, 0x14, 0x70, 0x65, 0x80, 0xf6, + 0x84, 0x4d, 0x03, 0x6f, 0xf3, 0x8a, 0x14, 0x82, 0x45, 0x69, 0xdf, 0x76, 0x65, 0x83, 0xe8, 0xef, + 0x58, 0x30, 0x25, 0x7e, 0x63, 0xf2, 0x56, 0x87, 0x44, 0xb1, 0xe0, 0x3d, 0x3f, 0x3c, 0x78, 0x1f, + 0x44, 0x45, 0xde, 0x95, 0x0f, 0xcb, 0x63, 0xd6, 0x04, 0xf6, 0xed, 0x51, 0xaa, 0x17, 0xe8, 0x9f, + 0x5a, 0x70, 0xaa, 0xe5, 0xdc, 0xe7, 0x2d, 0xf2, 0x32, 0xec, 0xc4, 0x5e, 0x20, 0xbc, 0xc1, 0x3e, + 0x3e, 0xd8, 0xf4, 0x77, 0x55, 0xe7, 0x9d, 0x94, 0x8e, 0x23, 0xa7, 0xb2, 0x50, 0xfa, 0x76, 0x35, + 0xb3, 0x5f, 0x73, 0x9b, 0x30, 0x26, 0xd7, 0x5b, 0x86, 0xaa, 0xa1, 0xa2, 0x33, 0xd6, 0x87, 0xb6, + 0x09, 0xd1, 0x3d, 0xbd, 0x69, 0x3b, 0x62, 0xad, 0x3d, 0xd2, 0x76, 0xbe, 0x08, 0x13, 0xfa, 0x1a, + 0x7b, 0xa4, 0x6d, 0xbd, 0x05, 0x27, 0x33, 0xd6, 0xd2, 0x23, 0x6d, 0xf2, 0x1e, 0x9c, 0xc9, 0x5d, + 0x1f, 0x8f, 0xb2, 0x61, 0xfb, 0xa7, 0x2d, 0xfd, 0x1c, 0x3c, 0x86, 0x37, 0x87, 0x25, 0xf3, 0xcd, + 0xe1, 0x7c, 0xef, 0x9d, 0x93, 0xf3, 0xf0, 0xf0, 0xa6, 0xde, 0x69, 0x16, 0x1c, 0xf9, 0x35, 0x18, + 0x69, 0xd2, 0x12, 0x69, 0x0d, 0x63, 0xf7, 0xdf, 0x91, 0x09, 0x2f, 0xc5, 0xca, 0x23, 0x2c, 0x28, + 0xd8, 0x3f, 0x6f, 0xc1, 0xd0, 0x31, 0x8c, 0x04, 0x36, 0x47, 0xe2, 0xb9, 0x5c, 0xd2, 0x22, 0xb8, + 0xf9, 0x3c, 0x76, 0xee, 0x2d, 0xdf, 0x8f, 0x89, 0x1f, 0xe5, 0x87, 0x8c, 0xfe, 0x36, 0x38, 0x79, + 0x33, 0x70, 0xdc, 0x45, 0xa7, 0xe9, 0xf8, 0x0d, 0x12, 0x56, 0xfd, 0xad, 0xbe, 0x66, 0x59, 0xba, + 0x11, 0x55, 0xa1, 0x9f, 0x11, 0x95, 0xbd, 0x0d, 0x48, 0x6f, 0x40, 0x78, 0x46, 0x60, 0x18, 0xf5, + 0x78, 0x53, 0x62, 0xf8, 0x9f, 0xca, 0xe6, 0xee, 0xba, 0x7a, 0xa6, 0xd9, 0xfc, 0xf3, 0x02, 0x2c, + 0x09, 0xd9, 0x2f, 0x43, 0xa6, 0x37, 0x74, 0x7f, 0xb5, 0x81, 0xfd, 0x19, 0x38, 0xc1, 0x6a, 0x1e, + 0x52, 0xa4, 0xb5, 0x53, 0x5a, 0xc9, 0x8c, 0xb8, 0x72, 0xf6, 0x97, 0x2d, 0x98, 0x5e, 0x4b, 0x85, + 0xdb, 0xba, 0xc4, 0x1e, 0x40, 0x33, 0x94, 0xe1, 0x75, 0x56, 0x8a, 0x05, 0xf4, 0xc8, 0x75, 0x50, + 0x5f, 0xb3, 0xa0, 0xb4, 0x56, 0x5d, 0x1a, 0xd8, 0x39, 0xe5, 0x12, 0x8c, 0x50, 0xc6, 0x5e, 0x69, + 0x7c, 0x13, 0xed, 0x2c, 0x2b, 0xc5, 0x02, 0x8a, 0xae, 0x9a, 0x2f, 0x65, 0x67, 0xd3, 0x2f, 0x65, + 0xe3, 0xdc, 0x73, 0xd0, 0xf0, 0x57, 0x49, 0xcc, 0x03, 0x86, 0x7a, 0x99, 0x07, 0xd8, 0x7f, 0x46, + 0xfb, 0xac, 0x22, 0x29, 0x3c, 0x7a, 0x66, 0x71, 0xc9, 0x60, 0x16, 0x33, 0xf5, 0x39, 0xaa, 0x3b, + 0xb9, 0xf1, 0xe7, 0x6f, 0xa4, 0xe2, 0xcf, 0x5f, 0xec, 0x4d, 0xa6, 0x77, 0x08, 0xfa, 0xaf, 0x59, + 0x30, 0xa9, 0x70, 0xdf, 0x23, 0xf6, 0x5e, 0xaa, 0x3f, 0x39, 0xa7, 0x4a, 0x4d, 0xeb, 0x32, 0x3b, + 0x6d, 0x3f, 0xc9, 0x1c, 0xc4, 0x9c, 0xa6, 0xf7, 0x36, 0x51, 0x31, 0xe6, 0xca, 0xc2, 0xe1, 0x4b, + 0x94, 0x1e, 0xec, 0x97, 0x27, 0xd5, 0x3f, 0x1e, 0xd3, 0x36, 0xa9, 0x62, 0x5f, 0x87, 0xe9, 0xd4, + 0x80, 0xa1, 0x97, 0x60, 0xb8, 0xbd, 0xed, 0x44, 0x24, 0x65, 0xe3, 0x3a, 0x5c, 0xa3, 0x85, 0x07, + 0xfb, 0xe5, 0x29, 0x55, 0x81, 0x95, 0x60, 0x8e, 0x6d, 0xff, 0xf5, 0x02, 0x14, 0xd7, 0xbc, 0xc6, + 0x00, 0xeb, 0xff, 0x2a, 0x40, 0xd4, 0xd9, 0xf0, 0xc5, 0x63, 0x49, 0x2a, 0x00, 0x75, 0x5d, 0x41, + 0xb0, 0x86, 0xa5, 0xf6, 0x8c, 0x9b, 0x7e, 0x07, 0x65, 0x7b, 0xc6, 0x15, 0x7b, 0x86, 0xd9, 0xd6, + 0x7b, 0x6d, 0x61, 0xda, 0x98, 0xb6, 0xad, 0xaf, 0x4a, 0x00, 0x4e, 0x70, 0x98, 0xef, 0xb2, 0xb3, + 0x25, 0x84, 0xfa, 0xc4, 0x77, 0xd9, 0xd9, 0xc2, 0xb4, 0x1c, 0xbd, 0x04, 0xe3, 0x5e, 0x7b, 0xf7, + 0xc3, 0xcb, 0xbe, 0xb3, 0xd1, 0x24, 0xae, 0x90, 0xe8, 0x95, 0x82, 0xb5, 0x9a, 0x80, 0xb0, 0x8e, + 0x67, 0xff, 0x6f, 0x0b, 0x86, 0xd6, 0x02, 0xf7, 0x78, 0x5c, 0x9c, 0xf4, 0x9d, 0x75, 0x36, 0x2f, + 0x3c, 0x7a, 0xee, 0xa6, 0x5a, 0x49, 0x6d, 0xaa, 0xf3, 0xb9, 0x14, 0x7a, 0xef, 0xa7, 0x16, 0x8c, + 0xb3, 0xa0, 0xeb, 0x62, 0x5c, 0x5f, 0x30, 0x84, 0xb8, 0x72, 0x4a, 0x88, 0x9b, 0xd6, 0x50, 0x35, + 0x51, 0xee, 0x69, 0x18, 0x15, 0x46, 0xb0, 0x69, 0xbf, 0x40, 0x39, 0x73, 0x12, 0x6e, 0xff, 0x48, + 0x11, 0x8c, 0x20, 0xef, 0xe8, 0x17, 0x2d, 0x98, 0x0f, 0x79, 0xa0, 0x05, 0xb7, 0xd2, 0x09, 0x3d, + 0x7f, 0xab, 0xde, 0xd8, 0x26, 0x6e, 0xa7, 0xe9, 0xf9, 0x5b, 0xd5, 0x2d, 0x3f, 0x50, 0xc5, 0xcb, + 0xf7, 0x49, 0xa3, 0xc3, 0x5e, 0xb2, 0xfa, 0x44, 0x94, 0x57, 0x46, 0x66, 0x57, 0x1f, 0xec, 0x97, + 0xe7, 0xf1, 0xa1, 0x68, 0xe3, 0x43, 0xf6, 0x05, 0xfd, 0x86, 0x05, 0x57, 0x78, 0xec, 0xf3, 0xc1, + 0xfb, 0xdf, 0x43, 0xe4, 0xad, 0x49, 0x52, 0x09, 0x91, 0x75, 0x12, 0xb6, 0x16, 0x3f, 0x22, 0x06, + 0xf4, 0x4a, 0xed, 0x70, 0x6d, 0xe1, 0xc3, 0x76, 0xce, 0xfe, 0xe5, 0x22, 0x4c, 0x8a, 0x18, 0x3f, + 0x22, 0x78, 0xdc, 0x4b, 0xc6, 0x92, 0x78, 0x32, 0xb5, 0x24, 0x4e, 0x18, 0xc8, 0x47, 0x13, 0x37, + 0x2e, 0x82, 0x13, 0x4d, 0x27, 0x8a, 0xaf, 0x13, 0x27, 0x8c, 0x37, 0x88, 0xc3, 0x8d, 0xaf, 0x8a, + 0x87, 0x36, 0x14, 0x53, 0x3a, 0xb6, 0x9b, 0x69, 0x62, 0xb8, 0x9b, 0x3e, 0xda, 0x05, 0xc4, 0x2c, + 0xc8, 0x42, 0xc7, 0x8f, 0xf8, 0xb7, 0x78, 0xe2, 0xd1, 0xe7, 0x70, 0xad, 0x2a, 0xb7, 0xa2, 0x9b, + 0x5d, 0xd4, 0x70, 0x46, 0x0b, 0xda, 0xd5, 0x3f, 0x3c, 0xa8, 0x65, 0xe0, 0x48, 0x1f, 0xe7, 0x5b, + 0x1f, 0x66, 0xba, 0xc2, 0x34, 0xbd, 0x01, 0x25, 0x65, 0xc1, 0x29, 0x0e, 0x9d, 0xde, 0xd1, 0xce, + 0xd2, 0x14, 0xb8, 0x1e, 0x2c, 0xb1, 0x1e, 0x4e, 0xc8, 0xd9, 0xff, 0xac, 0x60, 0x34, 0xc8, 0x27, + 0x71, 0x0d, 0xc6, 0x9c, 0x28, 0xf2, 0xb6, 0x7c, 0xe2, 0x8a, 0x1d, 0xfb, 0xfe, 0xbc, 0x1d, 0x6b, + 0x34, 0xc3, 0xac, 0x68, 0x17, 0x44, 0x4d, 0xac, 0x68, 0xa0, 0xeb, 0xdc, 0xc4, 0x6d, 0x57, 0x0a, + 0x6d, 0x83, 0x51, 0x03, 0x69, 0x04, 0xb7, 0x4b, 0xb0, 0xa8, 0x8f, 0x3e, 0xc7, 0x6d, 0x10, 0x6f, + 0xf8, 0xc1, 0x3d, 0xff, 0x5a, 0x10, 0x48, 0xc7, 0xfc, 0xc1, 0x08, 0x9e, 0x90, 0x96, 0x87, 0xaa, + 0x3a, 0x36, 0xa9, 0x0d, 0x16, 0xca, 0xf0, 0xdb, 0xe1, 0x24, 0x25, 0x6d, 0x7a, 0xde, 0x45, 0x88, + 0xc0, 0xb4, 0x08, 0x20, 0x25, 0xcb, 0xc4, 0xd8, 0xd9, 0xd9, 0xce, 0x53, 0x7a, 0xed, 0x44, 0x6b, + 0x7b, 0xc3, 0x24, 0x81, 0xd3, 0x34, 0xed, 0x1f, 0xb7, 0x80, 0xf9, 0x6d, 0x1c, 0x03, 0xff, 0xf4, + 0x09, 0x93, 0x7f, 0x9a, 0xcd, 0x1b, 0xe4, 0x1c, 0xd6, 0xe9, 0x45, 0xbe, 0xb2, 0x6a, 0x61, 0x70, + 0x7f, 0x4f, 0xd8, 0x7f, 0xf4, 0x17, 0x45, 0xec, 0xff, 0x67, 0xf1, 0x43, 0x4c, 0xc5, 0xea, 0x41, + 0xdf, 0x01, 0x63, 0x0d, 0xa7, 0xed, 0x34, 0x78, 0x46, 0x92, 0x5c, 0xb5, 0x9c, 0x51, 0x69, 0x7e, + 0x49, 0xd4, 0xe0, 0x6a, 0xa6, 0x0f, 0xa9, 0x54, 0x34, 0xa2, 0xb8, 0xaf, 0x6a, 0x49, 0x35, 0x39, + 0xb7, 0x03, 0x93, 0x06, 0xb1, 0x47, 0xaa, 0x93, 0xf8, 0x0e, 0x7e, 0xc5, 0xaa, 0xc0, 0x79, 0x2d, + 0x38, 0xe1, 0x6b, 0xff, 0xe9, 0x85, 0x22, 0xe5, 0xcc, 0xf7, 0xf7, 0xbb, 0x44, 0xd9, 0xed, 0xa3, + 0xf9, 0xa5, 0xa4, 0xc8, 0xe0, 0x6e, 0xca, 0xf6, 0x8f, 0x5a, 0xf0, 0xb8, 0x8e, 0xa8, 0x85, 0x51, + 0xea, 0xa7, 0xe8, 0xaf, 0xc0, 0x18, 0x77, 0xdc, 0x55, 0x49, 0x7d, 0x2e, 0xcb, 0x41, 0xbf, 0x25, + 0xca, 0x0f, 0x44, 0x3c, 0x6f, 0x49, 0x5d, 0x96, 0x63, 0x55, 0x93, 0x0a, 0xa2, 0x6c, 0x30, 0x22, + 0x11, 0xe2, 0x8a, 0x9d, 0x01, 0xec, 0xcd, 0x3b, 0xc2, 0x02, 0x62, 0xff, 0xbe, 0xc5, 0x17, 0x96, + 0xde, 0x75, 0xf4, 0x16, 0xcc, 0xb4, 0x9c, 0xb8, 0xb1, 0xbd, 0x7c, 0xbf, 0x1d, 0xf2, 0xf7, 0x0d, + 0x39, 0x4e, 0xcf, 0xf4, 0x1b, 0x27, 0xed, 0x23, 0x13, 0xb3, 0xca, 0xd5, 0x14, 0x31, 0xdc, 0x45, + 0x1e, 0x6d, 0xc0, 0x38, 0x2b, 0x63, 0xf6, 0xfb, 0x51, 0x2f, 0xd6, 0x20, 0xaf, 0x35, 0xc5, 0xd5, + 0xae, 0x26, 0x74, 0xb0, 0x4e, 0xd4, 0xfe, 0x52, 0x91, 0xef, 0x76, 0x26, 0x7a, 0xf0, 0x7c, 0x48, + 0x4b, 0xd5, 0x0a, 0x16, 0xb3, 0xa0, 0xe7, 0x43, 0xa2, 0xc5, 0x58, 0xc2, 0xd1, 0x2b, 0x00, 0xe4, + 0x7e, 0x4c, 0x42, 0xdf, 0x69, 0x2a, 0xa1, 0x57, 0x19, 0xf6, 0x56, 0x82, 0xb5, 0x20, 0xbe, 0x1d, + 0x91, 0x6f, 0x5b, 0x56, 0x28, 0x58, 0x43, 0xa7, 0xd2, 0x42, 0x3b, 0x0c, 0x76, 0x3d, 0x97, 0x45, + 0x1c, 0x28, 0x9a, 0xd2, 0x42, 0x4d, 0x41, 0xb0, 0x86, 0x85, 0x5e, 0x81, 0xc9, 0x8e, 0x1f, 0x71, + 0x0e, 0x85, 0x32, 0xe4, 0xc2, 0x06, 0x49, 0x99, 0xa7, 0xdc, 0xd6, 0x81, 0xd8, 0xc4, 0x45, 0x0b, + 0x30, 0x12, 0x3b, 0xcc, 0xa8, 0x65, 0x38, 0xdf, 0x1a, 0x77, 0x9d, 0x62, 0xe8, 0xf9, 0x30, 0x68, + 0x05, 0x2c, 0x2a, 0xa2, 0x37, 0xa4, 0x77, 0x0d, 0x3f, 0xeb, 0x85, 0x19, 0xfc, 0x60, 0xf7, 0x82, + 0xe6, 0x5b, 0x23, 0xcc, 0xeb, 0x0d, 0x5a, 0xf6, 0x6f, 0x94, 0x00, 0x12, 0x76, 0x1c, 0xbd, 0xdd, + 0x75, 0x1e, 0x3d, 0xdb, 0x9b, 0x81, 0x3f, 0xba, 0xc3, 0x08, 0x7d, 0x8f, 0x05, 0xe3, 0x4e, 0xb3, + 0x19, 0x34, 0x9c, 0x98, 0x8d, 0x72, 0xa1, 0xf7, 0x79, 0x28, 0xda, 0x5f, 0x48, 0x6a, 0xf0, 0x2e, + 0xbc, 0x20, 0x17, 0x9e, 0x06, 0xe9, 0xdb, 0x0b, 0xbd, 0x61, 0xf4, 0x21, 0x29, 0xb2, 0xf2, 0xe5, + 0x31, 0x97, 0x16, 0x59, 0x4b, 0xec, 0xe8, 0xd7, 0xa4, 0x55, 0x74, 0xdb, 0x88, 0xc5, 0x3b, 0x94, + 0x1f, 0x96, 0xca, 0xe0, 0x4a, 0xfb, 0x85, 0xe1, 0x45, 0x35, 0xdd, 0x1d, 0x70, 0x38, 0x3f, 0x76, + 0x9b, 0x26, 0xfe, 0xf4, 0x71, 0x05, 0xfc, 0x22, 0x4c, 0xbb, 0xe6, 0xdd, 0x2e, 0x56, 0xd3, 0x53, + 0x79, 0x74, 0x53, 0xac, 0x40, 0x72, 0x9b, 0xa7, 0x00, 0x38, 0x4d, 0x18, 0xd5, 0xb8, 0x63, 0x66, + 0xd5, 0xdf, 0x0c, 0x84, 0x3b, 0x85, 0x9d, 0x3b, 0x97, 0x7b, 0x51, 0x4c, 0x5a, 0x14, 0xd3, 0x4c, + 0x7e, 0x47, 0x4b, 0xb0, 0xa2, 0x82, 0x5e, 0x83, 0x11, 0x16, 0x3a, 0x24, 0x9a, 0x1d, 0xcb, 0xd7, + 0x06, 0x9b, 0x51, 0xaf, 0x92, 0x4d, 0xc5, 0xfe, 0x46, 0x58, 0x50, 0x40, 0xd7, 0x65, 0x68, 0xbc, + 0xa8, 0xea, 0xdf, 0x8e, 0x08, 0x0b, 0x8d, 0x57, 0x5a, 0x7c, 0x7f, 0x12, 0xf5, 0x8e, 0x97, 0x67, + 0x66, 0xbe, 0x32, 0x6a, 0x52, 0xe6, 0x48, 0xfc, 0x97, 0x09, 0xb5, 0x66, 0x21, 0xbf, 0x7b, 0x66, + 0xd2, 0xad, 0x64, 0x38, 0xef, 0x98, 0x24, 0x70, 0x9a, 0x26, 0x65, 0x34, 0xf9, 0xce, 0x15, 0x0e, + 0x19, 0xfd, 0xf6, 0x3f, 0x97, 0xaf, 0xd9, 0x25, 0xc3, 0x4b, 0xb0, 0xa8, 0x7f, 0xac, 0xb7, 0xfe, + 0x9c, 0x0f, 0x33, 0xe9, 0x2d, 0xfa, 0x48, 0xb9, 0x8c, 0xdf, 0x1d, 0x82, 0x29, 0x73, 0x49, 0xa1, + 0x2b, 0x50, 0x12, 0x44, 0x54, 0x10, 0x7c, 0xb5, 0x4b, 0x56, 0x25, 0x00, 0x27, 0x38, 0x4c, 0xa5, + 0xc4, 0xaa, 0x6b, 0x86, 0xb4, 0x89, 0x4a, 0x49, 0x41, 0xb0, 0x86, 0x45, 0xe5, 0xa5, 0x8d, 0x20, + 0x88, 0xd5, 0xa5, 0xa2, 0xd6, 0xdd, 0x22, 0x2b, 0xc5, 0x02, 0x4a, 0x2f, 0x93, 0x1d, 0x12, 0xfa, + 0xa4, 0x69, 0x86, 0x7f, 0x55, 0x97, 0xc9, 0x0d, 0x1d, 0x88, 0x4d, 0x5c, 0x7a, 0x4b, 0x06, 0x11, + 0x5b, 0xc8, 0x42, 0x2a, 0x4b, 0x0c, 0x93, 0xeb, 0x3c, 0x08, 0x8f, 0x84, 0xa3, 0xcf, 0xc0, 0xe3, + 0x2a, 0x66, 0x0e, 0xe6, 0x2f, 0x0d, 0xb2, 0xc5, 0x11, 0x43, 0x89, 0xf2, 0xf8, 0x52, 0x36, 0x1a, + 0xce, 0xab, 0x8f, 0x5e, 0x85, 0x29, 0xc1, 0xb9, 0x4b, 0x8a, 0xa3, 0xa6, 0xf1, 0xcb, 0x0d, 0x03, + 0x8a, 0x53, 0xd8, 0x32, 0x80, 0x2d, 0x63, 0x9e, 0x25, 0x85, 0xb1, 0xee, 0x00, 0xb6, 0x3a, 0x1c, + 0x77, 0xd5, 0x40, 0x0b, 0x30, 0x2d, 0xa2, 0xa9, 0xf8, 0x5b, 0x7c, 0x4e, 0x84, 0xbf, 0x94, 0xda, + 0x52, 0xb7, 0x4c, 0x30, 0x4e, 0xe3, 0xa3, 0x97, 0x61, 0xc2, 0x09, 0x1b, 0xdb, 0x5e, 0x4c, 0x1a, + 0x71, 0x27, 0xe4, 0x8e, 0x54, 0x9a, 0xf5, 0xd0, 0x82, 0x06, 0xc3, 0x06, 0xa6, 0xfd, 0x36, 0x9c, + 0xcc, 0x70, 0xb5, 0xa4, 0x0b, 0xc7, 0x69, 0x7b, 0xf2, 0x9b, 0x52, 0x26, 0xc6, 0x0b, 0xb5, 0xaa, + 0xfc, 0x1a, 0x0d, 0x8b, 0xae, 0x4e, 0xe6, 0x92, 0xa9, 0xe5, 0xcf, 0x53, 0xab, 0x73, 0x45, 0x02, + 0x70, 0x82, 0x63, 0xff, 0x60, 0x11, 0xa6, 0x33, 0x5e, 0x4f, 0x58, 0x0e, 0xb7, 0x94, 0xec, 0x91, + 0xa4, 0x6c, 0x33, 0xe3, 0x21, 0x17, 0x0e, 0x11, 0x0f, 0xb9, 0xd8, 0x2f, 0x1e, 0xf2, 0xd0, 0x3b, + 0x89, 0x87, 0x6c, 0x8e, 0xd8, 0xf0, 0x40, 0x23, 0x96, 0x11, 0x43, 0x79, 0xe4, 0x90, 0x31, 0x94, + 0x8d, 0x41, 0x1f, 0xed, 0x3f, 0xe8, 0x74, 0x7b, 0xc7, 0x3c, 0xc4, 0xca, 0x98, 0xb9, 0xbd, 0x45, + 0x7c, 0x15, 0x01, 0xb5, 0x7f, 0xa0, 0x00, 0x33, 0x69, 0x6b, 0xc8, 0x63, 0x50, 0xdb, 0xbe, 0x66, + 0xa8, 0x6d, 0xb3, 0x33, 0x27, 0xa6, 0x6d, 0x34, 0xf3, 0x54, 0xb8, 0x38, 0xa5, 0xc2, 0xfd, 0xe0, + 0x40, 0xd4, 0x7a, 0xab, 0x73, 0xff, 0x61, 0x01, 0x4e, 0xa7, 0xab, 0x2c, 0x35, 0x1d, 0xaf, 0x75, + 0x0c, 0x63, 0x73, 0xcb, 0x18, 0x9b, 0xe7, 0x06, 0xf9, 0x1a, 0xd6, 0xb5, 0xdc, 0x01, 0xba, 0x9b, + 0x1a, 0xa0, 0x2b, 0x83, 0x93, 0xec, 0x3d, 0x4a, 0xdf, 0x28, 0xc2, 0xf9, 0xcc, 0x7a, 0x89, 0xd6, + 0x73, 0xc5, 0xd0, 0x7a, 0x5e, 0x4d, 0x69, 0x3d, 0xed, 0xde, 0xb5, 0x8f, 0x46, 0x0d, 0x2a, 0x7c, + 0x65, 0x59, 0x6c, 0xdd, 0x87, 0x54, 0x81, 0x1a, 0xbe, 0xb2, 0x8a, 0x10, 0x36, 0xe9, 0xfe, 0x45, + 0x52, 0x7d, 0xfe, 0x7b, 0x0b, 0xce, 0x64, 0xce, 0xcd, 0x31, 0xa8, 0xba, 0xd6, 0x4c, 0x55, 0xd7, + 0xd3, 0x03, 0xaf, 0xd6, 0x1c, 0xdd, 0xd7, 0xaf, 0x0e, 0xe5, 0x7c, 0x0b, 0x13, 0xe4, 0x6f, 0xc1, + 0xb8, 0xd3, 0x68, 0x90, 0x28, 0x5a, 0x0d, 0x5c, 0x15, 0x6b, 0xf6, 0x39, 0x26, 0x8f, 0x25, 0xc5, + 0x07, 0xfb, 0xe5, 0xb9, 0x34, 0x89, 0x04, 0x8c, 0x75, 0x0a, 0x66, 0x78, 0xec, 0xc2, 0x91, 0x86, + 0xc7, 0xbe, 0x0a, 0xb0, 0xab, 0xb8, 0xfa, 0xb4, 0x32, 0x40, 0xe3, 0xf7, 0x35, 0x2c, 0xf4, 0x39, + 0x18, 0x8b, 0xc4, 0x75, 0x2f, 0x96, 0xe2, 0x0b, 0x03, 0xce, 0x95, 0xb3, 0x41, 0x9a, 0x66, 0x50, + 0x06, 0xa5, 0x37, 0x51, 0x24, 0xd1, 0xa7, 0x60, 0x26, 0xe2, 0x31, 0x7f, 0x96, 0x9a, 0x4e, 0xc4, + 0x1c, 0x5e, 0xc4, 0x2a, 0x64, 0x91, 0x16, 0xea, 0x29, 0x18, 0xee, 0xc2, 0x46, 0x2b, 0xf2, 0xa3, + 0x58, 0x80, 0x22, 0xbe, 0x30, 0x2f, 0x25, 0x1f, 0x24, 0x32, 0xcd, 0x9e, 0x4a, 0x0f, 0x3f, 0x1b, + 0x78, 0xad, 0x26, 0xfa, 0x1c, 0x00, 0x5d, 0x3e, 0x42, 0xe7, 0x30, 0x9a, 0x7f, 0x78, 0xd2, 0x53, + 0xc5, 0xcd, 0x34, 0xf1, 0x65, 0x5e, 0xaa, 0x15, 0x45, 0x04, 0x6b, 0x04, 0xed, 0x1f, 0x18, 0x82, + 0x27, 0x7a, 0x9c, 0x91, 0x68, 0xc1, 0x7c, 0x37, 0x7e, 0x26, 0x2d, 0x84, 0xcf, 0x65, 0x56, 0x36, + 0xa4, 0xf2, 0xd4, 0x52, 0x2c, 0xbc, 0xe3, 0xa5, 0xf8, 0x7d, 0x96, 0xa6, 0x1e, 0xe1, 0x56, 0x9b, + 0x9f, 0x38, 0xe4, 0xd9, 0x7f, 0x84, 0xfa, 0x92, 0xcd, 0x0c, 0xa5, 0xc3, 0xd5, 0x81, 0xbb, 0x33, + 0xb0, 0x16, 0xe2, 0x78, 0x95, 0xc4, 0x5f, 0xb2, 0xe0, 0xc9, 0xcc, 0xfe, 0x1a, 0xb6, 0x39, 0x57, + 0xa0, 0xd4, 0xa0, 0x85, 0x9a, 0x53, 0x62, 0xe2, 0xad, 0x2d, 0x01, 0x38, 0xc1, 0x31, 0x4c, 0x70, + 0x0a, 0x7d, 0x4d, 0x70, 0xfe, 0x8d, 0x05, 0x5d, 0xfb, 0xe3, 0x18, 0x0e, 0xea, 0xaa, 0x79, 0x50, + 0xbf, 0x7f, 0x90, 0xb9, 0xcc, 0x39, 0xa3, 0xff, 0x70, 0x1a, 0x1e, 0xcb, 0x71, 0xca, 0xd9, 0x85, + 0x13, 0x5b, 0x0d, 0x62, 0xba, 0x7b, 0x8a, 0x8f, 0xc9, 0xf4, 0x8c, 0xed, 0xe9, 0x1b, 0xca, 0xd2, + 0x46, 0x9e, 0xe8, 0x42, 0xc1, 0xdd, 0x4d, 0xa0, 0x2f, 0x59, 0x70, 0xca, 0xb9, 0x17, 0x2d, 0xd3, + 0x0b, 0xd7, 0x6b, 0x2c, 0x36, 0x83, 0xc6, 0x0e, 0x3d, 0xcd, 0xe4, 0x9a, 0x79, 0x31, 0x53, 0x59, + 0x72, 0xb7, 0xde, 0x85, 0x6f, 0x34, 0xcf, 0xf2, 0x68, 0x66, 0x61, 0xe1, 0xcc, 0xb6, 0x10, 0x16, + 0xd1, 0xc7, 0x29, 0xdb, 0xdf, 0xc3, 0x21, 0x39, 0xcb, 0x7b, 0x8a, 0x1f, 0xd9, 0x12, 0x82, 0x15, + 0x1d, 0xf4, 0x05, 0x28, 0x6d, 0x49, 0x97, 0xc6, 0x8c, 0x2b, 0x21, 0x19, 0xc8, 0xde, 0x8e, 0x9e, + 0xfc, 0x21, 0x53, 0x21, 0xe1, 0x84, 0x28, 0x7a, 0x15, 0x8a, 0xfe, 0x66, 0xd4, 0x2b, 0x15, 0x65, + 0xca, 0x78, 0x8d, 0xbb, 0xfd, 0xaf, 0xad, 0xd4, 0x31, 0xad, 0x88, 0xae, 0x43, 0x31, 0xdc, 0x70, + 0x85, 0xa6, 0x2f, 0xf3, 0x0c, 0xc7, 0x8b, 0x95, 0x9c, 0x5e, 0x31, 0x4a, 0x78, 0xb1, 0x82, 0x29, + 0x09, 0x54, 0x83, 0x61, 0xe6, 0xc9, 0x22, 0xee, 0x83, 0x4c, 0xce, 0xb7, 0x87, 0x47, 0x18, 0x8f, + 0x0d, 0xc0, 0x10, 0x30, 0x27, 0x84, 0xd6, 0x61, 0xa4, 0xc1, 0xd2, 0x16, 0x8a, 0xd4, 0x17, 0x1f, + 0xca, 0xd4, 0xe9, 0xf5, 0xc8, 0xe7, 0x28, 0x54, 0x5c, 0x0c, 0x03, 0x0b, 0x5a, 0x8c, 0x2a, 0x69, + 0x6f, 0x6f, 0x46, 0x22, 0xcd, 0x6e, 0x36, 0xd5, 0x1e, 0x69, 0x4a, 0x05, 0x55, 0x86, 0x81, 0x05, + 0x2d, 0xf4, 0x31, 0x28, 0x6c, 0x36, 0x84, 0xa3, 0x4b, 0xa6, 0x72, 0xcf, 0x8c, 0xdc, 0xb0, 0x38, + 0xf2, 0x60, 0xbf, 0x5c, 0x58, 0x59, 0xc2, 0x85, 0xcd, 0x06, 0x5a, 0x83, 0xd1, 0x4d, 0xee, 0xeb, + 0x2d, 0xf4, 0x77, 0x4f, 0x65, 0xbb, 0xa1, 0x77, 0xb9, 0x83, 0x73, 0x07, 0x0d, 0x01, 0xc0, 0x92, + 0x08, 0x0b, 0xe6, 0xad, 0x7c, 0xd6, 0x45, 0x56, 0x8b, 0xf9, 0xc3, 0xc5, 0x19, 0xe0, 0xf7, 0x73, + 0xe2, 0xf9, 0x8e, 0x35, 0x8a, 0x74, 0x55, 0x3b, 0x32, 0xd7, 0xb9, 0x08, 0xca, 0x92, 0xb9, 0xaa, + 0xfb, 0xa4, 0x81, 0xe7, 0xab, 0x5a, 0x21, 0xe1, 0x84, 0x28, 0xda, 0x81, 0xc9, 0xdd, 0xa8, 0xbd, + 0x4d, 0xe4, 0x96, 0x66, 0x31, 0x5a, 0x72, 0xae, 0xb0, 0x3b, 0x02, 0xd1, 0x0b, 0xe3, 0x8e, 0xd3, + 0xec, 0x3a, 0x85, 0xd8, 0xeb, 0xf7, 0x1d, 0x9d, 0x18, 0x36, 0x69, 0xd3, 0xe1, 0x7f, 0xab, 0x13, + 0x6c, 0xec, 0xc5, 0x44, 0xa4, 0xc1, 0xc8, 0x1c, 0xfe, 0xd7, 0x39, 0x4a, 0xf7, 0xf0, 0x0b, 0x00, + 0x96, 0x44, 0xd0, 0x1d, 0x31, 0x3c, 0xec, 0xf4, 0x9c, 0xc9, 0x8f, 0x9a, 0xb5, 0x20, 0x91, 0x72, + 0x06, 0x85, 0x9d, 0x96, 0x09, 0x29, 0x76, 0x4a, 0xb6, 0xb7, 0x83, 0x38, 0xf0, 0x53, 0x27, 0xf4, + 0x89, 0xfc, 0x53, 0xb2, 0x96, 0x81, 0xdf, 0x7d, 0x4a, 0x66, 0x61, 0xe1, 0xcc, 0xb6, 0x90, 0x0b, + 0x53, 0xed, 0x20, 0x8c, 0xef, 0x05, 0xa1, 0x5c, 0x5f, 0xa8, 0x87, 0x5e, 0xc1, 0xc0, 0x14, 0x2d, + 0xb2, 0xb4, 0x2c, 0x26, 0x04, 0xa7, 0x68, 0xa2, 0x4f, 0xc3, 0x68, 0xd4, 0x70, 0x9a, 0xa4, 0x7a, + 0x6b, 0xf6, 0x64, 0xfe, 0xf5, 0x53, 0xe7, 0x28, 0x39, 0xab, 0x8b, 0x4d, 0x8e, 0x40, 0xc1, 0x92, + 0x1c, 0x5a, 0x81, 0x61, 0x96, 0x5b, 0x89, 0x65, 0xf0, 0xc8, 0x09, 0xfe, 0xd5, 0x65, 0x4a, 0xcc, + 0xcf, 0x26, 0x56, 0x8c, 0x79, 0x75, 0xba, 0x07, 0x04, 0x7b, 0x1d, 0x44, 0xb3, 0xa7, 0xf3, 0xf7, + 0x80, 0xe0, 0xca, 0x6f, 0xd5, 0x7b, 0xed, 0x01, 0x85, 0x84, 0x13, 0xa2, 0xf4, 0x64, 0xa6, 0xa7, + 0xe9, 0x63, 0x3d, 0x0c, 0x5f, 0x72, 0xcf, 0x52, 0x76, 0x32, 0xd3, 0x93, 0x94, 0x92, 0xb0, 0x7f, + 0x7b, 0xb4, 0x9b, 0x67, 0x61, 0x02, 0xd9, 0x5f, 0xb5, 0xba, 0xde, 0xf4, 0x3e, 0x3c, 0xa8, 0x7e, + 0xe8, 0x08, 0xb9, 0xd5, 0x2f, 0x59, 0xf0, 0x58, 0x3b, 0xf3, 0x43, 0x04, 0x03, 0x30, 0x98, 0x9a, + 0x89, 0x7f, 0xba, 0xca, 0xb2, 0x93, 0x0d, 0xc7, 0x39, 0x2d, 0xa5, 0x25, 0x82, 0xe2, 0x3b, 0x96, + 0x08, 0x56, 0x61, 0x8c, 0x31, 0x99, 0x7d, 0xd2, 0xf8, 0xa6, 0x05, 0x23, 0xc6, 0x4a, 0x2c, 0x89, + 0x8a, 0x58, 0x91, 0x40, 0xdf, 0x6f, 0xc1, 0xb9, 0x74, 0xd7, 0x31, 0x61, 0x60, 0x23, 0x0f, 0xeb, + 0x8a, 0xf8, 0xfe, 0x73, 0xb5, 0x5e, 0xc8, 0x07, 0xfd, 0x10, 0x70, 0xef, 0xc6, 0x50, 0x25, 0x43, + 0x18, 0x1d, 0x31, 0x15, 0xf5, 0x03, 0x08, 0xa4, 0x2f, 0xc2, 0x44, 0x2b, 0xe8, 0xf8, 0xb1, 0xb0, + 0x93, 0x11, 0xae, 0xa9, 0xec, 0x61, 0x7a, 0x55, 0x2b, 0xc7, 0x06, 0x56, 0x4a, 0x8c, 0x1d, 0x7b, + 0x68, 0x31, 0xf6, 0x4d, 0x98, 0xf0, 0x35, 0xc3, 0x4e, 0xc1, 0x0f, 0x5c, 0xca, 0xcf, 0xb2, 0xa3, + 0x9b, 0x81, 0xf2, 0x5e, 0xea, 0x25, 0xd8, 0xa0, 0x76, 0xbc, 0xb2, 0xd1, 0x4f, 0x5a, 0x19, 0x4c, + 0x3d, 0x97, 0x96, 0x3f, 0x6e, 0x4a, 0xcb, 0x97, 0xd2, 0xd2, 0x72, 0x97, 0xf2, 0xd5, 0x10, 0x94, + 0x07, 0x4f, 0xa0, 0x31, 0x68, 0xc0, 0x40, 0xbb, 0x09, 0x17, 0xfa, 0x5d, 0x4b, 0xcc, 0x60, 0xca, + 0x55, 0x4f, 0x72, 0x89, 0xc1, 0x94, 0x5b, 0xad, 0x60, 0x06, 0x19, 0x34, 0xa2, 0x8c, 0xfd, 0xbf, + 0x2c, 0x28, 0xd6, 0x02, 0xf7, 0x18, 0x94, 0xc9, 0x9f, 0x30, 0x94, 0xc9, 0x4f, 0x64, 0x5f, 0x88, + 0x6e, 0xae, 0xea, 0x78, 0x39, 0xa5, 0x3a, 0x3e, 0x97, 0x47, 0xa0, 0xb7, 0xa2, 0xf8, 0xc7, 0x8a, + 0x30, 0x5e, 0x0b, 0x5c, 0x65, 0xad, 0xfc, 0xab, 0x0f, 0x63, 0xad, 0x9c, 0x1b, 0xff, 0x57, 0xa3, + 0xcc, 0xec, 0xac, 0xa4, 0xb7, 0xe5, 0x9f, 0x33, 0xa3, 0xe5, 0xbb, 0xc4, 0xdb, 0xda, 0x8e, 0x89, + 0x9b, 0xfe, 0x9c, 0xe3, 0x33, 0x5a, 0xfe, 0x9f, 0x16, 0x4c, 0xa7, 0x5a, 0x47, 0x4d, 0x98, 0x6c, + 0xea, 0x9a, 0x40, 0xb1, 0x4e, 0x1f, 0x4a, 0x89, 0x28, 0x8c, 0x3e, 0xb5, 0x22, 0x6c, 0x12, 0x47, + 0xf3, 0x00, 0xea, 0x45, 0x4f, 0x6a, 0xc0, 0x18, 0xd7, 0xaf, 0x9e, 0xfc, 0x22, 0xac, 0x61, 0xa0, + 0x97, 0x60, 0x3c, 0x0e, 0xda, 0x41, 0x33, 0xd8, 0xda, 0x93, 0xf9, 0x49, 0xb4, 0x18, 0x52, 0xeb, + 0x09, 0x08, 0xeb, 0x78, 0xf6, 0x4f, 0x14, 0xf9, 0x87, 0xfa, 0xb1, 0xf7, 0xad, 0x35, 0xf9, 0xde, + 0x5e, 0x93, 0xdf, 0xb0, 0x60, 0x86, 0xb6, 0xce, 0xcc, 0x4a, 0xe4, 0x65, 0xab, 0x12, 0xf9, 0x59, + 0x3d, 0x12, 0xf9, 0x5d, 0xa2, 0x67, 0x97, 0x1b, 0x74, 0x62, 0xa1, 0x41, 0xd3, 0x0e, 0x27, 0x5a, + 0x8a, 0x05, 0x54, 0xe0, 0x91, 0x30, 0x14, 0xce, 0x6e, 0x3a, 0x1e, 0x09, 0x43, 0x2c, 0xa0, 0x32, + 0xcf, 0xdf, 0x50, 0x4e, 0x9e, 0x3f, 0x16, 0x91, 0x51, 0x18, 0x20, 0x08, 0xb6, 0x47, 0x8b, 0xc8, + 0x28, 0x2d, 0x13, 0x12, 0x1c, 0xfb, 0xa7, 0x8b, 0x30, 0x51, 0x0b, 0xdc, 0xe4, 0xad, 0xec, 0x45, + 0xe3, 0xad, 0xec, 0x42, 0xea, 0xad, 0x6c, 0x46, 0xc7, 0xfd, 0xd6, 0xcb, 0xd8, 0xbb, 0xf5, 0x32, + 0xf6, 0xaf, 0x2d, 0x36, 0x6b, 0x95, 0xb5, 0xba, 0x48, 0xda, 0xf2, 0x3c, 0x8c, 0xb3, 0x03, 0x89, + 0x79, 0x57, 0xca, 0x07, 0x24, 0x96, 0x61, 0x61, 0x2d, 0x29, 0xc6, 0x3a, 0x0e, 0xba, 0x0c, 0x63, + 0x11, 0x71, 0xc2, 0xc6, 0xb6, 0x3a, 0xe3, 0xc4, 0xf3, 0x0a, 0x2f, 0xc3, 0x0a, 0x8a, 0x5e, 0x4f, + 0x82, 0x01, 0x16, 0xf3, 0x13, 0x0d, 0xe9, 0xfd, 0xe1, 0x5b, 0x24, 0x3f, 0x02, 0xa0, 0x7d, 0x17, + 0x50, 0x37, 0xfe, 0x00, 0x7e, 0x6b, 0x65, 0x33, 0x0a, 0x56, 0xa9, 0x2b, 0x02, 0xd6, 0x9f, 0x58, + 0x30, 0x55, 0x0b, 0x5c, 0xba, 0x75, 0xff, 0x22, 0xed, 0x53, 0x3d, 0x12, 0xea, 0x48, 0x8f, 0x48, + 0xa8, 0xff, 0xc8, 0x82, 0xd1, 0x5a, 0xe0, 0x1e, 0x83, 0xde, 0xfd, 0xe3, 0xa6, 0xde, 0xfd, 0xf1, + 0x9c, 0x25, 0x91, 0xa3, 0x6a, 0xff, 0xd9, 0x22, 0x4c, 0xd2, 0x7e, 0x06, 0x5b, 0x72, 0x96, 0x8c, + 0x11, 0xb1, 0x06, 0x18, 0x11, 0xca, 0xe6, 0x06, 0xcd, 0x66, 0x70, 0x2f, 0x3d, 0x63, 0x2b, 0xac, + 0x14, 0x0b, 0x28, 0x7a, 0x16, 0xc6, 0xda, 0x21, 0xd9, 0xf5, 0x02, 0xc1, 0x3f, 0x6a, 0xaf, 0x18, + 0x35, 0x51, 0x8e, 0x15, 0x06, 0x95, 0xbb, 0x22, 0xcf, 0x6f, 0x90, 0x3a, 0x69, 0x04, 0xbe, 0xcb, + 0x55, 0xd3, 0x45, 0x11, 0xe2, 0x5c, 0x2b, 0xc7, 0x06, 0x16, 0xba, 0x0b, 0x25, 0xf6, 0x9f, 0x9d, + 0x28, 0x87, 0xcf, 0x40, 0x28, 0xf2, 0x8a, 0x08, 0x02, 0x38, 0xa1, 0x85, 0xae, 0x02, 0xc4, 0x32, + 0x0c, 0x76, 0x24, 0x5c, 0x1f, 0x15, 0xaf, 0xad, 0x02, 0x64, 0x47, 0x58, 0xc3, 0x42, 0xcf, 0x40, + 0x29, 0x76, 0xbc, 0xe6, 0x4d, 0xcf, 0x27, 0x11, 0x53, 0x39, 0x17, 0x65, 0xda, 0x10, 0x51, 0x88, + 0x13, 0x38, 0xe5, 0x75, 0x98, 0xa7, 0x3f, 0xcf, 0x5f, 0x3a, 0xc6, 0xb0, 0x19, 0xaf, 0x73, 0x53, + 0x95, 0x62, 0x0d, 0xc3, 0x7e, 0x19, 0x4e, 0xd7, 0x02, 0xb7, 0x16, 0x84, 0xf1, 0x4a, 0x10, 0xde, + 0x73, 0x42, 0x57, 0xce, 0x5f, 0x59, 0x66, 0xb0, 0xa0, 0x67, 0xcf, 0x30, 0xdf, 0x99, 0x46, 0x6e, + 0x8a, 0x17, 0x18, 0xb7, 0x73, 0x48, 0xe7, 0x8f, 0x06, 0xbb, 0x77, 0x55, 0xaa, 0xe2, 0x6b, 0x4e, + 0x4c, 0xd0, 0x2d, 0x96, 0x10, 0x2e, 0xb9, 0x82, 0x44, 0xf5, 0xa7, 0xb5, 0x84, 0x70, 0x09, 0x30, + 0xf3, 0xce, 0x32, 0xeb, 0xdb, 0x3f, 0x35, 0xc4, 0x4e, 0xa3, 0x54, 0xe6, 0x5e, 0xf4, 0x79, 0x98, + 0x8a, 0xc8, 0x4d, 0xcf, 0xef, 0xdc, 0x97, 0x42, 0x78, 0x0f, 0xf7, 0x9d, 0xfa, 0xb2, 0x8e, 0xc9, + 0x55, 0x79, 0x66, 0x19, 0x4e, 0x51, 0xa3, 0xf3, 0x14, 0x76, 0xfc, 0x85, 0xe8, 0x76, 0x44, 0x42, + 0x91, 0x39, 0x96, 0xcd, 0x13, 0x96, 0x85, 0x38, 0x81, 0xd3, 0x75, 0xc9, 0xfe, 0xac, 0x05, 0x3e, + 0x0e, 0x82, 0x58, 0xae, 0x64, 0x96, 0xd3, 0x4c, 0x2b, 0xc7, 0x06, 0x16, 0x5a, 0x01, 0x14, 0x75, + 0xda, 0xed, 0x26, 0x7b, 0xd8, 0x77, 0x9a, 0x2c, 0x8d, 0x14, 0x7f, 0xf5, 0x2c, 0xf2, 0x08, 0x94, + 0xf5, 0x2e, 0x28, 0xce, 0xa8, 0x41, 0x4f, 0x9f, 0xcd, 0x88, 0xfd, 0x66, 0xab, 0xbb, 0x28, 0xd4, + 0xeb, 0x75, 0x56, 0x84, 0x25, 0x8c, 0x2e, 0x26, 0xd6, 0x3c, 0xc7, 0x1c, 0x49, 0x16, 0x13, 0x56, + 0xa5, 0x58, 0xc3, 0x40, 0xcb, 0x30, 0x1a, 0xed, 0x45, 0x8d, 0x58, 0x84, 0xde, 0xca, 0xc9, 0x01, + 0x5e, 0x67, 0x28, 0x5a, 0xda, 0x10, 0x5e, 0x05, 0xcb, 0xba, 0xa8, 0x05, 0x53, 0xf7, 0x3c, 0xdf, + 0x0d, 0xee, 0x45, 0x72, 0xa2, 0xc6, 0xf2, 0x55, 0xa3, 0x77, 0x39, 0x66, 0x6a, 0xb2, 0x8d, 0x79, + 0xbb, 0x6b, 0x10, 0xc3, 0x29, 0xe2, 0xf6, 0x77, 0xb0, 0xbb, 0x97, 0xa5, 0x35, 0x8d, 0x3b, 0x21, + 0x41, 0x2d, 0x98, 0x6c, 0xb3, 0x15, 0x26, 0x62, 0xa2, 0x8b, 0x65, 0xf2, 0xe2, 0x80, 0x42, 0xf4, + 0x3d, 0x7a, 0xae, 0x29, 0x25, 0x17, 0x93, 0x4e, 0x6a, 0x3a, 0x39, 0x6c, 0x52, 0xb7, 0xff, 0xf4, + 0x14, 0x3b, 0xe2, 0xeb, 0x5c, 0x32, 0x1e, 0x15, 0x16, 0xcf, 0x42, 0x0c, 0x98, 0xcb, 0x57, 0xd1, + 0x24, 0x03, 0x28, 0xac, 0xa6, 0xb1, 0xac, 0x8b, 0x5e, 0x67, 0x8f, 0xe2, 0xfc, 0x5c, 0xed, 0xe9, + 0x1c, 0xaf, 0x0e, 0x62, 0xe3, 0xfd, 0x5b, 0x54, 0xc4, 0x1a, 0x11, 0x74, 0x93, 0x67, 0xba, 0x73, + 0xc2, 0x58, 0xe8, 0xe0, 0x8a, 0x86, 0x8e, 0x65, 0x12, 0xeb, 0xc0, 0x83, 0x74, 0x01, 0x36, 0x2b, + 0xa3, 0x2d, 0x38, 0xa7, 0xa5, 0x84, 0xbe, 0x16, 0x3a, 0xec, 0xa1, 0xd4, 0x63, 0x7b, 0x56, 0x3b, + 0xa6, 0x9f, 0x7c, 0xb0, 0x5f, 0x3e, 0xb7, 0xde, 0x0b, 0x11, 0xf7, 0xa6, 0x83, 0x6e, 0xc1, 0x69, + 0xee, 0x58, 0x58, 0x21, 0x8e, 0xdb, 0xf4, 0x7c, 0x75, 0x0f, 0xf0, 0x65, 0x7f, 0xe6, 0xc1, 0x7e, + 0xf9, 0xf4, 0x42, 0x16, 0x02, 0xce, 0xae, 0x87, 0x3e, 0x0e, 0x25, 0xd7, 0x8f, 0xc4, 0x18, 0x8c, + 0x18, 0xd9, 0xce, 0x4b, 0x95, 0xb5, 0xba, 0xfa, 0xfe, 0xe4, 0x0f, 0x4e, 0x2a, 0xa0, 0x2d, 0xae, + 0x87, 0x53, 0x62, 0xef, 0x68, 0x57, 0x74, 0x94, 0xb4, 0x02, 0xc5, 0x70, 0x2d, 0xe2, 0x0a, 0x68, + 0x65, 0x9a, 0x6b, 0x78, 0x1d, 0x19, 0x84, 0xd1, 0x6b, 0x80, 0x44, 0xaa, 0xb9, 0x85, 0x06, 0x0b, + 0x4d, 0xcf, 0xd4, 0x96, 0x63, 0x86, 0x2b, 0x07, 0xaa, 0x77, 0x61, 0xe0, 0x8c, 0x5a, 0xe8, 0xba, + 0x4a, 0x72, 0x27, 0x4a, 0x85, 0x89, 0xb1, 0x94, 0x25, 0x66, 0x2b, 0xa4, 0x1d, 0x92, 0x86, 0x13, + 0x13, 0xd7, 0xa4, 0x88, 0x53, 0xf5, 0xe8, 0xd5, 0xad, 0xb2, 0x54, 0x81, 0x19, 0x8e, 0xa5, 0x3b, + 0x53, 0x15, 0x15, 0xc3, 0xb7, 0x83, 0x28, 0x5e, 0x23, 0xf1, 0xbd, 0x20, 0xdc, 0x11, 0xd1, 0xef, + 0x92, 0x40, 0xac, 0x09, 0x08, 0xeb, 0x78, 0x94, 0xed, 0x66, 0xaf, 0xd2, 0xd5, 0x0a, 0x7b, 0x10, + 0x1c, 0x4b, 0xf6, 0xc9, 0x75, 0x5e, 0x8c, 0x25, 0x5c, 0xa2, 0x56, 0x6b, 0x4b, 0xec, 0x71, 0x2f, + 0x85, 0x5a, 0xad, 0x2d, 0x61, 0x09, 0x47, 0xa4, 0x3b, 0x93, 0xfc, 0x54, 0xbe, 0x12, 0xb5, 0xfb, + 0xf6, 0x19, 0x30, 0x99, 0xbc, 0x0f, 0x33, 0x2a, 0x87, 0x3d, 0x0f, 0x0b, 0x18, 0xcd, 0x4e, 0xb3, + 0x45, 0x32, 0x78, 0x4c, 0xc1, 0x24, 0x81, 0x61, 0x8a, 0x12, 0xee, 0xa2, 0x6d, 0x04, 0xc8, 0x99, + 0xe9, 0x9b, 0x65, 0xec, 0x0a, 0x94, 0xa2, 0xce, 0x86, 0x1b, 0xb4, 0x1c, 0xcf, 0x67, 0x6f, 0x71, + 0x1a, 0x4f, 0x57, 0x97, 0x00, 0x9c, 0xe0, 0xa0, 0x15, 0x18, 0x73, 0xa4, 0xce, 0x19, 0xe5, 0x07, + 0x53, 0x50, 0x9a, 0x66, 0xee, 0x5f, 0x2c, 0xb5, 0xcc, 0xaa, 0x2e, 0x7a, 0x05, 0x26, 0x85, 0x3b, + 0x19, 0x8f, 0xb7, 0xc1, 0xde, 0xca, 0x34, 0x7f, 0x81, 0xba, 0x0e, 0xc4, 0x26, 0x2e, 0xfa, 0x1c, + 0x4c, 0x51, 0x2a, 0xc9, 0xc1, 0x36, 0x7b, 0x6a, 0x90, 0x13, 0x51, 0xcb, 0x1e, 0xa3, 0x57, 0xc6, + 0x29, 0x62, 0xc8, 0x85, 0xb3, 0x4e, 0x27, 0x0e, 0x98, 0xde, 0xde, 0x5c, 0xff, 0xeb, 0xc1, 0x0e, + 0xf1, 0xd9, 0x93, 0xd9, 0xd8, 0xe2, 0x85, 0x07, 0xfb, 0xe5, 0xb3, 0x0b, 0x3d, 0xf0, 0x70, 0x4f, + 0x2a, 0xe8, 0x36, 0x8c, 0xc7, 0x41, 0x53, 0xe4, 0x4d, 0x8d, 0x66, 0x1f, 0xcb, 0x0f, 0x30, 0xb5, + 0xae, 0xd0, 0x74, 0x9d, 0x95, 0xaa, 0x8a, 0x75, 0x3a, 0x68, 0x9d, 0xef, 0x31, 0x16, 0x7a, 0x97, + 0x44, 0xb3, 0x8f, 0xe7, 0x0f, 0x8c, 0x8a, 0xd0, 0x6b, 0x6e, 0x41, 0x51, 0x13, 0xeb, 0x64, 0xd0, + 0x35, 0x38, 0xd1, 0x0e, 0xbd, 0x80, 0x2d, 0x6c, 0xf5, 0x66, 0x32, 0x6b, 0x26, 0x0c, 0xa9, 0xa5, + 0x11, 0x70, 0x77, 0x1d, 0x2a, 0xd3, 0xca, 0xc2, 0xd9, 0x33, 0x3c, 0xfb, 0x1c, 0xe7, 0xf3, 0x79, + 0x19, 0x56, 0x50, 0xb4, 0xca, 0xce, 0x65, 0x2e, 0x7d, 0xce, 0xce, 0xe5, 0x07, 0xa1, 0xd0, 0xa5, + 0x54, 0xce, 0x9e, 0xa9, 0xbf, 0x38, 0xa1, 0x40, 0xef, 0x8d, 0x68, 0xdb, 0x09, 0x49, 0x2d, 0x0c, + 0x1a, 0x24, 0xd2, 0xa2, 0x7d, 0x3f, 0xc1, 0x23, 0x84, 0xd2, 0x7b, 0xa3, 0x9e, 0x85, 0x80, 0xb3, + 0xeb, 0x21, 0x17, 0xa6, 0x42, 0x9d, 0xeb, 0x8d, 0x66, 0xcf, 0xf6, 0xb0, 0x6f, 0x4a, 0xb1, 0xc8, + 0xc9, 0x5a, 0x34, 0x8a, 0x23, 0x9c, 0xa2, 0x89, 0x3e, 0x05, 0x33, 0x22, 0xa0, 0x56, 0x32, 0xee, + 0xe7, 0x12, 0xc3, 0x49, 0x9c, 0x82, 0xe1, 0x2e, 0x6c, 0x1e, 0xe3, 0xdc, 0xd9, 0x68, 0x12, 0xb1, + 0x08, 0x6f, 0x7a, 0xfe, 0x4e, 0x34, 0x7b, 0x9e, 0x7d, 0xb5, 0x88, 0x71, 0x9e, 0x86, 0xe2, 0x8c, + 0x1a, 0x68, 0x1d, 0x66, 0xda, 0x21, 0x21, 0x2d, 0xc6, 0x63, 0x89, 0xeb, 0xb2, 0xcc, 0xbd, 0x86, + 0x69, 0x4f, 0x6a, 0x29, 0xd8, 0x41, 0x46, 0x19, 0xee, 0xa2, 0x40, 0x59, 0xf8, 0x5d, 0x6e, 0xfd, + 0x20, 0x5c, 0x96, 0x66, 0x2f, 0xe4, 0xb3, 0xf0, 0x77, 0x0c, 0x4c, 0xce, 0x0a, 0x9a, 0x65, 0x38, + 0x45, 0x8d, 0x4a, 0xf9, 0xbb, 0xed, 0xc6, 0xec, 0x93, 0xa6, 0x0b, 0xf4, 0x9d, 0xda, 0x12, 0xa6, + 0xe5, 0xe8, 0xa3, 0x30, 0xe4, 0x7b, 0x8d, 0x68, 0xd6, 0xce, 0x17, 0x91, 0xd7, 0x3c, 0xed, 0xcd, + 0x63, 0xcd, 0x6b, 0x44, 0x98, 0x55, 0x41, 0x9f, 0x86, 0x09, 0x99, 0x90, 0x9a, 0xf9, 0x02, 0x5e, + 0xcc, 0xdf, 0xc0, 0x4b, 0x41, 0xab, 0x15, 0xf8, 0xcc, 0x0f, 0x50, 0x5d, 0xf5, 0x77, 0xb5, 0xba, + 0xd8, 0xa0, 0x34, 0xf7, 0x49, 0x38, 0xd1, 0xc5, 0x23, 0x1c, 0x2a, 0x03, 0xc3, 0xbf, 0x1b, 0x85, + 0x92, 0x7a, 0x6d, 0x41, 0x57, 0xcc, 0x47, 0xb4, 0x33, 0xe9, 0x47, 0xb4, 0x31, 0x2a, 0xf4, 0xe9, + 0xef, 0x66, 0xeb, 0x86, 0x05, 0x66, 0x21, 0x3f, 0xdf, 0xa1, 0x2e, 0xb6, 0xf5, 0xf5, 0xfa, 0xd4, + 0x94, 0x67, 0xc5, 0x81, 0x5f, 0xe3, 0x7a, 0xc6, 0xe7, 0xa2, 0x78, 0xfc, 0x36, 0x4f, 0xeb, 0xed, + 0xf8, 0x65, 0x8f, 0x05, 0x14, 0x5d, 0xa4, 0x92, 0xaf, 0x5b, 0xad, 0xa5, 0x13, 0xbc, 0xd7, 0x68, + 0x21, 0xe6, 0x30, 0xa6, 0x21, 0x60, 0x49, 0x88, 0xbd, 0x16, 0x79, 0x88, 0x3c, 0x59, 0xc2, 0x18, + 0x42, 0x10, 0xc0, 0x09, 0x2d, 0xd4, 0x84, 0x13, 0x0d, 0x33, 0x37, 0xbf, 0xf2, 0xf4, 0xbc, 0xd8, + 0x37, 0x4b, 0x7e, 0x47, 0xcb, 0x53, 0xb9, 0x94, 0xa6, 0x82, 0xbb, 0x09, 0xa3, 0x57, 0x60, 0xec, + 0xad, 0x20, 0x62, 0xdb, 0x5f, 0x70, 0x75, 0xd2, 0x23, 0x6e, 0xec, 0xf5, 0x5b, 0x75, 0x56, 0x7e, + 0xb0, 0x5f, 0x1e, 0xaf, 0x05, 0xae, 0xfc, 0x8b, 0x55, 0x05, 0x74, 0x1f, 0x4e, 0x1b, 0x77, 0xa1, + 0xea, 0x2e, 0x0c, 0xde, 0xdd, 0x73, 0xa2, 0xb9, 0xd3, 0xd5, 0x2c, 0x4a, 0x38, 0xbb, 0x01, 0x7a, + 0xc1, 0xf8, 0x01, 0x63, 0xfb, 0x89, 0x2b, 0x39, 0x47, 0xc6, 0x20, 0x96, 0xf4, 0x78, 0x08, 0x29, + 0x04, 0xdc, 0x5d, 0x07, 0xed, 0xc2, 0x29, 0xf3, 0x08, 0xe0, 0x4d, 0x08, 0x53, 0xb2, 0xcb, 0xfd, + 0x8f, 0x15, 0xf1, 0x19, 0xcc, 0xb8, 0x28, 0x0b, 0x82, 0x33, 0xe9, 0xd3, 0x7b, 0xd7, 0xf7, 0x1a, + 0x6a, 0xc0, 0x26, 0x7b, 0xc4, 0x2f, 0x93, 0x51, 0xf0, 0x92, 0x7b, 0x57, 0x15, 0xd1, 0x7b, 0x57, + 0x23, 0x63, 0xff, 0x02, 0x7f, 0x6a, 0x13, 0x2d, 0x93, 0xa8, 0xd3, 0x3c, 0x8e, 0x1c, 0x7d, 0xcb, + 0xc6, 0x5b, 0xc1, 0x43, 0x3f, 0xe7, 0xfe, 0x8a, 0xc5, 0x9e, 0x73, 0xd7, 0x49, 0xab, 0xdd, 0x74, + 0xe2, 0xe3, 0xf0, 0x17, 0x7b, 0x1d, 0xc6, 0x62, 0xd1, 0x5a, 0xaf, 0xb4, 0x82, 0x5a, 0xa7, 0xd8, + 0x93, 0xb6, 0xe2, 0x90, 0x65, 0x29, 0x56, 0x64, 0xec, 0x7f, 0xc1, 0x67, 0x40, 0x42, 0x8e, 0x41, + 0x6f, 0x5b, 0x31, 0xf5, 0xb6, 0xe5, 0x3e, 0x5f, 0x90, 0xa3, 0xbf, 0xfd, 0xe7, 0x66, 0xbf, 0x99, + 0x32, 0xe2, 0xbd, 0x6e, 0x47, 0x60, 0xff, 0xa0, 0x05, 0xa7, 0xb2, 0x0c, 0xef, 0xa8, 0x54, 0xc3, + 0x55, 0x21, 0xca, 0xae, 0x42, 0x8d, 0xe0, 0x1d, 0x51, 0x8e, 0x15, 0xc6, 0xc0, 0x19, 0x7b, 0x0e, + 0x17, 0xc1, 0xf2, 0x16, 0x4c, 0xd6, 0x42, 0xa2, 0xdd, 0x68, 0xaf, 0x72, 0x47, 0x51, 0xde, 0x9f, + 0x67, 0x0f, 0xed, 0x24, 0x6a, 0x7f, 0xb5, 0x00, 0xa7, 0xf8, 0xc3, 0xe8, 0xc2, 0x6e, 0xe0, 0xb9, + 0xb5, 0xc0, 0x15, 0xd9, 0x96, 0xde, 0x80, 0x89, 0xb6, 0xa6, 0xbf, 0xea, 0x15, 0x82, 0x4d, 0xd7, + 0x73, 0x25, 0xcc, 0x85, 0x5e, 0x8a, 0x0d, 0x5a, 0xc8, 0x85, 0x09, 0xb2, 0xeb, 0x35, 0xd4, 0xeb, + 0x5a, 0xe1, 0xd0, 0x37, 0x9d, 0x6a, 0x65, 0x59, 0xa3, 0x83, 0x0d, 0xaa, 0x8f, 0x20, 0x01, 0xa7, + 0xfd, 0x43, 0x16, 0x3c, 0x9e, 0x13, 0xb0, 0x8d, 0x36, 0x77, 0x8f, 0x3d, 0x41, 0x8b, 0x5c, 0x7e, + 0xaa, 0x39, 0xfe, 0x30, 0x8d, 0x05, 0x14, 0x7d, 0x1a, 0x80, 0x3f, 0x2c, 0x53, 0xb1, 0xba, 0x5f, + 0x64, 0x2b, 0x23, 0x28, 0x8f, 0x16, 0x4c, 0x45, 0xd6, 0xc7, 0x1a, 0x2d, 0xfb, 0xc7, 0x8b, 0x30, + 0xcc, 0x1e, 0x32, 0xd1, 0x0a, 0x8c, 0x6e, 0xf3, 0x18, 0xf4, 0x83, 0x84, 0xbb, 0x4f, 0xf4, 0x13, + 0xbc, 0x00, 0xcb, 0xca, 0x68, 0x15, 0x4e, 0xf2, 0x18, 0xfe, 0xcd, 0x0a, 0x69, 0x3a, 0x7b, 0x52, + 0xcd, 0xc5, 0xf3, 0xdf, 0xa9, 0xc0, 0x30, 0xd5, 0x6e, 0x14, 0x9c, 0x55, 0x0f, 0xbd, 0x0a, 0x53, + 0x54, 0x2e, 0x08, 0x3a, 0xb1, 0xa4, 0xc4, 0xa3, 0xf7, 0x2b, 0x41, 0x64, 0xdd, 0x80, 0xe2, 0x14, + 0x36, 0x15, 0xd8, 0xdb, 0x5d, 0x0a, 0xbd, 0xe1, 0x44, 0x60, 0x37, 0x95, 0x78, 0x26, 0x2e, 0xb3, + 0xb8, 0xeb, 0x30, 0xfb, 0xc2, 0xf5, 0xed, 0x90, 0x44, 0xdb, 0x41, 0xd3, 0x65, 0x2c, 0xdb, 0xb0, + 0x66, 0x71, 0x97, 0x82, 0xe3, 0xae, 0x1a, 0x94, 0xca, 0xa6, 0xe3, 0x35, 0x3b, 0x21, 0x49, 0xa8, + 0x8c, 0x98, 0x54, 0x56, 0x52, 0x70, 0xdc, 0x55, 0x83, 0xae, 0xa3, 0xd3, 0xb5, 0x30, 0xa0, 0x87, + 0x97, 0x0c, 0x57, 0xa1, 0xcc, 0x28, 0x47, 0xa5, 0x43, 0x5e, 0x8f, 0x78, 0x4d, 0xc2, 0xd0, 0x8c, + 0x53, 0x30, 0xde, 0x50, 0xeb, 0xc2, 0x15, 0x4f, 0x52, 0x79, 0x98, 0xac, 0xfa, 0xdf, 0x5b, 0x80, + 0x93, 0x19, 0xe6, 0xda, 0xfc, 0xa8, 0xda, 0xf2, 0xa2, 0x58, 0xe5, 0xf8, 0xd2, 0x8e, 0x2a, 0x5e, + 0x8e, 0x15, 0x06, 0xdd, 0x0f, 0xfc, 0x30, 0x4c, 0x1f, 0x80, 0xc2, 0x1c, 0x52, 0x40, 0x0f, 0x99, + 0x2d, 0xeb, 0x02, 0x0c, 0x75, 0x22, 0x22, 0x23, 0xad, 0xa9, 0xf3, 0x9b, 0x3d, 0x84, 0x30, 0x08, + 0x65, 0xb4, 0xb7, 0xd4, 0x1b, 0x84, 0xc6, 0x68, 0xf3, 0x87, 0x05, 0x0e, 0xd3, 0x7c, 0xce, 0x47, + 0x7a, 0xfa, 0x9c, 0x7f, 0xa5, 0x08, 0x67, 0x72, 0x1d, 0x38, 0x68, 0xd7, 0x5b, 0x81, 0xef, 0xc5, + 0x81, 0x7a, 0x4c, 0xe7, 0x31, 0x81, 0x48, 0x7b, 0x7b, 0x55, 0x94, 0x63, 0x85, 0x81, 0x2e, 0xc1, + 0x30, 0xd3, 0x94, 0x75, 0x65, 0x3b, 0x5b, 0xac, 0xf0, 0x00, 0x13, 0x1c, 0x3c, 0x70, 0x26, 0xc9, + 0x8b, 0x30, 0xd4, 0x0e, 0x82, 0x66, 0xfa, 0xd0, 0xa2, 0xdd, 0x0d, 0x82, 0x26, 0x66, 0x40, 0xf4, + 0x01, 0x31, 0x5e, 0xa9, 0xd7, 0x63, 0xec, 0xb8, 0x41, 0xa4, 0x0d, 0xda, 0xd3, 0x30, 0xba, 0x43, + 0xf6, 0x42, 0xcf, 0xdf, 0x4a, 0x5b, 0x15, 0xdc, 0xe0, 0xc5, 0x58, 0xc2, 0xcd, 0xdc, 0x37, 0xa3, + 0x47, 0x9d, 0x02, 0x72, 0xac, 0xef, 0x15, 0xf8, 0x7d, 0x45, 0x98, 0xc6, 0x8b, 0x95, 0x6f, 0x4d, + 0xc4, 0xed, 0xee, 0x89, 0x38, 0xea, 0x14, 0x90, 0xfd, 0x67, 0xe3, 0x67, 0x2d, 0x98, 0x66, 0xf1, + 0xe1, 0x45, 0x24, 0x1a, 0x2f, 0xf0, 0x8f, 0x81, 0xc5, 0xbb, 0x08, 0xc3, 0x21, 0x6d, 0x34, 0x9d, + 0xe6, 0x8c, 0xf5, 0x04, 0x73, 0x18, 0x3a, 0x0b, 0x43, 0xac, 0x0b, 0x74, 0xf2, 0x26, 0x78, 0x86, + 0x98, 0x8a, 0x13, 0x3b, 0x98, 0x95, 0xda, 0x6b, 0x30, 0x81, 0xc9, 0x46, 0x10, 0xc8, 0x6c, 0x74, + 0xaf, 0xc2, 0x94, 0x4b, 0xef, 0xaa, 0xaa, 0x2f, 0x2f, 0x17, 0xcb, 0xbc, 0x9b, 0x2a, 0x06, 0x14, + 0xa7, 0xb0, 0x13, 0x7a, 0x35, 0x27, 0x74, 0x5a, 0xd1, 0x3b, 0xa6, 0xb7, 0x2e, 0xe9, 0x09, 0xd9, + 0xae, 0x02, 0x33, 0x21, 0xff, 0xcf, 0xaf, 0xa4, 0xcd, 0x4e, 0x53, 0x98, 0xaa, 0xa8, 0x8b, 0x07, + 0xa7, 0xe0, 0xb8, 0xab, 0x06, 0x0b, 0x16, 0x81, 0x49, 0xbb, 0xe9, 0xf1, 0xa9, 0x4a, 0x1e, 0x0c, + 0xdf, 0x1b, 0xc1, 0x22, 0x32, 0xbb, 0xf6, 0xce, 0x82, 0x45, 0x64, 0x93, 0xec, 0x2d, 0x34, 0xfe, + 0x41, 0x01, 0xce, 0x67, 0xd6, 0x1b, 0x38, 0x58, 0x44, 0xef, 0xda, 0x47, 0x63, 0x12, 0x97, 0x6d, + 0xa9, 0x56, 0x3c, 0x46, 0x4b, 0xb5, 0xa1, 0x41, 0xf9, 0xea, 0xe1, 0x01, 0x62, 0x38, 0x64, 0x0e, + 0xd9, 0x7b, 0x24, 0x86, 0x43, 0x66, 0xdf, 0x72, 0x84, 0xde, 0x3f, 0x2b, 0xe4, 0x7c, 0x0b, 0x13, + 0x7f, 0x2f, 0xd3, 0xd3, 0x95, 0x01, 0xe5, 0x81, 0x30, 0xc1, 0x4f, 0x56, 0x5e, 0x86, 0x15, 0x14, + 0x79, 0x5a, 0x34, 0x84, 0x42, 0x7e, 0xae, 0xe3, 0xdc, 0xa6, 0xe6, 0xcd, 0xf7, 0x5d, 0x35, 0x04, + 0x19, 0x91, 0x11, 0x56, 0x35, 0x95, 0x45, 0x71, 0x70, 0x95, 0xc5, 0x44, 0xb6, 0xba, 0x02, 0x2d, + 0xc0, 0x74, 0xcb, 0xf3, 0xe9, 0x65, 0xb1, 0x67, 0x32, 0xea, 0x2a, 0x88, 0xd0, 0xaa, 0x09, 0xc6, + 0x69, 0xfc, 0xb9, 0x57, 0x60, 0xf2, 0xe1, 0x55, 0xcf, 0xdf, 0x28, 0xc2, 0x13, 0x3d, 0xb6, 0x3d, + 0xbf, 0xe1, 0x8c, 0x39, 0xd0, 0x6e, 0xb8, 0xae, 0x79, 0xa8, 0xc1, 0xa9, 0xcd, 0x4e, 0xb3, 0xb9, + 0xc7, 0x8c, 0xc1, 0x89, 0x2b, 0x31, 0x04, 0x27, 0x2d, 0x73, 0x3d, 0x9c, 0x5a, 0xc9, 0xc0, 0xc1, + 0x99, 0x35, 0xd1, 0x6b, 0x80, 0x02, 0x91, 0x68, 0xfd, 0x1a, 0xf1, 0xc5, 0xab, 0x19, 0x1b, 0xf8, + 0x62, 0xb2, 0x19, 0x6f, 0x75, 0x61, 0xe0, 0x8c, 0x5a, 0x54, 0x24, 0xa2, 0x77, 0xf1, 0x9e, 0xea, + 0x56, 0x4a, 0x24, 0xc2, 0x3a, 0x10, 0x9b, 0xb8, 0xe8, 0x1a, 0x9c, 0x70, 0x76, 0x1d, 0x8f, 0x07, + 0xd7, 0x94, 0x04, 0xb8, 0x4c, 0xa4, 0x14, 0x9e, 0x0b, 0x69, 0x04, 0xdc, 0x5d, 0x27, 0x15, 0x2f, + 0x61, 0x24, 0x3f, 0x5e, 0x42, 0xef, 0x73, 0xb1, 0x9f, 0xfe, 0xde, 0xfe, 0x6f, 0x16, 0xbd, 0xbe, + 0xb8, 0x68, 0x63, 0x86, 0x07, 0x7b, 0x85, 0x99, 0x7b, 0x71, 0x85, 0xae, 0x16, 0xba, 0xe0, 0xb4, + 0x66, 0xee, 0x95, 0x00, 0xb1, 0x89, 0xcb, 0x17, 0x44, 0x94, 0x78, 0xcc, 0x19, 0x82, 0x8d, 0x08, + 0x7d, 0xa2, 0x30, 0xd0, 0x67, 0x60, 0xd4, 0xf5, 0x76, 0xbd, 0x28, 0x08, 0xc5, 0x66, 0x39, 0xa4, + 0xdf, 0x51, 0x72, 0x0e, 0x56, 0x38, 0x19, 0x2c, 0xe9, 0xd9, 0xdf, 0x57, 0x80, 0x49, 0xd9, 0xe2, + 0xeb, 0x9d, 0x20, 0x76, 0x8e, 0xe1, 0x5a, 0xbe, 0x66, 0x5c, 0xcb, 0x1f, 0xe8, 0x15, 0xff, 0x85, + 0x75, 0x29, 0xf7, 0x3a, 0xbe, 0x95, 0xba, 0x8e, 0x9f, 0xea, 0x4f, 0xaa, 0xf7, 0x35, 0xfc, 0x2f, + 0x2d, 0x38, 0x61, 0xe0, 0x1f, 0xc3, 0x6d, 0xb0, 0x62, 0xde, 0x06, 0x4f, 0xf6, 0xfd, 0x86, 0x9c, + 0x5b, 0xe0, 0xbb, 0x8b, 0xa9, 0xbe, 0xb3, 0xd3, 0xff, 0x2d, 0x18, 0xda, 0x76, 0x42, 0xb7, 0x57, + 0x3c, 0xea, 0xae, 0x4a, 0xf3, 0xd7, 0x9d, 0xd0, 0xe5, 0x67, 0xf8, 0xb3, 0x2a, 0x5b, 0xb1, 0x13, + 0xba, 0x7d, 0x1d, 0x44, 0x59, 0x53, 0xe8, 0x65, 0x18, 0x89, 0x1a, 0x41, 0x5b, 0x99, 0x6f, 0x5f, + 0xe0, 0x99, 0x8c, 0x69, 0xc9, 0xc1, 0x7e, 0x19, 0x99, 0xcd, 0xd1, 0x62, 0x2c, 0xf0, 0xd1, 0x1b, + 0x30, 0xc9, 0x7e, 0x29, 0xbb, 0xa2, 0x62, 0x7e, 0x4a, 0x98, 0xba, 0x8e, 0xc8, 0xcd, 0xd3, 0x8c, + 0x22, 0x6c, 0x92, 0x9a, 0xdb, 0x82, 0x92, 0xfa, 0xac, 0x47, 0xea, 0xd8, 0xf7, 0x9f, 0x8a, 0x70, + 0x32, 0x63, 0xcd, 0xa1, 0xc8, 0x98, 0x89, 0xe7, 0x07, 0x5c, 0xaa, 0xef, 0x70, 0x2e, 0x22, 0x26, + 0x03, 0xba, 0x62, 0x6d, 0x0d, 0xdc, 0xe8, 0xed, 0x88, 0xa4, 0x1b, 0xa5, 0x45, 0xfd, 0x1b, 0xa5, + 0x8d, 0x1d, 0xdb, 0x50, 0xd3, 0x86, 0x54, 0x4f, 0x1f, 0xe9, 0x9c, 0xfe, 0x51, 0x11, 0x4e, 0x65, + 0x85, 0xa4, 0x42, 0xdf, 0x9e, 0x4a, 0x69, 0xf6, 0xe2, 0xa0, 0xc1, 0xac, 0x78, 0x9e, 0x33, 0xae, + 0xf9, 0x5e, 0x9c, 0x37, 0x93, 0x9c, 0xf5, 0x1d, 0x66, 0xd1, 0x26, 0xf3, 0x06, 0x0f, 0x79, 0x2a, + 0x3a, 0x79, 0x7c, 0x7c, 0x78, 0xe0, 0x0e, 0x88, 0x1c, 0x76, 0x51, 0xca, 0x1b, 0x5c, 0x16, 0xf7, + 0xf7, 0x06, 0x97, 0x2d, 0xcf, 0x79, 0x30, 0xae, 0x7d, 0xcd, 0x23, 0x9d, 0xf1, 0x1d, 0x7a, 0x5b, + 0x69, 0xfd, 0x7e, 0xa4, 0xb3, 0xbe, 0xc4, 0xae, 0xc6, 0x38, 0x08, 0x89, 0x90, 0xd8, 0xaf, 0x02, + 0x44, 0xbe, 0xd3, 0x8e, 0xb6, 0x59, 0x68, 0xd8, 0x54, 0x44, 0xd0, 0xba, 0x82, 0x60, 0x0d, 0x4b, + 0x23, 0x22, 0xc4, 0xf4, 0x87, 0x21, 0xf2, 0x69, 0x45, 0x44, 0x1c, 0x26, 0xd7, 0xe0, 0x44, 0x28, + 0x0a, 0xd2, 0xc2, 0xb9, 0xe2, 0xa3, 0x70, 0x1a, 0x01, 0x77, 0xd7, 0xb1, 0x7f, 0xc8, 0x82, 0x94, + 0x3d, 0xb8, 0x52, 0x78, 0x5a, 0xb9, 0x0a, 0xcf, 0x0b, 0x30, 0x14, 0x06, 0x4d, 0x92, 0xce, 0x92, + 0x86, 0x83, 0x26, 0xc1, 0x0c, 0x42, 0x31, 0xe2, 0x44, 0x8d, 0x35, 0xa1, 0x0b, 0xab, 0x42, 0x0c, + 0xbd, 0x08, 0xc3, 0x4d, 0xb2, 0x4b, 0x9a, 0xe9, 0x0c, 0x16, 0x37, 0x69, 0x21, 0xe6, 0x30, 0xfb, + 0x67, 0x87, 0xe0, 0x5c, 0xcf, 0x98, 0x11, 0x54, 0xe4, 0xdb, 0x72, 0x62, 0x72, 0xcf, 0xd9, 0x4b, + 0x87, 0x9a, 0xbf, 0xc6, 0x8b, 0xb1, 0x84, 0x33, 0x17, 0x19, 0x1e, 0x5a, 0x36, 0xa5, 0x1e, 0x16, + 0x11, 0x65, 0x05, 0xd4, 0x54, 0x37, 0x16, 0x8f, 0x42, 0xdd, 0x48, 0xa7, 0x3c, 0x6a, 0xca, 0x44, + 0x51, 0x43, 0xa6, 0xb7, 0x44, 0xbd, 0x7e, 0x53, 0xe6, 0x89, 0xd2, 0xb0, 0x50, 0x05, 0x66, 0xda, + 0x61, 0x10, 0x73, 0x6d, 0x7b, 0x85, 0x9b, 0x2a, 0x0e, 0x9b, 0xee, 0xfa, 0xb5, 0x14, 0x1c, 0x77, + 0xd5, 0x40, 0x2f, 0xc1, 0xb8, 0x70, 0xe1, 0xaf, 0x05, 0x41, 0x53, 0x28, 0xf8, 0xd4, 0x03, 0x7c, + 0x3d, 0x01, 0x61, 0x1d, 0x4f, 0xab, 0xc6, 0x54, 0xf8, 0xa3, 0x99, 0xd5, 0xb8, 0x1a, 0x5f, 0xc3, + 0x4b, 0x85, 0xe0, 0x1b, 0x1b, 0x28, 0x04, 0x5f, 0xa2, 0xf2, 0x2c, 0x0d, 0xfc, 0x6a, 0x09, 0xfd, + 0xf3, 0xee, 0x0d, 0xc1, 0x49, 0xb1, 0x70, 0x1e, 0xf5, 0x72, 0xb9, 0xdd, 0xbd, 0x5c, 0x8e, 0x42, + 0x29, 0xfa, 0xad, 0x35, 0x73, 0xdc, 0x6b, 0xe6, 0xfb, 0x2d, 0x30, 0x59, 0x48, 0xf4, 0x97, 0x72, + 0x73, 0x75, 0xbc, 0x94, 0xcb, 0x92, 0xba, 0xf2, 0x92, 0x7c, 0x87, 0x59, 0x3b, 0xec, 0xff, 0x62, + 0xc1, 0x93, 0x7d, 0x29, 0xa2, 0x65, 0x28, 0x31, 0x3e, 0x57, 0x93, 0x40, 0x9f, 0x52, 0xa6, 0xcc, + 0x12, 0x90, 0xc3, 0x76, 0x27, 0x35, 0xd1, 0x72, 0x57, 0x52, 0x94, 0xa7, 0x33, 0x92, 0xa2, 0x9c, + 0x36, 0x86, 0xe7, 0x21, 0xb3, 0xa2, 0xfc, 0x42, 0x11, 0x46, 0xf8, 0x8a, 0x3f, 0x06, 0x51, 0x73, + 0x45, 0x68, 0xe4, 0x7b, 0x04, 0xe1, 0xe3, 0x7d, 0x99, 0xaf, 0x38, 0xb1, 0xc3, 0x59, 0x21, 0x75, + 0x5b, 0x25, 0xba, 0x7b, 0x34, 0x6f, 0xdc, 0x67, 0x73, 0x29, 0xe5, 0x2b, 0x70, 0x1a, 0xda, 0xed, + 0xf6, 0x79, 0x80, 0x28, 0x0e, 0x3d, 0x7f, 0x8b, 0xd2, 0x10, 0xe1, 0x1c, 0x3f, 0xd8, 0xa3, 0xf5, + 0xba, 0x42, 0xe6, 0x7d, 0x48, 0x76, 0xba, 0x02, 0x60, 0x8d, 0xe2, 0xdc, 0x47, 0xa0, 0xa4, 0x90, + 0xfb, 0x69, 0xaa, 0x26, 0x74, 0x06, 0xea, 0x13, 0x30, 0x9d, 0x6a, 0xeb, 0x50, 0x8a, 0xae, 0x9f, + 0xb3, 0x60, 0x9a, 0x77, 0x79, 0xd9, 0xdf, 0x15, 0x67, 0xea, 0xdb, 0x70, 0xaa, 0x99, 0x71, 0xb6, + 0x89, 0x19, 0x1d, 0xfc, 0x2c, 0x54, 0x8a, 0xad, 0x2c, 0x28, 0xce, 0x6c, 0x03, 0x5d, 0xa6, 0xeb, + 0x96, 0x9e, 0x5d, 0x4e, 0x53, 0xb8, 0x5b, 0x4e, 0xf0, 0x35, 0xcb, 0xcb, 0xb0, 0x82, 0xda, 0xdf, + 0xb4, 0xe0, 0x04, 0xef, 0xf9, 0x0d, 0xb2, 0xa7, 0x76, 0xf8, 0xbb, 0xd9, 0x77, 0x91, 0xa7, 0xa8, + 0x90, 0x93, 0xa7, 0x48, 0xff, 0xb4, 0x62, 0xcf, 0x4f, 0xfb, 0xaa, 0x05, 0x62, 0x05, 0x1e, 0x83, + 0xba, 0xe2, 0x93, 0xa6, 0xba, 0x62, 0x2e, 0x7f, 0x51, 0xe7, 0xe8, 0x29, 0xfe, 0xc4, 0x82, 0x19, + 0x8e, 0x90, 0x58, 0x13, 0xbc, 0xab, 0xf3, 0x30, 0x48, 0xf6, 0xd5, 0x1b, 0x64, 0x6f, 0x3d, 0xa8, + 0x39, 0xf1, 0x76, 0xf6, 0x47, 0x19, 0x93, 0x35, 0xd4, 0x73, 0xb2, 0x5c, 0xb9, 0x81, 0x0e, 0x91, + 0x2d, 0xf9, 0xd0, 0xf1, 0xfe, 0xed, 0xdf, 0xb7, 0x00, 0xf1, 0x66, 0x0c, 0xf6, 0x87, 0x32, 0x15, + 0xac, 0x54, 0xbb, 0x2e, 0x92, 0xa3, 0x46, 0x41, 0xb0, 0x86, 0x75, 0x24, 0xc3, 0x93, 0x32, 0x09, + 0x29, 0xf6, 0x37, 0x09, 0x39, 0xc4, 0x88, 0xfe, 0xde, 0x30, 0xa4, 0x1d, 0x92, 0xd0, 0x1d, 0x98, + 0x68, 0x38, 0x6d, 0x67, 0xc3, 0x6b, 0x7a, 0xb1, 0x47, 0xa2, 0x5e, 0xb6, 0x64, 0x4b, 0x1a, 0x9e, + 0x78, 0xc4, 0xd7, 0x4a, 0xb0, 0x41, 0x07, 0xcd, 0x03, 0xb4, 0x43, 0x6f, 0xd7, 0x6b, 0x92, 0x2d, + 0xa6, 0x55, 0x61, 0x0e, 0xde, 0xdc, 0x40, 0x4a, 0x96, 0x62, 0x0d, 0x23, 0xc3, 0x57, 0xb7, 0xf8, + 0xe8, 0x7c, 0x75, 0x87, 0x0e, 0xe9, 0xab, 0x3b, 0x3c, 0x90, 0xaf, 0x2e, 0x86, 0xc7, 0x24, 0x8b, + 0x44, 0xff, 0xaf, 0x78, 0x4d, 0x22, 0xf8, 0x62, 0xee, 0xf6, 0x3d, 0xf7, 0x60, 0xbf, 0xfc, 0x18, + 0xce, 0xc4, 0xc0, 0x39, 0x35, 0xd1, 0xa7, 0x61, 0xd6, 0x69, 0x36, 0x83, 0x7b, 0x6a, 0xd4, 0x96, + 0xa3, 0x86, 0xd3, 0xe4, 0xaf, 0x12, 0xa3, 0x8c, 0xea, 0xd9, 0x07, 0xfb, 0xe5, 0xd9, 0x85, 0x1c, + 0x1c, 0x9c, 0x5b, 0x3b, 0xe5, 0xea, 0x3b, 0xd6, 0xd7, 0xd5, 0xf7, 0xe3, 0x50, 0x6a, 0x87, 0x41, + 0x63, 0x55, 0xf3, 0x07, 0x3c, 0x4f, 0x07, 0xb0, 0x26, 0x0b, 0x0f, 0xf6, 0xcb, 0x93, 0xea, 0x0f, + 0xbb, 0xe1, 0x93, 0x0a, 0x19, 0x1e, 0xbe, 0xf0, 0x28, 0x3d, 0x7c, 0x77, 0xe0, 0x64, 0x9d, 0x84, + 0x1e, 0x4b, 0xd0, 0xec, 0x26, 0xe7, 0xc7, 0x3a, 0x94, 0xc2, 0xd4, 0x89, 0x39, 0x50, 0xe0, 0x3a, + 0x2d, 0x9e, 0xba, 0x3c, 0x21, 0x13, 0x42, 0xf6, 0xff, 0xb5, 0x60, 0x54, 0xb8, 0xc2, 0x1c, 0x03, + 0xa3, 0xb6, 0x60, 0xbc, 0x09, 0x94, 0xb3, 0x6f, 0x15, 0xd6, 0x99, 0xdc, 0xd7, 0x80, 0x6a, 0xea, + 0x35, 0xe0, 0xc9, 0x5e, 0x44, 0x7a, 0xbf, 0x03, 0xfc, 0xbd, 0x22, 0x4c, 0x99, 0xde, 0x6b, 0xc7, + 0x30, 0x04, 0x6b, 0x30, 0x1a, 0x09, 0x57, 0xc9, 0x42, 0xbe, 0xe3, 0x41, 0x7a, 0x12, 0x13, 0x3b, + 0x3c, 0xe1, 0x1c, 0x29, 0x89, 0x64, 0xfa, 0x60, 0x16, 0x1f, 0xa1, 0x0f, 0x66, 0x3f, 0x07, 0xc2, + 0xa1, 0xa3, 0x70, 0x20, 0xb4, 0xbf, 0xce, 0x6e, 0x36, 0xbd, 0xfc, 0x18, 0x98, 0x9e, 0x6b, 0xe6, + 0x1d, 0x68, 0xf7, 0x58, 0x59, 0xa2, 0x53, 0x39, 0xcc, 0xcf, 0xcf, 0x58, 0x70, 0x2e, 0xe3, 0xab, + 0x34, 0x4e, 0xe8, 0x59, 0x18, 0x73, 0x3a, 0xae, 0xa7, 0xf6, 0xb2, 0xf6, 0x32, 0xb8, 0x20, 0xca, + 0xb1, 0xc2, 0x40, 0x4b, 0x70, 0x82, 0xdc, 0x6f, 0x7b, 0xfc, 0x69, 0x56, 0x37, 0x96, 0x2d, 0xf2, + 0x60, 0xde, 0xcb, 0x69, 0x20, 0xee, 0xc6, 0x57, 0xe1, 0x2e, 0x8a, 0xb9, 0xe1, 0x2e, 0xfe, 0x89, + 0x05, 0xe3, 0xca, 0x2d, 0xee, 0x91, 0x8f, 0xf6, 0xa7, 0xcc, 0xd1, 0x7e, 0xa2, 0xc7, 0x68, 0xe7, + 0x0c, 0xf3, 0x3f, 0x28, 0xa8, 0xfe, 0xd6, 0x82, 0x30, 0x1e, 0x80, 0xc3, 0x7a, 0x19, 0xc6, 0xda, + 0x61, 0x10, 0x07, 0x8d, 0xa0, 0x29, 0x18, 0xac, 0xb3, 0x49, 0x34, 0x16, 0x5e, 0x7e, 0xa0, 0xfd, + 0xc6, 0x0a, 0x9b, 0x8d, 0x5e, 0x10, 0xc6, 0x82, 0xa9, 0x49, 0x46, 0x2f, 0x08, 0x63, 0xcc, 0x20, + 0xc8, 0x05, 0x88, 0x9d, 0x70, 0x8b, 0xc4, 0xb4, 0x4c, 0x04, 0x76, 0xca, 0x3f, 0x3c, 0x3a, 0xb1, + 0xd7, 0x9c, 0xf7, 0xfc, 0x38, 0x8a, 0xc3, 0xf9, 0xaa, 0x1f, 0xdf, 0x0a, 0xb9, 0xbc, 0xa6, 0x85, + 0x57, 0x51, 0xb4, 0xb0, 0x46, 0x57, 0x3a, 0xa5, 0xb3, 0x36, 0x86, 0x4d, 0x1b, 0x83, 0x35, 0x51, + 0x8e, 0x15, 0x86, 0xfd, 0x11, 0x76, 0x95, 0xb0, 0x01, 0x3a, 0x5c, 0xe4, 0x93, 0x3f, 0x19, 0x53, + 0x43, 0xcb, 0x1e, 0x18, 0x2b, 0x7a, 0x7c, 0x95, 0xde, 0x27, 0x37, 0x6d, 0x58, 0x77, 0x43, 0x4b, + 0x82, 0xb0, 0xa0, 0xcf, 0x76, 0x99, 0x9e, 0x3c, 0xd7, 0xe7, 0x0a, 0x38, 0x84, 0xb1, 0x09, 0x4b, + 0x30, 0xc0, 0xc2, 0xaf, 0x57, 0x6b, 0x62, 0x91, 0x6b, 0x09, 0x06, 0x04, 0x00, 0x27, 0x38, 0xe8, + 0x8a, 0x90, 0xf6, 0x87, 0x8c, 0x74, 0xa4, 0x52, 0xda, 0x97, 0x9f, 0xaf, 0x89, 0xfb, 0xcf, 0xc3, + 0xb8, 0x4a, 0x4b, 0x5a, 0xe3, 0xd9, 0x1d, 0x45, 0x98, 0xab, 0xe5, 0xa4, 0x18, 0xeb, 0x38, 0x68, + 0x1d, 0xa6, 0x23, 0xae, 0xea, 0x51, 0xd1, 0x4c, 0xb9, 0xca, 0xec, 0x83, 0xd2, 0x64, 0xa5, 0x6e, + 0x82, 0x0f, 0x58, 0x11, 0x3f, 0x3a, 0xa4, 0x67, 0x79, 0x9a, 0x04, 0x7a, 0x15, 0xa6, 0x9a, 0x81, + 0xe3, 0x2e, 0x3a, 0x4d, 0xc7, 0x6f, 0xb0, 0xef, 0x1d, 0x33, 0xb3, 0xb9, 0xdd, 0x34, 0xa0, 0x38, + 0x85, 0x4d, 0x19, 0x33, 0xbd, 0x44, 0x44, 0xe0, 0x75, 0xfc, 0x2d, 0x12, 0x89, 0xa4, 0x8a, 0x8c, + 0x31, 0xbb, 0x99, 0x83, 0x83, 0x73, 0x6b, 0xa3, 0x97, 0x61, 0x42, 0x7e, 0xbe, 0x16, 0x37, 0x21, + 0xf1, 0xaa, 0xd0, 0x60, 0xd8, 0xc0, 0x44, 0xf7, 0xe0, 0xb4, 0xfc, 0xbf, 0x1e, 0x3a, 0x9b, 0x9b, + 0x5e, 0x43, 0xf8, 0xe1, 0x72, 0x47, 0xb9, 0x05, 0xe9, 0x79, 0xb7, 0x9c, 0x85, 0x74, 0xb0, 0x5f, + 0xbe, 0x20, 0x46, 0x2d, 0x13, 0xce, 0x26, 0x31, 0x9b, 0x3e, 0x5a, 0x85, 0x93, 0xdb, 0xc4, 0x69, + 0xc6, 0xdb, 0x4b, 0xdb, 0xa4, 0xb1, 0x23, 0x37, 0x11, 0xf3, 0xa9, 0xd3, 0x7c, 0x11, 0xae, 0x77, + 0xa3, 0xe0, 0xac, 0x7a, 0xe8, 0x4d, 0x98, 0x6d, 0x77, 0x36, 0x9a, 0x5e, 0xb4, 0xbd, 0x16, 0xc4, + 0xcc, 0x4a, 0x46, 0x65, 0xf5, 0x14, 0x61, 0x1b, 0x54, 0x24, 0x8a, 0x5a, 0x0e, 0x1e, 0xce, 0xa5, + 0x80, 0xde, 0x86, 0xd3, 0xa9, 0xc5, 0x20, 0x9c, 0xc8, 0xa7, 0xf2, 0xe3, 0x99, 0xd7, 0xb3, 0x2a, + 0x08, 0xa7, 0xf0, 0x2c, 0x10, 0xce, 0x6e, 0x82, 0x1e, 0x3d, 0x51, 0x67, 0xc3, 0x27, 0x71, 0xb5, + 0x92, 0x8e, 0xbe, 0x50, 0x17, 0xe5, 0x58, 0x61, 0xbc, 0x33, 0x4b, 0xab, 0xb7, 0x68, 0x65, 0x8d, + 0x85, 0x43, 0x5f, 0x80, 0x09, 0x7d, 0xcd, 0x89, 0xeb, 0xe8, 0x52, 0x36, 0x87, 0xa3, 0xad, 0x4d, + 0xce, 0x00, 0xaa, 0xf5, 0xa7, 0xc3, 0xb0, 0x41, 0xd1, 0x26, 0x90, 0x3d, 0x1a, 0xe8, 0x26, 0x8c, + 0x35, 0x9a, 0x1e, 0xf1, 0xe3, 0x6a, 0xad, 0x57, 0x08, 0xa6, 0x25, 0x81, 0x23, 0x86, 0x57, 0x84, + 0x8b, 0xe6, 0x65, 0x58, 0x51, 0xb0, 0x5f, 0x83, 0x29, 0xf9, 0xfa, 0x27, 0x9e, 0x1b, 0x5f, 0x86, + 0x09, 0xf9, 0x06, 0xa8, 0xc9, 0xeb, 0xaa, 0xcb, 0x75, 0x0d, 0x86, 0x0d, 0x4c, 0x9d, 0x96, 0x78, + 0x75, 0x7c, 0x78, 0x5a, 0x95, 0x84, 0x96, 0x18, 0xf2, 0x87, 0x79, 0xc1, 0xfc, 0xa5, 0x02, 0x94, + 0xfb, 0x44, 0x56, 0x4f, 0x3d, 0x05, 0x58, 0x03, 0x3d, 0x05, 0x2c, 0xc8, 0x7c, 0xad, 0x6b, 0x29, + 0xfd, 0x48, 0x2a, 0x17, 0x6b, 0xa2, 0x25, 0x49, 0xe3, 0x0f, 0x6c, 0x74, 0xaf, 0xbf, 0x26, 0x0c, + 0xf5, 0x75, 0x1b, 0x31, 0x5e, 0x11, 0x87, 0x07, 0x17, 0xca, 0x72, 0x5f, 0x84, 0xec, 0xaf, 0x17, + 0xe0, 0xb4, 0x1a, 0xc2, 0xbf, 0xb8, 0x03, 0x77, 0xbb, 0x7b, 0xe0, 0x8e, 0xe0, 0x3d, 0xcd, 0xbe, + 0x05, 0x23, 0x3c, 0x40, 0xd7, 0x00, 0xcc, 0xe0, 0x45, 0x33, 0x9a, 0xa3, 0x62, 0x59, 0x8c, 0x88, + 0x8e, 0x7f, 0xcd, 0x82, 0xe9, 0xf5, 0xa5, 0x5a, 0x3d, 0x68, 0xec, 0x10, 0xb9, 0x63, 0xb1, 0xe0, + 0x05, 0xad, 0x87, 0xe4, 0xf1, 0xb2, 0xb8, 0xc7, 0x0b, 0x30, 0xb4, 0x1d, 0x44, 0x71, 0xfa, 0xb1, + 0xfd, 0x7a, 0x10, 0xc5, 0x98, 0x41, 0xec, 0xdf, 0xb2, 0x60, 0x98, 0x65, 0x19, 0xef, 0x97, 0xfa, + 0x7e, 0x90, 0xef, 0x42, 0x2f, 0xc1, 0x08, 0xd9, 0xdc, 0x24, 0x8d, 0x58, 0xcc, 0xaa, 0xf4, 0x6c, + 0x1f, 0x59, 0x66, 0xa5, 0x94, 0x01, 0x62, 0x8d, 0xf1, 0xbf, 0x58, 0x20, 0xa3, 0xbb, 0x50, 0x8a, + 0xbd, 0x16, 0x59, 0x70, 0x5d, 0xf1, 0x5c, 0xf9, 0x10, 0x81, 0x04, 0xd6, 0x25, 0x01, 0x9c, 0xd0, + 0xb2, 0xff, 0xd8, 0x02, 0xe1, 0x23, 0x75, 0x0c, 0x32, 0xf8, 0xa7, 0x0c, 0x35, 0x44, 0x76, 0x5c, + 0x1a, 0xd6, 0x97, 0x5c, 0x2d, 0xc4, 0xf5, 0x94, 0x16, 0xe2, 0x42, 0x0f, 0x1a, 0xbd, 0x95, 0x10, + 0x5f, 0xb5, 0x00, 0x38, 0xe2, 0x7b, 0x44, 0xad, 0xcf, 0x3b, 0x93, 0x23, 0x72, 0xad, 0xca, 0xce, + 0x32, 0xa9, 0xe0, 0x93, 0x00, 0x9b, 0x9e, 0xcf, 0x14, 0x55, 0xca, 0x41, 0xaa, 0xcc, 0x12, 0xd4, + 0xa8, 0xd2, 0x83, 0xfd, 0xf2, 0xa4, 0xfa, 0xc7, 0x8f, 0xa7, 0xa4, 0x8a, 0xbd, 0x08, 0x13, 0xfa, + 0x20, 0xa1, 0xab, 0x66, 0x38, 0x8f, 0xb3, 0xe9, 0x70, 0x1e, 0xe3, 0x1c, 0x5b, 0x8f, 0xe8, 0x61, + 0x7f, 0xa5, 0x00, 0x90, 0x44, 0x0c, 0xea, 0xb7, 0x39, 0x16, 0xbb, 0x9e, 0x40, 0x2f, 0x65, 0x3c, + 0x81, 0xa2, 0x84, 0x60, 0xc6, 0xfb, 0xa7, 0xda, 0x60, 0xc5, 0x81, 0x36, 0xd8, 0xd0, 0x61, 0x36, + 0xd8, 0x12, 0x9c, 0x48, 0x22, 0x1e, 0x99, 0xe1, 0xdf, 0x98, 0xa8, 0xbf, 0x9e, 0x06, 0xe2, 0x6e, + 0x7c, 0x9b, 0xc0, 0x05, 0x19, 0xf7, 0x5b, 0xf2, 0x60, 0xcc, 0x56, 0x5c, 0x7f, 0x52, 0xee, 0x33, + 0x4e, 0xc9, 0x1b, 0x6f, 0x21, 0xf7, 0x8d, 0xf7, 0x47, 0x2d, 0x38, 0x95, 0x6e, 0x87, 0xb9, 0x2c, + 0x7f, 0xd9, 0x82, 0xd3, 0xec, 0xa5, 0x9b, 0xb5, 0xda, 0xfd, 0xae, 0xfe, 0x62, 0x76, 0x24, 0xa8, + 0xde, 0x3d, 0x4e, 0x82, 0x6f, 0xac, 0x66, 0x91, 0xc6, 0xd9, 0x2d, 0xda, 0x5f, 0xb6, 0xe0, 0x4c, + 0x6e, 0xba, 0x43, 0x74, 0x19, 0xc6, 0x9c, 0xb6, 0xc7, 0xd5, 0xc8, 0xe2, 0xa6, 0x60, 0x3a, 0x98, + 0x5a, 0x95, 0x2b, 0x91, 0x15, 0x54, 0xa5, 0x6b, 0x2e, 0xe4, 0xa6, 0x6b, 0xee, 0x9b, 0x7d, 0xd9, + 0xfe, 0xfa, 0x28, 0xa4, 0x62, 0xfa, 0x0c, 0x76, 0x4d, 0xe9, 0x5e, 0x85, 0xc9, 0xbe, 0xd4, 0x5d, + 0x0a, 0x8d, 0x8c, 0x9b, 0xc5, 0x23, 0xcd, 0xb8, 0xf9, 0x19, 0x99, 0x75, 0x9f, 0x29, 0xc3, 0x65, + 0xd6, 0xc2, 0x72, 0xbe, 0xfb, 0x30, 0xc3, 0x4b, 0x98, 0x4e, 0xad, 0x30, 0xc2, 0x06, 0x29, 0x74, + 0x0b, 0xa6, 0x95, 0x7e, 0xd1, 0x48, 0x96, 0xf2, 0x01, 0xc9, 0x9d, 0x54, 0x4d, 0xf0, 0xc1, 0x7e, + 0x19, 0x92, 0x7f, 0x38, 0x5d, 0x1b, 0xbd, 0x04, 0xe3, 0x3b, 0x64, 0xaf, 0xe6, 0x78, 0xa1, 0x96, + 0xf8, 0x44, 0x59, 0xa7, 0xdc, 0x48, 0x40, 0x58, 0xc7, 0x43, 0x57, 0xa0, 0xc4, 0x24, 0xae, 0xc6, + 0x0d, 0xb2, 0x97, 0x4e, 0x2d, 0x5d, 0x93, 0x00, 0x9c, 0xe0, 0xd0, 0x65, 0xd3, 0x89, 0x48, 0xc8, + 0x9e, 0xfd, 0xc7, 0x98, 0x1b, 0x20, 0x5b, 0x36, 0xb7, 0x45, 0x19, 0x56, 0x50, 0x74, 0x1b, 0x1e, + 0x8f, 0xc3, 0x4e, 0x14, 0x13, 0x97, 0x7d, 0xca, 0x12, 0x09, 0x63, 0x6f, 0xd3, 0x6b, 0x38, 0x31, + 0x11, 0x92, 0xf6, 0x13, 0x0f, 0xf6, 0xcb, 0x8f, 0xaf, 0x67, 0xa3, 0xe0, 0xbc, 0xba, 0xcc, 0xe9, + 0x7c, 0xbb, 0x13, 0xbb, 0xc1, 0x3d, 0x7f, 0x91, 0x6c, 0x3b, 0xbb, 0x5e, 0x10, 0x0a, 0x59, 0x3b, + 0x71, 0x3a, 0x4f, 0xc1, 0x71, 0x57, 0x0d, 0xca, 0x51, 0x6e, 0x04, 0x81, 0x60, 0xcf, 0x85, 0xa0, + 0xad, 0x6e, 0xce, 0x45, 0x05, 0xc1, 0x1a, 0x16, 0x7a, 0x15, 0x4a, 0xed, 0xe0, 0x1e, 0x77, 0x05, + 0x62, 0x42, 0x72, 0x12, 0x5a, 0xb1, 0x54, 0x93, 0x00, 0x7a, 0xba, 0xdd, 0x69, 0xa9, 0xbf, 0x38, + 0xa9, 0x82, 0x3e, 0x07, 0x93, 0x7c, 0x0d, 0x54, 0x08, 0x95, 0xef, 0x64, 0x34, 0x99, 0x0b, 0xf9, + 0xeb, 0x89, 0x23, 0x26, 0x2e, 0x17, 0x7a, 0x69, 0x84, 0x4d, 0x6a, 0x2c, 0x87, 0x7e, 0x33, 0xe8, + 0xb8, 0x55, 0xdf, 0x8b, 0xe5, 0x74, 0xd4, 0x1b, 0xa1, 0xd7, 0xe6, 0x11, 0x10, 0xf5, 0x1c, 0xfa, + 0xd9, 0x68, 0x38, 0xaf, 0xbe, 0xfd, 0xa7, 0x45, 0xc8, 0x0c, 0x9a, 0x33, 0xc0, 0x1e, 0xae, 0xc0, + 0x8c, 0x19, 0x58, 0xa7, 0x2a, 0x0f, 0x12, 0x35, 0x5d, 0x77, 0x52, 0x70, 0xdc, 0x55, 0x03, 0x3d, + 0x0d, 0xa3, 0x6c, 0xc1, 0x57, 0xdd, 0x74, 0x94, 0xa9, 0x2a, 0x2f, 0xc6, 0x12, 0x9e, 0x1c, 0x1a, + 0x43, 0x3d, 0x0e, 0x8d, 0x79, 0x18, 0xa6, 0x4c, 0x08, 0x49, 0x59, 0x8f, 0x0d, 0xd3, 0xcf, 0xa2, + 0xb7, 0xed, 0xe8, 0x1d, 0x96, 0x01, 0x95, 0x60, 0x8e, 0x86, 0x3e, 0x0b, 0xa7, 0x98, 0xdb, 0x5e, + 0x12, 0xc3, 0x94, 0x81, 0xc5, 0x36, 0x7b, 0x4a, 0x3d, 0xca, 0x67, 0xe0, 0xe8, 0xd4, 0x32, 0x89, + 0xa0, 0x45, 0x00, 0xbe, 0x48, 0x18, 0x49, 0xbe, 0x09, 0x6d, 0x15, 0x98, 0x42, 0x41, 0x0e, 0xe8, + 0x89, 0xd2, 0x4a, 0xfe, 0x63, 0xad, 0x16, 0x73, 0xdf, 0x25, 0x8e, 0x2b, 0xfd, 0x8b, 0x13, 0xf7, + 0x5d, 0xe6, 0x9d, 0xc4, 0x61, 0x54, 0x46, 0x16, 0xe1, 0x5d, 0x97, 0xd4, 0x73, 0xe0, 0x70, 0x72, + 0x5c, 0x61, 0x0d, 0x86, 0x0d, 0x4c, 0xfb, 0x7b, 0x2c, 0x10, 0x41, 0x06, 0x06, 0x98, 0xf2, 0x37, + 0xe4, 0xb1, 0x69, 0x64, 0xcc, 0xea, 0xb1, 0xcc, 0x45, 0x9e, 0xac, 0xd4, 0xb9, 0x29, 0xb4, 0x6b, + 0x06, 0x2d, 0xdb, 0x85, 0x09, 0x7d, 0x13, 0x0c, 0xd0, 0x9b, 0xab, 0x00, 0x2e, 0xc3, 0x65, 0x69, + 0x34, 0x0b, 0xe6, 0x4e, 0xaf, 0x28, 0x08, 0xd6, 0xb0, 0xec, 0xff, 0x50, 0x80, 0x71, 0xed, 0xf0, + 0x1e, 0xa0, 0x95, 0x43, 0xa5, 0x6c, 0xa5, 0xa7, 0x2e, 0x7b, 0xff, 0xa9, 0x25, 0xaf, 0x12, 0xea, + 0xd4, 0x5d, 0x95, 0x00, 0x9c, 0xe0, 0xd0, 0xf5, 0x1f, 0x75, 0x36, 0x18, 0x7a, 0xca, 0x25, 0xbe, + 0xce, 0x8b, 0xb1, 0x84, 0xa3, 0x4f, 0xc3, 0x0c, 0xaf, 0x17, 0x06, 0x6d, 0x67, 0x8b, 0x3f, 0x39, + 0x0f, 0xab, 0x58, 0x36, 0x33, 0xab, 0x29, 0xd8, 0xc1, 0x7e, 0xf9, 0x54, 0xba, 0x8c, 0x19, 0x2b, + 0x74, 0x51, 0x61, 0x06, 0x90, 0xbc, 0x11, 0xca, 0x65, 0x74, 0xd9, 0x4d, 0x26, 0x20, 0xac, 0xe3, + 0xd9, 0x5f, 0x00, 0xd4, 0x9d, 0xab, 0x0a, 0xbd, 0xc6, 0x2d, 0xfb, 0xbd, 0x90, 0xb8, 0xbd, 0x8c, + 0x17, 0xf4, 0x88, 0x2d, 0xd2, 0xaf, 0x93, 0xd7, 0xc2, 0xaa, 0xbe, 0xfd, 0x37, 0x8b, 0x30, 0x93, + 0x8e, 0xdf, 0xc1, 0xe4, 0x14, 0x26, 0x1c, 0x0b, 0xf2, 0x3d, 0x6c, 0xe3, 0xb4, 0xa8, 0x1f, 0x8c, + 0xd9, 0x13, 0xf2, 0xb5, 0xa8, 0x8f, 0xde, 0x84, 0x71, 0x7a, 0x77, 0xdc, 0x73, 0x42, 0x77, 0xa1, + 0x56, 0x15, 0xcb, 0x39, 0x53, 0xdf, 0x58, 0x49, 0xd0, 0xf4, 0x48, 0x22, 0xcc, 0x0e, 0x24, 0x01, + 0x61, 0x9d, 0x1c, 0x5a, 0x67, 0xf1, 0xf7, 0x37, 0xbd, 0xad, 0x55, 0xa7, 0xdd, 0xcb, 0xcd, 0x6b, + 0x49, 0x22, 0x69, 0x94, 0x27, 0x45, 0x90, 0x7e, 0x0e, 0xc0, 0x09, 0x21, 0xf4, 0xed, 0x70, 0x32, + 0xca, 0x79, 0xa2, 0xcc, 0x4b, 0x5d, 0xd8, 0xeb, 0xd5, 0x6e, 0xf1, 0xf1, 0x07, 0xfb, 0xe5, 0x93, + 0x59, 0x8f, 0x99, 0x59, 0xcd, 0xd8, 0xbf, 0x72, 0x12, 0x8c, 0x4d, 0x6c, 0x64, 0xb2, 0xb5, 0x8e, + 0x28, 0x93, 0x2d, 0x86, 0x31, 0xd2, 0x6a, 0xc7, 0x7b, 0x15, 0x2f, 0xec, 0x95, 0x69, 0x7d, 0x59, + 0xe0, 0x74, 0xd3, 0x94, 0x10, 0xac, 0xe8, 0x64, 0xa7, 0x1b, 0x2e, 0xbe, 0x8b, 0xe9, 0x86, 0x87, + 0x8e, 0x31, 0xdd, 0xf0, 0x1a, 0x8c, 0x6e, 0x79, 0x31, 0x26, 0xed, 0x40, 0xa8, 0xa5, 0x32, 0xd7, + 0xe1, 0x35, 0x8e, 0xd2, 0x9d, 0xd8, 0x52, 0x00, 0xb0, 0x24, 0x82, 0x5e, 0x53, 0x3b, 0x70, 0x24, + 0x5f, 0x67, 0xdd, 0x6d, 0xc4, 0x95, 0xb9, 0x07, 0x45, 0x52, 0xe1, 0xd1, 0x87, 0x4d, 0x2a, 0xbc, + 0x22, 0x53, 0x01, 0x8f, 0xe5, 0xfb, 0x64, 0xb2, 0x4c, 0xbf, 0x7d, 0x12, 0x00, 0xdf, 0xd1, 0xd3, + 0x27, 0x97, 0xf2, 0x4f, 0x02, 0x95, 0x19, 0x79, 0xc0, 0xa4, 0xc9, 0xdf, 0x63, 0xc1, 0xe9, 0x76, + 0x56, 0x26, 0x71, 0x61, 0x70, 0xf3, 0xd2, 0xc0, 0xa9, 0xd2, 0x8d, 0x06, 0xd9, 0x53, 0x47, 0x26, + 0x1a, 0xce, 0x6e, 0x8e, 0x0e, 0x74, 0xb8, 0xe1, 0x8a, 0xac, 0xbf, 0x17, 0x73, 0xb2, 0x2f, 0xf7, + 0xc8, 0xb9, 0xbc, 0x9e, 0x91, 0xe9, 0xf7, 0xfd, 0x79, 0x99, 0x7e, 0x07, 0xce, 0xef, 0xfb, 0x9a, + 0xca, 0xbb, 0x3c, 0x99, 0xbf, 0x94, 0x78, 0x56, 0xe5, 0xbe, 0xd9, 0x96, 0x5f, 0x53, 0xd9, 0x96, + 0x7b, 0x04, 0x06, 0xe7, 0xb9, 0x94, 0xfb, 0xe6, 0x58, 0xd6, 0xf2, 0x24, 0x4f, 0x1f, 0x4d, 0x9e, + 0x64, 0xe3, 0xaa, 0xe1, 0xa9, 0x7a, 0x9f, 0xe9, 0x73, 0xd5, 0x18, 0x74, 0x7b, 0x5f, 0x36, 0x3c, + 0x27, 0xf4, 0x89, 0x87, 0xca, 0x09, 0x7d, 0x47, 0xcf, 0xb1, 0x8c, 0xfa, 0x24, 0x11, 0xa6, 0x48, + 0x03, 0x66, 0x56, 0xbe, 0xa3, 0x5f, 0x80, 0x27, 0xf3, 0xe9, 0xaa, 0x7b, 0xae, 0x9b, 0x6e, 0xe6, + 0x15, 0xd8, 0x95, 0xb1, 0xf9, 0xd4, 0xf1, 0x64, 0x6c, 0x3e, 0x7d, 0xe4, 0x19, 0x9b, 0x1f, 0x3b, + 0x86, 0x8c, 0xcd, 0x8f, 0xbf, 0xab, 0x19, 0x9b, 0x67, 0x1f, 0x41, 0xc6, 0xe6, 0xb5, 0x24, 0x63, + 0xf3, 0x99, 0xfc, 0x29, 0xc9, 0x70, 0xa2, 0xca, 0xc9, 0xd3, 0x7c, 0x87, 0x59, 0x52, 0xf2, 0x00, + 0x73, 0x22, 0x72, 0x79, 0xe6, 0x94, 0x64, 0x46, 0xa1, 0xe3, 0x53, 0xa2, 0x40, 0x38, 0x21, 0x45, + 0xe9, 0x26, 0x79, 0x9b, 0x9f, 0xe8, 0xf1, 0x98, 0x9d, 0xf5, 0x34, 0xd6, 0x23, 0x5b, 0xf3, 0xab, + 0x3c, 0x5b, 0xf3, 0xd9, 0xfc, 0x93, 0x3c, 0x7d, 0xdd, 0x99, 0x39, 0x9a, 0xbf, 0xb7, 0x00, 0xe7, + 0x7b, 0xef, 0x8b, 0xe4, 0x5d, 0xae, 0x96, 0xd8, 0xd4, 0xa4, 0xde, 0xe5, 0xb8, 0x6c, 0x95, 0x60, + 0x0d, 0x1c, 0xc5, 0xf3, 0x1a, 0x9c, 0x50, 0xde, 0x57, 0x4d, 0xaf, 0xb1, 0xb7, 0x96, 0x28, 0x18, + 0x95, 0x07, 0x68, 0x3d, 0x8d, 0x80, 0xbb, 0xeb, 0xa0, 0x05, 0x98, 0x36, 0x0a, 0xab, 0x15, 0x21, + 0x43, 0xa9, 0x87, 0xc0, 0xba, 0x09, 0xc6, 0x69, 0x7c, 0xfb, 0x27, 0x2d, 0x78, 0x3c, 0x27, 0x19, + 0xe2, 0xc0, 0x41, 0x2a, 0x37, 0x61, 0xba, 0x6d, 0x56, 0xed, 0x13, 0xcb, 0xd6, 0x48, 0xb9, 0xa8, + 0xfa, 0x9a, 0x02, 0xe0, 0x34, 0x51, 0xfb, 0xeb, 0x16, 0x9c, 0xeb, 0x69, 0x89, 0x8b, 0x30, 0x3c, + 0xb6, 0xd5, 0x8a, 0x9c, 0xa5, 0x90, 0xb8, 0xc4, 0x8f, 0x3d, 0xa7, 0x59, 0x6f, 0x93, 0x86, 0xf6, + 0xb2, 0xca, 0x0c, 0x9e, 0xaf, 0xad, 0xd6, 0x17, 0xba, 0x31, 0x70, 0x4e, 0x4d, 0xb4, 0x02, 0xa8, + 0x1b, 0x22, 0x66, 0x98, 0x85, 0xa3, 0xef, 0xa6, 0x87, 0x33, 0x6a, 0x2c, 0x5e, 0xfe, 0xf5, 0xdf, + 0x39, 0xff, 0xbe, 0xdf, 0xfc, 0x9d, 0xf3, 0xef, 0xfb, 0xe6, 0xef, 0x9c, 0x7f, 0xdf, 0x77, 0x3e, + 0x38, 0x6f, 0xfd, 0xfa, 0x83, 0xf3, 0xd6, 0x6f, 0x3e, 0x38, 0x6f, 0x7d, 0xf3, 0xc1, 0x79, 0xeb, + 0xb7, 0x1f, 0x9c, 0xb7, 0xbe, 0xf2, 0xbb, 0xe7, 0xdf, 0xf7, 0x46, 0x61, 0xf7, 0xf9, 0xff, 0x1f, + 0x00, 0x00, 0xff, 0xff, 0x7e, 0xab, 0x50, 0x8a, 0xa4, 0x08, 0x01, 0x00, } diff --git a/staging/src/k8s.io/api/core/v1/generated.proto b/staging/src/k8s.io/api/core/v1/generated.proto index 68a4bd3edf1..0aa2e50074d 100644 --- a/staging/src/k8s.io/api/core/v1/generated.proto +++ b/staging/src/k8s.io/api/core/v1/generated.proto @@ -1028,6 +1028,35 @@ message DaemonEndpoint { optional int32 Port = 1; } +// DataPartitionConfig contains api server data partition configurations. Name in ObjectMeta is used for identitification +message DataPartitionConfig { + optional k8s.io.apimachinery.pkg.apis.meta.v1.ObjectMeta metadata = 1; + + // Start tenant is inclusive + optional string startTenant = 2; + + // Whether this is an open end start + optional bool isStartTenantValid = 3; + + // End tenant is exclusive + optional string endTenant = 4; + + // Whether this is an open end end + optional bool isEndTenantValid = 5; + + // Which service group is using this data configuration + optional string serviceGroupId = 6; +} + +// DataPartitionConfigList is a list of data partition configurations that api server data partition use +message DataPartitionConfigList { + // +optional + optional k8s.io.apimachinery.pkg.apis.meta.v1.ListMeta metadata = 1; + + // List of data partition configuration + repeated DataPartitionConfig items = 2; +} + // Represents downward API info for projecting into a projected volume. // Note that this is identical to a downwardAPI volume source without the default // mode. diff --git a/staging/src/k8s.io/api/core/v1/register.go b/staging/src/k8s.io/api/core/v1/register.go index da7e421a9fe..8907a8d20ab 100644 --- a/staging/src/k8s.io/api/core/v1/register.go +++ b/staging/src/k8s.io/api/core/v1/register.go @@ -96,6 +96,8 @@ func addKnownTypes(scheme *runtime.Scheme) error { &CustomAction{}, &Action{}, &ActionList{}, + &DataPartitionConfig{}, + &DataPartitionConfigList{}, ) // Add common types diff --git a/staging/src/k8s.io/api/core/v1/types.go b/staging/src/k8s.io/api/core/v1/types.go index b15e35e57e1..0a8cb0f4ede 100644 --- a/staging/src/k8s.io/api/core/v1/types.go +++ b/staging/src/k8s.io/api/core/v1/types.go @@ -5944,3 +5944,42 @@ type ControllerInstanceList struct { // List of controller instance Items []ControllerInstance `json:"items,omitempty" protobuf:"bytes,2,rep,name=items"` } + +// +genclient +// +genclient:nonNamespaced +// +genclient:nonTenanted +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// DataPartitionConfig contains api server data partition configurations. Name in ObjectMeta is used for identitification +type DataPartitionConfig struct { + metav1.TypeMeta `json:",inline"` + + metav1.ObjectMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // Start tenant is inclusive + StartTenant string `json:"startTenant" protobuf:"bytes,2,opt,name=startTenant"` + + // Whether this is an open end start + IsStartTenantValid bool `json:"isStartTenantValid,omitempty" protobuf:"varint,3,opt,name=isStartTenantValid"` + + // End tenant is exclusive + EndTenant string `json:"endTenant" protobuf:"bytes,4,opt,name=endTenant"` + + // Whether this is an open end end + IsEndTenantValid bool `json:"isEndTenantValid,omitempty" protobuf:"varint,5,opt,name=isEndTenantValid"` + + // Which service group is using this data configuration + ServiceGroupId string `json:"serviceGroupId" protobuf:"bytes,6,opt,name=serviceGroupId"` +} + +// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object + +// DataPartitionConfigList is a list of data partition configurations that api server data partition use +type DataPartitionConfigList struct { + metav1.TypeMeta `json:",inline"` + // +optional + metav1.ListMeta `json:"metadata,omitempty" protobuf:"bytes,1,opt,name=metadata"` + + // List of data partition configuration + Items []DataPartitionConfig `json:"items,omitempty" protobuf:"bytes,2,rep,name=items"` +} diff --git a/staging/src/k8s.io/api/core/v1/types_swagger_doc_generated.go b/staging/src/k8s.io/api/core/v1/types_swagger_doc_generated.go index d00d05da32b..3d7414b4320 100644 --- a/staging/src/k8s.io/api/core/v1/types_swagger_doc_generated.go +++ b/staging/src/k8s.io/api/core/v1/types_swagger_doc_generated.go @@ -510,6 +510,28 @@ func (DaemonEndpoint) SwaggerDoc() map[string]string { return map_DaemonEndpoint } +var map_DataPartitionConfig = map[string]string{ + "": "DataPartitionConfig contains api server data partition configurations. Name in ObjectMeta is used for identitification", + "startTenant": "Start tenant is inclusive", + "isStartTenantValid": "Whether this is an open end start", + "endTenant": "End tenant is exclusive", + "isEndTenantValid": "Whether this is an open end end", + "serviceGroupId": "Which service group is using this data configuration", +} + +func (DataPartitionConfig) SwaggerDoc() map[string]string { + return map_DataPartitionConfig +} + +var map_DataPartitionConfigList = map[string]string{ + "": "DataPartitionConfigList is a list of data partition configurations that api server data partition use", + "items": "List of data partition configuration", +} + +func (DataPartitionConfigList) SwaggerDoc() map[string]string { + return map_DataPartitionConfigList +} + var map_DownwardAPIProjection = map[string]string{ "": "Represents downward API info for projecting into a projected volume. Note that this is identical to a downwardAPI volume source without the default mode.", "items": "Items is a list of DownwardAPIVolume file", diff --git a/staging/src/k8s.io/api/core/v1/zz_generated.deepcopy.go b/staging/src/k8s.io/api/core/v1/zz_generated.deepcopy.go index cc8f6ec89a8..44df54a62dd 100644 --- a/staging/src/k8s.io/api/core/v1/zz_generated.deepcopy.go +++ b/staging/src/k8s.io/api/core/v1/zz_generated.deepcopy.go @@ -1185,6 +1185,65 @@ func (in *DaemonEndpoint) DeepCopy() *DaemonEndpoint { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DataPartitionConfig) DeepCopyInto(out *DataPartitionConfig) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ObjectMeta.DeepCopyInto(&out.ObjectMeta) + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DataPartitionConfig. +func (in *DataPartitionConfig) DeepCopy() *DataPartitionConfig { + if in == nil { + return nil + } + out := new(DataPartitionConfig) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *DataPartitionConfig) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *DataPartitionConfigList) DeepCopyInto(out *DataPartitionConfigList) { + *out = *in + out.TypeMeta = in.TypeMeta + in.ListMeta.DeepCopyInto(&out.ListMeta) + if in.Items != nil { + in, out := &in.Items, &out.Items + *out = make([]DataPartitionConfig, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DataPartitionConfigList. +func (in *DataPartitionConfigList) DeepCopy() *DataPartitionConfigList { + if in == nil { + return nil + } + out := new(DataPartitionConfigList) + in.DeepCopyInto(out) + return out +} + +// DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object. +func (in *DataPartitionConfigList) DeepCopyObject() runtime.Object { + if c := in.DeepCopy(); c != nil { + return c + } + return nil +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *DownwardAPIProjection) DeepCopyInto(out *DownwardAPIProjection) { *out = *in diff --git a/staging/src/k8s.io/api/testdata/HEAD/core.v1.DataPartitionConfig.json b/staging/src/k8s.io/api/testdata/HEAD/core.v1.DataPartitionConfig.json new file mode 100644 index 00000000000..55976ae216e --- /dev/null +++ b/staging/src/k8s.io/api/testdata/HEAD/core.v1.DataPartitionConfig.json @@ -0,0 +1,50 @@ +{ + "kind": "DataPartitionConfig", + "apiVersion": "v1", + "metadata": { + "name": "2", + "generateName": "3", + "tenant": "4", + "namespace": "5", + "selfLink": "6", + "uid": "ą飋īqJ枊a8衍`Ĩɘ.蘯6ċV夸e", + "hashKey": 2234230302359329354, + "resourceVersion": "16964250748386560239", + "generation": 5828590068104375683, + "creationTimestamp": null, + "deletionGracePeriodSeconds": 6797158496028726353, + "labels": { + "8": "9" + }, + "annotations": { + "10": "11" + }, + "ownerReferences": [ + { + "apiVersion": "12", + "kind": "13", + "name": "14", + "uid": "z廔ȇ{sŊƏ", + "hashKey": -3769286901598778062, + "controller": false, + "blockOwnerDeletion": true + } + ], + "finalizers": [ + "15" + ], + "clusterName": "16", + "managedFields": [ + { + "manager": "17", + "operation": "鐊唊飙Ş-U圴÷a/ɔ}摁(湗Ć]", + "apiVersion": "18", + "fields": {"19":{"20":null}} + } + ] + }, + "startTenant": "25", + "isStartTenantValid": true, + "endTenant": "26", + "serviceGroupId": "27" +} \ No newline at end of file diff --git a/staging/src/k8s.io/api/testdata/HEAD/core.v1.DataPartitionConfig.pb b/staging/src/k8s.io/api/testdata/HEAD/core.v1.DataPartitionConfig.pb new file mode 100644 index 0000000000000000000000000000000000000000..ea6b5b4453676049a04053d8e85d4d7d18445544 GIT binary patch literal 297 zcmV+^0oML&ICB6B843b+F%lC*VRT_oVRCe7bZKvHLvL7$Fpt8q%^o{C{O=%I~Z#Hh)bF6fxAHpGio<)pY}G88d3IW{yhH83|c zI5RjlH8wCZGdVbe+w8TH`P1=GLI6h#S_TRMI1&LlVh9QXF)$JWF)?Z> z3IZ`R8UisiA`E)vyOhX>dvnE##*ZojF)}a!H~~Piny{^jv9s9A0dfK{HF^RuHi`i~ z3IZ`V5+Ui3ish7w>7$v&o-I}7oV3HYVK2#)eddvYDCW7B#D-lO0x>u$5DE?o0x>xf v2nq%Y0x~cX0FnU#G?)R(w5s&=ljVRP5&|+c7y%*zGBzjxG6FI;8UP{y#jR-J literal 0 HcmV?d00001 diff --git a/staging/src/k8s.io/api/testdata/HEAD/core.v1.DataPartitionConfig.yaml b/staging/src/k8s.io/api/testdata/HEAD/core.v1.DataPartitionConfig.yaml new file mode 100644 index 00000000000..fbe63556509 --- /dev/null +++ b/staging/src/k8s.io/api/testdata/HEAD/core.v1.DataPartitionConfig.yaml @@ -0,0 +1,40 @@ +apiVersion: v1 +endTenant: "26" +isStartTenantValid: true +kind: DataPartitionConfig +metadata: + annotations: + "10": "11" + clusterName: "16" + creationTimestamp: null + deletionGracePeriodSeconds: 6797158496028726353 + finalizers: + - "15" + generateName: "3" + generation: 5828590068104375683 + hashKey: 2234230302359329354 + labels: + "8": "9" + managedFields: + - apiVersion: "18" + fields: + "19": + "20": null + manager: "17" + operation: 鐊唊飙Ş-U圴÷a/ɔ}摁(湗Ć] + name: "2" + namespace: "5" + ownerReferences: + - apiVersion: "12" + blockOwnerDeletion: true + controller: false + hashKey: -3769286901598778062 + kind: "13" + name: "14" + uid: z廔ȇ{sŊƏ + resourceVersion: "16964250748386560239" + selfLink: "6" + tenant: "4" + uid: ą飋īqJ枊a8衍`Ĩɘ.蘯6ċV夸e +serviceGroupId: "27" +startTenant: "25" diff --git a/staging/src/k8s.io/apimachinery/pkg/watch/watch.go b/staging/src/k8s.io/apimachinery/pkg/watch/watch.go index fe9bf373a48..af05d93eed6 100644 --- a/staging/src/k8s.io/apimachinery/pkg/watch/watch.go +++ b/staging/src/k8s.io/apimachinery/pkg/watch/watch.go @@ -18,6 +18,7 @@ limitations under the License. package watch import ( + "context" "fmt" "github.com/grafov/bcast" "k8s.io/klog" @@ -43,42 +44,88 @@ type AggregatedWatchInterface interface { ResultChan() <-chan Event AddWatchInterface(Interface, error) - GetErrors() []error GetFirstError() error - GetWatchers() []Interface + GetWatchersCount() int } type AggregatedWatcher struct { - sync.Mutex - watchers []Interface - errs []error + mapLock sync.RWMutex + watchers map[int]Interface + errs map[int]error + watcherIndex int + aggChan chan Event - stopped bool stopChGrp *bcast.Group + + stopped bool + stopLock sync.RWMutex + + ctx context.Context + cancel context.CancelFunc + allowWatcherReset bool } func NewAggregatedWatcher() *AggregatedWatcher { a := &AggregatedWatcher{ - watchers: make([]Interface, 0), - errs: make([]error, 0), - aggChan: make(chan Event), - stopped: false, - stopChGrp: bcast.NewGroup(), + watchers: make(map[int]Interface), + errs: make(map[int]error), + watcherIndex: 0, + aggChan: make(chan Event), + stopped: false, + allowWatcherReset: false, + stopChGrp: bcast.NewGroup(), } go a.stopChGrp.Broadcast(0) return a } +func NewAggregatedWatcherWithReset(ctx context.Context) *AggregatedWatcher { + a := NewAggregatedWatcher() + a.allowWatcherReset = true + a.ctx, a.cancel = context.WithCancel(ctx) + go func(aw *AggregatedWatcher) { + for { + select { + case <-aw.ctx.Done(): + aw.Stop() + return + } + } + }(a) + + return a +} + func NewAggregatedWatcherWithOneWatch(watcher Interface, err error) *AggregatedWatcher { a := NewAggregatedWatcher() a.AddWatchInterface(watcher, err) return a } +func (a *AggregatedWatcher) addWatcherAndError(watcher Interface, err error) { + a.mapLock.Lock() + a.watchers[a.watcherIndex] = watcher + a.errs[a.watcherIndex] = err + a.watcherIndex++ + a.mapLock.Unlock() +} + +func (a *AggregatedWatcher) removeWatcherAndError(watcher Interface) { + a.mapLock.Lock() + for k, v := range a.watchers { + if v == watcher { + delete(a.watchers, k) + delete(a.errs, k) + break + } + } + a.mapLock.Unlock() +} + func (a *AggregatedWatcher) AddWatchInterface(watcher Interface, err error) { - a.watchers = append(a.watchers, watcher) - a.errs = append(a.errs, err) + a.addWatcherAndError(watcher, err) + //klog.Infof("Added watch channel %v into aggregated chan %#v.", watcher, a.aggChan) go func(w Interface, a *AggregatedWatcher) { if w != nil { @@ -90,11 +137,11 @@ func (a *AggregatedWatcher) AddWatchInterface(watcher Interface, err error) { return case signal, ok := <-w.ResultChan(): if !ok { - klog.V(4).Infof("watch channel closed for aggregated chan %#v.", a.aggChan) + //klog.Infof("watch channel %v closed for aggregated chan %#v.", w, a.aggChan) a.closeWatcher(w, stopCh) return } else { - //klog.V(5).Infof("Get event (chan %#v) %s.", a.aggChan, PrintEvent(signal)) + //klog.V(3).Infof("Get event (chan %#v) %s.", a.aggChan, PrintEvent(signal)) } select { @@ -102,7 +149,7 @@ func (a *AggregatedWatcher) AddWatchInterface(watcher Interface, err error) { a.closeWatcher(w, stopCh) return case a.aggChan <- signal: - //klog.V(5).Infof("Sent event (chan %#v) %s.", a.aggChan, PrintEvent(signal)) + //klog.V(3).Infof("Sent event (chan %#v) %s.", a.aggChan, PrintEvent(signal)) } } } @@ -110,12 +157,15 @@ func (a *AggregatedWatcher) AddWatchInterface(watcher Interface, err error) { }(watcher, a) } -func (a *AggregatedWatcher) closeWatcher(w Interface, stopCh *bcast.Member) { - w.Stop() +func (a *AggregatedWatcher) closeWatcher(watcher Interface, stopCh *bcast.Member) { + watcher.Stop() a.stopChGrp.Leave(stopCh) - if a.stopChGrp.MemberCount() == 0 { - close(a.aggChan) + a.removeWatcherAndError(watcher) + + if !a.allowWatcherReset && a.stopChGrp.MemberCount() == 0 { + //klog.Infof("Close watcher %v caused aggregated channel %v closed", watcher, a.aggChan) a.stopChGrp.Close() + close(a.aggChan) } } @@ -128,24 +178,26 @@ func PrintEvent(signal Event) string { } func (a *AggregatedWatcher) Stop() { - a.Lock() - defer a.Unlock() + a.stopLock.Lock() + if a.stopped { + a.stopLock.Unlock() + return + } + if !a.stopped { a.stopped = true + a.allowWatcherReset = false go func() { a.stopChGrp.Send("Stop all watch channels") }() } + a.stopLock.Unlock() } func (a *AggregatedWatcher) ResultChan() <-chan Event { return a.aggChan } -func (a *AggregatedWatcher) GetErrors() []error { - return a.errs -} - // Tmp solution for client can handles only 1 error func (a *AggregatedWatcher) GetFirstError() error { for _, err := range a.errs { @@ -157,8 +209,8 @@ func (a *AggregatedWatcher) GetFirstError() error { return nil } -func (a *AggregatedWatcher) GetWatchers() []Interface { - return a.watchers +func (a *AggregatedWatcher) GetWatchersCount() int { + return len(a.watchers) } // EventType defines the possible types of events. diff --git a/staging/src/k8s.io/apiserver/pkg/storage/BUILD b/staging/src/k8s.io/apiserver/pkg/storage/BUILD index 4ed7f4bea17..dbb8ebba8c9 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/BUILD +++ b/staging/src/k8s.io/apiserver/pkg/storage/BUILD @@ -56,6 +56,7 @@ filegroup( srcs = [ ":package-srcs", "//staging/src/k8s.io/apiserver/pkg/storage/cacher:all-srcs", + "//staging/src/k8s.io/apiserver/pkg/storage/datapartition:all-srcs", "//staging/src/k8s.io/apiserver/pkg/storage/errors:all-srcs", "//staging/src/k8s.io/apiserver/pkg/storage/etcd:all-srcs", "//staging/src/k8s.io/apiserver/pkg/storage/etcd3:all-srcs", diff --git a/staging/src/k8s.io/apiserver/pkg/storage/datapartition/BUILD b/staging/src/k8s.io/apiserver/pkg/storage/datapartition/BUILD new file mode 100644 index 00000000000..f8c9f3fbd2e --- /dev/null +++ b/staging/src/k8s.io/apiserver/pkg/storage/datapartition/BUILD @@ -0,0 +1,36 @@ +load("@io_bazel_rules_go//go:def.bzl", "go_library") + +go_library( + name = "go_default_library", + srcs = [ + "datapartitionmanager.go", + "update.go", + ], + importmap = "k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/storage/datapartition", + importpath = "k8s.io/apiserver/pkg/storage/datapartition", + visibility = ["//visibility:public"], + deps = [ + "//staging/src/k8s.io/api/core/v1:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/util/runtime:go_default_library", + "//staging/src/k8s.io/client-go/informers/core/v1:go_default_library", + "//staging/src/k8s.io/client-go/listers/core/v1:go_default_library", + "//staging/src/k8s.io/client-go/tools/cache:go_default_library", + "//vendor/github.com/grafov/bcast:go_default_library", + "//vendor/k8s.io/klog:go_default_library", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], + visibility = ["//visibility:public"], +) diff --git a/staging/src/k8s.io/apiserver/pkg/storage/datapartition/datapartitionmanager.go b/staging/src/k8s.io/apiserver/pkg/storage/datapartition/datapartitionmanager.go new file mode 100644 index 00000000000..622266f89dd --- /dev/null +++ b/staging/src/k8s.io/apiserver/pkg/storage/datapartition/datapartitionmanager.go @@ -0,0 +1,235 @@ +/* +Copyright 2020 Authors of Arktos. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package datapartition + +import ( + "fmt" + "github.com/grafov/bcast" + v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/labels" + utilruntime "k8s.io/apimachinery/pkg/util/runtime" + coreinformers "k8s.io/client-go/informers/core/v1" + corelisters "k8s.io/client-go/listers/core/v1" + "k8s.io/client-go/tools/cache" + "k8s.io/klog" + "strconv" + "sync" +) + +var instance *DataPartitionConfigManager +var checkInstanceHandler = checkInstanceExistence + +type DataPartitionConfigManager struct { + partitionListerSynced cache.InformerSynced + partitionLister corelisters.DataPartitionConfigLister + + isDataPartitionInitialized bool + DataPartitionConfig v1.DataPartitionConfig + rev int + ServiceGroupId string + updateChGrp *bcast.Group + + mux sync.Mutex + notifyHandler func(newDp *v1.DataPartitionConfig) +} + +func GetDataPartitionConfigManager() *DataPartitionConfigManager { + return instance +} + +func checkInstanceExistence() { + if instance != nil { + klog.Fatalf("Unexpected reference to data partition manager - initialized") + } +} + +func NewDataPartitionConfigManager(serviceGroupId string, dpInformer coreinformers.DataPartitionConfigInformer) *DataPartitionConfigManager { + checkInstanceHandler() + + manager := &DataPartitionConfigManager{ + ServiceGroupId: serviceGroupId, + isDataPartitionInitialized: false, + updateChGrp: GetDataPartitionUpdateChGrp(), + } + manager.notifyHandler = manager.notifyDataPartitionChanges + + dpInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{ + AddFunc: manager.addDataPartition, + UpdateFunc: manager.updateDataPartition, + DeleteFunc: manager.deleteDataPartition, + }) + + manager.partitionLister = dpInformer.Lister() + manager.partitionListerSynced = dpInformer.Informer().HasSynced + err := manager.syncDataPartition() + if err != nil { + klog.Fatalf("Unable to get data partitions from registry. Error %v", err) + } + + instance = manager + return instance +} + +func (m *DataPartitionConfigManager) Run(stopCh <-chan struct{}) { + klog.Infof("Starting data partition manager. service group id %v", m.ServiceGroupId) + defer klog.Infof("Shutting down data partition manager. service group id %v", m.ServiceGroupId) + + if !cache.WaitForCacheSync(stopCh, m.partitionListerSynced) { + klog.Infof("Data partitions NOT synced %v. service group id %v", m.partitionListerSynced, m.ServiceGroupId) + return + } + + klog.Infof("Caches are synced for data partition configs. service group id %s", m.ServiceGroupId) + <-stopCh + m.updateChGrp.Close() +} + +func (m *DataPartitionConfigManager) syncDataPartition() error { + m.mux.Lock() + klog.V(4).Infof("mux acquired syncDataPartition. service group id %v", m.ServiceGroupId) + defer func() { + m.mux.Unlock() + klog.V(4).Infof("mux released syncDataPartition. service group id %v", m.ServiceGroupId) + }() + + paritions, err := m.partitionLister.List(labels.Everything()) + if err != nil { + klog.Fatalf("Error in getting data partition configurations: %v", err) + } + klog.V(3).Infof("Api server data partitions all [%#v]", paritions) + + for _, partition := range paritions { + if partition.ServiceGroupId == m.ServiceGroupId { + m.DataPartitionConfig = *partition + m.isDataPartitionInitialized = true + klog.Infof("Current api server data partition [%#v]", m.DataPartitionConfig) + break + } + } + if !m.isDataPartitionInitialized { + klog.V(3).Infof("Api server data partition not configured for api server group %s. Default to take all data", m.ServiceGroupId) + } + return nil +} + +func (m *DataPartitionConfigManager) addDataPartition(obj interface{}) { + dp := obj.(*v1.DataPartitionConfig) + if dp.DeletionTimestamp != nil { + return + } + klog.V(3).Infof("Received event for NEW data partition %+v.", dp) + + rev, err := strconv.Atoi(dp.ResourceVersion) + if err != nil { + klog.Errorf("Got invalid resource version %s for data partition %v.", dp.ResourceVersion, dp) + return + } + + if dp.ServiceGroupId != "" && dp.ServiceGroupId == m.ServiceGroupId { + if m.isDataPartitionInitialized { + if m.DataPartitionConfig.ResourceVersion != dp.ResourceVersion { + klog.Fatalf("Unexpected multiple data partitions for same service group id: %s. Existing data partition [%+v], new data partition [%+v]", m.ServiceGroupId, m.DataPartitionConfig, dp) + } + return + } + + m.mux.Lock() + klog.V(4).Infof("mux acquired addDataPartition. service group id %s", m.ServiceGroupId) + defer func() { + m.mux.Unlock() + klog.V(4).Infof("mux released addDataPartition. service group id %s", m.ServiceGroupId) + }() + + m.notifyHandler(dp) + m.DataPartitionConfig = *dp + m.isDataPartitionInitialized = true + m.rev = rev + } +} + +func (m *DataPartitionConfigManager) updateDataPartition(old, cur interface{}) { + curDp := cur.(*v1.DataPartitionConfig) + oldDp := old.(*v1.DataPartitionConfig) + + if curDp.ResourceVersion == oldDp.ResourceVersion { + return + } + + oldRev, _ := strconv.Atoi(oldDp.ResourceVersion) + newRev, err := strconv.Atoi(curDp.ResourceVersion) + if err != nil { + klog.Errorf("Got invalid resource version %s for data partition %v.", curDp.ResourceVersion, curDp) + return + } + + if newRev <= oldRev { + klog.V(3).Infof("Got staled data partition %+v in UpdateFunc. Existing Version %s, new instance version %s.", curDp, oldDp.ResourceVersion, curDp.ResourceVersion) + return + } + + if curDp.ServiceGroupId != "" && curDp.ServiceGroupId == m.ServiceGroupId { + m.mux.Lock() + klog.V(4).Infof("mux acquired updateDataPartition. service group id %s", m.ServiceGroupId) + defer func() { + m.mux.Unlock() + klog.V(4).Infof("mux released updateDataPartition. service group id %s", m.ServiceGroupId) + }() + + if m.isDataPartitionInitialized && !isDataPartitionEqual(m.DataPartitionConfig, curDp) { + m.notifyHandler(curDp) + } + + m.DataPartitionConfig = *curDp + m.isDataPartitionInitialized = true + m.rev = newRev + } +} + +func (m *DataPartitionConfigManager) deleteDataPartition(obj interface{}) { + dp, ok := obj.(*v1.DataPartitionConfig) + if !ok { + tombstone, ok := obj.(cache.DeletedFinalStateUnknown) + if !ok { + utilruntime.HandleError(fmt.Errorf("couldn't get object from tombstone %+v.", obj)) + return + } + dp, ok = tombstone.Obj.(*v1.DataPartitionConfig) + if !ok { + utilruntime.HandleError(fmt.Errorf("tombstone contained object that is not a pod %#v.", obj)) + return + } + } + + klog.V(3).Infof("Received delete event for data partition %+v", dp) + if dp.ServiceGroupId != m.ServiceGroupId { + return + } +} + +func (m *DataPartitionConfigManager) notifyDataPartitionChanges(newDp *v1.DataPartitionConfig) { + go func() { + m.updateChGrp.Send(*newDp) + }() +} + +func isDataPartitionEqual(dp1 v1.DataPartitionConfig, dp2 *v1.DataPartitionConfig) bool { + if dp1.IsEndTenantValid != dp2.IsEndTenantValid || dp1.EndTenant != dp2.EndTenant || dp1.StartTenant != dp2.StartTenant || dp1.IsStartTenantValid != dp2.IsStartTenantValid { + return false + } + + return true +} diff --git a/staging/src/k8s.io/apiserver/pkg/storage/datapartition/update.go b/staging/src/k8s.io/apiserver/pkg/storage/datapartition/update.go new file mode 100644 index 00000000000..73ff8ea5e46 --- /dev/null +++ b/staging/src/k8s.io/apiserver/pkg/storage/datapartition/update.go @@ -0,0 +1,44 @@ +/* +Copyright 2020 Authors of Arktos. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package datapartition + +import ( + "github.com/grafov/bcast" + "sync" +) + +var datapartitionUpdateChGrp *bcast.Group +var mux sync.Mutex + +func GetDataPartitionUpdateChGrp() *bcast.Group { + if datapartitionUpdateChGrp != nil { + return datapartitionUpdateChGrp + } + + mux.Lock() + if datapartitionUpdateChGrp != nil { + return datapartitionUpdateChGrp + } + + if datapartitionUpdateChGrp == nil { + datapartitionUpdateChGrp = bcast.NewGroup() + go datapartitionUpdateChGrp.Broadcast(0) + } + mux.Unlock() + + return datapartitionUpdateChGrp +} diff --git a/staging/src/k8s.io/apiserver/pkg/storage/etcd3/BUILD b/staging/src/k8s.io/apiserver/pkg/storage/etcd3/BUILD index 8a7ec19fa87..119c7e03b72 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/etcd3/BUILD +++ b/staging/src/k8s.io/apiserver/pkg/storage/etcd3/BUILD @@ -63,6 +63,7 @@ go_library( importmap = "k8s.io/kubernetes/vendor/k8s.io/apiserver/pkg/storage/etcd3", importpath = "k8s.io/apiserver/pkg/storage/etcd3", deps = [ + "//staging/src/k8s.io/api/core/v1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/api/meta:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/conversion:go_default_library", @@ -78,6 +79,7 @@ go_library( "//vendor/github.com/coreos/etcd/clientv3:go_default_library", "//vendor/github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes:go_default_library", "//vendor/github.com/coreos/etcd/mvcc/mvccpb:go_default_library", + "//vendor/github.com/grafov/bcast:go_default_library", "//vendor/k8s.io/klog:go_default_library", "//vendor/k8s.io/utils/trace:go_default_library", ], diff --git a/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store.go b/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store.go index f11caf64737..721a0368e8b 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store.go +++ b/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store.go @@ -24,6 +24,7 @@ import ( "encoding/json" "errors" "fmt" + "github.com/grafov/bcast" "path" "reflect" "strings" @@ -85,20 +86,20 @@ type objState struct { } // New returns an etcd3 implementation of storage.Interface. -func New(c *clientv3.Client, codec runtime.Codec, prefix string, transformer value.Transformer, pagingEnabled bool) storage.Interface { - return NewWithPartitionConfig(c, codec, prefix, transformer, pagingEnabled, nil) +func New(c *clientv3.Client, codec runtime.Codec, prefix string, transformer value.Transformer, pagingEnabled bool, updatePartitionCh *bcast.Member) storage.Interface { + return newStoreWithPartitionConfig(c, pagingEnabled, codec, prefix, transformer, nil, updatePartitionCh) } // New returns an etcd3 implementation of storage.Interface with partition config -func NewWithPartitionConfig(c *clientv3.Client, codec runtime.Codec, prefix string, transformer value.Transformer, pagingEnabled bool, partitionConfigMap map[string]storage.Interval) storage.Interface { - return newStoreWithPartitionConfig(c, pagingEnabled, codec, prefix, transformer, partitionConfigMap) +func NewWithPartitionConfig(c *clientv3.Client, codec runtime.Codec, prefix string, transformer value.Transformer, pagingEnabled bool, partitionConfigMap map[string]storage.Interval, updatePartitionCh *bcast.Member) storage.Interface { + return newStoreWithPartitionConfig(c, pagingEnabled, codec, prefix, transformer, partitionConfigMap, updatePartitionCh) } -func newStore(c *clientv3.Client, pagingEnabled bool, codec runtime.Codec, prefix string, transformer value.Transformer) *store { - return newStoreWithPartitionConfig(c, pagingEnabled, codec, prefix, transformer, nil) +func newStore(c *clientv3.Client, pagingEnabled bool, codec runtime.Codec, prefix string, transformer value.Transformer, updatePartitionCh *bcast.Member) *store { + return newStoreWithPartitionConfig(c, pagingEnabled, codec, prefix, transformer, nil, updatePartitionCh) } -func newStoreWithPartitionConfig(c *clientv3.Client, pagingEnabled bool, codec runtime.Codec, prefix string, transformer value.Transformer, partitionConfigMap map[string]storage.Interval) *store { +func newStoreWithPartitionConfig(c *clientv3.Client, pagingEnabled bool, codec runtime.Codec, prefix string, transformer value.Transformer, partitionConfigMap map[string]storage.Interval, updatePartitionCh *bcast.Member) *store { versioner := etcd.APIObjectVersioner{} result := &store{ client: c, @@ -110,7 +111,7 @@ func newStoreWithPartitionConfig(c *clientv3.Client, pagingEnabled bool, codec r // no-op for default prefix of '/registry'. // keeps compatibility with etcd2 impl for custom prefixes that don't start with '/' pathPrefix: path.Join("/", prefix), - watcher: newWatcherWithPartitionConfig(c, codec, versioner, transformer, partitionConfigMap), + watcher: newWatcherWithPartitionConfig(c, codec, versioner, transformer, partitionConfigMap, updatePartitionCh), leaseManager: newDefaultLeaseManager(c), } return result @@ -689,11 +690,13 @@ func growSlice(v reflect.Value, maxCapacity int, sizes ...int) { // Watch implements storage.Interface.Watch. func (s *store) Watch(ctx context.Context, key string, resourceVersion string, pred storage.SelectionPredicate) watch.AggregatedWatchInterface { + //klog.Infof("=====etcd3 store watch key %s", key) return s.watch(ctx, key, resourceVersion, pred, false) } // WatchList implements storage.Interface.WatchList. func (s *store) WatchList(ctx context.Context, key string, resourceVersion string, pred storage.SelectionPredicate) watch.AggregatedWatchInterface { + //klog.Infof("=====etcd3 store watchlist key %s", key) return s.watch(ctx, key, resourceVersion, pred, true) } diff --git a/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store_test.go b/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store_test.go index 0dea13f2993..8b433fb2887 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store_test.go +++ b/staging/src/k8s.io/apiserver/pkg/storage/etcd3/store_test.go @@ -684,7 +684,7 @@ func TestTransformationFailure(t *testing.T) { codec := apitesting.TestCodec(codecs, examplev1.SchemeGroupVersion) cluster := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 1}) defer cluster.Terminate(t) - store := newStore(cluster.RandClient(), false, codec, "", prefixTransformer{prefix: []byte(defaultTestPrefix)}) + store := newStore(cluster.RandClient(), false, codec, "", prefixTransformer{prefix: []byte(defaultTestPrefix)}, nil) ctx := context.Background() preset := []struct { @@ -761,8 +761,8 @@ func TestList(t *testing.T) { codec := apitesting.TestCodec(codecs, examplev1.SchemeGroupVersion) cluster := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 1}) defer cluster.Terminate(t) - store := newStore(cluster.RandClient(), true, codec, "", prefixTransformer{prefix: []byte(defaultTestPrefix)}) - disablePagingStore := newStore(cluster.RandClient(), false, codec, "", prefixTransformer{prefix: []byte(defaultTestPrefix)}) + store := newStore(cluster.RandClient(), true, codec, "", prefixTransformer{prefix: []byte(defaultTestPrefix)}, nil) + disablePagingStore := newStore(cluster.RandClient(), false, codec, "", prefixTransformer{prefix: []byte(defaultTestPrefix)}, nil) ctx := context.Background() // Setup storage with the following structure: @@ -1086,7 +1086,7 @@ func TestListContinuation(t *testing.T) { codec := apitesting.TestCodec(codecs, examplev1.SchemeGroupVersion) cluster := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 1}) defer cluster.Terminate(t) - store := newStore(cluster.RandClient(), true, codec, "", prefixTransformer{prefix: []byte(defaultTestPrefix)}) + store := newStore(cluster.RandClient(), true, codec, "", prefixTransformer{prefix: []byte(defaultTestPrefix)}, nil) ctx := context.Background() // Setup storage with the following structure: @@ -1197,7 +1197,7 @@ func TestListInconsistentContinuation(t *testing.T) { codec := apitesting.TestCodec(codecs, examplev1.SchemeGroupVersion) cluster := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 1}) defer cluster.Terminate(t) - store := newStore(cluster.RandClient(), true, codec, "", prefixTransformer{prefix: []byte(defaultTestPrefix)}) + store := newStore(cluster.RandClient(), true, codec, "", prefixTransformer{prefix: []byte(defaultTestPrefix)}, nil) ctx := context.Background() // Setup storage with the following structure: @@ -1342,7 +1342,7 @@ func TestListInconsistentContinuation(t *testing.T) { func testSetup(t *testing.T) (context.Context, *store, *integration.ClusterV3) { codec := apitesting.TestCodec(codecs, examplev1.SchemeGroupVersion) cluster := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 1}) - store := newStore(cluster.RandClient(), true, codec, "", prefixTransformer{prefix: []byte(defaultTestPrefix)}) + store := newStore(cluster.RandClient(), true, codec, "", prefixTransformer{prefix: []byte(defaultTestPrefix)}, nil) ctx := context.Background() // As 30s is the default timeout for testing in glboal configuration, // we cannot wait longer than that in a single time: change it to 10 @@ -1382,7 +1382,7 @@ func TestPrefix(t *testing.T) { "/registry": "/registry", } for configuredPrefix, effectivePrefix := range testcases { - store := newStore(cluster.RandClient(), true, codec, configuredPrefix, transformer) + store := newStore(cluster.RandClient(), true, codec, configuredPrefix, transformer, nil) if store.pathPrefix != effectivePrefix { t.Errorf("configured prefix of %s, expected effective prefix of %s, got %s", configuredPrefix, effectivePrefix, store.pathPrefix) } diff --git a/staging/src/k8s.io/apiserver/pkg/storage/etcd3/watcher.go b/staging/src/k8s.io/apiserver/pkg/storage/etcd3/watcher.go index 734583f7d3f..625f8b170c4 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/etcd3/watcher.go +++ b/staging/src/k8s.io/apiserver/pkg/storage/etcd3/watcher.go @@ -21,6 +21,8 @@ import ( "context" "errors" "fmt" + "github.com/grafov/bcast" + corev1 "k8s.io/api/core/v1" "os" "strconv" "strings" @@ -69,11 +71,12 @@ func TestOnlySetFatalOnDecodeError(b bool) { } type watcher struct { - client *clientv3.Client - codec runtime.Codec - versioner storage.Versioner - transformer value.Transformer - partitionConfig map[string]storage.Interval + client *clientv3.Client + codec runtime.Codec + versioner storage.Versioner + transformer value.Transformer + partitionConfig map[string]storage.Interval + updatePartitionCh *bcast.Member } // watchChan implements watch.Interface. @@ -91,13 +94,14 @@ type watchChan struct { keyRange keyRange } -func newWatcherWithPartitionConfig(client *clientv3.Client, codec runtime.Codec, versioner storage.Versioner, transformer value.Transformer, partitionConfigMap map[string]storage.Interval) *watcher { +func newWatcherWithPartitionConfig(client *clientv3.Client, codec runtime.Codec, versioner storage.Versioner, transformer value.Transformer, partitionConfigMap map[string]storage.Interval, updatePartitionCh *bcast.Member) *watcher { return &watcher{ - client: client, - codec: codec, - versioner: versioner, - transformer: transformer, - partitionConfig: partitionConfigMap, + client: client, + codec: codec, + versioner: versioner, + transformer: transformer, + partitionConfig: partitionConfigMap, + updatePartitionCh: updatePartitionCh, } } @@ -109,19 +113,74 @@ func newWatcherWithPartitionConfig(client *clientv3.Client, codec runtime.Codec, // If recursive is true, it watches any children and directories under the key, excluding the root key itself. // pred must be non-nil. Only if pred matches the change, it will be returned. func (w *watcher) Watch(ctx context.Context, key string, rev int64, recursive bool, pred storage.SelectionPredicate) watch.AggregatedWatchInterface { + //klog.Infof("========= watcher watch key %s", key) if recursive && !strings.HasSuffix(key, "/") { key += "/" } - res := watch.NewAggregatedWatcher() - keyRanges := GetKeyAndOptFromPartitionConfig(key, w.partitionConfig) - for _, kr := range keyRanges { - wc := w.createWatchChan(ctx, key, rev, recursive, pred, kr) - go wc.run() - res.AddWatchInterface(wc, nil) - } + + res := watch.NewAggregatedWatcherWithReset(ctx) + //klog.Infof("Created aggregated watch channel %#v for key %s", res.ResultChan(), key) + go w.run(ctx, key, rev, recursive, pred, res) return res } +func (w *watcher) run(ctx context.Context, key string, rev int64, recursive bool, pred storage.SelectionPredicate, res *watch.AggregatedWatcher) { + for { + keyRanges := GetKeyAndOptFromPartitionConfig(key, w.partitionConfig) + wcs := make([]*watchChan, 0) + + for _, kr := range keyRanges { + wc := w.createWatchChan(ctx, key, rev, recursive, pred, kr) + wcs = append(wcs, wc) + go wc.run() + res.AddWatchInterface(wc, nil) + } + + if w.updatePartitionCh == nil { + return + } else { + select { + case data, ok := <-w.updatePartitionCh.Read: + if !ok { + klog.Fatalf("Channel closed for data partition update. key %s", key) + return + } + + dataPartition, _ := data.(corev1.DataPartitionConfig) + //klog.V(4).Infof("Reset data partition begin. watch key %s, New partition [%+v].", + // key, dataPartition.StartTenant, dataPartition.IsStartTenantValid, dataPartition.EndTenant, dataPartition.IsEndTenantValid) + for _, wc := range wcs { + wc.Stop() + } + + w.updatePartitionConfig(dataPartition) + klog.V(4).Infof("Reset data partition DONE. watch key %s, New partition [%+v]", + key, dataPartition.StartTenant, dataPartition.IsStartTenantValid, dataPartition.EndTenant, dataPartition.IsEndTenantValid) + } + } + } +} + +func (w *watcher) updatePartitionConfig(dp corev1.DataPartitionConfig) { + startTenant := "" + if dp.IsStartTenantValid { + startTenant = dp.StartTenant + } + endTenant := "" + if dp.IsEndTenantValid { + endTenant = dp.EndTenant + } + + interval := storage.Interval{ + Begin: startTenant, + End: endTenant, + } + + for k := range w.partitionConfig { + w.partitionConfig[k] = interval + } +} + func (w *watcher) createWatchChan(ctx context.Context, key string, rev int64, recursive bool, pred storage.SelectionPredicate, kr keyRange) *watchChan { wc := &watchChan{ watcher: w, @@ -144,7 +203,6 @@ func (w *watcher) createWatchChan(ctx context.Context, key string, rev int64, re func (wc *watchChan) run() { watchClosedCh := make(chan struct{}) - go wc.startWatching(watchClosedCh) var resultChanWG sync.WaitGroup @@ -175,6 +233,8 @@ func (wc *watchChan) run() { // we need to wait until resultChan wouldn't be used anymore resultChanWG.Wait() close(wc.resultChan) + + klog.V(3).Infof("Result channel closed for key %s, range %+v", wc.key, wc.keyRange) } func (wc *watchChan) Stop() { diff --git a/staging/src/k8s.io/apiserver/pkg/storage/etcd3/watcher_test.go b/staging/src/k8s.io/apiserver/pkg/storage/etcd3/watcher_test.go index 510a83e1a19..50fa011f5eb 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/etcd3/watcher_test.go +++ b/staging/src/k8s.io/apiserver/pkg/storage/etcd3/watcher_test.go @@ -226,13 +226,13 @@ func TestWatchError(t *testing.T) { codec := &testCodec{apitesting.TestCodec(codecs, examplev1.SchemeGroupVersion)} cluster := integration.NewClusterV3(t, &integration.ClusterConfig{Size: 1}) defer cluster.Terminate(t) - invalidStore := newStore(cluster.RandClient(), true, codec, "", prefixTransformer{prefix: []byte("test!")}) + invalidStore := newStore(cluster.RandClient(), true, codec, "", prefixTransformer{prefix: []byte("test!")}, nil) ctx := context.Background() aw := invalidStore.Watch(ctx, "/abc", "0", storage.Everything) if aw.GetFirstError() != nil { t.Fatalf("Watch failed: %v", aw.GetFirstError()) } - validStore := newStore(cluster.RandClient(), true, codec, "", prefixTransformer{prefix: []byte("test!")}) + validStore := newStore(cluster.RandClient(), true, codec, "", prefixTransformer{prefix: []byte("test!")}, nil) validStore.GuaranteedUpdate(ctx, "/abc", &example.Pod{}, true, nil, storage.SimpleUpdate( func(runtime.Object) (runtime.Object, error) { return &example.Pod{ObjectMeta: metav1.ObjectMeta{Name: "foo"}}, nil diff --git a/staging/src/k8s.io/apiserver/pkg/storage/storagebackend/factory/BUILD b/staging/src/k8s.io/apiserver/pkg/storage/storagebackend/factory/BUILD index c9a902f0078..0c56f5aadd5 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/storagebackend/factory/BUILD +++ b/staging/src/k8s.io/apiserver/pkg/storage/storagebackend/factory/BUILD @@ -36,6 +36,7 @@ go_library( deps = [ "//staging/src/k8s.io/apimachinery/pkg/util/wait:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/storage/datapartition:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/etcd3:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/storagebackend:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/value:go_default_library", diff --git a/staging/src/k8s.io/apiserver/pkg/storage/storagebackend/factory/etcd3.go b/staging/src/k8s.io/apiserver/pkg/storage/storagebackend/factory/etcd3.go index f1c42a98412..ea55b5e8636 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/storagebackend/factory/etcd3.go +++ b/staging/src/k8s.io/apiserver/pkg/storage/storagebackend/factory/etcd3.go @@ -21,6 +21,7 @@ import ( "context" "fmt" "io/ioutil" + "k8s.io/apiserver/pkg/storage/datapartition" "path" "strings" "sync" @@ -203,11 +204,13 @@ func newETCD3Storage(c storagebackend.Config) (storage.Interface, DestroyFunc, e transformer = value.IdentityTransformer } + updatePartitionChGrp := datapartition.GetDataPartitionUpdateChGrp() + updatePartitionCh := updatePartitionChGrp.Join() if c.PartitionConfigFilepath != "" { configMap, _ := parseConfig(c.PartitionConfigFilepath) - return etcd3.NewWithPartitionConfig(client, c.Codec, c.Prefix, transformer, c.Paging, configMap), destroyFunc, nil + return etcd3.NewWithPartitionConfig(client, c.Codec, c.Prefix, transformer, c.Paging, configMap, updatePartitionCh), destroyFunc, nil } - return etcd3.New(client, c.Codec, c.Prefix, transformer, c.Paging), destroyFunc, nil + return etcd3.New(client, c.Codec, c.Prefix, transformer, c.Paging, updatePartitionCh), destroyFunc, nil } // Each line in the config needs to contain three part: keyName, start, end diff --git a/staging/src/k8s.io/apiserver/pkg/storage/tests/cacher_test.go b/staging/src/k8s.io/apiserver/pkg/storage/tests/cacher_test.go index 78d2da8c199..cdeef2bab6a 100644 --- a/staging/src/k8s.io/apiserver/pkg/storage/tests/cacher_test.go +++ b/staging/src/k8s.io/apiserver/pkg/storage/tests/cacher_test.go @@ -97,7 +97,7 @@ func AddObjectMetaFieldsSet(source fields.Set, objectMeta *metav1.ObjectMeta, ha func newEtcdTestStorage(t *testing.T, prefix string) (*etcdtesting.EtcdTestServer, storage.Interface) { server, _ := etcdtesting.NewUnsecuredEtcd3TestClientServer(t) - storage := etcd3.New(server.V3Client, apitesting.TestCodec(codecs, examplev1.SchemeGroupVersion), prefix, value.IdentityTransformer, true) + storage := etcd3.New(server.V3Client, apitesting.TestCodec(codecs, examplev1.SchemeGroupVersion), prefix, value.IdentityTransformer, true, nil) return server, storage } diff --git a/staging/src/k8s.io/client-go/informers/core/v1/BUILD b/staging/src/k8s.io/client-go/informers/core/v1/BUILD index 88100a6cd5a..25dcb7e8c89 100644 --- a/staging/src/k8s.io/client-go/informers/core/v1/BUILD +++ b/staging/src/k8s.io/client-go/informers/core/v1/BUILD @@ -12,6 +12,7 @@ go_library( "componentstatus.go", "configmap.go", "controllerinstance.go", + "datapartitionconfig.go", "endpoints.go", "event.go", "interface.go", diff --git a/staging/src/k8s.io/client-go/informers/core/v1/datapartitionconfig.go b/staging/src/k8s.io/client-go/informers/core/v1/datapartitionconfig.go new file mode 100644 index 00000000000..2ef0f696759 --- /dev/null +++ b/staging/src/k8s.io/client-go/informers/core/v1/datapartitionconfig.go @@ -0,0 +1,88 @@ +/* +Copyright 2020 Authors of Arktos. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by informer-gen. DO NOT EDIT. + +package v1 + +import ( + time "time" + + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + runtime "k8s.io/apimachinery/pkg/runtime" + watch "k8s.io/apimachinery/pkg/watch" + internalinterfaces "k8s.io/client-go/informers/internalinterfaces" + kubernetes "k8s.io/client-go/kubernetes" + v1 "k8s.io/client-go/listers/core/v1" + cache "k8s.io/client-go/tools/cache" +) + +// DataPartitionConfigInformer provides access to a shared informer and lister for +// DataPartitionConfigs. +type DataPartitionConfigInformer interface { + Informer() cache.SharedIndexInformer + Lister() v1.DataPartitionConfigLister +} + +type dataPartitionConfigInformer struct { + factory internalinterfaces.SharedInformerFactory + tweakListOptions internalinterfaces.TweakListOptionsFunc +} + +// NewDataPartitionConfigInformer constructs a new informer for DataPartitionConfig type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewDataPartitionConfigInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers) cache.SharedIndexInformer { + return NewFilteredDataPartitionConfigInformer(client, resyncPeriod, indexers, nil) +} + +// NewFilteredDataPartitionConfigInformer constructs a new informer for DataPartitionConfig type. +// Always prefer using an informer factory to get a shared informer instead of getting an independent +// one. This reduces memory footprint and number of connections to the server. +func NewFilteredDataPartitionConfigInformer(client kubernetes.Interface, resyncPeriod time.Duration, indexers cache.Indexers, tweakListOptions internalinterfaces.TweakListOptionsFunc) cache.SharedIndexInformer { + return cache.NewSharedIndexInformer( + &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.CoreV1().DataPartitionConfigs().List(options) + }, + WatchFunc: func(options metav1.ListOptions) watch.AggregatedWatchInterface { + if tweakListOptions != nil { + tweakListOptions(&options) + } + return client.CoreV1().DataPartitionConfigs().Watch(options) + }, + }, + &corev1.DataPartitionConfig{}, + resyncPeriod, + indexers, + ) +} + +func (f *dataPartitionConfigInformer) defaultInformer(client kubernetes.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { + return NewFilteredDataPartitionConfigInformer(client, resyncPeriod, cache.Indexers{}, f.tweakListOptions) +} + +func (f *dataPartitionConfigInformer) Informer() cache.SharedIndexInformer { + return f.factory.InformerFor(&corev1.DataPartitionConfig{}, f.defaultInformer) +} + +func (f *dataPartitionConfigInformer) Lister() v1.DataPartitionConfigLister { + return v1.NewDataPartitionConfigLister(f.Informer().GetIndexer()) +} diff --git a/staging/src/k8s.io/client-go/informers/core/v1/interface.go b/staging/src/k8s.io/client-go/informers/core/v1/interface.go index 0186ecf064e..0b682991a3e 100644 --- a/staging/src/k8s.io/client-go/informers/core/v1/interface.go +++ b/staging/src/k8s.io/client-go/informers/core/v1/interface.go @@ -33,6 +33,8 @@ type Interface interface { ConfigMaps() ConfigMapInformer // ControllerInstances returns a ControllerInstanceInformer. ControllerInstances() ControllerInstanceInformer + // DataPartitionConfigs returns a DataPartitionConfigInformer. + DataPartitionConfigs() DataPartitionConfigInformer // Endpoints returns a EndpointsInformer. Endpoints() EndpointsInformer // Events returns a EventInformer. @@ -102,6 +104,11 @@ func (v *version) ControllerInstances() ControllerInstanceInformer { return &controllerInstanceInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} } +// DataPartitionConfigs returns a DataPartitionConfigInformer. +func (v *version) DataPartitionConfigs() DataPartitionConfigInformer { + return &dataPartitionConfigInformer{factory: v.factory, tweakListOptions: v.tweakListOptions} +} + // Endpoints returns a EndpointsInformer. func (v *version) Endpoints() EndpointsInformer { return &endpointsInformer{factory: v.factory, namespace: v.namespace, tenant: v.tenant, tweakListOptions: v.tweakListOptions} diff --git a/staging/src/k8s.io/client-go/informers/generic.go b/staging/src/k8s.io/client-go/informers/generic.go index 276515deb51..a51686b83b8 100644 --- a/staging/src/k8s.io/client-go/informers/generic.go +++ b/staging/src/k8s.io/client-go/informers/generic.go @@ -171,6 +171,8 @@ func (f *sharedInformerFactory) ForResource(resource schema.GroupVersionResource return &genericInformer{resource: resource.GroupResource(), informer: f.Core().V1().ConfigMaps().Informer()}, nil case corev1.SchemeGroupVersion.WithResource("controllerinstances"): return &genericInformer{resource: resource.GroupResource(), informer: f.Core().V1().ControllerInstances().Informer()}, nil + case corev1.SchemeGroupVersion.WithResource("datapartitionconfigs"): + return &genericInformer{resource: resource.GroupResource(), informer: f.Core().V1().DataPartitionConfigs().Informer()}, nil case corev1.SchemeGroupVersion.WithResource("endpoints"): return &genericInformer{resource: resource.GroupResource(), informer: f.Core().V1().Endpoints().Informer()}, nil case corev1.SchemeGroupVersion.WithResource("events"): diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/BUILD b/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/BUILD index d349f10326d..deb46f5bb3c 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/BUILD +++ b/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/BUILD @@ -13,6 +13,7 @@ go_library( "configmap.go", "controllerinstance.go", "core_client.go", + "datapartitionconfig.go", "doc.go", "endpoints.go", "event.go", diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/core_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/core_client.go index 7bc8a0bc56d..ed8d9285c1b 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/core_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/core_client.go @@ -35,6 +35,7 @@ type CoreV1Interface interface { ComponentStatusesGetter ConfigMapsGetter ControllerInstancesGetter + DataPartitionConfigsGetter EndpointsGetter EventsGetter LimitRangesGetter @@ -81,6 +82,10 @@ func (c *CoreV1Client) ControllerInstances() ControllerInstanceInterface { return newControllerInstances(c) } +func (c *CoreV1Client) DataPartitionConfigs() DataPartitionConfigInterface { + return newDataPartitionConfigs(c) +} + func (c *CoreV1Client) Endpoints(namespace string) EndpointsInterface { return newEndpointsWithMultiTenancy(c, namespace, "default") } diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/datapartitionconfig.go b/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/datapartitionconfig.go new file mode 100644 index 00000000000..7977473d1da --- /dev/null +++ b/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/datapartitionconfig.go @@ -0,0 +1,176 @@ +/* +Copyright 2020 Authors of Arktos. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package v1 + +import ( + "time" + + v1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + scheme "k8s.io/client-go/kubernetes/scheme" + rest "k8s.io/client-go/rest" +) + +// DataPartitionConfigsGetter has a method to return a DataPartitionConfigInterface. +// A group's client should implement this interface. +type DataPartitionConfigsGetter interface { + DataPartitionConfigs() DataPartitionConfigInterface +} + +// DataPartitionConfigInterface has methods to work with DataPartitionConfig resources. +type DataPartitionConfigInterface interface { + Create(*v1.DataPartitionConfig) (*v1.DataPartitionConfig, error) + Update(*v1.DataPartitionConfig) (*v1.DataPartitionConfig, error) + Delete(name string, options *metav1.DeleteOptions) error + DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error + Get(name string, options metav1.GetOptions) (*v1.DataPartitionConfig, error) + List(opts metav1.ListOptions) (*v1.DataPartitionConfigList, error) + Watch(opts metav1.ListOptions) watch.AggregatedWatchInterface + Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.DataPartitionConfig, err error) + DataPartitionConfigExpansion +} + +// dataPartitionConfigs implements DataPartitionConfigInterface +type dataPartitionConfigs struct { + client rest.Interface + clients []rest.Interface +} + +// newDataPartitionConfigs returns a DataPartitionConfigs +func newDataPartitionConfigs(c *CoreV1Client) *dataPartitionConfigs { + return &dataPartitionConfigs{ + client: c.RESTClient(), + clients: c.RESTClients(), + } +} + +// Get takes name of the dataPartitionConfig, and returns the corresponding dataPartitionConfig object, and an error if there is any. +func (c *dataPartitionConfigs) Get(name string, options metav1.GetOptions) (result *v1.DataPartitionConfig, err error) { + result = &v1.DataPartitionConfig{} + err = c.client.Get(). + Resource("datapartitionconfigs"). + Name(name). + VersionedParams(&options, scheme.ParameterCodec). + Do(). + Into(result) + + return +} + +// List takes label and field selectors, and returns the list of DataPartitionConfigs that match those selectors. +func (c *dataPartitionConfigs) List(opts metav1.ListOptions) (result *v1.DataPartitionConfigList, err error) { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + result = &v1.DataPartitionConfigList{} + err = c.client.Get(). + Resource("datapartitionconfigs"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Do(). + Into(result) + + return +} + +// Watch returns a watch.Interface that watches the requested dataPartitionConfigs. +func (c *dataPartitionConfigs) Watch(opts metav1.ListOptions) watch.AggregatedWatchInterface { + var timeout time.Duration + if opts.TimeoutSeconds != nil { + timeout = time.Duration(*opts.TimeoutSeconds) * time.Second + } + opts.Watch = true + aggWatch := watch.NewAggregatedWatcher() + for _, client := range c.clients { + watcher, err := client.Get(). + Resource("datapartitionconfigs"). + VersionedParams(&opts, scheme.ParameterCodec). + Timeout(timeout). + Watch() + aggWatch.AddWatchInterface(watcher, err) + } + return aggWatch +} + +// Create takes the representation of a dataPartitionConfig and creates it. Returns the server's representation of the dataPartitionConfig, and an error, if there is any. +func (c *dataPartitionConfigs) Create(dataPartitionConfig *v1.DataPartitionConfig) (result *v1.DataPartitionConfig, err error) { + result = &v1.DataPartitionConfig{} + err = c.client.Post(). + Resource("datapartitionconfigs"). + Body(dataPartitionConfig). + Do(). + Into(result) + + return +} + +// Update takes the representation of a dataPartitionConfig and updates it. Returns the server's representation of the dataPartitionConfig, and an error, if there is any. +func (c *dataPartitionConfigs) Update(dataPartitionConfig *v1.DataPartitionConfig) (result *v1.DataPartitionConfig, err error) { + result = &v1.DataPartitionConfig{} + err = c.client.Put(). + Resource("datapartitionconfigs"). + Name(dataPartitionConfig.Name). + Body(dataPartitionConfig). + Do(). + Into(result) + + return +} + +// Delete takes name of the dataPartitionConfig and deletes it. Returns an error if one occurs. +func (c *dataPartitionConfigs) Delete(name string, options *metav1.DeleteOptions) error { + return c.client.Delete(). + Resource("datapartitionconfigs"). + Name(name). + Body(options). + Do(). + Error() +} + +// DeleteCollection deletes a collection of objects. +func (c *dataPartitionConfigs) DeleteCollection(options *metav1.DeleteOptions, listOptions metav1.ListOptions) error { + var timeout time.Duration + if listOptions.TimeoutSeconds != nil { + timeout = time.Duration(*listOptions.TimeoutSeconds) * time.Second + } + return c.client.Delete(). + Resource("datapartitionconfigs"). + VersionedParams(&listOptions, scheme.ParameterCodec). + Timeout(timeout). + Body(options). + Do(). + Error() +} + +// Patch applies the patch and returns the patched dataPartitionConfig. +func (c *dataPartitionConfigs) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *v1.DataPartitionConfig, err error) { + result = &v1.DataPartitionConfig{} + err = c.client.Patch(pt). + Resource("datapartitionconfigs"). + SubResource(subresources...). + Name(name). + Body(data). + Do(). + Into(result) + + return +} diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/fake/BUILD b/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/fake/BUILD index 15508ce4d1d..483b1d2b925 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/fake/BUILD +++ b/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/fake/BUILD @@ -14,6 +14,7 @@ go_library( "fake_configmap.go", "fake_controllerinstance.go", "fake_core_client.go", + "fake_datapartitionconfig.go", "fake_endpoints.go", "fake_event.go", "fake_event_expansion.go", diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_core_client.go b/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_core_client.go index 3497d2ed6ba..e98c12e5cc5 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_core_client.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_core_client.go @@ -55,6 +55,11 @@ func (c *FakeCoreV1) ControllerInstances() v1.ControllerInstanceInterface { return &FakeControllerInstances{c} } +func (c *FakeCoreV1) DataPartitionConfigs() v1.DataPartitionConfigInterface { + + return &FakeDataPartitionConfigs{c} +} + func (c *FakeCoreV1) Endpoints(namespace string) v1.EndpointsInterface { return &FakeEndpoints{c, namespace, "default"} } diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_datapartitionconfig.go b/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_datapartitionconfig.go new file mode 100644 index 00000000000..e9d1e2db344 --- /dev/null +++ b/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/fake/fake_datapartitionconfig.go @@ -0,0 +1,127 @@ +/* +Copyright 2020 Authors of Arktos. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by client-gen. DO NOT EDIT. + +package fake + +import ( + corev1 "k8s.io/api/core/v1" + v1 "k8s.io/apimachinery/pkg/apis/meta/v1" + labels "k8s.io/apimachinery/pkg/labels" + schema "k8s.io/apimachinery/pkg/runtime/schema" + types "k8s.io/apimachinery/pkg/types" + watch "k8s.io/apimachinery/pkg/watch" + testing "k8s.io/client-go/testing" +) + +// FakeDataPartitionConfigs implements DataPartitionConfigInterface +type FakeDataPartitionConfigs struct { + Fake *FakeCoreV1 +} + +var datapartitionconfigsResource = schema.GroupVersionResource{Group: "", Version: "v1", Resource: "datapartitionconfigs"} + +var datapartitionconfigsKind = schema.GroupVersionKind{Group: "", Version: "v1", Kind: "DataPartitionConfig"} + +// Get takes name of the dataPartitionConfig, and returns the corresponding dataPartitionConfig object, and an error if there is any. +func (c *FakeDataPartitionConfigs) Get(name string, options v1.GetOptions) (result *corev1.DataPartitionConfig, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootGetAction(datapartitionconfigsResource, name), &corev1.DataPartitionConfig{}) + if obj == nil { + return nil, err + } + + return obj.(*corev1.DataPartitionConfig), err +} + +// List takes label and field selectors, and returns the list of DataPartitionConfigs that match those selectors. +func (c *FakeDataPartitionConfigs) List(opts v1.ListOptions) (result *corev1.DataPartitionConfigList, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootListAction(datapartitionconfigsResource, datapartitionconfigsKind, opts), &corev1.DataPartitionConfigList{}) + if obj == nil { + return nil, err + } + + label, _, _ := testing.ExtractFromListOptions(opts) + if label == nil { + label = labels.Everything() + } + list := &corev1.DataPartitionConfigList{ListMeta: obj.(*corev1.DataPartitionConfigList).ListMeta} + for _, item := range obj.(*corev1.DataPartitionConfigList).Items { + if label.Matches(labels.Set(item.Labels)) { + list.Items = append(list.Items, item) + } + } + return list, err +} + +// Watch returns a watch.AggregatedWatchInterface that watches the requested dataPartitionConfigs. +func (c *FakeDataPartitionConfigs) Watch(opts v1.ListOptions) watch.AggregatedWatchInterface { + aggWatch := watch.NewAggregatedWatcher() + watcher, err := c.Fake. + InvokesWatch(testing.NewRootWatchAction(datapartitionconfigsResource, opts)) + aggWatch.AddWatchInterface(watcher, err) + return aggWatch +} + +// Create takes the representation of a dataPartitionConfig and creates it. Returns the server's representation of the dataPartitionConfig, and an error, if there is any. +func (c *FakeDataPartitionConfigs) Create(dataPartitionConfig *corev1.DataPartitionConfig) (result *corev1.DataPartitionConfig, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootCreateAction(datapartitionconfigsResource, dataPartitionConfig), &corev1.DataPartitionConfig{}) + if obj == nil { + return nil, err + } + + return obj.(*corev1.DataPartitionConfig), err +} + +// Update takes the representation of a dataPartitionConfig and updates it. Returns the server's representation of the dataPartitionConfig, and an error, if there is any. +func (c *FakeDataPartitionConfigs) Update(dataPartitionConfig *corev1.DataPartitionConfig) (result *corev1.DataPartitionConfig, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootUpdateAction(datapartitionconfigsResource, dataPartitionConfig), &corev1.DataPartitionConfig{}) + if obj == nil { + return nil, err + } + + return obj.(*corev1.DataPartitionConfig), err +} + +// Delete takes name of the dataPartitionConfig and deletes it. Returns an error if one occurs. +func (c *FakeDataPartitionConfigs) Delete(name string, options *v1.DeleteOptions) error { + _, err := c.Fake. + Invokes(testing.NewRootDeleteAction(datapartitionconfigsResource, name), &corev1.DataPartitionConfig{}) + return err +} + +// DeleteCollection deletes a collection of objects. +func (c *FakeDataPartitionConfigs) DeleteCollection(options *v1.DeleteOptions, listOptions v1.ListOptions) error { + + action := testing.NewRootDeleteCollectionAction(datapartitionconfigsResource, listOptions) + _, err := c.Fake.Invokes(action, &corev1.DataPartitionConfigList{}) + return err +} + +// Patch applies the patch and returns the patched dataPartitionConfig. +func (c *FakeDataPartitionConfigs) Patch(name string, pt types.PatchType, data []byte, subresources ...string) (result *corev1.DataPartitionConfig, err error) { + obj, err := c.Fake. + Invokes(testing.NewRootPatchSubresourceAction(datapartitionconfigsResource, name, pt, data, subresources...), &corev1.DataPartitionConfig{}) + if obj == nil { + return nil, err + } + + return obj.(*corev1.DataPartitionConfig), err +} diff --git a/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/generated_expansion.go b/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/generated_expansion.go index eeb8a0a9b5d..4ac15c7a31a 100644 --- a/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/generated_expansion.go +++ b/staging/src/k8s.io/client-go/kubernetes/typed/core/v1/generated_expansion.go @@ -27,6 +27,8 @@ type ConfigMapExpansion interface{} type ControllerInstanceExpansion interface{} +type DataPartitionConfigExpansion interface{} + type EndpointsExpansion interface{} type LimitRangeExpansion interface{} diff --git a/staging/src/k8s.io/client-go/listers/core/v1/BUILD b/staging/src/k8s.io/client-go/listers/core/v1/BUILD index 032a4724984..49c00aba3c9 100644 --- a/staging/src/k8s.io/client-go/listers/core/v1/BUILD +++ b/staging/src/k8s.io/client-go/listers/core/v1/BUILD @@ -12,6 +12,7 @@ go_library( "componentstatus.go", "configmap.go", "controllerinstance.go", + "datapartitionconfig.go", "endpoints.go", "event.go", "expansion_generated.go", diff --git a/staging/src/k8s.io/client-go/listers/core/v1/datapartitionconfig.go b/staging/src/k8s.io/client-go/listers/core/v1/datapartitionconfig.go new file mode 100644 index 00000000000..c7101dcf966 --- /dev/null +++ b/staging/src/k8s.io/client-go/listers/core/v1/datapartitionconfig.go @@ -0,0 +1,65 @@ +/* +Copyright 2020 Authors of Arktos. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Code generated by lister-gen. DO NOT EDIT. + +package v1 + +import ( + v1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/labels" + "k8s.io/client-go/tools/cache" +) + +// DataPartitionConfigLister helps list DataPartitionConfigs. +type DataPartitionConfigLister interface { + // List lists all DataPartitionConfigs in the indexer. + List(selector labels.Selector) (ret []*v1.DataPartitionConfig, err error) + // Get retrieves the DataPartitionConfig from the index for a given name. + Get(name string) (*v1.DataPartitionConfig, error) + DataPartitionConfigListerExpansion +} + +// dataPartitionConfigLister implements the DataPartitionConfigLister interface. +type dataPartitionConfigLister struct { + indexer cache.Indexer +} + +// NewDataPartitionConfigLister returns a new DataPartitionConfigLister. +func NewDataPartitionConfigLister(indexer cache.Indexer) DataPartitionConfigLister { + return &dataPartitionConfigLister{indexer: indexer} +} + +// List lists all DataPartitionConfigs in the indexer. +func (s *dataPartitionConfigLister) List(selector labels.Selector) (ret []*v1.DataPartitionConfig, err error) { + err = cache.ListAll(s.indexer, selector, func(m interface{}) { + ret = append(ret, m.(*v1.DataPartitionConfig)) + }) + return ret, err +} + +// Get retrieves the DataPartitionConfig from the index for a given name. +func (s *dataPartitionConfigLister) Get(name string) (*v1.DataPartitionConfig, error) { + obj, exists, err := s.indexer.GetByKey(name) + if err != nil { + return nil, err + } + if !exists { + return nil, errors.NewNotFound(v1.Resource("datapartitionconfig"), name) + } + return obj.(*v1.DataPartitionConfig), nil +} diff --git a/staging/src/k8s.io/client-go/listers/core/v1/expansion_generated.go b/staging/src/k8s.io/client-go/listers/core/v1/expansion_generated.go index 6cb82c8d7ab..820d5477823 100644 --- a/staging/src/k8s.io/client-go/listers/core/v1/expansion_generated.go +++ b/staging/src/k8s.io/client-go/listers/core/v1/expansion_generated.go @@ -43,6 +43,10 @@ type ConfigMapNamespaceListerExpansion interface{} // ControllerInstanceLister. type ControllerInstanceListerExpansion interface{} +// DataPartitionConfigListerExpansion allows custom methods to be added to +// DataPartitionConfigLister. +type DataPartitionConfigListerExpansion interface{} + // EndpointsListerExpansion allows custom methods to be added to // EndpointsLister. type EndpointsListerExpansion interface{} diff --git a/staging/src/k8s.io/client-go/listers/rbac/v1/clusterrolebinding.go b/staging/src/k8s.io/client-go/listers/rbac/v1/clusterrolebinding.go index 61d7df4e6de..bdaf2dfe1ff 100644 --- a/staging/src/k8s.io/client-go/listers/rbac/v1/clusterrolebinding.go +++ b/staging/src/k8s.io/client-go/listers/rbac/v1/clusterrolebinding.go @@ -1,5 +1,6 @@ /* Copyright The Kubernetes Authors. +Copyright 2020 Authors of Arktos - file modified. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/staging/src/k8s.io/client-go/listers/rbac/v1alpha1/clusterrolebinding.go b/staging/src/k8s.io/client-go/listers/rbac/v1alpha1/clusterrolebinding.go index 7006a193b53..4165e952b1a 100644 --- a/staging/src/k8s.io/client-go/listers/rbac/v1alpha1/clusterrolebinding.go +++ b/staging/src/k8s.io/client-go/listers/rbac/v1alpha1/clusterrolebinding.go @@ -1,5 +1,6 @@ /* Copyright The Kubernetes Authors. +Copyright 2020 Authors of Arktos - file modified. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/staging/src/k8s.io/client-go/listers/rbac/v1beta1/clusterrolebinding.go b/staging/src/k8s.io/client-go/listers/rbac/v1beta1/clusterrolebinding.go index f068e8f04f1..16be1f8c00d 100644 --- a/staging/src/k8s.io/client-go/listers/rbac/v1beta1/clusterrolebinding.go +++ b/staging/src/k8s.io/client-go/listers/rbac/v1beta1/clusterrolebinding.go @@ -1,5 +1,6 @@ /* Copyright The Kubernetes Authors. +Copyright 2020 Authors of Arktos - file modified. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/staging/src/k8s.io/client-go/tools/cache/reflector.go b/staging/src/k8s.io/client-go/tools/cache/reflector.go index 5d9cdfb0ad0..0e6d757b3ee 100644 --- a/staging/src/k8s.io/client-go/tools/cache/reflector.go +++ b/staging/src/k8s.io/client-go/tools/cache/reflector.go @@ -373,31 +373,29 @@ func (r *Reflector) ListAndWatch(stopCh <-chan struct{}) error { options = appendFieldSelector(options, r.createHashkeyListOptions()) } aggregatedWatcher := r.listerWatcher.Watch(options) - errs := aggregatedWatcher.GetErrors() - for _, err := range errs { - if err != nil { - switch err { - case io.EOF: - // watch closed normally - case io.ErrUnexpectedEOF: - klog.V(1).Infof("%s: Watch for %v closed with unexpected EOF: %v", r.name, r.expectedType, err) - default: - utilruntime.HandleError(fmt.Errorf("%s: Failed to watch %v: %v", r.name, r.expectedType, err)) - } - // If this is "connection refused" error, it means that most likely apiserver is not responsive. - // It doesn't make sense to re-list all objects because most likely we will be able to restart - // watch where we ended. - // If that's the case wait and resend watch request. - if urlError, ok := err.(*url.Error); ok { - if opError, ok := urlError.Err.(*net.OpError); ok { - if errno, ok := opError.Err.(syscall.Errno); ok && errno == syscall.ECONNREFUSED { - time.Sleep(time.Second) - continue - } + err := aggregatedWatcher.GetFirstError() + if err != nil { + switch err { + case io.EOF: + // watch closed normally + case io.ErrUnexpectedEOF: + klog.V(1).Infof("%s: Watch for %v closed with unexpected EOF: %v", r.name, r.expectedType, err) + default: + utilruntime.HandleError(fmt.Errorf("%s: Failed to watch %v: %v", r.name, r.expectedType, err)) + } + // If this is "connection refused" error, it means that most likely apiserver is not responsive. + // It doesn't make sense to re-list all objects because most likely we will be able to restart + // watch where we ended. + // If that's the case wait and resend watch request. + if urlError, ok := err.(*url.Error); ok { + if opError, ok := urlError.Err.(*net.OpError); ok { + if errno, ok := opError.Err.(syscall.Errno); ok && errno == syscall.ECONNREFUSED { + time.Sleep(time.Second) + continue } } - return nil } + return nil } if err := r.watchHandler(aggregatedWatcher, &resourceVersion, resyncerrc, stopCh); err != nil { diff --git a/staging/src/k8s.io/client-go/tools/watch/retrywatcher.go b/staging/src/k8s.io/client-go/tools/watch/retrywatcher.go index 3ee33f519fb..f9a4c7ca721 100644 --- a/staging/src/k8s.io/client-go/tools/watch/retrywatcher.go +++ b/staging/src/k8s.io/client-go/tools/watch/retrywatcher.go @@ -115,36 +115,35 @@ func (rw *RetryWatcher) doReceive() (bool, time.Duration) { } defer aggWatchers.Stop() - if len(aggWatchers.GetWatchers()) == 0 { + if aggWatchers.GetWatchersCount() == 0 { klog.Error("No watcher in aggregated watchers") return false, 0 } - for _, err := range aggWatchers.GetErrors() { - switch err { - case nil: - break - - case io.EOF: - // watch closed normally - return false, 0 + err := aggWatchers.GetFirstError() + switch err { + case nil: + break - case io.ErrUnexpectedEOF: - klog.V(1).Infof("Watch closed with unexpected EOF: %v", err) - return false, 0 + case io.EOF: + // watch closed normally + return false, 0 - default: - msg := "Watch failed: %v" - if net.IsProbableEOF(err) { - klog.V(5).Infof(msg, err) - // Retry - return false, 0 - } + case io.ErrUnexpectedEOF: + klog.V(1).Infof("Watch closed with unexpected EOF: %v", err) + return false, 0 - klog.Errorf(msg, err) + default: + msg := "Watch failed: %v" + if net.IsProbableEOF(err) { + klog.V(5).Infof(msg, err) // Retry return false, 0 } + + klog.Errorf(msg, err) + // Retry + return false, 0 } ch := aggWatchers.ResultChan() diff --git a/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/types.go b/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/types.go index c25fe877792..960c215c095 100644 --- a/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/types.go +++ b/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/types.go @@ -82,6 +82,8 @@ type APIServiceSpec struct { // version, then minor version. An example sorted list of versions: // v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10. VersionPriority int32 + + ServiceGroupId string } // ConditionStatus indicates the status of a condition (true, false, or unknown). diff --git a/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1/generated.pb.go b/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1/generated.pb.go index 3bf5f21e0f8..c019a8e3210 100644 --- a/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1/generated.pb.go +++ b/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1/generated.pb.go @@ -260,6 +260,10 @@ func (m *APIServiceSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x40 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.VersionPriority)) + dAtA[i] = 0x4a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ServiceGroupId))) + i += copy(dAtA[i:], m.ServiceGroupId) return i, nil } @@ -393,6 +397,8 @@ func (m *APIServiceSpec) Size() (n int) { } n += 1 + sovGenerated(uint64(m.GroupPriorityMinimum)) n += 1 + sovGenerated(uint64(m.VersionPriority)) + l = len(m.ServiceGroupId) + n += 1 + l + sovGenerated(uint64(l)) return n } @@ -483,6 +489,7 @@ func (this *APIServiceSpec) String() string { `CABundle:` + valueToStringGenerated(this.CABundle) + `,`, `GroupPriorityMinimum:` + fmt.Sprintf("%v", this.GroupPriorityMinimum) + `,`, `VersionPriority:` + fmt.Sprintf("%v", this.VersionPriority) + `,`, + `ServiceGroupId:` + fmt.Sprintf("%v", this.ServiceGroupId) + `,`, `}`, }, "") return s @@ -1173,6 +1180,35 @@ func (m *APIServiceSpec) Unmarshal(dAtA []byte) error { break } } + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ServiceGroupId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ServiceGroupId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -1513,58 +1549,59 @@ func init() { } var fileDescriptorGenerated = []byte{ - // 835 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0xdf, 0x6b, 0x2b, 0x45, - 0x14, 0xce, 0xa6, 0x49, 0x9b, 0x4e, 0xeb, 0x6d, 0x1d, 0xef, 0xe5, 0x86, 0x72, 0xdd, 0xd6, 0x08, - 0x1a, 0x85, 0xbb, 0x6b, 0x8b, 0x88, 0x22, 0x08, 0xdd, 0x2b, 0x94, 0x42, 0xab, 0x65, 0x52, 0xfa, - 0xa0, 0x82, 0x4e, 0x37, 0xa7, 0xdb, 0x31, 0xdd, 0x9d, 0x65, 0x66, 0x76, 0x21, 0xf8, 0x22, 0xf8, - 0x07, 0xe8, 0xdf, 0xe4, 0x53, 0x1f, 0x2f, 0xf8, 0xd2, 0xa7, 0x62, 0xe2, 0x7f, 0x71, 0x9f, 0x64, - 0x66, 0x67, 0x77, 0xd3, 0x34, 0xe2, 0xd5, 0xbe, 0x84, 0x9c, 0x1f, 0xdf, 0xf7, 0x9d, 0x39, 0xf3, - 0xed, 0xa0, 0x6f, 0x47, 0x9f, 0x4a, 0x8f, 0x71, 0x7f, 0x94, 0x9d, 0x83, 0x48, 0x40, 0x81, 0xf4, - 0x73, 0x48, 0x86, 0x5c, 0xf8, 0x33, 0x85, 0xe7, 0x34, 0x8a, 0x04, 0x44, 0x54, 0x71, 0xe1, 0xa7, - 0xa3, 0xc8, 0xa7, 0x29, 0x93, 0xfa, 0x47, 0x40, 0xc4, 0xa4, 0x12, 0x54, 0x31, 0x9e, 0xf8, 0xf9, - 0xae, 0x1f, 0x41, 0x02, 0x82, 0x2a, 0x18, 0x7a, 0xa9, 0xe0, 0x8a, 0xe3, 0xbd, 0x82, 0xc3, 0xd3, - 0x1c, 0xdf, 0xd7, 0x1c, 0x5e, 0x3a, 0x8a, 0x3c, 0xcd, 0xe1, 0xcd, 0x71, 0x78, 0xf9, 0xee, 0xd6, - 0xf3, 0x88, 0xa9, 0xcb, 0xec, 0xdc, 0x0b, 0x79, 0xec, 0x47, 0x3c, 0xe2, 0xbe, 0xa1, 0x3a, 0xcf, - 0x2e, 0x4c, 0x64, 0x02, 0xf3, 0xaf, 0x90, 0xd8, 0xfa, 0xd8, 0x8e, 0x49, 0x53, 0x16, 0xd3, 0xf0, - 0x92, 0x25, 0x20, 0xc6, 0xf5, 0x8c, 0x31, 0x28, 0xba, 0x60, 0xb0, 0x2d, 0xff, 0x9f, 0x50, 0x22, - 0x4b, 0x14, 0x8b, 0xe1, 0x1e, 0xe0, 0x93, 0x7f, 0x03, 0xc8, 0xf0, 0x12, 0x62, 0x3a, 0x8f, 0xeb, - 0xfd, 0xde, 0x44, 0x68, 0xff, 0xe4, 0x70, 0x00, 0x22, 0x67, 0x21, 0xe0, 0x1f, 0x50, 0x47, 0x8f, - 0x34, 0xa4, 0x8a, 0x76, 0x9d, 0x1d, 0xa7, 0xbf, 0xb6, 0xf7, 0x91, 0x67, 0x77, 0x34, 0xcb, 0x5c, - 0x2f, 0x48, 0x77, 0x7b, 0xf9, 0xae, 0xf7, 0xf5, 0xf9, 0x8f, 0x10, 0xaa, 0x63, 0x50, 0x34, 0xc0, - 0xd7, 0xb7, 0xdb, 0x8d, 0xe9, 0xed, 0x36, 0xaa, 0x73, 0xa4, 0x62, 0xc5, 0x43, 0xd4, 0x92, 0x29, - 0x84, 0xdd, 0xa6, 0x61, 0x0f, 0xbc, 0xff, 0x7e, 0x03, 0x5e, 0x3d, 0xef, 0x20, 0x85, 0x30, 0x58, - 0xb7, 0x7a, 0x2d, 0x1d, 0x11, 0xc3, 0x8e, 0xaf, 0xd0, 0xb2, 0x54, 0x54, 0x65, 0xb2, 0xbb, 0x64, - 0x74, 0xbe, 0x7c, 0xa0, 0x8e, 0xe1, 0x0a, 0x1e, 0x59, 0xa5, 0xe5, 0x22, 0x26, 0x56, 0xa3, 0x77, - 0xd3, 0x44, 0x6f, 0xd5, 0xcd, 0x2f, 0x78, 0x32, 0x64, 0x9a, 0x03, 0x7f, 0x8e, 0x5a, 0x6a, 0x9c, - 0x82, 0xd9, 0xe4, 0x6a, 0xf0, 0x7e, 0x39, 0xe7, 0xe9, 0x38, 0x85, 0x57, 0xb7, 0xdb, 0x4f, 0x17, - 0x40, 0x74, 0x89, 0x18, 0x10, 0xfe, 0xac, 0x3a, 0x42, 0xd3, 0xc0, 0xdf, 0xb9, 0x2b, 0xfe, 0xea, - 0x76, 0x7b, 0xa3, 0x82, 0xdd, 0x9d, 0x07, 0xe7, 0x08, 0x5f, 0x51, 0xa9, 0x4e, 0x05, 0x4d, 0x64, - 0x41, 0xcb, 0x62, 0xb0, 0x9b, 0xf8, 0xf0, 0xf5, 0xee, 0x53, 0x23, 0x82, 0x2d, 0x2b, 0x89, 0x8f, - 0xee, 0xb1, 0x91, 0x05, 0x0a, 0xf8, 0x3d, 0xb4, 0x2c, 0x80, 0x4a, 0x9e, 0x74, 0x5b, 0x66, 0xe4, - 0x6a, 0x5f, 0xc4, 0x64, 0x89, 0xad, 0xe2, 0x0f, 0xd0, 0x4a, 0x0c, 0x52, 0xd2, 0x08, 0xba, 0x6d, - 0xd3, 0xb8, 0x61, 0x1b, 0x57, 0x8e, 0x8b, 0x34, 0x29, 0xeb, 0xbd, 0x3f, 0x1c, 0xf4, 0xa8, 0xde, - 0xd3, 0x11, 0x93, 0x0a, 0x7f, 0x77, 0xcf, 0xa3, 0xde, 0xeb, 0x9d, 0x49, 0xa3, 0x8d, 0x43, 0x37, - 0xad, 0x5c, 0xa7, 0xcc, 0xcc, 0xf8, 0x33, 0x44, 0x6d, 0xa6, 0x20, 0xd6, 0x5b, 0x5f, 0xea, 0xaf, - 0xed, 0x7d, 0xf1, 0x30, 0xe3, 0x04, 0x6f, 0x58, 0xa9, 0xf6, 0xa1, 0x26, 0x25, 0x05, 0x77, 0x6f, - 0xb2, 0x34, 0x7b, 0x2a, 0xed, 0x5b, 0x3c, 0x42, 0x2b, 0xb2, 0x08, 0xed, 0xa1, 0xfe, 0x97, 0x65, - 0x2d, 0x23, 0x81, 0x0b, 0x10, 0x90, 0x84, 0x10, 0xac, 0xe9, 0xad, 0x96, 0xd9, 0x52, 0x01, 0xbf, - 0x8b, 0xda, 0x91, 0xe0, 0x59, 0x6a, 0xad, 0x55, 0x0d, 0x79, 0xa0, 0x93, 0xa4, 0xa8, 0xe9, 0x5b, - 0xca, 0x41, 0x48, 0xc6, 0x13, 0x63, 0x9d, 0x99, 0x5b, 0x3a, 0x2b, 0xd2, 0xa4, 0xac, 0xe3, 0x01, - 0x7a, 0xc2, 0x12, 0x09, 0x61, 0x26, 0x60, 0x30, 0x62, 0xe9, 0xe9, 0xd1, 0xe0, 0x0c, 0x04, 0xbb, - 0x18, 0x1b, 0x1f, 0x74, 0x82, 0xb7, 0x2d, 0xf0, 0xc9, 0xe1, 0xa2, 0x26, 0xb2, 0x18, 0x8b, 0xfb, - 0xa8, 0x13, 0xd2, 0x20, 0x4b, 0x86, 0x57, 0x85, 0x4d, 0xd6, 0x83, 0x75, 0x7d, 0x67, 0x2f, 0xf6, - 0x8b, 0x1c, 0xa9, 0xaa, 0xf8, 0x04, 0x3d, 0x36, 0x23, 0x9f, 0x08, 0xc6, 0x05, 0x53, 0xe3, 0x63, - 0x96, 0xb0, 0x38, 0x8b, 0xbb, 0x2b, 0x3b, 0x4e, 0xbf, 0x1d, 0x3c, 0xb3, 0xea, 0x8f, 0x0f, 0x16, - 0xf4, 0x90, 0x85, 0x48, 0xbc, 0x8f, 0x36, 0xec, 0xd9, 0xca, 0x4a, 0xb7, 0x63, 0xc8, 0x9e, 0x5a, - 0xb2, 0x8d, 0xb3, 0xbb, 0x65, 0x32, 0xdf, 0xdf, 0xfb, 0xd5, 0x41, 0x9b, 0xf3, 0x2f, 0x08, 0xfe, - 0x09, 0xa1, 0xb0, 0xfc, 0x68, 0x65, 0xd7, 0x31, 0x16, 0x3b, 0x78, 0x98, 0xc5, 0xaa, 0x47, 0xa0, - 0x7e, 0x78, 0xab, 0x94, 0x24, 0x33, 0x72, 0xbd, 0x5f, 0x1c, 0xb4, 0x39, 0x6f, 0x10, 0xec, 0xa3, - 0xd5, 0x84, 0xc6, 0x20, 0x53, 0x1a, 0x96, 0x0f, 0xd5, 0x9b, 0x96, 0x67, 0xf5, 0xab, 0xb2, 0x40, - 0xea, 0x1e, 0xbc, 0x83, 0x5a, 0x3a, 0xb0, 0xd6, 0xa9, 0x1e, 0x5f, 0xdd, 0x4b, 0x4c, 0x05, 0x3f, - 0x43, 0xad, 0x94, 0x0b, 0x65, 0x5c, 0xd3, 0x0e, 0x3a, 0xba, 0x7a, 0xc2, 0x85, 0x22, 0x26, 0x1b, - 0xf4, 0xaf, 0x27, 0x6e, 0xe3, 0xe5, 0xc4, 0x6d, 0xdc, 0x4c, 0xdc, 0xc6, 0xcf, 0x53, 0xd7, 0xb9, - 0x9e, 0xba, 0xce, 0xcb, 0xa9, 0xeb, 0xdc, 0x4c, 0x5d, 0xe7, 0xcf, 0xa9, 0xeb, 0xfc, 0xf6, 0x97, - 0xdb, 0xf8, 0xa6, 0x99, 0xef, 0xfe, 0x1d, 0x00, 0x00, 0xff, 0xff, 0xf6, 0xdd, 0x3a, 0xf0, 0xfb, - 0x07, 0x00, 0x00, + // 860 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0x4d, 0x6b, 0x24, 0x45, + 0x18, 0x9e, 0x9e, 0x9d, 0x49, 0x26, 0x95, 0x98, 0xc4, 0x72, 0xd7, 0x6d, 0xc2, 0xda, 0x89, 0x23, + 0xe8, 0x28, 0x6c, 0xb7, 0x09, 0x22, 0x8a, 0xb0, 0x90, 0x5e, 0x21, 0x04, 0x12, 0x0d, 0x35, 0x21, + 0x07, 0x15, 0xb4, 0xd2, 0xf3, 0xa6, 0x53, 0x4e, 0xba, 0xab, 0xa9, 0xaa, 0x1e, 0x18, 0xbc, 0x08, + 0xfe, 0x00, 0xfd, 0x0b, 0xfe, 0x15, 0x4f, 0x39, 0x2e, 0x78, 0xc9, 0x29, 0x98, 0xf1, 0x5f, 0xec, + 0x49, 0xaa, 0xba, 0xba, 0x7b, 0x32, 0x19, 0x71, 0xdd, 0x5c, 0x86, 0x79, 0x3f, 0x9e, 0xe7, 0x79, + 0xeb, 0xad, 0xa7, 0x0b, 0x7d, 0x3b, 0xfc, 0x4c, 0xfa, 0x8c, 0x07, 0xc3, 0xfc, 0x14, 0x44, 0x0a, + 0x0a, 0x64, 0x30, 0x82, 0x74, 0xc0, 0x45, 0x30, 0x55, 0x78, 0x4a, 0xe3, 0x58, 0x40, 0x4c, 0x15, + 0x17, 0x41, 0x36, 0x8c, 0x03, 0x9a, 0x31, 0xa9, 0x7f, 0x04, 0xc4, 0x4c, 0x2a, 0x41, 0x15, 0xe3, + 0x69, 0x30, 0xda, 0x0e, 0x62, 0x48, 0x41, 0x50, 0x05, 0x03, 0x3f, 0x13, 0x5c, 0x71, 0xbc, 0x53, + 0x70, 0xf8, 0x9a, 0xe3, 0xfb, 0x9a, 0xc3, 0xcf, 0x86, 0xb1, 0xaf, 0x39, 0xfc, 0x19, 0x0e, 0x7f, + 0xb4, 0xbd, 0xf1, 0x34, 0x66, 0xea, 0x3c, 0x3f, 0xf5, 0x23, 0x9e, 0x04, 0x31, 0x8f, 0x79, 0x60, + 0xa8, 0x4e, 0xf3, 0x33, 0x13, 0x99, 0xc0, 0xfc, 0x2b, 0x24, 0x36, 0x3e, 0xb1, 0x63, 0xd2, 0x8c, + 0x25, 0x34, 0x3a, 0x67, 0x29, 0x88, 0x71, 0x3d, 0x63, 0x02, 0x8a, 0xce, 0x19, 0x6c, 0x23, 0xf8, + 0x37, 0x94, 0xc8, 0x53, 0xc5, 0x12, 0xb8, 0x03, 0xf8, 0xf4, 0xbf, 0x00, 0x32, 0x3a, 0x87, 0x84, + 0xce, 0xe2, 0xba, 0x7f, 0x34, 0x11, 0xda, 0x3d, 0xda, 0xef, 0x83, 0x18, 0xb1, 0x08, 0xf0, 0x0f, + 0xa8, 0xa3, 0x47, 0x1a, 0x50, 0x45, 0x5d, 0x67, 0xcb, 0xe9, 0x2d, 0xef, 0x7c, 0xec, 0xdb, 0x1d, + 0x4d, 0x33, 0xd7, 0x0b, 0xd2, 0xdd, 0xfe, 0x68, 0xdb, 0xff, 0xfa, 0xf4, 0x47, 0x88, 0xd4, 0x21, + 0x28, 0x1a, 0xe2, 0xcb, 0xeb, 0xcd, 0xc6, 0xe4, 0x7a, 0x13, 0xd5, 0x39, 0x52, 0xb1, 0xe2, 0x01, + 0x6a, 0xc9, 0x0c, 0x22, 0xb7, 0x69, 0xd8, 0x43, 0xff, 0xff, 0xdf, 0x80, 0x5f, 0xcf, 0xdb, 0xcf, + 0x20, 0x0a, 0x57, 0xac, 0x5e, 0x4b, 0x47, 0xc4, 0xb0, 0xe3, 0x0b, 0xb4, 0x20, 0x15, 0x55, 0xb9, + 0x74, 0x1f, 0x18, 0x9d, 0x2f, 0xef, 0xa9, 0x63, 0xb8, 0xc2, 0x55, 0xab, 0xb4, 0x50, 0xc4, 0xc4, + 0x6a, 0x74, 0xaf, 0x9a, 0xe8, 0xad, 0xba, 0xf9, 0x39, 0x4f, 0x07, 0x4c, 0x73, 0xe0, 0x2f, 0x50, + 0x4b, 0x8d, 0x33, 0x30, 0x9b, 0x5c, 0x0a, 0x3f, 0x28, 0xe7, 0x3c, 0x1e, 0x67, 0xf0, 0xf2, 0x7a, + 0xf3, 0xf1, 0x1c, 0x88, 0x2e, 0x11, 0x03, 0xc2, 0x9f, 0x57, 0x47, 0x68, 0x1a, 0xf8, 0xbb, 0xb7, + 0xc5, 0x5f, 0x5e, 0x6f, 0xae, 0x55, 0xb0, 0xdb, 0xf3, 0xe0, 0x11, 0xc2, 0x17, 0x54, 0xaa, 0x63, + 0x41, 0x53, 0x59, 0xd0, 0xb2, 0x04, 0xec, 0x26, 0x3e, 0x7a, 0xb5, 0xfb, 0xd4, 0x88, 0x70, 0xc3, + 0x4a, 0xe2, 0x83, 0x3b, 0x6c, 0x64, 0x8e, 0x02, 0x7e, 0x1f, 0x2d, 0x08, 0xa0, 0x92, 0xa7, 0x6e, + 0xcb, 0x8c, 0x5c, 0xed, 0x8b, 0x98, 0x2c, 0xb1, 0x55, 0xfc, 0x21, 0x5a, 0x4c, 0x40, 0x4a, 0x1a, + 0x83, 0xdb, 0x36, 0x8d, 0x6b, 0xb6, 0x71, 0xf1, 0xb0, 0x48, 0x93, 0xb2, 0xde, 0xfd, 0xd3, 0x41, + 0xab, 0xf5, 0x9e, 0x0e, 0x98, 0x54, 0xf8, 0xbb, 0x3b, 0x1e, 0xf5, 0x5f, 0xed, 0x4c, 0x1a, 0x6d, + 0x1c, 0xba, 0x6e, 0xe5, 0x3a, 0x65, 0x66, 0xca, 0x9f, 0x11, 0x6a, 0x33, 0x05, 0x89, 0xde, 0xfa, + 0x83, 0xde, 0xf2, 0xce, 0xb3, 0xfb, 0x19, 0x27, 0x7c, 0xc3, 0x4a, 0xb5, 0xf7, 0x35, 0x29, 0x29, + 0xb8, 0xbb, 0xbf, 0xb7, 0xa6, 0x4f, 0xa5, 0x7d, 0x8b, 0x87, 0x68, 0x51, 0x16, 0xa1, 0x3d, 0xd4, + 0x6b, 0x59, 0xd6, 0x32, 0x12, 0x38, 0x03, 0x01, 0x69, 0x04, 0xe1, 0xb2, 0xde, 0x6a, 0x99, 0x2d, + 0x15, 0xf0, 0x7b, 0xa8, 0x1d, 0x0b, 0x9e, 0x67, 0xd6, 0x5a, 0xd5, 0x90, 0x7b, 0x3a, 0x49, 0x8a, + 0x9a, 0xbe, 0xa5, 0x11, 0x08, 0xc9, 0x78, 0x6a, 0xac, 0x33, 0x75, 0x4b, 0x27, 0x45, 0x9a, 0x94, + 0x75, 0xdc, 0x47, 0x8f, 0x58, 0x2a, 0x21, 0xca, 0x05, 0xf4, 0x87, 0x2c, 0x3b, 0x3e, 0xe8, 0x9f, + 0x80, 0x60, 0x67, 0x63, 0xe3, 0x83, 0x4e, 0xf8, 0x8e, 0x05, 0x3e, 0xda, 0x9f, 0xd7, 0x44, 0xe6, + 0x63, 0x71, 0x0f, 0x75, 0x22, 0x1a, 0xe6, 0xe9, 0xe0, 0xa2, 0xb0, 0xc9, 0x4a, 0xb8, 0xa2, 0xef, + 0xec, 0xf9, 0x6e, 0x91, 0x23, 0x55, 0x15, 0x1f, 0xa1, 0x87, 0x66, 0xe4, 0x23, 0xc1, 0xb8, 0x60, + 0x6a, 0x7c, 0xc8, 0x52, 0x96, 0xe4, 0x89, 0xbb, 0xb8, 0xe5, 0xf4, 0xda, 0xe1, 0x13, 0xab, 0xfe, + 0x70, 0x6f, 0x4e, 0x0f, 0x99, 0x8b, 0xc4, 0xbb, 0x68, 0xcd, 0x9e, 0xad, 0xac, 0xb8, 0x1d, 0x43, + 0xf6, 0xd8, 0x92, 0xad, 0x9d, 0xdc, 0x2e, 0x93, 0xd9, 0x7e, 0xfc, 0x0c, 0xad, 0xda, 0x75, 0x1b, + 0xdd, 0xfd, 0x81, 0xbb, 0x64, 0xb6, 0xf8, 0xb6, 0x65, 0x58, 0xed, 0xdf, 0xaa, 0x92, 0x99, 0xee, + 0xee, 0xaf, 0x0e, 0x5a, 0x9f, 0x7d, 0x81, 0xf0, 0x4f, 0x08, 0x45, 0xe5, 0x47, 0x2f, 0x5d, 0xc7, + 0x58, 0x74, 0xef, 0x7e, 0x16, 0xad, 0x1e, 0x91, 0xfa, 0xe1, 0xae, 0x52, 0x92, 0x4c, 0xc9, 0x75, + 0x7f, 0x71, 0xd0, 0xfa, 0xac, 0xc1, 0x70, 0x80, 0x96, 0x52, 0x9a, 0x80, 0xcc, 0x68, 0x54, 0x3e, + 0x74, 0x6f, 0x5a, 0x9e, 0xa5, 0xaf, 0xca, 0x02, 0xa9, 0x7b, 0xf0, 0x16, 0x6a, 0xe9, 0xc0, 0x5a, + 0xaf, 0x7a, 0xbc, 0x75, 0x2f, 0x31, 0x15, 0xfc, 0x04, 0xb5, 0x32, 0x2e, 0x94, 0x71, 0x5d, 0x3b, + 0xec, 0xe8, 0xea, 0x11, 0x17, 0x8a, 0x98, 0x6c, 0xd8, 0xbb, 0xbc, 0xf1, 0x1a, 0x2f, 0x6e, 0xbc, + 0xc6, 0xd5, 0x8d, 0xd7, 0xf8, 0x79, 0xe2, 0x39, 0x97, 0x13, 0xcf, 0x79, 0x31, 0xf1, 0x9c, 0xab, + 0x89, 0xe7, 0xfc, 0x35, 0xf1, 0x9c, 0xdf, 0xfe, 0xf6, 0x1a, 0xdf, 0x34, 0x47, 0xdb, 0xff, 0x04, + 0x00, 0x00, 0xff, 0xff, 0x43, 0xb1, 0x93, 0x46, 0x3b, 0x08, 0x00, 0x00, } diff --git a/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1/generated.proto b/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1/generated.proto index 6dd1f270581..6b989917418 100644 --- a/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1/generated.proto +++ b/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1/generated.proto @@ -1,5 +1,6 @@ /* Copyright The Kubernetes Authors. +Copyright 2020 Authors of Arktos - file modified. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -112,6 +113,8 @@ message APIServiceSpec { // version, then minor version. An example sorted list of versions: // v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10. optional int32 versionPriority = 8; + + optional string serviceGroupId = 9; } // APIServiceStatus contains derived information about an API server diff --git a/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1/types.go b/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1/types.go index 4ae1ddea5e6..750d3ec30c1 100644 --- a/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1/types.go +++ b/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1/types.go @@ -85,6 +85,8 @@ type APIServiceSpec struct { // leaving this here so everyone remembers why proto index 6 is skipped // Priority int64 `json:"priority" protobuf:"varint,6,opt,name=priority"` + + ServiceGroupId string `json:"serviceGroupId,omitempty" protobuf:"bytes,9,opt,name=serviceGroupId"` } // ConditionStatus indicates the status of a condition (true, false, or unknown). diff --git a/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1/zz_generated.conversion.go b/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1/zz_generated.conversion.go index 0643f996276..519955bc78d 100644 --- a/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1/zz_generated.conversion.go +++ b/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1/zz_generated.conversion.go @@ -2,6 +2,7 @@ /* Copyright The Kubernetes Authors. +Copyright 2020 Authors of Arktos - file modified. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -217,6 +218,7 @@ func autoConvert_v1_APIServiceSpec_To_apiregistration_APIServiceSpec(in *APIServ out.CABundle = *(*[]byte)(unsafe.Pointer(&in.CABundle)) out.GroupPriorityMinimum = in.GroupPriorityMinimum out.VersionPriority = in.VersionPriority + out.ServiceGroupId = in.ServiceGroupId return nil } @@ -241,6 +243,7 @@ func autoConvert_apiregistration_APIServiceSpec_To_v1_APIServiceSpec(in *apiregi out.CABundle = *(*[]byte)(unsafe.Pointer(&in.CABundle)) out.GroupPriorityMinimum = in.GroupPriorityMinimum out.VersionPriority = in.VersionPriority + out.ServiceGroupId = in.ServiceGroupId return nil } diff --git a/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1/generated.pb.go b/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1/generated.pb.go index 0536dfcf716..0f7aafad116 100644 --- a/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1/generated.pb.go +++ b/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1/generated.pb.go @@ -260,6 +260,10 @@ func (m *APIServiceSpec) MarshalTo(dAtA []byte) (int, error) { dAtA[i] = 0x40 i++ i = encodeVarintGenerated(dAtA, i, uint64(m.VersionPriority)) + dAtA[i] = 0x4a + i++ + i = encodeVarintGenerated(dAtA, i, uint64(len(m.ServiceGroupId))) + i += copy(dAtA[i:], m.ServiceGroupId) return i, nil } @@ -393,6 +397,8 @@ func (m *APIServiceSpec) Size() (n int) { } n += 1 + sovGenerated(uint64(m.GroupPriorityMinimum)) n += 1 + sovGenerated(uint64(m.VersionPriority)) + l = len(m.ServiceGroupId) + n += 1 + l + sovGenerated(uint64(l)) return n } @@ -483,6 +489,7 @@ func (this *APIServiceSpec) String() string { `CABundle:` + valueToStringGenerated(this.CABundle) + `,`, `GroupPriorityMinimum:` + fmt.Sprintf("%v", this.GroupPriorityMinimum) + `,`, `VersionPriority:` + fmt.Sprintf("%v", this.VersionPriority) + `,`, + `ServiceGroupId:` + fmt.Sprintf("%v", this.ServiceGroupId) + `,`, `}`, }, "") return s @@ -1173,6 +1180,35 @@ func (m *APIServiceSpec) Unmarshal(dAtA []byte) error { break } } + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ServiceGroupId", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ServiceGroupId = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(dAtA[iNdEx:]) @@ -1513,58 +1549,60 @@ func init() { } var fileDescriptorGenerated = []byte{ - // 843 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0xcf, 0x6f, 0xe3, 0x44, - 0x14, 0x8e, 0xdb, 0xa4, 0x49, 0xa7, 0x65, 0x5b, 0x86, 0x5d, 0xad, 0x55, 0x2d, 0x6e, 0x09, 0x12, - 0x14, 0xa4, 0xda, 0x74, 0x85, 0xf8, 0x21, 0x4e, 0x75, 0x0f, 0x55, 0xa5, 0x16, 0xaa, 0x49, 0xd5, - 0x03, 0x42, 0x62, 0x27, 0xce, 0xab, 0x3b, 0x64, 0xed, 0x31, 0x33, 0xe3, 0x48, 0xb9, 0xad, 0xc4, - 0x3f, 0xc0, 0x85, 0xff, 0xa9, 0x07, 0x0e, 0x7b, 0xec, 0xa9, 0xa2, 0x41, 0xe2, 0x8f, 0xd8, 0x13, - 0x9a, 0xf1, 0xd8, 0x4e, 0x93, 0x20, 0x56, 0xab, 0x5e, 0xa2, 0xcc, 0x7b, 0xef, 0xfb, 0xbe, 0xf7, - 0xde, 0x7c, 0x1e, 0xf4, 0x62, 0xf8, 0x8d, 0xf4, 0x19, 0x0f, 0x86, 0x79, 0x1f, 0x44, 0x0a, 0x0a, - 0x64, 0x30, 0x82, 0x74, 0xc0, 0x45, 0x30, 0x95, 0xd8, 0xa3, 0x71, 0x2c, 0x20, 0xa6, 0x8a, 0x8b, - 0x20, 0x1b, 0xc6, 0x01, 0xcd, 0x98, 0xd4, 0x3f, 0x02, 0x62, 0x26, 0x95, 0xa0, 0x8a, 0xf1, 0x34, - 0x18, 0xed, 0xf7, 0x41, 0xd1, 0xfd, 0x20, 0x86, 0x14, 0x04, 0x55, 0x30, 0xf0, 0x33, 0xc1, 0x15, - 0xc7, 0x5f, 0x17, 0x44, 0xbe, 0x26, 0xfa, 0xb9, 0x26, 0xf2, 0xb3, 0x61, 0xec, 0x6b, 0x22, 0x7f, - 0x86, 0xc8, 0xb7, 0x44, 0x5b, 0x7b, 0x31, 0x53, 0x57, 0x79, 0xdf, 0x8f, 0x78, 0x12, 0xc4, 0x3c, - 0xe6, 0x81, 0xe1, 0xeb, 0xe7, 0x97, 0xe6, 0x64, 0x0e, 0xe6, 0x5f, 0xa1, 0xb3, 0xf5, 0xa5, 0x6d, - 0x98, 0x66, 0x2c, 0xa1, 0xd1, 0x15, 0x4b, 0x41, 0x8c, 0xeb, 0x6e, 0x13, 0x50, 0x34, 0x18, 0xcd, - 0x75, 0xb7, 0x15, 0xfc, 0x17, 0x4a, 0xe4, 0xa9, 0x62, 0x09, 0xcc, 0x01, 0xbe, 0xfa, 0x3f, 0x80, - 0x8c, 0xae, 0x20, 0xa1, 0xb3, 0xb8, 0xee, 0x9f, 0x4b, 0x08, 0x1d, 0x9c, 0x1d, 0xf7, 0x40, 0x8c, - 0x58, 0x04, 0xf8, 0x05, 0xea, 0xe8, 0x96, 0x06, 0x54, 0x51, 0xd7, 0xd9, 0x71, 0x76, 0xd7, 0x9e, - 0x7f, 0xe1, 0xdb, 0x45, 0x4d, 0x33, 0xd7, 0x5b, 0xd2, 0xd5, 0xfe, 0x68, 0xdf, 0xff, 0xa1, 0xff, - 0x0b, 0x44, 0xea, 0x14, 0x14, 0x0d, 0xf1, 0xf5, 0xed, 0x76, 0x63, 0x72, 0xbb, 0x8d, 0xea, 0x18, - 0xa9, 0x58, 0x31, 0x43, 0x4d, 0x99, 0x41, 0xe4, 0x2e, 0x19, 0xf6, 0x23, 0xff, 0x1d, 0xaf, 0xc1, - 0xaf, 0x9b, 0xee, 0x65, 0x10, 0x85, 0xeb, 0x56, 0xb4, 0xa9, 0x4f, 0xc4, 0x48, 0xe0, 0x5f, 0xd1, - 0x8a, 0x54, 0x54, 0xe5, 0xd2, 0x5d, 0x36, 0x62, 0xc7, 0x0f, 0x21, 0x66, 0x08, 0xc3, 0x47, 0x56, - 0x6e, 0xa5, 0x38, 0x13, 0x2b, 0xd4, 0xbd, 0x59, 0x42, 0x1f, 0xd4, 0xc5, 0x87, 0x3c, 0x1d, 0x30, - 0x4d, 0x84, 0xbf, 0x43, 0x4d, 0x35, 0xce, 0xc0, 0xec, 0x74, 0x35, 0xfc, 0xb4, 0x6c, 0xf6, 0x7c, - 0x9c, 0xc1, 0x9b, 0xdb, 0xed, 0xa7, 0x0b, 0x20, 0x3a, 0x45, 0x0c, 0x08, 0x7f, 0x5b, 0xcd, 0xb1, - 0x64, 0xe0, 0x1f, 0xdd, 0x17, 0x7f, 0x73, 0xbb, 0xbd, 0x51, 0xc1, 0xee, 0xf7, 0x83, 0x47, 0x08, - 0xbf, 0xa4, 0x52, 0x9d, 0x0b, 0x9a, 0xca, 0x82, 0x96, 0x25, 0x60, 0xd7, 0xf1, 0xf9, 0xdb, 0xdd, - 0xac, 0x46, 0x84, 0x5b, 0x56, 0x12, 0x9f, 0xcc, 0xb1, 0x91, 0x05, 0x0a, 0xf8, 0x13, 0xb4, 0x22, - 0x80, 0x4a, 0x9e, 0xba, 0x4d, 0xd3, 0x72, 0xb5, 0x2f, 0x62, 0xa2, 0xc4, 0x66, 0xf1, 0x67, 0xa8, - 0x9d, 0x80, 0x94, 0x34, 0x06, 0xb7, 0x65, 0x0a, 0x37, 0x6c, 0x61, 0xfb, 0xb4, 0x08, 0x93, 0x32, - 0xdf, 0xbd, 0x71, 0xd0, 0xa3, 0x7a, 0x4f, 0x27, 0x4c, 0x2a, 0xfc, 0xd3, 0x9c, 0x5b, 0xfd, 0xb7, - 0x9b, 0x49, 0xa3, 0x8d, 0x57, 0x37, 0xad, 0x5c, 0xa7, 0x8c, 0x4c, 0x39, 0xf5, 0x0a, 0xb5, 0x98, - 0x82, 0x44, 0x6f, 0x7d, 0x79, 0x77, 0xed, 0xf9, 0xe1, 0x03, 0xb8, 0x27, 0x7c, 0xcf, 0xea, 0xb5, - 0x8e, 0x35, 0x33, 0x29, 0x04, 0xba, 0xff, 0x2c, 0x4f, 0x8f, 0xa6, 0x1d, 0x8c, 0x33, 0xd4, 0x96, - 0xc5, 0xd1, 0x4e, 0xf6, 0xee, 0xe6, 0xb5, 0xb4, 0x04, 0x2e, 0x41, 0x40, 0x1a, 0x41, 0xb8, 0xa6, - 0xf7, 0x5b, 0x46, 0x4b, 0x19, 0xfc, 0x31, 0x6a, 0xc5, 0x82, 0xe7, 0x99, 0x35, 0x59, 0xd5, 0xe9, - 0x91, 0x0e, 0x92, 0x22, 0xa7, 0xef, 0x6b, 0x04, 0x42, 0x32, 0x9e, 0x1a, 0x13, 0x4d, 0xdd, 0xd7, - 0x45, 0x11, 0x26, 0x65, 0x1e, 0xf7, 0xd0, 0x13, 0x96, 0x4a, 0x88, 0x72, 0x01, 0xbd, 0x21, 0xcb, - 0xce, 0x4f, 0x7a, 0x17, 0x20, 0xd8, 0xe5, 0xd8, 0x38, 0xa2, 0x13, 0x7e, 0x68, 0x81, 0x4f, 0x8e, - 0x17, 0x15, 0x91, 0xc5, 0x58, 0xbc, 0x8b, 0x3a, 0x11, 0x0d, 0xf3, 0x74, 0xf0, 0xb2, 0x30, 0xcc, - 0x7a, 0xb8, 0xae, 0x6f, 0xef, 0xf0, 0xa0, 0x88, 0x91, 0x2a, 0x8b, 0xcf, 0xd0, 0x63, 0xd3, 0xf2, - 0x99, 0x60, 0x5c, 0x30, 0x35, 0x3e, 0x65, 0x29, 0x4b, 0xf2, 0xc4, 0x6d, 0xef, 0x38, 0xbb, 0xad, - 0xf0, 0x99, 0x55, 0x7f, 0x7c, 0xb4, 0xa0, 0x86, 0x2c, 0x44, 0xe2, 0x03, 0xb4, 0x61, 0x67, 0x2b, - 0x33, 0x6e, 0xc7, 0x90, 0x3d, 0xb5, 0x64, 0x1b, 0x17, 0xf7, 0xd3, 0x64, 0xb6, 0xbe, 0xfb, 0x87, - 0x83, 0x36, 0x67, 0xdf, 0x12, 0xfc, 0xca, 0x41, 0x28, 0x2a, 0xbf, 0x5f, 0xe9, 0x3a, 0xc6, 0x6d, - 0x27, 0x0f, 0xe0, 0xb6, 0xea, 0x51, 0xa8, 0x9f, 0xe4, 0x2a, 0x24, 0xc9, 0x94, 0x66, 0xf7, 0x37, - 0x07, 0x6d, 0xce, 0xda, 0x04, 0x07, 0x68, 0x35, 0xa5, 0x09, 0xc8, 0x8c, 0x46, 0xe5, 0xc3, 0xf5, - 0xbe, 0xe5, 0x59, 0xfd, 0xbe, 0x4c, 0x90, 0xba, 0x06, 0xef, 0xa0, 0xa6, 0x3e, 0x58, 0x03, 0x55, - 0x2f, 0xb2, 0xae, 0x25, 0x26, 0x83, 0x9f, 0xa1, 0x66, 0xc6, 0x85, 0x32, 0xde, 0x69, 0x85, 0x1d, - 0x9d, 0x3d, 0xe3, 0x42, 0x11, 0x13, 0x0d, 0xf7, 0xae, 0xef, 0xbc, 0xc6, 0xeb, 0x3b, 0xaf, 0x71, - 0x73, 0xe7, 0x35, 0x5e, 0x4d, 0x3c, 0xe7, 0x7a, 0xe2, 0x39, 0xaf, 0x27, 0x9e, 0x73, 0x33, 0xf1, - 0x9c, 0xbf, 0x26, 0x9e, 0xf3, 0xfb, 0xdf, 0x5e, 0xe3, 0xc7, 0xb6, 0x1d, 0xf4, 0xdf, 0x00, 0x00, - 0x00, 0xff, 0xff, 0x8f, 0x0e, 0x62, 0x24, 0x24, 0x08, 0x00, 0x00, + // 866 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x54, 0xcd, 0x6e, 0x23, 0x45, + 0x10, 0xf6, 0x64, 0xed, 0xd8, 0xe9, 0x84, 0x24, 0x34, 0xbb, 0xec, 0x28, 0x5a, 0x26, 0xc1, 0x48, + 0x10, 0x90, 0x32, 0x43, 0x56, 0x88, 0x1f, 0x21, 0x21, 0x65, 0x72, 0x88, 0x2c, 0x25, 0x10, 0xb5, + 0xa3, 0x1c, 0x10, 0x12, 0xdb, 0x1e, 0x57, 0x26, 0x8d, 0x77, 0x7e, 0xe8, 0xee, 0xb1, 0xe4, 0xdb, + 0x4a, 0xbc, 0x00, 0x17, 0x5e, 0x81, 0x67, 0xc9, 0x81, 0xc3, 0x1e, 0x73, 0xb2, 0x88, 0x79, 0x8b, + 0x3d, 0xa1, 0xee, 0xe9, 0x99, 0xf1, 0x1f, 0x62, 0x15, 0xe5, 0x62, 0xb9, 0xab, 0xea, 0xfb, 0xbe, + 0xaa, 0xea, 0x6f, 0x1a, 0xbd, 0x18, 0x7c, 0x2d, 0x5c, 0x96, 0x78, 0x83, 0xac, 0x07, 0x3c, 0x06, + 0x09, 0xc2, 0x1b, 0x42, 0xdc, 0x4f, 0xb8, 0x37, 0x95, 0x38, 0xa0, 0x61, 0xc8, 0x21, 0xa4, 0x32, + 0xe1, 0x5e, 0x3a, 0x08, 0x3d, 0x9a, 0x32, 0xa1, 0x7e, 0x38, 0x84, 0x4c, 0x48, 0x4e, 0x25, 0x4b, + 0x62, 0x6f, 0x78, 0xd8, 0x03, 0x49, 0x0f, 0xbd, 0x10, 0x62, 0xe0, 0x54, 0x42, 0xdf, 0x4d, 0x79, + 0x22, 0x13, 0xfc, 0x55, 0x4e, 0xe4, 0x2a, 0xa2, 0x9f, 0x2b, 0x22, 0x37, 0x1d, 0x84, 0xae, 0x22, + 0x72, 0xe7, 0x88, 0x5c, 0x43, 0xb4, 0x73, 0x10, 0x32, 0x79, 0x9d, 0xf5, 0xdc, 0x20, 0x89, 0xbc, + 0x30, 0x09, 0x13, 0x4f, 0xf3, 0xf5, 0xb2, 0x2b, 0x7d, 0xd2, 0x07, 0xfd, 0x2f, 0xd7, 0xd9, 0xf9, + 0xc2, 0x34, 0x4c, 0x53, 0x16, 0xd1, 0xe0, 0x9a, 0xc5, 0xc0, 0x47, 0x55, 0xb7, 0x11, 0x48, 0xea, + 0x0d, 0x17, 0xba, 0xdb, 0xf1, 0xfe, 0x0b, 0xc5, 0xb3, 0x58, 0xb2, 0x08, 0x16, 0x00, 0x5f, 0xfe, + 0x1f, 0x40, 0x04, 0xd7, 0x10, 0xd1, 0x79, 0x5c, 0xfb, 0xaf, 0x15, 0x84, 0x8e, 0xce, 0x3b, 0x5d, + 0xe0, 0x43, 0x16, 0x00, 0x7e, 0x81, 0x5a, 0xaa, 0xa5, 0x3e, 0x95, 0xd4, 0xb6, 0xf6, 0xac, 0xfd, + 0xf5, 0xe7, 0x9f, 0xbb, 0x66, 0x51, 0xd3, 0xcc, 0xd5, 0x96, 0x54, 0xb5, 0x3b, 0x3c, 0x74, 0x7f, + 0xe8, 0xfd, 0x02, 0x81, 0x3c, 0x03, 0x49, 0x7d, 0x7c, 0x33, 0xde, 0xad, 0x4d, 0xc6, 0xbb, 0xa8, + 0x8a, 0x91, 0x92, 0x15, 0x33, 0x54, 0x17, 0x29, 0x04, 0xf6, 0x8a, 0x66, 0x3f, 0x71, 0xef, 0x79, + 0x0d, 0x6e, 0xd5, 0x74, 0x37, 0x85, 0xc0, 0xdf, 0x30, 0xa2, 0x75, 0x75, 0x22, 0x5a, 0x02, 0xff, + 0x8a, 0x56, 0x85, 0xa4, 0x32, 0x13, 0xf6, 0x23, 0x2d, 0xd6, 0x79, 0x08, 0x31, 0x4d, 0xe8, 0x6f, + 0x1a, 0xb9, 0xd5, 0xfc, 0x4c, 0x8c, 0x50, 0xfb, 0x76, 0x05, 0xbd, 0x57, 0x15, 0x1f, 0x27, 0x71, + 0x9f, 0x29, 0x22, 0xfc, 0x2d, 0xaa, 0xcb, 0x51, 0x0a, 0x7a, 0xa7, 0x6b, 0xfe, 0x27, 0x45, 0xb3, + 0x17, 0xa3, 0x14, 0xde, 0x8c, 0x77, 0x9f, 0x2e, 0x81, 0xa8, 0x14, 0xd1, 0x20, 0xfc, 0x4d, 0x39, + 0xc7, 0x8a, 0x86, 0x7f, 0x38, 0x2b, 0xfe, 0x66, 0xbc, 0xbb, 0x55, 0xc2, 0x66, 0xfb, 0xc1, 0x43, + 0x84, 0x5f, 0x52, 0x21, 0x2f, 0x38, 0x8d, 0x45, 0x4e, 0xcb, 0x22, 0x30, 0xeb, 0xf8, 0xec, 0xed, + 0x6e, 0x56, 0x21, 0xfc, 0x1d, 0x23, 0x89, 0x4f, 0x17, 0xd8, 0xc8, 0x12, 0x05, 0xfc, 0x31, 0x5a, + 0xe5, 0x40, 0x45, 0x12, 0xdb, 0x75, 0xdd, 0x72, 0xb9, 0x2f, 0xa2, 0xa3, 0xc4, 0x64, 0xf1, 0xa7, + 0xa8, 0x19, 0x81, 0x10, 0x34, 0x04, 0xbb, 0xa1, 0x0b, 0xb7, 0x4c, 0x61, 0xf3, 0x2c, 0x0f, 0x93, + 0x22, 0xdf, 0xbe, 0xb5, 0xd0, 0x66, 0xb5, 0xa7, 0x53, 0x26, 0x24, 0xfe, 0x69, 0xc1, 0xad, 0xee, + 0xdb, 0xcd, 0xa4, 0xd0, 0xda, 0xab, 0xdb, 0x46, 0xae, 0x55, 0x44, 0xa6, 0x9c, 0x7a, 0x8d, 0x1a, + 0x4c, 0x42, 0xa4, 0xb6, 0xfe, 0x68, 0x7f, 0xfd, 0xf9, 0xf1, 0x03, 0xb8, 0xc7, 0x7f, 0xc7, 0xe8, + 0x35, 0x3a, 0x8a, 0x99, 0xe4, 0x02, 0xed, 0x3f, 0xeb, 0xd3, 0xa3, 0x29, 0x07, 0xe3, 0x14, 0x35, + 0x45, 0x7e, 0x34, 0x93, 0xdd, 0xdf, 0xbc, 0x86, 0x96, 0xc0, 0x15, 0x70, 0x88, 0x03, 0xf0, 0xd7, + 0xd5, 0x7e, 0x8b, 0x68, 0x21, 0x83, 0x3f, 0x42, 0x8d, 0x90, 0x27, 0x59, 0x6a, 0x4c, 0x56, 0x76, + 0x7a, 0xa2, 0x82, 0x24, 0xcf, 0xa9, 0xfb, 0x1a, 0x02, 0x17, 0x2c, 0x89, 0xb5, 0x89, 0xa6, 0xee, + 0xeb, 0x32, 0x0f, 0x93, 0x22, 0x8f, 0xbb, 0xe8, 0x09, 0x8b, 0x05, 0x04, 0x19, 0x87, 0xee, 0x80, + 0xa5, 0x17, 0xa7, 0xdd, 0x4b, 0xe0, 0xec, 0x6a, 0xa4, 0x1d, 0xd1, 0xf2, 0x3f, 0x30, 0xc0, 0x27, + 0x9d, 0x65, 0x45, 0x64, 0x39, 0x16, 0xef, 0xa3, 0x56, 0x40, 0xfd, 0x2c, 0xee, 0xbf, 0xcc, 0x0d, + 0xb3, 0xe1, 0x6f, 0xa8, 0xdb, 0x3b, 0x3e, 0xca, 0x63, 0xa4, 0xcc, 0xe2, 0x73, 0xf4, 0x58, 0xb7, + 0x7c, 0xce, 0x59, 0xc2, 0x99, 0x1c, 0x9d, 0xb1, 0x98, 0x45, 0x59, 0x64, 0x37, 0xf7, 0xac, 0xfd, + 0x86, 0xff, 0xcc, 0xa8, 0x3f, 0x3e, 0x59, 0x52, 0x43, 0x96, 0x22, 0xf1, 0x11, 0xda, 0x32, 0xb3, + 0x15, 0x19, 0xbb, 0xa5, 0xc9, 0x9e, 0x1a, 0xb2, 0xad, 0xcb, 0xd9, 0x34, 0x99, 0xaf, 0xc7, 0xdf, + 0xa1, 0x4d, 0xb3, 0x6e, 0xad, 0xdb, 0xe9, 0xdb, 0x6b, 0x7a, 0x8b, 0xef, 0x1b, 0x86, 0xcd, 0xee, + 0x4c, 0x96, 0xcc, 0x55, 0xb7, 0xff, 0xb0, 0xd0, 0xf6, 0xfc, 0x5b, 0x84, 0x5f, 0x59, 0x08, 0x05, + 0xc5, 0xf7, 0x2f, 0x6c, 0x4b, 0xbb, 0xf5, 0xf4, 0x01, 0xdc, 0x5a, 0x3e, 0x2a, 0xd5, 0x93, 0x5e, + 0x86, 0x04, 0x99, 0xd2, 0x6c, 0xff, 0x66, 0xa1, 0xed, 0x79, 0x9b, 0x61, 0x0f, 0xad, 0xc5, 0x34, + 0x02, 0x91, 0xd2, 0xa0, 0x78, 0xf8, 0xde, 0x35, 0x3c, 0x6b, 0xdf, 0x17, 0x09, 0x52, 0xd5, 0xe0, + 0x3d, 0x54, 0x57, 0x07, 0x63, 0xc0, 0xf2, 0x45, 0x57, 0xb5, 0x44, 0x67, 0xf0, 0x33, 0x54, 0x4f, + 0x13, 0x2e, 0xb5, 0xf7, 0x1a, 0x7e, 0x4b, 0x65, 0xcf, 0x13, 0x2e, 0x89, 0x8e, 0xfa, 0x07, 0x37, + 0x77, 0x4e, 0xed, 0xf5, 0x9d, 0x53, 0xbb, 0xbd, 0x73, 0x6a, 0xaf, 0x26, 0x8e, 0x75, 0x33, 0x71, + 0xac, 0xd7, 0x13, 0xc7, 0xba, 0x9d, 0x38, 0xd6, 0xdf, 0x13, 0xc7, 0xfa, 0xfd, 0x1f, 0xa7, 0xf6, + 0x63, 0xd3, 0x0c, 0xfa, 0x6f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x40, 0x0c, 0x60, 0x72, 0x64, 0x08, + 0x00, 0x00, } diff --git a/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1/generated.proto b/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1/generated.proto index a8e329f8187..6e1a135d4ca 100644 --- a/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1/generated.proto +++ b/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1/generated.proto @@ -1,5 +1,6 @@ /* Copyright The Kubernetes Authors. +Copyright 2020 Authors of Arktos - file modified. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -112,6 +113,10 @@ message APIServiceSpec { // version, then minor version. An example sorted list of versions: // v10, v2, v1, v11beta2, v10beta3, v3beta1, v12alpha1, v11alpha2, foo1, foo10. optional int32 versionPriority = 8; + + // leaving this here so everyone remembers why proto index 6 is skipped + // Priority int64 `json:"priority" protobuf:"varint,6,opt,name=priority"` + optional string serviceGroupId = 9; } // APIServiceStatus contains derived information about an API server diff --git a/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1/types.go b/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1/types.go index 2a282a9354a..e55cce44489 100644 --- a/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1/types.go +++ b/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1/types.go @@ -85,6 +85,7 @@ type APIServiceSpec struct { // leaving this here so everyone remembers why proto index 6 is skipped // Priority int64 `json:"priority" protobuf:"varint,6,opt,name=priority"` + ServiceGroupId string `json:"serviceGroupId,omitempty" protobuf:"bytes,9,opt,name=serviceGroupId"` } // ConditionStatus indicates the status of a condition (true, false, or unknown). diff --git a/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1/zz_generated.conversion.go b/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1/zz_generated.conversion.go index ab43af4e66d..b22e6890ea2 100644 --- a/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1/zz_generated.conversion.go +++ b/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/v1beta1/zz_generated.conversion.go @@ -2,6 +2,7 @@ /* Copyright The Kubernetes Authors. +Copyright 2020 Authors of Arktos - file modified. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -217,6 +218,7 @@ func autoConvert_v1beta1_APIServiceSpec_To_apiregistration_APIServiceSpec(in *AP out.CABundle = *(*[]byte)(unsafe.Pointer(&in.CABundle)) out.GroupPriorityMinimum = in.GroupPriorityMinimum out.VersionPriority = in.VersionPriority + out.ServiceGroupId = in.ServiceGroupId return nil } @@ -241,6 +243,7 @@ func autoConvert_apiregistration_APIServiceSpec_To_v1beta1_APIServiceSpec(in *ap out.CABundle = *(*[]byte)(unsafe.Pointer(&in.CABundle)) out.GroupPriorityMinimum = in.GroupPriorityMinimum out.VersionPriority = in.VersionPriority + out.ServiceGroupId = in.ServiceGroupId return nil } diff --git a/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/zz_generated.deepcopy.go b/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/zz_generated.deepcopy.go index 5ab16420497..80026435a20 100644 --- a/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/zz_generated.deepcopy.go +++ b/staging/src/k8s.io/kube-aggregator/pkg/apis/apiregistration/zz_generated.deepcopy.go @@ -2,6 +2,7 @@ /* Copyright The Kubernetes Authors. +Copyright 2020 Authors of Arktos - file modified. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/test/integration/apiserver/BUILD b/test/integration/apiserver/BUILD index d7d203f63c9..e7dbe3c7c43 100644 --- a/test/integration/apiserver/BUILD +++ b/test/integration/apiserver/BUILD @@ -51,6 +51,7 @@ go_test( "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/unstructured:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1beta1:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/fields:go_default_library", + "//staging/src/k8s.io/apimachinery/pkg/labels:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/schema:go_default_library", "//staging/src/k8s.io/apimachinery/pkg/runtime/serializer/protobuf:go_default_library", diff --git a/test/integration/apiserver/apiserver_partition_test.go b/test/integration/apiserver/apiserver_partition_test.go index 8a5a1f5a86a..addd2fe8d8f 100644 --- a/test/integration/apiserver/apiserver_partition_test.go +++ b/test/integration/apiserver/apiserver_partition_test.go @@ -23,6 +23,7 @@ import ( "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/meta" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/watch" "k8s.io/client-go/informers" "k8s.io/client-go/tools/record" @@ -298,6 +299,25 @@ func checkReplicaSetExistence2(existingRSs []interface{}, searchRSs ...*apps.Rep return true } +func checkReplicaSetExistence3(existingRSs []*apps.ReplicaSet, searchRSs ...*apps.ReplicaSet) bool { + for _, rsToSearch := range searchRSs { + isFound := false + for _, rs := range existingRSs { + if rs.HashKey == rsToSearch.HashKey && rs.UID == rsToSearch.UID && + rs.Tenant == rsToSearch.Tenant && rs.Namespace == rsToSearch.Namespace && rs.Name == rsToSearch.Name { + isFound = true + break + } + } + + if !isFound { + return false + } + } + + return true +} + func startEventBroadCaster(t *testing.T, cs clientset.Interface) { eventBroadcaster := record.NewBroadcaster() eventBroadcaster.StartLogging(klog.Infof) @@ -499,7 +519,6 @@ func TestPostCanUpdateAlldata(t *testing.T) { deletePod(t, clientset1, pod2) } -/* func TestWatchOnlyGetDataFromOneParition(t *testing.T) { _, closeFn1, clientset1, configFilename1, _, _, clientset2, configFilename2 := setUpTwoApiservers(t) defer deleteSinglePartitionConfigFile(t, configFilename1) @@ -569,7 +588,6 @@ func TestWatchOnlyGetDataFromOneParition(t *testing.T) { deleteRS(t, clientset1, rs1) deleteRS(t, clientset1, rs2) } -*/ func TestAggregatedWatchInformerCanGetAllData(t *testing.T) { prefix, configFilename1, configFilename2 := createTwoApiServersPartitionFiles(t) @@ -925,6 +943,105 @@ func TestPartitionUnBounded(t *testing.T) { assert.True(t, rsFound) } +func TestDataPartitionReset(t *testing.T) { + // set up one api server + serviceGroupId := "10" + + prefix, configFilename := createSingleApiServerPartitionFile(t, "A", "z") + masterConfig := framework.NewIntegrationServerWithPartitionConfig(prefix, configFilename, "") + masterConfig.ExtraConfig.ServiceGroupId = serviceGroupId + _, s, closeFn := framework.RunAMasterWithDataPartition(masterConfig) + stopCh := make(chan struct{}) + defer close(stopCh) + go masterConfig.ExtraConfig.DataPartitionManager.Run(stopCh) + config := restclient.NewAggregatedConfig(&restclient.KubeConfig{Host: s.URL}) + clientSet, err := clientset.NewForConfig(config) + if err != nil { + t.Fatalf("Error in create clientset: %v", err) + } + + defer deleteSinglePartitionConfigFile(t, configFilename) + defer closeFn() + + // create informer from server + resyncPeriod := 30 * time.Second + informerFactory := informers.NewSharedInformerFactory(clientSet, resyncPeriod) + informerFactory.Start(stopCh) + + startEventBroadCaster(t, clientSet) + informerFactory.WaitForCacheSync(stopCh) + rsInformer := informerFactory.Apps().V1().ReplicaSets() + rsLister := rsInformer.Lister() + go rsInformer.Informer().Run(stopCh) + + informerFactory.WaitForCacheSync(stopCh) + + namespace := "ns1" + rsClient1 := clientSet.AppsV1().ReplicaSetsWithMultiTenancy(namespace, tenant1) + w1 := rsClient1.Watch(metav1.ListOptions{}) + defer w1.Stop() + assert.Nil(t, w1.GetFirstError()) + + // create rs with tenant in data partition + rs1 := createRS(t, clientSet, tenant1, namespace, "rs1", 1) + assert.NotNil(t, rs1) + + // create rs with tenant not in data partition + rs2 := createRS(t, clientSet, "zzz", namespace, "rs2", 1) + assert.NotNil(t, rs2) + + time.Sleep(5 * time.Second) + + // check data from api servers + rslist1, err := rsLister.ReplicaSetsWithMultiTenancy(rs1.Namespace, rs1.Tenant).List(labels.Everything()) + assert.Nil(t, err) + assert.NotNil(t, rslist1) + + rslist2, err := rsLister.ReplicaSetsWithMultiTenancy(rs2.Namespace, rs2.Tenant).List(labels.Everything()) + assert.Nil(t, err) + assert.NotNil(t, rslist1) + + // check rs1 in informer list + assert.True(t, checkReplicaSetExistence3(rslist1, rs1)) + + // check rs2 NOT in informer 1 list + assert.False(t, checkReplicaSetExistence3(rslist2, rs2)) + + // update data partition for api server to [tenant2, zzzz) + dpConfigData := &v1.DataPartitionConfig{ + ObjectMeta: metav1.ObjectMeta{ + Name: "partition-10", + }, + StartTenant: "tenant2", + IsStartTenantValid: true, + EndTenant: "zzzz", + IsEndTenantValid: true, + ServiceGroupId: serviceGroupId, + } + dpConfig, err := clientSet.CoreV1().DataPartitionConfigs().Create(dpConfigData) + assert.Nil(t, err) + assert.Equal(t, dpConfig.Name, dpConfigData.Name) + assert.Equal(t, dpConfig.ServiceGroupId, dpConfigData.ServiceGroupId) + assert.Equal(t, dpConfig.StartTenant, dpConfigData.StartTenant) + assert.Equal(t, dpConfig.EndTenant, dpConfigData.EndTenant) + assert.Equal(t, dpConfig.IsStartTenantValid, dpConfigData.IsStartTenantValid) + assert.Equal(t, dpConfig.IsEndTenantValid, dpConfigData.IsEndTenantValid) + + // wait for population as resync is 30 second + time.Sleep(60 * time.Second) + + // Get list again + rslist3, err := rsLister.ReplicaSetsWithMultiTenancy(rs2.Namespace, rs2.Tenant).List(labels.Everything()) + t.Logf("rs list 3 [%#v]", rslist3) + + // check rs1 NOT in informer 1 list - is already in cache. + // No cache invalidation now - waiting for compact + //assert.False(t, checkReplicaSetExistence(rslist3, rs1)) + + // check rs2 in informer 1 list + assert.True(t, checkReplicaSetExistence3(rslist3, rs2)) +} + func setUpSingleApiserver(t *testing.T, begin, end string) (*httptest.Server, framework.CloseFunc, clientset.Interface, string) { prefix, configFilename := createSingleApiServerPartitionFile(t, begin, end) masterConfig := framework.NewIntegrationServerWithPartitionConfig(prefix, configFilename, "") diff --git a/test/integration/etcd/data.go b/test/integration/etcd/data.go index 1f5f9a46c42..e1696d1b7d1 100644 --- a/test/integration/etcd/data.go +++ b/test/integration/etcd/data.go @@ -44,6 +44,10 @@ func GetEtcdStorageDataForNamespace(namespace string) map[schema.GroupVersionRes Stub: `{"metadata": {"name": "instance1"}, "controllerType": "rs", "uid": "instance1", "hashKey": 1234, "workloadNum": 100, "isLocked": false}`, ExpectedEtcdPath: "/registry/controllerinstances/instance1", }, + gvr("", "v1", "datapartitionconfigs"): { + Stub: `{"metadata": {"name": "partition1"}, "startTenant": "tenant1", "isStartTenantValid": true, "endTenant": "tenantz", "isEndTenantValid": true, "serviceGroupId": "1"}`, + ExpectedEtcdPath: "/registry/datapartitionconfigs/partition1", + }, gvr("", "v1", "configmaps"): { Stub: `{"data": {"foo": "bar"}, "metadata": {"name": "cm1"}}`, ExpectedEtcdPath: "/registry/configmaps/" + namespace + "/cm1", diff --git a/test/integration/etcd/multi_tenancy_data.go b/test/integration/etcd/multi_tenancy_data.go index 60e44e6a52c..25dded979b5 100644 --- a/test/integration/etcd/multi_tenancy_data.go +++ b/test/integration/etcd/multi_tenancy_data.go @@ -48,6 +48,10 @@ func GetEtcdStorageDataForNamespaceWithMultiTenancy(tenant, namespace string) ma Stub: `{"metadata": {"name": "instance1"}, "controllerType": "rs", "uid": "instance1", "hashKey": 1234, "workloadNum": 100, "isLocked": false}`, ExpectedEtcdPath: "/registry/controllerinstances/instance1", }, + gvr("", "v1", "datapartitionconfigs"): { + Stub: `{"metadata": {"name": "partition1"}, "startTenant": "tenant1", "isStartTenantValid": true, "endTenant": "tenantz", "isEndTenantValid": true, "serviceGroupId": "1"}`, + ExpectedEtcdPath: "/registry/datapartitionconfigs/partition1", + }, gvr("", "v1", "configmaps"): { Stub: `{"data": {"foo": "bar"}, "metadata": {"name": "cm1"}}`, ExpectedEtcdPath: "/registry/configmaps/" + tenant + "/" + namespace + "/cm1", diff --git a/test/integration/etcd/multi_tenancy_etcd_storage_path_test.go b/test/integration/etcd/multi_tenancy_etcd_storage_path_test.go index b10bd3af49a..5855a8b30e9 100644 --- a/test/integration/etcd/multi_tenancy_etcd_storage_path_test.go +++ b/test/integration/etcd/multi_tenancy_etcd_storage_path_test.go @@ -78,7 +78,7 @@ func TestEtcdStoragePathWithMultiTenancy(t *testing.T) { testData, hasTest := etcdStorageData[gvResource] if !hasTest { - t.Fatalf("no test data for %s. Please add a test for your new type to GetEtcdStorageData().", gvResource) + t.Fatalf("no test data for %s. Please add a test for your new type to GetEtcdStorageDataForNamespace() and GetEtcdStorageDataForNamespaceWithMultiTenancy().", gvResource) } if len(testData.ExpectedEtcdPath) == 0 { diff --git a/test/integration/examples/apiserver_test.go b/test/integration/examples/apiserver_test.go index 8b2b73c6fb4..b409e406c1a 100644 --- a/test/integration/examples/apiserver_test.go +++ b/test/integration/examples/apiserver_test.go @@ -132,7 +132,7 @@ func TestAggregatedAPIServer(t *testing.T) { } kubeClientConfigValue.Store(kubeAPIServerClientConfigs) - kubeAPIServer, err := app.CreateKubeAPIServer(kubeAPIServerConfig, genericapiserver.NewEmptyDelegate(), admissionPostStartHook) + kubeAPIServer, err := app.CreateKubeAPIServer(kubeAPIServerConfig, genericapiserver.NewEmptyDelegate(), admissionPostStartHook, stopCh) if err != nil { t.Fatal(err) } diff --git a/test/integration/framework/BUILD b/test/integration/framework/BUILD index d34a48b5a2b..1a98e174a37 100644 --- a/test/integration/framework/BUILD +++ b/test/integration/framework/BUILD @@ -62,6 +62,7 @@ go_library( "//staging/src/k8s.io/apiserver/pkg/server:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server/options:go_default_library", "//staging/src/k8s.io/apiserver/pkg/server/storage:go_default_library", + "//staging/src/k8s.io/apiserver/pkg/storage/datapartition:go_default_library", "//staging/src/k8s.io/apiserver/pkg/storage/storagebackend:go_default_library", "//staging/src/k8s.io/client-go/informers:go_default_library", "//staging/src/k8s.io/client-go/kubernetes:go_default_library", diff --git a/test/integration/framework/master_utils.go b/test/integration/framework/master_utils.go index 2f8f6f20c05..339b7b53f2f 100644 --- a/test/integration/framework/master_utils.go +++ b/test/integration/framework/master_utils.go @@ -19,6 +19,7 @@ package framework import ( "flag" + "k8s.io/apiserver/pkg/storage/datapartition" "net" "net/http" "net/http/httptest" @@ -119,8 +120,13 @@ func DefaultOpenAPIConfig() *openapicommon.Config { return openAPIConfig } + +func startMasterOrDieWithDataPartition(masterConfig *master.Config, incomingServer *httptest.Server, masterReceiver MasterReceiver) (*master.Master, *httptest.Server, CloseFunc) { + return startMasterOrDie(masterConfig, incomingServer, masterReceiver, true) +} + // startMasterOrDie starts a kubernetes master and an httpserver to handle api requests -func startMasterOrDie(masterConfig *master.Config, incomingServer *httptest.Server, masterReceiver MasterReceiver) (*master.Master, *httptest.Server, CloseFunc) { +func startMasterOrDie(masterConfig *master.Config, incomingServer *httptest.Server, masterReceiver MasterReceiver, withDataPartition bool) (*master.Master, *httptest.Server, CloseFunc) { var m *master.Master var s *httptest.Server @@ -194,6 +200,11 @@ func startMasterOrDie(masterConfig *master.Config, incomingServer *httptest.Serv } masterConfig.ExtraConfig.VersionedInformers = informers.NewSharedInformerFactory(clientset, masterConfig.GenericConfig.LoopbackClientConfig.GetConfig().Timeout) + if withDataPartition { + masterConfig.ExtraConfig.DataPartitionManager = datapartition.NewDataPartitionConfigManager( + masterConfig.ExtraConfig.ServiceGroupId, masterConfig.ExtraConfig.VersionedInformers.Core().V1().DataPartitionConfigs()) + } + m, err = masterConfig.Complete().New(genericapiserver.NewEmptyDelegate()) if err != nil { closeFn() @@ -333,6 +344,7 @@ func NewMasterConfigWithOptions(opts *MasterConfigOptions) *master.Config { KubeletClientConfig: kubeletclient.KubeletClientConfig{Port: 10250}, APIServerServicePort: 443, MasterCount: 1, + ServiceGroupId: "0", }, } } @@ -346,12 +358,20 @@ func RunAMaster(masterConfig *master.Config) (*master.Master, *httptest.Server, masterConfig = NewMasterConfig() masterConfig.GenericConfig.EnableProfiling = true } - return startMasterOrDie(masterConfig, nil, nil) + return startMasterOrDie(masterConfig, nil, nil, false) +} + +func RunAMasterWithDataPartition(masterConfig *master.Config) (*master.Master, *httptest.Server, CloseFunc) { + if masterConfig == nil { + masterConfig = NewMasterConfig() + masterConfig.GenericConfig.EnableProfiling = true + } + return startMasterOrDieWithDataPartition(masterConfig, nil, nil) } // RunAMasterUsingServer starts up a master using the provided config on the specified server. func RunAMasterUsingServer(masterConfig *master.Config, s *httptest.Server, masterReceiver MasterReceiver) (*master.Master, *httptest.Server, CloseFunc) { - return startMasterOrDie(masterConfig, s, masterReceiver) + return startMasterOrDie(masterConfig, s, masterReceiver, false) } // SharedEtcd creates a storage config for a shared etcd instance, with a unique prefix. diff --git a/test/integration/framework/test_server.go b/test/integration/framework/test_server.go index 4ee3fee1cac..416de57aa85 100644 --- a/test/integration/framework/test_server.go +++ b/test/integration/framework/test_server.go @@ -122,7 +122,7 @@ func StartTestServer(t *testing.T, stopCh <-chan struct{}, setup TestServerSetup if setup.ModifyServerConfig != nil { setup.ModifyServerConfig(kubeAPIServerConfig) } - kubeAPIServer, err := app.CreateKubeAPIServer(kubeAPIServerConfig, genericapiserver.NewEmptyDelegate(), admissionPostStartHook) + kubeAPIServer, err := app.CreateKubeAPIServer(kubeAPIServerConfig, genericapiserver.NewEmptyDelegate(), admissionPostStartHook, stopCh) if err != nil { t.Fatal(err) }