From 69efd57bc17f665d94cdd7a6af548813ebc263d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Skrz=C4=99tnicki?= Date: Thu, 14 Dec 2023 18:46:10 +0100 Subject: [PATCH 01/14] Add Vitess guide (MySQL protocol) (#35650) (#35721) * Add Vitess guide (MySQL protocol) * Update cspell --- docs/config.json | 4 + docs/cspell.json | 3 + .../database-access/guides/vitess_cloud.png | Bin 0 -> 37017 bytes .../guides/vitess_selfhosted.png | Bin 0 -> 37101 bytes docs/pages/database-access/guides/vitess.mdx | 228 ++++++++++++++++++ .../pages/includes/database-access/guides.mdx | 1 + 6 files changed, 236 insertions(+) create mode 100644 docs/img/database-access/guides/vitess_cloud.png create mode 100644 docs/img/database-access/guides/vitess_selfhosted.png create mode 100644 docs/pages/database-access/guides/vitess.mdx diff --git a/docs/config.json b/docs/config.json index dab4576e4bf7e..2122ffd68ddce 100644 --- a/docs/config.json +++ b/docs/config.json @@ -1526,6 +1526,10 @@ { "title": "Snowflake", "slug": "/database-access/guides/snowflake/" + }, + { + "title": "Vitess (MySQL protocol)", + "slug": "/database-access/guides/vitess/" } ] }, diff --git a/docs/cspell.json b/docs/cspell.json index 76fcc48912041..d27cdbf9c25bf 100644 --- a/docs/cspell.json +++ b/docs/cspell.json @@ -882,6 +882,9 @@ "znmqk", "zxvf", "zztop", + "Vitess", + "vtgate", + "clientcert", "supervillain" ], "flagWords": [ diff --git a/docs/img/database-access/guides/vitess_cloud.png b/docs/img/database-access/guides/vitess_cloud.png new file mode 100644 index 0000000000000000000000000000000000000000..b87459cf849b41f6443b2451da270667446b4390 GIT binary patch literal 37017 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

S*P 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 xZhiWH|AmafEynl-iGO{ + +![Teleport Database Access Vitess Self-Hosted](../../../img/database-access/guides/vitess_selfhosted.png) + + +![Teleport Database Access Vitess Cloud](../../../img/database-access/guides/vitess_cloud.png) + + + + + + Accessing Vitess using the gRPC protocol is not currently supported by + Teleport. + + +## Prerequisites + +(!docs/pages/includes/edition-prereqs-tabs.mdx!) + +- A self-hosted Vitess instance. +- A host, e.g., an Amazon EC2 instance, where you will run the Teleport Database + Service. +- (!docs/pages/includes/tctl.mdx!) + +## Step 1/4. Create the Teleport Database Token + +(!docs/pages/includes/database-access/token.mdx!) + +## Step 2/4. Create a certificate/key pair + +(!docs/pages/includes/database-access/tctl-auth-sign.mdx!) + +From your local workstation, create the secrets: + +```code +# Export Teleport's certificate authority and generate certificate/key pair +# for host db.example.com with a 3-month validity period. +$ tctl auth sign --format=db --host=db.example.com --out=server --ttl=2190h +``` + +In this example, `db.example.com` is the hostname where the Teleport Database +Service can reach the Vitess server. + +(!docs/pages/includes/database-access/ttl-note.mdx!) + +The command will create 3 files: `server.cas`, `server.crt` and `server.key` +which you'll need to enable mutual TLS. + +## Step 3/4. Configure Vitess + + + +If you are running your Vitess cluster using a [Vitess Operator for Kubernetes](https://vitess.io/docs/18.0/get-started/operator/), +as a first step copy the contents of files `server.cas`, `server.crt` and `server.key` into a secret containing the cluster configuration. + +```yaml +--- +apiVersion: v1 +kind: Secret +metadata: + name: example-cluster-config +type: Opaque +stringData: + server.cas: | + -----BEGIN CERTIFICATE----- + MIIDlDCCAnygAwIBAgIQcCge3zdTWnA7isWitaG5yzANBgkqhkiG9w0BAQsFADBk + ... + jtOP8B0/0xc= + -----END CERTIFICATE----- + server.crt: | + -----BEGIN CERTIFICATE----- + MIIDqjCCApKgAwIBAgIRAKq0OQqYIx3pbkSVpIgMooowDQYJKoZIhvcNAQELBQAw + ... + aRWuAdb7KYfHgZgC+k5jiFS9MYPbOc3qMK6KwGAU + -----END CERTIFICATE----- + server.key: | + -----BEGIN RSA PRIVATE KEY----- + MIIEpQIBAAKCAQEAsiejNWoNPPgcjjNZvG0pA+eADXxPyiGf6Or7oiy2ZmkblC4I + ... + hr6KW+m+bBx0ABXrJVZ4dfv7ppP173vhavmSG3dvo2D5savAay6L/bE= + -----END RSA PRIVATE KEY----- +``` + +Next, update the gateway configuration: + +- Add a new `extraFlags` section with a new entry `mysql_auth_server_impl: clientcert`. +- Add a new `secureTransport` section referencing the added files. + +```yaml +cells: + - name: zone1 + gateway: + extraFlags: + mysql_auth_server_impl: clientcert + secureTransport: + required: true + tls: + clientCACertSecret: + name: teleport-cluster-config + key: server.cas + certSecret: + name: teleport-cluster-config + key: server.crt + keySecret: + name: teleport-cluster-config + key: server.key +``` + + + +If you are running your Vitess cluster using a custom deployment, you will need to update the flags for the `vtgate` service. The following flags needs to be added: + +``` +vtgate ... \ + --mysql_server_ssl_ca=/path/to/server.cas \ + --mysql_server_ssl_cert=/path/to/server.crt \ + --mysql_server_ssl_key=/path/to/server.key \ + --mysql_auth_server_impl=clientcert +``` + +The files `server.cas`, `server.crt` and `server.key` mut be in a location +accessible by the `vtgate` service. + +For more details about `vtgate` and Vitess configuration, please see the +[documentation](https://vitess.io/docs/18.0/user-guides/configuration-basic/vtgate/). + + + + +### Create a Teleport user + +(!docs/pages/includes/database-access/create-user.mdx!) + +### Configure and Start the Database Service + +Install and configure Teleport where you will run the Teleport Database Service: + + + + +(!docs/pages/includes/install-linux.mdx!) + +(!docs/pages/includes/database-access/db-configure-start.mdx +dbName="example-vitess" dbProtocol="mysql" +databaseAddress="db.example.com:3306" !) + + + + Teleport provides Helm charts for installing the Teleport Database Service in Kubernetes Clusters. + +(!docs/pages/kubernetes-access/helm/includes/helm-repo-add.mdx!) + +(!docs/pages/includes/database-access/db-helm-install.mdx dbName="example-vitess" +dbProtocol="mysql" databaseAddress="db.example.com:3306" !) + + + + +(!docs/pages/includes/database-access/multiple-instances-tip.mdx !) + +## Step 4/4. Connect + +Once the Database Service has joined the cluster, log in to see the available +databases: + + + + +```code +$ tsh login --proxy=teleport.example.com --user=alice +$ tsh db ls +# Name Description Labels +# -------------- -------------- -------- +# example-vitess Example Vitess env=dev +``` + + + + +```code +$ tsh login --proxy=mytenant.teleport.sh --user=alice +$ tsh db ls +# Name Description Labels +# -------------- -------------- -------- +# example-vitess Example Vitess env=dev +``` + + + + + +Note that you will only be able to see databases your role has access to. See +the [RBAC](../rbac.mdx) guide for more details. + +To retrieve credentials for a database and connect to it: + +```code +$ tsh db connect example-vitess +``` + +You can optionally specify the database name and the user to use by default when +connecting to the database instance: + +```code +$ tsh db connect --db-user=root --db-name=mysql example-vitess +``` + + + The `mysql` or `mariadb` command-line client should be available in `PATH` in + order to be able to connect. `mariadb` is a default command-line client for + MySQL and MariaDB. + + +To log out of the database and remove credentials: + +```code +# Remove credentials for a particular database instance. +$ tsh db logout example-vitess +# Remove credentials for all database instances. +$ tsh db logout +``` diff --git a/docs/pages/includes/database-access/guides.mdx b/docs/pages/includes/database-access/guides.mdx index 50b6e5ad59c24..84ee06d4c093a 100644 --- a/docs/pages/includes/database-access/guides.mdx +++ b/docs/pages/includes/database-access/guides.mdx @@ -29,6 +29,7 @@ - [Self-Hosted Cassandra & ScyllaDB](../../database-access/guides/cassandra-self-hosted.mdx): Connect self-hosted Cassandra or ScyllaDB. - [Self-Hosted Oracle](../../database-access/guides/oracle-self-hosted.mdx): Connect self-hosted Oracle database. - [Snowflake](../../database-access/guides/snowflake.mdx): Connect Snowflake. +- [Vitess](../../database-access/guides/vitess.mdx): Connect Vitess. ## Other guides From a6e754a74ef9f03e7bc9aa0ecb973a361b090406 Mon Sep 17 00:00:00 2001 From: Steven Martin Date: Thu, 14 Dec 2023 13:46:46 -0500 Subject: [PATCH 02/14] docs: fix google cloud image for cloud api access (#35716) --- docs/pages/application-access/cloud-apis/google-cloud.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/pages/application-access/cloud-apis/google-cloud.mdx b/docs/pages/application-access/cloud-apis/google-cloud.mdx index 7e0ad4b54be9d..384161589f96c 100644 --- a/docs/pages/application-access/cloud-apis/google-cloud.mdx +++ b/docs/pages/application-access/cloud-apis/google-cloud.mdx @@ -191,7 +191,7 @@ $ gcloud compute instances create teleport-app-service \ --service-account=teleport-google-cloud-cli@.iam.gserviceaccount.com \ --scopes=cloud-platform \ --zone= \ - --image=https://www.googleapis.com/compute/v1/projects/ubuntu-os-cloud/global/images/ubuntu-2210-kinetic-arm64-v20230113 + --image=https://www.googleapis.com/compute/v1/projects/debian-cloud/global/images/debian-11-bullseye-v20231212 ``` You must use the `service-account` and `scopes` flags as we list them here, From 21345c215670c8077a31423ac7b329918d498a55 Mon Sep 17 00:00:00 2001 From: Michael Wilson Date: Thu, 14 Dec 2023 14:06:50 -0500 Subject: [PATCH 03/14] [v14] Update e ref. (#35741) Update e ref. --- e | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e b/e index 83e7865acecf9..45c6c4714aeb1 160000 --- a/e +++ b/e @@ -1 +1 @@ -Subproject commit 83e7865acecf97787c60d11b8548a09fd2a6bbc2 +Subproject commit 45c6c4714aeb11cb6d385dc4306f4f7d850dba3d From b2f7a92dc4f081e317d5e679ed129532ee7f1d40 Mon Sep 17 00:00:00 2001 From: Brendan O'Halloran Date: Thu, 14 Dec 2023 17:40:49 -0400 Subject: [PATCH 04/14] bump cloud version v14.2.2 (#35734) --- docs/config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/config.json b/docs/config.json index 2122ffd68ddce..444319f96426e 100644 --- a/docs/config.json +++ b/docs/config.json @@ -2053,7 +2053,7 @@ "aws_secret_access_key": "zyxw9876-this-is-an-example" }, "cloud": { - "version": "14.2.1", + "version": "14.2.2", "major_version": "14", "sla": { "monthly_percentage": "99.9%", From e4eee48bed45d91e9104fd53be2cce5e6da68b43 Mon Sep 17 00:00:00 2001 From: Andrew Burke <31974658+atburke@users.noreply.github.com> Date: Thu, 14 Dec 2023 14:06:30 -0800 Subject: [PATCH 05/14] [v14] Add `insecure-drop` to host creation docs (#35747) * Add insecure-drop to host creation docs * Clarify use cases for drop vs insecure-drop --- .../guides/host-user-creation.mdx | 28 +++++++++++++------ 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/docs/pages/server-access/guides/host-user-creation.mdx b/docs/pages/server-access/guides/host-user-creation.mdx index b188d2ea63e2e..40c4fb677d0ee 100644 --- a/docs/pages/server-access/guides/host-user-creation.mdx +++ b/docs/pages/server-access/guides/host-user-creation.mdx @@ -28,11 +28,21 @@ since it must execute these commands in order to create transient users: ## Step 1/3. Configure a role -First, create a role with `create_host_user_mode` set to `drop` or `keep`. +First, create a role with `create_host_user_mode` set to `drop`, `insecure-drop`, or `keep`. -Setting the option to `drop` will create transient users that are deleted once the -session ends. Setting it to `keep` will create permanent users on the host at -login time. + - `insecure-drop` will create transient users that are deleted once the session ends. + - `drop` is the same as `insecure-drop` except it also creates a home directory for the user. + It exists only for backwards compatibility; newly configured services should use + `insecure-drop` instead. + - `keep` will create permanent users on the host at login time. + +Note that with the `drop` and `insecure-drop` modes, it is possible for a created +user to get the same UID as a previously deleted user, which would give the new user +access to all of the old user's files if they are not deleted. + + + `drop` mode will be removed in Teleport 15. + The following role specification will allow users to log in as `nginxrestarter` on any matching Node. The host user will be created and added to the groups listed in @@ -79,7 +89,7 @@ of the Linux distribution being used. See [User/Group Name Syntax](https://syste When a Teleport user accesses an SSH Service instance, Teleport checks each of the user's roles that match the instance. If at least one role matches the instance -but does not specify `create_host_user_mode` to be either `keep` or `drop`, +but does not specify `create_host_user_mode` to be either `keep`, `drop`, or `insecure-drop`, automatic user creation will be disabled. Roles that do not match the server will not be checked. @@ -197,8 +207,9 @@ returns an error if it cannot find the `useradd` binary. The `useradd` command creates a new home directory with the name of the new host user and adds the user to the groups specified in the Teleport user's roles. -Aside from specifying a home directory and groups, the SSH Service executes -`useradd` with the system defaults. For example, it associates the user with the +The SSH Service executes +`useradd --no-create-home --home-dir --groups --uid --gid ` +when adding a user, with all other options using system defaults. For example, it associates the user with the default login shell for the host, which you can specify by setting the `SHELL` field in `/etc/default/useradd`. See the `useradd` manual for your system for a full description of the default behavior. @@ -208,7 +219,8 @@ contents of the `host_sudoers` file written with one entry per line, each prefixed with the username of the user that has logged in. The session can then proceed as usual, however once the SSH session ends, the user -will be automatically removed and their home directory will be deleted, as the +will be automatically removed and their home directory will be deleted with +`userdel --remove `, as the matching role specified they should be dropped. Files owned by the deleted user, created outside the home directory, will remain in place. Groups that were created will remain on the system after the session ends. From cc931ccb30a26a59598302c4214f45702ea12080 Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 14 Dec 2023 16:34:52 -0600 Subject: [PATCH 06/14] Narrow error response conditional for unified resources fetch (#35728) --- web/packages/teleport/src/services/resources/resource.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/web/packages/teleport/src/services/resources/resource.ts b/web/packages/teleport/src/services/resources/resource.ts index a2da8ec394bd4..d21726f983ff8 100644 --- a/web/packages/teleport/src/services/resources/resource.ts +++ b/web/packages/teleport/src/services/resources/resource.ts @@ -54,7 +54,11 @@ class ResourceService { // TODO (avatus) : a temporary check to catch unimplemented errors for unified resources // This is a quick hacky way to catch the error until we migrate completely to unified resources // DELETE IN 15.0 - if (res.response?.status === 404 || res.response?.status === 501) { + if ( + (res.response?.status === 404 && + res.message?.includes('unknown method ListUnifiedResources')) || + res.response?.status === 501 + ) { localStorage.setItem( KeysEnum.UNIFIED_RESOURCES_NOT_SUPPORTED, 'true' From 22e50b45420e7e4775e91c36650b81253210791c Mon Sep 17 00:00:00 2001 From: Cam Hutchison Date: Fri, 15 Dec 2023 09:38:50 +1100 Subject: [PATCH 07/14] Release 14.2.3 (#35761) --- CHANGELOG.md | 12 ++++ Makefile | 2 +- api/version.go | 2 +- .../macos/tsh/tsh.app/Contents/Info.plist | 4 +- .../macos/tshdev/tsh.app/Contents/Info.plist | 4 +- e | 2 +- examples/chart/teleport-cluster/Chart.yaml | 2 +- .../charts/teleport-operator/Chart.yaml | 2 +- .../auth_deployment_test.yaml.snap | 10 +-- .../proxy_deployment_test.yaml.snap | 18 +++--- examples/chart/teleport-kube-agent/Chart.yaml | 2 +- .../__snapshot__/deployment_test.yaml.snap | 58 ++++++++--------- .../tests/__snapshot__/job_test.yaml.snap | 10 +-- .../__snapshot__/statefulset_test.yaml.snap | 64 +++++++++---------- .../updater_deployment_test.yaml.snap | 4 +- integrations/kube-agent-updater/version.go | 2 +- version.go | 2 +- 17 files changed, 106 insertions(+), 94 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c36cf121af5c9..10f87ba178bd6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Changelog +## 14.2.3 (12/14/23) + +* Prevent Cloud tenants from being a leaf cluster. [#35687](https://github.com/gravitational/teleport/pull/35687) +* Added "Show All Labels" button in the unified resources list view. [#35666](https://github.com/gravitational/teleport/pull/35666) +* Added auto approval flow to servicenow plugin. [#35658](https://github.com/gravitational/teleport/pull/35658) +* Added guided SAML entity descriptor creation when entity descriptor XML is not yet available. [#35657](https://github.com/gravitational/teleport/pull/35657) +* Added a connection test when enrolling a new Connect My Computer resource in Web UI. [#35649](https://github.com/gravitational/teleport/pull/35649) +* Fixed regression of Kubernetes Server Address when Teleport runs in multiplex mode. [#35633](https://github.com/gravitational/teleport/pull/35633) +* When using the Slack plugin, users will now be notified directly of access requests and their approvals or denials. [#35577](https://github.com/gravitational/teleport/pull/35577) +* Fixed bug where configuration errors with an individual SSO connector impacted other connectors. [#35576](https://github.com/gravitational/teleport/pull/35576) +* Fixed client IP propagation from the Proxy to the Auth during IdP initiated SSO. [#35545](https://github.com/gravitational/teleport/pull/35545) + ## 14.2.2 (12/07/23) **Note**: `tsh` v14.2.2 has a known issue where `tsh kube login` uses an diff --git a/Makefile b/Makefile index a1b9ea6042c31..dafd9908c6c05 100644 --- a/Makefile +++ b/Makefile @@ -11,7 +11,7 @@ # Stable releases: "1.0.0" # Pre-releases: "1.0.0-alpha.1", "1.0.0-beta.2", "1.0.0-rc.3" # Master/dev branch: "1.0.0-dev" -VERSION=14.2.2 +VERSION=14.2.3 DOCKER_IMAGE ?= teleport diff --git a/api/version.go b/api/version.go index 65dc6c1009c0b..18aae35040cab 100644 --- a/api/version.go +++ b/api/version.go @@ -1,7 +1,7 @@ // Code generated by "make version". DO NOT EDIT. package api -const Version = "14.2.2" +const Version = "14.2.3" // Gitref is set to the output of "git describe" during the build process. var Gitref string diff --git a/build.assets/macos/tsh/tsh.app/Contents/Info.plist b/build.assets/macos/tsh/tsh.app/Contents/Info.plist index d5922868d174e..82a9dfa7e2221 100644 --- a/build.assets/macos/tsh/tsh.app/Contents/Info.plist +++ b/build.assets/macos/tsh/tsh.app/Contents/Info.plist @@ -19,13 +19,13 @@ CFBundlePackageType APPL CFBundleShortVersionString - 14.2.2 + 14.2.3 CFBundleSupportedPlatforms MacOSX CFBundleVersion - 14.2.2 + 14.2.3 DTCompiler com.apple.compilers.llvm.clang.1_0 DTPlatformBuild diff --git a/build.assets/macos/tshdev/tsh.app/Contents/Info.plist b/build.assets/macos/tshdev/tsh.app/Contents/Info.plist index be512278fd025..3418526aceab6 100644 --- a/build.assets/macos/tshdev/tsh.app/Contents/Info.plist +++ b/build.assets/macos/tshdev/tsh.app/Contents/Info.plist @@ -17,13 +17,13 @@ CFBundlePackageType APPL CFBundleShortVersionString - 14.2.2 + 14.2.3 CFBundleSupportedPlatforms MacOSX CFBundleVersion - 14.2.2 + 14.2.3 DTCompiler com.apple.compilers.llvm.clang.1_0 DTPlatformBuild diff --git a/e b/e index 45c6c4714aeb1..e24b2d9b20654 160000 --- a/e +++ b/e @@ -1 +1 @@ -Subproject commit 45c6c4714aeb11cb6d385dc4306f4f7d850dba3d +Subproject commit e24b2d9b206544e584c8ec75ed5e45fc213465c1 diff --git a/examples/chart/teleport-cluster/Chart.yaml b/examples/chart/teleport-cluster/Chart.yaml index a4cafd36546d6..4040a7399c523 100644 --- a/examples/chart/teleport-cluster/Chart.yaml +++ b/examples/chart/teleport-cluster/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "14.2.2" +.version: &version "14.2.3" name: teleport-cluster apiVersion: v2 diff --git a/examples/chart/teleport-cluster/charts/teleport-operator/Chart.yaml b/examples/chart/teleport-cluster/charts/teleport-operator/Chart.yaml index 17a83a4135531..306200ee2bfd3 100644 --- a/examples/chart/teleport-cluster/charts/teleport-operator/Chart.yaml +++ b/examples/chart/teleport-cluster/charts/teleport-operator/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "14.2.2" +.version: &version "14.2.3" name: teleport-operator apiVersion: v2 diff --git a/examples/chart/teleport-cluster/tests/__snapshot__/auth_deployment_test.yaml.snap b/examples/chart/teleport-cluster/tests/__snapshot__/auth_deployment_test.yaml.snap index 1cdbaee3f062b..b8522bc8adceb 100644 --- a/examples/chart/teleport-cluster/tests/__snapshot__/auth_deployment_test.yaml.snap +++ b/examples/chart/teleport-cluster/tests/__snapshot__/auth_deployment_test.yaml.snap @@ -1,6 +1,6 @@ should add an operator side-car when operator is enabled: 1: | - image: public.ecr.aws/gravitational/teleport-operator:14.2.2 + image: public.ecr.aws/gravitational/teleport-operator:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: httpGet: @@ -41,7 +41,7 @@ should add an operator side-car when operator is enabled: - args: - --diag-addr=0.0.0.0:3000 - --apply-on-startup=/etc/teleport/apply-on-startup.yaml - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent lifecycle: preStop: @@ -174,7 +174,7 @@ should set nodeSelector when set in values: - args: - --diag-addr=0.0.0.0:3000 - --apply-on-startup=/etc/teleport/apply-on-startup.yaml - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent lifecycle: preStop: @@ -271,7 +271,7 @@ should set resources when set in values: - args: - --diag-addr=0.0.0.0:3000 - --apply-on-startup=/etc/teleport/apply-on-startup.yaml - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent lifecycle: preStop: @@ -357,7 +357,7 @@ should set securityContext when set in values: - args: - --diag-addr=0.0.0.0:3000 - --apply-on-startup=/etc/teleport/apply-on-startup.yaml - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent lifecycle: preStop: diff --git a/examples/chart/teleport-cluster/tests/__snapshot__/proxy_deployment_test.yaml.snap b/examples/chart/teleport-cluster/tests/__snapshot__/proxy_deployment_test.yaml.snap index 40e8f90094b2d..99e7aabbcddef 100644 --- a/examples/chart/teleport-cluster/tests/__snapshot__/proxy_deployment_test.yaml.snap +++ b/examples/chart/teleport-cluster/tests/__snapshot__/proxy_deployment_test.yaml.snap @@ -5,7 +5,7 @@ should provision initContainer correctly when set in values: - wait - no-resolve - RELEASE-NAME-auth-v13.NAMESPACE.svc.cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 name: wait-auth-update - args: - echo test @@ -62,7 +62,7 @@ should set nodeSelector when set in values: containers: - args: - --diag-addr=0.0.0.0:3000 - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent lifecycle: preStop: @@ -123,7 +123,7 @@ should set nodeSelector when set in values: - wait - no-resolve - RELEASE-NAME-auth-v13.NAMESPACE.svc.cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 name: wait-auth-update nodeSelector: environment: security @@ -174,7 +174,7 @@ should set resources when set in values: containers: - args: - --diag-addr=0.0.0.0:3000 - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent lifecycle: preStop: @@ -242,7 +242,7 @@ should set resources when set in values: - wait - no-resolve - RELEASE-NAME-auth-v13.NAMESPACE.svc.cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 name: wait-auth-update serviceAccountName: RELEASE-NAME-proxy terminationGracePeriodSeconds: 60 @@ -275,7 +275,7 @@ should set securityContext for initContainers when set in values: containers: - args: - --diag-addr=0.0.0.0:3000 - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent lifecycle: preStop: @@ -343,7 +343,7 @@ should set securityContext for initContainers when set in values: - wait - no-resolve - RELEASE-NAME-auth-v13.NAMESPACE.svc.cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 name: wait-auth-update securityContext: allowPrivilegeEscalation: false @@ -383,7 +383,7 @@ should set securityContext when set in values: containers: - args: - --diag-addr=0.0.0.0:3000 - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent lifecycle: preStop: @@ -451,7 +451,7 @@ should set securityContext when set in values: - wait - no-resolve - RELEASE-NAME-auth-v13.NAMESPACE.svc.cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 name: wait-auth-update securityContext: allowPrivilegeEscalation: false diff --git a/examples/chart/teleport-kube-agent/Chart.yaml b/examples/chart/teleport-kube-agent/Chart.yaml index ed78f39ab6f1b..c50a5a37fd3ec 100644 --- a/examples/chart/teleport-kube-agent/Chart.yaml +++ b/examples/chart/teleport-kube-agent/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "14.2.2" +.version: &version "14.2.3" name: teleport-kube-agent apiVersion: v2 diff --git a/examples/chart/teleport-kube-agent/tests/__snapshot__/deployment_test.yaml.snap b/examples/chart/teleport-kube-agent/tests/__snapshot__/deployment_test.yaml.snap index ab6568d0c2c6a..2788d54040255 100644 --- a/examples/chart/teleport-kube-agent/tests/__snapshot__/deployment_test.yaml.snap +++ b/examples/chart/teleport-kube-agent/tests/__snapshot__/deployment_test.yaml.snap @@ -30,7 +30,7 @@ sets Deployment annotations when specified if action is Upgrade: env: - name: TELEPORT_INSTALL_METHOD_HELM_KUBE_AGENT value: "true" - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -103,7 +103,7 @@ sets Deployment labels when specified if action is Upgrade: env: - name: TELEPORT_INSTALL_METHOD_HELM_KUBE_AGENT value: "true" - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -163,7 +163,7 @@ sets Pod annotations when specified if action is Upgrade: env: - name: TELEPORT_INSTALL_METHOD_HELM_KUBE_AGENT value: "true" - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -223,7 +223,7 @@ sets Pod labels when specified if action is Upgrade: env: - name: TELEPORT_INSTALL_METHOD_HELM_KUBE_AGENT value: "true" - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -300,7 +300,7 @@ should add emptyDir for data when existingDataVolume is not set if action is Upg env: - name: TELEPORT_INSTALL_METHOD_HELM_KUBE_AGENT value: "true" - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -361,7 +361,7 @@ should add insecureSkipProxyTLSVerify to args when set in values if action is Up env: - name: TELEPORT_INSTALL_METHOD_HELM_KUBE_AGENT value: "true" - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -421,7 +421,7 @@ should correctly configure existingDataVolume when set if action is Upgrade: env: - name: TELEPORT_INSTALL_METHOD_HELM_KUBE_AGENT value: "true" - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -479,7 +479,7 @@ should expose diag port if action is Upgrade: env: - name: TELEPORT_INSTALL_METHOD_HELM_KUBE_AGENT value: "true" - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -551,7 +551,7 @@ should have multiple replicas when replicaCount is set (using .replicaCount, dep env: - name: TELEPORT_INSTALL_METHOD_HELM_KUBE_AGENT value: "true" - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -623,7 +623,7 @@ should have multiple replicas when replicaCount is set (using highAvailability.r env: - name: TELEPORT_INSTALL_METHOD_HELM_KUBE_AGENT value: "true" - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -683,7 +683,7 @@ should have one replica when replicaCount is not set if action is Upgrade: env: - name: TELEPORT_INSTALL_METHOD_HELM_KUBE_AGENT value: "true" - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -743,7 +743,7 @@ should mount extraVolumes and extraVolumeMounts if action is Upgrade: env: - name: TELEPORT_INSTALL_METHOD_HELM_KUBE_AGENT value: "true" - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -810,7 +810,7 @@ should mount tls.existingCASecretName and set environment when set in values if value: "true" - name: SSL_CERT_FILE value: /etc/teleport-tls-ca/ca.pem - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -880,7 +880,7 @@ should mount tls.existingCASecretName and set extra environment when set in valu value: http://username:password@my.proxy.host:3128 - name: SSL_CERT_FILE value: /etc/teleport-tls-ca/ca.pem - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -946,7 +946,7 @@ should provision initContainer correctly when set in values if action is Upgrade env: - name: TELEPORT_INSTALL_METHOD_HELM_KUBE_AGENT value: "true" - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1042,7 +1042,7 @@ should set SecurityContext if action is Upgrade: env: - name: TELEPORT_INSTALL_METHOD_HELM_KUBE_AGENT value: "true" - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1122,7 +1122,7 @@ should set affinity when set in values if action is Upgrade: env: - name: TELEPORT_INSTALL_METHOD_HELM_KUBE_AGENT value: "true" - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1182,7 +1182,7 @@ should set default serviceAccountName when not set in values if action is Upgrad env: - name: TELEPORT_INSTALL_METHOD_HELM_KUBE_AGENT value: "true" - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1255,7 +1255,7 @@ should set environment when extraEnv set in values if action is Upgrade: value: "true" - name: HTTPS_PROXY value: http://username:password@my.proxy.host:3128 - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1375,7 +1375,7 @@ should set imagePullPolicy when set in values if action is Upgrade: env: - name: TELEPORT_INSTALL_METHOD_HELM_KUBE_AGENT value: "true" - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: Always livenessProbe: failureThreshold: 6 @@ -1435,7 +1435,7 @@ should set nodeSelector if set in values if action is Upgrade: env: - name: TELEPORT_INSTALL_METHOD_HELM_KUBE_AGENT value: "true" - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1497,7 +1497,7 @@ should set not set priorityClassName when not set in values if action is Upgrade env: - name: TELEPORT_INSTALL_METHOD_HELM_KUBE_AGENT value: "true" - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1569,7 +1569,7 @@ should set preferred affinity when more than one replica is used if action is Up env: - name: TELEPORT_INSTALL_METHOD_HELM_KUBE_AGENT value: "true" - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1629,7 +1629,7 @@ should set priorityClassName when set in values if action is Upgrade: env: - name: TELEPORT_INSTALL_METHOD_HELM_KUBE_AGENT value: "true" - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1690,7 +1690,7 @@ should set probeTimeoutSeconds when set in values if action is Upgrade: env: - name: TELEPORT_INSTALL_METHOD_HELM_KUBE_AGENT value: "true" - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1760,7 +1760,7 @@ should set required affinity when highAvailability.requireAntiAffinity is set if env: - name: TELEPORT_INSTALL_METHOD_HELM_KUBE_AGENT value: "true" - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1820,7 +1820,7 @@ should set resources when set in values if action is Upgrade: env: - name: TELEPORT_INSTALL_METHOD_HELM_KUBE_AGENT value: "true" - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1887,7 +1887,7 @@ should set serviceAccountName when set in values if action is Upgrade: env: - name: TELEPORT_INSTALL_METHOD_HELM_KUBE_AGENT value: "true" - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1947,7 +1947,7 @@ should set tolerations when set in values if action is Upgrade: env: - name: TELEPORT_INSTALL_METHOD_HELM_KUBE_AGENT value: "true" - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 diff --git a/examples/chart/teleport-kube-agent/tests/__snapshot__/job_test.yaml.snap b/examples/chart/teleport-kube-agent/tests/__snapshot__/job_test.yaml.snap index 12e74f7b81aa0..695f44d01afc2 100644 --- a/examples/chart/teleport-kube-agent/tests/__snapshot__/job_test.yaml.snap +++ b/examples/chart/teleport-kube-agent/tests/__snapshot__/job_test.yaml.snap @@ -25,7 +25,7 @@ should create ServiceAccount for post-delete hook by default: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent name: post-delete-job securityContext: @@ -104,7 +104,7 @@ should not create ServiceAccount for post-delete hook if serviceAccount.create i fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent name: post-delete-job securityContext: @@ -132,7 +132,7 @@ should not create ServiceAccount, Role or RoleBinding for post-delete hook if se fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent name: post-delete-job securityContext: @@ -160,7 +160,7 @@ should set nodeSelector in post-delete hook: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent name: post-delete-job securityContext: @@ -190,7 +190,7 @@ should set securityContext in post-delete hook: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent name: post-delete-job securityContext: diff --git a/examples/chart/teleport-kube-agent/tests/__snapshot__/statefulset_test.yaml.snap b/examples/chart/teleport-kube-agent/tests/__snapshot__/statefulset_test.yaml.snap index ca5ed8743f499..d0b199d1a6278 100644 --- a/examples/chart/teleport-kube-agent/tests/__snapshot__/statefulset_test.yaml.snap +++ b/examples/chart/teleport-kube-agent/tests/__snapshot__/statefulset_test.yaml.snap @@ -16,7 +16,7 @@ sets Pod annotations when specified: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -84,7 +84,7 @@ sets Pod labels when specified: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -176,7 +176,7 @@ sets StatefulSet labels when specified: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -272,7 +272,7 @@ should add insecureSkipProxyTLSVerify to args when set in values: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -340,7 +340,7 @@ should add volumeClaimTemplate for data volume when using StatefulSet and action fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -428,7 +428,7 @@ should add volumeClaimTemplate for data volume when using StatefulSet and is Fre fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -506,7 +506,7 @@ should add volumeMount for data volume when using StatefulSet: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -574,7 +574,7 @@ should expose diag port: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -642,7 +642,7 @@ should generate Statefulset when storage is disabled and mode is a Upgrade: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -724,7 +724,7 @@ should have multiple replicas when replicaCount is set (using .replicaCount, dep fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -804,7 +804,7 @@ should have multiple replicas when replicaCount is set (using highAvailability.r fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -872,7 +872,7 @@ should have one replica when replicaCount is not set: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -940,7 +940,7 @@ should install Statefulset when storage is disabled and mode is a Fresh Install: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1010,7 +1010,7 @@ should mount extraVolumes and extraVolumeMounts: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1085,7 +1085,7 @@ should mount tls.existingCASecretName and set environment when set in values: value: RELEASE-NAME - name: SSL_CERT_FILE value: /etc/teleport-tls-ca/ca.pem - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1165,7 +1165,7 @@ should mount tls.existingCASecretName and set extra environment when set in valu value: /etc/teleport-tls-ca/ca.pem - name: HTTPS_PROXY value: http://username:password@my.proxy.host:3128 - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1241,7 +1241,7 @@ should not add emptyDir for data when using StatefulSet: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1309,7 +1309,7 @@ should provision initContainer correctly when set in values: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1413,7 +1413,7 @@ should set SecurityContext: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1501,7 +1501,7 @@ should set affinity when set in values: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1569,7 +1569,7 @@ should set default serviceAccountName when not set in values: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1650,7 +1650,7 @@ should set environment when extraEnv set in values: value: RELEASE-NAME - name: HTTPS_PROXY value: http://username:password@my.proxy.host:3128 - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1786,7 +1786,7 @@ should set imagePullPolicy when set in values: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: Always livenessProbe: failureThreshold: 6 @@ -1854,7 +1854,7 @@ should set nodeSelector if set in values: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1936,7 +1936,7 @@ should set preferred affinity when more than one replica is used: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -2004,7 +2004,7 @@ should set probeTimeoutSeconds when set in values: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -2082,7 +2082,7 @@ should set required affinity when highAvailability.requireAntiAffinity is set: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -2150,7 +2150,7 @@ should set resources when set in values: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -2225,7 +2225,7 @@ should set serviceAccountName when set in values: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -2293,7 +2293,7 @@ should set storage.requests when set in values and action is an Upgrade: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -2361,7 +2361,7 @@ should set storage.storageClassName when set in values and action is an Upgrade: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -2429,7 +2429,7 @@ should set tolerations when set in values: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:14.2.2 + image: public.ecr.aws/gravitational/teleport-distroless:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 diff --git a/examples/chart/teleport-kube-agent/tests/__snapshot__/updater_deployment_test.yaml.snap b/examples/chart/teleport-kube-agent/tests/__snapshot__/updater_deployment_test.yaml.snap index 21c8abc838d13..fb1d118fa15c5 100644 --- a/examples/chart/teleport-kube-agent/tests/__snapshot__/updater_deployment_test.yaml.snap +++ b/examples/chart/teleport-kube-agent/tests/__snapshot__/updater_deployment_test.yaml.snap @@ -27,7 +27,7 @@ sets the affinity: - --base-image=public.ecr.aws/gravitational/teleport-distroless - --version-server=https://my-custom-version-server/v1 - --version-channel=custom/preview - image: public.ecr.aws/gravitational/teleport-kube-agent-updater:14.2.2 + image: public.ecr.aws/gravitational/teleport-kube-agent-updater:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -71,7 +71,7 @@ sets the tolerations: - --base-image=public.ecr.aws/gravitational/teleport-distroless - --version-server=https://my-custom-version-server/v1 - --version-channel=custom/preview - image: public.ecr.aws/gravitational/teleport-kube-agent-updater:14.2.2 + image: public.ecr.aws/gravitational/teleport-kube-agent-updater:14.2.3 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 diff --git a/integrations/kube-agent-updater/version.go b/integrations/kube-agent-updater/version.go index 795a8e96d8a2d..e2150ef7119cf 100644 --- a/integrations/kube-agent-updater/version.go +++ b/integrations/kube-agent-updater/version.go @@ -1,7 +1,7 @@ // Code generated by "make version". DO NOT EDIT. package kubeversionupdater -const Version = "14.2.2" +const Version = "14.2.3" // Gitref is set to the output of "git describe" during the build process. var Gitref string diff --git a/version.go b/version.go index f342fb48ba2a9..c7c258c9bf3cf 100644 --- a/version.go +++ b/version.go @@ -1,7 +1,7 @@ // Code generated by "make version". DO NOT EDIT. package teleport -const Version = "14.2.2" +const Version = "14.2.3" // Gitref is set to the output of "git describe" during the build process. var Gitref string From 8c715a2b20c75c3117b98f2438354880d40b30bf Mon Sep 17 00:00:00 2001 From: Roman Tkachenko Date: Thu, 14 Dec 2023 16:53:03 -0800 Subject: [PATCH 08/14] Bump e (#35764) --- e | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e b/e index e24b2d9b20654..b4450089718c5 160000 --- a/e +++ b/e @@ -1 +1 @@ -Subproject commit e24b2d9b206544e584c8ec75ed5e45fc213465c1 +Subproject commit b4450089718c5f8434cc5b9253172e0d3dfc5925 From b3cbb39e9199e9ab0bc24ad20e20305be8d7404a Mon Sep 17 00:00:00 2001 From: Przemko Robakowski Date: Fri, 15 Dec 2023 03:44:24 +0100 Subject: [PATCH 09/14] [v14] Improve Windows hosts registration (#35742) * New way of defining static hosts in config * comments * modify check to include static_hosts * short-circuit check * comments * fix imports * fix test * review comments * Update lib/config/configuration.go Co-authored-by: Zac Bergquist * Update lib/config/fileconf.go Co-authored-by: Zac Bergquist * Update lib/config/fileconf.go Co-authored-by: Zac Bergquist * Update lib/srv/desktop/windows_server.go Co-authored-by: Zac Bergquist * rename hosts->adhosts * add docs * remove old hearbeat code for static desktops * rename hosts->adhosts * refactor adhosts and hosts --------- Co-authored-by: Zac Bergquist --- lib/config/configuration.go | 41 +++++++++++++++++++++++--- lib/config/configuration_test.go | 16 +++++------ lib/config/fileconf.go | 36 +++++++++++++++++++---- lib/service/desktop.go | 3 +- lib/service/servicecfg/windows.go | 23 +++++++++------ lib/srv/desktop/windows_server.go | 48 +++++++++++++++---------------- 6 files changed, 114 insertions(+), 53 deletions(-) diff --git a/lib/config/configuration.go b/lib/config/configuration.go index f695c813847d6..b4c4f2e3b99b5 100644 --- a/lib/config/configuration.go +++ b/lib/config/configuration.go @@ -1940,11 +1940,13 @@ func applyWindowsDesktopConfig(fc *FileConfig, cfg *servicecfg.Config) error { return trace.Wrap(err) } cfg.WindowsDesktop.ShowDesktopWallpaper = fc.WindowsDesktop.ShowDesktopWallpaper - cfg.WindowsDesktop.Hosts, err = utils.AddrsFromStrings(fc.WindowsDesktop.Hosts, defaults.RDPListenPort) - if err != nil { - return trace.Wrap(err) + if len(fc.WindowsDesktop.ADHosts) > 0 { + log.Warnln("hosts field is deprecated, prefer static_hosts instead") } - cfg.WindowsDesktop.NonADHosts, err = utils.AddrsFromStrings(fc.WindowsDesktop.NonADHosts, defaults.RDPListenPort) + if len(fc.WindowsDesktop.NonADHosts) > 0 { + log.Warnln("non_ad_hosts field is deprecated, prefer static_hosts instead") + } + cfg.WindowsDesktop.StaticHosts, err = staticHostsWithAddress(fc.WindowsDesktop) if err != nil { return trace.Wrap(err) } @@ -2018,6 +2020,37 @@ func applyWindowsDesktopConfig(fc *FileConfig, cfg *servicecfg.Config) error { return nil } +func staticHostsWithAddress(ws WindowsDesktopService) ([]servicecfg.WindowsHost, error) { + var hostsWithAddress []servicecfg.WindowsHost + var cfgHosts []WindowsHost + cfgHosts = append(cfgHosts, ws.StaticHosts...) + for _, host := range ws.NonADHosts { + cfgHosts = append(cfgHosts, WindowsHost{ + Address: host, + AD: false, + }) + } + for _, host := range ws.ADHosts { + cfgHosts = append(cfgHosts, WindowsHost{ + Address: host, + AD: true, + }) + } + for _, host := range cfgHosts { + addr, err := utils.ParseHostPortAddr(host.Address, defaults.RDPListenPort) + if err != nil { + return nil, trace.BadParameter("invalid addr %q", host.Address) + } + hostsWithAddress = append(hostsWithAddress, servicecfg.WindowsHost{ + Name: host.Name, + Address: *addr, + Labels: host.Labels, + AD: host.AD, + }) + } + return hostsWithAddress, nil +} + // applyTracingConfig applies file configuration for the "tracing_service" section. func applyTracingConfig(fc *FileConfig, cfg *servicecfg.Config) error { // Tracing is enabled. diff --git a/lib/config/configuration_test.go b/lib/config/configuration_test.go index ad4b73901e38e..d2417708a75c1 100644 --- a/lib/config/configuration_test.go +++ b/lib/config/configuration_test.go @@ -541,7 +541,7 @@ func TestConfigReading(t *testing.T) { ListenAddress: "tcp://windows_desktop", }, PublicAddr: apiutils.Strings([]string{"winsrv.example.com:3028", "no-port.winsrv.example.com"}), - Hosts: apiutils.Strings([]string{"win.example.com:3389", "no-port.win.example.com"}), + ADHosts: apiutils.Strings([]string{"win.example.com:3389", "no-port.win.example.com"}), }, Tracing: TracingService{ EnabledFlag: "yes", @@ -1647,7 +1647,7 @@ func makeConfigFixture() string { ListenAddress: "tcp://windows_desktop", }, PublicAddr: apiutils.Strings([]string{"winsrv.example.com:3028", "no-port.winsrv.example.com"}), - Hosts: apiutils.Strings([]string{"win.example.com:3389", "no-port.win.example.com"}), + ADHosts: apiutils.Strings([]string{"win.example.com:3389", "no-port.win.example.com"}), } // Tracing service. @@ -2128,7 +2128,7 @@ func TestWindowsDesktopService(t *testing.T) { desc: "NOK - invalid static host addr", expectError: require.Error, mutate: func(fc *FileConfig) { - fc.WindowsDesktop.Hosts = []string{"badscheme://foo:1:2"} + fc.WindowsDesktop.ADHosts = []string{"badscheme://foo:1:2"} }, }, { @@ -2160,7 +2160,7 @@ func TestWindowsDesktopService(t *testing.T) { desc: "NOK - hosts specified but ldap not specified", expectError: require.Error, mutate: func(fc *FileConfig) { - fc.WindowsDesktop.Hosts = []string{"127.0.0.1:3389"} + fc.WindowsDesktop.ADHosts = []string{"127.0.0.1:3389"} fc.WindowsDesktop.LDAP = LDAPConfig{ Addr: "", } @@ -2170,7 +2170,7 @@ func TestWindowsDesktopService(t *testing.T) { desc: "OK - hosts specified and ldap specified", expectError: require.NoError, mutate: func(fc *FileConfig) { - fc.WindowsDesktop.Hosts = []string{"127.0.0.1:3389"} + fc.WindowsDesktop.ADHosts = []string{"127.0.0.1:3389"} fc.WindowsDesktop.LDAP = LDAPConfig{ Addr: "something", } @@ -2180,7 +2180,7 @@ func TestWindowsDesktopService(t *testing.T) { desc: "OK - no hosts specified and ldap not specified", expectError: require.NoError, mutate: func(fc *FileConfig) { - fc.WindowsDesktop.Hosts = []string{} + fc.WindowsDesktop.ADHosts = []string{} fc.WindowsDesktop.LDAP = LDAPConfig{ Addr: "", } @@ -2190,7 +2190,7 @@ func TestWindowsDesktopService(t *testing.T) { desc: "OK - no hosts specified and ldap specified", expectError: require.NoError, mutate: func(fc *FileConfig) { - fc.WindowsDesktop.Hosts = []string{} + fc.WindowsDesktop.ADHosts = []string{} fc.WindowsDesktop.LDAP = LDAPConfig{ Addr: "something", } @@ -2250,7 +2250,7 @@ func TestWindowsDesktopService(t *testing.T) { mutate: func(fc *FileConfig) { fc.WindowsDesktop.EnabledFlag = "yes" fc.WindowsDesktop.ListenAddress = "0.0.0.0:3028" - fc.WindowsDesktop.Hosts = []string{"127.0.0.1:3389"} + fc.WindowsDesktop.ADHosts = []string{"127.0.0.1:3389"} fc.WindowsDesktop.LDAP = LDAPConfig{ Addr: "something", } diff --git a/lib/config/fileconf.go b/lib/config/fileconf.go index 16ec2e1465ff0..8bbb628cf2f6b 100644 --- a/lib/config/fileconf.go +++ b/lib/config/fileconf.go @@ -2202,13 +2202,20 @@ type WindowsDesktopService struct { PKIDomain string `yaml:"pki_domain"` // Discovery configures desktop discovery via LDAP. Discovery LDAPDiscoveryConfig `yaml:"discovery,omitempty"` - // Hosts is a list of static, AD-connected Windows hosts. This gives users + // ADHosts is a list of static, AD-connected Windows hosts. This gives users // a way to specify AD-connected hosts that won't be found by the filters // specified in `discovery` (or if `discovery` is omitted). - Hosts []string `yaml:"hosts,omitempty"` + // + // Deprecated: prefer StaticHosts instead. + ADHosts []string `yaml:"hosts,omitempty"` // NonADHosts is a list of standalone Windows hosts that are not // jointed to an Active Directory domain. + // + // Deprecated: prefer StaticHosts instead. NonADHosts []string `yaml:"non_ad_hosts,omitempty"` + // StaticHosts is a list of Windows hosts (both AD-connected and standalone). + // User can specify name for each host and labels specific to it. + StaticHosts []WindowsHost `yaml:"static_hosts,omitempty"` // HostLabels optionally applies labels to Windows hosts for RBAC. // A host can match multiple rules and will get a union of all // the matched labels. @@ -2217,9 +2224,13 @@ type WindowsDesktopService struct { // Check checks whether the WindowsDesktopService is valid or not func (wds *WindowsDesktopService) Check() error { - if len(wds.Hosts) > 0 && wds.LDAP.Addr == "" { - return trace.BadParameter("if hosts are specified in the windows_desktop_service, " + - "the ldap configuration for their corresponding Active Directory domain controller must also be specified") + hasAD := len(wds.ADHosts) > 0 || slices.ContainsFunc(wds.StaticHosts, func(host WindowsHost) bool { + return host.AD + }) + + if hasAD && wds.LDAP.Addr == "" { + return trace.BadParameter("if Active Directory hosts are specified in the windows_desktop_service, " + + "the ldap configuration must also be specified") } if wds.Discovery.BaseDN != "" && wds.LDAP.Addr == "" { @@ -2230,7 +2241,7 @@ func (wds *WindowsDesktopService) Check() error { return nil } -// WindowsHostLabelRule describes how a set of labels should be a applied to +// WindowsHostLabelRule describes how a set of labels should be applied to // a Windows host. type WindowsHostLabelRule struct { // Match is a regexp that is checked against the Windows host's DNS name. @@ -2240,6 +2251,19 @@ type WindowsHostLabelRule struct { Labels map[string]string `yaml:"labels"` } +// WindowsHost describes single host in configuration +type WindowsHost struct { + // Name of the host + Name string `yaml:"name"` + // Address of the host, with an optional port. + // 10.1.103.4 or 10.1.103.4:3389, for example. + Address string `yaml:"addr"` + // Labels is the set of labels to apply to this host + Labels map[string]string `yaml:"labels"` + // AD tells if host is part of Active Directory domain + AD bool `yaml:"ad"` +} + // LDAPConfig is the LDAP connection parameters. type LDAPConfig struct { // Addr is the host:port of the LDAP server (typically port 389). diff --git a/lib/service/desktop.go b/lib/service/desktop.go index eddf621997053..97fd0df33714c 100644 --- a/lib/service/desktop.go +++ b/lib/service/desktop.go @@ -222,8 +222,7 @@ func (process *TeleportProcess) initWindowsDesktopServiceRegistered(log *logrus. Heartbeat: desktop.HeartbeatConfig{ HostUUID: cfg.HostUUID, PublicAddr: publicAddr, - StaticHosts: cfg.WindowsDesktop.Hosts, - NonADHosts: cfg.WindowsDesktop.NonADHosts, + StaticHosts: cfg.WindowsDesktop.StaticHosts, OnHeartbeat: process.OnHeartbeat(teleport.ComponentWindowsDesktop), }, ShowDesktopWallpaper: cfg.WindowsDesktop.ShowDesktopWallpaper, diff --git a/lib/service/servicecfg/windows.go b/lib/service/servicecfg/windows.go index 8c01349422c4f..ba27a7e56159e 100644 --- a/lib/service/servicecfg/windows.go +++ b/lib/service/servicecfg/windows.go @@ -45,16 +45,9 @@ type WindowsDesktopConfig struct { // Discovery configures automatic desktop discovery via LDAP. Discovery LDAPDiscoveryConfig - // Hosts is an optional list of static Windows hosts to expose through this + // StaticHosts is an optional list of static Windows hosts to expose through this // service. - // Hosts is an optional list of static, AD-connected Windows hosts. This gives users - // a way to specify AD-connected hosts that won't be found by the filters - // specified in Discovery (or if Discovery is omitted). - Hosts []utils.NetAddr - - // NonADHosts is an optional list of static Windows hosts to expose through this - // service. These hosts are not part of Active Directory. - NonADHosts []utils.NetAddr + StaticHosts []WindowsHost // ConnLimiter limits the connection and request rates. ConnLimiter limiter.Config @@ -63,6 +56,18 @@ type WindowsDesktopConfig struct { Labels map[string]string } +// WindowsHost is configuration for single Windows desktop host +type WindowsHost struct { + // Name that will be used in the Teleport UI + Name string + // Address of the remote Windows host + Address utils.NetAddr + // AD is true if the host is part of the Active Directory domain + AD bool + // Labels to be applied to the host + Labels map[string]string +} + // LDAPDiscoveryConfig is LDAP discovery configuration for windows desktop discovery service. type LDAPDiscoveryConfig struct { // BaseDN is the base DN to search for desktops. diff --git a/lib/srv/desktop/windows_server.go b/lib/srv/desktop/windows_server.go index 30cb97c54d25f..eea0838ae4c3c 100644 --- a/lib/srv/desktop/windows_server.go +++ b/lib/srv/desktop/windows_server.go @@ -46,6 +46,7 @@ import ( "github.com/gravitational/teleport/lib/limiter" "github.com/gravitational/teleport/lib/modules" "github.com/gravitational/teleport/lib/reversetunnel" + "github.com/gravitational/teleport/lib/service/servicecfg" "github.com/gravitational/teleport/lib/services" "github.com/gravitational/teleport/lib/session" "github.com/gravitational/teleport/lib/srv" @@ -205,10 +206,8 @@ type HeartbeatConfig struct { PublicAddr string // OnHeartbeat is called after each heartbeat attempt. OnHeartbeat func(error) - // StaticHosts is an optional list of AD-connected static Windows hosts to register. - StaticHosts []utils.NetAddr - // NonADHosts is an optional list of static Windows hosts to register, that are not part of Active Directory. - NonADHosts []utils.NetAddr + // StaticHosts is an optional list of static Windows hosts to register + StaticHosts []servicecfg.WindowsHost } func (cfg *WindowsServiceConfig) checkAndSetDiscoveryDefaults() error { @@ -398,7 +397,7 @@ func NewWindowsService(cfg WindowsServiceConfig) (*WindowsService, error) { if err := s.startDesktopDiscovery(); err != nil { return nil, trace.Wrap(err) } - } else if len(s.cfg.Heartbeat.StaticHosts) == 0 && len(s.cfg.Heartbeat.NonADHosts) == 0 { + } else if len(s.cfg.Heartbeat.StaticHosts) == 0 { s.cfg.Log.Warnln("desktop discovery via LDAP is disabled, and no hosts are defined in the configuration; there will be no Windows desktops available to connect") } else { s.cfg.Log.Infoln("desktop discovery via LDAP is disabled, set 'base_dn' to enable") @@ -598,25 +597,21 @@ func (s *WindowsService) startServiceHeartbeat() error { // service itself is running. func (s *WindowsService) startStaticHostHeartbeats() error { for _, host := range s.cfg.Heartbeat.StaticHosts { - if err := s.startStaticHostHeartbeat(host, false); err != nil { + if err := s.startStaticHostHeartbeat(host); err != nil { return err } } - for _, host := range s.cfg.Heartbeat.NonADHosts { - if err := s.startStaticHostHeartbeat(host, true); err != nil { - return trace.Wrap(err) - } - } return nil } -func (s *WindowsService) startStaticHostHeartbeat(host utils.NetAddr, nonAD bool) error { +// startStaticHostHeartbeats spawns heartbeat goroutine for single host +func (s *WindowsService) startStaticHostHeartbeat(host servicecfg.WindowsHost) error { heartbeat, err := srv.NewHeartbeat(srv.HeartbeatConfig{ Context: s.closeCtx, Component: teleport.ComponentWindowsDesktop, Mode: srv.HeartbeatModeWindowsDesktop, Announcer: s.cfg.AccessPoint, - GetServerInfo: s.staticHostHeartbeatInfo(host, s.cfg.HostLabelsFn, nonAD), + GetServerInfo: s.staticHostHeartbeatInfo(host, s.cfg.HostLabelsFn), KeepAlivePeriod: apidefaults.ServerKeepAliveTTL(), AnnouncePeriod: apidefaults.ServerAnnounceTTL/2 + utils.RandomDuration(apidefaults.ServerAnnounceTTL/10), CheckPeriod: 5 * time.Minute, @@ -1102,20 +1097,25 @@ func (s *WindowsService) getServiceHeartbeatInfo() (types.Resource, error) { // staticHostHeartbeatInfo generates the Windows Desktop resource // for heartbeating statically defined hosts -func (s *WindowsService) staticHostHeartbeatInfo(netAddr utils.NetAddr, - getHostLabels func(string) map[string]string, nonAD bool, +func (s *WindowsService) staticHostHeartbeatInfo(host servicecfg.WindowsHost, + getHostLabels func(string) map[string]string, ) func() (types.Resource, error) { return func() (types.Resource, error) { - addr := netAddr.String() - name, err := s.nameForStaticHost(addr) - if err != nil { - return nil, trace.Wrap(err) - } - // for static hosts, we match against the host's addr, - // as the name is a randomly generated UUID + addr := host.Address.String() labels := getHostLabels(addr) + for k, v := range host.Labels { + labels[k] = v + } + name := host.Name + if name == "" { + var err error + name, err = s.nameForStaticHost(addr) + if err != nil { + return nil, trace.Wrap(err) + } + } labels[types.OriginLabel] = types.OriginConfigFile - labels[types.ADLabel] = strconv.FormatBool(!nonAD) + labels[types.ADLabel] = strconv.FormatBool(host.AD) desktop, err := types.NewWindowsDesktopV3( name, labels, @@ -1123,7 +1123,7 @@ func (s *WindowsService) staticHostHeartbeatInfo(netAddr utils.NetAddr, Addr: addr, Domain: s.cfg.Domain, HostID: s.cfg.Heartbeat.HostUUID, - NonAD: nonAD, + NonAD: !host.AD, }) if err != nil { return nil, trace.Wrap(err) From 4207b872b0be6adcdcae23858f4066766f8fab14 Mon Sep 17 00:00:00 2001 From: Grzegorz Zdunek Date: Fri, 15 Dec 2023 10:33:26 +0100 Subject: [PATCH 10/14] [v14] Prevent blinking of the loading skeleton (#35720) * Calculate random values for skeleton elements only once * Prevent long labels overflow --- .../UnifiedResources/CardsView/LoadingCard.tsx | 18 ++++++++++++++---- .../ListView/LoadingListItem.tsx | 17 ++++++++++++----- .../ListView/ResourceListItem.tsx | 4 ++++ 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/web/packages/shared/components/UnifiedResources/CardsView/LoadingCard.tsx b/web/packages/shared/components/UnifiedResources/CardsView/LoadingCard.tsx index 1c74a94596206..20c9b38c005e5 100644 --- a/web/packages/shared/components/UnifiedResources/CardsView/LoadingCard.tsx +++ b/web/packages/shared/components/UnifiedResources/CardsView/LoadingCard.tsx @@ -14,11 +14,17 @@ * limitations under the License. */ -import React from 'react'; +import React, { useState } from 'react'; import { Flex, Box } from 'design'; import { ShimmerBox } from 'design/ShimmerBox'; export function LoadingCard() { + const [randomizedSize] = useState(() => ({ + name: randomNum(100, 30), + description: randomNum(90, 40), + labels: new Array(randomNum(4, 0)), + })); + return ( {/* Checkbox */} @@ -31,17 +37,21 @@ export function LoadingCard() { {/* Action button */} {/* Description */} - + {/* Labels */} - {new Array(randomNum(4, 0)).fill(null).map((_, i) => ( + {randomizedSize.labels.fill(null).map((_, i) => ( ))} diff --git a/web/packages/shared/components/UnifiedResources/ListView/LoadingListItem.tsx b/web/packages/shared/components/UnifiedResources/ListView/LoadingListItem.tsx index e7f375d184b43..6e22249103f5f 100644 --- a/web/packages/shared/components/UnifiedResources/ListView/LoadingListItem.tsx +++ b/web/packages/shared/components/UnifiedResources/ListView/LoadingListItem.tsx @@ -14,13 +14,20 @@ * limitations under the License. */ -import React from 'react'; +import React, { useState } from 'react'; import styled from 'styled-components'; import { Box, Flex } from 'design'; import { ShimmerBox } from 'design/ShimmerBox'; export function LoadingListItem() { + const [randomizedSize] = useState(() => ({ + name: randomNum(95, 40), + description: randomNum(65, 25), + type: randomNum(80, 60), + address: randomNum(90, 50), + })); + return ( {/* Image */} @@ -39,15 +46,15 @@ export function LoadingListItem() { grid-area: name; `} > - - + + {labelText} From e810c1a518a12bac36e8636b4969934aadd8d313 Mon Sep 17 00:00:00 2001 From: Edoardo Spadolini Date: Fri, 15 Dec 2023 12:41:40 +0100 Subject: [PATCH 11/14] [v14] Use the proxy transport for `tsh proxy ssh` (#35484) * Use the proxy transport for tsh proxy ssh * Exit cleanly from TransportService/ProxySSH * Use utils.ProxyConn --- lib/srv/transport/transportv1/transport.go | 7 +- tool/tsh/common/proxy.go | 281 ++------------------- tool/tsh/common/proxy_test.go | 20 +- 3 files changed, 38 insertions(+), 270 deletions(-) diff --git a/lib/srv/transport/transportv1/transport.go b/lib/srv/transport/transportv1/transport.go index d0640264a2a5f..67551a28f0930 100644 --- a/lib/srv/transport/transportv1/transport.go +++ b/lib/srv/transport/transportv1/transport.go @@ -16,6 +16,7 @@ package transportv1 import ( "context" + "errors" "io" "net" "net/netip" @@ -311,7 +312,11 @@ func (s *Service) ProxySSH(stream transportv1pb.TransportService_ProxySSHServer) } // copy data to/from the host/user - return trace.Wrap(utils.ProxyConn(monitorCtx, hostConn, userConn)) + err = utils.ProxyConn(monitorCtx, hostConn, userConn) + if errors.Is(err, io.EOF) { + err = nil + } + return trace.Wrap(err) } // getDestinationAddress is used to get client destination for connection coming from gRPC. We don't have a way to get diff --git a/tool/tsh/common/proxy.go b/tool/tsh/common/proxy.go index c7fd0f77e0da1..5d5aabbc0af98 100644 --- a/tool/tsh/common/proxy.go +++ b/tool/tsh/common/proxy.go @@ -17,7 +17,6 @@ limitations under the License. package common import ( - "context" "crypto/tls" "crypto/x509/pkix" "fmt" @@ -33,15 +32,9 @@ import ( "unicode" "github.com/gravitational/trace" - "golang.org/x/crypto/ssh" - "golang.org/x/crypto/ssh/agent" "github.com/gravitational/teleport" - "github.com/gravitational/teleport/api/client" - "github.com/gravitational/teleport/api/client/webclient" "github.com/gravitational/teleport/api/constants" - apidefaults "github.com/gravitational/teleport/api/defaults" - tracessh "github.com/gravitational/teleport/api/observability/tracing/ssh" "github.com/gravitational/teleport/api/types" libclient "github.com/gravitational/teleport/lib/client" "github.com/gravitational/teleport/lib/client/db/dbcmd" @@ -52,89 +45,38 @@ import ( "github.com/gravitational/teleport/lib/utils" ) -// onProxyCommandSSH creates a local ssh proxy. -// In cases of TLS Routing the connection is established to the WebProxy with teleport-proxy-ssh ALPN protocol. -// and all ssh traffic is forwarded through the local ssh proxy. -// -// If proxy doesn't support TLS Routing the onProxyCommandSSH is used as ProxyCommand to remove proxy/site prefixes -// from destination node address to support multiple platform where 'cut -d' command is not provided. -// For more details please look at: Generate Windows-compatible OpenSSH config https://github.com/gravitational/teleport/pull/7848 +// onProxyCommandSSH creates a local ssh proxy, dialing a node and transferring +// data through stdin and stdout, to be used as an OpenSSH and PuTTY proxy +// command. func onProxyCommandSSH(cf *CLIConf) error { tc, err := makeClient(cf) if err != nil { return trace.Wrap(err) } - err = libclient.RetryWithRelogin(cf.Context, tc, func() error { - proxyParams, err := getSSHProxyParams(cf, tc) + return trace.Wrap(libclient.RetryWithRelogin(cf.Context, tc, func() error { + clt, err := tc.ConnectToCluster(cf.Context) if err != nil { return trace.Wrap(err) } - if len(tc.JumpHosts) > 0 { - err := setupJumpHost(cf, tc, proxyParams.clusterName) - if err != nil { - return trace.Wrap(err) - } + targetHost, targetPort, err := net.SplitHostPort(tc.Host) + if err != nil { + targetHost = tc.Host + targetPort = strconv.Itoa(tc.HostPort) } - return trace.Wrap(sshProxy(cf.Context, tc, *proxyParams)) - }) - return trace.Wrap(err) -} - -// sshProxyParams combines parameters for establishing an SSH proxy used -// as a ProxyCommand for SSH clients. -type sshProxyParams struct { - // proxyHost is the Teleport proxy host name. - proxyHost string - // proxyPort is the Teleport proxy port. - proxyPort string - // clusterName is the cluster where the SSH node resides. - clusterName string - // tlsRouting is true if the Teleport proxy has TLS routing enabled. - tlsRouting bool -} + targetHost = cleanTargetHost(targetHost, tc.WebProxyHost(), clt.ClusterName()) + target := net.JoinHostPort(targetHost, targetPort) -// getSSHProxyParams prepares parameters for establishing an SSH proxy connection. -func getSSHProxyParams(cf *CLIConf, tc *libclient.TeleportClient) (*sshProxyParams, error) { - // Without jump hosts, we will be connecting to the current Teleport client - // proxy the user is logged into. - if len(tc.JumpHosts) == 0 { - proxyHost, proxyPort := tc.SSHProxyHostPort() - if tc.TLSRoutingEnabled { - proxyHost, proxyPort = tc.WebProxyHostPort() + conn, _, err := clt.ProxyClient.DialHost(cf.Context, target, clt.ClusterName(), tc.LocalAgent().ExtendedAgent) + if err != nil { + return trace.Wrap(err) } - return &sshProxyParams{ - proxyHost: proxyHost, - proxyPort: strconv.Itoa(proxyPort), - clusterName: tc.SiteName, - tlsRouting: tc.TLSRoutingEnabled, - }, nil - } - - // When jump host is specified, we will be connecting to the jump host's - // proxy directly. Call its ping endpoint to figure out the cluster details - // such as cluster name, SSH proxy address, etc. - ping, err := webclient.Find(&webclient.Config{ - Context: cf.Context, - ProxyAddr: tc.JumpHosts[0].Addr.Addr, - Insecure: tc.InsecureSkipVerify, - }) - if err != nil { - return nil, trace.Wrap(err) - } - - sshProxyHost, sshProxyPort, err := ping.Proxy.SSHProxyHostPort() - if err != nil { - return nil, trace.Wrap(err) - } + defer conn.Close() - return &sshProxyParams{ - proxyHost: sshProxyHost, - proxyPort: sshProxyPort, - clusterName: ping.ClusterName, - tlsRouting: ping.Proxy.TLSRoutingEnabled, - }, nil + stdio := utils.CombineReadWriteCloser(io.NopCloser(os.Stdin), utils.NopWriteCloser(os.Stdout)) + return trace.Wrap(utils.ProxyConn(cf.Context, stdio, conn)) + })) } // cleanTargetHost cleans the targetHost and remote site and proxy suffixes. @@ -147,188 +89,6 @@ func cleanTargetHost(targetHost, proxyHost, siteName string) string { return targetHost } -// setupJumpHost configures the client for connecting to the jump host's proxy. -func setupJumpHost(cf *CLIConf, tc *libclient.TeleportClient, clusterName string) error { - return tc.WithoutJumpHosts(func(tc *libclient.TeleportClient) error { - // Fetch certificate for the leaf cluster. This allows users to log - // in once into the root cluster and let the proxy handle fetching - // certificates for leaf clusters automatically. - err := tc.LoadKeyForClusterWithReissue(cf.Context, clusterName) - if err != nil { - return trace.Wrap(err) - } - - // We'll be connecting directly to the leaf cluster so make sure agent - // loads correct host CA. - tc.LocalAgent().UpdateCluster(clusterName) - return nil - }) -} - -// sshProxy opens up a new SSH session connected to the Teleport Proxy's SSH proxy subsystem, -// This is the equivalent of `ssh -o 'ForwardAgent yes' -p port %r@host -s proxy:%h:%p`. -// If tls routing is enabled, the connection to RemoteProxyAddr is wrapped with TLS protocol. -func sshProxy(ctx context.Context, tc *libclient.TeleportClient, sp sshProxyParams) error { - upstreamConn, err := dialSSHProxy(ctx, tc, sp) - if err != nil { - return trace.Wrap(err) - } - defer upstreamConn.Close() - - signers, err := tc.LocalAgent().Signers() - if err != nil { - return trace.Wrap(err) - } - if len(signers) == 0 { - return trace.BadParameter("no SSH auth methods loaded, are you logged in?") - } - - remoteProxyAddr := net.JoinHostPort(sp.proxyHost, sp.proxyPort) - client, err := makeSSHClient(ctx, upstreamConn, remoteProxyAddr, &ssh.ClientConfig{ - User: tc.HostLogin, - Auth: []ssh.AuthMethod{ssh.PublicKeys(signers...)}, - HostKeyCallback: tc.HostKeyCallback, - }) - if err != nil { - if utils.IsHandshakeFailedError(err) { - // TODO(codingllama): Improve error message below for device trust. - // An alternative we have here is querying the cluster to check if device - // trust is required, a check similar to `IsMFARequired`. - log.Infof("Access denied to %v connecting to %v: %v", tc.HostLogin, remoteProxyAddr, err) - return trace.AccessDenied(`access denied to %v connecting to %v`, tc.HostLogin, remoteProxyAddr) - } - return trace.Wrap(err) - } - defer client.Close() - - sess, err := client.NewSession(ctx) - if err != nil { - return trace.Wrap(err) - } - defer sess.Close() - - err = agent.ForwardToAgent(client.Client, tc.LocalAgent()) - if err != nil { - return trace.Wrap(err) - } - err = agent.RequestAgentForwarding(sess.Session) - if err != nil { - return trace.Wrap(err) - } - - targetHost, targetPort, err := net.SplitHostPort(tc.Host) - if err != nil { - targetHost = tc.Host - targetPort = strconv.Itoa(tc.HostPort) - } - - targetHost = cleanTargetHost(targetHost, tc.WebProxyHost(), tc.SiteName) - - sshUserHost := fmt.Sprintf("%s:%s", targetHost, targetPort) - if err = sess.RequestSubsystem(ctx, proxySubsystemName(sshUserHost, sp.clusterName)); err != nil { - return trace.Wrap(err) - } - if err := proxySession(ctx, sess); err != nil { - return trace.Wrap(err) - } - return nil -} - -// dialSSHProxy opens a net.Conn to the proxy on either the ALPN or SSH -// port, this connection can then be used to initiate a SSH client. -// If the HTTPS_PROXY is configured, then this is used to open the connection -// to the proxy. -func dialSSHProxy(ctx context.Context, tc *libclient.TeleportClient, sp sshProxyParams) (net.Conn, error) { - // if sp.tlsRouting is true, remoteProxyAddr is the ALPN listener port. - // if it is false, then remoteProxyAddr is the SSH proxy port. - remoteProxyAddr := net.JoinHostPort(sp.proxyHost, sp.proxyPort) - - var dialer client.ContextDialer - switch { - case sp.tlsRouting: - pool, err := tc.LocalAgent().ClientCertPool(sp.clusterName) - if err != nil { - return nil, trace.Wrap(err) - } - - dialer = client.NewALPNDialer(client.ALPNDialerConfig{ - TLSConfig: &tls.Config{ - RootCAs: pool, - NextProtos: []string{string(alpncommon.ProtocolProxySSH)}, - InsecureSkipVerify: tc.InsecureSkipVerify, - ServerName: sp.proxyHost, - }, - ALPNConnUpgradeRequired: tc.IsALPNConnUpgradeRequiredForWebProxy(ctx, remoteProxyAddr), - }) - - default: - dialer = client.NewDialer(ctx, apidefaults.DefaultIdleTimeout, apidefaults.DefaultIOTimeout, client.WithInsecureSkipVerify(tc.InsecureSkipVerify)) - } - - conn, err := dialer.DialContext(ctx, "tcp", remoteProxyAddr) - return conn, trace.Wrap(err) -} - -func proxySubsystemName(userHost, cluster string) string { - subsystem := fmt.Sprintf("proxy:%s", userHost) - if cluster != "" { - return fmt.Sprintf("%s@%s", subsystem, cluster) - } - return fmt.Sprintf("proxy:%s", userHost) -} - -func makeSSHClient(ctx context.Context, conn net.Conn, addr string, cfg *ssh.ClientConfig) (*tracessh.Client, error) { - cc, chs, reqs, err := tracessh.NewClientConn(ctx, conn, addr, cfg) - if err != nil { - return nil, trace.Wrap(err) - } - return tracessh.NewClient(cc, chs, reqs), nil -} - -func proxySession(ctx context.Context, sess *tracessh.Session) error { - stdout, err := sess.StdoutPipe() - if err != nil { - return trace.Wrap(err) - } - stdin, err := sess.StdinPipe() - if err != nil { - return trace.Wrap(err) - } - stderr, err := sess.StderrPipe() - if err != nil { - return trace.Wrap(err) - } - - errC := make(chan error, 3) - go func() { - defer sess.Close() - _, err := io.Copy(os.Stdout, stdout) - errC <- err - }() - go func() { - defer sess.Close() - _, err := io.Copy(stdin, os.Stdin) - errC <- err - }() - go func() { - defer sess.Close() - _, err := io.Copy(os.Stderr, stderr) - errC <- err - }() - var errs []error - for i := 0; i < 3; i++ { - select { - case <-ctx.Done(): - return nil - case err := <-errC: - if err != nil && !utils.IsOKNetworkError(err) { - errs = append(errs, err) - } - } - } - return trace.NewAggregate(errs...) -} - // formatCommand formats command making it suitable for the end user to copy the command and paste it into terminal. func formatCommand(cmd *exec.Cmd) string { // environment variables @@ -438,7 +198,7 @@ func onProxyCommandDB(cf *CLIConf) error { if err != nil { return trace.Wrap(err) } - var opts = []dbcmd.ConnectCommandFunc{ + opts := []dbcmd.ConnectCommandFunc{ dbcmd.WithLocalProxy("localhost", addr.Port(0), ""), dbcmd.WithNoTLS(), dbcmd.WithLogger(log), @@ -863,7 +623,6 @@ func generateDBLocalProxyCert(key *libclient.Key, profile *libclient.ProfileStat path := profile.DatabaseLocalCAPath() if utils.FileExists(path) { return nil - } certPem, err := tlsca.GenerateSelfSignedCAWithConfig(tlsca.GenerateCAConfig{ Entity: pkix.Name{ @@ -939,7 +698,7 @@ var dbProxyAuthMultiTpl = template.Must(template.New("").Parse( ` + dbProxyConnectAd + ` Use one of the following commands to connect to the database or to the address above using other database GUI/CLI clients: {{range $item := .commands}} - * {{$item.Description}}: + * {{$item.Description}}: $ {{$item.Command}} {{end}} diff --git a/tool/tsh/common/proxy_test.go b/tool/tsh/common/proxy_test.go index eb0699f2da574..8e5943b500e57 100644 --- a/tool/tsh/common/proxy_test.go +++ b/tool/tsh/common/proxy_test.go @@ -540,11 +540,15 @@ func TestProxySSH(t *testing.T) { s.root.Config.SSH.Addr.Port(defaults.SSHServerListenPort)) runProxySSH := func(proxyRequest string, opts ...CliOption) error { - return Run(ctx, []string{ + var args []string + if testing.Verbose() { + args = append(args, "--debug") + } + return Run(ctx, append(args, "--insecure", "--proxy", s.root.Config.Proxy.WebAddr.Addr, "proxy", "ssh", proxyRequest, - }, opts...) + ), opts...) } // login to Teleport @@ -576,10 +580,10 @@ func TestProxySSH(t *testing.T) { t.Run("invalid node login", func(t *testing.T) { t.Parallel() + // it's legal to specify any username before the request invalidLoginRequest := fmt.Sprintf("%s@%s", "invalidUser", proxyRequest) err := runProxySSH(invalidLoginRequest, setHomePath(homePath), setKubeConfigPath(kubeConfigPath), setMockSSOLogin(t, s)) - require.Error(t, err) - require.True(t, trace.IsAccessDenied(err), "expected access denied, got %v", err) + require.NoError(t, err) }) }) } @@ -1203,11 +1207,11 @@ Learn more at https://goteleport.com/docs/connect-your-client/teleport-connect/# Use one of the following commands to connect to the database or to the address above using other database GUI/CLI clients: - * default: + * default: $ echo "hello world" - * alternative: + * alternative: $ echo "goodbye world" @@ -1262,11 +1266,11 @@ Learn more at https://goteleport.com/docs/connect-your-client/teleport-connect/# Use one of the following commands to connect to the database or to the address above using other database GUI/CLI clients: - * default: + * default: $ echo "hello world" - * alternative: + * alternative: $ echo "goodbye world" From 5a7e27a69519878227fc19357adaaa9b3cef1dcb Mon Sep 17 00:00:00 2001 From: Alan Parra Date: Fri, 15 Dec 2023 11:29:18 -0300 Subject: [PATCH 12/14] [v14] fix: Update TLS and SSH certificate proto comments (#35735) * fix: Update TLS and SSH certificate proto comments * Update generated protos --- api/client/proto/certs.pb.go | 4 ++-- api/proto/teleport/legacy/client/proto/certs.proto | 4 ++-- api/proto/teleport/legacy/types/types.proto | 5 +++-- api/types/types.pb.go | 5 +++-- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/api/client/proto/certs.pb.go b/api/client/proto/certs.pb.go index 1f17e92026fbb..b3a9c9a549d10 100644 --- a/api/client/proto/certs.pb.go +++ b/api/client/proto/certs.pb.go @@ -25,9 +25,9 @@ const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package // Set of certificates corresponding to a single public key. type Certs struct { - // SSH X509 cert (PEM-encoded). + // SSH certificate marshaled in the authorized key format. SSH []byte `protobuf:"bytes,1,opt,name=SSH,proto3" json:"ssh,omitempty"` - // TLS X509 cert (PEM-encoded). + // TLS X.509 certificate (PEM-encoded). TLS []byte `protobuf:"bytes,2,opt,name=TLS,proto3" json:"tls,omitempty"` // TLSCACerts is a list of TLS certificate authorities. TLSCACerts [][]byte `protobuf:"bytes,3,rep,name=TLSCACerts,proto3" json:"tls_ca_certs,omitempty"` diff --git a/api/proto/teleport/legacy/client/proto/certs.proto b/api/proto/teleport/legacy/client/proto/certs.proto index 31f99fda7c2c6..abe46945a9331 100644 --- a/api/proto/teleport/legacy/client/proto/certs.proto +++ b/api/proto/teleport/legacy/client/proto/certs.proto @@ -25,9 +25,9 @@ option (gogoproto.unmarshaler_all) = true; // Set of certificates corresponding to a single public key. message Certs { - // SSH X509 cert (PEM-encoded). + // SSH certificate marshaled in the authorized key format. bytes SSH = 1 [(gogoproto.jsontag) = "ssh,omitempty"]; - // TLS X509 cert (PEM-encoded). + // TLS X.509 certificate (PEM-encoded). bytes TLS = 2 [(gogoproto.jsontag) = "tls,omitempty"]; // TLSCACerts is a list of TLS certificate authorities. repeated bytes TLSCACerts = 3 [(gogoproto.jsontag) = "tls_ca_certs,omitempty"]; diff --git a/api/proto/teleport/legacy/types/types.proto b/api/proto/teleport/legacy/types/types.proto index bacf707c48ca5..15d7f3a34f3d8 100644 --- a/api/proto/teleport/legacy/types/types.proto +++ b/api/proto/teleport/legacy/types/types.proto @@ -3585,11 +3585,12 @@ message WebSessionV2 { message WebSessionSpecV2 { // User is the identity of the user to which the web session belongs. string User = 1 [(gogoproto.jsontag) = "user"]; - // Pub is the SSH certificate for the user. + // Pub is the SSH certificate for the user, marshaled in the authorized key + // format. bytes Pub = 2 [(gogoproto.jsontag) = "pub"]; // Priv is the SSH private key for the user. bytes Priv = 3 [(gogoproto.jsontag) = "priv,omitempty"]; - // TLSCert is the TLS certificate for the user. + // TLSCert is the X.509 certificate for the user (PEM-encoded). bytes TLSCert = 4 [(gogoproto.jsontag) = "tls_cert,omitempty"]; // BearerToken is a token that is paired with the session cookie for // authentication. It is periodically rotated so a stolen cookie itself diff --git a/api/types/types.pb.go b/api/types/types.pb.go index 3e292faeb7991..92f7c8bcada83 100644 --- a/api/types/types.pb.go +++ b/api/types/types.pb.go @@ -9118,11 +9118,12 @@ var xxx_messageInfo_WebSessionV2 proto.InternalMessageInfo type WebSessionSpecV2 struct { // User is the identity of the user to which the web session belongs. User string `protobuf:"bytes,1,opt,name=User,proto3" json:"user"` - // Pub is the SSH certificate for the user. + // Pub is the SSH certificate for the user, marshaled in the authorized key + // format. Pub []byte `protobuf:"bytes,2,opt,name=Pub,proto3" json:"pub"` // Priv is the SSH private key for the user. Priv []byte `protobuf:"bytes,3,opt,name=Priv,proto3" json:"priv,omitempty"` - // TLSCert is the TLS certificate for the user. + // TLSCert is the X.509 certificate for the user (PEM-encoded). TLSCert []byte `protobuf:"bytes,4,opt,name=TLSCert,proto3" json:"tls_cert,omitempty"` // BearerToken is a token that is paired with the session cookie for // authentication. It is periodically rotated so a stolen cookie itself From 20040a01efa9ad9369e90f190433b7669e40f325 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Andr=C3=A9=20Dinis?= Date: Fri, 15 Dec 2023 14:58:20 +0000 Subject: [PATCH 13/14] Add Discovery Fetch Events (posthog) (#35202) (#35667) * Add Discovery Fetch Events (posthog) This PR adds a new event that is emitted everytime a DiscoveryService fetches resources. It contains the Cloud and the Resource Type. * fix missing seq number for the proto message --- .../proto/go/usageevents/v1/usageevents.pb.go | 888 ++++++--- .../teleport/usageevents/v1/usageevents.proto | 13 + gen/proto/go/prehog/v1alpha/teleport.pb.go | 1762 +++++++++-------- gen/proto/js/prehog/v1alpha/teleport_pb.d.ts | 34 + gen/proto/js/prehog/v1alpha/teleport_pb.js | 236 ++- lib/usagereporter/teleport/types.go | 21 + .../teleport/usagereporter_test.go | 18 + proto/prehog/v1alpha/teleport.proto | 18 + 8 files changed, 1879 insertions(+), 1111 deletions(-) diff --git a/api/gen/proto/go/usageevents/v1/usageevents.pb.go b/api/gen/proto/go/usageevents/v1/usageevents.pb.go index b2bb6bdecc74e..8d6f3f101ba70 100644 --- a/api/gen/proto/go/usageevents/v1/usageevents.pb.go +++ b/api/gen/proto/go/usageevents/v1/usageevents.pb.go @@ -3895,6 +3895,67 @@ func (m *SecurityReportGetResultEvent) GetDays() int32 { return 0 } +// DiscoveryFetchEvent is emitted when a DiscoveryService polls for new resources of a given type +type DiscoveryFetchEvent struct { + // cloud_provider is the cloud provider used to fetch resources + // Eg, AWS, Azure, GCP, Kubernetes + CloudProvider string `protobuf:"bytes,1,opt,name=cloud_provider,json=cloudProvider,proto3" json:"cloud_provider,omitempty"` + // resource_type is the type of resource that this fetch is polling. + // It depends on the Cloud Provider (defined above). + // Eg, rds, ec2, vm, aks, gce, app + ResourceType string `protobuf:"bytes,2,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` +} + +func (m *DiscoveryFetchEvent) Reset() { *m = DiscoveryFetchEvent{} } +func (m *DiscoveryFetchEvent) String() string { return proto.CompactTextString(m) } +func (*DiscoveryFetchEvent) ProtoMessage() {} +func (*DiscoveryFetchEvent) Descriptor() ([]byte, []int) { + return fileDescriptor_94cf2ca1c69fd564, []int{58} +} +func (m *DiscoveryFetchEvent) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *DiscoveryFetchEvent) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_DiscoveryFetchEvent.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *DiscoveryFetchEvent) XXX_Merge(src proto.Message) { + xxx_messageInfo_DiscoveryFetchEvent.Merge(m, src) +} +func (m *DiscoveryFetchEvent) XXX_Size() int { + return m.Size() +} +func (m *DiscoveryFetchEvent) XXX_DiscardUnknown() { + xxx_messageInfo_DiscoveryFetchEvent.DiscardUnknown(m) +} + +var xxx_messageInfo_DiscoveryFetchEvent proto.InternalMessageInfo + +func (m *DiscoveryFetchEvent) GetCloudProvider() string { + if m != nil { + return m.CloudProvider + } + return "" +} + +func (m *DiscoveryFetchEvent) GetResourceType() string { + if m != nil { + return m.ResourceType + } + return "" +} + // UsageEventOneOf is a message that can accept a oneof of any supported // external usage event. type UsageEventOneOf struct { @@ -3952,6 +4013,7 @@ type UsageEventOneOf struct { // *UsageEventOneOf_SecurityReportGetResult // *UsageEventOneOf_AccessListReviewCreate // *UsageEventOneOf_AccessListReviewDelete + // *UsageEventOneOf_DiscoveryFetchEvent Event isUsageEventOneOf_Event `protobuf_oneof:"event"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` @@ -3962,7 +4024,7 @@ func (m *UsageEventOneOf) Reset() { *m = UsageEventOneOf{} } func (m *UsageEventOneOf) String() string { return proto.CompactTextString(m) } func (*UsageEventOneOf) ProtoMessage() {} func (*UsageEventOneOf) Descriptor() ([]byte, []int) { - return fileDescriptor_94cf2ca1c69fd564, []int{58} + return fileDescriptor_94cf2ca1c69fd564, []int{59} } func (m *UsageEventOneOf) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -4153,6 +4215,9 @@ type UsageEventOneOf_AccessListReviewCreate struct { type UsageEventOneOf_AccessListReviewDelete struct { AccessListReviewDelete *AccessListReviewDelete `protobuf:"bytes,53,opt,name=access_list_review_delete,json=accessListReviewDelete,proto3,oneof" json:"access_list_review_delete,omitempty"` } +type UsageEventOneOf_DiscoveryFetchEvent struct { + DiscoveryFetchEvent *DiscoveryFetchEvent `protobuf:"bytes,54,opt,name=discovery_fetch_event,json=discoveryFetchEvent,proto3,oneof" json:"discovery_fetch_event,omitempty"` +} func (*UsageEventOneOf_UiBannerClick) isUsageEventOneOf_Event() {} func (*UsageEventOneOf_UiOnboardCompleteGoToDashboardClick) isUsageEventOneOf_Event() {} @@ -4206,6 +4271,7 @@ func (*UsageEventOneOf_TagExecuteQuery) isUsageEventOneOf_Event() func (*UsageEventOneOf_SecurityReportGetResult) isUsageEventOneOf_Event() {} func (*UsageEventOneOf_AccessListReviewCreate) isUsageEventOneOf_Event() {} func (*UsageEventOneOf_AccessListReviewDelete) isUsageEventOneOf_Event() {} +func (*UsageEventOneOf_DiscoveryFetchEvent) isUsageEventOneOf_Event() {} func (m *UsageEventOneOf) GetEvent() isUsageEventOneOf_Event { if m != nil { @@ -4578,6 +4644,13 @@ func (m *UsageEventOneOf) GetAccessListReviewDelete() *AccessListReviewDelete { return nil } +func (m *UsageEventOneOf) GetDiscoveryFetchEvent() *DiscoveryFetchEvent { + if x, ok := m.GetEvent().(*UsageEventOneOf_DiscoveryFetchEvent); ok { + return x.DiscoveryFetchEvent + } + return nil +} + // XXX_OneofWrappers is for the internal use of the proto package. func (*UsageEventOneOf) XXX_OneofWrappers() []interface{} { return []interface{}{ @@ -4633,6 +4706,7 @@ func (*UsageEventOneOf) XXX_OneofWrappers() []interface{} { (*UsageEventOneOf_SecurityReportGetResult)(nil), (*UsageEventOneOf_AccessListReviewCreate)(nil), (*UsageEventOneOf_AccessListReviewDelete)(nil), + (*UsageEventOneOf_DiscoveryFetchEvent)(nil), } } @@ -4703,6 +4777,7 @@ func init() { proto.RegisterType((*FeatureRecommendationEvent)(nil), "teleport.usageevents.v1.FeatureRecommendationEvent") proto.RegisterType((*TAGExecuteQueryEvent)(nil), "teleport.usageevents.v1.TAGExecuteQueryEvent") proto.RegisterType((*SecurityReportGetResultEvent)(nil), "teleport.usageevents.v1.SecurityReportGetResultEvent") + proto.RegisterType((*DiscoveryFetchEvent)(nil), "teleport.usageevents.v1.DiscoveryFetchEvent") proto.RegisterType((*UsageEventOneOf)(nil), "teleport.usageevents.v1.UsageEventOneOf") } @@ -4711,290 +4786,293 @@ func init() { } var fileDescriptor_94cf2ca1c69fd564 = []byte{ - // 4525 bytes of a gzipped FileDescriptorProto + // 4576 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x7c, 0xdf, 0x6f, 0xdb, 0xc8, - 0x76, 0xbf, 0x68, 0xc7, 0x89, 0x73, 0x92, 0x38, 0xcc, 0x24, 0xb1, 0x65, 0x3b, 0x8e, 0x1d, 0xe5, - 0xb7, 0xb3, 0x6b, 0x6f, 0x9c, 0xdd, 0xbb, 0xb9, 0x77, 0xf7, 0xfb, 0xdd, 0xd2, 0x14, 0x6d, 0x71, - 0x2d, 0x89, 0xda, 0x21, 0x95, 0x5c, 0xef, 0xc5, 0xc5, 0x80, 0x16, 0xc7, 0x0e, 0x11, 0x49, 0xd4, + 0x76, 0xbf, 0x28, 0xc7, 0x89, 0x73, 0x92, 0x38, 0xcc, 0x24, 0xb1, 0x65, 0x3b, 0x8e, 0x1d, 0xe5, + 0xb7, 0xb3, 0xd7, 0xde, 0x78, 0xb3, 0xbb, 0xb9, 0x77, 0xf7, 0xfb, 0xdd, 0xd2, 0x14, 0x6d, 0x71, + 0x2d, 0x89, 0xda, 0x21, 0x95, 0x5c, 0xef, 0xc5, 0xc5, 0x80, 0x16, 0xc7, 0x0e, 0x11, 0x49, 0xf4, 0x92, 0x94, 0xbd, 0x6e, 0x51, 0xdc, 0xfe, 0x46, 0xd1, 0xbd, 0x2d, 0x5a, 0xa0, 0xe8, 0x0f, 0x5c, - 0xa0, 0x68, 0xd1, 0x16, 0xe8, 0x43, 0x81, 0x3e, 0x15, 0x17, 0x7d, 0xec, 0x5b, 0x1f, 0x0b, 0xf4, - 0xb1, 0x40, 0x51, 0xec, 0x3f, 0xd0, 0xa7, 0xf6, 0xa1, 0x68, 0xd1, 0x82, 0x33, 0xa4, 0x44, 0x49, - 0x94, 0xc8, 0xdd, 0x66, 0x71, 0x01, 0xef, 0x9b, 0x34, 0x73, 0x7e, 0x7c, 0xce, 0x99, 0x99, 0x33, - 0x3f, 0xce, 0x91, 0xe0, 0xb1, 0x4f, 0x9b, 0xb4, 0xe3, 0xb8, 0xfe, 0x66, 0xd7, 0x33, 0x8f, 0x28, - 0x3d, 0xa6, 0x6d, 0xdf, 0xdb, 0x3c, 0x7e, 0x1a, 0xff, 0xba, 0xd1, 0x71, 0x1d, 0xdf, 0x41, 0x0b, - 0x11, 0xe9, 0x46, 0xbc, 0xef, 0xf8, 0x69, 0x61, 0x1d, 0x50, 0x5d, 0xdd, 0x36, 0xdb, 0x6d, 0xea, - 0xca, 0x4d, 0xbb, 0xf1, 0x5a, 0x09, 0x7a, 0xd0, 0x0d, 0x98, 0x31, 0x9b, 0xd4, 0xf5, 0xf3, 0xc2, - 0x9a, 0xf0, 0xe8, 0x22, 0xe6, 0x5f, 0x0a, 0x3b, 0xf0, 0xa8, 0xae, 0x6a, 0xed, 0x03, 0xc7, 0x74, - 0x2d, 0xd9, 0x69, 0x75, 0x9a, 0xd4, 0xa7, 0xbb, 0x8e, 0xe1, 0x14, 0x4d, 0xef, 0x15, 0x6f, 0xec, - 0x4b, 0x58, 0x82, 0xd9, 0xae, 0x47, 0xdd, 0xb6, 0xd9, 0xa2, 0xa1, 0x90, 0xde, 0xf7, 0xc2, 0x7d, - 0xb8, 0xdb, 0x93, 0x23, 0x59, 0xd6, 0x8e, 0xed, 0x7a, 0x3e, 0xa6, 0x9e, 0xd3, 0x75, 0x1b, 0xb4, - 0x2f, 0xa2, 0xb0, 0x1e, 0x53, 0x37, 0x4c, 0x56, 0x36, 0xfd, 0x38, 0xe0, 0xc2, 0x47, 0x70, 0xa7, - 0x47, 0xab, 0x53, 0x5f, 0x76, 0xa9, 0x45, 0xdb, 0xbe, 0x6d, 0x36, 0xf5, 0xee, 0x41, 0xcb, 0xf6, - 0xd3, 0x31, 0xc5, 0x05, 0x7c, 0xd2, 0xa5, 0x9e, 0x6f, 0x3b, 0xed, 0xb6, 0x69, 0xbb, 0x34, 0xab, - 0x80, 0x5f, 0x84, 0xfb, 0x3d, 0x01, 0x98, 0x1e, 0xd9, 0x5e, 0x00, 0xf0, 0x95, 0xd9, 0x6c, 0xd2, - 0xf6, 0x51, 0x56, 0x21, 0x68, 0x11, 0x66, 0x5b, 0x87, 0x26, 0xf1, 0x4f, 0x3b, 0x34, 0x3f, 0xc5, - 0xfa, 0x2e, 0xb4, 0x0e, 0x4d, 0xe3, 0xb4, 0x43, 0xd1, 0x0a, 0x40, 0xd3, 0x39, 0xb2, 0xdb, 0xe4, - 0xb0, 0xe9, 0x9c, 0xe4, 0xa7, 0x59, 0xe7, 0x45, 0xd6, 0xb2, 0xd3, 0x74, 0x4e, 0x38, 0x7e, 0x4c, - 0x1b, 0xce, 0x31, 0x75, 0x4f, 0x65, 0xc7, 0xa2, 0x9e, 0xec, 0xb4, 0x7d, 0xbb, 0xdd, 0xa5, 0x19, - 0x07, 0xe5, 0x03, 0x58, 0x19, 0x11, 0xd0, 0x39, 0xcd, 0xc8, 0xfc, 0x21, 0xdc, 0x1e, 0x62, 0xae, - 0xb9, 0x76, 0xdb, 0xcf, 0xc8, 0x5d, 0x00, 0xb1, 0x68, 0x7b, 0x8c, 0xb9, 0x42, 0x7d, 0xd3, 0x32, - 0x7d, 0x13, 0xcd, 0xc1, 0x94, 0x6d, 0x85, 0x94, 0x53, 0xb6, 0x55, 0x30, 0x21, 0x1f, 0xd1, 0x44, - 0x73, 0xa0, 0x47, 0xab, 0xc0, 0xac, 0x1b, 0xb6, 0x31, 0x8e, 0xb9, 0xad, 0xc7, 0x1b, 0x63, 0xe6, - 0xfb, 0xc6, 0xb0, 0x10, 0xdc, 0x63, 0x2d, 0xbc, 0x06, 0x14, 0xf5, 0xea, 0x3e, 0xed, 0xe8, 0xbe, - 0xe9, 0x77, 0x3d, 0xf4, 0x11, 0x9c, 0xf7, 0xd8, 0xa7, 0x50, 0xf4, 0xc3, 0x54, 0xd1, 0x9c, 0x11, - 0x87, 0x6c, 0xc1, 0x5a, 0xa2, 0xae, 0xeb, 0xb8, 0xe1, 0x80, 0xf2, 0x2f, 0x85, 0xbf, 0x10, 0x60, - 0xbe, 0xae, 0xc6, 0x58, 0x5c, 0x9f, 0x5a, 0xdc, 0x55, 0x0a, 0xcc, 0xb6, 0x42, 0xd3, 0x98, 0xce, - 0x4b, 0x19, 0xcc, 0x89, 0x7c, 0x81, 0x7b, 0xac, 0x48, 0xee, 0x01, 0x9f, 0x62, 0x42, 0x9e, 0x64, - 0x00, 0x1e, 0x59, 0x1d, 0x81, 0x2f, 0xfc, 0xb7, 0x00, 0x6b, 0x7d, 0x98, 0x91, 0xd3, 0x74, 0xda, - 0xa4, 0x8d, 0x60, 0x85, 0xbc, 0x51, 0xc0, 0x95, 0xd8, 0x30, 0x72, 0xc8, 0x4f, 0x33, 0x0f, 0x63, - 0x5f, 0x5c, 0x24, 0x22, 0x66, 0xff, 0xf4, 0xd7, 0xb7, 0xff, 0xd7, 0xa7, 0x82, 0x20, 0x14, 0x11, - 0xa8, 0x6d, 0x9f, 0x1e, 0xb9, 0x66, 0x60, 0xb9, 0xf4, 0x52, 0xd7, 0xd4, 0xa2, 0x2c, 0x3b, 0xed, - 0x36, 0x6d, 0xf8, 0x67, 0xde, 0x0f, 0x3f, 0x9d, 0x8a, 0xcf, 0x83, 0xa2, 0xe9, 0x9b, 0x07, 0xa6, - 0x47, 0x71, 0x51, 0x57, 0xda, 0xae, 0xd3, 0x6c, 0x9e, 0x75, 0xfb, 0xd1, 0x73, 0xc8, 0x7b, 0x6c, - 0xd2, 0x53, 0x8b, 0x44, 0x92, 0x3d, 0xd2, 0x70, 0xba, 0x6d, 0x3f, 0x7f, 0x6e, 0x4d, 0x78, 0x34, - 0x8d, 0xe7, 0xa3, 0xfe, 0x08, 0x8a, 0x27, 0x07, 0xbd, 0x85, 0x8f, 0x21, 0x5f, 0x57, 0x65, 0xb3, - 0xd9, 0x34, 0x1c, 0x89, 0xad, 0x99, 0x58, 0x50, 0xdc, 0x80, 0xe9, 0x46, 0xe8, 0xab, 0xb9, 0xad, - 0x5b, 0x63, 0x71, 0xc9, 0x86, 0x84, 0x03, 0xc2, 0xc2, 0x6f, 0xcf, 0xc0, 0xad, 0xd8, 0x28, 0xd0, - 0x4e, 0xd3, 0x39, 0xd5, 0xa9, 0x7b, 0x6c, 0x37, 0xe8, 0x99, 0x1f, 0x81, 0x23, 0xb8, 0x62, 0x31, - 0x83, 0x49, 0x8b, 0xfa, 0xaf, 0x1c, 0x8b, 0xb9, 0x7d, 0x6e, 0x6b, 0x7b, 0xac, 0xac, 0x49, 0x8e, - 0xda, 0xe0, 0x4d, 0x15, 0x26, 0x09, 0x5f, 0xb6, 0x62, 0xdf, 0x90, 0x09, 0x97, 0x42, 0x45, 0x6c, - 0x1b, 0x9e, 0x61, 0x6a, 0x7e, 0xee, 0xff, 0xa2, 0x26, 0xd8, 0xbf, 0x31, 0x58, 0xbd, 0xcf, 0x05, - 0x02, 0x97, 0xe3, 0x00, 0xd0, 0x0a, 0x2c, 0x16, 0x95, 0x5a, 0x59, 0xdb, 0x27, 0x15, 0xc5, 0x28, - 0x69, 0x45, 0x52, 0xaf, 0xea, 0x35, 0x45, 0x56, 0x77, 0x54, 0xa5, 0x28, 0xe6, 0xd0, 0x3c, 0xa0, - 0xc1, 0x6e, 0xa9, 0x6e, 0x68, 0xa2, 0x80, 0xf2, 0x70, 0x63, 0xb0, 0xbd, 0x22, 0x55, 0xeb, 0x52, - 0x59, 0x9c, 0x2a, 0x50, 0x80, 0xbe, 0x6a, 0xb4, 0x0c, 0x0b, 0x21, 0x9d, 0xb1, 0x5f, 0x53, 0x86, - 0x84, 0xdf, 0x86, 0xa5, 0x78, 0xa7, 0x5a, 0xd5, 0x0d, 0xa9, 0x5c, 0x26, 0xba, 0x8c, 0xd5, 0x9a, - 0x21, 0x0a, 0x68, 0x09, 0xe6, 0xe3, 0xfd, 0x52, 0x45, 0xfa, 0x54, 0xab, 0x12, 0x45, 0xd6, 0xc5, - 0xa9, 0xc2, 0x7f, 0x09, 0xb0, 0x9a, 0x10, 0x15, 0xc2, 0xd3, 0xcf, 0x99, 0x0f, 0x8a, 0xbf, 0x3c, - 0x05, 0xf7, 0x46, 0xcd, 0x97, 0x9d, 0xf6, 0xa1, 0x7d, 0xd4, 0x75, 0x69, 0xc5, 0x28, 0xeb, 0x67, - 0xde, 0x07, 0xbf, 0x33, 0x05, 0x4f, 0xe3, 0x4b, 0xc0, 0x7b, 0xed, 0x3b, 0x9d, 0x20, 0xd0, 0x1d, - 0xd3, 0xa2, 0xed, 0xd2, 0x86, 0xef, 0xb8, 0xa7, 0x86, 0xe3, 0x34, 0x3d, 0xb5, 0xed, 0xf9, 0xe6, - 0xd9, 0xdf, 0x29, 0x0a, 0x5f, 0x4c, 0xc1, 0x46, 0x9a, 0x43, 0x7a, 0x53, 0xe4, 0xcc, 0x7b, 0xe3, - 0xaf, 0xa7, 0xe0, 0x41, 0xdf, 0x1b, 0x52, 0xd7, 0x77, 0xa2, 0xcf, 0xb1, 0x8d, 0xf2, 0xcc, 0xef, - 0x5d, 0x0f, 0xe1, 0x6a, 0xf2, 0xa1, 0x61, 0xce, 0x1d, 0x3c, 0x2c, 0xfc, 0xd2, 0x54, 0x70, 0x35, - 0x8e, 0x24, 0x29, 0xf2, 0x16, 0x5b, 0x35, 0xed, 0x6f, 0xd3, 0x89, 0xfb, 0x3f, 0x04, 0x58, 0x1c, - 0xde, 0x53, 0x15, 0x55, 0x56, 0xbe, 0x65, 0x86, 0xcb, 0x2e, 0x35, 0x7d, 0x5a, 0x75, 0xac, 0xb3, - 0x1f, 0x23, 0x7e, 0x63, 0x0a, 0x1e, 0x4f, 0xd8, 0x46, 0x55, 0xa9, 0x52, 0x73, 0x9a, 0x76, 0xe3, - 0xf4, 0xcc, 0x3b, 0xe2, 0x7f, 0x04, 0x28, 0xf4, 0x1d, 0x51, 0x73, 0xed, 0x76, 0xc3, 0xee, 0x98, - 0x4d, 0xef, 0xdb, 0xb3, 0x5d, 0xfc, 0xa7, 0x00, 0x2b, 0x7d, 0x0f, 0x18, 0xd4, 0xf3, 0xc3, 0x0b, + 0xa0, 0x68, 0xd1, 0x16, 0xe8, 0x43, 0x81, 0x3e, 0x15, 0x17, 0x7d, 0x6c, 0x9f, 0xfa, 0x58, 0xa0, + 0x8f, 0x7d, 0x29, 0xf6, 0x1f, 0xe8, 0x53, 0xfb, 0x50, 0xb4, 0x68, 0xc1, 0x19, 0x52, 0xa2, 0x24, + 0x4a, 0xe4, 0x6e, 0xb3, 0xb8, 0x80, 0xf7, 0x4d, 0x9a, 0x39, 0x3f, 0x3e, 0x73, 0xe6, 0xcc, 0x99, + 0x1f, 0xe7, 0x48, 0xf0, 0xd8, 0xa7, 0x2d, 0x7a, 0xe4, 0xb8, 0xfe, 0x46, 0xd7, 0x33, 0x0f, 0x29, + 0x3d, 0xa6, 0x1d, 0xdf, 0xdb, 0x38, 0x7e, 0x1a, 0xff, 0xba, 0x7e, 0xe4, 0x3a, 0xbe, 0x83, 0xe6, + 0x23, 0xd2, 0xf5, 0x78, 0xdf, 0xf1, 0xd3, 0xe2, 0x1a, 0xa0, 0x86, 0xba, 0x65, 0x76, 0x3a, 0xd4, + 0x95, 0x5b, 0x76, 0xf3, 0xb5, 0x12, 0xf4, 0xa0, 0x1b, 0x30, 0x6d, 0xb6, 0xa8, 0xeb, 0x17, 0x84, + 0x55, 0xe1, 0xd1, 0x45, 0xcc, 0xbf, 0x14, 0xb7, 0xe1, 0x51, 0x43, 0xd5, 0x3a, 0xfb, 0x8e, 0xe9, + 0x5a, 0xb2, 0xd3, 0x3e, 0x6a, 0x51, 0x9f, 0xee, 0x38, 0x86, 0x53, 0x32, 0xbd, 0x57, 0xbc, 0xb1, + 0x2f, 0x61, 0x11, 0x66, 0xba, 0x1e, 0x75, 0x3b, 0x66, 0x9b, 0x86, 0x42, 0x7a, 0xdf, 0x8b, 0xf7, + 0xe1, 0x6e, 0x4f, 0x8e, 0x64, 0x59, 0xdb, 0xb6, 0xeb, 0xf9, 0x98, 0x7a, 0x4e, 0xd7, 0x6d, 0xd2, + 0xbe, 0x88, 0xe2, 0x5a, 0x4c, 0xdd, 0x30, 0x59, 0xc5, 0xf4, 0xe3, 0x80, 0x8b, 0x1f, 0xc1, 0x9d, + 0x1e, 0xad, 0x4e, 0x7d, 0xd9, 0xa5, 0x16, 0xed, 0xf8, 0xb6, 0xd9, 0xd2, 0xbb, 0xfb, 0x6d, 0xdb, + 0x4f, 0xc7, 0x14, 0x17, 0xf0, 0x49, 0x97, 0x7a, 0xbe, 0xed, 0x74, 0x3a, 0xa6, 0xed, 0xd2, 0xac, + 0x02, 0x7e, 0x11, 0xee, 0xf7, 0x04, 0x60, 0x7a, 0x68, 0x7b, 0x01, 0xc0, 0x57, 0x66, 0xab, 0x45, + 0x3b, 0x87, 0x59, 0x85, 0xa0, 0x05, 0x98, 0x69, 0x1f, 0x98, 0xc4, 0x3f, 0x3d, 0xa2, 0x85, 0x3c, + 0xeb, 0xbb, 0xd0, 0x3e, 0x30, 0x8d, 0xd3, 0x23, 0x8a, 0x96, 0x01, 0x5a, 0xce, 0xa1, 0xdd, 0x21, + 0x07, 0x2d, 0xe7, 0xa4, 0x30, 0xc5, 0x3a, 0x2f, 0xb2, 0x96, 0xed, 0x96, 0x73, 0xc2, 0xf1, 0x63, + 0xda, 0x74, 0x8e, 0xa9, 0x7b, 0x2a, 0x3b, 0x16, 0xf5, 0x64, 0xa7, 0xe3, 0xdb, 0x9d, 0x2e, 0xcd, + 0x38, 0x29, 0x1f, 0xc0, 0xf2, 0x88, 0x80, 0xa3, 0xd3, 0x8c, 0xcc, 0x1f, 0xc2, 0xed, 0x21, 0xe6, + 0xba, 0x6b, 0x77, 0xfc, 0x8c, 0xdc, 0x45, 0x10, 0x4b, 0xb6, 0xc7, 0x98, 0xab, 0xd4, 0x37, 0x2d, + 0xd3, 0x37, 0xd1, 0x2c, 0xe4, 0x6d, 0x2b, 0xa4, 0xcc, 0xdb, 0x56, 0xd1, 0x84, 0x42, 0x44, 0x13, + 0xf9, 0x40, 0x8f, 0x56, 0x81, 0x19, 0x37, 0x6c, 0x63, 0x1c, 0xb3, 0x9b, 0x8f, 0xd7, 0xc7, 0xf8, + 0xfb, 0xfa, 0xb0, 0x10, 0xdc, 0x63, 0x2d, 0xbe, 0x06, 0x14, 0xf5, 0xea, 0x3e, 0x3d, 0xd2, 0x7d, + 0xd3, 0xef, 0x7a, 0xe8, 0x23, 0x38, 0xef, 0xb1, 0x4f, 0xa1, 0xe8, 0x87, 0xa9, 0xa2, 0x39, 0x23, + 0x0e, 0xd9, 0x82, 0xb5, 0x44, 0x5d, 0xd7, 0x71, 0xc3, 0x09, 0xe5, 0x5f, 0x8a, 0x7f, 0x21, 0xc0, + 0x5c, 0x43, 0x8d, 0xb1, 0xb8, 0x3e, 0xb5, 0xb8, 0xa9, 0x14, 0x98, 0x69, 0x87, 0x43, 0x63, 0x3a, + 0x2f, 0x65, 0x18, 0x4e, 0x64, 0x0b, 0xdc, 0x63, 0x45, 0x72, 0x0f, 0x78, 0x9e, 0x09, 0x79, 0x92, + 0x01, 0x78, 0x34, 0xea, 0x08, 0x7c, 0xf1, 0xbf, 0x05, 0x58, 0xed, 0xc3, 0x8c, 0x8c, 0xa6, 0xd3, + 0x16, 0x6d, 0x06, 0x2b, 0xe4, 0x8d, 0x02, 0xae, 0xc6, 0xa6, 0x91, 0x43, 0x7e, 0x9a, 0x79, 0x1a, + 0xfb, 0xe2, 0x22, 0x11, 0xb1, 0xf1, 0x4f, 0x7d, 0xfd, 0xf1, 0xff, 0x7a, 0x3e, 0x08, 0x42, 0x11, + 0x81, 0xda, 0xf1, 0xe9, 0xa1, 0x6b, 0x06, 0x23, 0x97, 0x5e, 0xea, 0x9a, 0x5a, 0x92, 0x65, 0xa7, + 0xd3, 0xa1, 0x4d, 0xff, 0xcc, 0xdb, 0xe1, 0xa7, 0xf9, 0xb8, 0x1f, 0x94, 0x4c, 0xdf, 0xdc, 0x37, + 0x3d, 0x8a, 0x4b, 0xba, 0xd2, 0x71, 0x9d, 0x56, 0xeb, 0xac, 0x8f, 0x1f, 0x3d, 0x87, 0x82, 0xc7, + 0x9c, 0x9e, 0x5a, 0x24, 0x92, 0xec, 0x91, 0xa6, 0xd3, 0xed, 0xf8, 0x85, 0x73, 0xab, 0xc2, 0xa3, + 0x29, 0x3c, 0x17, 0xf5, 0x47, 0x50, 0x3c, 0x39, 0xe8, 0x2d, 0x7e, 0x0c, 0x85, 0x86, 0x2a, 0x9b, + 0xad, 0x96, 0xe1, 0x48, 0x6c, 0xcd, 0xc4, 0x82, 0xe2, 0x3a, 0x4c, 0x35, 0x43, 0x5b, 0xcd, 0x6e, + 0xde, 0x1a, 0x8b, 0x4b, 0x36, 0x24, 0x1c, 0x10, 0x16, 0x7f, 0x7b, 0x1a, 0x6e, 0xc5, 0x66, 0x81, + 0x1e, 0xb5, 0x9c, 0x53, 0x9d, 0xba, 0xc7, 0x76, 0x93, 0x9e, 0xf9, 0x19, 0x38, 0x84, 0x2b, 0x16, + 0x1b, 0x30, 0x69, 0x53, 0xff, 0x95, 0x63, 0x31, 0xb3, 0xcf, 0x6e, 0x6e, 0x8d, 0x95, 0x35, 0xc9, + 0x50, 0xeb, 0xbc, 0xa9, 0xca, 0x24, 0xe1, 0xcb, 0x56, 0xec, 0x1b, 0x32, 0xe1, 0x52, 0xa8, 0x88, + 0x6d, 0xc3, 0xd3, 0x4c, 0xcd, 0xcf, 0xfd, 0x5f, 0xd4, 0x04, 0xfb, 0x37, 0x06, 0xab, 0xf7, 0xb9, + 0x48, 0xe0, 0x72, 0x1c, 0x00, 0x5a, 0x86, 0x85, 0x92, 0x52, 0xaf, 0x68, 0x7b, 0xa4, 0xaa, 0x18, + 0x65, 0xad, 0x44, 0x1a, 0x35, 0xbd, 0xae, 0xc8, 0xea, 0xb6, 0xaa, 0x94, 0xc4, 0x1c, 0x9a, 0x03, + 0x34, 0xd8, 0x2d, 0x35, 0x0c, 0x4d, 0x14, 0x50, 0x01, 0x6e, 0x0c, 0xb6, 0x57, 0xa5, 0x5a, 0x43, + 0xaa, 0x88, 0xf9, 0x22, 0x05, 0xe8, 0xab, 0x46, 0x4b, 0x30, 0x1f, 0xd2, 0x19, 0x7b, 0x75, 0x65, + 0x48, 0xf8, 0x6d, 0x58, 0x8c, 0x77, 0xaa, 0x35, 0xdd, 0x90, 0x2a, 0x15, 0xa2, 0xcb, 0x58, 0xad, + 0x1b, 0xa2, 0x80, 0x16, 0x61, 0x2e, 0xde, 0x2f, 0x55, 0xa5, 0x4f, 0xb5, 0x1a, 0x51, 0x64, 0x5d, + 0xcc, 0x17, 0xff, 0x4b, 0x80, 0x95, 0x84, 0xa8, 0x10, 0x9e, 0x7e, 0xce, 0x7c, 0x50, 0xfc, 0xe5, + 0x3c, 0xdc, 0x1b, 0x1d, 0xbe, 0xec, 0x74, 0x0e, 0xec, 0xc3, 0xae, 0x4b, 0xab, 0x46, 0x45, 0x3f, + 0xf3, 0x36, 0xf8, 0x9d, 0x3c, 0x3c, 0x8d, 0x2f, 0x01, 0xef, 0xb5, 0xef, 0x1c, 0x05, 0x81, 0xee, + 0x98, 0x96, 0x6c, 0x97, 0x36, 0x7d, 0xc7, 0x3d, 0x35, 0x1c, 0xa7, 0xe5, 0xa9, 0x1d, 0xcf, 0x37, + 0xcf, 0xfe, 0x4e, 0x51, 0xfc, 0x22, 0x0f, 0xeb, 0x69, 0x06, 0xe9, 0xb9, 0xc8, 0x99, 0xb7, 0xc6, + 0x5f, 0xe7, 0xe1, 0x41, 0xdf, 0x1a, 0x52, 0xd7, 0x77, 0xa2, 0xcf, 0xb1, 0x8d, 0xf2, 0xcc, 0xef, + 0x5d, 0x0f, 0xe1, 0x6a, 0xf2, 0xa1, 0x61, 0xd6, 0x1d, 0x3c, 0x2c, 0xfc, 0x52, 0x3e, 0xb8, 0x1a, + 0x47, 0x92, 0x14, 0x79, 0x93, 0xad, 0x9a, 0xce, 0xb7, 0xe9, 0xc4, 0xfd, 0x1f, 0x02, 0x2c, 0x0c, + 0xef, 0xa9, 0x8a, 0x2a, 0x2b, 0xdf, 0xb2, 0x81, 0xcb, 0x2e, 0x35, 0x7d, 0x5a, 0x73, 0xac, 0xb3, + 0x1f, 0x23, 0x7e, 0x23, 0x0f, 0x8f, 0x27, 0x6c, 0xa3, 0xaa, 0x54, 0xad, 0x3b, 0x2d, 0xbb, 0x79, + 0x7a, 0xe6, 0x0d, 0xf1, 0x3f, 0x02, 0x14, 0xfb, 0x86, 0xa8, 0xbb, 0x76, 0xa7, 0x69, 0x1f, 0x99, + 0x2d, 0xef, 0xdb, 0xb3, 0x5d, 0xfc, 0xa7, 0x00, 0xcb, 0x7d, 0x0b, 0x18, 0xd4, 0xf3, 0xc3, 0x0b, 0xf6, 0xb7, 0x21, 0xf2, 0xfd, 0xbb, 0x10, 0x5c, 0x15, 0x7b, 0x01, 0x20, 0x7c, 0x60, 0xb5, 0xce, - 0xbc, 0xdd, 0xcb, 0x41, 0xdc, 0x0b, 0xe3, 0x1d, 0x3d, 0xc1, 0x4e, 0x33, 0xfe, 0x08, 0xbc, 0x1a, - 0x4c, 0x88, 0x81, 0x4e, 0xdd, 0x3c, 0x8e, 0x13, 0xdc, 0x09, 0xae, 0x20, 0x83, 0xdc, 0xc1, 0x86, - 0xd9, 0x8c, 0x91, 0xbc, 0x05, 0xeb, 0x43, 0x24, 0x2f, 0x6c, 0x7a, 0x52, 0x74, 0x1a, 0xdd, 0x16, - 0x6d, 0xfb, 0xe6, 0xe0, 0xa5, 0xbc, 0xf0, 0xb7, 0x02, 0xdc, 0x94, 0x3c, 0xcf, 0x0e, 0xe6, 0x1e, - 0x1b, 0x82, 0xde, 0xdc, 0x7b, 0x08, 0x57, 0x1b, 0x4e, 0xfb, 0x98, 0xba, 0x1e, 0xe3, 0x21, 0xbd, - 0x07, 0xca, 0xb9, 0x78, 0xb3, 0x6a, 0xa1, 0x3b, 0x70, 0xd9, 0x77, 0x7c, 0xb3, 0x49, 0x7c, 0xe7, - 0x35, 0x6d, 0xf3, 0x07, 0xb8, 0x69, 0x7c, 0x89, 0xb5, 0x19, 0xac, 0x09, 0xdd, 0x85, 0x2b, 0x1d, - 0xd7, 0x69, 0x75, 0xfc, 0x88, 0x66, 0x9a, 0xd1, 0x5c, 0xe6, 0x8d, 0x21, 0xd1, 0x13, 0xb8, 0xd6, - 0xe8, 0x61, 0x88, 0x08, 0xf9, 0xc9, 0x41, 0xec, 0x77, 0x70, 0xe2, 0xc2, 0x3f, 0x09, 0x70, 0x83, - 0xe3, 0x56, 0x3e, 0xa7, 0x8d, 0xee, 0xd7, 0x80, 0xbd, 0x02, 0xd0, 0x76, 0x2c, 0x1a, 0x9e, 0x50, - 0x38, 0xe8, 0x8b, 0x41, 0x0b, 0x3b, 0x9c, 0x8c, 0x58, 0x35, 0x9d, 0xc1, 0xaa, 0x73, 0x59, 0xad, - 0x9a, 0x19, 0x63, 0xd5, 0x73, 0x58, 0xe2, 0x46, 0x55, 0xe9, 0x89, 0x1c, 0x83, 0xdb, 0x7b, 0x55, - 0x6e, 0x98, 0x3e, 0x3d, 0x72, 0xdc, 0xd3, 0xe8, 0x55, 0x39, 0xfa, 0x5e, 0xf8, 0x1b, 0x01, 0xae, - 0x73, 0x56, 0xa9, 0xd1, 0xa0, 0x9e, 0x87, 0xe9, 0x67, 0x5d, 0xea, 0xf9, 0x01, 0xc6, 0x68, 0xfe, - 0xf2, 0x1b, 0x3e, 0x67, 0xbc, 0x1c, 0x35, 0xb2, 0x2b, 0xf3, 0xcf, 0x64, 0x04, 0x7f, 0x22, 0xc0, - 0xe5, 0x08, 0x71, 0xd0, 0x8c, 0xe6, 0xe1, 0xbc, 0xc9, 0x3e, 0x85, 0x18, 0xc3, 0x6f, 0x3f, 0x1b, - 0x74, 0xf7, 0x00, 0x71, 0x47, 0x96, 0x6d, 0xcf, 0x1f, 0xfb, 0x4e, 0xff, 0x03, 0x10, 0xfb, 0x54, - 0x7c, 0xcd, 0xa1, 0xdd, 0x91, 0xd8, 0x35, 0x3e, 0x4e, 0x8c, 0xaa, 0xe8, 0x47, 0xaf, 0x41, 0xe1, - 0xf5, 0x8e, 0xf5, 0xcd, 0x09, 0x2f, 0xd2, 0x20, 0xf6, 0xbe, 0x39, 0xe1, 0x26, 0xcc, 0xc7, 0xfb, - 0x5b, 0x07, 0xd1, 0x09, 0xef, 0x1b, 0x55, 0xf1, 0xa6, 0x5d, 0x94, 0xa0, 0xe2, 0x4d, 0x3b, 0xea, - 0xe7, 0xe3, 0x2a, 0x76, 0x5d, 0xb3, 0xed, 0x7b, 0x86, 0x53, 0xf7, 0xa8, 0x8b, 0x36, 0xe0, 0x3a, - 0x0b, 0x4c, 0xc4, 0x75, 0x9a, 0xd4, 0x23, 0x47, 0x41, 0x1f, 0xe5, 0x53, 0x6f, 0x06, 0x5f, 0x63, - 0x5d, 0x41, 0x68, 0xf7, 0x76, 0x79, 0x07, 0x7a, 0x07, 0x6e, 0x70, 0x7a, 0xdf, 0x35, 0x6d, 0xbf, - 0xcf, 0x30, 0xc5, 0x18, 0x10, 0xeb, 0x33, 0x58, 0x57, 0xc8, 0x51, 0xf8, 0x83, 0xe9, 0xb8, 0x72, - 0x4c, 0x8f, 0x6d, 0x7a, 0xf2, 0x86, 0x47, 0x09, 0x3d, 0x87, 0x45, 0xcb, 0x3c, 0xf5, 0x48, 0xc7, - 0xf4, 0x7c, 0xd2, 0xa6, 0x9f, 0xfb, 0xc4, 0xec, 0x5a, 0xb6, 0x4f, 0x82, 0x81, 0x0a, 0xa1, 0xdd, - 0x0c, 0x08, 0x6a, 0x66, 0x10, 0xf2, 0x3e, 0xf7, 0xa5, 0xa0, 0xb7, 0x18, 0x40, 0xd8, 0x81, 0xd5, - 0x16, 0x73, 0xb9, 0xf7, 0xca, 0xee, 0x10, 0x97, 0x7e, 0xd6, 0xb5, 0x5d, 0x1a, 0x6c, 0x60, 0x1e, - 0x69, 0xbc, 0x32, 0xdb, 0x47, 0xd4, 0x62, 0x6b, 0x7c, 0x16, 0xaf, 0xf4, 0xc9, 0x70, 0x8c, 0x4a, - 0xe6, 0x44, 0xe8, 0x39, 0xe4, 0x5d, 0x66, 0x1a, 0x39, 0x0c, 0x84, 0xd0, 0x76, 0xe3, 0xb4, 0x27, - 0xe0, 0x1c, 0x13, 0x30, 0xcf, 0xfb, 0x77, 0xa2, 0xee, 0x88, 0xf3, 0x43, 0x58, 0x0e, 0x39, 0x2d, - 0xf3, 0x94, 0x38, 0x87, 0xa4, 0xe5, 0xb4, 0xfd, 0x57, 0x3d, 0xe6, 0x19, 0xc6, 0xbc, 0xc0, 0x49, - 0x8a, 0xe6, 0xa9, 0x76, 0x58, 0x09, 0xfa, 0x23, 0xee, 0xef, 0xc2, 0x62, 0xbb, 0x1b, 0x00, 0x0b, - 0x38, 0x5d, 0xda, 0x72, 0x8e, 0xa9, 0x45, 0x42, 0xa8, 0xf9, 0xf3, 0xcc, 0xf2, 0x79, 0x4e, 0xa0, - 0x1d, 0x62, 0xde, 0xcd, 0xa7, 0x98, 0x57, 0xf8, 0x7d, 0x61, 0x74, 0x60, 0xde, 0xf0, 0xc4, 0x43, - 0x4f, 0xe1, 0xa6, 0xc9, 0xfa, 0x49, 0xd3, 0xf6, 0x7c, 0x12, 0x1a, 0x6a, 0x5b, 0x61, 0xda, 0x0e, - 0x99, 0x43, 0xfa, 0x55, 0xab, 0xf0, 0x63, 0x01, 0x16, 0x63, 0x29, 0x21, 0x9e, 0x0a, 0x19, 0x17, - 0x19, 0xd1, 0x36, 0x9c, 0x7b, 0x6d, 0xb7, 0xb9, 0xbc, 0xb9, 0xad, 0x8d, 0xb1, 0x28, 0x47, 0x24, - 0xee, 0xd9, 0x6d, 0x0b, 0x33, 0x5e, 0xb4, 0x0c, 0x17, 0xbb, 0x1e, 0x75, 0x09, 0x4b, 0xa3, 0x4e, - 0xf7, 0xd3, 0xa8, 0x55, 0xb3, 0x45, 0x0b, 0x4e, 0x70, 0x54, 0x1a, 0xe1, 0x66, 0xa9, 0x45, 0xbe, - 0x5b, 0x56, 0x47, 0x7c, 0xb5, 0x95, 0x1d, 0x45, 0xc2, 0x5a, 0x75, 0x61, 0x2d, 0x41, 0x61, 0x74, - 0x70, 0xfd, 0x66, 0x74, 0xfe, 0xb3, 0x00, 0xd7, 0x7b, 0xb5, 0x02, 0x6c, 0x6d, 0x72, 0x3d, 0x99, - 0x76, 0xf5, 0xd8, 0x3b, 0x0c, 0x71, 0x5c, 0xfb, 0xc8, 0x6e, 0x87, 0xa3, 0xdb, 0x7b, 0x87, 0xd1, - 0x58, 0x2b, 0xba, 0x0f, 0x73, 0x8d, 0xa6, 0xd3, 0xb5, 0x48, 0xc7, 0x75, 0x8e, 0x6d, 0x8b, 0xba, - 0xa1, 0xb3, 0xaf, 0xb0, 0xd6, 0x5a, 0xd8, 0x88, 0x34, 0x98, 0xb5, 0xc2, 0xeb, 0x2a, 0x5b, 0x3a, - 0x97, 0xb6, 0x9e, 0xa5, 0x1e, 0x80, 0xa9, 0x15, 0xdd, 0x70, 0xfb, 0xd6, 0x45, 0x42, 0x0a, 0x2f, - 0x60, 0x69, 0x3c, 0x1d, 0x5a, 0x80, 0x0b, 0xd6, 0x41, 0xdc, 0xba, 0xf3, 0xd6, 0x01, 0xb3, 0x6b, - 0x15, 0x2e, 0x59, 0x07, 0x84, 0x55, 0x7a, 0x34, 0x9c, 0x66, 0x68, 0x13, 0x58, 0x07, 0xb5, 0xb0, - 0xa5, 0xf0, 0x6f, 0x02, 0x2c, 0xed, 0x50, 0xd3, 0xef, 0xba, 0x14, 0xd3, 0x86, 0xd3, 0x6a, 0xd1, - 0xb6, 0x15, 0x3b, 0x46, 0x0d, 0x4c, 0x2b, 0x61, 0x70, 0x5a, 0xa1, 0xef, 0xc1, 0x85, 0x43, 0xce, - 0x1a, 0x4e, 0xdd, 0xb5, 0xb1, 0x36, 0x46, 0x2a, 0x22, 0x06, 0xf4, 0x39, 0xac, 0x84, 0x1f, 0x89, - 0x3b, 0xa0, 0x97, 0xc4, 0xae, 0x0d, 0x73, 0x5b, 0xef, 0xa6, 0x4a, 0x1c, 0x60, 0x0e, 0xef, 0x0f, - 0xcb, 0x87, 0xe3, 0x3b, 0x0b, 0x27, 0x70, 0xc3, 0x90, 0x76, 0xf9, 0x49, 0x98, 0x7e, 0xd2, 0xa5, - 0x6e, 0xf8, 0x7c, 0xb0, 0x0a, 0xfc, 0x98, 0x44, 0x82, 0x73, 0x2d, 0xcf, 0xe9, 0x4f, 0x63, 0x60, - 0x4d, 0xd5, 0xa0, 0xa5, 0x4f, 0x40, 0xad, 0x23, 0x1a, 0x1d, 0xad, 0x38, 0x81, 0x12, 0xb4, 0x04, - 0xa7, 0x64, 0xdb, 0x23, 0x5e, 0x97, 0xc5, 0x83, 0x30, 0xe4, 0x5e, 0xb4, 0x3d, 0x9d, 0x37, 0x14, - 0x76, 0xe0, 0x96, 0x4e, 0x1b, 0x5d, 0xd7, 0xf6, 0x4f, 0x31, 0x33, 0x69, 0x97, 0xfa, 0x98, 0x7a, - 0xdd, 0x66, 0xb8, 0x08, 0x11, 0x9c, 0x8b, 0xb9, 0x99, 0x7d, 0x0e, 0xda, 0x82, 0x98, 0x1f, 0xc6, - 0x7f, 0xf6, 0xb9, 0xf0, 0x2f, 0xcf, 0xe0, 0x6a, 0x3d, 0x70, 0x06, 0x63, 0xd3, 0xda, 0x54, 0x3b, - 0x44, 0x75, 0xb8, 0xda, 0xb5, 0xc9, 0x01, 0xab, 0xd6, 0x21, 0x8d, 0xe0, 0xca, 0x92, 0x1a, 0xf3, - 0x46, 0x8b, 0x7b, 0x4a, 0x39, 0x7c, 0xa5, 0x6b, 0xc7, 0x5a, 0xd1, 0x4f, 0x04, 0x78, 0xdc, 0xb5, - 0x89, 0xc3, 0x8b, 0x57, 0x48, 0x78, 0xf2, 0xa3, 0xe4, 0xc8, 0x21, 0xbe, 0x43, 0xac, 0xa8, 0xba, - 0x27, 0xd4, 0xc8, 0x6f, 0x7a, 0xd2, 0x04, 0x8d, 0xd9, 0x4a, 0x84, 0x4a, 0x39, 0x7c, 0xb7, 0x6b, - 0xa7, 0xd2, 0xa2, 0x2f, 0x04, 0xb8, 0x1b, 0x43, 0x67, 0x5a, 0x16, 0x39, 0xb4, 0x5d, 0x16, 0xa2, - 0xc3, 0xa5, 0xcc, 0x71, 0xf1, 0x05, 0xf8, 0x61, 0x3a, 0xae, 0xf1, 0x25, 0x47, 0xa5, 0x1c, 0xbe, - 0xdd, 0x83, 0x94, 0x48, 0x36, 0xec, 0xab, 0x04, 0x34, 0x4d, 0xd3, 0xef, 0x8d, 0xce, 0x4c, 0x56, - 0x5f, 0xa5, 0xd4, 0x37, 0x0d, 0xf8, 0x6a, 0x3c, 0x2d, 0xfa, 0x35, 0x01, 0xd6, 0x62, 0xe8, 0x3c, - 0xea, 0x93, 0x46, 0xaf, 0x14, 0x8a, 0x78, 0xac, 0x0a, 0x89, 0xed, 0xb5, 0x97, 0xb6, 0xbe, 0x97, - 0x0e, 0x6a, 0x5c, 0x21, 0x55, 0x29, 0x87, 0x6f, 0xf5, 0xd0, 0x24, 0x10, 0xa1, 0xdf, 0x15, 0xe0, - 0x5e, 0x0c, 0x86, 0x1b, 0x26, 0x04, 0x83, 0x93, 0x02, 0xaf, 0x87, 0x8a, 0xa0, 0x5c, 0x60, 0x50, - 0xfe, 0x7f, 0x3a, 0x94, 0x49, 0x15, 0x55, 0xa5, 0x1c, 0x5e, 0xeb, 0xc1, 0x19, 0x43, 0x18, 0x79, - 0xc6, 0x0d, 0x6b, 0x94, 0x48, 0x23, 0x58, 0xec, 0xa4, 0x11, 0xd6, 0x48, 0x85, 0xc3, 0x35, 0x9b, - 0xea, 0x99, 0x94, 0x0a, 0x2b, 0xee, 0x99, 0xf1, 0x44, 0xe8, 0x73, 0xb8, 0x95, 0x84, 0xa2, 0x73, - 0x1a, 0x22, 0xb8, 0xc8, 0x10, 0x7c, 0x27, 0x3b, 0x82, 0x78, 0x89, 0x56, 0x29, 0x87, 0xf3, 0x23, - 0xda, 0x43, 0x02, 0xf4, 0x0b, 0xb0, 0x32, 0xaa, 0xb9, 0xe3, 0xda, 0x6d, 0x3f, 0x54, 0x0d, 0x4c, - 0xf5, 0xfb, 0x59, 0x55, 0x0f, 0x15, 0x78, 0x95, 0x72, 0x78, 0x71, 0x48, 0x77, 0x9f, 0x02, 0x35, - 0x61, 0xb1, 0x6b, 0x13, 0x2b, 0xdc, 0xda, 0x82, 0xe0, 0xef, 0xfa, 0xd4, 0x22, 0x4c, 0x78, 0xfe, - 0x12, 0x53, 0xbc, 0x99, 0x21, 0xc3, 0x1e, 0x2f, 0x93, 0x2a, 0xe5, 0xf0, 0x7c, 0xd7, 0x4e, 0x2c, - 0xa0, 0xfa, 0x82, 0x4f, 0xbf, 0x9e, 0xba, 0xde, 0xd2, 0xf4, 0xa2, 0x2c, 0x4a, 0xa8, 0xf9, 0x32, - 0xd3, 0xfc, 0xdd, 0x0c, 0x9a, 0x93, 0x2b, 0x9f, 0xf8, 0xcc, 0x4b, 0xa9, 0x8e, 0xfa, 0x11, 0x9b, - 0x78, 0x3d, 0x30, 0x61, 0x6d, 0x81, 0xc7, 0xcb, 0x04, 0x42, 0x20, 0x57, 0x18, 0x90, 0xf7, 0xbe, - 0x56, 0x91, 0x01, 0x9f, 0x73, 0x13, 0x8a, 0x42, 0x7e, 0x93, 0x07, 0xd0, 0x3e, 0x82, 0xf0, 0x5c, - 0xd1, 0x5f, 0x97, 0x1c, 0xc4, 0x1c, 0x03, 0xf1, 0x3c, 0x0b, 0x88, 0xa4, 0x4c, 0x7f, 0x29, 0x87, - 0x57, 0x63, 0x38, 0x12, 0x8b, 0x01, 0xfe, 0x88, 0x47, 0xcf, 0x51, 0x28, 0x8d, 0xe8, 0x89, 0x9b, - 0xb4, 0xfc, 0xa6, 0x17, 0x02, 0xba, 0xca, 0x00, 0xfd, 0xbf, 0xaf, 0x00, 0x68, 0x34, 0xf7, 0x5e, - 0xca, 0xe1, 0x7b, 0xa3, 0xa8, 0xfa, 0x74, 0x7e, 0x33, 0x4c, 0x3f, 0xfe, 0xbd, 0x00, 0xcf, 0x07, - 0xc7, 0x89, 0x65, 0x6e, 0x89, 0xc9, 0x52, 0xb7, 0xc4, 0x8a, 0x72, 0xb7, 0xc4, 0x77, 0x9c, 0xa6, - 0x47, 0x6c, 0x9e, 0xce, 0x0e, 0x91, 0x8a, 0x0c, 0xe9, 0xc7, 0x99, 0xc6, 0x2f, 0x53, 0x86, 0xbc, - 0x94, 0xc3, 0x4f, 0xe3, 0x83, 0x9a, 0x2d, 0xad, 0xfe, 0x53, 0x01, 0xde, 0xcd, 0x64, 0x43, 0xdf, - 0xdd, 0x1c, 0xff, 0x35, 0x86, 0x7f, 0xf7, 0x6b, 0xe3, 0x1f, 0xcc, 0x50, 0x94, 0x72, 0x78, 0x23, - 0x0d, 0xfc, 0x50, 0x4e, 0xe3, 0x4f, 0x04, 0x78, 0x12, 0x47, 0x6e, 0x76, 0x83, 0x93, 0x47, 0xef, - 0x28, 0x1c, 0xab, 0xb9, 0xe2, 0x80, 0x11, 0x03, 0xfc, 0x51, 0x06, 0xc0, 0x93, 0x72, 0xce, 0xa5, - 0x1c, 0x7e, 0xd0, 0x07, 0x3a, 0x31, 0x3b, 0xfd, 0x57, 0x02, 0x6c, 0xa6, 0xcc, 0x5c, 0xdb, 0x6c, - 0x91, 0x0e, 0xcb, 0x54, 0x85, 0x20, 0xaf, 0x33, 0x90, 0xdb, 0x5f, 0x67, 0xfe, 0x0e, 0x26, 0xbd, - 0x4a, 0x39, 0xfc, 0x78, 0xc2, 0x24, 0x56, 0xcd, 0x56, 0x3c, 0x43, 0xf6, 0x7b, 0x02, 0x3c, 0x88, - 0x43, 0xed, 0xf4, 0x12, 0x49, 0x23, 0xe3, 0x7e, 0x83, 0x21, 0xfc, 0x20, 0x03, 0xc2, 0x71, 0xd9, - 0xa8, 0x52, 0x0e, 0x17, 0xfa, 0xd0, 0xc6, 0xe6, 0xac, 0x7e, 0x45, 0x80, 0x3b, 0x71, 0x4c, 0x3e, - 0xf5, 0xfc, 0x00, 0x4d, 0x7b, 0x20, 0x1e, 0xdf, 0x4c, 0xdd, 0xfd, 0x26, 0xa4, 0x86, 0x4a, 0x39, - 0xbc, 0xd2, 0x47, 0x92, 0x94, 0x3b, 0x72, 0x61, 0x39, 0x8e, 0x21, 0x3a, 0xe7, 0x46, 0xfb, 0xd0, - 0x7c, 0x4a, 0x3e, 0x64, 0x5c, 0x6e, 0x86, 0x6f, 0xbb, 0x63, 0xf2, 0x36, 0x4d, 0xc8, 0x77, 0xed, - 0xe0, 0x10, 0x66, 0xfa, 0x94, 0xb4, 0xe9, 0x09, 0x7b, 0xbd, 0x0a, 0x77, 0xdc, 0x85, 0x94, 0xfb, - 0xf0, 0xd8, 0xac, 0x48, 0x29, 0x87, 0x6f, 0x74, 0xed, 0xd1, 0x4e, 0x74, 0xca, 0x36, 0xf9, 0x61, - 0x6d, 0x9e, 0x79, 0x1c, 0xa9, 0xcc, 0xa7, 0x7a, 0x78, 0x42, 0xae, 0x85, 0x1b, 0x9a, 0x4c, 0x80, - 0x7e, 0x04, 0xab, 0x49, 0x86, 0xb2, 0x5c, 0x4c, 0xa8, 0x7c, 0x31, 0x75, 0x83, 0x99, 0x98, 0xc7, - 0x29, 0xe5, 0xf0, 0xd2, 0xb0, 0xd5, 0x7d, 0x12, 0xf4, 0x67, 0x3c, 0x84, 0x0c, 0x23, 0xe0, 0xef, - 0x55, 0xf1, 0x5c, 0x4f, 0x88, 0x66, 0x89, 0xa1, 0x91, 0xb3, 0xa2, 0x99, 0x90, 0x32, 0x2a, 0xe5, - 0xf0, 0xfd, 0x21, 0x60, 0xc9, 0xd4, 0xe8, 0x2f, 0x05, 0xd8, 0x88, 0x4f, 0x41, 0xbb, 0xff, 0xe2, - 0x41, 0xcc, 0x13, 0x8f, 0x38, 0xb6, 0xd5, 0x88, 0x96, 0x45, 0x38, 0x2b, 0x97, 0x53, 0xaf, 0x10, - 0xd9, 0xaa, 0x93, 0x4b, 0x39, 0xfc, 0xa8, 0x3f, 0x4b, 0xe3, 0xb4, 0x27, 0x9e, 0x66, 0x5b, 0x8d, - 0x81, 0x4a, 0xe6, 0x1f, 0x0b, 0x70, 0x3f, 0xf9, 0xc8, 0x60, 0x79, 0x84, 0xb2, 0xb7, 0x99, 0x10, - 0xde, 0xad, 0xcc, 0x47, 0xa8, 0xe4, 0xa2, 0xe1, 0xc1, 0x23, 0x54, 0x8f, 0xc6, 0xf2, 0xe2, 0x85, - 0xc5, 0x3e, 0x9f, 0xd6, 0xc1, 0x7e, 0xeb, 0x3b, 0x84, 0x27, 0x41, 0xf8, 0x28, 0x86, 0x28, 0x56, - 0x52, 0x97, 0x6e, 0x72, 0x05, 0x6e, 0x38, 0xa3, 0x93, 0xab, 0x73, 0x7f, 0x08, 0xd7, 0x4c, 0x96, - 0x8d, 0x21, 0xfd, 0x5c, 0x48, 0xfe, 0x36, 0xd3, 0x34, 0xfe, 0xf5, 0x2e, 0x31, 0x73, 0x58, 0xca, - 0x61, 0xd1, 0x1c, 0xea, 0x88, 0x42, 0x62, 0x7c, 0x0a, 0x84, 0x9e, 0x65, 0xc7, 0xe3, 0xd0, 0xb2, - 0xd5, 0xd4, 0x05, 0x3b, 0xe1, 0xc5, 0x8f, 0x87, 0xc4, 0x49, 0x4f, 0x82, 0xe1, 0x51, 0x39, 0x01, - 0x44, 0xef, 0x15, 0x80, 0xe3, 0x58, 0x4b, 0x1d, 0xe7, 0xc9, 0x0f, 0x81, 0x7c, 0x9c, 0x53, 0x1e, - 0x0b, 0x7f, 0x55, 0x60, 0x41, 0x24, 0xba, 0x37, 0x7e, 0x16, 0xff, 0x1d, 0x4e, 0x74, 0x65, 0xbc, - 0x93, 0xf5, 0xf6, 0x3a, 0xee, 0x57, 0x3c, 0x03, 0xb7, 0xd7, 0x04, 0x22, 0xf4, 0x29, 0x84, 0x83, - 0x45, 0x68, 0x94, 0x48, 0xcd, 0x17, 0x98, 0xd6, 0xb7, 0x53, 0x86, 0x7d, 0x30, 0xf1, 0x5a, 0xca, - 0xe1, 0xab, 0xe6, 0x60, 0x3b, 0x6a, 0xc1, 0x42, 0x28, 0x3b, 0x08, 0x50, 0xf1, 0xfc, 0x6b, 0xfe, - 0x6e, 0xca, 0x03, 0xe2, 0xf8, 0x34, 0x68, 0x29, 0x87, 0x6f, 0x9a, 0x49, 0xbd, 0xe8, 0x00, 0x6e, - 0xf6, 0x5f, 0x49, 0x78, 0x60, 0xe4, 0xc3, 0x79, 0x8f, 0x29, 0x7b, 0x6b, 0xac, 0xb2, 0x84, 0x27, - 0xd6, 0x52, 0x0e, 0x5f, 0x77, 0x13, 0x5e, 0x5e, 0x4f, 0xe0, 0xd6, 0x98, 0x37, 0x3e, 0xae, 0xea, - 0x7e, 0x8a, 0x5d, 0xe3, 0xdf, 0x25, 0x83, 0x80, 0x7f, 0x38, 0xfe, 0xd5, 0xf2, 0x00, 0x42, 0xab, - 0x49, 0xf8, 0x70, 0xef, 0xf2, 0x0c, 0x6f, 0xfe, 0x41, 0x8a, 0x71, 0x09, 0x59, 0xe1, 0xc0, 0x38, - 0x33, 0x21, 0x59, 0x5c, 0x86, 0x2b, 0x3d, 0x1d, 0x6c, 0x94, 0x1e, 0x32, 0xd9, 0xf7, 0x53, 0x65, - 0x07, 0xc4, 0xa5, 0x1c, 0xbe, 0x6c, 0xc6, 0xf3, 0xb9, 0xfb, 0x80, 0xe2, 0x39, 0x06, 0x3e, 0x22, - 0xf9, 0x47, 0x29, 0xe5, 0x1c, 0xc3, 0xf9, 0x54, 0x16, 0x4d, 0x86, 0x73, 0xac, 0x43, 0xa2, 0xbb, - 0x2c, 0xf3, 0x97, 0x7f, 0x9c, 0x59, 0x34, 0x4f, 0x15, 0x0e, 0x8a, 0x0e, 0xd3, 0x87, 0x43, 0xa2, - 0x2d, 0x96, 0x78, 0xc9, 0xaf, 0x67, 0x16, 0xcd, 0x33, 0x35, 0x83, 0xa2, 0xc3, 0xec, 0x4d, 0x13, - 0x16, 0xe3, 0xa2, 0x79, 0x36, 0x28, 0xf2, 0xcb, 0x93, 0x94, 0x77, 0x81, 0xe4, 0x84, 0x6a, 0x29, - 0x87, 0xe7, 0xcd, 0xe4, 0x54, 0x6b, 0xb2, 0xb6, 0xd0, 0x55, 0x6f, 0x7d, 0x45, 0x6d, 0x3d, 0x87, - 0x8d, 0x68, 0x0b, 0xdd, 0x96, 0xac, 0x2d, 0xf4, 0xde, 0xdb, 0x5f, 0x51, 0x5b, 0xcf, 0x87, 0x23, - 0xda, 0x42, 0x4f, 0xb6, 0x60, 0x29, 0xae, 0x8d, 0x25, 0x3b, 0xbd, 0x60, 0xb7, 0xec, 0x7a, 0xd4, - 0xcd, 0x6f, 0x64, 0x56, 0x17, 0x4f, 0xb9, 0x0e, 0xaa, 0x1b, 0x48, 0xc6, 0xfe, 0x96, 0x00, 0x85, - 0xf8, 0x01, 0x81, 0x36, 0xb6, 0xf8, 0x95, 0xb8, 0x1d, 0x7f, 0x66, 0xc9, 0x6f, 0xa6, 0xbe, 0xc9, - 0xa6, 0xd6, 0xba, 0xf2, 0x37, 0xd9, 0x1e, 0x59, 0x63, 0x94, 0x0c, 0xbd, 0x86, 0x85, 0x84, 0x17, - 0x16, 0x6a, 0x37, 0x68, 0xfe, 0x9d, 0xd4, 0x23, 0xf6, 0x98, 0x4a, 0x53, 0x7e, 0xc4, 0x1e, 0xea, - 0xb4, 0x1b, 0x74, 0x58, 0x59, 0x74, 0xdc, 0x74, 0x2c, 0x9a, 0x7f, 0x9a, 0x59, 0xd9, 0x50, 0x75, - 0xe7, 0xa0, 0xb2, 0x7e, 0x27, 0xfa, 0x01, 0x5c, 0xf3, 0xcd, 0xa3, 0x70, 0x1f, 0xa2, 0xc1, 0x86, - 0xe8, 0x9e, 0xe6, 0xb7, 0x52, 0xf6, 0xa2, 0xa4, 0xbc, 0x47, 0xb0, 0x17, 0xf9, 0xe6, 0x51, 0xbc, - 0x1d, 0xf9, 0xb0, 0xe4, 0x85, 0x99, 0x0a, 0xe2, 0x32, 0x49, 0xe4, 0x88, 0xb2, 0x87, 0xec, 0x6e, - 0xd3, 0xcf, 0x3f, 0x4b, 0x79, 0x92, 0x9a, 0x94, 0xe4, 0x28, 0xe5, 0xf0, 0x82, 0x97, 0xdc, 0x3f, - 0xbc, 0x2c, 0xc2, 0x3c, 0x6b, 0xb8, 0xe4, 0xdf, 0xcd, 0x3c, 0x4f, 0xe3, 0xd9, 0xf9, 0xc1, 0x79, - 0x3a, 0x90, 0xb7, 0x4f, 0xd6, 0x16, 0x2e, 0xc2, 0xf7, 0xbe, 0xa2, 0xb6, 0xa4, 0x45, 0x18, 0xef, - 0xd9, 0xbe, 0x00, 0x33, 0x8c, 0xfb, 0xe3, 0x73, 0xb3, 0x53, 0xe2, 0x74, 0x70, 0xcc, 0xe8, 0x9d, - 0x65, 0x02, 0xcf, 0x46, 0xcf, 0x9e, 0xec, 0xe4, 0xba, 0xfe, 0x77, 0x73, 0xfd, 0x9f, 0xbd, 0x46, - 0xdb, 0x2d, 0xba, 0x03, 0x2b, 0x45, 0x55, 0x97, 0xb5, 0x17, 0x0a, 0x26, 0x58, 0xd1, 0xb5, 0x3a, - 0x96, 0x87, 0x7f, 0xb0, 0x73, 0x0b, 0xf2, 0xa3, 0x24, 0xba, 0x82, 0x5f, 0x28, 0x58, 0x14, 0xd0, - 0x1a, 0xdc, 0x1a, 0xed, 0xdd, 0xab, 0x6f, 0x2b, 0xb8, 0xaa, 0x18, 0x8a, 0x2e, 0x4e, 0xa1, 0x67, - 0xb0, 0x39, 0x4a, 0x51, 0x94, 0x0c, 0x69, 0x5b, 0xd2, 0x15, 0x52, 0xd3, 0x74, 0x63, 0x17, 0x2b, - 0x3a, 0xd1, 0x95, 0xf2, 0x0e, 0x29, 0x69, 0xba, 0xa1, 0x14, 0xc5, 0x69, 0xf4, 0x0e, 0xbc, 0x35, - 0x81, 0xa9, 0xb2, 0xaf, 0x7f, 0x52, 0x1e, 0xe0, 0x38, 0x87, 0xb6, 0x60, 0x63, 0x12, 0x87, 0x56, - 0xdd, 0xd5, 0x8a, 0xdb, 0x03, 0x3c, 0x33, 0xe8, 0x09, 0x3c, 0xcc, 0x02, 0x0d, 0x17, 0x75, 0xf1, - 0x3c, 0x7a, 0x04, 0xf7, 0x52, 0x21, 0x05, 0x94, 0x17, 0xd0, 0x03, 0x28, 0x8c, 0x52, 0x4a, 0xb5, - 0x5a, 0x59, 0x95, 0x25, 0x43, 0xd5, 0xaa, 0xa4, 0x64, 0x18, 0x35, 0x71, 0x16, 0xdd, 0x87, 0x3b, - 0x93, 0xe9, 0x0c, 0xb9, 0x26, 0x5e, 0x4c, 0x26, 0x7b, 0xa9, 0x56, 0x8b, 0xda, 0x4b, 0x9d, 0x14, - 0x15, 0x7d, 0xcf, 0xd0, 0x6a, 0x22, 0xa0, 0xb7, 0xe0, 0xd1, 0x04, 0x7c, 0xfa, 0x27, 0x65, 0x3e, - 0x66, 0x0c, 0xe3, 0xa5, 0x14, 0x07, 0xf7, 0x4d, 0x57, 0x8a, 0x7a, 0x49, 0xdd, 0x31, 0xc4, 0xcb, - 0xe8, 0x5d, 0x78, 0x27, 0x93, 0xfc, 0xb8, 0x8b, 0xaf, 0xa4, 0xe8, 0xc1, 0x4a, 0x51, 0x1d, 0x1c, - 0xfa, 0xb9, 0xac, 0x83, 0xb2, 0x2b, 0xd7, 0xc4, 0xab, 0x99, 0x06, 0x25, 0xa0, 0x14, 0x33, 0xbb, - 0x27, 0xa0, 0xbe, 0x86, 0x3e, 0x80, 0xf7, 0xbf, 0x8a, 0x7b, 0xc2, 0xf5, 0x50, 0x56, 0x74, 0x5d, - 0x44, 0xe8, 0x6d, 0x78, 0x9c, 0x85, 0x59, 0xfa, 0xb4, 0x8e, 0x15, 0xf1, 0x3a, 0x7a, 0x08, 0x77, - 0x27, 0x90, 0x17, 0xf7, 0xab, 0x52, 0x45, 0x2b, 0x6e, 0x8b, 0x37, 0x52, 0xa6, 0xb8, 0x2c, 0xe9, - 0xba, 0x54, 0x2d, 0x62, 0x89, 0xec, 0x29, 0xfb, 0x7a, 0x4d, 0x92, 0x15, 0x5d, 0xbc, 0x99, 0x32, - 0x6a, 0x7d, 0x9e, 0xf8, 0x18, 0xcc, 0xa3, 0xe7, 0xf0, 0xee, 0x04, 0x2e, 0xa5, 0x2c, 0xe9, 0x86, - 0x2a, 0xeb, 0x8a, 0x84, 0xe5, 0xd2, 0x00, 0xe7, 0x42, 0xa6, 0xf1, 0x0e, 0xf9, 0x25, 0xb9, 0xa4, - 0x88, 0xf9, 0x14, 0x6f, 0x71, 0x8e, 0x8a, 0x52, 0xd1, 0xf0, 0x7e, 0x71, 0x5b, 0x5c, 0xcc, 0xa4, - 0x80, 0x79, 0x96, 0x70, 0x05, 0x4b, 0x29, 0xc6, 0x70, 0x0e, 0xb9, 0x5c, 0xd7, 0x8d, 0xa1, 0xc9, - 0xbb, 0x8c, 0xd6, 0xe1, 0x41, 0xea, 0xec, 0xe2, 0xa3, 0x78, 0x0b, 0x6d, 0xc0, 0x7a, 0xa6, 0xf9, - 0xc5, 0xe9, 0x57, 0x52, 0x06, 0xb3, 0x4f, 0x5f, 0x51, 0x65, 0xac, 0xe9, 0xda, 0x8e, 0x21, 0xde, - 0x46, 0xdf, 0x81, 0xad, 0x49, 0x83, 0xa9, 0xc9, 0x7b, 0x58, 0x93, 0xe4, 0xd2, 0x50, 0x9c, 0x5b, - 0x4d, 0x99, 0xfb, 0x51, 0x6c, 0x94, 0x8c, 0xb2, 0xa4, 0x8b, 0x6b, 0x29, 0x6b, 0x4a, 0xaf, 0x6a, - 0x2f, 0x77, 0xca, 0xd2, 0x9e, 0x22, 0xde, 0x19, 0x23, 0x57, 0x93, 0x63, 0xde, 0x2d, 0xea, 0xa4, - 0x86, 0xb5, 0xef, 0xef, 0x8b, 0x85, 0x31, 0x53, 0x31, 0x4e, 0x5d, 0x52, 0x77, 0x4b, 0x44, 0x7a, - 0x21, 0xa9, 0x65, 0x69, 0x5b, 0x2d, 0xab, 0xc6, 0xbe, 0x78, 0x17, 0xbd, 0x0f, 0xcf, 0x52, 0xb8, - 0xd8, 0x0a, 0x51, 0x65, 0x82, 0x95, 0x5d, 0x55, 0x37, 0x30, 0x0b, 0x9d, 0xe2, 0xbd, 0xe4, 0x28, - 0xac, 0x4b, 0x95, 0x72, 0x3c, 0xc4, 0x8a, 0xf7, 0x51, 0x01, 0x6e, 0x8f, 0xd2, 0x29, 0xf2, 0x16, - 0xff, 0x69, 0x6a, 0x55, 0x56, 0xc4, 0x07, 0xeb, 0x7f, 0x2e, 0xc0, 0xdc, 0xe0, 0xdf, 0x2d, 0xa0, - 0x55, 0x58, 0xee, 0xb1, 0xe9, 0x86, 0x64, 0xd4, 0xf5, 0xa1, 0x7d, 0x73, 0x19, 0x16, 0x86, 0x09, - 0xf4, 0xba, 0x2c, 0x07, 0x21, 0x42, 0x48, 0xec, 0xdc, 0x53, 0x6b, 0x35, 0xa5, 0x28, 0x4e, 0xa1, - 0x45, 0xb8, 0x39, 0xdc, 0xa9, 0x60, 0xac, 0x61, 0x71, 0x3a, 0x89, 0x4f, 0xda, 0xd6, 0x30, 0xdb, - 0x02, 0xd7, 0xff, 0x70, 0x0a, 0xa6, 0x65, 0x43, 0x42, 0xd7, 0xe1, 0xaa, 0x6c, 0x48, 0xa3, 0x3f, - 0xea, 0x0d, 0x1a, 0xa5, 0xba, 0x51, 0x22, 0xb2, 0x56, 0xad, 0x2a, 0xb2, 0xa1, 0x05, 0x1b, 0xf8, - 0x02, 0x5c, 0x67, 0xed, 0xb2, 0xa1, 0xbe, 0x08, 0xf6, 0x75, 0x5d, 0x57, 0xb5, 0x6a, 0xb0, 0x6f, - 0xf7, 0x3a, 0x02, 0xc8, 0x04, 0x2b, 0x9f, 0xd4, 0x15, 0xdd, 0xd0, 0xc5, 0xe9, 0xa8, 0xa3, 0x86, - 0x95, 0x8a, 0x5a, 0xaf, 0x10, 0xbd, 0x5e, 0xab, 0x69, 0xd8, 0x10, 0xcf, 0x45, 0x1d, 0x06, 0x0e, - 0xd6, 0x52, 0x91, 0x14, 0x95, 0x17, 0x6a, 0x10, 0x84, 0x66, 0x22, 0xdd, 0xf5, 0xda, 0x2e, 0x96, - 0x8a, 0x0a, 0xd9, 0x96, 0xaa, 0x55, 0x05, 0x8b, 0xe7, 0x23, 0x86, 0x6d, 0xb5, 0x5c, 0x56, 0xab, - 0xbb, 0x44, 0xaf, 0x57, 0x2a, 0x12, 0xde, 0x17, 0x2f, 0x44, 0x16, 0x84, 0xba, 0xcb, 0xaa, 0x6e, - 0x88, 0xb3, 0x81, 0x5b, 0x62, 0x8d, 0x15, 0xad, 0xaa, 0x1a, 0x1a, 0x56, 0xab, 0xbb, 0xe2, 0x45, - 0x74, 0x1b, 0x96, 0x82, 0x2e, 0xe5, 0xfb, 0x86, 0x82, 0xab, 0x52, 0x99, 0x48, 0xf5, 0xa2, 0x6a, - 0x10, 0xdd, 0xd0, 0xb0, 0xb4, 0xab, 0x88, 0xb0, 0xfe, 0xc7, 0xe7, 0xe1, 0x66, 0x62, 0x9d, 0x5b, - 0x10, 0x7c, 0xd5, 0xaa, 0xa1, 0xec, 0xf2, 0x69, 0x43, 0x94, 0x2a, 0xd6, 0xca, 0x65, 0xb2, 0xa7, - 0x56, 0x87, 0x7f, 0x14, 0x7d, 0x07, 0x56, 0xc6, 0x11, 0xea, 0x65, 0x49, 0xde, 0x13, 0x05, 0x74, - 0x0f, 0xd6, 0xc6, 0x91, 0x48, 0x2f, 0x75, 0xa2, 0xa9, 0x45, 0x59, 0x9c, 0x0a, 0xb6, 0xf3, 0x71, - 0x54, 0x35, 0x69, 0x57, 0xc1, 0xc5, 0xba, 0xb1, 0x2f, 0x4e, 0x4f, 0xd2, 0xa7, 0x54, 0x24, 0xb5, - 0x2c, 0x9e, 0x0b, 0xce, 0x5e, 0xe3, 0x48, 0x3e, 0x56, 0xb1, 0x24, 0xce, 0xa0, 0xbb, 0xb0, 0x3a, - 0x8e, 0x82, 0x4d, 0x23, 0x5c, 0x14, 0xcf, 0x07, 0x0b, 0x65, 0x1c, 0x51, 0x45, 0x32, 0x0c, 0x05, - 0x57, 0x34, 0xdd, 0x10, 0x2f, 0x4c, 0x32, 0xaf, 0xa2, 0x13, 0x43, 0x91, 0x2a, 0xba, 0x38, 0x3b, - 0x89, 0x4a, 0xab, 0xe9, 0xbb, 0x4a, 0x55, 0x55, 0xc4, 0x8b, 0x93, 0xa0, 0x6b, 0x7b, 0x86, 0x24, - 0xc2, 0x44, 0xe3, 0xa4, 0xca, 0x8e, 0x78, 0x69, 0x32, 0x6e, 0xb9, 0xa4, 0x56, 0x15, 0xa2, 0x16, - 0xc5, 0xcb, 0xe8, 0x3d, 0x78, 0x9a, 0x4e, 0x47, 0x76, 0x55, 0xa3, 0x54, 0xdf, 0x66, 0xeb, 0x20, - 0x98, 0xff, 0x57, 0xd0, 0x26, 0x3c, 0xc9, 0xc0, 0x26, 0xab, 0x58, 0x2e, 0x2b, 0xb2, 0x2a, 0xce, - 0x05, 0x1b, 0x59, 0x36, 0x3d, 0x65, 0x69, 0x5b, 0xbc, 0x1a, 0x6c, 0x18, 0x19, 0xc8, 0x3f, 0x56, - 0xaa, 0x7b, 0x6a, 0x55, 0x17, 0xc5, 0x8c, 0xf4, 0x52, 0x55, 0x57, 0xb7, 0xcb, 0x8a, 0x78, 0x6d, - 0x92, 0x7b, 0x82, 0xad, 0x45, 0x95, 0x95, 0xaa, 0xf6, 0x52, 0x44, 0xeb, 0x1f, 0xc1, 0x85, 0xf0, - 0x49, 0x2c, 0x58, 0x8f, 0x3b, 0x8a, 0x64, 0x04, 0x9b, 0xe7, 0x48, 0x2c, 0x8b, 0x3a, 0x86, 0x57, - 0xb7, 0xb0, 0xfe, 0xa7, 0x02, 0x2c, 0x4f, 0xa8, 0x9b, 0x0b, 0xfc, 0x12, 0x31, 0x63, 0x45, 0xd6, - 0x2a, 0x15, 0xa5, 0x5a, 0xe4, 0x98, 0x12, 0xe3, 0xe6, 0x3a, 0x3c, 0x98, 0x4c, 0x5e, 0xd5, 0x0c, - 0x4e, 0x2b, 0x04, 0x36, 0x4e, 0xa6, 0x2d, 0x6a, 0x55, 0x45, 0x9c, 0xda, 0xfe, 0xe1, 0x3f, 0x7c, - 0x79, 0x5b, 0xf8, 0xc7, 0x2f, 0x6f, 0x0b, 0xff, 0xfa, 0xe5, 0x6d, 0xe1, 0x53, 0xed, 0xc8, 0xf6, - 0x5f, 0x75, 0x0f, 0x36, 0x1a, 0x4e, 0x6b, 0xf3, 0xc8, 0x35, 0x8f, 0x6d, 0x9e, 0x32, 0x31, 0x9b, - 0x9b, 0xbd, 0x3f, 0xb8, 0x32, 0x3b, 0xf6, 0xe6, 0x11, 0x6d, 0x6f, 0xb2, 0x1a, 0xc7, 0xcd, 0x23, - 0x67, 0xe8, 0x1f, 0xaf, 0x3e, 0x88, 0x7d, 0x3d, 0x7e, 0x7a, 0x70, 0x9e, 0x91, 0x3d, 0xfb, 0xdf, - 0x00, 0x00, 0x00, 0xff, 0xff, 0xed, 0x62, 0xab, 0x7d, 0x21, 0x4b, 0x00, 0x00, + 0xfc, 0xb8, 0x97, 0x82, 0xb8, 0x17, 0xc6, 0x3b, 0x7a, 0x82, 0x9d, 0x56, 0xfc, 0x11, 0x78, 0x25, + 0x70, 0x88, 0x81, 0x4e, 0xdd, 0x3c, 0x8e, 0x13, 0xdc, 0x09, 0xae, 0x20, 0x83, 0xdc, 0xc1, 0x86, + 0xd9, 0x8a, 0x91, 0xbc, 0x05, 0x6b, 0x43, 0x24, 0x2f, 0x6c, 0x7a, 0x52, 0x72, 0x9a, 0xdd, 0x36, + 0xed, 0xf8, 0xe6, 0xe0, 0xa5, 0xbc, 0xf8, 0xb7, 0x02, 0xdc, 0x94, 0x3c, 0xcf, 0x0e, 0x7c, 0x8f, + 0x4d, 0x41, 0xcf, 0xf7, 0x1e, 0xc2, 0xd5, 0xa6, 0xd3, 0x39, 0xa6, 0xae, 0xc7, 0x78, 0x48, 0xef, + 0x81, 0x72, 0x36, 0xde, 0xac, 0x5a, 0xe8, 0x0e, 0x5c, 0xf6, 0x1d, 0xdf, 0x6c, 0x11, 0xdf, 0x79, + 0x4d, 0x3b, 0xfc, 0x01, 0x6e, 0x0a, 0x5f, 0x62, 0x6d, 0x06, 0x6b, 0x42, 0x77, 0xe1, 0xca, 0x91, + 0xeb, 0xb4, 0x8f, 0xfc, 0x88, 0x66, 0x8a, 0xd1, 0x5c, 0xe6, 0x8d, 0x21, 0xd1, 0x13, 0xb8, 0xd6, + 0xec, 0x61, 0x88, 0x08, 0xf9, 0xc9, 0x41, 0xec, 0x77, 0x70, 0xe2, 0xe2, 0x3f, 0x0b, 0x70, 0x83, + 0xe3, 0x56, 0x3e, 0xa7, 0xcd, 0xee, 0xd7, 0x80, 0xbd, 0x0c, 0xd0, 0x71, 0x2c, 0x1a, 0x9e, 0x50, + 0x38, 0xe8, 0x8b, 0x41, 0x0b, 0x3b, 0x9c, 0x8c, 0x8c, 0x6a, 0x2a, 0xc3, 0xa8, 0xce, 0x65, 0x1d, + 0xd5, 0xf4, 0x98, 0x51, 0x3d, 0x87, 0x45, 0x3e, 0xa8, 0x1a, 0x3d, 0x91, 0x63, 0x70, 0x7b, 0xaf, + 0xca, 0x4d, 0xd3, 0xa7, 0x87, 0x8e, 0x7b, 0x1a, 0xbd, 0x2a, 0x47, 0xdf, 0x8b, 0x7f, 0x23, 0xc0, + 0x75, 0xce, 0x2a, 0x35, 0x9b, 0xd4, 0xf3, 0x30, 0xfd, 0xac, 0x4b, 0x3d, 0x3f, 0xc0, 0x18, 0xf9, + 0x2f, 0xbf, 0xe1, 0x73, 0xc6, 0xcb, 0x51, 0x23, 0xbb, 0x32, 0xff, 0x4c, 0x66, 0xf0, 0x27, 0x02, + 0x5c, 0x8e, 0x10, 0x07, 0xcd, 0x68, 0x0e, 0xce, 0x9b, 0xec, 0x53, 0x88, 0x31, 0xfc, 0xf6, 0xb3, + 0x41, 0x77, 0x0f, 0x10, 0x37, 0x64, 0xc5, 0xf6, 0xfc, 0xb1, 0xef, 0xf4, 0x3f, 0x00, 0xb1, 0x4f, + 0xc5, 0xd7, 0x1c, 0xda, 0x19, 0x89, 0x5d, 0xe3, 0xe3, 0xc4, 0xa8, 0x8a, 0x7e, 0xf4, 0x1a, 0x14, + 0xde, 0x38, 0xb2, 0xbe, 0x39, 0xe1, 0x25, 0x1a, 0xc4, 0xde, 0x37, 0x27, 0xdc, 0x84, 0xb9, 0x78, + 0x7f, 0x7b, 0x3f, 0x3a, 0xe1, 0x7d, 0xa3, 0x2a, 0xde, 0xb4, 0x89, 0x12, 0x54, 0xbc, 0x69, 0x43, + 0xfd, 0x7c, 0x5c, 0xc5, 0x8e, 0x6b, 0x76, 0x7c, 0xcf, 0x70, 0x1a, 0x1e, 0x75, 0xd1, 0x3a, 0x5c, + 0x67, 0x81, 0x89, 0xb8, 0x4e, 0x8b, 0x7a, 0xe4, 0x30, 0xe8, 0xa3, 0xdc, 0xf5, 0xa6, 0xf1, 0x35, + 0xd6, 0x15, 0x84, 0x76, 0x6f, 0x87, 0x77, 0xa0, 0xb7, 0xe1, 0x06, 0xa7, 0xf7, 0x5d, 0xd3, 0xf6, + 0xfb, 0x0c, 0x79, 0xc6, 0x80, 0x58, 0x9f, 0xc1, 0xba, 0x42, 0x8e, 0xe2, 0x1f, 0x4c, 0xc5, 0x95, + 0x63, 0x7a, 0x6c, 0xd3, 0x93, 0x37, 0x3c, 0x4b, 0xe8, 0x39, 0x2c, 0x58, 0xe6, 0xa9, 0x47, 0x8e, + 0x4c, 0xcf, 0x27, 0x1d, 0xfa, 0xb9, 0x4f, 0xcc, 0xae, 0x65, 0xfb, 0x24, 0x98, 0xa8, 0x10, 0xda, + 0xcd, 0x80, 0xa0, 0x6e, 0x06, 0x21, 0xef, 0x73, 0x5f, 0x0a, 0x7a, 0x4b, 0x01, 0x84, 0x6d, 0x58, + 0x69, 0x33, 0x93, 0x7b, 0xaf, 0xec, 0x23, 0xe2, 0xd2, 0xcf, 0xba, 0xb6, 0x4b, 0x83, 0x0d, 0xcc, + 0x23, 0xcd, 0x57, 0x66, 0xe7, 0x90, 0x5a, 0x6c, 0x8d, 0xcf, 0xe0, 0xe5, 0x3e, 0x19, 0x8e, 0x51, + 0xc9, 0x9c, 0x08, 0x3d, 0x87, 0x82, 0xcb, 0x86, 0x46, 0x0e, 0x02, 0x21, 0xb4, 0xd3, 0x3c, 0xed, + 0x09, 0x38, 0xc7, 0x04, 0xcc, 0xf1, 0xfe, 0xed, 0xa8, 0x3b, 0xe2, 0xfc, 0x10, 0x96, 0x42, 0x4e, + 0xcb, 0x3c, 0x25, 0xce, 0x01, 0x69, 0x3b, 0x1d, 0xff, 0x55, 0x8f, 0x79, 0x9a, 0x31, 0xcf, 0x73, + 0x92, 0x92, 0x79, 0xaa, 0x1d, 0x54, 0x83, 0xfe, 0x88, 0xfb, 0xbb, 0xb0, 0xd0, 0xe9, 0x06, 0xc0, + 0x02, 0x4e, 0x97, 0xb6, 0x9d, 0x63, 0x6a, 0x91, 0x10, 0x6a, 0xe1, 0x3c, 0x1b, 0xf9, 0x1c, 0x27, + 0xd0, 0x0e, 0x30, 0xef, 0xe6, 0x2e, 0xe6, 0x15, 0x7f, 0x5f, 0x18, 0x9d, 0x98, 0x37, 0xec, 0x78, + 0xe8, 0x29, 0xdc, 0x34, 0x59, 0x3f, 0x69, 0xd9, 0x9e, 0x4f, 0xc2, 0x81, 0xda, 0x56, 0x98, 0xb6, + 0x43, 0xe6, 0x90, 0x7e, 0xd5, 0x2a, 0xfe, 0x58, 0x80, 0x85, 0x58, 0x4a, 0x88, 0xa7, 0x42, 0xc6, + 0x45, 0x46, 0xb4, 0x05, 0xe7, 0x5e, 0xdb, 0x1d, 0x2e, 0x6f, 0x76, 0x73, 0x7d, 0x2c, 0xca, 0x11, + 0x89, 0xbb, 0x76, 0xc7, 0xc2, 0x8c, 0x17, 0x2d, 0xc1, 0xc5, 0xae, 0x47, 0x5d, 0xc2, 0xd2, 0xa8, + 0x53, 0xfd, 0x34, 0x6a, 0xcd, 0x6c, 0xd3, 0xa2, 0x13, 0x1c, 0x95, 0x46, 0xb8, 0x59, 0x6a, 0x91, + 0xef, 0x96, 0xb5, 0x11, 0x5b, 0x6d, 0x66, 0x47, 0x91, 0xb0, 0x56, 0x5d, 0x58, 0x4d, 0x50, 0x18, + 0x1d, 0x5c, 0xbf, 0x19, 0x9d, 0xff, 0x22, 0xc0, 0xf5, 0x5e, 0xad, 0x00, 0x5b, 0x9b, 0x5c, 0x4f, + 0xa6, 0x5d, 0x3d, 0xf6, 0x0e, 0x43, 0x1c, 0xd7, 0x3e, 0xb4, 0x3b, 0xe1, 0xec, 0xf6, 0xde, 0x61, + 0x34, 0xd6, 0x8a, 0xee, 0xc3, 0x6c, 0xb3, 0xe5, 0x74, 0x2d, 0x72, 0xe4, 0x3a, 0xc7, 0xb6, 0x45, + 0xdd, 0xd0, 0xd8, 0x57, 0x58, 0x6b, 0x3d, 0x6c, 0x44, 0x1a, 0xcc, 0x58, 0xe1, 0x75, 0x95, 0x2d, + 0x9d, 0x4b, 0x9b, 0xef, 0xa4, 0x1e, 0x80, 0xa9, 0x15, 0xdd, 0x70, 0xfb, 0xa3, 0x8b, 0x84, 0x14, + 0x5f, 0xc0, 0xe2, 0x78, 0x3a, 0x34, 0x0f, 0x17, 0xac, 0xfd, 0xf8, 0xe8, 0xce, 0x5b, 0xfb, 0x6c, + 0x5c, 0x2b, 0x70, 0xc9, 0xda, 0x27, 0xac, 0xd2, 0xa3, 0xe9, 0xb4, 0xc2, 0x31, 0x81, 0xb5, 0x5f, + 0x0f, 0x5b, 0x8a, 0xff, 0x26, 0xc0, 0xe2, 0x36, 0x35, 0xfd, 0xae, 0x4b, 0x31, 0x6d, 0x3a, 0xed, + 0x36, 0xed, 0x58, 0xb1, 0x63, 0xd4, 0x80, 0x5b, 0x09, 0x83, 0x6e, 0x85, 0xbe, 0x07, 0x17, 0x0e, + 0x38, 0x6b, 0xe8, 0xba, 0xab, 0x63, 0xc7, 0x18, 0xa9, 0x88, 0x18, 0xd0, 0xe7, 0xb0, 0x1c, 0x7e, + 0x24, 0xee, 0x80, 0x5e, 0x12, 0xbb, 0x36, 0xcc, 0x6e, 0x3e, 0x4b, 0x95, 0x38, 0xc0, 0x1c, 0xde, + 0x1f, 0x96, 0x0e, 0xc6, 0x77, 0x16, 0x4f, 0xe0, 0x86, 0x21, 0xed, 0xf0, 0x93, 0x30, 0xfd, 0xa4, + 0x4b, 0xdd, 0xf0, 0xf9, 0x60, 0x05, 0xf8, 0x31, 0x89, 0x04, 0xe7, 0x5a, 0x9e, 0xd3, 0x9f, 0xc2, + 0xc0, 0x9a, 0x6a, 0x41, 0x4b, 0x9f, 0x80, 0x5a, 0x87, 0x34, 0x3a, 0x5a, 0x71, 0x02, 0x25, 0x68, + 0x09, 0x4e, 0xc9, 0xb6, 0x47, 0xbc, 0x2e, 0x8b, 0x07, 0x61, 0xc8, 0xbd, 0x68, 0x7b, 0x3a, 0x6f, + 0x28, 0x6e, 0xc3, 0x2d, 0x9d, 0x36, 0xbb, 0xae, 0xed, 0x9f, 0x62, 0x36, 0xa4, 0x1d, 0xea, 0x63, + 0xea, 0x75, 0x5b, 0xe1, 0x22, 0x44, 0x70, 0x2e, 0x66, 0x66, 0xf6, 0x39, 0x68, 0x0b, 0x62, 0x7e, + 0x18, 0xff, 0xd9, 0xe7, 0xa2, 0x09, 0xd7, 0x23, 0x57, 0x38, 0xdd, 0xa6, 0x7e, 0xf3, 0x15, 0x67, + 0x1f, 0xf5, 0x4c, 0x21, 0xc9, 0x33, 0x47, 0x96, 0x43, 0x7e, 0x74, 0x39, 0x14, 0xff, 0xe1, 0x19, + 0x5c, 0x6d, 0x04, 0xf6, 0x66, 0xa2, 0xb5, 0x0e, 0xd5, 0x0e, 0x50, 0x03, 0xae, 0x76, 0x6d, 0xb2, + 0xcf, 0x0a, 0x82, 0x48, 0x33, 0xb8, 0x15, 0xa5, 0x86, 0xd5, 0xd1, 0xfa, 0xa1, 0x72, 0x0e, 0x5f, + 0xe9, 0xda, 0xb1, 0x56, 0xf4, 0x13, 0x01, 0x1e, 0x77, 0x6d, 0xe2, 0xf0, 0xfa, 0x18, 0x12, 0x1e, + 0x2e, 0x29, 0x39, 0x74, 0x88, 0xef, 0x10, 0x2b, 0x2a, 0x20, 0x0a, 0x35, 0xf2, 0xcb, 0xa4, 0x34, + 0x41, 0x63, 0xb6, 0x2a, 0xa4, 0x72, 0x0e, 0xdf, 0xed, 0xda, 0xa9, 0xb4, 0xe8, 0x0b, 0x01, 0xee, + 0xc6, 0xd0, 0x99, 0x96, 0x45, 0x0e, 0x6c, 0x97, 0xed, 0x02, 0xa1, 0x0d, 0x39, 0x2e, 0xbe, 0xc6, + 0x3f, 0x4c, 0xc7, 0x35, 0xbe, 0xaa, 0xa9, 0x9c, 0xc3, 0xb7, 0x7b, 0x90, 0x12, 0xc9, 0x86, 0x6d, + 0x95, 0x80, 0xa6, 0x65, 0xfa, 0xbd, 0xd9, 0x99, 0xce, 0x6a, 0xab, 0x94, 0x12, 0xaa, 0x01, 0x5b, + 0x8d, 0xa7, 0x45, 0xbf, 0x26, 0xc0, 0x6a, 0x0c, 0x9d, 0x47, 0x7d, 0xd2, 0xec, 0x55, 0x5b, 0x11, + 0x8f, 0x15, 0x3a, 0xb1, 0xed, 0xfc, 0xd2, 0xe6, 0xf7, 0xd2, 0x41, 0x8d, 0xab, 0xd5, 0x2a, 0xe7, + 0xf0, 0xad, 0x1e, 0x9a, 0x04, 0x22, 0xf4, 0xbb, 0x02, 0xdc, 0x8b, 0xc1, 0x70, 0xc3, 0x9c, 0x63, + 0x70, 0x18, 0xe1, 0x25, 0x57, 0x11, 0x94, 0x0b, 0x0c, 0xca, 0xff, 0x4f, 0x87, 0x32, 0xa9, 0x68, + 0xab, 0x9c, 0xc3, 0xab, 0x3d, 0x38, 0x63, 0x08, 0x23, 0xcb, 0xb8, 0x61, 0x19, 0x14, 0x69, 0x06, + 0xf1, 0x84, 0x34, 0xc3, 0x32, 0xac, 0x70, 0xba, 0x66, 0x52, 0x2d, 0x93, 0x52, 0xc4, 0xc5, 0x2d, + 0x33, 0x9e, 0x08, 0x7d, 0x0e, 0xb7, 0x92, 0x50, 0x1c, 0x9d, 0x86, 0x08, 0x2e, 0x32, 0x04, 0xef, + 0x65, 0x47, 0x10, 0xaf, 0x02, 0x2b, 0xe7, 0x70, 0x61, 0x44, 0x7b, 0x48, 0x80, 0x7e, 0x01, 0x96, + 0x47, 0x35, 0x1f, 0xb9, 0x76, 0xc7, 0x0f, 0x55, 0x03, 0x53, 0xfd, 0x7e, 0x56, 0xd5, 0x43, 0x35, + 0x64, 0xe5, 0x1c, 0x5e, 0x18, 0xd2, 0xdd, 0xa7, 0x40, 0x2d, 0x58, 0xe8, 0xda, 0xc4, 0x0a, 0x43, + 0x66, 0xb0, 0xbf, 0xb8, 0x3e, 0xb5, 0x08, 0x13, 0x5e, 0xb8, 0xc4, 0x14, 0x6f, 0x64, 0x48, 0xe2, + 0xc7, 0x2b, 0xb1, 0xca, 0x39, 0x3c, 0xd7, 0xb5, 0x13, 0x6b, 0xb4, 0xbe, 0xe0, 0xee, 0xd7, 0x53, + 0xd7, 0x5b, 0x9a, 0x5e, 0x94, 0xa8, 0x09, 0x35, 0x5f, 0x66, 0x9a, 0xbf, 0x9b, 0x41, 0x73, 0x72, + 0x71, 0x15, 0xf7, 0xbc, 0x94, 0x02, 0xac, 0x1f, 0x31, 0xc7, 0xeb, 0x81, 0x09, 0xcb, 0x17, 0x3c, + 0x5e, 0x89, 0x10, 0x02, 0xb9, 0xc2, 0x80, 0xbc, 0xfb, 0xb5, 0xea, 0x18, 0xb8, 0xcf, 0x4d, 0xa8, + 0x3b, 0xf9, 0x4d, 0x1e, 0x40, 0xfb, 0x08, 0xc2, 0xa3, 0x4b, 0x7f, 0x5d, 0x72, 0x10, 0xb3, 0x0c, + 0xc4, 0xf3, 0x2c, 0x20, 0x92, 0x8a, 0x09, 0xca, 0x39, 0xbc, 0x12, 0xc3, 0x91, 0x58, 0x6f, 0xf0, + 0x47, 0x3c, 0x7a, 0x8e, 0x42, 0x69, 0x46, 0xaf, 0xe8, 0xa4, 0xed, 0xb7, 0xbc, 0x10, 0xd0, 0x55, + 0x06, 0xe8, 0xff, 0x7d, 0x05, 0x40, 0xa3, 0xe9, 0xfd, 0x72, 0x0e, 0xdf, 0x1b, 0x45, 0xd5, 0xa7, + 0xf3, 0x5b, 0x61, 0x86, 0xf3, 0xef, 0x05, 0x78, 0x3e, 0x38, 0x4f, 0x2c, 0x39, 0x4c, 0x4c, 0x96, + 0x1d, 0x26, 0x56, 0x94, 0x1e, 0x26, 0xbe, 0xe3, 0xb4, 0x3c, 0x62, 0xf3, 0x8c, 0x79, 0x88, 0x54, + 0x64, 0x48, 0x3f, 0xce, 0x34, 0x7f, 0x99, 0x92, 0xf0, 0xe5, 0x1c, 0x7e, 0x1a, 0x9f, 0xd4, 0x6c, + 0x99, 0xfb, 0x9f, 0x0a, 0xf0, 0x2c, 0xd3, 0x18, 0xfa, 0xe6, 0xe6, 0xf8, 0xaf, 0x31, 0xfc, 0x3b, + 0x5f, 0x1b, 0xff, 0x60, 0x12, 0xa4, 0x9c, 0xc3, 0xeb, 0x69, 0xe0, 0x87, 0xd2, 0x26, 0x7f, 0x22, + 0xc0, 0x93, 0x38, 0x72, 0xb3, 0x1b, 0x9c, 0x3c, 0x7a, 0xa7, 0xed, 0x58, 0x59, 0x17, 0x07, 0x8c, + 0x18, 0xe0, 0x8f, 0x32, 0x00, 0x9e, 0x94, 0xd6, 0x2e, 0xe7, 0xf0, 0x83, 0x3e, 0xd0, 0x89, 0x09, + 0xf0, 0xbf, 0x12, 0x60, 0x23, 0xc5, 0x73, 0x6d, 0xb3, 0x4d, 0x8e, 0x58, 0x32, 0x2c, 0x04, 0x79, + 0x9d, 0x81, 0xdc, 0xfa, 0x3a, 0xfe, 0x3b, 0x98, 0x57, 0x2b, 0xe7, 0xf0, 0xe3, 0x09, 0x4e, 0xac, + 0x9a, 0xed, 0x78, 0x12, 0xee, 0xf7, 0x04, 0x78, 0x10, 0x87, 0x7a, 0xd4, 0xcb, 0x55, 0x8d, 0xcc, + 0xfb, 0x0d, 0x86, 0xf0, 0x83, 0x0c, 0x08, 0xc7, 0x25, 0xbc, 0xca, 0x39, 0x5c, 0xec, 0x43, 0x1b, + 0x9b, 0x16, 0xfb, 0x15, 0x01, 0xee, 0xc4, 0x31, 0xf9, 0xd4, 0xf3, 0x03, 0x34, 0x9d, 0x81, 0x78, + 0x7c, 0x33, 0x75, 0xf7, 0x9b, 0x90, 0x7d, 0x2a, 0xe7, 0xf0, 0x72, 0x1f, 0x49, 0x52, 0x7a, 0xca, + 0x85, 0xa5, 0x38, 0x86, 0xe8, 0x9c, 0x1b, 0xed, 0x43, 0x73, 0x29, 0x29, 0x97, 0x71, 0xe9, 0x1f, + 0xbe, 0xed, 0x8e, 0x49, 0x0d, 0xb5, 0xa0, 0xd0, 0xb5, 0x83, 0x43, 0x98, 0xe9, 0x53, 0xd2, 0xa1, + 0x27, 0xec, 0x81, 0x2c, 0xdc, 0x71, 0xe7, 0x53, 0xae, 0xdc, 0x63, 0x13, 0x2f, 0xe5, 0x1c, 0xbe, + 0xd1, 0xb5, 0x47, 0x3b, 0xd1, 0x29, 0xdb, 0xe4, 0x87, 0xb5, 0x79, 0xe6, 0x71, 0xa4, 0xb2, 0x90, + 0x6a, 0xe1, 0x09, 0xe9, 0x1c, 0x3e, 0xd0, 0x64, 0x02, 0xf4, 0x23, 0x58, 0x49, 0x1a, 0x28, 0x4b, + 0xf7, 0x84, 0xca, 0x17, 0x52, 0x37, 0x98, 0x89, 0xa9, 0xa2, 0x72, 0x0e, 0x2f, 0x0e, 0x8f, 0xba, + 0x4f, 0x82, 0xfe, 0x8c, 0x87, 0x90, 0x61, 0x04, 0xfc, 0x49, 0x2c, 0x9e, 0x4e, 0x0a, 0xd1, 0x2c, + 0x32, 0x34, 0x72, 0x56, 0x34, 0x13, 0xb2, 0x52, 0xe5, 0x1c, 0xbe, 0x3f, 0x04, 0x2c, 0x99, 0x1a, + 0xfd, 0xa5, 0x00, 0xeb, 0x71, 0x17, 0xb4, 0xfb, 0x8f, 0x2a, 0xc4, 0x3c, 0xf1, 0x88, 0x63, 0x5b, + 0xcd, 0x68, 0x59, 0x84, 0x5e, 0xb9, 0x94, 0x7a, 0x85, 0xc8, 0x56, 0x00, 0x5d, 0xce, 0xe1, 0x47, + 0x7d, 0x2f, 0x8d, 0xd3, 0x9e, 0x78, 0x9a, 0x6d, 0x35, 0x07, 0x8a, 0xa5, 0x7f, 0x2c, 0xc0, 0xfd, + 0xe4, 0x23, 0x83, 0xe5, 0x11, 0xca, 0x9e, 0x7f, 0x42, 0x78, 0xb7, 0x32, 0x1f, 0xa1, 0x92, 0xeb, + 0x92, 0x07, 0x8f, 0x50, 0x3d, 0x1a, 0xcb, 0x8b, 0xd7, 0x2e, 0xfb, 0xdc, 0xad, 0x83, 0xfd, 0xd6, + 0x77, 0x08, 0xcf, 0xb3, 0xf0, 0x59, 0x0c, 0x51, 0x2c, 0xa7, 0x2e, 0xdd, 0xe4, 0x22, 0xdf, 0xd0, + 0xa3, 0x93, 0x0b, 0x80, 0x7f, 0x08, 0xd7, 0x4c, 0x96, 0xf0, 0x21, 0xfd, 0x74, 0x4b, 0xe1, 0x36, + 0xd3, 0x34, 0xfe, 0x81, 0x30, 0x31, 0x39, 0x59, 0xce, 0x61, 0xd1, 0x1c, 0xea, 0x88, 0x42, 0x62, + 0xdc, 0x05, 0x42, 0xcb, 0xb2, 0xe3, 0x71, 0x38, 0xb2, 0x95, 0xd4, 0x05, 0x3b, 0xe1, 0x51, 0x91, + 0x87, 0xc4, 0x49, 0xaf, 0x8e, 0xe1, 0x51, 0x39, 0x01, 0x44, 0xef, 0x15, 0x80, 0xe3, 0x58, 0x4d, + 0x9d, 0xe7, 0xc9, 0x6f, 0x8d, 0x7c, 0x9e, 0x53, 0xde, 0x23, 0x7f, 0x55, 0x60, 0x41, 0x24, 0xba, + 0x37, 0x7e, 0x16, 0xff, 0xa9, 0x4f, 0x74, 0x65, 0xbc, 0x93, 0xf5, 0xf6, 0x3a, 0xee, 0x87, 0x42, + 0x03, 0xb7, 0xd7, 0x04, 0x22, 0xf4, 0x29, 0x84, 0x93, 0x45, 0x68, 0x94, 0xab, 0x2d, 0x14, 0x99, + 0xd6, 0xef, 0xa4, 0x4c, 0xfb, 0x60, 0x6e, 0xb7, 0x9c, 0xc3, 0x57, 0xcd, 0xc1, 0x76, 0xd4, 0x86, + 0xf9, 0x50, 0x76, 0x10, 0xa0, 0xe2, 0x29, 0xde, 0xc2, 0xdd, 0x94, 0x37, 0xca, 0xf1, 0x99, 0xd6, + 0x72, 0x0e, 0xdf, 0x34, 0x93, 0x7a, 0xd1, 0x3e, 0xdc, 0xec, 0xbf, 0x92, 0xf0, 0xc0, 0xc8, 0xa7, + 0xf3, 0x1e, 0x53, 0xf6, 0xd6, 0x58, 0x65, 0x09, 0xaf, 0xb8, 0xe5, 0x1c, 0xbe, 0xee, 0x26, 0x3c, + 0xee, 0x9e, 0xc0, 0xad, 0x31, 0xcf, 0x88, 0x5c, 0xd5, 0xfd, 0x94, 0x71, 0x8d, 0x7f, 0xfa, 0x0c, + 0x02, 0xfe, 0xc1, 0xf8, 0x87, 0xd1, 0x7d, 0x08, 0x47, 0x4d, 0xc2, 0xdc, 0x80, 0xcb, 0x93, 0xc8, + 0x85, 0x07, 0x29, 0x83, 0x4b, 0x48, 0x3c, 0x07, 0x83, 0x33, 0x13, 0xf2, 0xd1, 0x15, 0xb8, 0xd2, + 0xd3, 0xc1, 0x66, 0xe9, 0x21, 0x93, 0x7d, 0x3f, 0x55, 0x76, 0x40, 0x5c, 0xce, 0xe1, 0xcb, 0x66, + 0x3c, 0x65, 0xbc, 0x07, 0x28, 0x9e, 0xc6, 0xe0, 0x33, 0x52, 0x78, 0x94, 0x52, 0x31, 0x32, 0x9c, + 0xb2, 0x65, 0xd1, 0x64, 0x38, 0x8d, 0x3b, 0x24, 0xba, 0xcb, 0x92, 0x8b, 0x85, 0xc7, 0x99, 0x45, + 0xf3, 0x6c, 0xe4, 0xa0, 0xe8, 0x30, 0x43, 0x39, 0x24, 0xda, 0x62, 0xb9, 0x9d, 0xc2, 0x5a, 0x66, + 0xd1, 0x3c, 0x19, 0x34, 0x28, 0x3a, 0x4c, 0x10, 0xb5, 0x60, 0x21, 0x2e, 0x9a, 0x27, 0x9c, 0x22, + 0xbb, 0x3c, 0x49, 0x79, 0x17, 0x48, 0xce, 0xd9, 0x96, 0x73, 0x78, 0xce, 0x4c, 0xce, 0xe6, 0x26, + 0x6b, 0x0b, 0x4d, 0xf5, 0xd6, 0x57, 0xd4, 0xd6, 0x33, 0xd8, 0x88, 0xb6, 0xd0, 0x6c, 0xc9, 0xda, + 0x42, 0xeb, 0x7d, 0xe7, 0x2b, 0x6a, 0xeb, 0xd9, 0x70, 0x44, 0x5b, 0x68, 0xc9, 0x36, 0x2c, 0xc6, + 0xb5, 0xb1, 0x7c, 0xaa, 0x17, 0xec, 0x96, 0x5d, 0x8f, 0xba, 0x85, 0xf5, 0xcc, 0xea, 0xe2, 0x59, + 0xdd, 0x41, 0x75, 0x03, 0xf9, 0xde, 0xdf, 0x12, 0xa0, 0x18, 0x3f, 0x20, 0xd0, 0xe6, 0x26, 0xbf, + 0x12, 0x77, 0xe2, 0xcf, 0x2c, 0x85, 0x8d, 0xd4, 0x37, 0xd9, 0xd4, 0x72, 0x5a, 0xfe, 0x26, 0xdb, + 0x23, 0x6b, 0x8e, 0x92, 0xa1, 0xd7, 0x30, 0x9f, 0xf0, 0xc2, 0x42, 0xed, 0x26, 0x2d, 0xbc, 0x9d, + 0x7a, 0xc4, 0x1e, 0x53, 0xcc, 0xca, 0x8f, 0xd8, 0x43, 0x9d, 0x76, 0x93, 0x0e, 0x2b, 0x8b, 0x8e, + 0x9b, 0x8e, 0x45, 0x0b, 0x4f, 0x33, 0x2b, 0x1b, 0x2a, 0x20, 0x1d, 0x54, 0xd6, 0xef, 0x44, 0x3f, + 0x80, 0x6b, 0xbe, 0x79, 0x18, 0xee, 0x43, 0x34, 0xd8, 0x10, 0xdd, 0xd3, 0xc2, 0x66, 0xca, 0x5e, + 0x94, 0x94, 0x5a, 0x09, 0xf6, 0x22, 0xdf, 0x3c, 0x8c, 0xb7, 0x23, 0x1f, 0x16, 0xbd, 0x30, 0x19, + 0x42, 0x5c, 0x26, 0x89, 0x1c, 0x52, 0xf6, 0x90, 0xdd, 0x6d, 0xf9, 0x85, 0x77, 0x52, 0x9e, 0xa4, + 0x26, 0xe5, 0x51, 0xca, 0x39, 0x3c, 0xef, 0x25, 0xf7, 0x0f, 0x2f, 0x8b, 0x30, 0x95, 0x1b, 0x2e, + 0xf9, 0x67, 0x99, 0xfd, 0x34, 0x5e, 0x00, 0x30, 0xe8, 0xa7, 0x03, 0xa5, 0x01, 0xc9, 0xda, 0xc2, + 0x45, 0xf8, 0xee, 0x57, 0xd4, 0x96, 0xb4, 0x08, 0x07, 0xf2, 0xdd, 0xfb, 0x70, 0x33, 0x72, 0x8c, + 0x53, 0x72, 0x40, 0xfd, 0xe6, 0xab, 0x70, 0x0f, 0x7c, 0x2f, 0x65, 0x47, 0x4a, 0x48, 0x26, 0x05, + 0x3b, 0x92, 0x35, 0xda, 0xbc, 0x75, 0x01, 0xa6, 0x19, 0xdf, 0xc7, 0xe7, 0x66, 0xf2, 0xe2, 0x54, + 0x70, 0x94, 0xe9, 0x9d, 0x97, 0x82, 0xd9, 0x8b, 0x9e, 0x56, 0xd9, 0xe9, 0x78, 0xed, 0xef, 0x66, + 0xfb, 0xbf, 0xde, 0x8d, 0xb6, 0x74, 0x74, 0x07, 0x96, 0x4b, 0xaa, 0x2e, 0x6b, 0x2f, 0x14, 0x4c, + 0xb0, 0xa2, 0x6b, 0x0d, 0x2c, 0x0f, 0xff, 0xee, 0xe8, 0x16, 0x14, 0x46, 0x49, 0x74, 0x05, 0xbf, + 0x50, 0xb0, 0x28, 0xa0, 0x55, 0xb8, 0x35, 0xda, 0xbb, 0xdb, 0xd8, 0x52, 0x70, 0x4d, 0x31, 0x14, + 0x5d, 0xcc, 0xa3, 0x77, 0x60, 0x63, 0x94, 0xa2, 0x24, 0x19, 0xd2, 0x96, 0xa4, 0x2b, 0xa4, 0xae, + 0xe9, 0xc6, 0x0e, 0x56, 0x74, 0xa2, 0x2b, 0x95, 0x6d, 0x52, 0xd6, 0x74, 0x43, 0x29, 0x89, 0x53, + 0xe8, 0x6d, 0x78, 0x6b, 0x02, 0x53, 0x75, 0x4f, 0xff, 0xa4, 0x32, 0xc0, 0x71, 0x0e, 0x6d, 0xc2, + 0xfa, 0x24, 0x0e, 0xad, 0xb6, 0xa3, 0x95, 0xb6, 0x06, 0x78, 0xa6, 0xd1, 0x13, 0x78, 0x98, 0x05, + 0x1a, 0x2e, 0xe9, 0xe2, 0x79, 0xf4, 0x08, 0xee, 0xa5, 0x42, 0x0a, 0x28, 0x2f, 0xa0, 0x07, 0x50, + 0x1c, 0xa5, 0x94, 0xea, 0xf5, 0x8a, 0x2a, 0x4b, 0x86, 0xaa, 0xd5, 0x48, 0xd9, 0x30, 0xea, 0xe2, + 0x0c, 0xba, 0x0f, 0x77, 0x26, 0xd3, 0x19, 0x72, 0x5d, 0xbc, 0x98, 0x4c, 0xf6, 0x52, 0xad, 0x95, + 0xb4, 0x97, 0x3a, 0x29, 0x29, 0xfa, 0xae, 0xa1, 0xd5, 0x45, 0x40, 0x6f, 0xc1, 0xa3, 0x09, 0xf8, + 0xf4, 0x4f, 0x2a, 0x7c, 0xce, 0x18, 0xc6, 0x4b, 0x29, 0x06, 0xee, 0x0f, 0x5d, 0x29, 0xe9, 0x65, + 0x75, 0xdb, 0x10, 0x2f, 0xa3, 0x67, 0xf0, 0x76, 0x26, 0xf9, 0x71, 0x13, 0x5f, 0x49, 0xd1, 0x83, + 0x95, 0x92, 0x3a, 0x38, 0xf5, 0xb3, 0x59, 0x27, 0x65, 0x47, 0xae, 0x8b, 0x57, 0x33, 0x4d, 0x4a, + 0x40, 0x29, 0x66, 0x36, 0x4f, 0x40, 0x7d, 0x0d, 0x7d, 0x00, 0xef, 0x7f, 0x15, 0xf3, 0x84, 0xeb, + 0xa1, 0xa2, 0xe8, 0xba, 0x88, 0xd0, 0x77, 0xe0, 0x71, 0x16, 0x66, 0xe9, 0xd3, 0x06, 0x56, 0xc4, + 0xeb, 0xe8, 0x21, 0xdc, 0x9d, 0x40, 0x5e, 0xda, 0xab, 0x49, 0x55, 0xad, 0xb4, 0x25, 0xde, 0x48, + 0x71, 0x71, 0x59, 0xd2, 0x75, 0xa9, 0x56, 0xc2, 0x12, 0xd9, 0x55, 0xf6, 0xf4, 0xba, 0x24, 0x2b, + 0xba, 0x78, 0x33, 0x65, 0xd6, 0xfa, 0x3c, 0xf1, 0x39, 0x98, 0x43, 0xcf, 0xe1, 0xd9, 0x04, 0x2e, + 0xa5, 0x22, 0xe9, 0x86, 0x2a, 0xeb, 0x8a, 0x84, 0xe5, 0xf2, 0x00, 0xe7, 0x7c, 0xa6, 0xf9, 0x0e, + 0xf9, 0x25, 0xb9, 0xac, 0x88, 0x85, 0x14, 0x6b, 0x71, 0x8e, 0xaa, 0x52, 0xd5, 0xf0, 0x5e, 0x69, + 0x4b, 0x5c, 0xc8, 0xa4, 0x80, 0x59, 0x96, 0x70, 0x05, 0x8b, 0x29, 0x83, 0xe1, 0x1c, 0x72, 0xa5, + 0xa1, 0x1b, 0x43, 0xce, 0xbb, 0x84, 0xd6, 0xe0, 0x41, 0xaa, 0x77, 0xf1, 0x59, 0xbc, 0x85, 0xd6, + 0x61, 0x2d, 0x93, 0x7f, 0x71, 0xfa, 0xe5, 0x94, 0xc9, 0xec, 0xd3, 0x57, 0x55, 0x19, 0x6b, 0xba, + 0xb6, 0x6d, 0x88, 0xb7, 0xd1, 0x7b, 0xb0, 0x39, 0x69, 0x32, 0x35, 0x79, 0x17, 0x6b, 0x92, 0x5c, + 0x1e, 0x8a, 0x73, 0x2b, 0x29, 0xbe, 0x1f, 0xc5, 0x46, 0xc9, 0xa8, 0x48, 0xba, 0xb8, 0x9a, 0xb2, + 0xa6, 0xf4, 0x9a, 0xf6, 0x72, 0xbb, 0x22, 0xed, 0x2a, 0xe2, 0x9d, 0x31, 0x72, 0x35, 0x39, 0x66, + 0xdd, 0x92, 0x4e, 0xea, 0x58, 0xfb, 0xfe, 0x9e, 0x58, 0x1c, 0xe3, 0x8a, 0x71, 0xea, 0xb2, 0xba, + 0x53, 0x26, 0xd2, 0x0b, 0x49, 0xad, 0x48, 0x5b, 0x6a, 0x45, 0x35, 0xf6, 0xc4, 0xbb, 0xe8, 0x7d, + 0x78, 0x27, 0x85, 0x8b, 0xad, 0x10, 0x55, 0x26, 0x58, 0xd9, 0x51, 0x75, 0x03, 0xb3, 0xd0, 0x29, + 0xde, 0x4b, 0x8e, 0xc2, 0xba, 0x54, 0xad, 0xc4, 0x43, 0xac, 0x78, 0x1f, 0x15, 0xe1, 0xf6, 0x28, + 0x9d, 0x22, 0x6f, 0xf2, 0x5f, 0xd8, 0xd6, 0x64, 0x45, 0x7c, 0xb0, 0xf6, 0xe7, 0x02, 0xcc, 0x0e, + 0xfe, 0x6b, 0x04, 0x5a, 0x81, 0xa5, 0x1e, 0x9b, 0x6e, 0x48, 0x46, 0x43, 0x1f, 0xda, 0x37, 0x97, + 0x60, 0x7e, 0x98, 0x40, 0x6f, 0xc8, 0x72, 0x10, 0x22, 0x84, 0xc4, 0xce, 0x5d, 0xb5, 0x5e, 0x57, + 0x4a, 0x62, 0x1e, 0x2d, 0xc0, 0xcd, 0xe1, 0x4e, 0x05, 0x63, 0x0d, 0x8b, 0x53, 0x49, 0x7c, 0xd2, + 0x96, 0x86, 0xd9, 0x16, 0xb8, 0xf6, 0x87, 0x79, 0x98, 0x92, 0x0d, 0x09, 0x5d, 0x87, 0xab, 0xb2, + 0x21, 0x8d, 0xfe, 0x36, 0x39, 0x68, 0x94, 0x1a, 0x46, 0x99, 0xc8, 0x5a, 0xad, 0xa6, 0xc8, 0x86, + 0x16, 0x6c, 0xe0, 0xf3, 0x70, 0x9d, 0xb5, 0xcb, 0x86, 0xfa, 0x22, 0xd8, 0xd7, 0x75, 0x5d, 0xd5, + 0x6a, 0xc1, 0xbe, 0xdd, 0xeb, 0x08, 0x20, 0x13, 0xac, 0x7c, 0xd2, 0x50, 0x74, 0x43, 0x17, 0xa7, + 0xa2, 0x8e, 0x3a, 0x56, 0xaa, 0x6a, 0xa3, 0x4a, 0xf4, 0x46, 0xbd, 0xae, 0x61, 0x43, 0x3c, 0x17, + 0x75, 0x18, 0x38, 0x58, 0x4b, 0x25, 0x52, 0x52, 0x5e, 0xa8, 0x41, 0x10, 0x9a, 0x8e, 0x74, 0x37, + 0xea, 0x3b, 0x58, 0x2a, 0x29, 0x64, 0x4b, 0xaa, 0xd5, 0x14, 0x2c, 0x9e, 0x8f, 0x18, 0xb6, 0xd4, + 0x4a, 0x45, 0xad, 0xed, 0x10, 0xbd, 0x51, 0xad, 0x4a, 0x78, 0x4f, 0xbc, 0x10, 0x8d, 0x20, 0xd4, + 0x5d, 0x51, 0x75, 0x43, 0x9c, 0x09, 0xcc, 0x12, 0x6b, 0xac, 0x6a, 0x35, 0xd5, 0xd0, 0xb0, 0x5a, + 0xdb, 0x11, 0x2f, 0xa2, 0xdb, 0xb0, 0x18, 0x74, 0x29, 0xdf, 0x37, 0x14, 0x5c, 0x93, 0x2a, 0x44, + 0x6a, 0x94, 0x54, 0x83, 0xe8, 0x86, 0x86, 0xa5, 0x1d, 0x45, 0x84, 0xb5, 0x3f, 0x3e, 0x0f, 0x37, + 0x13, 0xcb, 0xf5, 0x82, 0xe0, 0xab, 0xd6, 0x0c, 0x65, 0x87, 0xbb, 0x0d, 0x51, 0x6a, 0x58, 0xab, + 0x54, 0xc8, 0xae, 0x5a, 0x1b, 0xfe, 0x6d, 0xf7, 0x1d, 0x58, 0x1e, 0x47, 0xa8, 0x57, 0x24, 0x79, + 0x57, 0x14, 0xd0, 0x3d, 0x58, 0x1d, 0x47, 0x22, 0xbd, 0xd4, 0x89, 0xa6, 0x96, 0x64, 0x31, 0x1f, + 0x6c, 0xe7, 0xe3, 0xa8, 0xea, 0xd2, 0x8e, 0x82, 0x4b, 0x0d, 0x63, 0x4f, 0x9c, 0x9a, 0xa4, 0x4f, + 0xa9, 0x4a, 0x6a, 0x45, 0x3c, 0x17, 0x9c, 0xbd, 0xc6, 0x91, 0x7c, 0xac, 0x62, 0x49, 0x9c, 0x46, + 0x77, 0x61, 0x65, 0x1c, 0x05, 0x73, 0x23, 0x5c, 0x12, 0xcf, 0x07, 0x0b, 0x65, 0x1c, 0x51, 0x55, + 0x32, 0x0c, 0x05, 0x57, 0x35, 0xdd, 0x10, 0x2f, 0x4c, 0x1a, 0x5e, 0x55, 0x27, 0x86, 0x22, 0x55, + 0x75, 0x71, 0x66, 0x12, 0x95, 0x56, 0xd7, 0x77, 0x94, 0x9a, 0xaa, 0x88, 0x17, 0x27, 0x41, 0xd7, + 0x76, 0x0d, 0x49, 0x84, 0x89, 0x83, 0x93, 0xaa, 0xdb, 0xe2, 0xa5, 0xc9, 0xb8, 0xe5, 0xb2, 0x5a, + 0x53, 0x88, 0x5a, 0x12, 0x2f, 0xa3, 0x77, 0xe1, 0x69, 0x3a, 0x1d, 0xd9, 0x51, 0x8d, 0x72, 0x63, + 0x8b, 0xad, 0x83, 0xc0, 0xff, 0xaf, 0xa0, 0x0d, 0x78, 0x92, 0x81, 0x4d, 0x56, 0xb1, 0x5c, 0x51, + 0x64, 0x55, 0x9c, 0x0d, 0x36, 0xb2, 0x6c, 0x7a, 0x2a, 0xd2, 0x96, 0x78, 0x35, 0xd8, 0x30, 0x32, + 0x90, 0x7f, 0xac, 0xd4, 0x76, 0xd5, 0x9a, 0x2e, 0x8a, 0x19, 0xe9, 0xa5, 0x9a, 0xae, 0x6e, 0x55, + 0x14, 0xf1, 0xda, 0x24, 0xf3, 0x04, 0x5b, 0x8b, 0x2a, 0x2b, 0x35, 0xed, 0xa5, 0x88, 0xd6, 0x3e, + 0x82, 0x0b, 0xe1, 0xb3, 0x5b, 0xb0, 0x1e, 0xb7, 0x15, 0xc9, 0x08, 0x36, 0xcf, 0x91, 0x58, 0x16, + 0x75, 0x0c, 0xaf, 0x6e, 0x61, 0xed, 0x4f, 0x05, 0x58, 0x9a, 0x50, 0xfe, 0x17, 0xd8, 0x25, 0x62, + 0xc6, 0x8a, 0xac, 0x55, 0xab, 0x4a, 0xad, 0xc4, 0x31, 0x25, 0xc6, 0xcd, 0x35, 0x78, 0x30, 0x99, + 0xbc, 0xa6, 0x19, 0x9c, 0x56, 0x08, 0xc6, 0x38, 0x99, 0xb6, 0xa4, 0xd5, 0x14, 0x31, 0xbf, 0xf5, + 0xc3, 0x7f, 0xfc, 0xf2, 0xb6, 0xf0, 0x4f, 0x5f, 0xde, 0x16, 0xfe, 0xf5, 0xcb, 0xdb, 0xc2, 0xa7, + 0xda, 0xa1, 0xed, 0xbf, 0xea, 0xee, 0xaf, 0x37, 0x9d, 0xf6, 0xc6, 0xa1, 0x6b, 0x1e, 0xdb, 0x3c, + 0x2d, 0x63, 0xb6, 0x36, 0x7a, 0xff, 0xd3, 0x65, 0x1e, 0xd9, 0x1b, 0x87, 0xb4, 0xb3, 0xc1, 0x4a, + 0x35, 0x37, 0x0e, 0x9d, 0xa1, 0x3f, 0xee, 0xfa, 0x20, 0xf6, 0xf5, 0xf8, 0xe9, 0xfe, 0x79, 0x46, + 0xf6, 0xce, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x6a, 0x95, 0x35, 0xde, 0xe8, 0x4b, 0x00, 0x00, } func (m *UIBannerClickEvent) Marshal() (dAtA []byte, err error) { @@ -7681,6 +7759,47 @@ func (m *SecurityReportGetResultEvent) MarshalToSizedBuffer(dAtA []byte) (int, e return len(dAtA) - i, nil } +func (m *DiscoveryFetchEvent) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *DiscoveryFetchEvent) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *DiscoveryFetchEvent) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.XXX_unrecognized != nil { + i -= len(m.XXX_unrecognized) + copy(dAtA[i:], m.XXX_unrecognized) + } + if len(m.ResourceType) > 0 { + i -= len(m.ResourceType) + copy(dAtA[i:], m.ResourceType) + i = encodeVarintUsageevents(dAtA, i, uint64(len(m.ResourceType))) + i-- + dAtA[i] = 0x12 + } + if len(m.CloudProvider) > 0 { + i -= len(m.CloudProvider) + copy(dAtA[i:], m.CloudProvider) + i = encodeVarintUsageevents(dAtA, i, uint64(len(m.CloudProvider))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *UsageEventOneOf) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -8885,6 +9004,29 @@ func (m *UsageEventOneOf_AccessListReviewDelete) MarshalToSizedBuffer(dAtA []byt } return len(dAtA) - i, nil } +func (m *UsageEventOneOf_DiscoveryFetchEvent) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *UsageEventOneOf_DiscoveryFetchEvent) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + if m.DiscoveryFetchEvent != nil { + { + size, err := m.DiscoveryFetchEvent.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintUsageevents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3 + i-- + dAtA[i] = 0xb2 + } + return len(dAtA) - i, nil +} func encodeVarintUsageevents(dAtA []byte, offset int, v uint64) int { offset -= sovUsageevents(v) base := offset @@ -10050,6 +10192,26 @@ func (m *SecurityReportGetResultEvent) Size() (n int) { return n } +func (m *DiscoveryFetchEvent) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.CloudProvider) + if l > 0 { + n += 1 + l + sovUsageevents(uint64(l)) + } + l = len(m.ResourceType) + if l > 0 { + n += 1 + l + sovUsageevents(uint64(l)) + } + if m.XXX_unrecognized != nil { + n += len(m.XXX_unrecognized) + } + return n +} + func (m *UsageEventOneOf) Size() (n int) { if m == nil { return 0 @@ -10689,6 +10851,18 @@ func (m *UsageEventOneOf_AccessListReviewDelete) Size() (n int) { } return n } +func (m *UsageEventOneOf_DiscoveryFetchEvent) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.DiscoveryFetchEvent != nil { + l = m.DiscoveryFetchEvent.Size() + n += 2 + l + sovUsageevents(uint64(l)) + } + return n +} func sovUsageevents(x uint64) (n int) { return (math_bits.Len64(x|1) + 6) / 7 @@ -17396,6 +17570,121 @@ func (m *SecurityReportGetResultEvent) Unmarshal(dAtA []byte) error { } return nil } +func (m *DiscoveryFetchEvent) 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 ErrIntOverflowUsageevents + } + 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: DiscoveryFetchEvent: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: DiscoveryFetchEvent: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CloudProvider", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowUsageevents + } + 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 ErrInvalidLengthUsageevents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthUsageevents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CloudProvider = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ResourceType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowUsageevents + } + 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 ErrInvalidLengthUsageevents + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthUsageevents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ResourceType = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipUsageevents(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthUsageevents + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + m.XXX_unrecognized = append(m.XXX_unrecognized, dAtA[iNdEx:iNdEx+skippy]...) + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *UsageEventOneOf) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 @@ -19245,6 +19534,41 @@ func (m *UsageEventOneOf) Unmarshal(dAtA []byte) error { } m.Event = &UsageEventOneOf_AccessListReviewDelete{v} iNdEx = postIndex + case 54: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DiscoveryFetchEvent", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowUsageevents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthUsageevents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthUsageevents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + v := &DiscoveryFetchEvent{} + if err := v.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + m.Event = &UsageEventOneOf_DiscoveryFetchEvent{v} + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipUsageevents(dAtA[iNdEx:]) diff --git a/api/proto/teleport/usageevents/v1/usageevents.proto b/api/proto/teleport/usageevents/v1/usageevents.proto index e9c8f8df56b57..b59cfc8a08f30 100644 --- a/api/proto/teleport/usageevents/v1/usageevents.proto +++ b/api/proto/teleport/usageevents/v1/usageevents.proto @@ -628,6 +628,18 @@ message SecurityReportGetResultEvent { int32 days = 2; } +// DiscoveryFetchEvent is emitted when a DiscoveryService polls for new resources of a given type +message DiscoveryFetchEvent { + // cloud_provider is the cloud provider used to fetch resources + // Eg, AWS, Azure, GCP, Kubernetes + string cloud_provider = 1; + + // resource_type is the type of resource that this fetch is polling. + // It depends on the Cloud Provider (defined above). + // Eg, rds, ec2, vm, aks, gce, app + string resource_type = 2; +} + // UsageEventOneOf is a message that can accept a oneof of any supported // external usage event. message UsageEventOneOf { @@ -684,6 +696,7 @@ message UsageEventOneOf { SecurityReportGetResultEvent security_report_get_result = 51; AccessListReviewCreate access_list_review_create = 52; AccessListReviewDelete access_list_review_delete = 53; + DiscoveryFetchEvent discovery_fetch_event = 54; } reserved 2; //UIOnboardGetStartedClickEvent reserved "ui_onboard_get_started_click"; diff --git a/gen/proto/go/prehog/v1alpha/teleport.pb.go b/gen/proto/go/prehog/v1alpha/teleport.pb.go index f1c263741c662..fa9c1d4716889 100644 --- a/gen/proto/go/prehog/v1alpha/teleport.pb.go +++ b/gen/proto/go/prehog/v1alpha/teleport.pb.go @@ -6117,6 +6117,71 @@ func (x *AuditQueryRunEvent) GetIsSuccess() bool { return false } +// DiscoveryFetchEvent is emitted when a DiscoveryService polls for new resources of a given type +type DiscoveryFetchEvent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // cloud_provider is the cloud provider used to fetch resources + // Eg, AWS, Azure, GCP, Kubernetes + // + // PostHog property: tp.cloud + CloudProvider string `protobuf:"bytes,1,opt,name=cloud_provider,json=cloudProvider,proto3" json:"cloud_provider,omitempty"` + // resource_type is the type of resource that this fetch is polling. + // It depends on the Cloud Provider (defined above). + // Eg, rds, ec2, vm, aks, gce, app + // + // PostHog property: tp.resource_type + ResourceType string `protobuf:"bytes,2,opt,name=resource_type,json=resourceType,proto3" json:"resource_type,omitempty"` +} + +func (x *DiscoveryFetchEvent) Reset() { + *x = DiscoveryFetchEvent{} + if protoimpl.UnsafeEnabled { + mi := &file_prehog_v1alpha_teleport_proto_msgTypes[80] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DiscoveryFetchEvent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DiscoveryFetchEvent) ProtoMessage() {} + +func (x *DiscoveryFetchEvent) ProtoReflect() protoreflect.Message { + mi := &file_prehog_v1alpha_teleport_proto_msgTypes[80] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DiscoveryFetchEvent.ProtoReflect.Descriptor instead. +func (*DiscoveryFetchEvent) Descriptor() ([]byte, []int) { + return file_prehog_v1alpha_teleport_proto_rawDescGZIP(), []int{80} +} + +func (x *DiscoveryFetchEvent) GetCloudProvider() string { + if x != nil { + return x.CloudProvider + } + return "" +} + +func (x *DiscoveryFetchEvent) GetResourceType() string { + if x != nil { + return x.ResourceType + } + return "" +} + type SubmitEventRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -6204,6 +6269,7 @@ type SubmitEventRequest struct { // *SubmitEventRequest_ExternalAuditStorageAuthenticate // *SubmitEventRequest_SecurityReportGetResult // *SubmitEventRequest_AuditQueryRun + // *SubmitEventRequest_DiscoveryFetchEvent // *SubmitEventRequest_AccessListReviewCreate // *SubmitEventRequest_AccessListReviewDelete // *SubmitEventRequest_AccessListReviewCompliance @@ -6213,7 +6279,7 @@ type SubmitEventRequest struct { func (x *SubmitEventRequest) Reset() { *x = SubmitEventRequest{} if protoimpl.UnsafeEnabled { - mi := &file_prehog_v1alpha_teleport_proto_msgTypes[80] + mi := &file_prehog_v1alpha_teleport_proto_msgTypes[81] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6226,7 +6292,7 @@ func (x *SubmitEventRequest) String() string { func (*SubmitEventRequest) ProtoMessage() {} func (x *SubmitEventRequest) ProtoReflect() protoreflect.Message { - mi := &file_prehog_v1alpha_teleport_proto_msgTypes[80] + mi := &file_prehog_v1alpha_teleport_proto_msgTypes[81] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6239,7 +6305,7 @@ func (x *SubmitEventRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SubmitEventRequest.ProtoReflect.Descriptor instead. func (*SubmitEventRequest) Descriptor() ([]byte, []int) { - return file_prehog_v1alpha_teleport_proto_rawDescGZIP(), []int{80} + return file_prehog_v1alpha_teleport_proto_rawDescGZIP(), []int{81} } func (x *SubmitEventRequest) GetClusterName() string { @@ -6753,6 +6819,13 @@ func (x *SubmitEventRequest) GetAuditQueryRun() *AuditQueryRunEvent { return nil } +func (x *SubmitEventRequest) GetDiscoveryFetchEvent() *DiscoveryFetchEvent { + if x, ok := x.GetEvent().(*SubmitEventRequest_DiscoveryFetchEvent); ok { + return x.DiscoveryFetchEvent + } + return nil +} + func (x *SubmitEventRequest) GetAccessListReviewCreate() *AccessListReviewCreateEvent { if x, ok := x.GetEvent().(*SubmitEventRequest_AccessListReviewCreate); ok { return x.AccessListReviewCreate @@ -7063,6 +7136,10 @@ type SubmitEventRequest_AuditQueryRun struct { AuditQueryRun *AuditQueryRunEvent `protobuf:"bytes,73,opt,name=audit_query_run,json=auditQueryRun,proto3,oneof"` } +type SubmitEventRequest_DiscoveryFetchEvent struct { + DiscoveryFetchEvent *DiscoveryFetchEvent `protobuf:"bytes,74,opt,name=discovery_fetch_event,json=discoveryFetchEvent,proto3,oneof"` +} + type SubmitEventRequest_AccessListReviewCreate struct { AccessListReviewCreate *AccessListReviewCreateEvent `protobuf:"bytes,75,opt,name=access_list_review_create,json=accessListReviewCreate,proto3,oneof"` } @@ -7217,6 +7294,8 @@ func (*SubmitEventRequest_SecurityReportGetResult) isSubmitEventRequest_Event() func (*SubmitEventRequest_AuditQueryRun) isSubmitEventRequest_Event() {} +func (*SubmitEventRequest_DiscoveryFetchEvent) isSubmitEventRequest_Event() {} + func (*SubmitEventRequest_AccessListReviewCreate) isSubmitEventRequest_Event() {} func (*SubmitEventRequest_AccessListReviewDelete) isSubmitEventRequest_Event() {} @@ -7232,7 +7311,7 @@ type SubmitEventResponse struct { func (x *SubmitEventResponse) Reset() { *x = SubmitEventResponse{} if protoimpl.UnsafeEnabled { - mi := &file_prehog_v1alpha_teleport_proto_msgTypes[81] + mi := &file_prehog_v1alpha_teleport_proto_msgTypes[82] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7245,7 +7324,7 @@ func (x *SubmitEventResponse) String() string { func (*SubmitEventResponse) ProtoMessage() {} func (x *SubmitEventResponse) ProtoReflect() protoreflect.Message { - mi := &file_prehog_v1alpha_teleport_proto_msgTypes[81] + mi := &file_prehog_v1alpha_teleport_proto_msgTypes[82] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7258,7 +7337,7 @@ func (x *SubmitEventResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SubmitEventResponse.ProtoReflect.Descriptor instead. func (*SubmitEventResponse) Descriptor() ([]byte, []int) { - return file_prehog_v1alpha_teleport_proto_rawDescGZIP(), []int{81} + return file_prehog_v1alpha_teleport_proto_rawDescGZIP(), []int{82} } type SubmitEventsRequest struct { @@ -7273,7 +7352,7 @@ type SubmitEventsRequest struct { func (x *SubmitEventsRequest) Reset() { *x = SubmitEventsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_prehog_v1alpha_teleport_proto_msgTypes[82] + mi := &file_prehog_v1alpha_teleport_proto_msgTypes[83] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7286,7 +7365,7 @@ func (x *SubmitEventsRequest) String() string { func (*SubmitEventsRequest) ProtoMessage() {} func (x *SubmitEventsRequest) ProtoReflect() protoreflect.Message { - mi := &file_prehog_v1alpha_teleport_proto_msgTypes[82] + mi := &file_prehog_v1alpha_teleport_proto_msgTypes[83] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7299,7 +7378,7 @@ func (x *SubmitEventsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SubmitEventsRequest.ProtoReflect.Descriptor instead. func (*SubmitEventsRequest) Descriptor() ([]byte, []int) { - return file_prehog_v1alpha_teleport_proto_rawDescGZIP(), []int{82} + return file_prehog_v1alpha_teleport_proto_rawDescGZIP(), []int{83} } func (x *SubmitEventsRequest) GetEvents() []*SubmitEventRequest { @@ -7318,7 +7397,7 @@ type SubmitEventsResponse struct { func (x *SubmitEventsResponse) Reset() { *x = SubmitEventsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_prehog_v1alpha_teleport_proto_msgTypes[83] + mi := &file_prehog_v1alpha_teleport_proto_msgTypes[84] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7331,7 +7410,7 @@ func (x *SubmitEventsResponse) String() string { func (*SubmitEventsResponse) ProtoMessage() {} func (x *SubmitEventsResponse) ProtoReflect() protoreflect.Message { - mi := &file_prehog_v1alpha_teleport_proto_msgTypes[83] + mi := &file_prehog_v1alpha_teleport_proto_msgTypes[84] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7344,7 +7423,7 @@ func (x *SubmitEventsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SubmitEventsResponse.ProtoReflect.Descriptor instead. func (*SubmitEventsResponse) Descriptor() ([]byte, []int) { - return file_prehog_v1alpha_teleport_proto_rawDescGZIP(), []int{83} + return file_prehog_v1alpha_teleport_proto_rawDescGZIP(), []int{84} } type HelloTeleportRequest struct { @@ -7356,7 +7435,7 @@ type HelloTeleportRequest struct { func (x *HelloTeleportRequest) Reset() { *x = HelloTeleportRequest{} if protoimpl.UnsafeEnabled { - mi := &file_prehog_v1alpha_teleport_proto_msgTypes[84] + mi := &file_prehog_v1alpha_teleport_proto_msgTypes[85] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7369,7 +7448,7 @@ func (x *HelloTeleportRequest) String() string { func (*HelloTeleportRequest) ProtoMessage() {} func (x *HelloTeleportRequest) ProtoReflect() protoreflect.Message { - mi := &file_prehog_v1alpha_teleport_proto_msgTypes[84] + mi := &file_prehog_v1alpha_teleport_proto_msgTypes[85] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7382,7 +7461,7 @@ func (x *HelloTeleportRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use HelloTeleportRequest.ProtoReflect.Descriptor instead. func (*HelloTeleportRequest) Descriptor() ([]byte, []int) { - return file_prehog_v1alpha_teleport_proto_rawDescGZIP(), []int{84} + return file_prehog_v1alpha_teleport_proto_rawDescGZIP(), []int{85} } type HelloTeleportResponse struct { @@ -7394,7 +7473,7 @@ type HelloTeleportResponse struct { func (x *HelloTeleportResponse) Reset() { *x = HelloTeleportResponse{} if protoimpl.UnsafeEnabled { - mi := &file_prehog_v1alpha_teleport_proto_msgTypes[85] + mi := &file_prehog_v1alpha_teleport_proto_msgTypes[86] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7407,7 +7486,7 @@ func (x *HelloTeleportResponse) String() string { func (*HelloTeleportResponse) ProtoMessage() {} func (x *HelloTeleportResponse) ProtoReflect() protoreflect.Message { - mi := &file_prehog_v1alpha_teleport_proto_msgTypes[85] + mi := &file_prehog_v1alpha_teleport_proto_msgTypes[86] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7420,7 +7499,7 @@ func (x *HelloTeleportResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use HelloTeleportResponse.ProtoReflect.Descriptor instead. func (*HelloTeleportResponse) Descriptor() ([]byte, []int) { - return file_prehog_v1alpha_teleport_proto_rawDescGZIP(), []int{85} + return file_prehog_v1alpha_teleport_proto_rawDescGZIP(), []int{86} } var File_prehog_v1alpha_teleport_proto protoreflect.FileDescriptor @@ -8212,809 +8291,821 @@ var file_prehog_v1alpha_teleport_proto_rawDesc = []byte{ 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x79, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x64, 0x61, 0x79, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x09, 0x69, 0x73, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x85, 0x3f, 0x0a, - 0x12, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x12, 0x3f, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x67, 0x69, - 0x6e, 0x12, 0x3f, 0x0a, 0x0a, 0x73, 0x73, 0x6f, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x53, 0x4f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x73, 0x73, 0x6f, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x12, 0x4e, 0x0a, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, - 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x12, 0x48, 0x0a, 0x0d, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x65, 0x68, - 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, - 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x4c, 0x0a, 0x0f, - 0x75, 0x69, 0x5f, 0x62, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x43, - 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x75, 0x69, 0x42, - 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x92, 0x01, 0x0a, 0x29, 0x75, - 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, - 0x74, 0x65, 0x5f, 0x67, 0x6f, 0x5f, 0x74, 0x6f, 0x5f, 0x64, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, - 0x72, 0x64, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, + 0x08, 0x52, 0x09, 0x69, 0x73, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x61, 0x0a, 0x13, + 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x46, 0x65, 0x74, 0x63, 0x68, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6c, 0x6f, + 0x75, 0x64, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, + 0xe0, 0x3f, 0x0a, 0x12, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, + 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x12, 0x3f, 0x0a, 0x0a, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6c, 0x6f, 0x67, 0x69, + 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x6f, 0x67, + 0x69, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x75, 0x73, 0x65, 0x72, 0x4c, + 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x3f, 0x0a, 0x0a, 0x73, 0x73, 0x6f, 0x5f, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x53, 0x4f, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x73, 0x73, 0x6f, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x4e, 0x0a, 0x0f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, - 0x55, 0x49, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, - 0x65, 0x47, 0x6f, 0x54, 0x6f, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x43, 0x6c, - 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x23, 0x75, 0x69, 0x4f, 0x6e, - 0x62, 0x6f, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x6f, 0x54, - 0x6f, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, - 0x82, 0x01, 0x0a, 0x23, 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x61, - 0x64, 0x64, 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, - 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, - 0x49, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x41, 0x64, 0x64, 0x46, 0x69, 0x72, 0x73, 0x74, - 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1e, 0x75, 0x69, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x41, - 0x64, 0x64, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, - 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x92, 0x01, 0x0a, 0x29, 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, - 0x61, 0x72, 0x64, 0x5f, 0x61, 0x64, 0x64, 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x72, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x69, - 0x63, 0x6b, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x48, 0x0a, 0x0d, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, + 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x0c, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, + 0x4c, 0x0a, 0x0f, 0x75, 0x69, 0x5f, 0x62, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x69, + 0x63, 0x6b, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x42, 0x61, 0x6e, 0x6e, + 0x65, 0x72, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0d, + 0x75, 0x69, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x92, 0x01, + 0x0a, 0x29, 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x6d, + 0x70, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x67, 0x6f, 0x5f, 0x74, 0x6f, 0x5f, 0x64, 0x61, 0x73, 0x68, + 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x2e, 0x55, 0x49, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, + 0x6c, 0x65, 0x74, 0x65, 0x47, 0x6f, 0x54, 0x6f, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, + 0x64, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x23, 0x75, + 0x69, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, + 0x47, 0x6f, 0x54, 0x6f, 0x44, 0x61, 0x73, 0x68, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x43, 0x6c, 0x69, + 0x63, 0x6b, 0x12, 0x82, 0x01, 0x0a, 0x23, 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, + 0x64, 0x5f, 0x61, 0x64, 0x64, 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x33, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x2e, 0x55, 0x49, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x41, 0x64, 0x64, 0x46, 0x69, + 0x72, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1e, 0x75, 0x69, 0x4f, 0x6e, 0x62, 0x6f, 0x61, + 0x72, 0x64, 0x41, 0x64, 0x64, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x92, 0x01, 0x0a, 0x29, 0x75, 0x69, 0x5f, 0x6f, + 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x61, 0x64, 0x64, 0x5f, 0x66, 0x69, 0x72, 0x73, 0x74, + 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x5f, + 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x72, + 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x4f, + 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x41, 0x64, 0x64, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, + 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, 0x61, 0x74, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x63, 0x6b, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x23, 0x75, 0x69, 0x4f, 0x6e, 0x62, 0x6f, 0x61, + 0x72, 0x64, 0x41, 0x64, 0x64, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x4c, 0x61, 0x74, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x7b, 0x0a, 0x20, + 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x63, + 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, + 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, + 0x64, 0x53, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x75, + 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1c, 0x75, 0x69, 0x4f, + 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x53, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x87, 0x01, 0x0a, 0x24, 0x75, 0x69, + 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, + 0x72, 0x5f, 0x63, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x5f, 0x73, 0x75, 0x62, 0x6d, + 0x69, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x4f, 0x6e, 0x62, 0x6f, - 0x61, 0x72, 0x64, 0x41, 0x64, 0x64, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x4c, 0x61, 0x74, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x48, 0x00, 0x52, 0x23, 0x75, 0x69, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x41, - 0x64, 0x64, 0x46, 0x69, 0x72, 0x73, 0x74, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x4c, - 0x61, 0x74, 0x65, 0x72, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x7b, 0x0a, 0x20, 0x75, 0x69, 0x5f, - 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x63, 0x72, 0x65, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x53, 0x65, - 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, 0x53, 0x75, 0x62, 0x6d, 0x69, - 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1c, 0x75, 0x69, 0x4f, 0x6e, 0x62, 0x6f, - 0x61, 0x72, 0x64, 0x53, 0x65, 0x74, 0x43, 0x72, 0x65, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x61, 0x6c, - 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, 0x87, 0x01, 0x0a, 0x24, 0x75, 0x69, 0x5f, 0x6f, 0x6e, - 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x63, - 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, - 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, - 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, - 0x65, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x20, - 0x75, 0x69, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, - 0x72, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, - 0x12, 0x7b, 0x0a, 0x20, 0x75, 0x69, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x5f, - 0x63, 0x6f, 0x64, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x5f, 0x63, - 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, 0x65, - 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x52, 0x65, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x69, - 0x6e, 0x75, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, - 0x1c, 0x75, 0x69, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, - 0x43, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x6f, 0x0a, - 0x1c, 0x75, 0x69, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, - 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x0f, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, - 0x6f, 0x64, 0x65, 0x73, 0x43, 0x6f, 0x70, 0x79, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, 0x75, 0x69, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, - 0x43, 0x6f, 0x64, 0x65, 0x73, 0x43, 0x6f, 0x70, 0x79, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x72, - 0x0a, 0x1d, 0x75, 0x69, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x5f, 0x63, 0x6f, - 0x64, 0x65, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, - 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x50, 0x72, 0x69, 0x6e, 0x74, 0x43, 0x6c, 0x69, 0x63, 0x6b, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x19, 0x75, 0x69, 0x52, 0x65, 0x63, 0x6f, 0x76, - 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x50, 0x72, 0x69, 0x6e, 0x74, 0x43, 0x6c, 0x69, - 0x63, 0x6b, 0x12, 0x63, 0x0a, 0x19, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, - 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, - 0x16, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, - 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x82, 0x01, 0x0a, 0x24, 0x75, 0x69, 0x5f, 0x64, - 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, - 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x20, 0x75, 0x69, 0x44, 0x69, - 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x6f, 0x0a, 0x1d, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x5f, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x13, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, - 0x00, 0x52, 0x1a, 0x75, 0x73, 0x65, 0x72, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x65, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x4d, 0x0a, - 0x10, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x76, - 0x32, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x73, 0x65, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x56, 0x32, 0x12, 0x76, 0x0a, 0x20, - 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, - 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1c, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, - 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x12, 0x7f, 0x0a, 0x23, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x72, 0x65, 0x67, - 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x16, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1f, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x8f, 0x01, 0x0a, 0x29, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x5f, 0x6d, 0x74, 0x6c, 0x73, 0x5f, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x72, 0x65, 0x68, + 0x61, 0x72, 0x64, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6c, 0x6c, + 0x65, 0x6e, 0x67, 0x65, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x20, 0x75, 0x69, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x52, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x65, 0x72, 0x43, 0x68, 0x61, 0x6c, 0x6c, 0x65, 0x6e, 0x67, 0x65, 0x53, 0x75, 0x62, + 0x6d, 0x69, 0x74, 0x12, 0x7b, 0x0a, 0x20, 0x75, 0x69, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, + 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, + 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, + 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, + 0x49, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x43, 0x6f, + 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x48, 0x00, 0x52, 0x1c, 0x75, 0x69, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, + 0x64, 0x65, 0x73, 0x43, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, + 0x12, 0x6f, 0x0a, 0x1c, 0x75, 0x69, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x5f, + 0x63, 0x6f, 0x64, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x70, 0x79, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, + 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, + 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x43, 0x6f, 0x70, 0x79, 0x43, 0x6c, 0x69, 0x63, 0x6b, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, 0x75, 0x69, 0x52, 0x65, 0x63, 0x6f, 0x76, + 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x43, 0x6f, 0x70, 0x79, 0x43, 0x6c, 0x69, 0x63, + 0x6b, 0x12, 0x72, 0x0a, 0x1d, 0x75, 0x69, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, + 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x73, 0x5f, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x5f, 0x63, 0x6c, 0x69, + 0x63, 0x6b, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x52, 0x65, 0x63, 0x6f, + 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x50, 0x72, 0x69, 0x6e, 0x74, 0x43, 0x6c, + 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x19, 0x75, 0x69, 0x52, 0x65, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x73, 0x50, 0x72, 0x69, 0x6e, 0x74, + 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x63, 0x0a, 0x19, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x48, 0x00, 0x52, 0x16, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x82, 0x01, 0x0a, 0x24, 0x75, + 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x4d, 0x54, 0x4c, 0x53, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, - 0x00, 0x52, 0x24, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, - 0x61, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x4d, 0x74, - 0x6c, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0xb8, 0x01, 0x0a, 0x38, 0x75, 0x69, 0x5f, 0x64, - 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x5f, - 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, - 0x5f, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x5f, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, 0x70, 0x72, 0x65, - 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, - 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x41, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x54, 0x6f, 0x6f, 0x6c, - 0x73, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, - 0x31, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x73, 0x6b, 0x74, - 0x6f, 0x70, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x79, 0x54, 0x6f, 0x6f, 0x6c, 0x73, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x12, 0xae, 0x01, 0x0a, 0x34, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, - 0x65, 0x72, 0x5f, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x75, 0x72, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x19, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x73, - 0x6b, 0x74, 0x6f, 0x70, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x48, 0x00, 0x52, 0x2e, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, - 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x69, 0x72, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x12, 0x95, 0x01, 0x0a, 0x2b, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x5f, 0x65, 0x76, - 0x65, 0x6e, 0x74, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x72, 0x65, 0x68, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x53, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x20, 0x75, + 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, + 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x6f, 0x0a, 0x1d, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, + 0x61, 0x74, 0x65, 0x5f, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x43, 0x65, 0x72, 0x74, + 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1a, 0x75, 0x73, 0x65, 0x72, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x65, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x12, 0x4d, 0x0a, 0x10, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x5f, 0x76, 0x32, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x65, + 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, + 0x0e, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x56, 0x32, 0x12, + 0x76, 0x0a, 0x20, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x48, 0x00, 0x52, 0x26, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, - 0x75, 0x74, 0x6f, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x9f, 0x01, 0x0a, 0x2f, - 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, - 0x62, 0x61, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x5f, 0x69, - 0x61, 0x6d, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, - 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x65, 0x49, 0x41, 0x4d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x29, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, - 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x49, - 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x88, 0x01, - 0x0a, 0x26, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x70, 0x72, - 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, - 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, - 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, - 0x70, 0x61, 0x6c, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x48, 0x00, 0x52, 0x22, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x75, 0x72, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x79, 0x0a, 0x21, 0x75, 0x69, 0x5f, 0x64, - 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x6e, - 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x1d, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x54, - 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1d, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x54, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x12, 0x69, 0x0a, 0x1b, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, - 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1c, 0x75, 0x69, 0x44, 0x69, 0x73, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x7f, 0x0a, 0x23, 0x75, 0x69, 0x5f, 0x64, 0x69, + 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, + 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x16, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, + 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1f, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, + 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x8f, 0x01, 0x0a, 0x29, 0x75, 0x69, 0x5f, + 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, + 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x5f, 0x6d, 0x74, 0x6c, 0x73, + 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, + 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, + 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x4d, 0x54, 0x4c, 0x53, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x48, 0x00, 0x52, 0x24, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, + 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x65, 0x4d, 0x74, 0x6c, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0xb8, 0x01, 0x0a, 0x38, 0x75, + 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x73, 0x6b, 0x74, + 0x6f, 0x70, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x79, 0x5f, 0x74, 0x6f, 0x6f, 0x6c, 0x73, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, + 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x41, 0x2e, + 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, + 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, + 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x54, + 0x6f, 0x6f, 0x6c, 0x73, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x48, 0x00, 0x52, 0x31, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, + 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x79, 0x54, 0x6f, 0x6f, 0x6c, 0x73, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0xae, 0x01, 0x0a, 0x34, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x5f, 0x61, 0x63, + 0x74, 0x69, 0x76, 0x65, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x19, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3e, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, + 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x2e, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, + 0x65, 0x72, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x44, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x95, 0x01, 0x0a, 0x2b, 0x75, 0x69, 0x5f, 0x64, 0x69, + 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x61, 0x75, 0x74, 0x6f, 0x5f, 0x64, 0x69, 0x73, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, + 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, + 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, + 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, 0x44, 0x69, 0x73, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x26, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, + 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x65, 0x64, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x9f, + 0x01, 0x0a, 0x2f, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x65, 0x5f, 0x69, 0x61, 0x6d, 0x5f, 0x70, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x5f, 0x65, 0x76, 0x65, + 0x6e, 0x74, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x42, - 0x0a, 0x0b, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x1f, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x72, 0x6f, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x12, 0x63, 0x0a, 0x18, 0x75, 0x69, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, - 0x6e, 0x65, 0x77, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x20, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, - 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, - 0x00, 0x52, 0x14, 0x75, 0x69, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, - 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x70, 0x0a, 0x1d, 0x75, 0x69, 0x5f, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x73, 0x61, - 0x76, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x21, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, - 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, - 0x55, 0x49, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x53, - 0x61, 0x76, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, - 0x18, 0x75, 0x69, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, - 0x53, 0x61, 0x76, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x76, 0x0a, 0x1f, 0x75, 0x69, 0x5f, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x5f, - 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x22, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, - 0x6f, 0x6c, 0x65, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1a, 0x75, 0x69, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, - 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x43, 0x6c, 0x69, 0x63, - 0x6b, 0x12, 0x98, 0x01, 0x0a, 0x2b, 0x75, 0x69, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, - 0x6e, 0x65, 0x77, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x64, 0x6f, - 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x69, 0x63, - 0x6b, 0x18, 0x23, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, + 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x65, 0x49, 0x41, 0x4d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x29, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, + 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, + 0x72, 0x65, 0x49, 0x61, 0x6d, 0x50, 0x6f, 0x6c, 0x69, 0x63, 0x79, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x12, 0x88, 0x01, 0x0a, 0x26, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, + 0x5f, 0x70, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x1c, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x50, 0x72, 0x69, + 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x22, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, + 0x76, 0x65, 0x72, 0x50, 0x72, 0x69, 0x6e, 0x63, 0x69, 0x70, 0x61, 0x6c, 0x73, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x79, 0x0a, 0x21, 0x75, + 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x74, 0x65, 0x73, 0x74, 0x5f, + 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, + 0x65, 0x72, 0x54, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1d, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, + 0x76, 0x65, 0x72, 0x54, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x69, 0x0a, 0x1b, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, + 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, + 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, + 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, + 0x76, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x12, 0x42, 0x0a, 0x0b, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x18, 0x1f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x72, 0x6f, 0x6c, 0x65, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x63, 0x0a, 0x18, 0x75, 0x69, 0x5f, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x63, + 0x6b, 0x18, 0x20, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x56, 0x69, 0x65, 0x77, 0x44, 0x6f, 0x63, 0x75, - 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x25, 0x75, 0x69, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, - 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x56, 0x69, 0x65, 0x77, 0x44, 0x6f, 0x63, 0x75, 0x6d, 0x65, - 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x45, 0x0a, 0x0c, - 0x6b, 0x75, 0x62, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x24, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x2e, 0x4b, 0x75, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x6b, 0x75, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x73, 0x66, 0x74, 0x70, 0x18, 0x25, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x2e, 0x53, 0x46, 0x54, 0x50, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x04, - 0x73, 0x66, 0x74, 0x70, 0x12, 0x56, 0x0a, 0x14, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x26, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x12, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x57, 0x0a, 0x12, - 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, - 0x61, 0x74, 0x18, 0x27, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, - 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, - 0x63, 0x65, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x65, 0x61, 0x72, - 0x74, 0x62, 0x65, 0x61, 0x74, 0x12, 0x9c, 0x01, 0x0a, 0x2e, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x61, 0x77, 0x73, 0x5f, 0x6f, 0x69, 0x64, 0x63, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, - 0x63, 0x74, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x28, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, - 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, - 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x57, 0x53, 0x4f, 0x49, 0x44, 0x43, 0x43, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x28, 0x75, 0x69, 0x44, 0x69, - 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x41, 0x77, 0x73, 0x4f, 0x69, 0x64, 0x63, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x12, 0x83, 0x01, 0x0a, 0x25, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x72, 0x64, - 0x73, 0x5f, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x29, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, - 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x44, 0x53, 0x45, 0x6e, 0x72, 0x6f, 0x6c, - 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x20, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, - 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x64, 0x73, 0x45, - 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x6b, 0x0a, 0x1d, 0x75, 0x69, - 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x74, 0x6f, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x2a, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x2e, 0x55, 0x49, 0x43, 0x61, 0x6c, 0x6c, 0x54, 0x6f, 0x41, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, 0x75, - 0x69, 0x43, 0x61, 0x6c, 0x6c, 0x54, 0x6f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x69, - 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x54, 0x0a, 0x11, 0x61, 0x73, 0x73, 0x69, 0x73, - 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x2b, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, - 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x61, 0x73, 0x73, - 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x79, 0x0a, - 0x21, 0x75, 0x69, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x65, 0x76, 0x65, - 0x6e, 0x74, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, - 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x49, 0x6e, 0x74, 0x65, - 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1d, 0x75, 0x69, 0x49, 0x6e, 0x74, - 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x82, 0x01, 0x0a, 0x24, 0x75, 0x69, 0x5f, - 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x72, 0x6f, - 0x6c, 0x6c, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, - 0x74, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x49, 0x6e, 0x74, 0x65, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x70, - 0x6c, 0x65, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x20, 0x75, 0x69, 0x49, + 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x48, 0x00, 0x52, 0x14, 0x75, 0x69, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, + 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x70, 0x0a, 0x1d, 0x75, 0x69, + 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x72, 0x6f, 0x6c, 0x65, + 0x5f, 0x73, 0x61, 0x76, 0x65, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x21, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x2e, 0x55, 0x49, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, + 0x6c, 0x65, 0x53, 0x61, 0x76, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x48, 0x00, 0x52, 0x18, 0x75, 0x69, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, + 0x6f, 0x6c, 0x65, 0x53, 0x61, 0x76, 0x65, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x76, 0x0a, 0x1f, + 0x75, 0x69, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x72, 0x6f, + 0x6c, 0x65, 0x5f, 0x63, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x18, + 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, + 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x43, 0x6c, 0x69, 0x63, + 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1a, 0x75, 0x69, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x61, 0x6e, 0x63, 0x65, 0x6c, 0x43, + 0x6c, 0x69, 0x63, 0x6b, 0x12, 0x98, 0x01, 0x0a, 0x2b, 0x75, 0x69, 0x5f, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x76, 0x69, 0x65, 0x77, + 0x5f, 0x64, 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, + 0x6c, 0x69, 0x63, 0x6b, 0x18, 0x23, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x3a, 0x2e, 0x70, 0x72, 0x65, + 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x56, 0x69, 0x65, 0x77, 0x44, + 0x6f, 0x63, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x63, + 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x25, 0x75, 0x69, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x4e, 0x65, 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x56, 0x69, 0x65, 0x77, 0x44, 0x6f, 0x63, + 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x12, + 0x45, 0x0a, 0x0c, 0x6b, 0x75, 0x62, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, + 0x24, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4b, 0x75, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x6b, 0x75, 0x62, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x73, 0x66, 0x74, 0x70, 0x18, 0x25, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x46, 0x54, 0x50, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x04, 0x73, 0x66, 0x74, 0x70, 0x12, 0x56, 0x0a, 0x14, 0x61, 0x67, 0x65, 0x6e, 0x74, + 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, + 0x26, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x12, 0x61, 0x67, 0x65, + 0x6e, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x57, 0x0a, 0x12, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x68, 0x65, 0x61, 0x72, + 0x74, 0x62, 0x65, 0x61, 0x74, 0x18, 0x27, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, + 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x52, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x48, + 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x12, 0x9c, 0x01, 0x0a, 0x2e, 0x75, 0x69, 0x5f, + 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x61, 0x77, 0x73, 0x5f, 0x6f, 0x69, 0x64, 0x63, 0x5f, 0x63, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x28, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x74, + 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x57, 0x53, 0x4f, 0x49, 0x44, 0x43, 0x43, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x28, 0x75, + 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x77, 0x73, 0x4f, 0x69, 0x64, 0x63, 0x43, 0x6f, 0x6e, 0x6e, 0x65, + 0x63, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x83, 0x01, 0x0a, 0x25, 0x75, 0x69, 0x5f, 0x64, + 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, + 0x5f, 0x72, 0x64, 0x73, 0x5f, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, + 0x74, 0x18, 0x29, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, + 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, 0x44, 0x53, 0x45, 0x6e, + 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x20, 0x75, 0x69, 0x44, + 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x52, + 0x64, 0x73, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x6b, 0x0a, + 0x1d, 0x75, 0x69, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x74, 0x6f, 0x5f, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x63, 0x6c, 0x69, 0x63, 0x6b, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x2a, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x43, 0x61, 0x6c, 0x6c, 0x54, 0x6f, 0x41, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x18, 0x75, 0x69, 0x43, 0x61, 0x6c, 0x6c, 0x54, 0x6f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x43, 0x6c, 0x69, 0x63, 0x6b, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x54, 0x0a, 0x11, 0x61, 0x73, + 0x73, 0x69, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x2b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, + 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, + 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x79, 0x0a, 0x21, 0x75, 0x69, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, + 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, - 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, - 0x13, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x65, - 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x45, 0x64, 0x69, 0x74, - 0x6f, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, - 0x11, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x12, 0x3f, 0x0a, 0x0a, 0x62, 0x6f, 0x74, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x18, 0x2f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x42, 0x6f, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x62, 0x6f, 0x74, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x12, 0x7a, 0x0a, 0x1f, 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, - 0x64, 0x5f, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x6e, 0x61, 0x69, 0x72, 0x65, 0x5f, - 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, 0x30, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, + 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1d, 0x75, 0x69, + 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, + 0x6c, 0x53, 0x74, 0x61, 0x72, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x82, 0x01, 0x0a, 0x24, + 0x75, 0x69, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, + 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, 0x65, + 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x49, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x43, + 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x20, + 0x75, 0x69, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x72, + 0x6f, 0x6c, 0x6c, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x12, 0x53, 0x0a, 0x13, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, + 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x45, + 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x48, 0x00, 0x52, 0x11, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x3f, 0x0a, 0x0a, 0x62, 0x6f, 0x74, 0x5f, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x65, 0x68, + 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x42, 0x6f, 0x74, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x62, 0x6f, 0x74, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x7a, 0x0a, 0x1f, 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, + 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x71, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x6e, 0x61, 0x69, + 0x72, 0x65, 0x5f, 0x73, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x18, 0x30, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x31, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x2e, 0x55, 0x49, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x51, 0x75, 0x65, 0x73, 0x74, 0x69, + 0x6f, 0x6e, 0x6e, 0x61, 0x69, 0x72, 0x65, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1c, 0x75, 0x69, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x51, + 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x6e, 0x61, 0x69, 0x72, 0x65, 0x53, 0x75, 0x62, 0x6d, + 0x69, 0x74, 0x12, 0x39, 0x0a, 0x08, 0x62, 0x6f, 0x74, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x18, 0x31, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x42, 0x6f, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x62, 0x6f, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x12, 0x51, 0x0a, + 0x10, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x45, + 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, + 0x0f, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x64, 0x0a, 0x17, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x63, + 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x33, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x4e, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x76, + 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, + 0x15, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x4e, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, + 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x65, 0x0a, 0x19, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, + 0x5f, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x65, 0x68, + 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x48, 0x00, 0x52, 0x17, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x75, 0x74, 0x68, + 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x6e, 0x0a, + 0x1c, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, + 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x35, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, + 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x1a, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, + 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x5e, 0x0a, + 0x15, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x36, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, + 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x73, + 0x73, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x13, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, + 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x48, 0x0a, + 0x0d, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x37, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x61, 0x73, 0x73, 0x69, 0x73, + 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x53, 0x0a, 0x13, 0x64, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x5f, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x38, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x45, 0x6e, 0x72, 0x6f, + 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, 0x64, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x13, + 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x18, 0x39, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x65, 0x68, + 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, + 0x73, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, + 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x12, 0x55, 0x0a, 0x12, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, + 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x3a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, + 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, + 0x73, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x55, 0x0a, 0x12, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x3b, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, + 0x55, 0x0a, 0x12, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x64, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x3c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, + 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x68, 0x0a, 0x19, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x18, 0x3d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x65, 0x68, + 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x12, 0x68, 0x0a, 0x19, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x3e, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x48, 0x00, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x68, 0x0a, 0x19, 0x61, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x3f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, + 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x61, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x12, 0x69, 0x0a, 0x1a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, + 0x69, 0x73, 0x74, 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x75, 0x73, + 0x65, 0x72, 0x18, 0x40, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x4c, 0x69, 0x73, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x54, 0x6f, 0x55, 0x73, 0x65, 0x72, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, + 0x69, 0x73, 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x54, 0x6f, 0x55, 0x73, 0x65, 0x72, 0x12, + 0x81, 0x01, 0x0a, 0x22, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, + 0x65, 0x63, 0x32, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x73, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x41, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, - 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x51, 0x75, 0x65, 0x73, 0x74, 0x69, 0x6f, 0x6e, 0x6e, - 0x61, 0x69, 0x72, 0x65, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, - 0x00, 0x52, 0x1c, 0x75, 0x69, 0x4f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x51, 0x75, 0x65, 0x73, - 0x74, 0x69, 0x6f, 0x6e, 0x6e, 0x61, 0x69, 0x72, 0x65, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x12, - 0x39, 0x0a, 0x08, 0x62, 0x6f, 0x74, 0x5f, 0x6a, 0x6f, 0x69, 0x6e, 0x18, 0x31, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x2e, 0x42, 0x6f, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, - 0x00, 0x52, 0x07, 0x62, 0x6f, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x12, 0x51, 0x0a, 0x10, 0x61, 0x73, - 0x73, 0x69, 0x73, 0x74, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x32, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x45, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0f, 0x61, 0x73, - 0x73, 0x69, 0x73, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x64, 0x0a, - 0x17, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x63, 0x6f, 0x6e, 0x76, - 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x33, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, + 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x45, 0x43, 0x32, 0x49, 0x6e, 0x73, 0x74, 0x61, + 0x6e, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x48, 0x00, 0x52, 0x1e, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x45, + 0x63, 0x32, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x62, 0x0a, 0x17, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, + 0x65, 0x72, 0x5f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x5f, 0x65, 0x69, 0x63, 0x65, 0x18, 0x42, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, + 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x45, 0x49, 0x43, 0x45, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x14, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x45, 0x69, 0x63, 0x65, 0x12, 0x62, 0x0a, 0x17, 0x75, 0x69, 0x5f, 0x64, 0x69, + 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x6f, + 0x64, 0x65, 0x18, 0x43, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x14, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, + 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x64, 0x0a, 0x17, 0x64, + 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, + 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x44, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, + 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x65, + 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x68, + 0x61, 0x72, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x15, 0x64, 0x65, 0x73, 0x6b, + 0x74, 0x6f, 0x70, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x68, 0x61, 0x72, + 0x65, 0x12, 0x65, 0x0a, 0x1a, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x5f, 0x63, 0x6c, 0x69, + 0x70, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x18, + 0x45, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, + 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x43, 0x6c, + 0x69, 0x70, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, + 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x43, 0x6c, 0x69, 0x70, 0x62, 0x6f, 0x61, 0x72, 0x64, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, 0x52, 0x0a, 0x11, 0x74, 0x61, 0x67, 0x5f, + 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x46, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x54, 0x41, 0x47, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0f, 0x74, 0x61, 0x67, + 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x86, 0x01, 0x0a, + 0x23, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x61, 0x75, 0x64, 0x69, 0x74, 0x5f, + 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, + 0x63, 0x61, 0x74, 0x65, 0x18, 0x47, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x72, 0x65, + 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x45, 0x78, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x75, 0x64, 0x69, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, + 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x48, 0x00, 0x52, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x75, 0x64, + 0x69, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, + 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x6b, 0x0a, 0x1a, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, + 0x79, 0x5f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x18, 0x48, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x65, 0x68, + 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, + 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x17, 0x73, 0x65, 0x63, 0x75, 0x72, + 0x69, 0x74, 0x79, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x12, 0x4c, 0x0a, 0x0f, 0x61, 0x75, 0x64, 0x69, 0x74, 0x5f, 0x71, 0x75, 0x65, 0x72, + 0x79, 0x5f, 0x72, 0x75, 0x6e, 0x18, 0x49, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, + 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x75, 0x64, + 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x0d, 0x61, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x75, 0x6e, + 0x12, 0x59, 0x0a, 0x15, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x5f, 0x66, 0x65, + 0x74, 0x63, 0x68, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x4a, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x23, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x2e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x46, 0x65, 0x74, 0x63, 0x68, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x13, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, + 0x79, 0x46, 0x65, 0x74, 0x63, 0x68, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x68, 0x0a, 0x19, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x65, + 0x77, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x4b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, - 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x4e, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x15, 0x61, 0x73, - 0x73, 0x69, 0x73, 0x74, 0x4e, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x65, 0x0a, 0x19, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x61, 0x75, - 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x18, 0x34, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x75, - 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, - 0x00, 0x52, 0x17, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x6e, 0x0a, 0x1c, 0x66, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x35, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, - 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1a, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x5e, 0x0a, 0x15, 0x61, 0x73, - 0x73, 0x69, 0x73, 0x74, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x72, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x18, 0x36, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x65, 0x68, - 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x73, - 0x74, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x13, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x48, 0x0a, 0x0d, 0x61, 0x73, - 0x73, 0x69, 0x73, 0x74, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x37, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x73, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x61, 0x73, 0x73, 0x69, 0x73, 0x74, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x53, 0x0a, 0x13, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x5f, 0x65, - 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x38, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x45, 0x6e, - 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x13, 0x6c, 0x69, 0x63, - 0x65, 0x6e, 0x73, 0x65, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x18, 0x39, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x4c, - 0x69, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x11, 0x6c, 0x69, 0x63, - 0x65, 0x6e, 0x73, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x55, - 0x0a, 0x12, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x63, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x18, 0x3a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x65, - 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x48, 0x00, 0x52, 0x10, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x55, 0x0a, 0x12, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, - 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x3b, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x61, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x55, 0x0a, 0x12, - 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x64, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x18, 0x3c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x68, 0x0a, 0x19, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, + 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x64, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x18, 0x4c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, - 0x00, 0x52, 0x10, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x12, 0x68, 0x0a, 0x19, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, - 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x18, 0x3d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, + 0x74, 0x0a, 0x1d, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x72, + 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, + 0x18, 0x4d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, - 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, - 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x68, 0x0a, - 0x19, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x3e, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, - 0x16, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x68, 0x0a, 0x19, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x64, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x18, 0x3f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x65, - 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x12, 0x69, 0x0a, 0x1a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, - 0x5f, 0x67, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x5f, 0x74, 0x6f, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x18, - 0x40, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, - 0x74, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x54, 0x6f, 0x55, 0x73, 0x65, 0x72, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, - 0x47, 0x72, 0x61, 0x6e, 0x74, 0x73, 0x54, 0x6f, 0x55, 0x73, 0x65, 0x72, 0x12, 0x81, 0x01, 0x0a, - 0x22, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x65, 0x63, 0x32, - 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x41, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x70, 0x72, 0x65, 0x68, - 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x45, 0x43, 0x32, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, - 0x52, 0x1e, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x45, 0x63, 0x32, 0x49, - 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x62, 0x0a, 0x17, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, - 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x5f, 0x65, 0x69, 0x63, 0x65, 0x18, 0x42, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x45, 0x49, 0x43, 0x45, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x14, - 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x45, 0x69, 0x63, 0x65, 0x12, 0x62, 0x0a, 0x17, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x18, - 0x43, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x14, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x64, 0x0a, 0x17, 0x64, 0x65, 0x73, 0x6b, - 0x74, 0x6f, 0x70, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x5f, 0x73, 0x68, - 0x61, 0x72, 0x65, 0x18, 0x44, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x65, 0x68, - 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x65, 0x73, 0x6b, 0x74, - 0x6f, 0x70, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x68, 0x61, 0x72, 0x65, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x15, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, - 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x79, 0x53, 0x68, 0x61, 0x72, 0x65, 0x12, 0x65, - 0x0a, 0x1a, 0x64, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x5f, 0x63, 0x6c, 0x69, 0x70, 0x62, 0x6f, - 0x61, 0x72, 0x64, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x18, 0x45, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x2e, 0x44, 0x65, 0x73, 0x6b, 0x74, 0x6f, 0x70, 0x43, 0x6c, 0x69, 0x70, 0x62, - 0x6f, 0x61, 0x72, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x18, 0x64, 0x65, 0x73, - 0x6b, 0x74, 0x6f, 0x70, 0x43, 0x6c, 0x69, 0x70, 0x62, 0x6f, 0x61, 0x72, 0x64, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x66, 0x65, 0x72, 0x12, 0x52, 0x0a, 0x11, 0x74, 0x61, 0x67, 0x5f, 0x65, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x65, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, 0x46, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x24, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x2e, 0x54, 0x41, 0x47, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0f, 0x74, 0x61, 0x67, 0x45, 0x78, 0x65, - 0x63, 0x75, 0x74, 0x65, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x86, 0x01, 0x0a, 0x23, 0x65, 0x78, - 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x5f, 0x61, 0x75, 0x64, 0x69, 0x74, 0x5f, 0x73, 0x74, 0x6f, - 0x72, 0x61, 0x67, 0x65, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x18, 0x47, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x41, 0x75, 0x64, 0x69, 0x74, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x41, 0x75, 0x74, - 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, - 0x52, 0x20, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x41, 0x75, 0x64, 0x69, 0x74, 0x53, - 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, - 0x74, 0x65, 0x12, 0x6b, 0x0a, 0x1a, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x5f, 0x72, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x18, 0x48, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, - 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, - 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x17, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, - 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, - 0x4c, 0x0a, 0x0f, 0x61, 0x75, 0x64, 0x69, 0x74, 0x5f, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x72, - 0x75, 0x6e, 0x18, 0x49, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, - 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x75, 0x64, 0x69, 0x74, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0d, - 0x61, 0x75, 0x64, 0x69, 0x74, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x75, 0x6e, 0x12, 0x68, 0x0a, - 0x19, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x76, - 0x69, 0x65, 0x77, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x4b, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, - 0x65, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, - 0x16, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, - 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x68, 0x0a, 0x19, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x64, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x18, 0x4c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x65, - 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x12, 0x74, 0x0a, 0x1d, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, - 0x5f, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x61, 0x6e, - 0x63, 0x65, 0x18, 0x4d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, - 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x69, - 0x61, 0x6e, 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1a, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6d, - 0x70, 0x6c, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x52, 0x1c, 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, - 0x72, 0x64, 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x63, - 0x6c, 0x69, 0x63, 0x6b, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x51, 0x0a, 0x13, 0x53, - 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x16, - 0x0a, 0x14, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x0a, 0x14, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x54, - 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x17, - 0x0a, 0x15, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x54, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x87, 0x02, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x45, 0x53, 0x4f, - 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x52, 0x45, 0x53, 0x4f, 0x55, - 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x10, 0x01, 0x12, - 0x1c, 0x0a, 0x18, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, - 0x5f, 0x41, 0x50, 0x50, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x02, 0x12, 0x1d, 0x0a, - 0x19, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4b, - 0x55, 0x42, 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x03, 0x12, 0x1b, 0x0a, 0x17, - 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x44, 0x42, - 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x04, 0x12, 0x21, 0x0a, 0x1d, 0x52, 0x45, 0x53, - 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x57, 0x49, 0x4e, 0x44, 0x4f, - 0x57, 0x53, 0x5f, 0x44, 0x45, 0x53, 0x4b, 0x54, 0x4f, 0x50, 0x10, 0x05, 0x12, 0x1e, 0x0a, 0x1a, - 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4e, 0x4f, - 0x44, 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x4e, 0x53, 0x53, 0x48, 0x10, 0x06, 0x12, 0x23, 0x0a, 0x1f, - 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4e, 0x4f, - 0x44, 0x45, 0x5f, 0x4f, 0x50, 0x45, 0x4e, 0x53, 0x53, 0x48, 0x5f, 0x45, 0x49, 0x43, 0x45, 0x10, - 0x07, 0x2a, 0xb9, 0x0e, 0x0a, 0x10, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x1d, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, - 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, - 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x44, 0x49, 0x53, - 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x53, - 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x01, 0x12, 0x20, 0x0a, 0x1c, 0x44, 0x49, 0x53, 0x43, 0x4f, - 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x55, 0x42, - 0x45, 0x52, 0x4e, 0x45, 0x54, 0x45, 0x53, 0x10, 0x02, 0x12, 0x33, 0x0a, 0x2f, 0x44, 0x49, 0x53, + 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x69, 0x61, 0x6e, + 0x63, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1a, 0x61, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x76, 0x69, 0x65, 0x77, 0x43, 0x6f, 0x6d, 0x70, 0x6c, + 0x69, 0x61, 0x6e, 0x63, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x4a, 0x04, + 0x08, 0x08, 0x10, 0x09, 0x52, 0x1c, 0x75, 0x69, 0x5f, 0x6f, 0x6e, 0x62, 0x6f, 0x61, 0x72, 0x64, + 0x5f, 0x67, 0x65, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x6c, 0x69, + 0x63, 0x6b, 0x22, 0x15, 0x0a, 0x13, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x51, 0x0a, 0x13, 0x53, 0x75, 0x62, + 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x3a, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x16, 0x0a, 0x14, + 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x16, 0x0a, 0x14, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x54, 0x65, 0x6c, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x17, 0x0a, 0x15, + 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x54, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x87, 0x02, 0x0a, 0x0c, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, + 0x63, 0x65, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x1d, 0x0a, 0x19, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, + 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, + 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4e, 0x4f, 0x44, 0x45, 0x10, 0x01, 0x12, 0x1c, 0x0a, + 0x18, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x41, + 0x50, 0x50, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x02, 0x12, 0x1d, 0x0a, 0x19, 0x52, + 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4b, 0x55, 0x42, + 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x03, 0x12, 0x1b, 0x0a, 0x17, 0x52, 0x45, + 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x44, 0x42, 0x5f, 0x53, + 0x45, 0x52, 0x56, 0x45, 0x52, 0x10, 0x04, 0x12, 0x21, 0x0a, 0x1d, 0x52, 0x45, 0x53, 0x4f, 0x55, + 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x57, 0x49, 0x4e, 0x44, 0x4f, 0x57, 0x53, + 0x5f, 0x44, 0x45, 0x53, 0x4b, 0x54, 0x4f, 0x50, 0x10, 0x05, 0x12, 0x1e, 0x0a, 0x1a, 0x52, 0x45, + 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4e, 0x4f, 0x44, 0x45, + 0x5f, 0x4f, 0x50, 0x45, 0x4e, 0x53, 0x53, 0x48, 0x10, 0x06, 0x12, 0x23, 0x0a, 0x1f, 0x52, 0x45, + 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4e, 0x4f, 0x44, 0x45, + 0x5f, 0x4f, 0x50, 0x45, 0x4e, 0x53, 0x53, 0x48, 0x5f, 0x45, 0x49, 0x43, 0x45, 0x10, 0x07, 0x2a, + 0xb9, 0x0e, 0x0a, 0x10, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x1d, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, + 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1c, 0x0a, 0x18, 0x44, 0x49, 0x53, 0x43, 0x4f, + 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x53, 0x45, 0x52, + 0x56, 0x45, 0x52, 0x10, 0x01, 0x12, 0x20, 0x0a, 0x1c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, + 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x4b, 0x55, 0x42, 0x45, 0x52, + 0x4e, 0x45, 0x54, 0x45, 0x53, 0x10, 0x02, 0x12, 0x33, 0x0a, 0x2f, 0x44, 0x49, 0x53, 0x43, 0x4f, + 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, + 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, 0x5f, 0x53, + 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x03, 0x12, 0x30, 0x0a, 0x2c, + 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, + 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x4d, 0x59, 0x53, 0x51, 0x4c, + 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x32, + 0x0a, 0x2e, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, + 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x4d, 0x4f, 0x4e, + 0x47, 0x4f, 0x44, 0x42, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, + 0x10, 0x05, 0x12, 0x2b, 0x0a, 0x27, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, + 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, + 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, 0x5f, 0x52, 0x44, 0x53, 0x10, 0x06, 0x12, + 0x28, 0x0a, 0x24, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, + 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x4d, 0x59, + 0x53, 0x51, 0x4c, 0x5f, 0x52, 0x44, 0x53, 0x10, 0x07, 0x12, 0x26, 0x0a, 0x22, 0x44, 0x49, 0x53, + 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x41, + 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x48, 0x54, 0x54, 0x50, 0x10, + 0x08, 0x12, 0x25, 0x0a, 0x21, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, + 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, + 0x4f, 0x4e, 0x5f, 0x54, 0x43, 0x50, 0x10, 0x09, 0x12, 0x25, 0x0a, 0x21, 0x44, 0x49, 0x53, 0x43, + 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x57, 0x49, + 0x4e, 0x44, 0x4f, 0x57, 0x53, 0x5f, 0x44, 0x45, 0x53, 0x4b, 0x54, 0x4f, 0x50, 0x10, 0x0a, 0x12, + 0x2c, 0x0a, 0x28, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, + 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x51, + 0x4c, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x44, 0x53, 0x10, 0x0b, 0x12, 0x30, 0x0a, + 0x2c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, + 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, + 0x47, 0x52, 0x45, 0x53, 0x5f, 0x52, 0x45, 0x44, 0x53, 0x48, 0x49, 0x46, 0x54, 0x10, 0x0c, 0x12, + 0x34, 0x0a, 0x30, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, + 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x51, + 0x4c, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, + 0x54, 0x45, 0x44, 0x10, 0x0d, 0x12, 0x30, 0x0a, 0x2c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, + 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, + 0x41, 0x53, 0x45, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, + 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x0e, 0x12, 0x2b, 0x0a, 0x27, 0x44, 0x49, 0x53, 0x43, 0x4f, + 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, + 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, 0x5f, 0x47, + 0x43, 0x50, 0x10, 0x0f, 0x12, 0x28, 0x0a, 0x24, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, + 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, + 0x53, 0x45, 0x5f, 0x4d, 0x59, 0x53, 0x51, 0x4c, 0x5f, 0x47, 0x43, 0x50, 0x10, 0x10, 0x12, 0x2c, + 0x0a, 0x28, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, + 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x51, 0x4c, + 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x47, 0x43, 0x50, 0x10, 0x11, 0x12, 0x3b, 0x0a, 0x37, + 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, + 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, + 0x52, 0x45, 0x53, 0x5f, 0x52, 0x45, 0x44, 0x53, 0x48, 0x49, 0x46, 0x54, 0x5f, 0x53, 0x45, 0x52, + 0x56, 0x45, 0x52, 0x4c, 0x45, 0x53, 0x53, 0x10, 0x12, 0x12, 0x2d, 0x0a, 0x29, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, - 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x03, 0x12, 0x30, - 0x0a, 0x2c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, - 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x4d, 0x59, 0x53, - 0x51, 0x4c, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x04, - 0x12, 0x32, 0x0a, 0x2e, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, - 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x4d, - 0x4f, 0x4e, 0x47, 0x4f, 0x44, 0x42, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, - 0x45, 0x44, 0x10, 0x05, 0x12, 0x2b, 0x0a, 0x27, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, - 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, - 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, 0x5f, 0x52, 0x44, 0x53, 0x10, - 0x06, 0x12, 0x28, 0x0a, 0x24, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, + 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x10, 0x13, 0x12, 0x27, 0x0a, 0x23, 0x44, 0x49, 0x53, 0x43, + 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, + 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x4f, 0x44, 0x42, 0x10, + 0x14, 0x12, 0x32, 0x0a, 0x2e, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, - 0x4d, 0x59, 0x53, 0x51, 0x4c, 0x5f, 0x52, 0x44, 0x53, 0x10, 0x07, 0x12, 0x26, 0x0a, 0x22, 0x44, + 0x43, 0x41, 0x53, 0x53, 0x41, 0x4e, 0x44, 0x52, 0x41, 0x5f, 0x4b, 0x45, 0x59, 0x53, 0x50, 0x41, + 0x43, 0x45, 0x53, 0x10, 0x15, 0x12, 0x34, 0x0a, 0x30, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, + 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, + 0x41, 0x53, 0x45, 0x5f, 0x43, 0x41, 0x53, 0x53, 0x41, 0x4e, 0x44, 0x52, 0x41, 0x5f, 0x53, 0x45, + 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x16, 0x12, 0x38, 0x0a, 0x34, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, - 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x48, 0x54, 0x54, - 0x50, 0x10, 0x08, 0x12, 0x25, 0x0a, 0x21, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, - 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, - 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x43, 0x50, 0x10, 0x09, 0x12, 0x25, 0x0a, 0x21, 0x44, 0x49, - 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, - 0x57, 0x49, 0x4e, 0x44, 0x4f, 0x57, 0x53, 0x5f, 0x44, 0x45, 0x53, 0x4b, 0x54, 0x4f, 0x50, 0x10, - 0x0a, 0x12, 0x2c, 0x0a, 0x28, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, - 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, - 0x53, 0x51, 0x4c, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x44, 0x53, 0x10, 0x0b, 0x12, - 0x30, 0x0a, 0x2c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, - 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x4f, - 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, 0x5f, 0x52, 0x45, 0x44, 0x53, 0x48, 0x49, 0x46, 0x54, 0x10, - 0x0c, 0x12, 0x34, 0x0a, 0x30, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, - 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, - 0x53, 0x51, 0x4c, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, - 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x0d, 0x12, 0x30, 0x0a, 0x2c, 0x44, 0x49, 0x53, 0x43, 0x4f, + 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x45, 0x4c, 0x41, 0x53, 0x54, 0x49, + 0x43, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, + 0x54, 0x45, 0x44, 0x10, 0x17, 0x12, 0x30, 0x0a, 0x2c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, + 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, + 0x41, 0x53, 0x45, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x45, 0x4c, 0x41, 0x53, 0x54, 0x49, + 0x43, 0x41, 0x43, 0x48, 0x45, 0x10, 0x18, 0x12, 0x2d, 0x0a, 0x29, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, - 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x53, 0x45, 0x4c, 0x46, - 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x0e, 0x12, 0x2b, 0x0a, 0x27, 0x44, 0x49, 0x53, - 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, - 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, 0x45, 0x53, - 0x5f, 0x47, 0x43, 0x50, 0x10, 0x0f, 0x12, 0x28, 0x0a, 0x24, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, + 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x4d, 0x45, 0x4d, 0x4f, + 0x52, 0x59, 0x44, 0x42, 0x10, 0x19, 0x12, 0x30, 0x0a, 0x2c, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, - 0x42, 0x41, 0x53, 0x45, 0x5f, 0x4d, 0x59, 0x53, 0x51, 0x4c, 0x5f, 0x47, 0x43, 0x50, 0x10, 0x10, - 0x12, 0x2c, 0x0a, 0x28, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, - 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, - 0x51, 0x4c, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x47, 0x43, 0x50, 0x10, 0x11, 0x12, 0x3b, - 0x0a, 0x37, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, - 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, - 0x54, 0x47, 0x52, 0x45, 0x53, 0x5f, 0x52, 0x45, 0x44, 0x53, 0x48, 0x49, 0x46, 0x54, 0x5f, 0x53, - 0x45, 0x52, 0x56, 0x45, 0x52, 0x4c, 0x45, 0x53, 0x53, 0x10, 0x12, 0x12, 0x2d, 0x0a, 0x29, 0x44, - 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, - 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x50, 0x4f, 0x53, 0x54, 0x47, 0x52, - 0x45, 0x53, 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x10, 0x13, 0x12, 0x27, 0x0a, 0x23, 0x44, 0x49, - 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, - 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x4f, 0x44, - 0x42, 0x10, 0x14, 0x12, 0x32, 0x0a, 0x2e, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, - 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, - 0x45, 0x5f, 0x43, 0x41, 0x53, 0x53, 0x41, 0x4e, 0x44, 0x52, 0x41, 0x5f, 0x4b, 0x45, 0x59, 0x53, - 0x50, 0x41, 0x43, 0x45, 0x53, 0x10, 0x15, 0x12, 0x34, 0x0a, 0x30, 0x44, 0x49, 0x53, 0x43, 0x4f, - 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, - 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x43, 0x41, 0x53, 0x53, 0x41, 0x4e, 0x44, 0x52, 0x41, 0x5f, - 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x16, 0x12, 0x38, 0x0a, - 0x34, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, - 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x45, 0x4c, 0x41, 0x53, - 0x54, 0x49, 0x43, 0x53, 0x45, 0x41, 0x52, 0x43, 0x48, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, - 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x17, 0x12, 0x30, 0x0a, 0x2c, 0x44, 0x49, 0x53, 0x43, 0x4f, - 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, - 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x45, 0x4c, 0x41, 0x53, - 0x54, 0x49, 0x43, 0x41, 0x43, 0x48, 0x45, 0x10, 0x18, 0x12, 0x2d, 0x0a, 0x29, 0x44, 0x49, 0x53, - 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, - 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x4d, 0x45, - 0x4d, 0x4f, 0x52, 0x59, 0x44, 0x42, 0x10, 0x19, 0x12, 0x30, 0x0a, 0x2c, 0x44, 0x49, 0x53, 0x43, + 0x42, 0x41, 0x53, 0x45, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, + 0x5f, 0x43, 0x41, 0x43, 0x48, 0x45, 0x10, 0x1a, 0x12, 0x38, 0x0a, 0x34, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, - 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x41, 0x5a, 0x55, - 0x52, 0x45, 0x5f, 0x43, 0x41, 0x43, 0x48, 0x45, 0x10, 0x1a, 0x12, 0x38, 0x0a, 0x34, 0x44, 0x49, - 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, - 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x43, - 0x4c, 0x55, 0x53, 0x54, 0x45, 0x52, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, - 0x45, 0x44, 0x10, 0x1b, 0x12, 0x2a, 0x0a, 0x26, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, - 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, - 0x53, 0x45, 0x5f, 0x4d, 0x59, 0x53, 0x51, 0x4c, 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x10, 0x1c, - 0x12, 0x2e, 0x0a, 0x2a, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, - 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, - 0x51, 0x4c, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x10, 0x1d, - 0x12, 0x32, 0x0a, 0x2e, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, - 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, - 0x51, 0x4c, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x4d, 0x49, 0x43, 0x52, 0x4f, 0x53, 0x4f, - 0x46, 0x54, 0x10, 0x1e, 0x12, 0x36, 0x0a, 0x32, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, - 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, - 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x43, 0x4b, 0x52, 0x4f, 0x41, 0x43, 0x48, 0x44, 0x42, 0x5f, 0x53, - 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x1f, 0x12, 0x2c, 0x0a, 0x28, - 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, - 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x4d, 0x4f, 0x4e, 0x47, 0x4f, - 0x44, 0x42, 0x5f, 0x41, 0x54, 0x4c, 0x41, 0x53, 0x10, 0x20, 0x12, 0x28, 0x0a, 0x24, 0x44, 0x49, + 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x52, 0x45, 0x44, 0x49, 0x53, 0x5f, 0x43, 0x4c, 0x55, + 0x53, 0x54, 0x45, 0x52, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, + 0x10, 0x1b, 0x12, 0x2a, 0x0a, 0x26, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, + 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, + 0x5f, 0x4d, 0x59, 0x53, 0x51, 0x4c, 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x10, 0x1c, 0x12, 0x2e, + 0x0a, 0x2a, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, + 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x51, 0x4c, + 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x41, 0x5a, 0x55, 0x52, 0x45, 0x10, 0x1d, 0x12, 0x32, + 0x0a, 0x2e, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, + 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x51, 0x4c, + 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x4d, 0x49, 0x43, 0x52, 0x4f, 0x53, 0x4f, 0x46, 0x54, + 0x10, 0x1e, 0x12, 0x36, 0x0a, 0x32, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, + 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, + 0x5f, 0x43, 0x4f, 0x43, 0x4b, 0x52, 0x4f, 0x41, 0x43, 0x48, 0x44, 0x42, 0x5f, 0x53, 0x45, 0x4c, + 0x46, 0x5f, 0x48, 0x4f, 0x53, 0x54, 0x45, 0x44, 0x10, 0x1f, 0x12, 0x2c, 0x0a, 0x28, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, - 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x4e, 0x4f, 0x57, 0x46, 0x4c, 0x41, - 0x4b, 0x45, 0x10, 0x21, 0x12, 0x2c, 0x0a, 0x28, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, - 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x4f, 0x43, 0x5f, 0x44, 0x41, - 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x52, 0x44, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, - 0x10, 0x22, 0x12, 0x34, 0x0a, 0x30, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, + 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x4d, 0x4f, 0x4e, 0x47, 0x4f, 0x44, 0x42, + 0x5f, 0x41, 0x54, 0x4c, 0x41, 0x53, 0x10, 0x20, 0x12, 0x28, 0x0a, 0x24, 0x44, 0x49, 0x53, 0x43, + 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x41, + 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x53, 0x4e, 0x4f, 0x57, 0x46, 0x4c, 0x41, 0x4b, 0x45, + 0x10, 0x21, 0x12, 0x2c, 0x0a, 0x28, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x4f, 0x43, 0x5f, 0x44, 0x41, 0x54, 0x41, - 0x42, 0x41, 0x53, 0x45, 0x5f, 0x48, 0x49, 0x47, 0x48, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, - 0x42, 0x49, 0x4c, 0x49, 0x54, 0x59, 0x10, 0x23, 0x12, 0x37, 0x0a, 0x33, 0x44, 0x49, 0x53, 0x43, - 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x4f, - 0x43, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d, - 0x49, 0x43, 0x5f, 0x52, 0x45, 0x47, 0x49, 0x53, 0x54, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, - 0x24, 0x12, 0x26, 0x0a, 0x22, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, - 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x53, 0x41, 0x4d, 0x4c, 0x5f, 0x41, 0x50, 0x50, 0x4c, - 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x25, 0x12, 0x22, 0x0a, 0x1e, 0x44, 0x49, 0x53, - 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x45, - 0x43, 0x32, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x10, 0x26, 0x2a, 0xa3, 0x01, - 0x0a, 0x0e, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x1f, 0x0a, 0x1b, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, - 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x01, 0x12, 0x1b, - 0x0a, 0x17, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, - 0x53, 0x5f, 0x53, 0x4b, 0x49, 0x50, 0x50, 0x45, 0x44, 0x10, 0x02, 0x12, 0x19, 0x0a, 0x15, 0x44, - 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, - 0x52, 0x52, 0x4f, 0x52, 0x10, 0x03, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, - 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x41, 0x42, 0x4f, 0x52, 0x54, 0x45, - 0x44, 0x10, 0x04, 0x2a, 0x97, 0x02, 0x0a, 0x03, 0x43, 0x54, 0x41, 0x12, 0x13, 0x0a, 0x0f, 0x43, - 0x54, 0x41, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, - 0x12, 0x16, 0x0a, 0x12, 0x43, 0x54, 0x41, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x43, 0x4f, 0x4e, - 0x4e, 0x45, 0x43, 0x54, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x54, 0x41, 0x5f, - 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x53, 0x10, - 0x02, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x54, 0x41, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, - 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x53, 0x10, 0x03, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x54, - 0x41, 0x5f, 0x50, 0x52, 0x45, 0x4d, 0x49, 0x55, 0x4d, 0x5f, 0x53, 0x55, 0x50, 0x50, 0x4f, 0x52, - 0x54, 0x10, 0x04, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x54, 0x41, 0x5f, 0x54, 0x52, 0x55, 0x53, 0x54, - 0x45, 0x44, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x53, 0x10, 0x05, 0x12, 0x16, 0x0a, 0x12, - 0x43, 0x54, 0x41, 0x5f, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x45, 0x5f, 0x42, 0x41, 0x4e, 0x4e, - 0x45, 0x52, 0x10, 0x06, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x54, 0x41, 0x5f, 0x42, 0x49, 0x4c, 0x4c, - 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x55, 0x4d, 0x4d, 0x41, 0x52, 0x59, 0x10, 0x07, 0x12, 0x13, 0x0a, - 0x0f, 0x43, 0x54, 0x41, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, - 0x10, 0x08, 0x12, 0x19, 0x0a, 0x15, 0x43, 0x54, 0x41, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, - 0x5f, 0x4d, 0x4f, 0x4e, 0x49, 0x54, 0x4f, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x09, 0x12, 0x1e, 0x0a, - 0x1a, 0x43, 0x54, 0x41, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x41, 0x55, - 0x44, 0x49, 0x54, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x10, 0x0a, 0x2a, 0xdc, 0x07, - 0x0a, 0x15, 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x72, - 0x6f, 0x6c, 0x6c, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x27, 0x0a, 0x23, 0x49, 0x4e, 0x54, 0x45, 0x47, - 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, - 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, - 0x12, 0x21, 0x0a, 0x1d, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x53, 0x4c, 0x41, 0x43, - 0x4b, 0x10, 0x01, 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x41, - 0x57, 0x53, 0x5f, 0x4f, 0x49, 0x44, 0x43, 0x10, 0x02, 0x12, 0x25, 0x0a, 0x21, 0x49, 0x4e, 0x54, - 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, - 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x50, 0x41, 0x47, 0x45, 0x52, 0x44, 0x55, 0x54, 0x59, 0x10, 0x03, - 0x12, 0x21, 0x0a, 0x1d, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x45, 0x4d, 0x41, 0x49, - 0x4c, 0x10, 0x04, 0x12, 0x20, 0x0a, 0x1c, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4a, - 0x49, 0x52, 0x41, 0x10, 0x05, 0x12, 0x23, 0x0a, 0x1f, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, + 0x42, 0x41, 0x53, 0x45, 0x5f, 0x52, 0x44, 0x53, 0x5f, 0x50, 0x52, 0x4f, 0x58, 0x59, 0x10, 0x22, + 0x12, 0x34, 0x0a, 0x30, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, + 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x4f, 0x43, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, + 0x53, 0x45, 0x5f, 0x48, 0x49, 0x47, 0x48, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x49, + 0x4c, 0x49, 0x54, 0x59, 0x10, 0x23, 0x12, 0x37, 0x0a, 0x33, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, + 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x44, 0x4f, 0x43, 0x5f, + 0x44, 0x41, 0x54, 0x41, 0x42, 0x41, 0x53, 0x45, 0x5f, 0x44, 0x59, 0x4e, 0x41, 0x4d, 0x49, 0x43, + 0x5f, 0x52, 0x45, 0x47, 0x49, 0x53, 0x54, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x24, 0x12, + 0x26, 0x0a, 0x22, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, + 0x55, 0x52, 0x43, 0x45, 0x5f, 0x53, 0x41, 0x4d, 0x4c, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, + 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x25, 0x12, 0x22, 0x0a, 0x1e, 0x44, 0x49, 0x53, 0x43, 0x4f, + 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, 0x5f, 0x45, 0x43, 0x32, + 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4e, 0x43, 0x45, 0x10, 0x26, 0x2a, 0xa3, 0x01, 0x0a, 0x0e, + 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1f, + 0x0a, 0x1b, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, + 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, + 0x1b, 0x0a, 0x17, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x01, 0x12, 0x1b, 0x0a, 0x17, + 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, + 0x53, 0x4b, 0x49, 0x50, 0x50, 0x45, 0x44, 0x10, 0x02, 0x12, 0x19, 0x0a, 0x15, 0x44, 0x49, 0x53, + 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x45, 0x52, 0x52, + 0x4f, 0x52, 0x10, 0x03, 0x12, 0x1b, 0x0a, 0x17, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x41, 0x42, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x10, + 0x04, 0x2a, 0x97, 0x02, 0x0a, 0x03, 0x43, 0x54, 0x41, 0x12, 0x13, 0x0a, 0x0f, 0x43, 0x54, 0x41, + 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, + 0x0a, 0x12, 0x43, 0x54, 0x41, 0x5f, 0x41, 0x55, 0x54, 0x48, 0x5f, 0x43, 0x4f, 0x4e, 0x4e, 0x45, + 0x43, 0x54, 0x4f, 0x52, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x54, 0x41, 0x5f, 0x41, 0x43, + 0x54, 0x49, 0x56, 0x45, 0x5f, 0x53, 0x45, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x53, 0x10, 0x02, 0x12, + 0x17, 0x0a, 0x13, 0x43, 0x54, 0x41, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x52, 0x45, + 0x51, 0x55, 0x45, 0x53, 0x54, 0x53, 0x10, 0x03, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x54, 0x41, 0x5f, + 0x50, 0x52, 0x45, 0x4d, 0x49, 0x55, 0x4d, 0x5f, 0x53, 0x55, 0x50, 0x50, 0x4f, 0x52, 0x54, 0x10, + 0x04, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x54, 0x41, 0x5f, 0x54, 0x52, 0x55, 0x53, 0x54, 0x45, 0x44, + 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x53, 0x10, 0x05, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x54, + 0x41, 0x5f, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x45, 0x5f, 0x42, 0x41, 0x4e, 0x4e, 0x45, 0x52, + 0x10, 0x06, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x54, 0x41, 0x5f, 0x42, 0x49, 0x4c, 0x4c, 0x49, 0x4e, + 0x47, 0x5f, 0x53, 0x55, 0x4d, 0x4d, 0x41, 0x52, 0x59, 0x10, 0x07, 0x12, 0x13, 0x0a, 0x0f, 0x43, + 0x54, 0x41, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x08, + 0x12, 0x19, 0x0a, 0x15, 0x43, 0x54, 0x41, 0x5f, 0x41, 0x43, 0x43, 0x45, 0x53, 0x53, 0x5f, 0x4d, + 0x4f, 0x4e, 0x49, 0x54, 0x4f, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x09, 0x12, 0x1e, 0x0a, 0x1a, 0x43, + 0x54, 0x41, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x52, 0x4e, 0x41, 0x4c, 0x5f, 0x41, 0x55, 0x44, 0x49, + 0x54, 0x5f, 0x53, 0x54, 0x4f, 0x52, 0x41, 0x47, 0x45, 0x10, 0x0a, 0x2a, 0xdc, 0x07, 0x0a, 0x15, + 0x49, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, + 0x6c, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x27, 0x0a, 0x23, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, - 0x5f, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x52, 0x44, 0x10, 0x06, 0x12, 0x26, 0x0a, 0x22, 0x49, 0x4e, - 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, - 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x54, 0x54, 0x45, 0x52, 0x4d, 0x4f, 0x53, 0x54, - 0x10, 0x07, 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x53, - 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x53, 0x10, 0x08, 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x54, 0x45, + 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x21, + 0x0a, 0x1d, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, + 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x53, 0x4c, 0x41, 0x43, 0x4b, 0x10, + 0x01, 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, + 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x41, 0x57, 0x53, + 0x5f, 0x4f, 0x49, 0x44, 0x43, 0x10, 0x02, 0x12, 0x25, 0x0a, 0x21, 0x49, 0x4e, 0x54, 0x45, 0x47, + 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, + 0x4e, 0x44, 0x5f, 0x50, 0x41, 0x47, 0x45, 0x52, 0x44, 0x55, 0x54, 0x59, 0x10, 0x03, 0x12, 0x21, + 0x0a, 0x1d, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, + 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x10, + 0x04, 0x12, 0x20, 0x0a, 0x1c, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, + 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4a, 0x49, 0x52, + 0x41, 0x10, 0x05, 0x12, 0x23, 0x0a, 0x1f, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, + 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x44, + 0x49, 0x53, 0x43, 0x4f, 0x52, 0x44, 0x10, 0x06, 0x12, 0x26, 0x0a, 0x22, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, - 0x49, 0x4e, 0x44, 0x5f, 0x4f, 0x50, 0x53, 0x47, 0x45, 0x4e, 0x49, 0x45, 0x10, 0x09, 0x12, 0x20, + 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x54, 0x54, 0x45, 0x52, 0x4d, 0x4f, 0x53, 0x54, 0x10, 0x07, + 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, + 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x53, 0x5f, 0x54, + 0x45, 0x41, 0x4d, 0x53, 0x10, 0x08, 0x12, 0x24, 0x0a, 0x20, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, + 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, + 0x44, 0x5f, 0x4f, 0x50, 0x53, 0x47, 0x45, 0x4e, 0x49, 0x45, 0x10, 0x09, 0x12, 0x20, 0x0a, 0x1c, + 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, + 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4f, 0x4b, 0x54, 0x41, 0x10, 0x0a, 0x12, 0x20, 0x0a, 0x1c, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, - 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4f, 0x4b, 0x54, 0x41, 0x10, 0x0a, - 0x12, 0x20, 0x0a, 0x1c, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4a, 0x41, 0x4d, 0x46, - 0x10, 0x0b, 0x12, 0x26, 0x0a, 0x22, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, - 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x10, 0x0c, 0x12, 0x35, 0x0a, 0x31, 0x49, 0x4e, - 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, - 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, - 0x5f, 0x47, 0x49, 0x54, 0x48, 0x55, 0x42, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x10, - 0x0d, 0x12, 0x2f, 0x0a, 0x2b, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, - 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x43, 0x49, 0x52, 0x43, 0x4c, 0x45, 0x43, 0x49, - 0x10, 0x0e, 0x12, 0x2d, 0x0a, 0x29, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, - 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x47, 0x49, 0x54, 0x4c, 0x41, 0x42, 0x10, - 0x0f, 0x12, 0x2e, 0x0a, 0x2a, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, - 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x4a, 0x45, 0x4e, 0x4b, 0x49, 0x4e, 0x53, 0x10, - 0x10, 0x12, 0x2e, 0x0a, 0x2a, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, - 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x4e, 0x53, 0x49, 0x42, 0x4c, 0x45, 0x10, - 0x11, 0x12, 0x2a, 0x0a, 0x26, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, - 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x57, 0x53, 0x10, 0x12, 0x12, 0x2a, 0x0a, - 0x26, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, - 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, - 0x5f, 0x49, 0x44, 0x5f, 0x47, 0x43, 0x50, 0x10, 0x13, 0x12, 0x2c, 0x0a, 0x28, 0x49, 0x4e, 0x54, - 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, - 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, - 0x41, 0x5a, 0x55, 0x52, 0x45, 0x10, 0x14, 0x12, 0x30, 0x0a, 0x2c, 0x49, 0x4e, 0x54, 0x45, 0x47, + 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4a, 0x41, 0x4d, 0x46, 0x10, 0x0b, + 0x12, 0x26, 0x0a, 0x22, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, + 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, + 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x10, 0x0c, 0x12, 0x35, 0x0a, 0x31, 0x49, 0x4e, 0x54, 0x45, + 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, + 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x47, + 0x49, 0x54, 0x48, 0x55, 0x42, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x10, 0x0d, 0x12, + 0x2f, 0x0a, 0x2b, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, + 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, + 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x43, 0x49, 0x52, 0x43, 0x4c, 0x45, 0x43, 0x49, 0x10, 0x0e, + 0x12, 0x2d, 0x0a, 0x29, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, + 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, + 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x47, 0x49, 0x54, 0x4c, 0x41, 0x42, 0x10, 0x0f, 0x12, + 0x2e, 0x0a, 0x2a, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, + 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, + 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x4a, 0x45, 0x4e, 0x4b, 0x49, 0x4e, 0x53, 0x10, 0x10, 0x12, + 0x2e, 0x0a, 0x2a, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, + 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, + 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x4e, 0x53, 0x49, 0x42, 0x4c, 0x45, 0x10, 0x11, 0x12, + 0x2a, 0x0a, 0x26, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, + 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, + 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x57, 0x53, 0x10, 0x12, 0x12, 0x2a, 0x0a, 0x26, 0x49, + 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, + 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, + 0x44, 0x5f, 0x47, 0x43, 0x50, 0x10, 0x13, 0x12, 0x2c, 0x0a, 0x28, 0x49, 0x4e, 0x54, 0x45, 0x47, + 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, + 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x41, 0x5a, + 0x55, 0x52, 0x45, 0x10, 0x14, 0x12, 0x30, 0x0a, 0x2c, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, + 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, 0x4e, 0x44, + 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x53, 0x50, 0x41, 0x43, + 0x45, 0x4c, 0x49, 0x46, 0x54, 0x10, 0x15, 0x12, 0x31, 0x0a, 0x2d, 0x49, 0x4e, 0x54, 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, 0x4b, 0x49, - 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x53, 0x50, - 0x41, 0x43, 0x45, 0x4c, 0x49, 0x46, 0x54, 0x10, 0x15, 0x12, 0x31, 0x0a, 0x2d, 0x49, 0x4e, 0x54, - 0x45, 0x47, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x45, 0x4e, 0x52, 0x4f, 0x4c, 0x4c, 0x5f, - 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, - 0x4b, 0x55, 0x42, 0x45, 0x52, 0x4e, 0x45, 0x54, 0x45, 0x53, 0x10, 0x16, 0x2a, 0x88, 0x01, 0x0a, - 0x12, 0x45, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x24, 0x0a, 0x20, 0x45, 0x44, 0x49, 0x54, 0x4f, 0x52, 0x5f, 0x43, 0x48, - 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, - 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x25, 0x0a, 0x21, 0x45, 0x44, 0x49, - 0x54, 0x4f, 0x52, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, - 0x53, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x45, 0x44, 0x10, 0x01, - 0x12, 0x25, 0x0a, 0x21, 0x45, 0x44, 0x49, 0x54, 0x4f, 0x52, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, - 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x52, 0x45, - 0x4d, 0x4f, 0x56, 0x45, 0x44, 0x10, 0x02, 0x2a, 0x3f, 0x0a, 0x07, 0x46, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x55, 0x4e, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x46, - 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x54, 0x52, 0x55, 0x53, 0x54, 0x45, 0x44, 0x5f, 0x44, - 0x45, 0x56, 0x49, 0x43, 0x45, 0x53, 0x10, 0x01, 0x2a, 0xa0, 0x01, 0x0a, 0x1b, 0x46, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2d, 0x0a, 0x29, 0x46, 0x45, 0x41, 0x54, - 0x55, 0x52, 0x45, 0x5f, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x44, 0x41, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x2a, 0x0a, 0x26, 0x46, 0x45, 0x41, 0x54, 0x55, - 0x52, 0x45, 0x5f, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x44, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x45, - 0x44, 0x10, 0x01, 0x12, 0x26, 0x0a, 0x22, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x52, - 0x45, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x44, 0x4f, 0x4e, 0x45, 0x10, 0x02, 0x2a, 0x82, 0x01, 0x0a, 0x0c, - 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1d, 0x0a, 0x19, - 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x55, 0x4e, - 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x28, 0x0a, 0x24, 0x4c, - 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x44, 0x45, 0x56, - 0x49, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x55, 0x53, 0x54, 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x5f, 0x4a, - 0x41, 0x4d, 0x46, 0x10, 0x01, 0x12, 0x29, 0x0a, 0x25, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, - 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x54, 0x52, - 0x55, 0x53, 0x54, 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x5f, 0x55, 0x53, 0x41, 0x47, 0x45, 0x10, 0x02, - 0x32, 0xb4, 0x02, 0x0a, 0x18, 0x54, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x70, - 0x6f, 0x72, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5b, 0x0a, - 0x0b, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x22, 0x2e, 0x70, - 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x75, - 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x23, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x5b, 0x0a, 0x0c, 0x53, 0x75, - 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x23, 0x2e, 0x70, 0x72, 0x65, + 0x4e, 0x44, 0x5f, 0x4d, 0x41, 0x43, 0x48, 0x49, 0x4e, 0x45, 0x5f, 0x49, 0x44, 0x5f, 0x4b, 0x55, + 0x42, 0x45, 0x52, 0x4e, 0x45, 0x54, 0x45, 0x53, 0x10, 0x16, 0x2a, 0x88, 0x01, 0x0a, 0x12, 0x45, + 0x64, 0x69, 0x74, 0x6f, 0x72, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x12, 0x24, 0x0a, 0x20, 0x45, 0x44, 0x49, 0x54, 0x4f, 0x52, 0x5f, 0x43, 0x48, 0x41, 0x4e, + 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, + 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x25, 0x0a, 0x21, 0x45, 0x44, 0x49, 0x54, 0x4f, + 0x52, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, + 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x47, 0x52, 0x41, 0x4e, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x25, + 0x0a, 0x21, 0x45, 0x44, 0x49, 0x54, 0x4f, 0x52, 0x5f, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, + 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x52, 0x4f, 0x4c, 0x45, 0x5f, 0x52, 0x45, 0x4d, 0x4f, + 0x56, 0x45, 0x44, 0x10, 0x02, 0x2a, 0x3f, 0x0a, 0x07, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x12, 0x17, 0x0a, 0x13, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x1b, 0x0a, 0x17, 0x46, 0x45, 0x41, + 0x54, 0x55, 0x52, 0x45, 0x5f, 0x54, 0x52, 0x55, 0x53, 0x54, 0x45, 0x44, 0x5f, 0x44, 0x45, 0x56, + 0x49, 0x43, 0x45, 0x53, 0x10, 0x01, 0x2a, 0xa0, 0x01, 0x0a, 0x1b, 0x46, 0x65, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x52, 0x65, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x2d, 0x0a, 0x29, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, + 0x45, 0x5f, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x2a, 0x0a, 0x26, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, + 0x5f, 0x52, 0x45, 0x43, 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, + 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, + 0x01, 0x12, 0x26, 0x0a, 0x22, 0x46, 0x45, 0x41, 0x54, 0x55, 0x52, 0x45, 0x5f, 0x52, 0x45, 0x43, + 0x4f, 0x4d, 0x4d, 0x45, 0x4e, 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x44, 0x4f, 0x4e, 0x45, 0x10, 0x02, 0x2a, 0x82, 0x01, 0x0a, 0x0c, 0x4c, 0x69, + 0x63, 0x65, 0x6e, 0x73, 0x65, 0x4c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x1d, 0x0a, 0x19, 0x4c, 0x49, + 0x43, 0x45, 0x4e, 0x53, 0x45, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x28, 0x0a, 0x24, 0x4c, 0x49, 0x43, + 0x45, 0x4e, 0x53, 0x45, 0x5f, 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, + 0x45, 0x5f, 0x54, 0x52, 0x55, 0x53, 0x54, 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x5f, 0x4a, 0x41, 0x4d, + 0x46, 0x10, 0x01, 0x12, 0x29, 0x0a, 0x25, 0x4c, 0x49, 0x43, 0x45, 0x4e, 0x53, 0x45, 0x5f, 0x4c, + 0x49, 0x4d, 0x49, 0x54, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x54, 0x52, 0x55, 0x53, + 0x54, 0x5f, 0x54, 0x45, 0x41, 0x4d, 0x5f, 0x55, 0x53, 0x41, 0x47, 0x45, 0x10, 0x02, 0x32, 0xb4, + 0x02, 0x0a, 0x18, 0x54, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x69, 0x6e, 0x67, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5b, 0x0a, 0x0b, 0x53, + 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x22, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x75, 0x62, 0x6d, - 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x24, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x0d, 0x48, 0x65, 0x6c, 0x6c, 0x6f, - 0x54, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x24, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, - 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x54, - 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, + 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, - 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x54, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xc9, 0x01, 0x0a, 0x12, 0x63, 0x6f, 0x6d, 0x2e, - 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x42, 0x0d, - 0x54, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, - 0x4b, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x76, - 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, - 0x72, 0x74, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, - 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x3b, 0x70, - 0x72, 0x65, 0x68, 0x6f, 0x67, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0xa2, 0x02, 0x03, 0x50, - 0x58, 0x58, 0xaa, 0x02, 0x0e, 0x50, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x56, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0xca, 0x02, 0x0e, 0x50, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x5c, 0x56, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0xe2, 0x02, 0x1a, 0x50, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x5c, 0x56, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0xea, 0x02, 0x0f, 0x50, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, - 0x70, 0x68, 0x61, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x5b, 0x0a, 0x0c, 0x53, 0x75, 0x62, 0x6d, + 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x23, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, + 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, + 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x5e, 0x0a, 0x0d, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x54, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x24, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x54, 0x65, 0x6c, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x70, + 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x48, 0x65, + 0x6c, 0x6c, 0x6f, 0x54, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0xc9, 0x01, 0x0a, 0x12, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x72, + 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x42, 0x0d, 0x54, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x4b, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x70, 0x72, + 0x65, 0x68, 0x6f, 0x67, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x3b, 0x70, 0x72, 0x65, + 0x68, 0x6f, 0x67, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0xa2, 0x02, 0x03, 0x50, 0x58, 0x58, + 0xaa, 0x02, 0x0e, 0x50, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0xca, 0x02, 0x0e, 0x50, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x5c, 0x56, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0xe2, 0x02, 0x1a, 0x50, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x5c, 0x56, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, + 0x02, 0x0f, 0x50, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x3a, 0x3a, 0x56, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -9030,7 +9121,7 @@ func file_prehog_v1alpha_teleport_proto_rawDescGZIP() []byte { } var file_prehog_v1alpha_teleport_proto_enumTypes = make([]protoimpl.EnumInfo, 11) -var file_prehog_v1alpha_teleport_proto_msgTypes = make([]protoimpl.MessageInfo, 86) +var file_prehog_v1alpha_teleport_proto_msgTypes = make([]protoimpl.MessageInfo, 87) var file_prehog_v1alpha_teleport_proto_goTypes = []interface{}{ (ResourceKind)(0), // 0: prehog.v1alpha.ResourceKind (DiscoverResource)(0), // 1: prehog.v1alpha.DiscoverResource @@ -9123,21 +9214,22 @@ var file_prehog_v1alpha_teleport_proto_goTypes = []interface{}{ (*ExternalAuditStorageAuthenticateEvent)(nil), // 88: prehog.v1alpha.ExternalAuditStorageAuthenticateEvent (*SecurityReportGetResultEvent)(nil), // 89: prehog.v1alpha.SecurityReportGetResultEvent (*AuditQueryRunEvent)(nil), // 90: prehog.v1alpha.AuditQueryRunEvent - (*SubmitEventRequest)(nil), // 91: prehog.v1alpha.SubmitEventRequest - (*SubmitEventResponse)(nil), // 92: prehog.v1alpha.SubmitEventResponse - (*SubmitEventsRequest)(nil), // 93: prehog.v1alpha.SubmitEventsRequest - (*SubmitEventsResponse)(nil), // 94: prehog.v1alpha.SubmitEventsResponse - (*HelloTeleportRequest)(nil), // 95: prehog.v1alpha.HelloTeleportRequest - (*HelloTeleportResponse)(nil), // 96: prehog.v1alpha.HelloTeleportResponse - (*durationpb.Duration)(nil), // 97: google.protobuf.Duration - (*timestamppb.Timestamp)(nil), // 98: google.protobuf.Timestamp + (*DiscoveryFetchEvent)(nil), // 91: prehog.v1alpha.DiscoveryFetchEvent + (*SubmitEventRequest)(nil), // 92: prehog.v1alpha.SubmitEventRequest + (*SubmitEventResponse)(nil), // 93: prehog.v1alpha.SubmitEventResponse + (*SubmitEventsRequest)(nil), // 94: prehog.v1alpha.SubmitEventsRequest + (*SubmitEventsResponse)(nil), // 95: prehog.v1alpha.SubmitEventsResponse + (*HelloTeleportRequest)(nil), // 96: prehog.v1alpha.HelloTeleportRequest + (*HelloTeleportResponse)(nil), // 97: prehog.v1alpha.HelloTeleportResponse + (*durationpb.Duration)(nil), // 98: google.protobuf.Duration + (*timestamppb.Timestamp)(nil), // 99: google.protobuf.Timestamp } var file_prehog_v1alpha_teleport_proto_depIdxs = []int32{ 14, // 0: prehog.v1alpha.ResourceCreateEvent.database:type_name -> prehog.v1alpha.DiscoveredDatabaseMetadata 0, // 1: prehog.v1alpha.ResourceHeartbeatEvent.resource_kind:type_name -> prehog.v1alpha.ResourceKind 17, // 2: prehog.v1alpha.SessionStartEvent.database:type_name -> prehog.v1alpha.SessionStartDatabaseMetadata 18, // 3: prehog.v1alpha.SessionStartEvent.desktop:type_name -> prehog.v1alpha.SessionStartDesktopMetadata - 97, // 4: prehog.v1alpha.UserCertificateIssuedEvent.ttl:type_name -> google.protobuf.Duration + 98, // 4: prehog.v1alpha.UserCertificateIssuedEvent.ttl:type_name -> google.protobuf.Duration 1, // 5: prehog.v1alpha.DiscoverResourceMetadata.resource:type_name -> prehog.v1alpha.DiscoverResource 2, // 6: prehog.v1alpha.DiscoverStepStatus.status:type_name -> prehog.v1alpha.DiscoverStatus 30, // 7: prehog.v1alpha.UIDiscoverStartedEvent.metadata:type_name -> prehog.v1alpha.DiscoverMetadata @@ -9208,7 +9300,7 @@ var file_prehog_v1alpha_teleport_proto_depIdxs = []int32{ 6, // 72: prehog.v1alpha.FeatureRecommendationEvent.feature:type_name -> prehog.v1alpha.Feature 7, // 73: prehog.v1alpha.FeatureRecommendationEvent.feature_recommendation_status:type_name -> prehog.v1alpha.FeatureRecommendationStatus 8, // 74: prehog.v1alpha.LicenseLimitEvent.license_limit:type_name -> prehog.v1alpha.LicenseLimit - 98, // 75: prehog.v1alpha.SubmitEventRequest.timestamp:type_name -> google.protobuf.Timestamp + 99, // 75: prehog.v1alpha.SubmitEventRequest.timestamp:type_name -> google.protobuf.Timestamp 11, // 76: prehog.v1alpha.SubmitEventRequest.user_login:type_name -> prehog.v1alpha.UserLoginEvent 12, // 77: prehog.v1alpha.SubmitEventRequest.sso_create:type_name -> prehog.v1alpha.SSOCreateEvent 13, // 78: prehog.v1alpha.SubmitEventRequest.resource_create:type_name -> prehog.v1alpha.ResourceCreateEvent @@ -9279,21 +9371,22 @@ var file_prehog_v1alpha_teleport_proto_depIdxs = []int32{ 88, // 143: prehog.v1alpha.SubmitEventRequest.external_audit_storage_authenticate:type_name -> prehog.v1alpha.ExternalAuditStorageAuthenticateEvent 89, // 144: prehog.v1alpha.SubmitEventRequest.security_report_get_result:type_name -> prehog.v1alpha.SecurityReportGetResultEvent 90, // 145: prehog.v1alpha.SubmitEventRequest.audit_query_run:type_name -> prehog.v1alpha.AuditQueryRunEvent - 74, // 146: prehog.v1alpha.SubmitEventRequest.access_list_review_create:type_name -> prehog.v1alpha.AccessListReviewCreateEvent - 75, // 147: prehog.v1alpha.SubmitEventRequest.access_list_review_delete:type_name -> prehog.v1alpha.AccessListReviewDeleteEvent - 76, // 148: prehog.v1alpha.SubmitEventRequest.access_list_review_compliance:type_name -> prehog.v1alpha.AccessListReviewComplianceEvent - 91, // 149: prehog.v1alpha.SubmitEventsRequest.events:type_name -> prehog.v1alpha.SubmitEventRequest - 91, // 150: prehog.v1alpha.TeleportReportingService.SubmitEvent:input_type -> prehog.v1alpha.SubmitEventRequest - 93, // 151: prehog.v1alpha.TeleportReportingService.SubmitEvents:input_type -> prehog.v1alpha.SubmitEventsRequest - 95, // 152: prehog.v1alpha.TeleportReportingService.HelloTeleport:input_type -> prehog.v1alpha.HelloTeleportRequest - 92, // 153: prehog.v1alpha.TeleportReportingService.SubmitEvent:output_type -> prehog.v1alpha.SubmitEventResponse - 94, // 154: prehog.v1alpha.TeleportReportingService.SubmitEvents:output_type -> prehog.v1alpha.SubmitEventsResponse - 96, // 155: prehog.v1alpha.TeleportReportingService.HelloTeleport:output_type -> prehog.v1alpha.HelloTeleportResponse - 153, // [153:156] is the sub-list for method output_type - 150, // [150:153] is the sub-list for method input_type - 150, // [150:150] is the sub-list for extension type_name - 150, // [150:150] is the sub-list for extension extendee - 0, // [0:150] is the sub-list for field type_name + 91, // 146: prehog.v1alpha.SubmitEventRequest.discovery_fetch_event:type_name -> prehog.v1alpha.DiscoveryFetchEvent + 74, // 147: prehog.v1alpha.SubmitEventRequest.access_list_review_create:type_name -> prehog.v1alpha.AccessListReviewCreateEvent + 75, // 148: prehog.v1alpha.SubmitEventRequest.access_list_review_delete:type_name -> prehog.v1alpha.AccessListReviewDeleteEvent + 76, // 149: prehog.v1alpha.SubmitEventRequest.access_list_review_compliance:type_name -> prehog.v1alpha.AccessListReviewComplianceEvent + 92, // 150: prehog.v1alpha.SubmitEventsRequest.events:type_name -> prehog.v1alpha.SubmitEventRequest + 92, // 151: prehog.v1alpha.TeleportReportingService.SubmitEvent:input_type -> prehog.v1alpha.SubmitEventRequest + 94, // 152: prehog.v1alpha.TeleportReportingService.SubmitEvents:input_type -> prehog.v1alpha.SubmitEventsRequest + 96, // 153: prehog.v1alpha.TeleportReportingService.HelloTeleport:input_type -> prehog.v1alpha.HelloTeleportRequest + 93, // 154: prehog.v1alpha.TeleportReportingService.SubmitEvent:output_type -> prehog.v1alpha.SubmitEventResponse + 95, // 155: prehog.v1alpha.TeleportReportingService.SubmitEvents:output_type -> prehog.v1alpha.SubmitEventsResponse + 97, // 156: prehog.v1alpha.TeleportReportingService.HelloTeleport:output_type -> prehog.v1alpha.HelloTeleportResponse + 154, // [154:157] is the sub-list for method output_type + 151, // [151:154] is the sub-list for method input_type + 151, // [151:151] is the sub-list for extension type_name + 151, // [151:151] is the sub-list for extension extendee + 0, // [0:151] is the sub-list for field type_name } func init() { file_prehog_v1alpha_teleport_proto_init() } @@ -10263,7 +10356,7 @@ func file_prehog_v1alpha_teleport_proto_init() { } } file_prehog_v1alpha_teleport_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubmitEventRequest); i { + switch v := v.(*DiscoveryFetchEvent); i { case 0: return &v.state case 1: @@ -10275,7 +10368,7 @@ func file_prehog_v1alpha_teleport_proto_init() { } } file_prehog_v1alpha_teleport_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubmitEventResponse); i { + switch v := v.(*SubmitEventRequest); i { case 0: return &v.state case 1: @@ -10287,7 +10380,7 @@ func file_prehog_v1alpha_teleport_proto_init() { } } file_prehog_v1alpha_teleport_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubmitEventsRequest); i { + switch v := v.(*SubmitEventResponse); i { case 0: return &v.state case 1: @@ -10299,7 +10392,7 @@ func file_prehog_v1alpha_teleport_proto_init() { } } file_prehog_v1alpha_teleport_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubmitEventsResponse); i { + switch v := v.(*SubmitEventsRequest); i { case 0: return &v.state case 1: @@ -10311,7 +10404,7 @@ func file_prehog_v1alpha_teleport_proto_init() { } } file_prehog_v1alpha_teleport_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*HelloTeleportRequest); i { + switch v := v.(*SubmitEventsResponse); i { case 0: return &v.state case 1: @@ -10323,6 +10416,18 @@ func file_prehog_v1alpha_teleport_proto_init() { } } file_prehog_v1alpha_teleport_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*HelloTeleportRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_prehog_v1alpha_teleport_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*HelloTeleportResponse); i { case 0: return &v.state @@ -10335,7 +10440,7 @@ func file_prehog_v1alpha_teleport_proto_init() { } } } - file_prehog_v1alpha_teleport_proto_msgTypes[80].OneofWrappers = []interface{}{ + file_prehog_v1alpha_teleport_proto_msgTypes[81].OneofWrappers = []interface{}{ (*SubmitEventRequest_UserLogin)(nil), (*SubmitEventRequest_SsoCreate)(nil), (*SubmitEventRequest_ResourceCreate)(nil), @@ -10406,6 +10511,7 @@ func file_prehog_v1alpha_teleport_proto_init() { (*SubmitEventRequest_ExternalAuditStorageAuthenticate)(nil), (*SubmitEventRequest_SecurityReportGetResult)(nil), (*SubmitEventRequest_AuditQueryRun)(nil), + (*SubmitEventRequest_DiscoveryFetchEvent)(nil), (*SubmitEventRequest_AccessListReviewCreate)(nil), (*SubmitEventRequest_AccessListReviewDelete)(nil), (*SubmitEventRequest_AccessListReviewCompliance)(nil), @@ -10416,7 +10522,7 @@ func file_prehog_v1alpha_teleport_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_prehog_v1alpha_teleport_proto_rawDesc, NumEnums: 11, - NumMessages: 86, + NumMessages: 87, NumExtensions: 0, NumServices: 1, }, diff --git a/gen/proto/js/prehog/v1alpha/teleport_pb.d.ts b/gen/proto/js/prehog/v1alpha/teleport_pb.d.ts index 3b643d75faa77..6ed09b32db860 100644 --- a/gen/proto/js/prehog/v1alpha/teleport_pb.d.ts +++ b/gen/proto/js/prehog/v1alpha/teleport_pb.d.ts @@ -2467,6 +2467,31 @@ export namespace AuditQueryRunEvent { } } +export class DiscoveryFetchEvent extends jspb.Message { + getCloudProvider(): string; + setCloudProvider(value: string): DiscoveryFetchEvent; + + getResourceType(): string; + setResourceType(value: string): DiscoveryFetchEvent; + + + serializeBinary(): Uint8Array; + toObject(includeInstance?: boolean): DiscoveryFetchEvent.AsObject; + static toObject(includeInstance: boolean, msg: DiscoveryFetchEvent): DiscoveryFetchEvent.AsObject; + static extensions: {[key: number]: jspb.ExtensionFieldInfo}; + static extensionsBinary: {[key: number]: jspb.ExtensionFieldBinaryInfo}; + static serializeBinaryToWriter(message: DiscoveryFetchEvent, writer: jspb.BinaryWriter): void; + static deserializeBinary(bytes: Uint8Array): DiscoveryFetchEvent; + static deserializeBinaryFromReader(message: DiscoveryFetchEvent, reader: jspb.BinaryReader): DiscoveryFetchEvent; +} + +export namespace DiscoveryFetchEvent { + export type AsObject = { + cloudProvider: string, + resourceType: string, + } +} + export class SubmitEventRequest extends jspb.Message { getClusterName(): string; setClusterName(value: string): SubmitEventRequest; @@ -2898,6 +2923,12 @@ export class SubmitEventRequest extends jspb.Message { setAuditQueryRun(value?: AuditQueryRunEvent): SubmitEventRequest; + hasDiscoveryFetchEvent(): boolean; + clearDiscoveryFetchEvent(): void; + getDiscoveryFetchEvent(): DiscoveryFetchEvent | undefined; + setDiscoveryFetchEvent(value?: DiscoveryFetchEvent): SubmitEventRequest; + + hasAccessListReviewCreate(): boolean; clearAccessListReviewCreate(): void; getAccessListReviewCreate(): AccessListReviewCreateEvent | undefined; @@ -3002,6 +3033,7 @@ export namespace SubmitEventRequest { externalAuditStorageAuthenticate?: ExternalAuditStorageAuthenticateEvent.AsObject, securityReportGetResult?: SecurityReportGetResultEvent.AsObject, auditQueryRun?: AuditQueryRunEvent.AsObject, + discoveryFetchEvent?: DiscoveryFetchEvent.AsObject, accessListReviewCreate?: AccessListReviewCreateEvent.AsObject, accessListReviewDelete?: AccessListReviewDeleteEvent.AsObject, accessListReviewCompliance?: AccessListReviewComplianceEvent.AsObject, @@ -3150,6 +3182,8 @@ export namespace SubmitEventRequest { AUDIT_QUERY_RUN = 73, + DISCOVERY_FETCH_EVENT = 74, + ACCESS_LIST_REVIEW_CREATE = 75, ACCESS_LIST_REVIEW_DELETE = 76, diff --git a/gen/proto/js/prehog/v1alpha/teleport_pb.js b/gen/proto/js/prehog/v1alpha/teleport_pb.js index c922eb0741a4d..c28c3a7d29646 100644 --- a/gen/proto/js/prehog/v1alpha/teleport_pb.js +++ b/gen/proto/js/prehog/v1alpha/teleport_pb.js @@ -50,6 +50,7 @@ goog.exportSymbol('proto.prehog.v1alpha.DiscoverResourceMetadata', null, global) goog.exportSymbol('proto.prehog.v1alpha.DiscoverStatus', null, global); goog.exportSymbol('proto.prehog.v1alpha.DiscoverStepStatus', null, global); goog.exportSymbol('proto.prehog.v1alpha.DiscoveredDatabaseMetadata', null, global); +goog.exportSymbol('proto.prehog.v1alpha.DiscoveryFetchEvent', null, global); goog.exportSymbol('proto.prehog.v1alpha.EditorChangeEvent', null, global); goog.exportSymbol('proto.prehog.v1alpha.EditorChangeStatus', null, global); goog.exportSymbol('proto.prehog.v1alpha.ExternalAuditStorageAuthenticateEvent', null, global); @@ -1797,6 +1798,27 @@ if (goog.DEBUG && !COMPILED) { */ proto.prehog.v1alpha.AuditQueryRunEvent.displayName = 'proto.prehog.v1alpha.AuditQueryRunEvent'; } +/** + * Generated by JsPbCodeGenerator. + * @param {Array=} opt_data Optional initial data array, typically from a + * server response, or constructed directly in Javascript. The array is used + * in place and becomes part of the constructed object. It is not cloned. + * If no data is provided, the constructed object will be empty, but still + * valid. + * @extends {jspb.Message} + * @constructor + */ +proto.prehog.v1alpha.DiscoveryFetchEvent = function(opt_data) { + jspb.Message.initialize(this, opt_data, 0, -1, null, null); +}; +goog.inherits(proto.prehog.v1alpha.DiscoveryFetchEvent, jspb.Message); +if (goog.DEBUG && !COMPILED) { + /** + * @public + * @override + */ + proto.prehog.v1alpha.DiscoveryFetchEvent.displayName = 'proto.prehog.v1alpha.DiscoveryFetchEvent'; +} /** * Generated by JsPbCodeGenerator. * @param {Array=} opt_data Optional initial data array, typically from a @@ -18016,6 +18038,166 @@ proto.prehog.v1alpha.AuditQueryRunEvent.prototype.setIsSuccess = function(value) + + +if (jspb.Message.GENERATE_TO_OBJECT) { +/** + * Creates an object representation of this proto. + * Field names that are reserved in JavaScript and will be renamed to pb_name. + * Optional fields that are not set will be set to undefined. + * To access a reserved field use, foo.pb_, eg, foo.pb_default. + * For the list of reserved names please see: + * net/proto2/compiler/js/internal/generator.cc#kKeyword. + * @param {boolean=} opt_includeInstance Deprecated. whether to include the + * JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @return {!Object} + */ +proto.prehog.v1alpha.DiscoveryFetchEvent.prototype.toObject = function(opt_includeInstance) { + return proto.prehog.v1alpha.DiscoveryFetchEvent.toObject(opt_includeInstance, this); +}; + + +/** + * Static version of the {@see toObject} method. + * @param {boolean|undefined} includeInstance Deprecated. Whether to include + * the JSPB instance for transitional soy proto support: + * http://goto/soy-param-migration + * @param {!proto.prehog.v1alpha.DiscoveryFetchEvent} msg The msg instance to transform. + * @return {!Object} + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.prehog.v1alpha.DiscoveryFetchEvent.toObject = function(includeInstance, msg) { + var f, obj = { + cloudProvider: jspb.Message.getFieldWithDefault(msg, 1, ""), + resourceType: jspb.Message.getFieldWithDefault(msg, 2, "") + }; + + if (includeInstance) { + obj.$jspbMessageInstance = msg; + } + return obj; +}; +} + + +/** + * Deserializes binary data (in protobuf wire format). + * @param {jspb.ByteSource} bytes The bytes to deserialize. + * @return {!proto.prehog.v1alpha.DiscoveryFetchEvent} + */ +proto.prehog.v1alpha.DiscoveryFetchEvent.deserializeBinary = function(bytes) { + var reader = new jspb.BinaryReader(bytes); + var msg = new proto.prehog.v1alpha.DiscoveryFetchEvent; + return proto.prehog.v1alpha.DiscoveryFetchEvent.deserializeBinaryFromReader(msg, reader); +}; + + +/** + * Deserializes binary data (in protobuf wire format) from the + * given reader into the given message object. + * @param {!proto.prehog.v1alpha.DiscoveryFetchEvent} msg The message object to deserialize into. + * @param {!jspb.BinaryReader} reader The BinaryReader to use. + * @return {!proto.prehog.v1alpha.DiscoveryFetchEvent} + */ +proto.prehog.v1alpha.DiscoveryFetchEvent.deserializeBinaryFromReader = function(msg, reader) { + while (reader.nextField()) { + if (reader.isEndGroup()) { + break; + } + var field = reader.getFieldNumber(); + switch (field) { + case 1: + var value = /** @type {string} */ (reader.readString()); + msg.setCloudProvider(value); + break; + case 2: + var value = /** @type {string} */ (reader.readString()); + msg.setResourceType(value); + break; + default: + reader.skipField(); + break; + } + } + return msg; +}; + + +/** + * Serializes the message to binary data (in protobuf wire format). + * @return {!Uint8Array} + */ +proto.prehog.v1alpha.DiscoveryFetchEvent.prototype.serializeBinary = function() { + var writer = new jspb.BinaryWriter(); + proto.prehog.v1alpha.DiscoveryFetchEvent.serializeBinaryToWriter(this, writer); + return writer.getResultBuffer(); +}; + + +/** + * Serializes the given message to binary data (in protobuf wire + * format), writing to the given BinaryWriter. + * @param {!proto.prehog.v1alpha.DiscoveryFetchEvent} message + * @param {!jspb.BinaryWriter} writer + * @suppress {unusedLocalVariables} f is only used for nested messages + */ +proto.prehog.v1alpha.DiscoveryFetchEvent.serializeBinaryToWriter = function(message, writer) { + var f = undefined; + f = message.getCloudProvider(); + if (f.length > 0) { + writer.writeString( + 1, + f + ); + } + f = message.getResourceType(); + if (f.length > 0) { + writer.writeString( + 2, + f + ); + } +}; + + +/** + * optional string cloud_provider = 1; + * @return {string} + */ +proto.prehog.v1alpha.DiscoveryFetchEvent.prototype.getCloudProvider = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); +}; + + +/** + * @param {string} value + * @return {!proto.prehog.v1alpha.DiscoveryFetchEvent} returns this + */ +proto.prehog.v1alpha.DiscoveryFetchEvent.prototype.setCloudProvider = function(value) { + return jspb.Message.setProto3StringField(this, 1, value); +}; + + +/** + * optional string resource_type = 2; + * @return {string} + */ +proto.prehog.v1alpha.DiscoveryFetchEvent.prototype.getResourceType = function() { + return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); +}; + + +/** + * @param {string} value + * @return {!proto.prehog.v1alpha.DiscoveryFetchEvent} returns this + */ +proto.prehog.v1alpha.DiscoveryFetchEvent.prototype.setResourceType = function(value) { + return jspb.Message.setProto3StringField(this, 2, value); +}; + + + /** * Oneof group definitions for this message. Each group defines the field * numbers belonging to that group. When of these fields' value is set, all @@ -18024,7 +18206,7 @@ proto.prehog.v1alpha.AuditQueryRunEvent.prototype.setIsSuccess = function(value) * @private {!Array>} * @const */ -proto.prehog.v1alpha.SubmitEventRequest.oneofGroups_ = [[3,4,5,6,7,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,75,76,77]]; +proto.prehog.v1alpha.SubmitEventRequest.oneofGroups_ = [[3,4,5,6,7,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77]]; /** * @enum {number} @@ -18101,6 +18283,7 @@ proto.prehog.v1alpha.SubmitEventRequest.EventCase = { EXTERNAL_AUDIT_STORAGE_AUTHENTICATE: 71, SECURITY_REPORT_GET_RESULT: 72, AUDIT_QUERY_RUN: 73, + DISCOVERY_FETCH_EVENT: 74, ACCESS_LIST_REVIEW_CREATE: 75, ACCESS_LIST_REVIEW_DELETE: 76, ACCESS_LIST_REVIEW_COMPLIANCE: 77 @@ -18216,6 +18399,7 @@ proto.prehog.v1alpha.SubmitEventRequest.toObject = function(includeInstance, msg externalAuditStorageAuthenticate: (f = msg.getExternalAuditStorageAuthenticate()) && proto.prehog.v1alpha.ExternalAuditStorageAuthenticateEvent.toObject(includeInstance, f), securityReportGetResult: (f = msg.getSecurityReportGetResult()) && proto.prehog.v1alpha.SecurityReportGetResultEvent.toObject(includeInstance, f), auditQueryRun: (f = msg.getAuditQueryRun()) && proto.prehog.v1alpha.AuditQueryRunEvent.toObject(includeInstance, f), + discoveryFetchEvent: (f = msg.getDiscoveryFetchEvent()) && proto.prehog.v1alpha.DiscoveryFetchEvent.toObject(includeInstance, f), accessListReviewCreate: (f = msg.getAccessListReviewCreate()) && proto.prehog.v1alpha.AccessListReviewCreateEvent.toObject(includeInstance, f), accessListReviewDelete: (f = msg.getAccessListReviewDelete()) && proto.prehog.v1alpha.AccessListReviewDeleteEvent.toObject(includeInstance, f), accessListReviewCompliance: (f = msg.getAccessListReviewCompliance()) && proto.prehog.v1alpha.AccessListReviewComplianceEvent.toObject(includeInstance, f) @@ -18614,6 +18798,11 @@ proto.prehog.v1alpha.SubmitEventRequest.deserializeBinaryFromReader = function(m reader.readMessage(value,proto.prehog.v1alpha.AuditQueryRunEvent.deserializeBinaryFromReader); msg.setAuditQueryRun(value); break; + case 74: + var value = new proto.prehog.v1alpha.DiscoveryFetchEvent; + reader.readMessage(value,proto.prehog.v1alpha.DiscoveryFetchEvent.deserializeBinaryFromReader); + msg.setDiscoveryFetchEvent(value); + break; case 75: var value = new proto.prehog.v1alpha.AccessListReviewCreateEvent; reader.readMessage(value,proto.prehog.v1alpha.AccessListReviewCreateEvent.deserializeBinaryFromReader); @@ -19233,6 +19422,14 @@ proto.prehog.v1alpha.SubmitEventRequest.serializeBinaryToWriter = function(messa proto.prehog.v1alpha.AuditQueryRunEvent.serializeBinaryToWriter ); } + f = message.getDiscoveryFetchEvent(); + if (f != null) { + writer.writeMessage( + 74, + f, + proto.prehog.v1alpha.DiscoveryFetchEvent.serializeBinaryToWriter + ); + } f = message.getAccessListReviewCreate(); if (f != null) { writer.writeMessage( @@ -21905,6 +22102,43 @@ proto.prehog.v1alpha.SubmitEventRequest.prototype.hasAuditQueryRun = function() }; +/** + * optional DiscoveryFetchEvent discovery_fetch_event = 74; + * @return {?proto.prehog.v1alpha.DiscoveryFetchEvent} + */ +proto.prehog.v1alpha.SubmitEventRequest.prototype.getDiscoveryFetchEvent = function() { + return /** @type{?proto.prehog.v1alpha.DiscoveryFetchEvent} */ ( + jspb.Message.getWrapperField(this, proto.prehog.v1alpha.DiscoveryFetchEvent, 74)); +}; + + +/** + * @param {?proto.prehog.v1alpha.DiscoveryFetchEvent|undefined} value + * @return {!proto.prehog.v1alpha.SubmitEventRequest} returns this +*/ +proto.prehog.v1alpha.SubmitEventRequest.prototype.setDiscoveryFetchEvent = function(value) { + return jspb.Message.setOneofWrapperField(this, 74, proto.prehog.v1alpha.SubmitEventRequest.oneofGroups_[0], value); +}; + + +/** + * Clears the message field making it undefined. + * @return {!proto.prehog.v1alpha.SubmitEventRequest} returns this + */ +proto.prehog.v1alpha.SubmitEventRequest.prototype.clearDiscoveryFetchEvent = function() { + return this.setDiscoveryFetchEvent(undefined); +}; + + +/** + * Returns whether this field is set. + * @return {boolean} + */ +proto.prehog.v1alpha.SubmitEventRequest.prototype.hasDiscoveryFetchEvent = function() { + return jspb.Message.getField(this, 74) != null; +}; + + /** * optional AccessListReviewCreateEvent access_list_review_create = 75; * @return {?proto.prehog.v1alpha.AccessListReviewCreateEvent} diff --git a/lib/usagereporter/teleport/types.go b/lib/usagereporter/teleport/types.go index d4b4f78f5f92a..4c304693ccddc 100644 --- a/lib/usagereporter/teleport/types.go +++ b/lib/usagereporter/teleport/types.go @@ -992,6 +992,21 @@ func (e *AuditQueryRunEvent) Anonymize(a utils.Anonymizer) prehogv1a.SubmitEvent } } +// DiscoveryFetchEvent is emitted when a DiscoveryService fetchs resources. +type DiscoveryFetchEvent prehogv1a.DiscoveryFetchEvent + +// Anonymize anonymizes the event. +func (e *DiscoveryFetchEvent) Anonymize(a utils.Anonymizer) prehogv1a.SubmitEventRequest { + return prehogv1a.SubmitEventRequest{ + Event: &prehogv1a.SubmitEventRequest_DiscoveryFetchEvent{ + DiscoveryFetchEvent: &prehogv1a.DiscoveryFetchEvent{ + CloudProvider: e.CloudProvider, + ResourceType: e.ResourceType, + }, + }, + } +} + // ConvertUsageEvent converts a usage event from an API object into an // anonymizable event. All events that can be submitted externally via the Auth // API need to be defined here. @@ -1429,6 +1444,12 @@ func ConvertUsageEvent(event *usageeventsv1.UsageEventOneOf, userMD UserMetadata }, } return ret, nil + case *usageeventsv1.UsageEventOneOf_DiscoveryFetchEvent: + ret := &DiscoveryFetchEvent{ + CloudProvider: e.DiscoveryFetchEvent.CloudProvider, + ResourceType: e.DiscoveryFetchEvent.ResourceType, + } + return ret, nil default: return nil, trace.BadParameter("invalid usage event type %T", event.GetEvent()) diff --git a/lib/usagereporter/teleport/usagereporter_test.go b/lib/usagereporter/teleport/usagereporter_test.go index 77a3a23951c56..5327879cc4305 100644 --- a/lib/usagereporter/teleport/usagereporter_test.go +++ b/lib/usagereporter/teleport/usagereporter_test.go @@ -513,6 +513,24 @@ func TestConvertUsageEvent(t *testing.T) { Id: expectedAnonymizedAccessListIDString, }, }, + }, + }, + }, + { + name: "discovery fetch event", + event: &usageeventsv1.UsageEventOneOf{Event: &usageeventsv1.UsageEventOneOf_DiscoveryFetchEvent{ + DiscoveryFetchEvent: &usageeventsv1.DiscoveryFetchEvent{ + CloudProvider: "AWS", + ResourceType: "rds", + }, + }}, + identityUsername: "myuser", + errCheck: require.NoError, + expected: &prehogv1a.SubmitEventRequest{Event: &prehogv1a.SubmitEventRequest_DiscoveryFetchEvent{ + DiscoveryFetchEvent: &prehogv1a.DiscoveryFetchEvent{ + CloudProvider: "AWS", + ResourceType: "rds", + }, }}, }, } { diff --git a/proto/prehog/v1alpha/teleport.proto b/proto/prehog/v1alpha/teleport.proto index c9ad25980aff4..1cfd52df2f499 100644 --- a/proto/prehog/v1alpha/teleport.proto +++ b/proto/prehog/v1alpha/teleport.proto @@ -1106,6 +1106,22 @@ message AuditQueryRunEvent { bool is_success = 3; } +// DiscoveryFetchEvent is emitted when a DiscoveryService polls for new resources of a given type +message DiscoveryFetchEvent { + // cloud_provider is the cloud provider used to fetch resources + // Eg, AWS, Azure, GCP, Kubernetes + // + // PostHog property: tp.cloud + string cloud_provider = 1; + + // resource_type is the type of resource that this fetch is polling. + // It depends on the Cloud Provider (defined above). + // Eg, rds, ec2, vm, aks, gce, app + // + // PostHog property: tp.resource_type + string resource_type = 2; +} + message SubmitEventRequest { // anonymized, 32 bytes (HMAC-SHA-256) encoded in base64 // @@ -1223,6 +1239,8 @@ message SubmitEventRequest { SecurityReportGetResultEvent security_report_get_result = 72; AuditQueryRunEvent audit_query_run = 73; + DiscoveryFetchEvent discovery_fetch_event = 74; + AccessListReviewCreateEvent access_list_review_create = 75; AccessListReviewDeleteEvent access_list_review_delete = 76; AccessListReviewComplianceEvent access_list_review_compliance = 77; From bc6696ec7f1cbd206d3bc730a8aac237c65dd37d Mon Sep 17 00:00:00 2001 From: "teleport-post-release-automation[bot]" <128860004+teleport-post-release-automation[bot]@users.noreply.github.com> Date: Fri, 15 Dec 2023 15:21:50 +0000 Subject: [PATCH 14/14] [auto] docs: Update version to v14.2.3 (#35768) Co-authored-by: GitHub --- docs/config.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/config.json b/docs/config.json index 444319f96426e..7baa3de37f2bf 100644 --- a/docs/config.json +++ b/docs/config.json @@ -2097,18 +2097,18 @@ }, "teleport": { "major_version": "14", - "version": "14.2.2", + "version": "14.2.3", "git": "api/14.0.0-gd1e081e", "url": "teleport.example.com", "golang": "1.21", "plugin": { - "version": "14.2.2" + "version": "14.2.3" }, "helm_repo_url": "https://charts.releases.teleport.dev", - "latest_oss_docker_image": "public.ecr.aws/gravitational/teleport-distroless:14.2.2", - "latest_oss_debug_docker_image": "public.ecr.aws/gravitational/teleport-distroless-debug:14.2.2", - "latest_ent_docker_image": "public.ecr.aws/gravitational/teleport-ent-distroless:14.2.2", - "latest_ent_debug_docker_image": "public.ecr.aws/gravitational/teleport-ent-distroless-debug:14.2.2" + "latest_oss_docker_image": "public.ecr.aws/gravitational/teleport-distroless:14.2.3", + "latest_oss_debug_docker_image": "public.ecr.aws/gravitational/teleport-distroless-debug:14.2.3", + "latest_ent_docker_image": "public.ecr.aws/gravitational/teleport-ent-distroless:14.2.3", + "latest_ent_debug_docker_image": "public.ecr.aws/gravitational/teleport-ent-distroless-debug:14.2.3" }, "terraform": { "version": "1.0.0"