diff --git a/.github/workflows/post-release.yaml b/.github/workflows/post-release.yaml index 05e12675db625..9641d2c00758a 100644 --- a/.github/workflows/post-release.yaml +++ b/.github/workflows/post-release.yaml @@ -94,12 +94,17 @@ jobs: git config --global user.email "noreply@github.com" git config --global user.name "GitHub" + # get Go version from go.mod + GO_VERSION=$(go mod edit -json | jq -r .Go) + # update versions in docs/config.json # for docker images replace version number after : jq --arg major "${MAJOR_VERSION}" \ --arg version "${FULL_VERSION}" \ + --arg go_version "${GO_VERSION}" \ '.variables.teleport.major_version |= $major | .variables.teleport.version |= $version | + .variables.teleport.golang |= $go_version | .variables.teleport.plugin.version |= $version | .variables.teleport.latest_oss_docker_image |= sub(":.*";":")+$version | .variables.teleport.latest_oss_debug_docker_image |= sub(":.*";":")+$version | diff --git a/.github/workflows/vercel-preview.yaml b/.github/workflows/vercel-preview.yaml index 74e4dbce38232..f74b3086138c0 100644 --- a/.github/workflows/vercel-preview.yaml +++ b/.github/workflows/vercel-preview.yaml @@ -61,5 +61,5 @@ jobs: issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, - body: `🤖 Vercel preview here: ${previewUrl}/docs/ver/preview` + body: `🤖 Vercel preview here: ${previewUrl}/docs` }) diff --git a/CHANGELOG.md b/CHANGELOG.md index b67393dcb9d0c..2fb83c2df1e43 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,61 @@ # Changelog +## 15.4.23 (12/5/2024) + +* Fixed a bug breaking in-cluster joining on some Kubernetes clusters. [#49843](https://github.com/gravitational/teleport/pull/49843) +* SSH or Kubernetes information is now included for audit log list for start session events. [#49834](https://github.com/gravitational/teleport/pull/49834) +* Avoid tight web session renewals for sessions with short TTL (between 3m and 30s). [#49770](https://github.com/gravitational/teleport/pull/49770) +* Updated Go to 1.22.10. [#49760](https://github.com/gravitational/teleport/pull/49760) +* Added ability to configure resource labels in `teleport-cluster`'s operator sub-chart. [#49649](https://github.com/gravitational/teleport/pull/49649) +* Fixed proxy peering listener not using the exact address specified in `peer_listen_addr`. [#49591](https://github.com/gravitational/teleport/pull/49591) +* Kubernetes in-cluster joining now also accepts tokens whose audience is the Teleport cluster name (before it only allowed the default Kubernetes audience). Kubernetes JWKS joining is unchanged and still requires tokens with the cluster name in the audience. [#49558](https://github.com/gravitational/teleport/pull/49558) +* Restore interactive PAM authentication functionality when `use_pam_auth` is applied. [#49520](https://github.com/gravitational/teleport/pull/49520) +* Increase CockroachDB setup timeout from 5 to 30 seconds. This mitigates the Auth Service not being able to configure TTL on slow CockroachDB event backends. [#49471](https://github.com/gravitational/teleport/pull/49471) +* Fixed a potential panic in login rule and SAML IdP expression parser. [#49432](https://github.com/gravitational/teleport/pull/49432) +* Support for long-running kube exec/port-forward, respect `client_idle_timeout` config. [#49430](https://github.com/gravitational/teleport/pull/49430) +* Fixed a permissions error with Postgres database user auto-provisioning that occurs when the database admin is not a superuser and the database is upgraded to Postgres v16 or higher. [#49391](https://github.com/gravitational/teleport/pull/49391) +* Fixed missing user participants in session recordings listing for non-interactive Kubernetes recordings. [#49345](https://github.com/gravitational/teleport/pull/49345) +* Fixed an issue where `teleport park` processes could be leaked causing runaway resource usage. [#49262](https://github.com/gravitational/teleport/pull/49262) +* The `tsh puttyconfig` command now disables GSSAPI auth settings to avoid a "Not Responding" condition in PuTTY. [#49191](https://github.com/gravitational/teleport/pull/49191) +* Allow Azure VMs to join from a different subscription than their managed identity. [#49158](https://github.com/gravitational/teleport/pull/49158) +* Fixed an issue loading the license file when Teleport is started without a configuration file. [#49148](https://github.com/gravitational/teleport/pull/49148) +* Fixed a bug in the `teleport-cluster` Helm chart that can cause token mount to fail when using ArgoCD. [#49070](https://github.com/gravitational/teleport/pull/49070) +* Fixed an issue resulting in excess cpu usage and connection resets when teleport-event-handler is under moderate to high load. [#49035](https://github.com/gravitational/teleport/pull/49035) +* Fixed OpenSSH remote port forwarding not working for localhost. [#49021](https://github.com/gravitational/teleport/pull/49021) +* Allow to override Teleport license secret name when using `teleport-cluster` Helm chart. [#48980](https://github.com/gravitational/teleport/pull/48980) +* Fixed users not being able to connect to SQL server instances with PKINIT integration when the cluster is configured with different CAs for database access. [#48925](https://github.com/gravitational/teleport/pull/48925) +* Ensure that agentless server information is provided in all audit events. [#48835](https://github.com/gravitational/teleport/pull/48835) +* Fixed an issue preventing migration of unmanaged users to Teleport host users when including `teleport-keep` in a role's `host_groups`. [#48456](https://github.com/gravitational/teleport/pull/48456) +* Resolved an issue that caused false positive errors incorrectly indicating that the YubiKey was in use by another application, while only tsh was accessing it. [#47953](https://github.com/gravitational/teleport/pull/47953) + +Enterprise: +* Jamf Service sync audit events are attributed to "Jamf Service". + +## 15.4.22 (11/12/24) + +* Added a search input to the cluster dropdown in the Web UI when there's more than five clusters to show. [#48800](https://github.com/gravitational/teleport/pull/48800) +* Fixed bug in Kubernetes session recordings where both root and leaf cluster recorded the same Kubernetes session. Recordings of leaf resources are only available in leaf clusters. [#48739](https://github.com/gravitational/teleport/pull/48739) +* Machine ID can now be forced to use the explicitly configured proxy address using the `TBOT_USE_PROXY_ADDR` environment variable. This should better support split proxy address operation. [#48677](https://github.com/gravitational/teleport/pull/48677) +* Fixed undefined error in open source version when clicking on `Add Application` tile in the Enroll Resources page in the Web UI. [#48617](https://github.com/gravitational/teleport/pull/48617) +* Updated Go to 1.22.9. [#48582](https://github.com/gravitational/teleport/pull/48582) +* The teleport-cluster Helm chart now uses the configured `serviceAccount.name` from chart values for its pre-deploy configuration check Jobs. [#48578](https://github.com/gravitational/teleport/pull/48578) +* Fixed a bug that prevented the Teleport UI from properly displaying Plugin Audit log details. [#48463](https://github.com/gravitational/teleport/pull/48463) +* Fixed showing the list of access requests in Teleport Connect when a leaf cluster is selected in the cluster selector. [#48442](https://github.com/gravitational/teleport/pull/48442) +* Fixed a rare "internal error" on older U2F authenticators when using tsh. [#48403](https://github.com/gravitational/teleport/pull/48403) +* Fixed `tsh play` not skipping idle time when `--skip-idle-time` was provided. [#48398](https://github.com/gravitational/teleport/pull/48398) +* Added a warning to `tctl edit` about dynamic edits to statically configured resources. [#48393](https://github.com/gravitational/teleport/pull/48393) +* Fixed a Teleport Kubernetes Operator bug that happened for OIDCConnector resources with non-nil `max_age`. [#48377](https://github.com/gravitational/teleport/pull/48377) +* Updated host user creation to prevent local password expiration policies from affecting Teleport managed users. [#48162](https://github.com/gravitational/teleport/pull/48162) +* During the Set Up Access of the Enroll New Resource flows, Okta users will be asked to change the role instead of entering the principals and getting an error afterwards. [#47958](https://github.com/gravitational/teleport/pull/47958) +* Fixed `teleport_connected_resource` metric overshooting after keepalive errors. [#47950](https://github.com/gravitational/teleport/pull/47950) +* Fixed an issue preventing connections with users whose configured home directories were inaccessible. [#47917](https://github.com/gravitational/teleport/pull/47917) +* Added a `resolve` command to tsh that may be used as the target for a Match exec condition in an SSH config. [#47867](https://github.com/gravitational/teleport/pull/47867) +* Postgres database session start events now include the Postgres backend PID for the session. [#47644](https://github.com/gravitational/teleport/pull/47644) +* Updated `tsh ssh` to support the `--` delimiter similar to openssh. It is now possible to execute a command via `tsh ssh user@host -- echo test` or `tsh ssh -- host uptime`. [#47494](https://github.com/gravitational/teleport/pull/47494) + +Enterprise: +* Jamf requests from Teleport set "teleport/$version" as the User-Agent. + ## 15.4.21 (10/22/24) ### Security fixes diff --git a/Makefile b/Makefile index 7f96ba78d3a70..8b891ccbfb7b3 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=15.4.21 +VERSION=15.4.23 DOCKER_IMAGE ?= teleport @@ -1638,10 +1638,10 @@ rustup-install-target-toolchain: rustup-set-version # usage: BASE_BRANCH=branch/v13 BASE_TAG=v13.2.0 make changelog # # BASE_BRANCH and BASE_TAG will be automatically determined if not specified. -CHANGELOG = github.com/gravitational/shared-workflows/tools/changelog@latest .PHONY: changelog changelog: - @go run $(CHANGELOG) --base-branch="$(BASE_BRANCH)" --base-tag="$(BASE_TAG)" ./ + @go run github.com/gravitational/shared-workflows/tools/changelog@latest \ + --base-branch="$(BASE_BRANCH)" --base-tag="$(BASE_TAG)" ./ # create-github-release will generate release notes from the CHANGELOG.md and will # create release notes from them. @@ -1655,12 +1655,14 @@ changelog: # # For more information on release notes generation see: # https://github.com/gravitational/shared-workflows/tree/gus/release-notes/tools/release-notes#readme -RELEASE_NOTES_GEN = github.com/gravitational/shared-workflows/tools/release-notes@latest .PHONY: create-github-release create-github-release: LATEST = false create-github-release: GITHUB_RELEASE_LABELS = "" create-github-release: - @NOTES=$$($(RELEASE_NOTES_GEN) --labels=$(GITHUB_RELEASE_LABELS) $(VERSION) CHANGELOG.md) && gh release create v$(VERSION) \ + @NOTES=$$( \ + go run github.com/gravitational/shared-workflows/tools/release-notes@latest \ + --labels=$(GITHUB_RELEASE_LABELS) $(VERSION) CHANGELOG.md \ + ) && gh release create v$(VERSION) \ -t "Teleport $(VERSION)" \ --latest=$(LATEST) \ --verify-tag \ diff --git a/README.md b/README.md index dac836a7f650f..0c5f9179477e4 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Here is why you might use Teleport: Teleport works with SSH, Kubernetes, databases, RDP, and web services. -* Architecture: https://goteleport.com/docs/architecture/ +* Architecture: https://goteleport.com/docs/reference/architecture/architecture * Getting Started: https://goteleport.com/docs/getting-started/
diff --git a/api/client/credentials_test.go b/api/client/credentials_test.go index 896a873c19811..dbd9996ca3b8b 100644 --- a/api/client/credentials_test.go +++ b/api/client/credentials_test.go @@ -464,6 +464,7 @@ func TestDynamicIdentityFileCreds(t *testing.T) { require.NoError(t, err) wantTLSCert, err := tls.X509KeyPair(tlsCert, keyPEM) require.NoError(t, err) + wantTLSCert.Leaf = nil require.Equal(t, wantTLSCert, *gotTLSCert) expiry, ok := cred.Expiry() @@ -522,6 +523,7 @@ func TestDynamicIdentityFileCreds(t *testing.T) { require.NoError(t, err) wantTLSCert, err = tls.X509KeyPair(secondTLSCertPem, keyPEM) require.NoError(t, err) + wantTLSCert.Leaf = nil require.Equal(t, wantTLSCert, *gotTLSCert) expiry, ok = cred.Expiry() diff --git a/api/client/proto/event.pb.go b/api/client/proto/event.pb.go index 2e6962542ed11..2298cf7db82d7 100644 --- a/api/client/proto/event.pb.go +++ b/api/client/proto/event.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/legacy/client/proto/event.proto @@ -1335,7 +1335,7 @@ func file_teleport_legacy_client_proto_event_proto_rawDescGZIP() []byte { var file_teleport_legacy_client_proto_event_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_teleport_legacy_client_proto_event_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_legacy_client_proto_event_proto_goTypes = []interface{}{ +var file_teleport_legacy_client_proto_event_proto_goTypes = []any{ (Operation)(0), // 0: proto.Operation (*Event)(nil), // 1: proto.Event (*types.ResourceHeader)(nil), // 2: types.ResourceHeader @@ -1465,7 +1465,7 @@ func file_teleport_legacy_client_proto_event_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_legacy_client_proto_event_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_legacy_client_proto_event_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Event); i { case 0: return &v.state @@ -1478,7 +1478,7 @@ func file_teleport_legacy_client_proto_event_proto_init() { } } } - file_teleport_legacy_client_proto_event_proto_msgTypes[0].OneofWrappers = []interface{}{ + file_teleport_legacy_client_proto_event_proto_msgTypes[0].OneofWrappers = []any{ (*Event_ResourceHeader)(nil), (*Event_CertAuthority)(nil), (*Event_StaticTokens)(nil), diff --git a/api/client/proxy/client.go b/api/client/proxy/client.go index 817da428928c0..f1d1b05540ec4 100644 --- a/api/client/proxy/client.go +++ b/api/client/proxy/client.go @@ -82,7 +82,7 @@ type ClientConfig struct { // CheckAndSetDefaults ensures required options are present and // sets the default value of any that are omitted. -func (c *ClientConfig) CheckAndSetDefaults() error { +func (c *ClientConfig) CheckAndSetDefaults(ctx context.Context) error { if c.ProxyAddress == "" { return trace.BadParameter("missing required parameter ProxyAddress") } @@ -115,6 +115,21 @@ func (c *ClientConfig) CheckAndSetDefaults() error { // not to send the client certificate by looking at certificate request. if len(tlsCfg.Certificates) > 0 { cert := tlsCfg.Certificates[0] + + // When a hardware key is used to store the private key, the user may fail to provide + // a PIN or touch before a gRPC dial timeout occurs. + // The resulting "dial timeout" error is generic and doesn't indicate an issue with the + // hardware key itself (since YubiKey is treated like any other key). + // To avoid this, we perform a "warm-up" call to the key, ensuring it is ready + // before initiating the gRPC dial. + // This approach works because the connection is cached for a few seconds, + // allowing subsequent calls without requiring additional user action. + if priv, ok := cert.PrivateKey.(hardwareKeyWarmer); ok { + err := priv.WarmupHardwareKey(ctx) + if err != nil { + return nil, trace.Wrap(err) + } + } tlsCfg.Certificates = nil tlsCfg.GetClientCertificate = func(_ *tls.CertificateRequestInfo) (*tls.Certificate, error) { return &cert, nil @@ -183,7 +198,7 @@ const protocolProxySSHGRPC string = "teleport-proxy-ssh-grpc" // of the caller, then prefer to use NewSSHClient instead which omits // the gRPC dialing altogether. func NewClient(ctx context.Context, cfg ClientConfig) (*Client, error) { - if err := cfg.CheckAndSetDefaults(); err != nil { + if err := cfg.CheckAndSetDefaults(ctx); err != nil { return nil, trace.Wrap(err) } @@ -439,3 +454,9 @@ func (c *Client) Ping(ctx context.Context) error { _, _ = c.transport.ClusterDetails(ctx) return nil } + +// hardwareKeyWarmer performs a bogus call to the hardware key, +// to proactively prompt the user for a PIN/touch (if needed). +type hardwareKeyWarmer interface { + WarmupHardwareKey(ctx context.Context) error +} diff --git a/api/gen/proto/go/assist/v1/assist.pb.go b/api/gen/proto/go/assist/v1/assist.pb.go index b19f99782914e..de0817fdee662 100644 --- a/api/gen/proto/go/assist/v1/assist.pb.go +++ b/api/gen/proto/go/assist/v1/assist.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/assist/v1/assist.proto @@ -1294,7 +1294,7 @@ func file_teleport_assist_v1_assist_proto_rawDescGZIP() []byte { } var file_teleport_assist_v1_assist_proto_msgTypes = make([]protoimpl.MessageInfo, 18) -var file_teleport_assist_v1_assist_proto_goTypes = []interface{}{ +var file_teleport_assist_v1_assist_proto_goTypes = []any{ (*GetAssistantMessagesRequest)(nil), // 0: teleport.assist.v1.GetAssistantMessagesRequest (*AssistantMessage)(nil), // 1: teleport.assist.v1.AssistantMessage (*CreateAssistantMessageRequest)(nil), // 2: teleport.assist.v1.CreateAssistantMessageRequest @@ -1357,7 +1357,7 @@ func file_teleport_assist_v1_assist_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_assist_v1_assist_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_assist_v1_assist_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*GetAssistantMessagesRequest); i { case 0: return &v.state @@ -1369,7 +1369,7 @@ func file_teleport_assist_v1_assist_proto_init() { return nil } } - file_teleport_assist_v1_assist_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_assist_v1_assist_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*AssistantMessage); i { case 0: return &v.state @@ -1381,7 +1381,7 @@ func file_teleport_assist_v1_assist_proto_init() { return nil } } - file_teleport_assist_v1_assist_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_assist_v1_assist_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*CreateAssistantMessageRequest); i { case 0: return &v.state @@ -1393,7 +1393,7 @@ func file_teleport_assist_v1_assist_proto_init() { return nil } } - file_teleport_assist_v1_assist_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_assist_v1_assist_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*GetAssistantMessagesResponse); i { case 0: return &v.state @@ -1405,7 +1405,7 @@ func file_teleport_assist_v1_assist_proto_init() { return nil } } - file_teleport_assist_v1_assist_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_assist_v1_assist_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*GetAssistantConversationsRequest); i { case 0: return &v.state @@ -1417,7 +1417,7 @@ func file_teleport_assist_v1_assist_proto_init() { return nil } } - file_teleport_assist_v1_assist_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_assist_v1_assist_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*ConversationInfo); i { case 0: return &v.state @@ -1429,7 +1429,7 @@ func file_teleport_assist_v1_assist_proto_init() { return nil } } - file_teleport_assist_v1_assist_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_assist_v1_assist_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*GetAssistantConversationsResponse); i { case 0: return &v.state @@ -1441,7 +1441,7 @@ func file_teleport_assist_v1_assist_proto_init() { return nil } } - file_teleport_assist_v1_assist_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_assist_v1_assist_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*CreateAssistantConversationRequest); i { case 0: return &v.state @@ -1453,7 +1453,7 @@ func file_teleport_assist_v1_assist_proto_init() { return nil } } - file_teleport_assist_v1_assist_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_assist_v1_assist_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*CreateAssistantConversationResponse); i { case 0: return &v.state @@ -1465,7 +1465,7 @@ func file_teleport_assist_v1_assist_proto_init() { return nil } } - file_teleport_assist_v1_assist_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_assist_v1_assist_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*UpdateAssistantConversationInfoRequest); i { case 0: return &v.state @@ -1477,7 +1477,7 @@ func file_teleport_assist_v1_assist_proto_init() { return nil } } - file_teleport_assist_v1_assist_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_teleport_assist_v1_assist_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*IsAssistEnabledRequest); i { case 0: return &v.state @@ -1489,7 +1489,7 @@ func file_teleport_assist_v1_assist_proto_init() { return nil } } - file_teleport_assist_v1_assist_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_teleport_assist_v1_assist_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*IsAssistEnabledResponse); i { case 0: return &v.state @@ -1501,7 +1501,7 @@ func file_teleport_assist_v1_assist_proto_init() { return nil } } - file_teleport_assist_v1_assist_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_teleport_assist_v1_assist_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*DeleteAssistantConversationRequest); i { case 0: return &v.state @@ -1513,7 +1513,7 @@ func file_teleport_assist_v1_assist_proto_init() { return nil } } - file_teleport_assist_v1_assist_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_teleport_assist_v1_assist_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*GetAssistantEmbeddingsRequest); i { case 0: return &v.state @@ -1525,7 +1525,7 @@ func file_teleport_assist_v1_assist_proto_init() { return nil } } - file_teleport_assist_v1_assist_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_teleport_assist_v1_assist_proto_msgTypes[14].Exporter = func(v any, i int) any { switch v := v.(*EmbeddedDocument); i { case 0: return &v.state @@ -1537,7 +1537,7 @@ func file_teleport_assist_v1_assist_proto_init() { return nil } } - file_teleport_assist_v1_assist_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_teleport_assist_v1_assist_proto_msgTypes[15].Exporter = func(v any, i int) any { switch v := v.(*GetAssistantEmbeddingsResponse); i { case 0: return &v.state @@ -1549,7 +1549,7 @@ func file_teleport_assist_v1_assist_proto_init() { return nil } } - file_teleport_assist_v1_assist_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_teleport_assist_v1_assist_proto_msgTypes[16].Exporter = func(v any, i int) any { switch v := v.(*SearchUnifiedResourcesRequest); i { case 0: return &v.state @@ -1561,7 +1561,7 @@ func file_teleport_assist_v1_assist_proto_init() { return nil } } - file_teleport_assist_v1_assist_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_teleport_assist_v1_assist_proto_msgTypes[17].Exporter = func(v any, i int) any { switch v := v.(*SearchUnifiedResourcesResponse); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/accessgraph/v1/authorized_key.pb.go b/api/gen/proto/go/teleport/accessgraph/v1/authorized_key.pb.go index 11a3a967d6dbc..a80ab32c12d25 100644 --- a/api/gen/proto/go/teleport/accessgraph/v1/authorized_key.pb.go +++ b/api/gen/proto/go/teleport/accessgraph/v1/authorized_key.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/access_graph/v1/authorized_key.proto @@ -264,7 +264,7 @@ func file_teleport_access_graph_v1_authorized_key_proto_rawDescGZIP() []byte { } var file_teleport_access_graph_v1_authorized_key_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_teleport_access_graph_v1_authorized_key_proto_goTypes = []interface{}{ +var file_teleport_access_graph_v1_authorized_key_proto_goTypes = []any{ (*AuthorizedKey)(nil), // 0: teleport.access_graph.v1.AuthorizedKey (*AuthorizedKeySpec)(nil), // 1: teleport.access_graph.v1.AuthorizedKeySpec (*v1.Metadata)(nil), // 2: teleport.header.v1.Metadata @@ -285,7 +285,7 @@ func file_teleport_access_graph_v1_authorized_key_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_access_graph_v1_authorized_key_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_access_graph_v1_authorized_key_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*AuthorizedKey); i { case 0: return &v.state @@ -297,7 +297,7 @@ func file_teleport_access_graph_v1_authorized_key_proto_init() { return nil } } - file_teleport_access_graph_v1_authorized_key_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_access_graph_v1_authorized_key_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*AuthorizedKeySpec); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/accessgraph/v1/private_key.pb.go b/api/gen/proto/go/teleport/accessgraph/v1/private_key.pb.go index e2d33a704c7e0..26e65b85e5eed 100644 --- a/api/gen/proto/go/teleport/accessgraph/v1/private_key.pb.go +++ b/api/gen/proto/go/teleport/accessgraph/v1/private_key.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/access_graph/v1/private_key.proto @@ -320,7 +320,7 @@ func file_teleport_access_graph_v1_private_key_proto_rawDescGZIP() []byte { var file_teleport_access_graph_v1_private_key_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_teleport_access_graph_v1_private_key_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_teleport_access_graph_v1_private_key_proto_goTypes = []interface{}{ +var file_teleport_access_graph_v1_private_key_proto_goTypes = []any{ (PublicKeyMode)(0), // 0: teleport.access_graph.v1.PublicKeyMode (*PrivateKey)(nil), // 1: teleport.access_graph.v1.PrivateKey (*PrivateKeySpec)(nil), // 2: teleport.access_graph.v1.PrivateKeySpec @@ -343,7 +343,7 @@ func file_teleport_access_graph_v1_private_key_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_access_graph_v1_private_key_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_access_graph_v1_private_key_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*PrivateKey); i { case 0: return &v.state @@ -355,7 +355,7 @@ func file_teleport_access_graph_v1_private_key_proto_init() { return nil } } - file_teleport_access_graph_v1_private_key_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_access_graph_v1_private_key_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*PrivateKeySpec); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/accessgraph/v1/secrets_service.pb.go b/api/gen/proto/go/teleport/accessgraph/v1/secrets_service.pb.go index 954ea18e6d5af..0d2bd9af11f2b 100644 --- a/api/gen/proto/go/teleport/accessgraph/v1/secrets_service.pb.go +++ b/api/gen/proto/go/teleport/accessgraph/v1/secrets_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/access_graph/v1/secrets_service.proto @@ -498,7 +498,7 @@ func file_teleport_access_graph_v1_secrets_service_proto_rawDescGZIP() []byte { var file_teleport_access_graph_v1_secrets_service_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_teleport_access_graph_v1_secrets_service_proto_msgTypes = make([]protoimpl.MessageInfo, 5) -var file_teleport_access_graph_v1_secrets_service_proto_goTypes = []interface{}{ +var file_teleport_access_graph_v1_secrets_service_proto_goTypes = []any{ (OperationType)(0), // 0: teleport.access_graph.v1.OperationType (*ReportAuthorizedKeysRequest)(nil), // 1: teleport.access_graph.v1.ReportAuthorizedKeysRequest (*ReportAuthorizedKeysResponse)(nil), // 2: teleport.access_graph.v1.ReportAuthorizedKeysResponse @@ -536,7 +536,7 @@ func file_teleport_access_graph_v1_secrets_service_proto_init() { file_teleport_access_graph_v1_authorized_key_proto_init() file_teleport_access_graph_v1_private_key_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_access_graph_v1_secrets_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_access_graph_v1_secrets_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*ReportAuthorizedKeysRequest); i { case 0: return &v.state @@ -548,7 +548,7 @@ func file_teleport_access_graph_v1_secrets_service_proto_init() { return nil } } - file_teleport_access_graph_v1_secrets_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_access_graph_v1_secrets_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*ReportAuthorizedKeysResponse); i { case 0: return &v.state @@ -560,7 +560,7 @@ func file_teleport_access_graph_v1_secrets_service_proto_init() { return nil } } - file_teleport_access_graph_v1_secrets_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_access_graph_v1_secrets_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ReportSecretsRequest); i { case 0: return &v.state @@ -572,7 +572,7 @@ func file_teleport_access_graph_v1_secrets_service_proto_init() { return nil } } - file_teleport_access_graph_v1_secrets_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_access_graph_v1_secrets_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ReportPrivateKeys); i { case 0: return &v.state @@ -584,7 +584,7 @@ func file_teleport_access_graph_v1_secrets_service_proto_init() { return nil } } - file_teleport_access_graph_v1_secrets_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_access_graph_v1_secrets_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*ReportSecretsResponse); i { case 0: return &v.state @@ -597,11 +597,11 @@ func file_teleport_access_graph_v1_secrets_service_proto_init() { } } } - file_teleport_access_graph_v1_secrets_service_proto_msgTypes[2].OneofWrappers = []interface{}{ + file_teleport_access_graph_v1_secrets_service_proto_msgTypes[2].OneofWrappers = []any{ (*ReportSecretsRequest_DeviceAssertion)(nil), (*ReportSecretsRequest_PrivateKeys)(nil), } - file_teleport_access_graph_v1_secrets_service_proto_msgTypes[4].OneofWrappers = []interface{}{ + file_teleport_access_graph_v1_secrets_service_proto_msgTypes[4].OneofWrappers = []any{ (*ReportSecretsResponse_DeviceAssertion)(nil), } type x struct{} diff --git a/api/gen/proto/go/teleport/accesslist/v1/accesslist.pb.go b/api/gen/proto/go/teleport/accesslist/v1/accesslist.pb.go index 607e5644f9d82..29d69216bb989 100644 --- a/api/gen/proto/go/teleport/accesslist/v1/accesslist.pb.go +++ b/api/gen/proto/go/teleport/accesslist/v1/accesslist.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/accesslist/v1/accesslist.proto @@ -1455,7 +1455,7 @@ func file_teleport_accesslist_v1_accesslist_proto_rawDescGZIP() []byte { var file_teleport_accesslist_v1_accesslist_proto_enumTypes = make([]protoimpl.EnumInfo, 3) var file_teleport_accesslist_v1_accesslist_proto_msgTypes = make([]protoimpl.MessageInfo, 14) -var file_teleport_accesslist_v1_accesslist_proto_goTypes = []interface{}{ +var file_teleport_accesslist_v1_accesslist_proto_goTypes = []any{ (ReviewFrequency)(0), // 0: teleport.accesslist.v1.ReviewFrequency (ReviewDayOfMonth)(0), // 1: teleport.accesslist.v1.ReviewDayOfMonth (IneligibleStatus)(0), // 2: teleport.accesslist.v1.IneligibleStatus @@ -1522,7 +1522,7 @@ func file_teleport_accesslist_v1_accesslist_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_accesslist_v1_accesslist_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*AccessList); i { case 0: return &v.state @@ -1534,7 +1534,7 @@ func file_teleport_accesslist_v1_accesslist_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*AccessListSpec); i { case 0: return &v.state @@ -1546,7 +1546,7 @@ func file_teleport_accesslist_v1_accesslist_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*AccessListOwner); i { case 0: return &v.state @@ -1558,7 +1558,7 @@ func file_teleport_accesslist_v1_accesslist_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*AccessListAudit); i { case 0: return &v.state @@ -1570,7 +1570,7 @@ func file_teleport_accesslist_v1_accesslist_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*Recurrence); i { case 0: return &v.state @@ -1582,7 +1582,7 @@ func file_teleport_accesslist_v1_accesslist_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*Notifications); i { case 0: return &v.state @@ -1594,7 +1594,7 @@ func file_teleport_accesslist_v1_accesslist_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*AccessListRequires); i { case 0: return &v.state @@ -1606,7 +1606,7 @@ func file_teleport_accesslist_v1_accesslist_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*AccessListGrants); i { case 0: return &v.state @@ -1618,7 +1618,7 @@ func file_teleport_accesslist_v1_accesslist_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*Member); i { case 0: return &v.state @@ -1630,7 +1630,7 @@ func file_teleport_accesslist_v1_accesslist_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*MemberSpec); i { case 0: return &v.state @@ -1642,7 +1642,7 @@ func file_teleport_accesslist_v1_accesslist_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*Review); i { case 0: return &v.state @@ -1654,7 +1654,7 @@ func file_teleport_accesslist_v1_accesslist_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*ReviewSpec); i { case 0: return &v.state @@ -1666,7 +1666,7 @@ func file_teleport_accesslist_v1_accesslist_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*ReviewChanges); i { case 0: return &v.state @@ -1678,7 +1678,7 @@ func file_teleport_accesslist_v1_accesslist_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*AccessListStatus); i { case 0: return &v.state @@ -1691,7 +1691,7 @@ func file_teleport_accesslist_v1_accesslist_proto_init() { } } } - file_teleport_accesslist_v1_accesslist_proto_msgTypes[13].OneofWrappers = []interface{}{} + file_teleport_accesslist_v1_accesslist_proto_msgTypes[13].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ diff --git a/api/gen/proto/go/teleport/accesslist/v1/accesslist_service.pb.go b/api/gen/proto/go/teleport/accesslist/v1/accesslist_service.pb.go index a5fce3e553e4b..734b0b43874b8 100644 --- a/api/gen/proto/go/teleport/accesslist/v1/accesslist_service.pb.go +++ b/api/gen/proto/go/teleport/accesslist/v1/accesslist_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/accesslist/v1/accesslist_service.proto @@ -2409,7 +2409,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_rawDescGZIP() []byte { } var file_teleport_accesslist_v1_accesslist_service_proto_msgTypes = make([]protoimpl.MessageInfo, 36) -var file_teleport_accesslist_v1_accesslist_service_proto_goTypes = []interface{}{ +var file_teleport_accesslist_v1_accesslist_service_proto_goTypes = []any{ (*GetAccessListsRequest)(nil), // 0: teleport.accesslist.v1.GetAccessListsRequest (*GetAccessListsResponse)(nil), // 1: teleport.accesslist.v1.GetAccessListsResponse (*ListAccessListsRequest)(nil), // 2: teleport.accesslist.v1.ListAccessListsRequest @@ -2535,7 +2535,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { } file_teleport_accesslist_v1_accesslist_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*GetAccessListsRequest); i { case 0: return &v.state @@ -2547,7 +2547,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*GetAccessListsResponse); i { case 0: return &v.state @@ -2559,7 +2559,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ListAccessListsRequest); i { case 0: return &v.state @@ -2571,7 +2571,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ListAccessListsResponse); i { case 0: return &v.state @@ -2583,7 +2583,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*GetAccessListRequest); i { case 0: return &v.state @@ -2595,7 +2595,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*UpsertAccessListRequest); i { case 0: return &v.state @@ -2607,7 +2607,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*UpdateAccessListRequest); i { case 0: return &v.state @@ -2619,7 +2619,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*DeleteAccessListRequest); i { case 0: return &v.state @@ -2631,7 +2631,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*DeleteAllAccessListsRequest); i { case 0: return &v.state @@ -2643,7 +2643,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*GetAccessListsToReviewRequest); i { case 0: return &v.state @@ -2655,7 +2655,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*GetAccessListsToReviewResponse); i { case 0: return &v.state @@ -2667,7 +2667,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*CountAccessListMembersRequest); i { case 0: return &v.state @@ -2679,7 +2679,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*CountAccessListMembersResponse); i { case 0: return &v.state @@ -2691,7 +2691,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*ListAccessListMembersRequest); i { case 0: return &v.state @@ -2703,7 +2703,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[14].Exporter = func(v any, i int) any { switch v := v.(*ListAccessListMembersResponse); i { case 0: return &v.state @@ -2715,7 +2715,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[15].Exporter = func(v any, i int) any { switch v := v.(*ListAllAccessListMembersRequest); i { case 0: return &v.state @@ -2727,7 +2727,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[16].Exporter = func(v any, i int) any { switch v := v.(*ListAllAccessListMembersResponse); i { case 0: return &v.state @@ -2739,7 +2739,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[17].Exporter = func(v any, i int) any { switch v := v.(*UpsertAccessListWithMembersRequest); i { case 0: return &v.state @@ -2751,7 +2751,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[18].Exporter = func(v any, i int) any { switch v := v.(*UpsertAccessListWithMembersResponse); i { case 0: return &v.state @@ -2763,7 +2763,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[19].Exporter = func(v any, i int) any { switch v := v.(*GetAccessListMemberRequest); i { case 0: return &v.state @@ -2775,7 +2775,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[20].Exporter = func(v any, i int) any { switch v := v.(*UpsertAccessListMemberRequest); i { case 0: return &v.state @@ -2787,7 +2787,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[21].Exporter = func(v any, i int) any { switch v := v.(*UpdateAccessListMemberRequest); i { case 0: return &v.state @@ -2799,7 +2799,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[22].Exporter = func(v any, i int) any { switch v := v.(*DeleteAccessListMemberRequest); i { case 0: return &v.state @@ -2811,7 +2811,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[23].Exporter = func(v any, i int) any { switch v := v.(*DeleteAllAccessListMembersForAccessListRequest); i { case 0: return &v.state @@ -2823,7 +2823,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[24].Exporter = func(v any, i int) any { switch v := v.(*DeleteAllAccessListMembersRequest); i { case 0: return &v.state @@ -2835,7 +2835,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[25].Exporter = func(v any, i int) any { switch v := v.(*ListAccessListReviewsRequest); i { case 0: return &v.state @@ -2847,7 +2847,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[26].Exporter = func(v any, i int) any { switch v := v.(*ListAccessListReviewsResponse); i { case 0: return &v.state @@ -2859,7 +2859,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[27].Exporter = func(v any, i int) any { switch v := v.(*ListAllAccessListReviewsRequest); i { case 0: return &v.state @@ -2871,7 +2871,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[28].Exporter = func(v any, i int) any { switch v := v.(*ListAllAccessListReviewsResponse); i { case 0: return &v.state @@ -2883,7 +2883,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[29].Exporter = func(v any, i int) any { switch v := v.(*CreateAccessListReviewRequest); i { case 0: return &v.state @@ -2895,7 +2895,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[30].Exporter = func(v any, i int) any { switch v := v.(*CreateAccessListReviewResponse); i { case 0: return &v.state @@ -2907,7 +2907,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[31].Exporter = func(v any, i int) any { switch v := v.(*DeleteAccessListReviewRequest); i { case 0: return &v.state @@ -2919,7 +2919,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[32].Exporter = func(v any, i int) any { switch v := v.(*AccessRequestPromoteRequest); i { case 0: return &v.state @@ -2931,7 +2931,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[33].Exporter = func(v any, i int) any { switch v := v.(*AccessRequestPromoteResponse); i { case 0: return &v.state @@ -2943,7 +2943,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[34].Exporter = func(v any, i int) any { switch v := v.(*GetSuggestedAccessListsRequest); i { case 0: return &v.state @@ -2955,7 +2955,7 @@ func file_teleport_accesslist_v1_accesslist_service_proto_init() { return nil } } - file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accesslist_v1_accesslist_service_proto_msgTypes[35].Exporter = func(v any, i int) any { switch v := v.(*GetSuggestedAccessListsResponse); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/accessmonitoringrules/v1/access_monitoring_rules.pb.go b/api/gen/proto/go/teleport/accessmonitoringrules/v1/access_monitoring_rules.pb.go index 52e4d59e32fe2..b9534b748b78a 100644 --- a/api/gen/proto/go/teleport/accessmonitoringrules/v1/access_monitoring_rules.pb.go +++ b/api/gen/proto/go/teleport/accessmonitoringrules/v1/access_monitoring_rules.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/accessmonitoringrules/v1/access_monitoring_rules.proto @@ -886,7 +886,7 @@ func file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_rawDes } var file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes = make([]protoimpl.MessageInfo, 12) -var file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_goTypes = []interface{}{ +var file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_goTypes = []any{ (*AccessMonitoringRule)(nil), // 0: teleport.accessmonitoringrules.v1.AccessMonitoringRule (*AccessMonitoringRuleSpec)(nil), // 1: teleport.accessmonitoringrules.v1.AccessMonitoringRuleSpec (*Notification)(nil), // 2: teleport.accessmonitoringrules.v1.Notification @@ -923,7 +923,7 @@ func file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_init() return } if !protoimpl.UnsafeEnabled { - file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*AccessMonitoringRule); i { case 0: return &v.state @@ -935,7 +935,7 @@ func file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_init() return nil } } - file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*AccessMonitoringRuleSpec); i { case 0: return &v.state @@ -947,7 +947,7 @@ func file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_init() return nil } } - file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*Notification); i { case 0: return &v.state @@ -959,7 +959,7 @@ func file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_init() return nil } } - file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*CreateAccessMonitoringRuleRequest); i { case 0: return &v.state @@ -971,7 +971,7 @@ func file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_init() return nil } } - file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*UpdateAccessMonitoringRuleRequest); i { case 0: return &v.state @@ -983,7 +983,7 @@ func file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_init() return nil } } - file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*UpsertAccessMonitoringRuleRequest); i { case 0: return &v.state @@ -995,7 +995,7 @@ func file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_init() return nil } } - file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*GetAccessMonitoringRuleRequest); i { case 0: return &v.state @@ -1007,7 +1007,7 @@ func file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_init() return nil } } - file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*DeleteAccessMonitoringRuleRequest); i { case 0: return &v.state @@ -1019,7 +1019,7 @@ func file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_init() return nil } } - file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*ListAccessMonitoringRulesRequest); i { case 0: return &v.state @@ -1031,7 +1031,7 @@ func file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_init() return nil } } - file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*ListAccessMonitoringRulesWithFilterRequest); i { case 0: return &v.state @@ -1043,7 +1043,7 @@ func file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_init() return nil } } - file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*ListAccessMonitoringRulesResponse); i { case 0: return &v.state @@ -1055,7 +1055,7 @@ func file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_init() return nil } } - file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_teleport_accessmonitoringrules_v1_access_monitoring_rules_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*ListAccessMonitoringRulesWithFilterResponse); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/accessmonitoringrules/v1/access_monitoring_rules_service.pb.go b/api/gen/proto/go/teleport/accessmonitoringrules/v1/access_monitoring_rules_service.pb.go index 636b1cf7059e0..5e49489ce871a 100644 --- a/api/gen/proto/go/teleport/accessmonitoringrules/v1/access_monitoring_rules_service.pb.go +++ b/api/gen/proto/go/teleport/accessmonitoringrules/v1/access_monitoring_rules_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/accessmonitoringrules/v1/access_monitoring_rules_service.proto @@ -132,7 +132,7 @@ var file_teleport_accessmonitoringrules_v1_access_monitoring_rules_service_proto 0x33, } -var file_teleport_accessmonitoringrules_v1_access_monitoring_rules_service_proto_goTypes = []interface{}{ +var file_teleport_accessmonitoringrules_v1_access_monitoring_rules_service_proto_goTypes = []any{ (*CreateAccessMonitoringRuleRequest)(nil), // 0: teleport.accessmonitoringrules.v1.CreateAccessMonitoringRuleRequest (*UpdateAccessMonitoringRuleRequest)(nil), // 1: teleport.accessmonitoringrules.v1.UpdateAccessMonitoringRuleRequest (*UpsertAccessMonitoringRuleRequest)(nil), // 2: teleport.accessmonitoringrules.v1.UpsertAccessMonitoringRuleRequest diff --git a/api/gen/proto/go/teleport/auditlog/v1/auditlog.pb.go b/api/gen/proto/go/teleport/auditlog/v1/auditlog.pb.go index f3d9547c44855..4fb20ac18474d 100644 --- a/api/gen/proto/go/teleport/auditlog/v1/auditlog.pb.go +++ b/api/gen/proto/go/teleport/auditlog/v1/auditlog.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/auditlog/v1/auditlog.proto @@ -757,7 +757,7 @@ func file_teleport_auditlog_v1_auditlog_proto_rawDescGZIP() []byte { var file_teleport_auditlog_v1_auditlog_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_teleport_auditlog_v1_auditlog_proto_msgTypes = make([]protoimpl.MessageInfo, 8) -var file_teleport_auditlog_v1_auditlog_proto_goTypes = []interface{}{ +var file_teleport_auditlog_v1_auditlog_proto_goTypes = []any{ (Order)(0), // 0: teleport.auditlog.v1.Order (*StreamUnstructuredSessionEventsRequest)(nil), // 1: teleport.auditlog.v1.StreamUnstructuredSessionEventsRequest (*GetUnstructuredEventsRequest)(nil), // 2: teleport.auditlog.v1.GetUnstructuredEventsRequest @@ -801,7 +801,7 @@ func file_teleport_auditlog_v1_auditlog_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_auditlog_v1_auditlog_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_auditlog_v1_auditlog_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*StreamUnstructuredSessionEventsRequest); i { case 0: return &v.state @@ -813,7 +813,7 @@ func file_teleport_auditlog_v1_auditlog_proto_init() { return nil } } - file_teleport_auditlog_v1_auditlog_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_auditlog_v1_auditlog_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*GetUnstructuredEventsRequest); i { case 0: return &v.state @@ -825,7 +825,7 @@ func file_teleport_auditlog_v1_auditlog_proto_init() { return nil } } - file_teleport_auditlog_v1_auditlog_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_auditlog_v1_auditlog_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*EventsUnstructured); i { case 0: return &v.state @@ -837,7 +837,7 @@ func file_teleport_auditlog_v1_auditlog_proto_init() { return nil } } - file_teleport_auditlog_v1_auditlog_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_auditlog_v1_auditlog_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ExportUnstructuredEventsRequest); i { case 0: return &v.state @@ -849,7 +849,7 @@ func file_teleport_auditlog_v1_auditlog_proto_init() { return nil } } - file_teleport_auditlog_v1_auditlog_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_auditlog_v1_auditlog_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*ExportEventUnstructured); i { case 0: return &v.state @@ -861,7 +861,7 @@ func file_teleport_auditlog_v1_auditlog_proto_init() { return nil } } - file_teleport_auditlog_v1_auditlog_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_auditlog_v1_auditlog_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*EventUnstructured); i { case 0: return &v.state @@ -873,7 +873,7 @@ func file_teleport_auditlog_v1_auditlog_proto_init() { return nil } } - file_teleport_auditlog_v1_auditlog_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_auditlog_v1_auditlog_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*GetEventExportChunksRequest); i { case 0: return &v.state @@ -885,7 +885,7 @@ func file_teleport_auditlog_v1_auditlog_proto_init() { return nil } } - file_teleport_auditlog_v1_auditlog_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_auditlog_v1_auditlog_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*EventExportChunk); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/autoupdate/v1/autoupdate.pb.go b/api/gen/proto/go/teleport/autoupdate/v1/autoupdate.pb.go index ffc36aeb70163..514b7125ed4e6 100644 --- a/api/gen/proto/go/teleport/autoupdate/v1/autoupdate.pb.go +++ b/api/gen/proto/go/teleport/autoupdate/v1/autoupdate.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/autoupdate/v1/autoupdate.proto @@ -473,7 +473,7 @@ func file_teleport_autoupdate_v1_autoupdate_proto_rawDescGZIP() []byte { } var file_teleport_autoupdate_v1_autoupdate_proto_msgTypes = make([]protoimpl.MessageInfo, 6) -var file_teleport_autoupdate_v1_autoupdate_proto_goTypes = []interface{}{ +var file_teleport_autoupdate_v1_autoupdate_proto_goTypes = []any{ (*AutoUpdateConfig)(nil), // 0: teleport.autoupdate.v1.AutoUpdateConfig (*AutoUpdateConfigSpec)(nil), // 1: teleport.autoupdate.v1.AutoUpdateConfigSpec (*AutoUpdateConfigSpecTools)(nil), // 2: teleport.autoupdate.v1.AutoUpdateConfigSpecTools @@ -502,7 +502,7 @@ func file_teleport_autoupdate_v1_autoupdate_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_autoupdate_v1_autoupdate_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_autoupdate_v1_autoupdate_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*AutoUpdateConfig); i { case 0: return &v.state @@ -514,7 +514,7 @@ func file_teleport_autoupdate_v1_autoupdate_proto_init() { return nil } } - file_teleport_autoupdate_v1_autoupdate_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_autoupdate_v1_autoupdate_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*AutoUpdateConfigSpec); i { case 0: return &v.state @@ -526,7 +526,7 @@ func file_teleport_autoupdate_v1_autoupdate_proto_init() { return nil } } - file_teleport_autoupdate_v1_autoupdate_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_autoupdate_v1_autoupdate_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*AutoUpdateConfigSpecTools); i { case 0: return &v.state @@ -538,7 +538,7 @@ func file_teleport_autoupdate_v1_autoupdate_proto_init() { return nil } } - file_teleport_autoupdate_v1_autoupdate_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_autoupdate_v1_autoupdate_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*AutoUpdateVersion); i { case 0: return &v.state @@ -550,7 +550,7 @@ func file_teleport_autoupdate_v1_autoupdate_proto_init() { return nil } } - file_teleport_autoupdate_v1_autoupdate_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_autoupdate_v1_autoupdate_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*AutoUpdateVersionSpec); i { case 0: return &v.state @@ -562,7 +562,7 @@ func file_teleport_autoupdate_v1_autoupdate_proto_init() { return nil } } - file_teleport_autoupdate_v1_autoupdate_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_autoupdate_v1_autoupdate_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*AutoUpdateVersionSpecTools); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/autoupdate/v1/autoupdate_service.pb.go b/api/gen/proto/go/teleport/autoupdate/v1/autoupdate_service.pb.go index 92d3898b1e75f..afe88216dd6bc 100644 --- a/api/gen/proto/go/teleport/autoupdate/v1/autoupdate_service.pb.go +++ b/api/gen/proto/go/teleport/autoupdate/v1/autoupdate_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/autoupdate/v1/autoupdate_service.proto @@ -634,7 +634,7 @@ func file_teleport_autoupdate_v1_autoupdate_service_proto_rawDescGZIP() []byte { } var file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes = make([]protoimpl.MessageInfo, 10) -var file_teleport_autoupdate_v1_autoupdate_service_proto_goTypes = []interface{}{ +var file_teleport_autoupdate_v1_autoupdate_service_proto_goTypes = []any{ (*GetAutoUpdateConfigRequest)(nil), // 0: teleport.autoupdate.v1.GetAutoUpdateConfigRequest (*CreateAutoUpdateConfigRequest)(nil), // 1: teleport.autoupdate.v1.CreateAutoUpdateConfigRequest (*UpdateAutoUpdateConfigRequest)(nil), // 2: teleport.autoupdate.v1.UpdateAutoUpdateConfigRequest @@ -690,7 +690,7 @@ func file_teleport_autoupdate_v1_autoupdate_service_proto_init() { } file_teleport_autoupdate_v1_autoupdate_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*GetAutoUpdateConfigRequest); i { case 0: return &v.state @@ -702,7 +702,7 @@ func file_teleport_autoupdate_v1_autoupdate_service_proto_init() { return nil } } - file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*CreateAutoUpdateConfigRequest); i { case 0: return &v.state @@ -714,7 +714,7 @@ func file_teleport_autoupdate_v1_autoupdate_service_proto_init() { return nil } } - file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*UpdateAutoUpdateConfigRequest); i { case 0: return &v.state @@ -726,7 +726,7 @@ func file_teleport_autoupdate_v1_autoupdate_service_proto_init() { return nil } } - file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*UpsertAutoUpdateConfigRequest); i { case 0: return &v.state @@ -738,7 +738,7 @@ func file_teleport_autoupdate_v1_autoupdate_service_proto_init() { return nil } } - file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*DeleteAutoUpdateConfigRequest); i { case 0: return &v.state @@ -750,7 +750,7 @@ func file_teleport_autoupdate_v1_autoupdate_service_proto_init() { return nil } } - file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*GetAutoUpdateVersionRequest); i { case 0: return &v.state @@ -762,7 +762,7 @@ func file_teleport_autoupdate_v1_autoupdate_service_proto_init() { return nil } } - file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*CreateAutoUpdateVersionRequest); i { case 0: return &v.state @@ -774,7 +774,7 @@ func file_teleport_autoupdate_v1_autoupdate_service_proto_init() { return nil } } - file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*UpdateAutoUpdateVersionRequest); i { case 0: return &v.state @@ -786,7 +786,7 @@ func file_teleport_autoupdate_v1_autoupdate_service_proto_init() { return nil } } - file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*UpsertAutoUpdateVersionRequest); i { case 0: return &v.state @@ -798,7 +798,7 @@ func file_teleport_autoupdate_v1_autoupdate_service_proto_init() { return nil } } - file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_autoupdate_v1_autoupdate_service_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*DeleteAutoUpdateVersionRequest); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/clusterconfig/v1/access_graph.pb.go b/api/gen/proto/go/teleport/clusterconfig/v1/access_graph.pb.go index 263c852cdf155..6a3ea8e7dddb5 100644 --- a/api/gen/proto/go/teleport/clusterconfig/v1/access_graph.pb.go +++ b/api/gen/proto/go/teleport/clusterconfig/v1/access_graph.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/clusterconfig/v1/access_graph.proto @@ -219,7 +219,7 @@ func file_teleport_clusterconfig_v1_access_graph_proto_rawDescGZIP() []byte { } var file_teleport_clusterconfig_v1_access_graph_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_teleport_clusterconfig_v1_access_graph_proto_goTypes = []interface{}{ +var file_teleport_clusterconfig_v1_access_graph_proto_goTypes = []any{ (*AccessGraphConfig)(nil), // 0: teleport.clusterconfig.v1.AccessGraphConfig (*AccessGraphSecretsScanConfiguration)(nil), // 1: teleport.clusterconfig.v1.AccessGraphSecretsScanConfiguration } @@ -238,7 +238,7 @@ func file_teleport_clusterconfig_v1_access_graph_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_clusterconfig_v1_access_graph_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_access_graph_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*AccessGraphConfig); i { case 0: return &v.state @@ -250,7 +250,7 @@ func file_teleport_clusterconfig_v1_access_graph_proto_init() { return nil } } - file_teleport_clusterconfig_v1_access_graph_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_access_graph_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*AccessGraphSecretsScanConfiguration); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/clusterconfig/v1/access_graph_settings.pb.go b/api/gen/proto/go/teleport/clusterconfig/v1/access_graph_settings.pb.go index 93c3141620969..dcc4ea5c0b255 100644 --- a/api/gen/proto/go/teleport/clusterconfig/v1/access_graph_settings.pb.go +++ b/api/gen/proto/go/teleport/clusterconfig/v1/access_graph_settings.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/clusterconfig/v1/access_graph_settings.proto @@ -289,7 +289,7 @@ func file_teleport_clusterconfig_v1_access_graph_settings_proto_rawDescGZIP() [] var file_teleport_clusterconfig_v1_access_graph_settings_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_teleport_clusterconfig_v1_access_graph_settings_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_teleport_clusterconfig_v1_access_graph_settings_proto_goTypes = []interface{}{ +var file_teleport_clusterconfig_v1_access_graph_settings_proto_goTypes = []any{ (AccessGraphSecretsScanConfig)(0), // 0: teleport.clusterconfig.v1.AccessGraphSecretsScanConfig (*AccessGraphSettings)(nil), // 1: teleport.clusterconfig.v1.AccessGraphSettings (*AccessGraphSettingsSpec)(nil), // 2: teleport.clusterconfig.v1.AccessGraphSettingsSpec @@ -312,7 +312,7 @@ func file_teleport_clusterconfig_v1_access_graph_settings_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_clusterconfig_v1_access_graph_settings_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_access_graph_settings_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*AccessGraphSettings); i { case 0: return &v.state @@ -324,7 +324,7 @@ func file_teleport_clusterconfig_v1_access_graph_settings_proto_init() { return nil } } - file_teleport_clusterconfig_v1_access_graph_settings_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_access_graph_settings_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*AccessGraphSettingsSpec); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/clusterconfig/v1/clusterconfig_service.pb.go b/api/gen/proto/go/teleport/clusterconfig/v1/clusterconfig_service.pb.go index 16fd98fa757f8..4cdf6f55c1ed4 100644 --- a/api/gen/proto/go/teleport/clusterconfig/v1/clusterconfig_service.pb.go +++ b/api/gen/proto/go/teleport/clusterconfig/v1/clusterconfig_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/clusterconfig/v1/clusterconfig_service.proto @@ -1195,7 +1195,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_rawDescGZIP() [] } var file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes = make([]protoimpl.MessageInfo, 20) -var file_teleport_clusterconfig_v1_clusterconfig_service_proto_goTypes = []interface{}{ +var file_teleport_clusterconfig_v1_clusterconfig_service_proto_goTypes = []any{ (*GetClusterNetworkingConfigRequest)(nil), // 0: teleport.clusterconfig.v1.GetClusterNetworkingConfigRequest (*UpdateClusterNetworkingConfigRequest)(nil), // 1: teleport.clusterconfig.v1.UpdateClusterNetworkingConfigRequest (*UpsertClusterNetworkingConfigRequest)(nil), // 2: teleport.clusterconfig.v1.UpsertClusterNetworkingConfigRequest @@ -1287,7 +1287,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { file_teleport_clusterconfig_v1_access_graph_proto_init() file_teleport_clusterconfig_v1_access_graph_settings_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*GetClusterNetworkingConfigRequest); i { case 0: return &v.state @@ -1299,7 +1299,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*UpdateClusterNetworkingConfigRequest); i { case 0: return &v.state @@ -1311,7 +1311,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*UpsertClusterNetworkingConfigRequest); i { case 0: return &v.state @@ -1323,7 +1323,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ResetClusterNetworkingConfigRequest); i { case 0: return &v.state @@ -1335,7 +1335,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*GetSessionRecordingConfigRequest); i { case 0: return &v.state @@ -1347,7 +1347,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*UpdateSessionRecordingConfigRequest); i { case 0: return &v.state @@ -1359,7 +1359,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*UpsertSessionRecordingConfigRequest); i { case 0: return &v.state @@ -1371,7 +1371,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*ResetSessionRecordingConfigRequest); i { case 0: return &v.state @@ -1383,7 +1383,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*GetAuthPreferenceRequest); i { case 0: return &v.state @@ -1395,7 +1395,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*UpdateAuthPreferenceRequest); i { case 0: return &v.state @@ -1407,7 +1407,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*UpsertAuthPreferenceRequest); i { case 0: return &v.state @@ -1419,7 +1419,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*ResetAuthPreferenceRequest); i { case 0: return &v.state @@ -1431,7 +1431,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*GetClusterAuditConfigRequest); i { case 0: return &v.state @@ -1443,7 +1443,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*GetClusterAccessGraphConfigRequest); i { case 0: return &v.state @@ -1455,7 +1455,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[14].Exporter = func(v any, i int) any { switch v := v.(*GetClusterAccessGraphConfigResponse); i { case 0: return &v.state @@ -1467,7 +1467,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[15].Exporter = func(v any, i int) any { switch v := v.(*GetAccessGraphSettingsRequest); i { case 0: return &v.state @@ -1479,7 +1479,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[16].Exporter = func(v any, i int) any { switch v := v.(*CreateAccessGraphSettingsRequest); i { case 0: return &v.state @@ -1491,7 +1491,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[17].Exporter = func(v any, i int) any { switch v := v.(*UpdateAccessGraphSettingsRequest); i { case 0: return &v.state @@ -1503,7 +1503,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[18].Exporter = func(v any, i int) any { switch v := v.(*UpsertAccessGraphSettingsRequest); i { case 0: return &v.state @@ -1515,7 +1515,7 @@ func file_teleport_clusterconfig_v1_clusterconfig_service_proto_init() { return nil } } - file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_teleport_clusterconfig_v1_clusterconfig_service_proto_msgTypes[19].Exporter = func(v any, i int) any { switch v := v.(*ResetAccessGraphSettingsRequest); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/crownjewel/v1/crownjewel.pb.go b/api/gen/proto/go/teleport/crownjewel/v1/crownjewel.pb.go index 6ddfa5028e2d7..6546467186699 100644 --- a/api/gen/proto/go/teleport/crownjewel/v1/crownjewel.pb.go +++ b/api/gen/proto/go/teleport/crownjewel/v1/crownjewel.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/crownjewel/v1/crownjewel.proto @@ -482,7 +482,7 @@ func file_teleport_crownjewel_v1_crownjewel_proto_rawDescGZIP() []byte { } var file_teleport_crownjewel_v1_crownjewel_proto_msgTypes = make([]protoimpl.MessageInfo, 5) -var file_teleport_crownjewel_v1_crownjewel_proto_goTypes = []interface{}{ +var file_teleport_crownjewel_v1_crownjewel_proto_goTypes = []any{ (*CrownJewel)(nil), // 0: teleport.crownjewel.v1.CrownJewel (*CrownJewelSpec)(nil), // 1: teleport.crownjewel.v1.CrownJewelSpec (*TeleportMatcher)(nil), // 2: teleport.crownjewel.v1.TeleportMatcher @@ -513,7 +513,7 @@ func file_teleport_crownjewel_v1_crownjewel_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_crownjewel_v1_crownjewel_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_crownjewel_v1_crownjewel_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*CrownJewel); i { case 0: return &v.state @@ -525,7 +525,7 @@ func file_teleport_crownjewel_v1_crownjewel_proto_init() { return nil } } - file_teleport_crownjewel_v1_crownjewel_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_crownjewel_v1_crownjewel_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*CrownJewelSpec); i { case 0: return &v.state @@ -537,7 +537,7 @@ func file_teleport_crownjewel_v1_crownjewel_proto_init() { return nil } } - file_teleport_crownjewel_v1_crownjewel_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_crownjewel_v1_crownjewel_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*TeleportMatcher); i { case 0: return &v.state @@ -549,7 +549,7 @@ func file_teleport_crownjewel_v1_crownjewel_proto_init() { return nil } } - file_teleport_crownjewel_v1_crownjewel_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_crownjewel_v1_crownjewel_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*AWSMatcher); i { case 0: return &v.state @@ -561,7 +561,7 @@ func file_teleport_crownjewel_v1_crownjewel_proto_init() { return nil } } - file_teleport_crownjewel_v1_crownjewel_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_crownjewel_v1_crownjewel_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*AWSTag); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/crownjewel/v1/crownjewel_service.pb.go b/api/gen/proto/go/teleport/crownjewel/v1/crownjewel_service.pb.go index 09c11dde341ed..97a4d9eefddd0 100644 --- a/api/gen/proto/go/teleport/crownjewel/v1/crownjewel_service.pb.go +++ b/api/gen/proto/go/teleport/crownjewel/v1/crownjewel_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/crownjewel/v1/crownjewel_service.proto @@ -509,7 +509,7 @@ func file_teleport_crownjewel_v1_crownjewel_service_proto_rawDescGZIP() []byte { } var file_teleport_crownjewel_v1_crownjewel_service_proto_msgTypes = make([]protoimpl.MessageInfo, 7) -var file_teleport_crownjewel_v1_crownjewel_service_proto_goTypes = []interface{}{ +var file_teleport_crownjewel_v1_crownjewel_service_proto_goTypes = []any{ (*CreateCrownJewelRequest)(nil), // 0: teleport.crownjewel.v1.CreateCrownJewelRequest (*GetCrownJewelRequest)(nil), // 1: teleport.crownjewel.v1.GetCrownJewelRequest (*ListCrownJewelsRequest)(nil), // 2: teleport.crownjewel.v1.ListCrownJewelsRequest @@ -551,7 +551,7 @@ func file_teleport_crownjewel_v1_crownjewel_service_proto_init() { } file_teleport_crownjewel_v1_crownjewel_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_crownjewel_v1_crownjewel_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_crownjewel_v1_crownjewel_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*CreateCrownJewelRequest); i { case 0: return &v.state @@ -563,7 +563,7 @@ func file_teleport_crownjewel_v1_crownjewel_service_proto_init() { return nil } } - file_teleport_crownjewel_v1_crownjewel_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_crownjewel_v1_crownjewel_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*GetCrownJewelRequest); i { case 0: return &v.state @@ -575,7 +575,7 @@ func file_teleport_crownjewel_v1_crownjewel_service_proto_init() { return nil } } - file_teleport_crownjewel_v1_crownjewel_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_crownjewel_v1_crownjewel_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ListCrownJewelsRequest); i { case 0: return &v.state @@ -587,7 +587,7 @@ func file_teleport_crownjewel_v1_crownjewel_service_proto_init() { return nil } } - file_teleport_crownjewel_v1_crownjewel_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_crownjewel_v1_crownjewel_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ListCrownJewelsResponse); i { case 0: return &v.state @@ -599,7 +599,7 @@ func file_teleport_crownjewel_v1_crownjewel_service_proto_init() { return nil } } - file_teleport_crownjewel_v1_crownjewel_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_crownjewel_v1_crownjewel_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*UpdateCrownJewelRequest); i { case 0: return &v.state @@ -611,7 +611,7 @@ func file_teleport_crownjewel_v1_crownjewel_service_proto_init() { return nil } } - file_teleport_crownjewel_v1_crownjewel_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_crownjewel_v1_crownjewel_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*UpsertCrownJewelRequest); i { case 0: return &v.state @@ -623,7 +623,7 @@ func file_teleport_crownjewel_v1_crownjewel_service_proto_init() { return nil } } - file_teleport_crownjewel_v1_crownjewel_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_crownjewel_v1_crownjewel_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*DeleteCrownJewelRequest); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/dbobject/v1/dbobject.pb.go b/api/gen/proto/go/teleport/dbobject/v1/dbobject.pb.go index 122300f36c198..a279eb18388db 100644 --- a/api/gen/proto/go/teleport/dbobject/v1/dbobject.pb.go +++ b/api/gen/proto/go/teleport/dbobject/v1/dbobject.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/dbobject/v1/dbobject.proto @@ -272,7 +272,7 @@ func file_teleport_dbobject_v1_dbobject_proto_rawDescGZIP() []byte { } var file_teleport_dbobject_v1_dbobject_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_teleport_dbobject_v1_dbobject_proto_goTypes = []interface{}{ +var file_teleport_dbobject_v1_dbobject_proto_goTypes = []any{ (*DatabaseObject)(nil), // 0: teleport.dbobject.v1.DatabaseObject (*DatabaseObjectSpec)(nil), // 1: teleport.dbobject.v1.DatabaseObjectSpec (*v1.Metadata)(nil), // 2: teleport.header.v1.Metadata @@ -293,7 +293,7 @@ func file_teleport_dbobject_v1_dbobject_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_dbobject_v1_dbobject_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobject_v1_dbobject_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*DatabaseObject); i { case 0: return &v.state @@ -305,7 +305,7 @@ func file_teleport_dbobject_v1_dbobject_proto_init() { return nil } } - file_teleport_dbobject_v1_dbobject_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobject_v1_dbobject_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*DatabaseObjectSpec); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/dbobject/v1/dbobject_service.pb.go b/api/gen/proto/go/teleport/dbobject/v1/dbobject_service.pb.go index e352413f504bb..712876623681d 100644 --- a/api/gen/proto/go/teleport/dbobject/v1/dbobject_service.pb.go +++ b/api/gen/proto/go/teleport/dbobject/v1/dbobject_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/dbobject/v1/dbobject_service.proto @@ -512,7 +512,7 @@ func file_teleport_dbobject_v1_dbobject_service_proto_rawDescGZIP() []byte { } var file_teleport_dbobject_v1_dbobject_service_proto_msgTypes = make([]protoimpl.MessageInfo, 7) -var file_teleport_dbobject_v1_dbobject_service_proto_goTypes = []interface{}{ +var file_teleport_dbobject_v1_dbobject_service_proto_goTypes = []any{ (*CreateDatabaseObjectRequest)(nil), // 0: teleport.dbobject.v1.CreateDatabaseObjectRequest (*GetDatabaseObjectRequest)(nil), // 1: teleport.dbobject.v1.GetDatabaseObjectRequest (*ListDatabaseObjectsRequest)(nil), // 2: teleport.dbobject.v1.ListDatabaseObjectsRequest @@ -554,7 +554,7 @@ func file_teleport_dbobject_v1_dbobject_service_proto_init() { } file_teleport_dbobject_v1_dbobject_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_dbobject_v1_dbobject_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobject_v1_dbobject_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*CreateDatabaseObjectRequest); i { case 0: return &v.state @@ -566,7 +566,7 @@ func file_teleport_dbobject_v1_dbobject_service_proto_init() { return nil } } - file_teleport_dbobject_v1_dbobject_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobject_v1_dbobject_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*GetDatabaseObjectRequest); i { case 0: return &v.state @@ -578,7 +578,7 @@ func file_teleport_dbobject_v1_dbobject_service_proto_init() { return nil } } - file_teleport_dbobject_v1_dbobject_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobject_v1_dbobject_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ListDatabaseObjectsRequest); i { case 0: return &v.state @@ -590,7 +590,7 @@ func file_teleport_dbobject_v1_dbobject_service_proto_init() { return nil } } - file_teleport_dbobject_v1_dbobject_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobject_v1_dbobject_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ListDatabaseObjectsResponse); i { case 0: return &v.state @@ -602,7 +602,7 @@ func file_teleport_dbobject_v1_dbobject_service_proto_init() { return nil } } - file_teleport_dbobject_v1_dbobject_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobject_v1_dbobject_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*UpdateDatabaseObjectRequest); i { case 0: return &v.state @@ -614,7 +614,7 @@ func file_teleport_dbobject_v1_dbobject_service_proto_init() { return nil } } - file_teleport_dbobject_v1_dbobject_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobject_v1_dbobject_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*UpsertDatabaseObjectRequest); i { case 0: return &v.state @@ -626,7 +626,7 @@ func file_teleport_dbobject_v1_dbobject_service_proto_init() { return nil } } - file_teleport_dbobject_v1_dbobject_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobject_v1_dbobject_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*DeleteDatabaseObjectRequest); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/dbobjectimportrule/v1/dbobjectimportrule.pb.go b/api/gen/proto/go/teleport/dbobjectimportrule/v1/dbobjectimportrule.pb.go index 7c0e7941c1004..9efe30fd1e12c 100644 --- a/api/gen/proto/go/teleport/dbobjectimportrule/v1/dbobjectimportrule.pb.go +++ b/api/gen/proto/go/teleport/dbobjectimportrule/v1/dbobjectimportrule.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/dbobjectimportrule/v1/dbobjectimportrule.proto @@ -489,7 +489,7 @@ func file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_rawDescGZIP() } var file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_msgTypes = make([]protoimpl.MessageInfo, 6) -var file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_goTypes = []interface{}{ +var file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_goTypes = []any{ (*DatabaseObjectImportRule)(nil), // 0: teleport.dbobjectimportrule.v1.DatabaseObjectImportRule (*DatabaseObjectImportRuleSpec)(nil), // 1: teleport.dbobjectimportrule.v1.DatabaseObjectImportRuleSpec (*DatabaseObjectImportRuleMapping)(nil), // 2: teleport.dbobjectimportrule.v1.DatabaseObjectImportRuleMapping @@ -520,7 +520,7 @@ func file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*DatabaseObjectImportRule); i { case 0: return &v.state @@ -532,7 +532,7 @@ func file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_init() { return nil } } - file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*DatabaseObjectImportRuleSpec); i { case 0: return &v.state @@ -544,7 +544,7 @@ func file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_init() { return nil } } - file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*DatabaseObjectImportRuleMapping); i { case 0: return &v.state @@ -556,7 +556,7 @@ func file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_init() { return nil } } - file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*DatabaseObjectImportMatch); i { case 0: return &v.state @@ -568,7 +568,7 @@ func file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_init() { return nil } } - file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*DatabaseObjectImportScope); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/dbobjectimportrule/v1/dbobjectimportrule_service.pb.go b/api/gen/proto/go/teleport/dbobjectimportrule/v1/dbobjectimportrule_service.pb.go index e111630c56318..21c766d1d7713 100644 --- a/api/gen/proto/go/teleport/dbobjectimportrule/v1/dbobjectimportrule_service.pb.go +++ b/api/gen/proto/go/teleport/dbobjectimportrule/v1/dbobjectimportrule_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/dbobjectimportrule/v1/dbobjectimportrule_service.proto @@ -543,7 +543,7 @@ func file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_rawDes } var file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_msgTypes = make([]protoimpl.MessageInfo, 7) -var file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_goTypes = []interface{}{ +var file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_goTypes = []any{ (*CreateDatabaseObjectImportRuleRequest)(nil), // 0: teleport.dbobjectimportrule.v1.CreateDatabaseObjectImportRuleRequest (*GetDatabaseObjectImportRuleRequest)(nil), // 1: teleport.dbobjectimportrule.v1.GetDatabaseObjectImportRuleRequest (*ListDatabaseObjectImportRulesRequest)(nil), // 2: teleport.dbobjectimportrule.v1.ListDatabaseObjectImportRulesRequest @@ -585,7 +585,7 @@ func file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_init() } file_teleport_dbobjectimportrule_v1_dbobjectimportrule_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*CreateDatabaseObjectImportRuleRequest); i { case 0: return &v.state @@ -597,7 +597,7 @@ func file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_init() return nil } } - file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*GetDatabaseObjectImportRuleRequest); i { case 0: return &v.state @@ -609,7 +609,7 @@ func file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_init() return nil } } - file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ListDatabaseObjectImportRulesRequest); i { case 0: return &v.state @@ -621,7 +621,7 @@ func file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_init() return nil } } - file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ListDatabaseObjectImportRulesResponse); i { case 0: return &v.state @@ -633,7 +633,7 @@ func file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_init() return nil } } - file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*UpdateDatabaseObjectImportRuleRequest); i { case 0: return &v.state @@ -645,7 +645,7 @@ func file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_init() return nil } } - file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*UpsertDatabaseObjectImportRuleRequest); i { case 0: return &v.state @@ -657,7 +657,7 @@ func file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_init() return nil } } - file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_dbobjectimportrule_v1_dbobjectimportrule_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*DeleteDatabaseObjectImportRuleRequest); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/devicetrust/v1/assert.pb.go b/api/gen/proto/go/teleport/devicetrust/v1/assert.pb.go index 0efdc20200dfc..ef8f88442136d 100644 --- a/api/gen/proto/go/teleport/devicetrust/v1/assert.pb.go +++ b/api/gen/proto/go/teleport/devicetrust/v1/assert.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/devicetrust/v1/assert.proto @@ -430,7 +430,7 @@ func file_teleport_devicetrust_v1_assert_proto_rawDescGZIP() []byte { } var file_teleport_devicetrust_v1_assert_proto_msgTypes = make([]protoimpl.MessageInfo, 4) -var file_teleport_devicetrust_v1_assert_proto_goTypes = []interface{}{ +var file_teleport_devicetrust_v1_assert_proto_goTypes = []any{ (*AssertDeviceRequest)(nil), // 0: teleport.devicetrust.v1.AssertDeviceRequest (*AssertDeviceResponse)(nil), // 1: teleport.devicetrust.v1.AssertDeviceResponse (*AssertDeviceInit)(nil), // 2: teleport.devicetrust.v1.AssertDeviceInit @@ -464,7 +464,7 @@ func file_teleport_devicetrust_v1_assert_proto_init() { file_teleport_devicetrust_v1_authenticate_challenge_proto_init() file_teleport_devicetrust_v1_device_collected_data_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_devicetrust_v1_assert_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_assert_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*AssertDeviceRequest); i { case 0: return &v.state @@ -476,7 +476,7 @@ func file_teleport_devicetrust_v1_assert_proto_init() { return nil } } - file_teleport_devicetrust_v1_assert_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_assert_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*AssertDeviceResponse); i { case 0: return &v.state @@ -488,7 +488,7 @@ func file_teleport_devicetrust_v1_assert_proto_init() { return nil } } - file_teleport_devicetrust_v1_assert_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_assert_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*AssertDeviceInit); i { case 0: return &v.state @@ -500,7 +500,7 @@ func file_teleport_devicetrust_v1_assert_proto_init() { return nil } } - file_teleport_devicetrust_v1_assert_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_assert_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*DeviceAsserted); i { case 0: return &v.state @@ -513,12 +513,12 @@ func file_teleport_devicetrust_v1_assert_proto_init() { } } } - file_teleport_devicetrust_v1_assert_proto_msgTypes[0].OneofWrappers = []interface{}{ + file_teleport_devicetrust_v1_assert_proto_msgTypes[0].OneofWrappers = []any{ (*AssertDeviceRequest_Init)(nil), (*AssertDeviceRequest_ChallengeResponse)(nil), (*AssertDeviceRequest_TpmChallengeResponse)(nil), } - file_teleport_devicetrust_v1_assert_proto_msgTypes[1].OneofWrappers = []interface{}{ + file_teleport_devicetrust_v1_assert_proto_msgTypes[1].OneofWrappers = []any{ (*AssertDeviceResponse_Challenge)(nil), (*AssertDeviceResponse_TpmChallenge)(nil), (*AssertDeviceResponse_DeviceAsserted)(nil), diff --git a/api/gen/proto/go/teleport/devicetrust/v1/authenticate_challenge.pb.go b/api/gen/proto/go/teleport/devicetrust/v1/authenticate_challenge.pb.go index 087fc953bf867..b0e32c964b09b 100644 --- a/api/gen/proto/go/teleport/devicetrust/v1/authenticate_challenge.pb.go +++ b/api/gen/proto/go/teleport/devicetrust/v1/authenticate_challenge.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/devicetrust/v1/authenticate_challenge.proto @@ -289,7 +289,7 @@ func file_teleport_devicetrust_v1_authenticate_challenge_proto_rawDescGZIP() []b } var file_teleport_devicetrust_v1_authenticate_challenge_proto_msgTypes = make([]protoimpl.MessageInfo, 4) -var file_teleport_devicetrust_v1_authenticate_challenge_proto_goTypes = []interface{}{ +var file_teleport_devicetrust_v1_authenticate_challenge_proto_goTypes = []any{ (*AuthenticateDeviceChallenge)(nil), // 0: teleport.devicetrust.v1.AuthenticateDeviceChallenge (*AuthenticateDeviceChallengeResponse)(nil), // 1: teleport.devicetrust.v1.AuthenticateDeviceChallengeResponse (*TPMAuthenticateDeviceChallenge)(nil), // 2: teleport.devicetrust.v1.TPMAuthenticateDeviceChallenge @@ -312,7 +312,7 @@ func file_teleport_devicetrust_v1_authenticate_challenge_proto_init() { } file_teleport_devicetrust_v1_tpm_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_devicetrust_v1_authenticate_challenge_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_authenticate_challenge_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*AuthenticateDeviceChallenge); i { case 0: return &v.state @@ -324,7 +324,7 @@ func file_teleport_devicetrust_v1_authenticate_challenge_proto_init() { return nil } } - file_teleport_devicetrust_v1_authenticate_challenge_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_authenticate_challenge_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*AuthenticateDeviceChallengeResponse); i { case 0: return &v.state @@ -336,7 +336,7 @@ func file_teleport_devicetrust_v1_authenticate_challenge_proto_init() { return nil } } - file_teleport_devicetrust_v1_authenticate_challenge_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_authenticate_challenge_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*TPMAuthenticateDeviceChallenge); i { case 0: return &v.state @@ -348,7 +348,7 @@ func file_teleport_devicetrust_v1_authenticate_challenge_proto_init() { return nil } } - file_teleport_devicetrust_v1_authenticate_challenge_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_authenticate_challenge_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*TPMAuthenticateDeviceChallengeResponse); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/devicetrust/v1/device.pb.go b/api/gen/proto/go/teleport/devicetrust/v1/device.pb.go index c056635b58905..ea9fef7b84504 100644 --- a/api/gen/proto/go/teleport/devicetrust/v1/device.pb.go +++ b/api/gen/proto/go/teleport/devicetrust/v1/device.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/devicetrust/v1/device.proto @@ -549,7 +549,7 @@ func file_teleport_devicetrust_v1_device_proto_rawDescGZIP() []byte { var file_teleport_devicetrust_v1_device_proto_enumTypes = make([]protoimpl.EnumInfo, 2) var file_teleport_devicetrust_v1_device_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_teleport_devicetrust_v1_device_proto_goTypes = []interface{}{ +var file_teleport_devicetrust_v1_device_proto_goTypes = []any{ (DeviceAttestationType)(0), // 0: teleport.devicetrust.v1.DeviceAttestationType (DeviceEnrollStatus)(0), // 1: teleport.devicetrust.v1.DeviceEnrollStatus (*Device)(nil), // 2: teleport.devicetrust.v1.Device @@ -590,7 +590,7 @@ func file_teleport_devicetrust_v1_device_proto_init() { file_teleport_devicetrust_v1_device_source_proto_init() file_teleport_devicetrust_v1_os_type_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_devicetrust_v1_device_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_device_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Device); i { case 0: return &v.state @@ -602,7 +602,7 @@ func file_teleport_devicetrust_v1_device_proto_init() { return nil } } - file_teleport_devicetrust_v1_device_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_device_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*DeviceCredential); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/devicetrust/v1/device_collected_data.pb.go b/api/gen/proto/go/teleport/devicetrust/v1/device_collected_data.pb.go index 6fd9fc8786af0..cff7209256b38 100644 --- a/api/gen/proto/go/teleport/devicetrust/v1/device_collected_data.pb.go +++ b/api/gen/proto/go/teleport/devicetrust/v1/device_collected_data.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/devicetrust/v1/device_collected_data.proto @@ -329,7 +329,7 @@ func file_teleport_devicetrust_v1_device_collected_data_proto_rawDescGZIP() []by } var file_teleport_devicetrust_v1_device_collected_data_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_devicetrust_v1_device_collected_data_proto_goTypes = []interface{}{ +var file_teleport_devicetrust_v1_device_collected_data_proto_goTypes = []any{ (*DeviceCollectedData)(nil), // 0: teleport.devicetrust.v1.DeviceCollectedData (*timestamppb.Timestamp)(nil), // 1: google.protobuf.Timestamp (OSType)(0), // 2: teleport.devicetrust.v1.OSType @@ -355,7 +355,7 @@ func file_teleport_devicetrust_v1_device_collected_data_proto_init() { file_teleport_devicetrust_v1_os_type_proto_init() file_teleport_devicetrust_v1_tpm_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_devicetrust_v1_device_collected_data_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_device_collected_data_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*DeviceCollectedData); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/devicetrust/v1/device_enroll_token.pb.go b/api/gen/proto/go/teleport/devicetrust/v1/device_enroll_token.pb.go index e43dab98b578a..b862bce1a60a8 100644 --- a/api/gen/proto/go/teleport/devicetrust/v1/device_enroll_token.pb.go +++ b/api/gen/proto/go/teleport/devicetrust/v1/device_enroll_token.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/devicetrust/v1/device_enroll_token.proto @@ -133,7 +133,7 @@ func file_teleport_devicetrust_v1_device_enroll_token_proto_rawDescGZIP() []byte } var file_teleport_devicetrust_v1_device_enroll_token_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_devicetrust_v1_device_enroll_token_proto_goTypes = []interface{}{ +var file_teleport_devicetrust_v1_device_enroll_token_proto_goTypes = []any{ (*DeviceEnrollToken)(nil), // 0: teleport.devicetrust.v1.DeviceEnrollToken (*timestamppb.Timestamp)(nil), // 1: google.protobuf.Timestamp } @@ -152,7 +152,7 @@ func file_teleport_devicetrust_v1_device_enroll_token_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_devicetrust_v1_device_enroll_token_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_device_enroll_token_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*DeviceEnrollToken); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/devicetrust/v1/device_profile.pb.go b/api/gen/proto/go/teleport/devicetrust/v1/device_profile.pb.go index 61fc63b439a83..ca894044402b1 100644 --- a/api/gen/proto/go/teleport/devicetrust/v1/device_profile.pb.go +++ b/api/gen/proto/go/teleport/devicetrust/v1/device_profile.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/devicetrust/v1/device_profile.proto @@ -223,7 +223,7 @@ func file_teleport_devicetrust_v1_device_profile_proto_rawDescGZIP() []byte { } var file_teleport_devicetrust_v1_device_profile_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_devicetrust_v1_device_profile_proto_goTypes = []interface{}{ +var file_teleport_devicetrust_v1_device_profile_proto_goTypes = []any{ (*DeviceProfile)(nil), // 0: teleport.devicetrust.v1.DeviceProfile (*timestamppb.Timestamp)(nil), // 1: google.protobuf.Timestamp } @@ -242,7 +242,7 @@ func file_teleport_devicetrust_v1_device_profile_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_devicetrust_v1_device_profile_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_device_profile_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*DeviceProfile); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/devicetrust/v1/device_source.pb.go b/api/gen/proto/go/teleport/devicetrust/v1/device_source.pb.go index a240c834db31a..1a0da79a82eb1 100644 --- a/api/gen/proto/go/teleport/devicetrust/v1/device_source.pb.go +++ b/api/gen/proto/go/teleport/devicetrust/v1/device_source.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/devicetrust/v1/device_source.proto @@ -197,7 +197,7 @@ func file_teleport_devicetrust_v1_device_source_proto_rawDescGZIP() []byte { var file_teleport_devicetrust_v1_device_source_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_teleport_devicetrust_v1_device_source_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_devicetrust_v1_device_source_proto_goTypes = []interface{}{ +var file_teleport_devicetrust_v1_device_source_proto_goTypes = []any{ (DeviceOrigin)(0), // 0: teleport.devicetrust.v1.DeviceOrigin (*DeviceSource)(nil), // 1: teleport.devicetrust.v1.DeviceSource } @@ -216,7 +216,7 @@ func file_teleport_devicetrust_v1_device_source_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_devicetrust_v1_device_source_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_device_source_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*DeviceSource); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/devicetrust/v1/devicetrust_service.pb.go b/api/gen/proto/go/teleport/devicetrust/v1/devicetrust_service.pb.go index dda6636b39332..5eb46c2abb59e 100644 --- a/api/gen/proto/go/teleport/devicetrust/v1/devicetrust_service.pb.go +++ b/api/gen/proto/go/teleport/devicetrust/v1/devicetrust_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/devicetrust/v1/devicetrust_service.proto @@ -3065,7 +3065,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_rawDescGZIP() []byte var file_teleport_devicetrust_v1_devicetrust_service_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes = make([]protoimpl.MessageInfo, 37) -var file_teleport_devicetrust_v1_devicetrust_service_proto_goTypes = []interface{}{ +var file_teleport_devicetrust_v1_devicetrust_service_proto_goTypes = []any{ (DeviceView)(0), // 0: teleport.devicetrust.v1.DeviceView (*CreateDeviceRequest)(nil), // 1: teleport.devicetrust.v1.CreateDeviceRequest (*UpdateDeviceRequest)(nil), // 2: teleport.devicetrust.v1.UpdateDeviceRequest @@ -3213,7 +3213,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { file_teleport_devicetrust_v1_usage_proto_init() file_teleport_devicetrust_v1_user_certificates_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*CreateDeviceRequest); i { case 0: return &v.state @@ -3225,7 +3225,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*UpdateDeviceRequest); i { case 0: return &v.state @@ -3237,7 +3237,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*UpsertDeviceRequest); i { case 0: return &v.state @@ -3249,7 +3249,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*DeleteDeviceRequest); i { case 0: return &v.state @@ -3261,7 +3261,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*FindDevicesRequest); i { case 0: return &v.state @@ -3273,7 +3273,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*FindDevicesResponse); i { case 0: return &v.state @@ -3285,7 +3285,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*GetDeviceRequest); i { case 0: return &v.state @@ -3297,7 +3297,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*ListDevicesRequest); i { case 0: return &v.state @@ -3309,7 +3309,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*ListDevicesResponse); i { case 0: return &v.state @@ -3321,7 +3321,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*BulkCreateDevicesRequest); i { case 0: return &v.state @@ -3333,7 +3333,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*BulkCreateDevicesResponse); i { case 0: return &v.state @@ -3345,7 +3345,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*DeviceOrStatus); i { case 0: return &v.state @@ -3357,7 +3357,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*CreateDeviceEnrollTokenRequest); i { case 0: return &v.state @@ -3369,7 +3369,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*EnrollDeviceRequest); i { case 0: return &v.state @@ -3381,7 +3381,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[14].Exporter = func(v any, i int) any { switch v := v.(*EnrollDeviceResponse); i { case 0: return &v.state @@ -3393,7 +3393,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[15].Exporter = func(v any, i int) any { switch v := v.(*EnrollDeviceInit); i { case 0: return &v.state @@ -3405,7 +3405,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[16].Exporter = func(v any, i int) any { switch v := v.(*EnrollDeviceSuccess); i { case 0: return &v.state @@ -3417,7 +3417,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[17].Exporter = func(v any, i int) any { switch v := v.(*MacOSEnrollPayload); i { case 0: return &v.state @@ -3429,7 +3429,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[18].Exporter = func(v any, i int) any { switch v := v.(*MacOSEnrollChallenge); i { case 0: return &v.state @@ -3441,7 +3441,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[19].Exporter = func(v any, i int) any { switch v := v.(*MacOSEnrollChallengeResponse); i { case 0: return &v.state @@ -3453,7 +3453,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[20].Exporter = func(v any, i int) any { switch v := v.(*TPMEnrollPayload); i { case 0: return &v.state @@ -3465,7 +3465,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[21].Exporter = func(v any, i int) any { switch v := v.(*TPMAttestationParameters); i { case 0: return &v.state @@ -3477,7 +3477,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[22].Exporter = func(v any, i int) any { switch v := v.(*TPMEnrollChallenge); i { case 0: return &v.state @@ -3489,7 +3489,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[23].Exporter = func(v any, i int) any { switch v := v.(*TPMEncryptedCredential); i { case 0: return &v.state @@ -3501,7 +3501,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[24].Exporter = func(v any, i int) any { switch v := v.(*TPMEnrollChallengeResponse); i { case 0: return &v.state @@ -3513,7 +3513,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[25].Exporter = func(v any, i int) any { switch v := v.(*AuthenticateDeviceRequest); i { case 0: return &v.state @@ -3525,7 +3525,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[26].Exporter = func(v any, i int) any { switch v := v.(*AuthenticateDeviceResponse); i { case 0: return &v.state @@ -3537,7 +3537,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[27].Exporter = func(v any, i int) any { switch v := v.(*AuthenticateDeviceInit); i { case 0: return &v.state @@ -3549,7 +3549,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[28].Exporter = func(v any, i int) any { switch v := v.(*SyncInventoryRequest); i { case 0: return &v.state @@ -3561,7 +3561,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[29].Exporter = func(v any, i int) any { switch v := v.(*SyncInventoryResponse); i { case 0: return &v.state @@ -3573,7 +3573,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[30].Exporter = func(v any, i int) any { switch v := v.(*SyncInventoryStart); i { case 0: return &v.state @@ -3585,7 +3585,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[31].Exporter = func(v any, i int) any { switch v := v.(*SyncInventoryEnd); i { case 0: return &v.state @@ -3597,7 +3597,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[32].Exporter = func(v any, i int) any { switch v := v.(*SyncInventoryDevices); i { case 0: return &v.state @@ -3609,7 +3609,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[33].Exporter = func(v any, i int) any { switch v := v.(*SyncInventoryAck); i { case 0: return &v.state @@ -3621,7 +3621,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[34].Exporter = func(v any, i int) any { switch v := v.(*SyncInventoryResult); i { case 0: return &v.state @@ -3633,7 +3633,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[35].Exporter = func(v any, i int) any { switch v := v.(*SyncInventoryMissingDevices); i { case 0: return &v.state @@ -3645,7 +3645,7 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { return nil } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[36].Exporter = func(v any, i int) any { switch v := v.(*GetDevicesUsageRequest); i { case 0: return &v.state @@ -3658,37 +3658,37 @@ func file_teleport_devicetrust_v1_devicetrust_service_proto_init() { } } } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[13].OneofWrappers = []interface{}{ + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[13].OneofWrappers = []any{ (*EnrollDeviceRequest_Init)(nil), (*EnrollDeviceRequest_MacosChallengeResponse)(nil), (*EnrollDeviceRequest_TpmChallengeResponse)(nil), } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[14].OneofWrappers = []interface{}{ + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[14].OneofWrappers = []any{ (*EnrollDeviceResponse_Success)(nil), (*EnrollDeviceResponse_MacosChallenge)(nil), (*EnrollDeviceResponse_TpmChallenge)(nil), } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[20].OneofWrappers = []interface{}{ + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[20].OneofWrappers = []any{ (*TPMEnrollPayload_EkCert)(nil), (*TPMEnrollPayload_EkKey)(nil), } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[25].OneofWrappers = []interface{}{ + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[25].OneofWrappers = []any{ (*AuthenticateDeviceRequest_Init)(nil), (*AuthenticateDeviceRequest_ChallengeResponse)(nil), (*AuthenticateDeviceRequest_TpmChallengeResponse)(nil), } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[26].OneofWrappers = []interface{}{ + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[26].OneofWrappers = []any{ (*AuthenticateDeviceResponse_Challenge)(nil), (*AuthenticateDeviceResponse_UserCertificates)(nil), (*AuthenticateDeviceResponse_TpmChallenge)(nil), } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[28].OneofWrappers = []interface{}{ + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[28].OneofWrappers = []any{ (*SyncInventoryRequest_Start)(nil), (*SyncInventoryRequest_End)(nil), (*SyncInventoryRequest_DevicesToUpsert)(nil), (*SyncInventoryRequest_DevicesToRemove)(nil), } - file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[29].OneofWrappers = []interface{}{ + file_teleport_devicetrust_v1_devicetrust_service_proto_msgTypes[29].OneofWrappers = []any{ (*SyncInventoryResponse_Ack)(nil), (*SyncInventoryResponse_Result)(nil), (*SyncInventoryResponse_MissingDevices)(nil), diff --git a/api/gen/proto/go/teleport/devicetrust/v1/os_type.pb.go b/api/gen/proto/go/teleport/devicetrust/v1/os_type.pb.go index 7af0663bcba61..aa09d404fec03 100644 --- a/api/gen/proto/go/teleport/devicetrust/v1/os_type.pb.go +++ b/api/gen/proto/go/teleport/devicetrust/v1/os_type.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/devicetrust/v1/os_type.proto @@ -125,7 +125,7 @@ func file_teleport_devicetrust_v1_os_type_proto_rawDescGZIP() []byte { } var file_teleport_devicetrust_v1_os_type_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_teleport_devicetrust_v1_os_type_proto_goTypes = []interface{}{ +var file_teleport_devicetrust_v1_os_type_proto_goTypes = []any{ (OSType)(0), // 0: teleport.devicetrust.v1.OSType } var file_teleport_devicetrust_v1_os_type_proto_depIdxs = []int32{ diff --git a/api/gen/proto/go/teleport/devicetrust/v1/tpm.pb.go b/api/gen/proto/go/teleport/devicetrust/v1/tpm.pb.go index 09ec405587484..4d2b84051b277 100644 --- a/api/gen/proto/go/teleport/devicetrust/v1/tpm.pb.go +++ b/api/gen/proto/go/teleport/devicetrust/v1/tpm.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/devicetrust/v1/tpm.proto @@ -345,7 +345,7 @@ func file_teleport_devicetrust_v1_tpm_proto_rawDescGZIP() []byte { } var file_teleport_devicetrust_v1_tpm_proto_msgTypes = make([]protoimpl.MessageInfo, 4) -var file_teleport_devicetrust_v1_tpm_proto_goTypes = []interface{}{ +var file_teleport_devicetrust_v1_tpm_proto_goTypes = []any{ (*TPMPCR)(nil), // 0: teleport.devicetrust.v1.TPMPCR (*TPMQuote)(nil), // 1: teleport.devicetrust.v1.TPMQuote (*TPMPlatformParameters)(nil), // 2: teleport.devicetrust.v1.TPMPlatformParameters @@ -368,7 +368,7 @@ func file_teleport_devicetrust_v1_tpm_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_devicetrust_v1_tpm_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_tpm_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*TPMPCR); i { case 0: return &v.state @@ -380,7 +380,7 @@ func file_teleport_devicetrust_v1_tpm_proto_init() { return nil } } - file_teleport_devicetrust_v1_tpm_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_tpm_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*TPMQuote); i { case 0: return &v.state @@ -392,7 +392,7 @@ func file_teleport_devicetrust_v1_tpm_proto_init() { return nil } } - file_teleport_devicetrust_v1_tpm_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_tpm_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*TPMPlatformParameters); i { case 0: return &v.state @@ -404,7 +404,7 @@ func file_teleport_devicetrust_v1_tpm_proto_init() { return nil } } - file_teleport_devicetrust_v1_tpm_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_tpm_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*TPMPlatformAttestation); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/devicetrust/v1/usage.pb.go b/api/gen/proto/go/teleport/devicetrust/v1/usage.pb.go index e4e90e9477f1b..50b9067694eca 100644 --- a/api/gen/proto/go/teleport/devicetrust/v1/usage.pb.go +++ b/api/gen/proto/go/teleport/devicetrust/v1/usage.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/devicetrust/v1/usage.proto @@ -166,7 +166,7 @@ func file_teleport_devicetrust_v1_usage_proto_rawDescGZIP() []byte { var file_teleport_devicetrust_v1_usage_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_teleport_devicetrust_v1_usage_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_devicetrust_v1_usage_proto_goTypes = []interface{}{ +var file_teleport_devicetrust_v1_usage_proto_goTypes = []any{ (AccountUsageType)(0), // 0: teleport.devicetrust.v1.AccountUsageType (*DevicesUsage)(nil), // 1: teleport.devicetrust.v1.DevicesUsage } @@ -184,7 +184,7 @@ func file_teleport_devicetrust_v1_usage_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_devicetrust_v1_usage_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_usage_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*DevicesUsage); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/devicetrust/v1/user_certificates.pb.go b/api/gen/proto/go/teleport/devicetrust/v1/user_certificates.pb.go index bdc95e58ab8fe..06622561ed2cb 100644 --- a/api/gen/proto/go/teleport/devicetrust/v1/user_certificates.pb.go +++ b/api/gen/proto/go/teleport/devicetrust/v1/user_certificates.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/devicetrust/v1/user_certificates.proto @@ -129,7 +129,7 @@ func file_teleport_devicetrust_v1_user_certificates_proto_rawDescGZIP() []byte { } var file_teleport_devicetrust_v1_user_certificates_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_devicetrust_v1_user_certificates_proto_goTypes = []interface{}{ +var file_teleport_devicetrust_v1_user_certificates_proto_goTypes = []any{ (*UserCertificates)(nil), // 0: teleport.devicetrust.v1.UserCertificates } var file_teleport_devicetrust_v1_user_certificates_proto_depIdxs = []int32{ @@ -146,7 +146,7 @@ func file_teleport_devicetrust_v1_user_certificates_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_devicetrust_v1_user_certificates_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_devicetrust_v1_user_certificates_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*UserCertificates); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/discoveryconfig/v1/discoveryconfig.pb.go b/api/gen/proto/go/teleport/discoveryconfig/v1/discoveryconfig.pb.go index b2284615ea357..d7e10b700fee7 100644 --- a/api/gen/proto/go/teleport/discoveryconfig/v1/discoveryconfig.pb.go +++ b/api/gen/proto/go/teleport/discoveryconfig/v1/discoveryconfig.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/discoveryconfig/v1/discoveryconfig.proto @@ -435,7 +435,7 @@ func file_teleport_discoveryconfig_v1_discoveryconfig_proto_rawDescGZIP() []byte var file_teleport_discoveryconfig_v1_discoveryconfig_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_teleport_discoveryconfig_v1_discoveryconfig_proto_msgTypes = make([]protoimpl.MessageInfo, 3) -var file_teleport_discoveryconfig_v1_discoveryconfig_proto_goTypes = []interface{}{ +var file_teleport_discoveryconfig_v1_discoveryconfig_proto_goTypes = []any{ (DiscoveryConfigState)(0), // 0: teleport.discoveryconfig.v1.DiscoveryConfigState (*DiscoveryConfig)(nil), // 1: teleport.discoveryconfig.v1.DiscoveryConfig (*DiscoveryConfigSpec)(nil), // 2: teleport.discoveryconfig.v1.DiscoveryConfigSpec @@ -472,7 +472,7 @@ func file_teleport_discoveryconfig_v1_discoveryconfig_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_discoveryconfig_v1_discoveryconfig_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_discoveryconfig_v1_discoveryconfig_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*DiscoveryConfig); i { case 0: return &v.state @@ -484,7 +484,7 @@ func file_teleport_discoveryconfig_v1_discoveryconfig_proto_init() { return nil } } - file_teleport_discoveryconfig_v1_discoveryconfig_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_discoveryconfig_v1_discoveryconfig_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*DiscoveryConfigSpec); i { case 0: return &v.state @@ -496,7 +496,7 @@ func file_teleport_discoveryconfig_v1_discoveryconfig_proto_init() { return nil } } - file_teleport_discoveryconfig_v1_discoveryconfig_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_discoveryconfig_v1_discoveryconfig_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*DiscoveryConfigStatus); i { case 0: return &v.state @@ -509,7 +509,7 @@ func file_teleport_discoveryconfig_v1_discoveryconfig_proto_init() { } } } - file_teleport_discoveryconfig_v1_discoveryconfig_proto_msgTypes[2].OneofWrappers = []interface{}{} + file_teleport_discoveryconfig_v1_discoveryconfig_proto_msgTypes[2].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ diff --git a/api/gen/proto/go/teleport/discoveryconfig/v1/discoveryconfig_service.pb.go b/api/gen/proto/go/teleport/discoveryconfig/v1/discoveryconfig_service.pb.go index 1ffb53e71af86..566c4938a9049 100644 --- a/api/gen/proto/go/teleport/discoveryconfig/v1/discoveryconfig_service.pb.go +++ b/api/gen/proto/go/teleport/discoveryconfig/v1/discoveryconfig_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/discoveryconfig/v1/discoveryconfig_service.proto @@ -661,7 +661,7 @@ func file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_rawDescGZIP( } var file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes = make([]protoimpl.MessageInfo, 9) -var file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_goTypes = []interface{}{ +var file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_goTypes = []any{ (*ListDiscoveryConfigsRequest)(nil), // 0: teleport.discoveryconfig.v1.ListDiscoveryConfigsRequest (*ListDiscoveryConfigsResponse)(nil), // 1: teleport.discoveryconfig.v1.ListDiscoveryConfigsResponse (*GetDiscoveryConfigRequest)(nil), // 2: teleport.discoveryconfig.v1.GetDiscoveryConfigRequest @@ -711,7 +711,7 @@ func file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_init() { } file_teleport_discoveryconfig_v1_discoveryconfig_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*ListDiscoveryConfigsRequest); i { case 0: return &v.state @@ -723,7 +723,7 @@ func file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_init() { return nil } } - file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*ListDiscoveryConfigsResponse); i { case 0: return &v.state @@ -735,7 +735,7 @@ func file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_init() { return nil } } - file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*GetDiscoveryConfigRequest); i { case 0: return &v.state @@ -747,7 +747,7 @@ func file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_init() { return nil } } - file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*CreateDiscoveryConfigRequest); i { case 0: return &v.state @@ -759,7 +759,7 @@ func file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_init() { return nil } } - file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*UpdateDiscoveryConfigRequest); i { case 0: return &v.state @@ -771,7 +771,7 @@ func file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_init() { return nil } } - file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*UpsertDiscoveryConfigRequest); i { case 0: return &v.state @@ -783,7 +783,7 @@ func file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_init() { return nil } } - file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*DeleteDiscoveryConfigRequest); i { case 0: return &v.state @@ -795,7 +795,7 @@ func file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_init() { return nil } } - file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*DeleteAllDiscoveryConfigsRequest); i { case 0: return &v.state @@ -807,7 +807,7 @@ func file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_init() { return nil } } - file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_discoveryconfig_v1_discoveryconfig_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*UpdateDiscoveryConfigStatusRequest); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/embedding/v1/embedding.pb.go b/api/gen/proto/go/teleport/embedding/v1/embedding.pb.go index ef63d4694b527..e35341ba75a99 100644 --- a/api/gen/proto/go/teleport/embedding/v1/embedding.pb.go +++ b/api/gen/proto/go/teleport/embedding/v1/embedding.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/embedding/v1/embedding.proto @@ -151,7 +151,7 @@ func file_teleport_embedding_v1_embedding_proto_rawDescGZIP() []byte { } var file_teleport_embedding_v1_embedding_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_embedding_v1_embedding_proto_goTypes = []interface{}{ +var file_teleport_embedding_v1_embedding_proto_goTypes = []any{ (*Embedding)(nil), // 0: teleport.embedding.v1.Embedding } var file_teleport_embedding_v1_embedding_proto_depIdxs = []int32{ @@ -168,7 +168,7 @@ func file_teleport_embedding_v1_embedding_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_embedding_v1_embedding_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_embedding_v1_embedding_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Embedding); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/externalauditstorage/v1/externalauditstorage.pb.go b/api/gen/proto/go/teleport/externalauditstorage/v1/externalauditstorage.pb.go index c198ad22f0930..336a8833045d1 100644 --- a/api/gen/proto/go/teleport/externalauditstorage/v1/externalauditstorage.pb.go +++ b/api/gen/proto/go/teleport/externalauditstorage/v1/externalauditstorage.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/externalauditstorage/v1/externalauditstorage.proto @@ -290,7 +290,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_proto_rawDescGZI } var file_teleport_externalauditstorage_v1_externalauditstorage_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_teleport_externalauditstorage_v1_externalauditstorage_proto_goTypes = []interface{}{ +var file_teleport_externalauditstorage_v1_externalauditstorage_proto_goTypes = []any{ (*ExternalAuditStorage)(nil), // 0: teleport.externalauditstorage.v1.ExternalAuditStorage (*ExternalAuditStorageSpec)(nil), // 1: teleport.externalauditstorage.v1.ExternalAuditStorageSpec (*v1.ResourceHeader)(nil), // 2: teleport.header.v1.ResourceHeader @@ -311,7 +311,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_externalauditstorage_v1_externalauditstorage_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*ExternalAuditStorage); i { case 0: return &v.state @@ -323,7 +323,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_proto_init() { return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*ExternalAuditStorageSpec); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/externalauditstorage/v1/externalauditstorage_service.pb.go b/api/gen/proto/go/teleport/externalauditstorage/v1/externalauditstorage_service.pb.go index 7be704847cd7a..493214b7d5c16 100644 --- a/api/gen/proto/go/teleport/externalauditstorage/v1/externalauditstorage_service.pb.go +++ b/api/gen/proto/go/teleport/externalauditstorage/v1/externalauditstorage_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/externalauditstorage/v1/externalauditstorage_service.proto @@ -1216,7 +1216,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_ra } var file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes = make([]protoimpl.MessageInfo, 20) -var file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_goTypes = []interface{}{ +var file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_goTypes = []any{ (*GetDraftExternalAuditStorageRequest)(nil), // 0: teleport.externalauditstorage.v1.GetDraftExternalAuditStorageRequest (*GetDraftExternalAuditStorageResponse)(nil), // 1: teleport.externalauditstorage.v1.GetDraftExternalAuditStorageResponse (*CreateDraftExternalAuditStorageRequest)(nil), // 2: teleport.externalauditstorage.v1.CreateDraftExternalAuditStorageRequest @@ -1285,7 +1285,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in } file_teleport_externalauditstorage_v1_externalauditstorage_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*GetDraftExternalAuditStorageRequest); i { case 0: return &v.state @@ -1297,7 +1297,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*GetDraftExternalAuditStorageResponse); i { case 0: return &v.state @@ -1309,7 +1309,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*CreateDraftExternalAuditStorageRequest); i { case 0: return &v.state @@ -1321,7 +1321,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*CreateDraftExternalAuditStorageResponse); i { case 0: return &v.state @@ -1333,7 +1333,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*UpsertDraftExternalAuditStorageRequest); i { case 0: return &v.state @@ -1345,7 +1345,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*UpsertDraftExternalAuditStorageResponse); i { case 0: return &v.state @@ -1357,7 +1357,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*DeleteDraftExternalAuditStorageRequest); i { case 0: return &v.state @@ -1369,7 +1369,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*PromoteToClusterExternalAuditStorageRequest); i { case 0: return &v.state @@ -1381,7 +1381,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*PromoteToClusterExternalAuditStorageResponse); i { case 0: return &v.state @@ -1393,7 +1393,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*GetClusterExternalAuditStorageRequest); i { case 0: return &v.state @@ -1405,7 +1405,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*GetClusterExternalAuditStorageResponse); i { case 0: return &v.state @@ -1417,7 +1417,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*DisableClusterExternalAuditStorageRequest); i { case 0: return &v.state @@ -1429,7 +1429,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*GenerateDraftExternalAuditStorageRequest); i { case 0: return &v.state @@ -1441,7 +1441,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*GenerateDraftExternalAuditStorageResponse); i { case 0: return &v.state @@ -1453,7 +1453,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[14].Exporter = func(v any, i int) any { switch v := v.(*TestDraftExternalAuditStorageBucketsRequest); i { case 0: return &v.state @@ -1465,7 +1465,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[15].Exporter = func(v any, i int) any { switch v := v.(*TestDraftExternalAuditStorageBucketsResponse); i { case 0: return &v.state @@ -1477,7 +1477,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[16].Exporter = func(v any, i int) any { switch v := v.(*TestDraftExternalAuditStorageGlueRequest); i { case 0: return &v.state @@ -1489,7 +1489,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[17].Exporter = func(v any, i int) any { switch v := v.(*TestDraftExternalAuditStorageGlueResponse); i { case 0: return &v.state @@ -1501,7 +1501,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[18].Exporter = func(v any, i int) any { switch v := v.(*TestDraftExternalAuditStorageAthenaRequest); i { case 0: return &v.state @@ -1513,7 +1513,7 @@ func file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_in return nil } } - file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_teleport_externalauditstorage_v1_externalauditstorage_service_proto_msgTypes[19].Exporter = func(v any, i int) any { switch v := v.(*TestDraftExternalAuditStorageAthenaResponse); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/header/v1/metadata.pb.go b/api/gen/proto/go/teleport/header/v1/metadata.pb.go index 20e03ff879f4b..82f9240ff41b6 100644 --- a/api/gen/proto/go/teleport/header/v1/metadata.pb.go +++ b/api/gen/proto/go/teleport/header/v1/metadata.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/header/v1/metadata.proto @@ -196,7 +196,7 @@ func file_teleport_header_v1_metadata_proto_rawDescGZIP() []byte { } var file_teleport_header_v1_metadata_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_teleport_header_v1_metadata_proto_goTypes = []interface{}{ +var file_teleport_header_v1_metadata_proto_goTypes = []any{ (*Metadata)(nil), // 0: teleport.header.v1.Metadata nil, // 1: teleport.header.v1.Metadata.LabelsEntry (*timestamppb.Timestamp)(nil), // 2: google.protobuf.Timestamp @@ -217,7 +217,7 @@ func file_teleport_header_v1_metadata_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_header_v1_metadata_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_header_v1_metadata_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Metadata); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/header/v1/resourceheader.pb.go b/api/gen/proto/go/teleport/header/v1/resourceheader.pb.go index 1241518ab54ce..2d83e877f08a6 100644 --- a/api/gen/proto/go/teleport/header/v1/resourceheader.pb.go +++ b/api/gen/proto/go/teleport/header/v1/resourceheader.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/header/v1/resourceheader.proto @@ -152,7 +152,7 @@ func file_teleport_header_v1_resourceheader_proto_rawDescGZIP() []byte { } var file_teleport_header_v1_resourceheader_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_header_v1_resourceheader_proto_goTypes = []interface{}{ +var file_teleport_header_v1_resourceheader_proto_goTypes = []any{ (*ResourceHeader)(nil), // 0: teleport.header.v1.ResourceHeader (*Metadata)(nil), // 1: teleport.header.v1.Metadata } @@ -172,7 +172,7 @@ func file_teleport_header_v1_resourceheader_proto_init() { } file_teleport_header_v1_metadata_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_header_v1_resourceheader_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_header_v1_resourceheader_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*ResourceHeader); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/integration/v1/awsoidc_service.pb.go b/api/gen/proto/go/teleport/integration/v1/awsoidc_service.pb.go index ad0b646b0e72f..ab4d6a60fc4cb 100644 --- a/api/gen/proto/go/teleport/integration/v1/awsoidc_service.pb.go +++ b/api/gen/proto/go/teleport/integration/v1/awsoidc_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/integration/v1/awsoidc_service.proto @@ -1865,6 +1865,13 @@ type EKSCluster struct { // Known values are: // CREATING | ACTIVE | DELETING | FAILED | UPDATING | PENDING Status string `protobuf:"bytes,6,opt,name=status,proto3" json:"status,omitempty"` + // EndpointPublicAccess indicates whether this EKS Cluster is accessible publicly. + // If only private access is available, then the EKS Cluster can't be enrolled from Teleport Cloud. + EndpointPublicAccess bool `protobuf:"varint,7,opt,name=endpoint_public_access,json=endpointPublicAccess,proto3" json:"endpoint_public_access,omitempty"` + // AuthenticationMode is the allowed authentication mode for the cluster. + // Known values are: + // API | API_AND_CONFIG_MAP | CONFIG_MAP + AuthenticationMode string `protobuf:"bytes,8,opt,name=authentication_mode,json=authenticationMode,proto3" json:"authentication_mode,omitempty"` } func (x *EKSCluster) Reset() { @@ -1941,6 +1948,20 @@ func (x *EKSCluster) GetStatus() string { return "" } +func (x *EKSCluster) GetEndpointPublicAccess() bool { + if x != nil { + return x.EndpointPublicAccess + } + return false +} + +func (x *EKSCluster) GetAuthenticationMode() string { + if x != nil { + return x.AuthenticationMode + } + return "" +} + // ListEKSClustersResponse contains a page of AWS EKS Clusters. type ListEKSClustersResponse struct { state protoimpl.MessageState @@ -2255,7 +2276,7 @@ var file_teleport_integration_v1_awsoidc_service_proto_rawDesc = []byte{ 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x78, 0x74, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xfb, 0x02, 0x0a, 0x0a, 0x45, 0x4b, 0x53, 0x43, 0x6c, 0x75, 0x73, + 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0xe2, 0x03, 0x0a, 0x0a, 0x45, 0x4b, 0x53, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, @@ -2271,94 +2292,100 @@ var file_teleport_integration_v1_awsoidc_service_proto_rawDesc = []byte{ 0x73, 0x74, 0x65, 0x72, 0x2e, 0x4a, 0x6f, 0x69, 0x6e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x6a, 0x6f, 0x69, 0x6e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, - 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x4a, 0x6f, 0x69, 0x6e, 0x4c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, - 0x38, 0x01, 0x22, 0x79, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x4b, 0x53, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, - 0x08, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x23, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x4b, 0x53, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x52, 0x08, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1d, - 0x0a, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x78, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x32, 0x90, 0x08, - 0x0a, 0x0e, 0x41, 0x57, 0x53, 0x4f, 0x49, 0x44, 0x43, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x5f, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x49, 0x43, 0x45, 0x12, 0x28, 0x2e, 0x74, - 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x49, 0x43, 0x45, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, + 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x65, 0x6e, 0x64, 0x70, + 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x2f, + 0x0a, 0x13, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x61, 0x75, 0x74, + 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x6f, 0x64, 0x65, 0x1a, + 0x39, 0x0a, 0x0b, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3d, 0x0a, 0x0f, 0x4a, 0x6f, + 0x69, 0x6e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x79, 0x0a, 0x17, 0x4c, 0x69, 0x73, + 0x74, 0x45, 0x4b, 0x53, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x08, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, + 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x45, 0x4b, 0x53, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x08, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x65, 0x78, 0x74, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x32, 0x90, 0x08, 0x0a, 0x0e, 0x41, 0x57, 0x53, 0x4f, 0x49, 0x44, 0x43, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5f, 0x0a, 0x08, 0x4c, 0x69, 0x73, 0x74, 0x45, + 0x49, 0x43, 0x45, 0x12, 0x28, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, + 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x45, 0x49, 0x43, 0x45, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, + 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x49, 0x43, 0x45, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x45, 0x49, 0x43, 0x45, 0x12, 0x2a, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x49, 0x43, 0x45, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x65, 0x0a, 0x0a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x49, 0x43, 0x45, 0x12, - 0x2a, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x45, 0x49, 0x43, 0x45, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x74, 0x65, - 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x49, 0x43, 0x45, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6e, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, - 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x12, 0x2d, 0x2e, 0x74, 0x65, 0x6c, 0x65, + 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x49, 0x43, 0x45, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, + 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x45, 0x49, 0x43, 0x45, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x6e, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, + 0x12, 0x2d, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, + 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, + 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x7d, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x32, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, - 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7d, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, - 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x32, - 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, - 0x75, 0x72, 0x69, 0x74, 0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, - 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x86, 0x01, 0x0a, 0x15, 0x44, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, + 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x86, + 0x01, 0x0a, 0x15, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, + 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x35, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, - 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x6e, 0x0a, 0x0d, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x12, 0x2d, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, - 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x7a, 0x0a, 0x11, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x4b, 0x53, 0x43, 0x6c, 0x75, - 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x31, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x4b, 0x53, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, + 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x36, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6e, 0x0a, 0x0d, 0x44, 0x65, 0x70, 0x6c, 0x6f, + 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x2d, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x4b, 0x53, 0x43, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x07, - 0x4c, 0x69, 0x73, 0x74, 0x45, 0x43, 0x32, 0x12, 0x27, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, + 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x43, 0x32, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x28, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, - 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, - 0x43, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x74, 0x0a, 0x0f, 0x4c, 0x69, - 0x73, 0x74, 0x45, 0x4b, 0x53, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x2f, 0x2e, - 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x4b, 0x53, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, + 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x7a, 0x0a, 0x11, 0x45, 0x6e, 0x72, 0x6f, 0x6c, + 0x6c, 0x45, 0x4b, 0x53, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x12, 0x31, 0x2e, 0x74, + 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x4b, 0x53, + 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x32, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, + 0x45, 0x4b, 0x53, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, 0x07, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x43, 0x32, 0x12, 0x27, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x4b, 0x53, - 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x42, 0x5a, 0x5a, 0x58, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, - 0x72, 0x61, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x6c, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, - 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x3b, 0x69, - 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x43, 0x32, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, + 0x72, 0x74, 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x43, 0x32, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x74, 0x0a, 0x0f, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x4b, 0x53, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x73, 0x12, 0x2f, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2e, + 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x45, 0x4b, 0x53, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x2e, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x45, 0x4b, 0x53, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x5a, 0x5a, 0x58, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x72, 0x61, 0x76, 0x69, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x2f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x2f, 0x74, 0x65, + 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x3b, 0x69, 0x6e, 0x74, 0x65, 0x67, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x76, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2374,7 +2401,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_rawDescGZIP() []byte { } var file_teleport_integration_v1_awsoidc_service_proto_msgTypes = make([]protoimpl.MessageInfo, 28) -var file_teleport_integration_v1_awsoidc_service_proto_goTypes = []interface{}{ +var file_teleport_integration_v1_awsoidc_service_proto_goTypes = []any{ (*ListEICERequest)(nil), // 0: teleport.integration.v1.ListEICERequest (*EC2InstanceConnectEndpoint)(nil), // 1: teleport.integration.v1.EC2InstanceConnectEndpoint (*ListEICEResponse)(nil), // 2: teleport.integration.v1.ListEICEResponse @@ -2452,7 +2479,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*ListEICERequest); i { case 0: return &v.state @@ -2464,7 +2491,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*EC2InstanceConnectEndpoint); i { case 0: return &v.state @@ -2476,7 +2503,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ListEICEResponse); i { case 0: return &v.state @@ -2488,7 +2515,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*CreateEICERequest); i { case 0: return &v.state @@ -2500,7 +2527,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*EC2ICEndpoint); i { case 0: return &v.state @@ -2512,7 +2539,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*CreateEICEResponse); i { case 0: return &v.state @@ -2524,7 +2551,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*ListDatabasesRequest); i { case 0: return &v.state @@ -2536,7 +2563,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*ListDatabasesResponse); i { case 0: return &v.state @@ -2548,7 +2575,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*ListSecurityGroupsRequest); i { case 0: return &v.state @@ -2560,7 +2587,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*SecurityGroupRuleCIDR); i { case 0: return &v.state @@ -2572,7 +2599,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*SecurityGroupRule); i { case 0: return &v.state @@ -2584,7 +2611,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*SecurityGroup); i { case 0: return &v.state @@ -2596,7 +2623,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*ListSecurityGroupsResponse); i { case 0: return &v.state @@ -2608,7 +2635,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*DeployDatabaseServiceRequest); i { case 0: return &v.state @@ -2620,7 +2647,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[14].Exporter = func(v any, i int) any { switch v := v.(*DeployDatabaseServiceDeployment); i { case 0: return &v.state @@ -2632,7 +2659,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[15].Exporter = func(v any, i int) any { switch v := v.(*DeployDatabaseServiceResponse); i { case 0: return &v.state @@ -2644,7 +2671,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[16].Exporter = func(v any, i int) any { switch v := v.(*DeployServiceRequest); i { case 0: return &v.state @@ -2656,7 +2683,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[17].Exporter = func(v any, i int) any { switch v := v.(*DeployServiceResponse); i { case 0: return &v.state @@ -2668,7 +2695,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[18].Exporter = func(v any, i int) any { switch v := v.(*EnrollEKSClustersRequest); i { case 0: return &v.state @@ -2680,7 +2707,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[19].Exporter = func(v any, i int) any { switch v := v.(*EnrollEKSClusterResult); i { case 0: return &v.state @@ -2692,7 +2719,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[20].Exporter = func(v any, i int) any { switch v := v.(*EnrollEKSClustersResponse); i { case 0: return &v.state @@ -2704,7 +2731,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[21].Exporter = func(v any, i int) any { switch v := v.(*ListEC2Request); i { case 0: return &v.state @@ -2716,7 +2743,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[22].Exporter = func(v any, i int) any { switch v := v.(*ListEC2Response); i { case 0: return &v.state @@ -2728,7 +2755,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[23].Exporter = func(v any, i int) any { switch v := v.(*ListEKSClustersRequest); i { case 0: return &v.state @@ -2740,7 +2767,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[24].Exporter = func(v any, i int) any { switch v := v.(*EKSCluster); i { case 0: return &v.state @@ -2752,7 +2779,7 @@ func file_teleport_integration_v1_awsoidc_service_proto_init() { return nil } } - file_teleport_integration_v1_awsoidc_service_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_awsoidc_service_proto_msgTypes[25].Exporter = func(v any, i int) any { switch v := v.(*ListEKSClustersResponse); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/integration/v1/integration_service.pb.go b/api/gen/proto/go/teleport/integration/v1/integration_service.pb.go index 6dd485f9c3cf3..e5f0823a4d48f 100644 --- a/api/gen/proto/go/teleport/integration/v1/integration_service.pb.go +++ b/api/gen/proto/go/teleport/integration/v1/integration_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/integration/v1/integration_service.proto @@ -635,7 +635,7 @@ func file_teleport_integration_v1_integration_service_proto_rawDescGZIP() []byte } var file_teleport_integration_v1_integration_service_proto_msgTypes = make([]protoimpl.MessageInfo, 9) -var file_teleport_integration_v1_integration_service_proto_goTypes = []interface{}{ +var file_teleport_integration_v1_integration_service_proto_goTypes = []any{ (*ListIntegrationsRequest)(nil), // 0: teleport.integration.v1.ListIntegrationsRequest (*ListIntegrationsResponse)(nil), // 1: teleport.integration.v1.ListIntegrationsResponse (*GetIntegrationRequest)(nil), // 2: teleport.integration.v1.GetIntegrationRequest @@ -679,7 +679,7 @@ func file_teleport_integration_v1_integration_service_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_integration_v1_integration_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_integration_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*ListIntegrationsRequest); i { case 0: return &v.state @@ -691,7 +691,7 @@ func file_teleport_integration_v1_integration_service_proto_init() { return nil } } - file_teleport_integration_v1_integration_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_integration_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*ListIntegrationsResponse); i { case 0: return &v.state @@ -703,7 +703,7 @@ func file_teleport_integration_v1_integration_service_proto_init() { return nil } } - file_teleport_integration_v1_integration_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_integration_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*GetIntegrationRequest); i { case 0: return &v.state @@ -715,7 +715,7 @@ func file_teleport_integration_v1_integration_service_proto_init() { return nil } } - file_teleport_integration_v1_integration_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_integration_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*CreateIntegrationRequest); i { case 0: return &v.state @@ -727,7 +727,7 @@ func file_teleport_integration_v1_integration_service_proto_init() { return nil } } - file_teleport_integration_v1_integration_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_integration_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*UpdateIntegrationRequest); i { case 0: return &v.state @@ -739,7 +739,7 @@ func file_teleport_integration_v1_integration_service_proto_init() { return nil } } - file_teleport_integration_v1_integration_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_integration_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*DeleteIntegrationRequest); i { case 0: return &v.state @@ -751,7 +751,7 @@ func file_teleport_integration_v1_integration_service_proto_init() { return nil } } - file_teleport_integration_v1_integration_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_integration_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*DeleteAllIntegrationsRequest); i { case 0: return &v.state @@ -763,7 +763,7 @@ func file_teleport_integration_v1_integration_service_proto_init() { return nil } } - file_teleport_integration_v1_integration_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_integration_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*GenerateAWSOIDCTokenRequest); i { case 0: return &v.state @@ -775,7 +775,7 @@ func file_teleport_integration_v1_integration_service_proto_init() { return nil } } - file_teleport_integration_v1_integration_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_integration_v1_integration_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*GenerateAWSOIDCTokenResponse); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/kube/v1/kube_service.pb.go b/api/gen/proto/go/teleport/kube/v1/kube_service.pb.go index 661ae6bdeb1bb..fe29cc410c567 100644 --- a/api/gen/proto/go/teleport/kube/v1/kube_service.pb.go +++ b/api/gen/proto/go/teleport/kube/v1/kube_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/kube/v1/kube_service.proto @@ -359,7 +359,7 @@ func file_teleport_kube_v1_kube_service_proto_rawDescGZIP() []byte { } var file_teleport_kube_v1_kube_service_proto_msgTypes = make([]protoimpl.MessageInfo, 3) -var file_teleport_kube_v1_kube_service_proto_goTypes = []interface{}{ +var file_teleport_kube_v1_kube_service_proto_goTypes = []any{ (*ListKubernetesResourcesRequest)(nil), // 0: teleport.kube.v1.ListKubernetesResourcesRequest (*ListKubernetesResourcesResponse)(nil), // 1: teleport.kube.v1.ListKubernetesResourcesResponse nil, // 2: teleport.kube.v1.ListKubernetesResourcesRequest.LabelsEntry @@ -385,7 +385,7 @@ func file_teleport_kube_v1_kube_service_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_kube_v1_kube_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_kube_v1_kube_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*ListKubernetesResourcesRequest); i { case 0: return &v.state @@ -397,7 +397,7 @@ func file_teleport_kube_v1_kube_service_proto_init() { return nil } } - file_teleport_kube_v1_kube_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_kube_v1_kube_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*ListKubernetesResourcesResponse); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/kubewaitingcontainer/v1/kubewaitingcontainer.pb.go b/api/gen/proto/go/teleport/kubewaitingcontainer/v1/kubewaitingcontainer.pb.go index 430158734350f..0182ab9262033 100644 --- a/api/gen/proto/go/teleport/kubewaitingcontainer/v1/kubewaitingcontainer.pb.go +++ b/api/gen/proto/go/teleport/kubewaitingcontainer/v1/kubewaitingcontainer.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/kubewaitingcontainer/v1/kubewaitingcontainer.proto @@ -290,7 +290,7 @@ func file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_proto_rawDescGZI } var file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_proto_goTypes = []interface{}{ +var file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_proto_goTypes = []any{ (*KubernetesWaitingContainer)(nil), // 0: teleport.kubewaitingcontainer.v1.KubernetesWaitingContainer (*KubernetesWaitingContainerSpec)(nil), // 1: teleport.kubewaitingcontainer.v1.KubernetesWaitingContainerSpec (*v1.Metadata)(nil), // 2: teleport.header.v1.Metadata @@ -311,7 +311,7 @@ func file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*KubernetesWaitingContainer); i { case 0: return &v.state @@ -323,7 +323,7 @@ func file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_proto_init() { return nil } } - file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*KubernetesWaitingContainerSpec); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/kubewaitingcontainer/v1/kubewaitingcontainer_service.pb.go b/api/gen/proto/go/teleport/kubewaitingcontainer/v1/kubewaitingcontainer_service.pb.go index 26975c6922f9c..7c42b2c4c2333 100644 --- a/api/gen/proto/go/teleport/kubewaitingcontainer/v1/kubewaitingcontainer_service.pb.go +++ b/api/gen/proto/go/teleport/kubewaitingcontainer/v1/kubewaitingcontainer_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/kubewaitingcontainer/v1/kubewaitingcontainer_service.proto @@ -504,7 +504,7 @@ func file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_ra } var file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_msgTypes = make([]protoimpl.MessageInfo, 5) -var file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_goTypes = []interface{}{ +var file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_goTypes = []any{ (*ListKubernetesWaitingContainersRequest)(nil), // 0: teleport.kubewaitingcontainer.v1.ListKubernetesWaitingContainersRequest (*ListKubernetesWaitingContainersResponse)(nil), // 1: teleport.kubewaitingcontainer.v1.ListKubernetesWaitingContainersResponse (*GetKubernetesWaitingContainerRequest)(nil), // 2: teleport.kubewaitingcontainer.v1.GetKubernetesWaitingContainerRequest @@ -538,7 +538,7 @@ func file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_in } file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*ListKubernetesWaitingContainersRequest); i { case 0: return &v.state @@ -550,7 +550,7 @@ func file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_in return nil } } - file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*ListKubernetesWaitingContainersResponse); i { case 0: return &v.state @@ -562,7 +562,7 @@ func file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_in return nil } } - file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*GetKubernetesWaitingContainerRequest); i { case 0: return &v.state @@ -574,7 +574,7 @@ func file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_in return nil } } - file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*CreateKubernetesWaitingContainerRequest); i { case 0: return &v.state @@ -586,7 +586,7 @@ func file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_in return nil } } - file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_kubewaitingcontainer_v1_kubewaitingcontainer_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*DeleteKubernetesWaitingContainerRequest); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/label/v1/label.pb.go b/api/gen/proto/go/teleport/label/v1/label.pb.go index b43a962f4148c..4e68929981f16 100644 --- a/api/gen/proto/go/teleport/label/v1/label.pb.go +++ b/api/gen/proto/go/teleport/label/v1/label.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/label/v1/label.proto @@ -122,7 +122,7 @@ func file_teleport_label_v1_label_proto_rawDescGZIP() []byte { } var file_teleport_label_v1_label_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_label_v1_label_proto_goTypes = []interface{}{ +var file_teleport_label_v1_label_proto_goTypes = []any{ (*Label)(nil), // 0: teleport.label.v1.Label } var file_teleport_label_v1_label_proto_depIdxs = []int32{ @@ -139,7 +139,7 @@ func file_teleport_label_v1_label_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_label_v1_label_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_label_v1_label_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Label); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/loginrule/v1/loginrule.pb.go b/api/gen/proto/go/teleport/loginrule/v1/loginrule.pb.go index 3a01b1e524cb4..e2da6a5e233b8 100644 --- a/api/gen/proto/go/teleport/loginrule/v1/loginrule.pb.go +++ b/api/gen/proto/go/teleport/loginrule/v1/loginrule.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/loginrule/v1/loginrule.proto @@ -180,7 +180,7 @@ func file_teleport_loginrule_v1_loginrule_proto_rawDescGZIP() []byte { } var file_teleport_loginrule_v1_loginrule_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_teleport_loginrule_v1_loginrule_proto_goTypes = []interface{}{ +var file_teleport_loginrule_v1_loginrule_proto_goTypes = []any{ (*LoginRule)(nil), // 0: teleport.loginrule.v1.LoginRule nil, // 1: teleport.loginrule.v1.LoginRule.TraitsMapEntry (*types.Metadata)(nil), // 2: types.Metadata @@ -203,7 +203,7 @@ func file_teleport_loginrule_v1_loginrule_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_loginrule_v1_loginrule_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_loginrule_v1_loginrule_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*LoginRule); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/loginrule/v1/loginrule_service.pb.go b/api/gen/proto/go/teleport/loginrule/v1/loginrule_service.pb.go index 2641e8ced9f0e..aa49ef7a86c71 100644 --- a/api/gen/proto/go/teleport/loginrule/v1/loginrule_service.pb.go +++ b/api/gen/proto/go/teleport/loginrule/v1/loginrule_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/loginrule/v1/loginrule_service.proto @@ -604,7 +604,7 @@ func file_teleport_loginrule_v1_loginrule_service_proto_rawDescGZIP() []byte { } var file_teleport_loginrule_v1_loginrule_service_proto_msgTypes = make([]protoimpl.MessageInfo, 10) -var file_teleport_loginrule_v1_loginrule_service_proto_goTypes = []interface{}{ +var file_teleport_loginrule_v1_loginrule_service_proto_goTypes = []any{ (*CreateLoginRuleRequest)(nil), // 0: teleport.loginrule.v1.CreateLoginRuleRequest (*UpsertLoginRuleRequest)(nil), // 1: teleport.loginrule.v1.UpsertLoginRuleRequest (*GetLoginRuleRequest)(nil), // 2: teleport.loginrule.v1.GetLoginRuleRequest @@ -654,7 +654,7 @@ func file_teleport_loginrule_v1_loginrule_service_proto_init() { } file_teleport_loginrule_v1_loginrule_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_loginrule_v1_loginrule_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_loginrule_v1_loginrule_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*CreateLoginRuleRequest); i { case 0: return &v.state @@ -666,7 +666,7 @@ func file_teleport_loginrule_v1_loginrule_service_proto_init() { return nil } } - file_teleport_loginrule_v1_loginrule_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_loginrule_v1_loginrule_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*UpsertLoginRuleRequest); i { case 0: return &v.state @@ -678,7 +678,7 @@ func file_teleport_loginrule_v1_loginrule_service_proto_init() { return nil } } - file_teleport_loginrule_v1_loginrule_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_loginrule_v1_loginrule_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*GetLoginRuleRequest); i { case 0: return &v.state @@ -690,7 +690,7 @@ func file_teleport_loginrule_v1_loginrule_service_proto_init() { return nil } } - file_teleport_loginrule_v1_loginrule_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_loginrule_v1_loginrule_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ListLoginRulesRequest); i { case 0: return &v.state @@ -702,7 +702,7 @@ func file_teleport_loginrule_v1_loginrule_service_proto_init() { return nil } } - file_teleport_loginrule_v1_loginrule_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_loginrule_v1_loginrule_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*ListLoginRulesResponse); i { case 0: return &v.state @@ -714,7 +714,7 @@ func file_teleport_loginrule_v1_loginrule_service_proto_init() { return nil } } - file_teleport_loginrule_v1_loginrule_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_loginrule_v1_loginrule_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*DeleteLoginRuleRequest); i { case 0: return &v.state @@ -726,7 +726,7 @@ func file_teleport_loginrule_v1_loginrule_service_proto_init() { return nil } } - file_teleport_loginrule_v1_loginrule_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_loginrule_v1_loginrule_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*TestLoginRuleRequest); i { case 0: return &v.state @@ -738,7 +738,7 @@ func file_teleport_loginrule_v1_loginrule_service_proto_init() { return nil } } - file_teleport_loginrule_v1_loginrule_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_loginrule_v1_loginrule_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*TestLoginRuleResponse); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/machineid/v1/bot.pb.go b/api/gen/proto/go/teleport/machineid/v1/bot.pb.go index 050b5d895ed8f..ddaf8c65ee7ef 100644 --- a/api/gen/proto/go/teleport/machineid/v1/bot.pb.go +++ b/api/gen/proto/go/teleport/machineid/v1/bot.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/machineid/v1/bot.proto @@ -372,7 +372,7 @@ func file_teleport_machineid_v1_bot_proto_rawDescGZIP() []byte { } var file_teleport_machineid_v1_bot_proto_msgTypes = make([]protoimpl.MessageInfo, 4) -var file_teleport_machineid_v1_bot_proto_goTypes = []interface{}{ +var file_teleport_machineid_v1_bot_proto_goTypes = []any{ (*Bot)(nil), // 0: teleport.machineid.v1.Bot (*Trait)(nil), // 1: teleport.machineid.v1.Trait (*BotSpec)(nil), // 2: teleport.machineid.v1.BotSpec @@ -397,7 +397,7 @@ func file_teleport_machineid_v1_bot_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_machineid_v1_bot_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_bot_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Bot); i { case 0: return &v.state @@ -409,7 +409,7 @@ func file_teleport_machineid_v1_bot_proto_init() { return nil } } - file_teleport_machineid_v1_bot_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_bot_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*Trait); i { case 0: return &v.state @@ -421,7 +421,7 @@ func file_teleport_machineid_v1_bot_proto_init() { return nil } } - file_teleport_machineid_v1_bot_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_bot_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*BotSpec); i { case 0: return &v.state @@ -433,7 +433,7 @@ func file_teleport_machineid_v1_bot_proto_init() { return nil } } - file_teleport_machineid_v1_bot_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_bot_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*BotStatus); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/machineid/v1/bot_service.pb.go b/api/gen/proto/go/teleport/machineid/v1/bot_service.pb.go index 72213aa360574..0675d8a58fa18 100644 --- a/api/gen/proto/go/teleport/machineid/v1/bot_service.pb.go +++ b/api/gen/proto/go/teleport/machineid/v1/bot_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/machineid/v1/bot_service.proto @@ -509,7 +509,7 @@ func file_teleport_machineid_v1_bot_service_proto_rawDescGZIP() []byte { } var file_teleport_machineid_v1_bot_service_proto_msgTypes = make([]protoimpl.MessageInfo, 7) -var file_teleport_machineid_v1_bot_service_proto_goTypes = []interface{}{ +var file_teleport_machineid_v1_bot_service_proto_goTypes = []any{ (*CreateBotRequest)(nil), // 0: teleport.machineid.v1.CreateBotRequest (*GetBotRequest)(nil), // 1: teleport.machineid.v1.GetBotRequest (*ListBotsRequest)(nil), // 2: teleport.machineid.v1.ListBotsRequest @@ -553,7 +553,7 @@ func file_teleport_machineid_v1_bot_service_proto_init() { } file_teleport_machineid_v1_bot_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_machineid_v1_bot_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_bot_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*CreateBotRequest); i { case 0: return &v.state @@ -565,7 +565,7 @@ func file_teleport_machineid_v1_bot_service_proto_init() { return nil } } - file_teleport_machineid_v1_bot_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_bot_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*GetBotRequest); i { case 0: return &v.state @@ -577,7 +577,7 @@ func file_teleport_machineid_v1_bot_service_proto_init() { return nil } } - file_teleport_machineid_v1_bot_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_bot_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ListBotsRequest); i { case 0: return &v.state @@ -589,7 +589,7 @@ func file_teleport_machineid_v1_bot_service_proto_init() { return nil } } - file_teleport_machineid_v1_bot_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_bot_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ListBotsResponse); i { case 0: return &v.state @@ -601,7 +601,7 @@ func file_teleport_machineid_v1_bot_service_proto_init() { return nil } } - file_teleport_machineid_v1_bot_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_bot_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*UpdateBotRequest); i { case 0: return &v.state @@ -613,7 +613,7 @@ func file_teleport_machineid_v1_bot_service_proto_init() { return nil } } - file_teleport_machineid_v1_bot_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_bot_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*UpsertBotRequest); i { case 0: return &v.state @@ -625,7 +625,7 @@ func file_teleport_machineid_v1_bot_service_proto_init() { return nil } } - file_teleport_machineid_v1_bot_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_bot_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*DeleteBotRequest); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/machineid/v1/federation.pb.go b/api/gen/proto/go/teleport/machineid/v1/federation.pb.go index eb5679a681150..a2290d9a93803 100644 --- a/api/gen/proto/go/teleport/machineid/v1/federation.pb.go +++ b/api/gen/proto/go/teleport/machineid/v1/federation.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/machineid/v1/federation.proto @@ -527,7 +527,7 @@ func file_teleport_machineid_v1_federation_proto_rawDescGZIP() []byte { } var file_teleport_machineid_v1_federation_proto_msgTypes = make([]protoimpl.MessageInfo, 6) -var file_teleport_machineid_v1_federation_proto_goTypes = []interface{}{ +var file_teleport_machineid_v1_federation_proto_goTypes = []any{ (*SPIFFEFederation)(nil), // 0: teleport.machineid.v1.SPIFFEFederation (*SPIFFEFederationBundleSourceStatic)(nil), // 1: teleport.machineid.v1.SPIFFEFederationBundleSourceStatic (*SPIFFEFederationBundleSourceHTTPSWeb)(nil), // 2: teleport.machineid.v1.SPIFFEFederationBundleSourceHTTPSWeb @@ -560,7 +560,7 @@ func file_teleport_machineid_v1_federation_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_machineid_v1_federation_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_federation_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*SPIFFEFederation); i { case 0: return &v.state @@ -572,7 +572,7 @@ func file_teleport_machineid_v1_federation_proto_init() { return nil } } - file_teleport_machineid_v1_federation_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_federation_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*SPIFFEFederationBundleSourceStatic); i { case 0: return &v.state @@ -584,7 +584,7 @@ func file_teleport_machineid_v1_federation_proto_init() { return nil } } - file_teleport_machineid_v1_federation_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_federation_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*SPIFFEFederationBundleSourceHTTPSWeb); i { case 0: return &v.state @@ -596,7 +596,7 @@ func file_teleport_machineid_v1_federation_proto_init() { return nil } } - file_teleport_machineid_v1_federation_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_federation_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*SPIFFEFederationBundleSource); i { case 0: return &v.state @@ -608,7 +608,7 @@ func file_teleport_machineid_v1_federation_proto_init() { return nil } } - file_teleport_machineid_v1_federation_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_federation_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*SPIFFEFederationSpec); i { case 0: return &v.state @@ -620,7 +620,7 @@ func file_teleport_machineid_v1_federation_proto_init() { return nil } } - file_teleport_machineid_v1_federation_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_federation_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*SPIFFEFederationStatus); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/machineid/v1/federation_service.pb.go b/api/gen/proto/go/teleport/machineid/v1/federation_service.pb.go index e58ad63436b61..abea4ef98c9d1 100644 --- a/api/gen/proto/go/teleport/machineid/v1/federation_service.pb.go +++ b/api/gen/proto/go/teleport/machineid/v1/federation_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/machineid/v1/federation_service.proto @@ -397,7 +397,7 @@ func file_teleport_machineid_v1_federation_service_proto_rawDescGZIP() []byte { } var file_teleport_machineid_v1_federation_service_proto_msgTypes = make([]protoimpl.MessageInfo, 5) -var file_teleport_machineid_v1_federation_service_proto_goTypes = []interface{}{ +var file_teleport_machineid_v1_federation_service_proto_goTypes = []any{ (*GetSPIFFEFederationRequest)(nil), // 0: teleport.machineid.v1.GetSPIFFEFederationRequest (*ListSPIFFEFederationsRequest)(nil), // 1: teleport.machineid.v1.ListSPIFFEFederationsRequest (*ListSPIFFEFederationsResponse)(nil), // 2: teleport.machineid.v1.ListSPIFFEFederationsResponse @@ -431,7 +431,7 @@ func file_teleport_machineid_v1_federation_service_proto_init() { } file_teleport_machineid_v1_federation_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_machineid_v1_federation_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_federation_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*GetSPIFFEFederationRequest); i { case 0: return &v.state @@ -443,7 +443,7 @@ func file_teleport_machineid_v1_federation_service_proto_init() { return nil } } - file_teleport_machineid_v1_federation_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_federation_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*ListSPIFFEFederationsRequest); i { case 0: return &v.state @@ -455,7 +455,7 @@ func file_teleport_machineid_v1_federation_service_proto_init() { return nil } } - file_teleport_machineid_v1_federation_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_federation_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ListSPIFFEFederationsResponse); i { case 0: return &v.state @@ -467,7 +467,7 @@ func file_teleport_machineid_v1_federation_service_proto_init() { return nil } } - file_teleport_machineid_v1_federation_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_federation_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*DeleteSPIFFEFederationRequest); i { case 0: return &v.state @@ -479,7 +479,7 @@ func file_teleport_machineid_v1_federation_service_proto_init() { return nil } } - file_teleport_machineid_v1_federation_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_federation_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*CreateSPIFFEFederationRequest); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/machineid/v1/workload_identity_service.pb.go b/api/gen/proto/go/teleport/machineid/v1/workload_identity_service.pb.go index 239ce8b66037e..a17891a4e37ae 100644 --- a/api/gen/proto/go/teleport/machineid/v1/workload_identity_service.pb.go +++ b/api/gen/proto/go/teleport/machineid/v1/workload_identity_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/machineid/v1/workload_identity_service.proto @@ -377,7 +377,7 @@ func file_teleport_machineid_v1_workload_identity_service_proto_rawDescGZIP() [] } var file_teleport_machineid_v1_workload_identity_service_proto_msgTypes = make([]protoimpl.MessageInfo, 4) -var file_teleport_machineid_v1_workload_identity_service_proto_goTypes = []interface{}{ +var file_teleport_machineid_v1_workload_identity_service_proto_goTypes = []any{ (*SVIDRequest)(nil), // 0: teleport.machineid.v1.SVIDRequest (*SVIDResponse)(nil), // 1: teleport.machineid.v1.SVIDResponse (*SignX509SVIDsRequest)(nil), // 2: teleport.machineid.v1.SignX509SVIDsRequest @@ -403,7 +403,7 @@ func file_teleport_machineid_v1_workload_identity_service_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_machineid_v1_workload_identity_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_workload_identity_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*SVIDRequest); i { case 0: return &v.state @@ -415,7 +415,7 @@ func file_teleport_machineid_v1_workload_identity_service_proto_init() { return nil } } - file_teleport_machineid_v1_workload_identity_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_workload_identity_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*SVIDResponse); i { case 0: return &v.state @@ -427,7 +427,7 @@ func file_teleport_machineid_v1_workload_identity_service_proto_init() { return nil } } - file_teleport_machineid_v1_workload_identity_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_workload_identity_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*SignX509SVIDsRequest); i { case 0: return &v.state @@ -439,7 +439,7 @@ func file_teleport_machineid_v1_workload_identity_service_proto_init() { return nil } } - file_teleport_machineid_v1_workload_identity_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_machineid_v1_workload_identity_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*SignX509SVIDsResponse); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/notifications/v1/notifications.pb.go b/api/gen/proto/go/teleport/notifications/v1/notifications.pb.go index 5cd61d6808ccd..6a7bc6573e9bd 100644 --- a/api/gen/proto/go/teleport/notifications/v1/notifications.pb.go +++ b/api/gen/proto/go/teleport/notifications/v1/notifications.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/notifications/v1/notifications.proto @@ -1103,7 +1103,7 @@ func file_teleport_notifications_v1_notifications_proto_rawDescGZIP() []byte { var file_teleport_notifications_v1_notifications_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_teleport_notifications_v1_notifications_proto_msgTypes = make([]protoimpl.MessageInfo, 12) -var file_teleport_notifications_v1_notifications_proto_goTypes = []interface{}{ +var file_teleport_notifications_v1_notifications_proto_goTypes = []any{ (NotificationState)(0), // 0: teleport.notifications.v1.NotificationState (*Notification)(nil), // 1: teleport.notifications.v1.Notification (*NotificationSpec)(nil), // 2: teleport.notifications.v1.NotificationSpec @@ -1152,7 +1152,7 @@ func file_teleport_notifications_v1_notifications_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_notifications_v1_notifications_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Notification); i { case 0: return &v.state @@ -1164,7 +1164,7 @@ func file_teleport_notifications_v1_notifications_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*NotificationSpec); i { case 0: return &v.state @@ -1176,7 +1176,7 @@ func file_teleport_notifications_v1_notifications_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*GlobalNotification); i { case 0: return &v.state @@ -1188,7 +1188,7 @@ func file_teleport_notifications_v1_notifications_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*GlobalNotificationSpec); i { case 0: return &v.state @@ -1200,7 +1200,7 @@ func file_teleport_notifications_v1_notifications_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*ByPermissions); i { case 0: return &v.state @@ -1212,7 +1212,7 @@ func file_teleport_notifications_v1_notifications_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*ByRoles); i { case 0: return &v.state @@ -1224,7 +1224,7 @@ func file_teleport_notifications_v1_notifications_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*UserNotificationState); i { case 0: return &v.state @@ -1236,7 +1236,7 @@ func file_teleport_notifications_v1_notifications_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*UserNotificationStateSpec); i { case 0: return &v.state @@ -1248,7 +1248,7 @@ func file_teleport_notifications_v1_notifications_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*UserNotificationStateStatus); i { case 0: return &v.state @@ -1260,7 +1260,7 @@ func file_teleport_notifications_v1_notifications_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*UserLastSeenNotification); i { case 0: return &v.state @@ -1272,7 +1272,7 @@ func file_teleport_notifications_v1_notifications_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*UserLastSeenNotificationSpec); i { case 0: return &v.state @@ -1284,7 +1284,7 @@ func file_teleport_notifications_v1_notifications_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*UserLastSeenNotificationStatus); i { case 0: return &v.state @@ -1297,7 +1297,7 @@ func file_teleport_notifications_v1_notifications_proto_init() { } } } - file_teleport_notifications_v1_notifications_proto_msgTypes[3].OneofWrappers = []interface{}{ + file_teleport_notifications_v1_notifications_proto_msgTypes[3].OneofWrappers = []any{ (*GlobalNotificationSpec_ByPermissions)(nil), (*GlobalNotificationSpec_ByRoles)(nil), (*GlobalNotificationSpec_All)(nil), diff --git a/api/gen/proto/go/teleport/notifications/v1/notifications_service.pb.go b/api/gen/proto/go/teleport/notifications/v1/notifications_service.pb.go index 452bc49069ab6..853c4c5ba5a92 100644 --- a/api/gen/proto/go/teleport/notifications/v1/notifications_service.pb.go +++ b/api/gen/proto/go/teleport/notifications/v1/notifications_service.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/notifications/v1/notifications_service.proto @@ -1051,7 +1051,7 @@ func file_teleport_notifications_v1_notifications_service_proto_rawDescGZIP() [] } var file_teleport_notifications_v1_notifications_service_proto_msgTypes = make([]protoimpl.MessageInfo, 14) -var file_teleport_notifications_v1_notifications_service_proto_goTypes = []interface{}{ +var file_teleport_notifications_v1_notifications_service_proto_goTypes = []any{ (*CreateUserNotificationRequest)(nil), // 0: teleport.notifications.v1.CreateUserNotificationRequest (*DeleteUserNotificationRequest)(nil), // 1: teleport.notifications.v1.DeleteUserNotificationRequest (*ListUserNotificationsRequest)(nil), // 2: teleport.notifications.v1.ListUserNotificationsRequest @@ -1116,7 +1116,7 @@ func file_teleport_notifications_v1_notifications_service_proto_init() { } file_teleport_notifications_v1_notifications_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_notifications_v1_notifications_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*CreateUserNotificationRequest); i { case 0: return &v.state @@ -1128,7 +1128,7 @@ func file_teleport_notifications_v1_notifications_service_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*DeleteUserNotificationRequest); i { case 0: return &v.state @@ -1140,7 +1140,7 @@ func file_teleport_notifications_v1_notifications_service_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ListUserNotificationsRequest); i { case 0: return &v.state @@ -1152,7 +1152,7 @@ func file_teleport_notifications_v1_notifications_service_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ListUserNotificationsResponse); i { case 0: return &v.state @@ -1164,7 +1164,7 @@ func file_teleport_notifications_v1_notifications_service_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*CreateGlobalNotificationRequest); i { case 0: return &v.state @@ -1176,7 +1176,7 @@ func file_teleport_notifications_v1_notifications_service_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*DeleteGlobalNotificationRequest); i { case 0: return &v.state @@ -1188,7 +1188,7 @@ func file_teleport_notifications_v1_notifications_service_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*UpsertUserNotificationStateRequest); i { case 0: return &v.state @@ -1200,7 +1200,7 @@ func file_teleport_notifications_v1_notifications_service_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*UpdateUserNotificationStateRequest); i { case 0: return &v.state @@ -1212,7 +1212,7 @@ func file_teleport_notifications_v1_notifications_service_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*DeleteUserNotificationStateRequest); i { case 0: return &v.state @@ -1224,7 +1224,7 @@ func file_teleport_notifications_v1_notifications_service_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_service_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*ListUserNotificationStatesRequest); i { case 0: return &v.state @@ -1236,7 +1236,7 @@ func file_teleport_notifications_v1_notifications_service_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_service_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*ListUserNotificationStatesResponse); i { case 0: return &v.state @@ -1248,7 +1248,7 @@ func file_teleport_notifications_v1_notifications_service_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_service_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*GetUserLastSeenNotificationRequest); i { case 0: return &v.state @@ -1260,7 +1260,7 @@ func file_teleport_notifications_v1_notifications_service_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_service_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*UpsertUserLastSeenNotificationRequest); i { case 0: return &v.state @@ -1272,7 +1272,7 @@ func file_teleport_notifications_v1_notifications_service_proto_init() { return nil } } - file_teleport_notifications_v1_notifications_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_teleport_notifications_v1_notifications_service_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*DeleteUserLastSeenNotificationRequest); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/okta/v1/okta_service.pb.go b/api/gen/proto/go/teleport/okta/v1/okta_service.pb.go index 5852f14df4109..11c65fb4b70e3 100644 --- a/api/gen/proto/go/teleport/okta/v1/okta_service.pb.go +++ b/api/gen/proto/go/teleport/okta/v1/okta_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/okta/v1/okta_service.proto @@ -1001,7 +1001,7 @@ func file_teleport_okta_v1_okta_service_proto_rawDescGZIP() []byte { } var file_teleport_okta_v1_okta_service_proto_msgTypes = make([]protoimpl.MessageInfo, 15) -var file_teleport_okta_v1_okta_service_proto_goTypes = []interface{}{ +var file_teleport_okta_v1_okta_service_proto_goTypes = []any{ (*ListOktaImportRulesRequest)(nil), // 0: teleport.okta.v1.ListOktaImportRulesRequest (*ListOktaImportRulesResponse)(nil), // 1: teleport.okta.v1.ListOktaImportRulesResponse (*GetOktaImportRuleRequest)(nil), // 2: teleport.okta.v1.GetOktaImportRuleRequest @@ -1071,7 +1071,7 @@ func file_teleport_okta_v1_okta_service_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_okta_v1_okta_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_okta_v1_okta_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*ListOktaImportRulesRequest); i { case 0: return &v.state @@ -1083,7 +1083,7 @@ func file_teleport_okta_v1_okta_service_proto_init() { return nil } } - file_teleport_okta_v1_okta_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_okta_v1_okta_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*ListOktaImportRulesResponse); i { case 0: return &v.state @@ -1095,7 +1095,7 @@ func file_teleport_okta_v1_okta_service_proto_init() { return nil } } - file_teleport_okta_v1_okta_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_okta_v1_okta_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*GetOktaImportRuleRequest); i { case 0: return &v.state @@ -1107,7 +1107,7 @@ func file_teleport_okta_v1_okta_service_proto_init() { return nil } } - file_teleport_okta_v1_okta_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_okta_v1_okta_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*CreateOktaImportRuleRequest); i { case 0: return &v.state @@ -1119,7 +1119,7 @@ func file_teleport_okta_v1_okta_service_proto_init() { return nil } } - file_teleport_okta_v1_okta_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_okta_v1_okta_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*UpdateOktaImportRuleRequest); i { case 0: return &v.state @@ -1131,7 +1131,7 @@ func file_teleport_okta_v1_okta_service_proto_init() { return nil } } - file_teleport_okta_v1_okta_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_okta_v1_okta_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*DeleteOktaImportRuleRequest); i { case 0: return &v.state @@ -1143,7 +1143,7 @@ func file_teleport_okta_v1_okta_service_proto_init() { return nil } } - file_teleport_okta_v1_okta_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_okta_v1_okta_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*DeleteAllOktaImportRulesRequest); i { case 0: return &v.state @@ -1155,7 +1155,7 @@ func file_teleport_okta_v1_okta_service_proto_init() { return nil } } - file_teleport_okta_v1_okta_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_okta_v1_okta_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*ListOktaAssignmentsRequest); i { case 0: return &v.state @@ -1167,7 +1167,7 @@ func file_teleport_okta_v1_okta_service_proto_init() { return nil } } - file_teleport_okta_v1_okta_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_okta_v1_okta_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*ListOktaAssignmentsResponse); i { case 0: return &v.state @@ -1179,7 +1179,7 @@ func file_teleport_okta_v1_okta_service_proto_init() { return nil } } - file_teleport_okta_v1_okta_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_okta_v1_okta_service_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*GetOktaAssignmentRequest); i { case 0: return &v.state @@ -1191,7 +1191,7 @@ func file_teleport_okta_v1_okta_service_proto_init() { return nil } } - file_teleport_okta_v1_okta_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_teleport_okta_v1_okta_service_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*CreateOktaAssignmentRequest); i { case 0: return &v.state @@ -1203,7 +1203,7 @@ func file_teleport_okta_v1_okta_service_proto_init() { return nil } } - file_teleport_okta_v1_okta_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_teleport_okta_v1_okta_service_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*UpdateOktaAssignmentRequest); i { case 0: return &v.state @@ -1215,7 +1215,7 @@ func file_teleport_okta_v1_okta_service_proto_init() { return nil } } - file_teleport_okta_v1_okta_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_teleport_okta_v1_okta_service_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*UpdateOktaAssignmentStatusRequest); i { case 0: return &v.state @@ -1227,7 +1227,7 @@ func file_teleport_okta_v1_okta_service_proto_init() { return nil } } - file_teleport_okta_v1_okta_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_teleport_okta_v1_okta_service_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*DeleteOktaAssignmentRequest); i { case 0: return &v.state @@ -1239,7 +1239,7 @@ func file_teleport_okta_v1_okta_service_proto_init() { return nil } } - file_teleport_okta_v1_okta_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_teleport_okta_v1_okta_service_proto_msgTypes[14].Exporter = func(v any, i int) any { switch v := v.(*DeleteAllOktaAssignmentsRequest); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/plugins/v1/plugin_service.pb.go b/api/gen/proto/go/teleport/plugins/v1/plugin_service.pb.go index 67ef9f2405652..58a5792872d8b 100644 --- a/api/gen/proto/go/teleport/plugins/v1/plugin_service.pb.go +++ b/api/gen/proto/go/teleport/plugins/v1/plugin_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/plugins/v1/plugin_service.proto @@ -1171,7 +1171,7 @@ func file_teleport_plugins_v1_plugin_service_proto_rawDescGZIP() []byte { } var file_teleport_plugins_v1_plugin_service_proto_msgTypes = make([]protoimpl.MessageInfo, 18) -var file_teleport_plugins_v1_plugin_service_proto_goTypes = []interface{}{ +var file_teleport_plugins_v1_plugin_service_proto_goTypes = []any{ (*PluginType)(nil), // 0: teleport.plugins.v1.PluginType (*CreatePluginRequest)(nil), // 1: teleport.plugins.v1.CreatePluginRequest (*GetPluginRequest)(nil), // 2: teleport.plugins.v1.GetPluginRequest @@ -1247,7 +1247,7 @@ func file_teleport_plugins_v1_plugin_service_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_plugins_v1_plugin_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_plugins_v1_plugin_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*PluginType); i { case 0: return &v.state @@ -1259,7 +1259,7 @@ func file_teleport_plugins_v1_plugin_service_proto_init() { return nil } } - file_teleport_plugins_v1_plugin_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_plugins_v1_plugin_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*CreatePluginRequest); i { case 0: return &v.state @@ -1271,7 +1271,7 @@ func file_teleport_plugins_v1_plugin_service_proto_init() { return nil } } - file_teleport_plugins_v1_plugin_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_plugins_v1_plugin_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*GetPluginRequest); i { case 0: return &v.state @@ -1283,7 +1283,7 @@ func file_teleport_plugins_v1_plugin_service_proto_init() { return nil } } - file_teleport_plugins_v1_plugin_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_plugins_v1_plugin_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*UpdatePluginRequest); i { case 0: return &v.state @@ -1295,7 +1295,7 @@ func file_teleport_plugins_v1_plugin_service_proto_init() { return nil } } - file_teleport_plugins_v1_plugin_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_plugins_v1_plugin_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*ListPluginsRequest); i { case 0: return &v.state @@ -1307,7 +1307,7 @@ func file_teleport_plugins_v1_plugin_service_proto_init() { return nil } } - file_teleport_plugins_v1_plugin_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_plugins_v1_plugin_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*ListPluginsResponse); i { case 0: return &v.state @@ -1319,7 +1319,7 @@ func file_teleport_plugins_v1_plugin_service_proto_init() { return nil } } - file_teleport_plugins_v1_plugin_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_plugins_v1_plugin_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*DeletePluginRequest); i { case 0: return &v.state @@ -1331,7 +1331,7 @@ func file_teleport_plugins_v1_plugin_service_proto_init() { return nil } } - file_teleport_plugins_v1_plugin_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_plugins_v1_plugin_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*SetPluginCredentialsRequest); i { case 0: return &v.state @@ -1343,7 +1343,7 @@ func file_teleport_plugins_v1_plugin_service_proto_init() { return nil } } - file_teleport_plugins_v1_plugin_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_plugins_v1_plugin_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*SetPluginStatusRequest); i { case 0: return &v.state @@ -1355,7 +1355,7 @@ func file_teleport_plugins_v1_plugin_service_proto_init() { return nil } } - file_teleport_plugins_v1_plugin_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_plugins_v1_plugin_service_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*GetAvailablePluginTypesRequest); i { case 0: return &v.state @@ -1367,7 +1367,7 @@ func file_teleport_plugins_v1_plugin_service_proto_init() { return nil } } - file_teleport_plugins_v1_plugin_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_teleport_plugins_v1_plugin_service_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*GetAvailablePluginTypesResponse); i { case 0: return &v.state @@ -1379,7 +1379,7 @@ func file_teleport_plugins_v1_plugin_service_proto_init() { return nil } } - file_teleport_plugins_v1_plugin_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_teleport_plugins_v1_plugin_service_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*SearchPluginStaticCredentialsRequest); i { case 0: return &v.state @@ -1391,7 +1391,7 @@ func file_teleport_plugins_v1_plugin_service_proto_init() { return nil } } - file_teleport_plugins_v1_plugin_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_teleport_plugins_v1_plugin_service_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*SearchPluginStaticCredentialsResponse); i { case 0: return &v.state @@ -1403,7 +1403,7 @@ func file_teleport_plugins_v1_plugin_service_proto_init() { return nil } } - file_teleport_plugins_v1_plugin_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_teleport_plugins_v1_plugin_service_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*NeedsCleanupRequest); i { case 0: return &v.state @@ -1415,7 +1415,7 @@ func file_teleport_plugins_v1_plugin_service_proto_init() { return nil } } - file_teleport_plugins_v1_plugin_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_teleport_plugins_v1_plugin_service_proto_msgTypes[14].Exporter = func(v any, i int) any { switch v := v.(*NeedsCleanupResponse); i { case 0: return &v.state @@ -1427,7 +1427,7 @@ func file_teleport_plugins_v1_plugin_service_proto_init() { return nil } } - file_teleport_plugins_v1_plugin_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_teleport_plugins_v1_plugin_service_proto_msgTypes[15].Exporter = func(v any, i int) any { switch v := v.(*CleanupRequest); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/resourceusage/v1/access_requests.pb.go b/api/gen/proto/go/teleport/resourceusage/v1/access_requests.pb.go index b6d65fe58cd45..d91d1bf3a0109 100644 --- a/api/gen/proto/go/teleport/resourceusage/v1/access_requests.pb.go +++ b/api/gen/proto/go/teleport/resourceusage/v1/access_requests.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/resourceusage/v1/access_requests.proto @@ -129,7 +129,7 @@ func file_teleport_resourceusage_v1_access_requests_proto_rawDescGZIP() []byte { } var file_teleport_resourceusage_v1_access_requests_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_resourceusage_v1_access_requests_proto_goTypes = []interface{}{ +var file_teleport_resourceusage_v1_access_requests_proto_goTypes = []any{ (*AccessRequestsUsage)(nil), // 0: teleport.resourceusage.v1.AccessRequestsUsage } var file_teleport_resourceusage_v1_access_requests_proto_depIdxs = []int32{ @@ -146,7 +146,7 @@ func file_teleport_resourceusage_v1_access_requests_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_resourceusage_v1_access_requests_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_resourceusage_v1_access_requests_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*AccessRequestsUsage); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/resourceusage/v1/account_usage_type.pb.go b/api/gen/proto/go/teleport/resourceusage/v1/account_usage_type.pb.go index 98b0aa4d30022..dcf407b390988 100644 --- a/api/gen/proto/go/teleport/resourceusage/v1/account_usage_type.pb.go +++ b/api/gen/proto/go/teleport/resourceusage/v1/account_usage_type.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/resourceusage/v1/account_usage_type.proto @@ -123,7 +123,7 @@ func file_teleport_resourceusage_v1_account_usage_type_proto_rawDescGZIP() []byt } var file_teleport_resourceusage_v1_account_usage_type_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_teleport_resourceusage_v1_account_usage_type_proto_goTypes = []interface{}{ +var file_teleport_resourceusage_v1_account_usage_type_proto_goTypes = []any{ (AccountUsageType)(0), // 0: teleport.resourceusage.v1.AccountUsageType } var file_teleport_resourceusage_v1_account_usage_type_proto_depIdxs = []int32{ diff --git a/api/gen/proto/go/teleport/resourceusage/v1/device_trust.pb.go b/api/gen/proto/go/teleport/resourceusage/v1/device_trust.pb.go index 95e1da7d4e894..2bb3342b78821 100644 --- a/api/gen/proto/go/teleport/resourceusage/v1/device_trust.pb.go +++ b/api/gen/proto/go/teleport/resourceusage/v1/device_trust.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/resourceusage/v1/device_trust.proto @@ -131,7 +131,7 @@ func file_teleport_resourceusage_v1_device_trust_proto_rawDescGZIP() []byte { } var file_teleport_resourceusage_v1_device_trust_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_resourceusage_v1_device_trust_proto_goTypes = []interface{}{ +var file_teleport_resourceusage_v1_device_trust_proto_goTypes = []any{ (*DevicesUsage)(nil), // 0: teleport.resourceusage.v1.DevicesUsage } var file_teleport_resourceusage_v1_device_trust_proto_depIdxs = []int32{ @@ -148,7 +148,7 @@ func file_teleport_resourceusage_v1_device_trust_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_resourceusage_v1_device_trust_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_resourceusage_v1_device_trust_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*DevicesUsage); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/resourceusage/v1/resourceusage_service.pb.go b/api/gen/proto/go/teleport/resourceusage/v1/resourceusage_service.pb.go index 58bcd4be17087..37b5170b018a1 100644 --- a/api/gen/proto/go/teleport/resourceusage/v1/resourceusage_service.pb.go +++ b/api/gen/proto/go/teleport/resourceusage/v1/resourceusage_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/resourceusage/v1/resourceusage_service.proto @@ -207,7 +207,7 @@ func file_teleport_resourceusage_v1_resourceusage_service_proto_rawDescGZIP() [] } var file_teleport_resourceusage_v1_resourceusage_service_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_teleport_resourceusage_v1_resourceusage_service_proto_goTypes = []interface{}{ +var file_teleport_resourceusage_v1_resourceusage_service_proto_goTypes = []any{ (*GetUsageRequest)(nil), // 0: teleport.resourceusage.v1.GetUsageRequest (*GetUsageResponse)(nil), // 1: teleport.resourceusage.v1.GetUsageResponse (*AccessRequestsUsage)(nil), // 2: teleport.resourceusage.v1.AccessRequestsUsage @@ -236,7 +236,7 @@ func file_teleport_resourceusage_v1_resourceusage_service_proto_init() { file_teleport_resourceusage_v1_account_usage_type_proto_init() file_teleport_resourceusage_v1_device_trust_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_resourceusage_v1_resourceusage_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_resourceusage_v1_resourceusage_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*GetUsageRequest); i { case 0: return &v.state @@ -248,7 +248,7 @@ func file_teleport_resourceusage_v1_resourceusage_service_proto_init() { return nil } } - file_teleport_resourceusage_v1_resourceusage_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_resourceusage_v1_resourceusage_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*GetUsageResponse); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/samlidp/v1/samlidp.pb.go b/api/gen/proto/go/teleport/samlidp/v1/samlidp.pb.go index aa8f113513dfd..adbe2e7bbbfae 100644 --- a/api/gen/proto/go/teleport/samlidp/v1/samlidp.pb.go +++ b/api/gen/proto/go/teleport/samlidp/v1/samlidp.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/samlidp/v1/samlidp.proto @@ -468,7 +468,7 @@ func file_teleport_samlidp_v1_samlidp_proto_rawDescGZIP() []byte { } var file_teleport_samlidp_v1_samlidp_proto_msgTypes = make([]protoimpl.MessageInfo, 6) -var file_teleport_samlidp_v1_samlidp_proto_goTypes = []interface{}{ +var file_teleport_samlidp_v1_samlidp_proto_goTypes = []any{ (*ProcessSAMLIdPRequestRequest)(nil), // 0: teleport.samlidp.v1.ProcessSAMLIdPRequestRequest (*ProcessSAMLIdPRequestResponse)(nil), // 1: teleport.samlidp.v1.ProcessSAMLIdPRequestResponse (*TestSAMLIdPAttributeMappingRequest)(nil), // 2: teleport.samlidp.v1.TestSAMLIdPAttributeMappingRequest @@ -504,7 +504,7 @@ func file_teleport_samlidp_v1_samlidp_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_samlidp_v1_samlidp_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_samlidp_v1_samlidp_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*ProcessSAMLIdPRequestRequest); i { case 0: return &v.state @@ -516,7 +516,7 @@ func file_teleport_samlidp_v1_samlidp_proto_init() { return nil } } - file_teleport_samlidp_v1_samlidp_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_samlidp_v1_samlidp_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*ProcessSAMLIdPRequestResponse); i { case 0: return &v.state @@ -528,7 +528,7 @@ func file_teleport_samlidp_v1_samlidp_proto_init() { return nil } } - file_teleport_samlidp_v1_samlidp_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_samlidp_v1_samlidp_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*TestSAMLIdPAttributeMappingRequest); i { case 0: return &v.state @@ -540,7 +540,7 @@ func file_teleport_samlidp_v1_samlidp_proto_init() { return nil } } - file_teleport_samlidp_v1_samlidp_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_samlidp_v1_samlidp_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*TestSAMLIdPAttributeMappingResponse); i { case 0: return &v.state @@ -552,7 +552,7 @@ func file_teleport_samlidp_v1_samlidp_proto_init() { return nil } } - file_teleport_samlidp_v1_samlidp_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_samlidp_v1_samlidp_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*MappedAttribute); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/scim/v1/scim_service.pb.go b/api/gen/proto/go/teleport/scim/v1/scim_service.pb.go index 6a1d6d6324500..5bf9c2e0d41ce 100644 --- a/api/gen/proto/go/teleport/scim/v1/scim_service.pb.go +++ b/api/gen/proto/go/teleport/scim/v1/scim_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/scim/v1/scim_service.proto @@ -851,7 +851,7 @@ func file_teleport_scim_v1_scim_service_proto_rawDescGZIP() []byte { } var file_teleport_scim_v1_scim_service_proto_msgTypes = make([]protoimpl.MessageInfo, 10) -var file_teleport_scim_v1_scim_service_proto_goTypes = []interface{}{ +var file_teleport_scim_v1_scim_service_proto_goTypes = []any{ (*ListSCIMResourcesRequest)(nil), // 0: teleport.scim.v1.ListSCIMResourcesRequest (*GetSCIMResourceRequest)(nil), // 1: teleport.scim.v1.GetSCIMResourceRequest (*CreateSCIMResourceRequest)(nil), // 2: teleport.scim.v1.CreateSCIMResourceRequest @@ -903,7 +903,7 @@ func file_teleport_scim_v1_scim_service_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_scim_v1_scim_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_scim_v1_scim_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*ListSCIMResourcesRequest); i { case 0: return &v.state @@ -915,7 +915,7 @@ func file_teleport_scim_v1_scim_service_proto_init() { return nil } } - file_teleport_scim_v1_scim_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_scim_v1_scim_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*GetSCIMResourceRequest); i { case 0: return &v.state @@ -927,7 +927,7 @@ func file_teleport_scim_v1_scim_service_proto_init() { return nil } } - file_teleport_scim_v1_scim_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_scim_v1_scim_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*CreateSCIMResourceRequest); i { case 0: return &v.state @@ -939,7 +939,7 @@ func file_teleport_scim_v1_scim_service_proto_init() { return nil } } - file_teleport_scim_v1_scim_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_scim_v1_scim_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*UpdateSCIMResourceRequest); i { case 0: return &v.state @@ -951,7 +951,7 @@ func file_teleport_scim_v1_scim_service_proto_init() { return nil } } - file_teleport_scim_v1_scim_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_scim_v1_scim_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*DeleteSCIMResourceRequest); i { case 0: return &v.state @@ -963,7 +963,7 @@ func file_teleport_scim_v1_scim_service_proto_init() { return nil } } - file_teleport_scim_v1_scim_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_scim_v1_scim_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*Resource); i { case 0: return &v.state @@ -975,7 +975,7 @@ func file_teleport_scim_v1_scim_service_proto_init() { return nil } } - file_teleport_scim_v1_scim_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_scim_v1_scim_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*Meta); i { case 0: return &v.state @@ -987,7 +987,7 @@ func file_teleport_scim_v1_scim_service_proto_init() { return nil } } - file_teleport_scim_v1_scim_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_scim_v1_scim_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*ResourceList); i { case 0: return &v.state @@ -999,7 +999,7 @@ func file_teleport_scim_v1_scim_service_proto_init() { return nil } } - file_teleport_scim_v1_scim_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_scim_v1_scim_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*RequestTarget); i { case 0: return &v.state @@ -1011,7 +1011,7 @@ func file_teleport_scim_v1_scim_service_proto_init() { return nil } } - file_teleport_scim_v1_scim_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_scim_v1_scim_service_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*Page); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/secreports/v1/secreports.pb.go b/api/gen/proto/go/teleport/secreports/v1/secreports.pb.go index cc7e5d3939042..0c5f317a4a657 100644 --- a/api/gen/proto/go/teleport/secreports/v1/secreports.pb.go +++ b/api/gen/proto/go/teleport/secreports/v1/secreports.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/secreports/v1/secreports.proto @@ -508,7 +508,7 @@ func file_teleport_secreports_v1_secreports_proto_rawDescGZIP() []byte { } var file_teleport_secreports_v1_secreports_proto_msgTypes = make([]protoimpl.MessageInfo, 6) -var file_teleport_secreports_v1_secreports_proto_goTypes = []interface{}{ +var file_teleport_secreports_v1_secreports_proto_goTypes = []any{ (*AuditQuery)(nil), // 0: teleport.secreports.v1.AuditQuery (*AuditQuerySpec)(nil), // 1: teleport.secreports.v1.AuditQuerySpec (*Report)(nil), // 2: teleport.secreports.v1.Report @@ -538,7 +538,7 @@ func file_teleport_secreports_v1_secreports_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_secreports_v1_secreports_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*AuditQuery); i { case 0: return &v.state @@ -550,7 +550,7 @@ func file_teleport_secreports_v1_secreports_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*AuditQuerySpec); i { case 0: return &v.state @@ -562,7 +562,7 @@ func file_teleport_secreports_v1_secreports_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*Report); i { case 0: return &v.state @@ -574,7 +574,7 @@ func file_teleport_secreports_v1_secreports_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ReportSpec); i { case 0: return &v.state @@ -586,7 +586,7 @@ func file_teleport_secreports_v1_secreports_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*ReportState); i { case 0: return &v.state @@ -598,7 +598,7 @@ func file_teleport_secreports_v1_secreports_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*ReportStateSpec); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/secreports/v1/secreports_service.pb.go b/api/gen/proto/go/teleport/secreports/v1/secreports_service.pb.go index bf650f54a61b6..f46e772a3a2ea 100644 --- a/api/gen/proto/go/teleport/secreports/v1/secreports_service.pb.go +++ b/api/gen/proto/go/teleport/secreports/v1/secreports_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/secreports/v1/secreports_service.proto @@ -2036,7 +2036,7 @@ func file_teleport_secreports_v1_secreports_service_proto_rawDescGZIP() []byte { var file_teleport_secreports_v1_secreports_service_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_teleport_secreports_v1_secreports_service_proto_msgTypes = make([]protoimpl.MessageInfo, 28) -var file_teleport_secreports_v1_secreports_service_proto_goTypes = []interface{}{ +var file_teleport_secreports_v1_secreports_service_proto_goTypes = []any{ (ReportSate_State)(0), // 0: teleport.secreports.v1.ReportSate.State (*GetAuditQueryResultRequest)(nil), // 1: teleport.secreports.v1.GetAuditQueryResultRequest (*QueryResultColumnInfo)(nil), // 2: teleport.secreports.v1.QueryResultColumnInfo @@ -2131,7 +2131,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { } file_teleport_secreports_v1_secreports_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_secreports_v1_secreports_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*GetAuditQueryResultRequest); i { case 0: return &v.state @@ -2143,7 +2143,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*QueryResultColumnInfo); i { case 0: return &v.state @@ -2155,7 +2155,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*QueryRowResult); i { case 0: return &v.state @@ -2167,7 +2167,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*QueryResultSet); i { case 0: return &v.state @@ -2179,7 +2179,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*GetAuditQueryResultResponse); i { case 0: return &v.state @@ -2191,7 +2191,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*RunReportRequest); i { case 0: return &v.state @@ -2203,7 +2203,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*GetReportStateRequest); i { case 0: return &v.state @@ -2215,7 +2215,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*DeleteAuditQueryRequest); i { case 0: return &v.state @@ -2227,7 +2227,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*DeleteReportRequest); i { case 0: return &v.state @@ -2239,7 +2239,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*RunAuditQueryRequest); i { case 0: return &v.state @@ -2251,7 +2251,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*UpsertAuditQueryRequest); i { case 0: return &v.state @@ -2263,7 +2263,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*UpsertReportRequest); i { case 0: return &v.state @@ -2275,7 +2275,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*GetAuditQueryRequest); i { case 0: return &v.state @@ -2287,7 +2287,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*GetReportRequest); i { case 0: return &v.state @@ -2299,7 +2299,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[14].Exporter = func(v any, i int) any { switch v := v.(*GetReportResultRequest); i { case 0: return &v.state @@ -2311,7 +2311,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[15].Exporter = func(v any, i int) any { switch v := v.(*ListAuditQueriesRequest); i { case 0: return &v.state @@ -2323,7 +2323,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[16].Exporter = func(v any, i int) any { switch v := v.(*ListReportsRequest); i { case 0: return &v.state @@ -2335,7 +2335,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[17].Exporter = func(v any, i int) any { switch v := v.(*ListAuditQueriesResponse); i { case 0: return &v.state @@ -2347,7 +2347,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[18].Exporter = func(v any, i int) any { switch v := v.(*GetSchemaRequest); i { case 0: return &v.state @@ -2359,7 +2359,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[19].Exporter = func(v any, i int) any { switch v := v.(*GetSchemaResponse); i { case 0: return &v.state @@ -2371,7 +2371,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[20].Exporter = func(v any, i int) any { switch v := v.(*RunAuditQueryResponse); i { case 0: return &v.state @@ -2383,7 +2383,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[21].Exporter = func(v any, i int) any { switch v := v.(*ListReportsResponse); i { case 0: return &v.state @@ -2395,7 +2395,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[22].Exporter = func(v any, i int) any { switch v := v.(*GetReportResultResponse); i { case 0: return &v.state @@ -2407,7 +2407,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[23].Exporter = func(v any, i int) any { switch v := v.(*ReportResult); i { case 0: return &v.state @@ -2419,7 +2419,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[24].Exporter = func(v any, i int) any { switch v := v.(*ReportSate); i { case 0: return &v.state @@ -2431,7 +2431,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[25].Exporter = func(v any, i int) any { switch v := v.(*GetSchemaResponse_ViewDesc); i { case 0: return &v.state @@ -2443,7 +2443,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[26].Exporter = func(v any, i int) any { switch v := v.(*GetSchemaResponse_ViewDesc_ColumnDesc); i { case 0: return &v.state @@ -2455,7 +2455,7 @@ func file_teleport_secreports_v1_secreports_service_proto_init() { return nil } } - file_teleport_secreports_v1_secreports_service_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + file_teleport_secreports_v1_secreports_service_proto_msgTypes[27].Exporter = func(v any, i int) any { switch v := v.(*ReportResult_AuditQueryResult); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/trait/v1/trait.pb.go b/api/gen/proto/go/teleport/trait/v1/trait.pb.go index 84ee9e67a479f..4e597f85cfc33 100644 --- a/api/gen/proto/go/teleport/trait/v1/trait.pb.go +++ b/api/gen/proto/go/teleport/trait/v1/trait.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/trait/v1/trait.proto @@ -122,7 +122,7 @@ func file_teleport_trait_v1_trait_proto_rawDescGZIP() []byte { } var file_teleport_trait_v1_trait_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_trait_v1_trait_proto_goTypes = []interface{}{ +var file_teleport_trait_v1_trait_proto_goTypes = []any{ (*Trait)(nil), // 0: teleport.trait.v1.Trait } var file_teleport_trait_v1_trait_proto_depIdxs = []int32{ @@ -139,7 +139,7 @@ func file_teleport_trait_v1_trait_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_trait_v1_trait_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_trait_v1_trait_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Trait); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/transport/v1/transport_service.pb.go b/api/gen/proto/go/teleport/transport/v1/transport_service.pb.go index fd88978c99184..c94482277128b 100644 --- a/api/gen/proto/go/teleport/transport/v1/transport_service.pb.go +++ b/api/gen/proto/go/teleport/transport/v1/transport_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/transport/v1/transport_service.proto @@ -697,7 +697,7 @@ func file_teleport_transport_v1_transport_service_proto_rawDescGZIP() []byte { } var file_teleport_transport_v1_transport_service_proto_msgTypes = make([]protoimpl.MessageInfo, 9) -var file_teleport_transport_v1_transport_service_proto_goTypes = []interface{}{ +var file_teleport_transport_v1_transport_service_proto_goTypes = []any{ (*ProxySSHRequest)(nil), // 0: teleport.transport.v1.ProxySSHRequest (*ProxySSHResponse)(nil), // 1: teleport.transport.v1.ProxySSHResponse (*ProxyClusterRequest)(nil), // 2: teleport.transport.v1.ProxyClusterRequest @@ -737,7 +737,7 @@ func file_teleport_transport_v1_transport_service_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_transport_v1_transport_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_transport_v1_transport_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*ProxySSHRequest); i { case 0: return &v.state @@ -749,7 +749,7 @@ func file_teleport_transport_v1_transport_service_proto_init() { return nil } } - file_teleport_transport_v1_transport_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_transport_v1_transport_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*ProxySSHResponse); i { case 0: return &v.state @@ -761,7 +761,7 @@ func file_teleport_transport_v1_transport_service_proto_init() { return nil } } - file_teleport_transport_v1_transport_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_transport_v1_transport_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ProxyClusterRequest); i { case 0: return &v.state @@ -773,7 +773,7 @@ func file_teleport_transport_v1_transport_service_proto_init() { return nil } } - file_teleport_transport_v1_transport_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_transport_v1_transport_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ProxyClusterResponse); i { case 0: return &v.state @@ -785,7 +785,7 @@ func file_teleport_transport_v1_transport_service_proto_init() { return nil } } - file_teleport_transport_v1_transport_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_transport_v1_transport_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*Frame); i { case 0: return &v.state @@ -797,7 +797,7 @@ func file_teleport_transport_v1_transport_service_proto_init() { return nil } } - file_teleport_transport_v1_transport_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_transport_v1_transport_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*TargetHost); i { case 0: return &v.state @@ -809,7 +809,7 @@ func file_teleport_transport_v1_transport_service_proto_init() { return nil } } - file_teleport_transport_v1_transport_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_transport_v1_transport_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*GetClusterDetailsRequest); i { case 0: return &v.state @@ -821,7 +821,7 @@ func file_teleport_transport_v1_transport_service_proto_init() { return nil } } - file_teleport_transport_v1_transport_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_transport_v1_transport_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*GetClusterDetailsResponse); i { case 0: return &v.state @@ -833,7 +833,7 @@ func file_teleport_transport_v1_transport_service_proto_init() { return nil } } - file_teleport_transport_v1_transport_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_transport_v1_transport_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*ClusterDetails); i { case 0: return &v.state @@ -846,11 +846,11 @@ func file_teleport_transport_v1_transport_service_proto_init() { } } } - file_teleport_transport_v1_transport_service_proto_msgTypes[0].OneofWrappers = []interface{}{ + file_teleport_transport_v1_transport_service_proto_msgTypes[0].OneofWrappers = []any{ (*ProxySSHRequest_Ssh)(nil), (*ProxySSHRequest_Agent)(nil), } - file_teleport_transport_v1_transport_service_proto_msgTypes[1].OneofWrappers = []interface{}{ + file_teleport_transport_v1_transport_service_proto_msgTypes[1].OneofWrappers = []any{ (*ProxySSHResponse_Ssh)(nil), (*ProxySSHResponse_Agent)(nil), } diff --git a/api/gen/proto/go/teleport/trust/v1/trust_service.pb.go b/api/gen/proto/go/teleport/trust/v1/trust_service.pb.go index 3b2911cbc3806..1a7513f3b1d22 100644 --- a/api/gen/proto/go/teleport/trust/v1/trust_service.pb.go +++ b/api/gen/proto/go/teleport/trust/v1/trust_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/trust/v1/trust_service.proto @@ -930,7 +930,7 @@ func file_teleport_trust_v1_trust_service_proto_rawDescGZIP() []byte { } var file_teleport_trust_v1_trust_service_proto_msgTypes = make([]protoimpl.MessageInfo, 12) -var file_teleport_trust_v1_trust_service_proto_goTypes = []interface{}{ +var file_teleport_trust_v1_trust_service_proto_goTypes = []any{ (*GetCertAuthorityRequest)(nil), // 0: teleport.trust.v1.GetCertAuthorityRequest (*GetCertAuthoritiesRequest)(nil), // 1: teleport.trust.v1.GetCertAuthoritiesRequest (*GetCertAuthoritiesResponse)(nil), // 2: teleport.trust.v1.GetCertAuthoritiesResponse @@ -985,7 +985,7 @@ func file_teleport_trust_v1_trust_service_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_trust_v1_trust_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_trust_v1_trust_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*GetCertAuthorityRequest); i { case 0: return &v.state @@ -997,7 +997,7 @@ func file_teleport_trust_v1_trust_service_proto_init() { return nil } } - file_teleport_trust_v1_trust_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_trust_v1_trust_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*GetCertAuthoritiesRequest); i { case 0: return &v.state @@ -1009,7 +1009,7 @@ func file_teleport_trust_v1_trust_service_proto_init() { return nil } } - file_teleport_trust_v1_trust_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_trust_v1_trust_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*GetCertAuthoritiesResponse); i { case 0: return &v.state @@ -1021,7 +1021,7 @@ func file_teleport_trust_v1_trust_service_proto_init() { return nil } } - file_teleport_trust_v1_trust_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_trust_v1_trust_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*DeleteCertAuthorityRequest); i { case 0: return &v.state @@ -1033,7 +1033,7 @@ func file_teleport_trust_v1_trust_service_proto_init() { return nil } } - file_teleport_trust_v1_trust_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_trust_v1_trust_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*UpsertCertAuthorityRequest); i { case 0: return &v.state @@ -1045,7 +1045,7 @@ func file_teleport_trust_v1_trust_service_proto_init() { return nil } } - file_teleport_trust_v1_trust_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_trust_v1_trust_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*RotateCertAuthorityRequest); i { case 0: return &v.state @@ -1057,7 +1057,7 @@ func file_teleport_trust_v1_trust_service_proto_init() { return nil } } - file_teleport_trust_v1_trust_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_trust_v1_trust_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*RotationSchedule); i { case 0: return &v.state @@ -1069,7 +1069,7 @@ func file_teleport_trust_v1_trust_service_proto_init() { return nil } } - file_teleport_trust_v1_trust_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_trust_v1_trust_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*RotateCertAuthorityResponse); i { case 0: return &v.state @@ -1081,7 +1081,7 @@ func file_teleport_trust_v1_trust_service_proto_init() { return nil } } - file_teleport_trust_v1_trust_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_trust_v1_trust_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*RotateExternalCertAuthorityRequest); i { case 0: return &v.state @@ -1093,7 +1093,7 @@ func file_teleport_trust_v1_trust_service_proto_init() { return nil } } - file_teleport_trust_v1_trust_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_trust_v1_trust_service_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*RotateExternalCertAuthorityResponse); i { case 0: return &v.state @@ -1105,7 +1105,7 @@ func file_teleport_trust_v1_trust_service_proto_init() { return nil } } - file_teleport_trust_v1_trust_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_teleport_trust_v1_trust_service_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*GenerateHostCertRequest); i { case 0: return &v.state @@ -1117,7 +1117,7 @@ func file_teleport_trust_v1_trust_service_proto_init() { return nil } } - file_teleport_trust_v1_trust_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_teleport_trust_v1_trust_service_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*GenerateHostCertResponse); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/userloginstate/v1/userloginstate.pb.go b/api/gen/proto/go/teleport/userloginstate/v1/userloginstate.pb.go index 92e238ec591c3..6179327c8865c 100644 --- a/api/gen/proto/go/teleport/userloginstate/v1/userloginstate.pb.go +++ b/api/gen/proto/go/teleport/userloginstate/v1/userloginstate.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/userloginstate/v1/userloginstate.proto @@ -237,7 +237,7 @@ func file_teleport_userloginstate_v1_userloginstate_proto_rawDescGZIP() []byte { } var file_teleport_userloginstate_v1_userloginstate_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_teleport_userloginstate_v1_userloginstate_proto_goTypes = []interface{}{ +var file_teleport_userloginstate_v1_userloginstate_proto_goTypes = []any{ (*UserLoginState)(nil), // 0: teleport.userloginstate.v1.UserLoginState (*Spec)(nil), // 1: teleport.userloginstate.v1.Spec (*v1.ResourceHeader)(nil), // 2: teleport.header.v1.ResourceHeader @@ -261,7 +261,7 @@ func file_teleport_userloginstate_v1_userloginstate_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_userloginstate_v1_userloginstate_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userloginstate_v1_userloginstate_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*UserLoginState); i { case 0: return &v.state @@ -273,7 +273,7 @@ func file_teleport_userloginstate_v1_userloginstate_proto_init() { return nil } } - file_teleport_userloginstate_v1_userloginstate_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userloginstate_v1_userloginstate_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*Spec); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/userloginstate/v1/userloginstate_service.pb.go b/api/gen/proto/go/teleport/userloginstate/v1/userloginstate_service.pb.go index c76cad3b5b9d1..9aa42a735dd9d 100644 --- a/api/gen/proto/go/teleport/userloginstate/v1/userloginstate_service.pb.go +++ b/api/gen/proto/go/teleport/userloginstate/v1/userloginstate_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/userloginstate/v1/userloginstate_service.proto @@ -408,7 +408,7 @@ func file_teleport_userloginstate_v1_userloginstate_service_proto_rawDescGZIP() } var file_teleport_userloginstate_v1_userloginstate_service_proto_msgTypes = make([]protoimpl.MessageInfo, 6) -var file_teleport_userloginstate_v1_userloginstate_service_proto_goTypes = []interface{}{ +var file_teleport_userloginstate_v1_userloginstate_service_proto_goTypes = []any{ (*GetUserLoginStatesRequest)(nil), // 0: teleport.userloginstate.v1.GetUserLoginStatesRequest (*GetUserLoginStatesResponse)(nil), // 1: teleport.userloginstate.v1.GetUserLoginStatesResponse (*GetUserLoginStateRequest)(nil), // 2: teleport.userloginstate.v1.GetUserLoginStateRequest @@ -445,7 +445,7 @@ func file_teleport_userloginstate_v1_userloginstate_service_proto_init() { } file_teleport_userloginstate_v1_userloginstate_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_userloginstate_v1_userloginstate_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userloginstate_v1_userloginstate_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*GetUserLoginStatesRequest); i { case 0: return &v.state @@ -457,7 +457,7 @@ func file_teleport_userloginstate_v1_userloginstate_service_proto_init() { return nil } } - file_teleport_userloginstate_v1_userloginstate_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userloginstate_v1_userloginstate_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*GetUserLoginStatesResponse); i { case 0: return &v.state @@ -469,7 +469,7 @@ func file_teleport_userloginstate_v1_userloginstate_service_proto_init() { return nil } } - file_teleport_userloginstate_v1_userloginstate_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userloginstate_v1_userloginstate_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*GetUserLoginStateRequest); i { case 0: return &v.state @@ -481,7 +481,7 @@ func file_teleport_userloginstate_v1_userloginstate_service_proto_init() { return nil } } - file_teleport_userloginstate_v1_userloginstate_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userloginstate_v1_userloginstate_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*UpsertUserLoginStateRequest); i { case 0: return &v.state @@ -493,7 +493,7 @@ func file_teleport_userloginstate_v1_userloginstate_service_proto_init() { return nil } } - file_teleport_userloginstate_v1_userloginstate_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userloginstate_v1_userloginstate_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*DeleteUserLoginStateRequest); i { case 0: return &v.state @@ -505,7 +505,7 @@ func file_teleport_userloginstate_v1_userloginstate_service_proto_init() { return nil } } - file_teleport_userloginstate_v1_userloginstate_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userloginstate_v1_userloginstate_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*DeleteAllUserLoginStatesRequest); i { case 0: return &v.state diff --git a/api/gen/proto/go/teleport/users/v1/users_service.pb.go b/api/gen/proto/go/teleport/users/v1/users_service.pb.go index 366bc76a0cb59..2b8a3611b6eaf 100644 --- a/api/gen/proto/go/teleport/users/v1/users_service.pb.go +++ b/api/gen/proto/go/teleport/users/v1/users_service.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/users/v1/users_service.proto @@ -750,7 +750,7 @@ func file_teleport_users_v1_users_service_proto_rawDescGZIP() []byte { } var file_teleport_users_v1_users_service_proto_msgTypes = make([]protoimpl.MessageInfo, 11) -var file_teleport_users_v1_users_service_proto_goTypes = []interface{}{ +var file_teleport_users_v1_users_service_proto_goTypes = []any{ (*GetUserRequest)(nil), // 0: teleport.users.v1.GetUserRequest (*GetUserResponse)(nil), // 1: teleport.users.v1.GetUserResponse (*ListUsersRequest)(nil), // 2: teleport.users.v1.ListUsersRequest @@ -801,7 +801,7 @@ func file_teleport_users_v1_users_service_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_users_v1_users_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_users_v1_users_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*GetUserRequest); i { case 0: return &v.state @@ -813,7 +813,7 @@ func file_teleport_users_v1_users_service_proto_init() { return nil } } - file_teleport_users_v1_users_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_users_v1_users_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*GetUserResponse); i { case 0: return &v.state @@ -825,7 +825,7 @@ func file_teleport_users_v1_users_service_proto_init() { return nil } } - file_teleport_users_v1_users_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_users_v1_users_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ListUsersRequest); i { case 0: return &v.state @@ -837,7 +837,7 @@ func file_teleport_users_v1_users_service_proto_init() { return nil } } - file_teleport_users_v1_users_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_users_v1_users_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ListUsersResponse); i { case 0: return &v.state @@ -849,7 +849,7 @@ func file_teleport_users_v1_users_service_proto_init() { return nil } } - file_teleport_users_v1_users_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_users_v1_users_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*CreateUserRequest); i { case 0: return &v.state @@ -861,7 +861,7 @@ func file_teleport_users_v1_users_service_proto_init() { return nil } } - file_teleport_users_v1_users_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_users_v1_users_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*CreateUserResponse); i { case 0: return &v.state @@ -873,7 +873,7 @@ func file_teleport_users_v1_users_service_proto_init() { return nil } } - file_teleport_users_v1_users_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_users_v1_users_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*UpdateUserRequest); i { case 0: return &v.state @@ -885,7 +885,7 @@ func file_teleport_users_v1_users_service_proto_init() { return nil } } - file_teleport_users_v1_users_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_users_v1_users_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*UpdateUserResponse); i { case 0: return &v.state @@ -897,7 +897,7 @@ func file_teleport_users_v1_users_service_proto_init() { return nil } } - file_teleport_users_v1_users_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_users_v1_users_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*UpsertUserRequest); i { case 0: return &v.state @@ -909,7 +909,7 @@ func file_teleport_users_v1_users_service_proto_init() { return nil } } - file_teleport_users_v1_users_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_users_v1_users_service_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*UpsertUserResponse); i { case 0: return &v.state @@ -921,7 +921,7 @@ func file_teleport_users_v1_users_service_proto_init() { return nil } } - file_teleport_users_v1_users_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_teleport_users_v1_users_service_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*DeleteUserRequest); i { case 0: return &v.state diff --git a/api/gen/proto/go/userpreferences/v1/access_graph.pb.go b/api/gen/proto/go/userpreferences/v1/access_graph.pb.go index a2bea001a0711..9e645fbc1f2d7 100644 --- a/api/gen/proto/go/userpreferences/v1/access_graph.pb.go +++ b/api/gen/proto/go/userpreferences/v1/access_graph.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/userpreferences/v1/access_graph.proto @@ -118,7 +118,7 @@ func file_teleport_userpreferences_v1_access_graph_proto_rawDescGZIP() []byte { } var file_teleport_userpreferences_v1_access_graph_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_userpreferences_v1_access_graph_proto_goTypes = []interface{}{ +var file_teleport_userpreferences_v1_access_graph_proto_goTypes = []any{ (*AccessGraphUserPreferences)(nil), // 0: teleport.userpreferences.v1.AccessGraphUserPreferences } var file_teleport_userpreferences_v1_access_graph_proto_depIdxs = []int32{ @@ -135,7 +135,7 @@ func file_teleport_userpreferences_v1_access_graph_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_userpreferences_v1_access_graph_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userpreferences_v1_access_graph_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*AccessGraphUserPreferences); i { case 0: return &v.state diff --git a/api/gen/proto/go/userpreferences/v1/assist.pb.go b/api/gen/proto/go/userpreferences/v1/assist.pb.go index 5806d8a0ca97d..68cf807582627 100644 --- a/api/gen/proto/go/userpreferences/v1/assist.pb.go +++ b/api/gen/proto/go/userpreferences/v1/assist.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/userpreferences/v1/assist.proto @@ -204,7 +204,7 @@ func file_teleport_userpreferences_v1_assist_proto_rawDescGZIP() []byte { var file_teleport_userpreferences_v1_assist_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_teleport_userpreferences_v1_assist_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_userpreferences_v1_assist_proto_goTypes = []interface{}{ +var file_teleport_userpreferences_v1_assist_proto_goTypes = []any{ (AssistViewMode)(0), // 0: teleport.userpreferences.v1.AssistViewMode (*AssistUserPreferences)(nil), // 1: teleport.userpreferences.v1.AssistUserPreferences } @@ -223,7 +223,7 @@ func file_teleport_userpreferences_v1_assist_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_userpreferences_v1_assist_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userpreferences_v1_assist_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*AssistUserPreferences); i { case 0: return &v.state diff --git a/api/gen/proto/go/userpreferences/v1/cluster_preferences.pb.go b/api/gen/proto/go/userpreferences/v1/cluster_preferences.pb.go index 709ff59099f28..8ab7131faa31e 100644 --- a/api/gen/proto/go/userpreferences/v1/cluster_preferences.pb.go +++ b/api/gen/proto/go/userpreferences/v1/cluster_preferences.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/userpreferences/v1/cluster_preferences.proto @@ -175,7 +175,7 @@ func file_teleport_userpreferences_v1_cluster_preferences_proto_rawDescGZIP() [] } var file_teleport_userpreferences_v1_cluster_preferences_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_teleport_userpreferences_v1_cluster_preferences_proto_goTypes = []interface{}{ +var file_teleport_userpreferences_v1_cluster_preferences_proto_goTypes = []any{ (*PinnedResourcesUserPreferences)(nil), // 0: teleport.userpreferences.v1.PinnedResourcesUserPreferences (*ClusterUserPreferences)(nil), // 1: teleport.userpreferences.v1.ClusterUserPreferences } @@ -194,7 +194,7 @@ func file_teleport_userpreferences_v1_cluster_preferences_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_userpreferences_v1_cluster_preferences_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userpreferences_v1_cluster_preferences_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*PinnedResourcesUserPreferences); i { case 0: return &v.state @@ -206,7 +206,7 @@ func file_teleport_userpreferences_v1_cluster_preferences_proto_init() { return nil } } - file_teleport_userpreferences_v1_cluster_preferences_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userpreferences_v1_cluster_preferences_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*ClusterUserPreferences); i { case 0: return &v.state diff --git a/api/gen/proto/go/userpreferences/v1/onboard.pb.go b/api/gen/proto/go/userpreferences/v1/onboard.pb.go index 39bffb3cce49f..0b1b153c8ef90 100644 --- a/api/gen/proto/go/userpreferences/v1/onboard.pb.go +++ b/api/gen/proto/go/userpreferences/v1/onboard.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/userpreferences/v1/onboard.proto @@ -290,7 +290,7 @@ func file_teleport_userpreferences_v1_onboard_proto_rawDescGZIP() []byte { var file_teleport_userpreferences_v1_onboard_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_teleport_userpreferences_v1_onboard_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_teleport_userpreferences_v1_onboard_proto_goTypes = []interface{}{ +var file_teleport_userpreferences_v1_onboard_proto_goTypes = []any{ (Resource)(0), // 0: teleport.userpreferences.v1.Resource (*MarketingParams)(nil), // 1: teleport.userpreferences.v1.MarketingParams (*OnboardUserPreferences)(nil), // 2: teleport.userpreferences.v1.OnboardUserPreferences @@ -311,7 +311,7 @@ func file_teleport_userpreferences_v1_onboard_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_userpreferences_v1_onboard_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userpreferences_v1_onboard_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*MarketingParams); i { case 0: return &v.state @@ -323,7 +323,7 @@ func file_teleport_userpreferences_v1_onboard_proto_init() { return nil } } - file_teleport_userpreferences_v1_onboard_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userpreferences_v1_onboard_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*OnboardUserPreferences); i { case 0: return &v.state diff --git a/api/gen/proto/go/userpreferences/v1/theme.pb.go b/api/gen/proto/go/userpreferences/v1/theme.pb.go index fa2c0e749c603..a86eeb33a7d74 100644 --- a/api/gen/proto/go/userpreferences/v1/theme.pb.go +++ b/api/gen/proto/go/userpreferences/v1/theme.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/userpreferences/v1/theme.proto @@ -119,7 +119,7 @@ func file_teleport_userpreferences_v1_theme_proto_rawDescGZIP() []byte { } var file_teleport_userpreferences_v1_theme_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_teleport_userpreferences_v1_theme_proto_goTypes = []interface{}{ +var file_teleport_userpreferences_v1_theme_proto_goTypes = []any{ (Theme)(0), // 0: teleport.userpreferences.v1.Theme } var file_teleport_userpreferences_v1_theme_proto_depIdxs = []int32{ diff --git a/api/gen/proto/go/userpreferences/v1/unified_resource_preferences.pb.go b/api/gen/proto/go/userpreferences/v1/unified_resource_preferences.pb.go index c92c53de84d12..a3f82755d3db0 100644 --- a/api/gen/proto/go/userpreferences/v1/unified_resource_preferences.pb.go +++ b/api/gen/proto/go/userpreferences/v1/unified_resource_preferences.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/userpreferences/v1/unified_resource_preferences.proto @@ -322,7 +322,7 @@ func file_teleport_userpreferences_v1_unified_resource_preferences_proto_rawDesc var file_teleport_userpreferences_v1_unified_resource_preferences_proto_enumTypes = make([]protoimpl.EnumInfo, 3) var file_teleport_userpreferences_v1_unified_resource_preferences_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_userpreferences_v1_unified_resource_preferences_proto_goTypes = []interface{}{ +var file_teleport_userpreferences_v1_unified_resource_preferences_proto_goTypes = []any{ (DefaultTab)(0), // 0: teleport.userpreferences.v1.DefaultTab (ViewMode)(0), // 1: teleport.userpreferences.v1.ViewMode (LabelsViewMode)(0), // 2: teleport.userpreferences.v1.LabelsViewMode @@ -345,7 +345,7 @@ func file_teleport_userpreferences_v1_unified_resource_preferences_proto_init() return } if !protoimpl.UnsafeEnabled { - file_teleport_userpreferences_v1_unified_resource_preferences_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userpreferences_v1_unified_resource_preferences_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*UnifiedResourcePreferences); i { case 0: return &v.state diff --git a/api/gen/proto/go/userpreferences/v1/userpreferences.pb.go b/api/gen/proto/go/userpreferences/v1/userpreferences.pb.go index 372d2c74abd91..9360ca65e1ad1 100644 --- a/api/gen/proto/go/userpreferences/v1/userpreferences.pb.go +++ b/api/gen/proto/go/userpreferences/v1/userpreferences.pb.go @@ -14,7 +14,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/userpreferences/v1/userpreferences.proto @@ -385,7 +385,7 @@ func file_teleport_userpreferences_v1_userpreferences_proto_rawDescGZIP() []byte } var file_teleport_userpreferences_v1_userpreferences_proto_msgTypes = make([]protoimpl.MessageInfo, 4) -var file_teleport_userpreferences_v1_userpreferences_proto_goTypes = []interface{}{ +var file_teleport_userpreferences_v1_userpreferences_proto_goTypes = []any{ (*UserPreferences)(nil), // 0: teleport.userpreferences.v1.UserPreferences (*GetUserPreferencesRequest)(nil), // 1: teleport.userpreferences.v1.GetUserPreferencesRequest (*GetUserPreferencesResponse)(nil), // 2: teleport.userpreferences.v1.GetUserPreferencesResponse @@ -430,7 +430,7 @@ func file_teleport_userpreferences_v1_userpreferences_proto_init() { file_teleport_userpreferences_v1_theme_proto_init() file_teleport_userpreferences_v1_unified_resource_preferences_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_userpreferences_v1_userpreferences_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userpreferences_v1_userpreferences_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*UserPreferences); i { case 0: return &v.state @@ -442,7 +442,7 @@ func file_teleport_userpreferences_v1_userpreferences_proto_init() { return nil } } - file_teleport_userpreferences_v1_userpreferences_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userpreferences_v1_userpreferences_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*GetUserPreferencesRequest); i { case 0: return &v.state @@ -454,7 +454,7 @@ func file_teleport_userpreferences_v1_userpreferences_proto_init() { return nil } } - file_teleport_userpreferences_v1_userpreferences_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userpreferences_v1_userpreferences_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*GetUserPreferencesResponse); i { case 0: return &v.state @@ -466,7 +466,7 @@ func file_teleport_userpreferences_v1_userpreferences_proto_init() { return nil } } - file_teleport_userpreferences_v1_userpreferences_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_userpreferences_v1_userpreferences_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*UpsertUserPreferencesRequest); i { case 0: return &v.state diff --git a/api/proto/teleport/integration/v1/awsoidc_service.proto b/api/proto/teleport/integration/v1/awsoidc_service.proto index d4bcb25114531..ca50823c2ad71 100644 --- a/api/proto/teleport/integration/v1/awsoidc_service.proto +++ b/api/proto/teleport/integration/v1/awsoidc_service.proto @@ -418,6 +418,13 @@ message EKSCluster { // Known values are: // CREATING | ACTIVE | DELETING | FAILED | UPDATING | PENDING string status = 6; + // EndpointPublicAccess indicates whether this EKS Cluster is accessible publicly. + // If only private access is available, then the EKS Cluster can't be enrolled from Teleport Cloud. + bool endpoint_public_access = 7; + // AuthenticationMode is the allowed authentication mode for the cluster. + // Known values are: + // API | API_AND_CONFIG_MAP | CONFIG_MAP + string authentication_mode = 8; } // ListEKSClustersResponse contains a page of AWS EKS Clusters. diff --git a/api/proto/teleport/legacy/types/events/events.proto b/api/proto/teleport/legacy/types/events/events.proto index 899d329dd2e6d..4ab0778306e96 100644 --- a/api/proto/teleport/legacy/types/events/events.proto +++ b/api/proto/teleport/legacy/types/events/events.proto @@ -1605,6 +1605,21 @@ message PortForward { // Addr is a target port forwarding address string Addr = 5 [(gogoproto.jsontag) = "addr"]; + + // KubernetesCluster has information about a kubernetes cluster, if + // applicable. + KubernetesClusterMetadata KubernetesCluster = 6 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; + + // KubernetesPod has information about a kubernetes pod, if applicable. + KubernetesPodMetadata KubernetesPod = 7 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; } // X11Forward is emitted when a user requests X11 protocol forwarding @@ -1913,6 +1928,13 @@ message Subsystem { // Error contains error in case of unsucessfull attempt string Error = 5 [(gogoproto.jsontag) = "exitError"]; + + // ServerMetadata is a common server metadata + ServerMetadata Server = 6 [ + (gogoproto.nullable) = false, + (gogoproto.embed) = true, + (gogoproto.jsontag) = "" + ]; } // ClientDisconnect is emitted when client is disconnected diff --git a/api/types/appserver.go b/api/types/appserver.go index 5f0506e0d75e2..6fe3b67b7a2f1 100644 --- a/api/types/appserver.go +++ b/api/types/appserver.go @@ -86,13 +86,15 @@ func NewAppServerV3FromApp(app *AppV3, hostname, hostID string) (*AppServerV3, e // NewAppServerForAWSOIDCIntegration creates a new AppServer that will be used to grant AWS App Access // using the AWSOIDC credentials. -func NewAppServerForAWSOIDCIntegration(integrationName, hostID, publicAddr string) (*AppServerV3, error) { +func NewAppServerForAWSOIDCIntegration(integrationName, hostID, publicAddr string, labels map[string]string) (*AppServerV3, error) { return NewAppServerV3(Metadata{ - Name: integrationName, + Name: integrationName, + Labels: labels, }, AppServerSpecV3{ HostID: hostID, App: &AppV3{Metadata: Metadata{ - Name: integrationName, + Name: integrationName, + Labels: labels, }, Spec: AppSpecV3{ URI: constants.AWSConsoleURL, Integration: integrationName, diff --git a/api/types/appserver_test.go b/api/types/appserver_test.go index 74a0ab661f7dd..25fa31f6d4d63 100644 --- a/api/types/appserver_test.go +++ b/api/types/appserver_test.go @@ -63,6 +63,7 @@ func TestNewAppServerForAWSOIDCIntegration(t *testing.T) { integratioName string hostID string publicAddr string + labels map[string]string expectedApp *AppServerV3 errCheck require.ErrorAssertionFunc }{ @@ -71,12 +72,14 @@ func TestNewAppServerForAWSOIDCIntegration(t *testing.T) { integratioName: "valid", hostID: "my-host-id", publicAddr: "valid.proxy.example.com", + labels: map[string]string{"account_id": "123456789012"}, expectedApp: &AppServerV3{ Kind: KindAppServer, Version: V3, Metadata: Metadata{ Name: "valid", Namespace: "default", + Labels: map[string]string{"account_id": "123456789012"}, }, Spec: AppServerSpecV3{ Version: api.Version, @@ -87,6 +90,7 @@ func TestNewAppServerForAWSOIDCIntegration(t *testing.T) { Metadata: Metadata{ Name: "valid", Namespace: "default", + Labels: map[string]string{"account_id": "123456789012"}, }, Spec: AppSpecV3{ URI: "https://console.aws.amazon.com", @@ -106,7 +110,7 @@ func TestNewAppServerForAWSOIDCIntegration(t *testing.T) { }, } { t.Run(tt.name, func(t *testing.T) { - app, err := NewAppServerForAWSOIDCIntegration(tt.integratioName, tt.hostID, tt.publicAddr) + app, err := NewAppServerForAWSOIDCIntegration(tt.integratioName, tt.hostID, tt.publicAddr, tt.labels) if tt.errCheck != nil { tt.errCheck(t, err) } diff --git a/api/types/events/events.pb.go b/api/types/events/events.pb.go index d5464b7440a9b..1ef2dea08fd79 100644 --- a/api/types/events/events.pb.go +++ b/api/types/events/events.pb.go @@ -2967,10 +2967,15 @@ type PortForward struct { // Status contains operation success or failure status Status `protobuf:"bytes,4,opt,name=Status,proto3,embedded=Status" json:""` // Addr is a target port forwarding address - Addr string `protobuf:"bytes,5,opt,name=Addr,proto3" json:"addr"` - XXX_NoUnkeyedLiteral struct{} `json:"-"` - XXX_unrecognized []byte `json:"-"` - XXX_sizecache int32 `json:"-"` + Addr string `protobuf:"bytes,5,opt,name=Addr,proto3" json:"addr"` + // KubernetesCluster has information about a kubernetes cluster, if + // applicable. + KubernetesClusterMetadata `protobuf:"bytes,6,opt,name=KubernetesCluster,proto3,embedded=KubernetesCluster" json:""` + // KubernetesPod has information about a kubernetes pod, if applicable. + KubernetesPodMetadata `protobuf:"bytes,7,opt,name=KubernetesPod,proto3,embedded=KubernetesPod" json:""` + XXX_NoUnkeyedLiteral struct{} `json:"-"` + XXX_unrecognized []byte `json:"-"` + XXX_sizecache int32 `json:"-"` } func (m *PortForward) Reset() { *m = PortForward{} } @@ -3343,7 +3348,9 @@ type Subsystem struct { // Name is a subsystem name Name string `protobuf:"bytes,4,opt,name=Name,proto3" json:"name"` // Error contains error in case of unsucessfull attempt - Error string `protobuf:"bytes,5,opt,name=Error,proto3" json:"exitError"` + Error string `protobuf:"bytes,5,opt,name=Error,proto3" json:"exitError"` + // ServerMetadata is a common server metadata + ServerMetadata `protobuf:"bytes,6,opt,name=Server,proto3,embedded=Server" json:""` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` @@ -14397,999 +14404,1000 @@ func init() { } var fileDescriptor_007ba1c3d6266d56 = []byte{ - // 15863 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6b, 0x74, 0x1c, 0x47, - 0x76, 0x18, 0x8c, 0x79, 0x60, 0x00, 0x14, 0x1e, 0x04, 0x8a, 0x14, 0xd9, 0xa4, 0x48, 0x8e, 0xd4, - 0x92, 0xb8, 0xa4, 0x56, 0x22, 0x25, 0x8a, 0x92, 0x56, 0xaf, 0x95, 0x06, 0x18, 0x80, 0x18, 0x11, - 0x8f, 0x51, 0x0f, 0x48, 0xae, 0xf6, 0x35, 0x6e, 0x4c, 0x17, 0x80, 0x16, 0x66, 0xba, 0x67, 0xbb, - 0x7b, 0x08, 0x42, 0xdf, 0xcb, 0xeb, 0xcf, 0x8f, 0x5d, 0x7b, 0x77, 0xbd, 0xdf, 0xfa, 0xf3, 0xdb, - 0x49, 0xd6, 0x76, 0x9c, 0xd8, 0x8e, 0xed, 0xb5, 0x1d, 0x9f, 0xb5, 0xd7, 0xce, 0x9e, 0xd8, 0xd9, - 0xe4, 0x44, 0xf6, 0x26, 0x3e, 0xb6, 0x93, 0xf8, 0xf8, 0x24, 0x0e, 0xd6, 0xd9, 0xc4, 0xf9, 0x81, - 0x13, 0x9f, 0xe3, 0x24, 0x7b, 0xe2, 0x8d, 0xe3, 0xe4, 0xe4, 0xd4, 0xad, 0xea, 0xee, 0xaa, 0x7e, - 0x0c, 0x9e, 0x32, 0x04, 0x11, 0x7f, 0x48, 0xcc, 0xbd, 0xb7, 0x6e, 0x55, 0xdf, 0xba, 0x55, 0x75, - 0xab, 0xea, 0xd6, 0xbd, 0xe8, 0x92, 0x47, 0x9a, 0xa4, 0x6d, 0x3b, 0xde, 0x95, 0x26, 0x59, 0xd6, - 0x1b, 0xeb, 0x57, 0xbc, 0xf5, 0x36, 0x71, 0xaf, 0x90, 0x3b, 0xc4, 0xf2, 0xfc, 0xff, 0x2e, 0xb7, - 0x1d, 0xdb, 0xb3, 0x71, 0x81, 0xfd, 0x3a, 0x73, 0x62, 0xd9, 0x5e, 0xb6, 0x01, 0x74, 0x85, 0xfe, - 0xc5, 0xb0, 0x67, 0xce, 0x2e, 0xdb, 0xf6, 0x72, 0x93, 0x5c, 0x81, 0x5f, 0x8b, 0x9d, 0xa5, 0x2b, - 0xae, 0xe7, 0x74, 0x1a, 0x1e, 0xc7, 0x16, 0xa3, 0x58, 0xcf, 0x6c, 0x11, 0xd7, 0xd3, 0x5b, 0x6d, - 0x4e, 0x70, 0x3e, 0x4a, 0xb0, 0xe6, 0xe8, 0xed, 0x36, 0x71, 0x78, 0xe5, 0x67, 0x1e, 0x4c, 0x6e, - 0x27, 0xfc, 0xcb, 0x49, 0x1e, 0x4f, 0x26, 0xf1, 0x19, 0x45, 0x38, 0xaa, 0x9f, 0xcb, 0xa2, 0xfe, - 0x59, 0xe2, 0xe9, 0x86, 0xee, 0xe9, 0xf8, 0x2c, 0xea, 0xad, 0x58, 0x06, 0xb9, 0xab, 0x64, 0x1e, - 0xc8, 0x5c, 0xcc, 0x8d, 0x17, 0x36, 0x37, 0x8a, 0x59, 0x62, 0x6a, 0x0c, 0x88, 0xcf, 0xa1, 0xfc, - 0xc2, 0x7a, 0x9b, 0x28, 0xd9, 0x07, 0x32, 0x17, 0x07, 0xc6, 0x07, 0x36, 0x37, 0x8a, 0xbd, 0x20, - 0x0b, 0x0d, 0xc0, 0xf8, 0x41, 0x94, 0xad, 0x94, 0x95, 0x1c, 0x20, 0xc7, 0x36, 0x37, 0x8a, 0xc3, - 0x1d, 0xd3, 0x78, 0xcc, 0x6e, 0x99, 0x1e, 0x69, 0xb5, 0xbd, 0x75, 0x2d, 0x5b, 0x29, 0xe3, 0x0b, - 0x28, 0x3f, 0x61, 0x1b, 0x44, 0xc9, 0x03, 0x11, 0xde, 0xdc, 0x28, 0x8e, 0x34, 0x6c, 0x83, 0x08, - 0x54, 0x80, 0xc7, 0xaf, 0xa0, 0xfc, 0x82, 0xd9, 0x22, 0x4a, 0xef, 0x03, 0x99, 0x8b, 0x83, 0x57, - 0xcf, 0x5c, 0x66, 0x52, 0xb9, 0xec, 0x4b, 0xe5, 0xf2, 0x82, 0x2f, 0xb6, 0xf1, 0xd1, 0xb7, 0x36, - 0x8a, 0x3d, 0x9b, 0x1b, 0xc5, 0x3c, 0x95, 0xe4, 0x67, 0xbf, 0x56, 0xcc, 0x68, 0x50, 0x12, 0xbf, - 0x88, 0x06, 0x27, 0x9a, 0x1d, 0xd7, 0x23, 0xce, 0x9c, 0xde, 0x22, 0x4a, 0x01, 0x2a, 0x3c, 0xb3, - 0xb9, 0x51, 0x3c, 0xd9, 0x60, 0xe0, 0xba, 0xa5, 0xb7, 0xc4, 0x8a, 0x45, 0x72, 0xf5, 0xd7, 0x32, - 0xe8, 0x58, 0x8d, 0xb8, 0xae, 0x69, 0x5b, 0x81, 0x6c, 0x1e, 0x41, 0x03, 0x1c, 0x54, 0x29, 0x83, - 0x7c, 0x06, 0xc6, 0xfb, 0x36, 0x37, 0x8a, 0x39, 0xd7, 0x34, 0xb4, 0x10, 0x83, 0x9f, 0x40, 0x7d, - 0xb7, 0x4d, 0x6f, 0x65, 0x76, 0xaa, 0xc4, 0xe5, 0x74, 0x72, 0x73, 0xa3, 0x88, 0xd7, 0x4c, 0x6f, - 0xa5, 0xde, 0x5a, 0xd2, 0x85, 0x0a, 0x7d, 0x32, 0x3c, 0x83, 0x46, 0xab, 0x8e, 0x79, 0x47, 0xf7, - 0xc8, 0x0d, 0xb2, 0x5e, 0xb5, 0x9b, 0x66, 0x63, 0x9d, 0x4b, 0xf1, 0x81, 0xcd, 0x8d, 0xe2, 0xd9, - 0x36, 0xc3, 0xd5, 0x57, 0xc9, 0x7a, 0xbd, 0x0d, 0x58, 0x81, 0x49, 0xac, 0xa4, 0xfa, 0x95, 0x5e, - 0x34, 0x74, 0xd3, 0x25, 0x4e, 0xd0, 0xee, 0x0b, 0x28, 0x4f, 0x7f, 0xf3, 0x26, 0x83, 0xcc, 0x3b, - 0x2e, 0x71, 0x44, 0x99, 0x53, 0x3c, 0xbe, 0x84, 0x7a, 0x67, 0xec, 0x65, 0xd3, 0xe2, 0xcd, 0x3e, - 0xbe, 0xb9, 0x51, 0x3c, 0xd6, 0xa4, 0x00, 0x81, 0x92, 0x51, 0xe0, 0xf7, 0xa3, 0xa1, 0x4a, 0x8b, - 0xea, 0x90, 0x6d, 0xe9, 0x9e, 0xed, 0xf0, 0xd6, 0x82, 0x74, 0x4d, 0x01, 0x2e, 0x14, 0x94, 0xe8, - 0xf1, 0xf3, 0x08, 0x95, 0x6e, 0xd7, 0x34, 0xbb, 0x49, 0x4a, 0xda, 0x1c, 0x57, 0x06, 0x28, 0xad, - 0xaf, 0xb9, 0x75, 0xc7, 0x6e, 0x92, 0xba, 0xee, 0x88, 0xd5, 0x0a, 0xd4, 0x78, 0x12, 0x8d, 0x94, - 0x1a, 0x0d, 0xe2, 0xba, 0x1a, 0xf9, 0x58, 0x87, 0xb8, 0x9e, 0xab, 0xf4, 0x3e, 0x90, 0xbb, 0x38, - 0x30, 0x7e, 0x6e, 0x73, 0xa3, 0x78, 0x5a, 0x07, 0x4c, 0xdd, 0xe1, 0x28, 0x81, 0x45, 0xa4, 0x10, - 0x1e, 0x47, 0xc3, 0xa5, 0x37, 0x3b, 0x0e, 0xa9, 0x18, 0xc4, 0xf2, 0x4c, 0x6f, 0x9d, 0x6b, 0xc8, - 0xd9, 0xcd, 0x8d, 0xa2, 0xa2, 0x53, 0x44, 0xdd, 0xe4, 0x18, 0x81, 0x89, 0x5c, 0x04, 0xcf, 0xa3, - 0xb1, 0xeb, 0x13, 0xd5, 0x1a, 0x71, 0xee, 0x98, 0x0d, 0x52, 0x6a, 0x34, 0xec, 0x8e, 0xe5, 0x29, - 0x7d, 0xc0, 0xe7, 0xc1, 0xcd, 0x8d, 0xe2, 0xb9, 0xe5, 0x46, 0xbb, 0xee, 0x32, 0x6c, 0x5d, 0x67, - 0x68, 0x81, 0x59, 0xbc, 0x2c, 0xfe, 0x20, 0x1a, 0x5e, 0x70, 0xa8, 0x16, 0x1a, 0x65, 0x42, 0xe1, - 0x4a, 0x3f, 0xe8, 0xff, 0xc9, 0xcb, 0x7c, 0x02, 0x62, 0x50, 0xbf, 0x67, 0x59, 0x63, 0x3d, 0x56, - 0xa0, 0x6e, 0x00, 0x4e, 0x6c, 0xac, 0xc4, 0x0a, 0x13, 0xa4, 0xd0, 0x8f, 0x37, 0x1d, 0x62, 0xc4, - 0xb4, 0x6d, 0x00, 0xda, 0x7c, 0x69, 0x73, 0xa3, 0xf8, 0x88, 0xc3, 0x69, 0xea, 0x5d, 0xd5, 0x2e, - 0x95, 0x15, 0x9e, 0x44, 0xfd, 0x54, 0x9b, 0x6e, 0x98, 0x96, 0xa1, 0xa0, 0x07, 0x32, 0x17, 0x47, - 0xae, 0x8e, 0xfa, 0xad, 0xf7, 0xe1, 0xe3, 0xa7, 0x36, 0x37, 0x8a, 0xc7, 0xa9, 0x0e, 0xd6, 0x57, - 0x4d, 0x4b, 0x9c, 0x22, 0x82, 0xa2, 0xea, 0x5f, 0xe4, 0xd1, 0x08, 0x15, 0x8e, 0xa0, 0xc7, 0x25, - 0x3a, 0x24, 0x29, 0x84, 0x8e, 0x50, 0xb7, 0xad, 0x37, 0x08, 0x57, 0x69, 0x60, 0x67, 0xf9, 0x40, - 0x81, 0x5d, 0x94, 0x1e, 0x5f, 0x42, 0xfd, 0x0c, 0x54, 0x29, 0x73, 0x2d, 0x1f, 0xde, 0xdc, 0x28, - 0x0e, 0xb8, 0x00, 0xab, 0x9b, 0x86, 0x16, 0xa0, 0xa9, 0x9a, 0xb1, 0xbf, 0xa7, 0x6d, 0xd7, 0xa3, - 0xcc, 0xb9, 0x92, 0x83, 0x9a, 0xf1, 0x02, 0x2b, 0x1c, 0x25, 0xaa, 0x99, 0x5c, 0x08, 0x3f, 0x87, - 0x10, 0x83, 0x94, 0x0c, 0xc3, 0xe1, 0x9a, 0x7e, 0x7a, 0x73, 0xa3, 0x78, 0x1f, 0x67, 0xa1, 0x1b, - 0x86, 0x38, 0x4c, 0x04, 0x62, 0xdc, 0x42, 0x43, 0xec, 0xd7, 0x8c, 0xbe, 0x48, 0x9a, 0x4c, 0xcd, - 0x07, 0xaf, 0x5e, 0xf4, 0xa5, 0x29, 0x4b, 0xe7, 0xb2, 0x48, 0x3a, 0x69, 0x79, 0xce, 0xfa, 0x78, - 0x91, 0xcf, 0x8c, 0xa7, 0x78, 0x55, 0x4d, 0xc0, 0x89, 0x63, 0x52, 0x2c, 0x43, 0x27, 0xcc, 0x29, - 0xdb, 0x59, 0xd3, 0x1d, 0x83, 0x18, 0xe3, 0xeb, 0xe2, 0x84, 0xb9, 0xe4, 0x83, 0xeb, 0x8b, 0xa2, - 0x0e, 0x88, 0xe4, 0x78, 0x02, 0x0d, 0x33, 0x6e, 0xb5, 0xce, 0x22, 0xf4, 0x7d, 0x5f, 0x4c, 0x5a, - 0x6e, 0x67, 0x31, 0xda, 0xdf, 0x72, 0x19, 0x3a, 0x26, 0x19, 0xe0, 0x16, 0x71, 0xe8, 0x6c, 0x0a, - 0xea, 0xcf, 0xc7, 0x24, 0x67, 0x72, 0x87, 0x61, 0xe2, 0x3c, 0x78, 0x91, 0x33, 0x2f, 0xa3, 0xb1, - 0x98, 0x28, 0xf0, 0x28, 0xca, 0xad, 0x92, 0x75, 0xa6, 0x2e, 0x1a, 0xfd, 0x13, 0x9f, 0x40, 0xbd, - 0x77, 0xf4, 0x66, 0x87, 0xaf, 0x65, 0x1a, 0xfb, 0xf1, 0x7c, 0xf6, 0x7d, 0x19, 0x3a, 0xf5, 0xe3, - 0x09, 0xdb, 0xb2, 0x48, 0xc3, 0x13, 0x67, 0xff, 0x67, 0xd0, 0xc0, 0x8c, 0xdd, 0xd0, 0x9b, 0xd0, - 0x8f, 0x4c, 0xef, 0x94, 0xcd, 0x8d, 0xe2, 0x09, 0xda, 0x81, 0x97, 0x9b, 0x14, 0x23, 0xb4, 0x29, - 0x24, 0xa5, 0x0a, 0xa0, 0x91, 0x96, 0xed, 0x11, 0x28, 0x98, 0x0d, 0x15, 0x00, 0x0a, 0x3a, 0x80, - 0x12, 0x15, 0x20, 0x24, 0xc6, 0x57, 0x50, 0x7f, 0x95, 0x2e, 0x78, 0x0d, 0xbb, 0xc9, 0x95, 0x0f, - 0xe6, 0x64, 0x58, 0x04, 0xc5, 0x41, 0xe3, 0x13, 0xa9, 0xd3, 0x68, 0x64, 0xa2, 0x69, 0x12, 0xcb, - 0x13, 0x5b, 0x4d, 0x87, 0x54, 0x69, 0x99, 0x58, 0x9e, 0xd8, 0x6a, 0x18, 0x7c, 0x3a, 0x85, 0x8a, - 0xad, 0x0e, 0x48, 0xd5, 0xdf, 0xcd, 0xa1, 0xd3, 0x37, 0x3a, 0x8b, 0xc4, 0xb1, 0x88, 0x47, 0x5c, - 0xbe, 0x32, 0x06, 0x5c, 0xe7, 0xd0, 0x58, 0x0c, 0xc9, 0xb9, 0xc3, 0x8a, 0xb5, 0x1a, 0x20, 0xeb, - 0x7c, 0xb1, 0x15, 0xa7, 0xbd, 0x58, 0x51, 0x3c, 0x8d, 0x8e, 0x85, 0x40, 0xda, 0x08, 0x57, 0xc9, - 0xc2, 0x9c, 0x7e, 0x7e, 0x73, 0xa3, 0x78, 0x46, 0xe0, 0x46, 0x9b, 0x2d, 0x6a, 0x70, 0xb4, 0x18, - 0xbe, 0x81, 0x46, 0x43, 0xd0, 0x75, 0xc7, 0xee, 0xb4, 0x5d, 0x25, 0x07, 0xac, 0x8a, 0x9b, 0x1b, - 0xc5, 0xfb, 0x05, 0x56, 0xcb, 0x80, 0x14, 0x57, 0xd2, 0x68, 0x41, 0xfc, 0xed, 0x19, 0x91, 0x1b, - 0x1f, 0x85, 0x79, 0x18, 0x85, 0xcf, 0xfa, 0xa3, 0x30, 0x55, 0x48, 0x97, 0xa3, 0x25, 0xf9, 0xa0, - 0x8c, 0x34, 0x23, 0x36, 0x28, 0x63, 0x35, 0x9e, 0x99, 0x40, 0xf7, 0x25, 0xf2, 0xda, 0x91, 0x56, - 0xff, 0x69, 0x4e, 0xe4, 0x52, 0xb5, 0x8d, 0xa0, 0x33, 0xe7, 0xc5, 0xce, 0xac, 0xda, 0x06, 0x98, - 0x4b, 0x99, 0x70, 0x11, 0x13, 0x1a, 0xdb, 0xb6, 0x8d, 0xa8, 0xd5, 0x14, 0x2f, 0x8b, 0x3f, 0x8a, - 0x4e, 0xc6, 0x80, 0x6c, 0xba, 0x66, 0xda, 0x7f, 0x61, 0x73, 0xa3, 0xa8, 0x26, 0x70, 0x8d, 0xce, - 0xde, 0x29, 0x5c, 0xb0, 0x8e, 0x4e, 0x09, 0x52, 0xb7, 0x2d, 0x4f, 0x37, 0x2d, 0x6e, 0xe5, 0xb1, - 0x51, 0xf2, 0x9e, 0xcd, 0x8d, 0xe2, 0x43, 0xa2, 0x0e, 0xfa, 0x34, 0xd1, 0xc6, 0xa7, 0xf1, 0xc1, - 0x06, 0x52, 0x12, 0x50, 0x95, 0x96, 0xbe, 0xec, 0x9b, 0xae, 0x17, 0x37, 0x37, 0x8a, 0x0f, 0x27, - 0xd6, 0x61, 0x52, 0x2a, 0x71, 0xa9, 0x4c, 0xe3, 0x84, 0x35, 0x84, 0x43, 0xdc, 0x9c, 0x6d, 0x10, - 0xf8, 0x86, 0x5e, 0xe0, 0xaf, 0x6e, 0x6e, 0x14, 0xcf, 0x0b, 0xfc, 0x2d, 0xdb, 0x20, 0xd1, 0xe6, - 0x27, 0x94, 0x56, 0x7f, 0x2d, 0x87, 0xce, 0xd7, 0x4a, 0xb3, 0x33, 0x15, 0xc3, 0xb7, 0x2d, 0xaa, - 0x8e, 0x7d, 0xc7, 0x34, 0x84, 0xd1, 0xbb, 0x88, 0x4e, 0x45, 0x50, 0x93, 0x60, 0xce, 0x04, 0x56, - 0x2d, 0x7c, 0x9b, 0x6f, 0xb7, 0xb4, 0x39, 0x4d, 0x9d, 0xd9, 0x3c, 0x75, 0xc9, 0xa4, 0x4f, 0x63, - 0x44, 0xfb, 0x28, 0x82, 0xaa, 0xad, 0xd8, 0x8e, 0xd7, 0xe8, 0x78, 0x5c, 0x09, 0xa0, 0x8f, 0x62, - 0x75, 0xb8, 0x9c, 0xa8, 0x4b, 0x15, 0x3e, 0x1f, 0xfc, 0xc9, 0x0c, 0x1a, 0x2d, 0x79, 0x9e, 0x63, - 0x2e, 0x76, 0x3c, 0x32, 0xab, 0xb7, 0xdb, 0xa6, 0xb5, 0x0c, 0x63, 0x7d, 0xf0, 0xea, 0x8b, 0xc1, - 0x1a, 0xd9, 0x55, 0x12, 0x97, 0xa3, 0xc5, 0x85, 0x21, 0xaa, 0xfb, 0xa8, 0x7a, 0x8b, 0xe1, 0xc4, - 0x21, 0x1a, 0x2d, 0x47, 0x87, 0x68, 0x22, 0xaf, 0x1d, 0x0d, 0xd1, 0xcf, 0xe5, 0xd0, 0xd9, 0xf9, - 0x55, 0x4f, 0xd7, 0x88, 0x6b, 0x77, 0x9c, 0x06, 0x71, 0x6f, 0xb6, 0x0d, 0xdd, 0x23, 0xe1, 0x48, - 0x2d, 0xa2, 0xde, 0x92, 0x61, 0x10, 0x03, 0xd8, 0xf5, 0xb2, 0xfd, 0x97, 0x4e, 0x01, 0x1a, 0x83, - 0xe3, 0x47, 0x50, 0x1f, 0x2f, 0x03, 0xdc, 0x7b, 0xc7, 0x07, 0x37, 0x37, 0x8a, 0x7d, 0x1d, 0x06, - 0xd2, 0x7c, 0x1c, 0x25, 0x2b, 0x93, 0x26, 0xa1, 0x64, 0xb9, 0x90, 0xcc, 0x60, 0x20, 0xcd, 0xc7, - 0xe1, 0xd7, 0xd0, 0x08, 0xb0, 0x0d, 0xda, 0xc3, 0xe7, 0xbe, 0x13, 0xbe, 0x74, 0xc5, 0xc6, 0xb2, - 0xa5, 0x09, 0x5a, 0x53, 0x77, 0xfc, 0x02, 0x5a, 0x84, 0x01, 0xbe, 0x8d, 0x46, 0x79, 0x23, 0x42, - 0xa6, 0xbd, 0x5d, 0x98, 0xde, 0xb7, 0xb9, 0x51, 0x1c, 0xe3, 0xed, 0x17, 0xd8, 0xc6, 0x98, 0x50, - 0xc6, 0xbc, 0xd9, 0x21, 0xe3, 0xc2, 0x56, 0x8c, 0xf9, 0x17, 0x8b, 0x8c, 0xa3, 0x4c, 0xd4, 0xd7, - 0xd1, 0x90, 0x58, 0x10, 0x9f, 0x84, 0x3d, 0x2e, 0x1b, 0x27, 0xb0, 0x3b, 0x36, 0x0d, 0xd8, 0xd8, - 0x3e, 0x89, 0x06, 0xcb, 0xc4, 0x6d, 0x38, 0x66, 0x9b, 0x5a, 0x0d, 0x5c, 0xc9, 0x8f, 0x6d, 0x6e, - 0x14, 0x07, 0x8d, 0x10, 0xac, 0x89, 0x34, 0xea, 0x7f, 0xcb, 0xa0, 0x93, 0x94, 0x77, 0xc9, 0x75, - 0xcd, 0x65, 0xab, 0x25, 0x2e, 0xdb, 0x8f, 0xa1, 0x42, 0x0d, 0xea, 0xe3, 0x35, 0x9d, 0xd8, 0xdc, - 0x28, 0x8e, 0xb2, 0x16, 0x08, 0x7a, 0xc8, 0x69, 0x82, 0x0d, 0x5e, 0x76, 0x8b, 0x0d, 0x1e, 0x35, - 0x69, 0x3d, 0xdd, 0xf1, 0x4c, 0x6b, 0xb9, 0xe6, 0xe9, 0x5e, 0xc7, 0x95, 0x4c, 0x5a, 0x8e, 0xa9, - 0xbb, 0x80, 0x92, 0x4c, 0x5a, 0xa9, 0x10, 0x7e, 0x19, 0x0d, 0x4d, 0x5a, 0x46, 0xc8, 0x84, 0x4d, - 0x88, 0xf7, 0x53, 0x4b, 0x93, 0x00, 0x3c, 0xce, 0x42, 0x2a, 0xa0, 0xfe, 0x7c, 0x06, 0x29, 0x6c, - 0x37, 0x36, 0x63, 0xba, 0xde, 0x2c, 0x69, 0x2d, 0x0a, 0xb3, 0xd3, 0x94, 0xbf, 0xbd, 0xa3, 0x38, - 0x61, 0x2d, 0x02, 0x53, 0x80, 0x6f, 0xef, 0x9a, 0xa6, 0xeb, 0x45, 0x27, 0xc3, 0x48, 0x29, 0x5c, - 0x41, 0x7d, 0x8c, 0x33, 0xb3, 0x25, 0x06, 0xaf, 0x2a, 0xbe, 0x22, 0x44, 0xab, 0x66, 0xca, 0xd0, - 0x62, 0xc4, 0xe2, 0xfe, 0x9c, 0x97, 0x57, 0x7f, 0x31, 0x8b, 0x46, 0xa3, 0x85, 0xf0, 0x6d, 0xd4, - 0xff, 0xaa, 0x6d, 0x5a, 0xc4, 0x98, 0xb7, 0xa0, 0x85, 0xdd, 0x4f, 0x29, 0x7c, 0x5b, 0xfc, 0xf8, - 0x1b, 0x50, 0xa6, 0x2e, 0x5a, 0xb0, 0x70, 0x68, 0x11, 0x30, 0xc3, 0x1f, 0x44, 0x03, 0xd4, 0x06, - 0xbc, 0x03, 0x9c, 0xb3, 0x5b, 0x72, 0x7e, 0x80, 0x73, 0x3e, 0xe1, 0xb0, 0x42, 0x71, 0xd6, 0x21, - 0x3b, 0xaa, 0x57, 0x1a, 0xd1, 0x5d, 0xdb, 0xe2, 0x3d, 0x0f, 0x7a, 0xe5, 0x00, 0x44, 0xd4, 0x2b, - 0x46, 0x43, 0x4d, 0x57, 0xf6, 0xb1, 0xd0, 0x0d, 0xc2, 0xde, 0x85, 0xc9, 0x2a, 0xda, 0x03, 0x02, - 0xb1, 0xfa, 0x9d, 0x59, 0xf4, 0x78, 0x28, 0x32, 0x8d, 0xdc, 0x31, 0xc9, 0x1a, 0x17, 0xe7, 0x8a, - 0xd9, 0xe6, 0x9b, 0x47, 0xaa, 0xf2, 0xee, 0xc4, 0x8a, 0x6e, 0x2d, 0x13, 0x03, 0x5f, 0x42, 0xbd, - 0x74, 0x87, 0xef, 0x2a, 0x19, 0x30, 0xd7, 0x60, 0x3a, 0x71, 0x28, 0x40, 0x3c, 0x7d, 0x00, 0x0a, - 0x6c, 0xa3, 0xc2, 0x82, 0xa3, 0x9b, 0x9e, 0xdf, 0xb3, 0xa5, 0x78, 0xcf, 0x6e, 0xa3, 0xc6, 0xcb, - 0x8c, 0x07, 0x9b, 0xf3, 0x41, 0x10, 0x1e, 0x00, 0x44, 0x41, 0x30, 0x92, 0x33, 0xcf, 0xa1, 0x41, - 0x81, 0x78, 0x47, 0x93, 0xfa, 0x97, 0xf2, 0xa2, 0xae, 0xfb, 0xcd, 0xe2, 0xba, 0x7e, 0x85, 0xea, - 0xa8, 0xeb, 0x52, 0xab, 0x82, 0x29, 0x39, 0xd7, 0x44, 0x00, 0xc9, 0x9a, 0x08, 0x20, 0xfc, 0x14, - 0xea, 0x67, 0x2c, 0x82, 0xfd, 0x2b, 0xec, 0x7d, 0x1d, 0x80, 0xc9, 0x4b, 0x73, 0x40, 0x88, 0x7f, - 0x36, 0x83, 0xce, 0x75, 0x95, 0x04, 0x28, 0xc3, 0xe0, 0xd5, 0xa7, 0x77, 0x25, 0xc6, 0xf1, 0xc7, - 0x37, 0x37, 0x8a, 0x97, 0x5a, 0x01, 0x49, 0xdd, 0x11, 0x68, 0xea, 0x0d, 0x46, 0x24, 0xb4, 0xab, - 0x7b, 0x53, 0xa8, 0xf1, 0xc8, 0x2a, 0x9d, 0x82, 0x33, 0x1c, 0xab, 0xb1, 0xee, 0x37, 0x32, 0x1f, - 0x1a, 0x8f, 0xfc, 0x7b, 0x97, 0x7c, 0x92, 0x84, 0x6a, 0x52, 0xb8, 0xe0, 0x06, 0x3a, 0xc5, 0x30, - 0x65, 0x7d, 0x7d, 0x7e, 0x69, 0xd6, 0xb6, 0xbc, 0x15, 0xbf, 0x82, 0x5e, 0xf1, 0x10, 0x04, 0x2a, - 0x30, 0xf4, 0xf5, 0xba, 0xbd, 0x54, 0x6f, 0x51, 0xaa, 0x84, 0x3a, 0xd2, 0x38, 0xd1, 0x89, 0x96, - 0x8f, 0x39, 0x7f, 0x0a, 0x2a, 0x84, 0x47, 0x54, 0xfe, 0x38, 0x8d, 0x4f, 0x38, 0x91, 0x42, 0x6a, - 0x05, 0x0d, 0xcd, 0xd8, 0x8d, 0xd5, 0x40, 0x5d, 0x9e, 0x43, 0x85, 0x05, 0xdd, 0x59, 0x26, 0x1e, - 0xc8, 0x62, 0xf0, 0xea, 0xd8, 0x65, 0x76, 0xec, 0x4b, 0x89, 0x18, 0x62, 0x7c, 0x84, 0xcf, 0x06, - 0x05, 0x0f, 0x7e, 0x6b, 0xbc, 0x80, 0xfa, 0xb5, 0x5e, 0x34, 0xc4, 0x8f, 0x28, 0x61, 0x36, 0xc7, - 0xcf, 0x87, 0x87, 0xbe, 0x7c, 0xfa, 0x0a, 0x8e, 0x69, 0x82, 0xe3, 0xa5, 0x21, 0xca, 0xec, 0xf7, - 0x36, 0x8a, 0x99, 0xcd, 0x8d, 0x62, 0x8f, 0xd6, 0x2f, 0x6c, 0x2a, 0xc3, 0xf5, 0x46, 0x58, 0x60, - 0xc5, 0x43, 0xc7, 0x48, 0x59, 0xb6, 0xfe, 0xbc, 0x8c, 0xfa, 0x78, 0x1b, 0xb8, 0xc6, 0x9d, 0x0a, - 0xcf, 0x32, 0xa4, 0xa3, 0xd6, 0x48, 0x69, 0xbf, 0x14, 0x7e, 0x11, 0x15, 0xd8, 0xde, 0x9e, 0x0b, - 0xe0, 0x64, 0xf2, 0x59, 0x48, 0xa4, 0x38, 0x2f, 0x83, 0xa7, 0x11, 0x0a, 0xf7, 0xf5, 0xc1, 0xc9, - 0x32, 0xe7, 0x10, 0xdf, 0xf1, 0x47, 0xb8, 0x08, 0x65, 0xf1, 0x33, 0x68, 0x68, 0x81, 0x38, 0x2d, - 0xd3, 0xd2, 0x9b, 0x35, 0xf3, 0x4d, 0xff, 0x70, 0x19, 0x16, 0x5e, 0xd7, 0x7c, 0x53, 0x1c, 0xb9, - 0x12, 0x1d, 0xfe, 0x48, 0xd2, 0xbe, 0xb9, 0x0f, 0x1a, 0xf2, 0xe0, 0x96, 0x1b, 0xca, 0x48, 0x7b, - 0x12, 0xb6, 0xd1, 0xaf, 0xa1, 0x61, 0x69, 0xcb, 0xc4, 0x4f, 0x0f, 0xcf, 0xc5, 0x59, 0x0b, 0xfb, - 0xbf, 0x08, 0x5b, 0x99, 0x03, 0xd5, 0xe4, 0x8a, 0x65, 0x7a, 0xa6, 0xde, 0x9c, 0xb0, 0x5b, 0x2d, - 0xdd, 0x32, 0x94, 0x81, 0x50, 0x93, 0x4d, 0x86, 0xa9, 0x37, 0x18, 0x4a, 0xd4, 0x64, 0xb9, 0x10, - 0xdd, 0x96, 0xf3, 0x3e, 0xd4, 0x48, 0xc3, 0x76, 0xa8, 0x2d, 0x00, 0x87, 0x83, 0x7c, 0x5b, 0xee, - 0x32, 0x5c, 0xdd, 0xf1, 0x91, 0xa2, 0xb1, 0x1d, 0x2d, 0xf8, 0x6a, 0xbe, 0x7f, 0x70, 0x74, 0x28, - 0x7a, 0x9e, 0xab, 0xfe, 0x4c, 0x0e, 0x0d, 0x72, 0x52, 0xba, 0x94, 0x1e, 0x29, 0xf8, 0x5e, 0x14, - 0x3c, 0x51, 0x51, 0x0b, 0xfb, 0xa5, 0xa8, 0xea, 0xa7, 0xb2, 0xc1, 0x6c, 0x54, 0x75, 0x4c, 0x6b, - 0x6f, 0xb3, 0xd1, 0x05, 0x84, 0x26, 0x56, 0x3a, 0xd6, 0x2a, 0xbb, 0xb7, 0xca, 0x86, 0xf7, 0x56, - 0x0d, 0x53, 0x13, 0x30, 0xf8, 0x1c, 0xca, 0x97, 0x29, 0x7f, 0xda, 0x33, 0x43, 0xe3, 0x03, 0x6f, - 0x31, 0x4e, 0x99, 0xc7, 0x35, 0x00, 0xd3, 0xcd, 0xd5, 0xf8, 0xba, 0x47, 0x98, 0x39, 0x9b, 0x63, - 0x9b, 0xab, 0x45, 0x0a, 0xd0, 0x18, 0x1c, 0x5f, 0x43, 0x63, 0x65, 0xd2, 0xd4, 0xd7, 0x67, 0xcd, - 0x66, 0xd3, 0x74, 0x49, 0xc3, 0xb6, 0x0c, 0x17, 0x84, 0xcc, 0xab, 0x6b, 0xb9, 0x5a, 0x9c, 0x00, - 0xab, 0xa8, 0x30, 0xbf, 0xb4, 0xe4, 0x12, 0x0f, 0xc4, 0x97, 0x1b, 0x47, 0x74, 0x72, 0xb6, 0x01, - 0xa2, 0x71, 0x8c, 0xfa, 0x85, 0x0c, 0xdd, 0xbd, 0xb8, 0xab, 0x9e, 0xdd, 0x0e, 0xb4, 0x7c, 0x4f, - 0x22, 0xb9, 0x14, 0xda, 0x15, 0x59, 0xf8, 0xda, 0x63, 0xfc, 0x6b, 0xfb, 0xb8, 0x6d, 0x11, 0x5a, - 0x14, 0x89, 0x5f, 0x95, 0xdb, 0xe2, 0xab, 0xd4, 0x3f, 0xcf, 0xa2, 0x53, 0xbc, 0xc5, 0x13, 0x4d, - 0xb3, 0xbd, 0x68, 0xeb, 0x8e, 0xa1, 0x91, 0x06, 0x31, 0xef, 0x90, 0xc3, 0x39, 0xf0, 0xe4, 0xa1, - 0x93, 0xdf, 0xc3, 0xd0, 0xb9, 0x0a, 0x1b, 0x41, 0x2a, 0x19, 0x38, 0xf0, 0x65, 0x46, 0xc5, 0xe8, - 0xe6, 0x46, 0x71, 0xc8, 0x60, 0x60, 0x38, 0xf2, 0xd7, 0x44, 0x22, 0xaa, 0x24, 0x33, 0xc4, 0x5a, - 0xf6, 0x56, 0x40, 0x49, 0x7a, 0x99, 0x92, 0x34, 0x01, 0xa2, 0x71, 0x8c, 0xfa, 0x67, 0x59, 0x74, - 0x22, 0x2a, 0xf2, 0x1a, 0xb1, 0x8c, 0x23, 0x79, 0xbf, 0x3d, 0xf2, 0xfe, 0x46, 0x0e, 0xdd, 0xcf, - 0xcb, 0xd4, 0x56, 0x74, 0x87, 0x18, 0x65, 0xd3, 0x21, 0x0d, 0xcf, 0x76, 0xd6, 0x0f, 0xb1, 0x01, - 0xb5, 0x7f, 0x62, 0xbf, 0x86, 0x0a, 0x7c, 0xfb, 0xcf, 0xd6, 0x99, 0x91, 0xa0, 0x25, 0x00, 0x8d, - 0xad, 0x50, 0xec, 0xe8, 0x20, 0xd2, 0x59, 0x85, 0xed, 0x74, 0xd6, 0xfb, 0xd0, 0x70, 0x20, 0x7a, - 0xd8, 0x88, 0xf6, 0x85, 0xd6, 0x96, 0xe1, 0x23, 0x60, 0x2f, 0xaa, 0xc9, 0x84, 0x50, 0x9b, 0x0f, - 0xa8, 0x94, 0xc1, 0x1a, 0x1a, 0xe6, 0xb5, 0x05, 0xe5, 0x4c, 0x43, 0x13, 0x89, 0xd4, 0x8d, 0x3c, - 0x3a, 0x93, 0xdc, 0xed, 0x1a, 0xd1, 0x8d, 0xa3, 0x5e, 0x7f, 0x57, 0xf6, 0x3a, 0x7e, 0x10, 0xe5, - 0xab, 0xba, 0xb7, 0xc2, 0xef, 0xc1, 0xe1, 0x4e, 0x78, 0xc9, 0x6c, 0x92, 0x7a, 0x5b, 0xf7, 0x56, - 0x34, 0x40, 0x09, 0x73, 0x06, 0x02, 0x8e, 0x09, 0x73, 0x86, 0xb0, 0xd8, 0x0f, 0x3e, 0x90, 0xb9, - 0x98, 0x4f, 0x5c, 0xec, 0xbf, 0x96, 0x4f, 0x9b, 0x57, 0x6e, 0x3b, 0xa6, 0x47, 0x8e, 0x34, 0xec, - 0x48, 0xc3, 0xf6, 0xa8, 0x61, 0x7f, 0x90, 0x45, 0xc3, 0xc1, 0xa6, 0xe9, 0x0d, 0xd2, 0x38, 0x98, - 0xb5, 0x2a, 0xdc, 0xca, 0xe4, 0xf6, 0xbc, 0x95, 0xd9, 0x8b, 0x42, 0xa9, 0xc1, 0x91, 0x27, 0x33, - 0x0d, 0x40, 0x62, 0xec, 0xc8, 0x33, 0x38, 0xe8, 0x7c, 0x10, 0xf5, 0xcd, 0xea, 0x77, 0xcd, 0x56, - 0xa7, 0xc5, 0xad, 0x74, 0xf0, 0xeb, 0x6a, 0xe9, 0x77, 0x35, 0x1f, 0xae, 0xfe, 0xcb, 0x0c, 0x1a, - 0xe1, 0x42, 0xe5, 0xcc, 0xf7, 0x24, 0xd5, 0x50, 0x3a, 0xd9, 0x3d, 0x4b, 0x27, 0xb7, 0x7b, 0xe9, - 0xa8, 0x3f, 0x96, 0x43, 0xca, 0x94, 0xd9, 0x24, 0x0b, 0x8e, 0x6e, 0xb9, 0x4b, 0xc4, 0xe1, 0xdb, - 0xe9, 0x49, 0xca, 0x6a, 0x4f, 0x1f, 0x28, 0x4c, 0x29, 0xd9, 0x5d, 0x4d, 0x29, 0xef, 0x45, 0x03, - 0xbc, 0x31, 0x81, 0x4f, 0x21, 0x8c, 0x1a, 0xc7, 0x07, 0x6a, 0x21, 0x9e, 0x12, 0x97, 0xda, 0x6d, - 0xc7, 0xbe, 0x43, 0x1c, 0x76, 0x4b, 0xc5, 0x89, 0x75, 0x1f, 0xa8, 0x85, 0x78, 0x81, 0x33, 0xf1, - 0xed, 0x45, 0x91, 0x33, 0x71, 0xb4, 0x10, 0x8f, 0x2f, 0xa2, 0xfe, 0x19, 0xbb, 0xa1, 0x83, 0xa0, - 0xd9, 0xb4, 0x32, 0xb4, 0xb9, 0x51, 0xec, 0x6f, 0x72, 0x98, 0x16, 0x60, 0x29, 0x65, 0xd9, 0x5e, - 0xb3, 0x9a, 0xb6, 0xce, 0x9c, 0x5f, 0xfa, 0x19, 0xa5, 0xc1, 0x61, 0x5a, 0x80, 0xa5, 0x94, 0x54, - 0xe6, 0xe0, 0x54, 0xd4, 0x1f, 0xf2, 0x5c, 0xe2, 0x30, 0x2d, 0xc0, 0xaa, 0x5f, 0xc8, 0x53, 0xed, - 0x75, 0xcd, 0x37, 0xef, 0xf9, 0x75, 0x21, 0x1c, 0x30, 0xbd, 0xbb, 0x18, 0x30, 0xf7, 0xcc, 0x81, - 0x9d, 0xfa, 0x17, 0x7d, 0x08, 0x71, 0xe9, 0x4f, 0x1e, 0x6d, 0x0e, 0xf7, 0xa6, 0x35, 0x65, 0x34, - 0x36, 0x69, 0xad, 0xe8, 0x56, 0x83, 0x18, 0xe1, 0xb1, 0x65, 0x01, 0x86, 0x36, 0xf8, 0xf4, 0x12, - 0x8e, 0x0c, 0xcf, 0x2d, 0xb5, 0x78, 0x01, 0xfc, 0x24, 0x1a, 0xac, 0x58, 0x1e, 0x71, 0xf4, 0x86, - 0x67, 0xde, 0x21, 0x7c, 0x6a, 0x80, 0x9b, 0x61, 0x33, 0x04, 0x6b, 0x22, 0x0d, 0xbe, 0x86, 0x86, - 0xaa, 0xba, 0xe3, 0x99, 0x0d, 0xb3, 0xad, 0x5b, 0x9e, 0xab, 0xf4, 0xc3, 0x8c, 0x06, 0x16, 0x46, - 0x5b, 0x80, 0x6b, 0x12, 0x15, 0xfe, 0x08, 0x1a, 0x80, 0xad, 0x29, 0x38, 0x4e, 0x0f, 0x6c, 0x79, - 0x71, 0xf8, 0x50, 0xe8, 0x1e, 0xc8, 0x4e, 0x5f, 0xe1, 0x06, 0x38, 0x7a, 0x77, 0x18, 0x70, 0xc4, - 0x1f, 0x40, 0x7d, 0x93, 0x96, 0x01, 0xcc, 0xd1, 0x96, 0xcc, 0x55, 0xce, 0xfc, 0x64, 0xc8, 0xdc, - 0x6e, 0x47, 0x78, 0xfb, 0xec, 0x92, 0x47, 0xd9, 0xe0, 0xdb, 0x37, 0xca, 0x86, 0xde, 0x86, 0x63, - 0xf1, 0xe1, 0xfd, 0x3a, 0x16, 0x1f, 0xd9, 0xe5, 0xb1, 0xb8, 0xfa, 0x26, 0x1a, 0x1c, 0xaf, 0x4e, - 0x05, 0xa3, 0xf7, 0x34, 0xca, 0x55, 0xb9, 0xa7, 0x42, 0x9e, 0xd9, 0x33, 0x6d, 0xd3, 0xd0, 0x28, - 0x0c, 0x5f, 0x42, 0xfd, 0x13, 0xe0, 0xfe, 0xc6, 0x6f, 0x11, 0xf3, 0x6c, 0xfd, 0x6b, 0x00, 0x0c, - 0xbc, 0x60, 0x7d, 0x34, 0x7e, 0x04, 0xf5, 0x55, 0x1d, 0x7b, 0xd9, 0xd1, 0x5b, 0x7c, 0x0d, 0x06, - 0x57, 0x91, 0x36, 0x03, 0x69, 0x3e, 0x4e, 0xfd, 0xbe, 0x8c, 0x6f, 0xb6, 0xd3, 0x12, 0xb5, 0x0e, - 0x1c, 0xcd, 0x43, 0xdd, 0xfd, 0xac, 0x84, 0xcb, 0x40, 0x9a, 0x8f, 0xc3, 0x97, 0x50, 0xef, 0xa4, - 0xe3, 0xd8, 0x8e, 0xe8, 0x6c, 0x4e, 0x28, 0x40, 0xbc, 0xee, 0x05, 0x0a, 0xfc, 0x2c, 0x1a, 0x64, - 0x73, 0x0e, 0x3b, 0xd1, 0xcc, 0x75, 0xbb, 0x29, 0x15, 0x29, 0xd5, 0xaf, 0xe4, 0x04, 0x9b, 0x8d, - 0x49, 0xfc, 0x1e, 0xbc, 0x15, 0x78, 0x0a, 0xe5, 0xc6, 0xab, 0x53, 0x7c, 0x02, 0x3c, 0xee, 0x17, - 0x15, 0x54, 0x25, 0x52, 0x8e, 0x52, 0xe3, 0xb3, 0x28, 0x5f, 0xa5, 0xea, 0x53, 0x00, 0xf5, 0xe8, - 0xdf, 0xdc, 0x28, 0xe6, 0xdb, 0x54, 0x7f, 0x00, 0x0a, 0x58, 0xba, 0x99, 0x61, 0x3b, 0x26, 0x86, - 0x0d, 0xf7, 0x31, 0x67, 0x51, 0xbe, 0xe4, 0x2c, 0xdf, 0xe1, 0xb3, 0x16, 0x60, 0x75, 0x67, 0xf9, - 0x8e, 0x06, 0x50, 0x7c, 0x05, 0x21, 0x8d, 0x78, 0x1d, 0xc7, 0x82, 0x77, 0x20, 0x03, 0x70, 0xfe, - 0x06, 0xb3, 0xa1, 0x03, 0xd0, 0x7a, 0xc3, 0x36, 0x88, 0x26, 0x90, 0xa8, 0x3f, 0x15, 0x5e, 0xec, - 0x94, 0x4d, 0x77, 0xf5, 0xa8, 0x0b, 0x77, 0xd0, 0x85, 0x3a, 0x3f, 0xe2, 0x8c, 0x77, 0x52, 0x11, - 0xf5, 0x4e, 0x35, 0xf5, 0x65, 0x17, 0xfa, 0x90, 0xfb, 0x92, 0x2d, 0x51, 0x80, 0xc6, 0xe0, 0x91, - 0x7e, 0xea, 0xdf, 0xba, 0x9f, 0x7e, 0xb0, 0x37, 0x18, 0x6d, 0x73, 0xc4, 0x5b, 0xb3, 0x9d, 0xa3, - 0xae, 0xda, 0x6e, 0x57, 0x5d, 0x40, 0x7d, 0x35, 0xa7, 0x21, 0x1c, 0x5d, 0xc0, 0x7e, 0xc0, 0x75, - 0x1a, 0xec, 0xd8, 0xc2, 0x47, 0x52, 0xba, 0xb2, 0xeb, 0x01, 0x5d, 0x5f, 0x48, 0x67, 0xb8, 0x1e, - 0xa7, 0xe3, 0x48, 0x4e, 0x57, 0xb5, 0x1d, 0x8f, 0x77, 0x5c, 0x40, 0xd7, 0xb6, 0x1d, 0x4f, 0xf3, - 0x91, 0xf8, 0xbd, 0x08, 0x2d, 0x4c, 0x54, 0x7d, 0x67, 0xfb, 0x81, 0xd0, 0x17, 0x90, 0x7b, 0xd9, - 0x6b, 0x02, 0x1a, 0x2f, 0xa0, 0x81, 0xf9, 0x36, 0x71, 0xd8, 0x56, 0x88, 0xbd, 0xec, 0x78, 0x4f, - 0x44, 0xb4, 0xbc, 0xdf, 0x2f, 0xf3, 0xff, 0x03, 0x72, 0xb6, 0xbe, 0xd8, 0xfe, 0x4f, 0x2d, 0x64, - 0x84, 0x9f, 0x45, 0x85, 0x12, 0xb3, 0xf3, 0x06, 0x81, 0x65, 0x20, 0x32, 0xd8, 0x82, 0x32, 0x14, - 0xdb, 0xb3, 0xeb, 0xf0, 0xb7, 0xc6, 0xc9, 0xd5, 0x4b, 0x68, 0x34, 0x5a, 0x0d, 0x1e, 0x44, 0x7d, - 0x13, 0xf3, 0x73, 0x73, 0x93, 0x13, 0x0b, 0xa3, 0x3d, 0xb8, 0x1f, 0xe5, 0x6b, 0x93, 0x73, 0xe5, - 0xd1, 0x8c, 0xfa, 0x73, 0xc2, 0x0c, 0x42, 0x55, 0xeb, 0xe8, 0x6a, 0x78, 0x4f, 0xf7, 0x2d, 0xa3, - 0x70, 0x1f, 0x0a, 0x27, 0x06, 0x2d, 0xd3, 0xf3, 0x88, 0xc1, 0x57, 0x09, 0xb8, 0x2f, 0xf4, 0xee, - 0x6a, 0x31, 0x3c, 0x7e, 0x0c, 0x0d, 0x03, 0x8c, 0x5f, 0x11, 0xb2, 0xfd, 0x31, 0x2f, 0xe0, 0xdc, - 0xd5, 0x64, 0xa4, 0xfa, 0xd5, 0xf0, 0x76, 0x78, 0x86, 0xe8, 0x87, 0xf5, 0x46, 0xf1, 0x1d, 0xd2, - 0x5f, 0xea, 0x5f, 0xe5, 0xd9, 0x13, 0x10, 0xf6, 0x70, 0xef, 0x20, 0x44, 0x19, 0x1e, 0xe9, 0xe6, - 0x76, 0x70, 0xa4, 0xfb, 0x18, 0x2a, 0xcc, 0x12, 0x6f, 0xc5, 0xf6, 0x1d, 0xbf, 0xc0, 0x43, 0xaf, - 0x05, 0x10, 0xd1, 0x43, 0x8f, 0xd1, 0xe0, 0x55, 0x84, 0xfd, 0x57, 0x79, 0x81, 0x23, 0xb6, 0x7f, - 0x84, 0x7c, 0x2a, 0xb6, 0x4f, 0xa9, 0xc1, 0x93, 0x5c, 0xf0, 0xb1, 0x3f, 0x11, 0x38, 0x7a, 0x0b, - 0x9e, 0x58, 0x7f, 0xb9, 0x51, 0x2c, 0x30, 0x1a, 0x2d, 0x81, 0x2d, 0x7e, 0x0d, 0x0d, 0xcc, 0x4e, - 0x95, 0xf8, 0x0b, 0x3d, 0xe6, 0x15, 0x71, 0x3a, 0x90, 0xa2, 0x8f, 0x08, 0x44, 0x02, 0xef, 0x6d, - 0x5a, 0x4b, 0x7a, 0xfc, 0x81, 0x5e, 0xc8, 0x85, 0x6a, 0x0b, 0x7b, 0xb9, 0xc3, 0x4f, 0x17, 0x02, - 0x6d, 0x91, 0xdf, 0xf3, 0x44, 0x65, 0xc5, 0xb0, 0x11, 0x6d, 0xe9, 0xdf, 0xc3, 0xe8, 0x9e, 0x47, - 0x63, 0xa5, 0x76, 0xbb, 0x69, 0x12, 0x03, 0xf4, 0x45, 0xeb, 0x34, 0x89, 0xcb, 0x5d, 0x7e, 0xe0, - 0x31, 0x88, 0xce, 0x90, 0x75, 0x78, 0x17, 0x5a, 0x77, 0x3a, 0xb2, 0x7f, 0x66, 0xbc, 0xac, 0xfa, - 0x03, 0x59, 0x74, 0x72, 0xc2, 0x21, 0xba, 0x47, 0x66, 0xa7, 0x4a, 0xa5, 0x0e, 0xf8, 0xc8, 0x35, - 0x9b, 0xc4, 0x5a, 0x3e, 0x98, 0x61, 0xfd, 0x02, 0x1a, 0x09, 0x1a, 0x50, 0x6b, 0xd8, 0x6d, 0x22, - 0x3e, 0xac, 0x6a, 0xf8, 0x98, 0xba, 0x4b, 0x51, 0x5a, 0x84, 0x14, 0xdf, 0x40, 0xc7, 0x03, 0x48, - 0xa9, 0xd9, 0xb4, 0xd7, 0x34, 0xd2, 0x71, 0x99, 0x63, 0x6c, 0x3f, 0x73, 0x8c, 0x0d, 0x39, 0xe8, - 0x14, 0x5f, 0x77, 0x28, 0x81, 0x96, 0x54, 0x4a, 0xfd, 0x7c, 0x0e, 0x9d, 0xba, 0xa5, 0x37, 0x4d, - 0x23, 0x14, 0x8d, 0x46, 0xdc, 0xb6, 0x6d, 0xb9, 0xe4, 0x10, 0x8d, 0x52, 0x69, 0x28, 0xe4, 0xf7, - 0x65, 0x28, 0xc4, 0xbb, 0xa8, 0x77, 0xcf, 0x5d, 0x54, 0xd8, 0x55, 0x17, 0xfd, 0xa7, 0x0c, 0x1a, - 0xf5, 0x1d, 0xff, 0xc5, 0xd7, 0xd4, 0x82, 0x57, 0x3a, 0x1c, 0x21, 0x46, 0xfc, 0xa0, 0x01, 0x8f, - 0x6b, 0xa8, 0x6f, 0xf2, 0x6e, 0xdb, 0x74, 0x88, 0xbb, 0x0d, 0x27, 0xee, 0x73, 0xfc, 0xb8, 0x64, - 0x8c, 0xb0, 0x22, 0xb1, 0x93, 0x12, 0x06, 0x86, 0xe7, 0x7c, 0xec, 0xe9, 0xc3, 0xb8, 0xff, 0x44, - 0x9c, 0x3d, 0xe7, 0xe3, 0x4f, 0x24, 0xa4, 0xf7, 0x99, 0x21, 0x29, 0x7e, 0x08, 0xe5, 0x16, 0x16, - 0x66, 0xf8, 0x4c, 0x0a, 0x4f, 0xf3, 0x3d, 0x4f, 0x7c, 0xaf, 0x48, 0xb1, 0xea, 0x1f, 0x67, 0x11, - 0xa2, 0xaa, 0xc0, 0x86, 0xeb, 0x81, 0x28, 0xe1, 0x38, 0xea, 0xf7, 0x05, 0xce, 0xd5, 0x30, 0xf0, - 0xda, 0x8f, 0x76, 0x44, 0xb4, 0xee, 0xe0, 0x85, 0x46, 0xd1, 0x77, 0x24, 0x67, 0xf7, 0x00, 0xb0, - 0xb3, 0x01, 0x47, 0x72, 0xdf, 0x7d, 0xfc, 0xbd, 0x68, 0x80, 0xcf, 0x78, 0xb6, 0x74, 0xfe, 0xdf, - 0xf0, 0x81, 0x5a, 0x88, 0x8f, 0x4c, 0xad, 0x85, 0x3d, 0x2c, 0xc4, 0xbe, 0x78, 0x59, 0xaf, 0x1c, - 0x89, 0x77, 0x9f, 0xc5, 0xfb, 0x19, 0x2e, 0x5e, 0xf6, 0x82, 0xe7, 0xd0, 0x8a, 0x77, 0xdf, 0xce, - 0xbe, 0xd5, 0x3f, 0xc8, 0x20, 0x4c, 0x9b, 0x55, 0xd5, 0x5d, 0x77, 0xcd, 0x76, 0x0c, 0xe6, 0x9c, - 0x7e, 0x20, 0x82, 0xd9, 0xbf, 0xfb, 0xca, 0xaf, 0xf4, 0xa3, 0xe3, 0x92, 0xe3, 0xef, 0x21, 0x9f, - 0xac, 0x2e, 0xc9, 0xa3, 0xa9, 0xdb, 0xab, 0x97, 0x87, 0xc5, 0x0b, 0xd1, 0x5e, 0xe9, 0x01, 0x9a, - 0x70, 0x13, 0xfa, 0x38, 0x1a, 0xe2, 0x3f, 0xe8, 0x0a, 0xed, 0xdf, 0x74, 0xc1, 0x28, 0x75, 0x29, - 0x40, 0x93, 0xd0, 0xf8, 0x69, 0x34, 0x40, 0x07, 0xcc, 0x32, 0x44, 0xf1, 0xe8, 0x0b, 0x5f, 0x94, - 0x18, 0x3e, 0x50, 0x5c, 0x4f, 0x02, 0x4a, 0xe1, 0x1d, 0x51, 0xff, 0x36, 0xde, 0x11, 0x7d, 0x14, - 0x0d, 0x96, 0x2c, 0xcb, 0xf6, 0x60, 0x93, 0xee, 0xf2, 0xab, 0x89, 0x54, 0xab, 0xfc, 0x21, 0x78, - 0x1c, 0x1f, 0xd2, 0x27, 0x9a, 0xe5, 0x22, 0x43, 0x7c, 0xd5, 0x7f, 0x15, 0x43, 0x1c, 0xee, 0x55, - 0x0e, 0xd7, 0x33, 0x0e, 0x87, 0xc5, 0x1f, 0xc5, 0x40, 0xe7, 0x0d, 0x57, 0x1d, 0xbb, 0x6d, 0xbb, - 0xc4, 0x60, 0x82, 0x1a, 0x0c, 0x43, 0x0d, 0xb4, 0x39, 0x02, 0xde, 0xb1, 0x49, 0x11, 0x35, 0xa4, - 0x22, 0x78, 0x09, 0x9d, 0xf0, 0x2f, 0x8a, 0x83, 0x17, 0x83, 0x95, 0xb2, 0xab, 0x0c, 0xc1, 0xab, - 0x24, 0x1c, 0x55, 0x86, 0x4a, 0x79, 0xfc, 0xbc, 0x7f, 0x2d, 0xe2, 0x3f, 0x39, 0xac, 0x9b, 0x86, - 0xd8, 0xd5, 0x89, 0xfc, 0xf0, 0xb7, 0xa0, 0xc1, 0x59, 0xfd, 0x6e, 0xb9, 0xc3, 0xcf, 0x5e, 0x86, - 0xb7, 0x7f, 0xfb, 0xd2, 0xd2, 0xef, 0xd6, 0x0d, 0x5e, 0x2e, 0x62, 0x53, 0x88, 0x2c, 0x71, 0x1d, - 0x9d, 0xac, 0x3a, 0x76, 0xcb, 0xf6, 0x88, 0x11, 0x79, 0x7c, 0x77, 0x2c, 0x7c, 0xad, 0xdb, 0xe6, - 0x14, 0xf5, 0x2e, 0xaf, 0xf0, 0x52, 0xd8, 0xe0, 0x16, 0x3a, 0x56, 0x72, 0xdd, 0x4e, 0x8b, 0x84, - 0x37, 0x54, 0xa3, 0x5b, 0x7e, 0xc6, 0x7b, 0xb8, 0xd7, 0xf2, 0xfd, 0x3a, 0x14, 0x65, 0x17, 0x54, - 0x75, 0xcf, 0x14, 0x6b, 0x84, 0x6f, 0x89, 0xf2, 0x7e, 0x35, 0xdf, 0x3f, 0x32, 0x7a, 0x4c, 0x3b, - 0x15, 0x6f, 0xcc, 0x82, 0xe9, 0x35, 0x89, 0xfa, 0xe5, 0x0c, 0x42, 0xa1, 0x80, 0xf1, 0xe3, 0x72, - 0xa8, 0xa0, 0x4c, 0x78, 0xd1, 0xc1, 0xa3, 0x17, 0x48, 0xb1, 0x81, 0xf0, 0x59, 0x94, 0x87, 0x08, - 0x17, 0xd9, 0xf0, 0x60, 0x75, 0xd5, 0xb4, 0x0c, 0x0d, 0xa0, 0x14, 0x2b, 0x3c, 0x45, 0x07, 0x2c, - 0x5c, 0xea, 0x33, 0xab, 0xb0, 0x8c, 0x8e, 0xd5, 0x3a, 0x8b, 0x7e, 0xdd, 0xc2, 0xbb, 0x3a, 0x08, - 0xb4, 0xe1, 0x76, 0x16, 0x83, 0xc7, 0xa8, 0x52, 0x18, 0x13, 0xb9, 0x88, 0xfa, 0x85, 0x4c, 0x64, - 0x16, 0x3c, 0xc0, 0x45, 0xef, 0xe1, 0xb8, 0x9f, 0x46, 0x7c, 0x5a, 0x52, 0xff, 0x56, 0x16, 0x0d, - 0x56, 0x6d, 0xc7, 0xe3, 0x21, 0x43, 0x0e, 0xf7, 0x2a, 0x24, 0xec, 0x95, 0xf2, 0x3b, 0xd8, 0x2b, - 0x9d, 0x45, 0x79, 0xc1, 0x45, 0x99, 0xdd, 0x8b, 0x18, 0x86, 0xa3, 0x01, 0x54, 0xfd, 0xd6, 0x2c, - 0x42, 0x1f, 0x78, 0xf2, 0xc9, 0x7b, 0x58, 0x40, 0xea, 0x8f, 0x66, 0xd0, 0x31, 0x7e, 0x51, 0x27, - 0x04, 0xdd, 0xea, 0xf3, 0xaf, 0x58, 0xc5, 0x71, 0xc9, 0x40, 0x9a, 0x8f, 0xa3, 0x4b, 0xc0, 0xe4, - 0x5d, 0xd3, 0x83, 0xbb, 0x0a, 0x21, 0xea, 0x16, 0xe1, 0x30, 0x71, 0x09, 0xf0, 0xe9, 0xf0, 0xe3, - 0xfe, 0x15, 0x64, 0x2e, 0x5c, 0xf7, 0x68, 0x81, 0xc9, 0xc4, 0x6b, 0x48, 0xf5, 0x8b, 0x79, 0x94, - 0x9f, 0xbc, 0x4b, 0x1a, 0x87, 0xbc, 0x6b, 0x84, 0x83, 0xcd, 0xfc, 0x1e, 0x0f, 0x36, 0x77, 0xe3, - 0x53, 0xf1, 0x72, 0xd8, 0x9f, 0x05, 0xb9, 0xfa, 0x48, 0xcf, 0x47, 0xab, 0xf7, 0x7b, 0xfa, 0xf0, - 0xb9, 0xe4, 0xfc, 0x93, 0x1c, 0xca, 0xd5, 0x26, 0xaa, 0x47, 0x7a, 0x73, 0xa0, 0x7a, 0xd3, 0xfd, - 0xce, 0x5a, 0x0d, 0xae, 0xa1, 0xfa, 0x43, 0x2f, 0xd1, 0xc8, 0x8d, 0xd3, 0x37, 0x72, 0x68, 0xa4, - 0x36, 0xb5, 0x50, 0x15, 0x4e, 0x82, 0x6f, 0x30, 0x4f, 0x3e, 0xf0, 0x29, 0x63, 0x5d, 0x7a, 0x36, - 0x66, 0xcf, 0xdc, 0xac, 0x58, 0xde, 0x33, 0xd7, 0x6e, 0xe9, 0xcd, 0x0e, 0x81, 0xa3, 0x17, 0xe6, - 0xf7, 0xeb, 0x9a, 0x6f, 0x92, 0xcf, 0xc3, 0xc3, 0x7f, 0x9f, 0x01, 0x7e, 0x01, 0xe5, 0x6e, 0x72, - 0x8f, 0x8c, 0x34, 0x3e, 0x4f, 0x5d, 0x65, 0x7c, 0xe8, 0x24, 0x98, 0xeb, 0x98, 0x06, 0x70, 0xa0, - 0xa5, 0x68, 0xe1, 0xeb, 0x7c, 0x01, 0xde, 0x56, 0xe1, 0x65, 0xbf, 0xf0, 0xf5, 0x4a, 0x19, 0xd7, - 0xd0, 0x60, 0x95, 0x38, 0x2d, 0x13, 0x3a, 0xca, 0x9f, 0xb3, 0xbb, 0x33, 0xa1, 0x3b, 0x95, 0xc1, - 0x76, 0x58, 0x08, 0x98, 0x89, 0x5c, 0xf0, 0xeb, 0x08, 0x31, 0x1b, 0x65, 0x9b, 0x81, 0x1c, 0xcf, - 0x81, 0xdd, 0xcf, 0x4c, 0xcb, 0x04, 0x1b, 0x4f, 0x60, 0x86, 0x57, 0xd1, 0xe8, 0xac, 0x6d, 0x98, - 0x4b, 0x26, 0x73, 0xbd, 0x84, 0x0a, 0x0a, 0x5b, 0x3b, 0x3c, 0x51, 0x53, 0xb2, 0x25, 0x94, 0x4b, - 0xaa, 0x26, 0xc6, 0x58, 0xfd, 0x87, 0xbd, 0x28, 0x4f, 0xbb, 0xfd, 0x68, 0xfc, 0xee, 0x65, 0xfc, - 0x96, 0xd0, 0xe8, 0x6d, 0xdb, 0x59, 0x35, 0xad, 0xe5, 0xc0, 0x2b, 0x9e, 0xef, 0x4d, 0xc1, 0x93, - 0x67, 0x8d, 0xe1, 0xea, 0x81, 0x03, 0xbd, 0x16, 0x23, 0xdf, 0x62, 0x04, 0x3f, 0x87, 0x10, 0x7b, - 0xeb, 0x0e, 0x34, 0xfd, 0x61, 0xb0, 0x0a, 0xf6, 0x12, 0x1e, 0x1c, 0xed, 0xc5, 0x60, 0x15, 0x21, - 0x31, 0xdd, 0x84, 0x33, 0x5f, 0x88, 0x01, 0xf0, 0xbb, 0x87, 0x4d, 0x38, 0xf8, 0x42, 0x88, 0x46, - 0x00, 0xf3, 0x8a, 0xa8, 0x22, 0x24, 0xdc, 0x2f, 0xa1, 0x88, 0x20, 0xa4, 0xc9, 0x81, 0x87, 0x87, - 0x4b, 0xb8, 0x5e, 0xd2, 0x04, 0x1e, 0xf8, 0x99, 0xc8, 0x05, 0x38, 0x96, 0xb8, 0xa5, 0xde, 0x7f, - 0x87, 0x0e, 0x54, 0x43, 0x5b, 0x39, 0x50, 0xa9, 0x9f, 0xca, 0xa2, 0x81, 0x5a, 0x67, 0xd1, 0x5d, - 0x77, 0x3d, 0xd2, 0x3a, 0xe4, 0x6a, 0xec, 0x6f, 0xaf, 0xf2, 0x89, 0xdb, 0xab, 0x87, 0x7c, 0xa1, - 0x08, 0xe7, 0x8e, 0x81, 0x49, 0xe7, 0x8b, 0xe3, 0x97, 0xb3, 0x68, 0x94, 0x5d, 0x9c, 0x95, 0x4d, - 0xb7, 0xb1, 0x0f, 0xce, 0xfc, 0x07, 0x2f, 0x95, 0xbd, 0x5d, 0x36, 0x6f, 0xe3, 0x89, 0x84, 0xfa, - 0xf1, 0x2c, 0x1a, 0x2c, 0x75, 0xbc, 0x95, 0x92, 0x07, 0xba, 0x75, 0x4f, 0xee, 0x4f, 0x7e, 0x3b, - 0x83, 0x8e, 0xd1, 0x86, 0x2c, 0xd8, 0xab, 0xc4, 0xda, 0x87, 0x83, 0x47, 0xf1, 0x00, 0x31, 0xbb, - 0xcb, 0x03, 0x44, 0x5f, 0x96, 0xb9, 0x9d, 0xc9, 0x12, 0x8e, 0xcb, 0x35, 0xbb, 0x49, 0x0e, 0xf7, - 0x67, 0xec, 0xe3, 0x71, 0xb9, 0x2f, 0x90, 0x7d, 0xb8, 0x9e, 0x79, 0x77, 0x09, 0x64, 0x1f, 0xce, - 0x96, 0xde, 0x1d, 0x02, 0xf9, 0x4a, 0x06, 0x0d, 0x8c, 0xdb, 0xde, 0x21, 0x1f, 0xf8, 0xfc, 0x2b, - 0x0e, 0xb7, 0x9a, 0xfb, 0x5f, 0x71, 0xb8, 0x75, 0x53, 0xfd, 0xa1, 0x2c, 0x3a, 0xc1, 0x83, 0x74, - 0xf3, 0xf3, 0x87, 0xa3, 0xe9, 0x98, 0x0f, 0xb6, 0xb8, 0x68, 0x8e, 0xe6, 0x21, 0x2e, 0x9a, 0x9f, - 0xce, 0xa1, 0x13, 0x10, 0xca, 0x94, 0x6e, 0xcb, 0xde, 0x05, 0xb6, 0x08, 0x6e, 0xc8, 0x97, 0xa0, - 0xb3, 0x09, 0x97, 0xa0, 0x7f, 0xb9, 0x51, 0x7c, 0x66, 0xd9, 0xf4, 0x56, 0x3a, 0x8b, 0x97, 0x1b, - 0x76, 0xeb, 0xca, 0xb2, 0xa3, 0xdf, 0x31, 0xd9, 0xf5, 0x9f, 0xde, 0xbc, 0x12, 0xe4, 0xbb, 0xd0, - 0xdb, 0x26, 0xcf, 0x84, 0x51, 0x83, 0xbd, 0x0e, 0xe5, 0xea, 0x5f, 0x9f, 0xba, 0x08, 0xbd, 0x6a, - 0x9b, 0x16, 0xf7, 0x29, 0x64, 0x86, 0x6e, 0x8d, 0xee, 0x0f, 0xdf, 0xb0, 0x4d, 0xab, 0x1e, 0x75, - 0x2c, 0xdc, 0x69, 0x7d, 0x21, 0x6b, 0x4d, 0xa8, 0x46, 0xfd, 0x17, 0x19, 0x74, 0x5a, 0xd6, 0xe2, - 0x77, 0x83, 0xed, 0xf8, 0xc3, 0x59, 0x74, 0xdf, 0x75, 0x10, 0x4e, 0xe0, 0xc8, 0x71, 0x34, 0x6f, - 0xf1, 0xc1, 0x99, 0x20, 0x9b, 0x23, 0x8b, 0x32, 0x5d, 0x36, 0x47, 0x93, 0x3a, 0x97, 0xcd, 0x3f, - 0xcf, 0xa0, 0xe3, 0xf3, 0x95, 0xf2, 0xc4, 0xbb, 0x64, 0x44, 0xc5, 0xbf, 0xe7, 0x90, 0x1b, 0x9c, - 0xb1, 0xef, 0x39, 0xe4, 0xa6, 0x27, 0xfd, 0x9e, 0x5a, 0x69, 0x76, 0xe6, 0xdd, 0xa4, 0x6f, 0xd2, - 0xf7, 0xbc, 0x0b, 0xf4, 0x4d, 0xfa, 0x9e, 0x43, 0xae, 0x6f, 0xff, 0xb8, 0x80, 0x06, 0x6f, 0x74, - 0x16, 0x09, 0x77, 0x09, 0xb9, 0xa7, 0xcf, 0x5b, 0xaf, 0xa2, 0x41, 0x2e, 0x06, 0xb8, 0xab, 0x10, - 0x42, 0xd6, 0xf1, 0x10, 0x24, 0x2c, 0x2a, 0x90, 0x48, 0x84, 0xcf, 0xa2, 0xfc, 0x2d, 0xe2, 0x2c, - 0x8a, 0xaf, 0x39, 0xef, 0x10, 0x67, 0x51, 0x03, 0x28, 0x9e, 0x09, 0x1d, 0xd5, 0x4b, 0xd5, 0x0a, - 0xa4, 0x2f, 0xe1, 0xd7, 0x24, 0x90, 0x8f, 0x25, 0xf0, 0x36, 0xd3, 0xdb, 0x26, 0x4b, 0x7c, 0x22, - 0xbe, 0x24, 0x8f, 0x96, 0xc4, 0x73, 0x68, 0x4c, 0x74, 0x37, 0x62, 0xb9, 0x3b, 0xfa, 0x13, 0xd8, - 0x25, 0x65, 0xed, 0x88, 0x17, 0xc5, 0x2f, 0xa3, 0x21, 0x1f, 0x08, 0x8e, 0x53, 0x03, 0x61, 0xc0, - 0xf8, 0x80, 0x55, 0x24, 0x31, 0x90, 0x54, 0x40, 0x64, 0x00, 0x87, 0xff, 0x28, 0x81, 0x41, 0xc4, - 0x11, 0x4d, 0x2a, 0x80, 0x9f, 0x06, 0x06, 0xf0, 0xb8, 0x02, 0x5c, 0x44, 0x06, 0xe1, 0xa9, 0x23, - 0x38, 0xc2, 0x3b, 0x1c, 0xce, 0x1e, 0xb4, 0x4a, 0x64, 0x78, 0x1e, 0xa1, 0xf0, 0x2a, 0x9f, 0x87, - 0x0d, 0xd8, 0xb1, 0x93, 0x81, 0xc0, 0x42, 0xbc, 0x84, 0x1b, 0xde, 0xcd, 0x25, 0x9c, 0xfa, 0xfb, - 0x59, 0x34, 0x58, 0x6a, 0xb7, 0x83, 0xa1, 0xf0, 0x38, 0x2a, 0x94, 0xda, 0xed, 0x9b, 0x5a, 0x45, - 0x0c, 0x20, 0xae, 0xb7, 0xdb, 0xf5, 0x8e, 0x63, 0x8a, 0x9e, 0x98, 0x8c, 0x08, 0x4f, 0xa0, 0xe1, - 0x52, 0xbb, 0x5d, 0xed, 0x2c, 0x36, 0xcd, 0x86, 0x90, 0x8f, 0x88, 0xa5, 0x4e, 0x6b, 0xb7, 0xeb, - 0x6d, 0xc0, 0x44, 0x93, 0x52, 0xc9, 0x65, 0xf0, 0x47, 0x21, 0xd8, 0x0e, 0x4f, 0x87, 0xc3, 0x12, - 0x6e, 0xa8, 0x41, 0xe8, 0xf0, 0xb0, 0x6d, 0x97, 0x03, 0x22, 0x16, 0x62, 0xfd, 0xac, 0x1f, 0xa8, - 0x9e, 0x56, 0x14, 0x4b, 0x7b, 0x13, 0xb2, 0xc4, 0x4f, 0xa0, 0xbe, 0x52, 0xbb, 0x2d, 0xdc, 0xf2, - 0x80, 0x2b, 0x0f, 0x2d, 0x15, 0xe9, 0x63, 0x9f, 0xec, 0xcc, 0x8b, 0x68, 0x44, 0xae, 0x6c, 0x47, - 0x21, 0xda, 0xbf, 0x99, 0x81, 0x0f, 0x3a, 0xe4, 0x9e, 0xc4, 0x4f, 0xa1, 0x5c, 0xa9, 0xdd, 0xe6, - 0xf3, 0xd1, 0xf1, 0x84, 0xfe, 0x88, 0x3e, 0x3c, 0x2e, 0xb5, 0xdb, 0xfe, 0xa7, 0x1f, 0xf2, 0x27, - 0x09, 0xbb, 0xfa, 0xf4, 0xaf, 0xb0, 0x4f, 0x3f, 0xdc, 0xcf, 0x05, 0xd4, 0x2f, 0xe6, 0xd0, 0xb1, - 0x52, 0xbb, 0x7d, 0x14, 0xda, 0x7d, 0xbf, 0x9e, 0x37, 0x3f, 0x89, 0x90, 0x30, 0x3d, 0xf6, 0x05, - 0x0f, 0xa6, 0x06, 0x85, 0xa9, 0x51, 0xc9, 0x68, 0x02, 0x91, 0xaf, 0x7e, 0xfd, 0x3b, 0x52, 0xbf, - 0x8f, 0xe7, 0x60, 0x2a, 0x3e, 0xec, 0xa1, 0x9a, 0xde, 0x29, 0xdd, 0xc6, 0xfb, 0xa0, 0xb0, 0xa3, - 0x3e, 0xf8, 0x2d, 0x69, 0xf0, 0x40, 0xa8, 0xf0, 0xa3, 0x5e, 0xe8, 0xdd, 0x93, 0x59, 0x3c, 0x22, - 0x0a, 0x93, 0xc7, 0x8f, 0xf1, 0xd3, 0x17, 0xf1, 0x68, 0x46, 0x0d, 0x8a, 0xaa, 0x9b, 0x86, 0x16, - 0xa1, 0xf5, 0xfb, 0xb0, 0x6f, 0x47, 0x7d, 0xb8, 0x91, 0x85, 0x17, 0xcb, 0x41, 0x34, 0xa4, 0xbd, - 0xef, 0x2e, 0xae, 0x20, 0xc4, 0xee, 0xfb, 0x03, 0x67, 0xe2, 0x61, 0x16, 0xf8, 0x84, 0x65, 0x35, - 0xe2, 0x81, 0x4f, 0x42, 0x92, 0xc0, 0x2f, 0x29, 0x97, 0xe8, 0x97, 0x74, 0x09, 0xf5, 0x6b, 0xfa, - 0xda, 0x6b, 0x1d, 0xe2, 0xac, 0x73, 0x73, 0x86, 0x05, 0x1b, 0xd4, 0xd7, 0xea, 0x1f, 0xa3, 0x40, - 0x2d, 0x40, 0x63, 0x35, 0x78, 0xf2, 0x2e, 0xf8, 0x61, 0xb0, 0x93, 0xe9, 0xe0, 0xa1, 0xfb, 0x6e, - 0x14, 0x1d, 0x3f, 0x8f, 0x72, 0xa5, 0xdb, 0x35, 0x2e, 0xd9, 0xa0, 0x6b, 0x4b, 0xb7, 0x6b, 0x5c, - 0x5e, 0xa9, 0x65, 0x6f, 0xd7, 0xd4, 0x8f, 0x67, 0x11, 0x8e, 0x53, 0xe2, 0x67, 0xd0, 0x00, 0x40, - 0x97, 0xa9, 0xce, 0x88, 0xe9, 0x30, 0xd7, 0xdc, 0xba, 0x03, 0x50, 0xc9, 0xb8, 0xf3, 0x49, 0xf1, - 0x73, 0x90, 0xf9, 0x97, 0x27, 0x64, 0x93, 0xd2, 0x61, 0xae, 0xb9, 0x7e, 0xae, 0xdc, 0x48, 0xe2, - 0x5f, 0x4e, 0x0c, 0x76, 0xe1, 0xed, 0xda, 0xb4, 0xed, 0x7a, 0x5c, 0xd4, 0xcc, 0x2e, 0x5c, 0x73, - 0x21, 0x0f, 0xab, 0x64, 0x17, 0x32, 0x32, 0xc8, 0x25, 0x75, 0xbb, 0xc6, 0x1e, 0x87, 0x18, 0x9a, - 0xdd, 0xf4, 0x0d, 0x4a, 0x96, 0x4b, 0x6a, 0xcd, 0xad, 0xb3, 0x87, 0x25, 0x06, 0xa4, 0x1c, 0x96, - 0x72, 0x49, 0x49, 0xa5, 0xd4, 0x4f, 0xf7, 0xa3, 0xd1, 0xb2, 0xee, 0xe9, 0x8b, 0xba, 0x4b, 0x84, - 0xdd, 0xf4, 0x31, 0x1f, 0xe6, 0x7f, 0x8e, 0x20, 0x07, 0x63, 0x31, 0xe1, 0x6b, 0xa2, 0x05, 0xf0, - 0x0b, 0x21, 0xdf, 0x20, 0xd3, 0xa7, 0x98, 0x3a, 0x6c, 0xb1, 0xde, 0xe6, 0x60, 0x2d, 0x46, 0x88, - 0x1f, 0x43, 0x83, 0x3e, 0x8c, 0x6e, 0x00, 0x72, 0xa1, 0xce, 0x18, 0x8b, 0xd4, 0xfe, 0xd7, 0x44, - 0x34, 0x7e, 0x0e, 0x0d, 0xf9, 0x3f, 0x05, 0xd3, 0x9a, 0xe5, 0x41, 0x5b, 0x8c, 0xed, 0x9e, 0x44, - 0x52, 0xb1, 0x28, 0xcc, 0x6f, 0xbd, 0x52, 0xd1, 0x48, 0xaa, 0x31, 0x89, 0x14, 0x7f, 0x0c, 0x8d, - 0xf8, 0xbf, 0xf9, 0x86, 0x81, 0x65, 0x65, 0x7b, 0x2c, 0xc8, 0x68, 0x1c, 0x11, 0xeb, 0x65, 0x99, - 0x9c, 0x6d, 0x1d, 0xee, 0xf7, 0xb3, 0x67, 0x19, 0x8b, 0xf1, 0x9d, 0x43, 0xa4, 0x02, 0x5c, 0x41, - 0x63, 0x3e, 0x24, 0xd4, 0xd0, 0xbe, 0x70, 0xc7, 0x68, 0x2c, 0xd6, 0x13, 0x95, 0x34, 0x5e, 0x0a, - 0x37, 0xd1, 0x59, 0x09, 0x68, 0xb8, 0x2b, 0xe6, 0x92, 0xc7, 0xb7, 0x7b, 0x3c, 0xf2, 0x2f, 0x4f, - 0x97, 0x18, 0x70, 0x65, 0x34, 0x7e, 0xde, 0x53, 0x39, 0x27, 0x53, 0x57, 0x6e, 0xb8, 0x86, 0x4e, - 0xf8, 0xf8, 0xeb, 0x13, 0xd5, 0xaa, 0x63, 0xbf, 0x41, 0x1a, 0x5e, 0xa5, 0xcc, 0xb7, 0xcb, 0x10, - 0x11, 0xce, 0x58, 0xac, 0x2f, 0x37, 0xda, 0x54, 0x29, 0x28, 0x4e, 0x66, 0x9e, 0x58, 0x18, 0xdf, - 0x42, 0xf7, 0x09, 0xf0, 0x8a, 0xe5, 0x7a, 0xba, 0xd5, 0x20, 0x95, 0x32, 0xdf, 0x43, 0xc3, 0x7e, - 0x9e, 0x73, 0x35, 0x39, 0x52, 0x66, 0x9b, 0x5c, 0x1c, 0xbf, 0x88, 0x86, 0x7d, 0x04, 0xbb, 0xbb, - 0x1b, 0x84, 0xbb, 0x3b, 0x18, 0x92, 0xc6, 0x62, 0x3d, 0xfa, 0x86, 0x51, 0x26, 0x16, 0x35, 0x0a, - 0x12, 0xca, 0x0f, 0x49, 0x1a, 0xe5, 0xad, 0xb7, 0x13, 0x95, 0x11, 0x92, 0xcc, 0xbf, 0x1c, 0x6a, - 0xd4, 0xbc, 0x63, 0x2e, 0x9b, 0x6c, 0x27, 0xed, 0x3f, 0x5b, 0x5c, 0xac, 0xdb, 0x00, 0x4c, 0xd2, - 0x0f, 0x46, 0x7e, 0xa6, 0x84, 0x8e, 0x27, 0xe8, 0xd8, 0x8e, 0x76, 0x8c, 0x9f, 0xca, 0x86, 0x8d, - 0x38, 0xe4, 0xdb, 0xc6, 0x71, 0xd4, 0xef, 0x7f, 0x09, 0x37, 0x1e, 0x94, 0xb4, 0xa1, 0x19, 0xe5, - 0xe1, 0xe3, 0x25, 0x71, 0x1c, 0xf2, 0xad, 0xe4, 0x7e, 0x88, 0xe3, 0xad, 0x4c, 0x28, 0x8e, 0x43, - 0xbe, 0xbd, 0xfc, 0x9e, 0x7c, 0x38, 0x27, 0x1d, 0xed, 0x31, 0xf7, 0xcb, 0x4c, 0x0e, 0xbd, 0x4f, - 0x0b, 0x3b, 0x78, 0x3e, 0x28, 0xaa, 0x66, 0xdf, 0xee, 0x54, 0x13, 0xbf, 0x88, 0x06, 0xab, 0xb6, - 0xeb, 0x2d, 0x3b, 0xc4, 0xad, 0x06, 0x91, 0xeb, 0xe1, 0xe9, 0x69, 0x9b, 0x83, 0xeb, 0x6d, 0x69, - 0xf6, 0x17, 0xc9, 0xd5, 0x3f, 0xcc, 0xc5, 0xb4, 0x81, 0x19, 0xae, 0x87, 0x52, 0x1b, 0xf6, 0x61, - 0xa8, 0xe3, 0xab, 0xe1, 0x2a, 0xc8, 0x2c, 0xfc, 0x5e, 0x21, 0x2c, 0xdf, 0x22, 0x37, 0xf0, 0x65, - 0x12, 0xfc, 0x21, 0x74, 0x4a, 0x02, 0x54, 0x75, 0x47, 0x6f, 0x11, 0x2f, 0xcc, 0x12, 0x08, 0x81, - 0x96, 0xfc, 0xd2, 0xf5, 0x76, 0x80, 0x16, 0x33, 0x0f, 0xa6, 0x70, 0x10, 0x54, 0xab, 0x6f, 0x07, - 0x8e, 0xcd, 0x7f, 0x94, 0x47, 0x4a, 0x60, 0x5e, 0x06, 0x4f, 0x78, 0x0e, 0x70, 0x2a, 0x7f, 0x47, - 0x74, 0xae, 0x89, 0xc6, 0x42, 0x61, 0xd4, 0x3a, 0xad, 0x96, 0x0e, 0x1d, 0x4c, 0xcd, 0xd7, 0x62, - 0x94, 0x59, 0x48, 0xc8, 0x2c, 0xd6, 0x33, 0xdc, 0x62, 0xc5, 0xe1, 0x13, 0xa9, 0xba, 0xcb, 0x58, - 0x68, 0x71, 0xae, 0xf8, 0x33, 0x19, 0x74, 0xa2, 0xb4, 0xb4, 0x44, 0x1a, 0x1e, 0x31, 0xe6, 0x17, - 0xa9, 0xe9, 0x36, 0x61, 0x77, 0x2c, 0xcf, 0xb7, 0x96, 0x9f, 0x4f, 0xaf, 0x8e, 0x75, 0xd2, 0xe5, - 0xa4, 0xc2, 0xac, 0x25, 0x41, 0xc8, 0x01, 0x9d, 0x93, 0xd4, 0x6d, 0xa0, 0xa9, 0x37, 0x80, 0x48, - 0x4b, 0xac, 0xf7, 0xcc, 0x75, 0x74, 0x3a, 0x95, 0xe5, 0x56, 0xa6, 0x52, 0xaf, 0x68, 0x2a, 0xfd, - 0xab, 0x4c, 0xa8, 0xee, 0x11, 0x21, 0xe1, 0xcb, 0x08, 0x85, 0x20, 0xbe, 0x79, 0x1a, 0xd9, 0xdc, - 0x28, 0xa2, 0x50, 0x68, 0x9a, 0x40, 0x81, 0xe7, 0x51, 0x81, 0x8b, 0x85, 0xe5, 0x7d, 0x7d, 0xef, - 0x16, 0xbd, 0x70, 0x59, 0x94, 0x03, 0x6c, 0x8c, 0xf8, 0x37, 0x73, 0x36, 0x67, 0x9e, 0x43, 0x83, - 0xbb, 0xfd, 0xae, 0xcf, 0xe4, 0x10, 0x16, 0x77, 0x3a, 0x07, 0x68, 0x06, 0xbe, 0x23, 0x06, 0xcb, - 0xee, 0xf2, 0xb6, 0x5c, 0x44, 0xfd, 0xf4, 0x13, 0x20, 0x13, 0x82, 0x10, 0xf9, 0xb4, 0xc3, 0x61, - 0x5a, 0x80, 0x0d, 0xc3, 0x0e, 0xf5, 0x25, 0x87, 0x1d, 0x52, 0xbf, 0x3f, 0x87, 0x4e, 0x8a, 0x1d, - 0x52, 0x26, 0x10, 0x4c, 0xfd, 0xa8, 0x53, 0xde, 0xc6, 0x4e, 0x51, 0x51, 0x81, 0x19, 0xb8, 0x3c, - 0xaa, 0x3d, 0x3b, 0x7c, 0x00, 0x88, 0xc6, 0x31, 0xea, 0xbf, 0xcf, 0xa2, 0xe1, 0xc0, 0x88, 0xd0, - 0x1d, 0xf7, 0x1e, 0xee, 0x8e, 0xf7, 0xa1, 0x61, 0x08, 0x1c, 0xd3, 0x22, 0x16, 0x0b, 0xae, 0xd2, - 0x2b, 0xa4, 0xa1, 0xf0, 0x11, 0x3c, 0xe3, 0x90, 0x44, 0x48, 0xb5, 0x9f, 0xd9, 0x17, 0x42, 0x38, - 0x1f, 0x66, 0x5c, 0x30, 0xb8, 0xfa, 0x13, 0x39, 0x34, 0xe4, 0x4b, 0x79, 0xdc, 0x3c, 0xac, 0xb7, - 0x09, 0x07, 0x2b, 0xe4, 0x2b, 0x08, 0x55, 0x6d, 0xc7, 0xd3, 0x9b, 0x73, 0xa1, 0xe6, 0xc3, 0x31, - 0x5c, 0x1b, 0xa0, 0xac, 0x8c, 0x40, 0x02, 0xeb, 0x57, 0x68, 0xbc, 0xb1, 0x89, 0x89, 0xad, 0x5f, - 0x01, 0x54, 0x13, 0x28, 0xd4, 0xdf, 0xc8, 0xa2, 0x63, 0x7e, 0x27, 0x4d, 0xde, 0x25, 0x8d, 0xce, - 0xbd, 0x3c, 0x37, 0xc9, 0xd2, 0xee, 0xdd, 0x52, 0xda, 0xea, 0x7f, 0x15, 0x26, 0x92, 0x89, 0xa6, - 0x7d, 0x34, 0x91, 0xfc, 0x75, 0xe8, 0xb8, 0xfa, 0xed, 0x39, 0x74, 0xc2, 0x97, 0xfa, 0x54, 0xc7, - 0x82, 0x0d, 0xec, 0x84, 0xde, 0x6c, 0xde, 0xcb, 0x7b, 0xbe, 0x41, 0x5f, 0x10, 0xf3, 0x3c, 0x12, - 0x1b, 0xcf, 0xfe, 0xb6, 0xc4, 0xc1, 0x75, 0xdb, 0x34, 0x34, 0x91, 0x08, 0xbf, 0x8c, 0x86, 0xfc, - 0x9f, 0x25, 0x67, 0xd9, 0xdf, 0xe8, 0xc1, 0x71, 0x74, 0x50, 0x48, 0x77, 0xa4, 0x07, 0xe7, 0x52, - 0x01, 0xf5, 0x3f, 0x16, 0xd0, 0x99, 0xdb, 0xa6, 0x65, 0xd8, 0x6b, 0xae, 0x9f, 0x3c, 0xf0, 0xd0, - 0x1f, 0xc7, 0x1c, 0x74, 0xd2, 0xc0, 0xd7, 0xd0, 0x7d, 0x51, 0x91, 0x3a, 0x41, 0x48, 0x67, 0xde, - 0x3b, 0x6b, 0x8c, 0xa0, 0xee, 0xa7, 0x11, 0xe4, 0x77, 0x3a, 0x5a, 0x72, 0xc9, 0x68, 0x1e, 0xc2, - 0xbe, 0xed, 0xe4, 0x21, 0x7c, 0x14, 0x15, 0xca, 0x76, 0x4b, 0x37, 0xfd, 0xd0, 0x23, 0x30, 0x8a, - 0x83, 0x7a, 0x01, 0xa3, 0x71, 0x0a, 0xca, 0x9f, 0x57, 0x0c, 0x5d, 0x36, 0x10, 0xf2, 0xf7, 0x0b, - 0x50, 0x2b, 0x4d, 0x13, 0x89, 0xb0, 0x8d, 0x86, 0x79, 0x75, 0xfc, 0x06, 0x06, 0xc1, 0xe6, 0xe9, - 0x69, 0x5f, 0x46, 0xe9, 0x6a, 0x75, 0x59, 0x2a, 0xc7, 0xb6, 0x51, 0x2c, 0x3d, 0x22, 0xff, 0x18, - 0x76, 0x17, 0xa3, 0xc9, 0xfc, 0x05, 0x21, 0xc0, 0x24, 0x33, 0x18, 0x17, 0x02, 0xcc, 0x32, 0x22, - 0x11, 0x9e, 0x44, 0x63, 0x10, 0x78, 0x37, 0xd8, 0x4a, 0x51, 0x95, 0x18, 0x02, 0xa3, 0x12, 0x0e, - 0xf6, 0x59, 0xac, 0x5e, 0xfa, 0x71, 0xf5, 0x06, 0x47, 0x6b, 0xf1, 0x12, 0x67, 0x5e, 0x41, 0x38, - 0xde, 0xe6, 0x1d, 0x1d, 0xed, 0x7f, 0x3a, 0x1b, 0xee, 0xeb, 0x0e, 0xbb, 0x73, 0xc6, 0x7e, 0x1c, - 0x66, 0xff, 0x42, 0x06, 0x8d, 0xc5, 0x02, 0x39, 0xe3, 0xa7, 0x10, 0x62, 0x10, 0x21, 0x60, 0x1e, - 0x44, 0xa0, 0x08, 0x83, 0x3b, 0xf3, 0xa5, 0x24, 0x24, 0xc3, 0x57, 0x50, 0x3f, 0xfb, 0xc5, 0x83, - 0xdc, 0xc4, 0x8b, 0x74, 0x3a, 0xa6, 0xa1, 0x05, 0x44, 0x61, 0x2d, 0x70, 0x47, 0x94, 0x4b, 0x2c, - 0xe2, 0xad, 0xb7, 0x83, 0x5a, 0x28, 0x19, 0xed, 0xc0, 0xa1, 0xa0, 0xc1, 0x25, 0xe3, 0xa0, 0xba, - 0xae, 0xc0, 0x63, 0x62, 0xe7, 0xb6, 0x8a, 0x89, 0x1d, 0x99, 0x9b, 0x78, 0x10, 0xec, 0xfd, 0x7b, - 0x58, 0xf2, 0xd9, 0x2c, 0x3a, 0x16, 0xd4, 0x7a, 0x80, 0xd7, 0x11, 0xef, 0x20, 0x91, 0x7c, 0x26, - 0x83, 0x94, 0x71, 0xb3, 0xd9, 0x34, 0xad, 0xe5, 0x8a, 0xb5, 0x64, 0x3b, 0x2d, 0x98, 0x3c, 0x0e, - 0xee, 0xb8, 0x53, 0xfd, 0xae, 0x0c, 0x1a, 0xe3, 0x0d, 0x9a, 0xd0, 0x1d, 0xe3, 0xe0, 0xce, 0x92, - 0xa2, 0x2d, 0x39, 0x38, 0x7d, 0x51, 0xbf, 0x94, 0x45, 0x68, 0xc6, 0x6e, 0xac, 0x1e, 0xf2, 0x97, - 0x85, 0x2f, 0xa0, 0x02, 0x8b, 0x34, 0xc4, 0x35, 0x76, 0xec, 0x32, 0x7b, 0x30, 0x4a, 0x3f, 0x8d, - 0x21, 0xc6, 0x47, 0xf9, 0x09, 0x6d, 0x81, 0x45, 0x2a, 0x52, 0x32, 0x1a, 0x2f, 0x42, 0x2b, 0xa5, - 0x74, 0xdc, 0xaa, 0x09, 0x2a, 0xa5, 0x30, 0xb9, 0xd2, 0xcd, 0x8d, 0x62, 0xbe, 0x69, 0x37, 0x56, - 0x35, 0xa0, 0x57, 0xff, 0x2a, 0xc3, 0x64, 0x77, 0xc8, 0x5f, 0xd7, 0xf9, 0x9f, 0x9f, 0xdf, 0xe1, - 0xe7, 0x7f, 0x77, 0x06, 0x9d, 0xd0, 0x48, 0xc3, 0xbe, 0x43, 0x9c, 0xf5, 0x09, 0xdb, 0x20, 0xd7, - 0x89, 0x45, 0x9c, 0x83, 0x1a, 0x51, 0xff, 0x00, 0x92, 0x08, 0x84, 0x8d, 0xb9, 0xe9, 0x12, 0xe3, - 0xf0, 0x24, 0x78, 0x50, 0x7f, 0xa5, 0x0f, 0x29, 0x89, 0x16, 0xe2, 0xa1, 0xb5, 0x8a, 0x52, 0xcd, - 0xfe, 0xfc, 0x7e, 0x99, 0xfd, 0xbd, 0x3b, 0x33, 0xfb, 0x0b, 0x3b, 0x35, 0xfb, 0xfb, 0xb6, 0x63, - 0xf6, 0xb7, 0xa2, 0x66, 0x7f, 0x3f, 0x98, 0xfd, 0x4f, 0x75, 0x35, 0xfb, 0x27, 0x2d, 0x63, 0x97, - 0x46, 0xff, 0xa1, 0x4d, 0x3e, 0xba, 0x9b, 0xdd, 0xca, 0x45, 0x3a, 0x29, 0x36, 0x6c, 0xc7, 0x20, - 0x06, 0xdf, 0xa4, 0xc0, 0x09, 0xb9, 0xc3, 0x61, 0x5a, 0x80, 0x8d, 0x65, 0x72, 0x1d, 0xde, 0x4e, - 0x26, 0xd7, 0x7d, 0xd8, 0xc6, 0x7c, 0x2a, 0x8b, 0xc6, 0x26, 0x88, 0xe3, 0xb1, 0x50, 0x86, 0xfb, - 0xe1, 0xa4, 0x54, 0x42, 0xc7, 0x04, 0x86, 0x60, 0x91, 0x67, 0x43, 0xc7, 0xab, 0x06, 0x71, 0xbc, - 0xa8, 0xdf, 0x56, 0x94, 0x9e, 0x56, 0xef, 0x67, 0x53, 0xe2, 0x63, 0x37, 0xa8, 0xde, 0x87, 0x33, - 0x41, 0x9a, 0xfc, 0x97, 0x16, 0xd0, 0x0b, 0x09, 0x92, 0xf2, 0x3b, 0x4f, 0x90, 0xa4, 0xfe, 0x5c, - 0x06, 0x5d, 0xd0, 0x88, 0x45, 0xd6, 0xf4, 0xc5, 0x26, 0x11, 0x9a, 0xc5, 0x57, 0x06, 0x3a, 0x6b, - 0x98, 0x6e, 0x4b, 0xf7, 0x1a, 0x2b, 0x7b, 0x92, 0xd1, 0x14, 0x1a, 0x12, 0xe7, 0xaf, 0x1d, 0xcc, - 0x6d, 0x52, 0x39, 0xf5, 0xd7, 0x73, 0xa8, 0x6f, 0xdc, 0xf6, 0x5e, 0xb5, 0xf7, 0x98, 0xb1, 0x2b, - 0x9c, 0xf2, 0xb3, 0x3b, 0x38, 0x17, 0x79, 0x02, 0x2a, 0x17, 0x82, 0x98, 0x83, 0x53, 0xdf, 0xa2, - 0x1d, 0x0b, 0xf6, 0xee, 0x93, 0xed, 0x30, 0x57, 0xd7, 0x33, 0x68, 0x00, 0xa2, 0x60, 0x08, 0x27, - 0x97, 0xe0, 0x32, 0xeb, 0x51, 0x60, 0xb4, 0x8e, 0x90, 0x14, 0x7f, 0x48, 0x8a, 0xbd, 0x58, 0xd8, - 0x7b, 0x6e, 0x2f, 0x31, 0x0c, 0xe3, 0xbe, 0xa5, 0xd0, 0x52, 0xbf, 0x91, 0x47, 0x43, 0xbe, 0xa3, - 0xe4, 0x01, 0xf5, 0xe0, 0xe3, 0xa8, 0x30, 0x6d, 0x0b, 0x01, 0xd9, 0xc1, 0xb1, 0x72, 0xc5, 0x76, - 0x23, 0x1e, 0xa3, 0x9c, 0x08, 0x3f, 0x85, 0xfa, 0xe7, 0x6c, 0x43, 0x74, 0x0b, 0x86, 0x31, 0x6d, - 0xd9, 0x46, 0xec, 0x59, 0x65, 0x40, 0x88, 0x2f, 0xa0, 0x3c, 0x78, 0x54, 0x0b, 0x47, 0xcf, 0x11, - 0x2f, 0x6a, 0xc0, 0x0b, 0xba, 0x51, 0xd8, 0xa9, 0x6e, 0xf4, 0xed, 0x56, 0x37, 0xfa, 0xf7, 0x57, - 0x37, 0x5e, 0x47, 0x43, 0x50, 0x93, 0x9f, 0xcf, 0x69, 0xeb, 0xe5, 0xed, 0x34, 0x5f, 0x81, 0x86, - 0x59, 0xbb, 0x79, 0x56, 0x27, 0x58, 0x78, 0x24, 0x56, 0x11, 0xb5, 0x43, 0x7b, 0x50, 0xbb, 0x3f, - 0xcc, 0xa0, 0xbe, 0x9b, 0xd6, 0xaa, 0x65, 0xaf, 0xed, 0x4d, 0xe3, 0x9e, 0x42, 0x83, 0x9c, 0x8d, - 0x30, 0xc7, 0xc3, 0x4b, 0xd9, 0x0e, 0x03, 0xd7, 0x81, 0x93, 0x26, 0x52, 0xe1, 0x17, 0x83, 0x42, - 0xf0, 0x68, 0x22, 0x17, 0xa6, 0x34, 0xf0, 0x0b, 0x35, 0xe4, 0x28, 0xec, 0x22, 0x39, 0x3e, 0x8b, - 0xf2, 0x65, 0xda, 0x54, 0x21, 0xa6, 0x27, 0x6d, 0x8a, 0x06, 0x50, 0xf5, 0x9f, 0x65, 0xd1, 0x48, - 0xe4, 0xf8, 0xe9, 0x51, 0x34, 0xc0, 0x8f, 0x7f, 0x4c, 0x3f, 0x2c, 0x3c, 0x3c, 0xaa, 0x08, 0x80, - 0x5a, 0x3f, 0xfb, 0xb3, 0x62, 0xe0, 0xf7, 0xa3, 0x3e, 0xdb, 0x85, 0xa5, 0x09, 0xbe, 0x65, 0x24, - 0x1c, 0x42, 0xf3, 0x35, 0xda, 0x76, 0x36, 0x38, 0x38, 0x89, 0xa8, 0x91, 0xb6, 0x0b, 0x9f, 0x76, - 0x0d, 0x0d, 0xe8, 0xae, 0x4b, 0xbc, 0xba, 0xa7, 0x2f, 0x8b, 0x91, 0xe2, 0x03, 0xa0, 0x38, 0x3a, - 0x00, 0xb8, 0xa0, 0x2f, 0xe3, 0x57, 0xd0, 0x70, 0xc3, 0x21, 0xb0, 0x78, 0xe9, 0x4d, 0xda, 0x4a, - 0xc1, 0xb8, 0x94, 0x10, 0xe2, 0x89, 0x7f, 0x88, 0xa8, 0x18, 0xf8, 0x16, 0x1a, 0xe6, 0x9f, 0xc3, - 0x3c, 0x9a, 0x61, 0xa0, 0x8d, 0x84, 0x8b, 0x09, 0x13, 0x09, 0xf3, 0x69, 0xe6, 0x8e, 0xed, 0x22, - 0xb9, 0xc8, 0xd7, 0x10, 0x48, 0xd5, 0xaf, 0x66, 0xa8, 0xc1, 0x43, 0x01, 0x90, 0x61, 0x95, 0xea, - 0x4a, 0x6b, 0x87, 0xba, 0xd2, 0x0a, 0x73, 0xa1, 0x15, 0xdc, 0x2e, 0xb3, 0x93, 0xc6, 0xb1, 0xf8, - 0x32, 0x2a, 0x18, 0xe2, 0xd9, 0xcf, 0x49, 0xf9, 0x23, 0xfc, 0x7a, 0x34, 0x4e, 0x85, 0x2f, 0xa2, - 0x3c, 0x35, 0x68, 0xa3, 0x1b, 0x3f, 0x71, 0x8d, 0xd4, 0x80, 0x42, 0xfd, 0xd6, 0x2c, 0x1a, 0x12, - 0xbe, 0xe6, 0xea, 0x9e, 0x3e, 0xe7, 0xf9, 0xed, 0x35, 0xd3, 0x77, 0x73, 0x80, 0x1d, 0x81, 0xdf, - 0xe4, 0x6b, 0x81, 0x28, 0xb6, 0x75, 0x05, 0xc1, 0x05, 0xf3, 0x0c, 0xff, 0xd0, 0xc2, 0xf6, 0x37, - 0x41, 0x94, 0xfe, 0xd5, 0x7c, 0x7f, 0x76, 0x34, 0xf7, 0x6a, 0xbe, 0x3f, 0x3f, 0xda, 0x0b, 0x51, - 0x75, 0x20, 0x90, 0x2d, 0xdb, 0x61, 0x5a, 0x4b, 0xe6, 0xf2, 0x21, 0xf7, 0x49, 0xdf, 0xdf, 0x88, - 0x43, 0x11, 0xd9, 0x1c, 0x72, 0x07, 0xf5, 0xb7, 0x55, 0x36, 0x47, 0xb9, 0xd3, 0xb8, 0x6c, 0xfe, - 0x28, 0x83, 0x94, 0x44, 0xd9, 0x94, 0x0e, 0xe8, 0xe6, 0x7b, 0xff, 0x32, 0xa8, 0x7d, 0x3d, 0x8b, - 0xc6, 0x2a, 0x96, 0x47, 0x96, 0xd9, 0xbe, 0xe7, 0x90, 0x4f, 0x15, 0x37, 0xd0, 0xa0, 0xf0, 0x31, - 0xbc, 0xcf, 0xef, 0x0f, 0x76, 0x95, 0x21, 0x2a, 0x85, 0x93, 0x58, 0x7a, 0x1f, 0x93, 0x2e, 0x47, - 0x84, 0x7c, 0xc8, 0xe7, 0x9c, 0xc3, 0x21, 0xe4, 0x43, 0x3e, 0x79, 0xbd, 0x43, 0x85, 0xfc, 0x9f, - 0x33, 0xe8, 0x78, 0x42, 0xe5, 0xf8, 0x02, 0xea, 0xab, 0x75, 0x16, 0x21, 0x9c, 0x4f, 0x26, 0xf4, - 0x11, 0x75, 0x3b, 0x8b, 0x10, 0xc9, 0x47, 0xf3, 0x91, 0x78, 0x01, 0x1e, 0xed, 0xce, 0x57, 0xca, - 0x13, 0x5c, 0xaa, 0xaa, 0xf0, 0xfc, 0x98, 0x82, 0x93, 0xbe, 0x2c, 0x78, 0xd8, 0x6b, 0x9b, 0x46, - 0x23, 0xf2, 0xb0, 0x97, 0x96, 0xc1, 0x1f, 0x46, 0x03, 0xa5, 0x37, 0x3b, 0x0e, 0x01, 0xbe, 0x4c, - 0xe2, 0x0f, 0x07, 0x7c, 0x7d, 0x44, 0x12, 0x67, 0xf6, 0x46, 0x99, 0x52, 0x44, 0x79, 0x87, 0x0c, - 0xd5, 0x4f, 0x67, 0xd0, 0x99, 0xf4, 0xd6, 0xe1, 0x27, 0x50, 0x1f, 0xdd, 0xd9, 0x96, 0xb4, 0x39, - 0xfe, 0xe9, 0x2c, 0xdb, 0xa0, 0xdd, 0x24, 0x75, 0xdd, 0x11, 0x0d, 0x6f, 0x9f, 0x0c, 0xbf, 0x84, - 0x06, 0x2b, 0xae, 0xdb, 0x21, 0x4e, 0xed, 0xa9, 0x9b, 0x5a, 0x85, 0xef, 0xa9, 0xc0, 0x66, 0x37, - 0x01, 0x5c, 0x77, 0x9f, 0x8a, 0x04, 0xec, 0x11, 0xe9, 0xd5, 0x4f, 0x64, 0xd0, 0xd9, 0x6e, 0x5f, - 0x45, 0x37, 0xf0, 0x0b, 0xc4, 0xd2, 0x2d, 0xba, 0xe3, 0xcf, 0x84, 0x5b, 0x14, 0x0f, 0x60, 0xf2, - 0x26, 0x23, 0x20, 0xa4, 0x85, 0xd8, 0xe9, 0x58, 0x70, 0x1d, 0xcf, 0x4e, 0xf2, 0x00, 0x16, 0x29, - 0xe4, 0x13, 0xaa, 0xbf, 0x9b, 0x45, 0x43, 0xd5, 0x66, 0x67, 0xd9, 0x14, 0x16, 0x8e, 0x5d, 0xdb, - 0xdb, 0xbe, 0xf5, 0x9b, 0xdd, 0x99, 0xf5, 0x4b, 0x87, 0x9b, 0xb3, 0xcb, 0xe1, 0xe6, 0x97, 0xc3, - 0x2f, 0xa2, 0x42, 0x1b, 0xbe, 0x23, 0x7a, 0x9e, 0xc8, 0xbe, 0x2e, 0xed, 0x3c, 0x91, 0x95, 0xa1, - 0xe3, 0xab, 0xb1, 0x87, 0xf1, 0x15, 0x96, 0x15, 0x04, 0x1a, 0x2e, 0x12, 0x47, 0x02, 0xdd, 0x17, - 0x81, 0x86, 0x0b, 0xc2, 0x91, 0x40, 0xf7, 0x20, 0xd0, 0x5f, 0xc9, 0xa2, 0x11, 0xb9, 0x4a, 0xfc, - 0x04, 0x1a, 0x64, 0xd5, 0xb0, 0x73, 0x95, 0x8c, 0xe0, 0x46, 0x1a, 0x82, 0x35, 0xc4, 0x7e, 0xf0, - 0x03, 0xa2, 0x63, 0x2b, 0xba, 0x5b, 0x0f, 0x4f, 0x38, 0xd8, 0x2d, 0x64, 0x3f, 0xf3, 0xe7, 0x89, - 0xa0, 0xb4, 0x91, 0x15, 0xdd, 0x9d, 0x08, 0x7f, 0xe3, 0x49, 0x84, 0x21, 0x4d, 0xbb, 0xcc, 0x80, - 0xe5, 0xdd, 0xe7, 0xa9, 0x5e, 0xa3, 0x58, 0x6d, 0x8c, 0xc1, 0x44, 0x36, 0x1f, 0x09, 0x9a, 0x0d, - 0xca, 0xd0, 0xbb, 0x8d, 0x3c, 0xb4, 0x02, 0x7d, 0xf2, 0x31, 0x21, 0x23, 0x28, 0xeb, 0x9e, 0xce, - 0x36, 0xe5, 0x7e, 0x07, 0xa8, 0x7f, 0x66, 0xa2, 0xde, 0x79, 0x8b, 0xcc, 0x2f, 0xe1, 0x27, 0xd1, - 0x00, 0x55, 0x98, 0x19, 0x9b, 0xf6, 0x65, 0x86, 0x7b, 0x01, 0x08, 0x9a, 0x04, 0x88, 0xe9, 0x1e, - 0x2d, 0xa4, 0xc2, 0xd7, 0xc4, 0x4c, 0xec, 0x5c, 0xfb, 0xb0, 0x58, 0x86, 0x61, 0xa6, 0x7b, 0x34, - 0x31, 0x63, 0xfb, 0x35, 0x31, 0x03, 0x36, 0xd7, 0x3b, 0xa9, 0x14, 0xc3, 0xf8, 0xa5, 0xf8, 0xf8, - 0x98, 0x49, 0x4a, 0x13, 0x1d, 0xdd, 0x3d, 0xc5, 0x29, 0xa6, 0x7b, 0xb4, 0xe4, 0xf4, 0xd2, 0x43, - 0xa2, 0x0b, 0x61, 0xd4, 0x75, 0x41, 0xc4, 0x4d, 0xf7, 0x68, 0x12, 0x2d, 0x7e, 0x16, 0x0d, 0xf2, - 0xdf, 0xaf, 0xda, 0xa6, 0x15, 0x8d, 0x71, 0x22, 0xa0, 0xa6, 0x7b, 0x34, 0x91, 0x52, 0xa8, 0xb4, - 0xea, 0x98, 0x96, 0xc7, 0xdf, 0x3e, 0x46, 0x2b, 0x05, 0x9c, 0x50, 0x29, 0xfc, 0xc6, 0x2f, 0xa1, - 0xe1, 0x20, 0x78, 0xcc, 0x1b, 0xa4, 0xe1, 0xf1, 0xc3, 0xe3, 0xfb, 0x22, 0x85, 0x19, 0x72, 0xba, - 0x47, 0x93, 0xa9, 0xf1, 0x45, 0x54, 0xd0, 0x88, 0x6b, 0xbe, 0xe9, 0x5f, 0x7a, 0x8e, 0x08, 0xe3, - 0xdc, 0x7c, 0x93, 0x4a, 0x89, 0xe3, 0x69, 0xef, 0x84, 0xb7, 0xac, 0xfc, 0xa8, 0x17, 0x47, 0x6a, - 0x99, 0xb4, 0x0c, 0xda, 0x3b, 0xc2, 0x15, 0xfb, 0x2b, 0x61, 0x48, 0x1d, 0x9e, 0xfe, 0x6e, 0x30, - 0xfa, 0x76, 0x59, 0xc4, 0x4e, 0xf7, 0x68, 0x11, 0x7a, 0x41, 0xaa, 0x65, 0xd3, 0x5d, 0xe5, 0x51, - 0x0c, 0xa3, 0x52, 0xa5, 0x28, 0x41, 0xaa, 0xf4, 0xa7, 0x50, 0xf5, 0x1c, 0xf1, 0xd6, 0x6c, 0x67, - 0x95, 0xc7, 0x2c, 0x8c, 0x56, 0xcd, 0xb1, 0x42, 0xd5, 0x1c, 0x22, 0x56, 0x4d, 0x07, 0xdc, 0x48, - 0x72, 0xd5, 0xba, 0xa7, 0x8b, 0x55, 0xb3, 0x93, 0x38, 0xbf, 0x93, 0x66, 0x88, 0x7e, 0x87, 0x65, - 0x21, 0x8e, 0x77, 0x28, 0xe0, 0x84, 0x0e, 0x85, 0xdf, 0xb4, 0x52, 0x21, 0xd3, 0x2c, 0x4f, 0x33, - 0x1c, 0x54, 0x2a, 0xa0, 0x68, 0xa5, 0x62, 0x4e, 0xda, 0x6b, 0x62, 0x02, 0x56, 0x65, 0x4c, 0xee, - 0xa0, 0x10, 0x43, 0x3b, 0x48, 0x48, 0xd4, 0x5a, 0x84, 0xe4, 0x8e, 0x0a, 0x06, 0xf2, 0xc1, 0xa0, - 0x85, 0x13, 0xd5, 0xe9, 0x1e, 0x0d, 0xd2, 0x3e, 0xaa, 0x2c, 0x6d, 0xa8, 0x72, 0x1c, 0x28, 0x86, - 0x7c, 0x0a, 0x0a, 0x9b, 0xee, 0xd1, 0x58, 0x4a, 0xd1, 0x27, 0x85, 0x04, 0x5d, 0xca, 0x09, 0x79, - 0x8a, 0x08, 0x10, 0x74, 0x8a, 0x08, 0xd3, 0x78, 0x4d, 0xc5, 0x93, 0x58, 0x29, 0xf7, 0xc9, 0x4b, - 0x4d, 0x14, 0x3f, 0xdd, 0xa3, 0xc5, 0x13, 0x5f, 0x3d, 0x2b, 0xe5, 0x75, 0x52, 0x4e, 0x46, 0x02, - 0x0b, 0x85, 0x28, 0x2a, 0x2e, 0x31, 0x03, 0xd4, 0x7c, 0x62, 0x26, 0x76, 0xe5, 0x94, 0xbc, 0x71, - 0x49, 0x20, 0x99, 0xee, 0xd1, 0x12, 0x73, 0xb8, 0x4f, 0xc4, 0xb2, 0x2b, 0x29, 0x8a, 0xec, 0xe1, - 0x11, 0x41, 0x4f, 0xf7, 0x68, 0xb1, 0x7c, 0x4c, 0xd7, 0xc4, 0xb4, 0x46, 0xca, 0x69, 0xb9, 0x13, - 0x43, 0x0c, 0xed, 0x44, 0x21, 0xfd, 0xd1, 0x35, 0x31, 0xd5, 0x8d, 0x72, 0x26, 0x5e, 0x2a, 0x9c, - 0x39, 0x85, 0x94, 0x38, 0x5a, 0x72, 0xf6, 0x0e, 0xe5, 0x7e, 0x9e, 0x3f, 0x91, 0x97, 0x4f, 0xa2, - 0x99, 0xee, 0xd1, 0x92, 0x33, 0x7f, 0x68, 0xc9, 0x69, 0x2f, 0x94, 0xb3, 0xdd, 0x78, 0x06, 0xad, - 0x4b, 0x4e, 0x99, 0xa1, 0x77, 0x49, 0x42, 0xa0, 0x9c, 0x93, 0xa3, 0x9a, 0xa6, 0x12, 0x4e, 0xf7, - 0x68, 0x5d, 0x52, 0x19, 0xdc, 0x4c, 0xc9, 0x08, 0xa0, 0x9c, 0x97, 0xd3, 0xa7, 0x26, 0x12, 0x4d, - 0xf7, 0x68, 0x29, 0xf9, 0x04, 0x6e, 0xa6, 0x04, 0x8c, 0x57, 0x8a, 0x5d, 0xd9, 0x06, 0xf2, 0x48, - 0x09, 0x37, 0x3f, 0x9f, 0x18, 0x6b, 0x5d, 0x79, 0x40, 0x56, 0xdd, 0x04, 0x12, 0xaa, 0xba, 0x49, - 0x51, 0xda, 0xe7, 0x13, 0x83, 0x83, 0x2b, 0x0f, 0x76, 0x61, 0x18, 0xb4, 0x31, 0x31, 0xac, 0xf8, - 0x7c, 0x62, 0x74, 0x6e, 0x45, 0x95, 0x19, 0x26, 0x90, 0x50, 0x86, 0x49, 0x71, 0xbd, 0xe7, 0x13, - 0xc3, 0x49, 0x2b, 0x0f, 0x75, 0x61, 0x18, 0xb6, 0x30, 0x29, 0x10, 0xf5, 0xb3, 0x52, 0x3c, 0x67, - 0xe5, 0x61, 0x79, 0xde, 0x10, 0x50, 0x74, 0xde, 0x10, 0x23, 0x3f, 0x4f, 0xc4, 0x22, 0x56, 0x2a, - 0x8f, 0xc8, 0xc3, 0x3c, 0x82, 0xa6, 0xc3, 0x3c, 0x1a, 0xe3, 0x72, 0x22, 0x16, 0xb9, 0x4f, 0xb9, - 0x90, 0xc6, 0x04, 0xd0, 0x32, 0x13, 0x16, 0xeb, 0xaf, 0x92, 0x10, 0x3a, 0x4e, 0x79, 0x8f, 0xec, - 0x9d, 0x1c, 0x23, 0x98, 0xee, 0xd1, 0x12, 0x02, 0xce, 0x69, 0xc9, 0x71, 0x52, 0x94, 0x8b, 0xf2, - 0xb0, 0x4d, 0xa2, 0xa1, 0xc3, 0x36, 0x31, 0xc6, 0xca, 0x4c, 0xd2, 0x4b, 0x04, 0xe5, 0x92, 0x6c, - 0x98, 0xc5, 0x29, 0xa8, 0x61, 0x96, 0xf0, 0x82, 0x41, 0x4b, 0x8e, 0xdd, 0xa1, 0x3c, 0xda, 0xb5, - 0x85, 0x40, 0x93, 0xd0, 0x42, 0x16, 0xca, 0x22, 0xb4, 0x9d, 0x6e, 0xb6, 0x9b, 0xb6, 0x6e, 0x28, - 0xef, 0x4d, 0xb4, 0x9d, 0x18, 0x52, 0xb0, 0x9d, 0x18, 0x80, 0xae, 0xf2, 0xa2, 0xa7, 0xbe, 0xf2, - 0x98, 0xbc, 0xca, 0x8b, 0x38, 0xba, 0xca, 0x4b, 0x5e, 0xfd, 0x13, 0x31, 0xaf, 0x76, 0xe5, 0x71, - 0x59, 0x01, 0x22, 0x68, 0xaa, 0x00, 0x51, 0x3f, 0xf8, 0x8f, 0xa6, 0xfb, 0x81, 0x2b, 0x97, 0x81, - 0xdb, 0x03, 0x3e, 0xb7, 0x34, 0xba, 0xe9, 0x1e, 0x2d, 0xdd, 0x97, 0xbc, 0x92, 0xe0, 0xd6, 0xad, - 0x5c, 0x91, 0x15, 0x2c, 0x46, 0x40, 0x15, 0x2c, 0xee, 0x0c, 0x5e, 0x49, 0xf0, 0xcb, 0x56, 0x9e, - 0x48, 0x65, 0x15, 0x7c, 0x73, 0x82, 0x37, 0xf7, 0x35, 0xd1, 0xb1, 0x5a, 0x79, 0x52, 0x5e, 0xec, - 0x42, 0x0c, 0x5d, 0xec, 0x04, 0x07, 0xec, 0x6b, 0xa2, 0x4b, 0xb1, 0x72, 0x35, 0x5e, 0x2a, 0x5c, - 0x22, 0x05, 0xd7, 0x63, 0x2d, 0xd9, 0x13, 0x57, 0x79, 0x4a, 0xd6, 0xba, 0x24, 0x1a, 0xaa, 0x75, - 0x89, 0x5e, 0xbc, 0x53, 0x71, 0x87, 0x5a, 0xe5, 0x5a, 0x74, 0x93, 0x2d, 0xe3, 0xa9, 0xe5, 0x13, - 0x73, 0xc2, 0x7d, 0x25, 0x1a, 0xc4, 0x4b, 0x79, 0x3a, 0x72, 0xed, 0x2b, 0x61, 0xa9, 0x7d, 0x1b, - 0x09, 0xfa, 0xf5, 0x4a, 0x34, 0xee, 0x95, 0xf2, 0x4c, 0x32, 0x87, 0x40, 0x57, 0xa2, 0x71, 0xb2, - 0x5e, 0x89, 0x86, 0x8a, 0x52, 0x9e, 0x4d, 0xe6, 0x10, 0x48, 0x37, 0x1a, 0x5a, 0xea, 0x49, 0x21, - 0x78, 0xb5, 0xf2, 0x3e, 0xd9, 0x74, 0x0c, 0x10, 0xd4, 0x74, 0x0c, 0x43, 0x5c, 0x3f, 0x29, 0x04, - 0x7d, 0x56, 0x9e, 0x8b, 0x15, 0x09, 0x1a, 0x2b, 0x84, 0x86, 0x7e, 0x52, 0x08, 0x96, 0xac, 0x3c, - 0x1f, 0x2b, 0x12, 0xb4, 0x4e, 0x08, 0xa9, 0x6c, 0x74, 0x7b, 0xb1, 0xa8, 0xbc, 0x20, 0x1f, 0x06, - 0xa7, 0x53, 0x4e, 0xf7, 0x68, 0xdd, 0x5e, 0x3e, 0x7e, 0x34, 0xdd, 0x3d, 0x59, 0x79, 0x51, 0x1e, - 0xc2, 0x69, 0x74, 0x74, 0x08, 0xa7, 0xba, 0x38, 0xbf, 0x14, 0x89, 0x5e, 0xa0, 0xbc, 0x24, 0x4f, - 0x71, 0x12, 0x92, 0x4e, 0x71, 0xd1, 0x58, 0x07, 0xd2, 0xb3, 0x7c, 0xe5, 0xfd, 0xf2, 0x14, 0x27, - 0xe2, 0xe8, 0x14, 0x27, 0x3d, 0xe1, 0x9f, 0x88, 0xbd, 0x16, 0x57, 0x5e, 0x96, 0xa7, 0xb8, 0x08, - 0x9a, 0x4e, 0x71, 0xd1, 0xf7, 0xe5, 0x2f, 0x45, 0x1e, 0x4d, 0x2b, 0xaf, 0x24, 0xb7, 0x1f, 0x90, - 0x62, 0xfb, 0xd9, 0x13, 0x6b, 0x2d, 0xf9, 0xf5, 0xaf, 0x52, 0x92, 0xc7, 0x6f, 0x12, 0x0d, 0x1d, - 0xbf, 0x89, 0x2f, 0x87, 0xa3, 0x1b, 0x07, 0xae, 0x55, 0xe3, 0x5d, 0x36, 0x0e, 0xa1, 0x29, 0x92, - 0x00, 0x96, 0xf6, 0xc8, 0x6c, 0x23, 0x34, 0x91, 0xb2, 0x47, 0xf6, 0xb7, 0x41, 0x11, 0x7a, 0x3a, - 0xbb, 0xc6, 0xbc, 0x65, 0x95, 0xb2, 0x3c, 0xbb, 0xc6, 0x08, 0xe8, 0xec, 0x1a, 0xf7, 0xb1, 0x9d, - 0x42, 0xa3, 0x5c, 0x8b, 0x98, 0x13, 0xb0, 0x69, 0x2d, 0x2b, 0x93, 0x91, 0xc7, 0x77, 0x11, 0x3c, - 0x9d, 0x9d, 0xa2, 0x30, 0x58, 0xaf, 0x19, 0x6c, 0xa2, 0x69, 0xb6, 0x17, 0x6d, 0xdd, 0x31, 0x6a, - 0xc4, 0x32, 0x94, 0xa9, 0xc8, 0x7a, 0x9d, 0x40, 0x03, 0xeb, 0x75, 0x02, 0x1c, 0x42, 0x4f, 0x45, - 0xe0, 0x1a, 0x69, 0x10, 0xf3, 0x0e, 0x51, 0xae, 0x03, 0xdb, 0x62, 0x1a, 0x5b, 0x4e, 0x36, 0xdd, - 0xa3, 0xa5, 0x71, 0xa0, 0xb6, 0xfa, 0xec, 0x7a, 0xed, 0xb5, 0x99, 0xe0, 0xc1, 0x79, 0xd5, 0x21, - 0x6d, 0xdd, 0x21, 0xca, 0xb4, 0x6c, 0xab, 0x27, 0x12, 0x51, 0x5b, 0x3d, 0x11, 0x11, 0x67, 0xeb, - 0x8f, 0x85, 0x4a, 0x37, 0xb6, 0xe1, 0x88, 0x48, 0x2e, 0x4d, 0x67, 0x27, 0x19, 0x41, 0x05, 0x34, - 0x63, 0x5b, 0xcb, 0x70, 0x52, 0xf1, 0xaa, 0x3c, 0x3b, 0xa5, 0x53, 0xd2, 0xd9, 0x29, 0x1d, 0x4b, - 0x55, 0x5d, 0xc6, 0xb2, 0x31, 0x78, 0x43, 0x56, 0xf5, 0x04, 0x12, 0xaa, 0xea, 0x09, 0xe0, 0x38, - 0x43, 0x8d, 0xb8, 0xc4, 0x53, 0x66, 0xba, 0x31, 0x04, 0x92, 0x38, 0x43, 0x00, 0xc7, 0x19, 0x4e, - 0x11, 0xaf, 0xb1, 0xa2, 0xcc, 0x76, 0x63, 0x08, 0x24, 0x71, 0x86, 0x00, 0xa6, 0x9b, 0x4d, 0x19, - 0x3c, 0xde, 0x69, 0xae, 0xfa, 0x7d, 0x36, 0x27, 0x6f, 0x36, 0x53, 0x09, 0xe9, 0x66, 0x33, 0x15, - 0x89, 0x3f, 0xb1, 0x6d, 0x6f, 0x6e, 0x65, 0x1e, 0x2a, 0xbc, 0x1c, 0xda, 0x05, 0xdb, 0x29, 0x35, - 0xdd, 0xa3, 0x6d, 0xd7, 0x5b, 0xfc, 0xbd, 0x81, 0xd3, 0xa5, 0x52, 0x85, 0xaa, 0x8e, 0x05, 0x67, - 0x15, 0x0c, 0x3c, 0xdd, 0xa3, 0x05, 0x6e, 0x99, 0xcf, 0xa2, 0x41, 0xf8, 0xa8, 0x8a, 0x65, 0x7a, - 0xe5, 0x71, 0xe5, 0x35, 0x79, 0xcb, 0x24, 0xa0, 0xe8, 0x96, 0x49, 0xf8, 0x49, 0x27, 0x71, 0xf8, - 0xc9, 0xa6, 0x98, 0xf2, 0xb8, 0xa2, 0xc9, 0x93, 0xb8, 0x84, 0xa4, 0x93, 0xb8, 0x04, 0x08, 0xea, - 0x2d, 0x3b, 0x76, 0xbb, 0x3c, 0xae, 0xd4, 0x12, 0xea, 0x65, 0xa8, 0xa0, 0x5e, 0xf6, 0x33, 0xa8, - 0xb7, 0xb6, 0xd2, 0xf1, 0xca, 0xf4, 0x1b, 0x17, 0x12, 0xea, 0xf5, 0x91, 0x41, 0xbd, 0x3e, 0x80, - 0x4e, 0x85, 0x00, 0xa8, 0x3a, 0x36, 0x9d, 0xb4, 0x6f, 0x98, 0xcd, 0xa6, 0x72, 0x53, 0x9e, 0x0a, - 0xa3, 0x78, 0x3a, 0x15, 0x46, 0x61, 0xd4, 0xf4, 0x64, 0xad, 0x22, 0x8b, 0x9d, 0x65, 0xe5, 0x96, - 0x6c, 0x7a, 0x86, 0x18, 0x6a, 0x7a, 0x86, 0xbf, 0x60, 0x77, 0x41, 0x7f, 0x69, 0x64, 0xc9, 0x21, - 0xee, 0x8a, 0x72, 0x3b, 0xb2, 0xbb, 0x10, 0x70, 0xb0, 0xbb, 0x10, 0x7e, 0xe3, 0x65, 0x74, 0xbf, - 0xb4, 0xd0, 0xf8, 0x97, 0x36, 0x35, 0xa2, 0x3b, 0x8d, 0x15, 0xe5, 0x03, 0xc0, 0xea, 0xa1, 0xc4, - 0xa5, 0x4a, 0x26, 0x9d, 0xee, 0xd1, 0xba, 0x71, 0x82, 0x6d, 0xf9, 0x6b, 0x33, 0x2c, 0xc2, 0xa4, - 0x56, 0x9d, 0xf0, 0x37, 0xa1, 0xaf, 0x47, 0xb6, 0xe5, 0x71, 0x12, 0xd8, 0x96, 0xc7, 0xc1, 0xb8, - 0x8d, 0xce, 0x47, 0xb6, 0x6a, 0xb3, 0x7a, 0x93, 0xee, 0x4b, 0x88, 0x51, 0xd5, 0x1b, 0xab, 0xc4, - 0x53, 0x3e, 0x08, 0xbc, 0x2f, 0xa4, 0x6c, 0xf8, 0x22, 0xd4, 0xd3, 0x3d, 0xda, 0x16, 0xfc, 0xb0, - 0x8a, 0xf2, 0xb5, 0xa9, 0x85, 0xaa, 0xf2, 0x21, 0xf9, 0x7c, 0x93, 0xc2, 0xa6, 0x7b, 0x34, 0xc0, - 0x51, 0x2b, 0xed, 0x66, 0x7b, 0xd9, 0xd1, 0x0d, 0xc2, 0x0c, 0x2d, 0xb0, 0xdd, 0xb8, 0x01, 0xfa, - 0x61, 0xd9, 0x4a, 0x4b, 0xa3, 0xa3, 0x56, 0x5a, 0x1a, 0x8e, 0x2a, 0xaa, 0x94, 0x4c, 0x41, 0xf9, - 0x88, 0xac, 0xa8, 0x12, 0x92, 0x2a, 0xaa, 0x9c, 0x7a, 0xe1, 0x03, 0xe8, 0x64, 0xb0, 0x9f, 0xe7, - 0xeb, 0x2f, 0xeb, 0x34, 0xe5, 0xa3, 0xc0, 0xe7, 0x7c, 0xec, 0x32, 0x40, 0xa2, 0x9a, 0xee, 0xd1, - 0x52, 0xca, 0xd3, 0x15, 0x37, 0x96, 0x27, 0x88, 0x9b, 0x17, 0xdf, 0x22, 0xaf, 0xb8, 0x29, 0x64, - 0x74, 0xc5, 0x4d, 0x41, 0x25, 0x32, 0xe7, 0x42, 0xd5, 0xb7, 0x60, 0x1e, 0xc8, 0x34, 0x8d, 0x43, - 0x22, 0x73, 0x6e, 0xa9, 0x2d, 0x6e, 0xc1, 0x3c, 0xb0, 0xd6, 0xd2, 0x38, 0xe0, 0x8b, 0xa8, 0x50, - 0xab, 0xcd, 0x6a, 0x1d, 0x4b, 0x69, 0x44, 0xbc, 0x65, 0x01, 0x3a, 0xdd, 0xa3, 0x71, 0x3c, 0x35, - 0x83, 0x26, 0x9b, 0xba, 0xeb, 0x99, 0x0d, 0x17, 0x46, 0x8c, 0x3f, 0x42, 0x0c, 0xd9, 0x0c, 0x4a, - 0xa2, 0xa1, 0x66, 0x50, 0x12, 0x9c, 0xda, 0x8b, 0x13, 0xba, 0xeb, 0xea, 0x96, 0xe1, 0xe8, 0xe3, - 0xb0, 0x4c, 0x90, 0xc8, 0x9b, 0x22, 0x09, 0x4b, 0xed, 0x45, 0x19, 0x02, 0x87, 0xef, 0x3e, 0xc4, - 0x37, 0x73, 0x96, 0x22, 0x87, 0xef, 0x11, 0x3c, 0x1c, 0xbe, 0x47, 0x60, 0x60, 0x77, 0xfa, 0x30, - 0x8d, 0x2c, 0x9b, 0x54, 0x44, 0xca, 0x72, 0xc4, 0xee, 0x8c, 0x12, 0x80, 0xdd, 0x19, 0x05, 0x4a, - 0x4d, 0xf2, 0x97, 0xdb, 0x95, 0x94, 0x26, 0x85, 0xab, 0x6c, 0xac, 0x0c, 0x5d, 0xbf, 0xc3, 0xc1, - 0x51, 0x5e, 0xb7, 0xf4, 0x96, 0x5d, 0x1e, 0xf7, 0xa5, 0x6e, 0xca, 0xeb, 0x77, 0x2a, 0x21, 0x5d, - 0xbf, 0x53, 0x91, 0x74, 0x76, 0xf5, 0x37, 0x5a, 0x2b, 0xba, 0x43, 0x8c, 0xb2, 0xe9, 0xc0, 0xc9, - 0xe2, 0x3a, 0xdb, 0x1a, 0xbe, 0x21, 0xcf, 0xae, 0x5d, 0x48, 0xe9, 0xec, 0xda, 0x05, 0x4d, 0x8d, - 0xbc, 0x64, 0xb4, 0x46, 0x74, 0x43, 0x59, 0x95, 0x8d, 0xbc, 0x74, 0x4a, 0x6a, 0xe4, 0xa5, 0x63, - 0xd3, 0x3f, 0xe7, 0xb6, 0x63, 0x7a, 0x44, 0x69, 0x6e, 0xe7, 0x73, 0x80, 0x34, 0xfd, 0x73, 0x00, - 0x4d, 0x37, 0x84, 0xd1, 0x0e, 0x69, 0xc9, 0x1b, 0xc2, 0x78, 0x37, 0x44, 0x4b, 0x50, 0x8b, 0x85, - 0x3f, 0x2d, 0x53, 0x2c, 0xd9, 0x62, 0xe1, 0x60, 0x6a, 0xb1, 0x84, 0x8f, 0xcf, 0xa4, 0xa7, 0x4c, - 0x8a, 0x2d, 0xaf, 0xa1, 0x22, 0x8e, 0xae, 0xa1, 0xd2, 0xb3, 0xa7, 0x67, 0xa5, 0x77, 0x06, 0x4a, - 0x5b, 0xb6, 0x3a, 0x04, 0x14, 0xb5, 0x3a, 0xc4, 0x17, 0x09, 0x13, 0xe8, 0x18, 0xdc, 0x82, 0x6b, - 0x9d, 0xe0, 0x1e, 0xe7, 0x63, 0xf2, 0x67, 0x46, 0xd0, 0xf4, 0x33, 0x23, 0x20, 0x89, 0x09, 0x9f, - 0xb6, 0x9c, 0x14, 0x26, 0xe1, 0xf9, 0x60, 0x04, 0x84, 0x67, 0x10, 0xae, 0x95, 0x66, 0x67, 0x2a, - 0x46, 0x55, 0xbc, 0x22, 0x73, 0xe5, 0x13, 0xd8, 0x38, 0xc5, 0x74, 0x8f, 0x96, 0x50, 0x0e, 0xbf, - 0x81, 0xce, 0x72, 0x28, 0x7f, 0x37, 0x0c, 0x49, 0xbc, 0x8d, 0x60, 0x41, 0xf0, 0x64, 0x3f, 0xb6, - 0x6e, 0xb4, 0xd3, 0x3d, 0x5a, 0x57, 0x5e, 0xe9, 0x75, 0xf1, 0xf5, 0xa1, 0xb3, 0x9d, 0xba, 0x82, - 0x45, 0xa2, 0x2b, 0xaf, 0xf4, 0xba, 0xb8, 0xdc, 0xef, 0x6c, 0xa7, 0xae, 0xa0, 0x13, 0xba, 0xf2, - 0xc2, 0x2e, 0x2a, 0x76, 0xc3, 0x97, 0x9a, 0x4d, 0x65, 0x0d, 0xaa, 0x7b, 0xcf, 0x76, 0xaa, 0x2b, - 0x81, 0xc1, 0xb9, 0x15, 0x47, 0x3a, 0x4b, 0xcf, 0xb7, 0x89, 0x55, 0x93, 0x16, 0xa0, 0xbb, 0xf2, - 0x2c, 0x1d, 0x23, 0xa0, 0xb3, 0x74, 0x0c, 0x48, 0x07, 0x94, 0xf8, 0x5c, 0x45, 0x59, 0x97, 0x07, - 0x94, 0x88, 0xa3, 0x03, 0x4a, 0x7a, 0xda, 0x32, 0x8f, 0x8e, 0xcf, 0xaf, 0x7a, 0xba, 0x6f, 0x41, - 0xba, 0xbc, 0x2b, 0xdf, 0x8c, 0x5c, 0x32, 0xc5, 0x49, 0xe0, 0x92, 0x29, 0x0e, 0xa6, 0x63, 0x84, - 0x82, 0x6b, 0xeb, 0x56, 0x63, 0x4a, 0x37, 0x9b, 0x1d, 0x87, 0x28, 0xff, 0x87, 0x3c, 0x46, 0x22, - 0x68, 0x3a, 0x46, 0x22, 0x20, 0xba, 0x40, 0x53, 0x50, 0xc9, 0x75, 0xcd, 0x65, 0x8b, 0xef, 0x2b, - 0x3b, 0x4d, 0x4f, 0xf9, 0x3f, 0xe5, 0x05, 0x3a, 0x89, 0x86, 0x2e, 0xd0, 0x49, 0x70, 0x38, 0x75, - 0x4a, 0x48, 0x70, 0xaf, 0xfc, 0x5f, 0x91, 0x53, 0xa7, 0x04, 0x1a, 0x38, 0x75, 0x4a, 0x4a, 0x8e, - 0x3f, 0x85, 0x46, 0x99, 0x4d, 0x36, 0x63, 0x06, 0x77, 0xd5, 0xff, 0xb7, 0xbc, 0x3e, 0x46, 0xf1, - 0x74, 0x7d, 0x8c, 0xc2, 0x64, 0x3e, 0xbc, 0x0b, 0xfe, 0x9f, 0x34, 0x3e, 0x81, 0xfc, 0x63, 0x65, - 0xf0, 0x75, 0x91, 0x0f, 0x1f, 0x29, 0xdf, 0x9a, 0x49, 0x63, 0x14, 0x0c, 0x8f, 0x58, 0x21, 0x99, - 0x91, 0x46, 0xee, 0x98, 0x64, 0x4d, 0xf9, 0x78, 0x2a, 0x23, 0x46, 0x20, 0x33, 0x62, 0x30, 0xfc, - 0x3a, 0x3a, 0x19, 0xc2, 0x66, 0x49, 0x6b, 0x31, 0x98, 0x99, 0xbe, 0x2d, 0x23, 0x9b, 0xc1, 0xc9, - 0x64, 0xd4, 0x0c, 0x4e, 0xc6, 0x24, 0xb1, 0xe6, 0xa2, 0xfb, 0x7f, 0xb7, 0x60, 0x1d, 0x48, 0x30, - 0x85, 0x41, 0x12, 0x6b, 0x2e, 0xcd, 0x6f, 0xdf, 0x82, 0x75, 0x20, 0xd3, 0x14, 0x06, 0xf8, 0x93, - 0x19, 0x74, 0x21, 0x19, 0x55, 0x6a, 0x36, 0xa7, 0x6c, 0x27, 0xc4, 0x29, 0xdf, 0x91, 0x91, 0x0f, - 0x1a, 0xb6, 0x57, 0x6c, 0xba, 0x47, 0xdb, 0x66, 0x05, 0xf8, 0xfd, 0x68, 0xb8, 0xd4, 0x31, 0x4c, - 0x0f, 0x2e, 0xde, 0xa8, 0xe1, 0xfc, 0x9d, 0x99, 0xc8, 0x16, 0x47, 0xc4, 0xc2, 0x16, 0x47, 0x04, - 0xe0, 0x57, 0xd1, 0x58, 0x8d, 0x34, 0x3a, 0x8e, 0xe9, 0xad, 0x6b, 0xa4, 0x6d, 0x3b, 0x1e, 0xe5, - 0xf1, 0x5d, 0x19, 0x79, 0x12, 0x8b, 0x51, 0xd0, 0x49, 0x2c, 0x06, 0xc4, 0xb7, 0x52, 0x52, 0xdc, - 0x2b, 0x9f, 0xc8, 0x74, 0xbd, 0x96, 0x0f, 0xfa, 0x32, 0x25, 0x43, 0x7e, 0x35, 0x31, 0x65, 0xb8, - 0xf2, 0xc9, 0x4c, 0x97, 0x6b, 0x74, 0x61, 0x86, 0x4b, 0xc8, 0x36, 0x5e, 0x4d, 0x4c, 0x0a, 0xad, - 0x7c, 0x77, 0xa6, 0xcb, 0xb5, 0x77, 0xc8, 0x31, 0x29, 0x9f, 0xf4, 0xd3, 0xcc, 0x53, 0x84, 0x33, - 0xfa, 0x9e, 0x4c, 0xdc, 0x55, 0x24, 0x28, 0x2f, 0x10, 0xd2, 0x62, 0x37, 0xdd, 0x40, 0xe9, 0x3f, - 0x95, 0x89, 0xfb, 0xe6, 0x85, 0xc5, 0xc2, 0x5f, 0x98, 0xa0, 0x33, 0x93, 0x77, 0x3d, 0xe2, 0x58, - 0x7a, 0x13, 0xba, 0xb3, 0xe6, 0xd9, 0x8e, 0xbe, 0x4c, 0x26, 0x2d, 0x7d, 0xb1, 0x49, 0x94, 0x4f, - 0x67, 0x64, 0x0b, 0x36, 0x9d, 0x94, 0x5a, 0xb0, 0xe9, 0x58, 0xbc, 0x82, 0xee, 0x4f, 0xc2, 0x96, - 0x4d, 0x17, 0xea, 0xf9, 0x4c, 0x46, 0x36, 0x61, 0xbb, 0xd0, 0x52, 0x13, 0xb6, 0x0b, 0x1a, 0x5f, - 0x45, 0x03, 0xe3, 0xb6, 0x3f, 0xfd, 0x7e, 0x6f, 0xc4, 0x19, 0x32, 0xc0, 0x4c, 0xf7, 0x68, 0x21, - 0x19, 0x2f, 0xc3, 0x07, 0xf5, 0x67, 0xe3, 0x65, 0xc2, 0xcb, 0xa7, 0xe0, 0x07, 0x2f, 0xc3, 0xc5, - 0xfd, 0xff, 0xc5, 0xcb, 0x84, 0x77, 0x5c, 0xc1, 0x0f, 0x3a, 0x93, 0xb0, 0x1a, 0x67, 0xa7, 0x4a, - 0xd4, 0x6e, 0x9b, 0x58, 0xd1, 0x9b, 0x4d, 0x62, 0x2d, 0x13, 0xe5, 0x73, 0x91, 0x99, 0x24, 0x99, - 0x8c, 0xce, 0x24, 0xc9, 0x18, 0xfc, 0x61, 0x74, 0xea, 0x96, 0xde, 0x34, 0x8d, 0x10, 0xe7, 0xe7, - 0x19, 0x56, 0xbe, 0x2f, 0x23, 0xef, 0xa6, 0x53, 0xe8, 0xe8, 0x6e, 0x3a, 0x05, 0x85, 0x67, 0x11, - 0x86, 0x65, 0x34, 0x98, 0x2d, 0xe8, 0xfa, 0xac, 0xfc, 0xff, 0x19, 0xd9, 0x4e, 0x8d, 0x93, 0x50, - 0x3b, 0x35, 0x0e, 0xc5, 0xf5, 0xf4, 0x64, 0x10, 0xca, 0xf7, 0x67, 0xe4, 0xd3, 0x9a, 0x34, 0xc2, - 0xe9, 0x1e, 0x2d, 0x3d, 0xa3, 0xc4, 0x75, 0x34, 0x5a, 0xab, 0x56, 0xa6, 0xa6, 0x26, 0x6b, 0xb7, - 0x2a, 0x65, 0x78, 0xe8, 0x60, 0x28, 0x3f, 0x10, 0x59, 0xb1, 0xa2, 0x04, 0x74, 0xc5, 0x8a, 0xc2, - 0x70, 0x0d, 0x9d, 0xa0, 0x82, 0xa8, 0x3a, 0x64, 0x89, 0x38, 0xc4, 0x6a, 0xf8, 0xc3, 0xf2, 0x87, - 0x32, 0xb2, 0xa1, 0x90, 0x44, 0x44, 0x0d, 0x85, 0x24, 0x38, 0x5e, 0x45, 0x67, 0xa3, 0x87, 0x39, - 0xe2, 0xcb, 0x51, 0xe5, 0x87, 0x33, 0x11, 0x7b, 0xb6, 0x0b, 0x31, 0xd8, 0xb3, 0x5d, 0xf0, 0xd8, - 0x42, 0xe7, 0xf8, 0xc9, 0x08, 0xf7, 0x99, 0x8c, 0xd6, 0xf6, 0x23, 0xac, 0xb6, 0x47, 0x42, 0x9f, - 0xbe, 0x2e, 0xd4, 0xd3, 0x3d, 0x5a, 0x77, 0x76, 0x54, 0x55, 0xe2, 0x59, 0x0b, 0x94, 0x1f, 0xcd, - 0x24, 0x3b, 0x95, 0x48, 0x9e, 0xc6, 0x49, 0xe9, 0x0e, 0x5e, 0x4f, 0x8b, 0xb9, 0xaf, 0xfc, 0x58, - 0x64, 0xc8, 0x24, 0x93, 0xd1, 0x21, 0x93, 0x12, 0xb4, 0xff, 0x55, 0x34, 0xc6, 0xf4, 0xb2, 0xaa, - 0xc3, 0x48, 0xb2, 0x96, 0x89, 0xa1, 0xfc, 0x8d, 0xc8, 0x82, 0x15, 0xa3, 0x00, 0xef, 0x9c, 0x28, - 0x90, 0xce, 0xbe, 0xb5, 0xb6, 0x6e, 0x59, 0x70, 0x52, 0xaa, 0xfc, 0xcd, 0xc8, 0xec, 0x1b, 0xa2, - 0xc0, 0xf7, 0x36, 0xf8, 0x05, 0xb9, 0xd3, 0x92, 0x1e, 0x56, 0x2b, 0x9f, 0x8f, 0xac, 0x73, 0x89, - 0x54, 0x74, 0x9d, 0x4b, 0x7e, 0x97, 0x7d, 0x2b, 0xe5, 0x51, 0xb2, 0xf2, 0xe3, 0xdd, 0xf9, 0x86, - 0xeb, 0x67, 0xf2, 0x9b, 0xe6, 0x5b, 0x29, 0x0f, 0x7a, 0x95, 0x9f, 0xe8, 0xce, 0x37, 0x74, 0x97, - 0x4b, 0x7e, 0x0f, 0x5c, 0x4f, 0x7f, 0x0c, 0xab, 0xfc, 0x64, 0x74, 0x42, 0x48, 0x21, 0x84, 0x09, - 0x21, 0xed, 0x45, 0xed, 0x22, 0x3a, 0xcd, 0x3a, 0xed, 0xba, 0xa3, 0xb7, 0x57, 0x6a, 0xc4, 0xf3, - 0x4c, 0x6b, 0xd9, 0xdf, 0xdf, 0xfc, 0xed, 0x4c, 0xe4, 0xd0, 0x29, 0x8d, 0x12, 0x0e, 0x9d, 0xd2, - 0x90, 0x54, 0x9f, 0x62, 0xcf, 0x5e, 0x95, 0x9f, 0x8a, 0xe8, 0x53, 0x8c, 0x82, 0xea, 0x53, 0xfc, - 0xb5, 0xec, 0xab, 0x09, 0xaf, 0x3b, 0x95, 0xbf, 0x93, 0xce, 0x2b, 0x68, 0x5f, 0xc2, 0xa3, 0xd0, - 0x57, 0x13, 0x1e, 0x31, 0x2a, 0x7f, 0x37, 0x9d, 0x57, 0xe8, 0xd9, 0x13, 0x7f, 0xfb, 0xf8, 0x3a, - 0x3a, 0xc9, 0xe6, 0xc8, 0x29, 0x62, 0x10, 0xe9, 0x43, 0x7f, 0x3a, 0x32, 0x1c, 0x93, 0xc9, 0xe0, - 0x20, 0x3b, 0x11, 0x93, 0xc4, 0x9a, 0xb7, 0xf5, 0x67, 0xb6, 0x60, 0x1d, 0x9a, 0xd9, 0xc9, 0x18, - 0xfc, 0x82, 0xfc, 0xa4, 0x4c, 0xf9, 0xd9, 0x4c, 0xc4, 0x49, 0x42, 0x40, 0x82, 0x93, 0x84, 0xf8, - 0xfe, 0xec, 0x05, 0xf9, 0xf9, 0x94, 0xf2, 0xf7, 0x12, 0x0b, 0x07, 0x1d, 0x20, 0xbf, 0xb5, 0x7a, - 0x41, 0x7e, 0x2a, 0xa4, 0xfc, 0x5c, 0x62, 0xe1, 0xe0, 0x03, 0xe4, 0x77, 0x45, 0x74, 0xe3, 0xd1, - 0xf1, 0x6c, 0xc6, 0x4a, 0x9a, 0x1e, 0x7e, 0x3e, 0xba, 0xf1, 0x48, 0x24, 0x83, 0x8d, 0x47, 0x22, - 0x26, 0x89, 0x35, 0xff, 0xbc, 0x5f, 0xd8, 0x82, 0xb5, 0xb0, 0x5d, 0x4a, 0xc4, 0x24, 0xb1, 0xe6, - 0x1f, 0xff, 0x85, 0x2d, 0x58, 0x0b, 0xdb, 0xa5, 0x44, 0x0c, 0x35, 0x72, 0x42, 0xcc, 0x2d, 0xe2, - 0xb8, 0xa1, 0xfa, 0xfd, 0x62, 0xc4, 0xc8, 0x49, 0xa1, 0xa3, 0x46, 0x4e, 0x0a, 0x2a, 0x91, 0x3b, - 0x17, 0xca, 0x2f, 0x6d, 0xc5, 0x3d, 0xbc, 0xed, 0x48, 0x41, 0x25, 0x72, 0xe7, 0x72, 0xf9, 0xe5, - 0xad, 0xb8, 0x87, 0xd7, 0x1d, 0x29, 0x28, 0x6a, 0xf0, 0x4c, 0x38, 0xf6, 0x9a, 0xf5, 0x2a, 0x59, - 0x23, 0x4d, 0x2e, 0x92, 0x2f, 0x46, 0x0c, 0x9e, 0x28, 0x01, 0x1c, 0xce, 0x47, 0x60, 0x32, 0x23, - 0xfe, 0xf5, 0xbf, 0x9a, 0xca, 0x28, 0x3c, 0x7d, 0x88, 0xc2, 0x64, 0x46, 0xfc, 0x43, 0x7f, 0x2d, - 0x95, 0x51, 0x78, 0xfa, 0x10, 0x85, 0x8d, 0xf7, 0xa1, 0x5e, 0x38, 0x9e, 0x52, 0x3f, 0x9f, 0x41, - 0x43, 0x35, 0xcf, 0x21, 0x7a, 0x8b, 0x07, 0xa1, 0x3a, 0x83, 0xfa, 0x99, 0x9f, 0xa7, 0xff, 0x28, - 0x55, 0x0b, 0x7e, 0xe3, 0x0b, 0x68, 0x64, 0x46, 0x77, 0x3d, 0x28, 0x59, 0xb1, 0x0c, 0x72, 0x17, - 0xde, 0x38, 0xe5, 0xb4, 0x08, 0x14, 0xcf, 0x30, 0x3a, 0x56, 0x0e, 0xa2, 0xff, 0xe5, 0xb6, 0x8c, - 0xbd, 0xd4, 0xff, 0xd6, 0x46, 0xb1, 0x07, 0x42, 0x2d, 0x45, 0xca, 0xaa, 0x5f, 0xcd, 0xa0, 0x98, - 0x07, 0xea, 0xee, 0x1f, 0x8b, 0xcf, 0xa3, 0x63, 0x91, 0x88, 0x93, 0xfc, 0xa1, 0xd6, 0x36, 0x03, - 0x52, 0x46, 0x4b, 0xe3, 0xf7, 0x04, 0x0f, 0x84, 0x6e, 0x6a, 0x33, 0x3c, 0xae, 0x56, 0xdf, 0xe6, - 0x46, 0x31, 0xd7, 0x71, 0x9a, 0x9a, 0x80, 0xe2, 0x71, 0x5f, 0xfe, 0xfe, 0x68, 0x18, 0x4e, 0x0f, - 0x5f, 0xe0, 0x2f, 0xd7, 0x33, 0x61, 0x34, 0xae, 0x48, 0x5e, 0x5e, 0xf6, 0x52, 0xfd, 0xfd, 0x68, - 0xa8, 0xd2, 0x6a, 0x13, 0xc7, 0xb5, 0x2d, 0xdd, 0xb3, 0x1d, 0xfe, 0xf0, 0x17, 0x22, 0x35, 0x99, - 0x02, 0x5c, 0x8c, 0x1e, 0x24, 0xd2, 0xe3, 0x4b, 0x7e, 0x1a, 0xa6, 0x1c, 0x04, 0x32, 0x84, 0xd7, - 0x7b, 0xd1, 0x5c, 0xaf, 0x8c, 0x82, 0x92, 0xde, 0x74, 0x75, 0x78, 0x4a, 0x16, 0x90, 0x76, 0x28, - 0x40, 0x24, 0x05, 0x0a, 0xfc, 0x18, 0x2a, 0xc0, 0xd1, 0xbb, 0x0b, 0xe9, 0xd5, 0x78, 0x8c, 0xb0, - 0x26, 0x40, 0xc4, 0x88, 0x4c, 0x8c, 0x06, 0xdf, 0x40, 0xa3, 0xe1, 0xbd, 0xe2, 0x75, 0xc7, 0xee, - 0xb4, 0xfd, 0x84, 0x0a, 0x90, 0x23, 0x77, 0x35, 0xc0, 0xd5, 0x97, 0x01, 0x29, 0xb0, 0x88, 0x15, - 0xc4, 0xd3, 0xe8, 0x58, 0x08, 0xa3, 0x22, 0xf2, 0x13, 0xb9, 0x40, 0x8e, 0x68, 0x81, 0x17, 0x15, - 0xa7, 0xc8, 0x2a, 0x5a, 0x0c, 0x57, 0x50, 0x9f, 0x1f, 0x20, 0xac, 0x7f, 0x4b, 0x25, 0x3d, 0xce, - 0x03, 0x84, 0xf5, 0x89, 0xa1, 0xc1, 0xfc, 0xf2, 0x78, 0x0a, 0x8d, 0x68, 0x76, 0xc7, 0x23, 0x0b, - 0x36, 0xb7, 0xe6, 0x79, 0xa4, 0x7f, 0x68, 0x93, 0x43, 0x31, 0x75, 0xcf, 0xf6, 0x53, 0x0c, 0x8b, - 0xa9, 0x6e, 0xe5, 0x52, 0x78, 0x0e, 0x8d, 0xc5, 0x6e, 0x60, 0xc5, 0xc4, 0xbf, 0xc2, 0xe7, 0xc5, - 0x99, 0xc5, 0x8b, 0xe2, 0xef, 0xcc, 0xa0, 0xc2, 0x82, 0xa3, 0x9b, 0x9e, 0xcb, 0x5f, 0xa1, 0xdd, - 0x77, 0x79, 0xcd, 0xd1, 0xdb, 0x54, 0x3f, 0x2e, 0x43, 0xa4, 0xca, 0x5b, 0x7a, 0xb3, 0x43, 0xdc, - 0xf1, 0xdb, 0xf4, 0xeb, 0xfe, 0xf5, 0x46, 0xf1, 0x85, 0x65, 0x38, 0xe7, 0xb9, 0xdc, 0xb0, 0x5b, - 0x57, 0x96, 0x1d, 0xfd, 0x8e, 0xe9, 0xc1, 0xba, 0xaf, 0x37, 0xaf, 0x78, 0xa4, 0x09, 0xc7, 0x49, - 0x57, 0xf4, 0xb6, 0x79, 0x05, 0x22, 0x22, 0x5f, 0x09, 0x38, 0xb1, 0x1a, 0xa8, 0x0a, 0x78, 0xf0, - 0x97, 0xa8, 0x02, 0x0c, 0x87, 0xe7, 0x10, 0xe2, 0x9f, 0x5a, 0x6a, 0xb7, 0xf9, 0x93, 0x36, 0xe1, - 0x10, 0xc6, 0xc7, 0x30, 0xc5, 0x0e, 0x04, 0xa6, 0xb7, 0xdb, 0x62, 0x6a, 0xf1, 0x90, 0x8e, 0x6a, - 0xc1, 0x02, 0x6f, 0x91, 0x2f, 0xa6, 0xe1, 0x50, 0xe2, 0x7e, 0x63, 0x13, 0x84, 0x14, 0x2d, 0x86, - 0x17, 0xd1, 0x31, 0xce, 0x37, 0x08, 0xbd, 0x3f, 0x22, 0xcf, 0x0a, 0x11, 0x34, 0x53, 0xda, 0xa0, - 0x8d, 0x06, 0x07, 0x8b, 0x75, 0x44, 0x4a, 0xe0, 0xf1, 0x30, 0xeb, 0xe4, 0x9c, 0xde, 0x22, 0xae, - 0x72, 0x0c, 0x34, 0xf6, 0xec, 0xe6, 0x46, 0x51, 0xf1, 0xcb, 0x43, 0xac, 0xbc, 0xc4, 0x0c, 0xcc, - 0x50, 0x44, 0xe4, 0xc1, 0xb4, 0x7e, 0x34, 0x81, 0x47, 0x54, 0xe7, 0xe5, 0x22, 0x78, 0x02, 0x0d, - 0x07, 0x1e, 0xf5, 0x37, 0x6f, 0x56, 0xca, 0xf0, 0x66, 0x6e, 0x60, 0xfc, 0xdc, 0xe6, 0x46, 0xf1, - 0x74, 0x24, 0xaa, 0xbf, 0xc8, 0x44, 0x2a, 0x23, 0x84, 0x21, 0x60, 0x8f, 0xe8, 0x22, 0x61, 0x08, - 0xda, 0x09, 0x61, 0x08, 0xaa, 0xf8, 0x25, 0x34, 0x58, 0xba, 0x5d, 0xe3, 0xe1, 0x15, 0x5c, 0xe5, - 0x78, 0x98, 0x4e, 0x05, 0x92, 0x70, 0xf3, 0x50, 0x0c, 0x62, 0xd3, 0x45, 0x7a, 0x3c, 0x89, 0x46, - 0x24, 0xa7, 0x1c, 0x57, 0x39, 0x01, 0x1c, 0xa0, 0xe5, 0x3a, 0x60, 0xea, 0x0e, 0x47, 0x49, 0x69, - 0xe1, 0xa5, 0x42, 0x54, 0x6b, 0xca, 0xa6, 0x0b, 0xa9, 0x29, 0x34, 0x02, 0x91, 0x1c, 0xe0, 0x05, - 0x5e, 0x3f, 0xd3, 0x1a, 0x83, 0xa3, 0xea, 0x0e, 0xc3, 0x49, 0x79, 0xe0, 0xe5, 0x62, 0xf8, 0x0d, - 0x84, 0x21, 0x99, 0x05, 0x31, 0xfc, 0x3b, 0x9a, 0x4a, 0xd9, 0x55, 0x4e, 0x42, 0xc4, 0x5e, 0x1c, - 0x7d, 0x39, 0x5e, 0x29, 0x8f, 0x5f, 0xe0, 0xd3, 0xc7, 0x79, 0x9d, 0x95, 0xaa, 0xfb, 0xaf, 0xc6, - 0xeb, 0xa6, 0x21, 0xb6, 0x38, 0x81, 0x2b, 0x5e, 0x43, 0xa7, 0xaa, 0x0e, 0xb9, 0x63, 0xda, 0x1d, - 0xd7, 0x5f, 0x3e, 0xfc, 0x79, 0xeb, 0xd4, 0x96, 0xf3, 0xd6, 0x83, 0xbc, 0xe2, 0xfb, 0xda, 0x0e, - 0xb9, 0x53, 0xf7, 0xe3, 0xb4, 0x4a, 0x01, 0x0e, 0xd3, 0xb8, 0x53, 0x71, 0x41, 0x14, 0x0b, 0x0e, - 0x37, 0x89, 0xab, 0x28, 0xe1, 0x54, 0xcb, 0x82, 0x72, 0x98, 0x01, 0x4e, 0x14, 0x57, 0xa4, 0x18, - 0xd6, 0x10, 0xbe, 0x3e, 0xe1, 0xdf, 0xd7, 0x95, 0x1a, 0x2c, 0xab, 0xa3, 0x72, 0x1a, 0x98, 0xa9, - 0x54, 0x2c, 0xcb, 0x8d, 0x20, 0x66, 0x73, 0x5d, 0xe7, 0x78, 0x51, 0x2c, 0xf1, 0xd2, 0x78, 0x06, - 0x8d, 0x56, 0x1d, 0x38, 0x7a, 0xb8, 0x41, 0xd6, 0xab, 0x76, 0xd3, 0x6c, 0xac, 0xc3, 0x43, 0x40, - 0x3e, 0x55, 0xb6, 0x19, 0xae, 0xbe, 0x4a, 0xd6, 0xeb, 0x6d, 0xc0, 0x8a, 0xcb, 0x4a, 0xb4, 0xa4, - 0x18, 0x43, 0xf5, 0xfe, 0xed, 0xc5, 0x50, 0x25, 0x68, 0x94, 0xdf, 0xf6, 0xdd, 0xf5, 0x88, 0x45, - 0x97, 0x7a, 0x97, 0x3f, 0xfa, 0x53, 0x22, 0xb7, 0x83, 0x01, 0x9e, 0xe7, 0x84, 0x67, 0xa3, 0x8c, - 0x04, 0x60, 0xb1, 0x61, 0xd1, 0x22, 0xea, 0x67, 0x72, 0xe2, 0xd4, 0x89, 0xcf, 0xa2, 0xbc, 0x90, - 0xc2, 0x03, 0x42, 0x2f, 0x42, 0xb8, 0xe3, 0x3c, 0x8f, 0xeb, 0x3a, 0xc0, 0xcd, 0x8e, 0x20, 0x46, - 0x08, 0xe4, 0x37, 0xf3, 0xe3, 0x2a, 0x9b, 0x86, 0x16, 0x12, 0x40, 0x6e, 0xa9, 0xce, 0x62, 0xd3, - 0x6c, 0x40, 0x10, 0xec, 0x9c, 0x10, 0x14, 0x00, 0xa0, 0x2c, 0x06, 0xb6, 0x40, 0x82, 0xaf, 0xa2, - 0x41, 0xff, 0xb4, 0x2a, 0x0c, 0x3d, 0x0a, 0xb1, 0x91, 0xfd, 0xec, 0xf9, 0x2c, 0xf4, 0xb2, 0x40, - 0x84, 0x9f, 0x47, 0x28, 0x1c, 0xc9, 0xdc, 0x48, 0x82, 0x59, 0x5e, 0x1c, 0xf8, 0xe2, 0x2c, 0x1f, - 0x52, 0xd3, 0x39, 0x4f, 0xd4, 0x24, 0x3f, 0x9b, 0x1e, 0xcc, 0x79, 0x92, 0xfa, 0x89, 0x7d, 0x2b, - 0x17, 0xc1, 0xf3, 0x68, 0x2c, 0xa6, 0x3c, 0x3c, 0x50, 0x29, 0xe4, 0xed, 0x4d, 0xd0, 0x3c, 0x71, - 0x4d, 0x8d, 0x95, 0x55, 0xbf, 0x2d, 0x1b, 0x5b, 0x31, 0xa8, 0x60, 0x38, 0x95, 0xd0, 0x39, 0x20, - 0x18, 0x9f, 0x35, 0x13, 0x8c, 0x40, 0x84, 0x2f, 0xa2, 0xfe, 0x2a, 0x1d, 0xaf, 0x0d, 0xbb, 0xc9, - 0xbb, 0x0a, 0x22, 0xf2, 0xb4, 0x39, 0x4c, 0x0b, 0xb0, 0xf8, 0xaa, 0x90, 0xdf, 0x51, 0x08, 0xf0, - 0xeb, 0xe7, 0x77, 0x14, 0x27, 0xdc, 0x20, 0xd3, 0xe3, 0xd5, 0x48, 0x2a, 0x19, 0x5e, 0x26, 0x61, - 0xb5, 0x0a, 0x13, 0x65, 0x05, 0xb6, 0x62, 0xef, 0x56, 0xb6, 0xa2, 0xfa, 0x9b, 0x99, 0xb8, 0xf6, - 0xe3, 0x6b, 0xf1, 0x28, 0x9f, 0xb0, 0x34, 0x04, 0x40, 0xb1, 0xd6, 0x20, 0xde, 0xa7, 0x14, 0xaf, - 0x33, 0xbb, 0xeb, 0x78, 0x9d, 0xb9, 0x1d, 0xc6, 0xeb, 0x54, 0xff, 0x47, 0xbe, 0xab, 0xcf, 0xe8, - 0x81, 0xc4, 0xa5, 0x7a, 0x8e, 0xee, 0x77, 0x68, 0xed, 0x25, 0x37, 0x66, 0xb5, 0x33, 0x97, 0xb8, - 0xba, 0xce, 0x46, 0x8d, 0xab, 0xc9, 0x94, 0xf8, 0x65, 0x34, 0xe4, 0x7f, 0x00, 0xc4, 0x81, 0x15, - 0xe2, 0x97, 0x06, 0x6b, 0x4d, 0x24, 0x62, 0xaa, 0x54, 0x00, 0x3f, 0x8d, 0x06, 0xc0, 0xd2, 0x68, - 0xeb, 0x0d, 0x3f, 0x48, 0x30, 0x8b, 0x2a, 0xec, 0x03, 0xc5, 0xd8, 0x4b, 0x01, 0x25, 0xfe, 0x08, - 0x2a, 0xf0, 0x78, 0xf5, 0x2c, 0xf5, 0xf1, 0x95, 0x6d, 0x38, 0xd9, 0x5e, 0x16, 0x63, 0xd5, 0xb3, - 0xbd, 0x03, 0x00, 0xa4, 0xbd, 0x03, 0x0b, 0x53, 0xbf, 0x80, 0x8e, 0x57, 0x1d, 0x62, 0x80, 0x3b, - 0xf7, 0xe4, 0xdd, 0xb6, 0xc3, 0x33, 0x09, 0xb0, 0x01, 0x0c, 0x4b, 0x47, 0xdb, 0x47, 0xd3, 0x45, - 0x8d, 0xe3, 0x05, 0x46, 0x49, 0xc5, 0xa9, 0x3d, 0xc1, 0x5a, 0x72, 0x83, 0xac, 0xaf, 0xd9, 0x8e, - 0xc1, 0x82, 0xed, 0x73, 0x7b, 0x82, 0x0b, 0x7a, 0x95, 0xa3, 0x44, 0x7b, 0x42, 0x2e, 0x74, 0xe6, - 0x39, 0x34, 0xb8, 0xdb, 0x78, 0xef, 0xbf, 0x94, 0x4d, 0x79, 0x7d, 0x71, 0xef, 0xe6, 0xe9, 0x0b, - 0x72, 0xa6, 0xf6, 0xa6, 0xe4, 0x4c, 0xfd, 0x46, 0x36, 0xe5, 0x69, 0xc9, 0x3d, 0x9d, 0xdb, 0x30, - 0x10, 0x86, 0x9c, 0xdb, 0x30, 0x4c, 0x2b, 0x69, 0x1a, 0x9a, 0x48, 0x14, 0xc9, 0x82, 0x5a, 0xd8, - 0x32, 0x0b, 0xea, 0x4f, 0xe7, 0xba, 0x3d, 0xbd, 0x39, 0x92, 0xfd, 0x4e, 0x64, 0x7f, 0x15, 0x0d, - 0x06, 0x92, 0xad, 0x94, 0xc1, 0x9e, 0x19, 0x0e, 0xb2, 0x4b, 0x30, 0x30, 0x94, 0x11, 0x88, 0xf0, - 0x25, 0xd6, 0xd6, 0x9a, 0xf9, 0x26, 0x8b, 0xb0, 0x3e, 0xcc, 0x63, 0x67, 0xeb, 0x9e, 0x5e, 0x77, - 0xcd, 0x37, 0x89, 0x16, 0xa0, 0xd5, 0x7f, 0x94, 0x4d, 0x7c, 0xbf, 0x74, 0xd4, 0x47, 0x3b, 0xe8, - 0xa3, 0x04, 0x21, 0xb2, 0x97, 0x57, 0x47, 0x42, 0xdc, 0x81, 0x10, 0xff, 0x3c, 0x9b, 0xf8, 0x4e, - 0xed, 0x48, 0x88, 0x3b, 0x99, 0x2d, 0x1e, 0x43, 0x03, 0x9a, 0xbd, 0xe6, 0x4e, 0xc0, 0x9e, 0x85, - 0xcd, 0x15, 0x30, 0x51, 0x3b, 0xf6, 0x9a, 0x5b, 0x87, 0xdd, 0x88, 0x16, 0x12, 0xa8, 0xdf, 0xcc, - 0x76, 0x79, 0xc9, 0x77, 0x24, 0xf8, 0xb7, 0x73, 0x89, 0xfc, 0xd5, 0xac, 0xf4, 0x52, 0xf0, 0x9e, - 0x4e, 0x12, 0x5e, 0x6b, 0xac, 0x90, 0x96, 0x1e, 0x4d, 0x12, 0xee, 0x02, 0x94, 0xe7, 0x18, 0x0d, - 0x49, 0xd4, 0x2f, 0x65, 0x23, 0x4f, 0x25, 0x8f, 0x64, 0xb7, 0x6d, 0xd9, 0x05, 0x5a, 0xc7, 0x5f, - 0x7f, 0x1e, 0x49, 0x6e, 0xbb, 0x92, 0xfb, 0x44, 0x36, 0xf2, 0x50, 0xf6, 0xde, 0xcd, 0x17, 0xfc, - 0xa5, 0x6c, 0xfc, 0xd1, 0xef, 0xbd, 0xab, 0x49, 0x8f, 0xa1, 0x01, 0x2e, 0x87, 0x60, 0xa9, 0x60, - 0xf3, 0x3e, 0x03, 0xc2, 0x01, 0x6a, 0x40, 0xa0, 0x7e, 0x47, 0x16, 0xc9, 0x0f, 0x98, 0xef, 0x51, - 0x1d, 0xfa, 0xd5, 0xac, 0xfc, 0x74, 0xfb, 0xde, 0xd5, 0x9f, 0xcb, 0x08, 0xd5, 0x3a, 0x8b, 0x0d, - 0x1e, 0xf9, 0xb3, 0x57, 0x38, 0x81, 0x0f, 0xa0, 0x9a, 0x40, 0xa1, 0xfe, 0xcf, 0x6c, 0xe2, 0x7b, - 0xf2, 0x7b, 0x57, 0x80, 0x4f, 0xc1, 0xa9, 0x78, 0xc3, 0x0a, 0x27, 0x72, 0x38, 0x84, 0xa4, 0xe3, - 0x2f, 0x96, 0xda, 0xcc, 0x27, 0xc4, 0xef, 0x4b, 0x30, 0xd7, 0x20, 0x70, 0x7c, 0x68, 0xae, 0x89, - 0x37, 0x0c, 0x82, 0xe1, 0xf6, 0x3b, 0xd9, 0xad, 0x9e, 0xdf, 0xdf, 0xcb, 0xab, 0x6a, 0x5f, 0x55, - 0x5f, 0x87, 0x30, 0x71, 0xb4, 0x27, 0x86, 0x58, 0xe2, 0xad, 0x36, 0x03, 0x89, 0x37, 0x62, 0x9c, - 0x4a, 0xfd, 0xd3, 0xde, 0xe4, 0xb7, 0xdf, 0xf7, 0xae, 0x08, 0xcf, 0xa2, 0x7c, 0x55, 0xf7, 0x56, - 0xb8, 0x26, 0xc3, 0x6d, 0x5d, 0x5b, 0xf7, 0x56, 0x34, 0x80, 0xe2, 0x4b, 0xa8, 0x5f, 0xd3, 0xd7, - 0xd8, 0x99, 0x67, 0x21, 0x4c, 0x8a, 0xe6, 0xe8, 0x6b, 0x75, 0x76, 0xee, 0x19, 0xa0, 0xb1, 0x1a, - 0x24, 0xe5, 0x63, 0x27, 0xdf, 0x90, 0xd1, 0x8a, 0x25, 0xe5, 0x0b, 0x52, 0xf1, 0x9d, 0x45, 0xf9, - 0x71, 0xdb, 0x58, 0x07, 0x67, 0x96, 0x21, 0x56, 0xd9, 0xa2, 0x6d, 0xac, 0x6b, 0x00, 0xc5, 0x9f, - 0xcc, 0xa0, 0xbe, 0x69, 0xa2, 0x1b, 0x74, 0x84, 0x0c, 0x74, 0xf3, 0x05, 0xf9, 0xc0, 0xfe, 0xf8, - 0x82, 0x8c, 0xad, 0xb0, 0xca, 0x44, 0x45, 0xe1, 0xf5, 0xe3, 0xeb, 0xa8, 0x7f, 0x42, 0xf7, 0xc8, - 0xb2, 0xed, 0xac, 0x83, 0x77, 0xcb, 0x48, 0xe8, 0xe9, 0x2c, 0xe9, 0x8f, 0x4f, 0xc4, 0x6e, 0xc6, - 0x1a, 0xfc, 0x97, 0x16, 0x14, 0xa6, 0x62, 0xe1, 0xc9, 0xba, 0x07, 0x43, 0xb1, 0xb0, 0xac, 0xdc, - 0x41, 0x4e, 0xee, 0xe0, 0x58, 0x79, 0x28, 0xf9, 0x58, 0x19, 0xac, 0x47, 0xf0, 0x80, 0x83, 0x54, - 0x78, 0xc3, 0xb0, 0xe8, 0x33, 0xeb, 0x11, 0xa0, 0x90, 0x09, 0x4f, 0x13, 0x48, 0xd4, 0xaf, 0xf5, - 0xa2, 0xc4, 0x97, 0xa2, 0x47, 0x4a, 0x7e, 0xa4, 0xe4, 0xa1, 0x92, 0x97, 0x63, 0x4a, 0x7e, 0x26, - 0xfe, 0xf6, 0xf8, 0x1d, 0xaa, 0xe1, 0x3f, 0x98, 0x8f, 0x45, 0x2e, 0xb8, 0xb7, 0x77, 0x97, 0xa1, - 0xf4, 0x7a, 0xb7, 0x94, 0x5e, 0x30, 0x20, 0x0a, 0x5b, 0x0e, 0x88, 0xbe, 0xed, 0x0e, 0x88, 0xfe, - 0xd4, 0x01, 0x11, 0x2a, 0xc8, 0x40, 0xaa, 0x82, 0x54, 0xf8, 0xa0, 0x41, 0xdd, 0x13, 0x28, 0x9c, - 0xdd, 0xdc, 0x28, 0x8e, 0xd0, 0xd1, 0x94, 0x98, 0x39, 0x01, 0x58, 0xa8, 0x5f, 0xcd, 0x77, 0x09, - 0x37, 0x72, 0x20, 0x3a, 0xf2, 0x14, 0xca, 0x95, 0xda, 0x6d, 0xae, 0x1f, 0xc7, 0x85, 0x48, 0x27, - 0x29, 0xa5, 0x28, 0x35, 0x7e, 0x1e, 0xe5, 0x4a, 0xb7, 0x6b, 0xd1, 0xa4, 0x09, 0xa5, 0xdb, 0x35, - 0xfe, 0x25, 0xa9, 0x65, 0x6f, 0xd7, 0xf0, 0x8b, 0x61, 0xf4, 0xc2, 0x95, 0x8e, 0xb5, 0xca, 0x37, - 0x8a, 0xdc, 0x09, 0xd6, 0xf7, 0xb4, 0x69, 0x50, 0x14, 0xdd, 0x2e, 0x46, 0x68, 0x23, 0xda, 0x54, - 0xd8, 0xbe, 0x36, 0xf5, 0x6d, 0xa9, 0x4d, 0xfd, 0xdb, 0xd5, 0xa6, 0x81, 0x6d, 0x68, 0x13, 0xda, - 0x52, 0x9b, 0x06, 0xf7, 0xae, 0x4d, 0x6d, 0x74, 0x26, 0x1e, 0x22, 0x2a, 0xd0, 0x08, 0x0d, 0xe1, - 0x38, 0x96, 0x3b, 0x96, 0xc0, 0xd5, 0x7f, 0x87, 0x61, 0xeb, 0x2c, 0xa9, 0x7e, 0x34, 0x25, 0xbd, - 0x96, 0x50, 0x5a, 0xfd, 0xa5, 0x6c, 0x7a, 0x64, 0xab, 0xc3, 0x39, 0xc5, 0x7d, 0x4b, 0xa2, 0x94, - 0xf2, 0xf2, 0x4b, 0xe3, 0x74, 0x29, 0x47, 0xd8, 0x26, 0xc9, 0xec, 0x2b, 0x99, 0xb4, 0x70, 0x5b, - 0x7b, 0x92, 0xd8, 0x23, 0x71, 0x67, 0x35, 0xf0, 0x9e, 0x77, 0x65, 0x2f, 0xb5, 0x68, 0x8e, 0xf6, - 0xdc, 0x2e, 0x73, 0xb4, 0xff, 0x66, 0x06, 0x1d, 0xbf, 0xd1, 0x59, 0x24, 0xdc, 0x39, 0x2d, 0x68, - 0xc6, 0x1b, 0x08, 0x51, 0x30, 0x77, 0x62, 0xc9, 0x80, 0x13, 0xcb, 0x7b, 0xc5, 0x50, 0x59, 0x91, - 0x02, 0x97, 0x43, 0x6a, 0xe6, 0xc0, 0x72, 0xce, 0x77, 0xb1, 0x5c, 0xed, 0x2c, 0x92, 0x7a, 0xcc, - 0x93, 0x45, 0xe0, 0x7e, 0xe6, 0x25, 0xe6, 0xbc, 0xbe, 0x5b, 0xa7, 0x91, 0x5f, 0xc8, 0xa6, 0x46, - 0x27, 0x3b, 0xb4, 0x69, 0xf4, 0x3e, 0x94, 0xd8, 0x2b, 0xd1, 0x74, 0x7a, 0x09, 0x24, 0x11, 0x8e, - 0x49, 0x5c, 0x92, 0x05, 0x76, 0xc8, 0x93, 0x3b, 0xbe, 0xad, 0x02, 0xfb, 0xfd, 0x4c, 0x6a, 0x14, - 0xb9, 0xc3, 0x2a, 0x30, 0xf5, 0x3f, 0xe4, 0xfc, 0xe0, 0x75, 0x7b, 0xfa, 0x84, 0xc7, 0xd0, 0x00, - 0xcf, 0xd0, 0x23, 0xfb, 0xd6, 0xf2, 0xa3, 0x3c, 0x38, 0x1a, 0x0e, 0x08, 0xe8, 0x32, 0xef, 0x07, - 0xd7, 0x0a, 0xb2, 0xfa, 0xc3, 0x32, 0x6f, 0x72, 0x28, 0xa5, 0x17, 0x48, 0xe8, 0x42, 0x3e, 0x79, - 0xd7, 0xf4, 0xc0, 0x2a, 0xa0, 0x7d, 0x99, 0x63, 0x0b, 0x39, 0xb9, 0x6b, 0x7a, 0xcc, 0x26, 0x08, - 0xd0, 0x74, 0x91, 0xae, 0x85, 0xa9, 0xab, 0xf9, 0x22, 0xed, 0xf2, 0x0c, 0xde, 0xfc, 0x31, 0xd7, - 0x63, 0x68, 0x80, 0x3b, 0xac, 0x72, 0x37, 0x13, 0xde, 0x5a, 0xee, 0xe2, 0x0a, 0xad, 0x0d, 0x08, - 0x28, 0x47, 0x8d, 0x2c, 0x87, 0x8e, 0x75, 0xc0, 0xd1, 0x01, 0x88, 0xc6, 0x31, 0xf8, 0x2a, 0x1a, - 0xa9, 0x79, 0xba, 0x65, 0xe8, 0x8e, 0x31, 0xdf, 0xf1, 0xda, 0x1d, 0x4f, 0x34, 0x4a, 0x5d, 0xcf, - 0xb0, 0x3b, 0x9e, 0x16, 0xa1, 0xc0, 0x4f, 0xa0, 0x61, 0x1f, 0x32, 0xe9, 0x38, 0xb6, 0x23, 0x5a, - 0x1e, 0xae, 0x67, 0x10, 0xc7, 0xd1, 0x64, 0x02, 0xfc, 0x3e, 0x34, 0x5c, 0xb1, 0xee, 0xd8, 0x0d, - 0xf6, 0xe2, 0x56, 0x9b, 0xe1, 0x76, 0x08, 0x3c, 0x90, 0x32, 0x03, 0x44, 0xbd, 0xe3, 0x34, 0x35, - 0x99, 0x50, 0xdd, 0xcc, 0xc6, 0x63, 0xfc, 0xdd, 0xbb, 0x9b, 0x96, 0x4b, 0xb2, 0x33, 0x1d, 0x78, - 0x90, 0x82, 0x41, 0x28, 0xfa, 0xf2, 0x32, 0xbb, 0xf0, 0x2a, 0xea, 0xbf, 0x41, 0xd6, 0x99, 0xdf, - 0x67, 0x21, 0x74, 0x15, 0x5e, 0xe5, 0x30, 0xf1, 0xc4, 0xd5, 0xa7, 0x53, 0xbf, 0x9c, 0x8d, 0x47, - 0x2f, 0xbc, 0x77, 0x85, 0xfd, 0x04, 0xea, 0x03, 0x51, 0x56, 0xfc, 0x23, 0x7f, 0x10, 0x20, 0x88, - 0x5b, 0xf6, 0x40, 0xf6, 0xc9, 0xd4, 0x1f, 0x2f, 0x44, 0x43, 0x5a, 0xde, 0xbb, 0xd2, 0x7b, 0x01, - 0x0d, 0x4e, 0xd8, 0x96, 0x6b, 0xba, 0x1e, 0xb1, 0x1a, 0xbe, 0xc2, 0x9e, 0xa6, 0x06, 0x55, 0x23, - 0x04, 0x8b, 0x2f, 0x83, 0x04, 0xea, 0xdd, 0x28, 0x2f, 0x7e, 0x06, 0x0d, 0x80, 0xc8, 0xc1, 0x4f, - 0x9a, 0x4d, 0x78, 0x70, 0x5b, 0xb0, 0x48, 0x81, 0x51, 0x27, 0xe9, 0x90, 0x14, 0xdf, 0x44, 0xfd, - 0x13, 0x2b, 0x66, 0xd3, 0x70, 0x88, 0x05, 0xfe, 0xc2, 0x42, 0x8c, 0x03, 0xb9, 0x2f, 0x2f, 0xc3, - 0xbf, 0x40, 0xcb, 0x9a, 0xd3, 0xe0, 0xc5, 0xa4, 0xb7, 0x51, 0x1c, 0x76, 0xe6, 0xfb, 0xb3, 0x08, - 0x85, 0x05, 0xf0, 0x03, 0x28, 0x1b, 0x64, 0x85, 0x05, 0x37, 0x15, 0x49, 0x83, 0xb2, 0xb0, 0x54, - 0xf0, 0xb1, 0x9d, 0xdd, 0x72, 0x6c, 0xdf, 0x44, 0x05, 0x76, 0xe2, 0x05, 0x9e, 0xe4, 0x42, 0x94, - 0xbd, 0xd4, 0x06, 0x5f, 0x06, 0x7a, 0xb6, 0x99, 0x05, 0xcb, 0x53, 0xf2, 0xca, 0x66, 0xcc, 0xce, - 0x34, 0x50, 0x2f, 0xfc, 0x85, 0x2f, 0xa0, 0xfc, 0x82, 0x9f, 0x51, 0x72, 0x98, 0xcd, 0xd2, 0x11, - 0xf9, 0x01, 0x9e, 0x76, 0xd3, 0x84, 0x6d, 0x79, 0xb4, 0x6a, 0x68, 0xf5, 0x10, 0x97, 0x0b, 0x87, - 0x49, 0x72, 0xe1, 0x30, 0xf5, 0x9f, 0x66, 0x13, 0x82, 0xad, 0xde, 0xbb, 0xc3, 0xe4, 0x39, 0x84, - 0xe0, 0xa1, 0x35, 0x95, 0xa7, 0xff, 0x44, 0x03, 0x46, 0x09, 0x30, 0x02, 0xb5, 0x95, 0xb6, 0x1d, - 0x21, 0xb1, 0xfa, 0xdb, 0x99, 0x58, 0x84, 0xce, 0x3d, 0xc9, 0x51, 0xb4, 0xca, 0xb2, 0xbb, 0x34, - 0x63, 0xfd, 0xbe, 0xc8, 0xed, 0xac, 0x2f, 0xe4, 0x6f, 0xd9, 0x07, 0xcb, 0xf4, 0x20, 0xbf, 0xe5, - 0x6b, 0xd9, 0xa4, 0x78, 0xa5, 0x87, 0x53, 0xc5, 0xaf, 0x05, 0x46, 0x69, 0x3e, 0x12, 0x21, 0x1a, - 0xa0, 0xd1, 0xac, 0xb7, 0xdc, 0x4c, 0xfd, 0x28, 0x3a, 0x16, 0x89, 0xe2, 0xc9, 0x13, 0x90, 0x5e, - 0xe8, 0x1e, 0x0e, 0x34, 0xfd, 0x89, 0xbe, 0x44, 0xa6, 0xfe, 0xaf, 0x4c, 0xf7, 0x18, 0xae, 0x07, - 0xae, 0x3a, 0x09, 0x02, 0xc8, 0xfd, 0xf5, 0x08, 0x60, 0x1f, 0xb6, 0xc1, 0x87, 0x5b, 0x00, 0xef, - 0x90, 0xc9, 0xe3, 0xed, 0x16, 0xc0, 0x8f, 0x67, 0xb6, 0x0c, 0xc1, 0x7b, 0xd0, 0x32, 0x50, 0xff, - 0x6d, 0x26, 0x31, 0x54, 0xee, 0x9e, 0xda, 0xf5, 0x22, 0x2a, 0x30, 0xb7, 0x1a, 0xde, 0x2a, 0x21, - 0xb9, 0x10, 0x85, 0xa6, 0xa5, 0xe3, 0x66, 0x58, 0x3c, 0x83, 0xfa, 0x58, 0x1b, 0x0c, 0xde, 0x1b, - 0x0f, 0x77, 0x89, 0xd7, 0x6b, 0xa4, 0x4d, 0x8e, 0x1c, 0xad, 0xfe, 0x56, 0x26, 0x16, 0xb9, 0xf7, - 0x00, 0xbf, 0x2d, 0x9c, 0xaa, 0x73, 0xdb, 0x9f, 0xaa, 0xd5, 0x3f, 0xc9, 0x26, 0x07, 0x0e, 0x3e, - 0xc0, 0x0f, 0xd9, 0x8f, 0xe3, 0xb4, 0xdd, 0xad, 0x5b, 0x0b, 0x68, 0x44, 0x96, 0x05, 0x5f, 0xb6, - 0xce, 0x27, 0x87, 0x4f, 0x4e, 0x69, 0x45, 0x84, 0x87, 0xfa, 0x56, 0x26, 0x1e, 0xf3, 0xf8, 0xc0, - 0xe7, 0xa7, 0xdd, 0x69, 0x8b, 0xfc, 0x29, 0xef, 0x90, 0xb5, 0x66, 0x3f, 0x3e, 0xe5, 0x1d, 0xb2, - 0x6a, 0xec, 0xee, 0x53, 0x7e, 0x36, 0x9b, 0x16, 0x32, 0xfa, 0xc0, 0x3f, 0xe8, 0x83, 0xa2, 0x90, - 0x59, 0xcb, 0xf8, 0xa7, 0x3d, 0x90, 0x16, 0xa3, 0x39, 0x85, 0x67, 0x8c, 0xcf, 0xee, 0xc6, 0x78, - 0xa2, 0xb0, 0xde, 0x21, 0x8a, 0x7c, 0x38, 0x84, 0xf5, 0x0e, 0x19, 0x2a, 0xef, 0x3c, 0x61, 0xfd, - 0x7a, 0x76, 0xbb, 0x71, 0xca, 0x8f, 0x84, 0x17, 0x13, 0xde, 0x67, 0xb3, 0xf1, 0xf8, 0xf9, 0x07, - 0x2e, 0xa6, 0x29, 0x54, 0xe0, 0x91, 0xfc, 0x53, 0x85, 0xc3, 0xf0, 0x69, 0x16, 0x0d, 0xff, 0x8e, - 0x6b, 0x88, 0x5f, 0xe4, 0x6c, 0x4f, 0x24, 0x8c, 0x56, 0xfd, 0x66, 0x26, 0x12, 0x6c, 0xfe, 0x40, - 0x8e, 0x10, 0x76, 0xb5, 0x24, 0xe1, 0x97, 0xfc, 0xc3, 0xcc, 0x7c, 0x24, 0x52, 0x70, 0xf0, 0x3d, - 0x65, 0xe2, 0xe9, 0x66, 0x33, 0x5a, 0x9e, 0xc7, 0x04, 0xf8, 0x72, 0x16, 0x8d, 0xc5, 0x48, 0xf1, - 0x05, 0x29, 0x4a, 0x0e, 0x1c, 0x4b, 0x46, 0x9c, 0xc7, 0x59, 0xbc, 0x9c, 0x1d, 0x9c, 0xa4, 0x5e, - 0x40, 0xf9, 0xb2, 0xbe, 0xce, 0xbe, 0xad, 0x97, 0xb1, 0x34, 0xf4, 0x75, 0xf1, 0xc4, 0x0d, 0xf0, - 0x78, 0x11, 0xdd, 0xc7, 0xee, 0x43, 0x4c, 0xdb, 0x5a, 0x30, 0x5b, 0xa4, 0x62, 0xcd, 0x9a, 0xcd, - 0xa6, 0xe9, 0xf2, 0x4b, 0xbd, 0xc7, 0x36, 0x37, 0x8a, 0x17, 0x3d, 0xdb, 0xd3, 0x9b, 0x75, 0xe2, - 0x93, 0xd5, 0x3d, 0xb3, 0x45, 0xea, 0xa6, 0x55, 0x6f, 0x01, 0xa5, 0xc0, 0x32, 0x99, 0x15, 0xae, - 0xb0, 0xa0, 0xd0, 0xb5, 0x86, 0x6e, 0x59, 0xc4, 0xa8, 0x58, 0xe3, 0xeb, 0x1e, 0x61, 0x97, 0x81, - 0x39, 0x76, 0x24, 0xc8, 0xde, 0x86, 0x33, 0x34, 0x65, 0xbc, 0x48, 0x09, 0xb4, 0x84, 0x42, 0xea, - 0x6f, 0xe4, 0x13, 0xf2, 0x0c, 0x1c, 0x22, 0xf5, 0xf1, 0x7b, 0x3a, 0xbf, 0x45, 0x4f, 0x5f, 0x41, - 0x7d, 0x3c, 0xc4, 0x27, 0xbf, 0x60, 0x00, 0x67, 0xf6, 0x3b, 0x0c, 0x24, 0xde, 0xd0, 0x70, 0x2a, - 0xdc, 0x44, 0x67, 0x16, 0x68, 0x37, 0x25, 0x77, 0x66, 0x61, 0x17, 0x9d, 0xd9, 0x85, 0x1f, 0x7e, - 0x1d, 0x9d, 0x02, 0x6c, 0x42, 0xb7, 0xf6, 0x41, 0x55, 0x10, 0x39, 0x8a, 0x55, 0x95, 0xdc, 0xb9, - 0x69, 0xe5, 0xf1, 0x07, 0xd1, 0x50, 0x30, 0x40, 0x4c, 0xe2, 0xf2, 0x9b, 0x8b, 0x2e, 0xe3, 0x8c, - 0x85, 0x65, 0xa3, 0x60, 0x70, 0x21, 0x93, 0x43, 0x7b, 0x49, 0xbc, 0xd4, 0x7f, 0x93, 0xe9, 0x96, - 0xef, 0xe0, 0xc0, 0x67, 0xe5, 0x97, 0x50, 0x9f, 0xc1, 0x3e, 0x8a, 0xeb, 0x54, 0xf7, 0x8c, 0x08, - 0x8c, 0x54, 0xf3, 0xcb, 0xa8, 0x7f, 0x9c, 0xe9, 0x9a, 0x66, 0xe1, 0xb0, 0x7f, 0xde, 0x67, 0x73, - 0x29, 0x9f, 0xc7, 0x27, 0xd1, 0x4b, 0x68, 0xd4, 0x0c, 0x23, 0x56, 0xd7, 0xc3, 0xf0, 0x53, 0xda, - 0x31, 0x01, 0x0e, 0xa3, 0xeb, 0x1a, 0x3a, 0xe9, 0x3b, 0x3e, 0x3a, 0xbe, 0x87, 0x98, 0x5b, 0xef, - 0x38, 0x26, 0x1b, 0x97, 0xda, 0x09, 0x37, 0xe2, 0x3e, 0xe6, 0xde, 0x74, 0x4c, 0x5a, 0x81, 0xee, - 0xad, 0x10, 0x4b, 0xaf, 0xaf, 0xd9, 0xce, 0x2a, 0xc4, 0xfe, 0x64, 0x83, 0x53, 0x3b, 0xc6, 0xe0, - 0xb7, 0x7d, 0x30, 0x7e, 0x08, 0x0d, 0x2f, 0x37, 0x3b, 0x24, 0x88, 0xb6, 0xc8, 0xee, 0xfa, 0xb4, - 0x21, 0x0a, 0x0c, 0x6e, 0x48, 0xce, 0x21, 0x04, 0x44, 0x1e, 0x24, 0xc1, 0x80, 0x8b, 0x3d, 0x6d, - 0x80, 0x42, 0x16, 0x78, 0x77, 0x9d, 0x61, 0x5a, 0xcd, 0x84, 0x54, 0x6f, 0xda, 0xd6, 0x72, 0xdd, - 0x23, 0x4e, 0x0b, 0x1a, 0x0a, 0xce, 0x0c, 0xda, 0x49, 0xa0, 0x80, 0xab, 0x13, 0x77, 0xc6, 0xb6, - 0x96, 0x17, 0x88, 0xd3, 0xa2, 0x4d, 0x7d, 0x0c, 0x61, 0xde, 0x54, 0x07, 0x0e, 0x3d, 0xd8, 0xc7, - 0x81, 0x37, 0x83, 0xc6, 0x3f, 0x82, 0x9d, 0x86, 0xc0, 0x87, 0x15, 0xd1, 0x20, 0x0b, 0x39, 0xc7, - 0x84, 0x06, 0x2e, 0x0c, 0x1a, 0x62, 0x20, 0x90, 0xd7, 0x49, 0xc4, 0xbd, 0x2b, 0x98, 0x57, 0xb7, - 0xc6, 0x7f, 0xa9, 0x9f, 0xca, 0x25, 0x65, 0x86, 0xd8, 0x93, 0xa2, 0x85, 0xd3, 0x6a, 0x76, 0x47, - 0xd3, 0xea, 0x31, 0xab, 0xd3, 0xaa, 0xeb, 0xed, 0x76, 0x7d, 0xc9, 0x6c, 0xc2, 0xb3, 0x2a, 0x58, - 0xf8, 0xb4, 0x61, 0xab, 0xd3, 0x2a, 0xb5, 0xdb, 0x53, 0x0c, 0x88, 0x1f, 0x45, 0x63, 0x94, 0x0e, - 0x3a, 0x29, 0xa0, 0xcc, 0x03, 0x25, 0x65, 0x00, 0x31, 0x5b, 0x7d, 0xda, 0xd3, 0xa8, 0x9f, 0xf3, - 0x64, 0x6b, 0x55, 0xaf, 0xd6, 0xc7, 0x98, 0xb9, 0xb4, 0xe7, 0x02, 0x36, 0x6c, 0x72, 0xed, 0xd5, - 0x06, 0xfc, 0xf2, 0x10, 0x99, 0xd8, 0xea, 0xb4, 0x58, 0x44, 0xac, 0x3e, 0x40, 0x06, 0xbf, 0xf1, - 0x05, 0x34, 0x42, 0xb9, 0x04, 0x02, 0x63, 0xc1, 0x5c, 0x7b, 0xb5, 0x08, 0x14, 0x5f, 0x45, 0x27, - 0x24, 0x08, 0xb3, 0x41, 0xd9, 0x33, 0x81, 0x5e, 0x2d, 0x11, 0xa7, 0xbe, 0x95, 0x8b, 0x27, 0xbe, - 0x38, 0x90, 0xb5, 0x71, 0x1a, 0x21, 0x9e, 0xd7, 0x26, 0xbc, 0xa0, 0x09, 0xbc, 0x96, 0x43, 0x4c, - 0x0a, 0x0f, 0xa1, 0x2c, 0xbe, 0x84, 0xfa, 0xd9, 0x17, 0x55, 0xca, 0x7c, 0xcd, 0x04, 0x37, 0x23, - 0xb7, 0x6d, 0x2e, 0x2d, 0x81, 0x4f, 0x52, 0x80, 0xc6, 0x17, 0x50, 0x5f, 0x79, 0xae, 0x56, 0x2b, - 0xcd, 0xf9, 0xb7, 0x8d, 0xf0, 0x46, 0xc1, 0xb0, 0xdc, 0xba, 0xab, 0x5b, 0xae, 0xe6, 0x23, 0xf1, - 0x43, 0xa8, 0x50, 0xa9, 0x02, 0x19, 0x7b, 0x79, 0x37, 0xb8, 0xb9, 0x51, 0xec, 0x33, 0xdb, 0x8c, - 0x8a, 0xa3, 0xa0, 0xde, 0x5b, 0x95, 0xb2, 0x70, 0xe5, 0xce, 0xea, 0xbd, 0x63, 0x1a, 0x70, 0x75, - 0xa9, 0x05, 0x68, 0xfc, 0x34, 0x1a, 0xaa, 0x11, 0xc7, 0xd4, 0x9b, 0x73, 0x1d, 0xd8, 0x6e, 0x30, - 0x37, 0xa3, 0xb1, 0xcd, 0x8d, 0xe2, 0xb0, 0x0b, 0xf0, 0xba, 0x05, 0x08, 0x4d, 0x22, 0xc3, 0x67, - 0x51, 0x7e, 0xda, 0xb4, 0x7c, 0x37, 0x78, 0xf0, 0x93, 0x5e, 0x31, 0x2d, 0x4f, 0x03, 0xa8, 0xfa, - 0x5f, 0xb2, 0xc9, 0xa9, 0x47, 0x0e, 0x60, 0x6c, 0xed, 0xf2, 0xb6, 0x30, 0xa2, 0x04, 0xf9, 0x3d, - 0x28, 0xc1, 0x12, 0x3a, 0x56, 0x32, 0x5a, 0xa6, 0x55, 0x82, 0x9f, 0xee, 0xec, 0x54, 0x09, 0x06, - 0xa4, 0xf0, 0x0c, 0x2b, 0x82, 0xe6, 0xdf, 0xc3, 0xc2, 0xad, 0x52, 0x54, 0x5d, 0x67, 0xb8, 0x7a, - 0x6b, 0x49, 0xaf, 0x37, 0x58, 0xd6, 0x0e, 0x2d, 0xca, 0x54, 0xfd, 0xbe, 0xec, 0x16, 0xd9, 0x52, - 0xee, 0x45, 0xe9, 0xab, 0x9f, 0xcb, 0x76, 0x4f, 0x58, 0x73, 0x4f, 0x0a, 0xe5, 0xcf, 0xb3, 0x09, - 0xe9, 0x63, 0xf6, 0x24, 0x89, 0x4b, 0xa8, 0x9f, 0xb1, 0x09, 0xdc, 0x35, 0x61, 0xc6, 0x61, 0xca, - 0x0a, 0x33, 0x9d, 0x8f, 0xc6, 0x73, 0xe8, 0x44, 0x69, 0x69, 0x89, 0x34, 0xbc, 0x30, 0xf0, 0xee, - 0x5c, 0x18, 0x6c, 0x93, 0x45, 0x2b, 0xe5, 0xf8, 0x30, 0x70, 0x2f, 0x04, 0x95, 0x48, 0x2c, 0x87, - 0x17, 0xd0, 0xc9, 0x28, 0xbc, 0xc6, 0x4c, 0xbd, 0xbc, 0x10, 0xc0, 0x34, 0xc6, 0x91, 0xfd, 0xa7, - 0xa5, 0x94, 0x4d, 0x6a, 0x25, 0x4c, 0xa7, 0xbd, 0xdd, 0x5a, 0x09, 0x73, 0x6b, 0x62, 0x39, 0xf5, - 0xcb, 0x39, 0x31, 0xcb, 0xce, 0xbd, 0xeb, 0x58, 0x73, 0x4d, 0x72, 0xa7, 0xdd, 0xee, 0x90, 0x79, - 0x9a, 0x47, 0x8a, 0x30, 0x3a, 0x8e, 0xef, 0x79, 0x16, 0xbc, 0x54, 0x07, 0xa0, 0xe8, 0x43, 0x16, - 0x50, 0xe2, 0x0a, 0xca, 0x97, 0x9c, 0x65, 0x66, 0xc6, 0x6c, 0xf5, 0x78, 0x46, 0x77, 0x96, 0xdd, - 0xe4, 0xc7, 0x33, 0x94, 0x85, 0xfa, 0xbd, 0xd9, 0x2e, 0x59, 0x78, 0xee, 0xc9, 0x49, 0xe4, 0x47, - 0xb2, 0x69, 0xf9, 0x74, 0x0e, 0xab, 0x8b, 0xd0, 0xdb, 0x2c, 0x9c, 0xc3, 0xed, 0x3f, 0xb5, 0x8f, - 0xc2, 0xf9, 0xbd, 0x6c, 0x5a, 0x72, 0xa0, 0x23, 0xe1, 0xec, 0x6e, 0x82, 0x4c, 0x14, 0xe9, 0x3d, - 0x6c, 0x73, 0x8b, 0xaa, 0xd0, 0xbb, 0x4b, 0x37, 0x99, 0x24, 0x91, 0x1e, 0x0d, 0xe1, 0x3d, 0x69, - 0xe9, 0xef, 0x67, 0x53, 0x93, 0x60, 0x1d, 0xc9, 0x74, 0x3f, 0x65, 0x7a, 0x34, 0xf4, 0xf7, 0x34, - 0xf4, 0x13, 0x65, 0x7a, 0x34, 0xf6, 0xf7, 0xa4, 0xa7, 0xdf, 0x93, 0x8b, 0xa7, 0x79, 0xbb, 0x57, - 0x15, 0xd4, 0xd9, 0xa5, 0x82, 0xfa, 0xe5, 0xf0, 0xcb, 0xe8, 0x58, 0x28, 0x4b, 0x31, 0xdc, 0x0b, - 0x5c, 0xb4, 0x35, 0x28, 0xaa, 0xfe, 0x06, 0xc5, 0xf1, 0xb8, 0x04, 0x51, 0x6a, 0xf5, 0x9b, 0xb9, - 0x78, 0xae, 0xbc, 0xa3, 0xde, 0xd8, 0x65, 0x6f, 0xdc, 0x44, 0x27, 0x27, 0x3a, 0x8e, 0x43, 0x2c, - 0x2f, 0xb9, 0x53, 0xe0, 0x24, 0xaf, 0xc1, 0x28, 0xea, 0xf1, 0xce, 0x49, 0x29, 0x4c, 0xd9, 0x72, - 0x97, 0xd6, 0x28, 0xdb, 0xbe, 0x90, 0x6d, 0x87, 0x51, 0x24, 0xb1, 0x4d, 0x2e, 0xac, 0xfe, 0x4e, - 0x36, 0x9e, 0xdd, 0xf0, 0xa8, 0xeb, 0x77, 0xd7, 0xf5, 0x8f, 0xce, 0xb2, 0x6c, 0x31, 0x37, 0x4c, - 0xcb, 0xc0, 0xa7, 0xd1, 0x7d, 0x37, 0x6b, 0x93, 0x5a, 0xfd, 0x46, 0x65, 0xae, 0x5c, 0xbf, 0x39, - 0x57, 0xab, 0x4e, 0x4e, 0x54, 0xa6, 0x2a, 0x93, 0xe5, 0xd1, 0x1e, 0x7c, 0x1c, 0x1d, 0x0b, 0x51, - 0xd3, 0x37, 0x67, 0x4b, 0x73, 0xa3, 0x19, 0x3c, 0x86, 0x86, 0x43, 0xe0, 0xf8, 0xfc, 0xc2, 0x68, - 0xf6, 0xd1, 0xf7, 0xa0, 0x41, 0xb8, 0x0e, 0x63, 0xc7, 0xba, 0x78, 0x08, 0xf5, 0xcf, 0x8f, 0xd7, - 0x26, 0xb5, 0x5b, 0xc0, 0x04, 0xa1, 0x42, 0x79, 0x72, 0x8e, 0x32, 0xcc, 0x3c, 0xfa, 0xdf, 0x33, - 0x08, 0xd5, 0xa6, 0x16, 0xaa, 0x9c, 0x70, 0x10, 0xf5, 0x55, 0xe6, 0x6e, 0x95, 0x66, 0x2a, 0x94, - 0xae, 0x1f, 0xe5, 0xe7, 0xab, 0x93, 0xb4, 0x86, 0x01, 0xd4, 0x3b, 0x31, 0x33, 0x5f, 0x9b, 0x1c, - 0xcd, 0x52, 0xa0, 0x36, 0x59, 0x2a, 0x8f, 0xe6, 0x28, 0xf0, 0xb6, 0x56, 0x59, 0x98, 0x1c, 0xcd, - 0xd3, 0x3f, 0x67, 0x6a, 0x0b, 0xa5, 0x85, 0xd1, 0x5e, 0xfa, 0xe7, 0x14, 0xfc, 0x59, 0xa0, 0xcc, - 0x6a, 0x93, 0x0b, 0xf0, 0xa3, 0x8f, 0x36, 0x61, 0xca, 0xff, 0xd5, 0x4f, 0x51, 0x94, 0x75, 0xb9, - 0xa2, 0x8d, 0x0e, 0xd0, 0x1f, 0x94, 0x25, 0xfd, 0x81, 0x68, 0xe3, 0xb4, 0xc9, 0xd9, 0xf9, 0x5b, - 0x93, 0xa3, 0x83, 0x94, 0xd7, 0xec, 0x0d, 0x0a, 0x1e, 0xa2, 0x7f, 0x6a, 0xb3, 0xf4, 0xcf, 0x61, - 0xca, 0x49, 0x9b, 0x2c, 0xcd, 0x54, 0x4b, 0x0b, 0xd3, 0xa3, 0x23, 0xb4, 0x3d, 0xc0, 0xf3, 0x18, - 0x2b, 0x39, 0x57, 0x9a, 0x9d, 0x1c, 0x1d, 0xe5, 0x34, 0xe5, 0x99, 0xca, 0xdc, 0x8d, 0xd1, 0x31, - 0x68, 0xc8, 0xeb, 0xb3, 0xf0, 0x03, 0xd3, 0x02, 0xf0, 0xd7, 0xf1, 0x47, 0x3f, 0x8c, 0x0a, 0xf3, - 0x35, 0xb8, 0xbc, 0x38, 0x85, 0x8e, 0xcf, 0xd7, 0xea, 0x0b, 0xaf, 0x57, 0x27, 0x23, 0xf2, 0x1e, - 0x43, 0xc3, 0x3e, 0x62, 0xa6, 0x32, 0x77, 0xf3, 0x03, 0x4c, 0xda, 0x3e, 0x68, 0xb6, 0x34, 0x31, - 0x5f, 0x1b, 0xcd, 0xd2, 0x5e, 0xf1, 0x41, 0xb7, 0x2b, 0x73, 0xe5, 0xf9, 0xdb, 0xb5, 0xd1, 0xdc, - 0xa3, 0x77, 0xd0, 0x10, 0xcb, 0xb5, 0x33, 0xef, 0x98, 0xcb, 0xa6, 0x85, 0xcf, 0xa1, 0xd3, 0xe5, - 0xc9, 0x5b, 0x95, 0x89, 0xc9, 0xfa, 0xbc, 0x56, 0xb9, 0x5e, 0x99, 0x8b, 0xd4, 0x74, 0x1f, 0x1a, - 0x93, 0xd1, 0xa5, 0x6a, 0x65, 0x34, 0x83, 0x4f, 0x22, 0x2c, 0x83, 0x5f, 0x2d, 0xcd, 0x4e, 0x8d, - 0x66, 0xb1, 0x82, 0x4e, 0xc8, 0xf0, 0xca, 0xdc, 0xc2, 0xcd, 0xb9, 0xc9, 0xd1, 0xdc, 0xa3, 0x3f, - 0x99, 0x41, 0xf7, 0x25, 0xc6, 0x63, 0xc3, 0x2a, 0x3a, 0x3f, 0x39, 0x53, 0xaa, 0x2d, 0x54, 0x26, - 0x6a, 0x93, 0x25, 0x6d, 0x62, 0xba, 0x3e, 0x51, 0x5a, 0x98, 0xbc, 0x3e, 0xaf, 0xbd, 0x5e, 0xbf, - 0x3e, 0x39, 0x37, 0xa9, 0x95, 0x66, 0x46, 0x7b, 0xf0, 0x43, 0xa8, 0x98, 0x42, 0x53, 0x9b, 0x9c, - 0xb8, 0xa9, 0x55, 0x16, 0x5e, 0x1f, 0xcd, 0xe0, 0x07, 0xd1, 0xb9, 0x54, 0x22, 0xfa, 0x7b, 0x34, - 0x8b, 0xcf, 0xa3, 0x33, 0x69, 0x24, 0xaf, 0xcd, 0x8c, 0xe6, 0x1e, 0xfd, 0xa1, 0x0c, 0xc2, 0xf1, - 0x80, 0x5a, 0xf8, 0x01, 0x74, 0x96, 0xea, 0x45, 0x3d, 0xbd, 0x81, 0x0f, 0xa2, 0x73, 0x89, 0x14, - 0x42, 0xf3, 0x8a, 0xe8, 0xfe, 0x14, 0x12, 0xde, 0xb8, 0xb3, 0x48, 0x49, 0x26, 0x80, 0xa6, 0x7d, - 0x31, 0x83, 0xee, 0x4b, 0xbc, 0x49, 0xc1, 0x17, 0xd1, 0xc3, 0xa5, 0xf2, 0x2c, 0xed, 0x9b, 0x89, - 0x85, 0xca, 0xfc, 0x5c, 0xad, 0x3e, 0x3b, 0x55, 0xaa, 0x53, 0xed, 0xbb, 0x59, 0x8b, 0xf4, 0xe6, - 0x05, 0xa4, 0x76, 0xa1, 0x9c, 0x98, 0x2e, 0xcd, 0x5d, 0xa7, 0xc3, 0x0f, 0x3f, 0x8c, 0x1e, 0x48, - 0xa5, 0x9b, 0x9c, 0x2b, 0x8d, 0xcf, 0x4c, 0x96, 0x47, 0xb3, 0xf8, 0x11, 0xf4, 0x60, 0x2a, 0x55, - 0xb9, 0x52, 0x63, 0x64, 0xb9, 0xf1, 0xf2, 0x5b, 0xff, 0xee, 0x7c, 0xcf, 0x5b, 0x5f, 0x3f, 0x9f, - 0xf9, 0xbd, 0xaf, 0x9f, 0xcf, 0xfc, 0xc9, 0xd7, 0xcf, 0x67, 0x3e, 0x78, 0x75, 0x27, 0x81, 0xd2, - 0xd8, 0x94, 0xb5, 0x58, 0x80, 0x53, 0xcd, 0xa7, 0xfe, 0x77, 0x00, 0x00, 0x00, 0xff, 0xff, 0xef, - 0x5a, 0x2a, 0xe3, 0xab, 0x69, 0x01, 0x00, + // 15883 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xec, 0xbd, 0x6b, 0x74, 0x24, 0xc7, + 0x75, 0x18, 0x8c, 0x79, 0x60, 0x00, 0x14, 0x1e, 0x0b, 0xd4, 0x2e, 0x77, 0x7b, 0x97, 0xbb, 0x3b, + 0x64, 0x93, 0x5c, 0xed, 0x52, 0xe4, 0x2e, 0xb9, 0x5c, 0x92, 0xe2, 0x4b, 0xe4, 0x00, 0x03, 0x2c, + 0x86, 0x8b, 0xc7, 0xb0, 0x07, 0xbb, 0x2b, 0xea, 0x35, 0x6e, 0x4c, 0x17, 0x80, 0x26, 0x66, 0xba, + 0x47, 0xdd, 0x3d, 0x8b, 0x05, 0xbf, 0x97, 0xe5, 0xcf, 0x0f, 0xc9, 0x96, 0x64, 0x7d, 0xf2, 0xe7, + 0xb7, 0xbf, 0xef, 0xc8, 0x76, 0x9c, 0xd8, 0x8e, 0x6d, 0xd9, 0x8e, 0x8f, 0x6c, 0xd9, 0xd1, 0x89, + 0x1d, 0x25, 0x27, 0xb4, 0x95, 0xf8, 0x58, 0x4e, 0xe2, 0xe3, 0x93, 0x38, 0x90, 0xa3, 0xc4, 0xf9, + 0x81, 0x13, 0x9f, 0xe3, 0x24, 0x3a, 0xb1, 0xe2, 0x38, 0x39, 0x39, 0x75, 0xab, 0xba, 0xbb, 0xaa, + 0x1f, 0x83, 0x27, 0x0d, 0x82, 0x8b, 0x3f, 0xbb, 0x98, 0x7b, 0x6f, 0xdd, 0xaa, 0xbe, 0x75, 0xab, + 0xea, 0x56, 0xd5, 0xad, 0x7b, 0xd1, 0x25, 0x8f, 0x34, 0x49, 0xdb, 0x76, 0xbc, 0x2b, 0x4d, 0xb2, + 0xac, 0x37, 0xd6, 0xaf, 0x78, 0xeb, 0x6d, 0xe2, 0x5e, 0x21, 0x77, 0x88, 0xe5, 0xf9, 0xff, 0x5d, + 0x6e, 0x3b, 0xb6, 0x67, 0xe3, 0x02, 0xfb, 0x75, 0xe6, 0xc4, 0xb2, 0xbd, 0x6c, 0x03, 0xe8, 0x0a, + 0xfd, 0x8b, 0x61, 0xcf, 0x9c, 0x5d, 0xb6, 0xed, 0xe5, 0x26, 0xb9, 0x02, 0xbf, 0x16, 0x3b, 0x4b, + 0x57, 0x5c, 0xcf, 0xe9, 0x34, 0x3c, 0x8e, 0x2d, 0x46, 0xb1, 0x9e, 0xd9, 0x22, 0xae, 0xa7, 0xb7, + 0xda, 0x9c, 0xe0, 0x7c, 0x94, 0x60, 0xcd, 0xd1, 0xdb, 0x6d, 0xe2, 0xf0, 0xca, 0xcf, 0x3c, 0x98, + 0xdc, 0x4e, 0xf8, 0x97, 0x93, 0x3c, 0x9e, 0x4c, 0xe2, 0x33, 0x8a, 0x70, 0x54, 0x3f, 0x97, 0x45, + 0xfd, 0xb3, 0xc4, 0xd3, 0x0d, 0xdd, 0xd3, 0xf1, 0x59, 0xd4, 0x5b, 0xb1, 0x0c, 0x72, 0x57, 0xc9, + 0x3c, 0x90, 0xb9, 0x98, 0x1b, 0x2f, 0x6c, 0x6e, 0x14, 0xb3, 0xc4, 0xd4, 0x18, 0x10, 0x9f, 0x43, + 0xf9, 0x85, 0xf5, 0x36, 0x51, 0xb2, 0x0f, 0x64, 0x2e, 0x0e, 0x8c, 0x0f, 0x6c, 0x6e, 0x14, 0x7b, + 0x41, 0x16, 0x1a, 0x80, 0xf1, 0x83, 0x28, 0x5b, 0x29, 0x2b, 0x39, 0x40, 0x8e, 0x6d, 0x6e, 0x14, + 0x87, 0x3b, 0xa6, 0xf1, 0x98, 0xdd, 0x32, 0x3d, 0xd2, 0x6a, 0x7b, 0xeb, 0x5a, 0xb6, 0x52, 0xc6, + 0x17, 0x50, 0x7e, 0xc2, 0x36, 0x88, 0x92, 0x07, 0x22, 0xbc, 0xb9, 0x51, 0x1c, 0x69, 0xd8, 0x06, + 0x11, 0xa8, 0x00, 0x8f, 0x5f, 0x41, 0xf9, 0x05, 0xb3, 0x45, 0x94, 0xde, 0x07, 0x32, 0x17, 0x07, + 0xaf, 0x9e, 0xb9, 0xcc, 0xa4, 0x72, 0xd9, 0x97, 0xca, 0xe5, 0x05, 0x5f, 0x6c, 0xe3, 0xa3, 0x6f, + 0x6d, 0x14, 0x7b, 0x36, 0x37, 0x8a, 0x79, 0x2a, 0xc9, 0xcf, 0x7e, 0xbd, 0x98, 0xd1, 0xa0, 0x24, + 0x7e, 0x11, 0x0d, 0x4e, 0x34, 0x3b, 0xae, 0x47, 0x9c, 0x39, 0xbd, 0x45, 0x94, 0x02, 0x54, 0x78, + 0x66, 0x73, 0xa3, 0x78, 0xb2, 0xc1, 0xc0, 0x75, 0x4b, 0x6f, 0x89, 0x15, 0x8b, 0xe4, 0xea, 0x6f, + 0x64, 0xd0, 0xb1, 0x1a, 0x71, 0x5d, 0xd3, 0xb6, 0x02, 0xd9, 0x3c, 0x82, 0x06, 0x38, 0xa8, 0x52, + 0x06, 0xf9, 0x0c, 0x8c, 0xf7, 0x6d, 0x6e, 0x14, 0x73, 0xae, 0x69, 0x68, 0x21, 0x06, 0x3f, 0x81, + 0xfa, 0x6e, 0x9b, 0xde, 0xca, 0xec, 0x54, 0x89, 0xcb, 0xe9, 0xe4, 0xe6, 0x46, 0x11, 0xaf, 0x99, + 0xde, 0x4a, 0xbd, 0xb5, 0xa4, 0x0b, 0x15, 0xfa, 0x64, 0x78, 0x06, 0x8d, 0x56, 0x1d, 0xf3, 0x8e, + 0xee, 0x91, 0x1b, 0x64, 0xbd, 0x6a, 0x37, 0xcd, 0xc6, 0x3a, 0x97, 0xe2, 0x03, 0x9b, 0x1b, 0xc5, + 0xb3, 0x6d, 0x86, 0xab, 0xaf, 0x92, 0xf5, 0x7a, 0x1b, 0xb0, 0x02, 0x93, 0x58, 0x49, 0xf5, 0x2b, + 0xbd, 0x68, 0xe8, 0xa6, 0x4b, 0x9c, 0xa0, 0xdd, 0x17, 0x50, 0x9e, 0xfe, 0xe6, 0x4d, 0x06, 0x99, + 0x77, 0x5c, 0xe2, 0x88, 0x32, 0xa7, 0x78, 0x7c, 0x09, 0xf5, 0xce, 0xd8, 0xcb, 0xa6, 0xc5, 0x9b, + 0x7d, 0x7c, 0x73, 0xa3, 0x78, 0xac, 0x49, 0x01, 0x02, 0x25, 0xa3, 0xc0, 0xef, 0x47, 0x43, 0x95, + 0x16, 0xd5, 0x21, 0xdb, 0xd2, 0x3d, 0xdb, 0xe1, 0xad, 0x05, 0xe9, 0x9a, 0x02, 0x5c, 0x28, 0x28, + 0xd1, 0xe3, 0xe7, 0x11, 0x2a, 0xdd, 0xae, 0x69, 0x76, 0x93, 0x94, 0xb4, 0x39, 0xae, 0x0c, 0x50, + 0x5a, 0x5f, 0x73, 0xeb, 0x8e, 0xdd, 0x24, 0x75, 0xdd, 0x11, 0xab, 0x15, 0xa8, 0xf1, 0x24, 0x1a, + 0x29, 0x35, 0x1a, 0xc4, 0x75, 0x35, 0xf2, 0xb1, 0x0e, 0x71, 0x3d, 0x57, 0xe9, 0x7d, 0x20, 0x77, + 0x71, 0x60, 0xfc, 0xdc, 0xe6, 0x46, 0xf1, 0xb4, 0x0e, 0x98, 0xba, 0xc3, 0x51, 0x02, 0x8b, 0x48, + 0x21, 0x3c, 0x8e, 0x86, 0x4b, 0x6f, 0x76, 0x1c, 0x52, 0x31, 0x88, 0xe5, 0x99, 0xde, 0x3a, 0xd7, + 0x90, 0xb3, 0x9b, 0x1b, 0x45, 0x45, 0xa7, 0x88, 0xba, 0xc9, 0x31, 0x02, 0x13, 0xb9, 0x08, 0x9e, + 0x47, 0x63, 0xd7, 0x27, 0xaa, 0x35, 0xe2, 0xdc, 0x31, 0x1b, 0xa4, 0xd4, 0x68, 0xd8, 0x1d, 0xcb, + 0x53, 0xfa, 0x80, 0xcf, 0x83, 0x9b, 0x1b, 0xc5, 0x73, 0xcb, 0x8d, 0x76, 0xdd, 0x65, 0xd8, 0xba, + 0xce, 0xd0, 0x02, 0xb3, 0x78, 0x59, 0xfc, 0x41, 0x34, 0xbc, 0xe0, 0x50, 0x2d, 0x34, 0xca, 0x84, + 0xc2, 0x95, 0x7e, 0xd0, 0xff, 0x93, 0x97, 0xf9, 0x04, 0xc4, 0xa0, 0x7e, 0xcf, 0xb2, 0xc6, 0x7a, + 0xac, 0x40, 0xdd, 0x00, 0x9c, 0xd8, 0x58, 0x89, 0x15, 0x26, 0x48, 0xa1, 0x1f, 0x6f, 0x3a, 0xc4, + 0x88, 0x69, 0xdb, 0x00, 0xb4, 0xf9, 0xd2, 0xe6, 0x46, 0xf1, 0x11, 0x87, 0xd3, 0xd4, 0xbb, 0xaa, + 0x5d, 0x2a, 0x2b, 0x3c, 0x89, 0xfa, 0xa9, 0x36, 0xdd, 0x30, 0x2d, 0x43, 0x41, 0x0f, 0x64, 0x2e, + 0x8e, 0x5c, 0x1d, 0xf5, 0x5b, 0xef, 0xc3, 0xc7, 0x4f, 0x6d, 0x6e, 0x14, 0x8f, 0x53, 0x1d, 0xac, + 0xaf, 0x9a, 0x96, 0x38, 0x45, 0x04, 0x45, 0xd5, 0xbf, 0xcc, 0xa3, 0x11, 0x2a, 0x1c, 0x41, 0x8f, + 0x4b, 0x74, 0x48, 0x52, 0x08, 0x1d, 0xa1, 0x6e, 0x5b, 0x6f, 0x10, 0xae, 0xd2, 0xc0, 0xce, 0xf2, + 0x81, 0x02, 0xbb, 0x28, 0x3d, 0xbe, 0x84, 0xfa, 0x19, 0xa8, 0x52, 0xe6, 0x5a, 0x3e, 0xbc, 0xb9, + 0x51, 0x1c, 0x70, 0x01, 0x56, 0x37, 0x0d, 0x2d, 0x40, 0x53, 0x35, 0x63, 0x7f, 0x4f, 0xdb, 0xae, + 0x47, 0x99, 0x73, 0x25, 0x07, 0x35, 0xe3, 0x05, 0x56, 0x38, 0x4a, 0x54, 0x33, 0xb9, 0x10, 0x7e, + 0x0e, 0x21, 0x06, 0x29, 0x19, 0x86, 0xc3, 0x35, 0xfd, 0xf4, 0xe6, 0x46, 0xf1, 0x3e, 0xce, 0x42, + 0x37, 0x0c, 0x71, 0x98, 0x08, 0xc4, 0xb8, 0x85, 0x86, 0xd8, 0xaf, 0x19, 0x7d, 0x91, 0x34, 0x99, + 0x9a, 0x0f, 0x5e, 0xbd, 0xe8, 0x4b, 0x53, 0x96, 0xce, 0x65, 0x91, 0x74, 0xd2, 0xf2, 0x9c, 0xf5, + 0xf1, 0x22, 0x9f, 0x19, 0x4f, 0xf1, 0xaa, 0x9a, 0x80, 0x13, 0xc7, 0xa4, 0x58, 0x86, 0x4e, 0x98, + 0x53, 0xb6, 0xb3, 0xa6, 0x3b, 0x06, 0x31, 0xc6, 0xd7, 0xc5, 0x09, 0x73, 0xc9, 0x07, 0xd7, 0x17, + 0x45, 0x1d, 0x10, 0xc9, 0xf1, 0x04, 0x1a, 0x66, 0xdc, 0x6a, 0x9d, 0x45, 0xe8, 0xfb, 0xbe, 0x98, + 0xb4, 0xdc, 0xce, 0x62, 0xb4, 0xbf, 0xe5, 0x32, 0x74, 0x4c, 0x32, 0xc0, 0x2d, 0xe2, 0xd0, 0xd9, + 0x14, 0xd4, 0x9f, 0x8f, 0x49, 0xce, 0xe4, 0x0e, 0xc3, 0xc4, 0x79, 0xf0, 0x22, 0x67, 0x5e, 0x46, + 0x63, 0x31, 0x51, 0xe0, 0x51, 0x94, 0x5b, 0x25, 0xeb, 0x4c, 0x5d, 0x34, 0xfa, 0x27, 0x3e, 0x81, + 0x7a, 0xef, 0xe8, 0xcd, 0x0e, 0x5f, 0xcb, 0x34, 0xf6, 0xe3, 0xf9, 0xec, 0xfb, 0x32, 0x74, 0xea, + 0xc7, 0x13, 0xb6, 0x65, 0x91, 0x86, 0x27, 0xce, 0xfe, 0xcf, 0xa0, 0x81, 0x19, 0xbb, 0xa1, 0x37, + 0xa1, 0x1f, 0x99, 0xde, 0x29, 0x9b, 0x1b, 0xc5, 0x13, 0xb4, 0x03, 0x2f, 0x37, 0x29, 0x46, 0x68, + 0x53, 0x48, 0x4a, 0x15, 0x40, 0x23, 0x2d, 0xdb, 0x23, 0x50, 0x30, 0x1b, 0x2a, 0x00, 0x14, 0x74, + 0x00, 0x25, 0x2a, 0x40, 0x48, 0x8c, 0xaf, 0xa0, 0xfe, 0x2a, 0x5d, 0xf0, 0x1a, 0x76, 0x93, 0x2b, + 0x1f, 0xcc, 0xc9, 0xb0, 0x08, 0x8a, 0x83, 0xc6, 0x27, 0x52, 0xa7, 0xd1, 0xc8, 0x44, 0xd3, 0x24, + 0x96, 0x27, 0xb6, 0x9a, 0x0e, 0xa9, 0xd2, 0x32, 0xb1, 0x3c, 0xb1, 0xd5, 0x30, 0xf8, 0x74, 0x0a, + 0x15, 0x5b, 0x1d, 0x90, 0xaa, 0xbf, 0x9f, 0x43, 0xa7, 0x6f, 0x74, 0x16, 0x89, 0x63, 0x11, 0x8f, + 0xb8, 0x7c, 0x65, 0x0c, 0xb8, 0xce, 0xa1, 0xb1, 0x18, 0x92, 0x73, 0x87, 0x15, 0x6b, 0x35, 0x40, + 0xd6, 0xf9, 0x62, 0x2b, 0x4e, 0x7b, 0xb1, 0xa2, 0x78, 0x1a, 0x1d, 0x0b, 0x81, 0xb4, 0x11, 0xae, + 0x92, 0x85, 0x39, 0xfd, 0xfc, 0xe6, 0x46, 0xf1, 0x8c, 0xc0, 0x8d, 0x36, 0x5b, 0xd4, 0xe0, 0x68, + 0x31, 0x7c, 0x03, 0x8d, 0x86, 0xa0, 0xeb, 0x8e, 0xdd, 0x69, 0xbb, 0x4a, 0x0e, 0x58, 0x15, 0x37, + 0x37, 0x8a, 0xf7, 0x0b, 0xac, 0x96, 0x01, 0x29, 0xae, 0xa4, 0xd1, 0x82, 0xf8, 0x3b, 0x33, 0x22, + 0x37, 0x3e, 0x0a, 0xf3, 0x30, 0x0a, 0x9f, 0xf5, 0x47, 0x61, 0xaa, 0x90, 0x2e, 0x47, 0x4b, 0xf2, + 0x41, 0x19, 0x69, 0x46, 0x6c, 0x50, 0xc6, 0x6a, 0x3c, 0x33, 0x81, 0xee, 0x4b, 0xe4, 0xb5, 0x23, + 0xad, 0xfe, 0xb3, 0x9c, 0xc8, 0xa5, 0x6a, 0x1b, 0x41, 0x67, 0xce, 0x8b, 0x9d, 0x59, 0xb5, 0x0d, + 0x30, 0x97, 0x32, 0xe1, 0x22, 0x26, 0x34, 0xb6, 0x6d, 0x1b, 0x51, 0xab, 0x29, 0x5e, 0x16, 0x7f, + 0x14, 0x9d, 0x8c, 0x01, 0xd9, 0x74, 0xcd, 0xb4, 0xff, 0xc2, 0xe6, 0x46, 0x51, 0x4d, 0xe0, 0x1a, + 0x9d, 0xbd, 0x53, 0xb8, 0x60, 0x1d, 0x9d, 0x12, 0xa4, 0x6e, 0x5b, 0x9e, 0x6e, 0x5a, 0xdc, 0xca, + 0x63, 0xa3, 0xe4, 0x3d, 0x9b, 0x1b, 0xc5, 0x87, 0x44, 0x1d, 0xf4, 0x69, 0xa2, 0x8d, 0x4f, 0xe3, + 0x83, 0x0d, 0xa4, 0x24, 0xa0, 0x2a, 0x2d, 0x7d, 0xd9, 0x37, 0x5d, 0x2f, 0x6e, 0x6e, 0x14, 0x1f, + 0x4e, 0xac, 0xc3, 0xa4, 0x54, 0xe2, 0x52, 0x99, 0xc6, 0x09, 0x6b, 0x08, 0x87, 0xb8, 0x39, 0xdb, + 0x20, 0xf0, 0x0d, 0xbd, 0xc0, 0x5f, 0xdd, 0xdc, 0x28, 0x9e, 0x17, 0xf8, 0x5b, 0xb6, 0x41, 0xa2, + 0xcd, 0x4f, 0x28, 0xad, 0xfe, 0x46, 0x0e, 0x9d, 0xaf, 0x95, 0x66, 0x67, 0x2a, 0x86, 0x6f, 0x5b, + 0x54, 0x1d, 0xfb, 0x8e, 0x69, 0x08, 0xa3, 0x77, 0x11, 0x9d, 0x8a, 0xa0, 0x26, 0xc1, 0x9c, 0x09, + 0xac, 0x5a, 0xf8, 0x36, 0xdf, 0x6e, 0x69, 0x73, 0x9a, 0x3a, 0xb3, 0x79, 0xea, 0x92, 0x49, 0x9f, + 0xc6, 0x88, 0xf6, 0x51, 0x04, 0x55, 0x5b, 0xb1, 0x1d, 0xaf, 0xd1, 0xf1, 0xb8, 0x12, 0x40, 0x1f, + 0xc5, 0xea, 0x70, 0x39, 0x51, 0x97, 0x2a, 0x7c, 0x3e, 0xf8, 0x93, 0x19, 0x34, 0x5a, 0xf2, 0x3c, + 0xc7, 0x5c, 0xec, 0x78, 0x64, 0x56, 0x6f, 0xb7, 0x4d, 0x6b, 0x19, 0xc6, 0xfa, 0xe0, 0xd5, 0x17, + 0x83, 0x35, 0xb2, 0xab, 0x24, 0x2e, 0x47, 0x8b, 0x0b, 0x43, 0x54, 0xf7, 0x51, 0xf5, 0x16, 0xc3, + 0x89, 0x43, 0x34, 0x5a, 0x8e, 0x0e, 0xd1, 0x44, 0x5e, 0x3b, 0x1a, 0xa2, 0x9f, 0xcb, 0xa1, 0xb3, + 0xf3, 0xab, 0x9e, 0xae, 0x11, 0xd7, 0xee, 0x38, 0x0d, 0xe2, 0xde, 0x6c, 0x1b, 0xba, 0x47, 0xc2, + 0x91, 0x5a, 0x44, 0xbd, 0x25, 0xc3, 0x20, 0x06, 0xb0, 0xeb, 0x65, 0xfb, 0x2f, 0x9d, 0x02, 0x34, + 0x06, 0xc7, 0x8f, 0xa0, 0x3e, 0x5e, 0x06, 0xb8, 0xf7, 0x8e, 0x0f, 0x6e, 0x6e, 0x14, 0xfb, 0x3a, + 0x0c, 0xa4, 0xf9, 0x38, 0x4a, 0x56, 0x26, 0x4d, 0x42, 0xc9, 0x72, 0x21, 0x99, 0xc1, 0x40, 0x9a, + 0x8f, 0xc3, 0xaf, 0xa1, 0x11, 0x60, 0x1b, 0xb4, 0x87, 0xcf, 0x7d, 0x27, 0x7c, 0xe9, 0x8a, 0x8d, + 0x65, 0x4b, 0x13, 0xb4, 0xa6, 0xee, 0xf8, 0x05, 0xb4, 0x08, 0x03, 0x7c, 0x1b, 0x8d, 0xf2, 0x46, + 0x84, 0x4c, 0x7b, 0xbb, 0x30, 0xbd, 0x6f, 0x73, 0xa3, 0x38, 0xc6, 0xdb, 0x2f, 0xb0, 0x8d, 0x31, + 0xa1, 0x8c, 0x79, 0xb3, 0x43, 0xc6, 0x85, 0xad, 0x18, 0xf3, 0x2f, 0x16, 0x19, 0x47, 0x99, 0xa8, + 0xaf, 0xa3, 0x21, 0xb1, 0x20, 0x3e, 0x09, 0x7b, 0x5c, 0x36, 0x4e, 0x60, 0x77, 0x6c, 0x1a, 0xb0, + 0xb1, 0x7d, 0x12, 0x0d, 0x96, 0x89, 0xdb, 0x70, 0xcc, 0x36, 0xb5, 0x1a, 0xb8, 0x92, 0x1f, 0xdb, + 0xdc, 0x28, 0x0e, 0x1a, 0x21, 0x58, 0x13, 0x69, 0xd4, 0xff, 0x9a, 0x41, 0x27, 0x29, 0xef, 0x92, + 0xeb, 0x9a, 0xcb, 0x56, 0x4b, 0x5c, 0xb6, 0x1f, 0x43, 0x85, 0x1a, 0xd4, 0xc7, 0x6b, 0x3a, 0xb1, + 0xb9, 0x51, 0x1c, 0x65, 0x2d, 0x10, 0xf4, 0x90, 0xd3, 0x04, 0x1b, 0xbc, 0xec, 0x16, 0x1b, 0x3c, + 0x6a, 0xd2, 0x7a, 0xba, 0xe3, 0x99, 0xd6, 0x72, 0xcd, 0xd3, 0xbd, 0x8e, 0x2b, 0x99, 0xb4, 0x1c, + 0x53, 0x77, 0x01, 0x25, 0x99, 0xb4, 0x52, 0x21, 0xfc, 0x32, 0x1a, 0x9a, 0xb4, 0x8c, 0x90, 0x09, + 0x9b, 0x10, 0xef, 0xa7, 0x96, 0x26, 0x01, 0x78, 0x9c, 0x85, 0x54, 0x40, 0xfd, 0xc5, 0x0c, 0x52, + 0xd8, 0x6e, 0x6c, 0xc6, 0x74, 0xbd, 0x59, 0xd2, 0x5a, 0x14, 0x66, 0xa7, 0x29, 0x7f, 0x7b, 0x47, + 0x71, 0xc2, 0x5a, 0x04, 0xa6, 0x00, 0xdf, 0xde, 0x35, 0x4d, 0xd7, 0x8b, 0x4e, 0x86, 0x91, 0x52, + 0xb8, 0x82, 0xfa, 0x18, 0x67, 0x66, 0x4b, 0x0c, 0x5e, 0x55, 0x7c, 0x45, 0x88, 0x56, 0xcd, 0x94, + 0xa1, 0xc5, 0x88, 0xc5, 0xfd, 0x39, 0x2f, 0xaf, 0xfe, 0x72, 0x16, 0x8d, 0x46, 0x0b, 0xe1, 0xdb, + 0xa8, 0xff, 0x55, 0xdb, 0xb4, 0x88, 0x31, 0x6f, 0x41, 0x0b, 0xbb, 0x9f, 0x52, 0xf8, 0xb6, 0xf8, + 0xf1, 0x37, 0xa0, 0x4c, 0x5d, 0xb4, 0x60, 0xe1, 0xd0, 0x22, 0x60, 0x86, 0x3f, 0x88, 0x06, 0xa8, + 0x0d, 0x78, 0x07, 0x38, 0x67, 0xb7, 0xe4, 0xfc, 0x00, 0xe7, 0x7c, 0xc2, 0x61, 0x85, 0xe2, 0xac, + 0x43, 0x76, 0x54, 0xaf, 0x34, 0xa2, 0xbb, 0xb6, 0xc5, 0x7b, 0x1e, 0xf4, 0xca, 0x01, 0x88, 0xa8, + 0x57, 0x8c, 0x86, 0x9a, 0xae, 0xec, 0x63, 0xa1, 0x1b, 0x84, 0xbd, 0x0b, 0x93, 0x55, 0xb4, 0x07, + 0x04, 0x62, 0xf5, 0xbb, 0xb3, 0xe8, 0xf1, 0x50, 0x64, 0x1a, 0xb9, 0x63, 0x92, 0x35, 0x2e, 0xce, + 0x15, 0xb3, 0xcd, 0x37, 0x8f, 0x54, 0xe5, 0xdd, 0x89, 0x15, 0xdd, 0x5a, 0x26, 0x06, 0xbe, 0x84, + 0x7a, 0xe9, 0x0e, 0xdf, 0x55, 0x32, 0x60, 0xae, 0xc1, 0x74, 0xe2, 0x50, 0x80, 0x78, 0xfa, 0x00, + 0x14, 0xd8, 0x46, 0x85, 0x05, 0x47, 0x37, 0x3d, 0xbf, 0x67, 0x4b, 0xf1, 0x9e, 0xdd, 0x46, 0x8d, + 0x97, 0x19, 0x0f, 0x36, 0xe7, 0x83, 0x20, 0x3c, 0x00, 0x88, 0x82, 0x60, 0x24, 0x67, 0x9e, 0x43, + 0x83, 0x02, 0xf1, 0x8e, 0x26, 0xf5, 0x2f, 0xe5, 0x45, 0x5d, 0xf7, 0x9b, 0xc5, 0x75, 0xfd, 0x0a, + 0xd5, 0x51, 0xd7, 0xa5, 0x56, 0x05, 0x53, 0x72, 0xae, 0x89, 0x00, 0x92, 0x35, 0x11, 0x40, 0xf8, + 0x29, 0xd4, 0xcf, 0x58, 0x04, 0xfb, 0x57, 0xd8, 0xfb, 0x3a, 0x00, 0x93, 0x97, 0xe6, 0x80, 0x10, + 0xff, 0x7c, 0x06, 0x9d, 0xeb, 0x2a, 0x09, 0x50, 0x86, 0xc1, 0xab, 0x4f, 0xef, 0x4a, 0x8c, 0xe3, + 0x8f, 0x6f, 0x6e, 0x14, 0x2f, 0xb5, 0x02, 0x92, 0xba, 0x23, 0xd0, 0xd4, 0x1b, 0x8c, 0x48, 0x68, + 0x57, 0xf7, 0xa6, 0x50, 0xe3, 0x91, 0x55, 0x3a, 0x05, 0x67, 0x38, 0x56, 0x63, 0xdd, 0x6f, 0x64, + 0x3e, 0x34, 0x1e, 0xf9, 0xf7, 0x2e, 0xf9, 0x24, 0x09, 0xd5, 0xa4, 0x70, 0xc1, 0x0d, 0x74, 0x8a, + 0x61, 0xca, 0xfa, 0xfa, 0xfc, 0xd2, 0xac, 0x6d, 0x79, 0x2b, 0x7e, 0x05, 0xbd, 0xe2, 0x21, 0x08, + 0x54, 0x60, 0xe8, 0xeb, 0x75, 0x7b, 0xa9, 0xde, 0xa2, 0x54, 0x09, 0x75, 0xa4, 0x71, 0xa2, 0x13, + 0x2d, 0x1f, 0x73, 0xfe, 0x14, 0x54, 0x08, 0x8f, 0xa8, 0xfc, 0x71, 0x1a, 0x9f, 0x70, 0x22, 0x85, + 0xd4, 0x0a, 0x1a, 0x9a, 0xb1, 0x1b, 0xab, 0x81, 0xba, 0x3c, 0x87, 0x0a, 0x0b, 0xba, 0xb3, 0x4c, + 0x3c, 0x90, 0xc5, 0xe0, 0xd5, 0xb1, 0xcb, 0xec, 0xd8, 0x97, 0x12, 0x31, 0xc4, 0xf8, 0x08, 0x9f, + 0x0d, 0x0a, 0x1e, 0xfc, 0xd6, 0x78, 0x01, 0xf5, 0xeb, 0xbd, 0x68, 0x88, 0x1f, 0x51, 0xc2, 0x6c, + 0x8e, 0x9f, 0x0f, 0x0f, 0x7d, 0xf9, 0xf4, 0x15, 0x1c, 0xd3, 0x04, 0xc7, 0x4b, 0x43, 0x94, 0xd9, + 0x1f, 0x6c, 0x14, 0x33, 0x9b, 0x1b, 0xc5, 0x1e, 0xad, 0x5f, 0xd8, 0x54, 0x86, 0xeb, 0x8d, 0xb0, + 0xc0, 0x8a, 0x87, 0x8e, 0x91, 0xb2, 0x6c, 0xfd, 0x79, 0x19, 0xf5, 0xf1, 0x36, 0x70, 0x8d, 0x3b, + 0x15, 0x9e, 0x65, 0x48, 0x47, 0xad, 0x91, 0xd2, 0x7e, 0x29, 0xfc, 0x22, 0x2a, 0xb0, 0xbd, 0x3d, + 0x17, 0xc0, 0xc9, 0xe4, 0xb3, 0x90, 0x48, 0x71, 0x5e, 0x06, 0x4f, 0x23, 0x14, 0xee, 0xeb, 0x83, + 0x93, 0x65, 0xce, 0x21, 0xbe, 0xe3, 0x8f, 0x70, 0x11, 0xca, 0xe2, 0x67, 0xd0, 0xd0, 0x02, 0x71, + 0x5a, 0xa6, 0xa5, 0x37, 0x6b, 0xe6, 0x9b, 0xfe, 0xe1, 0x32, 0x2c, 0xbc, 0xae, 0xf9, 0xa6, 0x38, + 0x72, 0x25, 0x3a, 0xfc, 0x91, 0xa4, 0x7d, 0x73, 0x1f, 0x34, 0xe4, 0xc1, 0x2d, 0x37, 0x94, 0x91, + 0xf6, 0x24, 0x6c, 0xa3, 0x5f, 0x43, 0xc3, 0xd2, 0x96, 0x89, 0x9f, 0x1e, 0x9e, 0x8b, 0xb3, 0x16, + 0xf6, 0x7f, 0x11, 0xb6, 0x32, 0x07, 0xaa, 0xc9, 0x15, 0xcb, 0xf4, 0x4c, 0xbd, 0x39, 0x61, 0xb7, + 0x5a, 0xba, 0x65, 0x28, 0x03, 0xa1, 0x26, 0x9b, 0x0c, 0x53, 0x6f, 0x30, 0x94, 0xa8, 0xc9, 0x72, + 0x21, 0xba, 0x2d, 0xe7, 0x7d, 0xa8, 0x91, 0x86, 0xed, 0x50, 0x5b, 0x00, 0x0e, 0x07, 0xf9, 0xb6, + 0xdc, 0x65, 0xb8, 0xba, 0xe3, 0x23, 0x45, 0x63, 0x3b, 0x5a, 0xf0, 0xd5, 0x7c, 0xff, 0xe0, 0xe8, + 0x50, 0xf4, 0x3c, 0x57, 0xfd, 0xb9, 0x1c, 0x1a, 0xe4, 0xa4, 0x74, 0x29, 0x3d, 0x52, 0xf0, 0xbd, + 0x28, 0x78, 0xa2, 0xa2, 0x16, 0xf6, 0x4b, 0x51, 0xd5, 0x4f, 0x65, 0x83, 0xd9, 0xa8, 0xea, 0x98, + 0xd6, 0xde, 0x66, 0xa3, 0x0b, 0x08, 0x4d, 0xac, 0x74, 0xac, 0x55, 0x76, 0x6f, 0x95, 0x0d, 0xef, + 0xad, 0x1a, 0xa6, 0x26, 0x60, 0xf0, 0x39, 0x94, 0x2f, 0x53, 0xfe, 0xb4, 0x67, 0x86, 0xc6, 0x07, + 0xde, 0x62, 0x9c, 0x32, 0x8f, 0x6b, 0x00, 0xa6, 0x9b, 0xab, 0xf1, 0x75, 0x8f, 0x30, 0x73, 0x36, + 0xc7, 0x36, 0x57, 0x8b, 0x14, 0xa0, 0x31, 0x38, 0xbe, 0x86, 0xc6, 0xca, 0xa4, 0xa9, 0xaf, 0xcf, + 0x9a, 0xcd, 0xa6, 0xe9, 0x92, 0x86, 0x6d, 0x19, 0x2e, 0x08, 0x99, 0x57, 0xd7, 0x72, 0xb5, 0x38, + 0x01, 0x56, 0x51, 0x61, 0x7e, 0x69, 0xc9, 0x25, 0x1e, 0x88, 0x2f, 0x37, 0x8e, 0xe8, 0xe4, 0x6c, + 0x03, 0x44, 0xe3, 0x18, 0xf5, 0x0b, 0x19, 0xba, 0x7b, 0x71, 0x57, 0x3d, 0xbb, 0x1d, 0x68, 0xf9, + 0x9e, 0x44, 0x72, 0x29, 0xb4, 0x2b, 0xb2, 0xf0, 0xb5, 0xc7, 0xf8, 0xd7, 0xf6, 0x71, 0xdb, 0x22, + 0xb4, 0x28, 0x12, 0xbf, 0x2a, 0xb7, 0xc5, 0x57, 0xa9, 0x7f, 0x91, 0x45, 0xa7, 0x78, 0x8b, 0x27, + 0x9a, 0x66, 0x7b, 0xd1, 0xd6, 0x1d, 0x43, 0x23, 0x0d, 0x62, 0xde, 0x21, 0x87, 0x73, 0xe0, 0xc9, + 0x43, 0x27, 0xbf, 0x87, 0xa1, 0x73, 0x15, 0x36, 0x82, 0x54, 0x32, 0x70, 0xe0, 0xcb, 0x8c, 0x8a, + 0xd1, 0xcd, 0x8d, 0xe2, 0x90, 0xc1, 0xc0, 0x70, 0xe4, 0xaf, 0x89, 0x44, 0x54, 0x49, 0x66, 0x88, + 0xb5, 0xec, 0xad, 0x80, 0x92, 0xf4, 0x32, 0x25, 0x69, 0x02, 0x44, 0xe3, 0x18, 0xf5, 0xcf, 0xb3, + 0xe8, 0x44, 0x54, 0xe4, 0x35, 0x62, 0x19, 0x47, 0xf2, 0x7e, 0x7b, 0xe4, 0xfd, 0xcd, 0x1c, 0xba, + 0x9f, 0x97, 0xa9, 0xad, 0xe8, 0x0e, 0x31, 0xca, 0xa6, 0x43, 0x1a, 0x9e, 0xed, 0xac, 0x1f, 0x62, + 0x03, 0x6a, 0xff, 0xc4, 0x7e, 0x0d, 0x15, 0xf8, 0xf6, 0x9f, 0xad, 0x33, 0x23, 0x41, 0x4b, 0x00, + 0x1a, 0x5b, 0xa1, 0xd8, 0xd1, 0x41, 0xa4, 0xb3, 0x0a, 0xdb, 0xe9, 0xac, 0xf7, 0xa1, 0xe1, 0x40, + 0xf4, 0xb0, 0x11, 0xed, 0x0b, 0xad, 0x2d, 0xc3, 0x47, 0xc0, 0x5e, 0x54, 0x93, 0x09, 0xa1, 0x36, + 0x1f, 0x50, 0x29, 0x83, 0x35, 0x34, 0xcc, 0x6b, 0x0b, 0xca, 0x99, 0x86, 0x26, 0x12, 0xa9, 0x1b, + 0x79, 0x74, 0x26, 0xb9, 0xdb, 0x35, 0xa2, 0x1b, 0x47, 0xbd, 0xfe, 0xae, 0xec, 0x75, 0xfc, 0x20, + 0xca, 0x57, 0x75, 0x6f, 0x85, 0xdf, 0x83, 0xc3, 0x9d, 0xf0, 0x92, 0xd9, 0x24, 0xf5, 0xb6, 0xee, + 0xad, 0x68, 0x80, 0x12, 0xe6, 0x0c, 0x04, 0x1c, 0x13, 0xe6, 0x0c, 0x61, 0xb1, 0x1f, 0x7c, 0x20, + 0x73, 0x31, 0x9f, 0xb8, 0xd8, 0x7f, 0x3d, 0x9f, 0x36, 0xaf, 0xdc, 0x76, 0x4c, 0x8f, 0x1c, 0x69, + 0xd8, 0x91, 0x86, 0xed, 0x51, 0xc3, 0xfe, 0x30, 0x8b, 0x86, 0x83, 0x4d, 0xd3, 0x1b, 0xa4, 0x71, + 0x30, 0x6b, 0x55, 0xb8, 0x95, 0xc9, 0xed, 0x79, 0x2b, 0xb3, 0x17, 0x85, 0x52, 0x83, 0x23, 0x4f, + 0x66, 0x1a, 0x80, 0xc4, 0xd8, 0x91, 0x67, 0x70, 0xd0, 0xf9, 0x20, 0xea, 0x9b, 0xd5, 0xef, 0x9a, + 0xad, 0x4e, 0x8b, 0x5b, 0xe9, 0xe0, 0xd7, 0xd5, 0xd2, 0xef, 0x6a, 0x3e, 0x5c, 0xfd, 0x17, 0x19, + 0x34, 0xc2, 0x85, 0xca, 0x99, 0xef, 0x49, 0xaa, 0xa1, 0x74, 0xb2, 0x7b, 0x96, 0x4e, 0x6e, 0xf7, + 0xd2, 0x51, 0x7f, 0x22, 0x87, 0x94, 0x29, 0xb3, 0x49, 0x16, 0x1c, 0xdd, 0x72, 0x97, 0x88, 0xc3, + 0xb7, 0xd3, 0x93, 0x94, 0xd5, 0x9e, 0x3e, 0x50, 0x98, 0x52, 0xb2, 0xbb, 0x9a, 0x52, 0xde, 0x8b, + 0x06, 0x78, 0x63, 0x02, 0x9f, 0x42, 0x18, 0x35, 0x8e, 0x0f, 0xd4, 0x42, 0x3c, 0x25, 0x2e, 0xb5, + 0xdb, 0x8e, 0x7d, 0x87, 0x38, 0xec, 0x96, 0x8a, 0x13, 0xeb, 0x3e, 0x50, 0x0b, 0xf1, 0x02, 0x67, + 0xe2, 0xdb, 0x8b, 0x22, 0x67, 0xe2, 0x68, 0x21, 0x1e, 0x5f, 0x44, 0xfd, 0x33, 0x76, 0x43, 0x07, + 0x41, 0xb3, 0x69, 0x65, 0x68, 0x73, 0xa3, 0xd8, 0xdf, 0xe4, 0x30, 0x2d, 0xc0, 0x52, 0xca, 0xb2, + 0xbd, 0x66, 0x35, 0x6d, 0x9d, 0x39, 0xbf, 0xf4, 0x33, 0x4a, 0x83, 0xc3, 0xb4, 0x00, 0x4b, 0x29, + 0xa9, 0xcc, 0xc1, 0xa9, 0xa8, 0x3f, 0xe4, 0xb9, 0xc4, 0x61, 0x5a, 0x80, 0x55, 0xbf, 0x90, 0xa7, + 0xda, 0xeb, 0x9a, 0x6f, 0xde, 0xf3, 0xeb, 0x42, 0x38, 0x60, 0x7a, 0x77, 0x31, 0x60, 0xee, 0x99, + 0x03, 0x3b, 0xf5, 0x2f, 0xfb, 0x10, 0xe2, 0xd2, 0x9f, 0x3c, 0xda, 0x1c, 0xee, 0x4d, 0x6b, 0xca, + 0x68, 0x6c, 0xd2, 0x5a, 0xd1, 0xad, 0x06, 0x31, 0xc2, 0x63, 0xcb, 0x02, 0x0c, 0x6d, 0xf0, 0xe9, + 0x25, 0x1c, 0x19, 0x9e, 0x5b, 0x6a, 0xf1, 0x02, 0xf8, 0x49, 0x34, 0x58, 0xb1, 0x3c, 0xe2, 0xe8, + 0x0d, 0xcf, 0xbc, 0x43, 0xf8, 0xd4, 0x00, 0x37, 0xc3, 0x66, 0x08, 0xd6, 0x44, 0x1a, 0x7c, 0x0d, + 0x0d, 0x55, 0x75, 0xc7, 0x33, 0x1b, 0x66, 0x5b, 0xb7, 0x3c, 0x57, 0xe9, 0x87, 0x19, 0x0d, 0x2c, + 0x8c, 0xb6, 0x00, 0xd7, 0x24, 0x2a, 0xfc, 0x11, 0x34, 0x00, 0x5b, 0x53, 0x70, 0x9c, 0x1e, 0xd8, + 0xf2, 0xe2, 0xf0, 0xa1, 0xd0, 0x3d, 0x90, 0x9d, 0xbe, 0xc2, 0x0d, 0x70, 0xf4, 0xee, 0x30, 0xe0, + 0x88, 0x3f, 0x80, 0xfa, 0x26, 0x2d, 0x03, 0x98, 0xa3, 0x2d, 0x99, 0xab, 0x9c, 0xf9, 0xc9, 0x90, + 0xb9, 0xdd, 0x8e, 0xf0, 0xf6, 0xd9, 0x25, 0x8f, 0xb2, 0xc1, 0xb7, 0x6f, 0x94, 0x0d, 0xbd, 0x0d, + 0xc7, 0xe2, 0xc3, 0xfb, 0x75, 0x2c, 0x3e, 0xb2, 0xcb, 0x63, 0x71, 0xf5, 0x4d, 0x34, 0x38, 0x5e, + 0x9d, 0x0a, 0x46, 0xef, 0x69, 0x94, 0xab, 0x72, 0x4f, 0x85, 0x3c, 0xb3, 0x67, 0xda, 0xa6, 0xa1, + 0x51, 0x18, 0xbe, 0x84, 0xfa, 0x27, 0xc0, 0xfd, 0x8d, 0xdf, 0x22, 0xe6, 0xd9, 0xfa, 0xd7, 0x00, + 0x18, 0x78, 0xc1, 0xfa, 0x68, 0xfc, 0x08, 0xea, 0xab, 0x3a, 0xf6, 0xb2, 0xa3, 0xb7, 0xf8, 0x1a, + 0x0c, 0xae, 0x22, 0x6d, 0x06, 0xd2, 0x7c, 0x9c, 0xfa, 0x03, 0x19, 0xdf, 0x6c, 0xa7, 0x25, 0x6a, + 0x1d, 0x38, 0x9a, 0x87, 0xba, 0xfb, 0x59, 0x09, 0x97, 0x81, 0x34, 0x1f, 0x87, 0x2f, 0xa1, 0xde, + 0x49, 0xc7, 0xb1, 0x1d, 0xd1, 0xd9, 0x9c, 0x50, 0x80, 0x78, 0xdd, 0x0b, 0x14, 0xf8, 0x59, 0x34, + 0xc8, 0xe6, 0x1c, 0x76, 0xa2, 0x99, 0xeb, 0x76, 0x53, 0x2a, 0x52, 0xaa, 0x5f, 0xc9, 0x09, 0x36, + 0x1b, 0x93, 0xf8, 0x3d, 0x78, 0x2b, 0xf0, 0x14, 0xca, 0x8d, 0x57, 0xa7, 0xf8, 0x04, 0x78, 0xdc, + 0x2f, 0x2a, 0xa8, 0x4a, 0xa4, 0x1c, 0xa5, 0xc6, 0x67, 0x51, 0xbe, 0x4a, 0xd5, 0xa7, 0x00, 0xea, + 0xd1, 0xbf, 0xb9, 0x51, 0xcc, 0xb7, 0xa9, 0xfe, 0x00, 0x14, 0xb0, 0x74, 0x33, 0xc3, 0x76, 0x4c, + 0x0c, 0x1b, 0xee, 0x63, 0xce, 0xa2, 0x7c, 0xc9, 0x59, 0xbe, 0xc3, 0x67, 0x2d, 0xc0, 0xea, 0xce, + 0xf2, 0x1d, 0x0d, 0xa0, 0xf8, 0x0a, 0x42, 0x1a, 0xf1, 0x3a, 0x8e, 0x05, 0xef, 0x40, 0x06, 0xe0, + 0xfc, 0x0d, 0x66, 0x43, 0x07, 0xa0, 0xf5, 0x86, 0x6d, 0x10, 0x4d, 0x20, 0x51, 0x7f, 0x26, 0xbc, + 0xd8, 0x29, 0x9b, 0xee, 0xea, 0x51, 0x17, 0xee, 0xa0, 0x0b, 0x75, 0x7e, 0xc4, 0x19, 0xef, 0xa4, + 0x22, 0xea, 0x9d, 0x6a, 0xea, 0xcb, 0x2e, 0xf4, 0x21, 0xf7, 0x25, 0x5b, 0xa2, 0x00, 0x8d, 0xc1, + 0x23, 0xfd, 0xd4, 0xbf, 0x75, 0x3f, 0xfd, 0x70, 0x6f, 0x30, 0xda, 0xe6, 0x88, 0xb7, 0x66, 0x3b, + 0x47, 0x5d, 0xb5, 0xdd, 0xae, 0xba, 0x80, 0xfa, 0x6a, 0x4e, 0x43, 0x38, 0xba, 0x80, 0xfd, 0x80, + 0xeb, 0x34, 0xd8, 0xb1, 0x85, 0x8f, 0xa4, 0x74, 0x65, 0xd7, 0x03, 0xba, 0xbe, 0x90, 0xce, 0x70, + 0x3d, 0x4e, 0xc7, 0x91, 0x9c, 0xae, 0x6a, 0x3b, 0x1e, 0xef, 0xb8, 0x80, 0xae, 0x6d, 0x3b, 0x9e, + 0xe6, 0x23, 0xf1, 0x7b, 0x11, 0x5a, 0x98, 0xa8, 0xfa, 0xce, 0xf6, 0x03, 0xa1, 0x2f, 0x20, 0xf7, + 0xb2, 0xd7, 0x04, 0x34, 0x5e, 0x40, 0x03, 0xf3, 0x6d, 0xe2, 0xb0, 0xad, 0x10, 0x7b, 0xd9, 0xf1, + 0x9e, 0x88, 0x68, 0x79, 0xbf, 0x5f, 0xe6, 0xff, 0x07, 0xe4, 0x6c, 0x7d, 0xb1, 0xfd, 0x9f, 0x5a, + 0xc8, 0x08, 0x3f, 0x8b, 0x0a, 0x25, 0x66, 0xe7, 0x0d, 0x02, 0xcb, 0x40, 0x64, 0xb0, 0x05, 0x65, + 0x28, 0xb6, 0x67, 0xd7, 0xe1, 0x6f, 0x8d, 0x93, 0xab, 0x97, 0xd0, 0x68, 0xb4, 0x1a, 0x3c, 0x88, + 0xfa, 0x26, 0xe6, 0xe7, 0xe6, 0x26, 0x27, 0x16, 0x46, 0x7b, 0x70, 0x3f, 0xca, 0xd7, 0x26, 0xe7, + 0xca, 0xa3, 0x19, 0xf5, 0x17, 0x84, 0x19, 0x84, 0xaa, 0xd6, 0xd1, 0xd5, 0xf0, 0x9e, 0xee, 0x5b, + 0x46, 0xe1, 0x3e, 0x14, 0x4e, 0x0c, 0x5a, 0xa6, 0xe7, 0x11, 0x83, 0xaf, 0x12, 0x70, 0x5f, 0xe8, + 0xdd, 0xd5, 0x62, 0x78, 0xfc, 0x18, 0x1a, 0x06, 0x18, 0xbf, 0x22, 0x64, 0xfb, 0x63, 0x5e, 0xc0, + 0xb9, 0xab, 0xc9, 0x48, 0xf5, 0xab, 0xe1, 0xed, 0xf0, 0x0c, 0xd1, 0x0f, 0xeb, 0x8d, 0xe2, 0x3b, + 0xa4, 0xbf, 0xd4, 0xbf, 0xce, 0xb3, 0x27, 0x20, 0xec, 0xe1, 0xde, 0x41, 0x88, 0x32, 0x3c, 0xd2, + 0xcd, 0xed, 0xe0, 0x48, 0xf7, 0x31, 0x54, 0x98, 0x25, 0xde, 0x8a, 0xed, 0x3b, 0x7e, 0x81, 0x87, + 0x5e, 0x0b, 0x20, 0xa2, 0x87, 0x1e, 0xa3, 0xc1, 0xab, 0x08, 0xfb, 0xaf, 0xf2, 0x02, 0x47, 0x6c, + 0xff, 0x08, 0xf9, 0x54, 0x6c, 0x9f, 0x52, 0x83, 0x27, 0xb9, 0xe0, 0x63, 0x7f, 0x22, 0x70, 0xf4, + 0x16, 0x3c, 0xb1, 0xfe, 0x6a, 0xa3, 0x58, 0x60, 0x34, 0x5a, 0x02, 0x5b, 0xfc, 0x1a, 0x1a, 0x98, + 0x9d, 0x2a, 0xf1, 0x17, 0x7a, 0xcc, 0x2b, 0xe2, 0x74, 0x20, 0x45, 0x1f, 0x11, 0x88, 0x04, 0xde, + 0xdb, 0xb4, 0x96, 0xf4, 0xf8, 0x03, 0xbd, 0x90, 0x0b, 0xd5, 0x16, 0xf6, 0x72, 0x87, 0x9f, 0x2e, + 0x04, 0xda, 0x22, 0xbf, 0xe7, 0x89, 0xca, 0x8a, 0x61, 0x23, 0xda, 0xd2, 0xbf, 0x87, 0xd1, 0x3d, + 0x8f, 0xc6, 0x4a, 0xed, 0x76, 0xd3, 0x24, 0x06, 0xe8, 0x8b, 0xd6, 0x69, 0x12, 0x97, 0xbb, 0xfc, + 0xc0, 0x63, 0x10, 0x9d, 0x21, 0xeb, 0xf0, 0x2e, 0xb4, 0xee, 0x74, 0x64, 0xff, 0xcc, 0x78, 0x59, + 0xf5, 0x87, 0xb2, 0xe8, 0xe4, 0x84, 0x43, 0x74, 0x8f, 0xcc, 0x4e, 0x95, 0x4a, 0x1d, 0xf0, 0x91, + 0x6b, 0x36, 0x89, 0xb5, 0x7c, 0x30, 0xc3, 0xfa, 0x05, 0x34, 0x12, 0x34, 0xa0, 0xd6, 0xb0, 0xdb, + 0x44, 0x7c, 0x58, 0xd5, 0xf0, 0x31, 0x75, 0x97, 0xa2, 0xb4, 0x08, 0x29, 0xbe, 0x81, 0x8e, 0x07, + 0x90, 0x52, 0xb3, 0x69, 0xaf, 0x69, 0xa4, 0xe3, 0x32, 0xc7, 0xd8, 0x7e, 0xe6, 0x18, 0x1b, 0x72, + 0xd0, 0x29, 0xbe, 0xee, 0x50, 0x02, 0x2d, 0xa9, 0x94, 0xfa, 0xf9, 0x1c, 0x3a, 0x75, 0x4b, 0x6f, + 0x9a, 0x46, 0x28, 0x1a, 0x8d, 0xb8, 0x6d, 0xdb, 0x72, 0xc9, 0x21, 0x1a, 0xa5, 0xd2, 0x50, 0xc8, + 0xef, 0xcb, 0x50, 0x88, 0x77, 0x51, 0xef, 0x9e, 0xbb, 0xa8, 0xb0, 0xab, 0x2e, 0xfa, 0x8f, 0x19, + 0x34, 0xea, 0x3b, 0xfe, 0x8b, 0xaf, 0xa9, 0x05, 0xaf, 0x74, 0x38, 0x42, 0x8c, 0xf8, 0x41, 0x03, + 0x1e, 0xd7, 0x50, 0xdf, 0xe4, 0xdd, 0xb6, 0xe9, 0x10, 0x77, 0x1b, 0x4e, 0xdc, 0xe7, 0xf8, 0x71, + 0xc9, 0x18, 0x61, 0x45, 0x62, 0x27, 0x25, 0x0c, 0x0c, 0xcf, 0xf9, 0xd8, 0xd3, 0x87, 0x71, 0xff, + 0x89, 0x38, 0x7b, 0xce, 0xc7, 0x9f, 0x48, 0x48, 0xef, 0x33, 0x43, 0x52, 0xfc, 0x10, 0xca, 0x2d, + 0x2c, 0xcc, 0xf0, 0x99, 0x14, 0x9e, 0xe6, 0x7b, 0x9e, 0xf8, 0x5e, 0x91, 0x62, 0xd5, 0x3f, 0xc9, + 0x22, 0x44, 0x55, 0x81, 0x0d, 0xd7, 0x03, 0x51, 0xc2, 0x71, 0xd4, 0xef, 0x0b, 0x9c, 0xab, 0x61, + 0xe0, 0xb5, 0x1f, 0xed, 0x88, 0x68, 0xdd, 0xc1, 0x0b, 0x8d, 0xa2, 0xef, 0x48, 0xce, 0xee, 0x01, + 0x60, 0x67, 0x03, 0x8e, 0xe4, 0xbe, 0xfb, 0xf8, 0x7b, 0xd1, 0x00, 0x9f, 0xf1, 0x6c, 0xe9, 0xfc, + 0xbf, 0xe1, 0x03, 0xb5, 0x10, 0x1f, 0x99, 0x5a, 0x0b, 0x7b, 0x58, 0x88, 0x7d, 0xf1, 0xb2, 0x5e, + 0x39, 0x12, 0xef, 0x3e, 0x8b, 0xf7, 0x33, 0x5c, 0xbc, 0xec, 0x05, 0xcf, 0xa1, 0x15, 0xef, 0xbe, + 0x9d, 0x7d, 0xab, 0x7f, 0x98, 0x41, 0x98, 0x36, 0xab, 0xaa, 0xbb, 0xee, 0x9a, 0xed, 0x18, 0xcc, + 0x39, 0xfd, 0x40, 0x04, 0xb3, 0x7f, 0xf7, 0x95, 0x5f, 0xe9, 0x47, 0xc7, 0x25, 0xc7, 0xdf, 0x43, + 0x3e, 0x59, 0x5d, 0x92, 0x47, 0x53, 0xb7, 0x57, 0x2f, 0x0f, 0x8b, 0x17, 0xa2, 0xbd, 0xd2, 0x03, + 0x34, 0xe1, 0x26, 0xf4, 0x71, 0x34, 0xc4, 0x7f, 0xd0, 0x15, 0xda, 0xbf, 0xe9, 0x82, 0x51, 0xea, + 0x52, 0x80, 0x26, 0xa1, 0xf1, 0xd3, 0x68, 0x80, 0x0e, 0x98, 0x65, 0x88, 0xe2, 0xd1, 0x17, 0xbe, + 0x28, 0x31, 0x7c, 0xa0, 0xb8, 0x9e, 0x04, 0x94, 0xc2, 0x3b, 0xa2, 0xfe, 0x6d, 0xbc, 0x23, 0xfa, + 0x28, 0x1a, 0x2c, 0x59, 0x96, 0xed, 0xc1, 0x26, 0xdd, 0xe5, 0x57, 0x13, 0xa9, 0x56, 0xf9, 0x43, + 0xf0, 0x38, 0x3e, 0xa4, 0x4f, 0x34, 0xcb, 0x45, 0x86, 0xf8, 0xaa, 0xff, 0x2a, 0x86, 0x38, 0xdc, + 0xab, 0x1c, 0xae, 0x67, 0x1c, 0x0e, 0x8b, 0x3f, 0x8a, 0x81, 0xce, 0x1b, 0xae, 0x3a, 0x76, 0xdb, + 0x76, 0x89, 0xc1, 0x04, 0x35, 0x18, 0x86, 0x1a, 0x68, 0x73, 0x04, 0xbc, 0x63, 0x93, 0x22, 0x6a, + 0x48, 0x45, 0xf0, 0x12, 0x3a, 0xe1, 0x5f, 0x14, 0x07, 0x2f, 0x06, 0x2b, 0x65, 0x57, 0x19, 0x82, + 0x57, 0x49, 0x38, 0xaa, 0x0c, 0x95, 0xf2, 0xf8, 0x79, 0xff, 0x5a, 0xc4, 0x7f, 0x72, 0x58, 0x37, + 0x0d, 0xb1, 0xab, 0x13, 0xf9, 0xe1, 0x6f, 0x43, 0x83, 0xb3, 0xfa, 0xdd, 0x72, 0x87, 0x9f, 0xbd, + 0x0c, 0x6f, 0xff, 0xf6, 0xa5, 0xa5, 0xdf, 0xad, 0x1b, 0xbc, 0x5c, 0xc4, 0xa6, 0x10, 0x59, 0xe2, + 0x3a, 0x3a, 0x59, 0x75, 0xec, 0x96, 0xed, 0x11, 0x23, 0xf2, 0xf8, 0xee, 0x58, 0xf8, 0x5a, 0xb7, + 0xcd, 0x29, 0xea, 0x5d, 0x5e, 0xe1, 0xa5, 0xb0, 0xc1, 0x2d, 0x74, 0xac, 0xe4, 0xba, 0x9d, 0x16, + 0x09, 0x6f, 0xa8, 0x46, 0xb7, 0xfc, 0x8c, 0xf7, 0x70, 0xaf, 0xe5, 0xfb, 0x75, 0x28, 0xca, 0x2e, + 0xa8, 0xea, 0x9e, 0x29, 0xd6, 0x08, 0xdf, 0x12, 0xe5, 0xfd, 0x6a, 0xbe, 0x7f, 0x64, 0xf4, 0x98, + 0x76, 0x2a, 0xde, 0x98, 0x05, 0xd3, 0x6b, 0x12, 0xf5, 0xcb, 0x19, 0x84, 0x42, 0x01, 0xe3, 0xc7, + 0xe5, 0x50, 0x41, 0x99, 0xf0, 0xa2, 0x83, 0x47, 0x2f, 0x90, 0x62, 0x03, 0xe1, 0xb3, 0x28, 0x0f, + 0x11, 0x2e, 0xb2, 0xe1, 0xc1, 0xea, 0xaa, 0x69, 0x19, 0x1a, 0x40, 0x29, 0x56, 0x78, 0x8a, 0x0e, + 0x58, 0xb8, 0xd4, 0x67, 0x56, 0x61, 0x19, 0x1d, 0xab, 0x75, 0x16, 0xfd, 0xba, 0x85, 0x77, 0x75, + 0x10, 0x68, 0xc3, 0xed, 0x2c, 0x06, 0x8f, 0x51, 0xa5, 0x30, 0x26, 0x72, 0x11, 0xf5, 0x0b, 0x99, + 0xc8, 0x2c, 0x78, 0x80, 0x8b, 0xde, 0xc3, 0x71, 0x3f, 0x8d, 0xf8, 0xb4, 0xa4, 0x7e, 0x2d, 0x87, + 0x06, 0xab, 0xb6, 0xe3, 0xf1, 0x90, 0x21, 0x87, 0x7b, 0x15, 0x12, 0xf6, 0x4a, 0xf9, 0x1d, 0xec, + 0x95, 0xce, 0xa2, 0xbc, 0xe0, 0xa2, 0xcc, 0xee, 0x45, 0x0c, 0xc3, 0xd1, 0x00, 0xfa, 0x36, 0x3f, + 0xb9, 0x88, 0x5f, 0x82, 0xf6, 0xed, 0xd9, 0xd5, 0xe0, 0xdb, 0xb3, 0x08, 0x7d, 0xe0, 0xc9, 0x27, + 0xef, 0xe1, 0x2e, 0x55, 0x7f, 0x3c, 0x83, 0x8e, 0xf1, 0xab, 0x45, 0x21, 0x4c, 0x58, 0x9f, 0x7f, + 0x29, 0x2c, 0xce, 0x24, 0x0c, 0xa4, 0xf9, 0x38, 0xba, 0x68, 0x4d, 0xde, 0x35, 0x3d, 0xb8, 0x5d, + 0x11, 0xe2, 0x84, 0x11, 0x0e, 0x13, 0x17, 0x2d, 0x9f, 0x0e, 0x3f, 0xee, 0x5f, 0x9a, 0xe6, 0xc2, + 0x95, 0x9a, 0x16, 0x98, 0x4c, 0xbc, 0x38, 0x55, 0xbf, 0x98, 0x47, 0xf9, 0xc9, 0xbb, 0xa4, 0x71, + 0xc8, 0xbb, 0x46, 0x38, 0x8a, 0xcd, 0xef, 0xf1, 0x28, 0x76, 0x37, 0x5e, 0x20, 0x2f, 0x87, 0xfd, + 0x59, 0x90, 0xab, 0x8f, 0xf4, 0x7c, 0xb4, 0x7a, 0xbf, 0xa7, 0x0f, 0x9f, 0x13, 0xd1, 0x3f, 0xce, + 0xa1, 0x5c, 0x6d, 0xa2, 0x7a, 0xa4, 0x37, 0x07, 0xaa, 0x37, 0xdd, 0x6f, 0xd9, 0xd5, 0xe0, 0xe2, + 0xac, 0x3f, 0xf4, 0x6b, 0x8d, 0xdc, 0x91, 0x7d, 0x33, 0x87, 0x46, 0x6a, 0x53, 0x0b, 0x55, 0xe1, + 0xec, 0xfa, 0x06, 0xf3, 0x3d, 0x04, 0x2f, 0x38, 0xd6, 0xa5, 0x67, 0x63, 0x16, 0xd8, 0xcd, 0x8a, + 0xe5, 0x3d, 0x73, 0xed, 0x96, 0xde, 0xec, 0x10, 0x38, 0x2c, 0x62, 0x9e, 0xca, 0xae, 0xf9, 0x26, + 0xf9, 0x3c, 0x84, 0x2a, 0xf0, 0x19, 0xe0, 0x17, 0x50, 0xee, 0x26, 0xf7, 0x21, 0x49, 0xe3, 0xf3, + 0xd4, 0x55, 0xc6, 0x87, 0x4e, 0x82, 0xb9, 0x8e, 0x69, 0x00, 0x07, 0x5a, 0x8a, 0x16, 0xbe, 0xce, + 0x4d, 0x86, 0x6d, 0x15, 0x5e, 0xf6, 0x0b, 0x5f, 0xaf, 0x94, 0x71, 0x0d, 0x0d, 0x56, 0x89, 0xd3, + 0x32, 0xa1, 0xa3, 0xfc, 0x39, 0xbb, 0x3b, 0x13, 0xba, 0xb7, 0x1a, 0x6c, 0x87, 0x85, 0x80, 0x99, + 0xc8, 0x05, 0xbf, 0x8e, 0x10, 0xb3, 0xaa, 0xb6, 0x19, 0x7a, 0xf2, 0x1c, 0xec, 0x54, 0x98, 0x31, + 0x9c, 0x60, 0x95, 0x0a, 0xcc, 0xf0, 0x2a, 0x1a, 0x9d, 0xb5, 0x0d, 0x73, 0xc9, 0x64, 0xce, 0xa2, + 0x50, 0x41, 0x61, 0x6b, 0x17, 0x2d, 0x6a, 0xfc, 0xb6, 0x84, 0x72, 0x49, 0xd5, 0xc4, 0x18, 0xab, + 0xff, 0xa0, 0x17, 0xe5, 0x69, 0xb7, 0x1f, 0x8d, 0xdf, 0xbd, 0x8c, 0xdf, 0x12, 0x1a, 0xbd, 0x6d, + 0x3b, 0xab, 0xa6, 0xb5, 0x1c, 0xf8, 0xf1, 0xf3, 0xdd, 0x34, 0xf8, 0x1e, 0xad, 0x31, 0x5c, 0x3d, + 0x70, 0xf9, 0xd7, 0x62, 0xe4, 0x5b, 0x8c, 0xe0, 0xe7, 0x10, 0x62, 0xaf, 0xf3, 0x81, 0xa6, 0x3f, + 0x0c, 0xaf, 0xc1, 0xde, 0xee, 0xc3, 0xd3, 0x00, 0x31, 0xbc, 0x46, 0x48, 0x8c, 0x2f, 0xf9, 0xde, + 0x1b, 0x03, 0xf0, 0x52, 0x00, 0x8e, 0x0d, 0xc0, 0x7b, 0x43, 0x34, 0x02, 0x98, 0x1f, 0x47, 0x15, + 0x21, 0xe1, 0x46, 0x0c, 0x45, 0x04, 0x21, 0x4d, 0x0e, 0x3c, 0xa0, 0x5d, 0xc2, 0x85, 0x98, 0x26, + 0xf0, 0xc0, 0xcf, 0x44, 0xae, 0xec, 0xb1, 0xc4, 0x2d, 0xf5, 0xc6, 0x3e, 0x74, 0xf9, 0x1a, 0xda, + 0xca, 0xe5, 0x4b, 0xfd, 0xbd, 0x2c, 0x1a, 0xa8, 0x75, 0x16, 0xdd, 0x75, 0xd7, 0x23, 0xad, 0x43, + 0xae, 0xc6, 0xfe, 0x86, 0x30, 0x9f, 0xb8, 0x21, 0x7c, 0xc8, 0x17, 0x8a, 0x70, 0x52, 0x1a, 0x98, + 0x74, 0xbe, 0x07, 0x5c, 0xa8, 0xc8, 0x85, 0x9d, 0x2b, 0xb2, 0xfa, 0xab, 0x59, 0x34, 0xca, 0x2e, + 0x0a, 0xcb, 0xa6, 0xdb, 0xd8, 0x87, 0xc7, 0x0b, 0x07, 0x2f, 0xd3, 0xbd, 0x5d, 0xae, 0x6f, 0xe3, + 0x49, 0x88, 0xfa, 0xf1, 0x2c, 0x1a, 0x2c, 0x75, 0xbc, 0x95, 0x92, 0x07, 0x9a, 0x79, 0x4f, 0xee, + 0x6e, 0x7e, 0x37, 0x83, 0x8e, 0xd1, 0x86, 0x2c, 0xd8, 0xab, 0xc4, 0xda, 0x87, 0x83, 0x56, 0xf1, + 0xc0, 0x34, 0xbb, 0xcb, 0x03, 0x53, 0x5f, 0x96, 0xb9, 0x9d, 0xc9, 0x12, 0xae, 0x07, 0x34, 0xbb, + 0x49, 0x0e, 0xf7, 0x67, 0xec, 0xe3, 0xf5, 0x80, 0x2f, 0x90, 0x7d, 0xb8, 0x8e, 0x7a, 0x77, 0x09, + 0x64, 0x1f, 0xce, 0xd2, 0xde, 0x1d, 0x02, 0xf9, 0x4a, 0x06, 0x0d, 0x8c, 0xdb, 0xde, 0x21, 0x1f, + 0xf8, 0xfc, 0x2b, 0x0e, 0xb7, 0x9a, 0xfb, 0x5f, 0x71, 0xb8, 0x75, 0x53, 0xfd, 0x91, 0x2c, 0x3a, + 0xc1, 0x83, 0x92, 0xf3, 0xd3, 0x8b, 0xa3, 0xe9, 0x98, 0x0f, 0xb6, 0xb8, 0x68, 0x8e, 0xe6, 0x21, + 0x2e, 0x9a, 0x9f, 0xcd, 0xa1, 0x13, 0x10, 0xba, 0x95, 0x6e, 0xea, 0xde, 0x05, 0xb6, 0x08, 0x6e, + 0xc8, 0x97, 0xbe, 0xb3, 0x09, 0x97, 0xbe, 0x7f, 0xb5, 0x51, 0x7c, 0x66, 0xd9, 0xf4, 0x56, 0x3a, + 0x8b, 0x97, 0x1b, 0x76, 0xeb, 0xca, 0xb2, 0xa3, 0xdf, 0x31, 0xd9, 0x75, 0xa7, 0xde, 0xbc, 0x12, + 0xe4, 0xf7, 0xd0, 0xdb, 0x26, 0xcf, 0xfc, 0x51, 0x83, 0x9d, 0x12, 0xe5, 0xea, 0x5f, 0x17, 0xbb, + 0x08, 0xbd, 0x6a, 0x9b, 0x16, 0xf7, 0xa1, 0x64, 0x86, 0x6e, 0x8d, 0xee, 0x2e, 0xdf, 0xb0, 0x4d, + 0xab, 0x1e, 0x75, 0xa4, 0xdc, 0x69, 0x7d, 0x21, 0x6b, 0x4d, 0xa8, 0x46, 0xfd, 0xe7, 0x19, 0x74, + 0x5a, 0xd6, 0xe2, 0x77, 0x83, 0xed, 0xf8, 0xa3, 0x59, 0x74, 0xdf, 0x75, 0x10, 0x4e, 0xe0, 0xb8, + 0x72, 0x34, 0x6f, 0xf1, 0xc1, 0x99, 0x20, 0x9b, 0x23, 0x8b, 0x32, 0x5d, 0x36, 0x47, 0x93, 0x3a, + 0x97, 0xcd, 0x3f, 0xcb, 0xa0, 0xe3, 0xf3, 0x95, 0xf2, 0xc4, 0xbb, 0x64, 0x44, 0xc5, 0xbf, 0xe7, + 0x90, 0x1b, 0x9c, 0xb1, 0xef, 0x39, 0xe4, 0xa6, 0x27, 0xfd, 0x9e, 0x5a, 0x69, 0x76, 0xe6, 0xdd, + 0xa4, 0x6f, 0xd2, 0xf7, 0xbc, 0x0b, 0xf4, 0x4d, 0xfa, 0x9e, 0x43, 0xae, 0x6f, 0xff, 0xa8, 0x80, + 0x06, 0x6f, 0x74, 0x16, 0x09, 0x77, 0x81, 0xb9, 0xa7, 0xcf, 0x5b, 0xaf, 0xa2, 0x41, 0x2e, 0x06, + 0xb8, 0xe9, 0x10, 0x42, 0xf4, 0xf1, 0x90, 0x2b, 0x2c, 0x0a, 0x92, 0x48, 0x84, 0xcf, 0xa2, 0xfc, + 0x2d, 0xe2, 0x2c, 0x8a, 0xaf, 0x57, 0xef, 0x10, 0x67, 0x51, 0x03, 0x28, 0x9e, 0x09, 0x1d, 0xf3, + 0x4b, 0xd5, 0x0a, 0xa4, 0x6b, 0xe1, 0x97, 0x2c, 0x90, 0x7f, 0x26, 0xf0, 0xae, 0xd3, 0xdb, 0x26, + 0x4b, 0xf4, 0x22, 0xbe, 0x9c, 0x8f, 0x96, 0xc4, 0x73, 0x68, 0x4c, 0x74, 0xaf, 0x62, 0xb9, 0x4a, + 0xfa, 0x13, 0xd8, 0x25, 0x65, 0x29, 0x89, 0x17, 0xc5, 0x2f, 0xa3, 0x21, 0x1f, 0x08, 0x8e, 0x62, + 0x03, 0x61, 0x80, 0xfc, 0x80, 0x55, 0x24, 0x11, 0x92, 0x54, 0x40, 0x64, 0x00, 0x57, 0x07, 0x28, + 0x81, 0x41, 0xc4, 0xf1, 0x4e, 0x2a, 0x80, 0x9f, 0x06, 0x06, 0xf0, 0x98, 0x04, 0x1c, 0x4c, 0x06, + 0xe1, 0x69, 0x27, 0x38, 0xfe, 0x3b, 0x1c, 0xce, 0x1e, 0xf0, 0x4a, 0x64, 0x78, 0x1e, 0xa1, 0xd0, + 0x11, 0x80, 0x87, 0x49, 0xd8, 0xb1, 0x8b, 0x82, 0xc0, 0x42, 0xbc, 0xc2, 0x1b, 0xde, 0xcd, 0x15, + 0x9e, 0xfa, 0xb5, 0x2c, 0x1a, 0x2c, 0xb5, 0xdb, 0xc1, 0x50, 0x78, 0x1c, 0x15, 0x4a, 0xed, 0xf6, + 0x4d, 0xad, 0x22, 0x06, 0x4c, 0xd7, 0xdb, 0xed, 0x7a, 0xc7, 0x31, 0x45, 0xcf, 0x53, 0x46, 0x84, + 0x27, 0xd0, 0x70, 0xa9, 0xdd, 0xae, 0x76, 0x16, 0x9b, 0x66, 0x43, 0xc8, 0xbf, 0xc4, 0x52, 0xc5, + 0xb5, 0xdb, 0xf5, 0x36, 0x60, 0xa2, 0x49, 0xb8, 0xe4, 0x32, 0xf8, 0xa3, 0x10, 0x5c, 0x88, 0xa7, + 0xff, 0x61, 0x09, 0x46, 0xd4, 0x20, 0x54, 0x7a, 0xd8, 0xb6, 0xcb, 0x01, 0x11, 0x0b, 0x29, 0x7f, + 0xd6, 0x0f, 0xcc, 0x4f, 0x2b, 0x8a, 0xa5, 0xf9, 0x09, 0x59, 0xe2, 0x27, 0x50, 0x5f, 0xa9, 0xdd, + 0x16, 0xee, 0x88, 0xc0, 0x11, 0x88, 0x96, 0x8a, 0xf4, 0xb1, 0x4f, 0x76, 0xe6, 0x45, 0x34, 0x22, + 0x57, 0xb6, 0xa3, 0x90, 0xf4, 0xdf, 0xca, 0xc0, 0x07, 0x1d, 0x72, 0xcf, 0xe9, 0xa7, 0x50, 0xae, + 0xd4, 0x6e, 0xf3, 0xf9, 0xe8, 0x78, 0x42, 0x7f, 0x44, 0x1f, 0x5a, 0x97, 0xda, 0x6d, 0xff, 0xd3, + 0x0f, 0xf9, 0x13, 0x8c, 0x5d, 0x7d, 0xfa, 0x57, 0xd8, 0xa7, 0x1f, 0xee, 0xe7, 0x11, 0xea, 0x17, + 0x73, 0xe8, 0x58, 0xa9, 0xdd, 0x3e, 0x0a, 0x65, 0xbf, 0x5f, 0xcf, 0xb9, 0x9f, 0x44, 0x48, 0x98, + 0x1e, 0xfb, 0x82, 0x07, 0x62, 0x83, 0xc2, 0xd4, 0xa8, 0x64, 0x34, 0x81, 0xc8, 0x57, 0xbf, 0xfe, + 0x1d, 0xa9, 0xdf, 0xc7, 0x73, 0x30, 0x15, 0x1f, 0xf6, 0xd0, 0x54, 0xef, 0x94, 0x6e, 0xe3, 0x7d, + 0x50, 0xd8, 0x51, 0x1f, 0xfc, 0x8e, 0x34, 0x78, 0x20, 0x34, 0xfa, 0x51, 0x2f, 0xf4, 0xee, 0xc9, + 0x2c, 0x1e, 0x11, 0x85, 0xc9, 0xe3, 0xe5, 0xf8, 0xe9, 0x9a, 0x78, 0xf4, 0xa6, 0x06, 0x45, 0xd5, + 0x4d, 0x43, 0x8b, 0xd0, 0xfa, 0x7d, 0xd8, 0xb7, 0xa3, 0x3e, 0xdc, 0xc8, 0xc2, 0x0b, 0xed, 0x20, + 0xfa, 0xd3, 0xde, 0x77, 0x17, 0x57, 0x10, 0x62, 0xf7, 0xfd, 0x81, 0x2b, 0xf2, 0x30, 0x0b, 0xf4, + 0xc2, 0xb2, 0x38, 0xf1, 0x40, 0x2f, 0x21, 0x49, 0xe0, 0xd5, 0x94, 0x4b, 0xf4, 0x6a, 0xba, 0x84, + 0xfa, 0x35, 0x7d, 0xed, 0xb5, 0x0e, 0x71, 0xd6, 0xb9, 0x39, 0xc3, 0x82, 0x2b, 0xea, 0x6b, 0xf5, + 0x8f, 0x51, 0xa0, 0x16, 0xa0, 0xb1, 0x1a, 0x3c, 0xf1, 0x17, 0xfc, 0x30, 0xd8, 0xc9, 0x74, 0xf0, + 0xb0, 0x7f, 0x37, 0x8a, 0x8e, 0x9f, 0x47, 0xb9, 0xd2, 0xed, 0x1a, 0x97, 0x6c, 0xd0, 0xb5, 0xa5, + 0xdb, 0x35, 0x2e, 0xaf, 0xd4, 0xb2, 0xb7, 0x6b, 0xea, 0xc7, 0xb3, 0x08, 0xc7, 0x29, 0xf1, 0x33, + 0x68, 0x00, 0xa0, 0xcb, 0x54, 0x67, 0xc4, 0xf4, 0x9f, 0x6b, 0x6e, 0xdd, 0x01, 0xa8, 0x64, 0xdc, + 0xf9, 0xa4, 0xf8, 0x39, 0xc8, 0x74, 0xcc, 0x13, 0xd0, 0x49, 0xe9, 0x3f, 0xd7, 0x5c, 0x3f, 0x37, + 0x70, 0x24, 0xd1, 0x31, 0x27, 0x06, 0xbb, 0xf0, 0x76, 0x6d, 0xda, 0x76, 0x3d, 0x2e, 0x6a, 0x66, + 0x17, 0xae, 0xb9, 0x90, 0x77, 0x56, 0xb2, 0x0b, 0x19, 0x19, 0xe4, 0xce, 0xba, 0x5d, 0x63, 0x8f, + 0x61, 0x0c, 0xcd, 0x6e, 0xfa, 0x06, 0x25, 0xcb, 0x9d, 0xb5, 0xe6, 0xd6, 0xd9, 0x43, 0x1a, 0x03, + 0x52, 0x2c, 0x4b, 0xb9, 0xb3, 0xa4, 0x52, 0xea, 0xa7, 0xfb, 0xd1, 0x68, 0x59, 0xf7, 0xf4, 0x45, + 0xdd, 0x25, 0xc2, 0x6e, 0xfa, 0x98, 0x0f, 0xf3, 0x3f, 0x47, 0x90, 0x83, 0xb1, 0x98, 0xf0, 0x35, + 0xd1, 0x02, 0xf8, 0x85, 0x90, 0x6f, 0x90, 0xd9, 0x54, 0x4c, 0x95, 0xb6, 0x58, 0x6f, 0x73, 0xb0, + 0x16, 0x23, 0xc4, 0x8f, 0xa1, 0x41, 0x1f, 0x46, 0x37, 0x00, 0xb9, 0x50, 0x67, 0x8c, 0x45, 0x6a, + 0xff, 0x6b, 0x22, 0x1a, 0x3f, 0x87, 0x86, 0xfc, 0x9f, 0x82, 0x69, 0xcd, 0xf2, 0xbe, 0x2d, 0xc6, + 0x76, 0x4f, 0x22, 0xa9, 0x58, 0x14, 0xe6, 0xb7, 0x5e, 0xa9, 0x68, 0x24, 0xb5, 0x9a, 0x44, 0x8a, + 0x3f, 0x86, 0x46, 0xfc, 0xdf, 0x7c, 0xc3, 0xc0, 0xb2, 0xd0, 0x3d, 0x16, 0x64, 0x70, 0x8e, 0x88, + 0xf5, 0xb2, 0x4c, 0xce, 0xb6, 0x0e, 0xf7, 0xfb, 0xd9, 0xc2, 0x8c, 0xc5, 0xf8, 0xce, 0x21, 0x52, + 0x01, 0xae, 0xa0, 0x31, 0x1f, 0x12, 0x6a, 0x68, 0x5f, 0xb8, 0x63, 0x34, 0x16, 0xeb, 0x89, 0x4a, + 0x1a, 0x2f, 0x85, 0x9b, 0xe8, 0xac, 0x04, 0x34, 0xdc, 0x15, 0x73, 0xc9, 0xe3, 0xdb, 0x3d, 0x1e, + 0xe9, 0x98, 0xa7, 0x87, 0x0c, 0xb8, 0x32, 0x1a, 0x3f, 0xcf, 0xab, 0x9c, 0x83, 0xaa, 0x2b, 0x37, + 0x5c, 0x43, 0x27, 0x7c, 0xfc, 0xf5, 0x89, 0x6a, 0xd5, 0xb1, 0xdf, 0x20, 0x0d, 0xaf, 0x52, 0xe6, + 0xdb, 0x65, 0x88, 0x80, 0x67, 0x2c, 0xd6, 0x97, 0x1b, 0x6d, 0xaa, 0x14, 0x14, 0x27, 0x33, 0x4f, + 0x2c, 0x8c, 0x6f, 0xa1, 0xfb, 0x04, 0x78, 0xc5, 0x72, 0x3d, 0xdd, 0x6a, 0x90, 0x4a, 0x99, 0xef, + 0xa1, 0x61, 0x3f, 0xcf, 0xb9, 0x9a, 0x1c, 0x29, 0xb3, 0x4d, 0x2e, 0x8e, 0x5f, 0x44, 0xc3, 0x3e, + 0x82, 0xdd, 0xdd, 0x0d, 0xc2, 0xdd, 0x1d, 0x0c, 0x49, 0x63, 0xb1, 0x1e, 0x7d, 0xb3, 0x29, 0x13, + 0x8b, 0x1a, 0x05, 0x09, 0xf4, 0x87, 0x24, 0x8d, 0xf2, 0xd6, 0xdb, 0x89, 0xca, 0x08, 0x49, 0xf5, + 0x5f, 0x0e, 0x35, 0x6a, 0xde, 0x31, 0x97, 0x4d, 0xb6, 0x93, 0xf6, 0x9f, 0x69, 0x2e, 0xd6, 0x6d, + 0x00, 0x26, 0xe9, 0x07, 0x23, 0x3f, 0x53, 0x42, 0xc7, 0x13, 0x74, 0x6c, 0x47, 0x3b, 0xc6, 0x4f, + 0x65, 0xc3, 0x46, 0x1c, 0xf2, 0x6d, 0xe3, 0x38, 0xea, 0xf7, 0xbf, 0x84, 0x1b, 0x0f, 0x4a, 0xda, + 0xd0, 0x8c, 0xf2, 0xf0, 0xf1, 0x92, 0x38, 0x0e, 0xf9, 0x56, 0x72, 0x3f, 0xc4, 0xf1, 0x56, 0x26, + 0x14, 0xc7, 0x21, 0xdf, 0x5e, 0x7e, 0x5f, 0x3e, 0x9c, 0x93, 0x8e, 0xf6, 0x98, 0xfb, 0x65, 0x26, + 0x87, 0xde, 0xa7, 0x85, 0x1d, 0x3c, 0x97, 0x14, 0x55, 0xb3, 0x6f, 0x77, 0xaa, 0x89, 0x5f, 0x44, + 0x83, 0x55, 0xdb, 0xf5, 0x96, 0x1d, 0xe2, 0x56, 0x83, 0x48, 0xfd, 0xf0, 0xd4, 0xb6, 0xcd, 0xc1, + 0xf5, 0xb6, 0x34, 0xfb, 0x8b, 0xe4, 0xea, 0x1f, 0xe5, 0x62, 0xda, 0xc0, 0x0c, 0xd7, 0x43, 0xa9, + 0x0d, 0xfb, 0x30, 0xd4, 0xf1, 0xd5, 0x70, 0x15, 0x64, 0x16, 0x7e, 0xaf, 0x10, 0x86, 0x70, 0x91, + 0x1b, 0xf8, 0x32, 0x09, 0xfe, 0x10, 0x3a, 0x25, 0x01, 0xaa, 0xba, 0xa3, 0xb7, 0x88, 0x17, 0x66, + 0x45, 0x84, 0xc0, 0x52, 0x7e, 0xe9, 0x7a, 0x3b, 0x40, 0x8b, 0x99, 0x16, 0x53, 0x38, 0x08, 0xaa, + 0xd5, 0xb7, 0x03, 0xc7, 0xe6, 0x3f, 0xce, 0x23, 0x25, 0x30, 0x2f, 0x83, 0x07, 0x40, 0x07, 0x38, + 0x95, 0xbf, 0x23, 0x3a, 0xd7, 0x44, 0x63, 0xa1, 0x30, 0x6a, 0x9d, 0x56, 0x4b, 0x87, 0x0e, 0xa6, + 0xe6, 0x6b, 0x31, 0xca, 0x2c, 0x24, 0x64, 0x16, 0xeb, 0x19, 0x6e, 0xb1, 0xe2, 0xf0, 0x81, 0x55, + 0xdd, 0x65, 0x2c, 0xb4, 0x38, 0x57, 0xfc, 0x99, 0x0c, 0x3a, 0x51, 0x5a, 0x5a, 0x22, 0x0d, 0x8f, + 0x18, 0xf3, 0x8b, 0xd4, 0x74, 0x9b, 0xb0, 0x3b, 0x96, 0xe7, 0x5b, 0xcb, 0xcf, 0xa7, 0x57, 0xc7, + 0x3a, 0xe9, 0x72, 0x52, 0x61, 0xd6, 0x92, 0x20, 0xc4, 0x82, 0xce, 0x49, 0xea, 0x36, 0xd0, 0xd4, + 0x1b, 0x40, 0xa4, 0x25, 0xd6, 0x7b, 0xe6, 0x3a, 0x3a, 0x9d, 0xca, 0x72, 0x2b, 0x53, 0xa9, 0x57, + 0x34, 0x95, 0xfe, 0x65, 0x26, 0x54, 0xf7, 0x88, 0x90, 0xf0, 0x65, 0x84, 0x42, 0x10, 0xdf, 0x3c, + 0x8d, 0x6c, 0x6e, 0x14, 0x51, 0x28, 0x34, 0x4d, 0xa0, 0xc0, 0xf3, 0xa8, 0xc0, 0xc5, 0xc2, 0xf2, + 0xdc, 0xbe, 0x77, 0x8b, 0x5e, 0xb8, 0x2c, 0xca, 0x01, 0x36, 0x46, 0xfc, 0x9b, 0x39, 0x9b, 0x33, + 0xcf, 0xa1, 0xc1, 0xdd, 0x7e, 0xd7, 0x67, 0x72, 0x08, 0x8b, 0x3b, 0x9d, 0x03, 0x34, 0x03, 0xdf, + 0x11, 0x83, 0x65, 0x77, 0x79, 0x6a, 0x2e, 0xa2, 0x7e, 0xfa, 0x09, 0x90, 0xf9, 0x41, 0x88, 0xf4, + 0xda, 0xe1, 0x30, 0x2d, 0xc0, 0x86, 0x61, 0x96, 0xfa, 0x92, 0xc3, 0x2c, 0xa9, 0x3f, 0x98, 0x43, + 0x27, 0xc5, 0x0e, 0x29, 0x13, 0x08, 0x1e, 0x7f, 0xd4, 0x29, 0x6f, 0x63, 0xa7, 0xa8, 0xa8, 0xc0, + 0x0c, 0x5c, 0x1e, 0xc5, 0x9f, 0x1d, 0x3e, 0x00, 0x44, 0xe3, 0x18, 0xf5, 0xdf, 0x65, 0xd1, 0x70, + 0x60, 0x44, 0xe8, 0x8e, 0x7b, 0x0f, 0x77, 0xc7, 0xfb, 0xd0, 0x30, 0x04, 0xca, 0x69, 0x11, 0x8b, + 0x05, 0x93, 0xe9, 0x15, 0xd2, 0x6e, 0xf8, 0x08, 0x9e, 0x61, 0x49, 0x22, 0xa4, 0xda, 0xcf, 0xec, + 0x0b, 0x21, 0x7c, 0x11, 0x33, 0x2e, 0x18, 0x5c, 0xfd, 0xa9, 0x1c, 0x1a, 0xf2, 0xa5, 0x3c, 0x6e, + 0x1e, 0xd6, 0xdb, 0x84, 0x83, 0x15, 0xf2, 0x15, 0x84, 0xaa, 0xb6, 0xe3, 0xe9, 0xcd, 0xb9, 0x50, + 0xf3, 0xe1, 0x18, 0xae, 0x0d, 0x50, 0x56, 0x46, 0x20, 0x81, 0xf5, 0x2b, 0x34, 0xde, 0xd8, 0xc4, + 0xc4, 0xd6, 0xaf, 0x00, 0xaa, 0x09, 0x14, 0xea, 0x6f, 0x65, 0xd1, 0x31, 0xbf, 0x93, 0x26, 0xef, + 0x92, 0x46, 0xe7, 0x5e, 0x9e, 0x9b, 0x64, 0x69, 0xf7, 0x6e, 0x29, 0x6d, 0xf5, 0xbf, 0x08, 0x13, + 0xc9, 0x44, 0xd3, 0x3e, 0x9a, 0x48, 0xfe, 0x26, 0x74, 0x5c, 0xfd, 0xce, 0x1c, 0x3a, 0xe1, 0x4b, + 0x7d, 0xaa, 0x63, 0xc1, 0x06, 0x76, 0x42, 0x6f, 0x36, 0xef, 0xe5, 0x3d, 0xdf, 0xa0, 0x2f, 0x88, + 0x79, 0x1e, 0x79, 0x8e, 0x67, 0xbb, 0x5b, 0xe2, 0xe0, 0xba, 0x6d, 0x1a, 0x9a, 0x48, 0x84, 0x5f, + 0x46, 0x43, 0xfe, 0xcf, 0x92, 0xb3, 0xec, 0x6f, 0xf4, 0xe0, 0x38, 0x3a, 0x28, 0xa4, 0x3b, 0xd2, + 0x73, 0x75, 0xa9, 0x80, 0xfa, 0x1f, 0x0a, 0xe8, 0xcc, 0x6d, 0xd3, 0x32, 0xec, 0x35, 0xd7, 0x4f, + 0x96, 0x78, 0xe8, 0x8f, 0x63, 0x0e, 0x3a, 0x49, 0xe2, 0x6b, 0xe8, 0xbe, 0xa8, 0x48, 0x9d, 0x20, + 0x84, 0x35, 0xef, 0x9d, 0x35, 0x46, 0x50, 0xf7, 0xd3, 0x26, 0xf2, 0x3b, 0x1d, 0x2d, 0xb9, 0x64, + 0x34, 0xef, 0x62, 0xdf, 0x76, 0xf2, 0x2e, 0x3e, 0x8a, 0x0a, 0x65, 0xbb, 0xa5, 0x9b, 0x7e, 0xe0, + 0x12, 0x18, 0xc5, 0x41, 0xbd, 0x80, 0xd1, 0x38, 0x05, 0xe5, 0xcf, 0x2b, 0x86, 0x2e, 0x1b, 0x08, + 0xf9, 0xfb, 0x05, 0xa8, 0x95, 0xa6, 0x89, 0x44, 0xd8, 0x46, 0xc3, 0xbc, 0x3a, 0x7e, 0x03, 0x83, + 0x60, 0xf3, 0xf4, 0xb4, 0x2f, 0xa3, 0x74, 0xb5, 0xba, 0x2c, 0x95, 0x63, 0xdb, 0x28, 0x96, 0x0e, + 0x92, 0x7f, 0x0c, 0xbb, 0x8b, 0xd1, 0x64, 0xfe, 0x82, 0x10, 0x60, 0x92, 0x19, 0x8c, 0x0b, 0x01, + 0x66, 0x19, 0x91, 0x08, 0x4f, 0xa2, 0x31, 0x08, 0x34, 0x1c, 0x6c, 0xa5, 0xa8, 0x4a, 0x0c, 0x81, + 0x51, 0x09, 0x07, 0xfb, 0x2c, 0x36, 0x31, 0xfd, 0xb8, 0x7a, 0x83, 0xa3, 0xb5, 0x78, 0x89, 0x33, + 0xaf, 0x20, 0x1c, 0x6f, 0xf3, 0x8e, 0x8e, 0xf6, 0x3f, 0x9d, 0x0d, 0xf7, 0x75, 0x87, 0xdd, 0x39, + 0x63, 0x3f, 0x0e, 0xb3, 0x7f, 0x29, 0x83, 0xc6, 0x62, 0x81, 0xab, 0xf1, 0x53, 0x08, 0x31, 0x88, + 0x10, 0x20, 0x10, 0xe2, 0x57, 0x84, 0xc1, 0xac, 0xf9, 0x52, 0x12, 0x92, 0xe1, 0x2b, 0xa8, 0x9f, + 0xfd, 0xe2, 0x21, 0x72, 0xe2, 0x45, 0x3a, 0x1d, 0xd3, 0xd0, 0x02, 0xa2, 0xb0, 0x16, 0xb8, 0x23, + 0xca, 0x25, 0x16, 0xf1, 0xd6, 0xdb, 0x41, 0x2d, 0x94, 0x8c, 0x76, 0xe0, 0x50, 0xd0, 0xe0, 0x92, + 0x71, 0x50, 0x5d, 0x57, 0xe0, 0x31, 0xc0, 0x73, 0x5b, 0xc5, 0x00, 0x8f, 0xcc, 0x4d, 0x3c, 0xe8, + 0xf7, 0xfe, 0x3d, 0x2c, 0xf9, 0x6c, 0x16, 0x1d, 0x0b, 0x6a, 0x3d, 0xc0, 0xeb, 0x88, 0x77, 0x90, + 0x48, 0x3e, 0x93, 0x41, 0xca, 0xb8, 0xd9, 0x6c, 0x9a, 0xd6, 0x72, 0xc5, 0x5a, 0xb2, 0x9d, 0x16, + 0x4c, 0x1e, 0x07, 0x77, 0xdc, 0xa9, 0x7e, 0x4f, 0x06, 0x8d, 0xf1, 0x06, 0x4d, 0xe8, 0x8e, 0x71, + 0x70, 0x67, 0x49, 0xd1, 0x96, 0x1c, 0x9c, 0xbe, 0xa8, 0x5f, 0xca, 0x22, 0x34, 0x63, 0x37, 0x56, + 0x0f, 0xf9, 0xcb, 0xc2, 0x17, 0x50, 0x81, 0xc5, 0x29, 0xe2, 0x1a, 0x3b, 0x76, 0x99, 0x3d, 0x18, + 0xa5, 0x9f, 0xc6, 0x10, 0xe3, 0xa3, 0xfc, 0x84, 0xb6, 0xc0, 0xe2, 0x1c, 0x29, 0x19, 0x8d, 0x17, + 0xa1, 0x95, 0x52, 0x3a, 0x6e, 0xd5, 0x04, 0x95, 0x52, 0x98, 0x5c, 0xe9, 0xe6, 0x46, 0x31, 0xdf, + 0xb4, 0x1b, 0xab, 0x1a, 0xd0, 0xab, 0x7f, 0x9d, 0x61, 0xb2, 0x3b, 0xe4, 0xaf, 0xeb, 0xfc, 0xcf, + 0xcf, 0xef, 0xf0, 0xf3, 0xbf, 0x37, 0x83, 0x4e, 0x68, 0xa4, 0x61, 0xdf, 0x21, 0xce, 0xfa, 0x84, + 0x6d, 0x90, 0xeb, 0xc4, 0x22, 0xce, 0x41, 0x8d, 0xa8, 0xbf, 0x0f, 0x49, 0x13, 0xc2, 0xc6, 0xdc, + 0x74, 0x89, 0x71, 0x78, 0x12, 0x5a, 0xa8, 0xbf, 0xd6, 0x87, 0x94, 0x44, 0x0b, 0xf1, 0xd0, 0x5a, + 0x45, 0xa9, 0x66, 0x7f, 0x7e, 0xbf, 0xcc, 0xfe, 0xde, 0x9d, 0x99, 0xfd, 0x85, 0x9d, 0x9a, 0xfd, + 0x7d, 0xdb, 0x31, 0xfb, 0x5b, 0x51, 0xb3, 0xbf, 0x1f, 0xcc, 0xfe, 0xa7, 0xba, 0x9a, 0xfd, 0x93, + 0x96, 0xb1, 0x4b, 0xa3, 0xff, 0xd0, 0x26, 0x5b, 0xdd, 0xcd, 0x6e, 0xe5, 0x22, 0x9d, 0x14, 0x1b, + 0xb6, 0x63, 0x10, 0x83, 0x6f, 0x52, 0xe0, 0x84, 0xdc, 0xe1, 0x30, 0x2d, 0xc0, 0xc6, 0x32, 0xd7, + 0x0e, 0x6f, 0x27, 0x73, 0xed, 0x3e, 0x6c, 0x63, 0x3e, 0x95, 0x45, 0x63, 0x13, 0xc4, 0xf1, 0x58, + 0x20, 0xc4, 0xfd, 0x70, 0x52, 0x2a, 0xa1, 0x63, 0x02, 0x43, 0xb0, 0xc8, 0xb3, 0xa1, 0xe3, 0x55, + 0x83, 0x38, 0x5e, 0xd4, 0x6f, 0x2b, 0x4a, 0x4f, 0xab, 0xf7, 0xb3, 0x47, 0xf1, 0xb1, 0x1b, 0x54, + 0xef, 0xc3, 0x99, 0x20, 0x4d, 0xfe, 0x4b, 0x0b, 0xe8, 0x85, 0x84, 0x50, 0xf9, 0x9d, 0x27, 0x84, + 0x52, 0x7f, 0x21, 0x83, 0x2e, 0x68, 0xc4, 0x22, 0x6b, 0xfa, 0x62, 0x93, 0x08, 0xcd, 0xe2, 0x2b, + 0x03, 0x9d, 0x35, 0x4c, 0xb7, 0xa5, 0x7b, 0x8d, 0x95, 0x3d, 0xc9, 0x68, 0x0a, 0x0d, 0x89, 0xf3, + 0xd7, 0x0e, 0xe6, 0x36, 0xa9, 0x9c, 0xfa, 0x9b, 0x39, 0xd4, 0x37, 0x6e, 0x7b, 0xaf, 0xda, 0x7b, + 0xcc, 0x50, 0x16, 0x4e, 0xf9, 0xd9, 0x1d, 0x9c, 0x8b, 0x3c, 0x01, 0x95, 0x0b, 0x41, 0xdb, 0xc1, + 0xa9, 0x6f, 0xd1, 0x8e, 0x05, 0xb7, 0xf7, 0xc9, 0x76, 0x98, 0x9b, 0xec, 0x19, 0x34, 0x00, 0x51, + 0x30, 0x84, 0x93, 0x4b, 0x70, 0x99, 0xf5, 0x28, 0x30, 0x5a, 0x47, 0x48, 0x8a, 0x3f, 0x24, 0x45, + 0x6e, 0x2c, 0xec, 0x3d, 0x97, 0x99, 0x18, 0xc4, 0x71, 0xdf, 0x52, 0x86, 0xa9, 0xdf, 0xcc, 0xa3, + 0x21, 0xdf, 0x51, 0xf2, 0x80, 0x7a, 0xf0, 0x71, 0x54, 0x98, 0xb6, 0x85, 0x00, 0xf4, 0xe0, 0x58, + 0xb9, 0x62, 0xbb, 0x11, 0x8f, 0x51, 0x4e, 0x84, 0x9f, 0x42, 0xfd, 0x73, 0xb6, 0x21, 0xba, 0x05, + 0xc3, 0x98, 0xb6, 0x6c, 0x23, 0xf6, 0xac, 0x32, 0x20, 0xc4, 0x17, 0x50, 0x1e, 0x3c, 0xaa, 0x85, + 0xa3, 0xe7, 0x88, 0x17, 0x35, 0xe0, 0x05, 0xdd, 0x28, 0xec, 0x54, 0x37, 0xfa, 0x76, 0xab, 0x1b, + 0xfd, 0xfb, 0xab, 0x1b, 0xaf, 0xa3, 0x21, 0xa8, 0xc9, 0xcf, 0x5f, 0xb5, 0xf5, 0xf2, 0x76, 0x9a, + 0xaf, 0x40, 0xc3, 0xac, 0xdd, 0x3c, 0x8b, 0x15, 0x2c, 0x3c, 0x12, 0xab, 0x88, 0xda, 0xa1, 0x3d, + 0xa8, 0xdd, 0x1f, 0x65, 0x50, 0xdf, 0x4d, 0x6b, 0xd5, 0xb2, 0xd7, 0xf6, 0xa6, 0x71, 0x4f, 0xa1, + 0x41, 0xce, 0x46, 0x98, 0xe3, 0xe1, 0xa5, 0x6c, 0x87, 0x81, 0xeb, 0xc0, 0x49, 0x13, 0xa9, 0xf0, + 0x8b, 0x41, 0x21, 0x78, 0x34, 0x91, 0x0b, 0x53, 0x38, 0xf8, 0x85, 0x1a, 0x72, 0x0c, 0x77, 0x91, + 0x1c, 0x9f, 0x45, 0xf9, 0x32, 0x6d, 0xaa, 0x10, 0x11, 0x94, 0x36, 0x45, 0x03, 0xa8, 0xfa, 0x4f, + 0xb3, 0x68, 0x24, 0x72, 0xfc, 0xf4, 0x28, 0x1a, 0xe0, 0xc7, 0x3f, 0xa6, 0x1f, 0x54, 0x1e, 0x1e, + 0x55, 0x04, 0x40, 0xad, 0x9f, 0xfd, 0x59, 0x31, 0xf0, 0xfb, 0x51, 0x9f, 0xed, 0xc2, 0xd2, 0x04, + 0xdf, 0x32, 0x12, 0x0e, 0xa1, 0xf9, 0x1a, 0x6d, 0x3b, 0x1b, 0x1c, 0x9c, 0x44, 0xd4, 0x48, 0xdb, + 0x85, 0x4f, 0xbb, 0x86, 0x06, 0x74, 0xd7, 0x25, 0x5e, 0xdd, 0xd3, 0x97, 0xc5, 0x38, 0xf3, 0x01, + 0x50, 0x1c, 0x1d, 0x00, 0x5c, 0xd0, 0x97, 0xf1, 0x2b, 0x68, 0xb8, 0xe1, 0x10, 0x58, 0xbc, 0xf4, + 0x26, 0x6d, 0xa5, 0x60, 0x5c, 0x4a, 0x08, 0xf1, 0xc4, 0x3f, 0x44, 0x54, 0x0c, 0x7c, 0x0b, 0x0d, + 0xf3, 0xcf, 0x61, 0x1e, 0xcd, 0x30, 0xd0, 0x46, 0xc2, 0xc5, 0x84, 0x89, 0x84, 0xf9, 0x34, 0x73, + 0xc7, 0x76, 0x91, 0x5c, 0xe4, 0x6b, 0x08, 0xa4, 0xea, 0x57, 0x33, 0xd4, 0xe0, 0xa1, 0x00, 0xc8, + 0x28, 0x4b, 0x75, 0xa5, 0xb5, 0x43, 0x5d, 0x69, 0x85, 0xb9, 0xdf, 0x0a, 0x6e, 0x97, 0xd9, 0x49, + 0xe3, 0x58, 0x7c, 0x19, 0x15, 0x0c, 0xf1, 0xec, 0xe7, 0xa4, 0xfc, 0x11, 0x7e, 0x3d, 0x1a, 0xa7, + 0xc2, 0x17, 0x51, 0x9e, 0x1a, 0xb4, 0xd1, 0x8d, 0x9f, 0xb8, 0x46, 0x6a, 0x40, 0xa1, 0x7e, 0x7b, + 0x16, 0x0d, 0x09, 0x5f, 0x73, 0x75, 0x4f, 0x9f, 0xf3, 0xfc, 0xf6, 0x9a, 0xe9, 0xbb, 0x39, 0xc0, + 0x8e, 0xc0, 0x6f, 0xf2, 0xb5, 0x40, 0x14, 0xdb, 0xba, 0x82, 0xe0, 0x82, 0x79, 0x86, 0x7f, 0x68, + 0x61, 0xfb, 0x9b, 0x20, 0x4a, 0xff, 0x6a, 0xbe, 0x3f, 0x3b, 0x9a, 0x7b, 0x35, 0xdf, 0x9f, 0x1f, + 0xed, 0x85, 0xa8, 0x3a, 0x10, 0xc8, 0x96, 0xed, 0x30, 0xad, 0x25, 0x73, 0xf9, 0x90, 0xfb, 0xa4, + 0xef, 0x6f, 0xc4, 0xa1, 0x88, 0x6c, 0x0e, 0xb9, 0x83, 0xfa, 0xdb, 0x2a, 0x9b, 0xa3, 0x5c, 0x71, + 0x5c, 0x36, 0x7f, 0x9c, 0x41, 0x4a, 0xa2, 0x6c, 0x4a, 0x07, 0x74, 0xf3, 0xbd, 0x7f, 0x19, 0xe3, + 0xbe, 0x91, 0x45, 0x63, 0x15, 0xcb, 0x23, 0xcb, 0x6c, 0xdf, 0x73, 0xc8, 0xa7, 0x8a, 0x1b, 0x68, + 0x50, 0xf8, 0x18, 0xde, 0xe7, 0xf7, 0x07, 0xbb, 0xca, 0x10, 0x95, 0xc2, 0x49, 0x2c, 0xbd, 0x8f, + 0x49, 0xa6, 0x23, 0x42, 0x3e, 0xe4, 0x73, 0xce, 0xe1, 0x10, 0xf2, 0x21, 0x9f, 0xbc, 0xde, 0xa1, + 0x42, 0xfe, 0x4f, 0x19, 0x74, 0x3c, 0xa1, 0x72, 0x7c, 0x01, 0xf5, 0xd5, 0x3a, 0x8b, 0x10, 0xce, + 0x27, 0x13, 0xfa, 0x88, 0xba, 0x9d, 0x45, 0x88, 0xe4, 0xa3, 0xf9, 0x48, 0xbc, 0x00, 0x8f, 0x76, + 0xe7, 0x2b, 0xe5, 0x09, 0x2e, 0x55, 0x55, 0x78, 0x7e, 0x4c, 0xc1, 0x49, 0x5f, 0x16, 0x3c, 0xec, + 0xb5, 0x4d, 0xa3, 0x11, 0x79, 0xd8, 0x4b, 0xcb, 0xe0, 0x0f, 0xa3, 0x81, 0xd2, 0x9b, 0x1d, 0x87, + 0x00, 0x5f, 0x26, 0xf1, 0x87, 0x03, 0xbe, 0x3e, 0x22, 0x89, 0x33, 0x7b, 0xa3, 0x4c, 0x29, 0xa2, + 0xbc, 0x43, 0x86, 0xea, 0xa7, 0x33, 0xe8, 0x4c, 0x7a, 0xeb, 0xf0, 0x13, 0xa8, 0x8f, 0xee, 0x6c, + 0x4b, 0xda, 0x1c, 0xff, 0x74, 0x96, 0x5d, 0xd1, 0x6e, 0x92, 0xba, 0xee, 0x88, 0x86, 0xb7, 0x4f, + 0x86, 0x5f, 0x42, 0x83, 0x15, 0xd7, 0xed, 0x10, 0xa7, 0xf6, 0xd4, 0x4d, 0xad, 0xc2, 0xf7, 0x54, + 0x60, 0xb3, 0x9b, 0x00, 0xae, 0xbb, 0x4f, 0x45, 0x02, 0xf6, 0x88, 0xf4, 0xea, 0x27, 0x32, 0xe8, + 0x6c, 0xb7, 0xaf, 0xa2, 0x1b, 0xf8, 0x05, 0x62, 0xe9, 0x16, 0xdd, 0xf1, 0x67, 0xc2, 0x2d, 0x8a, + 0x07, 0x30, 0x79, 0x93, 0x11, 0x10, 0xd2, 0x42, 0xec, 0x74, 0x2c, 0xb8, 0x8e, 0x67, 0x27, 0x79, + 0x00, 0x8b, 0x14, 0xf2, 0x09, 0xd5, 0xdf, 0xcf, 0xa2, 0xa1, 0x6a, 0xb3, 0xb3, 0x6c, 0x0a, 0x0b, + 0xc7, 0xae, 0xed, 0x6d, 0xdf, 0xfa, 0xcd, 0xee, 0xcc, 0xfa, 0xa5, 0xc3, 0xcd, 0xd9, 0xe5, 0x70, + 0xf3, 0xcb, 0xe1, 0x17, 0x51, 0xa1, 0x0d, 0xdf, 0x11, 0x3d, 0x4f, 0x64, 0x5f, 0x97, 0x76, 0x9e, + 0xc8, 0xca, 0xd0, 0xf1, 0xd5, 0xd8, 0xc3, 0xf8, 0x0a, 0xcb, 0x0a, 0x02, 0x0d, 0x17, 0x89, 0x23, + 0x81, 0xee, 0x8b, 0x40, 0xc3, 0x05, 0xe1, 0x48, 0xa0, 0x7b, 0x10, 0xe8, 0xaf, 0x65, 0xd1, 0x88, + 0x5c, 0x25, 0x7e, 0x02, 0x0d, 0xb2, 0x6a, 0xd8, 0xb9, 0x4a, 0x46, 0x70, 0x23, 0x0d, 0xc1, 0x1a, + 0x62, 0x3f, 0xf8, 0x01, 0xd1, 0xb1, 0x15, 0xdd, 0xad, 0x87, 0x27, 0x1c, 0xec, 0x16, 0xb2, 0x9f, + 0xf9, 0xf3, 0x44, 0x50, 0xda, 0xc8, 0x8a, 0xee, 0x4e, 0x84, 0xbf, 0xf1, 0x24, 0xc2, 0x90, 0x96, + 0x5e, 0x66, 0x90, 0x07, 0x06, 0x3c, 0xb5, 0x6d, 0x14, 0xab, 0x8d, 0x31, 0x98, 0xc8, 0xe6, 0x23, + 0x41, 0xb3, 0x41, 0x19, 0x7a, 0xb7, 0x91, 0x77, 0x57, 0xa0, 0x4f, 0x3e, 0x26, 0x64, 0x04, 0x65, + 0xdd, 0xd3, 0xd9, 0xa6, 0xdc, 0xef, 0x00, 0xf5, 0xcf, 0x4d, 0xd4, 0x3b, 0x6f, 0x91, 0xf9, 0x25, + 0xfc, 0x24, 0x1a, 0xa0, 0x0a, 0x33, 0x63, 0xd3, 0xbe, 0xcc, 0x70, 0x2f, 0x00, 0x41, 0x93, 0x00, + 0x31, 0xdd, 0xa3, 0x85, 0x54, 0xf8, 0x9a, 0x98, 0x79, 0x9e, 0x6b, 0x1f, 0x16, 0xcb, 0x30, 0xcc, + 0x74, 0x8f, 0x26, 0x66, 0xa8, 0xbf, 0x26, 0x66, 0xfc, 0xe6, 0x7a, 0x27, 0x95, 0x62, 0x18, 0xbf, + 0x14, 0x1f, 0x1f, 0x33, 0x49, 0x69, 0xb1, 0xa3, 0xbb, 0xa7, 0x38, 0xc5, 0x74, 0x8f, 0x96, 0x9c, + 0x4e, 0x7b, 0x48, 0x74, 0x21, 0x8c, 0xba, 0x2e, 0x88, 0xb8, 0xe9, 0x1e, 0x4d, 0xa2, 0xc5, 0xcf, + 0xa2, 0x41, 0xfe, 0xfb, 0x55, 0xdb, 0xb4, 0xa2, 0x31, 0x4e, 0x04, 0xd4, 0x74, 0x8f, 0x26, 0x52, + 0x0a, 0x95, 0x56, 0x1d, 0xd3, 0xf2, 0xf8, 0xdb, 0xc7, 0x68, 0xa5, 0x80, 0x13, 0x2a, 0x85, 0xdf, + 0xf8, 0x25, 0x34, 0x1c, 0x04, 0x8f, 0x79, 0x83, 0x34, 0x3c, 0x7e, 0x78, 0x7c, 0x5f, 0xa4, 0x30, + 0x43, 0x4e, 0xf7, 0x68, 0x32, 0x35, 0xbe, 0x88, 0x0a, 0x1a, 0x71, 0xcd, 0x37, 0xfd, 0x4b, 0xcf, + 0x11, 0x61, 0x9c, 0x9b, 0x6f, 0x52, 0x29, 0x71, 0x3c, 0xed, 0x9d, 0xf0, 0x96, 0x95, 0x1f, 0xf5, + 0xe2, 0x48, 0x2d, 0x93, 0x96, 0x41, 0x7b, 0x47, 0xb8, 0x62, 0x7f, 0x25, 0x0c, 0xa9, 0xc3, 0x93, + 0xe7, 0x0d, 0x46, 0xdf, 0x2e, 0x8b, 0xd8, 0xe9, 0x1e, 0x2d, 0x42, 0x2f, 0x48, 0xb5, 0x6c, 0xba, + 0xab, 0x3c, 0x8a, 0x61, 0x54, 0xaa, 0x14, 0x25, 0x48, 0x95, 0xfe, 0x14, 0xaa, 0x9e, 0x23, 0xde, + 0x9a, 0xed, 0xac, 0xf2, 0x98, 0x85, 0xd1, 0xaa, 0x39, 0x56, 0xa8, 0x9a, 0x43, 0xc4, 0xaa, 0xe9, + 0x80, 0x1b, 0x49, 0xae, 0x5a, 0xf7, 0x74, 0xb1, 0x6a, 0x76, 0x12, 0xe7, 0x77, 0xd2, 0x0c, 0xd1, + 0xef, 0xb0, 0xac, 0xcb, 0xf1, 0x0e, 0x05, 0x9c, 0xd0, 0xa1, 0xf0, 0x9b, 0x56, 0x2a, 0x64, 0xd6, + 0xe5, 0x69, 0x95, 0x83, 0x4a, 0x05, 0x14, 0xad, 0x54, 0xcc, 0xc1, 0x7b, 0x4d, 0x4c, 0xdf, 0xaa, + 0x8c, 0xc9, 0x1d, 0x14, 0x62, 0x68, 0x07, 0x09, 0x69, 0x5e, 0x8b, 0x90, 0x1a, 0x52, 0xc1, 0x40, + 0x3e, 0x18, 0xb4, 0x70, 0xa2, 0x3a, 0xdd, 0xa3, 0x41, 0xd2, 0x48, 0x95, 0x25, 0x1d, 0x55, 0x8e, + 0x03, 0xc5, 0x90, 0x4f, 0x41, 0x61, 0xd3, 0x3d, 0x1a, 0x4b, 0x48, 0xfa, 0xa4, 0x90, 0xde, 0x4b, + 0x39, 0x21, 0x4f, 0x11, 0x01, 0x82, 0x4e, 0x11, 0x61, 0x12, 0xb0, 0xa9, 0x78, 0x12, 0x2b, 0xe5, + 0x3e, 0x79, 0xa9, 0x89, 0xe2, 0xa7, 0x7b, 0xb4, 0x78, 0xe2, 0xab, 0x67, 0xa5, 0xbc, 0x4e, 0xca, + 0xc9, 0x48, 0x60, 0xa1, 0x10, 0x45, 0xc5, 0x25, 0x66, 0x80, 0x9a, 0x4f, 0xcc, 0x3c, 0xaf, 0x9c, + 0x92, 0x37, 0x2e, 0x09, 0x24, 0xd3, 0x3d, 0x5a, 0x62, 0xce, 0xfa, 0x89, 0x58, 0x76, 0x25, 0x45, + 0x91, 0x3d, 0x3c, 0x22, 0xe8, 0xe9, 0x1e, 0x2d, 0x96, 0x8f, 0xe9, 0x9a, 0x98, 0xd6, 0x48, 0x39, + 0x2d, 0x77, 0x62, 0x88, 0xa1, 0x9d, 0x28, 0xa4, 0x3f, 0xba, 0x26, 0xa6, 0xba, 0x51, 0xce, 0xc4, + 0x4b, 0x85, 0x33, 0xa7, 0x90, 0x12, 0x47, 0x4b, 0xce, 0xde, 0xa1, 0xdc, 0xcf, 0xb3, 0x2f, 0xf2, + 0xf2, 0x49, 0x34, 0xd3, 0x3d, 0x5a, 0x72, 0xe6, 0x0f, 0x2d, 0x39, 0xed, 0x85, 0x72, 0xb6, 0x1b, + 0xcf, 0xa0, 0x75, 0xc9, 0x29, 0x33, 0xf4, 0x2e, 0x49, 0x08, 0x94, 0x73, 0x72, 0x54, 0xd3, 0x54, + 0xc2, 0xe9, 0x1e, 0xad, 0x4b, 0x2a, 0x83, 0x9b, 0x29, 0x19, 0x01, 0x94, 0xf3, 0x72, 0xf2, 0xd5, + 0x44, 0xa2, 0xe9, 0x1e, 0x2d, 0x25, 0x9f, 0xc0, 0xcd, 0x94, 0x80, 0xf1, 0x4a, 0xb1, 0x2b, 0xdb, + 0x40, 0x1e, 0x29, 0xe1, 0xe6, 0xe7, 0x13, 0x63, 0xad, 0x2b, 0x0f, 0xc8, 0xaa, 0x9b, 0x40, 0x42, + 0x55, 0x37, 0x29, 0x4a, 0xfb, 0x7c, 0x62, 0x70, 0x70, 0xe5, 0xc1, 0x2e, 0x0c, 0x83, 0x36, 0x26, + 0x86, 0x15, 0x9f, 0x4f, 0x8c, 0xce, 0xad, 0xa8, 0x32, 0xc3, 0x04, 0x12, 0xca, 0x30, 0x29, 0xae, + 0xf7, 0x7c, 0x62, 0x38, 0x69, 0xe5, 0xa1, 0x2e, 0x0c, 0xc3, 0x16, 0x26, 0x05, 0xa2, 0x7e, 0x56, + 0x8a, 0xe7, 0xac, 0x3c, 0x2c, 0xcf, 0x1b, 0x02, 0x8a, 0xce, 0x1b, 0x62, 0xe4, 0xe7, 0x89, 0x58, + 0xc4, 0x4a, 0xe5, 0x11, 0x79, 0x98, 0x47, 0xd0, 0x74, 0x98, 0x47, 0x63, 0x5c, 0x4e, 0xc4, 0x22, + 0xf7, 0x29, 0x17, 0xd2, 0x98, 0x00, 0x5a, 0x66, 0xc2, 0x62, 0xfd, 0x55, 0x12, 0x42, 0xc7, 0x29, + 0xef, 0x91, 0xbd, 0x93, 0x63, 0x04, 0xd3, 0x3d, 0x5a, 0x42, 0xc0, 0x39, 0x2d, 0x39, 0x4e, 0x8a, + 0x72, 0x51, 0x1e, 0xb6, 0x49, 0x34, 0x74, 0xd8, 0x26, 0xc6, 0x58, 0x99, 0x49, 0x7a, 0x89, 0xa0, + 0x5c, 0x92, 0x0d, 0xb3, 0x38, 0x05, 0x35, 0xcc, 0x12, 0x5e, 0x30, 0x68, 0xc9, 0xb1, 0x3b, 0x94, + 0x47, 0xbb, 0xb6, 0x10, 0x68, 0x12, 0x5a, 0xc8, 0x42, 0x59, 0x84, 0xb6, 0xd3, 0xcd, 0x76, 0xd3, + 0xd6, 0x0d, 0xe5, 0xbd, 0x89, 0xb6, 0x13, 0x43, 0x0a, 0xb6, 0x13, 0x03, 0xd0, 0x55, 0x5e, 0xf4, + 0xd4, 0x57, 0x1e, 0x93, 0x57, 0x79, 0x11, 0x47, 0x57, 0x79, 0xc9, 0xab, 0x7f, 0x22, 0xe6, 0xd5, + 0xae, 0x3c, 0x2e, 0x2b, 0x40, 0x04, 0x4d, 0x15, 0x20, 0xea, 0x07, 0xff, 0xd1, 0x74, 0x3f, 0x70, + 0xe5, 0x32, 0x70, 0x7b, 0xc0, 0xe7, 0x96, 0x46, 0x37, 0xdd, 0xa3, 0xa5, 0xfb, 0x92, 0x57, 0x12, + 0xdc, 0xba, 0x95, 0x2b, 0xb2, 0x82, 0xc5, 0x08, 0xa8, 0x82, 0xc5, 0x9d, 0xc1, 0x2b, 0x09, 0x7e, + 0xd9, 0xca, 0x13, 0xa9, 0xac, 0x82, 0x6f, 0x4e, 0xf0, 0xe6, 0xbe, 0x26, 0x3a, 0x56, 0x2b, 0x4f, + 0xca, 0x8b, 0x5d, 0x88, 0xa1, 0x8b, 0x9d, 0xe0, 0x80, 0x7d, 0x4d, 0x74, 0x29, 0x56, 0xae, 0xc6, + 0x4b, 0x85, 0x4b, 0xa4, 0xe0, 0x7a, 0xac, 0x25, 0x7b, 0xe2, 0x2a, 0x4f, 0xc9, 0x5a, 0x97, 0x44, + 0x43, 0xb5, 0x2e, 0xd1, 0x8b, 0x77, 0x2a, 0xee, 0x50, 0xab, 0x5c, 0x8b, 0x6e, 0xb2, 0x65, 0x3c, + 0xb5, 0x7c, 0x62, 0x4e, 0xb8, 0xaf, 0x44, 0x83, 0x78, 0x29, 0x4f, 0x47, 0xae, 0x7d, 0x25, 0x2c, + 0xb5, 0x6f, 0x23, 0x41, 0xbf, 0x5e, 0x89, 0xc6, 0xbd, 0x52, 0x9e, 0x49, 0xe6, 0x10, 0xe8, 0x4a, + 0x34, 0x4e, 0xd6, 0x2b, 0xd1, 0x50, 0x51, 0xca, 0xb3, 0xc9, 0x1c, 0x02, 0xe9, 0x46, 0x43, 0x4b, + 0x3d, 0x29, 0x04, 0xaf, 0x56, 0xde, 0x27, 0x9b, 0x8e, 0x01, 0x82, 0x9a, 0x8e, 0x61, 0x88, 0xeb, + 0x27, 0x85, 0xa0, 0xcf, 0xca, 0x73, 0xb1, 0x22, 0x41, 0x63, 0x85, 0xd0, 0xd0, 0x4f, 0x0a, 0xc1, + 0x92, 0x95, 0xe7, 0x63, 0x45, 0x82, 0xd6, 0x09, 0x21, 0x95, 0x8d, 0x6e, 0x2f, 0x16, 0x95, 0x17, + 0xe4, 0xc3, 0xe0, 0x74, 0xca, 0xe9, 0x1e, 0xad, 0xdb, 0xcb, 0xc7, 0x8f, 0xa6, 0xbb, 0x27, 0x2b, + 0x2f, 0xca, 0x43, 0x38, 0x8d, 0x8e, 0x0e, 0xe1, 0x54, 0x17, 0xe7, 0x97, 0x22, 0xd1, 0x0b, 0x94, + 0x97, 0xe4, 0x29, 0x4e, 0x42, 0xd2, 0x29, 0x2e, 0x1a, 0xeb, 0x40, 0x7a, 0x96, 0xaf, 0xbc, 0x5f, + 0x9e, 0xe2, 0x44, 0x1c, 0x9d, 0xe2, 0xa4, 0x27, 0xfc, 0x13, 0xb1, 0xd7, 0xe2, 0xca, 0xcb, 0xf2, + 0x14, 0x17, 0x41, 0xd3, 0x29, 0x2e, 0xfa, 0xbe, 0xfc, 0xa5, 0xc8, 0xa3, 0x69, 0xe5, 0x95, 0xe4, + 0xf6, 0x03, 0x52, 0x6c, 0x3f, 0x7b, 0x62, 0xad, 0x25, 0xbf, 0xfe, 0x55, 0x4a, 0xf2, 0xf8, 0x4d, + 0xa2, 0xa1, 0xe3, 0x37, 0xf1, 0xe5, 0x70, 0x74, 0xe3, 0xc0, 0xb5, 0x6a, 0xbc, 0xcb, 0xc6, 0x21, + 0x34, 0x45, 0x12, 0xc0, 0xd2, 0x1e, 0x99, 0x6d, 0x84, 0x26, 0x52, 0xf6, 0xc8, 0xfe, 0x36, 0x28, + 0x42, 0x4f, 0x67, 0xd7, 0x98, 0xb7, 0xac, 0x52, 0x96, 0x67, 0xd7, 0x18, 0x01, 0x9d, 0x5d, 0xe3, + 0x3e, 0xb6, 0x53, 0x68, 0x94, 0x6b, 0x11, 0x73, 0x02, 0x36, 0xad, 0x65, 0x65, 0x32, 0xf2, 0xf8, + 0x2e, 0x82, 0xa7, 0xb3, 0x53, 0x14, 0x06, 0xeb, 0x35, 0x83, 0x4d, 0x34, 0xcd, 0xf6, 0xa2, 0xad, + 0x3b, 0x46, 0x8d, 0x58, 0x86, 0x32, 0x15, 0x59, 0xaf, 0x13, 0x68, 0x60, 0xbd, 0x4e, 0x80, 0x43, + 0xe8, 0xa9, 0x08, 0x5c, 0x23, 0x0d, 0x62, 0xde, 0x21, 0xca, 0x75, 0x60, 0x5b, 0x4c, 0x63, 0xcb, + 0xc9, 0xa6, 0x7b, 0xb4, 0x34, 0x0e, 0xd4, 0x56, 0x9f, 0x5d, 0xaf, 0xbd, 0x36, 0x13, 0x3c, 0x38, + 0xaf, 0x3a, 0xa4, 0xad, 0x3b, 0x44, 0x99, 0x96, 0x6d, 0xf5, 0x44, 0x22, 0x6a, 0xab, 0x27, 0x22, + 0xe2, 0x6c, 0xfd, 0xb1, 0x50, 0xe9, 0xc6, 0x36, 0x1c, 0x11, 0xc9, 0xa5, 0xe9, 0xec, 0x24, 0x23, + 0xa8, 0x80, 0x66, 0x6c, 0x6b, 0x19, 0x4e, 0x2a, 0x5e, 0x95, 0x67, 0xa7, 0x74, 0x4a, 0x3a, 0x3b, + 0xa5, 0x63, 0xa9, 0xaa, 0xcb, 0x58, 0x36, 0x06, 0x6f, 0xc8, 0xaa, 0x9e, 0x40, 0x42, 0x55, 0x3d, + 0x01, 0x1c, 0x67, 0xa8, 0x11, 0x97, 0x78, 0xca, 0x4c, 0x37, 0x86, 0x40, 0x12, 0x67, 0x08, 0xe0, + 0x38, 0xc3, 0x29, 0xe2, 0x35, 0x56, 0x94, 0xd9, 0x6e, 0x0c, 0x81, 0x24, 0xce, 0x10, 0xc0, 0x74, + 0xb3, 0x29, 0x83, 0xc7, 0x3b, 0xcd, 0x55, 0xbf, 0xcf, 0xe6, 0xe4, 0xcd, 0x66, 0x2a, 0x21, 0xdd, + 0x6c, 0xa6, 0x22, 0xf1, 0x27, 0xb6, 0xed, 0xcd, 0xad, 0xcc, 0x43, 0x85, 0x97, 0x43, 0xbb, 0x60, + 0x3b, 0xa5, 0xa6, 0x7b, 0xb4, 0xed, 0x7a, 0x8b, 0xbf, 0x37, 0x70, 0xba, 0x54, 0xaa, 0x50, 0xd5, + 0xb1, 0xe0, 0xac, 0x82, 0x81, 0xa7, 0x7b, 0xb4, 0xc0, 0x2d, 0xf3, 0x59, 0x34, 0x08, 0x1f, 0x55, + 0xb1, 0x4c, 0xaf, 0x3c, 0xae, 0xbc, 0x26, 0x6f, 0x99, 0x04, 0x14, 0xdd, 0x32, 0x09, 0x3f, 0xe9, + 0x24, 0x0e, 0x3f, 0xd9, 0x14, 0x53, 0x1e, 0x57, 0x34, 0x79, 0x12, 0x97, 0x90, 0x74, 0x12, 0x97, + 0x00, 0x41, 0xbd, 0x65, 0xc7, 0x6e, 0x97, 0xc7, 0x95, 0x5a, 0x42, 0xbd, 0x0c, 0x15, 0xd4, 0xcb, + 0x7e, 0x06, 0xf5, 0xd6, 0x56, 0x3a, 0x5e, 0x99, 0x7e, 0xe3, 0x42, 0x42, 0xbd, 0x3e, 0x32, 0xa8, + 0xd7, 0x07, 0xd0, 0xa9, 0x10, 0x00, 0x55, 0xc7, 0xa6, 0x93, 0xf6, 0x0d, 0xb3, 0xd9, 0x54, 0x6e, + 0xca, 0x53, 0x61, 0x14, 0x4f, 0xa7, 0xc2, 0x28, 0x8c, 0x9a, 0x9e, 0xac, 0x55, 0x64, 0xb1, 0xb3, + 0xac, 0xdc, 0x92, 0x4d, 0xcf, 0x10, 0x43, 0x4d, 0xcf, 0xf0, 0x17, 0xec, 0x2e, 0xe8, 0x2f, 0x8d, + 0x2c, 0x39, 0xc4, 0x5d, 0x51, 0x6e, 0x47, 0x76, 0x17, 0x02, 0x0e, 0x76, 0x17, 0xc2, 0x6f, 0xbc, + 0x8c, 0xee, 0x97, 0x16, 0x1a, 0xff, 0xd2, 0xa6, 0x46, 0x74, 0xa7, 0xb1, 0xa2, 0x7c, 0x00, 0x58, + 0x3d, 0x94, 0xb8, 0x54, 0xc9, 0xa4, 0xd3, 0x3d, 0x5a, 0x37, 0x4e, 0xb0, 0x2d, 0x7f, 0x6d, 0x86, + 0x45, 0x98, 0xd4, 0xaa, 0x13, 0xfe, 0x26, 0xf4, 0xf5, 0xc8, 0xb6, 0x3c, 0x4e, 0x02, 0xdb, 0xf2, + 0x38, 0x18, 0xb7, 0xd1, 0xf9, 0xc8, 0x56, 0x6d, 0x56, 0x6f, 0xd2, 0x7d, 0x09, 0x31, 0xaa, 0x7a, + 0x63, 0x95, 0x78, 0xca, 0x07, 0x81, 0xf7, 0x85, 0x94, 0x0d, 0x5f, 0x84, 0x7a, 0xba, 0x47, 0xdb, + 0x82, 0x1f, 0x56, 0x51, 0xbe, 0x36, 0xb5, 0x50, 0x55, 0x3e, 0x24, 0x9f, 0x6f, 0x52, 0xd8, 0x74, + 0x8f, 0x06, 0x38, 0x6a, 0xa5, 0xdd, 0x6c, 0x2f, 0x3b, 0xba, 0x41, 0x98, 0xa1, 0x05, 0xb6, 0x1b, + 0x37, 0x40, 0x3f, 0x2c, 0x5b, 0x69, 0x69, 0x74, 0xd4, 0x4a, 0x4b, 0xc3, 0x51, 0x45, 0x95, 0x92, + 0x29, 0x28, 0x1f, 0x91, 0x15, 0x55, 0x42, 0x52, 0x45, 0x95, 0x53, 0x2f, 0x7c, 0x00, 0x9d, 0x0c, + 0xf6, 0xf3, 0x7c, 0xfd, 0x65, 0x9d, 0xa6, 0x7c, 0x14, 0xf8, 0x9c, 0x8f, 0x5d, 0x06, 0x48, 0x54, + 0xd3, 0x3d, 0x5a, 0x4a, 0x79, 0xba, 0xe2, 0xc6, 0xf2, 0x04, 0x71, 0xf3, 0xe2, 0xdb, 0xe4, 0x15, + 0x37, 0x85, 0x8c, 0xae, 0xb8, 0x29, 0xa8, 0x44, 0xe6, 0x5c, 0xa8, 0xfa, 0x16, 0xcc, 0x03, 0x99, + 0xa6, 0x71, 0x48, 0x64, 0xce, 0x2d, 0xb5, 0xc5, 0x2d, 0x98, 0x07, 0xd6, 0x5a, 0x1a, 0x07, 0x7c, + 0x11, 0x15, 0x6a, 0xb5, 0x59, 0xad, 0x63, 0x29, 0x8d, 0x88, 0xb7, 0x2c, 0x40, 0xa7, 0x7b, 0x34, + 0x8e, 0xa7, 0x66, 0xd0, 0x64, 0x53, 0x77, 0x3d, 0xb3, 0xe1, 0xc2, 0x88, 0xf1, 0x47, 0x88, 0x21, + 0x9b, 0x41, 0x49, 0x34, 0xd4, 0x0c, 0x4a, 0x82, 0x53, 0x7b, 0x71, 0x42, 0x77, 0x5d, 0xdd, 0x32, + 0x1c, 0x7d, 0x1c, 0x96, 0x09, 0x12, 0x79, 0x53, 0x24, 0x61, 0xa9, 0xbd, 0x28, 0x43, 0xe0, 0xf0, + 0xdd, 0x87, 0xf8, 0x66, 0xce, 0x52, 0xe4, 0xf0, 0x3d, 0x82, 0x87, 0xc3, 0xf7, 0x08, 0x0c, 0xec, + 0x4e, 0x1f, 0xa6, 0x91, 0x65, 0x93, 0x8a, 0x48, 0x59, 0x8e, 0xd8, 0x9d, 0x51, 0x02, 0xb0, 0x3b, + 0xa3, 0x40, 0xa9, 0x49, 0xfe, 0x72, 0xbb, 0x92, 0xd2, 0xa4, 0x70, 0x95, 0x8d, 0x95, 0xa1, 0xeb, + 0x77, 0x38, 0x38, 0xca, 0xeb, 0x96, 0xde, 0xb2, 0xcb, 0xe3, 0xbe, 0xd4, 0x4d, 0x79, 0xfd, 0x4e, + 0x25, 0xa4, 0xeb, 0x77, 0x2a, 0x92, 0xce, 0xae, 0xfe, 0x46, 0x6b, 0x45, 0x77, 0x88, 0x51, 0x36, + 0x1d, 0x38, 0x59, 0x5c, 0x67, 0x5b, 0xc3, 0x37, 0xe4, 0xd9, 0xb5, 0x0b, 0x29, 0x9d, 0x5d, 0xbb, + 0xa0, 0xa9, 0x91, 0x97, 0x8c, 0xd6, 0x88, 0x6e, 0x28, 0xab, 0xb2, 0x91, 0x97, 0x4e, 0x49, 0x8d, + 0xbc, 0x74, 0x6c, 0xfa, 0xe7, 0xdc, 0x76, 0x4c, 0x8f, 0x28, 0xcd, 0xed, 0x7c, 0x0e, 0x90, 0xa6, + 0x7f, 0x0e, 0xa0, 0xe9, 0x86, 0x30, 0xda, 0x21, 0x2d, 0x79, 0x43, 0x18, 0xef, 0x86, 0x68, 0x09, + 0x6a, 0xb1, 0xf0, 0xa7, 0x65, 0x8a, 0x25, 0x5b, 0x2c, 0x1c, 0x4c, 0x2d, 0x96, 0xf0, 0xf1, 0x99, + 0xf4, 0x94, 0x49, 0xb1, 0xe5, 0x35, 0x54, 0xc4, 0xd1, 0x35, 0x54, 0x7a, 0xf6, 0xf4, 0xac, 0xf4, + 0xce, 0x40, 0x69, 0xcb, 0x56, 0x87, 0x80, 0xa2, 0x56, 0x87, 0xf8, 0x22, 0x61, 0x02, 0x1d, 0x83, + 0x5b, 0x70, 0xad, 0x13, 0xdc, 0xe3, 0x7c, 0x4c, 0xfe, 0xcc, 0x08, 0x9a, 0x7e, 0x66, 0x04, 0x24, + 0x31, 0xe1, 0xd3, 0x96, 0x93, 0xc2, 0x24, 0x3c, 0x1f, 0x8c, 0x80, 0xf0, 0x0c, 0xc2, 0xb5, 0xd2, + 0xec, 0x4c, 0xc5, 0xa8, 0x8a, 0x57, 0x64, 0xae, 0x7c, 0x02, 0x1b, 0xa7, 0x98, 0xee, 0xd1, 0x12, + 0xca, 0xe1, 0x37, 0xd0, 0x59, 0x0e, 0xe5, 0xef, 0x86, 0x21, 0x89, 0xb7, 0x11, 0x2c, 0x08, 0x9e, + 0xec, 0xc7, 0xd6, 0x8d, 0x76, 0xba, 0x47, 0xeb, 0xca, 0x2b, 0xbd, 0x2e, 0xbe, 0x3e, 0x74, 0xb6, + 0x53, 0x57, 0xb0, 0x48, 0x74, 0xe5, 0x95, 0x5e, 0x17, 0x97, 0xfb, 0x9d, 0xed, 0xd4, 0x15, 0x74, + 0x42, 0x57, 0x5e, 0xd8, 0x45, 0xc5, 0x6e, 0xf8, 0x52, 0xb3, 0xa9, 0xac, 0x41, 0x75, 0xef, 0xd9, + 0x4e, 0x75, 0x25, 0x30, 0x38, 0xb7, 0xe2, 0x48, 0x67, 0xe9, 0xf9, 0x36, 0xb1, 0x6a, 0xd2, 0x02, + 0x74, 0x57, 0x9e, 0xa5, 0x63, 0x04, 0x74, 0x96, 0x8e, 0x01, 0xe9, 0x80, 0x12, 0x9f, 0xab, 0x28, + 0xeb, 0xf2, 0x80, 0x12, 0x71, 0x74, 0x40, 0x49, 0x4f, 0x5b, 0xe6, 0xd1, 0xf1, 0xf9, 0x55, 0x4f, + 0xf7, 0x2d, 0x48, 0x97, 0x77, 0xe5, 0x9b, 0x91, 0x4b, 0xa6, 0x38, 0x09, 0x5c, 0x32, 0xc5, 0xc1, + 0x74, 0x8c, 0x50, 0x70, 0x6d, 0xdd, 0x6a, 0x4c, 0xe9, 0x66, 0xb3, 0xe3, 0x10, 0xe5, 0x7f, 0x93, + 0xc7, 0x48, 0x04, 0x4d, 0xc7, 0x48, 0x04, 0x44, 0x17, 0x68, 0x0a, 0x2a, 0xb9, 0xae, 0xb9, 0x6c, + 0xf1, 0x7d, 0x65, 0xa7, 0xe9, 0x29, 0xff, 0xbb, 0xbc, 0x40, 0x27, 0xd1, 0xd0, 0x05, 0x3a, 0x09, + 0x0e, 0xa7, 0x4e, 0x09, 0x09, 0xee, 0x95, 0xff, 0x23, 0x72, 0xea, 0x94, 0x40, 0x03, 0xa7, 0x4e, + 0x49, 0xc9, 0xf1, 0xa7, 0xd0, 0x28, 0xb3, 0xc9, 0x66, 0xcc, 0xe0, 0xae, 0xfa, 0xff, 0x94, 0xd7, + 0xc7, 0x28, 0x9e, 0xae, 0x8f, 0x51, 0x98, 0xcc, 0x87, 0x77, 0xc1, 0xff, 0x95, 0xc6, 0x27, 0x90, + 0x7f, 0xac, 0x0c, 0xbe, 0x2e, 0xf2, 0xe1, 0x23, 0xe5, 0xdb, 0x33, 0x69, 0x8c, 0x82, 0xe1, 0x11, + 0x2b, 0x24, 0x33, 0xd2, 0xc8, 0x1d, 0x93, 0xac, 0x29, 0x1f, 0x4f, 0x65, 0xc4, 0x08, 0x64, 0x46, + 0x0c, 0x86, 0x5f, 0x47, 0x27, 0x43, 0xd8, 0x2c, 0x69, 0x2d, 0x06, 0x33, 0xd3, 0x77, 0x64, 0x64, + 0x33, 0x38, 0x99, 0x8c, 0x9a, 0xc1, 0xc9, 0x98, 0x24, 0xd6, 0x5c, 0x74, 0xff, 0xf7, 0x16, 0xac, + 0x03, 0x09, 0xa6, 0x30, 0x48, 0x62, 0xcd, 0xa5, 0xf9, 0x9d, 0x5b, 0xb0, 0x0e, 0x64, 0x9a, 0xc2, + 0x00, 0x7f, 0x32, 0x83, 0x2e, 0x24, 0xa3, 0x4a, 0xcd, 0xe6, 0x94, 0xed, 0x84, 0x38, 0xe5, 0xbb, + 0x32, 0xf2, 0x41, 0xc3, 0xf6, 0x8a, 0x4d, 0xf7, 0x68, 0xdb, 0xac, 0x00, 0xbf, 0x1f, 0x0d, 0x97, + 0x3a, 0x86, 0xe9, 0xc1, 0xc5, 0x1b, 0x35, 0x9c, 0xbf, 0x3b, 0x13, 0xd9, 0xe2, 0x88, 0x58, 0xd8, + 0xe2, 0x88, 0x00, 0xfc, 0x2a, 0x1a, 0xab, 0x91, 0x46, 0xc7, 0x31, 0xbd, 0x75, 0x8d, 0xb4, 0x6d, + 0xc7, 0xa3, 0x3c, 0xbe, 0x27, 0x23, 0x4f, 0x62, 0x31, 0x0a, 0x3a, 0x89, 0xc5, 0x80, 0xf8, 0x56, + 0x4a, 0x8a, 0x7b, 0xe5, 0x13, 0x99, 0xae, 0xd7, 0xf2, 0x41, 0x5f, 0xa6, 0x64, 0xc8, 0xaf, 0x26, + 0xa6, 0x0c, 0x57, 0x3e, 0x99, 0xe9, 0x72, 0x8d, 0x2e, 0xcc, 0x70, 0x09, 0xd9, 0xc6, 0xab, 0x89, + 0x49, 0xa1, 0x95, 0xef, 0xcd, 0x74, 0xb9, 0xf6, 0x0e, 0x39, 0x26, 0xe5, 0x93, 0x7e, 0x9a, 0x79, + 0x8a, 0x70, 0x46, 0xdf, 0x97, 0x89, 0xbb, 0x8a, 0x04, 0xe5, 0x05, 0x42, 0x5a, 0xec, 0xa6, 0x1b, + 0x28, 0xfd, 0xa7, 0x32, 0x71, 0xdf, 0xbc, 0xb0, 0x58, 0xf8, 0x0b, 0x13, 0x74, 0x66, 0xf2, 0xae, + 0x47, 0x1c, 0x4b, 0x6f, 0x42, 0x77, 0xd6, 0x3c, 0xdb, 0xd1, 0x97, 0xc9, 0xa4, 0xa5, 0x2f, 0x36, + 0x89, 0xf2, 0xe9, 0x8c, 0x6c, 0xc1, 0xa6, 0x93, 0x52, 0x0b, 0x36, 0x1d, 0x8b, 0x57, 0xd0, 0xfd, + 0x49, 0xd8, 0xb2, 0xe9, 0x42, 0x3d, 0x9f, 0xc9, 0xc8, 0x26, 0x6c, 0x17, 0x5a, 0x6a, 0xc2, 0x76, + 0x41, 0xe3, 0xab, 0x68, 0x60, 0xdc, 0xf6, 0xa7, 0xdf, 0xef, 0x8f, 0x38, 0x43, 0x06, 0x98, 0xe9, + 0x1e, 0x2d, 0x24, 0xe3, 0x65, 0xf8, 0xa0, 0xfe, 0x6c, 0xbc, 0x4c, 0x78, 0xf9, 0x14, 0xfc, 0xe0, + 0x65, 0xb8, 0xb8, 0xff, 0x9f, 0x78, 0x99, 0xf0, 0x8e, 0x2b, 0xf8, 0x41, 0x67, 0x12, 0x56, 0xe3, + 0xec, 0x54, 0x89, 0xda, 0x6d, 0x13, 0x2b, 0x7a, 0xb3, 0x49, 0xac, 0x65, 0xa2, 0x7c, 0x2e, 0x32, + 0x93, 0x24, 0x93, 0xd1, 0x99, 0x24, 0x19, 0x83, 0x3f, 0x8c, 0x4e, 0xdd, 0xd2, 0x9b, 0xa6, 0x11, + 0xe2, 0xfc, 0x3c, 0xc3, 0xca, 0x0f, 0x64, 0xe4, 0xdd, 0x74, 0x0a, 0x1d, 0xdd, 0x4d, 0xa7, 0xa0, + 0xf0, 0x2c, 0xc2, 0xb0, 0x8c, 0x06, 0xb3, 0x05, 0x5d, 0x9f, 0x95, 0xff, 0x37, 0x23, 0xdb, 0xa9, + 0x71, 0x12, 0x6a, 0xa7, 0xc6, 0xa1, 0xb8, 0x9e, 0x9e, 0x0c, 0x42, 0xf9, 0xc1, 0x8c, 0x7c, 0x5a, + 0x93, 0x46, 0x38, 0xdd, 0xa3, 0xa5, 0x67, 0x94, 0xb8, 0x8e, 0x46, 0x6b, 0xd5, 0xca, 0xd4, 0xd4, + 0x64, 0xed, 0x56, 0xa5, 0x0c, 0x0f, 0x1d, 0x0c, 0xe5, 0x87, 0x22, 0x2b, 0x56, 0x94, 0x80, 0xae, + 0x58, 0x51, 0x18, 0xae, 0xa1, 0x13, 0x54, 0x10, 0x55, 0x87, 0x2c, 0x11, 0x87, 0x58, 0x0d, 0x7f, + 0x58, 0xfe, 0x48, 0x46, 0x36, 0x14, 0x92, 0x88, 0xa8, 0xa1, 0x90, 0x04, 0xc7, 0xab, 0xe8, 0x6c, + 0xf4, 0x30, 0x47, 0x7c, 0x39, 0xaa, 0xfc, 0x68, 0x26, 0x62, 0xcf, 0x76, 0x21, 0x06, 0x7b, 0xb6, + 0x0b, 0x1e, 0x5b, 0xe8, 0x1c, 0x3f, 0x19, 0xe1, 0x3e, 0x93, 0xd1, 0xda, 0x7e, 0x8c, 0xd5, 0xf6, + 0x48, 0xe8, 0xd3, 0xd7, 0x85, 0x7a, 0xba, 0x47, 0xeb, 0xce, 0x8e, 0xaa, 0x4a, 0x3c, 0x6b, 0x81, + 0xf2, 0xe3, 0x99, 0x64, 0xa7, 0x12, 0xc9, 0xd3, 0x38, 0x29, 0xdd, 0xc1, 0xeb, 0x69, 0x31, 0xf7, + 0x95, 0x9f, 0x88, 0x0c, 0x99, 0x64, 0x32, 0x3a, 0x64, 0x52, 0x82, 0xf6, 0xbf, 0x8a, 0xc6, 0x98, + 0x5e, 0x56, 0x75, 0x18, 0x49, 0xd6, 0x32, 0x31, 0x94, 0xff, 0x2f, 0xb2, 0x60, 0xc5, 0x28, 0xc0, + 0x3b, 0x27, 0x0a, 0xa4, 0xb3, 0x6f, 0xad, 0xad, 0x5b, 0x16, 0x9c, 0x94, 0x2a, 0xff, 0x7f, 0x64, + 0xf6, 0x0d, 0x51, 0xe0, 0x7b, 0x1b, 0xfc, 0x82, 0xdc, 0x69, 0x49, 0x0f, 0xab, 0x95, 0xcf, 0x47, + 0xd6, 0xb9, 0x44, 0x2a, 0xba, 0xce, 0x25, 0xbf, 0xcb, 0xbe, 0x95, 0xf2, 0x28, 0x59, 0xf9, 0xc9, + 0xee, 0x7c, 0xc3, 0xf5, 0x33, 0xf9, 0x4d, 0xf3, 0xad, 0x94, 0x07, 0xbd, 0xca, 0x4f, 0x75, 0xe7, + 0x1b, 0xba, 0xcb, 0x25, 0xbf, 0x07, 0xae, 0xa7, 0x3f, 0x86, 0x55, 0x7e, 0x3a, 0x3a, 0x21, 0xa4, + 0x10, 0xc2, 0x84, 0x90, 0xf6, 0xa2, 0x76, 0x11, 0x9d, 0x66, 0x9d, 0x76, 0xdd, 0xd1, 0xdb, 0x2b, + 0x35, 0xe2, 0x79, 0xa6, 0xb5, 0xec, 0xef, 0x6f, 0xfe, 0x56, 0x26, 0x72, 0xe8, 0x94, 0x46, 0x09, + 0x87, 0x4e, 0x69, 0x48, 0xaa, 0x4f, 0xb1, 0x67, 0xaf, 0xca, 0xcf, 0x44, 0xf4, 0x29, 0x46, 0x41, + 0xf5, 0x29, 0xfe, 0x5a, 0xf6, 0xd5, 0x84, 0xd7, 0x9d, 0xca, 0xdf, 0x4e, 0xe7, 0x15, 0xb4, 0x2f, + 0xe1, 0x51, 0xe8, 0xab, 0x09, 0x8f, 0x18, 0x95, 0xbf, 0x93, 0xce, 0x2b, 0xf4, 0xec, 0x89, 0xbf, + 0x7d, 0x7c, 0x1d, 0x9d, 0x64, 0x73, 0xe4, 0x14, 0x31, 0x88, 0xf4, 0xa1, 0x3f, 0x1b, 0x19, 0x8e, + 0xc9, 0x64, 0x70, 0x90, 0x9d, 0x88, 0x49, 0x62, 0xcd, 0xdb, 0xfa, 0x73, 0x5b, 0xb0, 0x0e, 0xcd, + 0xec, 0x64, 0x0c, 0x7e, 0x41, 0x7e, 0x52, 0xa6, 0xfc, 0x7c, 0x26, 0xe2, 0x24, 0x21, 0x20, 0xc1, + 0x49, 0x42, 0x7c, 0x7f, 0xf6, 0x82, 0xfc, 0x7c, 0x4a, 0xf9, 0xbb, 0x89, 0x85, 0x83, 0x0e, 0x90, + 0xdf, 0x5a, 0xbd, 0x20, 0x3f, 0x15, 0x52, 0x7e, 0x21, 0xb1, 0x70, 0xf0, 0x01, 0xf2, 0xbb, 0x22, + 0xba, 0xf1, 0xe8, 0x78, 0x36, 0x63, 0x25, 0x4d, 0x0f, 0xbf, 0x18, 0xdd, 0x78, 0x24, 0x92, 0xc1, + 0xc6, 0x23, 0x11, 0x93, 0xc4, 0x9a, 0x7f, 0xde, 0x2f, 0x6d, 0xc1, 0x5a, 0xd8, 0x2e, 0x25, 0x62, + 0x92, 0x58, 0xf3, 0x8f, 0xff, 0xc2, 0x16, 0xac, 0x85, 0xed, 0x52, 0x22, 0x86, 0x1a, 0x39, 0x21, + 0xe6, 0x16, 0x71, 0xdc, 0x50, 0xfd, 0x7e, 0x39, 0x62, 0xe4, 0xa4, 0xd0, 0x51, 0x23, 0x27, 0x05, + 0x95, 0xc8, 0x9d, 0x0b, 0xe5, 0x57, 0xb6, 0xe2, 0x1e, 0xde, 0x76, 0xa4, 0xa0, 0x12, 0xb9, 0x73, + 0xb9, 0xfc, 0xea, 0x56, 0xdc, 0xc3, 0xeb, 0x8e, 0x14, 0x14, 0x35, 0x78, 0x26, 0x1c, 0x7b, 0xcd, + 0x7a, 0x95, 0xac, 0x91, 0x26, 0x17, 0xc9, 0x17, 0x23, 0x06, 0x4f, 0x94, 0x00, 0x0e, 0xe7, 0x23, + 0x30, 0x99, 0x11, 0xff, 0xfa, 0x5f, 0x4f, 0x65, 0x14, 0x9e, 0x3e, 0x44, 0x61, 0x32, 0x23, 0xfe, + 0xa1, 0xbf, 0x91, 0xca, 0x28, 0x3c, 0x7d, 0x88, 0xc2, 0xc6, 0xfb, 0x50, 0x2f, 0x1c, 0x4f, 0xa9, + 0x9f, 0xcf, 0xa0, 0xa1, 0x9a, 0xe7, 0x10, 0xbd, 0xc5, 0x83, 0x50, 0x9d, 0x41, 0xfd, 0xcc, 0xcf, + 0xd3, 0x7f, 0x94, 0xaa, 0x05, 0xbf, 0xf1, 0x05, 0x34, 0x32, 0xa3, 0xbb, 0x1e, 0x94, 0xac, 0x58, + 0x06, 0xb9, 0x0b, 0x6f, 0x9c, 0x72, 0x5a, 0x04, 0x8a, 0x67, 0x18, 0x1d, 0x2b, 0x07, 0xd1, 0xff, + 0x72, 0x5b, 0xc6, 0x5e, 0xea, 0x7f, 0x6b, 0xa3, 0xd8, 0x03, 0xa1, 0x96, 0x22, 0x65, 0xd5, 0xaf, + 0x66, 0x50, 0xcc, 0x03, 0x75, 0xf7, 0x8f, 0xc5, 0xe7, 0xd1, 0xb1, 0x48, 0xc4, 0x49, 0xfe, 0x50, + 0x6b, 0x9b, 0x01, 0x29, 0xa3, 0xa5, 0xf1, 0x7b, 0x82, 0x07, 0x42, 0x37, 0xb5, 0x19, 0x1e, 0x57, + 0xab, 0x6f, 0x73, 0xa3, 0x98, 0xeb, 0x38, 0x4d, 0x4d, 0x40, 0xf1, 0xb8, 0x2f, 0x7f, 0x6f, 0x34, + 0x0c, 0xa7, 0x87, 0x2f, 0xf0, 0x97, 0xeb, 0x99, 0x30, 0x1a, 0x57, 0x24, 0x2f, 0x2f, 0x7b, 0xa9, + 0xfe, 0x7e, 0x34, 0x54, 0x69, 0xb5, 0x89, 0xe3, 0xda, 0x96, 0xee, 0xd9, 0x0e, 0x7f, 0xf8, 0x0b, + 0x91, 0x9a, 0x4c, 0x01, 0x2e, 0x46, 0x0f, 0x12, 0xe9, 0xf1, 0x25, 0x3f, 0x0d, 0x53, 0x0e, 0x02, + 0x19, 0xc2, 0xeb, 0xbd, 0x68, 0xae, 0x57, 0x46, 0x41, 0x49, 0x6f, 0xba, 0x3a, 0x3c, 0x25, 0x0b, + 0x48, 0x3b, 0x14, 0x20, 0x92, 0x02, 0x05, 0x7e, 0x0c, 0x15, 0xe0, 0xe8, 0xdd, 0x85, 0xf4, 0x6a, + 0x3c, 0x46, 0x58, 0x13, 0x20, 0x62, 0x44, 0x26, 0x46, 0x83, 0x6f, 0xa0, 0xd1, 0xf0, 0x5e, 0xf1, + 0xba, 0x63, 0x77, 0xda, 0x7e, 0x42, 0x05, 0xc8, 0x91, 0xbb, 0x1a, 0xe0, 0xea, 0xcb, 0x80, 0x14, + 0x58, 0xc4, 0x0a, 0xe2, 0x69, 0x74, 0x2c, 0x84, 0x51, 0x11, 0xf9, 0x89, 0x5c, 0x20, 0x47, 0xb4, + 0xc0, 0x8b, 0x8a, 0x53, 0x64, 0x15, 0x2d, 0x86, 0x2b, 0xa8, 0xcf, 0x0f, 0x10, 0xd6, 0xbf, 0xa5, + 0x92, 0x1e, 0xe7, 0x01, 0xc2, 0xfa, 0xc4, 0xd0, 0x60, 0x7e, 0x79, 0x3c, 0x85, 0x46, 0x34, 0xbb, + 0xe3, 0x91, 0x05, 0x9b, 0x5b, 0xf3, 0x3c, 0xd2, 0x3f, 0xb4, 0xc9, 0xa1, 0x98, 0xba, 0x67, 0xfb, + 0x29, 0x86, 0xc5, 0x54, 0xb7, 0x72, 0x29, 0x3c, 0x87, 0xc6, 0x62, 0x37, 0xb0, 0x62, 0xe2, 0x5f, + 0xe1, 0xf3, 0xe2, 0xcc, 0xe2, 0x45, 0xf1, 0x77, 0x67, 0x50, 0x61, 0xc1, 0xd1, 0x4d, 0xcf, 0xe5, + 0xaf, 0xd0, 0xee, 0xbb, 0xbc, 0xe6, 0xe8, 0x6d, 0xaa, 0x1f, 0x97, 0x21, 0x52, 0xe5, 0x2d, 0xbd, + 0xd9, 0x21, 0xee, 0xf8, 0x6d, 0xfa, 0x75, 0xff, 0x6a, 0xa3, 0xf8, 0xc2, 0x32, 0x9c, 0xf3, 0x5c, + 0x6e, 0xd8, 0xad, 0x2b, 0xcb, 0x8e, 0x7e, 0xc7, 0xf4, 0x60, 0xdd, 0xd7, 0x9b, 0x57, 0x3c, 0xd2, + 0x84, 0xe3, 0xa4, 0x2b, 0x7a, 0xdb, 0xbc, 0x02, 0x11, 0x91, 0xaf, 0x04, 0x9c, 0x58, 0x0d, 0x54, + 0x05, 0x3c, 0xf8, 0x4b, 0x54, 0x01, 0x86, 0xc3, 0x73, 0x08, 0xf1, 0x4f, 0x2d, 0xb5, 0xdb, 0xfc, + 0x49, 0x9b, 0x70, 0x08, 0xe3, 0x63, 0x98, 0x62, 0x07, 0x02, 0xd3, 0xdb, 0x6d, 0x31, 0xb5, 0x78, + 0x48, 0x47, 0xb5, 0x60, 0x81, 0xb7, 0xc8, 0x17, 0xd3, 0x70, 0x28, 0x71, 0xbf, 0xb1, 0x09, 0x42, + 0x8a, 0x16, 0xc3, 0x8b, 0xe8, 0x18, 0xe7, 0x1b, 0x84, 0xde, 0x1f, 0x91, 0x67, 0x85, 0x08, 0x9a, + 0x29, 0x6d, 0xd0, 0x46, 0x83, 0x83, 0xc5, 0x3a, 0x22, 0x25, 0xf0, 0x78, 0x98, 0x75, 0x72, 0x4e, + 0x6f, 0x11, 0x57, 0x39, 0x06, 0x1a, 0x7b, 0x76, 0x73, 0xa3, 0xa8, 0xf8, 0xe5, 0x21, 0x56, 0x5e, + 0x62, 0x06, 0x66, 0x28, 0x22, 0xf2, 0x60, 0x5a, 0x3f, 0x9a, 0xc0, 0x23, 0xaa, 0xf3, 0x72, 0x11, + 0x3c, 0x81, 0x86, 0x03, 0x8f, 0xfa, 0x9b, 0x37, 0x2b, 0x65, 0x78, 0x33, 0x37, 0x30, 0x7e, 0x6e, + 0x73, 0xa3, 0x78, 0x3a, 0x12, 0xd5, 0x5f, 0x64, 0x22, 0x95, 0x11, 0xc2, 0x10, 0xb0, 0x47, 0x74, + 0x91, 0x30, 0x04, 0xed, 0x84, 0x30, 0x04, 0x55, 0xfc, 0x12, 0x1a, 0x2c, 0xdd, 0xae, 0xf1, 0xf0, + 0x0a, 0xae, 0x72, 0x3c, 0x4c, 0xa7, 0x02, 0x49, 0xb8, 0x79, 0x28, 0x06, 0xb1, 0xe9, 0x22, 0x3d, + 0x9e, 0x44, 0x23, 0x92, 0x53, 0x8e, 0xab, 0x9c, 0x00, 0x0e, 0xd0, 0x72, 0x1d, 0x30, 0x75, 0x87, + 0xa3, 0xa4, 0xb4, 0xf0, 0x52, 0x21, 0xaa, 0x35, 0x65, 0xd3, 0x85, 0xd4, 0x14, 0x1a, 0x81, 0x48, + 0x0e, 0xf0, 0x02, 0xaf, 0x9f, 0x69, 0x8d, 0xc1, 0x51, 0x75, 0x87, 0xe1, 0xa4, 0x3c, 0xf0, 0x72, + 0x31, 0xfc, 0x06, 0xc2, 0x90, 0xcc, 0x82, 0x18, 0xfe, 0x1d, 0x4d, 0xa5, 0xec, 0x2a, 0x27, 0x21, + 0x62, 0x2f, 0x8e, 0xbe, 0x1c, 0xaf, 0x94, 0xc7, 0x2f, 0xf0, 0xe9, 0xe3, 0xbc, 0xce, 0x4a, 0xd5, + 0xfd, 0x57, 0xe3, 0x75, 0xd3, 0x10, 0x5b, 0x9c, 0xc0, 0x15, 0xaf, 0xa1, 0x53, 0x55, 0x87, 0xdc, + 0x31, 0xed, 0x8e, 0xeb, 0x2f, 0x1f, 0xfe, 0xbc, 0x75, 0x6a, 0xcb, 0x79, 0xeb, 0x41, 0x5e, 0xf1, + 0x7d, 0x6d, 0x87, 0xdc, 0xa9, 0xfb, 0x71, 0x5a, 0xa5, 0x00, 0x87, 0x69, 0xdc, 0xa9, 0xb8, 0x20, + 0x8a, 0x05, 0x87, 0x9b, 0xc4, 0x55, 0x94, 0x70, 0xaa, 0x65, 0x41, 0x39, 0xcc, 0x00, 0x27, 0x8a, + 0x2b, 0x52, 0x0c, 0x6b, 0x08, 0x5f, 0x9f, 0xf0, 0xef, 0xeb, 0x4a, 0x0d, 0x96, 0xd5, 0x51, 0x39, + 0x0d, 0xcc, 0x54, 0x2a, 0x96, 0xe5, 0x46, 0x10, 0xb3, 0xb9, 0xae, 0x73, 0xbc, 0x28, 0x96, 0x78, + 0x69, 0x3c, 0x83, 0x46, 0xab, 0x0e, 0x1c, 0x3d, 0xdc, 0x20, 0xeb, 0x55, 0xbb, 0x69, 0x36, 0xd6, + 0xe1, 0x21, 0x20, 0x9f, 0x2a, 0xdb, 0x0c, 0x57, 0x5f, 0x25, 0xeb, 0xf5, 0x36, 0x60, 0xc5, 0x65, + 0x25, 0x5a, 0x52, 0x8c, 0xa1, 0x7a, 0xff, 0xf6, 0x62, 0xa8, 0x12, 0x34, 0xca, 0x6f, 0xfb, 0xee, + 0x7a, 0xc4, 0xa2, 0x4b, 0xbd, 0xcb, 0x1f, 0xfd, 0x29, 0x91, 0xdb, 0xc1, 0x00, 0xcf, 0x73, 0xc2, + 0xb3, 0x51, 0x46, 0x02, 0xb0, 0xd8, 0xb0, 0x68, 0x11, 0xf5, 0x33, 0x39, 0x71, 0xea, 0xc4, 0x67, + 0x51, 0x5e, 0x48, 0xe1, 0x01, 0xa1, 0x17, 0x21, 0xdc, 0x71, 0x9e, 0xc7, 0x75, 0x1d, 0xe0, 0x66, + 0x47, 0x10, 0x23, 0x04, 0xf2, 0x9b, 0xf9, 0x71, 0x95, 0x4d, 0x43, 0x0b, 0x09, 0x20, 0xb7, 0x54, + 0x67, 0xb1, 0x69, 0x36, 0x20, 0x08, 0x76, 0x4e, 0x08, 0x0a, 0x00, 0x50, 0x16, 0x03, 0x5b, 0x20, + 0xc1, 0x57, 0xd1, 0xa0, 0x7f, 0x5a, 0x15, 0x86, 0x1e, 0x85, 0xd8, 0xc8, 0x7e, 0xf6, 0x7c, 0x16, + 0x7a, 0x59, 0x20, 0xc2, 0xcf, 0x23, 0x14, 0x8e, 0x64, 0x6e, 0x24, 0xc1, 0x2c, 0x2f, 0x0e, 0x7c, + 0x71, 0x96, 0x0f, 0xa9, 0xe9, 0x9c, 0x27, 0x6a, 0x92, 0x9f, 0x4d, 0x0f, 0xe6, 0x3c, 0x49, 0xfd, + 0xc4, 0xbe, 0x95, 0x8b, 0xe0, 0x79, 0x34, 0x16, 0x53, 0x1e, 0x1e, 0xa8, 0x14, 0xf2, 0xf6, 0x26, + 0x68, 0x9e, 0xb8, 0xa6, 0xc6, 0xca, 0xaa, 0xdf, 0x91, 0x8d, 0xad, 0x18, 0x54, 0x30, 0x9c, 0x4a, + 0xe8, 0x1c, 0x10, 0x8c, 0xcf, 0x9a, 0x09, 0x46, 0x20, 0xc2, 0x17, 0x51, 0x7f, 0x95, 0x8e, 0xd7, + 0x86, 0xdd, 0xe4, 0x5d, 0x05, 0x11, 0x79, 0xda, 0x1c, 0xa6, 0x05, 0x58, 0x7c, 0x55, 0xc8, 0xef, + 0x28, 0x04, 0xf8, 0xf5, 0xf3, 0x3b, 0x8a, 0x13, 0x6e, 0x90, 0xe9, 0xf1, 0x6a, 0x24, 0x95, 0x8c, + 0x9f, 0xe9, 0x3f, 0xbe, 0x5a, 0x85, 0x89, 0xb2, 0x02, 0x5b, 0xb1, 0x77, 0x2b, 0x5b, 0x51, 0xfd, + 0xed, 0x4c, 0x5c, 0xfb, 0xf1, 0xb5, 0x78, 0x94, 0x4f, 0x96, 0xe4, 0xdf, 0x07, 0x8a, 0xb5, 0x06, + 0xf1, 0x3e, 0xa5, 0x78, 0x9d, 0xd9, 0x5d, 0xc7, 0xeb, 0xcc, 0xed, 0x30, 0x5e, 0xa7, 0xfa, 0xdf, + 0xf3, 0x5d, 0x7d, 0x46, 0x0f, 0x24, 0x2e, 0xd5, 0x73, 0x74, 0xbf, 0x43, 0x6b, 0x2f, 0xb9, 0x31, + 0xab, 0x9d, 0xb9, 0xc4, 0xd5, 0x75, 0x36, 0x6a, 0x5c, 0x4d, 0xa6, 0xc4, 0x2f, 0xa3, 0x21, 0xff, + 0x03, 0x20, 0x0e, 0xac, 0x10, 0xbf, 0x34, 0x58, 0x6b, 0x22, 0x11, 0x53, 0xa5, 0x02, 0xf8, 0x69, + 0x34, 0x00, 0x96, 0x46, 0x5b, 0x6f, 0xf8, 0x41, 0x82, 0x59, 0x54, 0x61, 0x1f, 0x28, 0xc6, 0x5e, + 0x0a, 0x28, 0xf1, 0x47, 0x50, 0x81, 0xc7, 0xab, 0x67, 0xa9, 0x8f, 0xaf, 0x6c, 0xc3, 0xc9, 0xf6, + 0xb2, 0x18, 0xab, 0x9e, 0xed, 0x1d, 0x00, 0x20, 0xed, 0x1d, 0x58, 0x98, 0xfa, 0x05, 0x74, 0xbc, + 0xea, 0x10, 0x03, 0xdc, 0xb9, 0x27, 0xef, 0xb6, 0x1d, 0x9e, 0x49, 0x80, 0x0d, 0x60, 0x58, 0x3a, + 0xda, 0x3e, 0x9a, 0x2e, 0x6a, 0x1c, 0x2f, 0x30, 0x4a, 0x2a, 0x4e, 0xed, 0x09, 0xd6, 0x92, 0x1b, + 0x64, 0x7d, 0xcd, 0x76, 0x0c, 0x16, 0x6c, 0x9f, 0xdb, 0x13, 0x5c, 0xd0, 0xab, 0x1c, 0x25, 0xda, + 0x13, 0x72, 0xa1, 0x33, 0xcf, 0xa1, 0xc1, 0xdd, 0xc6, 0x7b, 0xff, 0x95, 0x6c, 0xca, 0xeb, 0x8b, + 0x7b, 0x37, 0x4f, 0x5f, 0x90, 0x33, 0xb5, 0x37, 0x25, 0x67, 0xea, 0x37, 0xb3, 0x29, 0x4f, 0x4b, + 0xee, 0xe9, 0xdc, 0x86, 0x81, 0x30, 0xe4, 0xdc, 0x86, 0x61, 0x5a, 0x49, 0xd3, 0xd0, 0x44, 0xa2, + 0x48, 0x16, 0xd4, 0xc2, 0x96, 0x59, 0x50, 0x7f, 0x36, 0xd7, 0xed, 0xe9, 0xcd, 0x91, 0xec, 0x77, + 0x22, 0xfb, 0xab, 0x68, 0x30, 0x90, 0x6c, 0xa5, 0x0c, 0xf6, 0xcc, 0x70, 0x90, 0x5d, 0x82, 0x81, + 0xa1, 0x8c, 0x40, 0x84, 0x2f, 0xb1, 0xb6, 0xd6, 0xcc, 0x37, 0x59, 0x84, 0xf5, 0x61, 0x1e, 0x3b, + 0x5b, 0xf7, 0xf4, 0xba, 0x6b, 0xbe, 0x49, 0xb4, 0x00, 0xad, 0xfe, 0xc3, 0x6c, 0xe2, 0xfb, 0xa5, + 0xa3, 0x3e, 0xda, 0x41, 0x1f, 0x25, 0x08, 0x91, 0xbd, 0xbc, 0x3a, 0x12, 0xe2, 0x0e, 0x84, 0xf8, + 0x17, 0xd9, 0xc4, 0x77, 0x6a, 0x47, 0x42, 0xdc, 0xc9, 0x6c, 0xf1, 0x18, 0x1a, 0xd0, 0xec, 0x35, + 0x77, 0x02, 0xf6, 0x2c, 0x6c, 0xae, 0x80, 0x89, 0xda, 0xb1, 0xd7, 0xdc, 0x3a, 0xec, 0x46, 0xb4, + 0x90, 0x40, 0xfd, 0x56, 0xb6, 0xcb, 0x4b, 0xbe, 0x23, 0xc1, 0xbf, 0x9d, 0x4b, 0xe4, 0xaf, 0x67, + 0xa5, 0x97, 0x82, 0xf7, 0x74, 0x92, 0xf0, 0x5a, 0x63, 0x85, 0xb4, 0xf4, 0x68, 0x92, 0x70, 0x17, + 0xa0, 0x3c, 0xc7, 0x68, 0x48, 0xa2, 0x7e, 0x29, 0x1b, 0x79, 0x2a, 0x79, 0x24, 0xbb, 0x6d, 0xcb, + 0x2e, 0xd0, 0x3a, 0xfe, 0xfa, 0xf3, 0x48, 0x72, 0xdb, 0x95, 0xdc, 0x27, 0xb2, 0x91, 0x87, 0xb2, + 0xf7, 0x6e, 0xbe, 0xe0, 0x2f, 0x65, 0xe3, 0x8f, 0x7e, 0xef, 0x5d, 0x4d, 0x7a, 0x0c, 0x0d, 0x70, + 0x39, 0x04, 0x4b, 0x05, 0x9b, 0xf7, 0x19, 0x10, 0x0e, 0x50, 0x03, 0x02, 0xf5, 0xbb, 0xb2, 0x48, + 0x7e, 0xc0, 0x7c, 0x8f, 0xea, 0xd0, 0xaf, 0x67, 0xe5, 0xa7, 0xdb, 0xf7, 0xae, 0xfe, 0x5c, 0x46, + 0xa8, 0xd6, 0x59, 0x6c, 0xf0, 0xc8, 0x9f, 0xbd, 0xc2, 0x09, 0x7c, 0x00, 0xd5, 0x04, 0x0a, 0xf5, + 0x7f, 0x64, 0x13, 0xdf, 0x93, 0xdf, 0xbb, 0x02, 0x7c, 0x0a, 0x4e, 0xc5, 0x1b, 0x56, 0x38, 0x91, + 0xc3, 0x21, 0x24, 0x1d, 0x7f, 0xb1, 0xd4, 0x66, 0x3e, 0x21, 0x7e, 0x5f, 0x82, 0xb9, 0x06, 0x81, + 0xe3, 0x43, 0x73, 0x4d, 0xbc, 0x61, 0x10, 0x0c, 0xb7, 0xdf, 0xcb, 0x6e, 0xf5, 0xfc, 0xfe, 0x5e, + 0x5e, 0x55, 0xfb, 0xaa, 0xfa, 0x3a, 0x84, 0x89, 0xa3, 0x3d, 0x31, 0xc4, 0x12, 0x6f, 0xb5, 0x19, + 0x48, 0xbc, 0x11, 0xe3, 0x54, 0xea, 0x9f, 0xf5, 0x26, 0xbf, 0xfd, 0xbe, 0x77, 0x45, 0x78, 0x16, + 0xe5, 0xab, 0xba, 0xb7, 0xc2, 0x35, 0x19, 0x6e, 0xeb, 0xda, 0xba, 0xb7, 0xa2, 0x01, 0x14, 0x5f, + 0x42, 0xfd, 0x9a, 0xbe, 0xc6, 0xce, 0x3c, 0x0b, 0x61, 0x52, 0x34, 0x47, 0x5f, 0xab, 0xb3, 0x73, + 0xcf, 0x00, 0x8d, 0xd5, 0x20, 0x29, 0x1f, 0x3b, 0xf9, 0x86, 0x8c, 0x56, 0x2c, 0x29, 0x5f, 0x90, + 0x8a, 0xef, 0x2c, 0xca, 0x8f, 0xdb, 0xc6, 0x3a, 0x38, 0xb3, 0x0c, 0xb1, 0xca, 0x16, 0x6d, 0x63, + 0x5d, 0x03, 0x28, 0xfe, 0x64, 0x06, 0xf5, 0x4d, 0x13, 0xdd, 0xa0, 0x23, 0x64, 0xa0, 0x9b, 0x2f, + 0xc8, 0x07, 0xf6, 0xc7, 0x17, 0x64, 0x6c, 0x85, 0x55, 0x26, 0x2a, 0x0a, 0xaf, 0x1f, 0x5f, 0x47, + 0xfd, 0x13, 0xba, 0x47, 0x96, 0x6d, 0x67, 0x1d, 0xbc, 0x5b, 0x46, 0x42, 0x4f, 0x67, 0x49, 0x7f, + 0x7c, 0x22, 0x76, 0x33, 0xd6, 0xe0, 0xbf, 0xb4, 0xa0, 0x30, 0x15, 0x0b, 0x4f, 0xd6, 0x3d, 0x18, + 0x8a, 0x85, 0x65, 0xe5, 0x0e, 0x72, 0x72, 0x07, 0xc7, 0xca, 0x43, 0xc9, 0xc7, 0xca, 0x60, 0x3d, + 0x82, 0x07, 0x1c, 0xa4, 0xc2, 0x1b, 0x86, 0x45, 0x9f, 0x59, 0x8f, 0x00, 0x85, 0x4c, 0x78, 0x9a, + 0x40, 0xa2, 0x7e, 0xbd, 0x17, 0x25, 0xbe, 0x14, 0x3d, 0x52, 0xf2, 0x23, 0x25, 0x0f, 0x95, 0xbc, + 0x1c, 0x53, 0xf2, 0x33, 0xf1, 0xb7, 0xc7, 0xef, 0x50, 0x0d, 0xff, 0xe1, 0x7c, 0x2c, 0x72, 0xc1, + 0xbd, 0xbd, 0xbb, 0x0c, 0xa5, 0xd7, 0xbb, 0xa5, 0xf4, 0x82, 0x01, 0x51, 0xd8, 0x72, 0x40, 0xf4, + 0x6d, 0x77, 0x40, 0xf4, 0xa7, 0x0e, 0x88, 0x50, 0x41, 0x06, 0x52, 0x15, 0xa4, 0xc2, 0x07, 0x0d, + 0xea, 0x9e, 0x40, 0xe1, 0xec, 0xe6, 0x46, 0x71, 0x84, 0x8e, 0xa6, 0xc4, 0xcc, 0x09, 0xc0, 0x42, + 0xfd, 0x6a, 0xbe, 0x4b, 0xb8, 0x91, 0x03, 0xd1, 0x91, 0xa7, 0x50, 0xae, 0xd4, 0x6e, 0x73, 0xfd, + 0x38, 0x2e, 0x44, 0x3a, 0x49, 0x29, 0x45, 0xa9, 0xf1, 0xf3, 0x28, 0x57, 0xba, 0x5d, 0x8b, 0x26, + 0x4d, 0x28, 0xdd, 0xae, 0xf1, 0x2f, 0x49, 0x2d, 0x7b, 0xbb, 0x86, 0x5f, 0x0c, 0xa3, 0x17, 0xae, + 0x74, 0xac, 0x55, 0xbe, 0x51, 0xe4, 0x4e, 0xb0, 0xbe, 0xa7, 0x4d, 0x83, 0xa2, 0xe8, 0x76, 0x31, + 0x42, 0x1b, 0xd1, 0xa6, 0xc2, 0xf6, 0xb5, 0xa9, 0x6f, 0x4b, 0x6d, 0xea, 0xdf, 0xae, 0x36, 0x0d, + 0x6c, 0x43, 0x9b, 0xd0, 0x96, 0xda, 0x34, 0xb8, 0x77, 0x6d, 0x6a, 0xa3, 0x33, 0xf1, 0x10, 0x51, + 0x81, 0x46, 0x68, 0x08, 0xc7, 0xb1, 0xdc, 0xb1, 0x04, 0xae, 0xfe, 0x3b, 0x0c, 0x5b, 0x67, 0x49, + 0xf5, 0xa3, 0x29, 0xe9, 0xb5, 0x84, 0xd2, 0xea, 0xaf, 0x64, 0xd3, 0x23, 0x5b, 0x1d, 0xce, 0x29, + 0xee, 0xdb, 0x12, 0xa5, 0x94, 0x97, 0x5f, 0x1a, 0xa7, 0x4b, 0x39, 0xc2, 0x36, 0x49, 0x66, 0x5f, + 0xc9, 0xa4, 0x85, 0xdb, 0xda, 0x93, 0xc4, 0x1e, 0x89, 0x3b, 0xab, 0x81, 0xf7, 0xbc, 0x2b, 0x7b, + 0xa9, 0x45, 0x73, 0xb4, 0xe7, 0x76, 0x99, 0xa3, 0xfd, 0xb7, 0x33, 0xe8, 0xf8, 0x8d, 0xce, 0x22, + 0xe1, 0xce, 0x69, 0x41, 0x33, 0xde, 0x40, 0x88, 0x82, 0xb9, 0x13, 0x4b, 0x06, 0x9c, 0x58, 0xde, + 0x2b, 0x86, 0xca, 0x8a, 0x14, 0xb8, 0x1c, 0x52, 0x33, 0x07, 0x96, 0x73, 0xbe, 0x8b, 0xe5, 0x6a, + 0x67, 0x91, 0xd4, 0x63, 0x9e, 0x2c, 0x02, 0xf7, 0x33, 0x2f, 0x31, 0xe7, 0xf5, 0xdd, 0x3a, 0x8d, + 0xfc, 0x52, 0x36, 0x35, 0x3a, 0xd9, 0xa1, 0x4d, 0xa3, 0xf7, 0xa1, 0xc4, 0x5e, 0x89, 0xa6, 0xd3, + 0x4b, 0x20, 0x89, 0x70, 0x4c, 0xe2, 0x92, 0x2c, 0xb0, 0x43, 0x9e, 0xdc, 0xf1, 0x6d, 0x15, 0xd8, + 0xd7, 0x32, 0xa9, 0x51, 0xe4, 0x0e, 0xab, 0xc0, 0xd4, 0x7f, 0x9f, 0xf3, 0x83, 0xd7, 0xed, 0xe9, + 0x13, 0x1e, 0x43, 0x03, 0x3c, 0x43, 0x8f, 0xec, 0x5b, 0xcb, 0x8f, 0xf2, 0xe0, 0x68, 0x38, 0x20, + 0xa0, 0xcb, 0xbc, 0x1f, 0x5c, 0x2b, 0xc8, 0xea, 0x0f, 0xcb, 0xbc, 0xc9, 0xa1, 0x94, 0x5e, 0x20, + 0xa1, 0x0b, 0xf9, 0xe4, 0x5d, 0xd3, 0x03, 0xab, 0x80, 0xf6, 0x65, 0x8e, 0x2d, 0xe4, 0xe4, 0xae, + 0xe9, 0x31, 0x9b, 0x20, 0x40, 0xd3, 0x45, 0xba, 0x16, 0xa6, 0xae, 0xe6, 0x8b, 0xb4, 0xcb, 0x33, + 0x78, 0xf3, 0xc7, 0x5c, 0x8f, 0xa1, 0x01, 0xee, 0xb0, 0xca, 0xdd, 0x4c, 0x78, 0x6b, 0xb9, 0x8b, + 0x2b, 0xb4, 0x36, 0x20, 0xa0, 0x1c, 0x35, 0xb2, 0x1c, 0x3a, 0xd6, 0x01, 0x47, 0x07, 0x20, 0x1a, + 0xc7, 0xe0, 0xab, 0x68, 0xa4, 0xe6, 0xe9, 0x96, 0xa1, 0x3b, 0xc6, 0x7c, 0xc7, 0x6b, 0x77, 0x3c, + 0xd1, 0x28, 0x75, 0x3d, 0xc3, 0xee, 0x78, 0x5a, 0x84, 0x02, 0x3f, 0x81, 0x86, 0x7d, 0xc8, 0xa4, + 0xe3, 0xd8, 0x8e, 0x68, 0x79, 0xb8, 0x9e, 0x41, 0x1c, 0x47, 0x93, 0x09, 0xf0, 0xfb, 0xd0, 0x70, + 0xc5, 0xba, 0x63, 0x37, 0xd8, 0x8b, 0x5b, 0x6d, 0x86, 0xdb, 0x21, 0xf0, 0x40, 0xca, 0x0c, 0x10, + 0xf5, 0x8e, 0xd3, 0xd4, 0x64, 0x42, 0x75, 0x33, 0x1b, 0x8f, 0xf1, 0x77, 0xef, 0x6e, 0x5a, 0x2e, + 0xc9, 0xce, 0x74, 0xe0, 0x41, 0x0a, 0x06, 0xa1, 0xe8, 0xcb, 0xcb, 0xec, 0xc2, 0xab, 0xa8, 0xff, + 0x06, 0x59, 0x67, 0x7e, 0x9f, 0x85, 0xd0, 0x55, 0x78, 0x95, 0xc3, 0xc4, 0x13, 0x57, 0x9f, 0x4e, + 0xfd, 0x72, 0x36, 0x1e, 0xbd, 0xf0, 0xde, 0x15, 0xf6, 0x13, 0xa8, 0x0f, 0x44, 0x59, 0xf1, 0x8f, + 0xfc, 0x41, 0x80, 0x20, 0x6e, 0xd9, 0x03, 0xd9, 0x27, 0x53, 0x7f, 0xb2, 0x10, 0x0d, 0x69, 0x79, + 0xef, 0x4a, 0xef, 0x05, 0x34, 0x38, 0x61, 0x5b, 0xae, 0xe9, 0x7a, 0xc4, 0x6a, 0xf8, 0x0a, 0x7b, + 0x9a, 0x1a, 0x54, 0x8d, 0x10, 0x2c, 0xbe, 0x0c, 0x12, 0xa8, 0x77, 0xa3, 0xbc, 0xf8, 0x19, 0x34, + 0x00, 0x22, 0x07, 0x3f, 0x69, 0x36, 0xe1, 0xc1, 0x6d, 0xc1, 0x22, 0x05, 0x46, 0x9d, 0xa4, 0x43, + 0x52, 0x7c, 0x13, 0xf5, 0x4f, 0xac, 0x98, 0x4d, 0xc3, 0x21, 0x16, 0xf8, 0x0b, 0x0b, 0x31, 0x0e, + 0xe4, 0xbe, 0xbc, 0x0c, 0xff, 0x02, 0x2d, 0x6b, 0x4e, 0x83, 0x17, 0x93, 0xde, 0x46, 0x71, 0xd8, + 0x99, 0x1f, 0xcc, 0x22, 0x14, 0x16, 0xc0, 0x0f, 0xa0, 0x6c, 0x90, 0x15, 0x16, 0xdc, 0x54, 0x24, + 0x0d, 0xca, 0xc2, 0x52, 0xc1, 0xc7, 0x76, 0x76, 0xcb, 0xb1, 0x7d, 0x13, 0x15, 0xd8, 0x89, 0x17, + 0x78, 0x92, 0x0b, 0x51, 0xf6, 0x52, 0x1b, 0x7c, 0x19, 0xe8, 0xd9, 0x66, 0x16, 0x2c, 0x4f, 0xc9, + 0x2b, 0x9b, 0x31, 0x3b, 0xd3, 0x40, 0xbd, 0xf0, 0x17, 0xbe, 0x80, 0xf2, 0x0b, 0x7e, 0x46, 0xc9, + 0x61, 0x36, 0x4b, 0x47, 0xe4, 0x07, 0x78, 0xda, 0x4d, 0x13, 0xb6, 0xe5, 0xd1, 0xaa, 0xa1, 0xd5, + 0x43, 0x5c, 0x2e, 0x1c, 0x26, 0xc9, 0x85, 0xc3, 0xd4, 0x7f, 0x92, 0x4d, 0x08, 0xb6, 0x7a, 0xef, + 0x0e, 0x93, 0xe7, 0x10, 0x82, 0x87, 0xd6, 0x54, 0x9e, 0xfe, 0x13, 0x0d, 0x18, 0x25, 0xc0, 0x08, + 0xd4, 0x56, 0xda, 0x76, 0x84, 0xc4, 0xea, 0xef, 0x66, 0x62, 0x11, 0x3a, 0xf7, 0x24, 0x47, 0xd1, + 0x2a, 0xcb, 0xee, 0xd2, 0x8c, 0xf5, 0xfb, 0x22, 0xb7, 0xb3, 0xbe, 0x90, 0xbf, 0x65, 0x1f, 0x2c, + 0xd3, 0x83, 0xfc, 0x96, 0xaf, 0x67, 0x93, 0xe2, 0x95, 0x1e, 0x4e, 0x15, 0xbf, 0x16, 0x18, 0xa5, + 0xf9, 0x48, 0x84, 0x68, 0x80, 0x46, 0xb3, 0xde, 0x72, 0x33, 0xf5, 0xa3, 0xe8, 0x58, 0x24, 0x8a, + 0x27, 0x4f, 0x40, 0x7a, 0xa1, 0x7b, 0x38, 0xd0, 0xf4, 0x27, 0xfa, 0x12, 0x99, 0xfa, 0x3f, 0x33, + 0xdd, 0x63, 0xb8, 0x1e, 0xb8, 0xea, 0x24, 0x08, 0x20, 0xf7, 0x37, 0x23, 0x80, 0x7d, 0xd8, 0x06, + 0x1f, 0x6e, 0x01, 0xbc, 0x43, 0x26, 0x8f, 0xb7, 0x5b, 0x00, 0x3f, 0x99, 0xd9, 0x32, 0x04, 0xef, + 0x41, 0xcb, 0x40, 0xfd, 0x37, 0x99, 0xc4, 0x50, 0xb9, 0x7b, 0x6a, 0xd7, 0x8b, 0xa8, 0xc0, 0xdc, + 0x6a, 0x78, 0xab, 0x84, 0xe4, 0x42, 0x14, 0x9a, 0x96, 0x8e, 0x9b, 0x61, 0xf1, 0x0c, 0xea, 0x63, + 0x6d, 0x30, 0x78, 0x6f, 0x3c, 0xdc, 0x25, 0x5e, 0xaf, 0x91, 0x36, 0x39, 0x72, 0xb4, 0xfa, 0x3b, + 0x99, 0x58, 0xe4, 0xde, 0x03, 0xfc, 0xb6, 0x70, 0xaa, 0xce, 0x6d, 0x7f, 0xaa, 0x56, 0xff, 0x34, + 0x9b, 0x1c, 0x38, 0xf8, 0x00, 0x3f, 0x64, 0x3f, 0x8e, 0xd3, 0x76, 0xb7, 0x6e, 0x2d, 0xa0, 0x11, + 0x59, 0x16, 0x7c, 0xd9, 0x3a, 0x9f, 0x1c, 0x3e, 0x39, 0xa5, 0x15, 0x11, 0x1e, 0xea, 0x5b, 0x99, + 0x78, 0xcc, 0xe3, 0x03, 0x9f, 0x9f, 0x76, 0xa7, 0x2d, 0xf2, 0xa7, 0xbc, 0x43, 0xd6, 0x9a, 0xfd, + 0xf8, 0x94, 0x77, 0xc8, 0xaa, 0xb1, 0xbb, 0x4f, 0xf9, 0xf9, 0x6c, 0x5a, 0xc8, 0xe8, 0x03, 0xff, + 0xa0, 0x0f, 0x8a, 0x42, 0x66, 0x2d, 0xe3, 0x9f, 0xf6, 0x40, 0x5a, 0x8c, 0xe6, 0x14, 0x9e, 0x31, + 0x3e, 0xbb, 0x1b, 0xe3, 0x89, 0xc2, 0x7a, 0x87, 0x28, 0xf2, 0xe1, 0x10, 0xd6, 0x3b, 0x64, 0xa8, + 0xbc, 0xf3, 0x84, 0xf5, 0x9b, 0xd9, 0xed, 0xc6, 0x29, 0x3f, 0x12, 0x5e, 0x4c, 0x78, 0x9f, 0xcd, + 0xc6, 0xe3, 0xe7, 0x1f, 0xb8, 0x98, 0xa6, 0x50, 0x81, 0x47, 0xf2, 0x4f, 0x15, 0x0e, 0xc3, 0xa7, + 0x59, 0x34, 0xfc, 0x3b, 0xae, 0x21, 0x7e, 0x91, 0xb3, 0x3d, 0x91, 0x30, 0x5a, 0xf5, 0x5b, 0x99, + 0x48, 0xb0, 0xf9, 0x03, 0x39, 0x42, 0xd8, 0xd5, 0x92, 0x84, 0x5f, 0xf2, 0x0f, 0x33, 0xf3, 0x91, + 0x48, 0xc1, 0xc1, 0xf7, 0x94, 0x89, 0xa7, 0x9b, 0xcd, 0x68, 0x79, 0x1e, 0x13, 0xe0, 0xcb, 0x59, + 0x34, 0x16, 0x23, 0xc5, 0x17, 0xa4, 0x28, 0x39, 0x70, 0x2c, 0x19, 0x71, 0x1e, 0x67, 0xf1, 0x72, + 0x76, 0x70, 0x92, 0x7a, 0x01, 0xe5, 0xcb, 0xfa, 0x3a, 0xfb, 0xb6, 0x5e, 0xc6, 0xd2, 0xd0, 0xd7, + 0xc5, 0x13, 0x37, 0xc0, 0xe3, 0x45, 0x74, 0x1f, 0xbb, 0x0f, 0x31, 0x6d, 0x6b, 0xc1, 0x6c, 0x91, + 0x8a, 0x35, 0x6b, 0x36, 0x9b, 0xa6, 0xcb, 0x2f, 0xf5, 0x1e, 0xdb, 0xdc, 0x28, 0x5e, 0xf4, 0x6c, + 0x4f, 0x6f, 0xd6, 0x89, 0x4f, 0x56, 0xf7, 0xcc, 0x16, 0xa9, 0x9b, 0x56, 0xbd, 0x05, 0x94, 0x02, + 0xcb, 0x64, 0x56, 0xb8, 0xc2, 0x82, 0x42, 0xd7, 0x1a, 0xba, 0x65, 0x11, 0xa3, 0x62, 0x8d, 0xaf, + 0x7b, 0x84, 0x5d, 0x06, 0xe6, 0xd8, 0x91, 0x20, 0x7b, 0x1b, 0xce, 0xd0, 0x94, 0xf1, 0x22, 0x25, + 0xd0, 0x12, 0x0a, 0xa9, 0xbf, 0x95, 0x4f, 0xc8, 0x33, 0x70, 0x88, 0xd4, 0xc7, 0xef, 0xe9, 0xfc, + 0x16, 0x3d, 0x7d, 0x05, 0xf5, 0xf1, 0x10, 0x9f, 0xfc, 0x82, 0x01, 0x9c, 0xd9, 0xef, 0x30, 0x90, + 0x78, 0x43, 0xc3, 0xa9, 0x70, 0x13, 0x9d, 0x59, 0xa0, 0xdd, 0x94, 0xdc, 0x99, 0x85, 0x5d, 0x74, + 0x66, 0x17, 0x7e, 0xf8, 0x75, 0x74, 0x0a, 0xb0, 0x09, 0xdd, 0xda, 0x07, 0x55, 0x41, 0xe4, 0x28, + 0x56, 0x55, 0x72, 0xe7, 0xa6, 0x95, 0xc7, 0x1f, 0x44, 0x43, 0xc1, 0x00, 0x31, 0x89, 0xcb, 0x6f, + 0x2e, 0xba, 0x8c, 0x33, 0x16, 0x96, 0x8d, 0x82, 0xc1, 0x85, 0x4c, 0x0e, 0xed, 0x25, 0xf1, 0x52, + 0xff, 0x75, 0xa6, 0x5b, 0xbe, 0x83, 0x03, 0x9f, 0x95, 0x5f, 0x42, 0x7d, 0x06, 0xfb, 0x28, 0xae, + 0x53, 0xdd, 0x33, 0x22, 0x30, 0x52, 0xcd, 0x2f, 0xa3, 0xfe, 0x49, 0xa6, 0x6b, 0x9a, 0x85, 0xc3, + 0xfe, 0x79, 0x9f, 0xcd, 0xa5, 0x7c, 0x1e, 0x9f, 0x44, 0x2f, 0xa1, 0x51, 0x33, 0x8c, 0x58, 0x5d, + 0x0f, 0xc3, 0x4f, 0x69, 0xc7, 0x04, 0x38, 0x8c, 0xae, 0x6b, 0xe8, 0xa4, 0xef, 0xf8, 0xe8, 0xf8, + 0x1e, 0x62, 0x6e, 0xbd, 0xe3, 0x98, 0x6c, 0x5c, 0x6a, 0x27, 0xdc, 0x88, 0xfb, 0x98, 0x7b, 0xd3, + 0x31, 0x69, 0x05, 0xba, 0xb7, 0x42, 0x2c, 0xbd, 0xbe, 0x66, 0x3b, 0xab, 0x10, 0xfb, 0x93, 0x0d, + 0x4e, 0xed, 0x18, 0x83, 0xdf, 0xf6, 0xc1, 0xf8, 0x21, 0x34, 0xbc, 0xdc, 0xec, 0x90, 0x20, 0xda, + 0x22, 0xbb, 0xeb, 0xd3, 0x86, 0x28, 0x30, 0xb8, 0x21, 0x39, 0x87, 0x10, 0x10, 0x79, 0x90, 0x04, + 0x03, 0x2e, 0xf6, 0xb4, 0x01, 0x0a, 0x59, 0xe0, 0xdd, 0x75, 0x86, 0x69, 0x35, 0x13, 0x52, 0xbd, + 0x69, 0x5b, 0xcb, 0x75, 0x8f, 0x38, 0x2d, 0x68, 0x28, 0x38, 0x33, 0x68, 0x27, 0x81, 0x02, 0xae, + 0x4e, 0xdc, 0x19, 0xdb, 0x5a, 0x5e, 0x20, 0x4e, 0x8b, 0x36, 0xf5, 0x31, 0x84, 0x79, 0x53, 0x1d, + 0x38, 0xf4, 0x60, 0x1f, 0x07, 0xde, 0x0c, 0x1a, 0xff, 0x08, 0x76, 0x1a, 0x02, 0x1f, 0x56, 0x44, + 0x83, 0x2c, 0xe4, 0x1c, 0x13, 0x1a, 0xb8, 0x30, 0x68, 0x88, 0x81, 0x40, 0x5e, 0x27, 0x11, 0xf7, + 0xae, 0x60, 0x5e, 0xdd, 0x1a, 0xff, 0xa5, 0x7e, 0x2a, 0x97, 0x94, 0x19, 0x62, 0x4f, 0x8a, 0x16, + 0x4e, 0xab, 0xd9, 0x1d, 0x4d, 0xab, 0xc7, 0xac, 0x4e, 0xab, 0xae, 0xb7, 0xdb, 0xf5, 0x25, 0xb3, + 0x09, 0xcf, 0xaa, 0x60, 0xe1, 0xd3, 0x86, 0xad, 0x4e, 0xab, 0xd4, 0x6e, 0x4f, 0x31, 0x20, 0x7e, + 0x14, 0x8d, 0x51, 0x3a, 0xe8, 0xa4, 0x80, 0x32, 0x0f, 0x94, 0x94, 0x01, 0xc4, 0x6c, 0xf5, 0x69, + 0x4f, 0xa3, 0x7e, 0xce, 0x93, 0xad, 0x55, 0xbd, 0x5a, 0x1f, 0x63, 0xe6, 0xd2, 0x9e, 0x0b, 0xd8, + 0xb0, 0xc9, 0xb5, 0x57, 0x1b, 0xf0, 0xcb, 0x43, 0x64, 0x62, 0xab, 0xd3, 0x62, 0x11, 0xb1, 0xfa, + 0x00, 0x19, 0xfc, 0xc6, 0x17, 0xd0, 0x08, 0xe5, 0x12, 0x08, 0x8c, 0x05, 0x73, 0xed, 0xd5, 0x22, + 0x50, 0x7c, 0x15, 0x9d, 0x90, 0x20, 0xcc, 0x06, 0x65, 0xcf, 0x04, 0x7a, 0xb5, 0x44, 0x9c, 0xfa, + 0x56, 0x2e, 0x9e, 0xf8, 0xe2, 0x40, 0xd6, 0xc6, 0x69, 0x84, 0x78, 0x5e, 0x9b, 0xf0, 0x82, 0x26, + 0xf0, 0x5a, 0x0e, 0x31, 0x29, 0x3c, 0x84, 0xb2, 0xf8, 0x12, 0xea, 0x67, 0x5f, 0x54, 0x29, 0xf3, + 0x35, 0x13, 0xdc, 0x8c, 0xdc, 0xb6, 0xb9, 0xb4, 0x04, 0x3e, 0x49, 0x01, 0x1a, 0x5f, 0x40, 0x7d, + 0xe5, 0xb9, 0x5a, 0xad, 0x34, 0xe7, 0xdf, 0x36, 0xc2, 0x1b, 0x05, 0xc3, 0x72, 0xeb, 0xae, 0x6e, + 0xb9, 0x9a, 0x8f, 0xc4, 0x0f, 0xa1, 0x42, 0xa5, 0x0a, 0x64, 0xec, 0xe5, 0xdd, 0xe0, 0xe6, 0x46, + 0xb1, 0xcf, 0x6c, 0x33, 0x2a, 0x8e, 0x82, 0x7a, 0x6f, 0x55, 0xca, 0xc2, 0x95, 0x3b, 0xab, 0xf7, + 0x8e, 0x69, 0xc0, 0xd5, 0xa5, 0x16, 0xa0, 0xf1, 0xd3, 0x68, 0xa8, 0x46, 0x1c, 0x53, 0x6f, 0xce, + 0x75, 0x60, 0xbb, 0xc1, 0xdc, 0x8c, 0xc6, 0x36, 0x37, 0x8a, 0xc3, 0x2e, 0xc0, 0xeb, 0x16, 0x20, + 0x34, 0x89, 0x0c, 0x9f, 0x45, 0xf9, 0x69, 0xd3, 0xf2, 0xdd, 0xe0, 0xc1, 0x4f, 0x7a, 0xc5, 0xb4, + 0x3c, 0x0d, 0xa0, 0xea, 0x7f, 0xce, 0x26, 0xa7, 0x1e, 0x39, 0x80, 0xb1, 0xb5, 0xcb, 0xdb, 0xc2, + 0x88, 0x12, 0xe4, 0xf7, 0xa0, 0x04, 0x4b, 0xe8, 0x58, 0xc9, 0x68, 0x99, 0x56, 0x09, 0x7e, 0xba, + 0xb3, 0x53, 0x25, 0x18, 0x90, 0xc2, 0x33, 0xac, 0x08, 0x9a, 0x7f, 0x0f, 0x0b, 0xb7, 0x4a, 0x51, + 0x75, 0x9d, 0xe1, 0xea, 0xad, 0x25, 0xbd, 0xde, 0x60, 0x59, 0x3b, 0xb4, 0x28, 0x53, 0xf5, 0x07, + 0xb2, 0x5b, 0x64, 0x4b, 0xb9, 0x17, 0xa5, 0xaf, 0x7e, 0x2e, 0xdb, 0x3d, 0x61, 0xcd, 0x3d, 0x29, + 0x94, 0xbf, 0xc8, 0x26, 0xa4, 0x8f, 0xd9, 0x93, 0x24, 0x2e, 0xa1, 0x7e, 0xc6, 0x26, 0x70, 0xd7, + 0x84, 0x19, 0x87, 0x29, 0x2b, 0xcc, 0x74, 0x3e, 0x1a, 0xcf, 0xa1, 0x13, 0xa5, 0xa5, 0x25, 0xd2, + 0xf0, 0xc2, 0xc0, 0xbb, 0x73, 0x61, 0xb0, 0x4d, 0x16, 0xad, 0x94, 0xe3, 0xc3, 0xc0, 0xbd, 0x10, + 0x54, 0x22, 0xb1, 0x1c, 0x5e, 0x40, 0x27, 0xa3, 0xf0, 0x1a, 0x33, 0xf5, 0xf2, 0x42, 0x00, 0xd3, + 0x18, 0x47, 0xf6, 0x9f, 0x96, 0x52, 0x36, 0xa9, 0x95, 0x30, 0x9d, 0xf6, 0x76, 0x6b, 0x25, 0xcc, + 0xad, 0x89, 0xe5, 0xd4, 0x2f, 0xe7, 0xc4, 0x2c, 0x3b, 0xf7, 0xae, 0x63, 0xcd, 0x35, 0xc9, 0x9d, + 0x76, 0xbb, 0x43, 0xe6, 0x69, 0x1e, 0x29, 0xc2, 0xe8, 0x38, 0xbe, 0xe7, 0x59, 0xf0, 0x52, 0x1d, + 0x80, 0xa2, 0x0f, 0x59, 0x40, 0x89, 0x2b, 0x28, 0x5f, 0x72, 0x96, 0x99, 0x19, 0xb3, 0xd5, 0xe3, + 0x19, 0xdd, 0x59, 0x76, 0x93, 0x1f, 0xcf, 0x50, 0x16, 0xea, 0xf7, 0x67, 0xbb, 0x64, 0xe1, 0xb9, + 0x27, 0x27, 0x91, 0x1f, 0xcb, 0xa6, 0xe5, 0xd3, 0x39, 0xac, 0x2e, 0x42, 0x6f, 0xb3, 0x70, 0x0e, + 0xb7, 0xff, 0xd4, 0x3e, 0x0a, 0xe7, 0x0f, 0xb2, 0x69, 0xc9, 0x81, 0x8e, 0x84, 0xb3, 0xbb, 0x09, + 0x32, 0x51, 0xa4, 0xf7, 0xb0, 0xcd, 0x2d, 0xaa, 0x42, 0xef, 0x2e, 0xdd, 0x64, 0x92, 0x44, 0x7a, + 0x34, 0x84, 0xf7, 0xa4, 0xa5, 0x5f, 0xcb, 0xa6, 0x26, 0xc1, 0x3a, 0x92, 0xe9, 0x7e, 0xca, 0xf4, + 0x68, 0xe8, 0xef, 0x69, 0xe8, 0x27, 0xca, 0xf4, 0x68, 0xec, 0xef, 0x49, 0x4f, 0xbf, 0x2f, 0x17, + 0x4f, 0xf3, 0x76, 0xaf, 0x2a, 0xa8, 0xb3, 0x4b, 0x05, 0xf5, 0xcb, 0xe1, 0x97, 0xd1, 0xb1, 0x50, + 0x96, 0x62, 0xb8, 0x17, 0xb8, 0x68, 0x6b, 0x50, 0x54, 0xfd, 0x0d, 0x8a, 0xe3, 0x71, 0x09, 0xa2, + 0xd4, 0xea, 0xb7, 0x72, 0xf1, 0x5c, 0x79, 0x47, 0xbd, 0xb1, 0xcb, 0xde, 0xb8, 0x89, 0x4e, 0x4e, + 0x74, 0x1c, 0x87, 0x58, 0x5e, 0x72, 0xa7, 0xc0, 0x49, 0x5e, 0x83, 0x51, 0xd4, 0xe3, 0x9d, 0x93, + 0x52, 0x98, 0xb2, 0xe5, 0x2e, 0xad, 0x51, 0xb6, 0x7d, 0x21, 0xdb, 0x0e, 0xa3, 0x48, 0x62, 0x9b, + 0x5c, 0x58, 0xfd, 0xbd, 0x6c, 0x3c, 0xbb, 0xe1, 0x51, 0xd7, 0xef, 0xae, 0xeb, 0x1f, 0x9d, 0x65, + 0xd9, 0x62, 0x6e, 0x98, 0x96, 0x81, 0x4f, 0xa3, 0xfb, 0x6e, 0xd6, 0x26, 0xb5, 0xfa, 0x8d, 0xca, + 0x5c, 0xb9, 0x7e, 0x73, 0xae, 0x56, 0x9d, 0x9c, 0xa8, 0x4c, 0x55, 0x26, 0xcb, 0xa3, 0x3d, 0xf8, + 0x38, 0x3a, 0x16, 0xa2, 0xa6, 0x6f, 0xce, 0x96, 0xe6, 0x46, 0x33, 0x78, 0x0c, 0x0d, 0x87, 0xc0, + 0xf1, 0xf9, 0x85, 0xd1, 0xec, 0xa3, 0xef, 0x41, 0x83, 0x70, 0x1d, 0xc6, 0x8e, 0x75, 0xf1, 0x10, + 0xea, 0x9f, 0x1f, 0xaf, 0x4d, 0x6a, 0xb7, 0x80, 0x09, 0x42, 0x85, 0xf2, 0xe4, 0x1c, 0x65, 0x98, + 0x79, 0xf4, 0xbf, 0x65, 0x10, 0xaa, 0x4d, 0x2d, 0x54, 0x39, 0xe1, 0x20, 0xea, 0xab, 0xcc, 0xdd, + 0x2a, 0xcd, 0x54, 0x28, 0x5d, 0x3f, 0xca, 0xcf, 0x57, 0x27, 0x69, 0x0d, 0x03, 0xa8, 0x77, 0x62, + 0x66, 0xbe, 0x36, 0x39, 0x9a, 0xa5, 0x40, 0x6d, 0xb2, 0x54, 0x1e, 0xcd, 0x51, 0xe0, 0x6d, 0xad, + 0xb2, 0x30, 0x39, 0x9a, 0xa7, 0x7f, 0xce, 0xd4, 0x16, 0x4a, 0x0b, 0xa3, 0xbd, 0xf4, 0xcf, 0x29, + 0xf8, 0xb3, 0x40, 0x99, 0xd5, 0x26, 0x17, 0xe0, 0x47, 0x1f, 0x6d, 0xc2, 0x94, 0xff, 0xab, 0x9f, + 0xa2, 0x28, 0xeb, 0x72, 0x45, 0x1b, 0x1d, 0xa0, 0x3f, 0x28, 0x4b, 0xfa, 0x03, 0xd1, 0xc6, 0x69, + 0x93, 0xb3, 0xf3, 0xb7, 0x26, 0x47, 0x07, 0x29, 0xaf, 0xd9, 0x1b, 0x14, 0x3c, 0x44, 0xff, 0xd4, + 0x66, 0xe9, 0x9f, 0xc3, 0x94, 0x93, 0x36, 0x59, 0x9a, 0xa9, 0x96, 0x16, 0xa6, 0x47, 0x47, 0x68, + 0x7b, 0x80, 0xe7, 0x31, 0x56, 0x72, 0xae, 0x34, 0x3b, 0x39, 0x3a, 0xca, 0x69, 0xca, 0x33, 0x95, + 0xb9, 0x1b, 0xa3, 0x63, 0xd0, 0x90, 0xd7, 0x67, 0xe1, 0x07, 0xa6, 0x05, 0xe0, 0xaf, 0xe3, 0x8f, + 0x7e, 0x18, 0x15, 0xe6, 0x6b, 0x70, 0x79, 0x71, 0x0a, 0x1d, 0x9f, 0xaf, 0xd5, 0x17, 0x5e, 0xaf, + 0x4e, 0x46, 0xe4, 0x3d, 0x86, 0x86, 0x7d, 0xc4, 0x4c, 0x65, 0xee, 0xe6, 0x07, 0x98, 0xb4, 0x7d, + 0xd0, 0x6c, 0x69, 0x62, 0xbe, 0x36, 0x9a, 0xa5, 0xbd, 0xe2, 0x83, 0x6e, 0x57, 0xe6, 0xca, 0xf3, + 0xb7, 0x6b, 0xa3, 0xb9, 0x47, 0xef, 0xa0, 0x21, 0x96, 0x6b, 0x67, 0xde, 0x31, 0x97, 0x4d, 0x0b, + 0x9f, 0x43, 0xa7, 0xcb, 0x93, 0xb7, 0x2a, 0x13, 0x93, 0xf5, 0x79, 0xad, 0x72, 0xbd, 0x32, 0x17, + 0xa9, 0xe9, 0x3e, 0x34, 0x26, 0xa3, 0x4b, 0xd5, 0xca, 0x68, 0x06, 0x9f, 0x44, 0x58, 0x06, 0xbf, + 0x5a, 0x9a, 0x9d, 0x1a, 0xcd, 0x62, 0x05, 0x9d, 0x90, 0xe1, 0x95, 0xb9, 0x85, 0x9b, 0x73, 0x93, + 0xa3, 0xb9, 0x47, 0x7f, 0x3a, 0x83, 0xee, 0x4b, 0x8c, 0xc7, 0x86, 0x55, 0x74, 0x7e, 0x72, 0xa6, + 0x54, 0x5b, 0xa8, 0x4c, 0xd4, 0x26, 0x4b, 0xda, 0xc4, 0x74, 0x7d, 0xa2, 0xb4, 0x30, 0x79, 0x7d, + 0x5e, 0x7b, 0xbd, 0x7e, 0x7d, 0x72, 0x6e, 0x52, 0x2b, 0xcd, 0x8c, 0xf6, 0xe0, 0x87, 0x50, 0x31, + 0x85, 0xa6, 0x36, 0x39, 0x71, 0x53, 0xab, 0x2c, 0xbc, 0x3e, 0x9a, 0xc1, 0x0f, 0xa2, 0x73, 0xa9, + 0x44, 0xf4, 0xf7, 0x68, 0x16, 0x9f, 0x47, 0x67, 0xd2, 0x48, 0x5e, 0x9b, 0x19, 0xcd, 0x3d, 0xfa, + 0x23, 0x19, 0x84, 0xe3, 0x01, 0xb5, 0xf0, 0x03, 0xe8, 0x2c, 0xd5, 0x8b, 0x7a, 0x7a, 0x03, 0x1f, + 0x44, 0xe7, 0x12, 0x29, 0x84, 0xe6, 0x15, 0xd1, 0xfd, 0x29, 0x24, 0xbc, 0x71, 0x67, 0x91, 0x92, + 0x4c, 0x00, 0x4d, 0xfb, 0x62, 0x06, 0xdd, 0x97, 0x78, 0x93, 0x82, 0x2f, 0xa2, 0x87, 0x4b, 0xe5, + 0x59, 0xda, 0x37, 0x13, 0x0b, 0x95, 0xf9, 0xb9, 0x5a, 0x7d, 0x76, 0xaa, 0x54, 0xa7, 0xda, 0x77, + 0xb3, 0x16, 0xe9, 0xcd, 0x0b, 0x48, 0xed, 0x42, 0x39, 0x31, 0x5d, 0x9a, 0xbb, 0x4e, 0x87, 0x1f, + 0x7e, 0x18, 0x3d, 0x90, 0x4a, 0x37, 0x39, 0x57, 0x1a, 0x9f, 0x99, 0x2c, 0x8f, 0x66, 0xf1, 0x23, + 0xe8, 0xc1, 0x54, 0xaa, 0x72, 0xa5, 0xc6, 0xc8, 0x72, 0xe3, 0xe5, 0xb7, 0xfe, 0xed, 0xf9, 0x9e, + 0xb7, 0xbe, 0x71, 0x3e, 0xf3, 0x07, 0xdf, 0x38, 0x9f, 0xf9, 0xd3, 0x6f, 0x9c, 0xcf, 0x7c, 0xf0, + 0xea, 0x4e, 0x02, 0xa5, 0xb1, 0x29, 0x6b, 0xb1, 0x00, 0xa7, 0x9a, 0x4f, 0xfd, 0xaf, 0x00, 0x00, + 0x00, 0xff, 0xff, 0x5f, 0x29, 0x23, 0xde, 0x9b, 0x6a, 0x01, 0x00, } func (m *Metadata) Marshal() (dAtA []byte, err error) { @@ -19199,6 +19207,26 @@ func (m *PortForward) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + { + size, err := m.KubernetesPodMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + { + size, err := m.KubernetesClusterMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 if len(m.Addr) > 0 { i -= len(m.Addr) copy(dAtA[i:], m.Addr) @@ -19597,63 +19625,63 @@ func (m *SFTPAttributes) MarshalToSizedBuffer(dAtA []byte) (int, error) { copy(dAtA[i:], m.XXX_unrecognized) } if m.ModificationTime != nil { - n154, err154 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.ModificationTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.ModificationTime):]) - if err154 != nil { - return 0, err154 - } - i -= n154 - i = encodeVarintEvents(dAtA, i, uint64(n154)) - i-- - dAtA[i] = 0x32 - } - if m.AccessTime != nil { - n155, err155 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.AccessTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.AccessTime):]) - if err155 != nil { - return 0, err155 - } - i -= n155 - i = encodeVarintEvents(dAtA, i, uint64(n155)) - i-- - dAtA[i] = 0x2a - } - if m.Permissions != nil { - n156, err156 := github_com_gogo_protobuf_types.StdUInt32MarshalTo(*m.Permissions, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdUInt32(*m.Permissions):]) + n156, err156 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.ModificationTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.ModificationTime):]) if err156 != nil { return 0, err156 } i -= n156 i = encodeVarintEvents(dAtA, i, uint64(n156)) i-- - dAtA[i] = 0x22 + dAtA[i] = 0x32 } - if m.GID != nil { - n157, err157 := github_com_gogo_protobuf_types.StdUInt32MarshalTo(*m.GID, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdUInt32(*m.GID):]) + if m.AccessTime != nil { + n157, err157 := github_com_gogo_protobuf_types.StdTimeMarshalTo(*m.AccessTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(*m.AccessTime):]) if err157 != nil { return 0, err157 } i -= n157 i = encodeVarintEvents(dAtA, i, uint64(n157)) i-- - dAtA[i] = 0x1a + dAtA[i] = 0x2a } - if m.UID != nil { - n158, err158 := github_com_gogo_protobuf_types.StdUInt32MarshalTo(*m.UID, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdUInt32(*m.UID):]) + if m.Permissions != nil { + n158, err158 := github_com_gogo_protobuf_types.StdUInt32MarshalTo(*m.Permissions, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdUInt32(*m.Permissions):]) if err158 != nil { return 0, err158 } i -= n158 i = encodeVarintEvents(dAtA, i, uint64(n158)) i-- - dAtA[i] = 0x12 + dAtA[i] = 0x22 } - if m.FileSize != nil { - n159, err159 := github_com_gogo_protobuf_types.StdUInt64MarshalTo(*m.FileSize, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdUInt64(*m.FileSize):]) + if m.GID != nil { + n159, err159 := github_com_gogo_protobuf_types.StdUInt32MarshalTo(*m.GID, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdUInt32(*m.GID):]) if err159 != nil { return 0, err159 } i -= n159 i = encodeVarintEvents(dAtA, i, uint64(n159)) i-- + dAtA[i] = 0x1a + } + if m.UID != nil { + n160, err160 := github_com_gogo_protobuf_types.StdUInt32MarshalTo(*m.UID, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdUInt32(*m.UID):]) + if err160 != nil { + return 0, err160 + } + i -= n160 + i = encodeVarintEvents(dAtA, i, uint64(n160)) + i-- + dAtA[i] = 0x12 + } + if m.FileSize != nil { + n161, err161 := github_com_gogo_protobuf_types.StdUInt64MarshalTo(*m.FileSize, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdUInt64(*m.FileSize):]) + if err161 != nil { + return 0, err161 + } + i -= n161 + i = encodeVarintEvents(dAtA, i, uint64(n161)) + i-- dAtA[i] = 0xa } return len(dAtA) - i, nil @@ -19810,6 +19838,16 @@ func (m *Subsystem) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } + { + size, err := m.ServerMetadata.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintEvents(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x32 if len(m.Error) > 0 { i -= len(m.Error) copy(dAtA[i:], m.Error) @@ -24129,20 +24167,20 @@ func (m *WindowsDesktopSessionEnd) MarshalToSizedBuffer(dAtA []byte) (int, error i-- dAtA[i] = 0x5a } - n377, err377 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.EndTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.EndTime):]) - if err377 != nil { - return 0, err377 + n380, err380 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.EndTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.EndTime):]) + if err380 != nil { + return 0, err380 } - i -= n377 - i = encodeVarintEvents(dAtA, i, uint64(n377)) + i -= n380 + i = encodeVarintEvents(dAtA, i, uint64(n380)) i-- dAtA[i] = 0x52 - n378, err378 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.StartTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTime):]) - if err378 != nil { - return 0, err378 + n381, err381 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.StartTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.StartTime):]) + if err381 != nil { + return 0, err381 } - i -= n378 - i = encodeVarintEvents(dAtA, i, uint64(n378)) + i -= n381 + i = encodeVarintEvents(dAtA, i, uint64(n381)) i-- dAtA[i] = 0x4a if len(m.DesktopLabels) > 0 { @@ -24462,12 +24500,12 @@ func (m *InstanceJoin) MarshalToSizedBuffer(dAtA []byte) (int, error) { } i-- dAtA[i] = 0x52 - n392, err392 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.TokenExpires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.TokenExpires):]) - if err392 != nil { - return 0, err392 + n395, err395 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.TokenExpires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.TokenExpires):]) + if err395 != nil { + return 0, err395 } - i -= n392 - i = encodeVarintEvents(dAtA, i, uint64(n392)) + i -= n395 + i = encodeVarintEvents(dAtA, i, uint64(n395)) i-- dAtA[i] = 0x4a if m.Attributes != nil { @@ -29848,12 +29886,12 @@ func (m *StreamStatus) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - n631, err631 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastUploadTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastUploadTime):]) - if err631 != nil { - return 0, err631 + n634, err634 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.LastUploadTime, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.LastUploadTime):]) + if err634 != nil { + return 0, err634 } - i -= n631 - i = encodeVarintEvents(dAtA, i, uint64(n631)) + i -= n634 + i = encodeVarintEvents(dAtA, i, uint64(n634)) i-- dAtA[i] = 0x1a if m.LastEventIndex != 0 { @@ -30003,12 +30041,12 @@ func (m *Identity) MarshalToSizedBuffer(dAtA []byte) (int, error) { dAtA[i] = 0xc2 } } - n635, err635 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.PreviousIdentityExpires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.PreviousIdentityExpires):]) - if err635 != nil { - return 0, err635 + n638, err638 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.PreviousIdentityExpires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.PreviousIdentityExpires):]) + if err638 != nil { + return 0, err638 } - i -= n635 - i = encodeVarintEvents(dAtA, i, uint64(n635)) + i -= n638 + i = encodeVarintEvents(dAtA, i, uint64(n638)) i-- dAtA[i] = 0x1 i-- @@ -30156,12 +30194,12 @@ func (m *Identity) MarshalToSizedBuffer(dAtA []byte) (int, error) { i-- dAtA[i] = 0x4a } - n639, err639 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) - if err639 != nil { - return 0, err639 + n642, err642 := github_com_gogo_protobuf_types.StdTimeMarshalTo(m.Expires, dAtA[i-github_com_gogo_protobuf_types.SizeOfStdTime(m.Expires):]) + if err642 != nil { + return 0, err642 } - i -= n639 - i = encodeVarintEvents(dAtA, i, uint64(n639)) + i -= n642 + i = encodeVarintEvents(dAtA, i, uint64(n642)) i-- dAtA[i] = 0x42 if len(m.KubernetesUsers) > 0 { @@ -37651,6 +37689,10 @@ func (m *PortForward) Size() (n int) { if l > 0 { n += 1 + l + sovEvents(uint64(l)) } + l = m.KubernetesClusterMetadata.Size() + n += 1 + l + sovEvents(uint64(l)) + l = m.KubernetesPodMetadata.Size() + n += 1 + l + sovEvents(uint64(l)) if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -37865,6 +37907,8 @@ func (m *Subsystem) Size() (n int) { if l > 0 { n += 1 + l + sovEvents(uint64(l)) } + l = m.ServerMetadata.Size() + n += 1 + l + sovEvents(uint64(l)) if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) } @@ -56188,6 +56232,72 @@ func (m *PortForward) Unmarshal(dAtA []byte) error { } m.Addr = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field KubernetesClusterMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.KubernetesClusterMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field KubernetesPodMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.KubernetesPodMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipEvents(dAtA[iNdEx:]) @@ -58045,6 +58155,39 @@ func (m *Subsystem) Unmarshal(dAtA []byte) error { } m.Error = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ServerMetadata", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowEvents + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthEvents + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthEvents + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ServerMetadata.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipEvents(dAtA[iNdEx:]) diff --git a/api/utils/keys/yubikey.go b/api/utils/keys/yubikey.go index 3b38c43f4d0f1..609a88f4c762f 100644 --- a/api/utils/keys/yubikey.go +++ b/api/utils/keys/yubikey.go @@ -51,10 +51,45 @@ const ( PIVCardTypeYubiKey = "yubikey" ) +// Cache keys to prevent reconnecting to PIV module to discover a known key. +// +// Additionally, this allows the program to cache the key's PIN (if applicable) +// after the user is prompted the first time, preventing redundant prompts when +// the key is retrieved multiple times. +// +// Note: in most cases the connection caches the PIN itself, and connections can be +// reclaimed before they are fully closed (within a few seconds). However, in uncommon +// setups, this PIN caching does not actually work as expected, so we handle it instead. +// See https://github.com/go-piv/piv-go/issues/47 +var ( + cachedKeys = map[piv.Slot]*PrivateKey{} + cachedKeysMu sync.Mutex +) + // getOrGenerateYubiKeyPrivateKey connects to a connected yubiKey and gets a private key // matching the given touch requirement. This private key will either be newly generated // or previously generated by a Teleport client and reused. func getOrGenerateYubiKeyPrivateKey(ctx context.Context, requiredKeyPolicy PrivateKeyPolicy, slot PIVSlot) (*PrivateKey, error) { + cachedKeysMu.Lock() + defer cachedKeysMu.Unlock() + + // Get the default PIV slot or the piv slot requested. + pivSlot, err := GetDefaultKeySlot(requiredKeyPolicy) + if err != nil { + return nil, trace.Wrap(err) + } + if slot != "" { + pivSlot, err = slot.parse() + if err != nil { + return nil, trace.Wrap(err) + } + } + + // If the program has already retrieved and cached this key, return it. + if key, ok := cachedKeys[pivSlot]; ok && key.GetPrivateKeyPolicy() == requiredKeyPolicy { + return key, nil + } + // Use the first yubiKey we find. y, err := FindYubiKey(0) if err != nil { @@ -78,15 +113,9 @@ func getOrGenerateYubiKeyPrivateKey(ctx context.Context, requiredKeyPolicy Priva return nil } - // If a specific slot was specified, use that. Otherwise, check for a key in the + // If a custom slot was not specified, check for a key in the // default slot for the given policy and generate a new one if needed. - var pivSlot piv.Slot - if slot != "" { - pivSlot, err = slot.parse() - if err != nil { - return nil, trace.Wrap(err) - } - } else { + if slot == "" { pivSlot, err = GetDefaultKeySlot(requiredKeyPolicy) if err != nil { return nil, trace.Wrap(err) @@ -214,6 +243,9 @@ type yubiKeyPrivateKeyData struct { } func parseYubiKeyPrivateKeyData(keyDataBytes []byte) (*PrivateKey, error) { + cachedKeysMu.Lock() + defer cachedKeysMu.Unlock() + var keyData yubiKeyPrivateKeyData if err := json.Unmarshal(keyDataBytes, &keyData); err != nil { return nil, trace.Wrap(err) @@ -224,6 +256,11 @@ func parseYubiKeyPrivateKeyData(keyDataBytes []byte) (*PrivateKey, error) { return nil, trace.Wrap(err) } + // If the program has already retrieved and cached this key, return it. + if key, ok := cachedKeys[pivSlot]; ok { + return key, nil + } + y, err := FindYubiKey(keyData.SerialNumber) if err != nil { return nil, trace.Wrap(err) @@ -242,16 +279,19 @@ func (y *YubiKeyPrivateKey) Public() crypto.PublicKey { return y.slotCert.PublicKey } +// WarmupHardwareKey performs a bogus sign() call to prompt the user for +// a PIN/touch (if needed). +func (y *YubiKeyPrivateKey) WarmupHardwareKey(ctx context.Context) error { + hash := sha256.Sum256(make([]byte, 256)) + _, err := y.sign(ctx, rand.Reader, hash[:], crypto.SHA256) + return trace.Wrap(err, "failed to access a YubiKey private key") +} + // Sign implements crypto.Signer. func (y *YubiKeyPrivateKey) Sign(rand io.Reader, digest []byte, opts crypto.SignerOpts) ([]byte, error) { ctx, cancel := context.WithCancel(context.Background()) defer cancel() - // To prevent concurrent calls to Sign from failing due to PIV only handling a - // single connection, use a lock to queue through signature requests one at a time. - y.signMux.Lock() - defer y.signMux.Unlock() - signature, err := y.sign(ctx, rand, digest, opts) if err != nil { return nil, trace.Wrap(err) @@ -260,12 +300,38 @@ func (y *YubiKeyPrivateKey) Sign(rand io.Reader, digest []byte, opts crypto.Sign return signature, nil } +// YubiKeys require touch when signing with a private key that requires touch. +// Unfortunately, there is no good way to check whether touch is cached by the +// PIV module at a given time. In order to require touch only when needed, we +// prompt for touch after a short delay when we expect the request would succeed +// if touch were not required. +// +// There are some X factors which determine how long a request may take, such as the +// YubiKey model and firmware version, so the delays below may need to be adjusted to +// suit more models. The durations mentioned below were retrieved from testing with a +// YubiKey 5 nano (5.2.7) and a YubiKey NFC (5.4.3). +const ( + // piv.ECDSAPrivateKey.Sign consistently takes ~70 milliseconds. However, 200ms + // should be imperceptible the the user and should avoid misfired prompts for + // slower cards (if there are any). + signTouchPromptDelay = time.Millisecond * 200 +) + func (y *YubiKeyPrivateKey) sign(ctx context.Context, rand io.Reader, digest []byte, opts crypto.SignerOpts) ([]byte, error) { - yk, err := y.open() + // To prevent concurrent calls to sign from failing due to PIV only handling a + // single connection, use a lock to queue through signature requests one at a time. + y.signMux.Lock() + defer y.signMux.Unlock() + + // Lock the connection for the entire duration of the sign + // process. Without this, the connection will be released, + // leading to a failure when providing PIN or touch input: + // "verify pin: transmitting request: the supplied handle was invalid". + release, err := y.connect() if err != nil { return nil, trace.Wrap(err) } - defer yk.Close() + defer release() var touchPromptDelayTimer *time.Timer if y.attestation.TouchPolicy != piv.TouchPolicyNever { @@ -315,7 +381,7 @@ func (y *YubiKeyPrivateKey) sign(ctx context.Context, rand io.Reader, digest []b manualRetryWithPIN = true } - privateKey, err := yk.PrivateKey(y.pivSlot, y.slotCert.PublicKey, auth) + privateKey, err := y.privateKey(y.pivSlot, y.Public(), auth) if err != nil { return nil, trace.Wrap(err) } @@ -329,7 +395,7 @@ func (y *YubiKeyPrivateKey) sign(ctx context.Context, rand io.Reader, digest []b // The piv-go library wraps error codes like this with a user readable message: "security status not satisfied". const pivGenericAuthErrCodeString = "6982" - signature, err := signer.Sign(rand, digest, opts) + signature, err := abandonableSign(ctx, signer, rand, digest, opts) switch { case err == nil: return signature, nil @@ -338,16 +404,48 @@ func (y *YubiKeyPrivateKey) sign(ctx context.Context, rand io.Reader, digest []b if err != nil { return nil, trace.Wrap(err) } - if err := yk.VerifyPIN(pin); err != nil { + if err := y.verifyPIN(pin); err != nil { return nil, trace.Wrap(err) } - signature, err := signer.Sign(rand, digest, opts) + signature, err := abandonableSign(ctx, signer, rand, digest, opts) return signature, trace.Wrap(err) default: return nil, trace.Wrap(err) } } +// abandonableSign is a wrapper around signer.Sign. +// It enhances the functionality of signer.Sign by allowing the caller to stop +// waiting for the result if the provided context is canceled. +// It is especially important for WarmupHardwareKey, +// where waiting for the user providing a PIN/touch could block program termination. +// Important: this function only abandons the signer.Sign result, doesn't cancel it. +func abandonableSign(ctx context.Context, signer crypto.Signer, rand io.Reader, digest []byte, opts crypto.SignerOpts) ([]byte, error) { + type signResult struct { + signature []byte + err error + } + + signResultCh := make(chan signResult) + go func() { + if err := ctx.Err(); err != nil { + return + } + signature, err := signer.Sign(rand, digest, opts) + select { + case <-ctx.Done(): + case signResultCh <- signResult{signature: signature, err: trace.Wrap(err)}: + } + }() + + select { + case <-ctx.Done(): + return nil, ctx.Err() + case result := <-signResultCh: + return result.signature, trace.Wrap(result.err) + } +} + func (y *YubiKeyPrivateKey) toPrivateKey() (*PrivateKey, error) { keyPEM, err := y.keyPEM() if err != nil { @@ -412,39 +510,37 @@ func GetPrivateKeyPolicyFromAttestation(att *piv.Attestation) PrivateKeyPolicy { // YubiKey is a specific YubiKey PIV card. type YubiKey struct { - // card is a reader name used to find and connect to this yubiKey. - // This value may change between OS's, or with other system changes. - card string + // conn is a shared YubiKey PIV connection. + // + // PIV connections claim an exclusive lock on the PIV module until closed. + // In order to improve connection sharing for this program without locking + // out other programs during extended program executions (like "tsh proxy ssh"), + // this connections is opportunistically formed and released after being + // unused for a few seconds. + *sharedPIVConnection // serialNumber is the yubiKey's 8 digit serial number. serialNumber uint32 } func newYubiKey(card string) (*YubiKey, error) { - y := &YubiKey{card: card} - - yk, err := y.open() - if err != nil { - return nil, trace.Wrap(err) + y := &YubiKey{ + sharedPIVConnection: &sharedPIVConnection{ + card: card, + }, } - defer yk.Close() - y.serialNumber, err = yk.Serial() + serialNumber, err := y.serial() if err != nil { return nil, trace.Wrap(err) } + y.serialNumber = serialNumber return y, nil } // Reset resets the YubiKey PIV module to default settings. func (y *YubiKey) Reset() error { - yk, err := y.open() - if err != nil { - return trace.Wrap(err) - } - defer yk.Close() - - err = yk.Reset() + err := y.reset() return trace.Wrap(err) } @@ -469,41 +565,23 @@ func (y *YubiKey) generatePrivateKeyAndCert(slot piv.Slot, requiredKeyPolicy Pri // slot is in used by a Teleport Client and is not fit to be used in cryptographic operations. // This cert is also useful for users to discern where the key came with tools like `ykman piv info`. func (y *YubiKey) SetMetadataCertificate(slot piv.Slot, subject pkix.Name) error { - yk, err := y.open() - if err != nil { - return trace.Wrap(err) - } - defer yk.Close() - cert, err := SelfSignedMetadataCertificate(subject) if err != nil { return trace.Wrap(err) } - err = yk.SetCertificate(piv.DefaultManagementKey, slot, cert) + err = y.setCertificate(piv.DefaultManagementKey, slot, cert) return trace.Wrap(err) } // getCertificate gets a certificate from the given PIV slot. func (y *YubiKey) getCertificate(slot piv.Slot) (*x509.Certificate, error) { - yk, err := y.open() - if err != nil { - return nil, trace.Wrap(err) - } - defer yk.Close() - - cert, err := yk.Certificate(slot) + cert, err := y.certificate(slot) return cert, trace.Wrap(err) } // generatePrivateKey generates a new private key in the given PIV slot. func (y *YubiKey) generatePrivateKey(slot piv.Slot, requiredKeyPolicy PrivateKeyPolicy) error { - yk, err := y.open() - if err != nil { - return trace.Wrap(err) - } - defer yk.Close() - touchPolicy, pinPolicy, err := getKeyPolicies(requiredKeyPolicy) if err != nil { return trace.Wrap(err) @@ -515,26 +593,20 @@ func (y *YubiKey) generatePrivateKey(slot piv.Slot, requiredKeyPolicy PrivateKey TouchPolicy: touchPolicy, } - _, err = yk.GenerateKey(piv.DefaultManagementKey, slot, opts) + _, err = y.generateKey(piv.DefaultManagementKey, slot, opts) return trace.Wrap(err) } // getPrivateKey gets an existing private key from the given PIV slot. func (y *YubiKey) getPrivateKey(slot piv.Slot) (*PrivateKey, error) { - yk, err := y.open() - if err != nil { - return nil, trace.Wrap(err) - } - defer yk.Close() - - slotCert, err := yk.Attest(slot) + slotCert, err := y.attest(slot) if errors.Is(err, piv.ErrNotFound) { return nil, trace.NotFound("private key in YubiKey PIV slot %q not found.", slot.String()) } else if err != nil { return nil, trace.Wrap(err) } - attCert, err := yk.AttestationCertificate() + attCert, err := y.attestationCertificate() if err != nil { return nil, trace.Wrap(err) } @@ -562,18 +634,13 @@ func (y *YubiKey) getPrivateKey(slot piv.Slot) (*PrivateKey, error) { return nil, trace.Wrap(err) } + cachedKeys[slot] = key return key, nil } -// SetPin sets the YubiKey PIV PIN. This doesn't require user interaction like touch, just the correct old PIN. +// SetPIN sets the YubiKey PIV PIN. This doesn't require user interaction like touch, just the correct old PIN. func (y *YubiKey) SetPIN(oldPin, newPin string) error { - yk, err := y.open() - if err != nil { - return trace.Wrap(err) - } - defer yk.Close() - - err = yk.SetPIN(oldPin, newPin) + err := y.setPIN(oldPin, newPin) return trace.Wrap(err) } @@ -586,29 +653,56 @@ func (y *YubiKey) checkOrSetPIN(ctx context.Context) error { return trace.Wrap(err) } - yk, err := y.open() - if err != nil { - return trace.Wrap(err) - } - defer yk.Close() - switch pin { case piv.DefaultPIN: fmt.Fprintf(os.Stderr, "The default PIN %q is not supported.\n", piv.DefaultPIN) fallthrough case "": - if pin, err = setPINAndPUKFromDefault(ctx, yk); err != nil { + if pin, err = y.setPINAndPUKFromDefault(ctx); err != nil { return trace.Wrap(err) } } - return trace.Wrap(yk.VerifyPIN(pin)) + return trace.Wrap(y.verifyPIN(pin)) } -// open a connection to YubiKey PIV module. The returned connection should be closed once -// it's been used. The YubiKey PIV module itself takes some additional time to handle closed +type sharedPIVConnection struct { + // card is a reader name used to find and connect to this yubiKey. + // This value may change between OS's, or with other system changes. + card string + + // conn is the shared PIV connection. + conn *piv.YubiKey + mu sync.Mutex + activeConnections int +} + +// connect establishes a connection to a YubiKey PIV module and returns a release function. +// The release function should be called to properly close the shared connection. +// The connection is not immediately terminated, allowing other callers to +// use it before it's released. +// The YubiKey PIV module itself takes some additional time to handle closed // connections, so we use a retry loop to give the PIV module time to close prior connections. -func (y *YubiKey) open() (yk *piv.YubiKey, err error) { +func (c *sharedPIVConnection) connect() (func(), error) { + c.mu.Lock() + defer c.mu.Unlock() + + release := func() { + c.mu.Lock() + defer c.mu.Unlock() + + c.activeConnections-- + if c.activeConnections == 0 { + c.conn.Close() + c.conn = nil + } + } + + if c.conn != nil { + c.activeConnections++ + return release, nil + } + linearRetry, err := retryutils.NewLinear(retryutils.LinearConfig{ // If a PIV connection has just been closed, it take ~5 ms to become // available to new connections. For this reason, we initially wait a @@ -629,7 +723,7 @@ func (y *YubiKey) open() (yk *piv.YubiKey, err error) { defer cancel() err = linearRetry.For(retryCtx, func() error { - yk, err = piv.Open(y.card) + c.conn, err = piv.Open(c.card) if err != nil && !isRetryError(err) { return retryutils.PermanentRetryError(err) } @@ -648,146 +742,128 @@ func (y *YubiKey) open() (yk *piv.YubiKey, err error) { } else if err != nil { return nil, trace.Wrap(err) } - return yk, nil -} -func isRetryError(err error) bool { - const retryError = "connecting to smart card: the smart card cannot be accessed because of other connections outstanding" - return strings.Contains(err.Error(), retryError) + c.activeConnections++ + return release, nil } -// FindYubiKey finds a yubiKey PIV card by serial number. If no serial -// number is provided, the first yubiKey found will be returned. -func FindYubiKey(serialNumber uint32) (*YubiKey, error) { - yubiKeyCards, err := findYubiKeyCards() +func (c *sharedPIVConnection) privateKey(slot piv.Slot, public crypto.PublicKey, auth piv.KeyAuth) (crypto.PrivateKey, error) { + release, err := c.connect() if err != nil { return nil, trace.Wrap(err) } + defer release() + privateKey, err := c.conn.PrivateKey(slot, public, auth) + return privateKey, trace.Wrap(err) +} - if len(yubiKeyCards) == 0 { - if serialNumber != 0 { - return nil, trace.ConnectionProblem(nil, "no YubiKey device connected with serial number %d", serialNumber) - } - return nil, trace.ConnectionProblem(nil, "no YubiKey device connected") +func (c *sharedPIVConnection) serial() (uint32, error) { + release, err := c.connect() + if err != nil { + return 0, trace.Wrap(err) } + defer release() + serial, err := c.conn.Serial() + return serial, trace.Wrap(err) +} - for _, card := range yubiKeyCards { - y, err := newYubiKey(card) - if err != nil { - return nil, trace.Wrap(err) - } - - if serialNumber == 0 || y.serialNumber == serialNumber { - return y, nil - } +func (c *sharedPIVConnection) reset() error { + release, err := c.connect() + if err != nil { + return trace.Wrap(err) } - - return nil, trace.ConnectionProblem(nil, "no YubiKey device connected with serial number %d", serialNumber) + defer release() + // Clear cached keys. + cachedKeys = make(map[piv.Slot]*PrivateKey) + return trace.Wrap(c.conn.Reset()) } -// findYubiKeyCards returns a list of connected yubiKey PIV card names. -func findYubiKeyCards() ([]string, error) { - cards, err := piv.Cards() +func (c *sharedPIVConnection) setCertificate(key [24]byte, slot piv.Slot, cert *x509.Certificate) error { + release, err := c.connect() if err != nil { - return nil, trace.Wrap(err) + return trace.Wrap(err) } + defer release() + return trace.Wrap(c.conn.SetCertificate(key, slot, cert)) +} - var yubiKeyCards []string - for _, card := range cards { - if strings.Contains(strings.ToLower(card), PIVCardTypeYubiKey) { - yubiKeyCards = append(yubiKeyCards, card) - } +func (c *sharedPIVConnection) certificate(slot piv.Slot) (*x509.Certificate, error) { + release, err := c.connect() + if err != nil { + return nil, trace.Wrap(err) } - - return yubiKeyCards, nil + defer release() + cert, err := c.conn.Certificate(slot) + return cert, trace.Wrap(err) } -func (s PIVSlot) validate() error { - _, err := s.parse() - return trace.Wrap(err) +func (c *sharedPIVConnection) generateKey(key [24]byte, slot piv.Slot, opts piv.Key) (crypto.PublicKey, error) { + release, err := c.connect() + if err != nil { + return nil, trace.Wrap(err) + } + defer release() + pubKey, err := c.conn.GenerateKey(key, slot, opts) + return pubKey, trace.Wrap(err) } -func (s PIVSlot) parse() (piv.Slot, error) { - slotKey, err := strconv.ParseUint(string(s), 16, 32) +func (c *sharedPIVConnection) attest(slot piv.Slot) (*x509.Certificate, error) { + release, err := c.connect() if err != nil { - return piv.Slot{}, trace.Wrap(err) + return nil, trace.Wrap(err) } - - return parsePIVSlot(uint32(slotKey)) + defer release() + cert, err := c.conn.Attest(slot) + return cert, trace.Wrap(err) } -func parsePIVSlotString(slotKeyString string) (piv.Slot, error) { - slotKey, err := strconv.ParseUint(slotKeyString, 16, 32) +func (c *sharedPIVConnection) attestationCertificate() (*x509.Certificate, error) { + release, err := c.connect() if err != nil { - return piv.Slot{}, trace.Wrap(err) + return nil, trace.Wrap(err) } - - return parsePIVSlot(uint32(slotKey)) + defer release() + cert, err := c.conn.AttestationCertificate() + return cert, trace.Wrap(err) } -func parsePIVSlot(slotKey uint32) (piv.Slot, error) { - switch slotKey { - case piv.SlotAuthentication.Key: - return piv.SlotAuthentication, nil - case piv.SlotSignature.Key: - return piv.SlotSignature, nil - case piv.SlotKeyManagement.Key: - return piv.SlotKeyManagement, nil - case piv.SlotCardAuthentication.Key: - return piv.SlotCardAuthentication, nil - default: - retiredSlot, ok := piv.RetiredKeyManagementSlot(slotKey) - if !ok { - return piv.Slot{}, trace.BadParameter("slot %X does not exist", slotKey) - } - return retiredSlot, nil +func (c *sharedPIVConnection) setPIN(oldPIN string, newPIN string) error { + release, err := c.connect() + if err != nil { + return trace.Wrap(err) } + defer release() + return trace.Wrap(c.conn.SetPIN(oldPIN, newPIN)) } -// certOrgName is used to identify Teleport Client self-signed certificates stored in yubiKey PIV slots. -const certOrgName = "teleport" - -func SelfSignedMetadataCertificate(subject pkix.Name) (*x509.Certificate, error) { - priv, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) +func (c *sharedPIVConnection) setPUK(oldPUK string, newPUK string) error { + release, err := c.connect() if err != nil { - return nil, trace.Wrap(err) + return trace.Wrap(err) } + defer release() + return trace.Wrap(c.conn.SetPUK(oldPUK, newPUK)) +} - serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128) - serialNumber, err := rand.Int(rand.Reader, serialNumberLimit) // see crypto/tls/generate_cert.go +func (c *sharedPIVConnection) unblock(puk string, newPIN string) error { + release, err := c.connect() if err != nil { - return nil, trace.Wrap(err) - } - cert := &x509.Certificate{ - SerialNumber: serialNumber, - Subject: subject, - PublicKey: priv.Public(), + return trace.Wrap(err) } + defer release() + return trace.Wrap(c.conn.Unblock(puk, newPIN)) +} - if cert.Raw, err = x509.CreateCertificate(rand.Reader, cert, cert, priv.Public(), priv); err != nil { - return nil, trace.Wrap(err) +func (c *sharedPIVConnection) verifyPIN(pin string) error { + release, err := c.connect() + if err != nil { + return trace.Wrap(err) } - return cert, nil + defer release() + return trace.Wrap(c.conn.VerifyPIN(pin)) } -// YubiKeys require touch when signing with a private key that requires touch. -// Unfortunately, there is no good way to check whether touch is cached by the -// PIV module at a given time. In order to require touch only when needed, we -// prompt for touch after a short delay when we expect the request would succeed -// if touch were not required. -// -// There are some X factors which determine how long a request may take, such as the -// YubiKey model and firmware version, so the delays below may need to be adjusted to -// suit more models. The durations mentioned below were retrieved from testing with a -// YubiKey 5 nano (5.2.7) and a YubiKey NFC (5.4.3). -const ( - // piv.ECDSAPrivateKey.Sign consistently takes ~70 milliseconds. However, 200ms - // should be imperceptible the the user and should avoid misfired prompts for - // slower cards (if there are any). - signTouchPromptDelay = time.Millisecond * 200 -) - -func setPINAndPUKFromDefault(ctx context.Context, yk *piv.YubiKey) (string, error) { +func (c *sharedPIVConnection) setPINAndPUKFromDefault(ctx context.Context) (string, error) { // YubiKey requires that PIN and PUK be 6-8 characters. isValid := func(pin string) bool { return len(pin) >= 6 && len(pin) <= 8 @@ -860,7 +936,7 @@ func setPINAndPUKFromDefault(ctx context.Context, yk *piv.YubiKey) (string, erro continue } - if err := yk.SetPUK(piv.DefaultPUK, newPUK); err != nil { + if err := c.setPUK(piv.DefaultPUK, newPUK); err != nil { return "", trace.Wrap(err) } @@ -869,9 +945,120 @@ func setPINAndPUKFromDefault(ctx context.Context, yk *piv.YubiKey) (string, erro } } - if err := yk.Unblock(puk, pin); err != nil { + if err := c.unblock(puk, pin); err != nil { return "", trace.Wrap(err) } return pin, nil } + +func isRetryError(err error) bool { + const retryError = "connecting to smart card: the smart card cannot be accessed because of other connections outstanding" + return strings.Contains(err.Error(), retryError) +} + +// FindYubiKey finds a yubiKey PIV card by serial number. If no serial +// number is provided, the first yubiKey found will be returned. +func FindYubiKey(serialNumber uint32) (*YubiKey, error) { + yubiKeyCards, err := findYubiKeyCards() + if err != nil { + return nil, trace.Wrap(err) + } + + if len(yubiKeyCards) == 0 { + if serialNumber != 0 { + return nil, trace.ConnectionProblem(nil, "no YubiKey device connected with serial number %d", serialNumber) + } + return nil, trace.ConnectionProblem(nil, "no YubiKey device connected") + } + + for _, card := range yubiKeyCards { + y, err := newYubiKey(card) + if err != nil { + return nil, trace.Wrap(err) + } + + if serialNumber == 0 || y.serialNumber == serialNumber { + return y, nil + } + } + + return nil, trace.ConnectionProblem(nil, "no YubiKey device connected with serial number %d", serialNumber) +} + +// findYubiKeyCards returns a list of connected yubiKey PIV card names. +func findYubiKeyCards() ([]string, error) { + cards, err := piv.Cards() + if err != nil { + return nil, trace.Wrap(err) + } + + var yubiKeyCards []string + for _, card := range cards { + if strings.Contains(strings.ToLower(card), PIVCardTypeYubiKey) { + yubiKeyCards = append(yubiKeyCards, card) + } + } + + return yubiKeyCards, nil +} + +func (s PIVSlot) validate() error { + _, err := s.parse() + return trace.Wrap(err) +} + +func (s PIVSlot) parse() (piv.Slot, error) { + slotKey, err := strconv.ParseUint(string(s), 16, 32) + if err != nil { + return piv.Slot{}, trace.Wrap(err) + } + + return parsePIVSlot(uint32(slotKey)) +} + +func parsePIVSlot(slotKey uint32) (piv.Slot, error) { + switch slotKey { + case piv.SlotAuthentication.Key: + return piv.SlotAuthentication, nil + case piv.SlotSignature.Key: + return piv.SlotSignature, nil + case piv.SlotKeyManagement.Key: + return piv.SlotKeyManagement, nil + case piv.SlotCardAuthentication.Key: + return piv.SlotCardAuthentication, nil + default: + retiredSlot, ok := piv.RetiredKeyManagementSlot(slotKey) + if !ok { + return piv.Slot{}, trace.BadParameter("slot %X does not exist", slotKey) + } + return retiredSlot, nil + } +} + +// certOrgName is used to identify Teleport Client self-signed certificates stored in yubiKey PIV slots. +const certOrgName = "teleport" + +func SelfSignedMetadataCertificate(subject pkix.Name) (*x509.Certificate, error) { + priv, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) + if err != nil { + return nil, trace.Wrap(err) + } + + serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128) + serialNumber, err := rand.Int(rand.Reader, serialNumberLimit) // see crypto/tls/generate_cert.go + if err != nil { + return nil, trace.Wrap(err) + } + cert := &x509.Certificate{ + SerialNumber: serialNumber, + Subject: subject, + PublicKey: priv.Public(), + } + + if cert.Raw, err = x509.CreateCertificate(rand.Reader, cert, cert, priv.Public(), priv); err != nil { + return nil, trace.Wrap(err) + } + return cert, nil +} + diff --git a/api/utils/keys/yubikey_test.go b/api/utils/keys/yubikey_test.go index 2dacee96bf28e..4e49315a56bad 100644 --- a/api/utils/keys/yubikey_test.go +++ b/api/utils/keys/yubikey_test.go @@ -45,7 +45,11 @@ func TestGetYubiKeyPrivateKey_Interactive(t *testing.T) { fmt.Println("This test is interactive, tap your YubiKey when prompted.") ctx := context.Background() - t.Cleanup(func() { resetYubikey(t) }) + + y, err := keys.FindYubiKey(0) + require.NoError(t, err) + + t.Cleanup(func() { resetYubikey(t, y) }) for _, policy := range []keys.PrivateKeyPolicy{ keys.PrivateKeyPolicyHardwareKey, @@ -56,8 +60,8 @@ func TestGetYubiKeyPrivateKey_Interactive(t *testing.T) { for _, customSlot := range []bool{true, false} { t.Run(fmt.Sprintf("policy:%q", policy), func(t *testing.T) { t.Run(fmt.Sprintf("custom slot:%v", customSlot), func(t *testing.T) { - resetYubikey(t) - setupPINPrompt(t) + resetYubikey(t, y) + setupPINPrompt(t, y) var slot keys.PIVSlot = "" if customSlot { @@ -100,7 +104,11 @@ func TestOverwritePrompt(t *testing.T) { } ctx := context.Background() - t.Cleanup(func() { resetYubikey(t) }) + + y, err := keys.FindYubiKey(0) + require.NoError(t, err) + + t.Cleanup(func() { resetYubikey(t, y) }) // Use a custom slot. pivSlot, err := keys.GetDefaultKeySlot(keys.PrivateKeyPolicyHardwareKeyTouch) @@ -119,11 +127,9 @@ func TestOverwritePrompt(t *testing.T) { } t.Run("invalid metadata cert", func(t *testing.T) { - resetYubikey(t) + resetYubikey(t, y) // Set a non-teleport certificate in the slot. - y, err := keys.FindYubiKey(0) - require.NoError(t, err) err = y.SetMetadataCertificate(pivSlot, pkix.Name{Organization: []string{"not-teleport"}}) require.NoError(t, err) @@ -131,7 +137,7 @@ func TestOverwritePrompt(t *testing.T) { }) t.Run("invalid key policies", func(t *testing.T) { - resetYubikey(t) + resetYubikey(t, y) // Generate a key that does not require touch in the slot that Teleport expects to require touch. _, err := keys.GetYubiKeyPrivateKey(ctx, keys.PrivateKeyPolicyHardwareKey, keys.PIVSlot(pivSlot.String())) @@ -142,17 +148,13 @@ func TestOverwritePrompt(t *testing.T) { } // resetYubikey connects to the first yubiKey and resets it to defaults. -func resetYubikey(t *testing.T) { +func resetYubikey(t *testing.T, y *keys.YubiKey) { t.Helper() - y, err := keys.FindYubiKey(0) - require.NoError(t, err) require.NoError(t, y.Reset()) } -func setupPINPrompt(t *testing.T) { +func setupPINPrompt(t *testing.T, y *keys.YubiKey) { t.Helper() - y, err := keys.FindYubiKey(0) - require.NoError(t, err) // Set pin for tests. const testPIN = "123123" diff --git a/api/version.go b/api/version.go index 5a491d8682c7b..6d5b2e578d05c 100644 --- a/api/version.go +++ b/api/version.go @@ -3,6 +3,6 @@ package api import "github.com/coreos/go-semver/semver" -const Version = "15.4.21" +const Version = "15.4.23" var SemVersion = semver.New(Version) diff --git a/build.assets/macos/tsh/tsh.app/Contents/Info.plist b/build.assets/macos/tsh/tsh.app/Contents/Info.plist index f770156308c21..27528e22384c4 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 - 15.4.21 + 15.4.23 CFBundleSupportedPlatforms MacOSX CFBundleVersion - 15.4.21 + 15.4.23 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 a20bb79aefab9..ef93d20cb6cd7 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 - 15.4.21 + 15.4.23 CFBundleSupportedPlatforms MacOSX CFBundleVersion - 15.4.21 + 15.4.23 DTCompiler com.apple.compilers.llvm.clang.1_0 DTPlatformBuild diff --git a/build.assets/versions.mk b/build.assets/versions.mk index 78b9d1e7a4f06..72240f4c4c1d9 100644 --- a/build.assets/versions.mk +++ b/build.assets/versions.mk @@ -3,10 +3,10 @@ # Keep versions in sync with devbox.json, when applicable. # Sync with devbox.json. -GOLANG_VERSION ?= go1.22.9 +GOLANG_VERSION ?= go1.22.10 GOLANGCI_LINT_VERSION ?= v1.61.0 -NODE_VERSION ?= 20.17.0 +NODE_VERSION ?= 20.18.0 # Run lint-rust check locally before merging code after you bump this. RUST_VERSION ?= 1.77.0 diff --git a/docs/config.json b/docs/config.json index 24be737920706..c36e643417b26 100644 --- a/docs/config.json +++ b/docs/config.json @@ -134,7 +134,7 @@ "aws_secret_access_key": "zyxw9876-this-is-an-example" }, "cloud": { - "version": "16.4.3", + "version": "16.4.8", "major_version": "16", "sla": { "monthly_percentage": "99.9%", @@ -179,18 +179,18 @@ "teleport": { "git": "api/14.0.0-gd1e081e", "major_version": "15", - "version": "15.4.21", + "version": "15.4.23", "url": "teleport.example.com", "golang": "1.21", "plugin": { - "version": "15.4.21" + "version": "15.4.23" }, "helm_repo_url": "https://charts.releases.teleport.dev", - "latest_oss_docker_image": "public.ecr.aws/gravitational/teleport-distroless:15.4.21", - "latest_oss_debug_docker_image": "public.ecr.aws/gravitational/teleport-distroless-debug:15.4.21", - "latest_ent_docker_image": "public.ecr.aws/gravitational/teleport-ent-distroless:15.4.21", - "latest_ent_debug_docker_image": "public.ecr.aws/gravitational/teleport-ent-distroless-debug:15.4.21", - "teleport_install_script_url": "https://cdn.teleport.dev/install-v15.4.21.sh" + "latest_oss_docker_image": "public.ecr.aws/gravitational/teleport-distroless:15.4.23", + "latest_oss_debug_docker_image": "public.ecr.aws/gravitational/teleport-distroless-debug:15.4.23", + "latest_ent_docker_image": "public.ecr.aws/gravitational/teleport-ent-distroless:15.4.23", + "latest_ent_debug_docker_image": "public.ecr.aws/gravitational/teleport-ent-distroless-debug:15.4.23", + "teleport_install_script_url": "https://cdn.teleport.dev/install-v15.4.23.sh" }, "terraform": { "version": "1.0.0" diff --git a/docs/cspell.json b/docs/cspell.json index 16c02f3f03521..07081b37e4245 100644 --- a/docs/cspell.json +++ b/docs/cspell.json @@ -82,6 +82,7 @@ "GODEBUG", "GOMAXPROCS", "GSLB", + "GSSAPI", "Gbps", "Ghostunnel", "Goland", @@ -359,7 +360,7 @@ "certificatekey", "certificatesigningrequest", "certutil", - "cfhunter", + "cfpassword", "cfsdf", "cgroups", "cgroupv", @@ -566,6 +567,7 @@ "jumphost", "jwks", "jwkset", + "keepalive", "keepalives", "keyfile", "keymap", @@ -931,6 +933,7 @@ "unconfigured", "uninstallation", "uniqueid", + "unmanaged", "unmarshal", "unprefixed", "unregistering", diff --git a/docs/img/sso/onelogin/onelogin-saml-1a.png b/docs/img/sso/onelogin/onelogin-saml-1a.png index 61fe83b36f4b0..9de9aa229b522 100644 Binary files a/docs/img/sso/onelogin/onelogin-saml-1a.png and b/docs/img/sso/onelogin/onelogin-saml-1a.png differ diff --git a/docs/img/sso/onelogin/teleport.png b/docs/img/sso/onelogin/teleport.png index a8e29af374473..244c59b0d8260 100644 Binary files a/docs/img/sso/onelogin/teleport.png and b/docs/img/sso/onelogin/teleport.png differ diff --git a/docs/img/sso/onelogin/teleportlogo@2x.png b/docs/img/sso/onelogin/teleportlogo@2x.png index 7d83ede01ca40..c019d21091095 100644 Binary files a/docs/img/sso/onelogin/teleportlogo@2x.png and b/docs/img/sso/onelogin/teleportlogo@2x.png differ diff --git a/docs/pages/admin-guides/access-controls/access-request-plugins/ssh-approval-jira.mdx b/docs/pages/admin-guides/access-controls/access-request-plugins/ssh-approval-jira.mdx index a4fa32fe54826..eb913d51cf278 100644 --- a/docs/pages/admin-guides/access-controls/access-request-plugins/ssh-approval-jira.mdx +++ b/docs/pages/admin-guides/access-controls/access-request-plugins/ssh-approval-jira.mdx @@ -137,27 +137,6 @@ unexpected ways. Remove all other columns and statuses. Click **Back to board** to review your changes. -### Set up a request ID field - -The Teleport Jira plugin expects tasks in the Teleport Access Requests project -to include a field called `teleportAccessRequestId`, which it uses to track -individual Access Requests. This prevents users from tampering with or forging -Access Requests. - -To set up the `teleportAccessRequestId` field, click **Project settings** on the -left navigation bar, then click **Issues** -> **Fields**. - -In the **Actions** menu, click **Edit fields**. Click the **Custom fields** tab -in the left sidebar, then **Create custom field**. Add a **Short Text** field -named `teleportAccessRequestId`. Click the checkbox next to **Default Screen** -to associate that field with this screen. Click **Update**. - -Next, add the custom field to your Teleport Access Requests project. Click -**Projects** > **Teleport Access Requests (TAR)**, then **Project settings**. -Click **Issues** -> **Types** on the left sidebar, then click **Task** > -**Fields**. Find the dropdown menu called **Select Field**, then select the -`teleportAccessRequestId` field you added earlier. - ### Retrieve your Jira API token Obtain an API token that the Teleport Access Request plugin uses to make diff --git a/docs/pages/admin-guides/access-controls/sso/github-sso.mdx b/docs/pages/admin-guides/access-controls/sso/github-sso.mdx index 4159d565fdaab..9e34f0bbb94c5 100644 --- a/docs/pages/admin-guides/access-controls/sso/github-sso.mdx +++ b/docs/pages/admin-guides/access-controls/sso/github-sso.mdx @@ -8,6 +8,34 @@ This guide explains how to set up GitHub Single Sign On (SSO) so you can automatically map teams in your GitHub organization to users and roles in Teleport. +## How it works + +A Teleport administrator creates a GitHub authentication connector on the +Teleport Auth Service backend and requires Teleport users to authenticate +through GitHub by creating a cluster authentication preference. + +When a user authenticates to Teleport, they receive instructions to finish +authenticating using GitHub. The Teleport Auth Service receives an OAuth 2.0 +access token from GitHub and authenticates the token. (The GitHub authentication +connector acts as an OAuth 2.0 +[client](https://datatracker.ietf.org/doc/html/rfc6749#section-4.1).) + +The Auth Service then issues short-lived TLS and SSH certificates to the user by +reading data from the OAuth 2.0 access token. In particular, the Auth Service: +- Maps the user's GitHub teams to Teleport roles in order to assign the user + permissions. +- Assigns the user's Teleport username to their GitHub username. + + + +GitHub usernames are not formatted as email addresses. As a result, any Teleport +plugin that expects to send email to a user based on their Teleport username +will not work as expected. For example, the [PagerDuty Access Request +plugin](../access-request-plugins/ssh-approval-pagerduty.mdx) has this +limitation. + + + ## Prerequisites - A GitHub organization with at least one team. diff --git a/docs/pages/admin-guides/deploy-a-cluster/hsm.mdx b/docs/pages/admin-guides/deploy-a-cluster/hsm.mdx index bf627fcefcb0c..1ac2db144433d 100644 --- a/docs/pages/admin-guides/deploy-a-cluster/hsm.mdx +++ b/docs/pages/admin-guides/deploy-a-cluster/hsm.mdx @@ -189,33 +189,41 @@ to use. DEBU[0000] takeoff TLS=false listen="localhost:12345" pid=73502 ``` -1. Use `yubihsm-shell` to create a new authentication key to be used by - Teleport with the necessary capabilities. +1. Use `yubihsm-shell` to create a new + [authentication key](https://docs.yubico.com/hardware/yubihsm-2/hsm-2-user-guide/hsm2-core-concepts.html#authentication-key) + to be used by Teleport with the necessary + [capabilities](https://docs.yubico.com/hardware/yubihsm-2/hsm-2-user-guide/hsm2-core-concepts.html#capability). YubiHSM2 comes with a factory default authentication key at slot 1 with password - `password`. You should replace and delete it as recommended by Yubico. + `password`. We recommend replacing this or changing the password as soon as + possible. When creating the authentication key to be used by Teleport, the password - must have at least 8 characters. The example `hunter22` is used here. + must have at least 8 characters. ```text $ yubihsm-shell Using default connector URL: http://localhost:12345 yubihsm> connect Session keepalive set up to run every 15 seconds - yubihsm> session open 1 password + yubihsm> session open 1 + Enter password: Created session 0 - # Create an Authenticate Key for Teleport - yubihsm> put authkey 0 0 "Teleport Auth Key" 1 generate-asymmetric-key:sign-pkcs:delete-asymmetric-key sign-pkcs:sign-pss:decrypt-pkcs:decrypt-oaep hunter22 + # Create an Authentication Key for Teleport + yubihsm> put authkey 0 0 "Teleport Auth Key" 1 generate-asymmetric-key:sign-pkcs:sign-pss:sign-ecdsa:delete-asymmetric-key sign-pkcs:sign-pss:decrypt-pkcs:decrypt-oaep:sign-ecdsa + Enter password: Stored Authentication key 0x85cf # Make sure you can open a session with the new authentication key and password - yubihsm> session open 0x85cf hunter22 + yubihsm> session open 0x85cf + Enter password: Created session 1 - # Delete the factory default authentication key - yubihsm> delete 0 1 authentication-key + # Change the password for the factory default authentication key. + # Remember to securely store this password somewhere. + yubihsm> change authkey 0 1 authentication-key + Enter password: ``` Take note of the slot number of the new authentication key. @@ -294,8 +302,8 @@ auth_service: # slot_number should always be set to 0 for YubiHSM2 slot_number: 0 # pin should be the (hex) slot number of your authentication key, - # concatenated with the password - pin: "85cfhunter22" + # concatenated with your chosen password + pin: "85cfpassword" # pin_path can optionally be used to read the pin from a file # pin_path: /path/to/pin_file ``` diff --git a/docs/pages/admin-guides/management/admin/troubleshooting.mdx b/docs/pages/admin-guides/management/admin/troubleshooting.mdx index afe00fccc1d02..2a22c219cc523 100644 --- a/docs/pages/admin-guides/management/admin/troubleshooting.mdx +++ b/docs/pages/admin-guides/management/admin/troubleshooting.mdx @@ -149,7 +149,8 @@ through the [Teleport support portal](https://support.goteleport.com). If you need help, please ask on our [community forum](https://github.com/gravitational/teleport/discussions). You can also open an [issue on GitHub](https://github.com/gravitational/teleport/issues). -For more information about custom features, or to try the [self-hosted Enterprise edition](../../deploy-a-cluster/deploy-a-cluster.mdx) of Teleport, reach out to us at [sales](https://goteleport.com/signup/enterprise/). +For more information about Enterprise features reach out to [the Teleport sales team](https://goteleport.com/signup/enterprise/). +You can also sign up for a [free trial](https://goteleport.com/signup) of Teleport Enterprise. diff --git a/docs/pages/admin-guides/management/guides/ec2-tags.mdx b/docs/pages/admin-guides/management/guides/ec2-tags.mdx index 6c4c64cb381df..31d857d523724 100644 --- a/docs/pages/admin-guides/management/guides/ec2-tags.mdx +++ b/docs/pages/admin-guides/management/guides/ec2-tags.mdx @@ -10,7 +10,7 @@ this way will have the `aws/` prefix. When the Teleport process starts, it fetch the instance metadata service and adds them as labels. The process will update the tags every hour, so newly created or deleted tags will be reflected in the labels. -If the tag `TeleportHostname` (case-sensitive) is present, its value will override the node's hostname. +If the tag `TeleportHostname` is present, its value (must be lower case) will override the node's hostname. ```bash $ tsh ls diff --git a/docs/pages/admin-guides/management/guides/gcp-tags.mdx b/docs/pages/admin-guides/management/guides/gcp-tags.mdx index 163756435f433..36aedd0e0218c 100644 --- a/docs/pages/admin-guides/management/guides/gcp-tags.mdx +++ b/docs/pages/admin-guides/management/guides/gcp-tags.mdx @@ -17,7 +17,7 @@ When the Teleport process starts, it fetches all tags and labels from the GCP API and adds them as labels. The process will update the tags every hour, so newly created or deleted tags will be reflected in the labels. -If the GCP label `TeleportHostname` (case-sensitive) is present, its value will override the node's hostname. This +If the GCP label `TeleportHostname` is present, its value (must be lower case) will override the node's hostname. This does not apply to GCP tags. ```bash diff --git a/docs/pages/changelog.mdx b/docs/pages/changelog.mdx index 9721820967ca7..3676469d022ac 100644 --- a/docs/pages/changelog.mdx +++ b/docs/pages/changelog.mdx @@ -2,5 +2,6 @@ title: Teleport Changelog description: The Changelog provides a comprehensive description of the changes introduced by each Teleport release. --- -{/*lint disable messaging*/} +{/*lint disable absolute-docs-links*/} + (!CHANGELOG.md!) diff --git a/docs/pages/connect-your-client/gui-clients.mdx b/docs/pages/connect-your-client/gui-clients.mdx index ad46dc02ddc86..500058c814509 100644 --- a/docs/pages/connect-your-client/gui-clients.mdx +++ b/docs/pages/connect-your-client/gui-clients.mdx @@ -10,9 +10,20 @@ work with Teleport. ### Prerequisites -(!docs/pages/includes/edition-prereqs-tabs.mdx!) +- A running Teleport cluster. If you want to get started with Teleport, [sign + up](https://goteleport.com/signup) for a free trial or [set up a demo + environment](../admin-guides/deploy-a-cluster/linux-demo.mdx). + +- The `tsh` client tool. Visit [Installation](../installation.mdx) for instructions on downloading + `tsh`. See the [Using Teleport Connect](./teleport-connect.mdx) guide for a graphical desktop client + that includes `tsh`. + +- To check that you can connect to your Teleport cluster, sign in with `tsh login`. For example: + + ```code + $ tsh login --proxy= --user= + ``` -- (!docs/pages/includes/tctl.mdx!) - The Teleport Database Service configured to access a database. See one of our [guides](../enroll-resources/database-access/guides/guides.mdx) for how to set up the Teleport Database Service for your database. diff --git a/docs/pages/core-concepts.mdx b/docs/pages/core-concepts.mdx index c7afd7338db53..011377dbe4285 100644 --- a/docs/pages/core-concepts.mdx +++ b/docs/pages/core-concepts.mdx @@ -39,7 +39,7 @@ Read our guides to how [authorization](reference/architecture/authorization.mdx) ### Teleport Proxy Service The **Teleport Proxy Service** allows for secure access to resources in your -infrastructure from the public internet without the need for a VPN. +infrastructure from the public internet without the need for a VPN. It establishes reverse tunnels to the **Teleport Auth Service** and **Teleport Services**, which can run in private networks. This means that, in the Proxy @@ -47,7 +47,7 @@ Service's minimal configuration, you can expose only port `443` to the internet and run the rest of your infrastructure in private networks. You can also configure clients to bypass Proxy Service instances and connect to -resources with Teleport-issued certificates directly. +resources with Teleport-issued certificates directly. Read our guide to [how the Teleport Proxy Service works](reference/architecture/proxy.mdx). @@ -73,7 +73,7 @@ Service](./enroll-resources/application-access/introduction.mdx). ### Teleport Database Service Proxies TCP traffic in the native protocols of popular databases, including -PostgreSQL and MySQL. +PostgreSQL and MySQL. Read more about the [Teleport Database Service](./enroll-resources/database-access/database-access.mdx). @@ -92,7 +92,7 @@ Proxies HTTP traffic to the Kubernetes API server. Read more about the [Teleport Kubernetes Service](./enroll-resources/kubernetes-access/introduction.mdx) -### Teleport SSH Service +### Teleport SSH Service An SSH server implementation that allows users to execute commands on remote machines while taking advantage of Teleport's built-in access controls, @@ -104,7 +104,7 @@ Read more about the [Teleport SSH Service](./enroll-resources/server-access/intr Allows machines and services—called bot users—to communicate securely with resources in your infrastructure by automatically provisioning and renewing -credentials. +credentials. Bot users can connect to resources in your infrastructure without relying on static credentials (e.g., certificates and private keys) that become more @@ -131,7 +131,7 @@ on GitHub. You can find a detailed comparison of the features available in each Teleport edition in [Frequently Asked -Questions](./faq.mdx#how-is-open-source-different-from-enterprise). +Questions](./faq.mdx#how-is-teleports-community-edition-different-from-enterprise). ### Teleport Enterprise Cloud @@ -193,7 +193,7 @@ Ultimately, a Teleport user is the subject of a certificate issued by the **Teleport Auth Service**. The Auth Service verifies that a client or service attempting to connect has a valid Teleport-issued certificate. It then uses the subject of the certificate—including its username and Teleport roles—to -authorize the user. +authorize the user. Read more about [local users](reference/access-controls/authentication.mdx) and how [SSO authentication works in Teleport](admin-guides/access-controls/sso/sso.mdx). @@ -201,21 +201,21 @@ authentication works in Teleport](admin-guides/access-controls/sso/sso.mdx). ### Authentication connector An authentication connector is a **configuration resource** that allows users to -authenticate to Teleport via a Single Sign-On (SSO) solution. +authenticate to Teleport via a Single Sign-On (SSO) solution. See our guide to [Authentication Options](reference/access-controls/authentication.mdx). ### Trusted clusters -Teleport allows you to configure a **trusted cluster relationship** between a -**root cluster** and one or more **leaf clusters** that trust the root cluster -certificate authority. The trust relationship between the root and leaf clusters -enables users authenticated in the root cluster to access resources +Teleport allows you to configure a **trusted cluster relationship** between a +**root cluster** and one or more **leaf clusters** that trust the root cluster +certificate authority. The trust relationship between the root and leaf clusters +enables users authenticated in the root cluster to access resources in leaf cluster. The root and leaf cluster operate independently with their own users, roles, and resources, but the trust relationship allows users with certain roles in the root cluster to be mapped to roles and permissions defined in the leaf cluster. For more information about how to configure a trust relationship between clusters, -see [Configure Trusted Clusters](admin-guides/management/admin/trustedclusters.mdx). -For an overview of the architecture used in a trusted cluster relationship, see +see [Configure Trusted Clusters](admin-guides/management/admin/trustedclusters.mdx). +For an overview of the architecture used in a trusted cluster relationship, see [Trusted Cluster Architecture](reference/architecture/trustedclusters.mdx). diff --git a/docs/pages/enroll-resources/agents/join-services-to-your-cluster/aws-ec2.mdx b/docs/pages/enroll-resources/agents/join-services-to-your-cluster/aws-ec2.mdx index fb96c7acd66a3..cbd7bb29f86e4 100644 --- a/docs/pages/enroll-resources/agents/join-services-to-your-cluster/aws-ec2.mdx +++ b/docs/pages/enroll-resources/agents/join-services-to-your-cluster/aws-ec2.mdx @@ -45,7 +45,7 @@ Teleport processes joining the cluster. by default). Remove the data directory if this instance has previously joined a Teleport cluster. -## Step 1/4. Set up AWS IAM credentials +## Step 1/5. Set up AWS IAM credentials The Teleport Auth Service needs permission to call `ec2:DescribeInstances` in order to check that the EC2 instances attempting to join your cluster are legitimate and @@ -86,7 +86,7 @@ file or environment variables. See [Specifying Credentials](https://aws.github.io/aws-sdk-go-v2/docs/configuring-sdk/#specifying-credentials) for details. -## Step 2/4. Create the AWS joining token +## Step 2/5. Create the AWS joining token Configure your Teleport Auth Service with a special dynamic token which will allow services from your AWS account to join your Teleport cluster. @@ -102,7 +102,13 @@ account and the AWS regions in which your EC2 instances will run. Run `tctl create token.yaml` to create the token. -## Step 3/4. Configure your services +## Step 3/5 Install Teleport + +Install Teleport on your AWS EC2 Instance. + +(!docs/pages/includes/install-linux.mdx!) + +## Step 4/5. Configure your services The EC2 join method can be used for Teleport processes running the SSH, Proxy, Kubernetes, Application, Database, or Windows Desktop Services. The Teleport @@ -129,7 +135,7 @@ proxy_service: enabled: no ``` -## Step 4/4. Launch your Teleport process +## Step 5/5. Launch your Teleport process +(!docs/pages/includes/start-teleport.mdx!) + Start Teleport on the host and confirm that it is able to connect to and join your cluster. You're all set! diff --git a/docs/pages/enroll-resources/agents/join-services-to-your-cluster/aws-iam.mdx b/docs/pages/enroll-resources/agents/join-services-to-your-cluster/aws-iam.mdx index ee3026c06c796..b12bae2ee9b8a 100644 --- a/docs/pages/enroll-resources/agents/join-services-to-your-cluster/aws-iam.mdx +++ b/docs/pages/enroll-resources/agents/join-services-to-your-cluster/aws-iam.mdx @@ -48,7 +48,7 @@ balancer or reverse proxy is available in Teleport 13.0+. (!docs/pages/includes/tctl.mdx!) -## Step 1/4. Set up AWS IAM credentials +## Step 1/5. Set up AWS IAM credentials Every Teleport process using the IAM method to join your Teleport cluster needs AWS IAM credentials in order to call the `sts:GetCallerIdentity` API. No @@ -62,7 +62,7 @@ attached IAM policies at all. If your instance does not otherwise need AWS credentials, it is preferred to create and attach an empty role with no attached policies. -## Step 2/4. Create the AWS joining token +## Step 2/5. Create the AWS joining token Create the following `token.yaml` with an `allow` rule specifying your AWS account and the ARN that the Teleport process's identity must match. @@ -82,7 +82,13 @@ Run the following command to create the token: $ tctl create -f token.yaml ``` -## Step 3/4. Configure your services +## Step 3/5 Install Teleport + +Install Teleport on your AWS EC2 instance. + +(!docs/pages/includes/install-linux.mdx!) + +## Step 4/5. Configure your services The IAM join method can be used for Teleport processes running the SSH, Proxy, Kubernetes, Application, or Database Service. @@ -111,7 +117,7 @@ In the `teleport.proxy_server` field, replace the value with the host and web port of your Teleport Proxy Service or Teleport Enterprise Cloud tenant, e.g., `mytenant.teleport.sh:443`. -## Step 4/4. Launch your Teleport process +## Step 5/5. Launch your Teleport process (!docs/pages/includes/aws-credentials.mdx!) diff --git a/docs/pages/enroll-resources/agents/join-services-to-your-cluster/azure.mdx b/docs/pages/enroll-resources/agents/join-services-to-your-cluster/azure.mdx index 551395ee186bb..06f2eb2463cf3 100644 --- a/docs/pages/enroll-resources/agents/join-services-to-your-cluster/azure.mdx +++ b/docs/pages/enroll-resources/agents/join-services-to-your-cluster/azure.mdx @@ -24,7 +24,7 @@ Teleport Services to a Cluster](join-services-to-your-cluster.mdx). assigned to it with permission to read virtual machine info. - (!docs/pages/includes/tctl.mdx!) -## Step 1/4. Set up a Managed Identity +## Step 1/5. Set up a Managed Identity Every virtual machine hosting a Teleport process using the Azure method to join your Teleport cluster needs a Managed Identity assigned to it. The identity @@ -33,7 +33,7 @@ look up the virtual machine. No other permissions are required. (!docs/pages/includes/server-access/azure-join-managed-identity.mdx!) -## Step 2/4. Create the Azure joining token +## Step 2/5. Create the Azure joining token Under the hood, Teleport processes will prove that they are running in your Azure subscription by sending a signed attested data document and access token @@ -54,7 +54,13 @@ Run the following command to create the token: $ tctl create -f token.yaml ``` -## Step 3/4. Configure your Teleport process +## Step 3/5 Install Teleport + +Install Teleport on your Azure Linux VM. + +(!docs/pages/includes/install-linux.mdx!) + +## Step 4/5. Configure your Teleport process The Azure join method can be used for Teleport processes running the SSH, Proxy, Kubernetes, Application, Database, or Desktop Service. @@ -82,7 +88,7 @@ proxy_service: enabled: no ``` -## Step 4/4. Launch your Teleport process +## Step 5/5. Launch your Teleport process Start Teleport on the Azure VM. diff --git a/docs/pages/enroll-resources/agents/join-services-to-your-cluster/gcp.mdx b/docs/pages/enroll-resources/agents/join-services-to-your-cluster/gcp.mdx index e31a33013f06c..b5ad17163088f 100644 --- a/docs/pages/enroll-resources/agents/join-services-to-your-cluster/gcp.mdx +++ b/docs/pages/enroll-resources/agents/join-services-to-your-cluster/gcp.mdx @@ -21,7 +21,7 @@ on the Teleport process joining the cluster. and with the Teleport binary installed. - (!docs/pages/includes/tctl.mdx!) -## Step 1/3. Create the GCP joining token +## Step 1/4. Create the GCP joining token Configure your Teleport Auth Service with a special dynamic token which will allow services from your GCP projects to join your Teleport cluster. @@ -42,7 +42,13 @@ Run the following command to create the token: $ tctl create token.yaml ``` -## Step 2/3. Configure your services +## Step 2/4 Install Teleport + +Install Teleport on your GCP Linux VM. + +(!docs/pages/includes/install-linux.mdx!) + +## Step 3/4. Configure your services The GCP join method can be used for Teleport processes running the SSH (`Node`), Proxy, Kubernetes, Application, Database, or Windows Desktop Services. The Teleport @@ -68,7 +74,7 @@ proxy_service: enabled: no ``` -## Step 3/3. Launch your Teleport process +## Step 4/4. Launch your Teleport process (!docs/pages/includes/start-teleport.mdx!) diff --git a/docs/pages/enroll-resources/database-access/enroll-azure-databases/azure-postgres-mysql.mdx b/docs/pages/enroll-resources/database-access/enroll-azure-databases/azure-postgres-mysql.mdx index 464041d58c8d1..b639ab2a0673a 100644 --- a/docs/pages/enroll-resources/database-access/enroll-azure-databases/azure-postgres-mysql.mdx +++ b/docs/pages/enroll-resources/database-access/enroll-azure-databases/azure-postgres-mysql.mdx @@ -35,135 +35,15 @@ database. Service. - (!docs/pages/includes/tctl.mdx!) -## Step 1/5. Install the Teleport Database Service -(!docs/pages/includes/tctl-token.mdx serviceName="Database" tokenType="db" tokenFile="/tmp/token"!) - -Install Teleport on the host where you will run the Teleport Database Service: - -(!docs/pages/includes/install-linux.mdx!) - -Create the Database Service configuration. - - - - -- Specify the region for your database(s) in `--azure-postgres-discovery`. - -- Replace the `--proxy` value with your Teleport proxy address or Teleport cloud - URI (e.g. `mytenant.teleport.sh:443`): - - ```code - $ sudo teleport db configure create \ - -o file \ - --proxy=teleport.example.com:443 \ - --token=/tmp/token \ - --azure-postgres-discovery=eastus - ``` - - - - -- Specify the region for your database(s) in `--azure-mysql-discovery`. - -- Replace the `--proxy` value with your Teleport proxy address or Teleport cloud - URI (e.g. `mytenant.teleport.sh:443`): - - ```code - $ sudo teleport db configure create \ - -o file \ - --proxy=teleport.example.com:443 \ - --token=/tmp/token \ - --azure-mysql-discovery=eastus - ``` - - - - - -Run the following command on your Database Service host: - - ```code - $ sudo teleport db configure create \ - -o file \ - --proxy=teleport.example.com:443 \ - --token=/tmp/token \ - --azure-mysql-discovery=eastus \ - --azure-postgres-discovery=eastus - ``` - - -This will create two `types` entities in `teleport.yaml`, one for each database -type. This is useful if you want different regions, tags, or labels for each -database type. - -Alternatively, you can edit `teleport.yaml` to include both database types in a -single entry: - -```yaml -db_service: - azure: - - types: ["mysql", "postgres"] - ... -``` - - - - - - - -This command will generate a Database Service configuration with Azure MySQL/Postgres -database auto-discovery enabled in the `eastus` region and place it at the -`/etc/teleport.yaml` location. - -### Create a Teleport role - -On your workstation logged in to your Teleport cluster with `tsh`, define a new -role to provide access to your Azure database. Create a file called `azure-database-role.yaml` with the following content: - -```yaml -version: v7 -kind: role -metadata: - name: azure-database-access -spec: - allow: - db_labels: - 'engine': - - "Microsoft.DBforMySQL/servers" - - "Microsoft.DBforMySQL/flexibleServers" - - "Microsoft.DBforPostgreSQL/servers" - - "Microsoft.DBforPostgreSQL/flexibleServers" - db_names: - - '*' - db_users: - - teleport -``` - -| Flag | Description | -|----------------------------|------------------------------------------------------------------------------------------------------------------------------------------| -| `--db-users` | List of database usernames the user will be allowed to use when connecting to the databases. A wildcard allows any user. | -| `--db-names` | List of logical databases (aka schemas) the user will be allowed to connect to within a database server. A wildcard allows any database. | -| `--db-labels` | List of labels assigned to the database the user will be able to access. A wildcard entry allows any database. | - -Save this file and apply it to your Teleport cluster: - -```code -$ tctl create -f azure-database-role.yaml -role 'azure-database-role.yaml' has been created -``` - -(\!docs/pages/includes/add-role-to-user.mdx role="azure-database-access" \!) - -## Step 2/5. Configure Azure service principal +## Step 1/5. Configure Azure service principal To authenticate with PostgreSQL or MySQL databases, Teleport Database Service needs to obtain access tokens from Azure AD. (!docs/pages/includes/database-access/azure-configure-service-principal.mdx!) -## Step 3/5. Configure IAM permissions for Teleport +## Step 2/5. Configure IAM permissions for Teleport ### Create a custom role @@ -228,7 +108,7 @@ and replace the subscription in "assignableScopes" with your own subscription id (!docs/pages/includes/database-access/azure-assign-service-principal.mdx!) -## Step 4/5. Create Azure database users +## Step 3/5. Create Azure database users To let Teleport connect to your Azure database authenticating as a service principal, you need to create Azure AD users authenticated by that principal in the database. @@ -367,6 +247,137 @@ GRANT ALL ON `%`.* TO 'teleport'@'%'; You can create multiple database users identified by the same service principal. +## Step 4/5. Install the Teleport Database Service + +(!docs/pages/includes/tctl-token.mdx serviceName="Database" tokenType="db" tokenFile="/tmp/token"!) + +Install Teleport on the host where you will run the Teleport Database Service: + +(!docs/pages/includes/install-linux.mdx!) + +Create the Database Service configuration. + + + + +- Specify the region for your database(s) in `--azure-postgres-discovery`. + +- Replace the `--proxy` value with your Teleport Proxy Service address or Teleport Enterprise (Cloud) + URI (e.g. `example.teleport.sh:443`): + + ```code + $ sudo teleport db configure create \ + -o file \ + --proxy=teleport.example.com:443 \ + --token=/tmp/token \ + --azure-postgres-discovery=eastus + ``` + + + + +- Specify the region for your database(s) in `--azure-mysql-discovery`. + +- Replace the `--proxy` value with your Teleport Proxy Service address or Teleport Enterprise (Cloud) + URI (e.g. `example.teleport.sh:443`): + + ```code + $ sudo teleport db configure create \ + -o file \ + --proxy=teleport.example.com:443 \ + --token=/tmp/token \ + --azure-mysql-discovery=eastus + ``` + + + + + +Run the following command on your Database Service host: + + ```code + $ sudo teleport db configure create \ + -o file \ + --proxy=teleport.example.com:443 \ + --token=/tmp/token \ + --azure-mysql-discovery=eastus \ + --azure-postgres-discovery=eastus + ``` + +This will create two `types` entities in `teleport.yaml`, one for each database +type. This is useful if you want different regions, tags, or labels for each +database type. + +Alternatively, you can edit `teleport.yaml` to include both database types in a +single entry: + +```yaml +db_service: + azure: + - types: ["mysql", "postgres"] + ... +``` + + + + + +This command will generate a Database Service configuration with Azure MySQL/Postgres +database auto-discovery enabled in the `eastus` region and place it at the +`/etc/teleport.yaml` location. + +### Create a Teleport role + +On your workstation logged in to your Teleport cluster with `tsh`, define a new +role to provide access to your Azure database. Create a file called `azure-database-role.yaml` with the following content: + +```yaml +version: v7 +kind: role +metadata: + name: azure-database-access +spec: + allow: + db_labels: + 'engine': + - "Microsoft.DBforMySQL/servers" + - "Microsoft.DBforMySQL/flexibleServers" + - "Microsoft.DBforPostgreSQL/servers" + - "Microsoft.DBforPostgreSQL/flexibleServers" + db_names: + - '*' + db_users: + - teleport +``` + +| Flag | Description | +|----------------------------|------------------------------------------------------------------------------------------------------------------------------------------| +| `--db-users` | List of database usernames the user will be allowed to use when connecting to the databases. A wildcard allows any user. | +| `--db-names` | List of logical databases (aka schemas) the user will be allowed to connect to within a database server. A wildcard allows any database. | +| `--db-labels` | List of labels assigned to the database the user will be able to access. A wildcard entry allows any database. | + +Save this file and apply it to your Teleport cluster: + +```code +$ tctl create -f azure-database-role.yaml +role 'azure-database-role.yaml' has been created +``` + +(\!docs/pages/includes/add-role-to-user.mdx role="azure-database-access" \!) + +### Start Teleport Database Service + +(!docs/pages/includes/start-teleport.mdx service="the Teleport Database Service"!) + + + A single Teleport process can run multiple different services, for example + multiple Database Service agents as well as the SSH Service or Application + Service. + + ## Step 5/5. Connect Log in to your Teleport cluster. Your Azure database should appear in the list of diff --git a/docs/pages/enroll-resources/database-access/faq.mdx b/docs/pages/enroll-resources/database-access/faq.mdx index eaf628f7fbf4e..eb27e867711c5 100644 --- a/docs/pages/enroll-resources/database-access/faq.mdx +++ b/docs/pages/enroll-resources/database-access/faq.mdx @@ -21,13 +21,14 @@ The Teleport Database Service currently supports the following protocols: - Redis - Snowflake -For PostgreSQL and MySQL, the following Cloud-hosted versions are supported in addition to self-hosted deployments: +For PostgreSQL, Oracle and MySQL, the following Cloud-hosted versions are supported in addition to self-hosted deployments: - Amazon RDS - Amazon Aurora (except for Amazon Aurora Serverless, which doesn't support IAM authentication) - Amazon Redshift - Google Cloud SQL - Azure Database +- Oracle Exadata See the available [guides](guides/guides.mdx) for all supported configurations. diff --git a/docs/pages/enroll-resources/enroll-resources.mdx b/docs/pages/enroll-resources/enroll-resources.mdx index 6d0f6ab1192d4..0ff168ae4d82b 100644 --- a/docs/pages/enroll-resources/enroll-resources.mdx +++ b/docs/pages/enroll-resources/enroll-resources.mdx @@ -3,4 +3,27 @@ title: Enrolling Teleport Resources description: Provides step-by-step instructions for enrolling servers, databases, and other infrastructure resources with your Teleport cluster. --- +You can use Teleport to protect infrastructure resources like servers, +databases, and Kubernetes clusters. Once an infrastructure resource is protected +by Teleport, you can restrict access to the resource using the Teleport +[role-based access controls +system](../admin-guides/access-controls/access-controls.mdx) and use Teleport +features like session recordings and audit events to understand how your users +interact with the resource. + +To enroll a resource with Teleport, you deploy a Teleport Agent, an instance of +the `teleport` binary configured to run certain services, such as the Teleport +SSH Service and Teleport Database Service. You then configure the Agent to proxy +a resource by querying a service discovery API (Auto Discovery), using a +[dynamic Teleport +resource](../admin-guides/infrastructure-as-code/infrastructure-as-code.mdx), or +naming the resource in the Agent's configuration file. Read more about [Teleport +Agent architecture](../reference/architecture/agents.mdx). + +You can also create a Teleport bot user and set up Machine ID to enable service +accounts to access Teleport-protected resources. + +Read the following documentation for more information on enrolling +infrastructure resources with Teleport: + (!toc!) diff --git a/docs/pages/enroll-resources/machine-id/troubleshooting.mdx b/docs/pages/enroll-resources/machine-id/troubleshooting.mdx index c6f9dc476c6aa..bf101104d1170 100644 --- a/docs/pages/enroll-resources/machine-id/troubleshooting.mdx +++ b/docs/pages/enroll-resources/machine-id/troubleshooting.mdx @@ -320,3 +320,18 @@ outputs: Failure to add the `disable_exec_plugin` flag will result in a warning being displayed: `Destination kubernetes_secret: identity-output must be a directory in exec plugin mode`. + +## Configuring `tbot` for split DNS proxies + +When you have deployed your Proxy Service in such a way that it is +accessible via two different DNS names, e.g an internal and external address, +you may find that a `tbot` that is configured to use one of these addresses may +attempt to use the other address and that this may cause connections to fail. + +This is because `tbot` queries an auto-configuration endpoint exposed by the +Proxy Service to determine the canonical address to use when connecting. + +To fix this, set a variable of `TBOT_USE_PROXY_ADDR=yes` in the environment of the +`tbot` process. This configures `tbot` to prefer using the address that you have +explicitly provided. This only functions correctly in cases where TLS +routing/multiplexing is enabled for the Teleport cluster. diff --git a/docs/pages/faq.mdx b/docs/pages/faq.mdx index 20135fb639467..2c9bd58aa7d8a 100644 --- a/docs/pages/faq.mdx +++ b/docs/pages/faq.mdx @@ -11,32 +11,24 @@ Fortune 500 companies. It has been through several security audits from nationally recognized technology security companies, so we are comfortable with the stability of Teleport from a security perspective. -## Can Teleport be deployed in agentless mode? - -Yes. All Teleport services support agentless mode, where the service proxies -traffic to an upstream infrastructure resource not available on `localhost`. +## Can I connect to nodes behind a firewall? -With Teleport in agentless mode, you can easily control access to SSH servers, -Kubernetes clusters, desktops, databases, and internal applications without -running any additional software on your servers. Agentless mode supports session -recordings and audit logs for deep understanding into user behavior. +Yes, Teleport supports reverse SSH tunnels out of the box. To configure +behind-firewall clusters, see [Configure Trusted Clusters](admin-guides/management/admin/trustedclusters.mdx). -For capabilities such as kernel-level logging and user provisioning, we -recommend Teleport as a drop in replacement for OpenSSH. Since Teleport replaces -the OpenSSH agent while preserving OpenSSH's functionality, you get more -functionality without a net addition of an agent on your system. +## How is Teleport's Community Edition different from Enterprise? -## Can I use OpenSSH with a Teleport cluster? +Teleport provides two editions: -Yes, this question comes up often and is related to the previous one. Take a -look at [Using OpenSSH Guide](enroll-resources/server-access/openssh/openssh-agentless.mdx). +- Teleport Enterprise +- Teleport Community Edition -## Can I connect to nodes behind a firewall? +Here is a detailed breakdown of the differences between Teleport's editions. -Yes, Teleport supports reverse SSH tunnels out of the box. To configure -behind-firewall clusters, see [Configure Trusted Clusters](admin-guides/management/admin/trustedclusters.mdx). +(!docs/pages/includes/edition-comparison.mdx!) ## Should we use Teleport Enterprise or Teleport Community Edition for connecting resources to our Teleport cluster? + (!docs/pages/includes/ent-vs-community-faq.mdx!) ## Can individual agents create reverse tunnels to the Proxy Service without creating a new cluster? @@ -54,6 +46,26 @@ Yes, Teleport supports tunnel multiplexing on a single port. Set the setting in the `proxy_service` configuration. Teleport will automatically use multiplexing with that configuration. +## Can Teleport be deployed in agentless mode? + +Yes. All Teleport services support agentless mode, where the service proxies +traffic to an upstream infrastructure resource not available on `localhost`. + +With Teleport in agentless mode, you can easily control access to SSH servers, +Kubernetes clusters, desktops, databases, and internal applications without +running any additional software on your servers. Agentless mode supports session +recordings and audit logs for deep understanding into user behavior. + +For capabilities such as kernel-level logging and user provisioning, we +recommend Teleport as a drop in replacement for OpenSSH. Since Teleport replaces +the OpenSSH agent while preserving OpenSSH's functionality, you get more +functionality without a net addition of an agent on your system. + +## Can I use OpenSSH with a Teleport cluster? + +Yes, this question comes up often and is related to the previous one. Take a +look at [Using OpenSSH Guide](enroll-resources/server-access/openssh/openssh-agentless.mdx). + ## Can I copy files from one Teleport node to another? Yes, Teleport supports [Headless WebAuthn authentication](admin-guides/access-controls/guides/headless.mdx), @@ -65,7 +77,7 @@ are not logged in to Teleport or may not have access to a browser. If your host machine is joined to an Active Directory domain, you might find user lookups take a lot longer than you expect. The number of Active Directory accounts that must be scanned to perform a user lookup can cause tsh to hang waiting to get information about the current user. -To fix this issue, you can use environment variables to set default account information for your +To fix this issue, you can use environment variables to set default account information for your Teleport user. If you are experiencing long lookup times on Windows, do the following: - Either set the `TELEPORT_USER` environment variable or set the `--user` flag to the name of your Teleport user. @@ -75,18 +87,6 @@ Teleport user. If you are experiencing long lookup times on Windows, do the foll You can set these environment variables globally in Windows so that you don't have to set them every time you run `tsh`. -## How is Open Source different from Enterprise? - -Teleport provides three editions: - -- Teleport Enterprise -- Teleport Enterprise Cloud -- Teleport Community Edition - -Here is a detailed breakdown of the differences between Teleport's editions. - -(!docs/pages/includes/edition-comparison.mdx!) - ## Which version of Teleport is supported? Teleport releases a new major version approximately every 4 months, and provides @@ -121,6 +121,19 @@ Please refer to our [Networking](./reference/networking.mdx) guide. Teleport offers this feature for the Enterprise (Cloud) and Enterprise (Self-Hosted) versions of Teleport. +## Why do changes to a user's role set only take effect on the log next login? + +A Teleport user's assigned roles are embedded in the client certificate they +receive upon logging on. This certificate remains valid and can be used until +its expiry, even if the user's role set has changed. + +To get a new certificate with the new role set, the user will need to log out +and log back in. + +Revocation of Teleport access should be done with Teleport's +[session and identity locks](./admin-guides/access-controls/guides/locking.mdx), +not by removing roles. + ## Does Teleport support provisioning users via SCIM? Teleport supports [SCIM](https://scim.cloud/) provisioning for Okta via the @@ -144,7 +157,10 @@ Service and Auth Service, as well as agents running other Teleport Services. Teleport requires a minimum of TLS version 1.2. -This means that when applications and clients establish or accept TLS connections with Teleport processes, they must use TLS 1.2 or a higher protocol version. Teleport enforces this requirement in all operations that involve TLS connections. +This means that when applications and clients establish or accept TLS +connections with Teleport processes, they must use TLS 1.2 or a higher protocol +version. Teleport enforces this requirement in all operations that involve TLS +connections. ## Can I suppress warnings about available upgrades? diff --git a/docs/pages/includes/config-reference/auth-service.yaml b/docs/pages/includes/config-reference/auth-service.yaml index c3c4ddf383061..4435f75f85e30 100644 --- a/docs/pages/includes/config-reference/auth-service.yaml +++ b/docs/pages/includes/config-reference/auth-service.yaml @@ -63,7 +63,7 @@ teleport: # consume the retention period via a query parameter in the audit_events_uri. See the examples below # for how to configure the retention period for other backends. # Firestore: firestore://events_table_name?eventRetentionPeriod=10d - # Postgres: postgresql://user_name@database-address/teleport_audit?retention_period=10d + # Postgres: postgresql://user_name@database-address/teleport_audit#retention_period=240h retention_period: 365d # minimum/maximum read capacity in units @@ -356,8 +356,7 @@ auth_service: routing_strategy: unambiguous_match # License file to start auth server with. Note that this setting is ignored - # in the Teleport Community Edition and is required only for Teleport Pro, Business - # and Enterprise subscription plans. + # in the Teleport Community Edition and is required only for Teleport Enterprise. # # The path can be either absolute or relative to the configured `data_dir` # and should point to the license file obtained from Teleport Download diff --git a/docs/pages/includes/database-access/self-hosted-introduction.mdx b/docs/pages/includes/database-access/self-hosted-introduction.mdx index da9db52cd28e3..5fcd5bd3e7f08 100644 --- a/docs/pages/includes/database-access/self-hosted-introduction.mdx +++ b/docs/pages/includes/database-access/self-hosted-introduction.mdx @@ -5,14 +5,14 @@ system](../../enroll-resources/database-access/rbac.mdx). The Teleport Database Service proxies traffic from database clients to self-hosted databases in your infrastructure. Teleport maintains a certificate -authority for database clients. You configure your database to trust the +authority (CA) for database clients. You configure your database to trust the Teleport database client CA, and the Teleport Database Service presents certificates signed by this CA when proxying user traffic. With this setup, there is no need to store long-lived credentials for self-hosted databases. Meanwhile, the Teleport Database Service verifies self-hosted databases by checking their TLS certificates against either the Teleport database CA or a -custom CA chosen by the user. +custom CA used with the database. In this guide, you will: diff --git a/docs/pages/includes/helm-reference/zz_generated.teleport-kube-agent.mdx b/docs/pages/includes/helm-reference/zz_generated.teleport-kube-agent.mdx index 49ca46c9cf4e3..56ad39b702e47 100644 --- a/docs/pages/includes/helm-reference/zz_generated.teleport-kube-agent.mdx +++ b/docs/pages/includes/helm-reference/zz_generated.teleport-kube-agent.mdx @@ -263,7 +263,7 @@ annotations: `azureDatabases` configures Azure database auto-discovery. - For Azure database auto-discovery to work, your Database Service pods will need to have appropriate IAM permissions as per the [database documentation](../../enroll-resources/database-access/enroll-azure-databases/azure-postgres-mysql.mdx#step-35-configure-iam-permissions-for-teleport). + For Azure database auto-discovery to work, your Database Service pods will need to have appropriate IAM permissions as per the [database documentation](../../enroll-resources/database-access/enroll-azure-databases/azure-postgres-mysql.mdx#step-25-configure-iam-permissions-for-teleport). After configuring a service principal with appropriate IAM permissions, you must pass credentials to the pods. The easiest way is to use an Azure client secret. diff --git a/docs/pages/includes/helm-reference/zz_generated.teleport-operator.mdx b/docs/pages/includes/helm-reference/zz_generated.teleport-operator.mdx index a371f03c0e77c..72af53e160f34 100644 --- a/docs/pages/includes/helm-reference/zz_generated.teleport-operator.mdx +++ b/docs/pages/includes/helm-reference/zz_generated.teleport-operator.mdx @@ -149,6 +149,26 @@ put on the `Pod` resources created by the chart. `annotations.serviceAccount` contains the Kubernetes annotations put on the `Deployment` resource created by the chart. +## `annotations` + +### `labels.deployment` + +| Type | Default | +|------|---------| +| `object` | `{}` | + +`labels.deployment` contains the Kubernetes labels +put on the `Deployment` resource created by the chart. + +### `labels.pod` + +| Type | Default | +|------|---------| +| `object` | `{}` | + +`labels.pod` contains the Kubernetes labels +put on the `Pod` resources created by the chart. + ## `serviceAccount` ### `serviceAccount.create` diff --git a/docs/pages/includes/metrics.mdx b/docs/pages/includes/metrics.mdx index d1a64ba4bf241..e875f84e75968 100644 --- a/docs/pages/includes/metrics.mdx +++ b/docs/pages/includes/metrics.mdx @@ -15,8 +15,8 @@ | `backend_batch_write_seconds` | histogram | cache | Latency for backend batch write operations. | | `backend_read_requests_total` | counter | cache | Number of read requests to the backend. | | `backend_read_seconds` | histogram | cache | Latency for read operations. | -| `backend_requests` | counter | cache | Number of requests to the backend (reads, writes, and keepalives). | -| `backend_write_requests_total` | counter | cache | Number of write requests to the backend. | +| `backend_requests` | counter | cache | Number of requests to the backend (reads, writes, and keepalives). | +| `backend_write_requests_total` | counter | cache | Number of write requests to the backend. | | `backend_write_seconds` | histogram | cache | Latency for backend write operations. | | `cluster_name_not_found_total` | counter | Teleport Auth | Number of times a cluster was not found. | | `dynamo_requests_total` | counter | DynamoDB | Total number of requests to the DynamoDB API. | @@ -31,7 +31,7 @@ | `etcd_backend_write_requests` | counter | etcd | Number of write requests to the database. | | `etcd_backend_write_seconds` | histogram | etcd | Latency for etcd write operations. | | `teleport_etcd_events` | counter | etcd | Total number of etcd events processed. | -| `teleport_etcd_event_backpressure` | counter | etcd | Total number of times event processing encountered backpressure. | +| `teleport_etcd_event_backpressure` | counter | etcd | Total number of times event processing encountered backpressure. | | `firestore_events_backend_batch_read_requests` | counter | GCP Cloud Firestore | Number of batch read requests to Cloud Firestore events. | | `firestore_events_backend_batch_read_seconds` | histogram | GCP Cloud Firestore | Latency for Cloud Firestore events batch read operations. | | `firestore_events_backend_batch_write_requests` | counter | GCP Cloud Firestore | Number of batch write requests to Cloud Firestore events. | @@ -59,17 +59,18 @@ | `teleport_audit_parquetlog_last_processed_timestamp` | gauge | Teleport Audit Log | Number of last processing time in Parquet-format audit log. | | `teleport_audit_parquetlog_age_oldest_processed_message` | gauge | Teleport Audit Log | Number of age of oldest event in Parquet-format audit log. | | `teleport_audit_parquetlog_errors_from_collect_count` | counter | Teleport Audit Log | Number of collect failures in Parquet-format audit log. | +| `teleport_connected_resources` | gauge | Teleport Auth | Number and type of resources connected via keepalives. x | | `teleport_postgres_events_backend_write_requests` | counter | Postgres (Events) | Number of write requests to postgres events, labeled with the request `status` (success or failure). | | `teleport_postgres_events_backend_batch_read_requests` | counter | Postgres (Events) | Number of batch read requests to postgres events, labeled with the request `status` (success or failure). | | `teleport_postgres_events_backend_batch_delete_requests` | counter | Postgres (Events) | Number of batch delete requests to postgres events, labeled with the request `status` (success or failure). | | `teleport_postgres_events_backend_write_seconds` | histogram | Postgres (Events) | Latency for postgres events write operations, in seconds. | | `teleport_postgres_events_backend_batch_read_seconds` | histogram | Postgres (Events) | Latency for postgres events batch read operations, in seconds. | | `teleport_postgres_events_backend_batch_delete_seconds` | histogram | Postgres (Events) | Latency for postgres events batch delete operations, in seconds. | -| `teleport_connected_resources` | gauge | Teleport Auth | Number and type of resources connected via keepalives. | | `teleport_registered_servers` | gauge | Teleport Auth | The number of Teleport services that are connected to an Auth Service instance grouped by version. | | `teleport_registered_servers_by_install_methods` | gauge | Teleport Auth | The number of Teleport services that are connected to an Auth Service instance grouped by install methods. | -| `user_login_total` | counter | Teleport Auth | Number of user logins. | +| `teleport_roles_total` | gauge | Teleport Auth | The number of roles that exist in the cluster. | | `teleport_migrations` | gauge | Teleport Auth | Tracks for each migration if it is active (1) or not (0). | +| `user_login_total` | counter | Teleport Auth | Number of user logins. | | `watcher_event_sizes` | histogram | cache | Overall size of events emitted. | | `watcher_events` | histogram | cache | Per resource size of events emitted. | @@ -110,13 +111,13 @@ | `remote_clusters` | gauge | Teleport Proxy | Number of inbound connections from leaf clusters. | | `teleport_connect_to_node_attempts_total` | counter | Teleport Proxy | Number of SSH connection attempts to a SSH Service. Use with `failed_connect_to_node_attempts_total` to get the failure rate. | | `teleport_reverse_tunnels_connected` | gauge | Teleport Proxy | Number of reverse SSH tunnels connected to the Teleport Proxy Service by Teleport instances. | -| `trusted_clusters` | gauge | Teleport Proxy | Number of outbound connections to leaf clusters. | | `teleport_proxy_db_connection_setup_time_seconds` | histogram | Teleport Proxy | Time to establish connection to DB service from Proxy service. | | `teleport_proxy_db_connection_dial_attempts_total` | counter | Teleport Proxy | Number of dial attempts from Proxy to DB service made. | | `teleport_proxy_db_connection_dial_failures_total` | counter | Teleport Proxy | Number of failed dial attempts from Proxy to DB service made. | | `teleport_proxy_db_attempted_servers_total` | histogram | Teleport Proxy | Number of servers processed during connection attempt to the DB service from Proxy service. | | `teleport_proxy_db_connection_tls_config_time_seconds` | histogram | Teleport Proxy | Time to fetch TLS configuration for the connection to DB service from Proxy service. | | `teleport_proxy_db_active_connections_total` | gauge | Teleport Proxy | Number of currently active connections to DB service from Proxy service. | +| `trusted_clusters` | gauge | Teleport Proxy | Number of outbound connections to leaf clusters. | ## Database Service diff --git a/docs/pages/includes/plugins/identity-export.mdx b/docs/pages/includes/plugins/identity-export.mdx index 929eddd0f369e..8db457cb0e378 100644 --- a/docs/pages/includes/plugins/identity-export.mdx +++ b/docs/pages/includes/plugins/identity-export.mdx @@ -46,7 +46,7 @@ If you are running the {{ client }} on a Linux server, create a data directory to hold certificate files for the {{ client }}: ```code -$ sudo mkdir -p /var/lib/teleport/api-credentials +$ sudo mkdir -p /var/lib/teleport/plugins/api-credentials $ sudo mv identity /var/lib/teleport/plugins/api-credentials ``` diff --git a/docs/pages/includes/role-spec.mdx b/docs/pages/includes/role-spec.mdx index e899a5536ed7a..4ae36723bb5e3 100644 --- a/docs/pages/includes/role-spec.mdx +++ b/docs/pages/includes/role-spec.mdx @@ -373,7 +373,7 @@ spec: # generates a role name from the value capture roles: ['$1-admin'] - # Teleport can attach annotations to pending Access Requests. these + # Teleport can attach annotations to pending Access Requests. These # annotations may be literals, or be variable interpolation expressions, # effectively creating a means for propagating selected claims from an # external identity provider to the plugin system. @@ -411,7 +411,7 @@ spec: # The different session kinds this policy applies to. kinds: ['k8s', 'ssh'] # The list of session participant modes the role may join the session as. - modes: ['moderator', 'observer'] + modes: ['moderator', 'observer', 'peer'] # spiffe is a list of SPIFFE IDs that the role holder is allowed to request # SVIDs for. As long as the request matches one of the blocks within the diff --git a/docs/pages/reference/access-controls/authentication.mdx b/docs/pages/reference/access-controls/authentication.mdx index 3f99338ba2ea5..cd6f5f010e4c7 100644 --- a/docs/pages/reference/access-controls/authentication.mdx +++ b/docs/pages/reference/access-controls/authentication.mdx @@ -275,3 +275,49 @@ See [GitHub OAuth 2.0](../../admin-guides/access-controls/sso/github-sso.mdx) fo + +## Require displaying a message of the day + +Teleport can display a custom message of the day (MOTD) for users prior to authenticating +in the Teleport Web UI and CLI. + +### Self-Hosted + +Add the following to your Teleport configuration file, which is stored in +`/etc/teleport.yaml` by default. + +```yaml +auth_service: + message_of_the_day: | + Welcome to the Example Teleport Cluster + All activity is monitored and should follow organization policies +``` + +Restart the Teleport Auth Service instances to apply this change. + +### Teleport Enterprise Cloud/Dynamic + +Edit your `cluster_auth_preference` resource: + +```code +$ tctl edit cap +``` + +Ensure that the resource includes the `message_of_the_day` field: + +```yaml +kind: cluster_auth_preference +metadata: + name: cluster-auth-preference +spec: + message_of_the_day: | + Welcome to the Example Teleport Cluster + All activity is monitored and should follow organization policies + type: local + second_factor: "on" + webauthn: + rp_id: example.teleport.sh +version: v2 +``` + +Save and close the file in your editor to apply changes. diff --git a/docs/pages/reference/architecture/session-recording.mdx b/docs/pages/reference/architecture/session-recording.mdx index eae3e56e84d33..1f40d9d6eb35d 100644 --- a/docs/pages/reference/architecture/session-recording.mdx +++ b/docs/pages/reference/architecture/session-recording.mdx @@ -91,7 +91,7 @@ Proxy Server cannot see the SSH traffic to the node. It is encrypted end-to-end In **Recording Proxy Mode**, the Proxy Service terminates (decrypts) the SSH connection using the certificate supplied by the client via SSH agent forwarding and then establishes its own SSH connection to the final destination server. -This allows the Proxy Service to forward SSH session data to the auth server to +This allows the Proxy Service to forward SSH session data to the Auth Service to be recorded, as shown below: ![recording-proxy](../../../img/recording-proxy.svg) @@ -124,7 +124,7 @@ Auth Service. When synchronous recording is enabled, the Teleport component doing the recording (which may be the Teleport SSH Service or the Proxy Service instance depending on your configuration) -submits each recording event to Teleport's Auth Server as it occurs. In this mode, +submits each recording event to Teleport's Auth Service as it occurs. In this mode, failure to emit a recording event is considered fatal - the session will be terminated if an event cannot be recorded. This makes synchronous recording best suited for highly regulated environments where you need to be confident that all data is recorded. @@ -132,9 +132,9 @@ This also means that you need a reliable and low-latency connection to the Auth Server for the duration of the session to ensure that the session isn't interrupted or terminated due to temporary connection loss. -In synchronous recording modes, the Auth Server receives a stream of recording +In synchronous recording modes, the Auth Service receives a stream of recording events and is responsible for assembling them into the final artifact and uploading -it to the storage backend. Since data is streamed directly to the Auth Server, +it to the storage backend. Since data is streamed directly to the Auth Service, Teleport administrators don't need to be concerned with disk space on their Teleport SSH Service and Proxy Service instances, as no recording data is written to those disks. @@ -143,7 +143,7 @@ written to those disks. When asynchronous, recording events are written to the local filesystem during the session. When the session completes, Teleport assembles the parts into a -complete recording and submits the entire recording to the Auth Server for storage. +complete recording and submits the entire recording to the Auth Service for storage. Since recording data is flushed to disk, administrators should be careful to ensure that the system has enough disk space to accommodate the expected number of Teleport @@ -152,13 +152,14 @@ is a greater chance that it can be tampered with, deleted, or otherwise corrupte before the upload completes. The advantage of asynchronous recording is that it doesn't require a persistent -connection to the Auth Server. For example, an SSH session can continue to operate -even if Teleport's Auth Server goes down. When the session completes Teleport will -attempt to upload the recording to the Auth Server. If the Auth Server is still +connection to the Auth Service. For example, an SSH session can continue to operate +even if Teleport's Auth Service goes down. When the session completes Teleport will +attempt to upload the recording to the Auth Service. If the Auth Service is still unavailable, Teleport has built-in retry and backoff mechanisms that will upload -the artifact when the Auth Server comes back online. Additionally, asynchronous +the artifact when the Auth Service comes back online. Additionally, asynchronous recording is well-suited towards recording sessions that are extra chatty or in -environments where the connection to the auth server is unreliable or high-latency. +environments where the connection to the Auth Service is unreliable or +high-latency. ## Storage @@ -209,17 +210,17 @@ to be completed. In asynchronous recording modes, if the node goes down during the session, the partially completed recording will sit on the node's disk. The node's upload completer will eventually -detect the abandoned upload and stream it to the Teleport Auth Server where it will be +detect the abandoned upload and stream it to the Teleport Auth Service where it will be written to the storage backend. -In synchronous recording modes, Teleport's Auth Server is streaming the recording directly -to storage. If the Auth Server goes down during a session, the uncompleted upload will sit -as a series of parts (in cloud storage or on the Auth Server's disk) and it is the -responsibility of the Auth Server's upload completer to detect the abandoned upload and +In synchronous recording modes, Teleport's Auth Service is streaming the recording directly +to storage. If the Auth Service goes down during a session, the uncompleted upload will sit +as a series of parts (in cloud storage or on an Auth Service instance's disk) and it is the +responsibility of the Auth Service's upload completer to detect the abandoned upload and complete it. ## Related reading - [Recording Proxy Mode](../../enroll-resources/server-access/guides/recording-proxy-mode.mdx) - [SSH recording modes](../monitoring/audit.mdx) -- [Desktop Access recording](../agent-services/desktop-access-reference/sessions.mdx) +- [Session recording for desktops](../agent-services/desktop-access-reference/sessions.mdx) diff --git a/docs/pages/reference/cli/tctl.mdx b/docs/pages/reference/cli/tctl.mdx index 4b58fcc3e3fa1..084522e975672 100644 --- a/docs/pages/reference/cli/tctl.mdx +++ b/docs/pages/reference/cli/tctl.mdx @@ -1624,11 +1624,9 @@ These flags are available for all commands `--debug, --config`. Run ### Examples ```code -# Adds teleport user "joe" with mappings to -# OS users and {{ internal.logins }} to "joe" and "ubuntu" -$ tctl users add joe --roles=access,requester joe,ubuntu -# Adds Teleport user "joe" with mappings to the editor role -$ tctl users add joe --roles=editor,reviewer +# Adds Teleport user "joe" with the "access" and "requester" roles and +# permissions to assume the "joe" and "ubuntu" logins +$ tctl users add joe --roles=access,requester --logins=joe,ubuntu ``` ## tctl users ls diff --git a/docs/pages/reference/cli/tsh.mdx b/docs/pages/reference/cli/tsh.mdx index f3b18116fe51c..d0ba638148800 100644 --- a/docs/pages/reference/cli/tsh.mdx +++ b/docs/pages/reference/cli/tsh.mdx @@ -13,7 +13,7 @@ Environment variables configure your tsh client and can help you avoid using fla | Environment Variable | Description | Example Value | | - | - | - | -| TELEPORT_AUTH | Name of a defined SAML, OIDC, or GitHub auth connector (or a local user) | okta | +| TELEPORT_AUTH | Any defined [authentication connector](../access-controls/authentication.mdx), including `passwordless` and `local` (i.e., no authentication connector) | okta | | TELEPORT_MFA_MODE | Preferred mode for MFA and Passwordless assertions | otp | | TELEPORT_CLUSTER | Name of a Teleport root or leaf cluster | cluster.example.com | | TELEPORT_LOGIN | Login name to be used by default on the remote host | root | diff --git a/docs/pages/reference/helm-reference/teleport-cluster.mdx b/docs/pages/reference/helm-reference/teleport-cluster.mdx index 8708ba1a9e36e..bd76d4c62112c 100644 --- a/docs/pages/reference/helm-reference/teleport-cluster.mdx +++ b/docs/pages/reference/helm-reference/teleport-cluster.mdx @@ -109,11 +109,13 @@ This is merged with chart-scoped values and takes precedence in case of conflict For example, to override the [`postStart`](#postStart) value only for auth pods: ```yaml # By default all pods postStart command should be "echo starting" -postStart: ["echo", "starting"] +postStart: + command: ["echo", "starting"] auth: # But we override the `postStart` value specifically for auth pods - postStart: ["curl", "http://hook"] + postStart: + command: ["curl", "http://hook"] imagePullPolicy: Always ``` @@ -193,11 +195,13 @@ For example, to override the [`postStart`](#postStart) value only for Teleport P and annotate the Kubernetes Service deployed for the Teleport Proxy Service: ```yaml # By default all pods postStart command should be "echo starting" -postStart: ["echo", "starting"] +postStart: + command: ["echo", "starting"] proxy: # But we override the `postStart` value specifically for proxy pods - postStart: ["curl", "http://hook"] + postStart: + command: ["curl", "http://hook"] imagePullPolicy: Always # We also annotate only the Kubernetes Service sending traffic to Proxy Service pods. @@ -606,6 +610,22 @@ $ kubectl --namespace teleport create secret generic license --from-file=/path/t enterprise: true ``` +### `licenseSecretName` + +| Type | Default value | +|----------|----------------| +| `string` | `license` | + +`licenseSecretName` controls Kubernetes secret name for the Enterprise license. + +By using this value you will update the Kubernetes volume specification to mount Secret based volume to the container using custom name. + +`values.yaml` example: + + ```yaml + licenseSecretName: enterprise-license + ``` + ## `installCRDs` | Type | Default value | @@ -629,6 +649,63 @@ the same Kubernetes cluster or installing the CRDs on your own you should not ha ## `operator` +### `operator.annotations.deployment` + +| Type | Default value | +|----------|---------------| +| `object` | `{}` | + +[Kubernetes reference](https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/) + +Kubernetes annotations which should be applied to the `Deployment` created by the chart. + +`values.yaml` example: + + ```yaml + operator: + annotations: + deployment: + kubernetes.io/annotation: value + ``` + +### `operator.annotations.pod` + +| Type | Default value | +|----------|---------------| +| `object` | `{}` | + +[Kubernetes reference](https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/) + +Kubernetes annotations which should be applied to the `Pod` created by the chart. + +`values.yaml` example: + + ```yaml + operator: + annotations: + pod: + kubernetes.io/annotation: value + ``` + +### `operator.annotations.serviceAccount` + +| Type | Default value | +|----------|---------------| +| `object` | `{}` | + +[Kubernetes reference](https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/) + +Kubernetes annotations which should be applied to the `ServiceAccount` created by the chart. + +`values.yaml` example: + + ```yaml + operator: + annotations: + serviceAccount: + kubernetes.io/annotation: value + ``` + ### `operator.enabled` | Type | Default value | @@ -645,7 +722,7 @@ If you are deploying multiple releases of the Helm chart in the same cluster you ```yaml operator: - enabled: true + enabled: true ``` ### `operator.image` @@ -666,6 +743,44 @@ This setting requires [`operator.enabled`](#operatorenabled). image: my.docker.registry/teleport-operator-image-name ``` +### `operator.labels.deployment` + +| Type | Default value | +|----------|---------------| +| `object` | `{}` | + +[Kubernetes reference](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/) + +Kubernetes labels which should be applied to the `Deployment` created by the chart. + +`values.yaml` example: + + ```yaml + operator: + labels: + deployment: + label: value + ``` + +### `operator.labels.pod` + +| Type | Default value | +|----------|---------------| +| `object` | `{}` | + +[Kubernetes reference](https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/) + +Kubernetes labels which should be applied to the `Pod` created by the chart. + +`values.yaml` example: + + ```yaml + operator: + labels: + pod: + label: value + ``` + ### `operator.resources` | Type | Default value | @@ -1763,6 +1878,14 @@ is true. `extraLabels.job` are labels to set on the Job run by the Helm hook. +### `extraLabels.jobPod` + +| Type | Default value | +|----------|---------------| +| `object` | `{}` | + +`extraLabels.jobPod` are labels to set on the Pods created by the Job run by the Helm hook. + ### `extraLabels.persistentVolumeClaim` | Type | Default value | diff --git a/e b/e index 8254052bc2a4f..a8393fdf07cb5 160000 --- a/e +++ b/e @@ -1 +1 @@ -Subproject commit 8254052bc2a4f53718bdf44502caf329e024b9ec +Subproject commit a8393fdf07cb5614ad5d78b9e6eb67a93e1abb8c diff --git a/examples/README.md b/examples/README.md index 0fed255d5c9cf..9563f5e06bf6d 100644 --- a/examples/README.md +++ b/examples/README.md @@ -1,9 +1,5 @@ # Examples -## Configuration Examples - -* [local-cluster](https://github.com/gravitational/teleport/tree/master/examples/local-cluster) : Sample configuration of a 3-node Teleport cluster using just a single machine - ## Daemon Configuration * [systemd](https://github.com/gravitational/teleport/tree/master/examples/systemd) : Service file for systemd @@ -13,7 +9,6 @@ * [AWS: CloudFormation](https://github.com/gravitational/teleport/tree/master/examples/aws/cloudformation#aws-cloudformation-based-provisioning-example) : CloudFormation templates as an example of how to setup HA Teleport in AWS using our AMIs. * [AWS: Terraform](https://github.com/gravitational/teleport/tree/master/examples/aws/terraform#terraform-based-provisioning-example-amazon-single-ami) : Terraform specifies example provisioning script for Teleport auth, proxy and nodes in HA mode. -* [AWS: EKS. External Link](https://aws.amazon.com/blogs/opensource/authenticating-eks-github-credentials-teleport/) ## Kubernetes - Helm Charts @@ -33,4 +28,4 @@ ### Trusted Cluster * [Trusted Cluster Resource](https://github.com/gravitational/teleport/blob/master/examples/resources/trusted_cluster.yaml) -* [Trusted Cluster Resource - With RBAC (Enterprise Only)](https://github.com/gravitational/teleport/blob/master/examples/resources/trusted_cluster_enterprise.yaml) \ No newline at end of file +* [Trusted Cluster Resource - With RBAC (Enterprise Only)](https://github.com/gravitational/teleport/blob/master/examples/resources/trusted_cluster_enterprise.yaml) diff --git a/examples/aws/terraform/README.md b/examples/aws/terraform/README.md index 045082edcce00..69b407b1ab161 100644 --- a/examples/aws/terraform/README.md +++ b/examples/aws/terraform/README.md @@ -11,7 +11,7 @@ If you are planning on using our Terraform example in production, please referen We recommend familiarizing yourself with the following resources prior to reviewing our Terraform examples: -- [Teleport Architecture](https://goteleport.com/docs/architecture/overview/) +- [Teleport Architecture](https://goteleport.com/docs/reference/architecture/) - [Admin Guide](https://goteleport.com/docs/management/admin/) In order to spin up AWS resources using these Terraform examples, you need the following software: @@ -39,4 +39,4 @@ Please [see the AMIS.md file](AMIS.md) for a list of public Teleport AMI IDs tha ## This is not the Teleport Terraform Provider -If you are looking for Teleport's [Terraform Provider](https://goteleport.com/docs/setup/guides/terraform-provider/) which can be used to provision users, roles, auth connectors and other resources inside an existing Teleport cluster, its source code can be found in the `teleport-plugins` repo here: https://github.com/gravitational/teleport-plugins/tree/master/terraform +If you are looking for Teleport's [Terraform Provider](https://goteleport.com/docs/reference/terraform-provider/terraform-provider/) which can be used to provision users, roles, auth connectors and other resources inside an existing Teleport cluster, its source code can be found here: https://github.com/gravitational/teleport/tree/master/integrations/terraform diff --git a/examples/aws/terraform/ha-autoscale-cluster/Makefile b/examples/aws/terraform/ha-autoscale-cluster/Makefile index 04c1848ec74a8..504e4772b2389 100644 --- a/examples/aws/terraform/ha-autoscale-cluster/Makefile +++ b/examples/aws/terraform/ha-autoscale-cluster/Makefile @@ -9,8 +9,8 @@ TF_VAR_cluster_name ?= # AWS SSH key name to provision in installed instances, should be available in the region TF_VAR_key_name ?= -# Full absolute path to the license file for Teleport Enterprise or Pro. -# This license will be copied into SSM and then pulled down on the auth nodes to enable Enterprise/Pro functionality +# Full absolute path to the license file for Teleport Enterprise +# This license will be copied into SSM and then pulled down on the auth nodes to enable Enterprise functionality TF_VAR_license_path ?= # AMI name contains the version of Teleport to install, and whether to use OSS or Enterprise version diff --git a/examples/aws/terraform/ha-autoscale-cluster/README.md b/examples/aws/terraform/ha-autoscale-cluster/README.md index ac724d7f6083f..155c99cdbca42 100644 --- a/examples/aws/terraform/ha-autoscale-cluster/README.md +++ b/examples/aws/terraform/ha-autoscale-cluster/README.md @@ -20,7 +20,7 @@ the ports to the other parts. We recommend familiarizing yourself with the following resources prior to reviewing our Terraform examples: -- [Teleport Architecture](https://goteleport.com/docs/architecture/overview/) +- [Teleport Architecture](https://goteleport.com/docs/reference/architecture/) - [Admin Guide](https://goteleport.com/docs/management/admin/) - [Running Teleport Enterprise in High Availability mode on AWS](https://goteleport.com/docs/deploy-a-cluster/deployments/aws-ha-autoscale-cluster-terraform/) diff --git a/examples/aws/terraform/starter-cluster/README.md b/examples/aws/terraform/starter-cluster/README.md index 4e58feaf650dc..65db375766c43 100644 --- a/examples/aws/terraform/starter-cluster/README.md +++ b/examples/aws/terraform/starter-cluster/README.md @@ -6,7 +6,7 @@ Do not use this in production! This example should be used for demo, proof-of-co ## How does this work? -Teleport AMIs are built so you only need to specify environment variables to bring a fully configured instance online. See `data.tpl` or our [documentation](https://goteleport.com/docs/deploy-a-cluster/deployments/aws-terraform/#set-up-variables) to learn more about supported environment variables. +Teleport AMIs are built so you only need to specify environment variables to bring a fully configured instance online. See `data.tpl` or our [documentation](https://goteleport.com/docs/admin-guides/deploy-a-cluster/deployments/aws-starter-cluster-terraform/#set-up-variables) to learn more about supported environment variables. A series of systemd [units](https://github.com/gravitational/teleport/tree/master/assets/aws/files/system) bootstrap the instance, via several bash [scripts](https://github.com/gravitational/teleport/tree/master/assets/aws/files/bin). diff --git a/examples/chart/access/discord/Chart.yaml b/examples/chart/access/discord/Chart.yaml index 6e93fe382ffb2..c429329b1f5e4 100644 --- a/examples/chart/access/discord/Chart.yaml +++ b/examples/chart/access/discord/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "15.4.21" +.version: &version "15.4.23" apiVersion: v2 name: teleport-plugin-discord diff --git a/examples/chart/access/discord/tests/__snapshot__/configmap_test.yaml.snap b/examples/chart/access/discord/tests/__snapshot__/configmap_test.yaml.snap index 7a4a748815500..69992eb0744e2 100644 --- a/examples/chart/access/discord/tests/__snapshot__/configmap_test.yaml.snap +++ b/examples/chart/access/discord/tests/__snapshot__/configmap_test.yaml.snap @@ -24,6 +24,6 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-discord - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-discord-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-discord-15.4.23 name: RELEASE-NAME-teleport-plugin-discord diff --git a/examples/chart/access/discord/tests/__snapshot__/deployment_test.yaml.snap b/examples/chart/access/discord/tests/__snapshot__/deployment_test.yaml.snap index c9762cdbe2193..28f9a34b27df1 100644 --- a/examples/chart/access/discord/tests/__snapshot__/deployment_test.yaml.snap +++ b/examples/chart/access/discord/tests/__snapshot__/deployment_test.yaml.snap @@ -7,8 +7,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-discord - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-discord-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-discord-15.4.23 name: RELEASE-NAME-teleport-plugin-discord spec: replicas: 1 @@ -22,8 +22,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-discord - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-discord-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-discord-15.4.23 spec: containers: - command: diff --git a/examples/chart/access/email/Chart.yaml b/examples/chart/access/email/Chart.yaml index df83d78f058b3..dce75acc89ac6 100644 --- a/examples/chart/access/email/Chart.yaml +++ b/examples/chart/access/email/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "15.4.21" +.version: &version "15.4.23" apiVersion: v2 name: teleport-plugin-email diff --git a/examples/chart/access/email/tests/__snapshot__/configmap_test.yaml.snap b/examples/chart/access/email/tests/__snapshot__/configmap_test.yaml.snap index 111691aa9b73c..a78bc97f42572 100644 --- a/examples/chart/access/email/tests/__snapshot__/configmap_test.yaml.snap +++ b/examples/chart/access/email/tests/__snapshot__/configmap_test.yaml.snap @@ -26,8 +26,8 @@ should match the snapshot (mailgun on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-email-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-email-15.4.23 name: RELEASE-NAME-teleport-plugin-email should match the snapshot (smtp on): 1: | @@ -59,8 +59,8 @@ should match the snapshot (smtp on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-email-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-email-15.4.23 name: RELEASE-NAME-teleport-plugin-email should match the snapshot (smtp on, no starttls): 1: | @@ -92,8 +92,8 @@ should match the snapshot (smtp on, no starttls): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-email-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-email-15.4.23 name: RELEASE-NAME-teleport-plugin-email should match the snapshot (smtp on, password file): 1: | @@ -125,8 +125,8 @@ should match the snapshot (smtp on, password file): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-email-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-email-15.4.23 name: RELEASE-NAME-teleport-plugin-email should match the snapshot (smtp on, roleToRecipients set): 1: | @@ -161,8 +161,8 @@ should match the snapshot (smtp on, roleToRecipients set): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-email-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-email-15.4.23 name: RELEASE-NAME-teleport-plugin-email should match the snapshot (smtp on, starttls disabled): 1: | @@ -194,6 +194,6 @@ should match the snapshot (smtp on, starttls disabled): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-email-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-email-15.4.23 name: RELEASE-NAME-teleport-plugin-email diff --git a/examples/chart/access/email/tests/__snapshot__/deployment_test.yaml.snap b/examples/chart/access/email/tests/__snapshot__/deployment_test.yaml.snap index 6b474c5fd50b1..c3570da6c1ee0 100644 --- a/examples/chart/access/email/tests/__snapshot__/deployment_test.yaml.snap +++ b/examples/chart/access/email/tests/__snapshot__/deployment_test.yaml.snap @@ -7,8 +7,8 @@ should be possible to override volume name (smtp on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-email-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-email-15.4.23 name: RELEASE-NAME-teleport-plugin-email spec: replicas: 1 @@ -22,8 +22,8 @@ should be possible to override volume name (smtp on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-email-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-email-15.4.23 spec: containers: - command: @@ -34,7 +34,7 @@ should be possible to override volume name (smtp on): env: - name: TELEPORT_PLUGIN_FAIL_FAST value: "true" - image: public.ecr.aws/gravitational/teleport-plugin-email:15.4.21 + image: public.ecr.aws/gravitational/teleport-plugin-email:15.4.23 imagePullPolicy: IfNotPresent name: teleport-plugin-email ports: @@ -75,8 +75,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-email-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-email-15.4.23 name: RELEASE-NAME-teleport-plugin-email spec: replicas: 1 @@ -90,8 +90,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-email-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-email-15.4.23 spec: containers: - command: @@ -136,8 +136,8 @@ should match the snapshot (mailgun on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-email-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-email-15.4.23 name: RELEASE-NAME-teleport-plugin-email spec: replicas: 1 @@ -151,8 +151,8 @@ should match the snapshot (mailgun on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-email-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-email-15.4.23 spec: containers: - command: @@ -163,7 +163,7 @@ should match the snapshot (mailgun on): env: - name: TELEPORT_PLUGIN_FAIL_FAST value: "true" - image: public.ecr.aws/gravitational/teleport-plugin-email:15.4.21 + image: public.ecr.aws/gravitational/teleport-plugin-email:15.4.23 imagePullPolicy: IfNotPresent name: teleport-plugin-email ports: @@ -204,8 +204,8 @@ should match the snapshot (smtp on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-email-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-email-15.4.23 name: RELEASE-NAME-teleport-plugin-email spec: replicas: 1 @@ -219,8 +219,8 @@ should match the snapshot (smtp on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-email-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-email-15.4.23 spec: containers: - command: @@ -231,7 +231,7 @@ should match the snapshot (smtp on): env: - name: TELEPORT_PLUGIN_FAIL_FAST value: "true" - image: public.ecr.aws/gravitational/teleport-plugin-email:15.4.21 + image: public.ecr.aws/gravitational/teleport-plugin-email:15.4.23 imagePullPolicy: IfNotPresent name: teleport-plugin-email ports: @@ -272,8 +272,8 @@ should mount external secret (mailgun on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-email-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-email-15.4.23 name: RELEASE-NAME-teleport-plugin-email spec: replicas: 1 @@ -287,8 +287,8 @@ should mount external secret (mailgun on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-email-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-email-15.4.23 spec: containers: - command: @@ -299,7 +299,7 @@ should mount external secret (mailgun on): env: - name: TELEPORT_PLUGIN_FAIL_FAST value: "true" - image: public.ecr.aws/gravitational/teleport-plugin-email:15.4.21 + image: public.ecr.aws/gravitational/teleport-plugin-email:15.4.23 imagePullPolicy: IfNotPresent name: teleport-plugin-email ports: @@ -340,8 +340,8 @@ should mount external secret (smtp on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-email-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-email-15.4.23 name: RELEASE-NAME-teleport-plugin-email spec: replicas: 1 @@ -355,8 +355,8 @@ should mount external secret (smtp on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-email - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-email-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-email-15.4.23 spec: containers: - command: @@ -367,7 +367,7 @@ should mount external secret (smtp on): env: - name: TELEPORT_PLUGIN_FAIL_FAST value: "true" - image: public.ecr.aws/gravitational/teleport-plugin-email:15.4.21 + image: public.ecr.aws/gravitational/teleport-plugin-email:15.4.23 imagePullPolicy: IfNotPresent name: teleport-plugin-email ports: diff --git a/examples/chart/access/jira/Chart.yaml b/examples/chart/access/jira/Chart.yaml index 2c24c3128e025..7edb5a9076d14 100644 --- a/examples/chart/access/jira/Chart.yaml +++ b/examples/chart/access/jira/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "15.4.21" +.version: &version "15.4.23" apiVersion: v2 name: teleport-plugin-jira diff --git a/examples/chart/access/jira/tests/__snapshot__/configmap_test.yaml.snap b/examples/chart/access/jira/tests/__snapshot__/configmap_test.yaml.snap index a5659554c1a60..9cb720bafe428 100644 --- a/examples/chart/access/jira/tests/__snapshot__/configmap_test.yaml.snap +++ b/examples/chart/access/jira/tests/__snapshot__/configmap_test.yaml.snap @@ -32,6 +32,6 @@ should match the snapshot (smtp on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-jira - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-jira-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-jira-15.4.23 name: RELEASE-NAME-teleport-plugin-jira diff --git a/examples/chart/access/jira/tests/__snapshot__/deployment_test.yaml.snap b/examples/chart/access/jira/tests/__snapshot__/deployment_test.yaml.snap index da70b4a54ea19..a70357f5ff8c8 100644 --- a/examples/chart/access/jira/tests/__snapshot__/deployment_test.yaml.snap +++ b/examples/chart/access/jira/tests/__snapshot__/deployment_test.yaml.snap @@ -7,8 +7,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-jira - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-jira-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-jira-15.4.23 name: RELEASE-NAME-teleport-plugin-jira spec: replicas: 1 @@ -22,8 +22,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-jira - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-jira-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-jira-15.4.23 spec: containers: - command: diff --git a/examples/chart/access/mattermost/Chart.yaml b/examples/chart/access/mattermost/Chart.yaml index e60f6f5918493..1ef9b8d9c09a5 100644 --- a/examples/chart/access/mattermost/Chart.yaml +++ b/examples/chart/access/mattermost/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "15.4.21" +.version: &version "15.4.23" apiVersion: v2 name: teleport-plugin-mattermost diff --git a/examples/chart/access/mattermost/tests/__snapshot__/configmap_test.yaml.snap b/examples/chart/access/mattermost/tests/__snapshot__/configmap_test.yaml.snap index ec5d928face2d..5906a54338974 100644 --- a/examples/chart/access/mattermost/tests/__snapshot__/configmap_test.yaml.snap +++ b/examples/chart/access/mattermost/tests/__snapshot__/configmap_test.yaml.snap @@ -22,6 +22,6 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-mattermost - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-mattermost-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-mattermost-15.4.23 name: RELEASE-NAME-teleport-plugin-mattermost diff --git a/examples/chart/access/mattermost/tests/__snapshot__/deployment_test.yaml.snap b/examples/chart/access/mattermost/tests/__snapshot__/deployment_test.yaml.snap index 03b790fa650c5..cbaed3561fffd 100644 --- a/examples/chart/access/mattermost/tests/__snapshot__/deployment_test.yaml.snap +++ b/examples/chart/access/mattermost/tests/__snapshot__/deployment_test.yaml.snap @@ -7,8 +7,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-mattermost - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-mattermost-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-mattermost-15.4.23 name: RELEASE-NAME-teleport-plugin-mattermost spec: replicas: 1 @@ -22,8 +22,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-mattermost - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-mattermost-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-mattermost-15.4.23 spec: containers: - command: @@ -75,8 +75,8 @@ should mount external secret: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-mattermost - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-mattermost-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-mattermost-15.4.23 name: RELEASE-NAME-teleport-plugin-mattermost spec: replicas: 1 @@ -90,8 +90,8 @@ should mount external secret: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-mattermost - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-mattermost-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-mattermost-15.4.23 spec: containers: - command: @@ -102,7 +102,7 @@ should mount external secret: env: - name: TELEPORT_PLUGIN_FAIL_FAST value: "true" - image: public.ecr.aws/gravitational/teleport-plugin-mattermost:15.4.21 + image: public.ecr.aws/gravitational/teleport-plugin-mattermost:15.4.23 imagePullPolicy: IfNotPresent name: teleport-plugin-mattermost ports: @@ -143,8 +143,8 @@ should override volume name: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-mattermost - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-mattermost-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-mattermost-15.4.23 name: RELEASE-NAME-teleport-plugin-mattermost spec: replicas: 1 @@ -158,8 +158,8 @@ should override volume name: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-mattermost - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-mattermost-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-mattermost-15.4.23 spec: containers: - command: @@ -170,7 +170,7 @@ should override volume name: env: - name: TELEPORT_PLUGIN_FAIL_FAST value: "true" - image: public.ecr.aws/gravitational/teleport-plugin-mattermost:15.4.21 + image: public.ecr.aws/gravitational/teleport-plugin-mattermost:15.4.23 imagePullPolicy: IfNotPresent name: teleport-plugin-mattermost ports: diff --git a/examples/chart/access/msteams/Chart.yaml b/examples/chart/access/msteams/Chart.yaml index 755dff434b449..3bb8c57ccc069 100644 --- a/examples/chart/access/msteams/Chart.yaml +++ b/examples/chart/access/msteams/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "15.4.21" +.version: &version "15.4.23" apiVersion: v2 name: teleport-plugin-msteams diff --git a/examples/chart/access/msteams/tests/__snapshot__/configmap_test.yaml.snap b/examples/chart/access/msteams/tests/__snapshot__/configmap_test.yaml.snap index f121390dc415d..6389299b15482 100644 --- a/examples/chart/access/msteams/tests/__snapshot__/configmap_test.yaml.snap +++ b/examples/chart/access/msteams/tests/__snapshot__/configmap_test.yaml.snap @@ -29,6 +29,6 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-msteams - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-msteams-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-msteams-15.4.23 name: RELEASE-NAME-teleport-plugin-msteams diff --git a/examples/chart/access/msteams/tests/__snapshot__/deployment_test.yaml.snap b/examples/chart/access/msteams/tests/__snapshot__/deployment_test.yaml.snap index eda539fe1babb..29a094855162f 100644 --- a/examples/chart/access/msteams/tests/__snapshot__/deployment_test.yaml.snap +++ b/examples/chart/access/msteams/tests/__snapshot__/deployment_test.yaml.snap @@ -7,8 +7,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-msteams - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-msteams-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-msteams-15.4.23 name: RELEASE-NAME-teleport-plugin-msteams spec: replicas: 1 @@ -22,8 +22,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-msteams - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-msteams-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-msteams-15.4.23 spec: containers: - command: diff --git a/examples/chart/access/pagerduty/Chart.yaml b/examples/chart/access/pagerduty/Chart.yaml index f07eb836a93b8..82a4e7c8c76b8 100644 --- a/examples/chart/access/pagerduty/Chart.yaml +++ b/examples/chart/access/pagerduty/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "15.4.21" +.version: &version "15.4.23" apiVersion: v2 name: teleport-plugin-pagerduty diff --git a/examples/chart/access/pagerduty/tests/__snapshot__/configmap_test.yaml.snap b/examples/chart/access/pagerduty/tests/__snapshot__/configmap_test.yaml.snap index 10f7e14ed8e6e..25ba6fae1b121 100644 --- a/examples/chart/access/pagerduty/tests/__snapshot__/configmap_test.yaml.snap +++ b/examples/chart/access/pagerduty/tests/__snapshot__/configmap_test.yaml.snap @@ -21,6 +21,6 @@ should match the snapshot (smtp on): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-pagerduty - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-pagerduty-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-pagerduty-15.4.23 name: RELEASE-NAME-teleport-plugin-pagerduty diff --git a/examples/chart/access/pagerduty/tests/__snapshot__/deployment_test.yaml.snap b/examples/chart/access/pagerduty/tests/__snapshot__/deployment_test.yaml.snap index 37f7bae77766b..b468fd2f536b4 100644 --- a/examples/chart/access/pagerduty/tests/__snapshot__/deployment_test.yaml.snap +++ b/examples/chart/access/pagerduty/tests/__snapshot__/deployment_test.yaml.snap @@ -7,8 +7,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-pagerduty - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-pagerduty-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-pagerduty-15.4.23 name: RELEASE-NAME-teleport-plugin-pagerduty spec: replicas: 1 @@ -22,8 +22,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-pagerduty - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-pagerduty-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-pagerduty-15.4.23 spec: containers: - command: diff --git a/examples/chart/access/slack/Chart.yaml b/examples/chart/access/slack/Chart.yaml index a2935e1b3ff8b..79f18f8966b13 100644 --- a/examples/chart/access/slack/Chart.yaml +++ b/examples/chart/access/slack/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "15.4.21" +.version: &version "15.4.23" apiVersion: v2 name: teleport-plugin-slack diff --git a/examples/chart/access/slack/tests/__snapshot__/configmap_test.yaml.snap b/examples/chart/access/slack/tests/__snapshot__/configmap_test.yaml.snap index 3aa64603dbfe4..6f4f198c85ca2 100644 --- a/examples/chart/access/slack/tests/__snapshot__/configmap_test.yaml.snap +++ b/examples/chart/access/slack/tests/__snapshot__/configmap_test.yaml.snap @@ -24,6 +24,6 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-slack - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-slack-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-slack-15.4.23 name: RELEASE-NAME-teleport-plugin-slack diff --git a/examples/chart/access/slack/tests/__snapshot__/deployment_test.yaml.snap b/examples/chart/access/slack/tests/__snapshot__/deployment_test.yaml.snap index 7fbe49142fcfb..4412d89d0ceef 100644 --- a/examples/chart/access/slack/tests/__snapshot__/deployment_test.yaml.snap +++ b/examples/chart/access/slack/tests/__snapshot__/deployment_test.yaml.snap @@ -7,8 +7,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-slack - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-slack-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-slack-15.4.23 name: RELEASE-NAME-teleport-plugin-slack spec: replicas: 1 @@ -22,8 +22,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-slack - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-slack-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-slack-15.4.23 spec: containers: - command: diff --git a/examples/chart/event-handler/Chart.yaml b/examples/chart/event-handler/Chart.yaml index 2845033714e0b..e5c7122ebc7d1 100644 --- a/examples/chart/event-handler/Chart.yaml +++ b/examples/chart/event-handler/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "15.4.21" +.version: &version "15.4.23" apiVersion: v2 name: teleport-plugin-event-handler diff --git a/examples/chart/event-handler/tests/__snapshot__/configmap_test.yaml.snap b/examples/chart/event-handler/tests/__snapshot__/configmap_test.yaml.snap index 2ccc9ca2c3200..c3e7df7d5481a 100644 --- a/examples/chart/event-handler/tests/__snapshot__/configmap_test.yaml.snap +++ b/examples/chart/event-handler/tests/__snapshot__/configmap_test.yaml.snap @@ -26,6 +26,6 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-event-handler - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-event-handler-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-event-handler-15.4.23 name: RELEASE-NAME-teleport-plugin-event-handler diff --git a/examples/chart/event-handler/tests/__snapshot__/deployment_test.yaml.snap b/examples/chart/event-handler/tests/__snapshot__/deployment_test.yaml.snap index 8104d09f6ba1a..79661fd78453f 100644 --- a/examples/chart/event-handler/tests/__snapshot__/deployment_test.yaml.snap +++ b/examples/chart/event-handler/tests/__snapshot__/deployment_test.yaml.snap @@ -7,8 +7,8 @@ should match the snapshot: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-plugin-event-handler - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-plugin-event-handler-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-plugin-event-handler-15.4.23 name: RELEASE-NAME-teleport-plugin-event-handler spec: replicas: 1 @@ -82,7 +82,7 @@ should mount tls.existingCASecretName and set environment when set in values: value: "true" - name: SSL_CERT_FILE value: /etc/teleport-tls-ca/ca.pem - image: public.ecr.aws/gravitational/teleport-plugin-event-handler:15.4.21 + image: public.ecr.aws/gravitational/teleport-plugin-event-handler:15.4.23 imagePullPolicy: IfNotPresent name: teleport-plugin-event-handler ports: diff --git a/examples/chart/tbot/Chart.yaml b/examples/chart/tbot/Chart.yaml index 43bf570aa1e79..dd57cd2e65657 100644 --- a/examples/chart/tbot/Chart.yaml +++ b/examples/chart/tbot/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "15.4.21" +.version: &version "15.4.23" name: tbot apiVersion: v2 diff --git a/examples/chart/tbot/tests/__snapshot__/deployment_test.yaml.snap b/examples/chart/tbot/tests/__snapshot__/deployment_test.yaml.snap index 74e87156d929d..054433732d6e5 100644 --- a/examples/chart/tbot/tests/__snapshot__/deployment_test.yaml.snap +++ b/examples/chart/tbot/tests/__snapshot__/deployment_test.yaml.snap @@ -29,7 +29,7 @@ should match the snapshot (full): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: tbot - helm.sh/chart: tbot-15.4.21 + helm.sh/chart: tbot-15.4.23 test-key: test-label-pod spec: affinity: @@ -68,7 +68,7 @@ should match the snapshot (full): value: "1" - name: TEST_ENV value: test-value - image: public.ecr.aws/gravitational/tbot-distroless:15.4.21 + image: public.ecr.aws/gravitational/tbot-distroless:15.4.23 imagePullPolicy: Always livenessProbe: failureThreshold: 6 @@ -154,7 +154,7 @@ should match the snapshot (simple): app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: tbot - helm.sh/chart: tbot-15.4.21 + helm.sh/chart: tbot-15.4.23 spec: containers: - args: @@ -176,7 +176,7 @@ should match the snapshot (simple): fieldPath: spec.nodeName - name: KUBERNETES_TOKEN_PATH value: /var/run/secrets/tokens/join-sa-token - image: public.ecr.aws/gravitational/tbot-distroless:15.4.21 + image: public.ecr.aws/gravitational/tbot-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 diff --git a/examples/chart/teleport-cluster/.lint/auth-enterprise-license.yaml b/examples/chart/teleport-cluster/.lint/auth-enterprise-license.yaml new file mode 100644 index 0000000000000..a86c5261469fc --- /dev/null +++ b/examples/chart/teleport-cluster/.lint/auth-enterprise-license.yaml @@ -0,0 +1,4 @@ +clusterName: helm-lint +enterprise: true +licenseSecretName: enterprise-license + diff --git a/examples/chart/teleport-cluster/Chart.yaml b/examples/chart/teleport-cluster/Chart.yaml index bfedc7055df56..440b4dc48a773 100644 --- a/examples/chart/teleport-cluster/Chart.yaml +++ b/examples/chart/teleport-cluster/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "15.4.21" +.version: &version "15.4.23" name: teleport-cluster apiVersion: v2 diff --git a/examples/chart/teleport-cluster/charts/teleport-operator/.lint/labels.yaml b/examples/chart/teleport-cluster/charts/teleport-operator/.lint/labels.yaml new file mode 100644 index 0000000000000..15d33de282dfa --- /dev/null +++ b/examples/chart/teleport-cluster/charts/teleport-operator/.lint/labels.yaml @@ -0,0 +1,10 @@ +labels: + deployment: + kubernetes.io/deployment: "test-label" + kubernetes.io/deployment-different: 3 + pod: + kubernetes.io/pod: "test-label" + kubernetes.io/pod-different: 4 +teleportAddress: "example.teleport.sh:443" +token: "my-operator-bot" +teleportClusterName: "example.teleport.sh" diff --git a/examples/chart/teleport-cluster/charts/teleport-operator/Chart.yaml b/examples/chart/teleport-cluster/charts/teleport-operator/Chart.yaml index 727efff1c4ad5..ca501a7651dff 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 "15.4.21" +.version: &version "15.4.23" name: teleport-operator apiVersion: v2 diff --git a/examples/chart/teleport-cluster/charts/teleport-operator/templates/deployment.yaml b/examples/chart/teleport-cluster/charts/teleport-operator/templates/deployment.yaml index cd6d67643d81e..ae0395a1c6bd8 100644 --- a/examples/chart/teleport-cluster/charts/teleport-operator/templates/deployment.yaml +++ b/examples/chart/teleport-cluster/charts/teleport-operator/templates/deployment.yaml @@ -4,7 +4,11 @@ kind: Deployment metadata: name: {{ include "teleport-cluster.operator.fullname" . }} namespace: {{ .Release.Namespace }} - labels: {{- include "teleport-cluster.operator.labels" . | nindent 4 }} + labels: + {{- include "teleport-cluster.operator.labels" . | nindent 4 }} + {{- if .Values.labels.deployment }} + {{- toYaml .Values.labels.deployment | nindent 4 }} + {{- end }} {{- if .Values.annotations.deployment }} annotations: {{- toYaml .Values.annotations.deployment | nindent 4 }} {{- end }} @@ -22,7 +26,11 @@ spec: {{- if .Values.annotations.pod }} annotations: {{- toYaml .Values.annotations.pod | nindent 8 }} {{- end }} - labels: {{- include "teleport-cluster.operator.labels" . | nindent 8 }} + labels: + {{- include "teleport-cluster.operator.labels" . | nindent 8 }} + {{- if .Values.labels.pod }} + {{- toYaml .Values.labels.pod | nindent 8 }} + {{- end }} spec: {{- if .Values.nodeSelector }} nodeSelector: {{- toYaml .Values.nodeSelector | nindent 8 }} diff --git a/examples/chart/teleport-cluster/charts/teleport-operator/tests/deployment_test.yaml b/examples/chart/teleport-cluster/charts/teleport-operator/tests/deployment_test.yaml index 56f8f5163280c..ca261d8056be4 100644 --- a/examples/chart/teleport-cluster/charts/teleport-operator/tests/deployment_test.yaml +++ b/examples/chart/teleport-cluster/charts/teleport-operator/tests/deployment_test.yaml @@ -59,6 +59,25 @@ tests: path: metadata.annotations.kubernetes\.io/deployment-different value: 3 + - it: sets labels when specified + values: + - ../.lint/labels.yaml + asserts: + # Pod labels + - equal: + path: spec.template.metadata.labels.kubernetes\.io/pod + value: test-label + - equal: + path: spec.template.metadata.labels.kubernetes\.io/pod-different + value: 4 + # Deployment labels + - equal: + path: metadata.labels.kubernetes\.io/deployment + value: test-label + - equal: + path: metadata.labels.kubernetes\.io/deployment-different + value: 3 + - it: should mount tls.existingCASecretName and set environment when set in values values: - ../.lint/existing-tls-ca.yaml diff --git a/examples/chart/teleport-cluster/charts/teleport-operator/values.yaml b/examples/chart/teleport-cluster/charts/teleport-operator/values.yaml index f576b26ce68df..e79f4bb4b5222 100644 --- a/examples/chart/teleport-cluster/charts/teleport-operator/values.yaml +++ b/examples/chart/teleport-cluster/charts/teleport-operator/values.yaml @@ -89,6 +89,15 @@ annotations: # put on the `Deployment` resource created by the chart. serviceAccount: {} +# annotations -- +labels: + # labels.deployment(object) -- contains the Kubernetes labels + # put on the `Deployment` resource created by the chart. + deployment: {} + # labels.pod(object) -- contains the Kubernetes labels + # put on the `Pod` resources created by the chart. + pod: {} + # serviceAccount -- serviceAccount: # serviceAccount.create(bool) -- controls if the chart should create the Kubernetes diff --git a/examples/chart/teleport-cluster/templates/_helpers.tpl b/examples/chart/teleport-cluster/templates/_helpers.tpl index 92b8fc0578fbb..7e2f4de3e2c04 100644 --- a/examples/chart/teleport-cluster/templates/_helpers.tpl +++ b/examples/chart/teleport-cluster/templates/_helpers.tpl @@ -6,10 +6,48 @@ if serviceAccount is not defined or serviceAccount.name is empty, use .Release.N {{- coalesce .Values.serviceAccount.name .Release.Name -}} {{- end -}} +{{/* +Create the name of the service account to use in the auth config check hook. + +If the chart is creating service accounts, we know we can create new arbitrary service accounts. +We cannot reuse the same name as the deployment SA because the non-hook service account might +not exist yet. We tried being smart with hooks but ArgoCD doesn't differentiate between install +and upgrade, causing various issues on update and eventually forcing us to use a separate SA. + +If the chart is not creating service accounts, for backward compatibility we don't want +to force new service account names to existing chart users. We know the SA should already exist, +so we can use the same SA for deployments and hooks. +*/}} +{{- define "teleport-cluster.auth.hookServiceAccountName" -}} +{{- include "teleport-cluster.auth.serviceAccountName" . -}} +{{- if .Values.serviceAccount.create -}} +-hook +{{- end -}} +{{- end -}} + {{- define "teleport-cluster.proxy.serviceAccountName" -}} {{- coalesce .Values.serviceAccount.name .Release.Name -}}-proxy {{- end -}} +{{/* +Create the name of the service account to use in the proxy config check hook. + +If the chart is creating service accounts, we know we can create new arbitrary service accounts. +We cannot reuse the same name as the deployment SA because the non-hook service account might +not exist yet. We tried being smart with hooks but ArgoCD doesn't differentiate between install +and upgrade, causing various issues on update and eventually forcing us to use a separate SA. + +If the chart is not creating service accounts, for backward compatibility we don't want +to force new service account names to existing chart users. We know the SA should already exist, +so we can use the same SA for deployments and hooks. +*/}} +{{- define "teleport-cluster.proxy.hookServiceAccountName" -}} +{{- include "teleport-cluster.proxy.serviceAccountName" . -}} +{{- if .Values.serviceAccount.create -}} +-hook +{{- end -}} +{{- end -}} + {{- define "teleport-cluster.version" -}} {{- coalesce .Values.teleportVersionOverride .Chart.Version }} {{- end -}} diff --git a/examples/chart/teleport-cluster/templates/auth/deployment.yaml b/examples/chart/teleport-cluster/templates/auth/deployment.yaml index 7dc0901694fdc..aee44b69befe3 100644 --- a/examples/chart/teleport-cluster/templates/auth/deployment.yaml +++ b/examples/chart/teleport-cluster/templates/auth/deployment.yaml @@ -266,7 +266,7 @@ spec: {{- if $auth.enterprise }} - name: license secret: - secretName: "license" + secretName: {{ $auth.licenseSecretName | quote }} {{- end }} {{- if and ($auth.gcp.credentialSecretName) (eq $auth.chartMode "gcp") }} - name: gcp-credentials diff --git a/examples/chart/teleport-cluster/templates/auth/predeploy_job.yaml b/examples/chart/teleport-cluster/templates/auth/predeploy_job.yaml index 860c790645fa4..c557c718042c3 100644 --- a/examples/chart/teleport-cluster/templates/auth/predeploy_job.yaml +++ b/examples/chart/teleport-cluster/templates/auth/predeploy_job.yaml @@ -17,6 +17,12 @@ metadata: spec: backoffLimit: 1 template: + metadata: + labels: + {{- include "teleport-cluster.auth.labels" . | nindent 8 }} + {{- if $auth.extraLabels.jobPod }} + {{- toYaml $auth.extraLabels.jobPod | nindent 8 }} + {{- end }} spec: {{- if $auth.affinity }} affinity: {{- toYaml $auth.affinity | nindent 8 }} @@ -84,7 +90,7 @@ spec: {{- if .Values.enterprise }} - name: license secret: - secretName: "license" + secretName: {{ .Values.licenseSecretName | quote }} {{- end }} {{- if and (.Values.gcp.credentialSecretName) (eq .Values.chartMode "gcp") }} - name: gcp-credentials @@ -104,5 +110,5 @@ spec: {{- if .Values.extraVolumes }} {{- toYaml .Values.extraVolumes | nindent 6 }} {{- end }} - serviceAccountName: {{ include "teleport-cluster.auth.serviceAccountName" . }} + serviceAccountName: {{ include "teleport-cluster.auth.hookServiceAccountName" . }} {{- end }} diff --git a/examples/chart/teleport-cluster/templates/auth/predeploy_serviceaccount.yaml b/examples/chart/teleport-cluster/templates/auth/predeploy_serviceaccount.yaml index 8510f30145fb0..893078f9a902d 100644 --- a/examples/chart/teleport-cluster/templates/auth/predeploy_serviceaccount.yaml +++ b/examples/chart/teleport-cluster/templates/auth/predeploy_serviceaccount.yaml @@ -2,12 +2,13 @@ # upon first install of the chart. it will be deleted by Helm after the pre-deploy hooks run, then the # regular serviceAccount is created with the same name and exists for the lifetime of the release. {{- $auth := mustMergeOverwrite (mustDeepCopy .Values) .Values.auth -}} +{{- if $auth.validateConfigOnDeploy }} {{- $projectedServiceAccountToken := semverCompare ">=1.20.0-0" .Capabilities.KubeVersion.Version }} {{- if $auth.serviceAccount.create }} apiVersion: v1 kind: ServiceAccount metadata: - name: {{ template "teleport-cluster.auth.serviceAccountName" . }} + name: {{ template "teleport-cluster.auth.hookServiceAccountName" . }} namespace: {{ .Release.Namespace }} labels: {{- include "teleport-cluster.auth.labels" . | nindent 4 }} @@ -15,9 +16,7 @@ metadata: {{- toYaml $auth.extraLabels.serviceAccount | nindent 4 }} {{- end }} annotations: - # this ServiceAccount resource MUST only be hooked on pre-install, as it would conflict - # with the existing ServiceAccount if hooked on pre-upgrade. - "helm.sh/hook": pre-install + "helm.sh/hook": pre-install,pre-upgrade "helm.sh/hook-weight": "3" "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded {{- if or $auth.annotations.serviceAccount $auth.azure.clientID }} @@ -32,3 +31,4 @@ metadata: automountServiceAccountToken: false {{- end }} {{- end }} +{{- end }} diff --git a/examples/chart/teleport-cluster/templates/proxy/predeploy_job.yaml b/examples/chart/teleport-cluster/templates/proxy/predeploy_job.yaml index 627aa4c626fcc..4484d9cadc095 100644 --- a/examples/chart/teleport-cluster/templates/proxy/predeploy_job.yaml +++ b/examples/chart/teleport-cluster/templates/proxy/predeploy_job.yaml @@ -17,6 +17,12 @@ metadata: spec: backoffLimit: 1 template: + metadata: + labels: + {{- include "teleport-cluster.proxy.labels" . | nindent 8 }} + {{- if $proxy.extraLabels.jobPod }} + {{- toYaml $proxy.extraLabels.jobPod | nindent 8 }} + {{- end }} spec: {{- if $proxy.affinity }} affinity: {{- toYaml $proxy.affinity | nindent 8 }} @@ -100,5 +106,5 @@ spec: {{- if $proxy.extraVolumes }} {{- toYaml $proxy.extraVolumes | nindent 6 }} {{- end }} - serviceAccountName: {{ include "teleport-cluster.proxy.serviceAccountName" . }} + serviceAccountName: {{ include "teleport-cluster.proxy.hookServiceAccountName" . }} {{- end }} diff --git a/examples/chart/teleport-cluster/templates/proxy/predeploy_serviceaccount.yaml b/examples/chart/teleport-cluster/templates/proxy/predeploy_serviceaccount.yaml index 89a056ceed58e..6c5b9a4a1476c 100644 --- a/examples/chart/teleport-cluster/templates/proxy/predeploy_serviceaccount.yaml +++ b/examples/chart/teleport-cluster/templates/proxy/predeploy_serviceaccount.yaml @@ -3,11 +3,12 @@ # regular serviceAccount is created with the same name and exists for the lifetime of the release. {{- $proxy := mustMergeOverwrite (mustDeepCopy .Values) .Values.proxy -}} {{- $projectedServiceAccountToken := semverCompare ">=1.20.0-0" .Capabilities.KubeVersion.Version }} +{{- if $proxy.validateConfigOnDeploy }} {{- if $proxy.serviceAccount.create }} apiVersion: v1 kind: ServiceAccount metadata: - name: {{ include "teleport-cluster.proxy.serviceAccountName" . }} + name: {{ include "teleport-cluster.proxy.hookServiceAccountName" . }} namespace: {{ .Release.Namespace }} labels: {{- include "teleport-cluster.proxy.labels" . | nindent 4 }} @@ -15,9 +16,7 @@ metadata: {{- toYaml $proxy.extraLabels.serviceAccount | nindent 4 }} {{- end }} annotations: - # this ServiceAccount resource MUST only be hooked on pre-install, as it would conflict - # with the existing ServiceAccount if hooked on pre-upgrade. - "helm.sh/hook": pre-install + "helm.sh/hook": pre-install,pre-upgrade "helm.sh/hook-weight": "3" "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded {{- if $proxy.annotations.serviceAccount }} @@ -27,3 +26,4 @@ metadata: automountServiceAccountToken: false {{- end }} {{- end }} +{{- end }} diff --git a/examples/chart/teleport-cluster/tests/__snapshot__/auth_clusterrole_test.yaml.snap b/examples/chart/teleport-cluster/tests/__snapshot__/auth_clusterrole_test.yaml.snap index 7335035c04081..01314ca6ae8c5 100644 --- a/examples/chart/teleport-cluster/tests/__snapshot__/auth_clusterrole_test.yaml.snap +++ b/examples/chart/teleport-cluster/tests/__snapshot__/auth_clusterrole_test.yaml.snap @@ -8,8 +8,8 @@ adds operator permissions to ClusterRole: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-cluster - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-cluster-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-cluster-15.4.23 teleport.dev/majorVersion: "15" name: RELEASE-NAME rules: diff --git a/examples/chart/teleport-cluster/tests/__snapshot__/auth_config_test.yaml.snap b/examples/chart/teleport-cluster/tests/__snapshot__/auth_config_test.yaml.snap index cefaac11d5f78..7a7367b31ecd3 100644 --- a/examples/chart/teleport-cluster/tests/__snapshot__/auth_config_test.yaml.snap +++ b/examples/chart/teleport-cluster/tests/__snapshot__/auth_config_test.yaml.snap @@ -1848,8 +1848,8 @@ sets clusterDomain on Configmap: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-cluster - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-cluster-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-cluster-15.4.23 teleport.dev/majorVersion: "15" name: RELEASE-NAME-auth namespace: NAMESPACE 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 94f920ce59a8c..b2c07900c4cb4 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 @@ -8,7 +8,7 @@ - args: - --diag-addr=0.0.0.0:3000 - --apply-on-startup=/etc/teleport/apply-on-startup.yaml - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent lifecycle: preStop: @@ -141,7 +141,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:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent lifecycle: preStop: @@ -238,7 +238,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:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent lifecycle: preStop: @@ -324,7 +324,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:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent lifecycle: preStop: diff --git a/examples/chart/teleport-cluster/tests/__snapshot__/proxy_config_test.yaml.snap b/examples/chart/teleport-cluster/tests/__snapshot__/proxy_config_test.yaml.snap index d41193e547707..6325a7ba9cc9a 100644 --- a/examples/chart/teleport-cluster/tests/__snapshot__/proxy_config_test.yaml.snap +++ b/examples/chart/teleport-cluster/tests/__snapshot__/proxy_config_test.yaml.snap @@ -567,8 +567,8 @@ sets clusterDomain on Configmap: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-cluster - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-cluster-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-cluster-15.4.23 teleport.dev/majorVersion: "15" name: RELEASE-NAME-proxy namespace: NAMESPACE 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 c820462526b3d..ada05f4705ca1 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 @@ -11,8 +11,8 @@ sets clusterDomain on Deployment Pods: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-cluster - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-cluster-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-cluster-15.4.23 teleport.dev/majorVersion: "15" name: RELEASE-NAME-proxy namespace: NAMESPACE @@ -26,7 +26,7 @@ sets clusterDomain on Deployment Pods: template: metadata: annotations: - checksum/config: 22ef5ea23ef0f3a1ae6c30584cc73c4c5bf163c147c0f627e5f1044dffceeb39 + checksum/config: ad7b0a3d0684475676991c8017b6cb4d9c79fc8e1d68985be48e623b02d7b25d kubernetes.io/pod: test-annotation kubernetes.io/pod-different: 4 labels: @@ -34,8 +34,8 @@ sets clusterDomain on Deployment Pods: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: teleport-cluster - app.kubernetes.io/version: 15.4.21 - helm.sh/chart: teleport-cluster-15.4.21 + app.kubernetes.io/version: 15.4.23 + helm.sh/chart: teleport-cluster-15.4.23 teleport.dev/majorVersion: "15" spec: affinity: @@ -44,7 +44,7 @@ sets clusterDomain on Deployment Pods: containers: - args: - --diag-addr=0.0.0.0:3000 - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent lifecycle: preStop: @@ -105,7 +105,7 @@ sets clusterDomain on Deployment Pods: - wait - no-resolve - RELEASE-NAME-auth-v14.NAMESPACE.svc.test.com - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 name: wait-auth-update serviceAccountName: RELEASE-NAME-proxy terminationGracePeriodSeconds: 60 @@ -137,7 +137,7 @@ should provision initContainer correctly when set in values: - wait - no-resolve - RELEASE-NAME-auth-v14.NAMESPACE.svc.cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 name: wait-auth-update resources: limits: @@ -201,7 +201,7 @@ should set nodeSelector when set in values: containers: - args: - --diag-addr=0.0.0.0:3000 - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent lifecycle: preStop: @@ -262,7 +262,7 @@ should set nodeSelector when set in values: - wait - no-resolve - RELEASE-NAME-auth-v14.NAMESPACE.svc.cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 name: wait-auth-update nodeSelector: environment: security @@ -313,7 +313,7 @@ should set resources for wait-auth-update initContainer when set in values: containers: - args: - --diag-addr=0.0.0.0:3000 - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent lifecycle: preStop: @@ -381,7 +381,7 @@ should set resources for wait-auth-update initContainer when set in values: - wait - no-resolve - RELEASE-NAME-auth-v14.NAMESPACE.svc.cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 name: wait-auth-update resources: limits: @@ -421,7 +421,7 @@ should set resources when set in values: containers: - args: - --diag-addr=0.0.0.0:3000 - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent lifecycle: preStop: @@ -489,7 +489,7 @@ should set resources when set in values: - wait - no-resolve - RELEASE-NAME-auth-v14.NAMESPACE.svc.cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 name: wait-auth-update resources: limits: @@ -529,7 +529,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:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent lifecycle: preStop: @@ -597,7 +597,7 @@ should set securityContext for initContainers when set in values: - wait - no-resolve - RELEASE-NAME-auth-v14.NAMESPACE.svc.cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 name: wait-auth-update securityContext: allowPrivilegeEscalation: false @@ -637,7 +637,7 @@ should set securityContext when set in values: containers: - args: - --diag-addr=0.0.0.0:3000 - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent lifecycle: preStop: @@ -705,7 +705,7 @@ should set securityContext when set in values: - wait - no-resolve - RELEASE-NAME-auth-v14.NAMESPACE.svc.cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 name: wait-auth-update securityContext: allowPrivilegeEscalation: false diff --git a/examples/chart/teleport-cluster/tests/auth_deployment_test.yaml b/examples/chart/teleport-cluster/tests/auth_deployment_test.yaml index 6f158540d23a7..49946a9500085 100644 --- a/examples/chart/teleport-cluster/tests/auth_deployment_test.yaml +++ b/examples/chart/teleport-cluster/tests/auth_deployment_test.yaml @@ -215,6 +215,30 @@ tests: secret: secretName: license + - it: should use enterprise image and mount license with custom secret name when enterprise is set in values + template: auth/deployment.yaml + set: + clusterName: helm-lint.example.com + enterprise: true + licenseSecretName: enterprise-license + teleportVersionOverride: 12.2.1 + asserts: + - equal: + path: spec.template.spec.containers[0].image + value: public.ecr.aws/gravitational/teleport-ent-distroless:12.2.1 + - contains: + path: spec.template.spec.containers[0].volumeMounts + content: + mountPath: /var/lib/license + name: "license" + readOnly: true + - contains: + path: spec.template.spec.volumes + content: + name: license + secret: + secretName: enterprise-license + - it: should use OSS image and not mount license when enterprise is not set in values template: auth/deployment.yaml set: diff --git a/examples/chart/teleport-cluster/tests/predeploy_test.yaml b/examples/chart/teleport-cluster/tests/predeploy_test.yaml index c9de357957901..7481cae5217df 100644 --- a/examples/chart/teleport-cluster/tests/predeploy_test.yaml +++ b/examples/chart/teleport-cluster/tests/predeploy_test.yaml @@ -2,8 +2,10 @@ suite: Pre-Deploy Config Test Hooks templates: - auth/predeploy_job.yaml - auth/predeploy_config.yaml + - auth/predeploy_serviceaccount.yaml - proxy/predeploy_job.yaml - proxy/predeploy_config.yaml + - proxy/predeploy_serviceaccount.yaml tests: - it: Deploys the auth-test config template: auth/predeploy_config.yaml @@ -53,6 +55,7 @@ tests: asserts: - hasDocuments: count: 0 + - it: should set resources on auth predeploy job when set in values template: auth/predeploy_job.yaml values: @@ -130,6 +133,26 @@ tests: path: metadata.labels.baz value: overridden + - it: should set extraLabels.jobPod on auth predeploy job when set in values + template: auth/predeploy_job.yaml + set: + clusterName: helm-lint + extraLabels: + jobPod: + foo: bar + baz: override-me + auth: + extraLabels: + jobPod: + baz: overridden + asserts: + - equal: + path: spec.template.metadata.labels.foo + value: bar + - equal: + path: spec.template.metadata.labels.baz + value: overridden + - it: should set extraLabels on auth predeploy config when set in values template: auth/predeploy_config.yaml set: @@ -149,6 +172,7 @@ tests: - equal: path: metadata.labels.baz value: overridden + - it: should set extraLabels on proxy predeploy job when set in values template: proxy/predeploy_job.yaml set: @@ -169,6 +193,26 @@ tests: path: metadata.labels.baz value: overridden + - it: should set extraLabels.jobPod on proxy predeploy job when set in values + template: proxy/predeploy_job.yaml + set: + clusterName: helm-lint + extraLabels: + jobPod: + foo: bar + baz: override-me + proxy: + extraLabels: + jobPod: + baz: overridden + asserts: + - equal: + path: spec.template.metadata.labels.foo + value: bar + - equal: + path: spec.template.metadata.labels.baz + value: overridden + - it: should set extraLabels on proxy predeploy config when set in values template: proxy/predeploy_config.yaml set: @@ -189,41 +233,65 @@ tests: path: metadata.labels.baz value: overridden - - it: should use default serviceAccount name for auth predeploy job SA when not set in values + - it: should use default serviceAccount name suffixed with -hook for auth predeploy job SA when not set in values and we're creating SAs template: auth/predeploy_job.yaml set: clusterName: helm-lint asserts: - equal: path: spec.template.spec.serviceAccountName - value: RELEASE-NAME + value: RELEASE-NAME-hook - - it: should use serviceAccount.name for auth predeploy job SA when set in values + - it: should use serviceAccount.name suffixed with -hook for auth predeploy job SA when set in values and we're creating SAs template: auth/predeploy_job.yaml set: clusterName: helm-lint serviceAccount: name: helm-test-sa + asserts: + - equal: + path: spec.template.spec.serviceAccountName + value: helm-test-sa-hook + + - it: should use serviceAccount.name for auth predeploy job SA when set in values and we're not creating SAs + template: auth/predeploy_job.yaml + set: + clusterName: helm-lint + serviceAccount: + name: helm-test-sa + create: false asserts: - equal: path: spec.template.spec.serviceAccountName value: helm-test-sa - - it: should use default serviceAccount name for proxy predeploy job SA when not set in values + - it: should use default serviceAccount name suffixed with -hook for proxy predeploy job SA when not set in values and we're creating SAs + template: proxy/predeploy_job.yaml + set: + clusterName: helm-lint + asserts: + - equal: + path: spec.template.spec.serviceAccountName + value: RELEASE-NAME-proxy-hook + + - it: should use serviceAccount.name suffixed with -hook for proxy predeploy job SA when set in values and we're creating SAs template: proxy/predeploy_job.yaml set: clusterName: helm-lint + serviceAccount: + name: helm-test-sa asserts: - equal: path: spec.template.spec.serviceAccountName - value: RELEASE-NAME-proxy + value: helm-test-sa-proxy-hook - - it: should use serviceAccount.name for proxy predeploy job SA when set in values + - it: should use serviceAccount.name for proxy predeploy job SA when set in values and we're not creating SAs template: proxy/predeploy_job.yaml set: clusterName: helm-lint serviceAccount: name: helm-test-sa + create: false asserts: - equal: path: spec.template.spec.serviceAccountName diff --git a/examples/chart/teleport-cluster/values.schema.json b/examples/chart/teleport-cluster/values.schema.json index 2c4a6da0c5e73..6e3796ca8c9e5 100644 --- a/examples/chart/teleport-cluster/values.schema.json +++ b/examples/chart/teleport-cluster/values.schema.json @@ -286,6 +286,11 @@ "type": "boolean", "default": false }, + "licenseSecretName": { + "$id": "#/properties/licenseSecretName", + "type": "string", + "default": "license" + }, "installCRDs": { "$id": "#/properties/installCRDs", "type": "boolean" diff --git a/examples/chart/teleport-cluster/values.yaml b/examples/chart/teleport-cluster/values.yaml index 526f1ed85518b..c517fd1da9a00 100644 --- a/examples/chart/teleport-cluster/values.yaml +++ b/examples/chart/teleport-cluster/values.yaml @@ -61,7 +61,8 @@ teleportVersionOverride: "" # For example: # # auth: -# postStart: ["curl", "http://hook"] +# postStart: +# command: ["curl", "http://hook"] # imagePullPolicy: Always auth: # auth.teleportConfig contains YAML teleport configuration for auth pods @@ -84,7 +85,8 @@ auth: # This is merged with chart-scoped values and takes precedence in case of conflict. # For example: # proxy: -# postStart: ["curl", "http://hook"] +# postStart: +# command: ["curl", "http://hook"] # imagePullPolicy: Always # annotations: # service: @@ -179,7 +181,7 @@ authentication: proxyListenerMode: "separate" # Optional setting for configuring session recording. -# See `session_recording` under https://goteleport.com/docs/setup/reference/config/#teleportyaml +# See `session_recording` under https://goteleport.com/docs/reference/config/#auth-service sessionRecording: "" # By default, Teleport will multiplex Postgres and MongoDB database connections on the same port as the proxy's web listener (443) @@ -245,7 +247,8 @@ acmeURI: "" # You will need to download your Enterprise license from the Teleport dashboard and create a secret to use this: # kubectl -n ${TELEPORT_NAMESPACE?} create secret generic license --from-file=/path/to/downloaded/license.pem enterprise: false - +# Override default Enterprise license name +licenseSecretName: "license" # CRDs are installed by default when the operator is enabled. This manual override allows to disable CRD installation # when deploying multiple releases in the same cluster. # installCRDs: @@ -653,6 +656,9 @@ extraLabels: ingress: {} # extraLabels.job(object) -- are labels to set on the Job run by the Helm hook. job: {} + # extraLabels.jobPod(object) -- are labels to set on the Pods created by the + # Job run by the Helm hook. + jobPod: {} # extraLabels.persistentVolumeClaim(object) -- are labels to set on the PersistentVolumeClaim. persistentVolumeClaim: {} # extraLabels.pod(object) -- are labels to set on the Pods created by the diff --git a/examples/chart/teleport-kube-agent/Chart.yaml b/examples/chart/teleport-kube-agent/Chart.yaml index 0fc964ded0c31..bf04759b70a27 100644 --- a/examples/chart/teleport-kube-agent/Chart.yaml +++ b/examples/chart/teleport-kube-agent/Chart.yaml @@ -1,4 +1,4 @@ -.version: &version "15.4.21" +.version: &version "15.4.23" name: teleport-kube-agent apiVersion: v2 diff --git a/examples/chart/teleport-kube-agent/README.md b/examples/chart/teleport-kube-agent/README.md index a536d8efa0d60..fee196275761b 100644 --- a/examples/chart/teleport-kube-agent/README.md +++ b/examples/chart/teleport-kube-agent/README.md @@ -12,14 +12,7 @@ To use it, you will need: - a reachable proxy endpoint (`$PROXY_ENDPOINT` e.g. `teleport.example.com:3080` or `teleport.example.com:443`) - a reachable reverse tunnel port on the proxy (e.g. `teleport.example.com:3024`). The address is automatically retrieved from the Teleport proxy configuration. -- either a static or dynamic join token for the Teleport Cluster - - a [static join token](https://goteleport.com/docs/setup/admin/adding-nodes/#adding-nodes-to-the-cluster) - for this Teleport cluster (`$JOIN_TOKEN`) is used by default. - - optionally a [dynamic join token](https://goteleport.com/docs/setup/admin/adding-nodes/#short-lived-dynamic-tokens) can - be used on Kubernetes clusters that support persistent volumes. Set `storage.enabled=true` and - `storage.storageClassName=` in the helm configuration to use persistent - volumes. - +- a join token for the Teleport Cluster. For this Teleport cluster (`$JOIN_TOKEN`) is used by default. See the [Join Methods and Token Reference](https://goteleport.com/docs/reference/join-methods/) for supported join methods and creating tokens. ## Combining roles 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 a8bd8201af559..6372972cdb87e 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 @@ -32,7 +32,7 @@ sets Deployment annotations when specified if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -107,7 +107,7 @@ sets Deployment labels when specified if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -169,7 +169,7 @@ sets Pod annotations when specified if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -231,7 +231,7 @@ sets Pod labels when specified if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -310,7 +310,7 @@ should add emptyDir for data when existingDataVolume is not set if action is Upg value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -373,7 +373,7 @@ should add insecureSkipProxyTLSVerify to args when set in values if action is Up value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -435,7 +435,7 @@ should correctly configure existingDataVolume when set if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -495,7 +495,7 @@ should expose diag port if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -569,7 +569,7 @@ should have multiple replicas when replicaCount is set (using .replicaCount, dep value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -643,7 +643,7 @@ should have multiple replicas when replicaCount is set (using highAvailability.r value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -705,7 +705,7 @@ should have one replica when replicaCount is not set if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -767,7 +767,7 @@ should mount extraVolumes and extraVolumeMounts if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -836,7 +836,7 @@ should mount tls.existingCASecretName and set environment when set in values if value: cluster.local - name: SSL_CERT_FILE value: /etc/teleport-tls-ca/ca.pem - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -908,7 +908,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:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -976,7 +976,7 @@ should provision initContainer correctly when set in values if action is Upgrade value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1074,7 +1074,7 @@ should set SecurityContext if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1156,7 +1156,7 @@ should set affinity when set in values if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1218,7 +1218,7 @@ should set default serviceAccountName when not set in values if action is Upgrad value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1293,7 +1293,7 @@ should set environment when extraEnv set in values if action is Upgrade: value: cluster.local - name: HTTPS_PROXY value: http://username:password@my.proxy.host:3128 - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1417,7 +1417,7 @@ should set imagePullPolicy when set in values if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: Always livenessProbe: failureThreshold: 6 @@ -1479,7 +1479,7 @@ should set nodeSelector if set in values if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1543,7 +1543,7 @@ should set not set priorityClassName when not set in values if action is Upgrade value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1617,7 +1617,7 @@ should set preferred affinity when more than one replica is used if action is Up value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1679,7 +1679,7 @@ should set priorityClassName when set in values if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1742,7 +1742,7 @@ should set probeTimeoutSeconds when set in values if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1814,7 +1814,7 @@ should set required affinity when highAvailability.requireAntiAffinity is set if value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1876,7 +1876,7 @@ should set resources when set in values if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1945,7 +1945,7 @@ should set serviceAccountName when set in values if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -2007,7 +2007,7 @@ should set tolerations when set in values if action is Upgrade: value: "true" - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 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 a6b16ffdf7cc5..62a120d9248ce 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:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent name: post-delete-job securityContext: @@ -106,7 +106,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:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent name: post-delete-job securityContext: @@ -134,7 +134,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:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent name: post-delete-job securityContext: @@ -162,7 +162,7 @@ should set nodeSelector in post-delete hook: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent name: post-delete-job securityContext: @@ -192,7 +192,7 @@ should set resources in the Job's pod spec if resources is set in values: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent name: post-delete-job resources: @@ -227,7 +227,7 @@ should set securityContext in post-delete hook: fieldPath: metadata.namespace - name: RELEASE_NAME value: RELEASE-NAME - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 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 69101eaec1663..7364bebb7b023 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 @@ -18,7 +18,7 @@ sets Pod annotations when specified: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -88,7 +88,7 @@ sets Pod labels when specified: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -182,7 +182,7 @@ sets StatefulSet labels when specified: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -280,7 +280,7 @@ should add insecureSkipProxyTLSVerify to args when set in values: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -350,7 +350,7 @@ should add volumeClaimTemplate for data volume when using StatefulSet and action value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -440,7 +440,7 @@ should add volumeClaimTemplate for data volume when using StatefulSet and is Fre value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -520,7 +520,7 @@ should add volumeMount for data volume when using StatefulSet: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -590,7 +590,7 @@ should expose diag port: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -660,7 +660,7 @@ should generate Statefulset when storage is disabled and mode is a Upgrade: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -744,7 +744,7 @@ should have multiple replicas when replicaCount is set (using .replicaCount, dep value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -826,7 +826,7 @@ should have multiple replicas when replicaCount is set (using highAvailability.r value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -896,7 +896,7 @@ should have one replica when replicaCount is not set: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -966,7 +966,7 @@ should install Statefulset when storage is disabled and mode is a Fresh Install: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1038,7 +1038,7 @@ should mount extraVolumes and extraVolumeMounts: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1115,7 +1115,7 @@ should mount tls.existingCASecretName and set environment when set in values: value: cluster.local - name: SSL_CERT_FILE value: /etc/teleport-tls-ca/ca.pem - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1197,7 +1197,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:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1275,7 +1275,7 @@ should not add emptyDir for data when using StatefulSet: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1345,7 +1345,7 @@ should provision initContainer correctly when set in values: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1451,7 +1451,7 @@ should set SecurityContext: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1541,7 +1541,7 @@ should set affinity when set in values: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1611,7 +1611,7 @@ should set default serviceAccountName when not set in values: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1694,7 +1694,7 @@ should set environment when extraEnv set in values: value: cluster.local - name: HTTPS_PROXY value: http://username:password@my.proxy.host:3128 - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1834,7 +1834,7 @@ should set imagePullPolicy when set in values: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: Always livenessProbe: failureThreshold: 6 @@ -1904,7 +1904,7 @@ should set nodeSelector if set in values: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -1988,7 +1988,7 @@ should set preferred affinity when more than one replica is used: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -2058,7 +2058,7 @@ should set probeTimeoutSeconds when set in values: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -2138,7 +2138,7 @@ should set required affinity when highAvailability.requireAntiAffinity is set: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -2208,7 +2208,7 @@ should set resources when set in values: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -2285,7 +2285,7 @@ should set serviceAccountName when set in values: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -2355,7 +2355,7 @@ should set storage.requests when set in values and action is an Upgrade: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -2425,7 +2425,7 @@ should set storage.storageClassName when set in values and action is an Upgrade: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 @@ -2495,7 +2495,7 @@ should set tolerations when set in values: value: RELEASE-NAME - name: TELEPORT_KUBE_CLUSTER_DOMAIN value: cluster.local - image: public.ecr.aws/gravitational/teleport-distroless:15.4.21 + image: public.ecr.aws/gravitational/teleport-distroless:15.4.23 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 44f58fc9dbe17..0c82518203349 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:15.4.21 + image: public.ecr.aws/gravitational/teleport-kube-agent-updater:15.4.23 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:15.4.21 + image: public.ecr.aws/gravitational/teleport-kube-agent-updater:15.4.23 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 6 diff --git a/examples/chart/teleport-kube-agent/values.yaml b/examples/chart/teleport-kube-agent/values.yaml index 63388f51bdb56..5962057fc99fc 100644 --- a/examples/chart/teleport-kube-agent/values.yaml +++ b/examples/chart/teleport-kube-agent/values.yaml @@ -218,7 +218,7 @@ awsDatabases: [] # azureDatabases(list) -- configures Azure database auto-discovery. # -# For Azure database auto-discovery to work, your Database Service pods will need to have appropriate IAM permissions as per the [database documentation](../../enroll-resources/database-access/enroll-azure-databases/azure-postgres-mysql.mdx#step-35-configure-iam-permissions-for-teleport). +# For Azure database auto-discovery to work, your Database Service pods will need to have appropriate IAM permissions as per the [database documentation](../../enroll-resources/database-access/enroll-azure-databases/azure-postgres-mysql.mdx#step-25-configure-iam-permissions-for-teleport). # # After configuring a service principal with appropriate IAM permissions, you must pass credentials to the pods. # The easiest way is to use an Azure client secret. diff --git a/gen/proto/go/accessgraph/v1alpha/access_graph_service.pb.go b/gen/proto/go/accessgraph/v1alpha/access_graph_service.pb.go index 7a03706bbf50c..d01e9d79ebe5a 100644 --- a/gen/proto/go/accessgraph/v1alpha/access_graph_service.pb.go +++ b/gen/proto/go/accessgraph/v1alpha/access_graph_service.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: accessgraph/v1alpha/access_graph_service.proto @@ -1636,7 +1636,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_rawDescGZIP() []byte { } var file_accessgraph_v1alpha_access_graph_service_proto_msgTypes = make([]protoimpl.MessageInfo, 21) -var file_accessgraph_v1alpha_access_graph_service_proto_goTypes = []interface{}{ +var file_accessgraph_v1alpha_access_graph_service_proto_goTypes = []any{ (*QueryRequest)(nil), // 0: accessgraph.v1alpha.QueryRequest (*QueryResponse)(nil), // 1: accessgraph.v1alpha.QueryResponse (*GetFileRequest)(nil), // 2: accessgraph.v1alpha.GetFileRequest @@ -1732,7 +1732,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { file_accessgraph_v1alpha_graph_proto_init() file_accessgraph_v1alpha_resources_proto_init() if !protoimpl.UnsafeEnabled { - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*QueryRequest); i { case 0: return &v.state @@ -1744,7 +1744,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*QueryResponse); i { case 0: return &v.state @@ -1756,7 +1756,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*GetFileRequest); i { case 0: return &v.state @@ -1768,7 +1768,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*GetFileResponse); i { case 0: return &v.state @@ -1780,7 +1780,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*EventsStreamRequest); i { case 0: return &v.state @@ -1792,7 +1792,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*EventsStreamV2Request); i { case 0: return &v.state @@ -1804,7 +1804,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*SyncOperation); i { case 0: return &v.state @@ -1816,7 +1816,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*EventsStreamResponse); i { case 0: return &v.state @@ -1828,7 +1828,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*EventsStreamV2Response); i { case 0: return &v.state @@ -1840,7 +1840,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*AuditEvent); i { case 0: return &v.state @@ -1852,7 +1852,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*RegisterRequest); i { case 0: return &v.state @@ -1864,7 +1864,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*RegisterResponse); i { case 0: return &v.state @@ -1876,7 +1876,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*ReplaceCAsRequest); i { case 0: return &v.state @@ -1888,7 +1888,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*ReplaceCAsResponse); i { case 0: return &v.state @@ -1900,7 +1900,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[14].Exporter = func(v any, i int) any { switch v := v.(*AWSEventsStreamRequest); i { case 0: return &v.state @@ -1912,7 +1912,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[15].Exporter = func(v any, i int) any { switch v := v.(*AWSSyncOperation); i { case 0: return &v.state @@ -1924,7 +1924,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[16].Exporter = func(v any, i int) any { switch v := v.(*AWSEventsStreamResponse); i { case 0: return &v.state @@ -1936,7 +1936,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[17].Exporter = func(v any, i int) any { switch v := v.(*GitlabEventsStreamRequest); i { case 0: return &v.state @@ -1948,7 +1948,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[18].Exporter = func(v any, i int) any { switch v := v.(*GitlabEventsStreamResponse); i { case 0: return &v.state @@ -1960,7 +1960,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[19].Exporter = func(v any, i int) any { switch v := v.(*EntraEventsStreamRequest); i { case 0: return &v.state @@ -1972,7 +1972,7 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { return nil } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[20].Exporter = func(v any, i int) any { switch v := v.(*EntraEventsStreamResponse); i { case 0: return &v.state @@ -1985,37 +1985,37 @@ func file_accessgraph_v1alpha_access_graph_service_proto_init() { } } } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[4].OneofWrappers = []interface{}{ + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[4].OneofWrappers = []any{ (*EventsStreamRequest_Sync)(nil), (*EventsStreamRequest_Upsert)(nil), (*EventsStreamRequest_Delete)(nil), (*EventsStreamRequest_AccessListsMembers)(nil), (*EventsStreamRequest_ExcludeAccessListMembers)(nil), } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[5].OneofWrappers = []interface{}{ + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[5].OneofWrappers = []any{ (*EventsStreamV2Request_Sync)(nil), (*EventsStreamV2Request_Upsert)(nil), (*EventsStreamV2Request_Delete)(nil), (*EventsStreamV2Request_AccessListsMembers)(nil), (*EventsStreamV2Request_ExcludeAccessListMembers)(nil), } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[8].OneofWrappers = []interface{}{ + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[8].OneofWrappers = []any{ (*EventsStreamV2Response_Event)(nil), } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[9].OneofWrappers = []interface{}{ + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[9].OneofWrappers = []any{ (*AuditEvent_AccessPathChanged)(nil), } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[14].OneofWrappers = []interface{}{ + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[14].OneofWrappers = []any{ (*AWSEventsStreamRequest_Sync)(nil), (*AWSEventsStreamRequest_Upsert)(nil), (*AWSEventsStreamRequest_Delete)(nil), } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[17].OneofWrappers = []interface{}{ + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[17].OneofWrappers = []any{ (*GitlabEventsStreamRequest_Sync)(nil), (*GitlabEventsStreamRequest_Upsert)(nil), (*GitlabEventsStreamRequest_Delete)(nil), } - file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[19].OneofWrappers = []interface{}{ + file_accessgraph_v1alpha_access_graph_service_proto_msgTypes[19].OneofWrappers = []any{ (*EntraEventsStreamRequest_Sync)(nil), (*EntraEventsStreamRequest_Upsert)(nil), (*EntraEventsStreamRequest_Delete)(nil), diff --git a/gen/proto/go/accessgraph/v1alpha/aws.pb.go b/gen/proto/go/accessgraph/v1alpha/aws.pb.go index f496b098bb68f..3ef1ca6496fc3 100644 --- a/gen/proto/go/accessgraph/v1alpha/aws.pb.go +++ b/gen/proto/go/accessgraph/v1alpha/aws.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: accessgraph/v1alpha/aws.proto @@ -3986,7 +3986,7 @@ func file_accessgraph_v1alpha_aws_proto_rawDescGZIP() []byte { var file_accessgraph_v1alpha_aws_proto_enumTypes = make([]protoimpl.EnumInfo, 2) var file_accessgraph_v1alpha_aws_proto_msgTypes = make([]protoimpl.MessageInfo, 31) -var file_accessgraph_v1alpha_aws_proto_goTypes = []interface{}{ +var file_accessgraph_v1alpha_aws_proto_goTypes = []any{ (UsersPermissionsBoundaryType)(0), // 0: accessgraph.v1alpha.UsersPermissionsBoundaryType (RolePermissionsBoundaryType)(0), // 1: accessgraph.v1alpha.RolePermissionsBoundaryType (*AWSResourceList)(nil), // 2: accessgraph.v1alpha.AWSResourceList @@ -4135,7 +4135,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_accessgraph_v1alpha_aws_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*AWSResourceList); i { case 0: return &v.state @@ -4147,7 +4147,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*AWSResource); i { case 0: return &v.state @@ -4159,7 +4159,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*AWSUserInlinePolicyV1); i { case 0: return &v.state @@ -4171,7 +4171,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*AWSPolicyV1); i { case 0: return &v.state @@ -4183,7 +4183,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*AWSGroupV1); i { case 0: return &v.state @@ -4195,7 +4195,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*AWSUserGroupsV1); i { case 0: return &v.state @@ -4207,7 +4207,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*AWSUserV1); i { case 0: return &v.state @@ -4219,7 +4219,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*AWSTag); i { case 0: return &v.state @@ -4231,7 +4231,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*UsersPermissionsBoundaryV1); i { case 0: return &v.state @@ -4243,7 +4243,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*AWSInstanceV1); i { case 0: return &v.state @@ -4255,7 +4255,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*AWSUserAttachedPolicies); i { case 0: return &v.state @@ -4267,7 +4267,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*AttachedPolicyV1); i { case 0: return &v.state @@ -4279,7 +4279,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*AWSGroupAttachedPolicies); i { case 0: return &v.state @@ -4291,7 +4291,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*AWSGroupInlinePolicyV1); i { case 0: return &v.state @@ -4303,7 +4303,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[14].Exporter = func(v any, i int) any { switch v := v.(*AWSS3BucketV1); i { case 0: return &v.state @@ -4315,7 +4315,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[15].Exporter = func(v any, i int) any { switch v := v.(*AWSS3BucketACL); i { case 0: return &v.state @@ -4327,7 +4327,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[16].Exporter = func(v any, i int) any { switch v := v.(*AWSS3BucketACLGrantee); i { case 0: return &v.state @@ -4339,7 +4339,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[17].Exporter = func(v any, i int) any { switch v := v.(*AWSRoleV1); i { case 0: return &v.state @@ -4351,7 +4351,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[18].Exporter = func(v any, i int) any { switch v := v.(*RolePermissionsBoundaryV1); i { case 0: return &v.state @@ -4363,7 +4363,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[19].Exporter = func(v any, i int) any { switch v := v.(*RoleLastUsedV1); i { case 0: return &v.state @@ -4375,7 +4375,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[20].Exporter = func(v any, i int) any { switch v := v.(*AWSRoleInlinePolicyV1); i { case 0: return &v.state @@ -4387,7 +4387,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[21].Exporter = func(v any, i int) any { switch v := v.(*AWSRoleAttachedPolicies); i { case 0: return &v.state @@ -4399,7 +4399,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[22].Exporter = func(v any, i int) any { switch v := v.(*AWSInstanceProfileV1); i { case 0: return &v.state @@ -4411,7 +4411,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[23].Exporter = func(v any, i int) any { switch v := v.(*AWSEKSClusterV1); i { case 0: return &v.state @@ -4423,7 +4423,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[24].Exporter = func(v any, i int) any { switch v := v.(*AWSEKSClusterAccessEntryV1); i { case 0: return &v.state @@ -4435,7 +4435,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[25].Exporter = func(v any, i int) any { switch v := v.(*AWSEKSAssociatedAccessPolicyV1); i { case 0: return &v.state @@ -4447,7 +4447,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[26].Exporter = func(v any, i int) any { switch v := v.(*AWSEKSAccessScopeV1); i { case 0: return &v.state @@ -4459,7 +4459,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[27].Exporter = func(v any, i int) any { switch v := v.(*AWSRDSDatabaseV1); i { case 0: return &v.state @@ -4471,7 +4471,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[28].Exporter = func(v any, i int) any { switch v := v.(*AWSRDSEngineV1); i { case 0: return &v.state @@ -4483,7 +4483,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[29].Exporter = func(v any, i int) any { switch v := v.(*AWSSAMLProviderV1); i { case 0: return &v.state @@ -4495,7 +4495,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { return nil } } - file_accessgraph_v1alpha_aws_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_aws_proto_msgTypes[30].Exporter = func(v any, i int) any { switch v := v.(*AWSOIDCProviderV1); i { case 0: return &v.state @@ -4508,7 +4508,7 @@ func file_accessgraph_v1alpha_aws_proto_init() { } } } - file_accessgraph_v1alpha_aws_proto_msgTypes[1].OneofWrappers = []interface{}{ + file_accessgraph_v1alpha_aws_proto_msgTypes[1].OneofWrappers = []any{ (*AWSResource_User)(nil), (*AWSResource_Group)(nil), (*AWSResource_UserInlinePolicy)(nil), diff --git a/gen/proto/go/accessgraph/v1alpha/entra.pb.go b/gen/proto/go/accessgraph/v1alpha/entra.pb.go index cebba10060ffa..915a0e24710a3 100644 --- a/gen/proto/go/accessgraph/v1alpha/entra.pb.go +++ b/gen/proto/go/accessgraph/v1alpha/entra.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: accessgraph/v1alpha/entra.proto @@ -344,7 +344,7 @@ func file_accessgraph_v1alpha_entra_proto_rawDescGZIP() []byte { } var file_accessgraph_v1alpha_entra_proto_msgTypes = make([]protoimpl.MessageInfo, 4) -var file_accessgraph_v1alpha_entra_proto_goTypes = []interface{}{ +var file_accessgraph_v1alpha_entra_proto_goTypes = []any{ (*EntraSyncOperation)(nil), // 0: accessgraph.v1alpha.EntraSyncOperation (*EntraResourceList)(nil), // 1: accessgraph.v1alpha.EntraResourceList (*EntraResource)(nil), // 2: accessgraph.v1alpha.EntraResource @@ -366,7 +366,7 @@ func file_accessgraph_v1alpha_entra_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_accessgraph_v1alpha_entra_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_entra_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*EntraSyncOperation); i { case 0: return &v.state @@ -378,7 +378,7 @@ func file_accessgraph_v1alpha_entra_proto_init() { return nil } } - file_accessgraph_v1alpha_entra_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_entra_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*EntraResourceList); i { case 0: return &v.state @@ -390,7 +390,7 @@ func file_accessgraph_v1alpha_entra_proto_init() { return nil } } - file_accessgraph_v1alpha_entra_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_entra_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*EntraResource); i { case 0: return &v.state @@ -402,7 +402,7 @@ func file_accessgraph_v1alpha_entra_proto_init() { return nil } } - file_accessgraph_v1alpha_entra_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_entra_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*EntraApplication); i { case 0: return &v.state @@ -415,7 +415,7 @@ func file_accessgraph_v1alpha_entra_proto_init() { } } } - file_accessgraph_v1alpha_entra_proto_msgTypes[2].OneofWrappers = []interface{}{ + file_accessgraph_v1alpha_entra_proto_msgTypes[2].OneofWrappers = []any{ (*EntraResource_Application)(nil), } type x struct{} diff --git a/gen/proto/go/accessgraph/v1alpha/events.pb.go b/gen/proto/go/accessgraph/v1alpha/events.pb.go index b260f6bd6910e..842ef8f248d8c 100644 --- a/gen/proto/go/accessgraph/v1alpha/events.pb.go +++ b/gen/proto/go/accessgraph/v1alpha/events.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: accessgraph/v1alpha/events.proto @@ -170,7 +170,7 @@ func file_accessgraph_v1alpha_events_proto_rawDescGZIP() []byte { } var file_accessgraph_v1alpha_events_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_accessgraph_v1alpha_events_proto_goTypes = []interface{}{ +var file_accessgraph_v1alpha_events_proto_goTypes = []any{ (*AccessPathChanged)(nil), // 0: accessgraph.v1alpha.AccessPathChanged (*v1.Metadata)(nil), // 1: teleport.header.v1.Metadata } @@ -189,7 +189,7 @@ func file_accessgraph_v1alpha_events_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_accessgraph_v1alpha_events_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_events_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*AccessPathChanged); i { case 0: return &v.state diff --git a/gen/proto/go/accessgraph/v1alpha/gitlab.pb.go b/gen/proto/go/accessgraph/v1alpha/gitlab.pb.go index 4823d8ecc3dcd..0b3b2f408facb 100644 --- a/gen/proto/go/accessgraph/v1alpha/gitlab.pb.go +++ b/gen/proto/go/accessgraph/v1alpha/gitlab.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: accessgraph/v1alpha/gitlab.proto @@ -940,7 +940,7 @@ func file_accessgraph_v1alpha_gitlab_proto_rawDescGZIP() []byte { var file_accessgraph_v1alpha_gitlab_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_accessgraph_v1alpha_gitlab_proto_msgTypes = make([]protoimpl.MessageInfo, 9) -var file_accessgraph_v1alpha_gitlab_proto_goTypes = []interface{}{ +var file_accessgraph_v1alpha_gitlab_proto_goTypes = []any{ (AccessLevelType)(0), // 0: accessgraph.v1alpha.AccessLevelType (*GitlabSyncOperation)(nil), // 1: accessgraph.v1alpha.GitlabSyncOperation (*GitlabResourceList)(nil), // 2: accessgraph.v1alpha.GitlabResourceList @@ -979,7 +979,7 @@ func file_accessgraph_v1alpha_gitlab_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_accessgraph_v1alpha_gitlab_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_gitlab_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*GitlabSyncOperation); i { case 0: return &v.state @@ -991,7 +991,7 @@ func file_accessgraph_v1alpha_gitlab_proto_init() { return nil } } - file_accessgraph_v1alpha_gitlab_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_gitlab_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*GitlabResourceList); i { case 0: return &v.state @@ -1003,7 +1003,7 @@ func file_accessgraph_v1alpha_gitlab_proto_init() { return nil } } - file_accessgraph_v1alpha_gitlab_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_gitlab_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*GitlabResource); i { case 0: return &v.state @@ -1015,7 +1015,7 @@ func file_accessgraph_v1alpha_gitlab_proto_init() { return nil } } - file_accessgraph_v1alpha_gitlab_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_gitlab_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*GitlabGroup); i { case 0: return &v.state @@ -1027,7 +1027,7 @@ func file_accessgraph_v1alpha_gitlab_proto_init() { return nil } } - file_accessgraph_v1alpha_gitlab_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_gitlab_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*GitlabProject); i { case 0: return &v.state @@ -1039,7 +1039,7 @@ func file_accessgraph_v1alpha_gitlab_proto_init() { return nil } } - file_accessgraph_v1alpha_gitlab_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_gitlab_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*GitlabProjectMember); i { case 0: return &v.state @@ -1051,7 +1051,7 @@ func file_accessgraph_v1alpha_gitlab_proto_init() { return nil } } - file_accessgraph_v1alpha_gitlab_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_gitlab_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*GitlabGroupMember); i { case 0: return &v.state @@ -1063,7 +1063,7 @@ func file_accessgraph_v1alpha_gitlab_proto_init() { return nil } } - file_accessgraph_v1alpha_gitlab_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_gitlab_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*GitlabUser); i { case 0: return &v.state @@ -1075,7 +1075,7 @@ func file_accessgraph_v1alpha_gitlab_proto_init() { return nil } } - file_accessgraph_v1alpha_gitlab_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_gitlab_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*GitlabUserIdentity); i { case 0: return &v.state @@ -1088,7 +1088,7 @@ func file_accessgraph_v1alpha_gitlab_proto_init() { } } } - file_accessgraph_v1alpha_gitlab_proto_msgTypes[2].OneofWrappers = []interface{}{ + file_accessgraph_v1alpha_gitlab_proto_msgTypes[2].OneofWrappers = []any{ (*GitlabResource_Group)(nil), (*GitlabResource_Project)(nil), (*GitlabResource_ProjectMember)(nil), diff --git a/gen/proto/go/accessgraph/v1alpha/graph.pb.go b/gen/proto/go/accessgraph/v1alpha/graph.pb.go index 0fde3aa8c7dc0..c11a8a7d53ab7 100644 --- a/gen/proto/go/accessgraph/v1alpha/graph.pb.go +++ b/gen/proto/go/accessgraph/v1alpha/graph.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: accessgraph/v1alpha/graph.proto @@ -281,7 +281,7 @@ func file_accessgraph_v1alpha_graph_proto_rawDescGZIP() []byte { } var file_accessgraph_v1alpha_graph_proto_msgTypes = make([]protoimpl.MessageInfo, 5) -var file_accessgraph_v1alpha_graph_proto_goTypes = []interface{}{ +var file_accessgraph_v1alpha_graph_proto_goTypes = []any{ (*Node)(nil), // 0: accessgraph.v1alpha.Node (*Edge)(nil), // 1: accessgraph.v1alpha.Edge nil, // 2: accessgraph.v1alpha.Node.LabelsEntry @@ -305,7 +305,7 @@ func file_accessgraph_v1alpha_graph_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_accessgraph_v1alpha_graph_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_graph_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Node); i { case 0: return &v.state @@ -317,7 +317,7 @@ func file_accessgraph_v1alpha_graph_proto_init() { return nil } } - file_accessgraph_v1alpha_graph_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_graph_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*Edge); i { case 0: return &v.state diff --git a/gen/proto/go/accessgraph/v1alpha/resources.pb.go b/gen/proto/go/accessgraph/v1alpha/resources.pb.go index d901be034b673..7e40c3355e66c 100644 --- a/gen/proto/go/accessgraph/v1alpha/resources.pb.go +++ b/gen/proto/go/accessgraph/v1alpha/resources.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: accessgraph/v1alpha/resources.proto @@ -662,7 +662,7 @@ func file_accessgraph_v1alpha_resources_proto_rawDescGZIP() []byte { } var file_accessgraph_v1alpha_resources_proto_msgTypes = make([]protoimpl.MessageInfo, 6) -var file_accessgraph_v1alpha_resources_proto_goTypes = []interface{}{ +var file_accessgraph_v1alpha_resources_proto_goTypes = []any{ (*ResourceList)(nil), // 0: accessgraph.v1alpha.ResourceList (*ResourceHeaderList)(nil), // 1: accessgraph.v1alpha.ResourceHeaderList (*AccessListsMembers)(nil), // 2: accessgraph.v1alpha.AccessListsMembers @@ -716,7 +716,7 @@ func file_accessgraph_v1alpha_resources_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_accessgraph_v1alpha_resources_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_resources_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*ResourceList); i { case 0: return &v.state @@ -728,7 +728,7 @@ func file_accessgraph_v1alpha_resources_proto_init() { return nil } } - file_accessgraph_v1alpha_resources_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_resources_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*ResourceHeaderList); i { case 0: return &v.state @@ -740,7 +740,7 @@ func file_accessgraph_v1alpha_resources_proto_init() { return nil } } - file_accessgraph_v1alpha_resources_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_resources_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*AccessListsMembers); i { case 0: return &v.state @@ -752,7 +752,7 @@ func file_accessgraph_v1alpha_resources_proto_init() { return nil } } - file_accessgraph_v1alpha_resources_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_resources_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ExcludeAccessListsMembers); i { case 0: return &v.state @@ -764,7 +764,7 @@ func file_accessgraph_v1alpha_resources_proto_init() { return nil } } - file_accessgraph_v1alpha_resources_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_resources_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*ExcludeAccessListMember); i { case 0: return &v.state @@ -776,7 +776,7 @@ func file_accessgraph_v1alpha_resources_proto_init() { return nil } } - file_accessgraph_v1alpha_resources_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_accessgraph_v1alpha_resources_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*ResourceEntry); i { case 0: return &v.state @@ -789,7 +789,7 @@ func file_accessgraph_v1alpha_resources_proto_init() { } } } - file_accessgraph_v1alpha_resources_proto_msgTypes[5].OneofWrappers = []interface{}{ + file_accessgraph_v1alpha_resources_proto_msgTypes[5].OneofWrappers = []any{ (*ResourceEntry_User)(nil), (*ResourceEntry_Role)(nil), (*ResourceEntry_Server)(nil), diff --git a/gen/proto/go/prehog/v1/teleport.pb.go b/gen/proto/go/prehog/v1/teleport.pb.go index 73593cc5d7524..fcffc5164f7ca 100644 --- a/gen/proto/go/prehog/v1/teleport.pb.go +++ b/gen/proto/go/prehog/v1/teleport.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: prehog/v1/teleport.proto @@ -900,7 +900,7 @@ func file_prehog_v1_teleport_proto_rawDescGZIP() []byte { var file_prehog_v1_teleport_proto_enumTypes = make([]protoimpl.EnumInfo, 2) var file_prehog_v1_teleport_proto_msgTypes = make([]protoimpl.MessageInfo, 6) -var file_prehog_v1_teleport_proto_goTypes = []interface{}{ +var file_prehog_v1_teleport_proto_goTypes = []any{ (UserKind)(0), // 0: prehog.v1.UserKind (ResourceKind)(0), // 1: prehog.v1.ResourceKind (*UserActivityReport)(nil), // 2: prehog.v1.UserActivityReport @@ -935,7 +935,7 @@ func file_prehog_v1_teleport_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_prehog_v1_teleport_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1_teleport_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*UserActivityReport); i { case 0: return &v.state @@ -947,7 +947,7 @@ func file_prehog_v1_teleport_proto_init() { return nil } } - file_prehog_v1_teleport_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1_teleport_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*UserActivityRecord); i { case 0: return &v.state @@ -959,7 +959,7 @@ func file_prehog_v1_teleport_proto_init() { return nil } } - file_prehog_v1_teleport_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1_teleport_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ResourcePresenceReport); i { case 0: return &v.state @@ -971,7 +971,7 @@ func file_prehog_v1_teleport_proto_init() { return nil } } - file_prehog_v1_teleport_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1_teleport_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ResourceKindPresenceReport); i { case 0: return &v.state @@ -983,7 +983,7 @@ func file_prehog_v1_teleport_proto_init() { return nil } } - file_prehog_v1_teleport_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1_teleport_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*SubmitUsageReportsRequest); i { case 0: return &v.state @@ -995,7 +995,7 @@ func file_prehog_v1_teleport_proto_init() { return nil } } - file_prehog_v1_teleport_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1_teleport_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*SubmitUsageReportsResponse); i { case 0: return &v.state diff --git a/gen/proto/go/prehog/v1alpha/connect.pb.go b/gen/proto/go/prehog/v1alpha/connect.pb.go index dcf199afee272..85962283dda70 100644 --- a/gen/proto/go/prehog/v1alpha/connect.pb.go +++ b/gen/proto/go/prehog/v1alpha/connect.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: prehog/v1alpha/connect.proto @@ -1053,7 +1053,7 @@ func file_prehog_v1alpha_connect_proto_rawDescGZIP() []byte { } var file_prehog_v1alpha_connect_proto_msgTypes = make([]protoimpl.MessageInfo, 11) -var file_prehog_v1alpha_connect_proto_goTypes = []interface{}{ +var file_prehog_v1alpha_connect_proto_goTypes = []any{ (*ConnectClusterLoginEvent)(nil), // 0: prehog.v1alpha.ConnectClusterLoginEvent (*ConnectProtocolUseEvent)(nil), // 1: prehog.v1alpha.ConnectProtocolUseEvent (*ConnectAccessRequestCreateEvent)(nil), // 2: prehog.v1alpha.ConnectAccessRequestCreateEvent @@ -1093,7 +1093,7 @@ func file_prehog_v1alpha_connect_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_prehog_v1alpha_connect_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_connect_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*ConnectClusterLoginEvent); i { case 0: return &v.state @@ -1105,7 +1105,7 @@ func file_prehog_v1alpha_connect_proto_init() { return nil } } - file_prehog_v1alpha_connect_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_connect_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*ConnectProtocolUseEvent); i { case 0: return &v.state @@ -1117,7 +1117,7 @@ func file_prehog_v1alpha_connect_proto_init() { return nil } } - file_prehog_v1alpha_connect_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_connect_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ConnectAccessRequestCreateEvent); i { case 0: return &v.state @@ -1129,7 +1129,7 @@ func file_prehog_v1alpha_connect_proto_init() { return nil } } - file_prehog_v1alpha_connect_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_connect_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ConnectAccessRequestReviewEvent); i { case 0: return &v.state @@ -1141,7 +1141,7 @@ func file_prehog_v1alpha_connect_proto_init() { return nil } } - file_prehog_v1alpha_connect_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_connect_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*ConnectAccessRequestAssumeRoleEvent); i { case 0: return &v.state @@ -1153,7 +1153,7 @@ func file_prehog_v1alpha_connect_proto_init() { return nil } } - file_prehog_v1alpha_connect_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_connect_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*ConnectFileTransferRunEvent); i { case 0: return &v.state @@ -1165,7 +1165,7 @@ func file_prehog_v1alpha_connect_proto_init() { return nil } } - file_prehog_v1alpha_connect_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_connect_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*ConnectUserJobRoleUpdateEvent); i { case 0: return &v.state @@ -1177,7 +1177,7 @@ func file_prehog_v1alpha_connect_proto_init() { return nil } } - file_prehog_v1alpha_connect_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_connect_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*ConnectConnectMyComputerSetup); i { case 0: return &v.state @@ -1189,7 +1189,7 @@ func file_prehog_v1alpha_connect_proto_init() { return nil } } - file_prehog_v1alpha_connect_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_connect_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*ConnectConnectMyComputerAgentStart); i { case 0: return &v.state @@ -1201,7 +1201,7 @@ func file_prehog_v1alpha_connect_proto_init() { return nil } } - file_prehog_v1alpha_connect_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_connect_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*SubmitConnectEventRequest); i { case 0: return &v.state @@ -1213,7 +1213,7 @@ func file_prehog_v1alpha_connect_proto_init() { return nil } } - file_prehog_v1alpha_connect_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_connect_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*SubmitConnectEventResponse); i { case 0: return &v.state @@ -1226,7 +1226,7 @@ func file_prehog_v1alpha_connect_proto_init() { } } } - file_prehog_v1alpha_connect_proto_msgTypes[9].OneofWrappers = []interface{}{ + file_prehog_v1alpha_connect_proto_msgTypes[9].OneofWrappers = []any{ (*SubmitConnectEventRequest_ClusterLogin)(nil), (*SubmitConnectEventRequest_ProtocolUse)(nil), (*SubmitConnectEventRequest_AccessRequestCreate)(nil), diff --git a/gen/proto/go/prehog/v1alpha/tbot.pb.go b/gen/proto/go/prehog/v1alpha/tbot.pb.go index fd599680a8300..596c0bf24812d 100644 --- a/gen/proto/go/prehog/v1alpha/tbot.pb.go +++ b/gen/proto/go/prehog/v1alpha/tbot.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: prehog/v1alpha/tbot.proto @@ -417,7 +417,7 @@ func file_prehog_v1alpha_tbot_proto_rawDescGZIP() []byte { var file_prehog_v1alpha_tbot_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_prehog_v1alpha_tbot_proto_msgTypes = make([]protoimpl.MessageInfo, 3) -var file_prehog_v1alpha_tbot_proto_goTypes = []interface{}{ +var file_prehog_v1alpha_tbot_proto_goTypes = []any{ (TbotStartEvent_RunMode)(0), // 0: prehog.v1alpha.TbotStartEvent.RunMode (*TbotStartEvent)(nil), // 1: prehog.v1alpha.TbotStartEvent (*SubmitTbotEventRequest)(nil), // 2: prehog.v1alpha.SubmitTbotEventRequest @@ -443,7 +443,7 @@ func file_prehog_v1alpha_tbot_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_prehog_v1alpha_tbot_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_tbot_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*TbotStartEvent); i { case 0: return &v.state @@ -455,7 +455,7 @@ func file_prehog_v1alpha_tbot_proto_init() { return nil } } - file_prehog_v1alpha_tbot_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_tbot_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*SubmitTbotEventRequest); i { case 0: return &v.state @@ -467,7 +467,7 @@ func file_prehog_v1alpha_tbot_proto_init() { return nil } } - file_prehog_v1alpha_tbot_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_tbot_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*SubmitTbotEventResponse); i { case 0: return &v.state @@ -480,7 +480,7 @@ func file_prehog_v1alpha_tbot_proto_init() { } } } - file_prehog_v1alpha_tbot_proto_msgTypes[1].OneofWrappers = []interface{}{ + file_prehog_v1alpha_tbot_proto_msgTypes[1].OneofWrappers = []any{ (*SubmitTbotEventRequest_Start)(nil), } type x struct{} diff --git a/gen/proto/go/prehog/v1alpha/teleport.pb.go b/gen/proto/go/prehog/v1alpha/teleport.pb.go index aa27c7b483089..13960c33e3dd9 100644 --- a/gen/proto/go/prehog/v1alpha/teleport.pb.go +++ b/gen/proto/go/prehog/v1alpha/teleport.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: prehog/v1alpha/teleport.proto @@ -7508,6 +7508,12 @@ type SubmitEventRequest struct { // // PostHog timestamp Timestamp *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + // teleport_version is the version of the Teleport auth server that submitted + // the event, without the "v" prefix. + // For example: 16.4.7 + // + // PostHog property: tp.teleport_version + TeleportVersion string `protobuf:"bytes,95,opt,name=teleport_version,json=teleportVersion,proto3" json:"teleport_version,omitempty"` // the event being submitted // // Types that are assignable to Event: @@ -7650,6 +7656,13 @@ func (x *SubmitEventRequest) GetTimestamp() *timestamppb.Timestamp { return nil } +func (x *SubmitEventRequest) GetTeleportVersion() string { + if x != nil { + return x.TeleportVersion + } + return "" +} + func (m *SubmitEventRequest) GetEvent() isSubmitEventRequest_Event { if m != nil { return m.Event @@ -10035,950 +10048,952 @@ var file_prehog_v1alpha_teleport_proto_rawDesc = []byte{ 0x16, 0x6e, 0x75, 0x6d, 0x5f, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x14, 0x6e, 0x75, 0x6d, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x22, 0xcd, 0x4d, 0x0a, 0x12, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x45, 0x76, + 0x6f, 0x6e, 0x73, 0x22, 0xf8, 0x4d, 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, 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, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x29, 0x0a, 0x10, 0x74, 0x65, 0x6c, 0x65, 0x70, + 0x6f, 0x72, 0x74, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x5f, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0f, 0x74, 0x65, 0x6c, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 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, 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, 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, + 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, 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, + 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, - 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, + 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, 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, + 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, 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, 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, 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, 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, + 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, 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, 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, + 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, 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, + 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, - 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, + 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, 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, 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, + 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, 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, 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, + 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, 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, + 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, - 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, + 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, - 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, + 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, 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, + 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, + 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, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x43, + 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, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x43, 0x72, + 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, 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, + 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, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, + 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, 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, + 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, 0x12, 0x62, 0x0a, 0x18, 0x6d, 0x66, 0x61, 0x5f, 0x61, 0x75, 0x74, 0x68, + 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x18, 0x4e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4d, 0x46, 0x41, 0x41, 0x75, 0x74, 0x68, 0x65, + 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x16, 0x6d, 0x66, 0x61, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x55, 0x0a, 0x12, 0x73, 0x70, 0x69, 0x66, + 0x66, 0x65, 0x5f, 0x73, 0x76, 0x69, 0x64, 0x5f, 0x69, 0x73, 0x73, 0x75, 0x65, 0x64, 0x18, 0x4f, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, + 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x50, 0x49, 0x46, 0x46, 0x45, 0x53, 0x56, 0x49, 0x44, + 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x73, + 0x70, 0x69, 0x66, 0x66, 0x65, 0x53, 0x76, 0x69, 0x64, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x12, + 0x5c, 0x0a, 0x15, 0x6f, 0x6b, 0x74, 0x61, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6c, + 0x69, 0x73, 0x74, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x18, 0x50, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 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, 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, 0x12, 0x62, 0x0a, 0x18, 0x6d, 0x66, 0x61, - 0x5f, 0x61, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x4e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, - 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4d, 0x46, 0x41, - 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x16, 0x6d, 0x66, 0x61, 0x41, 0x75, 0x74, 0x68, 0x65, 0x6e, - 0x74, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x55, 0x0a, - 0x12, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x5f, 0x73, 0x76, 0x69, 0x64, 0x5f, 0x69, 0x73, 0x73, - 0x75, 0x65, 0x64, 0x18, 0x4f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x70, 0x72, 0x65, 0x68, - 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x53, 0x50, 0x49, 0x46, 0x46, - 0x45, 0x53, 0x56, 0x49, 0x44, 0x49, 0x73, 0x73, 0x75, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x10, 0x73, 0x70, 0x69, 0x66, 0x66, 0x65, 0x53, 0x76, 0x69, 0x64, 0x49, 0x73, - 0x73, 0x75, 0x65, 0x64, 0x12, 0x5c, 0x0a, 0x15, 0x6f, 0x6b, 0x74, 0x61, 0x5f, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x73, 0x79, 0x6e, 0x63, 0x18, 0x50, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, - 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x4f, 0x6b, 0x74, 0x61, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, - 0x69, 0x73, 0x74, 0x53, 0x79, 0x6e, 0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x12, - 0x6f, 0x6b, 0x74, 0x61, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x79, - 0x6e, 0x63, 0x12, 0x5e, 0x0a, 0x15, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x51, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x13, 0x64, - 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x12, 0x7f, 0x0a, 0x21, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x75, - 0x73, 0x65, 0x72, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x5f, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x52, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, - 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, - 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x65, 0x72, 0x6d, 0x69, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x48, 0x00, 0x52, 0x1e, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, - 0x72, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x70, 0x64, 0x61, - 0x74, 0x65, 0x64, 0x12, 0x84, 0x01, 0x0a, 0x23, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x53, 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, 0x43, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1f, 0x75, 0x69, 0x44, 0x69, 0x73, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x69, 0x73, 0x63, 0x6f, - 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x77, 0x0a, 0x21, 0x75, 0x69, - 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x6b, 0x75, 0x62, 0x65, 0x5f, 0x65, - 0x6b, 0x73, 0x5f, 0x65, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, - 0x54, 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, 0x4b, 0x75, 0x62, 0x65, 0x45, 0x4b, 0x53, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1c, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x4b, 0x75, 0x62, 0x65, 0x45, 0x6b, 0x73, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x12, 0x7d, 0x0a, 0x23, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, - 0x65, 0x72, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x55, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2e, 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, 0x41, 0x70, 0x70, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x1e, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x41, 0x70, 0x70, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x12, 0x65, 0x0a, 0x18, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, - 0x70, 0x68, 0x5f, 0x67, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x18, 0x56, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, - 0x68, 0x47, 0x69, 0x74, 0x6c, 0x61, 0x62, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x15, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x47, - 0x69, 0x74, 0x6c, 0x61, 0x62, 0x53, 0x63, 0x61, 0x6e, 0x12, 0x94, 0x01, 0x0a, 0x29, 0x61, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, - 0x74, 0x73, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, - 0x65, 0x64, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x57, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, - 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, + 0x4f, 0x6b, 0x74, 0x61, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x79, + 0x6e, 0x63, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x12, 0x6f, 0x6b, 0x74, 0x61, 0x41, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x79, 0x6e, 0x63, 0x12, 0x5e, 0x0a, + 0x15, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x51, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, + 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x61, + 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x13, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, + 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x7f, 0x0a, + 0x21, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x70, + 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x18, 0x52, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x62, 0x61, + 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1e, + 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x55, 0x73, 0x65, 0x72, 0x50, 0x65, 0x72, 0x6d, + 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x84, + 0x01, 0x0a, 0x23, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x5f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x53, 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, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x69, + 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1f, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x77, 0x0a, 0x21, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, + 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x6b, 0x75, 0x62, 0x65, 0x5f, 0x65, 0x6b, 0x73, 0x5f, 0x65, 0x6e, + 0x72, 0x6f, 0x6c, 0x6c, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x54, 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, 0x4b, 0x75, 0x62, 0x65, + 0x45, 0x4b, 0x53, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x1c, 0x75, 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x4b, 0x75, 0x62, 0x65, + 0x45, 0x6b, 0x73, 0x45, 0x6e, 0x72, 0x6f, 0x6c, 0x6c, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x7d, + 0x0a, 0x23, 0x75, 0x69, 0x5f, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x5f, 0x61, 0x70, 0x70, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, + 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x55, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 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, 0x41, 0x70, 0x70, + 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1e, 0x75, + 0x69, 0x44, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x41, + 0x70, 0x70, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x65, 0x0a, + 0x18, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x67, 0x69, + 0x74, 0x6c, 0x61, 0x62, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x18, 0x56, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x2a, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, + 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x47, 0x69, 0x74, 0x6c, + 0x61, 0x62, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x15, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x47, 0x69, 0x74, 0x6c, 0x61, 0x62, + 0x53, 0x63, 0x61, 0x6e, 0x12, 0x94, 0x01, 0x0a, 0x29, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, + 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x5f, 0x73, 0x63, + 0x61, 0x6e, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x6b, 0x65, + 0x79, 0x73, 0x18, 0x57, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x47, 0x72, 0x61, 0x70, 0x68, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x53, 0x63, 0x61, 0x6e, + 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x24, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, + 0x70, 0x68, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x53, 0x63, 0x61, 0x6e, 0x41, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x95, 0x01, 0x0a, 0x2a, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x73, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x73, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x5f, 0x73, 0x73, 0x68, 0x5f, 0x70, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x58, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x39, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x53, 0x65, 0x63, + 0x72, 0x65, 0x74, 0x73, 0x53, 0x63, 0x61, 0x6e, 0x53, 0x53, 0x48, 0x50, 0x72, 0x69, 0x76, 0x61, + 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x24, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x73, 0x53, 0x63, 0x61, 0x6e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x4b, - 0x65, 0x79, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x24, 0x61, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x53, 0x63, - 0x61, 0x6e, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x73, - 0x12, 0x95, 0x01, 0x0a, 0x2a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x70, - 0x68, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x5f, 0x73, - 0x73, 0x68, 0x5f, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, - 0x58, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x39, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, - 0x70, 0x68, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x53, 0x63, 0x61, 0x6e, 0x53, 0x53, 0x48, - 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x24, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x53, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x53, 0x63, 0x61, 0x6e, 0x53, 0x73, 0x68, 0x50, 0x72, 0x69, - 0x76, 0x61, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x5c, 0x0a, 0x15, 0x61, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x61, 0x77, 0x73, 0x5f, 0x73, 0x63, 0x61, - 0x6e, 0x18, 0x59, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, + 0x73, 0x53, 0x63, 0x61, 0x6e, 0x53, 0x73, 0x68, 0x50, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x4b, + 0x65, 0x79, 0x73, 0x12, 0x5c, 0x0a, 0x15, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, + 0x61, 0x70, 0x68, 0x5f, 0x61, 0x77, 0x73, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x18, 0x59, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, + 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x41, + 0x57, 0x53, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x12, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x41, 0x77, 0x73, 0x53, 0x63, 0x61, + 0x6e, 0x12, 0x7b, 0x0a, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x70, + 0x68, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x5f, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x5a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x70, 0x72, + 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, 0x61, + 0x74, 0x68, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x1c, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x41, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x12, 0x78, + 0x0a, 0x1f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x63, + 0x72, 0x6f, 0x77, 0x6e, 0x5f, 0x6a, 0x65, 0x77, 0x65, 0x6c, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x18, 0x5b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, - 0x72, 0x61, 0x70, 0x68, 0x41, 0x57, 0x53, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x12, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x41, - 0x77, 0x73, 0x53, 0x63, 0x61, 0x6e, 0x12, 0x7b, 0x0a, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x5f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x70, 0x61, - 0x74, 0x68, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x18, 0x5a, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x31, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, - 0x61, 0x2e, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x41, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1c, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, - 0x70, 0x68, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x50, 0x61, 0x74, 0x68, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x64, 0x12, 0x78, 0x0a, 0x1f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, - 0x61, 0x70, 0x68, 0x5f, 0x63, 0x72, 0x6f, 0x77, 0x6e, 0x5f, 0x6a, 0x65, 0x77, 0x65, 0x6c, 0x5f, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x18, 0x5b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x30, 0x2e, 0x70, - 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x41, 0x63, - 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x43, 0x72, 0x6f, 0x77, 0x6e, 0x4a, 0x65, - 0x77, 0x65, 0x6c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, - 0x52, 0x1b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x43, 0x72, 0x6f, - 0x77, 0x6e, 0x4a, 0x65, 0x77, 0x65, 0x6c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x86, 0x01, - 0x0a, 0x25, 0x75, 0x69, 0x5f, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x70, - 0x68, 0x5f, 0x63, 0x72, 0x6f, 0x77, 0x6e, 0x5f, 0x6a, 0x65, 0x77, 0x65, 0x6c, 0x5f, 0x64, 0x69, - 0x66, 0x66, 0x5f, 0x76, 0x69, 0x65, 0x77, 0x18, 0x5c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, - 0x70, 0x72, 0x65, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, - 0x49, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x43, 0x72, 0x6f, 0x77, - 0x6e, 0x4a, 0x65, 0x77, 0x65, 0x6c, 0x44, 0x69, 0x66, 0x66, 0x56, 0x69, 0x65, 0x77, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1f, 0x75, 0x69, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, - 0x72, 0x61, 0x70, 0x68, 0x43, 0x72, 0x6f, 0x77, 0x6e, 0x4a, 0x65, 0x77, 0x65, 0x6c, 0x44, 0x69, - 0x66, 0x66, 0x56, 0x69, 0x65, 0x77, 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, 0x4d, 0x0a, 0x08, 0x55, 0x73, 0x65, 0x72, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x19, 0x0a, 0x15, - 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, - 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x53, 0x45, 0x52, 0x5f, - 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x48, 0x55, 0x4d, 0x41, 0x4e, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, - 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x42, 0x4f, 0x54, 0x10, 0x02, 0x2a, - 0xc0, 0x0f, 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, + 0x72, 0x61, 0x70, 0x68, 0x43, 0x72, 0x6f, 0x77, 0x6e, 0x4a, 0x65, 0x77, 0x65, 0x6c, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x1b, 0x61, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x43, 0x72, 0x6f, 0x77, 0x6e, 0x4a, 0x65, 0x77, + 0x65, 0x6c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x12, 0x86, 0x01, 0x0a, 0x25, 0x75, 0x69, 0x5f, + 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x63, 0x72, 0x6f, + 0x77, 0x6e, 0x5f, 0x6a, 0x65, 0x77, 0x65, 0x6c, 0x5f, 0x64, 0x69, 0x66, 0x66, 0x5f, 0x76, 0x69, + 0x65, 0x77, 0x18, 0x5c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x72, 0x65, 0x68, 0x6f, + 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x2e, 0x55, 0x49, 0x41, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x43, 0x72, 0x6f, 0x77, 0x6e, 0x4a, 0x65, 0x77, 0x65, + 0x6c, 0x44, 0x69, 0x66, 0x66, 0x56, 0x69, 0x65, 0x77, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x1f, 0x75, 0x69, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x47, 0x72, 0x61, 0x70, 0x68, 0x43, + 0x72, 0x6f, 0x77, 0x6e, 0x4a, 0x65, 0x77, 0x65, 0x6c, 0x44, 0x69, 0x66, 0x66, 0x56, 0x69, 0x65, + 0x77, 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, 0x4d, 0x0a, 0x08, 0x55, + 0x73, 0x65, 0x72, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x19, 0x0a, 0x15, 0x55, 0x53, 0x45, 0x52, 0x5f, + 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x5f, + 0x48, 0x55, 0x4d, 0x41, 0x4e, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x53, 0x45, 0x52, 0x5f, + 0x4b, 0x49, 0x4e, 0x44, 0x5f, 0x42, 0x4f, 0x54, 0x10, 0x02, 0x2a, 0xc0, 0x0f, 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, 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, + 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, 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, 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, 0x52, 0x44, 0x53, 0x10, 0x06, 0x12, + 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, 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, + 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, 0x47, - 0x43, 0x50, 0x10, 0x0f, 0x12, 0x28, 0x0a, 0x24, 0x44, 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, + 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, 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, + 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, 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, + 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, 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, 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, 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, + 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, + 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, 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, 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, + 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, - 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, 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, + 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, 0x12, 0x30, 0x0a, 0x2c, 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, 0x12, 0x30, 0x0a, 0x2c, 0x44, - 0x49, 0x53, 0x43, 0x4f, 0x56, 0x45, 0x52, 0x5f, 0x52, 0x45, 0x53, 0x4f, 0x55, 0x52, 0x43, 0x45, - 0x5f, 0x44, 0x4f, 0x43, 0x5f, 0x57, 0x49, 0x4e, 0x44, 0x4f, 0x57, 0x53, 0x5f, 0x44, 0x45, 0x53, - 0x4b, 0x54, 0x4f, 0x50, 0x5f, 0x4e, 0x4f, 0x4e, 0x5f, 0x41, 0x44, 0x10, 0x27, 0x12, 0x24, 0x0a, - 0x20, 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, 0x5f, 0x45, 0x4b, - 0x53, 0x10, 0x28, 0x12, 0x2d, 0x0a, 0x29, 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, 0x41, 0x57, 0x53, 0x5f, 0x43, 0x4f, 0x4e, 0x53, 0x4f, 0x4c, 0x45, - 0x10, 0x29, 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, 0xc1, 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, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x54, 0x41, 0x5f, 0x4f, 0x4b, 0x54, 0x41, 0x5f, 0x55, - 0x53, 0x45, 0x52, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x10, 0x0b, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x54, - 0x41, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x41, 0x5f, 0x49, 0x44, 0x10, 0x0c, 0x2a, 0xe3, 0x08, 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, + 0x57, 0x49, 0x4e, 0x44, 0x4f, 0x57, 0x53, 0x5f, 0x44, 0x45, 0x53, 0x4b, 0x54, 0x4f, 0x50, 0x5f, + 0x4e, 0x4f, 0x4e, 0x5f, 0x41, 0x44, 0x10, 0x27, 0x12, 0x24, 0x0a, 0x20, 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, 0x5f, 0x45, 0x4b, 0x53, 0x10, 0x28, 0x12, 0x2d, + 0x0a, 0x29, 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, + 0x41, 0x57, 0x53, 0x5f, 0x43, 0x4f, 0x4e, 0x53, 0x4f, 0x4c, 0x45, 0x10, 0x29, 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, 0xc1, 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, 0x12, 0x16, 0x0a, + 0x12, 0x43, 0x54, 0x41, 0x5f, 0x4f, 0x4b, 0x54, 0x41, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x53, + 0x59, 0x4e, 0x43, 0x10, 0x0b, 0x12, 0x10, 0x0a, 0x0c, 0x43, 0x54, 0x41, 0x5f, 0x45, 0x4e, 0x54, + 0x52, 0x41, 0x5f, 0x49, 0x44, 0x10, 0x0c, 0x2a, 0xe3, 0x08, 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, 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, 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, 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, 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, - 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, 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, 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, + 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, 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, 0x4b, - 0x55, 0x42, 0x45, 0x52, 0x4e, 0x45, 0x54, 0x45, 0x53, 0x10, 0x16, 0x12, 0x24, 0x0a, 0x20, 0x49, + 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, 0x45, 0x4e, 0x54, 0x52, 0x41, 0x5f, 0x49, 0x44, 0x10, - 0x17, 0x12, 0x37, 0x0a, 0x33, 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, 0x41, 0x54, - 0x41, 0x44, 0x4f, 0x47, 0x5f, 0x49, 0x4e, 0x43, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x5f, 0x4d, 0x41, - 0x4e, 0x41, 0x47, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x18, 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, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x4e, 0x4f, 0x57, - 0x10, 0x19, 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, + 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, 0x4b, 0x55, 0x42, 0x45, 0x52, 0x4e, + 0x45, 0x54, 0x45, 0x53, 0x10, 0x16, 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, 0x45, 0x4e, 0x54, 0x52, 0x41, 0x5f, 0x49, 0x44, 0x10, 0x17, 0x12, 0x37, 0x0a, 0x33, + 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, 0x41, 0x54, 0x41, 0x44, 0x4f, 0x47, 0x5f, + 0x49, 0x4e, 0x43, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x5f, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, 0x4d, + 0x45, 0x4e, 0x54, 0x10, 0x18, 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, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x4e, 0x4f, 0x57, 0x10, 0x19, 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, 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, 0x68, 0x6f, 0x67, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 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, 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, - 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, + 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 ( @@ -10995,7 +11010,7 @@ func file_prehog_v1alpha_teleport_proto_rawDescGZIP() []byte { var file_prehog_v1alpha_teleport_proto_enumTypes = make([]protoimpl.EnumInfo, 13) var file_prehog_v1alpha_teleport_proto_msgTypes = make([]protoimpl.MessageInfo, 102) -var file_prehog_v1alpha_teleport_proto_goTypes = []interface{}{ +var file_prehog_v1alpha_teleport_proto_goTypes = []any{ (ResourceKind)(0), // 0: prehog.v1alpha.ResourceKind (UserKind)(0), // 1: prehog.v1alpha.UserKind (DiscoverResource)(0), // 2: prehog.v1alpha.DiscoverResource @@ -11316,7 +11331,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_prehog_v1alpha_teleport_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*UserLoginEvent); i { case 0: return &v.state @@ -11328,7 +11343,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*MFAAuthenticationEvent); i { case 0: return &v.state @@ -11340,7 +11355,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*SSOCreateEvent); i { case 0: return &v.state @@ -11352,7 +11367,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ResourceCreateEvent); i { case 0: return &v.state @@ -11364,7 +11379,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*DiscoveredDatabaseMetadata); i { case 0: return &v.state @@ -11376,7 +11391,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*ResourceHeartbeatEvent); i { case 0: return &v.state @@ -11388,7 +11403,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*SessionStartEvent); i { case 0: return &v.state @@ -11400,7 +11415,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*SessionStartDatabaseMetadata); i { case 0: return &v.state @@ -11412,7 +11427,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*SessionStartDesktopMetadata); i { case 0: return &v.state @@ -11424,7 +11439,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*UserCertificateIssuedEvent); i { case 0: return &v.state @@ -11436,7 +11451,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*SPIFFESVIDIssuedEvent); i { case 0: return &v.state @@ -11448,7 +11463,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*UIBannerClickEvent); i { case 0: return &v.state @@ -11460,7 +11475,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*UIOnboardCompleteGoToDashboardClickEvent); i { case 0: return &v.state @@ -11472,7 +11487,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*UIOnboardAddFirstResourceClickEvent); i { case 0: return &v.state @@ -11484,7 +11499,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[14].Exporter = func(v any, i int) any { switch v := v.(*UIOnboardAddFirstResourceLaterClickEvent); i { case 0: return &v.state @@ -11496,7 +11511,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[15].Exporter = func(v any, i int) any { switch v := v.(*UIOnboardSetCredentialSubmitEvent); i { case 0: return &v.state @@ -11508,7 +11523,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[16].Exporter = func(v any, i int) any { switch v := v.(*UIOnboardRegisterChallengeSubmitEvent); i { case 0: return &v.state @@ -11520,7 +11535,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[17].Exporter = func(v any, i int) any { switch v := v.(*UIOnboardQuestionnaireSubmitEvent); i { case 0: return &v.state @@ -11532,7 +11547,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[18].Exporter = func(v any, i int) any { switch v := v.(*UIRecoveryCodesContinueClickEvent); i { case 0: return &v.state @@ -11544,7 +11559,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[19].Exporter = func(v any, i int) any { switch v := v.(*UIRecoveryCodesCopyClickEvent); i { case 0: return &v.state @@ -11556,7 +11571,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[20].Exporter = func(v any, i int) any { switch v := v.(*UIRecoveryCodesPrintClickEvent); i { case 0: return &v.state @@ -11568,7 +11583,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[21].Exporter = func(v any, i int) any { switch v := v.(*DiscoverMetadata); i { case 0: return &v.state @@ -11580,7 +11595,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[22].Exporter = func(v any, i int) any { switch v := v.(*DiscoverResourceMetadata); i { case 0: return &v.state @@ -11592,7 +11607,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[23].Exporter = func(v any, i int) any { switch v := v.(*DiscoverStepStatus); i { case 0: return &v.state @@ -11604,7 +11619,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[24].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverStartedEvent); i { case 0: return &v.state @@ -11616,7 +11631,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[25].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverResourceSelectionEvent); i { case 0: return &v.state @@ -11628,7 +11643,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[26].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverIntegrationAWSOIDCConnectEvent); i { case 0: return &v.state @@ -11640,7 +11655,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[27].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverDatabaseRDSEnrollEvent); i { case 0: return &v.state @@ -11652,7 +11667,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[28].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverKubeEKSEnrollEvent); i { case 0: return &v.state @@ -11664,7 +11679,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[29].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverDeployServiceEvent); i { case 0: return &v.state @@ -11676,7 +11691,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[30].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverCreateDiscoveryConfigEvent); i { case 0: return &v.state @@ -11688,7 +11703,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[31].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverDatabaseRegisterEvent); i { case 0: return &v.state @@ -11700,7 +11715,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[32].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverDatabaseConfigureMTLSEvent); i { case 0: return &v.state @@ -11712,7 +11727,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[33].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverDesktopActiveDirectoryToolsInstallEvent); i { case 0: return &v.state @@ -11724,7 +11739,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[34].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverDesktopActiveDirectoryConfigureEvent); i { case 0: return &v.state @@ -11736,7 +11751,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[35].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverAutoDiscoveredResourcesEvent); i { case 0: return &v.state @@ -11748,7 +11763,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[36].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverEC2InstanceSelectionEvent); i { case 0: return &v.state @@ -11760,7 +11775,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[37].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverDeployEICEEvent); i { case 0: return &v.state @@ -11772,7 +11787,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[38].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverCreateNodeEvent); i { case 0: return &v.state @@ -11784,7 +11799,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[39].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverCreateAppServerEvent); i { case 0: return &v.state @@ -11796,7 +11811,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[40].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverDatabaseConfigureIAMPolicyEvent); i { case 0: return &v.state @@ -11808,7 +11823,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[41].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverPrincipalsConfigureEvent); i { case 0: return &v.state @@ -11820,7 +11835,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[42].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverTestConnectionEvent); i { case 0: return &v.state @@ -11832,7 +11847,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[43].Exporter = func(v any, i int) any { switch v := v.(*UIDiscoverCompletedEvent); i { case 0: return &v.state @@ -11844,7 +11859,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[44].Exporter = func(v any, i int) any { switch v := v.(*RoleCreateEvent); i { case 0: return &v.state @@ -11856,7 +11871,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[45].Exporter = func(v any, i int) any { switch v := v.(*BotCreateEvent); i { case 0: return &v.state @@ -11868,7 +11883,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[46].Exporter = func(v any, i int) any { switch v := v.(*BotJoinEvent); i { case 0: return &v.state @@ -11880,7 +11895,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[47].Exporter = func(v any, i int) any { switch v := v.(*UICreateNewRoleClickEvent); i { case 0: return &v.state @@ -11892,7 +11907,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[48].Exporter = func(v any, i int) any { switch v := v.(*UICreateNewRoleSaveClickEvent); i { case 0: return &v.state @@ -11904,7 +11919,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[49].Exporter = func(v any, i int) any { switch v := v.(*UICreateNewRoleCancelClickEvent); i { case 0: return &v.state @@ -11916,7 +11931,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[50].Exporter = func(v any, i int) any { switch v := v.(*UICreateNewRoleViewDocumentationClickEvent); i { case 0: return &v.state @@ -11928,7 +11943,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[51].Exporter = func(v any, i int) any { switch v := v.(*UICallToActionClickEvent); i { case 0: return &v.state @@ -11940,7 +11955,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[52].Exporter = func(v any, i int) any { switch v := v.(*KubeRequestEvent); i { case 0: return &v.state @@ -11952,7 +11967,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[53].Exporter = func(v any, i int) any { switch v := v.(*SFTPEvent); i { case 0: return &v.state @@ -11964,7 +11979,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[54].Exporter = func(v any, i int) any { switch v := v.(*AgentMetadataEvent); i { case 0: return &v.state @@ -11976,7 +11991,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[55].Exporter = func(v any, i int) any { switch v := v.(*AssistCompletionEvent); i { case 0: return &v.state @@ -11988,7 +12003,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[56].Exporter = func(v any, i int) any { switch v := v.(*AssistExecutionEvent); i { case 0: return &v.state @@ -12000,7 +12015,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[57].Exporter = func(v any, i int) any { switch v := v.(*AssistNewConversationEvent); i { case 0: return &v.state @@ -12012,7 +12027,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[58].Exporter = func(v any, i int) any { switch v := v.(*AssistAccessRequestEvent); i { case 0: return &v.state @@ -12024,7 +12039,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[59].Exporter = func(v any, i int) any { switch v := v.(*AssistActionEvent); i { case 0: return &v.state @@ -12036,7 +12051,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[60].Exporter = func(v any, i int) any { switch v := v.(*AccessListMetadata); i { case 0: return &v.state @@ -12048,7 +12063,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[61].Exporter = func(v any, i int) any { switch v := v.(*AccessListCreateEvent); i { case 0: return &v.state @@ -12060,7 +12075,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[62].Exporter = func(v any, i int) any { switch v := v.(*AccessListUpdateEvent); i { case 0: return &v.state @@ -12072,7 +12087,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[63].Exporter = func(v any, i int) any { switch v := v.(*AccessListDeleteEvent); i { case 0: return &v.state @@ -12084,7 +12099,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[64].Exporter = func(v any, i int) any { switch v := v.(*AccessListMemberCreateEvent); i { case 0: return &v.state @@ -12096,7 +12111,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[65].Exporter = func(v any, i int) any { switch v := v.(*AccessListMemberUpdateEvent); i { case 0: return &v.state @@ -12108,7 +12123,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[66].Exporter = func(v any, i int) any { switch v := v.(*AccessListMemberDeleteEvent); i { case 0: return &v.state @@ -12120,7 +12135,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[67].Exporter = func(v any, i int) any { switch v := v.(*AccessListGrantsToUserEvent); i { case 0: return &v.state @@ -12132,7 +12147,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[68].Exporter = func(v any, i int) any { switch v := v.(*AccessListReviewCreateEvent); i { case 0: return &v.state @@ -12144,7 +12159,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[69].Exporter = func(v any, i int) any { switch v := v.(*AccessListReviewDeleteEvent); i { case 0: return &v.state @@ -12156,7 +12171,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[70].Exporter = func(v any, i int) any { switch v := v.(*AccessListReviewComplianceEvent); i { case 0: return &v.state @@ -12168,7 +12183,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[71].Exporter = func(v any, i int) any { switch v := v.(*IntegrationEnrollMetadata); i { case 0: return &v.state @@ -12180,7 +12195,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[72].Exporter = func(v any, i int) any { switch v := v.(*UIIntegrationEnrollStartEvent); i { case 0: return &v.state @@ -12192,7 +12207,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[73].Exporter = func(v any, i int) any { switch v := v.(*UIIntegrationEnrollCompleteEvent); i { case 0: return &v.state @@ -12204,7 +12219,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[74].Exporter = func(v any, i int) any { switch v := v.(*EditorChangeEvent); i { case 0: return &v.state @@ -12216,7 +12231,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[75].Exporter = func(v any, i int) any { switch v := v.(*DeviceAuthenticateEvent); i { case 0: return &v.state @@ -12228,7 +12243,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[76].Exporter = func(v any, i int) any { switch v := v.(*DeviceEnrollEvent); i { case 0: return &v.state @@ -12240,7 +12255,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[77].Exporter = func(v any, i int) any { switch v := v.(*FeatureRecommendationEvent); i { case 0: return &v.state @@ -12252,7 +12267,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[78].Exporter = func(v any, i int) any { switch v := v.(*LicenseLimitEvent); i { case 0: return &v.state @@ -12264,7 +12279,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[79].Exporter = func(v any, i int) any { switch v := v.(*DesktopDirectoryShareEvent); i { case 0: return &v.state @@ -12276,7 +12291,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[80].Exporter = func(v any, i int) any { switch v := v.(*DesktopClipboardEvent); i { case 0: return &v.state @@ -12288,7 +12303,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[81].Exporter = func(v any, i int) any { switch v := v.(*TAGExecuteQueryEvent); i { case 0: return &v.state @@ -12300,7 +12315,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[82].Exporter = func(v any, i int) any { switch v := v.(*AccessGraphSecretsScanAuthorizedKeysEvent); i { case 0: return &v.state @@ -12312,7 +12327,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[83].Exporter = func(v any, i int) any { switch v := v.(*AccessGraphSecretsScanSSHPrivateKeysEvent); i { case 0: return &v.state @@ -12324,7 +12339,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[84].Exporter = func(v any, i int) any { switch v := v.(*AccessGraphGitlabScanEvent); i { case 0: return &v.state @@ -12336,7 +12351,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[85].Exporter = func(v any, i int) any { switch v := v.(*AccessGraphAWSScanEvent); i { case 0: return &v.state @@ -12348,7 +12363,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[86].Exporter = func(v any, i int) any { switch v := v.(*AccessGraphAccessPathChangedEvent); i { case 0: return &v.state @@ -12360,7 +12375,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[87].Exporter = func(v any, i int) any { switch v := v.(*UIAccessGraphCrownJewelDiffViewEvent); i { case 0: return &v.state @@ -12372,7 +12387,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[88].Exporter = func(v any, i int) any { switch v := v.(*AccessGraphCrownJewelCreateEvent); i { case 0: return &v.state @@ -12384,7 +12399,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[89].Exporter = func(v any, i int) any { switch v := v.(*ExternalAuditStorageAuthenticateEvent); i { case 0: return &v.state @@ -12396,7 +12411,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[90].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[90].Exporter = func(v any, i int) any { switch v := v.(*SecurityReportGetResultEvent); i { case 0: return &v.state @@ -12408,7 +12423,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[91].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[91].Exporter = func(v any, i int) any { switch v := v.(*AuditQueryRunEvent); i { case 0: return &v.state @@ -12420,7 +12435,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[92].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[92].Exporter = func(v any, i int) any { switch v := v.(*DiscoveryFetchEvent); i { case 0: return &v.state @@ -12432,7 +12447,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[93].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[93].Exporter = func(v any, i int) any { switch v := v.(*OktaAccessListSyncEvent); i { case 0: return &v.state @@ -12444,7 +12459,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[94].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[94].Exporter = func(v any, i int) any { switch v := v.(*DatabaseUserCreatedEvent); i { case 0: return &v.state @@ -12456,7 +12471,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[95].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[95].Exporter = func(v any, i int) any { switch v := v.(*DatabaseUserPermissionsUpdateEvent); i { case 0: return &v.state @@ -12468,7 +12483,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[96].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[96].Exporter = func(v any, i int) any { switch v := v.(*SubmitEventRequest); i { case 0: return &v.state @@ -12480,7 +12495,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[97].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[97].Exporter = func(v any, i int) any { switch v := v.(*SubmitEventResponse); i { case 0: return &v.state @@ -12492,7 +12507,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[98].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[98].Exporter = func(v any, i int) any { switch v := v.(*SubmitEventsRequest); i { case 0: return &v.state @@ -12504,7 +12519,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[99].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[99].Exporter = func(v any, i int) any { switch v := v.(*SubmitEventsResponse); i { case 0: return &v.state @@ -12516,7 +12531,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[100].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[100].Exporter = func(v any, i int) any { switch v := v.(*HelloTeleportRequest); i { case 0: return &v.state @@ -12528,7 +12543,7 @@ func file_prehog_v1alpha_teleport_proto_init() { return nil } } - file_prehog_v1alpha_teleport_proto_msgTypes[101].Exporter = func(v interface{}, i int) interface{} { + file_prehog_v1alpha_teleport_proto_msgTypes[101].Exporter = func(v any, i int) any { switch v := v.(*HelloTeleportResponse); i { case 0: return &v.state @@ -12541,7 +12556,7 @@ func file_prehog_v1alpha_teleport_proto_init() { } } } - file_prehog_v1alpha_teleport_proto_msgTypes[96].OneofWrappers = []interface{}{ + file_prehog_v1alpha_teleport_proto_msgTypes[96].OneofWrappers = []any{ (*SubmitEventRequest_UserLogin)(nil), (*SubmitEventRequest_SsoCreate)(nil), (*SubmitEventRequest_ResourceCreate)(nil), diff --git a/gen/proto/go/teleport/lib/teleterm/v1/access_request.pb.go b/gen/proto/go/teleport/lib/teleterm/v1/access_request.pb.go index af6b8f52a7662..32285bc7daae1 100644 --- a/gen/proto/go/teleport/lib/teleterm/v1/access_request.pb.go +++ b/gen/proto/go/teleport/lib/teleterm/v1/access_request.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/lib/teleterm/v1/access_request.proto @@ -647,7 +647,7 @@ func file_teleport_lib_teleterm_v1_access_request_proto_rawDescGZIP() []byte { } var file_teleport_lib_teleterm_v1_access_request_proto_msgTypes = make([]protoimpl.MessageInfo, 5) -var file_teleport_lib_teleterm_v1_access_request_proto_goTypes = []interface{}{ +var file_teleport_lib_teleterm_v1_access_request_proto_goTypes = []any{ (*AccessRequest)(nil), // 0: teleport.lib.teleterm.v1.AccessRequest (*AccessRequestReview)(nil), // 1: teleport.lib.teleterm.v1.AccessRequestReview (*ResourceID)(nil), // 2: teleport.lib.teleterm.v1.ResourceID @@ -682,7 +682,7 @@ func file_teleport_lib_teleterm_v1_access_request_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_lib_teleterm_v1_access_request_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_access_request_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*AccessRequest); i { case 0: return &v.state @@ -694,7 +694,7 @@ func file_teleport_lib_teleterm_v1_access_request_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_access_request_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_access_request_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*AccessRequestReview); i { case 0: return &v.state @@ -706,7 +706,7 @@ func file_teleport_lib_teleterm_v1_access_request_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_access_request_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_access_request_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ResourceID); i { case 0: return &v.state @@ -718,7 +718,7 @@ func file_teleport_lib_teleterm_v1_access_request_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_access_request_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_access_request_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ResourceDetails); i { case 0: return &v.state @@ -730,7 +730,7 @@ func file_teleport_lib_teleterm_v1_access_request_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_access_request_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_access_request_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*Resource); i { case 0: return &v.state diff --git a/gen/proto/go/teleport/lib/teleterm/v1/app.pb.go b/gen/proto/go/teleport/lib/teleterm/v1/app.pb.go index 29b2ffdf2c439..6295781e49d53 100644 --- a/gen/proto/go/teleport/lib/teleterm/v1/app.pb.go +++ b/gen/proto/go/teleport/lib/teleterm/v1/app.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/lib/teleterm/v1/app.proto @@ -329,7 +329,7 @@ func file_teleport_lib_teleterm_v1_app_proto_rawDescGZIP() []byte { } var file_teleport_lib_teleterm_v1_app_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_teleport_lib_teleterm_v1_app_proto_goTypes = []interface{}{ +var file_teleport_lib_teleterm_v1_app_proto_goTypes = []any{ (*App)(nil), // 0: teleport.lib.teleterm.v1.App (*AWSRole)(nil), // 1: teleport.lib.teleterm.v1.AWSRole (*Label)(nil), // 2: teleport.lib.teleterm.v1.Label @@ -351,7 +351,7 @@ func file_teleport_lib_teleterm_v1_app_proto_init() { } file_teleport_lib_teleterm_v1_label_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_lib_teleterm_v1_app_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_app_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*App); i { case 0: return &v.state @@ -363,7 +363,7 @@ func file_teleport_lib_teleterm_v1_app_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_app_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_app_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*AWSRole); i { case 0: return &v.state diff --git a/gen/proto/go/teleport/lib/teleterm/v1/auth_settings.pb.go b/gen/proto/go/teleport/lib/teleterm/v1/auth_settings.pb.go index da5ecb59f7573..cec1afc4ca243 100644 --- a/gen/proto/go/teleport/lib/teleterm/v1/auth_settings.pb.go +++ b/gen/proto/go/teleport/lib/teleterm/v1/auth_settings.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/lib/teleterm/v1/auth_settings.proto @@ -278,7 +278,7 @@ func file_teleport_lib_teleterm_v1_auth_settings_proto_rawDescGZIP() []byte { } var file_teleport_lib_teleterm_v1_auth_settings_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_teleport_lib_teleterm_v1_auth_settings_proto_goTypes = []interface{}{ +var file_teleport_lib_teleterm_v1_auth_settings_proto_goTypes = []any{ (*AuthSettings)(nil), // 0: teleport.lib.teleterm.v1.AuthSettings (*AuthProvider)(nil), // 1: teleport.lib.teleterm.v1.AuthProvider } @@ -297,7 +297,7 @@ func file_teleport_lib_teleterm_v1_auth_settings_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_lib_teleterm_v1_auth_settings_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_auth_settings_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*AuthSettings); i { case 0: return &v.state @@ -309,7 +309,7 @@ func file_teleport_lib_teleterm_v1_auth_settings_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_auth_settings_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_auth_settings_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*AuthProvider); i { case 0: return &v.state diff --git a/gen/proto/go/teleport/lib/teleterm/v1/cluster.pb.go b/gen/proto/go/teleport/lib/teleterm/v1/cluster.pb.go index 9c5e6f97d5767..a5fc7afd6e95c 100644 --- a/gen/proto/go/teleport/lib/teleterm/v1/cluster.pb.go +++ b/gen/proto/go/teleport/lib/teleterm/v1/cluster.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/lib/teleterm/v1/cluster.proto @@ -804,7 +804,7 @@ func file_teleport_lib_teleterm_v1_cluster_proto_rawDescGZIP() []byte { var file_teleport_lib_teleterm_v1_cluster_proto_enumTypes = make([]protoimpl.EnumInfo, 1) var file_teleport_lib_teleterm_v1_cluster_proto_msgTypes = make([]protoimpl.MessageInfo, 5) -var file_teleport_lib_teleterm_v1_cluster_proto_goTypes = []interface{}{ +var file_teleport_lib_teleterm_v1_cluster_proto_goTypes = []any{ (LoggedInUser_UserType)(0), // 0: teleport.lib.teleterm.v1.LoggedInUser.UserType (*Cluster)(nil), // 1: teleport.lib.teleterm.v1.Cluster (*LoggedInUser)(nil), // 2: teleport.lib.teleterm.v1.LoggedInUser @@ -843,7 +843,7 @@ func file_teleport_lib_teleterm_v1_cluster_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_lib_teleterm_v1_cluster_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_cluster_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Cluster); i { case 0: return &v.state @@ -855,7 +855,7 @@ func file_teleport_lib_teleterm_v1_cluster_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_cluster_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_cluster_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*LoggedInUser); i { case 0: return &v.state @@ -867,7 +867,7 @@ func file_teleport_lib_teleterm_v1_cluster_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_cluster_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_cluster_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ACL); i { case 0: return &v.state @@ -879,7 +879,7 @@ func file_teleport_lib_teleterm_v1_cluster_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_cluster_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_cluster_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*ResourceAccess); i { case 0: return &v.state @@ -891,7 +891,7 @@ func file_teleport_lib_teleterm_v1_cluster_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_cluster_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_cluster_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*Features); i { case 0: return &v.state diff --git a/gen/proto/go/teleport/lib/teleterm/v1/database.pb.go b/gen/proto/go/teleport/lib/teleterm/v1/database.pb.go index 00aeeded52c5d..89a319a34ee19 100644 --- a/gen/proto/go/teleport/lib/teleterm/v1/database.pb.go +++ b/gen/proto/go/teleport/lib/teleterm/v1/database.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/lib/teleterm/v1/database.proto @@ -194,7 +194,7 @@ func file_teleport_lib_teleterm_v1_database_proto_rawDescGZIP() []byte { } var file_teleport_lib_teleterm_v1_database_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_lib_teleterm_v1_database_proto_goTypes = []interface{}{ +var file_teleport_lib_teleterm_v1_database_proto_goTypes = []any{ (*Database)(nil), // 0: teleport.lib.teleterm.v1.Database (*Label)(nil), // 1: teleport.lib.teleterm.v1.Label } @@ -214,7 +214,7 @@ func file_teleport_lib_teleterm_v1_database_proto_init() { } file_teleport_lib_teleterm_v1_label_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_lib_teleterm_v1_database_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_database_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Database); i { case 0: return &v.state diff --git a/gen/proto/go/teleport/lib/teleterm/v1/gateway.pb.go b/gen/proto/go/teleport/lib/teleterm/v1/gateway.pb.go index 9b2399d5bc842..58326c1a9ba4f 100644 --- a/gen/proto/go/teleport/lib/teleterm/v1/gateway.pb.go +++ b/gen/proto/go/teleport/lib/teleterm/v1/gateway.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/lib/teleterm/v1/gateway.proto @@ -321,7 +321,7 @@ func file_teleport_lib_teleterm_v1_gateway_proto_rawDescGZIP() []byte { } var file_teleport_lib_teleterm_v1_gateway_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_teleport_lib_teleterm_v1_gateway_proto_goTypes = []interface{}{ +var file_teleport_lib_teleterm_v1_gateway_proto_goTypes = []any{ (*Gateway)(nil), // 0: teleport.lib.teleterm.v1.Gateway (*GatewayCLICommand)(nil), // 1: teleport.lib.teleterm.v1.GatewayCLICommand } @@ -340,7 +340,7 @@ func file_teleport_lib_teleterm_v1_gateway_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_lib_teleterm_v1_gateway_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_gateway_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Gateway); i { case 0: return &v.state @@ -352,7 +352,7 @@ func file_teleport_lib_teleterm_v1_gateway_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_gateway_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_gateway_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*GatewayCLICommand); i { case 0: return &v.state diff --git a/gen/proto/go/teleport/lib/teleterm/v1/kube.pb.go b/gen/proto/go/teleport/lib/teleterm/v1/kube.pb.go index f0af9114e8af6..29f6fdf5471b5 100644 --- a/gen/proto/go/teleport/lib/teleterm/v1/kube.pb.go +++ b/gen/proto/go/teleport/lib/teleterm/v1/kube.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/lib/teleterm/v1/kube.proto @@ -141,7 +141,7 @@ func file_teleport_lib_teleterm_v1_kube_proto_rawDescGZIP() []byte { } var file_teleport_lib_teleterm_v1_kube_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_lib_teleterm_v1_kube_proto_goTypes = []interface{}{ +var file_teleport_lib_teleterm_v1_kube_proto_goTypes = []any{ (*Kube)(nil), // 0: teleport.lib.teleterm.v1.Kube (*Label)(nil), // 1: teleport.lib.teleterm.v1.Label } @@ -161,7 +161,7 @@ func file_teleport_lib_teleterm_v1_kube_proto_init() { } file_teleport_lib_teleterm_v1_label_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_lib_teleterm_v1_kube_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_kube_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Kube); i { case 0: return &v.state diff --git a/gen/proto/go/teleport/lib/teleterm/v1/label.pb.go b/gen/proto/go/teleport/lib/teleterm/v1/label.pb.go index 5817c65b12ac5..57964f3e371b0 100644 --- a/gen/proto/go/teleport/lib/teleterm/v1/label.pb.go +++ b/gen/proto/go/teleport/lib/teleterm/v1/label.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/lib/teleterm/v1/label.proto @@ -127,7 +127,7 @@ func file_teleport_lib_teleterm_v1_label_proto_rawDescGZIP() []byte { } var file_teleport_lib_teleterm_v1_label_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_lib_teleterm_v1_label_proto_goTypes = []interface{}{ +var file_teleport_lib_teleterm_v1_label_proto_goTypes = []any{ (*Label)(nil), // 0: teleport.lib.teleterm.v1.Label } var file_teleport_lib_teleterm_v1_label_proto_depIdxs = []int32{ @@ -144,7 +144,7 @@ func file_teleport_lib_teleterm_v1_label_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_lib_teleterm_v1_label_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_label_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Label); i { case 0: return &v.state diff --git a/gen/proto/go/teleport/lib/teleterm/v1/server.pb.go b/gen/proto/go/teleport/lib/teleterm/v1/server.pb.go index 5fd9cbe28fb76..d9a1a5777bada 100644 --- a/gen/proto/go/teleport/lib/teleterm/v1/server.pb.go +++ b/gen/proto/go/teleport/lib/teleterm/v1/server.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/lib/teleterm/v1/server.proto @@ -184,7 +184,7 @@ func file_teleport_lib_teleterm_v1_server_proto_rawDescGZIP() []byte { } var file_teleport_lib_teleterm_v1_server_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_lib_teleterm_v1_server_proto_goTypes = []interface{}{ +var file_teleport_lib_teleterm_v1_server_proto_goTypes = []any{ (*Server)(nil), // 0: teleport.lib.teleterm.v1.Server (*Label)(nil), // 1: teleport.lib.teleterm.v1.Label } @@ -204,7 +204,7 @@ func file_teleport_lib_teleterm_v1_server_proto_init() { } file_teleport_lib_teleterm_v1_label_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_lib_teleterm_v1_server_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_server_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Server); i { case 0: return &v.state diff --git a/gen/proto/go/teleport/lib/teleterm/v1/service.pb.go b/gen/proto/go/teleport/lib/teleterm/v1/service.pb.go index 051d98bda06cd..48b4d5eaeb0af 100644 --- a/gen/proto/go/teleport/lib/teleterm/v1/service.pb.go +++ b/gen/proto/go/teleport/lib/teleterm/v1/service.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/lib/teleterm/v1/service.proto @@ -5505,7 +5505,7 @@ func file_teleport_lib_teleterm_v1_service_proto_rawDescGZIP() []byte { var file_teleport_lib_teleterm_v1_service_proto_enumTypes = make([]protoimpl.EnumInfo, 3) var file_teleport_lib_teleterm_v1_service_proto_msgTypes = make([]protoimpl.MessageInfo, 75) -var file_teleport_lib_teleterm_v1_service_proto_goTypes = []interface{}{ +var file_teleport_lib_teleterm_v1_service_proto_goTypes = []any{ (PasswordlessPrompt)(0), // 0: teleport.lib.teleterm.v1.PasswordlessPrompt (FileTransferDirection)(0), // 1: teleport.lib.teleterm.v1.FileTransferDirection (HeadlessAuthenticationState)(0), // 2: teleport.lib.teleterm.v1.HeadlessAuthenticationState @@ -5741,7 +5741,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { file_teleport_lib_teleterm_v1_server_proto_init() file_teleport_lib_teleterm_v1_usage_events_proto_init() if !protoimpl.UnsafeEnabled { - file_teleport_lib_teleterm_v1_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*EmptyResponse); i { case 0: return &v.state @@ -5753,7 +5753,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*RemoveClusterRequest); i { case 0: return &v.state @@ -5765,7 +5765,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*GetClusterRequest); i { case 0: return &v.state @@ -5777,7 +5777,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*LogoutRequest); i { case 0: return &v.state @@ -5789,7 +5789,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*GetAccessRequestRequest); i { case 0: return &v.state @@ -5801,7 +5801,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*GetAccessRequestsRequest); i { case 0: return &v.state @@ -5813,7 +5813,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*GetAccessRequestResponse); i { case 0: return &v.state @@ -5825,7 +5825,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*GetAccessRequestsResponse); i { case 0: return &v.state @@ -5837,7 +5837,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*DeleteAccessRequestRequest); i { case 0: return &v.state @@ -5849,7 +5849,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*CreateAccessRequestRequest); i { case 0: return &v.state @@ -5861,7 +5861,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[10].Exporter = func(v any, i int) any { switch v := v.(*CreateAccessRequestResponse); i { case 0: return &v.state @@ -5873,7 +5873,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[11].Exporter = func(v any, i int) any { switch v := v.(*AssumeRoleRequest); i { case 0: return &v.state @@ -5885,7 +5885,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[12].Exporter = func(v any, i int) any { switch v := v.(*GetRequestableRolesRequest); i { case 0: return &v.state @@ -5897,7 +5897,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[13].Exporter = func(v any, i int) any { switch v := v.(*GetRequestableRolesResponse); i { case 0: return &v.state @@ -5909,7 +5909,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[14].Exporter = func(v any, i int) any { switch v := v.(*ReviewAccessRequestRequest); i { case 0: return &v.state @@ -5921,7 +5921,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[15].Exporter = func(v any, i int) any { switch v := v.(*ReviewAccessRequestResponse); i { case 0: return &v.state @@ -5933,7 +5933,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[16].Exporter = func(v any, i int) any { switch v := v.(*PromoteAccessRequestRequest); i { case 0: return &v.state @@ -5945,7 +5945,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[17].Exporter = func(v any, i int) any { switch v := v.(*PromoteAccessRequestResponse); i { case 0: return &v.state @@ -5957,7 +5957,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[18].Exporter = func(v any, i int) any { switch v := v.(*GetSuggestedAccessListsRequest); i { case 0: return &v.state @@ -5969,7 +5969,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[19].Exporter = func(v any, i int) any { switch v := v.(*GetSuggestedAccessListsResponse); i { case 0: return &v.state @@ -5981,7 +5981,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[20].Exporter = func(v any, i int) any { switch v := v.(*CredentialInfo); i { case 0: return &v.state @@ -5993,7 +5993,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[21].Exporter = func(v any, i int) any { switch v := v.(*LoginPasswordlessResponse); i { case 0: return &v.state @@ -6005,7 +6005,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[22].Exporter = func(v any, i int) any { switch v := v.(*LoginPasswordlessRequest); i { case 0: return &v.state @@ -6017,7 +6017,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[23].Exporter = func(v any, i int) any { switch v := v.(*FileTransferRequest); i { case 0: return &v.state @@ -6029,7 +6029,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[24].Exporter = func(v any, i int) any { switch v := v.(*FileTransferProgress); i { case 0: return &v.state @@ -6041,7 +6041,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[25].Exporter = func(v any, i int) any { switch v := v.(*LoginRequest); i { case 0: return &v.state @@ -6053,7 +6053,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[26].Exporter = func(v any, i int) any { switch v := v.(*AddClusterRequest); i { case 0: return &v.state @@ -6065,7 +6065,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[27].Exporter = func(v any, i int) any { switch v := v.(*ListClustersRequest); i { case 0: return &v.state @@ -6077,7 +6077,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[28].Exporter = func(v any, i int) any { switch v := v.(*ListClustersResponse); i { case 0: return &v.state @@ -6089,7 +6089,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[29].Exporter = func(v any, i int) any { switch v := v.(*GetDatabasesRequest); i { case 0: return &v.state @@ -6101,7 +6101,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[30].Exporter = func(v any, i int) any { switch v := v.(*ListLeafClustersRequest); i { case 0: return &v.state @@ -6113,7 +6113,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[31].Exporter = func(v any, i int) any { switch v := v.(*ListDatabaseUsersRequest); i { case 0: return &v.state @@ -6125,7 +6125,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[32].Exporter = func(v any, i int) any { switch v := v.(*ListDatabaseUsersResponse); i { case 0: return &v.state @@ -6137,7 +6137,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[33].Exporter = func(v any, i int) any { switch v := v.(*CreateGatewayRequest); i { case 0: return &v.state @@ -6149,7 +6149,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[34].Exporter = func(v any, i int) any { switch v := v.(*ListGatewaysRequest); i { case 0: return &v.state @@ -6161,7 +6161,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[35].Exporter = func(v any, i int) any { switch v := v.(*ListGatewaysResponse); i { case 0: return &v.state @@ -6173,7 +6173,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[36].Exporter = func(v any, i int) any { switch v := v.(*RemoveGatewayRequest); i { case 0: return &v.state @@ -6185,7 +6185,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[37].Exporter = func(v any, i int) any { switch v := v.(*SetGatewayTargetSubresourceNameRequest); i { case 0: return &v.state @@ -6197,7 +6197,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[38].Exporter = func(v any, i int) any { switch v := v.(*SetGatewayLocalPortRequest); i { case 0: return &v.state @@ -6209,7 +6209,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[39].Exporter = func(v any, i int) any { switch v := v.(*GetServersRequest); i { case 0: return &v.state @@ -6221,7 +6221,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[40].Exporter = func(v any, i int) any { switch v := v.(*GetServersResponse); i { case 0: return &v.state @@ -6233,7 +6233,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[41].Exporter = func(v any, i int) any { switch v := v.(*GetDatabasesResponse); i { case 0: return &v.state @@ -6245,7 +6245,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[42].Exporter = func(v any, i int) any { switch v := v.(*GetKubesRequest); i { case 0: return &v.state @@ -6257,7 +6257,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[43].Exporter = func(v any, i int) any { switch v := v.(*GetKubesResponse); i { case 0: return &v.state @@ -6269,7 +6269,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[44].Exporter = func(v any, i int) any { switch v := v.(*GetAppsRequest); i { case 0: return &v.state @@ -6281,7 +6281,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[45].Exporter = func(v any, i int) any { switch v := v.(*GetAppsResponse); i { case 0: return &v.state @@ -6293,7 +6293,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[46].Exporter = func(v any, i int) any { switch v := v.(*GetAuthSettingsRequest); i { case 0: return &v.state @@ -6305,7 +6305,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[47].Exporter = func(v any, i int) any { switch v := v.(*UpdateTshdEventsServerAddressRequest); i { case 0: return &v.state @@ -6317,7 +6317,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[48].Exporter = func(v any, i int) any { switch v := v.(*UpdateTshdEventsServerAddressResponse); i { case 0: return &v.state @@ -6329,7 +6329,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[49].Exporter = func(v any, i int) any { switch v := v.(*UpdateHeadlessAuthenticationStateRequest); i { case 0: return &v.state @@ -6341,7 +6341,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[50].Exporter = func(v any, i int) any { switch v := v.(*UpdateHeadlessAuthenticationStateResponse); i { case 0: return &v.state @@ -6353,7 +6353,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[51].Exporter = func(v any, i int) any { switch v := v.(*CreateConnectMyComputerRoleRequest); i { case 0: return &v.state @@ -6365,7 +6365,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[52].Exporter = func(v any, i int) any { switch v := v.(*CreateConnectMyComputerRoleResponse); i { case 0: return &v.state @@ -6377,7 +6377,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[53].Exporter = func(v any, i int) any { switch v := v.(*CreateConnectMyComputerNodeTokenRequest); i { case 0: return &v.state @@ -6389,7 +6389,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[54].Exporter = func(v any, i int) any { switch v := v.(*CreateConnectMyComputerNodeTokenResponse); i { case 0: return &v.state @@ -6401,7 +6401,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[55].Exporter = func(v any, i int) any { switch v := v.(*WaitForConnectMyComputerNodeJoinRequest); i { case 0: return &v.state @@ -6413,7 +6413,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[56].Exporter = func(v any, i int) any { switch v := v.(*WaitForConnectMyComputerNodeJoinResponse); i { case 0: return &v.state @@ -6425,7 +6425,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[57].Exporter = func(v any, i int) any { switch v := v.(*DeleteConnectMyComputerNodeRequest); i { case 0: return &v.state @@ -6437,7 +6437,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[58].Exporter = func(v any, i int) any { switch v := v.(*DeleteConnectMyComputerNodeResponse); i { case 0: return &v.state @@ -6449,7 +6449,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[59].Exporter = func(v any, i int) any { switch v := v.(*GetConnectMyComputerNodeNameRequest); i { case 0: return &v.state @@ -6461,7 +6461,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[60].Exporter = func(v any, i int) any { switch v := v.(*GetConnectMyComputerNodeNameResponse); i { case 0: return &v.state @@ -6473,7 +6473,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[61].Exporter = func(v any, i int) any { switch v := v.(*ListUnifiedResourcesRequest); i { case 0: return &v.state @@ -6485,7 +6485,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[62].Exporter = func(v any, i int) any { switch v := v.(*SortBy); i { case 0: return &v.state @@ -6497,7 +6497,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[63].Exporter = func(v any, i int) any { switch v := v.(*ListUnifiedResourcesResponse); i { case 0: return &v.state @@ -6509,7 +6509,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[64].Exporter = func(v any, i int) any { switch v := v.(*PaginatedResource); i { case 0: return &v.state @@ -6521,7 +6521,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[65].Exporter = func(v any, i int) any { switch v := v.(*GetUserPreferencesRequest); i { case 0: return &v.state @@ -6533,7 +6533,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[66].Exporter = func(v any, i int) any { switch v := v.(*GetUserPreferencesResponse); i { case 0: return &v.state @@ -6545,7 +6545,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[67].Exporter = func(v any, i int) any { switch v := v.(*UpdateUserPreferencesRequest); i { case 0: return &v.state @@ -6557,7 +6557,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[68].Exporter = func(v any, i int) any { switch v := v.(*UpdateUserPreferencesResponse); i { case 0: return &v.state @@ -6569,7 +6569,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[69].Exporter = func(v any, i int) any { switch v := v.(*UserPreferences); i { case 0: return &v.state @@ -6581,7 +6581,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[70].Exporter = func(v any, i int) any { switch v := v.(*LoginPasswordlessRequest_LoginPasswordlessRequestInit); i { case 0: return &v.state @@ -6593,7 +6593,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[71].Exporter = func(v any, i int) any { switch v := v.(*LoginPasswordlessRequest_LoginPasswordlessPINResponse); i { case 0: return &v.state @@ -6605,7 +6605,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[72].Exporter = func(v any, i int) any { switch v := v.(*LoginPasswordlessRequest_LoginPasswordlessCredentialResponse); i { case 0: return &v.state @@ -6617,7 +6617,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[73].Exporter = func(v any, i int) any { switch v := v.(*LoginRequest_LocalParams); i { case 0: return &v.state @@ -6629,7 +6629,7 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_service_proto_msgTypes[74].Exporter = func(v any, i int) any { switch v := v.(*LoginRequest_SsoParams); i { case 0: return &v.state @@ -6642,16 +6642,16 @@ func file_teleport_lib_teleterm_v1_service_proto_init() { } } } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[22].OneofWrappers = []interface{}{ + file_teleport_lib_teleterm_v1_service_proto_msgTypes[22].OneofWrappers = []any{ (*LoginPasswordlessRequest_Init)(nil), (*LoginPasswordlessRequest_Pin)(nil), (*LoginPasswordlessRequest_Credential)(nil), } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[25].OneofWrappers = []interface{}{ + file_teleport_lib_teleterm_v1_service_proto_msgTypes[25].OneofWrappers = []any{ (*LoginRequest_Local)(nil), (*LoginRequest_Sso)(nil), } - file_teleport_lib_teleterm_v1_service_proto_msgTypes[64].OneofWrappers = []interface{}{ + file_teleport_lib_teleterm_v1_service_proto_msgTypes[64].OneofWrappers = []any{ (*PaginatedResource_Database)(nil), (*PaginatedResource_Server)(nil), (*PaginatedResource_Kube)(nil), diff --git a/gen/proto/go/teleport/lib/teleterm/v1/tshd_events_service.pb.go b/gen/proto/go/teleport/lib/teleterm/v1/tshd_events_service.pb.go index 75a7598d6bd0f..c1c80b0f355a7 100644 --- a/gen/proto/go/teleport/lib/teleterm/v1/tshd_events_service.pb.go +++ b/gen/proto/go/teleport/lib/teleterm/v1/tshd_events_service.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/lib/teleterm/v1/tshd_events_service.proto @@ -730,7 +730,7 @@ func file_teleport_lib_teleterm_v1_tshd_events_service_proto_rawDescGZIP() []byt } var file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes = make([]protoimpl.MessageInfo, 10) -var file_teleport_lib_teleterm_v1_tshd_events_service_proto_goTypes = []interface{}{ +var file_teleport_lib_teleterm_v1_tshd_events_service_proto_goTypes = []any{ (*ReloginRequest)(nil), // 0: teleport.lib.teleterm.v1.ReloginRequest (*GatewayCertExpired)(nil), // 1: teleport.lib.teleterm.v1.GatewayCertExpired (*ReloginResponse)(nil), // 2: teleport.lib.teleterm.v1.ReloginResponse @@ -766,7 +766,7 @@ func file_teleport_lib_teleterm_v1_tshd_events_service_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*ReloginRequest); i { case 0: return &v.state @@ -778,7 +778,7 @@ func file_teleport_lib_teleterm_v1_tshd_events_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*GatewayCertExpired); i { case 0: return &v.state @@ -790,7 +790,7 @@ func file_teleport_lib_teleterm_v1_tshd_events_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[2].Exporter = func(v any, i int) any { switch v := v.(*ReloginResponse); i { case 0: return &v.state @@ -802,7 +802,7 @@ func file_teleport_lib_teleterm_v1_tshd_events_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[3].Exporter = func(v any, i int) any { switch v := v.(*SendNotificationRequest); i { case 0: return &v.state @@ -814,7 +814,7 @@ func file_teleport_lib_teleterm_v1_tshd_events_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[4].Exporter = func(v any, i int) any { switch v := v.(*CannotProxyGatewayConnection); i { case 0: return &v.state @@ -826,7 +826,7 @@ func file_teleport_lib_teleterm_v1_tshd_events_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[5].Exporter = func(v any, i int) any { switch v := v.(*SendNotificationResponse); i { case 0: return &v.state @@ -838,7 +838,7 @@ func file_teleport_lib_teleterm_v1_tshd_events_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[6].Exporter = func(v any, i int) any { switch v := v.(*SendPendingHeadlessAuthenticationRequest); i { case 0: return &v.state @@ -850,7 +850,7 @@ func file_teleport_lib_teleterm_v1_tshd_events_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[7].Exporter = func(v any, i int) any { switch v := v.(*SendPendingHeadlessAuthenticationResponse); i { case 0: return &v.state @@ -862,7 +862,7 @@ func file_teleport_lib_teleterm_v1_tshd_events_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[8].Exporter = func(v any, i int) any { switch v := v.(*PromptMFARequest); i { case 0: return &v.state @@ -874,7 +874,7 @@ func file_teleport_lib_teleterm_v1_tshd_events_service_proto_init() { return nil } } - file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[9].Exporter = func(v any, i int) any { switch v := v.(*PromptMFAResponse); i { case 0: return &v.state @@ -887,10 +887,10 @@ func file_teleport_lib_teleterm_v1_tshd_events_service_proto_init() { } } } - file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[0].OneofWrappers = []interface{}{ + file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[0].OneofWrappers = []any{ (*ReloginRequest_GatewayCertExpired)(nil), } - file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[3].OneofWrappers = []interface{}{ + file_teleport_lib_teleterm_v1_tshd_events_service_proto_msgTypes[3].OneofWrappers = []any{ (*SendNotificationRequest_CannotProxyGatewayConnection)(nil), } type x struct{} diff --git a/gen/proto/go/teleport/lib/teleterm/v1/usage_events.pb.go b/gen/proto/go/teleport/lib/teleterm/v1/usage_events.pb.go index aac8bdf9ee58b..a31b2d9bc1375 100644 --- a/gen/proto/go/teleport/lib/teleterm/v1/usage_events.pb.go +++ b/gen/proto/go/teleport/lib/teleterm/v1/usage_events.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/lib/teleterm/v1/usage_events.proto @@ -133,7 +133,7 @@ func file_teleport_lib_teleterm_v1_usage_events_proto_rawDescGZIP() []byte { } var file_teleport_lib_teleterm_v1_usage_events_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_teleport_lib_teleterm_v1_usage_events_proto_goTypes = []interface{}{ +var file_teleport_lib_teleterm_v1_usage_events_proto_goTypes = []any{ (*ReportUsageEventRequest)(nil), // 0: teleport.lib.teleterm.v1.ReportUsageEventRequest (*v1alpha.SubmitConnectEventRequest)(nil), // 1: prehog.v1alpha.SubmitConnectEventRequest } @@ -152,7 +152,7 @@ func file_teleport_lib_teleterm_v1_usage_events_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_lib_teleterm_v1_usage_events_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_teleterm_v1_usage_events_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*ReportUsageEventRequest); i { case 0: return &v.state diff --git a/gen/proto/ts/prehog/v1alpha/teleport_pb.ts b/gen/proto/ts/prehog/v1alpha/teleport_pb.ts index c74dcf36f85b0..40aca1e1e4638 100644 --- a/gen/proto/ts/prehog/v1alpha/teleport_pb.ts +++ b/gen/proto/ts/prehog/v1alpha/teleport_pb.ts @@ -2536,6 +2536,16 @@ export interface SubmitEventRequest { * @generated from protobuf field: google.protobuf.Timestamp timestamp = 2; */ timestamp?: Timestamp; + /** + * teleport_version is the version of the Teleport auth server that submitted + * the event, without the "v" prefix. + * For example: 16.4.7 + * + * PostHog property: tp.teleport_version + * + * @generated from protobuf field: string teleport_version = 95; + */ + teleportVersion: string; /** * @generated from protobuf oneof: event */ @@ -9610,6 +9620,7 @@ class SubmitEventRequest$Type extends MessageType { super("prehog.v1alpha.SubmitEventRequest", [ { no: 1, name: "cluster_name", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, { no: 2, name: "timestamp", kind: "message", T: () => Timestamp }, + { no: 95, name: "teleport_version", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, { no: 3, name: "user_login", kind: "message", oneof: "event", T: () => UserLoginEvent }, { no: 4, name: "sso_create", kind: "message", oneof: "event", T: () => SSOCreateEvent }, { no: 5, name: "resource_create", kind: "message", oneof: "event", T: () => ResourceCreateEvent }, @@ -9704,6 +9715,7 @@ class SubmitEventRequest$Type extends MessageType { create(value?: PartialMessage): SubmitEventRequest { const message = globalThis.Object.create((this.messagePrototype!)); message.clusterName = ""; + message.teleportVersion = ""; message.event = { oneofKind: undefined }; if (value !== undefined) reflectionMergePartial(this, message, value); @@ -9720,6 +9732,9 @@ class SubmitEventRequest$Type extends MessageType { case /* google.protobuf.Timestamp timestamp */ 2: message.timestamp = Timestamp.internalBinaryRead(reader, reader.uint32(), options, message.timestamp); break; + case /* string teleport_version */ 95: + message.teleportVersion = reader.string(); + break; case /* prehog.v1alpha.UserLoginEvent user_login */ 3: message.event = { oneofKind: "userLogin", @@ -10272,6 +10287,9 @@ class SubmitEventRequest$Type extends MessageType { /* google.protobuf.Timestamp timestamp = 2; */ if (message.timestamp) Timestamp.internalBinaryWrite(message.timestamp, writer.tag(2, WireType.LengthDelimited).fork(), options).join(); + /* string teleport_version = 95; */ + if (message.teleportVersion !== "") + writer.tag(95, WireType.LengthDelimited).string(message.teleportVersion); /* prehog.v1alpha.UserLoginEvent user_login = 3; */ if (message.event.oneofKind === "userLogin") UserLoginEvent.internalBinaryWrite(message.event.userLogin, writer.tag(3, WireType.LengthDelimited).fork(), options).join(); diff --git a/go.mod b/go.mod index 1ce7842f297c1..6c6915404c164 100644 --- a/go.mod +++ b/go.mod @@ -2,7 +2,7 @@ module github.com/gravitational/teleport go 1.21 -toolchain go1.22.9 +toolchain go1.22.10 require ( cloud.google.com/go/cloudsqlconn v1.9.0 @@ -40,7 +40,7 @@ require ( github.com/ThalesIgnite/crypto11 v1.2.5 github.com/alecthomas/kingpin/v2 v2.4.0 // replaced github.com/alicebob/miniredis/v2 v2.31.1 - github.com/andybalholm/brotli v1.0.6 + github.com/andybalholm/brotli v1.1.0 github.com/aquasecurity/libbpfgo v0.5.1-libbpf-1.2 github.com/armon/go-radix v1.0.0 github.com/aws/aws-sdk-go v1.51.6 @@ -152,6 +152,7 @@ require ( github.com/okta/okta-sdk-golang/v2 v2.20.0 github.com/opencontainers/go-digest v1.0.0 github.com/opensearch-project/opensearch-go/v2 v2.3.0 + github.com/parquet-go/parquet-go v0.23.0 github.com/pavlo-v-chernykh/keystore-go/v4 v4.5.0 github.com/pelletier/go-toml v1.9.5 github.com/pkg/sftp v1.13.6 @@ -165,7 +166,6 @@ require ( github.com/sashabaranov/go-openai v1.17.10 github.com/schollz/progressbar/v3 v3.14.1 github.com/scim2/filter-parser/v2 v2.2.0 - github.com/segmentio/parquet-go v0.0.0-20230622230624-510764ae9e80 github.com/shirou/gopsutil/v4 v4.24.6 github.com/sigstore/cosign/v2 v2.2.4 github.com/sigstore/sigstore v1.8.3 @@ -207,7 +207,7 @@ require ( google.golang.org/genproto/googleapis/rpc v0.0.0-20240429193739-8cf5692501f6 google.golang.org/grpc v1.63.2 google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.3.0 - google.golang.org/protobuf v1.34.0 + google.golang.org/protobuf v1.34.2 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c gopkg.in/dnaeon/go-vcr.v3 v3.1.2 gopkg.in/ini.v1 v1.67.0 @@ -400,7 +400,7 @@ require ( github.com/joshlf/testutil v0.0.0-20170608050642-b5d8aa79d93d // indirect github.com/kelseyhightower/envconfig v1.4.0 // indirect github.com/klauspost/asmfmt v1.3.2 // indirect - github.com/klauspost/compress v1.17.4 // indirect + github.com/klauspost/compress v1.17.9 // indirect github.com/klauspost/cpuid/v2 v2.2.6 // indirect github.com/kr/fs v0.1.0 // indirect github.com/kr/pretty v0.3.1 // indirect @@ -453,7 +453,7 @@ require ( github.com/pelletier/go-toml/v2 v2.1.0 // indirect github.com/peterbourgon/diskv v2.0.1+incompatible // indirect github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 // indirect - github.com/pierrec/lz4/v4 v4.1.18 // indirect + github.com/pierrec/lz4/v4 v4.1.21 // indirect github.com/pingcap/errors v0.11.5-0.20201126102027-b0a155152ca3 // indirect github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect github.com/pkg/errors v0.9.1 // indirect @@ -462,7 +462,7 @@ require ( github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c // indirect github.com/pquerna/cachecontrol v0.1.0 // indirect github.com/prometheus/procfs v0.12.0 // indirect - github.com/rivo/uniseg v0.4.4 // indirect + github.com/rivo/uniseg v0.4.7 // indirect github.com/rogpeppe/go-internal v1.12.0 // indirect github.com/rs/zerolog v1.28.0 // indirect github.com/rubenv/sql-migrate v1.5.2 // indirect @@ -474,7 +474,7 @@ require ( github.com/sassoftware/relic v7.2.1+incompatible // indirect github.com/secure-systems-lab/go-securesystemslib v0.8.0 // indirect github.com/segmentio/asm v1.2.0 // indirect - github.com/segmentio/encoding v0.3.5 // indirect + github.com/segmentio/encoding v0.4.0 // indirect github.com/shabbyrobe/gocovmerge v0.0.0-20190829150210-3e036491d500 // indirect github.com/shibumi/go-pathspec v1.3.0 // indirect github.com/shoenig/go-m1cpu v0.1.6 // indirect diff --git a/go.sum b/go.sum index ed5167aea659f..bf6aba1354e89 100644 --- a/go.sum +++ b/go.sum @@ -206,8 +206,8 @@ github.com/alicebob/miniredis/v2 v2.31.1 h1:7XAt0uUg3DtwEKW5ZAGa+K7FZV2DdKQo5K/6 github.com/alicebob/miniredis/v2 v2.31.1/go.mod h1:UB/T2Uztp7MlFSDakaX1sTXUv5CASoprx0wulRT6HBg= github.com/aliyun/credentials-go v1.3.1 h1:uq/0v7kWrxmoLGpqjx7vtQ/s03f0zR//0br/xWDTE28= github.com/aliyun/credentials-go v1.3.1/go.mod h1:8jKYhQuDawt8x2+fusqa1Y6mPxemTsBEN04dgcAcYz0= -github.com/andybalholm/brotli v1.0.6 h1:Yf9fFpf49Zrxb9NlQaluyE92/+X7UVHlhMNJN2sxfOI= -github.com/andybalholm/brotli v1.0.6/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M= +github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/apache/arrow/go/v12 v12.0.1 h1:JsR2+hzYYjgSUkBSaahpqCetqZMr76djX80fF/DiJbg= github.com/apache/arrow/go/v12 v12.0.1/go.mod h1:weuTY7JvTG/HDPtMQxEUp7pU73vkLWMLpY67QwZ/WWw= @@ -1066,8 +1066,8 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o github.com/klauspost/asmfmt v1.3.2 h1:4Ri7ox3EwapiOjCki+hw14RyKk201CN4rzyCJRFLpK4= github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= -github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= +github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/klauspost/cpuid/v2 v2.2.6 h1:ndNyv040zDGIDh8thGkXYjnFtiN02M1PVVF+JE/48xc= github.com/klauspost/cpuid/v2 v2.2.6/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= @@ -1281,6 +1281,8 @@ github.com/opensearch-project/opensearch-go/v2 v2.3.0 h1:nQIEMr+A92CkhHrZgUhcfsr github.com/opensearch-project/opensearch-go/v2 v2.3.0/go.mod h1:8LDr9FCgUTVoT+5ESjc2+iaZuldqE+23Iq0r1XeNue8= github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= +github.com/parquet-go/parquet-go v0.23.0 h1:dyEU5oiHCtbASyItMCD2tXtT2nPmoPbKpqf0+nnGrmk= +github.com/parquet-go/parquet-go v0.23.0/go.mod h1:MnwbUcFHU6uBYMymKAlPPAw9yh3kE1wWl6Gl1uLdkNk= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/name v1.0.1 h1:9lnXOHeqeHHnWLbKfH6X98+4+ETVqFqxN09UXSjcMb0= github.com/pascaldekloe/name v1.0.1/go.mod h1:Z//MfYJnH4jVpQ9wkclwu2I2MkHmXTlT9wR5UZScttM= @@ -1303,8 +1305,8 @@ github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ= +github.com/pierrec/lz4/v4 v4.1.21/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pingcap/check v0.0.0-20190102082844-67f458068fc8 h1:USx2/E1bX46VG32FIw034Au6seQ2fY9NEILmNh/UlQg= github.com/pingcap/check v0.0.0-20190102082844-67f458068fc8/go.mod h1:B1+S9LNcuMyLH/4HMTViQOJevkGiik3wW2AN9zb2fNQ= github.com/pingcap/errors v0.11.0/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= @@ -1366,8 +1368,9 @@ github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqn github.com/remyoudompheng/bigfft v0.0.0-20190728182440-6a916e37a237/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= @@ -1418,15 +1421,12 @@ github.com/scim2/filter-parser/v2 v2.2.0/go.mod h1:jWnkDToqX/Y0ugz0P5VvpVEUKcWcy github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/secure-systems-lab/go-securesystemslib v0.8.0 h1:mr5An6X45Kb2nddcFlbmfHkLguCE9laoZCUzEEpIZXA= github.com/secure-systems-lab/go-securesystemslib v0.8.0/go.mod h1:UH2VZVuJfCYR8WgMlCU1uFsOUU+KeyrTWcSS73NBOzU= -github.com/segmentio/asm v1.1.3/go.mod h1:Ld3L4ZXGNcSLRg4JBsZ3//1+f/TjYl0Mzen/DQy1EJg= github.com/segmentio/asm v1.2.0 h1:9BQrFxC+YOHJlTlHGkTrFWf59nbL3XnCoFLTwDCI7ys= github.com/segmentio/asm v1.2.0/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs= -github.com/segmentio/encoding v0.3.5 h1:UZEiaZ55nlXGDL92scoVuw00RmiRCazIEmvPSbSvt8Y= -github.com/segmentio/encoding v0.3.5/go.mod h1:n0JeuIqEQrQoPDGsjo8UNd1iA0U8d8+oHAA4E3G3OxM= +github.com/segmentio/encoding v0.4.0 h1:MEBYvRqiUB2nfR2criEXWqwdY6HJOUrCn5hboVOVmy8= +github.com/segmentio/encoding v0.4.0/go.mod h1:/d03Cd8PoaDeceuhUUUQWjU0KhWjrmYrWPgtJHYZSnI= github.com/segmentio/ksuid v1.0.4 h1:sBo2BdShXjmcugAMwjugoGUdUV0pcxY5mW4xKRn3v4c= github.com/segmentio/ksuid v1.0.4/go.mod h1:/XUiZBD3kVx5SmUOl55voK5yeAbBNNIed+2O73XgrPE= -github.com/segmentio/parquet-go v0.0.0-20230622230624-510764ae9e80 h1:d09YiLivaPHjCyYDGLI5BQbl+carOqUg/U0noDQQBmo= -github.com/segmentio/parquet-go v0.0.0-20230622230624-510764ae9e80/go.mod h1:+J0xQnJjm8DuQUHBO7t57EnmPbstT6+b45+p3DC9k1Q= github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= github.com/shabbyrobe/gocovmerge v0.0.0-20180507124511-f6ea450bfb63/go.mod h1:n+VKSARF5y/tS9XFSP7vWDfS+GUC5vs/YT7M5XDTUEM= @@ -1836,7 +1836,6 @@ golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211110154304-99a53858aa08/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220408201424-a24fb2fb8a0f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1980,8 +1979,8 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.34.0 h1:Qo/qEd2RZPCf2nKuorzksSknv0d3ERwp1vFG38gSmH4= -google.golang.org/protobuf v1.34.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk= gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk= diff --git a/integration/conntest/database_test.go b/integration/conntest/database_test.go index 4455cdb79f26f..15cecef794cac 100644 --- a/integration/conntest/database_test.go +++ b/integration/conntest/database_test.go @@ -131,12 +131,12 @@ func TestDiagnoseConnectionForPostgresDatabases(t *testing.T) { { Type: types.ConnectionDiagnosticTrace_RBAC_DATABASE, Status: types.ConnectionDiagnosticTrace_SUCCESS, - Details: "A Database Agent is available to proxy the connection to the Database.", + Details: "A Teleport Database Service is available to proxy the connection to the Database.", }, { Type: types.ConnectionDiagnosticTrace_CONNECTIVITY, Status: types.ConnectionDiagnosticTrace_SUCCESS, - Details: "Database is accessible from the Database Agent.", + Details: "Database is accessible from the Teleport Database Service.", }, { Type: types.ConnectionDiagnosticTrace_RBAC_DATABASE_LOGIN, @@ -172,8 +172,8 @@ func TestDiagnoseConnectionForPostgresDatabases(t *testing.T) { Status: types.ConnectionDiagnosticTrace_FAILED, Details: "Database not found. " + "Ensure your role grants access by adding it to the 'db_labels' property. " + - "This can also happen when you don't have a Database Agent proxying the database - " + - "you can fix that by adding the database labels to the 'db_service.resources.labels' in 'teleport.yaml' file of the database agent.", + "This can also happen when you don't have a Teleport Database Service proxying the database - " + + "you can fix that by adding the database labels to the 'db_service.resources.labels' in 'teleport.yaml' file of the Database Service.", }, }, }, diff --git a/integration/helpers/helpers.go b/integration/helpers/helpers.go index 63525f86b319f..2b40ea3b46762 100644 --- a/integration/helpers/helpers.go +++ b/integration/helpers/helpers.go @@ -129,10 +129,7 @@ func ExternalSSHCommand(o CommandOptions) (*exec.Cmd, error) { } // Create an exec.Command and tell it where to find the SSH agent. - cmd, err := exec.Command(sshpath, execArgs...), nil - if err != nil { - return nil, trace.Wrap(err) - } + cmd := exec.Command(sshpath, execArgs...) cmd.Env = []string{fmt.Sprintf("SSH_AUTH_SOCK=%v", o.SocketPath)} return cmd, nil diff --git a/integration/helpers/instance.go b/integration/helpers/instance.go index 4a28d91b0f560..fb4fdc3947f09 100644 --- a/integration/helpers/instance.go +++ b/integration/helpers/instance.go @@ -46,7 +46,9 @@ import ( "github.com/gravitational/teleport/api/breaker" clientproto "github.com/gravitational/teleport/api/client/proto" + apidefaults "github.com/gravitational/teleport/api/defaults" "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/api/utils/retryutils" "github.com/gravitational/teleport/lib/auth/authclient" "github.com/gravitational/teleport/lib/auth/keygen" "github.com/gravitational/teleport/lib/auth/state" @@ -1737,3 +1739,51 @@ func (i *TeleInstance) StopAll() error { i.Log.Infof("Stopped all teleport services for site %q", i.Secrets.SiteName) return trace.NewAggregate(errors...) } + +// WaitForNodeCount waits for a certain number of nodes in the provided cluster +// to be visible to the Proxy. This should be called prior to any client dialing +// of nodes to be sure that the node is registered and routable. +func (i *TeleInstance) WaitForNodeCount(ctx context.Context, cluster string, count int) error { + const ( + deadline = time.Second * 30 + iterWaitTime = time.Second + ) + + err := retryutils.RetryStaticFor(deadline, iterWaitTime, func() error { + site, err := i.Tunnel.GetSite(cluster) + if err != nil { + return trace.Wrap(err) + } + + // Validate that the site cache contains the expected count. + accessPoint, err := site.CachingAccessPoint() + if err != nil { + return trace.Wrap(err) + } + + nodes, err := accessPoint.GetNodes(ctx, apidefaults.Namespace) + if err != nil { + return trace.Wrap(err) + } + if len(nodes) != count { + return trace.BadParameter("cache contained %v nodes, but wanted to find %v nodes", len(nodes), count) + } + + // Validate that the site watcher contains the expected count. + watcher, err := site.NodeWatcher() + if err != nil { + return trace.Wrap(err) + } + + if watcher.NodeCount() != count { + return trace.BadParameter("node watcher contained %v nodes, but wanted to find %v nodes", watcher.NodeCount(), count) + } + + return nil + }) + if err != nil { + return trace.Wrap(err) + } + + return nil +} diff --git a/integration/helpers/trustedclusters.go b/integration/helpers/trustedclusters.go index a883fb8635a9e..1b3f43b61507c 100644 --- a/integration/helpers/trustedclusters.go +++ b/integration/helpers/trustedclusters.go @@ -30,9 +30,7 @@ import ( "github.com/stretchr/testify/require" "github.com/gravitational/teleport" - "github.com/gravitational/teleport/api/defaults" "github.com/gravitational/teleport/api/types" - "github.com/gravitational/teleport/api/utils/retryutils" "github.com/gravitational/teleport/lib/auth" "github.com/gravitational/teleport/lib/reversetunnelclient" ) @@ -112,37 +110,6 @@ func WaitForClusters(tun reversetunnelclient.Server, expected int) func() bool { } } -// WaitForNodeCount waits for a certain number of nodes to show up in the remote site. -func WaitForNodeCount(ctx context.Context, t *TeleInstance, clusterName string, count int) error { - const ( - deadline = time.Second * 30 - iterWaitTime = time.Second - ) - - err := retryutils.RetryStaticFor(deadline, iterWaitTime, func() error { - remoteSite, err := t.Tunnel.GetSite(clusterName) - if err != nil { - return trace.Wrap(err) - } - accessPoint, err := remoteSite.CachingAccessPoint() - if err != nil { - return trace.Wrap(err) - } - nodes, err := accessPoint.GetNodes(ctx, defaults.Namespace) - if err != nil { - return trace.Wrap(err) - } - if len(nodes) == count { - return nil - } - return trace.BadParameter("found %v nodes, but wanted to find %v nodes", len(nodes), count) - }) - if err != nil { - return trace.Wrap(err) - } - return nil -} - // WaitForActiveTunnelConnections waits for remote cluster to report a minimum number of active connections func WaitForActiveTunnelConnections(t *testing.T, tunnel reversetunnelclient.Server, clusterName string, expectedCount int) { require.EventuallyWithT(t, func(t *assert.CollectT) { diff --git a/integration/hostuser_test.go b/integration/hostuser_test.go index fca40cc9f8481..66e5dee2114c9 100644 --- a/integration/hostuser_test.go +++ b/integration/hostuser_test.go @@ -499,6 +499,28 @@ func TestRootHostUsers(t *testing.T) { require.NoError(t, err) require.False(t, hasExpirations) }) + + t.Run("Test migrate unmanaged user", func(t *testing.T) { + t.Cleanup(func() { cleanupUsersAndGroups([]string{testuser}, []string{types.TeleportKeepGroup}) }) + + users := srv.NewHostUsers(context.Background(), presence, "host_uuid") + _, err := host.UserAdd(testuser, nil, "", "", "") + require.NoError(t, err) + + closer, err := users.UpsertUser(testuser, services.HostUsersInfo{Mode: types.CreateHostUserMode_HOST_USER_MODE_KEEP, Groups: []string{types.TeleportKeepGroup}}) + require.NoError(t, err) + require.Nil(t, closer) + + u, err := user.Lookup(testuser) + require.NoError(t, err) + + gids, err := u.GroupIds() + require.NoError(t, err) + + keepGroup, err := user.LookupGroup(types.TeleportKeepGroup) + require.NoError(t, err) + require.Contains(t, gids, keepGroup.Gid) + }) } type hostUsersBackendWithExp struct { diff --git a/integration/integration_test.go b/integration/integration_test.go index a0bbcc3f74bc7..6557cdcf9b1b8 100644 --- a/integration/integration_test.go +++ b/integration/integration_test.go @@ -440,27 +440,9 @@ func testAuditOn(t *testing.T, suite *integrationTestSuite) { ctx := context.Background() - // wait 10 seconds for both nodes to show up, otherwise + // wait for both nodes to show up, otherwise // we'll have trouble connecting to the node below. - waitForNodes := func(site authclient.ClientI, count int) error { - tickCh := time.Tick(500 * time.Millisecond) - stopCh := time.After(10 * time.Second) - for { - select { - case <-tickCh: - nodesInSite, err := site.GetNodes(ctx, defaults.Namespace) - if err != nil && !trace.IsNotFound(err) { - return trace.Wrap(err) - } - if got, want := len(nodesInSite), count; got == want { - return nil - } - case <-stopCh: - return trace.BadParameter("waited 10s, did find %v nodes", count) - } - } - } - err = waitForNodes(site, 2) + err = teleport.WaitForNodeCount(ctx, helpers.Site, 2) require.NoError(t, err) // should have no sessions: @@ -855,8 +837,6 @@ func testUUIDBasedProxy(t *testing.T, suite *integrationTestSuite) { teleportSvr := suite.newTeleport(t, nil, true) defer teleportSvr.StopAll() - site := teleportSvr.GetSiteAPI(helpers.Site) - // addNode adds a node to the teleport instance, returning its uuid. // All nodes added this way have the same hostname. addNode := func() (string, error) { @@ -883,36 +863,11 @@ func testUUIDBasedProxy(t *testing.T, suite *integrationTestSuite) { uuid1, err := addNode() require.NoError(t, err) - uuid2, err := addNode() + _, err = addNode() require.NoError(t, err) - // wait up to 10 seconds for supplied node names to show up. - waitForNodes := func(site authclient.ClientI, nodes ...string) error { - tickCh := time.Tick(500 * time.Millisecond) - stopCh := time.After(10 * time.Second) - Outer: - for _, nodeName := range nodes { - for { - select { - case <-tickCh: - nodesInSite, err := site.GetNodes(ctx, defaults.Namespace) - if err != nil && !trace.IsNotFound(err) { - return trace.Wrap(err) - } - for _, node := range nodesInSite { - if node.GetName() == nodeName { - continue Outer - } - } - case <-stopCh: - return trace.BadParameter("waited 10s, did find node %s", nodeName) - } - } - } - return nil - } - - err = waitForNodes(site, uuid1, uuid2) + // wait for supplied node names to show up. + err = teleportSvr.WaitForNodeCount(ctx, helpers.Site, 3) require.NoError(t, err) // attempting to run a command by hostname should generate NodeIsAmbiguous error. @@ -2266,7 +2221,8 @@ func runDisconnectTest(t *testing.T, suite *integrationTestSuite, tc disconnectT tc.concurrentConns = 1 } - waitForNodesToRegister(t, teleport, helpers.Site) + err = teleport.WaitForNodeCount(ctx, helpers.Site, 1) + require.NoError(t, err) asyncErrors := make(chan error, 1) @@ -2285,7 +2241,11 @@ func runDisconnectTest(t *testing.T, suite *integrationTestSuite, tc disconnectT tc.clientConfigOpts(&cc) } cl, err := teleport.NewClient(cc) - require.NoError(t, err) + if err != nil { + asyncErrors <- err + return + } + cl.Stdout = person cl.Stdin = person @@ -3253,6 +3213,10 @@ func trustedClusters(t *testing.T, suite *integrationTestSuite, test trustedClus cmd := []string{"echo", "hello world"} + // Wait for nodes to be visible before attempting connections + err = main.WaitForNodeCount(ctx, clusterAux, 2) + require.NoError(t, err) + // Try and connect to a node in the Aux cluster from the Main cluster using // direct dialing. creds, err := helpers.GenerateUserCreds(helpers.UserCredsRequest{ @@ -3338,6 +3302,10 @@ func trustedClusters(t *testing.T, suite *integrationTestSuite, test trustedClus require.Eventually(t, helpers.WaitForClusters(main.Tunnel, 1), 10*time.Second, 1*time.Second, "Two clusters do not see each other: tunnels are not working.") + // Wait for nodes to be visible before attempting connections + err = main.WaitForNodeCount(ctx, clusterAux, 2) + require.NoError(t, err) + // connection and client should recover and work again output = &bytes.Buffer{} tc.Stdout = output @@ -3744,7 +3712,7 @@ func testTrustedTunnelNode(t *testing.T, suite *integrationTestSuite) { "Two clusters do not see each other: tunnels are not working.") // Wait for both nodes to show up before attempting to dial to them. - err = helpers.WaitForNodeCount(ctx, main, clusterAux, 2) + err = main.WaitForNodeCount(ctx, clusterAux, 2) require.NoError(t, err) cmd := []string{"echo", "hello world"} @@ -4140,7 +4108,8 @@ func testDiscovery(t *testing.T, suite *integrationTestSuite) { helpers.WaitForActiveTunnelConnections(t, main.Tunnel, "cluster-remote", 1) helpers.WaitForActiveTunnelConnections(t, secondProxy, "cluster-remote", 1) - waitForNodesToRegister(t, main, "cluster-remote") + err = main.WaitForNodeCount(ctx, "cluster-remote", 1) + require.NoError(t, err) // execute the connection via first proxy cfg := helpers.ClientConfig{ @@ -4191,7 +4160,8 @@ func testDiscovery(t *testing.T, suite *integrationTestSuite) { helpers.WaitForActiveTunnelConnections(t, main.Tunnel, "cluster-remote", 1) helpers.WaitForActiveTunnelConnections(t, secondProxy, "cluster-remote", 1) - waitForNodesToRegister(t, main, "cluster-remote") + err = main.WaitForNodeCount(ctx, "cluster-remote", 1) + require.NoError(t, err) // Requests going via main proxy should succeed. output, err = runCommand(t, main, []string{"echo", "hello world"}, cfg, 1) @@ -4971,11 +4941,8 @@ func testProxyHostKeyCheck(t *testing.T, suite *integrationTestSuite) { require.NoError(t, err) // Wait for the node to be visible before continuing. - require.EventuallyWithT(t, func(t *assert.CollectT) { - found, err := clt.GetNodes(context.Background(), defaults.Namespace) - assert.NoError(t, err) - assert.Len(t, found, 2) - }, 10*time.Second, 100*time.Millisecond) + err = instance.WaitForNodeCount(context.Background(), helpers.Site, 2) + require.NoError(t, err) _, err = runCommand(t, instance, []string{"echo hello"}, clientConfig, 1) @@ -6137,27 +6104,9 @@ func testList(t *testing.T, suite *integrationTestSuite) { clt := teleport.GetSiteAPI(helpers.Site) require.NotNil(t, clt) - // Wait 10 seconds for both nodes to show up to make sure they both have + // Wait for both nodes to show up to make sure they both have // registered themselves. - waitForNodes := func(clt authclient.ClientI, count int) error { - tickCh := time.Tick(500 * time.Millisecond) - stopCh := time.After(10 * time.Second) - for { - select { - case <-tickCh: - nodesInCluster, err := clt.GetNodes(ctx, defaults.Namespace) - if err != nil && !trace.IsNotFound(err) { - return trace.Wrap(err) - } - if got, want := len(nodesInCluster), count; got == want { - return nil - } - case <-stopCh: - return trace.BadParameter("waited 10s, did find %v nodes", count) - } - } - } - err = waitForNodes(clt, 2) + err = teleport.WaitForNodeCount(ctx, helpers.Site, 2) require.NoError(t, err) tests := []struct { @@ -6326,22 +6275,6 @@ func testCmdLabels(t *testing.T, suite *integrationTestSuite) { } } -func waitForNodesToRegister(t *testing.T, teleport *helpers.TeleInstance, site string) { - t.Helper() - require.EventuallyWithT(t, func(t *assert.CollectT) { - // once the tunnel is established we need to wait until we have a - // connection to the remote auth - site := teleport.GetSiteAPI(site) - if !assert.NotNil(t, site) { - return - } - // we need to wait until we know about the node because direct dial to - // unregistered servers is no longer supported - _, err := site.GetNode(context.Background(), defaults.Namespace, teleport.Config.HostUUID) - assert.NoError(t, err) - }, time.Second*30, 250*time.Millisecond) -} - // TestDataTransfer makes sure that a "session.data" event is emitted at the // end of a session that matches the amount of data that was transferred. func testDataTransfer(t *testing.T, suite *integrationTestSuite) { @@ -6355,6 +6288,9 @@ func testDataTransfer(t *testing.T, suite *integrationTestSuite) { main := suite.newTeleport(t, nil, true) defer main.StopAll() + err := main.WaitForNodeCount(context.Background(), helpers.Site, 1) + require.NoError(t, err) + // Create a client to the above Teleport cluster. clientConfig := helpers.ClientConfig{ Login: suite.Me.Username, @@ -6363,8 +6299,6 @@ func testDataTransfer(t *testing.T, suite *integrationTestSuite) { Port: helpers.Port(t, main.SSH), } - waitForNodesToRegister(t, main, helpers.Site) - // Write 1 MB to stdout. command := []string{"dd", "if=/dev/zero", "bs=1024", "count=1024"} output, err := runCommand(t, main, command, clientConfig, 1) @@ -7323,6 +7257,7 @@ func (s *integrationTestSuite) defaultServiceConfig() *servicecfg.Config { cfg.Log = s.Log cfg.CircuitBreakerConfig = breaker.NoopBreakerConfig() cfg.InstanceMetadataClient = imds.NewDisabledIMDSClient() + cfg.DebugService.Enabled = false return cfg } @@ -8141,7 +8076,8 @@ func testModeratedSFTP(t *testing.T, suite *integrationTestSuite) { _, err = authServer.CreateUser(ctx, moderatorUser) require.NoError(t, err) - waitForNodesToRegister(t, instance, helpers.Site) + err = instance.WaitForNodeCount(context.Background(), helpers.Site, 1) + require.NoError(t, err) // Start a shell so a moderated session is created peerClient, err := instance.NewClient(helpers.ClientConfig{ @@ -8399,7 +8335,8 @@ func testSFTP(t *testing.T, suite *integrationTestSuite) { teleport.StopAll() }) - waitForNodesToRegister(t, teleport, helpers.Site) + err := teleport.WaitForNodeCount(context.Background(), helpers.Site, 1) + require.NoError(t, err) teleportClient, err := teleport.NewClient(helpers.ClientConfig{ Login: suite.Me.Username, diff --git a/integration/kube_integration_test.go b/integration/kube_integration_test.go index bc6beb477b1eb..a6497441fecb7 100644 --- a/integration/kube_integration_test.go +++ b/integration/kube_integration_test.go @@ -760,7 +760,7 @@ func testKubeTrustedClustersClientCert(t *testing.T, suite *KubeSuite) { loop: for { select { - case event := <-main.UploadEventsC: + case event := <-aux.UploadEventsC: sessionID = event.SessionID break loop case <-timeoutC: @@ -769,7 +769,7 @@ loop: } // read back the entire session and verify that it matches the stated output - capturedStream, err := main.Process.GetAuthServer().GetSessionChunk(apidefaults.Namespace, session.ID(sessionID), 0, events.MaxChunkBytes) + capturedStream, err := aux.Process.GetAuthServer().GetSessionChunk(apidefaults.Namespace, session.ID(sessionID), 0, events.MaxChunkBytes) require.NoError(t, err) require.Equal(t, sessionStream, string(capturedStream)) @@ -1585,7 +1585,6 @@ func waitForContainer(ctx context.Context, podClient corev1client.PodInterface, } s := getContainerStatusByName(p, containerName) - fmt.Println("test", s) if s == nil { return false, nil } diff --git a/integration/proxy/proxy_helpers.go b/integration/proxy/proxy_helpers.go index 8c028bc62c7c6..a46a4d8ececb0 100644 --- a/integration/proxy/proxy_helpers.go +++ b/integration/proxy/proxy_helpers.go @@ -219,7 +219,7 @@ func (p *Suite) addNodeToLeafCluster(t *testing.T, tunnelNodeHostname string) { "Two clusters do not see each other: tunnels are not working.") // Wait for both nodes to show up before attempting to dial to them. - err = helpers.WaitForNodeCount(context.Background(), p.root, p.leaf.Secrets.SiteName, 2) + err = p.root.WaitForNodeCount(context.Background(), p.leaf.Secrets.SiteName, 2) require.NoError(t, err) } diff --git a/integration/proxy/proxy_test.go b/integration/proxy/proxy_test.go index 77a32c64d0e7e..f39245fbbe9ea 100644 --- a/integration/proxy/proxy_test.go +++ b/integration/proxy/proxy_test.go @@ -1593,7 +1593,7 @@ func TestALPNProxyHTTPProxyNoProxyDial(t *testing.T) { ctx, cancel := context.WithDeadline(context.Background(), time.Now().Add(time.Second*30)) defer cancel() - err = helpers.WaitForNodeCount(ctx, rc, "root.example.com", 1) + err = rc.WaitForNodeCount(ctx, "root.example.com", 1) require.NoError(t, err) require.Zero(t, ph.Count()) @@ -1603,7 +1603,7 @@ func TestALPNProxyHTTPProxyNoProxyDial(t *testing.T) { require.NoError(t, os.Unsetenv("no_proxy")) _, err = rc.StartNode(makeNodeConfig("second-root-node", rcProxyAddr)) require.NoError(t, err) - err = helpers.WaitForNodeCount(ctx, rc, "root.example.com", 2) + err = rc.WaitForNodeCount(ctx, "root.example.com", 2) require.NoError(t, err) require.NotZero(t, ph.Count()) @@ -1702,7 +1702,7 @@ func TestALPNProxyHTTPProxyBasicAuthDial(t *testing.T) { startErrC <- err }() require.NoError(t, <-startErrC) - require.NoError(t, helpers.WaitForNodeCount(context.Background(), rc, rc.Secrets.SiteName, 1)) + require.NoError(t, rc.WaitForNodeCount(context.Background(), rc.Secrets.SiteName, 1)) require.Greater(t, ph.Count(), 0) } diff --git a/integration/utmp_integration_test.go b/integration/utmp_integration_test.go index 89627419c677e..04391d01933e8 100644 --- a/integration/utmp_integration_test.go +++ b/integration/utmp_integration_test.go @@ -116,10 +116,10 @@ func TestRootUTMPEntryExists(t *testing.T) { require.NoError(t, err) require.EventuallyWithTf(t, func(collect *assert.CollectT) { - require.NoError(collect, uacc.UserWithPtyInDatabase(s.utmpPath, teleportTestUser)) - require.NoError(collect, uacc.UserWithPtyInDatabase(s.wtmpPath, teleportTestUser)) + assert.NoError(collect, uacc.UserWithPtyInDatabase(s.utmpPath, teleportTestUser)) + assert.NoError(collect, uacc.UserWithPtyInDatabase(s.wtmpPath, teleportTestUser)) // Ensure than an entry was not written to btmp. - require.True(collect, trace.IsNotFound(uacc.UserWithPtyInDatabase(s.btmpPath, teleportTestUser)), "unexpected error: %v", err) + assert.True(collect, trace.IsNotFound(uacc.UserWithPtyInDatabase(s.btmpPath, teleportTestUser)), "unexpected error: %v", err) }, 5*time.Minute, time.Second, "did not detect utmp entry within 5 minutes") }) @@ -152,10 +152,10 @@ func TestRootUTMPEntryExists(t *testing.T) { require.NoError(t, err) require.EventuallyWithT(t, func(collect *assert.CollectT) { - require.NoError(collect, uacc.UserWithPtyInDatabase(s.btmpPath, teleportFakeUser)) + assert.NoError(collect, uacc.UserWithPtyInDatabase(s.btmpPath, teleportFakeUser)) // Ensure that entries were not written to utmp and wtmp - require.True(collect, trace.IsNotFound(uacc.UserWithPtyInDatabase(s.utmpPath, teleportFakeUser)), "unexpected error: %v", err) - require.True(collect, trace.IsNotFound(uacc.UserWithPtyInDatabase(s.wtmpPath, teleportFakeUser)), "unexpected error: %v", err) + assert.True(collect, trace.IsNotFound(uacc.UserWithPtyInDatabase(s.utmpPath, teleportFakeUser)), "unexpected error: %v", err) + assert.True(collect, trace.IsNotFound(uacc.UserWithPtyInDatabase(s.wtmpPath, teleportFakeUser)), "unexpected error: %v", err) }, 5*time.Minute, time.Second, "did not detect btmp entry within 5 minutes") }) diff --git a/integrations/event-handler/cli.go b/integrations/event-handler/cli.go index 446158abbad91..dfad7eca35603 100644 --- a/integrations/event-handler/cli.go +++ b/integrations/event-handler/cli.go @@ -45,6 +45,10 @@ type FluentdConfig struct { // FluentdCA is a path to fluentd CA FluentdCA string `help:"fluentd TLS CA file" type:"existingfile" env:"FDWRD_FLUENTD_CA"` + + // FluentdMaxConnections caps the number of connections to fluentd. Defaults to a dynamic value + // calculated relative to app-level concurrency. + FluentdMaxConnections int `help:"Maximum number of connections to fluentd" env:"FDWRD_MAX_CONNECTIONS"` } // TeleportConfig is Teleport instance configuration @@ -237,6 +241,11 @@ func (c *StartCmdConfig) Validate() error { c.SkipSessionTypes = lib.SliceToAnonymousMap(c.SkipSessionTypesRaw) c.SkipEventTypes = lib.SliceToAnonymousMap(c.SkipEventTypesRaw) + if c.FluentdMaxConnections < 1 { + // 2x concurrency is effectively uncapped. + c.FluentdMaxConnections = c.Concurrency * 2 + } + return nil } @@ -256,6 +265,7 @@ func (c *StartCmdConfig) Dump(ctx context.Context) { log.WithField("ca", c.FluentdCA).Info("Using Fluentd ca") log.WithField("cert", c.FluentdCert).Info("Using Fluentd cert") log.WithField("key", c.FluentdKey).Info("Using Fluentd key") + log.WithField("max_connections", c.FluentdMaxConnections).Info("Using Fluentd max connections") log.WithField("window-size", c.WindowSize).Info("Using window size") if c.TeleportIdentityFile != "" { diff --git a/integrations/event-handler/cli_test.go b/integrations/event-handler/cli_test.go index 7668688880a80..b11b1af294bc1 100644 --- a/integrations/event-handler/cli_test.go +++ b/integrations/event-handler/cli_test.go @@ -45,11 +45,12 @@ func TestStartCmdConfig(t *testing.T) { Debug: false, Start: StartCmdConfig{ FluentdConfig: FluentdConfig{ - FluentdURL: "https://localhost:8888/test.log", - FluentdSessionURL: "https://localhost:8888/session", - FluentdCert: path.Join(wd, "testdata", "fake-file"), - FluentdKey: path.Join(wd, "testdata", "fake-file"), - FluentdCA: path.Join(wd, "testdata", "fake-file"), + FluentdURL: "https://localhost:8888/test.log", + FluentdSessionURL: "https://localhost:8888/session", + FluentdCert: path.Join(wd, "testdata", "fake-file"), + FluentdKey: path.Join(wd, "testdata", "fake-file"), + FluentdCA: path.Join(wd, "testdata", "fake-file"), + FluentdMaxConnections: 10, }, TeleportConfig: TeleportConfig{ TeleportAddr: "localhost:3025", @@ -83,11 +84,12 @@ func TestStartCmdConfig(t *testing.T) { Debug: true, Start: StartCmdConfig{ FluentdConfig: FluentdConfig{ - FluentdURL: "https://localhost:8888/test.log", - FluentdSessionURL: "https://localhost:8888/session", - FluentdCert: path.Join(wd, "testdata", "fake-file"), - FluentdKey: path.Join(wd, "testdata", "fake-file"), - FluentdCA: path.Join(wd, "testdata", "fake-file"), + FluentdURL: "https://localhost:8888/test.log", + FluentdSessionURL: "https://localhost:8888/session", + FluentdCert: path.Join(wd, "testdata", "fake-file"), + FluentdKey: path.Join(wd, "testdata", "fake-file"), + FluentdCA: path.Join(wd, "testdata", "fake-file"), + FluentdMaxConnections: 10, }, TeleportConfig: TeleportConfig{ TeleportAddr: "localhost:3025", @@ -121,11 +123,12 @@ func TestStartCmdConfig(t *testing.T) { Debug: true, Start: StartCmdConfig{ FluentdConfig: FluentdConfig{ - FluentdURL: "https://localhost:8888/test.log", - FluentdSessionURL: "https://localhost:8888/session", - FluentdCert: path.Join(wd, "testdata", "fake-file"), - FluentdKey: path.Join(wd, "testdata", "fake-file"), - FluentdCA: path.Join(wd, "testdata", "fake-file"), + FluentdURL: "https://localhost:8888/test.log", + FluentdSessionURL: "https://localhost:8888/session", + FluentdCert: path.Join(wd, "testdata", "fake-file"), + FluentdKey: path.Join(wd, "testdata", "fake-file"), + FluentdCA: path.Join(wd, "testdata", "fake-file"), + FluentdMaxConnections: 10, }, TeleportConfig: TeleportConfig{ TeleportAddr: "localhost:3025", diff --git a/integrations/event-handler/fake_fluentd_test.go b/integrations/event-handler/fake_fluentd_test.go index 070265398ee4d..019a063262582 100644 --- a/integrations/event-handler/fake_fluentd_test.go +++ b/integrations/event-handler/fake_fluentd_test.go @@ -123,9 +123,10 @@ func (f *FakeFluentd) createServer() error { // GetClientConfig returns FlientdConfig to connect to this fake fluentd server instance func (f *FakeFluentd) GetClientConfig() FluentdConfig { return FluentdConfig{ - FluentdCA: f.caCertPath, - FluentdCert: f.clientCertPath, - FluentdKey: f.clientKeyPath, + FluentdCA: f.caCertPath, + FluentdCert: f.clientCertPath, + FluentdKey: f.clientKeyPath, + FluentdMaxConnections: 3, } } diff --git a/integrations/event-handler/fluentd_client.go b/integrations/event-handler/fluentd_client.go index 92015bef4d312..32d18c31755af 100644 --- a/integrations/event-handler/fluentd_client.go +++ b/integrations/event-handler/fluentd_client.go @@ -27,6 +27,7 @@ import ( "github.com/gravitational/trace" log "github.com/sirupsen/logrus" + "golang.org/x/net/http2" tlib "github.com/gravitational/teleport/integrations/lib" ) @@ -40,6 +41,7 @@ const ( type FluentdClient struct { // client HTTP client to send requests client *http.Client + sem chan struct{} } // NewFluentdClient creates new FluentdClient @@ -55,22 +57,34 @@ func NewFluentdClient(c *FluentdConfig) (*FluentdClient, error) { return nil, trace.BadParameter("both fluentd_cert and fluentd_key should be specified") } + if c.FluentdMaxConnections <= 0 { + return nil, trace.BadParameter("fluentd_max_connections should be greater than 0") + } + ca, err := getCertPool(c) if err != nil { return nil, trace.Wrap(err) } - client := &http.Client{ - Transport: &http.Transport{ - TLSClientConfig: &tls.Config{ - RootCAs: ca, - Certificates: certs, - }, + transport := &http.Transport{ + TLSClientConfig: &tls.Config{ + RootCAs: ca, + Certificates: certs, }, - Timeout: httpTimeout, + MaxIdleConnsPerHost: c.FluentdMaxConnections, + IdleConnTimeout: httpTimeout, + } + + if err := http2.ConfigureTransport(transport); err != nil { + return nil, trace.Wrap(err) } - return &FluentdClient{client: client}, nil + client := &http.Client{ + Transport: transport, + Timeout: httpTimeout, + } + + return &FluentdClient{client: client, sem: make(chan struct{}, c.FluentdMaxConnections)}, nil } // getCertPool reads CA certificate and returns CA cert pool if passed @@ -91,6 +105,11 @@ func getCertPool(c *FluentdConfig) (*x509.CertPool, error) { // Send sends event to fluentd func (f *FluentdClient) Send(ctx context.Context, url string, b []byte) error { + f.sem <- struct{}{} + defer func() { + <-f.sem + }() + log.WithField("payload", string(b)).Debug("Sending event to Fluentd") req, err := http.NewRequestWithContext(ctx, "POST", url, bytes.NewReader(b)) diff --git a/integrations/event-handler/go.mod b/integrations/event-handler/go.mod index c18e7d6d34798..767dc89ff1626 100644 --- a/integrations/event-handler/go.mod +++ b/integrations/event-handler/go.mod @@ -2,7 +2,7 @@ module github.com/gravitational/teleport/integrations/event-handler go 1.21 -toolchain go1.22.9 +toolchain go1.22.10 require ( github.com/alecthomas/kong v0.9.0 @@ -18,6 +18,7 @@ require ( github.com/sethvargo/go-limiter v0.7.2 github.com/sirupsen/logrus v1.9.3 github.com/stretchr/testify v1.9.0 + golang.org/x/net v0.30.0 golang.org/x/time v0.5.0 google.golang.org/protobuf v1.34.2 ) @@ -196,7 +197,7 @@ require ( github.com/julienschmidt/httprouter v1.3.0 // indirect github.com/kelseyhightower/envconfig v1.4.0 // indirect github.com/keys-pub/go-libfido2 v1.5.3-0.20220306005615-8ab03fb1ec27 // indirect - github.com/klauspost/compress v1.17.4 // indirect + github.com/klauspost/compress v1.17.9 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/kylelemons/godebug v1.1.0 // indirect @@ -241,7 +242,7 @@ require ( github.com/prometheus/client_model v0.6.0 // indirect github.com/prometheus/common v0.51.1 // indirect github.com/prometheus/procfs v0.12.0 // indirect - github.com/rivo/uniseg v0.4.4 // indirect + github.com/rivo/uniseg v0.4.7 // indirect github.com/rogpeppe/go-internal v1.12.0 // indirect github.com/rubenv/sql-migrate v1.5.2 // indirect github.com/russellhaering/gosaml2 v0.9.1 // indirect @@ -282,15 +283,14 @@ require ( go.opentelemetry.io/otel/trace v1.24.0 // indirect go.opentelemetry.io/proto/otlp v1.0.0 // indirect go.starlark.net v0.0.0-20230525235612-a134d8f9ddca // indirect - golang.org/x/crypto v0.24.0 // indirect + golang.org/x/crypto v0.28.0 // indirect golang.org/x/exp v0.0.0-20231108232855-2478ac86f678 // indirect golang.org/x/mod v0.17.0 // indirect - golang.org/x/net v0.26.0 // indirect golang.org/x/oauth2 v0.19.0 // indirect - golang.org/x/sync v0.7.0 // indirect - golang.org/x/sys v0.21.0 // indirect - golang.org/x/term v0.21.0 // indirect - golang.org/x/text v0.16.0 // indirect + golang.org/x/sync v0.8.0 // indirect + golang.org/x/sys v0.26.0 // indirect + golang.org/x/term v0.25.0 // indirect + golang.org/x/text v0.19.0 // indirect google.golang.org/api v0.177.0 // indirect google.golang.org/genproto v0.0.0-20240401170217-c3f982113cda // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240429193739-8cf5692501f6 // indirect diff --git a/integrations/event-handler/go.sum b/integrations/event-handler/go.sum index 88ce097eb7833..cbad9394edb1e 100644 --- a/integrations/event-handler/go.sum +++ b/integrations/event-handler/go.sum @@ -626,8 +626,8 @@ github.com/kelseyhightower/envconfig v1.4.0 h1:Im6hONhd3pLkfDFsbRgu68RDNkGF1r3dv github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= -github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= +github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= @@ -805,8 +805,8 @@ github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDa github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= -github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= @@ -997,8 +997,8 @@ golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= -golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= -golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= +golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= +golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20231108232855-2478ac86f678 h1:mchzmB1XO2pMaKFRqk/+MV3mgGG96aqaPXaMifQU47w= golang.org/x/exp v0.0.0-20231108232855-2478ac86f678/go.mod h1:zk2irFbV9DP96SEBUUAy67IdHUaZuSnrz1n472HUCLE= @@ -1041,8 +1041,8 @@ golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= -golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= -golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= +golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= +golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= @@ -1056,8 +1056,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= -golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1098,8 +1098,8 @@ golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= -golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= +golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -1111,8 +1111,8 @@ golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= -golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= +golang.org/x/term v0.25.0 h1:WtHI/ltw4NvSUig5KARz9h521QvRC8RmF/cuYqifU24= +golang.org/x/term v0.25.0/go.mod h1:RPyXicDX+6vLxogjjRxjgD2TKtmAO6NZBsBRfrOLu7M= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -1125,8 +1125,8 @@ golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= -golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= +golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= +golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= diff --git a/integrations/terraform/go.mod b/integrations/terraform/go.mod index d7354dbea74ff..daf3d64da7c8d 100644 --- a/integrations/terraform/go.mod +++ b/integrations/terraform/go.mod @@ -2,7 +2,7 @@ module github.com/gravitational/teleport/integrations/terraform go 1.21 -toolchain go1.22.9 +toolchain go1.22.10 require ( github.com/gogo/protobuf v1.3.2 @@ -19,7 +19,7 @@ require ( github.com/sirupsen/logrus v1.9.3 github.com/stretchr/testify v1.9.0 google.golang.org/grpc v1.63.2 - google.golang.org/protobuf v1.34.0 + google.golang.org/protobuf v1.34.2 ) require ( @@ -220,7 +220,7 @@ require ( github.com/julienschmidt/httprouter v1.3.0 // indirect github.com/kelseyhightower/envconfig v1.4.0 // indirect github.com/keys-pub/go-libfido2 v1.5.3-0.20220306005615-8ab03fb1ec27 // indirect - github.com/klauspost/compress v1.17.4 // indirect + github.com/klauspost/compress v1.17.9 // indirect github.com/kr/fs v0.1.0 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect @@ -272,7 +272,7 @@ require ( github.com/prometheus/client_model v0.6.0 // indirect github.com/prometheus/common v0.51.1 // indirect github.com/prometheus/procfs v0.12.0 // indirect - github.com/rivo/uniseg v0.4.4 // indirect + github.com/rivo/uniseg v0.4.7 // indirect github.com/rogpeppe/go-internal v1.12.0 // indirect github.com/rubenv/sql-migrate v1.5.2 // indirect github.com/russellhaering/gosaml2 v0.9.1 // indirect diff --git a/integrations/terraform/go.sum b/integrations/terraform/go.sum index 5043f2d8f7d63..f0e5ce30cf1be 100644 --- a/integrations/terraform/go.sum +++ b/integrations/terraform/go.sum @@ -164,8 +164,8 @@ github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a h1:HbKu58rmZp github.com/alicebob/gopher-json v0.0.0-20200520072559-a9ecdc9d1d3a/go.mod h1:SGnFV6hVsYE877CKEZ6tDNTjaSXYUk6QqoIK6PrAtcc= github.com/alicebob/miniredis/v2 v2.31.1 h1:7XAt0uUg3DtwEKW5ZAGa+K7FZV2DdKQo5K/6TTnfX8Y= github.com/alicebob/miniredis/v2 v2.31.1/go.mod h1:UB/T2Uztp7MlFSDakaX1sTXUv5CASoprx0wulRT6HBg= -github.com/andybalholm/brotli v1.0.6 h1:Yf9fFpf49Zrxb9NlQaluyE92/+X7UVHlhMNJN2sxfOI= -github.com/andybalholm/brotli v1.0.6/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M= +github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY= github.com/andybalholm/crlf v0.0.0-20171020200849-670099aa064f/go.mod h1:k8feO4+kXDxro6ErPXBRTJ/ro2mf0SsFG8s7doP9kJE= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= @@ -891,8 +891,8 @@ github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.11.2/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= -github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= +github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= +github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= @@ -1050,6 +1050,8 @@ github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQ github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= github.com/opensearch-project/opensearch-go/v2 v2.3.0 h1:nQIEMr+A92CkhHrZgUhcfsrZjibvB3APXf2a1VwCmMQ= github.com/opensearch-project/opensearch-go/v2 v2.3.0/go.mod h1:8LDr9FCgUTVoT+5ESjc2+iaZuldqE+23Iq0r1XeNue8= +github.com/parquet-go/parquet-go v0.23.0 h1:dyEU5oiHCtbASyItMCD2tXtT2nPmoPbKpqf0+nnGrmk= +github.com/parquet-go/parquet-go v0.23.0/go.mod h1:MnwbUcFHU6uBYMymKAlPPAw9yh3kE1wWl6Gl1uLdkNk= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/name v1.0.1 h1:9lnXOHeqeHHnWLbKfH6X98+4+ETVqFqxN09UXSjcMb0= github.com/pascaldekloe/name v1.0.1/go.mod h1:Z//MfYJnH4jVpQ9wkclwu2I2MkHmXTlT9wR5UZScttM= @@ -1067,8 +1069,8 @@ github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+v github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= -github.com/pierrec/lz4/v4 v4.1.18 h1:xaKrnTkyoqfh1YItXl56+6KJNVYWlEEPuAQW9xsplYQ= -github.com/pierrec/lz4/v4 v4.1.18/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ= +github.com/pierrec/lz4/v4 v4.1.21/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pingcap/errors v0.11.5-0.20201126102027-b0a155152ca3 h1:LllgC9eGfqzkfubMgjKIDyZYaa609nNWAyNZtpy2B3M= github.com/pingcap/errors v0.11.5-0.20201126102027-b0a155152ca3/go.mod h1:G7x87le1poQzLB/TqvTJI2ILrSgobnq4Ut7luOwvfvI= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= @@ -1111,8 +1113,9 @@ github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDa github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= +github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= @@ -1147,10 +1150,8 @@ github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg github.com/sebdah/goldie v1.0.0/go.mod h1:jXP4hmWywNEwZzhMuv2ccnqTSFpuq8iyQhtQdkkZBH4= github.com/segmentio/asm v1.2.0 h1:9BQrFxC+YOHJlTlHGkTrFWf59nbL3XnCoFLTwDCI7ys= github.com/segmentio/asm v1.2.0/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs= -github.com/segmentio/encoding v0.3.5 h1:UZEiaZ55nlXGDL92scoVuw00RmiRCazIEmvPSbSvt8Y= -github.com/segmentio/encoding v0.3.5/go.mod h1:n0JeuIqEQrQoPDGsjo8UNd1iA0U8d8+oHAA4E3G3OxM= -github.com/segmentio/parquet-go v0.0.0-20230622230624-510764ae9e80 h1:d09YiLivaPHjCyYDGLI5BQbl+carOqUg/U0noDQQBmo= -github.com/segmentio/parquet-go v0.0.0-20230622230624-510764ae9e80/go.mod h1:+J0xQnJjm8DuQUHBO7t57EnmPbstT6+b45+p3DC9k1Q= +github.com/segmentio/encoding v0.4.0 h1:MEBYvRqiUB2nfR2criEXWqwdY6HJOUrCn5hboVOVmy8= +github.com/segmentio/encoding v0.4.0/go.mod h1:/d03Cd8PoaDeceuhUUUQWjU0KhWjrmYrWPgtJHYZSnI= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= @@ -1736,8 +1737,8 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0 google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.34.0 h1:Qo/qEd2RZPCf2nKuorzksSknv0d3ERwp1vFG38gSmH4= -google.golang.org/protobuf v1.34.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= +google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/lib/auth/auth.go b/lib/auth/auth.go index 76cf9729b6b63..a1816d6ca8f67 100644 --- a/lib/auth/auth.go +++ b/lib/auth/auth.go @@ -1266,8 +1266,6 @@ func (a *Server) runPeriodicOperations() { defer ticker.Stop() - missedKeepAliveCount := 0 - // Prevent some periodic operations from running for dashboard tenants. if !services.IsDashboard(*modules.GetModules().Features().ToProto()) { ticker.Push(interval.SubInterval[periodicIntervalKey]{ @@ -1369,7 +1367,7 @@ func (a *Server) runPeriodicOperations() { return false, nil } if services.NodeHasMissedKeepAlives(srv) { - missedKeepAliveCount++ + heartbeatsMissedByAuth.Inc() } return false, nil }, @@ -1385,9 +1383,6 @@ func (a *Server) runPeriodicOperations() { break } } - - // Update prometheus gauge - heartbeatsMissedByAuth.Set(float64(missedKeepAliveCount)) }() case metricsKey: go a.updateAgentMetrics() diff --git a/lib/auth/bot_test.go b/lib/auth/bot_test.go index 4c54114a96522..6a8bd417bba8e 100644 --- a/lib/auth/bot_test.go +++ b/lib/auth/bot_test.go @@ -388,7 +388,7 @@ func TestRegisterBot_RemoteAddr(t *testing.T) { t.Run("Azure method", func(t *testing.T) { subID := uuid.NewString() resourceGroup := "rg" - rsID := resourceID(subID, resourceGroup, "test-vm") + rsID := vmResourceID(subID, resourceGroup, "test-vm") vmID := "vmID" accessToken, err := makeToken(rsID, a.clock.Now()) @@ -408,13 +408,20 @@ func TestRegisterBot_RemoteAddr(t *testing.T) { require.NoError(t, err) require.NoError(t, a.UpsertToken(ctx, azureToken)) - vmClient := &mockAzureVMClient{vm: &azure.VirtualMachine{ - ID: rsID, - Name: "test-vm", - Subscription: subID, - ResourceGroup: resourceGroup, - VMID: vmID, - }} + vmClient := &mockAzureVMClient{ + vms: map[string]*azure.VirtualMachine{ + rsID: { + ID: rsID, + Name: "test-vm", + Subscription: subID, + ResourceGroup: resourceGroup, + VMID: vmID, + }, + }, + } + getVMClient := makeVMClientGetter(map[string]*mockAzureVMClient{ + subID: vmClient, + }) tlsConfig, err := fixtures.LocalTLSConfig() require.NoError(t, err) @@ -456,7 +463,7 @@ func TestRegisterBot_RemoteAddr(t *testing.T) { AccessToken: accessToken, } return req, nil - }, withCerts([]*x509.Certificate{tlsConfig.Certificate}), withVerifyFunc(mockVerifyToken(nil)), withVMClient(vmClient)) + }, withCerts([]*x509.Certificate{tlsConfig.Certificate}), withVerifyFunc(mockVerifyToken(nil)), withVMClientGetter(getVMClient)) require.NoError(t, err) checkCertLoginIP(t, certs.TLS, remoteAddr) }) diff --git a/lib/auth/db.go b/lib/auth/db.go index 1716f5a2d91c5..4e16cd4d252c5 100644 --- a/lib/auth/db.go +++ b/lib/auth/db.go @@ -112,8 +112,17 @@ func (a *Server) generateDatabaseClientCert(ctx context.Context, req *proto.Data } // db clients should trust the Database Server CA when establishing // connection to a database, so return that CA's certs in the response. - dbServerCA, err := a.GetCertAuthority(ctx, types.CertAuthID{ - Type: types.DatabaseCA, + // + // The only exception is the SQL Server with PKINIT integration, where the + // `kinit` command line needs our client CA to trust the user certificates + // we pass. + returnedCAType := types.DatabaseCA + if req.CertificateExtensions == proto.DatabaseCertRequest_WINDOWS_SMARTCARD { + returnedCAType = types.DatabaseClientCA + } + + returnedCA, err := a.GetCertAuthority(ctx, types.CertAuthID{ + Type: returnedCAType, DomainName: clusterName.GetClusterName(), }, false) if err != nil { @@ -121,7 +130,7 @@ func (a *Server) generateDatabaseClientCert(ctx context.Context, req *proto.Data } return &proto.DatabaseCertResponse{ Cert: cert, - CACerts: services.GetTLSCerts(dbServerCA), + CACerts: services.GetTLSCerts(returnedCA), }, nil } diff --git a/lib/auth/db_test.go b/lib/auth/db_test.go index 4127b9a2ed570..1d9fbc7de4114 100644 --- a/lib/auth/db_test.go +++ b/lib/auth/db_test.go @@ -153,6 +153,7 @@ func TestDBCertSigning(t *testing.T) { tests := []struct { name string requester proto.DatabaseCertRequest_Requester + extensions proto.DatabaseCertRequest_Extensions wantCertSigner []byte wantCACerts [][]byte wantKeyUsage []x509.ExtKeyUsage @@ -170,16 +171,32 @@ func TestDBCertSigning(t *testing.T) { wantCACerts: [][]byte{activeDBClientCACert, newDBClientCACert}, wantKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}, }, + { + name: "DB service request for SQL Server databases is signed by active db client and trusts db client CAs", + extensions: proto.DatabaseCertRequest_WINDOWS_SMARTCARD, + wantCertSigner: activeDBClientCACert, + wantCACerts: [][]byte{activeDBClientCACert, newDBClientCACert}, + wantKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageClientAuth}, + }, + { + name: "tctl request for SQL Server databases is signed by new db CA and trusts db client CAs", + requester: proto.DatabaseCertRequest_TCTL, + extensions: proto.DatabaseCertRequest_WINDOWS_SMARTCARD, + wantCertSigner: newDBCACert, + wantCACerts: [][]byte{activeDBClientCACert, newDBClientCACert}, + wantKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth}, + }, } for _, tt := range tests { tt := tt t.Run(tt.name, func(t *testing.T) { t.Parallel() certResp, err := authServer.AuthServer.GenerateDatabaseCert(ctx, &proto.DatabaseCertRequest{ - CSR: csr, - ServerName: "localhost", - TTL: proto.Duration(time.Hour), - RequesterName: tt.requester, + CSR: csr, + ServerName: "localhost", + TTL: proto.Duration(time.Hour), + RequesterName: tt.requester, + CertificateExtensions: tt.extensions, }) require.NoError(t, err) require.Equal(t, tt.wantCACerts, certResp.CACerts) diff --git a/lib/auth/desktop.go b/lib/auth/desktop.go index f730c3e7c3610..664a055eb7846 100644 --- a/lib/auth/desktop.go +++ b/lib/auth/desktop.go @@ -71,8 +71,13 @@ func (a *Server) GenerateWindowsDesktopCert(ctx context.Context, req *proto.Wind NotAfter: a.clock.Now().UTC().Add(req.TTL.Get()), ExtraExtensions: csr.Extensions, KeyUsage: x509.KeyUsageDigitalSignature, - // CRL is required for Windows smartcard certs. - CRLDistributionPoints: []string{req.CRLEndpoint}, + } + + // CRL Distribution Points (CDP) are required for Windows smartcard certs + // for users wanting to RDP. They are not required for the service account + // cert that Teleport itself uses to authenticate for LDAP. + if req.CRLEndpoint != "" { + certReq.CRLDistributionPoints = []string{req.CRLEndpoint} } limitExceeded, err := a.desktopsLimitExceeded(ctx) diff --git a/lib/auth/integration/integrationv1/awsoidc.go b/lib/auth/integration/integrationv1/awsoidc.go index 8a100fea35614..8e025db1c6dc6 100644 --- a/lib/auth/integration/integrationv1/awsoidc.go +++ b/lib/auth/integration/integrationv1/awsoidc.go @@ -662,15 +662,7 @@ func (s *AWSOIDCService) ListEKSClusters(ctx context.Context, req *integrationpb clustersList := make([]*integrationpb.EKSCluster, 0, len(listEKSClustersResp.Clusters)) for _, cluster := range listEKSClustersResp.Clusters { - clusterPb := &integrationpb.EKSCluster{ - Name: cluster.Name, - Region: cluster.Region, - Arn: cluster.Arn, - Labels: cluster.Labels, - JoinLabels: cluster.JoinLabels, - Status: cluster.Status, - } - clustersList = append(clustersList, clusterPb) + clustersList = append(clustersList, convertEKSCluster(cluster)) } return &integrationpb.ListEKSClustersResponse{ @@ -678,3 +670,16 @@ func (s *AWSOIDCService) ListEKSClusters(ctx context.Context, req *integrationpb NextToken: listEKSClustersResp.NextToken, }, nil } + +func convertEKSCluster(clusterService awsoidc.EKSCluster) *integrationpb.EKSCluster { + return &integrationpb.EKSCluster{ + Name: clusterService.Name, + Region: clusterService.Region, + Arn: clusterService.Arn, + Labels: clusterService.Labels, + JoinLabels: clusterService.JoinLabels, + Status: clusterService.Status, + EndpointPublicAccess: clusterService.EndpointPublicAccess, + AuthenticationMode: clusterService.AuthenticationMode, + } +} diff --git a/lib/auth/integration/integrationv1/awsoidc_test.go b/lib/auth/integration/integrationv1/awsoidc_test.go index 3bcd19b14868f..87a5f7356002e 100644 --- a/lib/auth/integration/integrationv1/awsoidc_test.go +++ b/lib/auth/integration/integrationv1/awsoidc_test.go @@ -407,3 +407,39 @@ func TestDeployService(t *testing.T) { require.True(t, trace.IsBadParameter(err), "expected BadParameter error, but got %T", err) }) } + +func TestConvertEKSCluster(t *testing.T) { + for _, tt := range []struct { + name string + input awsoidc.EKSCluster + expected *integrationv1.EKSCluster + }{ + { + name: "valid", + input: awsoidc.EKSCluster{ + Name: "my-cluster", + Region: "us-east-1", + Arn: "my-arn", + Labels: map[string]string{}, + JoinLabels: map[string]string{}, + Status: "ACTIVE", + AuthenticationMode: "API", + EndpointPublicAccess: true, + }, + expected: &integrationv1.EKSCluster{ + Name: "my-cluster", + Region: "us-east-1", + Arn: "my-arn", + Labels: map[string]string{}, + JoinLabels: map[string]string{}, + Status: "ACTIVE", + AuthenticationMode: "API", + EndpointPublicAccess: true, + }, + }, + } { + t.Run(tt.name, func(t *testing.T) { + require.Equal(t, tt.expected, convertEKSCluster(tt.input)) + }) + } +} diff --git a/lib/auth/join_azure.go b/lib/auth/join_azure.go index e044d4e810a69..4ce6311a6970f 100644 --- a/lib/auth/join_azure.go +++ b/lib/auth/join_azure.go @@ -83,11 +83,13 @@ type accessTokenClaims struct { type azureVerifyTokenFunc func(ctx context.Context, rawIDToken string) (*accessTokenClaims, error) +type vmClientGetter func(subscriptionID string, token *azure.StaticCredential) (azure.VirtualMachinesClient, error) + type azureRegisterConfig struct { clock clockwork.Clock certificateAuthorities []*x509.Certificate verify azureVerifyTokenFunc - vmClient azure.VirtualMachinesClient + getVMClient vmClientGetter } func azureVerifyFuncFromOIDCVerifier(cfg *oidc.Config) azureVerifyTokenFunc { @@ -140,6 +142,12 @@ func (cfg *azureRegisterConfig) CheckAndSetDefaults(ctx context.Context) error { } cfg.certificateAuthorities = certs } + if cfg.getVMClient == nil { + cfg.getVMClient = func(subscriptionID string, token *azure.StaticCredential) (azure.VirtualMachinesClient, error) { + client, err := azure.NewVirtualMachinesClient(subscriptionID, token, nil) + return client, trace.Wrap(err) + } + } return nil } @@ -148,42 +156,42 @@ type azureRegisterOption func(cfg *azureRegisterConfig) // parseAndVeryAttestedData verifies that an attested data document was signed // by Azure. If verification is successful, it returns the ID of the VM that // produced the document. -func parseAndVerifyAttestedData(ctx context.Context, adBytes []byte, challenge string, certs []*x509.Certificate) (string, error) { +func parseAndVerifyAttestedData(ctx context.Context, adBytes []byte, challenge string, certs []*x509.Certificate) (subscriptionID, vmID string, err error) { var signedAD signedAttestedData if err := utils.FastUnmarshal(adBytes, &signedAD); err != nil { - return "", trace.Wrap(err) + return "", "", trace.Wrap(err) } if signedAD.Encoding != "pkcs7" { - return "", trace.AccessDenied("unsupported signature type: %v", signedAD.Encoding) + return "", "", trace.AccessDenied("unsupported signature type: %v", signedAD.Encoding) } sigPEM := "-----BEGIN PKCS7-----\n" + signedAD.Signature + "\n-----END PKCS7-----" sigBER, _ := pem.Decode([]byte(sigPEM)) if sigBER == nil { - return "", trace.AccessDenied("unable to decode attested data document") + return "", "", trace.AccessDenied("unable to decode attested data document") } p7, err := pkcs7.Parse(sigBER.Bytes) if err != nil { - return "", trace.Wrap(err) + return "", "", trace.Wrap(err) } var ad attestedData if err := utils.FastUnmarshal(p7.Content, &ad); err != nil { - return "", trace.Wrap(err) + return "", "", trace.Wrap(err) } if ad.Nonce != challenge { - return "", trace.AccessDenied("challenge is missing or does not match") + return "", "", trace.AccessDenied("challenge is missing or does not match") } if len(p7.Certificates) == 0 { - return "", trace.AccessDenied("no certificates for signature") + return "", "", trace.AccessDenied("no certificates for signature") } fixAzureSigningAlgorithm(p7) // Azure only sends the leaf cert, so we have to fetch the intermediate. intermediate, err := getAzureIssuerCert(ctx, p7.Certificates[0]) if err != nil { - return "", trace.Wrap(err) + return "", "", trace.Wrap(err) } if intermediate != nil { p7.Certificates = append(p7.Certificates, intermediate) @@ -195,15 +203,15 @@ func parseAndVerifyAttestedData(ctx context.Context, adBytes []byte, challenge s } if err := p7.VerifyWithChain(pool); err != nil { - return "", trace.Wrap(err) + return "", "", trace.Wrap(err) } - return ad.ID, nil + return ad.SubscriptionID, ad.ID, nil } // verifyVMIdentity verifies that the provided access token came from the // correct Azure VM. -func verifyVMIdentity(ctx context.Context, cfg *azureRegisterConfig, accessToken, vmID string, requestStart time.Time) (*azure.VirtualMachine, error) { +func verifyVMIdentity(ctx context.Context, cfg *azureRegisterConfig, accessToken, subscriptionID, vmID string, requestStart time.Time) (*azure.VirtualMachine, error) { tokenClaims, err := cfg.verify(ctx, accessToken) if err != nil { return nil, trace.Wrap(err) @@ -231,24 +239,15 @@ func verifyVMIdentity(ctx context.Context, cfg *azureRegisterConfig, accessToken return nil, trace.Wrap(err) } - rsID, err := arm.ParseResourceID(tokenClaims.ResourceID) + tokenCredential := azure.NewStaticCredential(azcore.AccessToken{ + Token: accessToken, + ExpiresOn: tokenClaims.Expiry.Time(), + }) + vmClient, err := cfg.getVMClient(subscriptionID, tokenCredential) if err != nil { return nil, trace.Wrap(err) } - vmClient := cfg.vmClient - if vmClient == nil { - tokenCredential := azure.NewStaticCredential(azcore.AccessToken{ - Token: accessToken, - ExpiresOn: tokenClaims.Expiry.Time(), - }) - var err error - vmClient, err = azure.NewVirtualMachinesClient(rsID.SubscriptionID, tokenCredential, nil) - if err != nil { - return nil, trace.Wrap(err) - } - } - resourceID, err := arm.ParseResourceID(tokenClaims.ResourceID) if err != nil { return nil, trace.Wrap(err) @@ -324,12 +323,12 @@ func (a *Server) checkAzureRequest(ctx context.Context, challenge string, req *p return trace.AccessDenied("this token does not support the Azure join method") } - vmID, err := parseAndVerifyAttestedData(ctx, req.AttestedData, challenge, cfg.certificateAuthorities) + subID, vmID, err := parseAndVerifyAttestedData(ctx, req.AttestedData, challenge, cfg.certificateAuthorities) if err != nil { return trace.Wrap(err) } - vm, err := verifyVMIdentity(ctx, cfg, req.AccessToken, vmID, requestStart) + vm, err := verifyVMIdentity(ctx, cfg, req.AccessToken, subID, vmID, requestStart) if err != nil { return trace.Wrap(err) } diff --git a/lib/auth/join_azure_test.go b/lib/auth/join_azure_test.go index 5fe5d487fcf3a..faa9bb6f0cb95 100644 --- a/lib/auth/join_azure_test.go +++ b/lib/auth/join_azure_test.go @@ -54,23 +54,41 @@ func withVerifyFunc(verify azureVerifyTokenFunc) azureRegisterOption { } } -func withVMClient(vmClient azure.VirtualMachinesClient) azureRegisterOption { +func withVMClientGetter(getVMClient vmClientGetter) azureRegisterOption { return func(cfg *azureRegisterConfig) { - cfg.vmClient = vmClient + cfg.getVMClient = getVMClient } } type mockAzureVMClient struct { azure.VirtualMachinesClient - vm *azure.VirtualMachine + vms map[string]*azure.VirtualMachine } -func (m *mockAzureVMClient) Get(_ context.Context, _ string) (*azure.VirtualMachine, error) { - return m.vm, nil +func (m *mockAzureVMClient) Get(_ context.Context, resourceID string) (*azure.VirtualMachine, error) { + vm, ok := m.vms[resourceID] + if !ok { + return nil, trace.NotFound("no vm with resource id %q", resourceID) + } + return vm, nil +} + +func (m *mockAzureVMClient) GetByVMID(_ context.Context, resourceGroup, vmID string) (*azure.VirtualMachine, error) { + for _, vm := range m.vms { + if vm.VMID == vmID && (resourceGroup == types.Wildcard || vm.ResourceGroup == resourceGroup) { + return vm, nil + } + } + return nil, trace.NotFound("no vm in groups %q with id %q", resourceGroup, vmID) } -func (m *mockAzureVMClient) GetByVMID(_ context.Context, _, _ string) (*azure.VirtualMachine, error) { - return m.vm, nil +func makeVMClientGetter(clients map[string]*mockAzureVMClient) vmClientGetter { + return func(subscriptionID string, _ *azure.StaticCredential) (azure.VirtualMachinesClient, error) { + if client, ok := clients[subscriptionID]; ok { + return client, nil + } + return nil, trace.NotFound("no client for subscription %q", subscriptionID) + } } type azureChallengeResponseConfig struct { @@ -85,10 +103,14 @@ func withChallengeAzure(challenge string) azureChallengeResponseOption { } } -func resourceID(subscription, resourceGroup, name string) string { +func vmResourceID(subscription, resourceGroup, name string) string { + return resourceID("virtualMachines", subscription, resourceGroup, name) +} + +func resourceID(resourceType, subscription, resourceGroup, name string) string { return fmt.Sprintf( - "/subscriptions/%v/resourcegroups/%v/providers/Microsoft.Compute/virtualMachines/%v", - subscription, resourceGroup, name, + "/subscriptions/%v/resourcegroups/%v/providers/Microsoft.Compute/%v/%v", + subscription, resourceGroup, resourceType, name, ) } @@ -161,43 +183,47 @@ func TestAuth_RegisterUsingAzureMethod(t *testing.T) { tlsPublicKey, err := PrivateKeyToPublicKeyTLS(sshPrivateKey) require.NoError(t, err) - isAccessDenied := func(t require.TestingT, err error, _ ...interface{}) { + isAccessDenied := func(t require.TestingT, err error, _ ...any) { require.True(t, trace.IsAccessDenied(err), "expected Access Denied error, actual error: %v", err) } - isBadParameter := func(t require.TestingT, err error, _ ...interface{}) { + isBadParameter := func(t require.TestingT, err error, _ ...any) { require.True(t, trace.IsBadParameter(err), "expected Bad Parameter error, actual error: %v", err) } + isNotFound := func(t require.TestingT, err error, _ ...any) { + require.True(t, trace.IsNotFound(err), "expected Not Found error, actual error: %v", err) + } - subID := uuid.NewString() + defaultSubscription := uuid.NewString() + defaultResourceGroup := "my-resource-group" + defaultName := "test-vm" + defaultVMID := "my-vm-id" + defaultResourceID := vmResourceID(defaultSubscription, defaultResourceGroup, defaultName) tests := []struct { name string - subscription string - resourceGroup string - vmID string - tokenName string + tokenResourceID string + tokenSubscription string + tokenVMID string requestTokenName string tokenSpec types.ProvisionTokenSpecV2 challengeResponseOptions []azureChallengeResponseOption challengeResponseErr error certs []*x509.Certificate verify azureVerifyTokenFunc - vmResult *azure.VirtualMachine assertError require.ErrorAssertionFunc }{ { - name: "basic passing case", - tokenName: "test-token", - requestTokenName: "test-token", - subscription: subID, - resourceGroup: "RG", + name: "basic passing case", + requestTokenName: "test-token", + tokenSubscription: defaultSubscription, + tokenVMID: defaultVMID, tokenSpec: types.ProvisionTokenSpecV2{ Roles: []types.SystemRole{types.RoleNode}, Azure: &types.ProvisionTokenSpecV2Azure{ Allow: []*types.ProvisionTokenSpecV2Azure_Rule{ { - Subscription: subID, - ResourceGroups: []string{"rg"}, + Subscription: defaultSubscription, + ResourceGroups: []string{defaultResourceGroup}, }, }, }, @@ -208,18 +234,17 @@ func TestAuth_RegisterUsingAzureMethod(t *testing.T) { assertError: require.NoError, }, { - name: "resource group is case insensitive", - tokenName: "test-token", - requestTokenName: "test-token", - subscription: subID, - resourceGroup: "my-RESOURCE-GROUP", + name: "resource group is case insensitive", + requestTokenName: "test-token", + tokenSubscription: defaultSubscription, + tokenVMID: defaultVMID, tokenSpec: types.ProvisionTokenSpecV2{ Roles: []types.SystemRole{types.RoleNode}, Azure: &types.ProvisionTokenSpecV2Azure{ Allow: []*types.ProvisionTokenSpecV2Azure_Rule{ { - Subscription: subID, - ResourceGroups: []string{"MY-resource-group"}, + Subscription: defaultSubscription, + ResourceGroups: []string{"MY-resource-GROUP"}, }, }, }, @@ -230,17 +255,16 @@ func TestAuth_RegisterUsingAzureMethod(t *testing.T) { assertError: require.NoError, }, { - name: "wrong token", - tokenName: "test-token", - requestTokenName: "wrong-token", - subscription: subID, - resourceGroup: "RG", + name: "wrong token", + requestTokenName: "wrong-token", + tokenSubscription: defaultSubscription, + tokenVMID: defaultVMID, tokenSpec: types.ProvisionTokenSpecV2{ Roles: []types.SystemRole{types.RoleNode}, Azure: &types.ProvisionTokenSpecV2Azure{ Allow: []*types.ProvisionTokenSpecV2Azure_Rule{ { - Subscription: subID, + Subscription: defaultSubscription, }, }, }, @@ -251,17 +275,16 @@ func TestAuth_RegisterUsingAzureMethod(t *testing.T) { assertError: isAccessDenied, }, { - name: "challenge response error", - tokenName: "test-token", - requestTokenName: "test-token", - subscription: subID, - resourceGroup: "RG", + name: "challenge response error", + requestTokenName: "test-token", + tokenSubscription: defaultSubscription, + tokenVMID: defaultVMID, tokenSpec: types.ProvisionTokenSpecV2{ Roles: []types.SystemRole{types.RoleNode}, Azure: &types.ProvisionTokenSpecV2Azure{ Allow: []*types.ProvisionTokenSpecV2Azure_Rule{ { - Subscription: subID, + Subscription: defaultSubscription, }, }, }, @@ -273,17 +296,16 @@ func TestAuth_RegisterUsingAzureMethod(t *testing.T) { assertError: isBadParameter, }, { - name: "wrong subscription", - tokenName: "test-token", - requestTokenName: "test-token", - subscription: "some-junk", - resourceGroup: "RG", + name: "wrong subscription", + requestTokenName: "test-token", + tokenSubscription: defaultSubscription, + tokenVMID: defaultVMID, tokenSpec: types.ProvisionTokenSpecV2{ Roles: []types.SystemRole{types.RoleNode}, Azure: &types.ProvisionTokenSpecV2Azure{ Allow: []*types.ProvisionTokenSpecV2Azure_Rule{ { - Subscription: subID, + Subscription: "alternate-subscription-id", }, }, }, @@ -294,18 +316,17 @@ func TestAuth_RegisterUsingAzureMethod(t *testing.T) { assertError: isAccessDenied, }, { - name: "wrong resource group", - tokenName: "test-token", - requestTokenName: "test-token", - subscription: subID, - resourceGroup: "WRONG-RG", + name: "wrong resource group", + requestTokenName: "test-token", + tokenSubscription: defaultSubscription, + tokenVMID: defaultVMID, tokenSpec: types.ProvisionTokenSpecV2{ Roles: []types.SystemRole{types.RoleNode}, Azure: &types.ProvisionTokenSpecV2Azure{ Allow: []*types.ProvisionTokenSpecV2Azure_Rule{ { - Subscription: subID, - ResourceGroups: []string{"rg"}, + Subscription: defaultSubscription, + ResourceGroups: []string{"alternate-resource-group"}, }, }, }, @@ -316,17 +337,16 @@ func TestAuth_RegisterUsingAzureMethod(t *testing.T) { assertError: isAccessDenied, }, { - name: "wrong challenge", - tokenName: "test-token", - requestTokenName: "test-token", - subscription: subID, - resourceGroup: "RG", + name: "wrong challenge", + requestTokenName: "test-token", + tokenSubscription: defaultSubscription, + tokenVMID: defaultVMID, tokenSpec: types.ProvisionTokenSpecV2{ Roles: []types.SystemRole{types.RoleNode}, Azure: &types.ProvisionTokenSpecV2Azure{ Allow: []*types.ProvisionTokenSpecV2Azure_Rule{ { - Subscription: subID, + Subscription: defaultSubscription, }, }, }, @@ -340,17 +360,16 @@ func TestAuth_RegisterUsingAzureMethod(t *testing.T) { assertError: isAccessDenied, }, { - name: "invalid signature", - tokenName: "test-token", - requestTokenName: "test-token", - subscription: subID, - resourceGroup: "RG", + name: "invalid signature", + requestTokenName: "test-token", + tokenSubscription: defaultSubscription, + tokenVMID: defaultVMID, tokenSpec: types.ProvisionTokenSpecV2{ Roles: []types.SystemRole{types.RoleNode}, Azure: &types.ProvisionTokenSpecV2Azure{ Allow: []*types.ProvisionTokenSpecV2Azure_Rule{ { - Subscription: subID, + Subscription: defaultSubscription, }, }, }, @@ -361,38 +380,94 @@ func TestAuth_RegisterUsingAzureMethod(t *testing.T) { assertError: require.Error, }, { - name: "attested data and access token from different VMs", - tokenName: "test-token", - requestTokenName: "test-token", - subscription: subID, - resourceGroup: "RG", - vmID: "vm-id", + name: "attested data and access token from different VMs", + requestTokenName: "test-token", + tokenSubscription: defaultSubscription, + tokenVMID: "some-other-vm-id", tokenSpec: types.ProvisionTokenSpecV2{ Roles: []types.SystemRole{types.RoleNode}, Azure: &types.ProvisionTokenSpecV2Azure{ Allow: []*types.ProvisionTokenSpecV2Azure_Rule{ { - Subscription: subID, + Subscription: defaultSubscription, }, }, }, JoinMethod: types.JoinMethodAzure, }, - vmResult: &azure.VirtualMachine{ - Subscription: subID, - ResourceGroup: "RG", - VMID: "different-id", - }, verify: mockVerifyToken(nil), certs: []*x509.Certificate{tlsConfig.Certificate}, assertError: isAccessDenied, }, + { + name: "vm not found", + requestTokenName: "test-token", + tokenSubscription: defaultSubscription, + tokenVMID: defaultVMID, + tokenResourceID: vmResourceID(defaultSubscription, "nonexistent-group", defaultName), + tokenSpec: types.ProvisionTokenSpecV2{ + Roles: []types.SystemRole{types.RoleNode}, + Azure: &types.ProvisionTokenSpecV2Azure{ + Allow: []*types.ProvisionTokenSpecV2Azure_Rule{ + { + Subscription: defaultSubscription, + }, + }, + }, + JoinMethod: types.JoinMethodAzure, + }, + verify: mockVerifyToken(nil), + certs: []*x509.Certificate{tlsConfig.Certificate}, + assertError: isNotFound, + }, + { + name: "lookup vm by id", + requestTokenName: "test-token", + tokenSubscription: defaultSubscription, + tokenVMID: defaultVMID, + tokenResourceID: resourceID("some.other.provider", defaultSubscription, defaultResourceGroup, defaultName), + tokenSpec: types.ProvisionTokenSpecV2{ + Roles: []types.SystemRole{types.RoleNode}, + Azure: &types.ProvisionTokenSpecV2Azure{ + Allow: []*types.ProvisionTokenSpecV2Azure_Rule{ + { + Subscription: defaultSubscription, + }, + }, + }, + JoinMethod: types.JoinMethodAzure, + }, + verify: mockVerifyToken(nil), + certs: []*x509.Certificate{tlsConfig.Certificate}, + assertError: require.NoError, + }, + { + name: "vm is in a different subscription than the token it provides", + requestTokenName: "test-token", + tokenSubscription: defaultSubscription, + tokenVMID: defaultVMID, + tokenResourceID: resourceID("some.other.provider", "some-other-subscription", defaultResourceGroup, defaultName), + tokenSpec: types.ProvisionTokenSpecV2{ + Roles: []types.SystemRole{types.RoleNode}, + Azure: &types.ProvisionTokenSpecV2Azure{ + Allow: []*types.ProvisionTokenSpecV2Azure_Rule{ + { + Subscription: defaultSubscription, + }, + }, + }, + JoinMethod: types.JoinMethodAzure, + }, + verify: mockVerifyToken(nil), + certs: []*x509.Certificate{tlsConfig.Certificate}, + assertError: require.NoError, + }, } for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { token, err := types.NewProvisionTokenFromSpec( - tc.tokenName, + "test-token", time.Now().Add(time.Minute), tc.tokenSpec) require.NoError(t, err) @@ -401,23 +476,28 @@ func TestAuth_RegisterUsingAzureMethod(t *testing.T) { require.NoError(t, a.DeleteToken(ctx, token.GetName())) }) - rsID := resourceID(tc.subscription, tc.resourceGroup, "test-vm") + rsID := tc.tokenResourceID + if rsID == "" { + rsID = vmResourceID(defaultSubscription, defaultResourceGroup, defaultName) + } accessToken, err := makeToken(rsID, a.clock.Now()) require.NoError(t, err) - vmResult := tc.vmResult - if vmResult == nil { - vmResult = &azure.VirtualMachine{ - ID: rsID, - Name: "test-vm", - Subscription: tc.subscription, - ResourceGroup: tc.resourceGroup, - VMID: tc.vmID, - } + vmClient := &mockAzureVMClient{ + vms: map[string]*azure.VirtualMachine{ + defaultResourceID: { + ID: defaultResourceID, + Name: defaultName, + Subscription: defaultSubscription, + ResourceGroup: defaultResourceGroup, + VMID: defaultVMID, + }, + }, } - - vmClient := &mockAzureVMClient{vm: vmResult} + getVMClient := makeVMClientGetter(map[string]*mockAzureVMClient{ + defaultSubscription: vmClient, + }) _, err = a.RegisterUsingAzureMethod(context.Background(), func(challenge string) (*proto.RegisterUsingAzureMethodRequest, error) { cfg := &azureChallengeResponseConfig{Challenge: challenge} @@ -427,8 +507,8 @@ func TestAuth_RegisterUsingAzureMethod(t *testing.T) { ad := attestedData{ Nonce: cfg.Challenge, - SubscriptionID: subID, - ID: tc.vmID, + SubscriptionID: tc.tokenSubscription, + ID: tc.tokenVMID, } adBytes, err := json.Marshal(&ad) require.NoError(t, err) @@ -456,7 +536,7 @@ func TestAuth_RegisterUsingAzureMethod(t *testing.T) { AccessToken: accessToken, } return req, tc.challengeResponseErr - }, withCerts(tc.certs), withVerifyFunc(tc.verify), withVMClient(vmClient)) + }, withCerts(tc.certs), withVerifyFunc(tc.verify), withVMClientGetter(getVMClient)) tc.assertError(t, err) }) } diff --git a/lib/auth/join_kubernetes.go b/lib/auth/join_kubernetes.go index a420da060ea3e..bcf9eeea05b56 100644 --- a/lib/auth/join_kubernetes.go +++ b/lib/auth/join_kubernetes.go @@ -31,7 +31,7 @@ import ( ) type k8sTokenReviewValidator interface { - Validate(context.Context, string) (*kubernetestoken.ValidationResult, error) + Validate(ctx context.Context, token, clusterName string) (*kubernetestoken.ValidationResult, error) } type k8sJWKSValidator func(now time.Time, jwksData []byte, clusterName string, token string) (*kubernetestoken.ValidationResult, error) @@ -52,14 +52,15 @@ func (a *Server) checkKubernetesJoinRequest(ctx context.Context, req *types.Regi ) } + clusterName, err := a.GetDomainName() + if err != nil { + return nil, trace.Wrap(err) + } + // Switch to join method subtype token validation. var result *kubernetestoken.ValidationResult switch token.Spec.Kubernetes.Type { case types.KubernetesJoinTypeStaticJWKS: - clusterName, err := a.GetDomainName() - if err != nil { - return nil, trace.Wrap(err) - } result, err = a.k8sJWKSValidator( a.clock.Now(), []byte(token.Spec.Kubernetes.StaticJWKS.JWKS), @@ -70,7 +71,7 @@ func (a *Server) checkKubernetesJoinRequest(ctx context.Context, req *types.Regi return nil, trace.WrapWithMessage(err, "reviewing kubernetes token with static_jwks") } case types.KubernetesJoinTypeInCluster, types.KubernetesJoinTypeUnspecified: - result, err = a.k8sTokenReviewValidator.Validate(ctx, req.IDToken) + result, err = a.k8sTokenReviewValidator.Validate(ctx, req.IDToken, clusterName) if err != nil { return nil, trace.WrapWithMessage(err, "reviewing kubernetes token with in_cluster") } diff --git a/lib/auth/join_kubernetes_test.go b/lib/auth/join_kubernetes_test.go index 5a9badc86747b..3af845ba5467f 100644 --- a/lib/auth/join_kubernetes_test.go +++ b/lib/auth/join_kubernetes_test.go @@ -35,7 +35,7 @@ type mockK8STokenReviewValidator struct { tokens map[string]*kubernetestoken.ValidationResult } -func (m *mockK8STokenReviewValidator) Validate(_ context.Context, token string) (*kubernetestoken.ValidationResult, error) { +func (m *mockK8STokenReviewValidator) Validate(_ context.Context, token, _ string) (*kubernetestoken.ValidationResult, error) { result, ok := m.tokens[token] if !ok { return nil, errMockInvalidToken diff --git a/lib/auth/tls_test.go b/lib/auth/tls_test.go index 266bfce970ee7..66bf53d4234bd 100644 --- a/lib/auth/tls_test.go +++ b/lib/auth/tls_test.go @@ -1231,36 +1231,60 @@ func TestRemoteUser(t *testing.T) { certPool, err := testSrv.CertPool() require.NoError(t, err) - remoteClient, err := remoteServer.NewRemoteClient( - TestUser(remoteUser.GetName()), testSrv.Addr(), certPool) + remoteClient, err := remoteServer.NewRemoteClient(TestUser(remoteUser.GetName()), testSrv.Addr(), certPool) require.NoError(t, err) // User is not authorized to perform any actions - // as local cluster does not trust the remote cluster yet + // as local cluster does not trust the remote cluster yet. _, err = remoteClient.GetDomainName(ctx) - require.True(t, trace.IsConnectionProblem(err)) + require.True(t, trace.IsConnectionProblem(err), "expected a connection problem error, got %v", err) - // Establish trust, the request will still fail, there is - // no role mapping set up + // Establish trust, the request will still fail, since there is + // no role mapping set up yet. err = testSrv.AuthServer.Trust(ctx, remoteServer, nil) require.NoError(t, err) - // Create fresh client now trust is established - remoteClient, err = remoteServer.NewRemoteClient( - TestUser(remoteUser.GetName()), testSrv.Addr(), certPool) + // Create a fresh client now that trust is established. + remoteClient, err = remoteServer.NewRemoteClient(TestUser(remoteUser.GetName()), testSrv.Addr(), certPool) require.NoError(t, err) + + // Validate that the client is not permitted to perform RPCs without a role map. + // The requests are attempted several times since it may take some time + // for the trust relationship to be established and CAs to be propagated. _, err = remoteClient.GetDomainName(ctx) - require.True(t, trace.IsAccessDenied(err)) + assert.Error(t, err) + if !trace.IsAccessDenied(err) { + require.EventuallyWithT(t, func(t *assert.CollectT) { + _, err = remoteClient.GetDomainName(ctx) + assert.True(t, trace.IsAccessDenied(err), "expected an access denied error, got %v", err) + }, 15*time.Second, 100*time.Millisecond) + } - // Establish trust and map remote role to local admin role + // Establish trust and map the remote role to the local admin role. _, localRole, err := CreateUserAndRole(testSrv.Auth(), "local-user", []string{"local-role"}, nil) require.NoError(t, err) err = testSrv.AuthServer.Trust(ctx, remoteServer, types.RoleMap{{Remote: remoteRole.GetName(), Local: []string{localRole.GetName()}}}) require.NoError(t, err) + // Validate that the client is now permitted to perform RPCs now that + // the role map was created. The requests are attempted several times since it + // may take some time for the trust relationship to be updated and CAs to be propagated. _, err = remoteClient.GetDomainName(ctx) - require.NoError(t, err) + if err == nil { + return + } + + // The only acceptable error here is AccessDenied caused by the role map + // not being propagated yet. Any other errors should fail the test. + if !trace.IsAccessDenied(err) { + require.NoError(t, err) + } + + require.EventuallyWithT(t, func(t *assert.CollectT) { + _, err = remoteClient.GetDomainName(ctx) + assert.NoError(t, err) + }, 15*time.Second, 100*time.Millisecond) } // TestNopUser tests user with no permissions except diff --git a/lib/auth/windows/ldap.go b/lib/auth/windows/ldap.go index 4970500c34628..195dd14f67606 100644 --- a/lib/auth/windows/ldap.go +++ b/lib/auth/windows/ldap.go @@ -184,9 +184,9 @@ func convertLDAPError(err error) error { return trace.ConnectionProblem(err, "network error") case ldap.LDAPResultOperationsError: if strings.Contains(err.Error(), "successful bind must be completed") { - return trace.AccessDenied( - "the LDAP server did not accept Teleport's client certificate, " + - "has the Teleport CA been imported correctly?") + return trace.NewAggregate(trace.AccessDenied( + "the LDAP server did not accept Teleport's client certificate, "+ + "has the Teleport CA been imported correctly?"), err) } case ldap.LDAPResultEntryAlreadyExists: return trace.AlreadyExists("LDAP object already exists: %v", err) diff --git a/lib/auth/windows/windows.go b/lib/auth/windows/windows.go index 5b198833410b5..dcf20188469bd 100644 --- a/lib/auth/windows/windows.go +++ b/lib/auth/windows/windows.go @@ -128,19 +128,26 @@ func getCertRequest(req *GenerateCredentialsRequest) (*certRequest, error) { return nil, trace.Wrap(err) } csrPEM := pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE REQUEST", Bytes: csrBytes}) - // Note: this CRL DN may or may not be the same DN published in updateCRL. - // - // There can be multiple AD domains connected to Teleport. Each - // windows_desktop_service is connected to a single AD domain and publishes - // CRLs in it. Each service can also handle RDP connections for a different - // domain, with the assumption that some other windows_desktop_service - // published a CRL there. - crlDN := crlDN(req.ClusterName, req.LDAPConfig, req.CAType) - return &certRequest{ - csrPEM: csrPEM, - crlEndpoint: fmt.Sprintf("ldap:///%s?certificateRevocationList?base?objectClass=cRLDistributionPoint", crlDN), - keyDER: keyDER, - }, nil + cr := &certRequest{ + csrPEM: csrPEM, + keyDER: keyDER, + } + + if !req.OmitCDP { + // Note: this CRL DN may or may not be the same DN published in updateCRL. + // + // There can be multiple AD domains connected to Teleport. Each + // windows_desktop_service is connected to a single AD domain and publishes + // CRLs in it. Each service can also handle RDP connections for a different + // domain, with the assumption that some other windows_desktop_service + // published a CRL there. + crlDN := crlDN(req.ClusterName, req.LDAPConfig, req.CAType) + + // TODO(zmb3) consider making Teleport itself the CDP (via HTTP) instead of LDAP + cr.crlEndpoint = fmt.Sprintf("ldap:///%s?certificateRevocationList?base?objectClass=cRLDistributionPoint", crlDN) + } + + return cr, nil } // AuthInterface is a subset of auth.ClientI @@ -181,6 +188,11 @@ type GenerateCredentialsRequest struct { CreateUser bool // Groups are groups that user should be member of Groups []string + + // OmitCDP can be used to prevent Teleport from issuing certs with a + // CRL Distribution Point (CDP). CDPs are required in user certificates + // for RDP, but they can be omitted for certs that are used for LDAP binds. + OmitCDP bool } // GenerateWindowsDesktopCredentials generates a private key / certificate pair for the given diff --git a/lib/automaticupgrades/version/basichttp.go b/lib/automaticupgrades/version/basichttp.go index 849ddc86108df..29bea8e325861 100644 --- a/lib/automaticupgrades/version/basichttp.go +++ b/lib/automaticupgrades/version/basichttp.go @@ -47,7 +47,7 @@ func (b *basicHTTPVersionClient) Get(ctx context.Context) (string, error) { versionURL := b.baseURL.JoinPath(constants.VersionPath) body, err := b.client.GetContent(ctx, *versionURL) if err != nil { - return "", trace.Wrap(err) + return "", trace.Wrap(err, "failed to get version from %s", versionURL) } response := string(body) if response == constants.NoVersion { diff --git a/lib/backend/test/suite.go b/lib/backend/test/suite.go index 798a69bfce1c2..79c8f8e561307 100644 --- a/lib/backend/test/suite.go +++ b/lib/backend/test/suite.go @@ -789,7 +789,7 @@ func testWatchersClose(t *testing.T, newBackend Constructor) { func testLocking(t *testing.T, newBackend Constructor) { tok1 := "token1" tok2 := "token2" - ttl := 5 * time.Second + ttl := 30 * time.Second uut, clock, err := newBackend() require.NoError(t, err) diff --git a/lib/client/api.go b/lib/client/api.go index abece10e4eab1..83529816c9e40 100644 --- a/lib/client/api.go +++ b/lib/client/api.go @@ -5318,9 +5318,6 @@ func parseMFAMode(in string) (wancli.AuthenticatorAttachment, error) { // NewKubernetesServiceClient connects to the proxy and returns an authenticated gRPC // client to the Kubernetes service. func (tc *TeleportClient) NewKubernetesServiceClient(ctx context.Context, clusterName string) (kubeproto.KubeServiceClient, error) { - if !tc.TLSRoutingEnabled { - return nil, trace.BadParameter("kube service is not supported if TLS routing is not enabled") - } // get tlsConfig to dial to proxy. tlsConfig, err := tc.LoadTLSConfig() if err != nil { diff --git a/lib/client/conntest/database.go b/lib/client/conntest/database.go index 3aa3284718768..40d2a9785c21c 100644 --- a/lib/client/conntest/database.go +++ b/lib/client/conntest/database.go @@ -31,6 +31,7 @@ import ( apiclient "github.com/gravitational/teleport/api/client" "github.com/gravitational/teleport/api/client/proto" + apidefaults "github.com/gravitational/teleport/api/defaults" "github.com/gravitational/teleport/api/types" "github.com/gravitational/teleport/lib/client" "github.com/gravitational/teleport/lib/client/conntest/database" @@ -136,8 +137,8 @@ func (s *DatabaseConnectionTester) TestConnection(ctx context.Context, req TestC types.ConnectionDiagnosticTrace_RBAC_DATABASE, "Database not found. "+ "Ensure your role grants access by adding it to the 'db_labels' property. "+ - "This can also happen when you don't have a Database Agent proxying the database - "+ - "you can fix that by adding the database labels to the 'db_service.resources.labels' in 'teleport.yaml' file of the database agent.", + "This can also happen when you don't have a Teleport Database Service proxying the database - "+ + "you can fix that by adding the database labels to the 'db_service.resources.labels' in 'teleport.yaml' file of the Database Service.", trace.NotFound("%s not found", req.ResourceName), ) if err != nil { @@ -167,7 +168,7 @@ func (s *DatabaseConnectionTester) TestConnection(ctx context.Context, req TestC if _, err := s.appendDiagnosticTrace(ctx, connectionDiagnosticID, types.ConnectionDiagnosticTrace_RBAC_DATABASE, - "A Database Agent is available to proxy the connection to the Database.", + "A Teleport Database Service is available to proxy the connection to the Database.", nil, ); err != nil { return nil, trace.Wrap(err) @@ -184,7 +185,9 @@ func (s *DatabaseConnectionTester) TestConnection(ctx context.Context, req TestC return nil, trace.Wrap(err) } - if pingErr := databasePinger.Ping(ctx, ping); pingErr != nil { + pingCtx, cancel := context.WithTimeout(ctx, apidefaults.DefaultIOTimeout) + defer cancel() + if pingErr := databasePinger.Ping(pingCtx, ping); pingErr != nil { connDiag, err := s.handlePingError(ctx, connectionDiagnosticID, pingErr, databasePinger) return connDiag, trace.Wrap(err) } @@ -273,7 +276,7 @@ func newPing(alpnProxyAddr, databaseUser, databaseName string) (database.PingPar func (s DatabaseConnectionTester) handlePingSuccess(ctx context.Context, connectionDiagnosticID string) (types.ConnectionDiagnostic, error) { if _, err := s.appendDiagnosticTrace(ctx, connectionDiagnosticID, types.ConnectionDiagnosticTrace_CONNECTIVITY, - "Database is accessible from the Database Agent.", + "Database is accessible from the Teleport Database Service.", nil, ); err != nil { return nil, trace.Wrap(err) @@ -341,12 +344,12 @@ func (s DatabaseConnectionTester) handlePingError(ctx context.Context, connectio return connDiag, nil } - if databasePinger.IsConnectionRefusedError(pingErr) { + if databasePinger.IsConnectionRefusedError(pingErr) || strings.Contains(pingErr.Error(), "context deadline exceeded") { connDiag, err := s.appendDiagnosticTrace(ctx, connectionDiagnosticID, types.ConnectionDiagnosticTrace_CONNECTIVITY, - "There was a connection problem between the Database Agent and the Database. "+ - "Ensure the Database is running and accessible from the Database Agent.", + "There was a connection problem between the Teleport Database Service and the database. "+ + "Ensure the database is running and accessible from the Database Service over the network.", pingErr, ) if err != nil { diff --git a/lib/client/mfa/cli.go b/lib/client/mfa/cli.go index 40127b314e06d..a956775961012 100644 --- a/lib/client/mfa/cli.go +++ b/lib/client/mfa/cli.go @@ -72,12 +72,6 @@ func NewCLIPrompt(cfg *CLIPromptConfig) *CLIPrompt { } } -// NewCLIPromptV2 returns a new CLI mfa prompt with the given config. -// TODO(Joerger): remove once /e is no longer dependent on this. -func NewCLIPromptV2(cfg *CLIPromptConfig) *CLIPrompt { - return NewCLIPrompt(cfg) -} - func (c *CLIPrompt) stdin() prompt.StdinReader { if c.cfg.StdinFunc == nil { return prompt.Stdin() diff --git a/lib/config/configuration_test.go b/lib/config/configuration_test.go index 8de8f9a10d6ea..f66fe33109904 100644 --- a/lib/config/configuration_test.go +++ b/lib/config/configuration_test.go @@ -1923,11 +1923,6 @@ func TestLicenseFile(t *testing.T) { cfg := servicecfg.MakeDefaultConfig() - // the license file should be empty by default, as we can only fill - // in the default (/license.pem) after we know what the - // data dir is supposed to be - require.Empty(t, cfg.Auth.LicenseFile) - for i, tc := range testCases { t.Run(fmt.Sprintf("test%d", i), func(t *testing.T) { fc := new(FileConfig) @@ -1941,6 +1936,12 @@ func TestLicenseFile(t *testing.T) { } } +func TestLicenseFileNoConfig(t *testing.T) { + cfg := servicecfg.MakeDefaultConfig() + require.NoError(t, Configure(new(CommandLineFlags), cfg, false /* legacy app flags */)) + require.Equal(t, filepath.Join(defaults.DataDir, defaults.LicenseFile), cfg.Auth.LicenseFile) +} + // TestFIPS makes sure configuration is correctly updated/enforced when in // FedRAMP/FIPS 140-2 mode. func TestFIPS(t *testing.T) { @@ -3662,10 +3663,6 @@ func TestAuthHostedPlugins(t *testing.T) { applyErr: require.NoError, assert: func(t *testing.T, p servicecfg.HostedPluginsConfig) { require.True(t, p.Enabled) - require.NotNil(t, p.OAuthProviders.Slack) - require.Equal(t, "foo", p.OAuthProviders.Slack.ID) - require.Equal(t, "bar", p.OAuthProviders.Slack.Secret) - require.NotNil(t, p.OAuthProviders.SlackCredentials) require.Equal(t, "foo", p.OAuthProviders.SlackCredentials.ClientID) require.Equal(t, "bar", p.OAuthProviders.SlackCredentials.ClientSecret) diff --git a/lib/config/fileconf.go b/lib/config/fileconf.go index 510d87e4f9f8f..5d12685720606 100644 --- a/lib/config/fileconf.go +++ b/lib/config/fileconf.go @@ -33,7 +33,6 @@ import ( "strings" "time" - "github.com/coreos/go-oidc/oauth2" "github.com/gravitational/trace" log "github.com/sirupsen/logrus" "golang.org/x/crypto/acme" @@ -1334,10 +1333,6 @@ func (p *PluginOAuthProviders) Parse() (servicecfg.PluginOAuthProviders, error) if err != nil { return out, trace.Wrap(err) } - out.Slack = &oauth2.ClientCredentials{ - ID: slack.ClientID, - Secret: slack.ClientSecret, - } out.SlackCredentials = slack } return out, nil diff --git a/lib/events/api.go b/lib/events/api.go index a2e5673fc9d99..6f0c3b3bf6924 100644 --- a/lib/events/api.go +++ b/lib/events/api.go @@ -773,21 +773,21 @@ const ( // IntegrationCreateEvent is emitted when an integration resource is created. IntegrationCreateEvent = "integration.create" - //IntegrationUpdateEvent is emitted when an integration resource is updated. + // IntegrationUpdateEvent is emitted when an integration resource is updated. IntegrationUpdateEvent = "integration.update" // IntegrationDeleteEvent is emitted when an integration resource is deleted. IntegrationDeleteEvent = "integration.delete" // PluginCreateEvent is emitted when a plugin resource is created. PluginCreateEvent = "plugin.create" - //PluginUpdateEvent is emitted when a plugin resource is updated. + // PluginUpdateEvent is emitted when a plugin resource is updated. PluginUpdateEvent = "plugin.update" // PluginDeleteEvent is emitted when a plugin resource is deleted. PluginDeleteEvent = "plugin.delete" // CrownJewelCreateEvent is emitted when a crown jewel resource is created. CrownJewelCreateEvent = "access_graph.crown_jewel.create" - //CrownJewelUpdateEvent is emitted when a crown jewel resource is updated. + // CrownJewelUpdateEvent is emitted when a crown jewel resource is updated. CrownJewelUpdateEvent = "access_graph.crown_jewel.update" // CrownJewelDeleteEvent is emitted when a crown jewel resource is deleted. CrownJewelDeleteEvent = "access_graph.crown_jewel.delete" diff --git a/lib/events/athena/consumer.go b/lib/events/athena/consumer.go index 0ee6f43a68492..38fb1e6aee52c 100644 --- a/lib/events/athena/consumer.go +++ b/lib/events/athena/consumer.go @@ -39,7 +39,7 @@ import ( sqsTypes "github.com/aws/aws-sdk-go-v2/service/sqs/types" "github.com/google/uuid" "github.com/gravitational/trace" - "github.com/segmentio/parquet-go" + "github.com/parquet-go/parquet-go" log "github.com/sirupsen/logrus" "github.com/gravitational/teleport" diff --git a/lib/events/athena/consumer_test.go b/lib/events/athena/consumer_test.go index cdec2359e1194..3f5e2241fdfd1 100644 --- a/lib/events/athena/consumer_test.go +++ b/lib/events/athena/consumer_test.go @@ -41,7 +41,7 @@ import ( "github.com/google/uuid" "github.com/gravitational/trace" "github.com/jonboulle/clockwork" - "github.com/segmentio/parquet-go" + "github.com/parquet-go/parquet-go" "github.com/stretchr/testify/require" "github.com/gravitational/teleport" diff --git a/lib/events/athena/querier.go b/lib/events/athena/querier.go index 1f4e1b6a6742a..78ea2a54d8898 100644 --- a/lib/events/athena/querier.go +++ b/lib/events/athena/querier.go @@ -39,7 +39,7 @@ import ( "github.com/google/uuid" "github.com/gravitational/trace" "github.com/jonboulle/clockwork" - "github.com/segmentio/parquet-go" + "github.com/parquet-go/parquet-go" log "github.com/sirupsen/logrus" "go.opentelemetry.io/otel/attribute" oteltrace "go.opentelemetry.io/otel/trace" diff --git a/lib/events/codes.go b/lib/events/codes.go index 969eb1a7daf8b..6044c3b62b4d2 100644 --- a/lib/events/codes.go +++ b/lib/events/codes.go @@ -284,6 +284,8 @@ const ( ExecFailureCode = "T3002E" // PortForwardCode is the port forward event code. PortForwardCode = "T3003I" + // PortForwardStopCode is the port forward stop event code. + PortForwardStopCode = "T3003S" // PortForwardFailureCode is the port forward failure event code. PortForwardFailureCode = "T3003E" // SCPDownloadCode is the file download event code. diff --git a/lib/events/events_test.go b/lib/events/events_test.go index 273ea8dced941..cf908f0491d65 100644 --- a/lib/events/events_test.go +++ b/lib/events/events_test.go @@ -623,7 +623,7 @@ func TestJSON(t *testing.T) { }, { name: "rejected subsystem", - json: `{"ei":0,"cluster_name":"test","addr.local":"127.0.0.1:57518","addr.remote":"127.0.0.1:3022","code":"T3001E","event":"subsystem","exitError":"some error","login":"alice","name":"proxy","time":"2020-04-15T20:28:18Z","uid":"3129a5ae-ee1e-4b39-8d7c-a0a3f218e7dc","user":"alice@example.com"}`, + json: `{"ei":0,"cluster_name":"test","addr.local":"127.0.0.1:57518","addr.remote":"127.0.0.1:3022","code":"T3001E","event":"subsystem","exitError":"some error","forwarded_by":"abc","login":"alice","name":"proxy","server_id":"123","time":"2020-04-15T20:28:18Z","uid":"3129a5ae-ee1e-4b39-8d7c-a0a3f218e7dc","user":"alice@example.com"}`, event: apievents.Subsystem{ Metadata: apievents.Metadata{ ID: "3129a5ae-ee1e-4b39-8d7c-a0a3f218e7dc", @@ -640,6 +640,10 @@ func TestJSON(t *testing.T) { LocalAddr: "127.0.0.1:57518", RemoteAddr: "127.0.0.1:3022", }, + ServerMetadata: apievents.ServerMetadata{ + ServerID: "123", + ForwardedBy: "abc", + }, Name: "proxy", Error: "some error", }, diff --git a/lib/events/pgevents/pgevents.go b/lib/events/pgevents/pgevents.go index e697734fac537..2c20cc841dbc6 100644 --- a/lib/events/pgevents/pgevents.go +++ b/lib/events/pgevents/pgevents.go @@ -268,8 +268,9 @@ func New(ctx context.Context, cfg Config) (*Log, error) { } func configureCockroachDBRetention(ctx context.Context, cfg *Config, pool *pgxpool.Pool) error { - // Arbitrary timeout to make sure we don't end up hanging for some reason - ctx, cancel := context.WithTimeout(ctx, 5*time.Second) + // The first run of this query on multi region setup can sometimes take more than 5 seconds. + // The subsequent runs are faster (a couple of seconds at most). + ctx, cancel := context.WithTimeout(ctx, 30*time.Second) defer cancel() var expiryQuery string diff --git a/lib/expression/evaluator_test.go b/lib/expression/evaluator_test.go index afc003921df8d..99d98346440d4 100644 --- a/lib/expression/evaluator_test.go +++ b/lib/expression/evaluator_test.go @@ -29,15 +29,13 @@ import ( "github.com/gravitational/teleport/lib/utils/typical" ) -func TestEvaluateTraitsMap(t *testing.T) { - t.Parallel() - - baseInputTraits := map[string][]string{ +var ( + baseInputTraits = map[string][]string{ "groups": []string{"devs", "security"}, "username": []string{"alice"}, } - tests := []struct { + testCases = []struct { desc string expressions map[string][]string inputTraits map[string][]string @@ -253,7 +251,31 @@ func TestEvaluateTraitsMap(t *testing.T) { "localEmails": {"alice", "bob", "charlie", "darrell", "esther", "frank"}, }, }, + { + desc: "methods on nil set from nonexistent map key", + expressions: map[string][]string{ + "a": {`user.spec.traits["a"].add("a")`}, + "b": {`ifelse(user.spec.traits["b"].contains("b"), set("z"), set("b"))`}, + "c": {`ifelse(user.spec.traits["c"].contains_any(set("c")), set("z"), set("c"))`}, + "d": {`ifelse(user.spec.traits["d"].isempty(), set("d"), set("z"))`}, + "e": {`user.spec.traits["e"].remove("e")`}, + "f": {`user.spec.traits["f"].remove("f").add("f")`}, + }, + inputTraits: baseInputTraits, + expectedTraits: map[string][]string{ + "a": {"a"}, + "b": {"b"}, + "c": {"c"}, + "d": {"d"}, + "e": {}, + "f": {"f"}, + }, + }, } +) + +func TestEvaluateTraitsMap(t *testing.T) { + t.Parallel() type evaluationEnv struct { Traits Dict @@ -270,7 +292,7 @@ func TestEvaluateTraitsMap(t *testing.T) { attributeParser, err := NewTraitsExpressionParser[evaluationEnv](typicalEnvVar) require.NoError(t, err) - for _, tc := range tests { + for _, tc := range testCases { t.Run(tc.desc, func(t *testing.T) { result, err := EvaluateTraitsMap[evaluationEnv]( evaluationEnv{ @@ -292,3 +314,35 @@ func TestEvaluateTraitsMap(t *testing.T) { }) } } + +func FuzzTraitsExpressionParser(f *testing.F) { + type evaluationEnv struct { + Traits Dict + } + parser, err := NewTraitsExpressionParser[evaluationEnv](map[string]typical.Variable{ + "true": true, + "false": false, + "user.spec.traits": typical.DynamicMap[evaluationEnv, Set](func(env evaluationEnv) (Dict, error) { + return env.Traits, nil + }), + }) + require.NoError(f, err) + for _, tc := range testCases { + for _, expressions := range tc.expressions { + for _, expression := range expressions { + f.Add(expression) + } + } + } + f.Fuzz(func(t *testing.T, expression string) { + expr, err := parser.Parse(expression) + if err != nil { + // Many/most fuzzed expressions won't parse, as long as we didn't + // panic that's okay. + return + } + // If the expression parsed, try to evaluate it, errors are okay just + // make sure we don't panic. + _, _ = expr.Evaluate(evaluationEnv{DictFromStringSliceMap(baseInputTraits)}) + }) +} diff --git a/lib/expression/set.go b/lib/expression/set.go index f1c5b25a931f5..6018ff496f202 100644 --- a/lib/expression/set.go +++ b/lib/expression/set.go @@ -35,6 +35,9 @@ func NewSet(values ...string) Set { } func (s Set) add(values ...string) Set { + if len(s) == 0 { + return NewSet(values...) + } out := s.clone() for _, value := range values { out[value] = struct{}{} diff --git a/lib/integrations/awsoidc/eks_enroll_clusters.go b/lib/integrations/awsoidc/eks_enroll_clusters.go index e23a3c3ee7799..587ec248538e0 100644 --- a/lib/integrations/awsoidc/eks_enroll_clusters.go +++ b/lib/integrations/awsoidc/eks_enroll_clusters.go @@ -552,12 +552,13 @@ func checkAgentAlreadyInstalled(ctx context.Context, actionConfig *action.Config var err error // We setup a little backoff loop because sometimes access entry auth needs a bit more time to propagate and take // effect, so we could get errors when trying to access cluster right after giving us permissions to do so. + // From real scenarios, we've seen this taking as long as 20 seconds. for attempt := 1; attempt <= 3; attempt++ { listCmd := action.NewList(actionConfig) releases, err = listCmd.Run() if err != nil { select { - case <-time.After(time.Duration(attempt) * time.Second): + case <-time.After(time.Duration(attempt*5) * time.Second): case <-ctx.Done(): return false, trace.NewAggregate(err, ctx.Err()) } diff --git a/lib/integrations/awsoidc/eks_list_clusters.go b/lib/integrations/awsoidc/eks_list_clusters.go index 4079f98034b1b..f24c7ec1f6102 100644 --- a/lib/integrations/awsoidc/eks_list_clusters.go +++ b/lib/integrations/awsoidc/eks_list_clusters.go @@ -79,9 +79,9 @@ type EKSCluster struct { // https://aws.amazon.com/blogs/containers/a-deep-dive-into-simplified-amazon-eks-access-management-controls/ AuthenticationMode string - // EndpointPublicAddress indicates whether the Cluster's VPC Config has its endpoint as a public address. + // EndpointPublicAccess indicates whether the Cluster's VPC Config has its endpoint as a public address. // For Teleport Cloud, this is required to access the cluster and proceed with the installation. - EndpointPublicAddress bool + EndpointPublicAccess bool } // ListEKSClustersResponse contains a page of AWS EKS Clusters. @@ -171,14 +171,14 @@ func ListEKSClusters(ctx context.Context, clt ListEKSClustersClient, req ListEKS } ret.Clusters = append(ret.Clusters, EKSCluster{ - Name: aws.ToString(cluster.Name), - Region: req.Region, - Arn: aws.ToString(cluster.Arn), - Labels: cluster.Tags, - JoinLabels: extraLabels, - Status: strings.ToLower(string(cluster.Status)), - AuthenticationMode: string(cluster.AccessConfig.AuthenticationMode), - EndpointPublicAddress: cluster.ResourcesVpcConfig.EndpointPublicAccess, + Name: aws.ToString(cluster.Name), + Region: req.Region, + Arn: aws.ToString(cluster.Arn), + Labels: cluster.Tags, + JoinLabels: extraLabels, + Status: strings.ToLower(string(cluster.Status)), + AuthenticationMode: string(cluster.AccessConfig.AuthenticationMode), + EndpointPublicAccess: cluster.ResourcesVpcConfig.EndpointPublicAccess, }) return nil }) diff --git a/lib/integrations/awsoidc/eks_list_clusters_test.go b/lib/integrations/awsoidc/eks_list_clusters_test.go index 64298bdc6fc4d..9fe472d8cb659 100644 --- a/lib/integrations/awsoidc/eks_list_clusters_test.go +++ b/lib/integrations/awsoidc/eks_list_clusters_test.go @@ -178,9 +178,9 @@ func TestListEKSClusters(t *testing.T) { "region": "us-east-1", "teleport.dev/cloud": "AWS", }, - Status: "active", - AuthenticationMode: "API", - EndpointPublicAddress: true, + Status: "active", + AuthenticationMode: "API", + EndpointPublicAccess: true, }, }, expectedFetchingErrors: map[string]error{}, @@ -224,9 +224,9 @@ func TestListEKSClusters(t *testing.T) { "region": "us-east-1", "teleport.dev/cloud": "AWS", }, - Status: "active", - AuthenticationMode: "API", - EndpointPublicAddress: true, + Status: "active", + AuthenticationMode: "API", + EndpointPublicAccess: true, }, { Name: "EKS2", @@ -238,9 +238,9 @@ func TestListEKSClusters(t *testing.T) { "region": "us-east-1", "teleport.dev/cloud": "AWS", }, - Status: "active", - AuthenticationMode: "API", - EndpointPublicAddress: true, + Status: "active", + AuthenticationMode: "API", + EndpointPublicAccess: true, }, }, expectedFetchingErrors: map[string]error{}, @@ -296,9 +296,9 @@ func TestListEKSClusters(t *testing.T) { "region": "us-east-1", "teleport.dev/cloud": "AWS", }, - Status: "active", - AuthenticationMode: "API", - EndpointPublicAddress: true, + Status: "active", + AuthenticationMode: "API", + EndpointPublicAccess: true, }, }, expectedFetchingErrors: map[string]error{"erroredCluster": errors.New("erroredCluster")}, diff --git a/lib/jwt/jwt.go b/lib/jwt/jwt.go index 27d2abb91240d..e797b2e4f73ef 100644 --- a/lib/jwt/jwt.go +++ b/lib/jwt/jwt.go @@ -31,7 +31,6 @@ import ( "strings" "time" - "github.com/coreos/go-oidc" "github.com/go-jose/go-jose/v3" "github.com/go-jose/go-jose/v3/cryptosigner" "github.com/go-jose/go-jose/v3/jwt" @@ -573,11 +572,18 @@ func GenerateKeyPair() ([]byte, []byte, error) { return public, private, nil } +// IDToken allows introspecting claims from an OpenID Connect +// ID Token. +type IDToken interface { + // Claims unmarshals the raw JSON payload of the ID Token into a provided struct. + Claims(v any) error +} + // CheckNotBefore ensures the token was not issued in the future. // https://www.rfc-editor.org/rfc/rfc7519#section-4.1.5 // 4.1.5. "nbf" (Not Before) Claim // TODO(strideynet): upstream support for `nbf` into the go-oidc lib. -func CheckNotBefore(now time.Time, leeway time.Duration, token *oidc.IDToken) error { +func CheckNotBefore(now time.Time, leeway time.Duration, token IDToken) error { claims := struct { NotBefore *JSONTime `json:"nbf"` }{} diff --git a/lib/kube/proxy/constants.go b/lib/kube/proxy/constants.go index 5eb7ff5b9f9b3..5a148276bff69 100644 --- a/lib/kube/proxy/constants.go +++ b/lib/kube/proxy/constants.go @@ -28,8 +28,6 @@ const ( // DefaultStreamCreationTimeout DefaultStreamCreationTimeout = 30 * time.Second - - IdleTimeout = 15 * time.Minute ) // These constants are for remote command execution and port forwarding and are diff --git a/lib/kube/proxy/ephemeral_containers.go b/lib/kube/proxy/ephemeral_containers.go index e39cb7dbca3a8..1c9ae08e417a4 100644 --- a/lib/kube/proxy/ephemeral_containers.go +++ b/lib/kube/proxy/ephemeral_containers.go @@ -104,7 +104,7 @@ func (f *Forwarder) ephemeralContainers(authCtx *authContext, w http.ResponseWri f.log.Errorf("Failed to set up forwarding headers: %v.", err) return nil, trace.Wrap(err) } - if !f.isLocalKubeCluster(sess.teleportCluster.isRemote, sess.kubeClusterName) { + if !sess.isLocalKubernetesCluster { sess.forwarder.ServeHTTP(w, req) return nil, nil } diff --git a/lib/kube/proxy/forwarder.go b/lib/kube/proxy/forwarder.go index 14751aaa1f9cc..6ad431886bb1f 100644 --- a/lib/kube/proxy/forwarder.go +++ b/lib/kube/proxy/forwarder.go @@ -423,6 +423,10 @@ type authContext struct { kubeServers []types.KubeServer // apiResource holds the information about the requested API resource. apiResource apiResource + // isLocalKubernetesCluster is true if the target cluster is served by this teleport service. + // It is false if the target cluster is served by another teleport service or a different + // Teleport cluster. + isLocalKubernetesCluster bool } func (c authContext) String() string { @@ -760,7 +764,8 @@ func (f *Forwarder) setupContext( return nil, trace.NotFound("Kubernetes cluster %q not found", kubeCluster) } } - if f.isLocalKubeCluster(isRemoteCluster, kubeCluster) { + isLocalKubernetesCluster := f.isLocalKubeCluster(isRemoteCluster, kubeCluster) + if isLocalKubernetesCluster { kubeResource, apiResource, err = f.parseResourceFromRequest(req, kubeCluster) if err != nil { return nil, trace.Wrap(err) @@ -794,10 +799,11 @@ func (f *Forwarder) setupContext( remoteAddr: utils.NetAddr{AddrNetwork: "tcp", Addr: req.RemoteAddr}, isRemote: isRemoteCluster, }, - kubeServers: kubeServers, - requestVerb: apiResource.getVerb(req), - apiResource: apiResource, - kubeResource: kubeResource, + kubeServers: kubeServers, + requestVerb: apiResource.getVerb(req), + apiResource: apiResource, + kubeResource: kubeResource, + isLocalKubernetesCluster: isLocalKubernetesCluster, }, nil } @@ -850,9 +856,11 @@ func (f *Forwarder) emitAuditEvent(req *http.Request, sess *clusterSession, stat ) defer span.End() - if sess.noAuditEvents { + // If the session is not local, don't emit the event. + if !sess.isLocalKubernetesCluster { return } + r := sess.apiResource if r.skipEvent { return @@ -1146,7 +1154,7 @@ func (f *Forwarder) join(ctx *authContext, w http.ResponseWriter, req *http.Requ return nil, trace.Wrap(err) } - if !f.isLocalKubeCluster(ctx.teleportCluster.isRemote, ctx.kubeClusterName) { + if !sess.isLocalKubernetesCluster { return f.remoteJoin(ctx, w, req, p, sess) } @@ -1630,6 +1638,7 @@ func (f *Forwarder) exec(authCtx *authContext, w http.ResponseWriter, req *http. httpResponseWriter: w, context: ctx, pingPeriod: f.cfg.ConnPingPeriod, + idleTimeout: sess.clientIdleTimeout, onResize: func(remotecommand.TerminalSize) {}, } @@ -1639,7 +1648,7 @@ func (f *Forwarder) exec(authCtx *authContext, w http.ResponseWriter, req *http. return upgradeRequestToRemoteCommandProxy(request, func(proxy *remoteCommandProxy) error { - if sess.noAuditEvents { + if !sess.isLocalKubernetesCluster { // We're forwarding this to another kubernetes_service instance, let it handle multiplexing. return f.remoteExec(authCtx, w, req, p, sess, request, proxy) } @@ -1735,10 +1744,12 @@ func (f *Forwarder) portForward(authCtx *authContext, w http.ResponseWriter, req return nil, trace.Wrap(err) } + auditSent := map[string]bool{} // Set of `addr`. Can be multiple ports on single call. Using bool to simplify the check. onPortForward := func(addr string, success bool) { - if sess.noAuditEvents { + if !sess.isLocalKubernetesCluster || auditSent[addr] { return } + auditSent[addr] = true portForward := &apievents.PortForward{ Metadata: apievents.Metadata{ Type: events.PortForwardEvent, @@ -1754,6 +1765,11 @@ func (f *Forwarder) portForward(authCtx *authContext, w http.ResponseWriter, req Status: apievents.Status{ Success: success, }, + KubernetesClusterMetadata: sess.eventClusterMeta(req), + KubernetesPodMetadata: apievents.KubernetesPodMetadata{ + KubernetesPodNamespace: p.ByName("podNamespace"), + KubernetesPodName: p.ByName("podName"), + }, } if !success { portForward.Code = events.PortForwardFailureCode @@ -1762,6 +1778,31 @@ func (f *Forwarder) portForward(authCtx *authContext, w http.ResponseWriter, req f.log.WithError(err).Warn("Failed to emit event.") } } + defer func() { + for addr := range auditSent { + portForward := &apievents.PortForward{ + Metadata: apievents.Metadata{ + Type: events.PortForwardEvent, + Code: events.PortForwardStopCode, + }, + UserMetadata: authCtx.eventUserMeta(), + ConnectionMetadata: apievents.ConnectionMetadata{ + LocalAddr: sess.kubeAddress, + RemoteAddr: req.RemoteAddr, + Protocol: events.EventProtocolKube, + }, + Addr: addr, + KubernetesClusterMetadata: sess.eventClusterMeta(req), + KubernetesPodMetadata: apievents.KubernetesPodMetadata{ + KubernetesPodNamespace: p.ByName("podNamespace"), + KubernetesPodName: p.ByName("podName"), + }, + } + if err := f.cfg.Emitter.EmitAuditEvent(f.ctx, portForward); err != nil { + f.log.WithError(err).Warn("Failed to emit event.") + } + } + }() q := req.URL.Query() request := portForwardRequest{ @@ -1774,6 +1815,7 @@ func (f *Forwarder) portForward(authCtx *authContext, w http.ResponseWriter, req onPortForward: onPortForward, targetDialer: dialer, pingPeriod: f.cfg.ConnPingPeriod, + idleTimeout: sess.clientIdleTimeout, } f.log.Debugf("Starting %v.", request) err = runPortForwarding(request) @@ -2007,7 +2049,7 @@ func (f *Forwarder) catchAll(authCtx *authContext, w http.ResponseWriter, req *h return nil, trace.Wrap(err) } - isLocalKubeCluster := f.isLocalKubeCluster(sess.teleportCluster.isRemote, sess.kubeClusterName) + isLocalKubeCluster := sess.isLocalKubernetesCluster isListRequest := authCtx.requestVerb == types.KubeVerbList // Watch requests can be send to a single resource or to a collection of resources. // isWatchingCollectionRequest is true when the request is a watch request and @@ -2104,10 +2146,8 @@ type clusterSession struct { // nil otherwise. kubeAPICreds kubeCreds forwarder *reverseproxy.Forwarder - // noAuditEvents is true if this teleport service should leave audit event - // logging to another service. - noAuditEvents bool - targetAddr string + // targetAddr is the address of the target cluster. + targetAddr string // kubeAddress is the address of this session's active connection (if there is one) kubeAddress string // upgradeToHTTP2 indicates whether the transport should be configured to use HTTP2. @@ -2316,11 +2356,8 @@ func (f *Forwarder) newClusterSessionLocal(ctx context.Context, authCtx authCont func (f *Forwarder) newClusterSessionDirect(ctx context.Context, authCtx authContext) (*clusterSession, error) { connCtx, cancel := context.WithCancelCause(ctx) return &clusterSession{ - parent: f, - authContext: authCtx, - // This session talks to a kubernetes_service, which should handle - // audit logging. Avoid duplicate logging. - noAuditEvents: true, + parent: f, + authContext: authCtx, requestContext: ctx, connCtx: connCtx, connMonitorCancel: cancel, @@ -2344,7 +2381,7 @@ func (f *Forwarder) makeSessionForwarder(sess *clusterSession) (*reverseproxy.Fo reverseproxy.WithLogger(f.log), reverseproxy.WithErrorHandler(f.formatForwardResponseError), } - if f.isLocalKubeCluster(sess.teleportCluster.isRemote, sess.kubeClusterName) { + if sess.isLocalKubernetesCluster { // If the target cluster is local, i.e. the cluster that is served by this // teleport service, then we set up the forwarder to allow re-writing // the response to the client to include user friendly error messages. diff --git a/lib/kube/proxy/portforward_spdy.go b/lib/kube/proxy/portforward_spdy.go index f760391668a5f..20847382c0eae 100644 --- a/lib/kube/proxy/portforward_spdy.go +++ b/lib/kube/proxy/portforward_spdy.go @@ -46,6 +46,7 @@ type portForwardRequest struct { context context.Context targetDialer httpstream.Dialer pingPeriod time.Duration + idleTimeout time.Duration } func (p portForwardRequest) String() string { @@ -103,8 +104,10 @@ func runPortForwardingHTTPStreams(req portForwardRequest) error { targetConn: targetConn, } defer h.Close() - h.Debugf("Setting port forwarding streaming connection idle timeout to %v", IdleTimeout) - conn.SetIdleTimeout(IdleTimeout) + + h.Debugf("Setting port forwarding streaming connection idle timeout to %s.", req.idleTimeout) + conn.SetIdleTimeout(req.idleTimeout) + h.run() return nil } diff --git a/lib/kube/proxy/portforward_websocket.go b/lib/kube/proxy/portforward_websocket.go index ec3e54606c2df..5cba5d99a6913 100644 --- a/lib/kube/proxy/portforward_websocket.go +++ b/lib/kube/proxy/portforward_websocket.go @@ -88,7 +88,8 @@ func runPortForwardingWebSocket(req portForwardRequest) error { Channels: channels, }, }) - conn.SetIdleTimeout(IdleTimeout) + + conn.SetIdleTimeout(req.idleTimeout) // Upgrade the request and create the virtual streams. _, streams, err := conn.Open( diff --git a/lib/kube/proxy/remotecommand.go b/lib/kube/proxy/remotecommand.go index 4613fc2c37713..44431a3efd9cb 100644 --- a/lib/kube/proxy/remotecommand.go +++ b/lib/kube/proxy/remotecommand.go @@ -56,6 +56,7 @@ type remoteCommandRequest struct { onResize resizeCallback context context.Context pingPeriod time.Duration + idleTimeout time.Duration } func (req remoteCommandRequest) eventPodMeta(ctx context.Context, creds kubeCreds) apievents.KubernetesPodMetadata { @@ -153,7 +154,7 @@ func createSPDYStreams(req remoteCommandRequest) (*remoteCommandProxy, error) { return nil, trace.ConnectionProblem(trace.BadParameter("missing connection"), "missing connection") } - conn.SetIdleTimeout(IdleTimeout) + conn.SetIdleTimeout(req.idleTimeout) var handler protocolHandler switch protocol { diff --git a/lib/kube/proxy/remotecommand_websocket.go b/lib/kube/proxy/remotecommand_websocket.go index 5b08407f79cc2..abc5d3f446fdf 100644 --- a/lib/kube/proxy/remotecommand_websocket.go +++ b/lib/kube/proxy/remotecommand_websocket.go @@ -109,7 +109,9 @@ func createWebSocketStreams(req remoteCommandRequest) (*remoteCommandProxy, erro Channels: channels, }, }) - conn.SetIdleTimeout(IdleTimeout) + + conn.SetIdleTimeout(req.idleTimeout) + negotiatedProtocol, streams, err := conn.Open( responsewriter.GetOriginal(req.httpResponseWriter), req.httpRequest, diff --git a/lib/kube/proxy/resource_deletecollection.go b/lib/kube/proxy/resource_deletecollection.go index dced5822ffc71..89c658c551c05 100644 --- a/lib/kube/proxy/resource_deletecollection.go +++ b/lib/kube/proxy/resource_deletecollection.go @@ -62,7 +62,7 @@ func (f *Forwarder) deleteResourcesCollection(sess *clusterSession, w http.Respo defer span.End() req = req.WithContext(ctx) var ( - isLocalKubeCluster = f.isLocalKubeCluster(sess.teleportCluster.isRemote, sess.kubeClusterName) + isLocalKubeCluster = sess.isLocalKubernetesCluster kubeObjType string namespace string ) diff --git a/lib/kube/proxy/resource_list.go b/lib/kube/proxy/resource_list.go index 97b9dd0390b12..ad805b0066031 100644 --- a/lib/kube/proxy/resource_list.go +++ b/lib/kube/proxy/resource_list.go @@ -52,7 +52,7 @@ func (f *Forwarder) listResources(sess *clusterSession, w http.ResponseWriter, r req = req.WithContext(ctx) - isLocalKubeCluster := f.isLocalKubeCluster(sess.teleportCluster.isRemote, sess.kubeClusterName) + isLocalKubeCluster := sess.isLocalKubernetesCluster supportsType := false if isLocalKubeCluster { _, supportsType = sess.rbacSupportedResources.getTeleportResourceKindFromAPIResource(sess.apiResource) diff --git a/lib/kube/proxy/self_subject_reviews.go b/lib/kube/proxy/self_subject_reviews.go index fe8b463acea33..2130cfdaed034 100644 --- a/lib/kube/proxy/self_subject_reviews.go +++ b/lib/kube/proxy/self_subject_reviews.go @@ -80,7 +80,7 @@ func (f *Forwarder) selfSubjectAccessReviews(authCtx *authContext, w http.Respon // only allow self subject access reviews for the service that proxies the // request to the kubernetes API server. - if f.isLocalKubeCluster(sess.teleportCluster.isRemote, sess.kubeClusterName) { + if sess.isLocalKubernetesCluster { if err := f.validateSelfSubjectAccessReview(sess, w, req); trace.IsAccessDenied(err) { return nil, nil } else if err != nil { diff --git a/lib/kube/proxy/sess.go b/lib/kube/proxy/sess.go index 54ed10105b8e7..8a12d764fba99 100644 --- a/lib/kube/proxy/sess.go +++ b/lib/kube/proxy/sess.go @@ -748,7 +748,7 @@ func (s *session) lockedSetupLaunch(request *remoteCommandRequest, eventPodMeta s.started = true sessionStart := s.forwarder.cfg.Clock.Now().UTC() - if !s.sess.noAuditEvents { + if s.sess.isLocalKubernetesCluster { s.terminalSizeQueue.callback = func(termSize terminalResizeMessage) { s.mu.Lock() defer s.mu.Unlock() diff --git a/lib/kubernetestoken/token_validator.go b/lib/kubernetestoken/token_validator.go index 6b43d07eb2721..6e9316ed835ca 100644 --- a/lib/kubernetestoken/token_validator.go +++ b/lib/kubernetestoken/token_validator.go @@ -37,6 +37,7 @@ import ( "k8s.io/client-go/rest" "github.com/gravitational/teleport/api/types" + "github.com/gravitational/teleport/api/utils" ) const ( @@ -83,35 +84,65 @@ func (c *ValidationResult) JoinAuditAttributes() (map[string]interface{}, error) // Kubernetes TokenRequest API endpoint. type TokenReviewValidator struct { mu sync.Mutex - // client is protected by mu and should only be accessed via the getClient - // method. + // client and clusterAudiences are protected by mu and should only be + // accessed via the getClient method. client kubernetes.Interface + // clusterAudiences contains the default Kubernetes cluster audiences. + // This field is populated when getting the Kube client and returned by + // getClient. + // A nil value indicates that the cluster doesn't support audiences. + clusterAudiences []string } -// getClient allows the lazy initialisation of the Kubernetes client -func (v *TokenReviewValidator) getClient() (kubernetes.Interface, error) { +// getClient allows the lazy initialisation of the Kubernetes client and clusterAudiences +func (v *TokenReviewValidator) getClient(_ context.Context) (kubernetes.Interface, []string, error) { v.mu.Lock() defer v.mu.Unlock() if v.client != nil { - return v.client, nil + return v.client, v.clusterAudiences, nil } config, err := rest.InClusterConfig() if err != nil { - return nil, trace.WrapWithMessage(err, "failed to initialize in-cluster Kubernetes config") + return nil, nil, trace.WrapWithMessage(err, "failed to initialize in-cluster Kubernetes config") } client, err := kubernetes.NewForConfig(config) if err != nil { - return nil, trace.WrapWithMessage(err, "failed to initialize in-cluster Kubernetes client") + return nil, nil, trace.WrapWithMessage(err, "failed to initialize in-cluster Kubernetes client") + } + + // We extract the audiences from our own token. This allows us to detect the default Kubernetes audiences. + audiences, err := unsafeGetTokenAudiences(config.BearerToken) + if err != nil { + return nil, nil, trace.Wrap(err, "doing a self-review") } v.client = client - return client, nil + v.clusterAudiences = audiences + return client, audiences, nil +} + +// unsafeGetTokenAudiences extracts the audience from the mounted token. +// THIS FUNCTION DOES NOT VALIDATE THE TOKEN SIGNATURE. +// Bound tokens always have audiences and the list will not be empty. +// Legacy tokens don't have audiences, the result will be an empty list and no error. +func unsafeGetTokenAudiences(token string) ([]string, error) { + jwt, err := josejwt.ParseSigned(token) + if err != nil { + return nil, trace.Wrap(err) + } + claims := &ServiceAccountClaims{} + err = jwt.UnsafeClaimsWithoutVerification(claims) + if err != nil { + return nil, trace.Wrap(err) + } + + return claims.Audience, nil } // Validate uses the Kubernetes TokenReview API to validate a token and return its UserInfo -func (v *TokenReviewValidator) Validate(ctx context.Context, token string) (*ValidationResult, error) { - client, err := v.getClient() +func (v *TokenReviewValidator) Validate(ctx context.Context, token, clusterName string) (*ValidationResult, error) { + client, audiences, err := v.getClient(ctx) if err != nil { return nil, trace.Wrap(err) } @@ -121,6 +152,21 @@ func (v *TokenReviewValidator) Validate(ctx context.Context, token string) (*Val Token: token, }, } + + // In-cluster used to only allow tokens with the kubernetes audience but people + // kept confusing it with the JWKS kube join method and set the cluster name + // as the audience. To avoid his common footgun we now allow tokens whose + // audience is the teleport cluster name. + // + // We do this only if the Kubernetes cluster supports audiences. + // Earlier Kube versions don't have audience + // support, in this case, we just do a regular token review. + if len(audiences) > 0 { + // We deduplicate because the Teleport cluster name could be one of the default audiences + // And I really don't want to discover if sending the same audience multiple times is valid for Kubernetes. + review.Spec.Audiences = utils.Deduplicate(append([]string{clusterName}, audiences...)) + } + options := metav1.CreateOptions{} reviewResult, err := client.AuthenticationV1().TokenReviews().Create(ctx, review, options) diff --git a/lib/kubernetestoken/token_validator_test.go b/lib/kubernetestoken/token_validator_test.go index 10368606e4284..1795a4f369c24 100644 --- a/lib/kubernetestoken/token_validator_test.go +++ b/lib/kubernetestoken/token_validator_test.go @@ -42,6 +42,10 @@ import ( "github.com/gravitational/teleport/api/types" ) +const ( + testClusterName = "teleport.example.com" +) + var userGroups = []string{"system:serviceaccounts", "system:serviceaccounts:namespace", "system:authenticated"} var boundTokenKubernetesVersion = version.Info{ @@ -57,7 +61,7 @@ var legacyTokenKubernetesVersion = version.Info{ } // tokenReviewMock creates a testing.ReactionFunc validating the tokenReview request and answering it -func tokenReviewMock(t *testing.T, reviewResult *v1.TokenReview) func(ctest.Action) (bool, runtime.Object, error) { +func tokenReviewMock(t *testing.T, reviewResult *v1.TokenReview, expectedAudiences []string) func(ctest.Action) (bool, runtime.Object, error) { return func(action ctest.Action) (bool, runtime.Object, error) { createAction, ok := action.(ctest.CreateAction) require.True(t, ok) @@ -66,6 +70,7 @@ func tokenReviewMock(t *testing.T, reviewResult *v1.TokenReview) func(ctest.Acti require.True(t, ok) require.Equal(t, reviewResult.Spec.Token, reviewRequest.Spec.Token) + require.ElementsMatch(t, expectedAudiences, reviewRequest.Spec.Audiences) return true, reviewResult, nil } } @@ -91,13 +96,82 @@ func (c *fakeClientSet) Discovery() discovery.DiscoveryInterface { return &c.discovery } +const ( + // The tokens below are test data to validate that we can extract audiences properly from tokens coming from + // different Kubernetes clusters versions. + // Those tokens are only test data and don't provide access to anything. The Kube clusters who generated them + // are long gone. + // If your scanner brought you here, please save everyone's time and DO NOT REPORT accidentally committed tokens. + + // this token has no audience + testDataLegacyToken = "eyJhbGciOiJSUzI1NiIsImtpZCI6IkRVdTJXUGNPLUthZjk2c3ZJcXhFWlBsRHUyUUx5cWxrUm1qT0s2VG9XQTAifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJkZWZhdWx0Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZWNyZXQubmFtZSI6InRlc3RzYS10b2tlbi1namZxYiIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VydmljZS1hY2NvdW50Lm5hbWUiOiJ0ZXN0c2EiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIwYWY0YTc4Zi04ZjEwLTQ2ODUtYWMyOS1jYWUwODY1OWJjYWUiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6ZGVmYXVsdDp0ZXN0c2EifQ.Y683lBdmc5e0wvL3BPXj4hVkYXiu7M4bn2w1tvqIdrXdat3Fnqlv5Qgih3RS1VRETXDOMp3_CA8Jv7Nqe_PSIrBPvLStRYvvRByWDWY3PvYDfFxeARKj0E_AQnFkXQxEN21eXkJi3k0i93uhGGNvUr5bNpk7buMbD2UKt-y8N7sQmTIQ6nPdjaC3YHn32-MHpAquqwbTqXhETPrvk9RjSzE4jszcd_P1Gi7BdZoHPErnCc5XaEVBJnHiWsZCsJDL00nAaAS_Ru8TsIdX_z1pyp91sigxfvFrGwhns3oXq54rrhpBuloPwmDW0gWDAV-qjje5MPFuaiov431ocKrOsg\n" + // audience is defaultKubeAudiences + testDataBoundTokenKubeAudiences = "eyJhbGciOiJSUzI1NiIsImtpZCI6InY2VnNnUmdpVS1DNlZWaUVjLV9Wb1dCR2dpZVEtblV0RDFXQjVfY3JOckEifQ.eyJhdWQiOlsiaHR0cHM6Ly9rdWJlcm5ldGVzLmRlZmF1bHQuc3ZjLmNsdXN0ZXIubG9jYWwiLCJrM3MiXSwiZXhwIjoxNzY0OTQ3Mzc3LCJpYXQiOjE3MzM0MTEzNzcsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwianRpIjoiMjE4Y2I0ZGQtMzQyNS00Yzc0LThiODktNTRiNzIzNGRiMDE4Iiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJkZWZhdWx0Iiwibm9kZSI6eyJuYW1lIjoiazNkLWszcy1kZWZhdWx0LXNlcnZlci0wIiwidWlkIjoiZWMwMTUzZGUtMThiOC00OTk3LTg4ZGQtNjFiYzVmZTkzYThiIn0sInBvZCI6eyJuYW1lIjoiaHVnby10ZXN0LXBvZCIsInVpZCI6ImIxNjliZTdkLWNkYTItNGNhNy04ODVmLWMxNzJiMzZhNjUzNyJ9LCJzZXJ2aWNlYWNjb3VudCI6eyJuYW1lIjoiZGVmYXVsdCIsInVpZCI6IjQxMzgxNWFiLWNjZjctNDI4YS1iNjA4LTllNGUyYmU1OTc2ZiJ9LCJ3YXJuYWZ0ZXIiOjE3MzM0MTQ5ODR9LCJuYmYiOjE3MzM0MTEzNzcsInN1YiI6InN5c3RlbTpzZXJ2aWNlYWNjb3VudDpkZWZhdWx0OmRlZmF1bHQifQ.Cs3mekFZzEOk1Gj_w0seURuYC92aY5Xy9WdNz5LtyL0L0eKNnzTV5MNWHgAas--t8ABcvHtcbdS1-XSemqyDfn_GcNJXeZa88bX1PKyG-XdDuqfn40DRxrBXR_sim_2WUGJM2oNh6C6irHzUOQFU0Wmx4oWY3pZ_BSFUlDi3xKnPv-TFWroBVmtc_wLAbCBl5gZF1KngAgMlbdX0szBEwzewkeoFhDTh3OoNWRaRpJL7_YeZsBkKPGY107fFMDXIKmZtd6qyU8-yp3Wwn_1qwucfllNmru8_bncqN18RuDOoQyFej4R93NwntyfzGy1wQexR363QFd7veSgtBS7nJQ" + // audience is customKubeAudiences + testDataBoundTokenCustomAudiences = "eyJhbGciOiJSUzI1NiIsImtpZCI6InY2VnNnUmdpVS1DNlZWaUVjLV9Wb1dCR2dpZVEtblV0RDFXQjVfY3JOckEifQ.eyJhdWQiOlsidGVsZXBvcnQuZXhhbXBsZS5jb20iXSwiZXhwIjoxNzMzNDE2MDEyLCJpYXQiOjE3MzM0MTI0MDUsImlzcyI6Imh0dHBzOi8va3ViZXJuZXRlcy5kZWZhdWx0LnN2Yy5jbHVzdGVyLmxvY2FsIiwianRpIjoiZDE5Yjk2ZjctMTgyYy00ODVjLThkYWYtNzdkMTRhYzA4NmNlIiwia3ViZXJuZXRlcy5pbyI6eyJuYW1lc3BhY2UiOiJkZWZhdWx0Iiwibm9kZSI6eyJuYW1lIjoiazNkLWszcy1kZWZhdWx0LXNlcnZlci0wIiwidWlkIjoiZWMwMTUzZGUtMThiOC00OTk3LTg4ZGQtNjFiYzVmZTkzYThiIn0sInBvZCI6eyJuYW1lIjoiaHVnby10ZXN0LXBvZCIsInVpZCI6Ijc1ZTIwMmFjLTAwZWMtNDVmZC05ZGViLTgwM2JkODA0YjMxNSJ9LCJzZXJ2aWNlYWNjb3VudCI6eyJuYW1lIjoiZGVmYXVsdCIsInVpZCI6IjQxMzgxNWFiLWNjZjctNDI4YS1iNjA4LTllNGUyYmU1OTc2ZiJ9fSwibmJmIjoxNzMzNDEyNDA1LCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6ZGVmYXVsdDpkZWZhdWx0In0.QwhCSQzDrXBNjZU6X642FC_fzglaT80ldCFTXQEwR6IdPvPntjbSAZq8yN6arngctgM6wEh3buc7kq0awmytgF2hbeSRN6PEeRbVvKaAClnCPTzlJYnDq4FOYezqSBZ7jVCW3cNxeU0QCNwj5w8Xy1uxCJu24iWov-ElyxqiCkpa9FjiquOu4kHq9OErXe5ZmXmTDOILnQBzsZnbg-sBKTX-mNAHro8DwQCfFtPmW27iySaScIegqwZNHXbZJDWZYDB2uj3xuHzX75amgPWpfqUq4JaNkf-xlldaH3SdZa5hlL9zvV9e9Dwgqlnergq6EpEZNHmCPb9birQFn46n_w" +) + +var ( + defaultKubeAudiences = []string{"https://kubernetes.default.svc.cluster.local", "k3s"} + customKubeAudiences = []string{testClusterName} +) + +func TestGetTokenAudiences(t *testing.T) { + tests := []struct { + name string + token string + expectedAudiences []string + expectErr require.ErrorAssertionFunc + }{ + { + name: "legacy token with no audience", + token: testDataLegacyToken, + expectedAudiences: nil, + expectErr: require.NoError, + }, + { + name: "modern bound token with default kube audience", + token: testDataBoundTokenKubeAudiences, + expectedAudiences: defaultKubeAudiences, + expectErr: require.NoError, + }, + { + name: "modern bound token with custom audience", + token: testDataBoundTokenCustomAudiences, + expectedAudiences: customKubeAudiences, + expectErr: require.NoError, + }, + { + name: "broken token", + token: "asdfghjkl", + expectedAudiences: nil, + expectErr: require.Error, + }, + { + name: "no token", + token: "", + expectedAudiences: nil, + expectErr: require.Error, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + result, err := unsafeGetTokenAudiences(tt.token) + tt.expectErr(t, err) + assert.Equal(t, tt.expectedAudiences, result) + }) + } +} + func TestIDTokenValidator_Validate(t *testing.T) { tests := []struct { - token string - review *v1.TokenReview - kubeVersion *version.Info - wantResult *ValidationResult - expectedError error + token string + review *v1.TokenReview + kubeVersion *version.Info + wantResult *ValidationResult + clusterAudiences []string + expectedAudiences []string + expectedError error }{ { token: "valid", @@ -125,6 +199,39 @@ func TestIDTokenValidator_Validate(t *testing.T) { }, kubeVersion: &boundTokenKubernetesVersion, expectedError: nil, + // As the cluster doesn't have default audiences, we should not set + // the cluster name in the tokenReview request audiences. + expectedAudiences: nil, + }, + { + token: "valid-with-cluster-audiences", + review: &v1.TokenReview{ + Spec: v1.TokenReviewSpec{ + Token: "valid-with-cluster-audiences", + }, + Status: v1.TokenReviewStatus{ + Authenticated: true, + User: v1.UserInfo{ + Username: "system:serviceaccount:namespace:my-service-account", + UID: "sa-uuid", + Groups: userGroups, + Extra: map[string]v1.ExtraValue{ + "authentication.kubernetes.io/pod-name": {"podA"}, + "authentication.kubernetes.io/pod-uid": {"podA-uuid"}, + }, + }, + }, + }, + wantResult: &ValidationResult{ + Type: types.KubernetesJoinTypeInCluster, + Username: "system:serviceaccount:namespace:my-service-account", + // Raw will be filled in during test run to value of review + }, + kubeVersion: &boundTokenKubernetesVersion, + expectedError: nil, + clusterAudiences: defaultKubeAudiences, + // We check that the cluster name got added to the default kube cluster audiences + expectedAudiences: append([]string{testClusterName}, defaultKubeAudiences...), }, { token: "valid-not-bound", @@ -235,11 +342,12 @@ func TestIDTokenValidator_Validate(t *testing.T) { } client := newFakeClientset(tt.kubeVersion) - client.AddReactor("create", "tokenreviews", tokenReviewMock(t, tt.review)) + client.AddReactor("create", "tokenreviews", tokenReviewMock(t, tt.review, tt.expectedAudiences)) v := TokenReviewValidator{ - client: client, + client: client, + clusterAudiences: tt.clusterAudiences, } - result, err := v.Validate(context.Background(), tt.token) + result, err := v.Validate(context.Background(), tt.token, testClusterName) if tt.expectedError != nil { require.ErrorIs(t, err, tt.expectedError) return diff --git a/lib/multiplexer/test/ping.pb.go b/lib/multiplexer/test/ping.pb.go index 5f9b36680629d..fd603de1cb437 100644 --- a/lib/multiplexer/test/ping.pb.go +++ b/lib/multiplexer/test/ping.pb.go @@ -17,7 +17,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.0 +// protoc-gen-go v1.34.2 // protoc (unknown) // source: teleport/lib/multiplexer/test/ping.proto @@ -169,7 +169,7 @@ func file_teleport_lib_multiplexer_test_ping_proto_rawDescGZIP() []byte { } var file_teleport_lib_multiplexer_test_ping_proto_msgTypes = make([]protoimpl.MessageInfo, 2) -var file_teleport_lib_multiplexer_test_ping_proto_goTypes = []interface{}{ +var file_teleport_lib_multiplexer_test_ping_proto_goTypes = []any{ (*Request)(nil), // 0: teleport.lib.multiplexer.test.Request (*Response)(nil), // 1: teleport.lib.multiplexer.test.Response } @@ -189,7 +189,7 @@ func file_teleport_lib_multiplexer_test_ping_proto_init() { return } if !protoimpl.UnsafeEnabled { - file_teleport_lib_multiplexer_test_ping_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_multiplexer_test_ping_proto_msgTypes[0].Exporter = func(v any, i int) any { switch v := v.(*Request); i { case 0: return &v.state @@ -201,7 +201,7 @@ func file_teleport_lib_multiplexer_test_ping_proto_init() { return nil } } - file_teleport_lib_multiplexer_test_ping_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + file_teleport_lib_multiplexer_test_ping_proto_msgTypes[1].Exporter = func(v any, i int) any { switch v := v.(*Response); i { case 0: return &v.state diff --git a/lib/service/service.go b/lib/service/service.go index 155132bcdaf74..283e04140ac63 100644 --- a/lib/service/service.go +++ b/lib/service/service.go @@ -3996,10 +3996,7 @@ func (process *TeleportProcess) setupProxyListeners(networkingConfig types.Clust } if !cfg.Proxy.DisableReverseTunnel && tunnelStrategy == types.ProxyPeering { - addr, err := process.Config.Proxy.PeerAddr() - if err != nil { - return nil, trace.Wrap(err) - } + addr := process.Config.Proxy.PeerListenAddr() listener, err := process.importOrCreateListener(ListenerProxyPeer, addr.String()) if err != nil { diff --git a/lib/service/service_test.go b/lib/service/service_test.go index d3905e246a50e..2010734d95318 100644 --- a/lib/service/service_test.go +++ b/lib/service/service_test.go @@ -63,6 +63,7 @@ import ( "github.com/gravitational/teleport/lib/integrations/externalauditstorage" "github.com/gravitational/teleport/lib/limiter" "github.com/gravitational/teleport/lib/modules" + "github.com/gravitational/teleport/lib/multiplexer" "github.com/gravitational/teleport/lib/reversetunnelclient" "github.com/gravitational/teleport/lib/service/servicecfg" "github.com/gravitational/teleport/lib/services" @@ -98,7 +99,7 @@ func TestAdditionalExpectedRoles(t *testing.T) { name: "everything enabled", cfg: func() *servicecfg.Config { cfg := servicecfg.MakeDefaultConfig() - cfg.DataDir = t.TempDir() + cfg.DataDir = makeTempDir(t) cfg.SetAuthServerAddress(utils.NetAddr{AddrNetwork: "tcp", Addr: "127.0.0.1:0"}) cfg.Auth.StorageConfig.Params["path"] = t.TempDir() cfg.DiagnosticAddr = utils.NetAddr{AddrNetwork: "tcp", Addr: "127.0.0.1:0"} @@ -129,7 +130,7 @@ func TestAdditionalExpectedRoles(t *testing.T) { name: "everything enabled with additional roles", cfg: func() *servicecfg.Config { cfg := servicecfg.MakeDefaultConfig() - cfg.DataDir = t.TempDir() + cfg.DataDir = makeTempDir(t) cfg.SetAuthServerAddress(utils.NetAddr{AddrNetwork: "tcp", Addr: "127.0.0.1:0"}) cfg.Auth.StorageConfig.Params["path"] = t.TempDir() cfg.DiagnosticAddr = utils.NetAddr{AddrNetwork: "tcp", Addr: "127.0.0.1:0"} @@ -189,24 +190,39 @@ func TestDynamicClientReuse(t *testing.T) { cfg := servicecfg.MakeDefaultConfig() cfg.Clock = fakeClock - var err error - cfg.DataDir = t.TempDir() - cfg.DiagnosticAddr = utils.NetAddr{AddrNetwork: "tcp", Addr: "127.0.0.1:0"} + cfg.DataDir = makeTempDir(t) cfg.SetAuthServerAddress(utils.NetAddr{AddrNetwork: "tcp", Addr: "127.0.0.1:0"}) cfg.Auth.Enabled = true cfg.Auth.ListenAddr = utils.NetAddr{AddrNetwork: "tcp", Addr: "127.0.0.1:0"} cfg.Auth.SessionRecordingConfig.SetMode(types.RecordOff) + cfg.Auth.NoAudit = true cfg.Proxy.Enabled = true + cfg.Proxy.DisableDatabaseProxy = true cfg.Proxy.DisableWebInterface = true + cfg.Proxy.DisableReverseTunnel = true + cfg.Proxy.IdP.SAMLIdP.Enabled = false + cfg.Proxy.PROXYProtocolMode = multiplexer.PROXYProtocolOff cfg.Proxy.WebAddr = utils.NetAddr{AddrNetwork: "tcp", Addr: "localhost:0"} cfg.SSH.Enabled = false + cfg.DebugService.Enabled = false cfg.CircuitBreakerConfig = breaker.NoopBreakerConfig() process, err := NewTeleport(cfg) require.NoError(t, err) require.NoError(t, process.Start()) - t.Cleanup(func() { require.NoError(t, process.Close()) }) + + ctx, cancel := context.WithTimeout(process.ExitContext(), 30*time.Second) + defer cancel() + for _, eventName := range []string{AuthTLSReady, ProxySSHReady, ProxyWebServerReady, InstanceReady} { + _, err := process.WaitForEvent(ctx, eventName) + require.NoError(t, err) + } + + t.Cleanup(func() { + require.NoError(t, process.Close()) + require.NoError(t, process.Wait()) + }) // wait for instance connector iconn, err := process.WaitForConnector(InstanceIdentityEvent, process.logger) @@ -234,17 +250,19 @@ func TestDynamicClientReuse(t *testing.T) { // initial static set of system roles that got applied to the instance cert. require.NotSame(t, iconn.Client, nconn.Client) - nconn.Close() + require.NoError(t, nconn.Close()) // node connector closure should not affect proxy client _, err = pconn.Client.Ping(context.Background()) require.NoError(t, err) - pconn.Close() + require.NoError(t, pconn.Close()) // proxy connector closure should not affect instance client _, err = iconn.Client.Ping(context.Background()) require.NoError(t, err) + + require.NoError(t, iconn.Close()) } func TestMonitor(t *testing.T) { @@ -254,7 +272,7 @@ func TestMonitor(t *testing.T) { cfg := servicecfg.MakeDefaultConfig() cfg.Clock = fakeClock var err error - cfg.DataDir = t.TempDir() + cfg.DataDir = makeTempDir(t) cfg.DiagnosticAddr = utils.NetAddr{AddrNetwork: "tcp", Addr: "127.0.0.1:0"} cfg.SetAuthServerAddress(utils.NetAddr{AddrNetwork: "tcp", Addr: "127.0.0.1:0"}) cfg.Auth.Enabled = true @@ -764,7 +782,7 @@ func TestDesktopAccessFIPS(t *testing.T) { cfg := servicecfg.MakeDefaultConfig() cfg.SetAuthServerAddress(utils.NetAddr{AddrNetwork: "tcp", Addr: "127.0.0.1:0"}) cfg.Clock = clockwork.NewFakeClock() - cfg.DataDir = t.TempDir() + cfg.DataDir = makeTempDir(t) cfg.Auth.Enabled = false cfg.Proxy.Enabled = false cfg.SSH.Enabled = false @@ -889,7 +907,7 @@ func TestSetupProxyTLSConfig(t *testing.T) { cfg := servicecfg.MakeDefaultConfig() cfg.CircuitBreakerConfig = breaker.NoopBreakerConfig() cfg.Proxy.ACME.Enabled = tc.acmeEnabled - cfg.DataDir = t.TempDir() + cfg.DataDir = makeTempDir(t) cfg.Proxy.PublicAddrs = utils.MustParseAddrList("localhost") process := TeleportProcess{ Config: cfg, @@ -923,7 +941,7 @@ func TestTeleportProcess_reconnectToAuth(t *testing.T) { cfg := servicecfg.MakeDefaultConfig() cfg.SetAuthServerAddress(utils.NetAddr{AddrNetwork: "tcp", Addr: "127.0.0.1:0"}) cfg.Clock = clockwork.NewRealClock() - cfg.DataDir = t.TempDir() + cfg.DataDir = makeTempDir(t) cfg.Auth.Enabled = false cfg.Proxy.Enabled = false cfg.SSH.Enabled = true @@ -991,7 +1009,7 @@ func TestTeleportProcessAuthVersionCheck(t *testing.T) { authCfg := servicecfg.MakeDefaultConfig() authCfg.SetAuthServerAddress(listenAddr) - authCfg.DataDir = t.TempDir() + authCfg.DataDir = makeTempDir(t) authCfg.Auth.Enabled = true authCfg.Auth.StaticTokens = staticTokens authCfg.Auth.StorageConfig.Type = lite.GetName() @@ -1013,7 +1031,7 @@ func TestTeleportProcessAuthVersionCheck(t *testing.T) { authListenAddr := authProc.Config.AuthServerAddresses()[0] nodeCfg := servicecfg.MakeDefaultConfig() nodeCfg.SetAuthServerAddress(authListenAddr) - nodeCfg.DataDir = t.TempDir() + nodeCfg.DataDir = makeTempDir(t) nodeCfg.SetToken(token) nodeCfg.Auth.Enabled = false nodeCfg.Proxy.Enabled = false @@ -1593,11 +1611,7 @@ func TestDebugServiceStartSocket(t *testing.T) { t.Parallel() fakeClock := clockwork.NewFakeClock() - var err error - dataDir, err := os.MkdirTemp("", "*") - require.NoError(t, err) - t.Cleanup(func() { os.RemoveAll(dataDir) }) - + dataDir := makeTempDir(t) cfg := servicecfg.MakeDefaultConfig() cfg.DebugService.Enabled = true cfg.Clock = fakeClock @@ -1720,7 +1734,7 @@ func TestInstanceMetadata(t *testing.T) { for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { cfg := newCfg() - cfg.DataDir = t.TempDir() + cfg.DataDir = makeTempDir(t) cfg.Auth.StorageConfig.Params["path"] = t.TempDir() cfg.InstanceMetadataClient = tc.imClient @@ -1740,3 +1754,14 @@ func TestInstanceMetadata(t *testing.T) { }) } } + +// makeTempDir makes a temp dir with a shorter name than t.TempDir() in order to +// avoid https://github.com/golang/go/issues/62614. +func makeTempDir(t *testing.T) string { + t.Helper() + + tempDir, err := os.MkdirTemp("", "teleport-test-") + require.NoError(t, err, "os.MkdirTemp() failed") + t.Cleanup(func() { os.RemoveAll(tempDir) }) + return tempDir +} diff --git a/lib/service/servicecfg/auth.go b/lib/service/servicecfg/auth.go index 8c5491c16522f..8e2d5244fc409 100644 --- a/lib/service/servicecfg/auth.go +++ b/lib/service/servicecfg/auth.go @@ -19,7 +19,6 @@ package servicecfg import ( - "github.com/coreos/go-oidc/oauth2" "github.com/dustin/go-humanize" "github.com/gravitational/trace" "github.com/jonboulle/clockwork" @@ -180,10 +179,6 @@ type HostedPluginsConfig struct { // PluginOAuthProviders holds application credentials for each // 3rd party API provider type PluginOAuthProviders struct { - // TODO(tross) delete once teleport.e has been converted. - // Deprecated: use SlackCredentials instead. - Slack *oauth2.ClientCredentials - SlackCredentials *OAuthClientCredentials } diff --git a/lib/service/servicecfg/config.go b/lib/service/servicecfg/config.go index bdc36f0416523..b756dc0359ca9 100644 --- a/lib/service/servicecfg/config.go +++ b/lib/service/servicecfg/config.go @@ -564,6 +564,7 @@ func ApplyDefaults(cfg *Config) { cfg.Auth.NetworkingConfig = types.DefaultClusterNetworkingConfig() cfg.Auth.SessionRecordingConfig = types.DefaultSessionRecordingConfig() cfg.Auth.Preference = types.DefaultAuthPreference() + cfg.Auth.LicenseFile = filepath.Join(cfg.DataDir, defaults.LicenseFile) defaults.ConfigureLimiter(&cfg.Auth.Limiter) cfg.Proxy.WebAddr = *defaults.ProxyWebListenAddr() diff --git a/lib/service/servicecfg/config_test.go b/lib/service/servicecfg/config_test.go index d23362be2d60b..4fd2d6ba49474 100644 --- a/lib/service/servicecfg/config_test.go +++ b/lib/service/servicecfg/config_test.go @@ -22,6 +22,7 @@ import ( "fmt" "io" "log/slog" + "path/filepath" "regexp" "strings" "testing" @@ -90,6 +91,7 @@ func TestDefaultConfig(t *testing.T) { require.Equal(t, defaults.LimiterMaxConcurrentUsers, auth.Limiter.MaxNumberOfUsers) require.Equal(t, lite.GetName(), config.Auth.StorageConfig.Type) require.Empty(t, auth.StorageConfig.Params[defaults.BackendPath]) + require.Equal(t, filepath.Join(defaults.DataDir, defaults.LicenseFile), config.Auth.LicenseFile) // SSH section ssh := config.SSH diff --git a/lib/service/servicecfg/proxy.go b/lib/service/servicecfg/proxy.go index 70be8d9aa8fe2..aba7920d154d3 100644 --- a/lib/service/servicecfg/proxy.go +++ b/lib/service/servicecfg/proxy.go @@ -209,18 +209,15 @@ func (c ProxyConfig) KubeAddr() (string, error) { } // PublicPeerAddr attempts to returns the public address the proxy advertises -// for proxy peering clients if available. It falls back to PeerAddr othewise. +// for proxy peering clients if available; otherwise, it falls back to trying to +// guess an appropriate public address based on the listen address. func (c ProxyConfig) PublicPeerAddr() (*utils.NetAddr, error) { addr := &c.PeerPublicAddr - if addr.IsEmpty() || addr.IsHostUnspecified() { - return c.PeerAddr() + if !addr.IsEmpty() && !addr.IsHostUnspecified() { + return addr, nil } - return addr, nil -} -// PeerAddr returns the address the proxy advertises for proxy peering clients. -func (c ProxyConfig) PeerAddr() (*utils.NetAddr, error) { - addr := &c.PeerAddress + addr = &c.PeerAddress if addr.IsEmpty() { addr = defaults.ProxyPeeringListenAddr() } @@ -242,6 +239,15 @@ func (c ProxyConfig) PeerAddr() (*utils.NetAddr, error) { return addr, nil } +// PeerListenAddr returns the proxy peering listen address that was configured, +// or the default one otherwise. +func (c ProxyConfig) PeerListenAddr() *utils.NetAddr { + if c.PeerAddress.IsEmpty() { + return defaults.ProxyPeeringListenAddr() + } + return &c.PeerAddress +} + // KubeProxyConfig specifies the Kubernetes configuration for Teleport's proxy service type KubeProxyConfig struct { // Enabled turns kubernetes proxy role on or off for this process diff --git a/lib/services/access_request.go b/lib/services/access_request.go index 19a9c33bd8064..fd7ee8e9cb225 100644 --- a/lib/services/access_request.go +++ b/lib/services/access_request.go @@ -110,7 +110,7 @@ func ValidateAccessRequestClusterNames(cg ClusterGetter, ar types.AccessRequest) } if len(invalidClusters) > 0 { return trace.NotFound("access request contains invalid or unknown cluster names: %v", - strings.Join(invalidClusters, ", ")) + strings.Join(apiutils.Deduplicate(invalidClusters), ", ")) } return nil } diff --git a/lib/services/local/connection_diagnostic.go b/lib/services/local/connection_diagnostic.go index 56d8b07f9e697..1cfd67e70e77e 100644 --- a/lib/services/local/connection_diagnostic.go +++ b/lib/services/local/connection_diagnostic.go @@ -87,7 +87,6 @@ func (s *ConnectionDiagnosticService) UpdateConnectionDiagnostic(ctx context.Con } // AppendDiagnosticTrace adds a Trace into the ConnectionDiagnostics. -// It does a CompareAndSwap to ensure atomicity. func (s *ConnectionDiagnosticService) AppendDiagnosticTrace(ctx context.Context, name string, t *types.ConnectionDiagnosticTrace) (types.ConnectionDiagnostic, error) { existing, err := s.Get(ctx, backend.NewKey(connectionDiagnosticPrefix, name)) if err != nil { @@ -118,7 +117,7 @@ func (s *ConnectionDiagnosticService) AppendDiagnosticTrace(ctx context.Context, Revision: existing.Revision, } - _, err = s.CompareAndSwap(ctx, *existing, newItem) + _, err = s.ConditionalUpdate(ctx, newItem) if err != nil { return nil, trace.Wrap(err) } diff --git a/lib/services/local/dynamic_access.go b/lib/services/local/dynamic_access.go index f77cd316c44e2..7737810166d35 100644 --- a/lib/services/local/dynamic_access.go +++ b/lib/services/local/dynamic_access.go @@ -135,7 +135,7 @@ func (s *DynamicAccessService) SetAccessRequestState(ctx context.Context, params if err != nil { return nil, trace.Wrap(err) } - if _, err := s.CompareAndSwap(ctx, *item, newItem); err != nil { + if _, err := s.ConditionalUpdate(ctx, newItem); err != nil { if trace.IsCompareFailed(err) { select { case <-retry.After(): @@ -195,7 +195,7 @@ func (s *DynamicAccessService) ApplyAccessReview(ctx context.Context, params typ if err != nil { return nil, trace.Wrap(err) } - if _, err := s.CompareAndSwap(ctx, *item, newItem); err != nil { + if _, err := s.ConditionalUpdate(ctx, newItem); err != nil { if trace.IsCompareFailed(err) { select { case <-retry.After(): @@ -411,10 +411,8 @@ func (s *DynamicAccessService) CreateAccessRequestAllowedPromotions(ctx context. if err != nil { return trace.Wrap(err) } - // Currently, this logic is used only internally (no API exposed), and - // there is only one place that calls it. If this ever changes, we will - // need to do a CompareAndSwap here. - if _, err := s.Put(ctx, item); err != nil { + + if _, err := s.Create(ctx, item); err != nil { return trace.Wrap(err) } return nil diff --git a/lib/services/local/plugin_data.go b/lib/services/local/plugin_data.go index 21dad758c956e..fe28c1fe08f9b 100644 --- a/lib/services/local/plugin_data.go +++ b/lib/services/local/plugin_data.go @@ -198,7 +198,7 @@ func (p *PluginDataService) updatePluginData(ctx context.Context, params types.P return trace.Wrap(err) } } else { - if _, err := p.CompareAndSwap(ctx, *item, newItem); err != nil { + if _, err := p.ConditionalUpdate(ctx, newItem); err != nil { if trace.IsCompareFailed(err) { select { case <-retry.After(): diff --git a/lib/services/local/plugins.go b/lib/services/local/plugins.go index 6c860949cd0e1..e6e9067dac174 100644 --- a/lib/services/local/plugins.go +++ b/lib/services/local/plugins.go @@ -247,7 +247,7 @@ func (s *PluginsService) updateAndSwap(ctx context.Context, name string, modify return trace.Wrap(err) } - _, err = s.backend.CompareAndSwap(ctx, *item, backend.Item{ + _, err = s.backend.ConditionalUpdate(ctx, backend.Item{ Key: backend.NewKey(pluginsPrefix, plugin.GetName()), Value: value, Expires: plugin.Expiry(), diff --git a/lib/services/local/presence.go b/lib/services/local/presence.go index b9f879a282549..d12acb8932dd2 100644 --- a/lib/services/local/presence.go +++ b/lib/services/local/presence.go @@ -603,7 +603,7 @@ func (s *PresenceService) acquireSemaphore(ctx context.Context, key backend.Key, if err != nil { return nil, trace.Wrap(err) } - sem, err := services.UnmarshalSemaphore(item.Value) + sem, err := services.UnmarshalSemaphore(item.Value, services.WithRevision(item.Revision)) if err != nil { return nil, trace.Wrap(err) } @@ -628,7 +628,7 @@ func (s *PresenceService) acquireSemaphore(ctx context.Context, key backend.Key, Revision: rev, } - if _, err := s.CompareAndSwap(ctx, *item, newItem); err != nil { + if _, err := s.ConditionalUpdate(ctx, newItem); err != nil { return nil, trace.Wrap(err) } return lease, nil @@ -654,7 +654,7 @@ func (s *PresenceService) KeepAliveSemaphoreLease(ctx context.Context, lease typ return trace.Wrap(err) } - sem, err := services.UnmarshalSemaphore(item.Value) + sem, err := services.UnmarshalSemaphore(item.Value, services.WithRevision(item.Revision)) if err != nil { return trace.Wrap(err) } @@ -678,7 +678,7 @@ func (s *PresenceService) KeepAliveSemaphoreLease(ctx context.Context, lease typ Revision: rev, } - _, err = s.CompareAndSwap(ctx, *item, newItem) + _, err = s.ConditionalUpdate(ctx, newItem) if err != nil { if trace.IsCompareFailed(err) { return trace.CompareFailed("semaphore %v/%v has been concurrently updated, try again", sem.GetSubKind(), sem.GetName()) @@ -718,7 +718,7 @@ func (s *PresenceService) CancelSemaphoreLease(ctx context.Context, lease types. return trace.Wrap(err) } - sem, err := services.UnmarshalSemaphore(item.Value) + sem, err := services.UnmarshalSemaphore(item.Value, services.WithRevision(item.Revision)) if err != nil { return trace.Wrap(err) } @@ -740,7 +740,7 @@ func (s *PresenceService) CancelSemaphoreLease(ctx context.Context, lease types. Revision: rev, } - _, err = s.CompareAndSwap(ctx, *item, newItem) + _, err = s.ConditionalUpdate(ctx, newItem) switch { case err == nil: return nil diff --git a/lib/services/local/sessiontracker.go b/lib/services/local/sessiontracker.go index b8906b02d04ad..ad6fc5e9d06f1 100644 --- a/lib/services/local/sessiontracker.go +++ b/lib/services/local/sessiontracker.go @@ -32,11 +32,11 @@ import ( ) const ( - sessionPrefix = "session_tracker" - retryDelay = time.Second - terminatedTTL = 3 * time.Minute - casRetryLimit = 7 - casErrorMessage = "CompareAndSwap reached retry limit" + sessionPrefix = "session_tracker" + retryDelay = time.Second + terminatedTTL = 3 * time.Minute + updateRetryLimit = 7 + updateRetryLimitMessage = "Update retry limit reached" ) type sessionTracker struct { @@ -63,7 +63,7 @@ func (s *sessionTracker) loadSession(ctx context.Context, sessionID string) (typ // UpdatePresence updates the presence status of a user in a session. func (s *sessionTracker) UpdatePresence(ctx context.Context, sessionID, user string) error { - for i := 0; i < casRetryLimit; i++ { + for i := 0; i < updateRetryLimit; i++ { sessionItem, err := s.bk.Get(ctx, backend.NewKey(sessionPrefix, sessionID)) if err != nil { return trace.Wrap(err) @@ -89,7 +89,7 @@ func (s *sessionTracker) UpdatePresence(ctx context.Context, sessionID, user str Expires: session.Expiry(), Revision: sessionItem.Revision, } - _, err = s.bk.CompareAndSwap(ctx, *sessionItem, item) + _, err = s.bk.ConditionalUpdate(ctx, item) if trace.IsCompareFailed(err) { select { case <-ctx.Done(): @@ -102,7 +102,7 @@ func (s *sessionTracker) UpdatePresence(ctx context.Context, sessionID, user str return trace.Wrap(err) } - return trace.CompareFailed(casErrorMessage) + return trace.CompareFailed(updateRetryLimitMessage) } // GetSessionTracker returns the current state of a session tracker for an active session. @@ -202,7 +202,7 @@ func (s *sessionTracker) CreateSessionTracker(ctx context.Context, tracker types // UpdateSessionTracker updates a tracker resource for an active session. func (s *sessionTracker) UpdateSessionTracker(ctx context.Context, req *proto.UpdateSessionTrackerRequest) error { - for i := 0; i < casRetryLimit; i++ { + for i := 0; i < updateRetryLimit; i++ { sessionItem, err := s.bk.Get(ctx, backend.NewKey(sessionPrefix, req.SessionID)) if err != nil { return trace.Wrap(err) @@ -268,7 +268,7 @@ func (s *sessionTracker) UpdateSessionTracker(ctx context.Context, req *proto.Up Expires: expiry, Revision: sessionItem.Revision, } - _, err = s.bk.CompareAndSwap(ctx, *sessionItem, item) + _, err = s.bk.ConditionalUpdate(ctx, item) if trace.IsCompareFailed(err) { select { case <-ctx.Done(): @@ -281,7 +281,7 @@ func (s *sessionTracker) UpdateSessionTracker(ctx context.Context, req *proto.Up return trace.Wrap(err) } - return trace.CompareFailed(casErrorMessage) + return trace.CompareFailed(updateRetryLimitMessage) } // RemoveSessionTracker removes a tracker resource for an active session. diff --git a/lib/services/local/unstable.go b/lib/services/local/unstable.go index de3731fff13d7..15643e4e73b47 100644 --- a/lib/services/local/unstable.go +++ b/lib/services/local/unstable.go @@ -76,7 +76,8 @@ func (s UnstableService) AssertSystemRole(ctx context.Context, req proto.SystemR Expires: time.Now().Add(assertionTTL).UTC(), } if item != nil { - _, err = s.CompareAndSwap(ctx, *item, newItem) + newItem.Revision = item.Revision + _, err = s.ConditionalUpdate(ctx, newItem) if trace.IsCompareFailed(err) { // nodes are expected to perform assertions sequentially return trace.CompareFailed("system role assertion set was concurrently modified (this is bug)") diff --git a/lib/services/oidc.go b/lib/services/oidc.go index b1562e7820463..ddfbad5ad633b 100644 --- a/lib/services/oidc.go +++ b/lib/services/oidc.go @@ -21,40 +21,12 @@ package services import ( "net/url" - "github.com/coreos/go-oidc/jose" "github.com/gravitational/trace" "github.com/gravitational/teleport/api/types" "github.com/gravitational/teleport/lib/utils" ) -// GetClaimNames returns a list of claim names from the claim values -func GetClaimNames(claims jose.Claims) []string { - var out []string - for claim := range claims { - out = append(out, claim) - } - return out -} - -// OIDCClaimsToTraits converts OIDC-style claims into teleport-specific trait format -func OIDCClaimsToTraits(claims jose.Claims) map[string][]string { - traits := make(map[string][]string) - - for claimName := range claims { - claimValue, ok, _ := claims.StringClaim(claimName) - if ok { - traits[claimName] = []string{claimValue} - } - claimValues, ok, _ := claims.StringsClaim(claimName) - if ok { - traits[claimName] = claimValues - } - } - - return traits -} - // GetRedirectURL gets a redirect URL for the given connector. If the connector // has a redirect URL which matches the host of the given Proxy address, then // that one will be returned. Otherwise, the first URL in the list will be returned. diff --git a/lib/services/oidc_test.go b/lib/services/oidc_test.go index ca3dd2f048a96..7504e24398fcf 100644 --- a/lib/services/oidc_test.go +++ b/lib/services/oidc_test.go @@ -21,7 +21,6 @@ package services import ( "testing" - "github.com/coreos/go-oidc/jose" "github.com/gravitational/trace" "github.com/stretchr/testify/require" @@ -29,35 +28,6 @@ import ( "github.com/gravitational/teleport/api/types" ) -// TestOIDCRoleMapping verifies basic mapping from OIDC claims to roles. -func TestOIDCRoleMapping(t *testing.T) { - // create a connector - oidcConnector, err := types.NewOIDCConnector("example", types.OIDCConnectorSpecV3{ - IssuerURL: "https://www.exmaple.com", - ClientID: "example-client-id", - ClientSecret: "example-client-secret", - Display: "sign in with example.com", - Scope: []string{"foo", "bar"}, - ClaimsToRoles: []types.ClaimMapping{{Claim: "roles", Value: "teleport-user", Roles: []string{"user"}}}, - RedirectURLs: []string{"https://localhost:3080/v1/webapi/oidc/callback"}, - }) - require.NoError(t, err) - - // create some claims - var claims = make(jose.Claims) - claims.Add("roles", "teleport-user") - claims.Add("email", "foo@example.com") - claims.Add("nickname", "foo") - claims.Add("full_name", "foo bar") - - traits := OIDCClaimsToTraits(claims) - require.Len(t, traits, 4) - - _, roles := TraitsToRoles(oidcConnector.GetTraitMappings(), traits) - require.Len(t, roles, 1) - require.Equal(t, "user", roles[0]) -} - // TestOIDCUnmarshal tests UnmarshalOIDCConnector func TestOIDCUnmarshal(t *testing.T) { for _, tc := range []struct { diff --git a/lib/services/resource.go b/lib/services/resource.go index 0ef9ae4c9f634..4474170ba8a45 100644 --- a/lib/services/resource.go +++ b/lib/services/resource.go @@ -186,7 +186,7 @@ func ParseShortcut(in string) (string, error) { return types.KindKubeServer, nil case types.KindLock, "locks": return types.KindLock, nil - case types.KindDatabaseServer: + case types.KindDatabaseServer, "db_servers": return types.KindDatabaseServer, nil case types.KindNetworkRestrictions: return types.KindNetworkRestrictions, nil @@ -196,7 +196,7 @@ func ParseShortcut(in string) (string, error) { return types.KindApp, nil case types.KindAppServer, "app_servers": return types.KindAppServer, nil - case types.KindWindowsDesktopService, "windows_service", "win_desktop_service", "win_service": + case types.KindWindowsDesktopService, "windows_service", "win_desktop_service", "win_service", "windows_desktop_services": return types.KindWindowsDesktopService, nil case types.KindWindowsDesktop, "win_desktop": return types.KindWindowsDesktop, nil diff --git a/lib/services/user_test.go b/lib/services/user_test.go index 7e64cc25ec965..4f47f15c72aa3 100644 --- a/lib/services/user_test.go +++ b/lib/services/user_test.go @@ -273,7 +273,7 @@ func TestOIDCMapping(t *testing.T) { } for _, input := range testCase.inputs { comment := fmt.Sprintf("OIDC Test case %v %q, input %q", i, testCase.comment, input.comment) - _, outRoles := TraitsToRoles(conn.GetTraitMappings(), OIDCClaimsToTraits(input.claims)) + _, outRoles := TraitsToRoles(conn.GetTraitMappings(), oidcClaimsToTraits(input.claims)) require.Empty(t, cmp.Diff(outRoles, input.expectedRoles), comment) } @@ -325,6 +325,25 @@ func claimMappingsToAttributeMappings(in []types.ClaimMapping) []types.Attribute return out } +// oidcClaimsToTraits converts OIDC-style claims into teleport-specific trait format +func oidcClaimsToTraits(claims jose.Claims) map[string][]string { + traits := make(map[string][]string) + + for claimName := range claims { + claimValue, ok, _ := claims.StringClaim(claimName) + if ok { + traits[claimName] = []string{claimValue} + continue + } + claimValues, ok, _ := claims.StringsClaim(claimName) + if ok { + traits[claimName] = claimValues + } + } + + return traits +} + // claimsToAttributes maps jose.Claims type to attributes for testing func claimsToAttributes(claims jose.Claims) saml2.AssertionInfo { info := saml2.AssertionInfo{ diff --git a/lib/srv/app/transport.go b/lib/srv/app/transport.go index d019af70dbe9f..262ce70626825 100644 --- a/lib/srv/app/transport.go +++ b/lib/srv/app/transport.go @@ -21,12 +21,15 @@ package app import ( "context" "crypto/tls" + "io" "log/slog" "net" "net/http" "net/url" "path" "slices" + "strings" + "time" "github.com/gravitational/trace" @@ -97,6 +100,12 @@ func newTransport(ctx context.Context, c *transportConfig) (*transport, error) { if err != nil { return nil, trace.Wrap(err) } + + // Add a timeout to control how long it takes to (start) getting a response + // from the target server. This allows Teleport to show the user a helpful + // error message when the target service is slow in responding. + tr.ResponseHeaderTimeout = requestTimeout + tr.TLSClientConfig, err = configureTLS(c) if err != nil { return nil, trace.Wrap(err) @@ -143,15 +152,35 @@ func (t *transport) RoundTrip(r *http.Request) (*http.Response, error) { return nil, trace.Wrap(err) } - // Forward the request to the target application and emit an audit event. + // Forward the request to the target application. + // + // If a network error occurred when connecting to the target application, + // log and return a helpful error message to the user and Teleport + // administrator. resp, err := t.tr.RoundTrip(r) + if message, ok := utils.CanExplainNetworkError(err); ok { + if t.log.Enabled(r.Context(), slog.LevelDebug) { + t.log.DebugContext(r.Context(), "application request failed with a network error", + "raw_error", err, "human_error", strings.Join(strings.Fields(message), " ")) + } + + code := trace.ErrorToCode(err) + return &http.Response{ + StatusCode: code, + Status: http.StatusText(code), + Proto: r.Proto, + ProtoMajor: r.ProtoMajor, + ProtoMinor: r.ProtoMinor, + Body: io.NopCloser(strings.NewReader(charWrap(message))), + TLS: r.TLS, + }, nil + } if err != nil { return nil, trace.Wrap(err) } - status := uint32(resp.StatusCode) // Emit the event to the audit log. - if err := sessCtx.Audit.OnRequest(t.closeContext, sessCtx, r, status, nil /*aws endpoint*/); err != nil { + if err := sessCtx.Audit.OnRequest(t.closeContext, sessCtx, r, uint32(resp.StatusCode), nil /*aws endpoint*/); err != nil { return nil, trace.Wrap(err) } @@ -293,3 +322,30 @@ func host(addr string) string { } return host } + +// charWrap wraps a line to about 80 characters to make it easier to read. +func charWrap(message string) string { + var sb strings.Builder + for _, line := range strings.Split(message, "\n") { + var n int + for _, word := range strings.Fields(line) { + sb.WriteString(word) + sb.WriteString(" ") + + n += len(word) + 1 + if n > 80 { + sb.WriteString("\n") + n = 0 + } + } + sb.WriteString("\n") + } + return sb.String() +} + +const ( + // requestTimeout is the timeout to receive a response from the upstream + // server. Start it out large (not to break things) and slowly decrease it + // over time. + requestTimeout = 5 * time.Minute +) diff --git a/lib/srv/ctx.go b/lib/srv/ctx.go index e5dd446619033..d55e8507e8c1c 100644 --- a/lib/srv/ctx.go +++ b/lib/srv/ctx.go @@ -1003,7 +1003,7 @@ func (c *ServerContext) reportStats(conn utils.Stater) { Type: events.SessionDataEvent, Code: events.SessionDataCode, }, - ServerMetadata: c.GetServerMetadata(), + ServerMetadata: c.srv.TargetMetadata(), SessionMetadata: c.GetSessionMetadata(), UserMetadata: c.Identity.GetUserMetadata(), ConnectionMetadata: apievents.ConnectionMetadata{ @@ -1387,15 +1387,6 @@ func (c *ServerContext) GetExecRequest() (Exec, error) { return c.execRequest, nil } -func (c *ServerContext) GetServerMetadata() apievents.ServerMetadata { - return apievents.ServerMetadata{ - ServerVersion: teleport.Version, - ServerID: c.srv.HostUUID(), - ServerHostname: c.srv.GetInfo().GetHostname(), - ServerNamespace: c.srv.GetNamespace(), - } -} - func (c *ServerContext) GetSessionMetadata() apievents.SessionMetadata { return apievents.SessionMetadata{ SessionID: string(c.SessionID()), diff --git a/lib/srv/db/access_test.go b/lib/srv/db/access_test.go index c48b4caa3f35a..14b37f32bfbca 100644 --- a/lib/srv/db/access_test.go +++ b/lib/srv/db/access_test.go @@ -32,7 +32,6 @@ import ( "testing" "time" - gspanner "cloud.google.com/go/spanner" "github.com/ClickHouse/ch-go" cqlclient "github.com/datastax/go-cassandra-native-protocol/client" elastic "github.com/elastic/go-elasticsearch/v8" @@ -2129,7 +2128,7 @@ func (c *testContext) dynamodbClient(ctx context.Context, teleportUser, dbServic return db, proxy, nil } -func (c *testContext) spannerClient(ctx context.Context, teleportUser, dbService, dbUser, dbName string) (*gspanner.Client, *alpnproxy.LocalProxy, error) { +func (c *testContext) spannerClient(ctx context.Context, teleportUser, dbService, dbUser, dbName string) (*spanner.SpannerTestClient, *alpnproxy.LocalProxy, error) { route := tlsca.RouteToDatabase{ ServiceName: dbService, Protocol: defaults.ProtocolSpanner, @@ -2142,7 +2141,7 @@ func (c *testContext) spannerClient(ctx context.Context, teleportUser, dbService return nil, nil, trace.Wrap(err) } - db, err := spanner.MakeTestClient(ctx, common.TestClientConfig{ + clt, err := spanner.MakeTestClient(ctx, common.TestClientConfig{ AuthClient: c.authClient, AuthServer: c.authServer, Address: proxy.GetAddr(), @@ -2154,7 +2153,7 @@ func (c *testContext) spannerClient(ctx context.Context, teleportUser, dbService return nil, nil, trace.Wrap(err) } - return db, proxy, nil + return clt, proxy, nil } type roleOptFn func(types.Role) diff --git a/lib/srv/db/postgres/users.go b/lib/srv/db/postgres/users.go index a96e60e05c6dc..b875d74abacfe 100644 --- a/lib/srv/db/postgres/users.go +++ b/lib/srv/db/postgres/users.go @@ -412,6 +412,36 @@ func (e *Engine) initAutoUsers(ctx context.Context, sessionCtx *common.Session, e.Log.Debugf("Created PostgreSQL role %q.", teleportAutoUserRole) } + // v16 Postgres changed the role grant permissions model such that you can + // no longer grant non-superuser role membership just by having the + // CREATEROLE attribute. + // On v16 Postgres, when a role is created the creator is automatically + // granted that role with "INHERIT FALSE, SET FALSE, ADMIN OPTION" options. + // Prior to v16 Postgres that grant is not automatically made, because + // the CREATEROLE attribute alone was sufficient to grant the role to + // others. + // This is the only role that is created and granted to others by the + // Teleport database admin. + // It grants the auto user role to every role it provisions. + // To avoid breaking user auto-provisioning for customers who upgrade from + // v15 postgres to v16, we should grant this role with the admin option to + // ourselves after creating it. + // Also note that the grant syntax in v15 postgres and below does not + // support WITH INHERIT FALSE or WITH SET FALSE syntax, so we only specify + // WITH ADMIN OPTION. + // See: https://www.postgresql.org/docs/16/release-16.html + adminUser := sessionCtx.Database.GetAdminUser().Name + stmt := fmt.Sprintf("grant role %q to %q WITH ADMIN OPTION", teleportAutoUserRole, adminUser) + _, err = conn.Exec(ctx, stmt) + if err != nil { + if !strings.Contains(err.Error(), "cannot be granted back") && !strings.Contains(err.Error(), "already") { + e.Log.Debugf("Failed to grant required role %q to the Teleport database admin %q, user auto-provisioning may not work until the database admin is granted the role by a superuser", + teleportAutoUserRole, + adminUser, + ) + } + } + // Install stored procedures for creating and disabling database users. for name, sql := range pickProcedures(sessionCtx) { _, err := conn.Exec(ctx, sql) diff --git a/lib/srv/db/spanner/test.go b/lib/srv/db/spanner/test.go index 4a7b5378766cd..44b74085c05bf 100644 --- a/lib/srv/db/spanner/test.go +++ b/lib/srv/db/spanner/test.go @@ -33,6 +33,7 @@ import ( "github.com/sirupsen/logrus" "google.golang.org/api/option" "google.golang.org/grpc" + "google.golang.org/grpc/connectivity" "google.golang.org/grpc/credentials" "google.golang.org/grpc/credentials/insecure" "google.golang.org/grpc/metadata" @@ -47,11 +48,35 @@ import ( "github.com/gravitational/teleport/lib/tlsca" ) -func MakeTestClient(ctx context.Context, config common.TestClientConfig) (*spanner.Client, error) { +// SpannerTestClient wraps a [spanner.Client] and provides direct access to the +// underlying [grpc.ClientConn] of the client. +type SpannerTestClient struct { + ClientConn *grpc.ClientConn + *spanner.Client +} + +// WaitForConnectionState waits until the spanner client's underlying gRPC +// connection transitions into the given state or the context expires. +func (c *SpannerTestClient) WaitForConnectionState(ctx context.Context, wantState connectivity.State) error { + for { + s := c.ClientConn.GetState() + if s == wantState { + return nil + } + if s == connectivity.Shutdown { + return trace.Errorf("spanner test client connection has shutdown") + } + if !c.ClientConn.WaitForStateChange(ctx, s) { + return ctx.Err() + } + } +} + +func MakeTestClient(ctx context.Context, config common.TestClientConfig) (*SpannerTestClient, error) { return makeTestClient(ctx, config, false) } -func makeTestClient(ctx context.Context, config common.TestClientConfig, useTLS bool) (*spanner.Client, error) { +func makeTestClient(ctx context.Context, config common.TestClientConfig, useTLS bool) (*SpannerTestClient, error) { databaseID, err := getDatabaseID(ctx, config.RouteToDatabase, config.AuthServer) if err != nil { return nil, trace.Wrap(err) @@ -68,13 +93,13 @@ func makeTestClient(ctx context.Context, config common.TestClientConfig, useTLS transportOpt = grpc.WithTransportCredentials(insecure.NewCredentials()) } + cc, err := grpc.NewClient(config.Address, transportOpt) + if err != nil { + return nil, trace.Wrap(err) + } + opts := []option.ClientOption{ - // dial with custom transport security - option.WithGRPCDialOption(transportOpt), - // create 1 connection - option.WithGRPCConnectionPool(1), - // connect to the Teleport endpoint - option.WithEndpoint(config.Address), + option.WithGRPCConn(cc), // client should not bring any GCP credentials option.WithoutAuthentication(), } @@ -86,7 +111,10 @@ func makeTestClient(ctx context.Context, config common.TestClientConfig, useTLS if err != nil { return nil, trace.Wrap(err) } - return clt, nil + return &SpannerTestClient{ + ClientConn: cc, + Client: clt, + }, nil } func getDatabaseID(ctx context.Context, route tlsca.RouteToDatabase, getter services.DatabaseServersGetter) (string, error) { diff --git a/lib/srv/db/spanner_test.go b/lib/srv/db/spanner_test.go index ca78f856b89e6..4af7fbdb46cb8 100644 --- a/lib/srv/db/spanner_test.go +++ b/lib/srv/db/spanner_test.go @@ -28,6 +28,7 @@ import ( gspanner "cloud.google.com/go/spanner" "github.com/stretchr/testify/require" + "google.golang.org/grpc/connectivity" "github.com/gravitational/teleport/api/types" "github.com/gravitational/teleport/api/types/events" @@ -234,7 +235,15 @@ func TestAuditSpanner(t *testing.T) { _ = localProxy.Close() }) - require.NoError(t, err) + require.NoError(t, clt.WaitForConnectionState(ctx, connectivity.Ready)) + reconnectingCh := make(chan bool) + go func() { + // we should observe the connection leave the "ready" state after + // it gets an access denied error. + ctx, cancel := context.WithTimeout(ctx, time.Second*10) + defer cancel() + reconnectingCh <- clt.ClientConn.WaitForStateChange(ctx, connectivity.Ready) + }() row, err := pingSpanner(ctx, clt, 42) require.Error(t, err) @@ -246,6 +255,7 @@ func TestAuditSpanner(t *testing.T) { require.True(t, ok) require.Equal(t, "googlesql", dbStart1.DatabaseName) + require.True(t, <-reconnectingCh, "timed out waiting for the spanner client to reconnect") row, err = pingSpanner(ctx, clt, 42) require.Error(t, err) require.ErrorContains(t, err, "access to db denied") @@ -308,7 +318,7 @@ func TestAuditSpanner(t *testing.T) { }) } -func pingSpanner(ctx context.Context, clt *gspanner.Client, want int64) (*gspanner.Row, error) { +func pingSpanner(ctx context.Context, clt *spanner.SpannerTestClient, want int64) (*gspanner.Row, error) { query := gspanner.NewStatement(fmt.Sprintf("SELECT %d", want)) rowIter := clt.Single().Query(ctx, query) defer rowIter.Stop() diff --git a/lib/srv/desktop/windows_server.go b/lib/srv/desktop/windows_server.go index d80c0dd2470b6..44e2ebd148d9a 100644 --- a/lib/srv/desktop/windows_server.go +++ b/lib/srv/desktop/windows_server.go @@ -443,6 +443,7 @@ func (s *WindowsService) tlsConfigForLDAP() (*tls.Config, error) { domain: s.cfg.Domain, ttl: windowsDesktopServiceCertTTL, activeDirectorySID: s.cfg.SID, + omitCDP: true, }) if err != nil { return nil, trace.Wrap(err) @@ -1226,7 +1227,8 @@ type generateCredentialsRequest struct { // createUser specifies if Windows user should be created if missing createUser bool // groups are groups that user should be member of - groups []string + groups []string + omitCDP bool } // generateCredentials generates a private key / certificate pair for the given @@ -1254,6 +1256,7 @@ func (s *WindowsService) generateCredentials(ctx context.Context, request genera AuthClient: s.cfg.AuthClient, CreateUser: request.createUser, Groups: request.groups, + OmitCDP: request.omitCDP, }) } diff --git a/lib/srv/exec.go b/lib/srv/exec.go index 61ef8baade8ae..0d88ae3149bfd 100644 --- a/lib/srv/exec.go +++ b/lib/srv/exec.go @@ -262,7 +262,7 @@ func (e *localExec) transformSecureCopy() error { Time: time.Now(), }, UserMetadata: e.Ctx.Identity.GetUserMetadata(), - ServerMetadata: e.Ctx.GetServerMetadata(), + ServerMetadata: e.Ctx.GetServer().TargetMetadata(), Error: err.Error(), }) return trace.Wrap(err) @@ -367,7 +367,7 @@ func (e *remoteExec) Start(ctx context.Context, ch ssh.Channel) (*ExecResult, er Time: time.Now(), }, UserMetadata: e.ctx.Identity.GetUserMetadata(), - ServerMetadata: e.ctx.GetServerMetadata(), + ServerMetadata: e.ctx.GetServer().TargetMetadata(), Error: err.Error(), }) return nil, trace.Wrap(err) @@ -433,7 +433,7 @@ func (e *remoteExec) PID() int { // instead of ctx.srv. func emitExecAuditEvent(ctx *ServerContext, cmd string, execErr error) { // Create common fields for event. - serverMeta := ctx.GetServerMetadata() + serverMeta := ctx.GetServer().TargetMetadata() sessionMeta := ctx.GetSessionMetadata() userMeta := ctx.Identity.GetUserMetadata() diff --git a/lib/srv/exec_test.go b/lib/srv/exec_test.go index c8e52aa4381fd..adbc07ec9970e 100644 --- a/lib/srv/exec_test.go +++ b/lib/srv/exec_test.go @@ -63,12 +63,12 @@ func TestEmitExecAuditEvent(t *testing.T) { rec, ok := scx.session.recorder.(*mockRecorder) require.True(t, ok) + scx.GetServer().TargetMetadata() + expectedUsr, err := user.Current() require.NoError(t, err) - expectedHostname, err := os.Hostname() - if err != nil { - expectedHostname = "localhost" - } + expectedHostname := "testHost" + expectedMeta := apievents.UserMetadata{ User: "teleportUser", Login: expectedUsr.Username, @@ -115,7 +115,8 @@ func TestEmitExecAuditEvent(t *testing.T) { require.Equal(t, tt.outCommand, execEvent.Command) require.Equal(t, tt.outCode, execEvent.ExitCode) require.Equal(t, expectedMeta, execEvent.UserMetadata) - require.Equal(t, "testHostUUID", execEvent.ServerID) + require.Equal(t, "123", execEvent.ServerID) + require.Equal(t, "abc", execEvent.ForwardedBy) require.Equal(t, expectedHostname, execEvent.ServerHostname) require.Equal(t, "testNamespace", execEvent.ServerNamespace) require.Equal(t, "xxx", execEvent.SessionID) diff --git a/lib/srv/forward/sshserver.go b/lib/srv/forward/sshserver.go index b310dd3557af5..90423046ccb88 100644 --- a/lib/srv/forward/sshserver.go +++ b/lib/srv/forward/sshserver.go @@ -1446,7 +1446,7 @@ func (s *Server) handleSubsystem(ctx context.Context, ch ssh.Channel, req *ssh.R } // if SFTP was requested, check that - if subsystem.subsytemName == teleport.SFTPSubsystem { + if subsystem.subsystemName == teleport.SFTPSubsystem { err := serverContext.CheckSFTPAllowed(s.sessionRegistry) if err != nil { s.EmitAuditEvent(context.WithoutCancel(ctx), &apievents.SFTP{ @@ -1456,7 +1456,7 @@ func (s *Server) handleSubsystem(ctx context.Context, ch ssh.Channel, req *ssh.R Time: time.Now(), }, UserMetadata: serverContext.Identity.GetUserMetadata(), - ServerMetadata: serverContext.GetServerMetadata(), + ServerMetadata: serverContext.GetServer().TargetMetadata(), Error: err.Error(), }) return trace.Wrap(err) @@ -1467,7 +1467,7 @@ func (s *Server) handleSubsystem(ctx context.Context, ch ssh.Channel, req *ssh.R err = subsystem.Start(ctx, ch) if err != nil { serverContext.SendSubsystemResult(srv.SubsystemResult{ - Name: subsystem.subsytemName, + Name: subsystem.subsystemName, Err: trace.Wrap(err), }) return trace.Wrap(err) @@ -1477,7 +1477,7 @@ func (s *Server) handleSubsystem(ctx context.Context, ch ssh.Channel, req *ssh.R go func() { err := subsystem.Wait() serverContext.SendSubsystemResult(srv.SubsystemResult{ - Name: subsystem.subsytemName, + Name: subsystem.subsystemName, Err: trace.Wrap(err), }) }() diff --git a/lib/srv/forward/subsystem.go b/lib/srv/forward/subsystem.go index 0002353f869db..043fa3d81eda2 100644 --- a/lib/srv/forward/subsystem.go +++ b/lib/srv/forward/subsystem.go @@ -37,23 +37,23 @@ type remoteSubsystem struct { log *log.Entry serverContext *srv.ServerContext - subsytemName string + subsystemName string ctx context.Context errorCh chan error } // parseRemoteSubsystem returns *remoteSubsystem which can be used to run a subsystem on a remote node. -func parseRemoteSubsystem(ctx context.Context, subsytemName string, serverContext *srv.ServerContext) *remoteSubsystem { +func parseRemoteSubsystem(ctx context.Context, subsystemName string, serverContext *srv.ServerContext) *remoteSubsystem { return &remoteSubsystem{ log: log.WithFields(log.Fields{ teleport.ComponentKey: teleport.ComponentRemoteSubsystem, teleport.ComponentFields: map[string]string{ - "name": subsytemName, + "name": subsystemName, }, }), serverContext: serverContext, - subsytemName: subsytemName, + subsystemName: subsystemName, ctx: ctx, errorCh: make(chan error, 3), } @@ -78,10 +78,10 @@ func (r *remoteSubsystem) Start(ctx context.Context, channel ssh.Channel) error // request the subsystem from the remote node. if successful, the user can // interact with the remote subsystem with stdin, stdout, and stderr. - err = session.RequestSubsystem(ctx, r.subsytemName) + err = session.RequestSubsystem(ctx, r.subsystemName) if err != nil { // emit an event to the audit log with the reason remote execution failed - r.emitAuditEvent(err) + r.emitAuditEvent(ctx, err) return trace.Wrap(err) } @@ -126,13 +126,12 @@ func (r *remoteSubsystem) Wait() error { } // emit an event to the audit log with the result of execution - r.emitAuditEvent(lastErr) + r.emitAuditEvent(r.ctx, lastErr) return lastErr } -func (r *remoteSubsystem) emitAuditEvent(err error) { - srv := r.serverContext.GetServer() +func (r *remoteSubsystem) emitAuditEvent(ctx context.Context, err error) { subsystemEvent := &apievents.Subsystem{ Metadata: apievents.Metadata{ Type: events.SubsystemEvent, @@ -142,7 +141,8 @@ func (r *remoteSubsystem) emitAuditEvent(err error) { LocalAddr: r.serverContext.RemoteClient.LocalAddr().String(), RemoteAddr: r.serverContext.RemoteClient.RemoteAddr().String(), }, - Name: r.subsytemName, + Name: r.subsystemName, + ServerMetadata: r.serverContext.GetServer().TargetMetadata(), } if err != nil { @@ -152,7 +152,7 @@ func (r *remoteSubsystem) emitAuditEvent(err error) { subsystemEvent.Code = events.SubsystemCode } - if err := srv.EmitAuditEvent(srv.Context(), subsystemEvent); err != nil { + if err := r.serverContext.GetServer().EmitAuditEvent(ctx, subsystemEvent); err != nil { r.log.WithError(err).Warn("Failed to emit subsystem audit event.") } } diff --git a/lib/srv/mock.go b/lib/srv/mock.go index 6617241680c74..dc7fa43e71ed6 100644 --- a/lib/srv/mock.go +++ b/lib/srv/mock.go @@ -246,7 +246,12 @@ func (m *mockServer) GetInfo() types.Server { } func (m *mockServer) TargetMetadata() apievents.ServerMetadata { - return apievents.ServerMetadata{} + return apievents.ServerMetadata{ + ServerID: "123", + ForwardedBy: "abc", + ServerHostname: "testHost", + ServerNamespace: "testNamespace", + } } // UseTunnel used to determine if this node has connected to this cluster diff --git a/lib/srv/reexec.go b/lib/srv/reexec.go index da1d84afa9079..4fe1d42aaa8ec 100644 --- a/lib/srv/reexec.go +++ b/lib/srv/reexec.go @@ -1282,7 +1282,7 @@ func (o *osWrapper) newParker(ctx context.Context, credential syscall.Credential } // Perform OS-specific tweaks to the command. - reexecCommandOSTweaks(cmd) + parkerCommandOSTweaks(cmd) if err := cmd.Start(); err != nil { return trace.Wrap(err) diff --git a/lib/srv/reexec_linux.go b/lib/srv/reexec_linux.go index dcba0399ba1a8..26d7742dad210 100644 --- a/lib/srv/reexec_linux.go +++ b/lib/srv/reexec_linux.go @@ -82,6 +82,17 @@ func reexecCommandOSTweaks(cmd *exec.Cmd) { } } +// if we ever need to run parkers on macOS or other platforms with no PDEATHSIG +// we should rework the parker to block on a pipe so it can exit when its parent +// is terminated +func parkerCommandOSTweaks(cmd *exec.Cmd) { + reexecCommandOSTweaks(cmd) + + // parker processes can leak if their PDEATHSIG is SIGQUIT, otherwise we + // could just use reexecCommandOSTweaks + cmd.SysProcAttr.Pdeathsig = syscall.SIGKILL +} + func userCommandOSTweaks(cmd *exec.Cmd) { if cmd.SysProcAttr == nil { cmd.SysProcAttr = new(syscall.SysProcAttr) diff --git a/lib/srv/reexec_other.go b/lib/srv/reexec_other.go index c99e8e3cdac9e..d5f48d6999fb3 100644 --- a/lib/srv/reexec_other.go +++ b/lib/srv/reexec_other.go @@ -27,6 +27,8 @@ import ( func reexecCommandOSTweaks(cmd *exec.Cmd) {} +func parkerCommandOSTweaks(cmd *exec.Cmd) {} + func userCommandOSTweaks(cmd *exec.Cmd) {} func setNeutralOOMScore() error { return nil } diff --git a/lib/srv/regular/sftp.go b/lib/srv/regular/sftp.go index 5c07a7eab26b6..2772da15e5014 100644 --- a/lib/srv/regular/sftp.go +++ b/lib/srv/regular/sftp.go @@ -78,7 +78,7 @@ func (s *sftpSubsys) Start(ctx context.Context, Time: time.Now(), }, UserMetadata: serverCtx.Identity.GetUserMetadata(), - ServerMetadata: serverCtx.GetServerMetadata(), + ServerMetadata: serverCtx.GetServer().TargetMetadata(), Error: srv.ErrNodeFileCopyingNotPermitted.Error(), }) return srv.ErrNodeFileCopyingNotPermitted @@ -169,7 +169,7 @@ func (s *sftpSubsys) Start(ctx context.Context, defer auditPipeOut.Close() // Create common fields for events - serverMeta := serverCtx.GetServerMetadata() + serverMeta := serverCtx.GetServer().TargetMetadata() sessionMeta := serverCtx.GetSessionMetadata() userMeta := serverCtx.Identity.GetUserMetadata() connectionMeta := apievents.ConnectionMetadata{ diff --git a/lib/srv/regular/sshserver.go b/lib/srv/regular/sshserver.go index 7662765c2079e..44e9f05789206 100644 --- a/lib/srv/regular/sshserver.go +++ b/lib/srv/regular/sshserver.go @@ -2378,8 +2378,18 @@ func (s *Server) handleTCPIPForwardRequest(ctx context.Context, ccx *sshutils.Co return trace.Wrap(err) } - // Set the src addr again since it may have been updated with a new port. - scx.SrcAddr = listener.Addr().String() + // If the client didn't request a specific port, the chosen port needs to + // be reported back. + srcHost, _, err := sshutils.SplitHostPort(scx.SrcAddr) + if err != nil { + return trace.Wrap(err) + } + _, listenPort, err := sshutils.SplitHostPort(listener.Addr().String()) + if err != nil { + return trace.Wrap(err) + } + scx.SrcAddr = sshutils.JoinHostPort(srcHost, listenPort) + event := scx.GetPortForwardEvent() if err := s.EmitAuditEvent(ctx, &event); err != nil { s.Logger.WithError(err).Warn("Failed to emit audit event.") @@ -2475,7 +2485,7 @@ func (s *Server) parseSubsystemRequest(req *ssh.Request, ctx *srv.ServerContext) Time: time.Now(), }, UserMetadata: ctx.Identity.GetUserMetadata(), - ServerMetadata: ctx.GetServerMetadata(), + ServerMetadata: ctx.GetServer().TargetMetadata(), Error: err.Error(), }) return nil, trace.Wrap(err) diff --git a/lib/srv/regular/sshserver_test.go b/lib/srv/regular/sshserver_test.go index 54ac1b06d08bd..800ef30531b04 100644 --- a/lib/srv/regular/sshserver_test.go +++ b/lib/srv/regular/sshserver_test.go @@ -19,7 +19,6 @@ package regular import ( - "bytes" "context" "encoding/json" "fmt" @@ -711,40 +710,63 @@ func TestDirectTCPIP(t *testing.T) { // "tcpip-forward" request and do remote port forwarding. func TestTCPIPForward(t *testing.T) { t.Parallel() - f := newFixtureWithoutDiskBasedLogging(t) - - // Request a listener from the server. - listener, err := f.ssh.clt.Listen("tcp", "127.0.0.1:0") + hostname, err := os.Hostname() require.NoError(t, err) + tests := []struct { + name string + listenAddr string + }{ + { + name: "localhost", + listenAddr: "localhost:0", + }, + { + name: "ip address", + listenAddr: "127.0.0.1:0", + }, + { + name: "hostname", + listenAddr: hostname + ":0", + }, + } + for _, tc := range tests { + t.Run(tc.name, func(t *testing.T) { + f := newFixtureWithoutDiskBasedLogging(t) - // Start up a test server that uses the port forwarded listener. - ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - fmt.Fprintln(w, "hello, world") - })) - t.Cleanup(ts.Close) - ts.Listener = listener - ts.Start() + // Request a listener from the server. + listener, err := f.ssh.clt.Listen("tcp", tc.listenAddr) + require.NoError(t, err) - // Dial the test server over the SSH connection. - ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) - t.Cleanup(cancel) - req, err := http.NewRequestWithContext(ctx, http.MethodGet, ts.URL, &bytes.Buffer{}) - require.NoError(t, err) - client := &http.Client{} - resp, err := client.Do(req) - require.NoError(t, err) - t.Cleanup(func() { - require.NoError(t, resp.Body.Close()) - }) + // Start up a test server that uses the port forwarded listener. + ts := httptest.NewUnstartedServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + fmt.Fprintln(w, "hello, world") + })) + t.Cleanup(ts.Close) + ts.Listener = listener + ts.Start() + + // Dial the test server over the SSH connection. + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + t.Cleanup(cancel) + req, err := http.NewRequestWithContext(ctx, http.MethodGet, ts.URL, nil) + require.NoError(t, err) + resp, err := ts.Client().Do(req) + require.NoError(t, err) + t.Cleanup(func() { + require.NoError(t, resp.Body.Close()) + }) - // Make sure the response is what was expected. - body, err := io.ReadAll(resp.Body) - require.NoError(t, err) - require.Equal(t, []byte("hello, world\n"), body) + // Make sure the response is what was expected. + body, err := io.ReadAll(resp.Body) + require.NoError(t, err) + require.Equal(t, []byte("hello, world\n"), body) + }) + } t.Run("SessionJoinPrincipal cannot use tcpip-forward", func(t *testing.T) { // Ensure that ssh client using SessionJoinPrincipal as Login, cannot // connect using "tcpip-forward". + f := newFixtureWithoutDiskBasedLogging(t) ctx := context.Background() cliUsingSessionJoin := f.newSSHClient(ctx, t, &user.User{Username: teleport.SSHSessionJoinPrincipal}) _, err := cliUsingSessionJoin.Listen("tcp", "127.0.0.1:0") diff --git a/lib/srv/sess.go b/lib/srv/sess.go index 4b92762d39107..0d76118e0905e 100644 --- a/lib/srv/sess.go +++ b/lib/srv/sess.go @@ -1345,12 +1345,31 @@ func (s *session) startInteractive(ctx context.Context, scx *ServerContext, p *p Events: scx.Identity.AccessChecker.EnhancedRecordingSet(), } - if err := s.term.WaitForChild(); err != nil { - s.log.WithError(err).Error("Child process never became ready") - return trace.Wrap(err) + bpfService := scx.srv.GetBPF() + + // Only wait for the child to be "ready" if BPF is enabled. This is required + // because PAM might inadvertently move the child process to another cgroup + // by invoking systemd. If this happens, then the cgroup filter used by BPF + // will be looking for events in the wrong cgroup and no events will be captured. + // However, unconditionally waiting for the child to be ready results in PAM + // deadlocking because stdin/stdout/stderr which it uses to relay details from + // PAM auth modules are not properly copied until _after_ the shell request is + // replied to. + if bpfService.Enabled() { + if err := s.term.WaitForChild(); err != nil { + s.log.WithError(err).Error("Child process never became ready") + return trace.Wrap(err) + } + } else { + // Clean up the read half of the pipe, and set it to nil so that when the + // ServerContext is closed it doesn't attempt to a second close. + if err := s.scx.readyr.Close(); err != nil { + s.log.WithError(err).Error("Failed closing child ready pipe") + } + s.scx.readyr = nil } - if cgroupID, err := scx.srv.GetBPF().OpenSession(sessionContext); err != nil { + if cgroupID, err := bpfService.OpenSession(sessionContext); err != nil { s.log.WithError(err).Error("Failed to open enhanced recording (interactive) session") return trace.Wrap(err) } else if cgroupID > 0 { @@ -1359,8 +1378,7 @@ func (s *session) startInteractive(ctx context.Context, scx *ServerContext, p *p go func() { // Close the BPF recording session once the session is closed <-s.stopC - err = scx.srv.GetBPF().CloseSession(sessionContext) - if err != nil { + if err := bpfService.CloseSession(sessionContext); err != nil { s.log.WithError(err).Error("Failed to close enhanced recording (interactive) session") } }() diff --git a/lib/srv/usermgmt.go b/lib/srv/usermgmt.go index f5b3bd187c690..6da3b87eca912 100644 --- a/lib/srv/usermgmt.go +++ b/lib/srv/usermgmt.go @@ -672,6 +672,7 @@ func (u *HostUserManagement) getHostUser(username string) (*HostUser, error) { return &HostUser{ Name: username, UID: usr.Uid, + GID: usr.Gid, Home: usr.HomeDir, Groups: groups, }, trace.NewAggregate(groupErrs...) diff --git a/lib/sshutils/tcpip.go b/lib/sshutils/tcpip.go index 4b92efb0177ce..55ac4ea981cf3 100644 --- a/lib/sshutils/tcpip.go +++ b/lib/sshutils/tcpip.go @@ -101,6 +101,7 @@ func StartRemoteListener(ctx context.Context, sshConn channelOpener, srcAddr str dstHost, dstPort, err := SplitHostPort(conn.RemoteAddr().String()) if err != nil { + conn.Close() logger.WithError(err).Warn("failed to parse addr") return } @@ -112,6 +113,7 @@ func StartRemoteListener(ctx context.Context, sshConn channelOpener, srcAddr str OrigPort: dstPort, } if err := req.CheckAndSetDefaults(); err != nil { + conn.Close() logger.WithError(err).Warn("failed to create forwarded tcpip request") return } @@ -119,6 +121,7 @@ func StartRemoteListener(ctx context.Context, sshConn channelOpener, srcAddr str ch, rch, err := sshConn.OpenChannel(teleport.ChanForwardedTCPIP, reqBytes) if err != nil { + conn.Close() logger.WithError(err).Warn("failed to open channel") continue } diff --git a/lib/tbot/config/migrate_test.go b/lib/tbot/config/migrate_test.go index 31c3421867a1a..b46cb72ffdb04 100644 --- a/lib/tbot/config/migrate_test.go +++ b/lib/tbot/config/migrate_test.go @@ -304,7 +304,7 @@ destinations: }, // Backwards compat with guides { - name: "backwards compat with https://goteleport.com/docs/machine-id/guides/jenkins/", + name: "backwards compat with https://goteleport.com/docs/enroll-resources/machine-id/deployment/jenkins/", input: ` auth_server: "auth.example.com:3025" onboarding: diff --git a/lib/tbot/service_application_tunnel.go b/lib/tbot/service_application_tunnel.go index b21dc022a2fea..97cebbaa22a97 100644 --- a/lib/tbot/service_application_tunnel.go +++ b/lib/tbot/service_application_tunnel.go @@ -134,7 +134,10 @@ func (s *ApplicationTunnelService) buildLocalProxyConfig(ctx context.Context) (l if err != nil { return alpnproxy.LocalProxyConfig{}, trace.Wrap(err, "pinging proxy") } - proxyAddr := proxyPing.Proxy.SSH.PublicAddr + proxyAddr, err := proxyPing.proxyWebAddr() + if err != nil { + return alpnproxy.LocalProxyConfig{}, trace.Wrap(err, "determining proxy web addr") + } s.log.DebugContext(ctx, "Issuing initial certificate for local proxy.") appCert, app, err := s.issueCert(ctx, roles) diff --git a/lib/tbot/service_database_tunnel.go b/lib/tbot/service_database_tunnel.go index f487fa1db47a4..3681edc7ecc74 100644 --- a/lib/tbot/service_database_tunnel.go +++ b/lib/tbot/service_database_tunnel.go @@ -94,7 +94,10 @@ func (s *DatabaseTunnelService) buildLocalProxyConfig(ctx context.Context) (lpCf if err != nil { return alpnproxy.LocalProxyConfig{}, trace.Wrap(err, "pinging proxy") } - proxyAddr := proxyPing.Proxy.SSH.PublicAddr + proxyAddr, err := proxyPing.proxyWebAddr() + if err != nil { + return alpnproxy.LocalProxyConfig{}, trace.Wrap(err, "determining proxy web address") + } // Fetch information about the database and then issue the initial // certificate. We issue the initial certificate to allow us to fail faster. diff --git a/lib/tbot/service_identity_output.go b/lib/tbot/service_identity_output.go index a5b14a46d552b..f91ab93039d4c 100644 --- a/lib/tbot/service_identity_output.go +++ b/lib/tbot/service_identity_output.go @@ -29,7 +29,6 @@ import ( "github.com/gravitational/trace" "github.com/gravitational/teleport/api/client/proto" - "github.com/gravitational/teleport/api/client/webclient" "github.com/gravitational/teleport/api/types" "github.com/gravitational/teleport/lib/auth/authclient" "github.com/gravitational/teleport/lib/config/openssh" @@ -251,7 +250,7 @@ type alpnTester interface { func renderSSHConfig( ctx context.Context, log *slog.Logger, - proxyPing *webclient.PingResponse, + proxyPing *proxyPingResponse, clusterNames []string, dest bot.Destination, certAuthGetter certAuthGetter, @@ -267,11 +266,16 @@ func renderSSHConfig( ) defer span.End() - proxyHost, proxyPort, err := utils.SplitHostPort(proxyPing.Proxy.SSH.PublicAddr) + proxyAddr, err := proxyPing.proxyWebAddr() + if err != nil { + return trace.Wrap(err, "determining proxy web addr") + } + + proxyHost, proxyPort, err := utils.SplitHostPort(proxyAddr) if err != nil { return trace.BadParameter( "proxy %+v has no usable public address: %v", - proxyPing.Proxy.SSH.PublicAddr, err, + proxyAddr, err, ) } @@ -327,7 +331,7 @@ func renderSSHConfig( connUpgradeRequired := false if proxyPing.Proxy.TLSRoutingEnabled { connUpgradeRequired, err = alpnTester.isUpgradeRequired( - ctx, proxyPing.Proxy.SSH.PublicAddr, botCfg.Insecure, + ctx, proxyAddr, botCfg.Insecure, ) if err != nil { return trace.Wrap(err, "determining if ALPN upgrade is required") diff --git a/lib/tbot/service_identity_output_test.go b/lib/tbot/service_identity_output_test.go index e158d43e7d5e0..976d02ebf4cc9 100644 --- a/lib/tbot/service_identity_output_test.go +++ b/lib/tbot/service_identity_output_test.go @@ -175,12 +175,14 @@ func Test_renderSSHConfig(t *testing.T) { err := renderSSHConfig( context.Background(), utils.NewSlogLoggerForTests(), - &webclient.PingResponse{ - ClusterName: mockClusterName, - Proxy: webclient.ProxySettings{ - TLSRoutingEnabled: tc.TLSRouting, - SSH: webclient.SSHProxySettings{ - PublicAddr: mockProxyAddr, + &proxyPingResponse{ + PingResponse: &webclient.PingResponse{ + ClusterName: mockClusterName, + Proxy: webclient.ProxySettings{ + TLSRoutingEnabled: tc.TLSRouting, + SSH: webclient.SSHProxySettings{ + PublicAddr: mockProxyAddr, + }, }, }, }, diff --git a/lib/tbot/service_kubernetes_output.go b/lib/tbot/service_kubernetes_output.go index bf0be90e10bb8..2277e292d4538 100644 --- a/lib/tbot/service_kubernetes_output.go +++ b/lib/tbot/service_kubernetes_output.go @@ -32,7 +32,6 @@ import ( apiclient "github.com/gravitational/teleport/api/client" "github.com/gravitational/teleport/api/client/proto" - "github.com/gravitational/teleport/api/client/webclient" "github.com/gravitational/teleport/api/defaults" "github.com/gravitational/teleport/api/types" "github.com/gravitational/teleport/lib/auth/authclient" @@ -418,7 +417,7 @@ func getKubeCluster(ctx context.Context, clt *authclient.Client, name string) (t // selectKubeConnectionMethod determines the address and SNI that should be // put into the kubeconfig file. -func selectKubeConnectionMethod(proxyPong *webclient.PingResponse) ( +func selectKubeConnectionMethod(proxyPong *proxyPingResponse) ( clusterAddr string, sni string, err error, ) { // First we check for TLS routing. If this is enabled, we use the Proxy's @@ -427,8 +426,11 @@ func selectKubeConnectionMethod(proxyPong *webclient.PingResponse) ( // Even if KubePublicAddr is specified, we still use the general // PublicAddr when using TLS routing. if proxyPong.Proxy.TLSRoutingEnabled { - addr := proxyPong.Proxy.SSH.PublicAddr - host, _, err := net.SplitHostPort(proxyPong.Proxy.SSH.PublicAddr) + addr, err := proxyPong.proxyWebAddr() + if err != nil { + return "", "", trace.Wrap(err) + } + host, _, err := net.SplitHostPort(addr) if err != nil { return "", "", trace.Wrap(err, "parsing proxy public_addr") } diff --git a/lib/tbot/service_kubernetes_output_test.go b/lib/tbot/service_kubernetes_output_test.go index 778c947fd07be..aeb3157df6cf7 100644 --- a/lib/tbot/service_kubernetes_output_test.go +++ b/lib/tbot/service_kubernetes_output_test.go @@ -279,7 +279,9 @@ func Test_selectKubeConnectionMethod(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - addr, sni, err := selectKubeConnectionMethod(tt.proxyPing) + addr, sni, err := selectKubeConnectionMethod(&proxyPingResponse{ + PingResponse: tt.proxyPing, + }) require.NoError(t, err) require.Equal(t, tt.wantAddr, addr) require.Equal(t, tt.wantSNI, sni) diff --git a/lib/tbot/service_ssh_multiplexer.go b/lib/tbot/service_ssh_multiplexer.go index 6a678db209302..c6566ecf5d38a 100644 --- a/lib/tbot/service_ssh_multiplexer.go +++ b/lib/tbot/service_ssh_multiplexer.go @@ -274,11 +274,15 @@ func (s *SSHMultiplexerService) setup(ctx context.Context) ( if err != nil { return nil, nil, "", nil, trace.Wrap(err) } - proxyAddr := proxyPing.Proxy.SSH.PublicAddr - proxyHost, _, err = net.SplitHostPort(proxyPing.Proxy.SSH.PublicAddr) + proxyAddr, err := proxyPing.proxyWebAddr() + if err != nil { + return nil, nil, "", nil, trace.Wrap(err, "determining proxy web addr") + } + proxyHost, _, err = net.SplitHostPort(proxyAddr) if err != nil { return nil, nil, "", nil, trace.Wrap(err) } + connUpgradeRequired := false if proxyPing.Proxy.TLSRoutingEnabled { connUpgradeRequired, err = s.alpnUpgradeCache.isUpgradeRequired( diff --git a/lib/tbot/tbot.go b/lib/tbot/tbot.go index 2594d4b17ca80..1ce912ad65b98 100644 --- a/lib/tbot/tbot.go +++ b/lib/tbot/tbot.go @@ -152,17 +152,32 @@ func (b *Bot) Run(ctx context.Context) (err error) { return trace.Wrap(err) } - addr, _ := b.cfg.Address() - resolver, err := reversetunnelclient.CachingResolver( - ctx, - reversetunnelclient.WebClientResolver(&webclient.Config{ - Context: ctx, - ProxyAddr: addr, - Insecure: b.cfg.Insecure, - }), - nil /* clock */) - if err != nil { - return trace.Wrap(err) + addr, addrKind := b.cfg.Address() + var resolver reversetunnelclient.Resolver + if shouldUseProxyAddr() { + if addrKind != config.AddressKindProxy { + return trace.BadParameter("TBOT_USE_PROXY_ADDR requires that a proxy address is set using --proxy-server or proxy_server") + } + // If the user has indicated they want tbot to prefer using the proxy + // address they have configured, we use a static resolver set to this + // address. We also assume that they have TLS routing/multiplexing + // enabled, since otherwise we'd need them to manually configure an + // an entry for each kind of address. + resolver = reversetunnelclient.StaticResolver( + addr, types.ProxyListenerMode_Multiplex, + ) + } else { + resolver, err = reversetunnelclient.CachingResolver( + ctx, + reversetunnelclient.WebClientResolver(&webclient.Config{ + Context: ctx, + ProxyAddr: addr, + Insecure: b.cfg.Insecure, + }), + nil /* clock */) + if err != nil { + return trace.Wrap(err) + } } // Create an error group to manage all the services lifetimes. @@ -512,10 +527,11 @@ func (b *Bot) preRunChecks(ctx context.Context) (_ func() error, err error) { ctx, span := tracer.Start(ctx, "Bot/preRunChecks") defer func() { apitracing.EndSpan(span, err) }() - switch _, addrKind := b.cfg.Address(); addrKind { + _, addrKind := b.cfg.Address() + switch addrKind { case config.AddressKindUnspecified: return nil, trace.BadParameter( - "either a proxy or auth address must be set using --proxy, --auth-server or configuration", + "either a proxy or auth address must be set using --proxy-server, --auth-server or configuration", ) case config.AddressKindAuth: // TODO(noah): DELETE IN V17.0.0 @@ -716,10 +732,10 @@ type proxyPingCache struct { log *slog.Logger mu sync.RWMutex - cachedValue *webclient.PingResponse + cachedValue *proxyPingResponse } -func (p *proxyPingCache) ping(ctx context.Context) (*webclient.PingResponse, error) { +func (p *proxyPingCache) ping(ctx context.Context) (*proxyPingResponse, error) { p.mu.Lock() defer p.mu.Unlock() if p.cachedValue != nil { @@ -753,11 +769,50 @@ func (p *proxyPingCache) ping(ctx context.Context) (*webclient.PingResponse, err return nil, trace.Wrap(err) } p.log.DebugContext(ctx, "Successfully pinged proxy.", "pong", res) - p.cachedValue = res + p.cachedValue = &proxyPingResponse{ + PingResponse: res, + configuredProxyAddr: p.botCfg.ProxyServer, + } return p.cachedValue, nil } +type proxyPingResponse struct { + *webclient.PingResponse + configuredProxyAddr string +} + +// useProxyAddrEnv is an environment variable which can be set to +// force `tbot` to prefer using the proxy address explicitly provided by the +// user over the one fetched from the proxy ping. This is only intended to work +// in cases where TLS routing is enabled, and is intended to support cases where +// the Proxy is accessible from multiple addresses, and the one included in the +// ProxyPing is incorrect. +const useProxyAddrEnv = "TBOT_USE_PROXY_ADDR" + +// shouldUseProxyAddr returns true if the TBOT_USE_PROXY_ADDR environment +// variable is set to "yes". More generally, this indicates that the user wishes +// for tbot to prefer using the proxy address that has been explicitly provided +// by the user rather than the one fetched via a discovery process (e.g ping). +func shouldUseProxyAddr() bool { + return os.Getenv(useProxyAddrEnv) == "yes" +} + +// proxyWebAddr returns the address to use to connect to the proxy web port. +// In TLS routing mode, this address should be used for most/all connections. +// This function takes into account the TBOT_USE_PROXY_ADDR environment +// variable, which can be used to force the use of the proxy address explicitly +// provided by the user rather than use the one fetched from the proxy ping. +func (p *proxyPingResponse) proxyWebAddr() (string, error) { + if shouldUseProxyAddr() { + if p.configuredProxyAddr == "" { + return "", trace.BadParameter("TBOT_USE_PROXY_ADDR set but no explicit proxy address configured") + } + return p.configuredProxyAddr, nil + } + return p.Proxy.SSH.PublicAddr, nil +} + type alpnProxyConnUpgradeRequiredCache struct { botCfg *config.BotConfig log *slog.Logger diff --git a/lib/usagereporter/teleport/usagereporter.go b/lib/usagereporter/teleport/usagereporter.go index d074faa3f5a45..5a1b9dba5822d 100644 --- a/lib/usagereporter/teleport/usagereporter.go +++ b/lib/usagereporter/teleport/usagereporter.go @@ -112,6 +112,7 @@ func (t *StreamingUsageReporter) AnonymizeAndSubmit(events ...Anonymizable) { req := e.Anonymize(t.anonymizer) req.Timestamp = timestamppb.New(t.clock.Now()) req.ClusterName = t.anonymizer.AnonymizeString(t.clusterName.GetClusterName()) + req.TeleportVersion = teleport.Version t.usageReporter.AddEventsToQueue(&req) } } diff --git a/lib/utils/errors.go b/lib/utils/errors.go index cbbfd687348ca..a2ba2dc73a8dd 100644 --- a/lib/utils/errors.go +++ b/lib/utils/errors.go @@ -19,6 +19,7 @@ package utils import ( + "context" "errors" "io" "net" @@ -90,6 +91,71 @@ func IsUntrustedCertErr(err error) bool { strings.Contains(errMsg, "certificate is not trusted") } +// CanExplainNetworkError returns a simple to understand error message that can +// be used to debug common network and/or protocol errors. +func CanExplainNetworkError(err error) (string, bool) { + var derr *net.DNSError + + switch { + // Connection refused errors can be reproduced by attempting to connect to a + // host:port that no process is listening on. The raw error typically looks + // like the following: + // + // dial tcp 127.0.0.1:8000: connect: connection refused + case errors.Is(err, syscall.ECONNREFUSED): + return `Connection Refused + +Teleport was unable to connect to the requested host, possibly because the server is not running. Ensure the server is running and listening on the correct port. + +Use "nc -vz HOST PORT" to help debug this issue.`, true + // Host unreachable errors can be reproduced by running + // "ip route add unreachable HOST" to update the routing table to make + // the host unreachable. Packets will be discarded and an ICMP message + // will be returned. The raw error typically looks like the following: + // + // dial tcp 10.10.10.10:8000: connect: no route to host + case errors.Is(err, syscall.EHOSTUNREACH): + return `No Route to Host + +Teleport could not connect to the requested host, likely because there is no valid network path to reach it. Check the network routing table to ensure a valid path to the host exists. + +Use "ping HOST" and "ip route get HOST" to help debug this issue.`, true + // Connection reset errors can be reproduced by creating a HTTP server that + // accepts requests but closes the connection before writing a response. The + // raw error typically looks like the following: + // + // read tcp 127.0.0.1:49764->127.0.0.1:8000: read: connection reset by peer + case errors.Is(err, syscall.ECONNRESET): + return `Connection Reset by Peer + +Teleport could not complete the request because the server abruptly closed the connection before the response was received. To resolve this issue, ensure the server (or load balancer) does not have a timeout terminating the connection early and verify that the server is not crash looping. + +Use protocol-specific tools (e.g., curl, psql) to help debug this issue.`, true + // Slow responses can be reprodued by creating a HTTP server that does a + // time.Sleep before responding. The raw error typically looks like the following: + // + // context deadline exceeded + case errors.Is(err, context.DeadlineExceeded): + return `Context Deadline Exceeded + +Teleport did not receive a response within the timeout period, likely due to the system being overloaded, network congestion, or a firewall blocking traffic. To resolve this issue, connect to the host directly and ensure it is responding promptly. + +Use protocol-specific tools (e.g., curl, psql) to assist in debugging this issue.`, true + // No such host errors can be reproduced by attempting to resolve a invalid + // domain name. The raw error typically looks like the following: + // + // dial tcp: lookup qweqweqwe.com: no such host + case errors.As(err, &derr) && derr.IsNotFound: + return `No Such Host + +Teleport was unable to resolve the provided domain name, likely because the domain does not exist. To resolve this issue, verify the domain is correct and ensure the DNS resolver is properly resolving it. + +Use "dig +short HOST" to help debug this issue.`, true + } + + return "", false +} + const ( // SelfSignedCertsMsg is a helper message to point users towards helpful documentation. SelfSignedCertsMsg = "Your proxy certificate is not trusted or expired. " + diff --git a/lib/utils/hostid/hostid_test.go b/lib/utils/hostid/hostid_test.go index 2ea22c4e71e7f..668bc7bb7e0b5 100644 --- a/lib/utils/hostid/hostid_test.go +++ b/lib/utils/hostid/hostid_test.go @@ -24,12 +24,14 @@ import ( "path/filepath" "strings" "testing" + "time" "github.com/google/uuid" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "golang.org/x/sync/errgroup" + "github.com/gravitational/teleport/api/utils/retryutils" "github.com/gravitational/teleport/lib/utils" "github.com/gravitational/teleport/lib/utils/hostid" ) @@ -53,7 +55,16 @@ func TestReadOrCreate(t *testing.T) { i := i wg.Go(func() error { <-barrier - id, err := hostid.ReadOrCreateFile(dir) + id, err := hostid.ReadOrCreateFile( + dir, + hostid.WithBackoff(retryutils.RetryV2Config{ + First: 50 * time.Millisecond, + Driver: retryutils.NewExponentialDriver(100 * time.Millisecond), + Max: 15 * time.Second, + Jitter: retryutils.NewFullJitter(), + }), + hostid.WithIterationLimit(10), + ) ids[i] = id return err }) diff --git a/lib/utils/hostid/hostid_unix.go b/lib/utils/hostid/hostid_unix.go index b5334e641c232..0dfae4b6ddafb 100644 --- a/lib/utils/hostid/hostid_unix.go +++ b/lib/utils/hostid/hostid_unix.go @@ -27,6 +27,7 @@ import ( "github.com/google/uuid" "github.com/gravitational/trace" + "github.com/gravitational/teleport/api/utils/retryutils" "github.com/gravitational/teleport/lib/utils" ) @@ -43,13 +44,52 @@ func WriteFile(dataDir string, id string) error { return nil } +type options struct { + retryConfig retryutils.RetryV2Config + iterationLimit int +} + +// WithBackoff overrides the default backoff configuration of +// [ReadOrCreateFile]. +func WithBackoff(cfg retryutils.RetryV2Config) func(*options) { + return func(o *options) { + o.retryConfig = cfg + } +} + +// WithIterationLimit overrides the default number of time +// [ReadOrCreateFile] will attempt to produce a hostid. +func WithIterationLimit(limit int) func(*options) { + return func(o *options) { + o.iterationLimit = limit + } +} + // ReadOrCreateFile looks for a hostid file in the data dir. If present, -// returns the UUID from it, otherwise generates one -func ReadOrCreateFile(dataDir string) (string, error) { +// returns the UUID from it, otherwise generates one. +func ReadOrCreateFile(dataDir string, opts ...func(*options)) (string, error) { + o := options{ + retryConfig: retryutils.RetryV2Config{ + First: 100 * time.Millisecond, + Driver: retryutils.NewLinearDriver(100 * time.Millisecond), + Max: time.Second, + Jitter: retryutils.NewFullJitter(), + }, + iterationLimit: 3, + } + + for _, opt := range opts { + opt(&o) + } + hostUUIDFileLock := GetPath(dataDir) + ".lock" - const iterationLimit = 3 - for i := 0; i < iterationLimit; i++ { + backoff, err := retryutils.NewRetryV2(o.retryConfig) + if err != nil { + return "", trace.Wrap(err) + } + + for i := 0; i < o.iterationLimit; i++ { if read, err := ReadFile(dataDir); err == nil { return read, nil } else if !trace.IsNotFound(err) { @@ -57,7 +97,7 @@ func ReadOrCreateFile(dataDir string) (string, error) { } // Checking error instead of the usual uuid.New() in case uuid generation - // fails due to not enough randomness. It's been known to happen happen when + // fails due to not enough randomness. It's been known to happen when // Teleport starts very early in the node initialization cycle and /dev/urandom // isn't ready yet. rawID, err := uuid.NewRandom() @@ -91,12 +131,14 @@ func ReadOrCreateFile(dataDir string) (string, error) { id, err := writeFile(rawID.String()) if err != nil { if errors.Is(err, utils.ErrUnsuccessfulLockTry) { - time.Sleep(100 * time.Millisecond) + backoff.Inc() + <-backoff.After() continue } return "", trace.Wrap(err) } + backoff.Reset() return id, nil } diff --git a/lib/utils/utils_test.go b/lib/utils/utils_test.go index e1625915bb204..075d99b3f9e98 100644 --- a/lib/utils/utils_test.go +++ b/lib/utils/utils_test.go @@ -234,6 +234,16 @@ func TestIsValidHostname(t *testing.T) { hostname: "some-host-1.example.com", assert: require.True, }, + { + name: "only lower case works", + hostname: "only-lower-case-works", + assert: require.True, + }, + { + name: "mixed upper case fails", + hostname: "mixed-UPPER-CASE-fails", + assert: require.False, + }, { name: "one component", hostname: "example", diff --git a/lib/web/conn_upgrade.go b/lib/web/conn_upgrade.go index df8c4684dcfc7..7a081aa9ea975 100644 --- a/lib/web/conn_upgrade.go +++ b/lib/web/conn_upgrade.go @@ -109,7 +109,7 @@ func (h *Handler) upgradeALPNWebSocket(w http.ResponseWriter, r *http.Request, u } wsConn, err := upgrader.Upgrade(w, r, nil) if err != nil { - h.logger.DebugContext(r.Context(), "Failed to upgrade weboscket.", "error", err) + h.logger.DebugContext(r.Context(), "Failed to upgrade WebSocket.", "error", err) return nil, trace.Wrap(err) } defer wsConn.Close() diff --git a/lib/web/integrations_awsoidc.go b/lib/web/integrations_awsoidc.go index 631643f1fd7d4..ca4983354517f 100644 --- a/lib/web/integrations_awsoidc.go +++ b/lib/web/integrations_awsoidc.go @@ -35,6 +35,7 @@ import ( "github.com/gravitational/teleport" "github.com/gravitational/teleport/api/client" "github.com/gravitational/teleport/api/client/proto" + "github.com/gravitational/teleport/api/constants" apidefaults "github.com/gravitational/teleport/api/defaults" integrationv1 "github.com/gravitational/teleport/api/gen/proto/go/teleport/integration/v1" "github.com/gravitational/teleport/api/types" @@ -49,6 +50,7 @@ import ( "github.com/gravitational/teleport/lib/reversetunnelclient" "github.com/gravitational/teleport/lib/services" libutils "github.com/gravitational/teleport/lib/utils" + awsutils "github.com/gravitational/teleport/lib/utils/aws" "github.com/gravitational/teleport/lib/utils/oidc" "github.com/gravitational/teleport/lib/web/scripts/oneoff" "github.com/gravitational/teleport/lib/web/ui" @@ -960,7 +962,16 @@ func (h *Handler) awsOIDCCreateAWSAppAccess(w http.ResponseWriter, r *http.Reque publicAddr := libutils.DefaultAppPublicAddr(integrationName, h.PublicProxyAddr()) - appServer, err := types.NewAppServerForAWSOIDCIntegration(integrationName, h.cfg.HostUUID, publicAddr) + parsedRoleARN, err := awsutils.ParseRoleARN(ig.GetAWSOIDCIntegrationSpec().RoleARN) + if err != nil { + return nil, trace.Wrap(err) + } + + labels := map[string]string{ + constants.AWSAccountIDLabel: parsedRoleARN.AccountID, + } + + appServer, err := types.NewAppServerForAWSOIDCIntegration(integrationName, h.cfg.HostUUID, publicAddr, labels) if err != nil { return nil, trace.Wrap(err) } diff --git a/lib/web/integrations_awsoidc_test.go b/lib/web/integrations_awsoidc_test.go index 761d794951fa1..ab8a45d36ec6e 100644 --- a/lib/web/integrations_awsoidc_test.go +++ b/lib/web/integrations_awsoidc_test.go @@ -982,7 +982,7 @@ func TestAWSOIDCAppAccessAppServerCreationDeletion(t *testing.T) { myIntegration, err := types.NewIntegrationAWSOIDC(types.Metadata{ Name: "my-integration", }, &types.AWSOIDCIntegrationSpecV1{ - RoleARN: "some-arn-role", + RoleARN: "arn:aws:iam::123456789012:role/teleport", }) require.NoError(t, err) @@ -1009,7 +1009,8 @@ func TestAWSOIDCAppAccessAppServerCreationDeletion(t *testing.T) { Kind: types.KindAppServer, Version: types.V3, Metadata: types.Metadata{ - Name: "my-integration", + Name: "my-integration", + Labels: map[string]string{"aws_account_id": "123456789012"}, }, Spec: types.AppServerSpecV3{ Version: api.Version, @@ -1018,7 +1019,8 @@ func TestAWSOIDCAppAccessAppServerCreationDeletion(t *testing.T) { Kind: types.KindApp, Version: types.V3, Metadata: types.Metadata{ - Name: "my-integration", + Name: "my-integration", + Labels: map[string]string{"aws_account_id": "123456789012"}, }, Spec: types.AppSpecV3{ URI: "https://console.aws.amazon.com", @@ -1048,7 +1050,7 @@ func TestAWSOIDCAppAccessAppServerCreationDeletion(t *testing.T) { myIntegrationWithAccountID, err := types.NewIntegrationAWSOIDC(types.Metadata{ Name: "123456789012", }, &types.AWSOIDCIntegrationSpecV1{ - RoleARN: "some-arn-role", + RoleARN: "arn:aws:iam::123456789012:role/teleport", }) require.NoError(t, err) diff --git a/lib/web/scripts/node-join/install.sh b/lib/web/scripts/node-join/install.sh index f1d82b2b3be58..3151fb5c89885 100755 --- a/lib/web/scripts/node-join/install.sh +++ b/lib/web/scripts/node-join/install.sh @@ -230,15 +230,33 @@ log_important() { log_cleanup_message() { log_only "This script does not overwrite any existing settings or Teleport installations." log_only "Please clean up by running any of the following steps as necessary:" + if is_using_systemd; then + log_only "- stop teleport's service" + log_only " - systemctl stop teleport" + fi log_only "- stop any running Teleport processes" log_only " - pkill -f teleport" log_only "- remove any data under ${TELEPORT_DATA_DIR}, along with the directory itself" log_only " - rm -rf ${TELEPORT_DATA_DIR}" log_only "- remove any configuration at ${TELEPORT_CONFIG_PATH}" log_only " - rm -f ${TELEPORT_CONFIG_PATH}" - log_only "- remove any Teleport binaries (${TELEPORT_BINARY_LIST}) installed under ${TELEPORT_BINARY_DIR}" - for BINARY in ${TELEPORT_BINARY_LIST}; do EXAMPLE_DELETE_COMMAND+="${TELEPORT_BINARY_DIR}/${BINARY} "; done - log_only " - rm -f ${EXAMPLE_DELETE_COMMAND}" + if check_exists apt; then + log_only "- remove teleport package" + log_only " - apt remove teleport" + elif check_exists yum; then + log_only "- remove teleport package" + log_only " - yum remove teleport" + elif check_exists dnf; then + log_only "- remove teleport package" + log_only " - dnf remove teleport" + elif check_exists zypper; then + log_only "- remove teleport package" + log_only " - zypper remove teleport" + else + log_only "- remove any Teleport binaries (${TELEPORT_BINARY_LIST}) installed under ${TELEPORT_BINARY_DIR}" + for BINARY in ${TELEPORT_BINARY_LIST}; do EXAMPLE_DELETE_COMMAND+="${TELEPORT_BINARY_DIR}/${BINARY} "; done + log_only " - rm -f ${EXAMPLE_DELETE_COMMAND}" + fi if is_macos_host; then log_only "- unload and remove Teleport launchd config ${LAUNCHD_CONFIG_PATH}/${LAUNCHD_PLIST_FILE}" log_only " - launchctl unload ${LAUNCHD_CONFIG_PATH}/${LAUNCHD_PLIST_FILE}" diff --git a/lib/web/terminal.go b/lib/web/terminal.go index 6b06a53832c3d..f1a674a927dde 100644 --- a/lib/web/terminal.go +++ b/lib/web/terminal.go @@ -875,7 +875,7 @@ func (t *TerminalHandler) streamTerminal(ctx context.Context, tc *client.Telepor t.log.WithError(err).Error("Unable to send close event to web client.") } - if err := t.stream.Close(); err != nil { + if err := t.stream.Close(); err != nil && !errors.Is(err, io.EOF) { t.log.WithError(err).Error("Unable to close client web socket.") return } diff --git a/lib/web/terminal/terminal.go b/lib/web/terminal/terminal.go index c92dae03fb2d1..b455fc9eb7287 100644 --- a/lib/web/terminal/terminal.go +++ b/lib/web/terminal/terminal.go @@ -115,8 +115,8 @@ func (t *WSStream) WriteMessage(messageType int, data []byte) error { // WriteError displays an error in the terminal window. func (t *WSStream) WriteError(msg string) { - if _, writeErr := replacer.WriteString(t, msg); writeErr != nil { - t.log.WithError(writeErr).Warnf("Unable to send error to terminal: %v", msg) + if _, err := replacer.WriteString(t, msg); err != nil && !errors.Is(err, websocket.ErrCloseSent) { + t.log.WithError(err).Warnf("Unable to send error to terminal: %v", msg) } } diff --git a/lib/web/ui/server.go b/lib/web/ui/server.go index 6037c1540e6ae..21c913559b237 100644 --- a/lib/web/ui/server.go +++ b/lib/web/ui/server.go @@ -136,12 +136,14 @@ func MakeServer(clusterName string, server types.Server, logins []string) Server // EKSCluster represents and EKS cluster, analog of awsoidc.EKSCluster, but used by web ui. type EKSCluster struct { - Name string `json:"name"` - Region string `json:"region"` - Arn string `json:"arn"` - Labels []Label `json:"labels"` - JoinLabels []Label `json:"joinLabels"` - Status string `json:"status"` + Name string `json:"name"` + Region string `json:"region"` + Arn string `json:"arn"` + Labels []Label `json:"labels"` + JoinLabels []Label `json:"joinLabels"` + Status string `json:"status"` + EndpointPublicAccess bool `json:"endpointPublicAccess"` + AuthenticationMode string `json:"authenticationMode"` } // KubeCluster describes a kube cluster. @@ -179,12 +181,14 @@ func MakeEKSClusters(clusters []*integrationv1.EKSCluster) []EKSCluster { for _, cluster := range clusters { uiEKSClusters = append(uiEKSClusters, EKSCluster{ - Name: cluster.Name, - Region: cluster.Region, - Arn: cluster.Arn, - Labels: makeLabels(cluster.Labels), - JoinLabels: makeLabels(cluster.JoinLabels), - Status: cluster.Status, + Name: cluster.Name, + Region: cluster.Region, + Arn: cluster.Arn, + Labels: makeLabels(cluster.Labels), + JoinLabels: makeLabels(cluster.JoinLabels), + Status: cluster.Status, + EndpointPublicAccess: cluster.EndpointPublicAccess, + AuthenticationMode: cluster.AuthenticationMode, }) } return uiEKSClusters diff --git a/proto/prehog/v1alpha/teleport.proto b/proto/prehog/v1alpha/teleport.proto index f3d3ee78cbfb2..854615b729e15 100644 --- a/proto/prehog/v1alpha/teleport.proto +++ b/proto/prehog/v1alpha/teleport.proto @@ -1408,6 +1408,13 @@ message SubmitEventRequest { // PostHog timestamp google.protobuf.Timestamp timestamp = 2; + // teleport_version is the version of the Teleport auth server that submitted + // the event, without the "v" prefix. + // For example: 16.4.7 + // + // PostHog property: tp.teleport_version + string teleport_version = 95; + // the event being submitted oneof event { UserLoginEvent user_login = 3; @@ -1549,6 +1556,8 @@ message SubmitEventRequest { AccessGraphCrownJewelCreateEvent access_graph_crown_jewel_create = 91; UIAccessGraphCrownJewelDiffViewEvent ui_access_graph_crown_jewel_diff_view = 92; + + // note that 95 is used for "teleport_version" above. } reserved 8; // UIOnboardGetStartedClickEvent diff --git a/tool/tctl/common/auth_command.go b/tool/tctl/common/auth_command.go index e02632d118f02..cb7d47bcb27a3 100644 --- a/tool/tctl/common/auth_command.go +++ b/tool/tctl/common/auth_command.go @@ -79,6 +79,7 @@ type AuthCommand struct { windowsDomain string windowsPKIDomain string windowsSID string + omitCDP bool signOverwrite bool password string caType string @@ -150,6 +151,7 @@ func (a *AuthCommand) Initialize(app *kingpin.Application, config *servicecfg.Co a.authSign.Flag("windows-domain", `Active Directory domain for which this cert is valid. Only used when --format is set to "windows"`).StringVar(&a.windowsDomain) a.authSign.Flag("windows-pki-domain", `Active Directory domain where CRLs will be located. Only used when --format is set to "windows"`).StringVar(&a.windowsPKIDomain) a.authSign.Flag("windows-sid", `Optional Security Identifier to embed in the certificate. Only used when --format is set to "windows"`).StringVar(&a.windowsSID) + a.authSign.Flag("omit-cdp", `Omit CRL Distribution Points from the cert. Only used when --format is set to "windows"`).BoolVar(&a.omitCDP) a.authRotate = auth.Command("rotate", "Rotate certificate authorities in the cluster.") a.authRotate.Flag("grace-period", "Grace period keeps previous certificate authorities signatures valid, if set to 0 will force users to re-login and nodes to re-register."). @@ -363,6 +365,7 @@ func (a *AuthCommand) generateWindowsCert(ctx context.Context, clusterAPI certif TTL: a.genTTL, ClusterName: cn.GetClusterName(), LDAPConfig: windows.LDAPConfig{Domain: domain}, + OmitCDP: a.omitCDP, AuthClient: clusterAPI, }) if err != nil { diff --git a/tool/tctl/common/resource_command.go b/tool/tctl/common/resource_command.go index 7bd410e86f3ea..4dc78b9f6a4fd 100644 --- a/tool/tctl/common/resource_command.go +++ b/tool/tctl/common/resource_command.go @@ -1460,6 +1460,8 @@ func (rc *ResourceCommand) Delete(ctx context.Context, client *authclient.Client types.KindInstaller, types.KindUIConfig, types.KindNetworkRestrictions, + types.KindAutoUpdateConfig, + types.KindAutoUpdateVersion, } if !slices.Contains(singletonResources, rc.ref.Kind) && (rc.ref.Kind == "" || rc.ref.Name == "") { return trace.BadParameter("provide a full resource name to delete, for example:\n$ tctl rm cluster/east\n") @@ -1843,6 +1845,16 @@ func (rc *ResourceCommand) Delete(ctx context.Context, client *authclient.Client return trace.Wrap(err) } fmt.Printf("SPIFFE federation %q has been deleted\n", rc.ref.Name) + case types.KindAutoUpdateConfig: + if err := client.DeleteAutoUpdateConfig(ctx); err != nil { + return trace.Wrap(err) + } + fmt.Printf("AutoUpdateConfig has been deleted\n") + case types.KindAutoUpdateVersion: + if err := client.DeleteAutoUpdateVersion(ctx); err != nil { + return trace.Wrap(err) + } + fmt.Printf("AutoUpdateVersion has been deleted\n") default: return trace.BadParameter("deleting resources of type %q is not supported", rc.ref.Kind) } diff --git a/tool/tctl/common/resource_command_test.go b/tool/tctl/common/resource_command_test.go index 603d303a7aa4a..e4bb3d867458a 100644 --- a/tool/tctl/common/resource_command_test.go +++ b/tool/tctl/common/resource_command_test.go @@ -1908,11 +1908,15 @@ func testCreateAppServer(t *testing.T, clt *authclient.Client) { kind: app_server metadata: name: my-integration + labels: + account_id: "123456789012" spec: app: kind: app metadata: name: my-integration + labels: + account_id: "123456789012" spec: uri: https://console.aws.amazon.com integration: my-integration @@ -1956,7 +1960,7 @@ version: v3 appServers := mustDecodeJSON[[]*types.AppServerV3](t, buf) require.Len(t, appServers, 1) - expectedAppServer, err := types.NewAppServerForAWSOIDCIntegration("my-integration", "c6cfe5c2-653f-4e5d-a914-bfac5a7baf38", "integration.example.com") + expectedAppServer, err := types.NewAppServerForAWSOIDCIntegration("my-integration", "c6cfe5c2-653f-4e5d-a914-bfac5a7baf38", "integration.example.com", map[string]string{"account_id": "123456789012"}) require.NoError(t, err) require.Empty(t, cmp.Diff( expectedAppServer, @@ -2227,6 +2231,12 @@ version: v1 protocmp.IgnoreFields(&headerv1.Metadata{}, "id", "revision"), protocmp.Transform(), )) + + // Delete the resource + _, err = runResourceCommand(t, clt, []string{"rm", types.KindAutoUpdateConfig}) + require.NoError(t, err) + _, err = runResourceCommand(t, clt, []string{"get", types.KindAutoUpdateConfig}) + require.ErrorContains(t, err, "autoupdate_config \"autoupdate-config\" doesn't exist") } func testCreateAutoUpdateVersion(t *testing.T, clt *authclient.Client) { @@ -2263,6 +2273,12 @@ version: v1 protocmp.IgnoreFields(&headerv1.Metadata{}, "id", "revision"), protocmp.Transform(), )) + + // Delete the resource + _, err = runResourceCommand(t, clt, []string{"rm", types.KindAutoUpdateVersion}) + require.NoError(t, err) + _, err = runResourceCommand(t, clt, []string{"get", types.KindAutoUpdateVersion}) + require.ErrorContains(t, err, "autoupdate_version \"autoupdate-version\" doesn't exist") } func TestPluginResourceWrapper(t *testing.T) { diff --git a/tool/tsh/common/mfa.go b/tool/tsh/common/mfa.go index 1a7f61ca53f2c..3d7b6eab84ee8 100644 --- a/tool/tsh/common/mfa.go +++ b/tool/tsh/common/mfa.go @@ -198,12 +198,14 @@ type mfaAddCommand struct { devName string devType string - // allowPasswordless is initially true if --allow-passwordless is set, false - // if not explicitly requested. - // It can only be set by users if wancli.IsFIDO2Available() is true. + // allowPasswordless and allowPasswordlessSet hold the state of the + // --(no-)allow-passwordless flag. + // + // allowPasswordless can only be set by users if wancli.IsFIDO2Available() is + // true. // Note that Touch ID registrations are always passwordless-capable, // regardless of other settings. - allowPasswordless bool + allowPasswordless, allowPasswordlessSet bool } func newMFAAddCommand(parent *kingpin.CmdClause) *mfaAddCommand { @@ -214,7 +216,9 @@ func newMFAAddCommand(parent *kingpin.CmdClause) *mfaAddCommand { c.Flag("type", fmt.Sprintf("Type of the new MFA device (%s)", strings.Join(defaultDeviceTypes, ", "))). EnumVar(&c.devType, defaultDeviceTypes...) if wancli.IsFIDO2Available() { - c.Flag("allow-passwordless", "Allow passwordless logins").BoolVar(&c.allowPasswordless) + c.Flag("allow-passwordless", "Allow passwordless logins"). + IsSetByUser(&c.allowPasswordlessSet). + BoolVar(&c.allowPasswordless) } return c } @@ -266,9 +270,7 @@ func (c *mfaAddCommand) run(cf *CLIConf) error { switch c.devType { case webauthnDeviceType: // Ask the user? - // c.allowPasswordless=false at this point only means that the flag wasn't - // explicitly set. - if !c.allowPasswordless && wancli.IsFIDO2Available() { + if !c.allowPasswordlessSet && wancli.IsFIDO2Available() { answer, err := prompt.PickOne(ctx, os.Stdout, prompt.Stdin(), "Allow passwordless logins", []string{"YES", "NO"}) if err != nil { return trace.Wrap(err) diff --git a/tool/tsh/common/putty_config_windows.go b/tool/tsh/common/putty_config_windows.go index 4df114c1259a5..7d202895d3b47 100644 --- a/tool/tsh/common/putty_config_windows.go +++ b/tool/tsh/common/putty_config_windows.go @@ -52,6 +52,8 @@ const puttyDwordProxyLogToTerm = `00000002` // only until session starts const puttyPermitRSASHA1 = `00000000` const puttyPermitRSASHA256 = `00000001` const puttyPermitRSASHA512 = `00000001` +const puttyAuthGSSAPI = `00000000` +const puttyAuthGSSAPIKEX = `00000000` // despite the strings/ints in struct, these are stored in the registry as DWORDs type puttyRegistrySessionDwords struct { @@ -60,6 +62,8 @@ type puttyRegistrySessionDwords struct { ProxyPort int // dword ProxyMethod string // dword ProxyLogToTerm string // dword + AuthGSSAPI string // dword + AuthGSSAPIKEX string // dword } type puttyRegistrySessionStrings struct { @@ -93,6 +97,8 @@ func addPuTTYSession(proxyHostname string, hostname string, port int, login stri ProxyPort: puttyDefaultProxyPort, ProxyMethod: puttyDwordProxyMethod, ProxyLogToTerm: puttyDwordProxyLogToTerm, + AuthGSSAPI: puttyAuthGSSAPI, + AuthGSSAPIKEX: puttyAuthGSSAPIKEX, } sessionStrings := puttyRegistrySessionStrings{ @@ -130,6 +136,12 @@ func addPuTTYSession(proxyHostname string, hostname string, port int, login stri if err := registry.WriteDword(pk, "ProxyLogToTerm", sessionDwords.ProxyLogToTerm); err != nil { return trace.Wrap(err) } + if err := registry.WriteDword(pk, "AuthGSSAPI", sessionDwords.AuthGSSAPI); err != nil { + return trace.Wrap(err) + } + if err := registry.WriteDword(pk, "AuthGSSAPIKEX", sessionDwords.AuthGSSAPIKEX); err != nil { + return trace.Wrap(err) + } // write strings if err := registry.WriteString(pk, "Hostname", sessionStrings.Hostname); err != nil { diff --git a/tool/tsh/common/tsh.go b/tool/tsh/common/tsh.go index 8cd97e95d6f73..9d091c188e3c6 100644 --- a/tool/tsh/common/tsh.go +++ b/tool/tsh/common/tsh.go @@ -4777,7 +4777,18 @@ func onStatus(cf *CLIConf) error { return trace.Wrap(err) } - if err := printLoginInformation(cf, profile, profiles, cf.getAccessListsToReview(tc)); err != nil { + // `tsh status` should run without requiring user interaction. + // To achieve this, we avoid remote calls that might prompt for + // hardware key touch or require a PIN. + hardwareKeyInteractionRequired := tc.PrivateKeyPolicy.MFAVerified() + + var accessListsToReview []*accesslist.AccessList + if hardwareKeyInteractionRequired { + log.Debug("Skipping fetching access lists to review due to Hardware Key PIN/Touch requirement.") + } else { + accessListsToReview = cf.getAccessListsToReview(tc) + } + if err := printLoginInformation(cf, profile, profiles, accessListsToReview); err != nil { return trace.Wrap(err) } @@ -4790,7 +4801,7 @@ func onStatus(cf *CLIConf) error { return trace.NotFound("Active profile expired.") } - if tc.PrivateKeyPolicy.MFAVerified() { + if hardwareKeyInteractionRequired { log.Debug("Skipping cluster alerts due to Hardware Key PIN/Touch requirement.") } else { if err := common.ShowClusterAlerts(cf.Context, tc, os.Stderr, nil, diff --git a/web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/__snapshots__/RequestCheckout.story.test.tsx.snap b/web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/__snapshots__/RequestCheckout.story.test.tsx.snap index ff54a86f6e2db..1b79d6a3a0a5a 100644 --- a/web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/__snapshots__/RequestCheckout.story.test.tsx.snap +++ b/web/packages/shared/components/AccessRequests/NewRequest/RequestCheckout/__snapshots__/RequestCheckout.story.test.tsx.snap @@ -513,6 +513,7 @@ exports[`failed state 1`] = ` } .c36 .react-select__menu { + z-index: 10; margin-top: 0px; background-color: #344179; box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); @@ -1965,6 +1966,7 @@ exports[`loaded state 1`] = ` } .c43 .react-select__menu { + z-index: 10; margin-top: 0px; background-color: #344179; box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); diff --git a/web/packages/shared/components/ClusterDropdown/ClusterDropdown.tsx b/web/packages/shared/components/ClusterDropdown/ClusterDropdown.tsx index 7387c17778894..fdccb6ae9045b 100644 --- a/web/packages/shared/components/ClusterDropdown/ClusterDropdown.tsx +++ b/web/packages/shared/components/ClusterDropdown/ClusterDropdown.tsx @@ -17,8 +17,9 @@ */ import React, { useState, useEffect } from 'react'; +import styled from 'styled-components'; import { useHistory } from 'react-router'; -import { ButtonSecondary, Flex, Menu, MenuItem, Text } from 'design'; +import { Box, ButtonSecondary, Flex, Menu, MenuItem, Text } from 'design'; import { ChevronDown } from 'design/Icon'; import cfg from 'teleport/config'; import { Cluster } from 'teleport/services/clusters'; @@ -66,6 +67,8 @@ export function ClusterDropdown({ const [options, setOptions] = React.useState( createOptions(initialClusters) ); + const showInput = options.length > 5 ? true : false; + const [clusterFilter, setClusterFilter] = useState(''); const history = useHistory(); const [anchorEl, setAnchorEl] = useState(null); @@ -133,6 +136,17 @@ export function ClusterDropdown({ return null; } + const onClusterFilterChange = (e: React.ChangeEvent) => { + setClusterFilter(e.target.value); + }; + + let filteredOptions = options; + if (clusterFilter) { + filteredOptions = options.filter(cluster => + cluster.label.toLowerCase().includes(clusterFilter.toLowerCase()) + ); + } + return ( @@ -150,7 +164,11 @@ export function ClusterDropdown({ `margin-top: 36px;`} + popoverCss={() => ` + margin-top: ${showInput ? '40px' : '4px'}; + max-height: 265px; + overflow: hidden; + `} transformOrigin={{ vertical: 'top', horizontal: 'left', @@ -163,20 +181,74 @@ export function ClusterDropdown({ open={Boolean(anchorEl)} onClose={handleClose} > - {options.map(cluster => ( - onChangeOption(cluster.value)} + {showInput ? ( + p.theme.space[2]}px; + `} > - - {cluster.label} - - - ))} + + + ) : ( + // without this empty box, the entire positioning is way out of whack + // TODO (avatus): find out why during menu/popover rework + + )} + + {filteredOptions.map(cluster => ( + onChangeOption(cluster.value)} + > + + {cluster.label} + + + ))} + ); } type Option = { value: string; label: string }; + +const ClusterFilter = styled.input( + ({ theme }) => ` + background-color: ${theme.colors.spotBackground[0]}; + padding-left: ${theme.space[3]}px; + width: 100%; + border-radius: 29px; + box-sizing: border-box; + color: ${theme.colors.text.main}; + height: 32px; + font-size: ${theme.fontSizes[1]}px; + outline: none; + border: none; + &:focus { + border: none; + } + + ::placeholder { + color: ${theme.colors.text.muted}; + opacity: 1; + } +` +); diff --git a/web/packages/shared/components/FormPassword/__snapshots__/FormPassword.test.tsx.snap b/web/packages/shared/components/FormPassword/__snapshots__/FormPassword.test.tsx.snap index d831820409fee..07e6e127e9275 100644 --- a/web/packages/shared/components/FormPassword/__snapshots__/FormPassword.test.tsx.snap +++ b/web/packages/shared/components/FormPassword/__snapshots__/FormPassword.test.tsx.snap @@ -259,6 +259,7 @@ exports[`auth2faType "on" should render form with hardware key as first option i } .c7 .react-select__menu { + z-index: 10; margin-top: 0px; background-color: #344179; box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); @@ -702,6 +703,7 @@ exports[`auth2faType "optional" should render form with hardware key as first op } .c7 .react-select__menu { + z-index: 10; margin-top: 0px; background-color: #344179; box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); diff --git a/web/packages/shared/components/Select/Select.tsx b/web/packages/shared/components/Select/Select.tsx index 4435434809cd7..a42e238855f72 100644 --- a/web/packages/shared/components/Select/Select.tsx +++ b/web/packages/shared/components/Select/Select.tsx @@ -231,6 +231,7 @@ export const StyledSelect = styled.div` } .react-select__menu { + z-index: 10; margin-top: 0px; // If the component is on an elevated platform (such as a dialog), use a lighter background. background-color: ${props => diff --git a/web/packages/teleport/src/Audit/EventList/EventTypeCell.tsx b/web/packages/teleport/src/Audit/EventList/EventTypeCell.tsx index d4c92c788e71a..d73a3e9d453e0 100644 --- a/web/packages/teleport/src/Audit/EventList/EventTypeCell.tsx +++ b/web/packages/teleport/src/Audit/EventList/EventTypeCell.tsx @@ -211,6 +211,7 @@ const EventIconMap: Record = { [eventCodes.CLIENT_DISCONNECT]: Icons.Info, [eventCodes.PORTFORWARD]: Icons.Info, [eventCodes.PORTFORWARD_FAILURE]: Icons.Info, + [eventCodes.PORTFORWARD_STOP]: Icons.Info, [eventCodes.SUBSYSTEM]: Icons.Info, [eventCodes.SUBSYSTEM_FAILURE]: Icons.Info, [eventCodes.LOCK_CREATED]: Icons.Lock, diff --git a/web/packages/teleport/src/Audit/__snapshots__/Audit.story.test.tsx.snap b/web/packages/teleport/src/Audit/__snapshots__/Audit.story.test.tsx.snap index ceab16c807499..06a6e5cf686b7 100644 --- a/web/packages/teleport/src/Audit/__snapshots__/Audit.story.test.tsx.snap +++ b/web/packages/teleport/src/Audit/__snapshots__/Audit.story.test.tsx.snap @@ -5731,7 +5731,7 @@ exports[`list of all events 1`] = ` - User [05ff66c9-a948-42f4-af0e-a1b6ba62561e.root] deleted kubernetes cluster [kube-local] + User [05ff66c9-a948-42f4-af0e-a1b6ba62561e.root] deleted Kubernetes cluster [kube-local] - User [05ff66c9-a948-42f4-af0e-a1b6ba62561e.root] updated kubernetes cluster [kube-local] + User [05ff66c9-a948-42f4-af0e-a1b6ba62561e.root] updated Kubernetes cluster [kube-local] - User [05ff66c9-a948-42f4-af0e-a1b6ba62561e.root] created kubernetes cluster [kube-local] + User [05ff66c9-a948-42f4-af0e-a1b6ba62561e.root] created Kubernetes cluster [kube-local] - User [alex] received a [200] from a [GET /api/v1/namespaces/teletest/pods/test-pod] request to kubernetes cluster [gke_teleport-a] + User [alex] received a [200] from a [GET /api/v1/namespaces/teletest/pods/test-pod] request to Kubernetes cluster [gke_teleport-a] - User [alex] executed a command on kubernetes cluster [clusterOne] + User [alex] executed a command on Kubernetes cluster [clusterOne] - User [admin@example.com] has started a session [56408539-6536-11e9-80a1-427cfde50f5a] + User [admin@example.com] has started a session [56408539-6536-11e9-80a1-427cfde50f5a] on node [de3800ea-69d9-4d72-a108-97e57f8eb393] { ); - expect(screen.getByText(/lacking permission/i)).toBeInTheDocument(); expect(screen.queryByRole('link')).not.toBeInTheDocument(); + expect( + screen.queryByText(/request additional permissions/i) + ).not.toBeInTheDocument(); const tile = screen.getByTestId('tile-aws-oidc'); expect(tile).not.toHaveAttribute('href'); @@ -61,6 +63,13 @@ test('render disabled', async () => { // so "toBeDisabled" interprets it as false. // eslint-disable-next-line jest-dom/prefer-enabled-disabled expect(tile).toHaveAttribute('disabled'); + + // Disabled states have badges on them. Test it renders on hover. + const badge = screen.getByText(/lacking permission/i); + await userEvent.hover(badge); + expect( + screen.getByText(/request additional permissions/i) + ).toBeInTheDocument(); }); test('dont render External Audit Storage for enterprise unless it is cloud', async () => { diff --git a/web/packages/teleport/src/Integrations/Enroll/common.tsx b/web/packages/teleport/src/Integrations/Enroll/common.tsx index f505638ca434e..4815ca38c91c0 100644 --- a/web/packages/teleport/src/Integrations/Enroll/common.tsx +++ b/web/packages/teleport/src/Integrations/Enroll/common.tsx @@ -31,12 +31,11 @@ export const IntegrationTile = styled(Flex)` width: 170px; background-color: ${({ theme }) => theme.colors.buttons.secondary.default}; text-align: center; - cursor: pointer; - + cursor: ${({ disabled, $exists }) => + disabled || $exists ? 'default' : 'pointer'}; ${props => { - const pointerEvents = props.disabled || props.$exists ? 'none' : 'auto'; if (props.$exists) { - return { pointerEvents }; + return; } return ` @@ -44,9 +43,8 @@ export const IntegrationTile = styled(Flex)` &:hover { background-color: ${props.theme.colors.buttons.secondary.hover}; } - pointer-events: ${pointerEvents}; `; - }} + }}; `; export const NoCodeIntegrationDescription = () => ( diff --git a/web/packages/teleport/src/Player/DesktopPlayer.tsx b/web/packages/teleport/src/Player/DesktopPlayer.tsx index 1e2c1b3a1e2d9..a0bace9583951 100644 --- a/web/packages/teleport/src/Player/DesktopPlayer.tsx +++ b/web/packages/teleport/src/Player/DesktopPlayer.tsx @@ -69,7 +69,7 @@ export const DesktopPlayer = ({ clusterId, }); - const isError = playerStatus === StatusEnum.ERROR; + const isError = playerStatus === StatusEnum.ERROR || statusText !== ''; const isLoading = playerStatus === StatusEnum.LOADING; const isPlaying = playerStatus === StatusEnum.PLAYING; const isComplete = isError || playerStatus === StatusEnum.COMPLETE; diff --git a/web/packages/teleport/src/Player/SshPlayer.tsx b/web/packages/teleport/src/Player/SshPlayer.tsx index 878bc1c230caa..ce70754ec6f68 100644 --- a/web/packages/teleport/src/Player/SshPlayer.tsx +++ b/web/packages/teleport/src/Player/SshPlayer.tsx @@ -34,7 +34,11 @@ export default function Player({ sid, clusterId, durationMs }) { clusterId, sid ); - const isError = playerStatus === StatusEnum.ERROR; + + // statusText is currently only set when an error happens, so for now we can assume + // if it is not empty, an error occured (even if the player is in COMPLETE state, which gets + // set on close) + const isError = playerStatus === StatusEnum.ERROR || statusText !== ''; const isLoading = playerStatus === StatusEnum.LOADING; const isPlaying = playerStatus === StatusEnum.PLAYING; const isComplete = isError || playerStatus === StatusEnum.COMPLETE; diff --git a/web/packages/teleport/src/Recordings/__snapshots__/Recordings.story.test.tsx.snap b/web/packages/teleport/src/Recordings/__snapshots__/Recordings.story.test.tsx.snap index 247844e7c9e79..c651a790c5253 100644 --- a/web/packages/teleport/src/Recordings/__snapshots__/Recordings.story.test.tsx.snap +++ b/web/packages/teleport/src/Recordings/__snapshots__/Recordings.story.test.tsx.snap @@ -217,6 +217,7 @@ exports[`rendering of Session Recordings 1`] = ` } .c9 .react-select__menu { + z-index: 10; margin-top: 0px; background-color: #344179; box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); diff --git a/web/packages/teleport/src/Welcome/Welcome.test.tsx b/web/packages/teleport/src/Welcome/Welcome.test.tsx index a4a468139d46c..cae693c2d3479 100644 --- a/web/packages/teleport/src/Welcome/Welcome.test.tsx +++ b/web/packages/teleport/src/Welcome/Welcome.test.tsx @@ -16,7 +16,6 @@ * along with this program. If not, see . */ -import React from 'react'; import { MemoryRouter, Route, Router } from 'react-router'; import { createMemoryHistory } from 'history'; import { fireEvent, render, screen, waitFor } from 'design/utils/testing'; @@ -89,7 +88,7 @@ describe('teleport/components/Welcome', () => { expect(auth.fetchPasswordToken).toHaveBeenCalled(); }); - expect(screen.getByText(/confirm password/i)).toBeInTheDocument(); + expect(await screen.findByText(/confirm password/i)).toBeInTheDocument(); }); it('should have correct welcome prompt flow for reset', async () => { @@ -123,7 +122,7 @@ describe('teleport/components/Welcome', () => { }); expect(auth.fetchPasswordToken).toHaveBeenCalled(); - expect(screen.getByText(/submit/i)).toBeInTheDocument(); + expect(await screen.findByText(/submit/i)).toBeInTheDocument(); }); it('reset password', async () => { @@ -217,7 +216,7 @@ describe('teleport/components/Welcome', () => { }); // Trigger submit. - await user.click(screen.getByText(/submit/i)); + await user.click(await screen.findByText(/submit/i)); expect(auth.resetPasswordWithWebauthn).toHaveBeenCalledWith( expect.objectContaining({ diff --git a/web/packages/teleport/src/components/FormLogin/__snapshots__/FormLogin.story.test.tsx.snap b/web/packages/teleport/src/components/FormLogin/__snapshots__/FormLogin.story.test.tsx.snap index 8c966078ee866..f12d18f445b40 100644 --- a/web/packages/teleport/src/components/FormLogin/__snapshots__/FormLogin.story.test.tsx.snap +++ b/web/packages/teleport/src/components/FormLogin/__snapshots__/FormLogin.story.test.tsx.snap @@ -632,6 +632,7 @@ exports[`auth2faType: optional rendering 1`] = ` } .c16 .react-select__menu { + z-index: 10; margin-top: 0px; background-color: #344179; box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); @@ -1178,6 +1179,7 @@ exports[`auth2faType: otp rendering 1`] = ` } .c16 .react-select__menu { + z-index: 10; margin-top: 0px; background-color: #344179; box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); @@ -1737,6 +1739,7 @@ exports[`auth2faType: webauthn rendering 1`] = ` } .c16 .react-select__menu { + z-index: 10; margin-top: 0px; background-color: #344179; box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); @@ -2357,6 +2360,7 @@ exports[`cloud auth2faType: on rendering 1`] = ` } .c21 .react-select__menu { + z-index: 10; margin-top: 0px; background-color: #344179; box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); diff --git a/web/packages/teleport/src/components/ReAuthenticate/__snapshots__/ReAuthenticate.story.test.tsx.snap b/web/packages/teleport/src/components/ReAuthenticate/__snapshots__/ReAuthenticate.story.test.tsx.snap index 61138dd76f2db..29a137da1569a 100644 --- a/web/packages/teleport/src/components/ReAuthenticate/__snapshots__/ReAuthenticate.story.test.tsx.snap +++ b/web/packages/teleport/src/components/ReAuthenticate/__snapshots__/ReAuthenticate.story.test.tsx.snap @@ -355,6 +355,7 @@ exports[`render failed state for re-authentication dialog 1`] = ` } .c15 .react-select__menu { + z-index: 10; margin-top: 0px; background-color: #4A5688; box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); @@ -867,6 +868,7 @@ exports[`render re-authentication dialog 1`] = ` } .c14 .react-select__menu { + z-index: 10; margin-top: 0px; background-color: #4A5688; box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); diff --git a/web/packages/teleport/src/lib/term/ttyPlayer.js b/web/packages/teleport/src/lib/term/ttyPlayer.js index b231e83c1c7ce..87153d6ade295 100644 --- a/web/packages/teleport/src/lib/term/ttyPlayer.js +++ b/web/packages/teleport/src/lib/term/ttyPlayer.js @@ -243,6 +243,10 @@ export default class TtyPlayer extends Tty { this.cancelTimeUpdate(); this._setPlayerStatus(StatusEnum.PAUSED); + if (this.webSocket.readyState !== WebSocket.OPEN) { + return; + } + const buffer = new ArrayBuffer(4); const dv = new DataView(buffer); dv.setUint8(0, messageTypePlayPause); diff --git a/web/packages/teleport/src/services/audit/makeEvent.ts b/web/packages/teleport/src/services/audit/makeEvent.ts index e4774cc355ff9..26e2a522deb1a 100644 --- a/web/packages/teleport/src/services/audit/makeEvent.ts +++ b/web/packages/teleport/src/services/audit/makeEvent.ts @@ -166,9 +166,9 @@ export const formatters: Formatters = { const { proto, kubernetes_cluster, user = '' } = event; if (proto === 'kube') { if (!kubernetes_cluster) { - return `User [${user}] executed a kubernetes command`; + return `User [${user}] executed a Kubernetes command`; } - return `User [${user}] executed a command on kubernetes cluster [${kubernetes_cluster}]`; + return `User [${user}] executed a command on Kubernetes cluster [${kubernetes_cluster}]`; } return `User [${user}] executed a command on node ${ @@ -231,6 +231,11 @@ export const formatters: Formatters = { format: ({ user, error }) => `User [${user}] port forwarding request failed: ${error}`, }, + [eventCodes.PORTFORWARD_STOP]: { + type: 'port', + desc: 'Port Forwarding Stopped', + format: ({ user }) => `User [${user}] stopped port forwarding`, + }, [eventCodes.SAML_CONNECTOR_CREATED]: { type: 'saml.created', desc: 'SAML Connector Created', @@ -616,9 +621,9 @@ export const formatters: Formatters = { if (event.proto === 'kube') { if (!event.kubernetes_cluster) { - return `User [${user}] has ended a kubernetes session [${event.sid}]`; + return `User [${user}] has ended a Kubernetes session [${event.sid}]`; } - return `User [${user}] has ended a session [${event.sid}] on kubernetes cluster [${event.kubernetes_cluster}]`; + return `User [${user}] has ended a session [${event.sid}] on Kubernetes cluster [${event.kubernetes_cluster}]`; } if (!event.interactive) { @@ -649,7 +654,20 @@ export const formatters: Formatters = { [eventCodes.SESSION_START]: { type: 'session.start', desc: 'Session Started', - format: ({ user, sid }) => `User [${user}] has started a session [${sid}]`, + format: event => { + const user = event.user || ''; + + if (event.proto === 'kube') { + if (!event.kubernetes_cluster) { + return `User [${user}] has started a Kubernetes session [${event.sid}]`; + } + return `User [${user}] has started a session [${event.sid}] on Kubernetes cluster [${event.kubernetes_cluster}]`; + } + + const node = + event.server_hostname || event.server_addr || event.server_id; + return `User [${user}] has started a session [${event.sid}] on node [${node}] `; + }, }, [eventCodes.SESSION_UPLOAD]: { type: 'session.upload', @@ -836,25 +854,25 @@ export const formatters: Formatters = { type: 'kube.request', desc: 'Kubernetes Request', format: ({ user, kubernetes_cluster, verb, request_path, response_code }) => - `User [${user}] received a [${response_code}] from a [${verb} ${request_path}] request to kubernetes cluster [${kubernetes_cluster}]`, + `User [${user}] received a [${response_code}] from a [${verb} ${request_path}] request to Kubernetes cluster [${kubernetes_cluster}]`, }, [eventCodes.KUBE_CREATED]: { type: 'kube.create', desc: 'Kubernetes Created', format: ({ user, name }) => - `User [${user}] created kubernetes cluster [${name}]`, + `User [${user}] created Kubernetes cluster [${name}]`, }, [eventCodes.KUBE_UPDATED]: { type: 'kube.update', desc: 'Kubernetes Updated', format: ({ user, name }) => - `User [${user}] updated kubernetes cluster [${name}]`, + `User [${user}] updated Kubernetes cluster [${name}]`, }, [eventCodes.KUBE_DELETED]: { type: 'kube.delete', desc: 'Kubernetes Deleted', format: ({ user, name }) => - `User [${user}] deleted kubernetes cluster [${name}]`, + `User [${user}] deleted Kubernetes cluster [${name}]`, }, [eventCodes.DATABASE_SESSION_STARTED]: { type: 'db.session.start', diff --git a/web/packages/teleport/src/services/audit/types.ts b/web/packages/teleport/src/services/audit/types.ts index d20c51ee63813..582c16e1866c2 100644 --- a/web/packages/teleport/src/services/audit/types.ts +++ b/web/packages/teleport/src/services/audit/types.ts @@ -141,6 +141,7 @@ export const eventCodes = { OIDC_CONNECTOR_DELETED: 'T8101I', OIDC_CONNECTOR_UPDATED: 'T8102I', PORTFORWARD_FAILURE: 'T3003E', + PORTFORWARD_STOP: 'T3003S', PORTFORWARD: 'T3003I', RECOVERY_TOKEN_CREATED: 'T6001I', PRIVILEGE_TOKEN_CREATED: 'T6002I', @@ -399,6 +400,7 @@ export type RawEvents = { typeof eventCodes.OIDC_CONNECTOR_UPDATED >; [eventCodes.PORTFORWARD]: RawEvent; + [eventCodes.PORTFORWARD_STOP]: RawEvent; [eventCodes.PORTFORWARD_FAILURE]: RawEvent< typeof eventCodes.PORTFORWARD_FAILURE, { @@ -573,6 +575,11 @@ export type RawEvents = { typeof eventCodes.SESSION_START, { sid: string; + kubernetes_cluster: string; + proto: string; + server_hostname: string; + server_addr: string; + server_id: string; } >; [eventCodes.SESSION_REJECT]: RawEvent< diff --git a/web/packages/teleport/src/services/integrations/types.ts b/web/packages/teleport/src/services/integrations/types.ts index d117bf0499c3f..9105546e84495 100644 --- a/web/packages/teleport/src/services/integrations/types.ts +++ b/web/packages/teleport/src/services/integrations/types.ts @@ -364,11 +364,11 @@ export type AwsEksCluster = { authenticationMode: 'API' | 'API_AND_CONFIG_MAP' | 'CONFIG_MAP'; /** - * EndpointPublicAddress indicates whether this cluster is publicly accessible. + * EndpointPublicAccess indicates whether this cluster is publicly accessible. * This is a requirement for Teleport Cloud tenants because the control plane must be able to access the EKS Cluster * in order to deploy the helm chart. */ - endpointPublicAddress: boolean; + endpointPublicAccess: boolean; }; export type EnrollEksClustersRequest = { diff --git a/web/packages/teleport/src/services/recordings/makeRecording.ts b/web/packages/teleport/src/services/recordings/makeRecording.ts index c26af2e426ced..961d9bd1456ef 100644 --- a/web/packages/teleport/src/services/recordings/makeRecording.ts +++ b/web/packages/teleport/src/services/recordings/makeRecording.ts @@ -62,6 +62,7 @@ function makeDesktopRecording({ function makeSshOrKubeRecording({ participants, + user, time, session_start, session_stop, @@ -80,9 +81,13 @@ function makeSshOrKubeRecording({ ); let hostname = server_hostname || 'N/A'; + // SSH interactive/non-interactive and k8s interactive sessions user participants are in the participants field. + let userParticipants = participants; // For Kubernetes sessions, put the full pod name as 'hostname'. if (proto === 'kube') { hostname = `${kubernetes_cluster}/${kubernetes_pod_namespace}/${kubernetes_pod_name}`; + // For non-interactive k8s sessions the participant is the Teleport user running the command + if (!interactive) userParticipants = [user]; } // Description set to play for interactive so users can search by "play". @@ -97,7 +102,7 @@ function makeSshOrKubeRecording({ durationText, sid, createdDate: time, - users: participants ? participants.join(', ') : [], + users: userParticipants ? userParticipants.join(', ') : [], hostname, description, recordingType: kubernetes_cluster ? 'k8s' : 'ssh', diff --git a/web/packages/teleport/src/services/recordings/recordings.test.ts b/web/packages/teleport/src/services/recordings/recordings.test.ts index c7f61f7657a66..bc05ac64a1f9c 100644 --- a/web/packages/teleport/src/services/recordings/recordings.test.ts +++ b/web/packages/teleport/src/services/recordings/recordings.test.ts @@ -51,7 +51,7 @@ test('fetch session recordings, response formatting', async () => { playable: false, recordingType: 'k8s', sid: '456b933c-4ec4-59f1-862c-90ca9f7648b1', - users: [], + users: 'onuweeme@wiuke.mh', }, ], startKey: '', diff --git a/web/packages/teleport/src/services/websession/websession.ts b/web/packages/teleport/src/services/websession/websession.ts index 51a2b3c5461bf..e59a893295505 100644 --- a/web/packages/teleport/src/services/websession/websession.ts +++ b/web/packages/teleport/src/services/websession/websession.ts @@ -26,9 +26,8 @@ import { KeysEnum, storageService } from 'teleport/services/storageService'; import makeBearerToken from './makeBearerToken'; import { RenewSessionRequest } from './types'; -// Time to determine when to renew session which is -// when expiry time of token is less than 3 minutes. -const RENEW_TOKEN_TIME = 180 * 1000; +const MAX_RENEW_TOKEN_TIME = 180000; // 3m +const MIN_RENEW_TOKEN_TIME = 30000; // 30s const TOKEN_CHECKER_INTERVAL = 15 * 1000; // every 15 sec const logger = Logger.create('services/session'); @@ -142,11 +141,14 @@ const session = { return false; } - // Renew session if token expiry time is less than 3 minutes. + // Renew session if token expiry time is less than renewTime (with MIN_ and + // MAX_RENEW_TOKEN_TIME as floor and ceiling, respectively). // Browsers have js timer throttling behavior in inactive tabs that can go // up to 100s between timer calls from testing. 3 minutes seems to be a safe number // with extra padding. - return this._timeLeft() < RENEW_TOKEN_TIME; + let renewTime = Math.min(this._ttl() / 10, MAX_RENEW_TOKEN_TIME); + renewTime = Math.max(renewTime, MIN_RENEW_TOKEN_TIME); + return this._timeLeft() < renewTime; }, _renewToken(req: RenewSessionRequest = {}, signal?: AbortSignal) { @@ -192,6 +194,21 @@ const session = { return delta; }, + _ttl() { + const token = this._getBearerToken(); + if (!token) { + return 0; + } + + let { expiresIn, created } = token; + if (!created || !expiresIn) { + return 0; + } + + expiresIn = expiresIn * 1000; + return expiresIn; + }, + _shouldCheckStatus() { if (this._getIsRenewing()) { return false; diff --git a/web/packages/teleterm/package.json b/web/packages/teleterm/package.json index 6a853e2af4142..d7d9719b74f07 100644 --- a/web/packages/teleterm/package.json +++ b/web/packages/teleterm/package.json @@ -45,7 +45,7 @@ "@types/node-forge": "^1.0.4", "@types/tar-fs": "^2.0.1", "@types/whatwg-url": "^11.0.1", - "electron": "32.1.2", + "electron": "33.1.0", "electron-vite": "^2.0.0", "google-protobuf": "^3.21.2", "immer": "^10.1.1", diff --git a/web/packages/teleterm/src/ui/Document/Document.tsx b/web/packages/teleterm/src/ui/Document/Document.tsx index 454134fbb2441..879f0c700b85c 100644 --- a/web/packages/teleterm/src/ui/Document/Document.tsx +++ b/web/packages/teleterm/src/ui/Document/Document.tsx @@ -29,12 +29,14 @@ const Document: React.FC<{ shouldFocus: visible && !autoFocusDisabled, }); + // The background-color of Document is controlled through and it + // cannot be set on Document directly because of Chromium issues with z-index. + // Read more https://github.com/gravitational/teleport/pull/49351. return (