From f63ab9dd9bb6c734873dc8073892f5f10a2ed2e1 Mon Sep 17 00:00:00 2001 From: Alexey Palazhchenko Date: Tue, 15 Jun 2021 18:47:54 +0000 Subject: [PATCH] feat: implement `talosctl config new` command Refs #3421. Signed-off-by: Alexey Palazhchenko --- .dockerignore | 1 - api/cluster/cluster.proto | 3 - api/health/health.proto | 1 + api/inspect/inspect.proto | 3 - api/machine/machine.proto | 32 +- api/network/network.proto | 3 - api/resource/resource.proto | 3 - api/security/security.proto | 3 - api/storage/storage.proto | 3 - api/time/time.proto | 3 - cmd/talosctl/cmd/mgmt/gen/csr.go | 6 +- cmd/talosctl/cmd/root.go | 4 +- cmd/talosctl/cmd/talos/apply-config.go | 5 +- cmd/talosctl/cmd/talos/config.go | 182 +- cmd/talosctl/cmd/talos/root.go | 4 +- go.mod | 2 +- go.sum | 4 +- internal/app/apid/main.go | 38 +- internal/app/apid/pkg/backend/apid.go | 2 +- .../server/v1alpha1/v1alpha1_resource.go | 11 + .../server/v1alpha1/v1alpha1_server.go | 52 + internal/app/machined/main.go | 25 +- .../machined/pkg/system/services/machined.go | 10 +- internal/app/maintenance/server/server.go | 15 +- internal/app/trustd/main.go | 23 +- internal/integration/base/api.go | 4 +- internal/integration/integration_test.go | 6 +- internal/pkg/etcd/certs.go | 2 +- pkg/cluster/config.go | 4 +- pkg/grpc/middleware/authz/authorizer.go | 40 +- pkg/grpc/middleware/authz/context.go | 14 +- pkg/grpc/middleware/authz/injector.go | 58 +- pkg/grpc/middleware/authz/metadata.go | 17 +- pkg/grpc/proxy/backend/local.go | 2 +- pkg/machinery/api/cluster/cluster.pb.go | 12 +- pkg/machinery/api/inspect/inspect.pb.go | 14 +- pkg/machinery/api/machine/machine.pb.go | 2857 +++++++++-------- pkg/machinery/api/machine/machine_grpc.pb.go | 39 + pkg/machinery/api/network/network.pb.go | 12 +- pkg/machinery/api/resource/resource.pb.go | 12 +- pkg/machinery/api/security/security.pb.go | 14 +- pkg/machinery/api/storage/storage.pb.go | 12 +- pkg/machinery/api/time/time.pb.go | 11 +- pkg/machinery/client/client.go | 23 +- pkg/machinery/client/config/config.go | 19 +- pkg/machinery/client/config/config_test.go | 40 +- pkg/machinery/client/options.go | 14 +- pkg/machinery/client/reply.go | 4 +- pkg/machinery/config/bundle.go | 6 +- .../config/types/v1alpha1/bundle/bundle.go | 4 +- .../types/v1alpha1/generate/generate.go | 17 +- .../config/types/v1alpha1/generate/options.go | 12 + .../types/v1alpha1/generate/talosconfig.go | 18 +- pkg/machinery/go.mod | 2 +- pkg/machinery/go.sum | 4 +- pkg/machinery/role/role.go | 67 +- pkg/machinery/role/role_test.go | 25 +- pkg/provision/options.go | 6 +- prototool.yaml | 114 +- website/content/docs/v0.11/Reference/api.md | 69 +- website/content/docs/v0.11/Reference/cli.md | 54 +- 61 files changed, 2340 insertions(+), 1726 deletions(-) diff --git a/.dockerignore b/.dockerignore index f33155fdd..a0da21d4b 100644 --- a/.dockerignore +++ b/.dockerignore @@ -5,7 +5,6 @@ !hack !internal !pkg -!vendor !website !.golangci.yml !.markdownlint.json diff --git a/api/cluster/cluster.proto b/api/cluster/cluster.proto index 30d0de166..ad14debc5 100644 --- a/api/cluster/cluster.proto +++ b/api/cluster/cluster.proto @@ -3,9 +3,6 @@ syntax = "proto3"; package cluster; option go_package = "github.com/talos-systems/talos/pkg/machinery/api/cluster"; -option java_multiple_files = true; -option java_outer_classname = "ClusterApi"; -option java_package = "com.cluster.api"; import "google/protobuf/duration.proto"; import "common/common.proto"; diff --git a/api/health/health.proto b/api/health/health.proto index cf69ee008..2482d99bf 100644 --- a/api/health/health.proto +++ b/api/health/health.proto @@ -6,6 +6,7 @@ option go_package = "github.com/talos-systems/talos/pkg/machinery/api/health"; import "google/protobuf/empty.proto"; +// The health service definition. service Health { rpc Check(google.protobuf.Empty) returns (HealthCheckResponse); rpc Watch(HealthWatchRequest) returns (stream HealthCheckResponse); diff --git a/api/inspect/inspect.proto b/api/inspect/inspect.proto index 779b1f6f0..c2b9b45b7 100644 --- a/api/inspect/inspect.proto +++ b/api/inspect/inspect.proto @@ -3,9 +3,6 @@ syntax = "proto3"; package inspect; option go_package = "github.com/talos-systems/talos/pkg/machinery/api/inspect"; -option java_multiple_files = true; -option java_outer_classname = "InspectApi"; -option java_package = "com.inspect.api"; import "google/protobuf/empty.proto"; import "common/common.proto"; diff --git a/api/machine/machine.proto b/api/machine/machine.proto index 28e521a67..c280a6f16 100644 --- a/api/machine/machine.proto +++ b/api/machine/machine.proto @@ -3,13 +3,11 @@ syntax = "proto3"; package machine; option go_package = "github.com/talos-systems/talos/pkg/machinery/api/machine"; -option java_multiple_files = true; -option java_outer_classname = "MachineApi"; -option java_package = "com.machine.api"; import "google/protobuf/any.proto"; import "google/protobuf/empty.proto"; import "google/protobuf/timestamp.proto"; +import "google/protobuf/duration.proto"; import "common/common.proto"; // The machine service definition. @@ -82,6 +80,9 @@ service MachineService { rpc SystemStat(google.protobuf.Empty) returns (SystemStatResponse); rpc Upgrade(UpgradeRequest) returns (UpgradeResponse); rpc Version(google.protobuf.Empty) returns (VersionResponse); + + // GenerateClientConfiguration generates talosctl client configuration (talosconfig). + rpc GenerateClientConfiguration(GenerateClientConfigurationRequest) returns (GenerateClientConfigurationResponse); } // rpc applyConfiguration @@ -486,8 +487,6 @@ message DmesgRequest { } // rpc processes -message ProcessesRequest {} - message ProcessesResponse { repeated Process messages = 1; } message Process { @@ -910,3 +909,26 @@ message GenerateConfigurationResponse { // RemoveBootkubeInitializedKeyResponse describes the response to a RemoveBootkubeInitializedKey request. message RemoveBootkubeInitializedKey { common.Metadata metadata = 1; } message RemoveBootkubeInitializedKeyResponse { repeated RemoveBootkubeInitializedKey messages = 1; } + +message GenerateClientConfigurationRequest { + // Roles in the generated client certificate. + repeated string roles = 1; + // Client certificate TTL. + google.protobuf.Duration crt_ttl = 2; +} + +message GenerateClientConfiguration { + common.Metadata metadata = 1; + // PEM-encoded CA certificate. + bytes ca = 2; + // PEM-encoded generated client certificate. + bytes crt = 3; + // PEM-encoded generated client key. + bytes key = 4; + // Client configuration (talosconfig) file content. + bytes talosconfig = 5; +} + +message GenerateClientConfigurationResponse { + repeated GenerateClientConfiguration messages = 1; +} diff --git a/api/network/network.proto b/api/network/network.proto index 17ee42ca4..7b01825fa 100644 --- a/api/network/network.proto +++ b/api/network/network.proto @@ -3,9 +3,6 @@ syntax = "proto3"; package network; option go_package = "github.com/talos-systems/talos/pkg/machinery/api/network"; -option java_multiple_files = true; -option java_outer_classname = "NetworkApi"; -option java_package = "com.network.api"; import "google/protobuf/empty.proto"; import "common/common.proto"; diff --git a/api/resource/resource.proto b/api/resource/resource.proto index 14fdd9c0e..eab9a397a 100644 --- a/api/resource/resource.proto +++ b/api/resource/resource.proto @@ -3,9 +3,6 @@ syntax = "proto3"; package resource; option go_package = "github.com/talos-systems/talos/pkg/machinery/api/resource"; -option java_multiple_files = true; -option java_outer_classname = "ResourceApi"; -option java_package = "com.resource.api"; import "common/common.proto"; diff --git a/api/security/security.proto b/api/security/security.proto index 2cd4f28a2..f28df2f8e 100644 --- a/api/security/security.proto +++ b/api/security/security.proto @@ -3,9 +3,6 @@ syntax = "proto3"; package securityapi; option go_package = "github.com/talos-systems/talos/pkg/machinery/api/security"; -option java_multiple_files = true; -option java_outer_classname = "SecurityApi"; -option java_package = "com.security.api"; // The security service definition. service SecurityService { diff --git a/api/storage/storage.proto b/api/storage/storage.proto index d41bf7c0f..012b2a543 100644 --- a/api/storage/storage.proto +++ b/api/storage/storage.proto @@ -3,9 +3,6 @@ syntax = "proto3"; package storage; option go_package = "github.com/talos-systems/talos/pkg/machinery/api/storage"; -option java_multiple_files = true; -option java_outer_classname = "StorageApi"; -option java_package = "com.storage.api"; import "google/protobuf/empty.proto"; import "common/common.proto"; diff --git a/api/time/time.proto b/api/time/time.proto index a12911a46..a32b0863d 100644 --- a/api/time/time.proto +++ b/api/time/time.proto @@ -3,9 +3,6 @@ syntax = "proto3"; package time; option go_package = "github.com/talos-systems/talos/pkg/machinery/api/time"; -option java_multiple_files = true; -option java_outer_classname = "TimeApi"; -option java_package = "com.time.api"; import "google/protobuf/empty.proto"; import "google/protobuf/timestamp.proto"; diff --git a/cmd/talosctl/cmd/mgmt/gen/csr.go b/cmd/talosctl/cmd/mgmt/gen/csr.go index eeb55c444..3db59c852 100644 --- a/cmd/talosctl/cmd/mgmt/gen/csr.go +++ b/cmd/talosctl/cmd/mgmt/gen/csr.go @@ -55,9 +55,9 @@ var genCSRCmd = &cobra.Command{ return fmt.Errorf("invalid IP: %s", genCSRCmdFlags.ip) } - roles, err := role.Parse(genCSRCmdFlags.roles) - if err != nil { - return err + roles, unknownRoles := role.Parse(genCSRCmdFlags.roles) + if len(unknownRoles) != 0 { + return fmt.Errorf("unknown roles: %s", strings.Join(unknownRoles, ", ")) } ips := []net.IP{parsed} diff --git a/cmd/talosctl/cmd/root.go b/cmd/talosctl/cmd/root.go index 44258fcf7..901a5865c 100644 --- a/cmd/talosctl/cmd/root.go +++ b/cmd/talosctl/cmd/root.go @@ -13,7 +13,7 @@ import ( "github.com/talos-systems/talos/cmd/talosctl/cmd/mgmt" "github.com/talos-systems/talos/cmd/talosctl/cmd/talos" - "github.com/talos-systems/talos/pkg/machinery/client/config" + clientconfig "github.com/talos-systems/talos/pkg/machinery/client/config" ) // rootCmd represents the base command when called without any subcommands. @@ -29,7 +29,7 @@ var rootCmd = &cobra.Command{ // Execute adds all child commands to the root command and sets flags appropriately. // This is called by main.main(). It only needs to happen once to the rootCmd. func Execute() error { - defaultTalosConfig, err := config.GetDefaultPath() + defaultTalosConfig, err := clientconfig.GetDefaultPath() if err != nil { return err } diff --git a/cmd/talosctl/cmd/talos/apply-config.go b/cmd/talosctl/cmd/talos/apply-config.go index 12a7b94c4..d711d2d8b 100644 --- a/cmd/talosctl/cmd/talos/apply-config.go +++ b/cmd/talosctl/cmd/talos/apply-config.go @@ -14,6 +14,7 @@ import ( "github.com/spf13/cobra" "github.com/talos-systems/crypto/x509" + "github.com/talos-systems/talos/cmd/talosctl/pkg/talos/helpers" "github.com/talos-systems/talos/internal/pkg/tui/installer" "github.com/talos-systems/talos/pkg/cli" machineapi "github.com/talos-systems/talos/pkg/machinery/api/machine" @@ -71,8 +72,8 @@ var applyConfigCmd = &cobra.Command{ if applyConfigCmdFlags.insecure { ctx := context.Background() - if len(Nodes) != 1 { - return fmt.Errorf("insecure mode requires one and only one node, got %d", len(Nodes)) + if err := helpers.FailIfMultiNodes(ctx, "apply-config"); err != nil { + return err } c, err := client.New(ctx, client.WithTLSConfig(&tls.Config{ diff --git a/cmd/talosctl/cmd/talos/config.go b/cmd/talosctl/cmd/talos/config.go index be838aaf1..4edf931b9 100644 --- a/cmd/talosctl/cmd/talos/config.go +++ b/cmd/talosctl/cmd/talos/config.go @@ -5,6 +5,7 @@ package talos import ( + "context" "encoding/base64" "fmt" "io/ioutil" @@ -12,27 +13,48 @@ import ( "sort" "strings" "text/tabwriter" + "time" "github.com/spf13/cobra" + "google.golang.org/protobuf/types/known/durationpb" + "github.com/talos-systems/talos/cmd/talosctl/pkg/talos/helpers" "github.com/talos-systems/talos/pkg/cli" + machineapi "github.com/talos-systems/talos/pkg/machinery/api/machine" + "github.com/talos-systems/talos/pkg/machinery/client" clientconfig "github.com/talos-systems/talos/pkg/machinery/client/config" -) - -var ( - ca string - crt string - key string + "github.com/talos-systems/talos/pkg/machinery/role" ) // configCmd represents the config command. var configCmd = &cobra.Command{ Use: "config", - Short: "Manage the client configuration", + Short: "Manage the client configuration file (talosconfig)", Long: ``, } -// configEndpointCmd represents the config endpoint command. +func openConfigAndContext(context string) (*clientconfig.Config, error) { + c, err := clientconfig.Open(Talosconfig) + if err != nil { + return nil, fmt.Errorf("error reading config: %w", err) + } + + if context == "" { + context = c.Context + } + + if context == "" { + return nil, fmt.Errorf("no context is set") + } + + if _, ok := c.Contexts[context]; !ok { + return nil, fmt.Errorf("context %q is not defined", context) + } + + return c, nil +} + +// configEndpointCmd represents the `config endpoint` command. var configEndpointCmd = &cobra.Command{ Use: "endpoint ...", Aliases: []string{"endpoints"}, @@ -58,7 +80,7 @@ var configEndpointCmd = &cobra.Command{ }, } -// configNodeCmd represents the config node command. +// configNodeCmd represents the `config node` command. var configNodeCmd = &cobra.Command{ Use: "node ...", Aliases: []string{"nodes"}, @@ -84,7 +106,7 @@ var configNodeCmd = &cobra.Command{ }, } -// configContextCmd represents the config context command. +// configContextCmd represents the `config context` command. var configContextCmd = &cobra.Command{ Use: "context ", Short: "Set the current context", @@ -109,7 +131,14 @@ var configContextCmd = &cobra.Command{ }, } -// configAddCmd represents the config add command. +// configAddCmdFlags represents the `config add` command flags. +var configAddCmdFlags struct { + ca string + crt string + key string +} + +// configAddCmd represents the `config add` command. var configAddCmd = &cobra.Command{ Use: "add ", Short: "Add a new context", @@ -122,17 +151,17 @@ var configAddCmd = &cobra.Command{ return fmt.Errorf("error reading config: %w", err) } - caBytes, err := ioutil.ReadFile(ca) + caBytes, err := ioutil.ReadFile(configAddCmdFlags.ca) if err != nil { return fmt.Errorf("error reading CA: %w", err) } - crtBytes, err := ioutil.ReadFile(crt) + crtBytes, err := ioutil.ReadFile(configAddCmdFlags.crt) if err != nil { return fmt.Errorf("error reading certificate: %w", err) } - keyBytes, err := ioutil.ReadFile(key) + keyBytes, err := ioutil.ReadFile(configAddCmdFlags.key) if err != nil { return fmt.Errorf("error reading key: %w", err) } @@ -156,45 +185,12 @@ var configAddCmd = &cobra.Command{ }, } -// configGenerateCmd represents the config generate stub command. -var configGenerateCmd = &cobra.Command{ - Use: "generate", - Short: "Generate Talos config", - Long: ``, - Hidden: true, - RunE: func(cmd *cobra.Command, args []string) error { - return fmt.Errorf("'talosctl config generate' was renamed to 'talosctl gen config'") - }, -} - -func openConfigAndContext(context string) (*clientconfig.Config, error) { - c, err := clientconfig.Open(Talosconfig) - if err != nil { - return nil, fmt.Errorf("error reading config: %w", err) - } - - if context == "" { - context = c.Context - } - - if context == "" { - return nil, fmt.Errorf("no context is set") - } - - if _, ok := c.Contexts[context]; !ok { - return nil, fmt.Errorf("context %q is not defined", context) - } - - return c, nil -} - -// configGetContexts represents config contexts command. -var configGetContexts = &cobra.Command{ +// configGetContextsCmd represents the `config contexts` command. +var configGetContextsCmd = &cobra.Command{ Use: "contexts", - Short: "List contexts defined in Talos config", + Short: "List defined contexts", Aliases: []string{"get-contexts"}, Long: ``, - Hidden: false, RunE: func(cmd *cobra.Command, args []string) error { c, err := clientconfig.Open(Talosconfig) if err != nil { @@ -239,13 +235,12 @@ var configGetContexts = &cobra.Command{ }, } -// configMergeCmd represents the config merge command. +// configMergeCmd represents the `config merge` command. var configMergeCmd = &cobra.Command{ - Use: "merge ", - Short: "Merge additional contexts from another Talos config into the default config", - Long: "Contexts with the same name are renamed while merging configs.", - Hidden: false, - Args: cobra.MinimumNArgs(1), + Use: "merge ", + Short: "Merge additional contexts from another client configuration file", + Long: "Contexts with the same name are renamed while merging configs.", + Args: cobra.MinimumNArgs(1), RunE: func(cmd *cobra.Command, args []string) error { from := args[0] c, err := clientconfig.Open(Talosconfig) @@ -271,13 +266,80 @@ var configMergeCmd = &cobra.Command{ }, } +// configNewCmdFlags represents the `config new` command flags. +var configNewCmdFlags struct { + roles []string + crtTTL time.Duration +} + +// configNewCmd represents the `config new` command. +var configNewCmd = &cobra.Command{ + Use: "new []", + Short: "Generate a new client configuration file", + Args: cobra.RangeArgs(0, 1), + RunE: func(cmd *cobra.Command, args []string) error { + if len(args) == 0 { + args = []string{"talosconfig"} + } + + path := args[0] + + return WithClient(func(ctx context.Context, c *client.Client) error { + if err := helpers.FailIfMultiNodes(ctx, "talosconfig"); err != nil { + return err + } + + roles, unknownRoles := role.Parse(configNewCmdFlags.roles) + if len(unknownRoles) != 0 { + return fmt.Errorf("unknown roles: %s", strings.Join(unknownRoles, ", ")) + } + + if _, err := os.Stat(path); err == nil { + return fmt.Errorf("talosconfig file already exists: %q", path) + } + + resp, err := c.GenerateClientConfiguration(ctx, &machineapi.GenerateClientConfigurationRequest{ + Roles: roles.Strings(), + CrtTtl: durationpb.New(configNewCmdFlags.crtTTL), + }) + if err != nil { + return err + } + + if l := len(resp.Messages); l != 1 { + panic(fmt.Sprintf("expected 1 message, got %d", l)) + } + + config, err := clientconfig.FromBytes(resp.Messages[0].Talosconfig) + if err != nil { + return err + } + + return config.Save(path) + }) + }, +} + func init() { - configCmd.AddCommand(configContextCmd, configEndpointCmd, configNodeCmd, configAddCmd, configGenerateCmd, configMergeCmd, configGetContexts) - configAddCmd.Flags().StringVar(&ca, "ca", "", "the path to the CA certificate") - configAddCmd.Flags().StringVar(&crt, "crt", "", "the path to the certificate") - configAddCmd.Flags().StringVar(&key, "key", "", "the path to the key") + configCmd.AddCommand( + configEndpointCmd, + configNodeCmd, + configContextCmd, + configAddCmd, + configGetContextsCmd, + configMergeCmd, + configNewCmd, + ) + + configAddCmd.Flags().StringVar(&configAddCmdFlags.ca, "ca", "", "the path to the CA certificate") + configAddCmd.Flags().StringVar(&configAddCmdFlags.crt, "crt", "", "the path to the certificate") + configAddCmd.Flags().StringVar(&configAddCmdFlags.key, "key", "", "the path to the key") cli.Should(configAddCmd.MarkFlagRequired("ca")) cli.Should(configAddCmd.MarkFlagRequired("crt")) cli.Should(configAddCmd.MarkFlagRequired("key")) + + configNewCmd.Flags().StringSliceVar(&configNewCmdFlags.roles, "roles", role.MakeSet(role.Admin).Strings(), "roles") + configNewCmd.Flags().DurationVar(&configNewCmdFlags.crtTTL, "crt-ttl", 87600*time.Hour, "certificate TTL") + addCommand(configCmd) } diff --git a/cmd/talosctl/cmd/talos/root.go b/cmd/talosctl/cmd/talos/root.go index 673d33609..78428dbb5 100644 --- a/cmd/talosctl/cmd/talos/root.go +++ b/cmd/talosctl/cmd/talos/root.go @@ -12,7 +12,7 @@ import ( "github.com/talos-systems/talos/pkg/cli" "github.com/talos-systems/talos/pkg/machinery/client" - "github.com/talos-systems/talos/pkg/machinery/client/config" + clientconfig "github.com/talos-systems/talos/pkg/machinery/client/config" ) var kubernetes bool @@ -30,7 +30,7 @@ var ( // WithClientNoNodes doesn't set any node information on request context. func WithClientNoNodes(action func(context.Context, *client.Client) error) error { return cli.WithContext(context.Background(), func(ctx context.Context) error { - cfg, err := config.Open(Talosconfig) + cfg, err := clientconfig.Open(Talosconfig) if err != nil { return fmt.Errorf("failed to open config file %q: %w", Talosconfig, err) } diff --git a/go.mod b/go.mod index 44e3ae434..badd44d15 100644 --- a/go.mod +++ b/go.mod @@ -77,7 +77,7 @@ require ( github.com/spf13/cobra v1.1.3 github.com/spf13/viper v1.7.1 // indirect github.com/stretchr/testify v1.7.0 - github.com/talos-systems/crypto v0.2.1-0.20210601174604-cd18ef62eb9f + github.com/talos-systems/crypto v0.3.1-0.20210615131117-6bc5bb50c527 github.com/talos-systems/go-blockdevice v0.2.1-0.20210526155905-30c2bc3cb62a github.com/talos-systems/go-cmd v0.0.0-20210216164758-68eb0067e0f0 github.com/talos-systems/go-debug v0.2.1-0.20210525175311-3d0a6e1bf5e3 diff --git a/go.sum b/go.sum index 71f8db412..f38f2d53d 100644 --- a/go.sum +++ b/go.sum @@ -1111,8 +1111,8 @@ github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69 github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/talos-systems/crypto v0.2.1-0.20210601174604-cd18ef62eb9f h1:Xk3zeUZPhvEl9Vs4PlYBohin3QZmizA/YR4URKEyULY= -github.com/talos-systems/crypto v0.2.1-0.20210601174604-cd18ef62eb9f/go.mod h1:xaNCB2/Bxaj+qrkdeodhRv5eKQVvKOGBBMj58MrIPY8= +github.com/talos-systems/crypto v0.3.1-0.20210615131117-6bc5bb50c527 h1:Ut3jI/0FPSyH0QpycKFKAueWKjzQ00OFmkeFG+0uO1A= +github.com/talos-systems/crypto v0.3.1-0.20210615131117-6bc5bb50c527/go.mod h1:xaNCB2/Bxaj+qrkdeodhRv5eKQVvKOGBBMj58MrIPY8= github.com/talos-systems/go-blockdevice v0.2.1-0.20210526155905-30c2bc3cb62a h1:NLuIVKi5tBnRMgxk185AVGmMUzlRcggb2Abrw9uUq3E= github.com/talos-systems/go-blockdevice v0.2.1-0.20210526155905-30c2bc3cb62a/go.mod h1:qnn/zDc09I1DA2BUDDCOSA2D0P8pIDjN8pGiRoRaQig= github.com/talos-systems/go-cmd v0.0.0-20210216164758-68eb0067e0f0 h1:DI+BjK+fcrLBc70Fi50dZocQcaHosqsuWHrGHKp2NzE= diff --git a/internal/app/apid/main.go b/internal/app/apid/main.go index 40802bd1a..e0137ab9a 100644 --- a/internal/app/apid/main.go +++ b/internal/app/apid/main.go @@ -28,15 +28,23 @@ import ( "github.com/talos-systems/talos/pkg/startup" ) -const ( - debugAddr = ":9981" -) - var ( endpoints *string useK8sEndpoints *bool ) +func runDebugServer(ctx context.Context) { + const debugAddr = ":9981" + + debugLogFunc := func(msg string) { + log.Print(msg) + } + + if err := debug.ListenAndServe(ctx, debugAddr, debugLogFunc); err != nil { + log.Fatalf("failed to start debug server: %s", err) + } +} + // Main is the entrypoint of apid. func Main() { log.SetFlags(log.Lshortfile | log.Ldate | log.Lmicroseconds | log.Ltime) @@ -46,14 +54,7 @@ func Main() { flag.Parse() - go func() { - debugLogFunc := func(msg string) { - log.Print(msg) - } - if lErr := debug.ListenAndServe(context.TODO(), debugAddr, debugLogFunc); lErr != nil { - log.Fatalf("failed to start debug server: %s", lErr) - } - }() + go runDebugServer(context.TODO()) if err := startup.RandSeed(); err != nil { log.Fatalf("failed to seed RNG: %v", err) @@ -119,9 +120,14 @@ func Main() { var errGroup errgroup.Group errGroup.Go(func() error { + mode := authz.Disabled + if config.Machine().Features().RBACEnabled() { + mode = authz.Enabled + } + injector := &authz.Injector{ - TrustMetadata: false, - Logger: log.New(log.Writer(), "apid/authz/injector/http ", log.Flags()).Printf, + Mode: mode, + Logger: log.New(log.Writer(), "apid/authz/injector/http ", log.Flags()).Printf, } return factory.ListenAndServe( @@ -146,8 +152,8 @@ func Main() { errGroup.Go(func() error { injector := &authz.Injector{ - TrustMetadata: true, - Logger: log.New(log.Writer(), "apid/authz/injector/unix ", log.Flags()).Printf, + Mode: authz.MetadataOnly, + Logger: log.New(log.Writer(), "apid/authz/injector/unix ", log.Flags()).Printf, } return factory.ListenAndServe( diff --git a/internal/app/apid/pkg/backend/apid.go b/internal/app/apid/pkg/backend/apid.go index 328c874e8..efc6e78ce 100644 --- a/internal/app/apid/pkg/backend/apid.go +++ b/internal/app/apid/pkg/backend/apid.go @@ -54,7 +54,7 @@ func (a *APID) String() string { // GetConnection returns a grpc connection to the backend. func (a *APID) GetConnection(ctx context.Context) (context.Context, *grpc.ClientConn, error) { md, _ := metadata.FromIncomingContext(ctx) - md = metadata.Join(md, authz.RolesAsMetadata(authz.GetRoles(ctx))) + md = metadata.Join(md, authz.RolesAsMetadata(authz.GetRoles(ctx))) // TODO(rbac): duplicates? if authority := md[":authority"]; len(authority) > 0 { md.Set("proxyfrom", authority...) diff --git a/internal/app/machined/internal/server/v1alpha1/v1alpha1_resource.go b/internal/app/machined/internal/server/v1alpha1/v1alpha1_resource.go index ee494cd08..118d42002 100644 --- a/internal/app/machined/internal/server/v1alpha1/v1alpha1_resource.go +++ b/internal/app/machined/internal/server/v1alpha1/v1alpha1_resource.go @@ -16,7 +16,9 @@ import ( "google.golang.org/grpc/status" "gopkg.in/yaml.v3" + "github.com/talos-systems/talos/pkg/grpc/middleware/authz" resourceapi "github.com/talos-systems/talos/pkg/machinery/api/resource" + "github.com/talos-systems/talos/pkg/machinery/role" ) // ResourceServer implements ResourceService API. @@ -118,6 +120,15 @@ func (s *ResourceServer) resolveResourceKind(ctx context.Context, kind *resource } func (s *ResourceServer) checkReadAccess(ctx context.Context, kind *resourceKind) error { + roles := authz.GetRoles(ctx) + + // TODO(rbac): check sensitivity levels once they are added to COSI + if strings.Contains(kind.Type, "secret") { + if !roles.Includes(role.Admin) { + return authz.ErrNotAuthorized + } + } + registeredNamespaces, err := s.server.Controller.Runtime().State().V1Alpha2().Resources().List(ctx, resource.NewMetadata(meta.NamespaceName, meta.NamespaceType, "", resource.VersionUndefined)) if err != nil { return err diff --git a/internal/app/machined/internal/server/v1alpha1/v1alpha1_server.go b/internal/app/machined/internal/server/v1alpha1/v1alpha1_server.go index d30f0c53c..b10ab55ea 100644 --- a/internal/app/machined/internal/server/v1alpha1/v1alpha1_server.go +++ b/internal/app/machined/internal/server/v1alpha1/v1alpha1_server.go @@ -38,6 +38,8 @@ import ( "go.etcd.io/etcd/client/v3/concurrency" "golang.org/x/sys/unix" "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" installer "github.com/talos-systems/talos/cmd/installer/pkg/install" "github.com/talos-systems/talos/internal/app/machined/internal/install" @@ -68,9 +70,12 @@ import ( "github.com/talos-systems/talos/pkg/machinery/api/resource" "github.com/talos-systems/talos/pkg/machinery/api/storage" timeapi "github.com/talos-systems/talos/pkg/machinery/api/time" + clientconfig "github.com/talos-systems/talos/pkg/machinery/client/config" "github.com/talos-systems/talos/pkg/machinery/config" + "github.com/talos-systems/talos/pkg/machinery/config/types/v1alpha1/generate" machinetype "github.com/talos-systems/talos/pkg/machinery/config/types/v1alpha1/machine" "github.com/talos-systems/talos/pkg/machinery/constants" + "github.com/talos-systems/talos/pkg/machinery/role" "github.com/talos-systems/talos/pkg/version" ) @@ -1916,6 +1921,53 @@ func (s *Server) RemoveBootkubeInitializedKey(ctx context.Context, in *empty.Emp }, nil } +// GenerateClientConfiguration implements the machine.MachineServer interface. +func (s *Server) GenerateClientConfiguration(ctx context.Context, in *machine.GenerateClientConfigurationRequest) (*machine.GenerateClientConfigurationResponse, error) { + if s.Controller.Runtime().Config().Machine().Type() == machinetype.TypeJoin { + return nil, status.Error(codes.FailedPrecondition, "client configuration (talosconfig) can't be generated on worker nodes") + } + + crtTTL := in.CrtTtl.AsDuration() + if crtTTL <= 0 { + return nil, status.Error(codes.InvalidArgument, "crt_ttl should be positive") + } + + ca := s.Controller.Runtime().Config().Machine().Security().CA() + + roles, _ := role.Parse(in.Roles) + + cert, err := generate.NewAdminCertificateAndKey(time.Now(), ca, roles, crtTTL) + if err != nil { + return nil, err + } + + // make a nice context name + contextName := s.Controller.Runtime().Config().Cluster().Name() + if r := roles.Strings(); len(r) == 1 { + contextName = strings.TrimPrefix(r[0], role.Prefix) + "@" + contextName + } + + talosconfig := clientconfig.NewConfig(contextName, nil, ca.Crt, cert) + + b, err := talosconfig.Bytes() + if err != nil { + return nil, err + } + + reply := &machine.GenerateClientConfigurationResponse{ + Messages: []*machine.GenerateClientConfiguration{ + { + Ca: ca.Crt, + Crt: cert.Crt, + Key: cert.Key, + Talosconfig: b, + }, + }, + } + + return reply, nil +} + func upgradeMutex(c *etcd.Client) (*concurrency.Mutex, error) { sess, err := concurrency.NewSession(c.Client, concurrency.WithTTL(MinimumEtcdUpgradeLeaseLockSeconds), diff --git a/internal/app/machined/main.go b/internal/app/machined/main.go index ca2804216..95e3e7322 100644 --- a/internal/app/machined/main.go +++ b/internal/app/machined/main.go @@ -38,10 +38,6 @@ import ( "github.com/talos-systems/talos/pkg/startup" ) -const ( - debugAddr = ":9982" -) - func init() { // Explicitly set the default http client transport to work around proxy.Do // once. This is the http.DefaultTransport with the Proxy func overridden so @@ -178,6 +174,18 @@ func handle(err error) { } } +func runDebugServer(ctx context.Context) { + const debugAddr = ":9982" + + debugLogFunc := func(msg string) { + log.Print(msg) + } + + if err := debug.ListenAndServe(ctx, debugAddr, debugLogFunc); err != nil { + log.Fatalf("failed to start debug server: %s", err) + } +} + //nolint:gocyclo func run() error { errCh := make(chan error) @@ -201,14 +209,7 @@ func run() error { ctx, cancel := context.WithCancel(context.Background()) defer cancel() - go func() { - debugLogFunc := func(msg string) { - log.Print(msg) - } - if lErr := debug.ListenAndServe(ctx, debugAddr, debugLogFunc); lErr != nil { - log.Fatalf("failed to start debug server: %s", lErr) - } - }() + go runDebugServer(ctx) // Schedule service shutdown on any return. defer system.Services(c.Runtime()).Shutdown(ctx) diff --git a/internal/app/machined/pkg/system/services/machined.go b/internal/app/machined/pkg/system/services/machined.go index bfa322504..704a748ad 100644 --- a/internal/app/machined/pkg/system/services/machined.go +++ b/internal/app/machined/pkg/system/services/machined.go @@ -29,20 +29,24 @@ type machinedService struct { // Main is an entrypoint the the API service. func (s *machinedService) Main(ctx context.Context, r runtime.Runtime, logWriter io.Writer) error { injector := &authz.Injector{ - TrustMetadata: true, - Logger: log.New(logWriter, "machined/authz/injector ", log.Flags()).Printf, + Mode: authz.MetadataOnly, + Logger: log.New(logWriter, "machined/authz/injector ", log.Flags()).Printf, } authorizer := &authz.Authorizer{ Rules: map[string]role.Set{ + "/machine.MachineService/GenerateClientConfiguration": role.MakeSet(role.Admin), + "/cluster.ClusterService/HealthCheck": role.MakeSet(role.Admin, role.Reader), "/machine.MachineService/List": role.MakeSet(role.Admin, role.Reader), "/machine.MachineService/Version": role.MakeSet(role.Admin, role.Reader), + // per-type authorization is handled by the service itself + "/resource.ResourceService": role.MakeSet(role.Admin, role.Reader), + // TODO(rbac): More rules }, FallbackRoles: role.MakeSet(role.Admin), - Enforce: r.Config().Machine().Features().RBACEnabled(), Logger: log.New(logWriter, "machined/authz/authorizer ", log.Flags()).Printf, } diff --git a/internal/app/maintenance/server/server.go b/internal/app/maintenance/server/server.go index 4ae1610f9..1b51d3f62 100644 --- a/internal/app/maintenance/server/server.go +++ b/internal/app/maintenance/server/server.go @@ -10,6 +10,8 @@ import ( "log" "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" "github.com/talos-systems/talos/internal/app/machined/pkg/runtime" networkserver "github.com/talos-systems/talos/internal/app/networkd/pkg/server" @@ -51,7 +53,7 @@ func (s *Server) Register(obj *grpc.Server) { } // ApplyConfiguration implements machine.MachineService. -func (s *Server) ApplyConfiguration(ctx context.Context, in *machine.ApplyConfigurationRequest) (reply *machine.ApplyConfigurationResponse, err error) { +func (s *Server) ApplyConfiguration(ctx context.Context, in *machine.ApplyConfigurationRequest) (*machine.ApplyConfigurationResponse, error) { if in.OnReboot { return nil, fmt.Errorf("apply configuration on reboot is not supported in maintenance mode") } @@ -66,7 +68,7 @@ func (s *Server) ApplyConfiguration(ctx context.Context, in *machine.ApplyConfig return nil, fmt.Errorf("configuration validation failed: %w", err) } - reply = &machine.ApplyConfigurationResponse{ + reply := &machine.ApplyConfigurationResponse{ Messages: []*machine.ApplyConfiguration{ { Warnings: warnings, @@ -80,7 +82,7 @@ func (s *Server) ApplyConfiguration(ctx context.Context, in *machine.ApplyConfig } // GenerateConfiguration implements the machine.MachineServer interface. -func (s *Server) GenerateConfiguration(ctx context.Context, in *machine.GenerateConfigurationRequest) (reply *machine.GenerateConfigurationResponse, err error) { +func (s *Server) GenerateConfiguration(ctx context.Context, in *machine.GenerateConfigurationRequest) (*machine.GenerateConfigurationResponse, error) { if in.MachineConfig == nil { return nil, fmt.Errorf("invalid generate request") } @@ -88,8 +90,13 @@ func (s *Server) GenerateConfiguration(ctx context.Context, in *machine.Generate machineType := v1alpha1machine.Type(in.MachineConfig.Type) if machineType == v1alpha1machine.TypeJoin { - return nil, fmt.Errorf("join config cannot be generated in the maintenance mode") + return nil, fmt.Errorf("join config can't be generated in the maintenance mode") } return configuration.Generate(ctx, in) } + +// GenerateClientConfiguration implements the machine.MachineServer interface. +func (s *Server) GenerateClientConfiguration(ctx context.Context, in *machine.GenerateClientConfigurationRequest) (*machine.GenerateClientConfigurationResponse, error) { + return nil, status.Error(codes.Unimplemented, "client configuration (talosconfig) can't be generated in the maintenance mode") +} diff --git a/internal/app/trustd/main.go b/internal/app/trustd/main.go index bf3a1ab06..29d2360f0 100644 --- a/internal/app/trustd/main.go +++ b/internal/app/trustd/main.go @@ -26,9 +26,17 @@ import ( "github.com/talos-systems/talos/pkg/startup" ) -const ( - debugAddr = ":9983" -) +func runDebugServer(ctx context.Context) { + const debugAddr = ":9983" + + debugLogFunc := func(msg string) { + log.Print(msg) + } + + if err := debug.ListenAndServe(ctx, debugAddr, debugLogFunc); err != nil { + log.Fatalf("failed to start debug server: %s", err) + } +} // Main is the entrypoint into trustd. // @@ -38,14 +46,7 @@ func Main() { flag.Parse() - go func() { - debugLogFunc := func(msg string) { - log.Print(msg) - } - if lErr := debug.ListenAndServe(context.TODO(), debugAddr, debugLogFunc); lErr != nil { - log.Fatalf("failed to start debug server: %s", lErr) - } - }() + go runDebugServer(context.TODO()) var err error diff --git a/internal/integration/base/api.go b/internal/integration/base/api.go index abc13c283..4591a6d7f 100644 --- a/internal/integration/base/api.go +++ b/internal/integration/base/api.go @@ -26,7 +26,7 @@ import ( "github.com/talos-systems/talos/pkg/cluster/check" machineapi "github.com/talos-systems/talos/pkg/machinery/api/machine" "github.com/talos-systems/talos/pkg/machinery/client" - "github.com/talos-systems/talos/pkg/machinery/client/config" + clientconfig "github.com/talos-systems/talos/pkg/machinery/client/config" "github.com/talos-systems/talos/pkg/machinery/config/types/v1alpha1/machine" "github.com/talos-systems/talos/pkg/provision" "github.com/talos-systems/talos/pkg/provision/access" @@ -42,7 +42,7 @@ type APISuite struct { // SetupSuite initializes Talos API client. func (apiSuite *APISuite) SetupSuite() { - cfg, err := config.Open(apiSuite.TalosConfig) + cfg, err := clientconfig.Open(apiSuite.TalosConfig) apiSuite.Require().NoError(err) opts := []client.OptionFunc{ diff --git a/internal/integration/integration_test.go b/internal/integration/integration_test.go index c2472eabc..3bf814fa7 100644 --- a/internal/integration/integration_test.go +++ b/internal/integration/integration_test.go @@ -21,7 +21,7 @@ import ( "github.com/talos-systems/talos/internal/integration/cli" "github.com/talos-systems/talos/internal/integration/k8s" provision_test "github.com/talos-systems/talos/internal/integration/provision" - "github.com/talos-systems/talos/pkg/machinery/client/config" + clientconfig "github.com/talos-systems/talos/pkg/machinery/client/config" "github.com/talos-systems/talos/pkg/provision" "github.com/talos-systems/talos/pkg/provision/providers" "github.com/talos-systems/talos/pkg/version" @@ -116,9 +116,9 @@ func TestIntegration(t *testing.T) { } func init() { - defaultTalosConfig, _ := config.GetDefaultPath() //nolint:errcheck + defaultTalosConfig, _ := clientconfig.GetDefaultPath() //nolint:errcheck - defaultStateDir, err := config.GetTalosDirectory() + defaultStateDir, err := clientconfig.GetTalosDirectory() if err == nil { defaultStateDir = filepath.Join(defaultStateDir, "clusters") } diff --git a/internal/pkg/etcd/certs.go b/internal/pkg/etcd/certs.go index b00546825..067f2dd6d 100644 --- a/internal/pkg/etcd/certs.go +++ b/internal/pkg/etcd/certs.go @@ -45,7 +45,7 @@ func GeneratePeerCert(etcdCA *x509.PEMEncodedCertificateAndKey) (*x509.PEMEncode x509.NotAfter(time.Now().Add(87600 * time.Hour)), } - ca, err := x509.NewCertificateAuthorityFromCertificateAndKey(etcdCA, opts...) + ca, err := x509.NewCertificateAuthorityFromCertificateAndKey(etcdCA) if err != nil { return nil, fmt.Errorf("failed loading CA from config: %w", err) } diff --git a/pkg/cluster/config.go b/pkg/cluster/config.go index 5b285d358..dcfcea0fa 100644 --- a/pkg/cluster/config.go +++ b/pkg/cluster/config.go @@ -9,7 +9,7 @@ import ( "strings" "github.com/talos-systems/talos/pkg/machinery/client" - "github.com/talos-systems/talos/pkg/machinery/client/config" + clientconfig "github.com/talos-systems/talos/pkg/machinery/client/config" ) // ConfigClientProvider builds Talos client from client config. @@ -20,7 +20,7 @@ type ConfigClientProvider struct { DefaultClient *client.Client // TalosConfig is a client Talos configuration. - TalosConfig *config.Config + TalosConfig *clientconfig.Config clients map[string]*client.Client } diff --git a/pkg/grpc/middleware/authz/authorizer.go b/pkg/grpc/middleware/authz/authorizer.go index 3a9ea8a89..fea0238de 100644 --- a/pkg/grpc/middleware/authz/authorizer.go +++ b/pkg/grpc/middleware/authz/authorizer.go @@ -8,7 +8,6 @@ import ( "context" "strings" - grpc_middleware "github.com/grpc-ecosystem/go-grpc-middleware" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -16,6 +15,9 @@ import ( "github.com/talos-systems/talos/pkg/machinery/role" ) +// ErrNotAuthorized should be returned to the client when they are not authorized. +var ErrNotAuthorized = status.Error(codes.PermissionDenied, "not authorized") + // Authorizer checks that the user is authorized (has a valid role) to call intercepted gRPC method. // User roles should be set the Injector interceptor. type Authorizer struct { @@ -25,9 +27,6 @@ type Authorizer struct { // Defines roles for gRPC methods not present in Rules. FallbackRoles role.Set - // If false, makes the authorizer never return authorization error. - Enforce bool - // Logger. Logger func(format string, v ...interface{}) } @@ -56,21 +55,25 @@ func (a *Authorizer) logf(format string, v ...interface{}) { // authorize returns error if the user is not authorized (doesn't have a valid role) to call the given gRPC method. // User roles should be previously set the Injector interceptor. -func (a *Authorizer) authorize(ctx context.Context, method string) (context.Context, error) { +func (a *Authorizer) authorize(ctx context.Context, method string) error { clientRoles := GetRoles(ctx) - var allowedRoles role.Set + var ( + allowedRoles role.Set + found bool + ) prefix := method for prefix != "/" { - if allowedRoles = a.Rules[prefix]; allowedRoles != nil { + allowedRoles, found = a.Rules[prefix] + if found { break } prefix = nextPrefix(prefix) } - if allowedRoles == nil { + if !found { a.logf("no explicit rule found for %q, falling back to %v", method, a.FallbackRoles.Strings()) allowedRoles = a.FallbackRoles } @@ -78,25 +81,18 @@ func (a *Authorizer) authorize(ctx context.Context, method string) (context.Cont if allowedRoles.IncludesAny(clientRoles) { a.logf("authorized (%v includes %v)", allowedRoles.Strings(), clientRoles.Strings()) - return ctx, nil - } - - if !a.Enforce { - a.logf("not authorized (%v doesn't include %v), but authorization wasn't enforced", allowedRoles.Strings(), clientRoles.Strings()) - - return ctx, nil + return nil } a.logf("not authorized (%v doesn't include %v)", allowedRoles.Strings(), clientRoles.Strings()) - return nil, status.Error(codes.PermissionDenied, "not authorized") + return ErrNotAuthorized } // UnaryInterceptor returns grpc UnaryServerInterceptor. func (a *Authorizer) UnaryInterceptor() grpc.UnaryServerInterceptor { return func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (interface{}, error) { - ctx, err := a.authorize(ctx, info.FullMethod) - if err != nil { + if err := a.authorize(ctx, info.FullMethod); err != nil { return nil, err } @@ -107,14 +103,10 @@ func (a *Authorizer) UnaryInterceptor() grpc.UnaryServerInterceptor { // StreamInterceptor returns grpc StreamServerInterceptor. func (a *Authorizer) StreamInterceptor() grpc.StreamServerInterceptor { return func(srv interface{}, stream grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error { - ctx, err := a.authorize(stream.Context(), info.FullMethod) - if err != nil { + if err := a.authorize(stream.Context(), info.FullMethod); err != nil { return err } - wrapped := grpc_middleware.WrapServerStream(stream) - wrapped.WrappedContext = ctx - - return handler(srv, wrapped) + return handler(srv, stream) } } diff --git a/pkg/grpc/middleware/authz/context.go b/pkg/grpc/middleware/authz/context.go index f726b13ec..29b51140f 100644 --- a/pkg/grpc/middleware/authz/context.go +++ b/pkg/grpc/middleware/authz/context.go @@ -17,20 +17,20 @@ type ctxKey struct{} // GetRoles returns roles stored in the context by the Injector interceptor. // May be used for additional checks in the API method handler. func GetRoles(ctx context.Context) role.Set { - roles := rolesFromContext(ctx) + set, ok := getFromContext(ctx) - if roles == nil { + if !ok { panic("no roles in the context") } - return roles + return set } -// rolesFromContext returns roles stored in the context, or nil. -func rolesFromContext(ctx context.Context) role.Set { - roles, _ := ctx.Value(ctxKey{}).(role.Set) //nolint:errcheck +// getFromContext returns roles stored in the context. +func getFromContext(ctx context.Context) (role.Set, bool) { + set, ok := ctx.Value(ctxKey{}).(role.Set) - return roles + return set, ok } // ContextWithRoles returns derived context with roles set. diff --git a/pkg/grpc/middleware/authz/injector.go b/pkg/grpc/middleware/authz/injector.go index d02780699..14deac4df 100644 --- a/pkg/grpc/middleware/authz/injector.go +++ b/pkg/grpc/middleware/authz/injector.go @@ -16,10 +16,24 @@ import ( "github.com/talos-systems/talos/pkg/machinery/role" ) +// InjectorMode specifies how roles are extracted. +type InjectorMode int + +const ( + // Disabled is used when RBAC is disabled in the machine configuration. All roles are assumed. + Disabled InjectorMode = iota + + // MetadataOnly is used internally. Checks only metadata. + MetadataOnly + + // Enabled is used when RBAC is enabled in the machine configuration. Roles are extracted normally. + Enabled +) + // Injector sets roles to the context. type Injector struct { - // If true, trust roles in gRPC metadata, do not check certificate. - TrustMetadata bool + // Mode. + Mode InjectorMode // Logger. Logger func(format string, v ...interface{}) @@ -32,15 +46,25 @@ func (i *Injector) logf(format string, v ...interface{}) { } // extractRoles returns roles extracted from the user's certificate (in case of the first apid instance), -// or from gRPC metadata (in case of subsequent apid instances or machined). +// or from gRPC metadata (in case of subsequent apid instances, machined, or user with impersonator role). func (i *Injector) extractRoles(ctx context.Context) role.Set { // sanity check - if rolesFromContext(ctx) != nil { + if _, ok := getFromContext(ctx); ok { panic("roles should not be present in the context at this point") } - // check certificate first, if needed - if !i.TrustMetadata { + switch i.Mode { + case Disabled: + i.logf("RBAC is disabled, injecting all roles") + + return role.All + + case MetadataOnly: + roles, _ := getFromMetadata(ctx, i.logf) + + return roles + + case Enabled: p, ok := peer.FromContext(ctx) if !ok { panic("can't get peer information") @@ -59,17 +83,25 @@ func (i *Injector) extractRoles(ctx context.Context) role.Set { // TODO validate cert.KeyUsage, cert.ExtKeyUsage, cert.Issuer.Organization, other fields there? - roles, err := role.Parse(strings) - i.logf("parsed peer's orgs %v as %v (err = %v)", strings, roles.Strings(), err) + roles, unknownRoles := role.Parse(strings) + i.logf("parsed peer's certificate orgs %v as %v (unknownRoles = %v)", strings, roles.Strings(), unknownRoles) - // not impersonator (not proxied request), return extracted roles - if _, ok := roles[role.Impersonator]; !ok { - return roles + // trust gRPC metadata from clients with impersonator role if present + // (including requests proxied from other apid instances) + if roles.Includes(role.Impersonator) { + metadataRoles, ok := getFromMetadata(ctx, i.logf) + if ok { + return metadataRoles + } + + // that's a real user with impersonator role then + i.logf("no roles in metadadata, returning parsed roles") } + + return roles } - // trust gRPC metadata from clients with impersonator role (that's proxied request), or if configured - return getFromMetadata(ctx, i.logf) + panic("not reached") } // UnaryInterceptor returns grpc UnaryServerInterceptor. diff --git a/pkg/grpc/middleware/authz/metadata.go b/pkg/grpc/middleware/authz/metadata.go index c8131d718..b528803f0 100644 --- a/pkg/grpc/middleware/authz/metadata.go +++ b/pkg/grpc/middleware/authz/metadata.go @@ -22,18 +22,25 @@ func RolesAsMetadata(roles role.Set) metadata.MD { } // getFromMetadata returns roles extracted from from gRPC metadata. -func getFromMetadata(ctx context.Context, logf func(format string, v ...interface{})) role.Set { +func getFromMetadata(ctx context.Context, logf func(format string, v ...interface{})) (role.Set, bool) { md, ok := metadata.FromIncomingContext(ctx) if !ok { panic("no request metadata") } strings := md.Get(mdKey) - roles, err := role.Parse(strings) + if len(strings) == 0 { + if logf != nil { + logf("no roles in metadata") + } - if logf != nil { - logf("parsed metadata %v as %v (err = %v)", strings, roles.Strings(), err) + return role.Zero, false } - return roles + roles, unknownRoles := role.Parse(strings) + if logf != nil { + logf("parsed metadata %v as %v (unknownRoles = %v)", strings, roles.Strings(), unknownRoles) + } + + return roles, true } diff --git a/pkg/grpc/proxy/backend/local.go b/pkg/grpc/proxy/backend/local.go index f2f5a13cd..ff15fc440 100644 --- a/pkg/grpc/proxy/backend/local.go +++ b/pkg/grpc/proxy/backend/local.go @@ -39,7 +39,7 @@ func (l *Local) String() string { // GetConnection returns a grpc connection to the backend. func (l *Local) GetConnection(ctx context.Context) (context.Context, *grpc.ClientConn, error) { md, _ := metadata.FromIncomingContext(ctx) - md = metadata.Join(md, authz.RolesAsMetadata(authz.GetRoles(ctx))) + md = metadata.Join(md, authz.RolesAsMetadata(authz.GetRoles(ctx))) // TODO(rbac): duplicates? outCtx := metadata.NewOutgoingContext(ctx, md) diff --git a/pkg/machinery/api/cluster/cluster.pb.go b/pkg/machinery/api/cluster/cluster.pb.go index 9c36381a6..ac6e11431 100644 --- a/pkg/machinery/api/cluster/cluster.pb.go +++ b/pkg/machinery/api/cluster/cluster.pb.go @@ -234,13 +234,11 @@ var file_cluster_cluster_proto_rawDesc = []byte{ 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, - 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x30, 0x01, 0x42, 0x59, 0x0a, 0x0f, 0x63, 0x6f, - 0x6d, 0x2e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x0a, 0x43, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x41, 0x70, 0x69, 0x50, 0x01, 0x5a, 0x38, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2d, 0x73, 0x79, - 0x73, 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2f, 0x70, 0x6b, 0x67, 0x2f, - 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, 0x79, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x30, 0x01, 0x42, 0x3a, 0x5a, 0x38, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2d, 0x73, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2f, 0x70, 0x6b, 0x67, + 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, 0x79, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x63, + 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/pkg/machinery/api/inspect/inspect.pb.go b/pkg/machinery/api/inspect/inspect.pb.go index 0e765f12e..086f4c0e0 100644 --- a/pkg/machinery/api/inspect/inspect.pb.go +++ b/pkg/machinery/api/inspect/inspect.pb.go @@ -314,14 +314,12 @@ var file_inspect_inspect_proto_rawDesc = []byte{ 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x2e, 0x2e, 0x69, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x52, 0x75, 0x6e, 0x74, 0x69, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, - 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x59, - 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x2e, 0x69, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x2e, 0x61, 0x70, - 0x69, 0x42, 0x0a, 0x49, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x41, 0x70, 0x69, 0x50, 0x01, 0x5a, - 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x61, 0x6c, 0x6f, - 0x73, 0x2d, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2f, - 0x70, 0x6b, 0x67, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, 0x79, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x69, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x65, 0x6e, 0x63, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x3a, + 0x5a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x61, 0x6c, + 0x6f, 0x73, 0x2d, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x74, 0x61, 0x6c, 0x6f, 0x73, + 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, 0x79, 0x2f, 0x61, + 0x70, 0x69, 0x2f, 0x69, 0x6e, 0x73, 0x70, 0x65, 0x63, 0x74, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( diff --git a/pkg/machinery/api/machine/machine.pb.go b/pkg/machinery/api/machine/machine.pb.go index 0c09b09ea..d6fc4eb5c 100644 --- a/pkg/machinery/api/machine/machine.pb.go +++ b/pkg/machinery/api/machine/machine.pb.go @@ -13,6 +13,7 @@ import ( protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" anypb "google.golang.org/protobuf/types/known/anypb" + durationpb "google.golang.org/protobuf/types/known/durationpb" emptypb "google.golang.org/protobuf/types/known/emptypb" timestamppb "google.golang.org/protobuf/types/known/timestamppb" @@ -379,7 +380,7 @@ func (x MachineConfig_MachineType) Number() protoreflect.EnumNumber { // Deprecated: Use MachineConfig_MachineType.Descriptor instead. func (MachineConfig_MachineType) EnumDescriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{120, 0} + return file_machine_machine_proto_rawDescGZIP(), []int{119, 0} } // rpc applyConfiguration @@ -4264,44 +4265,6 @@ func (x *DmesgRequest) GetTail() bool { } // rpc processes -type ProcessesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields -} - -func (x *ProcessesRequest) Reset() { - *x = ProcessesRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[68] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ProcessesRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ProcessesRequest) ProtoMessage() {} - -func (x *ProcessesRequest) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[68] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ProcessesRequest.ProtoReflect.Descriptor instead. -func (*ProcessesRequest) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{68} -} - type ProcessesResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -4313,7 +4276,7 @@ type ProcessesResponse struct { func (x *ProcessesResponse) Reset() { *x = ProcessesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[69] + mi := &file_machine_machine_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4326,7 +4289,7 @@ func (x *ProcessesResponse) String() string { func (*ProcessesResponse) ProtoMessage() {} func (x *ProcessesResponse) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[69] + mi := &file_machine_machine_proto_msgTypes[68] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4339,7 +4302,7 @@ func (x *ProcessesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ProcessesResponse.ProtoReflect.Descriptor instead. func (*ProcessesResponse) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{69} + return file_machine_machine_proto_rawDescGZIP(), []int{68} } func (x *ProcessesResponse) GetMessages() []*Process { @@ -4361,7 +4324,7 @@ type Process struct { func (x *Process) Reset() { *x = Process{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[70] + mi := &file_machine_machine_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4374,7 +4337,7 @@ func (x *Process) String() string { func (*Process) ProtoMessage() {} func (x *Process) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[70] + mi := &file_machine_machine_proto_msgTypes[69] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4387,7 +4350,7 @@ func (x *Process) ProtoReflect() protoreflect.Message { // Deprecated: Use Process.ProtoReflect.Descriptor instead. func (*Process) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{70} + return file_machine_machine_proto_rawDescGZIP(), []int{69} } func (x *Process) GetMetadata() *common.Metadata { @@ -4424,7 +4387,7 @@ type ProcessInfo struct { func (x *ProcessInfo) Reset() { *x = ProcessInfo{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[71] + mi := &file_machine_machine_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4437,7 +4400,7 @@ func (x *ProcessInfo) String() string { func (*ProcessInfo) ProtoMessage() {} func (x *ProcessInfo) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[71] + mi := &file_machine_machine_proto_msgTypes[70] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4450,7 +4413,7 @@ func (x *ProcessInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use ProcessInfo.ProtoReflect.Descriptor instead. func (*ProcessInfo) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{71} + return file_machine_machine_proto_rawDescGZIP(), []int{70} } func (x *ProcessInfo) GetPid() int32 { @@ -4539,7 +4502,7 @@ type RestartRequest struct { func (x *RestartRequest) Reset() { *x = RestartRequest{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[72] + mi := &file_machine_machine_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4552,7 +4515,7 @@ func (x *RestartRequest) String() string { func (*RestartRequest) ProtoMessage() {} func (x *RestartRequest) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[72] + mi := &file_machine_machine_proto_msgTypes[71] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4565,7 +4528,7 @@ func (x *RestartRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RestartRequest.ProtoReflect.Descriptor instead. func (*RestartRequest) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{72} + return file_machine_machine_proto_rawDescGZIP(), []int{71} } func (x *RestartRequest) GetNamespace() string { @@ -4600,7 +4563,7 @@ type Restart struct { func (x *Restart) Reset() { *x = Restart{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[73] + mi := &file_machine_machine_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4613,7 +4576,7 @@ func (x *Restart) String() string { func (*Restart) ProtoMessage() {} func (x *Restart) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[73] + mi := &file_machine_machine_proto_msgTypes[72] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4626,7 +4589,7 @@ func (x *Restart) ProtoReflect() protoreflect.Message { // Deprecated: Use Restart.ProtoReflect.Descriptor instead. func (*Restart) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{73} + return file_machine_machine_proto_rawDescGZIP(), []int{72} } func (x *Restart) GetMetadata() *common.Metadata { @@ -4648,7 +4611,7 @@ type RestartResponse struct { func (x *RestartResponse) Reset() { *x = RestartResponse{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[74] + mi := &file_machine_machine_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4661,7 +4624,7 @@ func (x *RestartResponse) String() string { func (*RestartResponse) ProtoMessage() {} func (x *RestartResponse) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[74] + mi := &file_machine_machine_proto_msgTypes[73] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4674,7 +4637,7 @@ func (x *RestartResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RestartResponse.ProtoReflect.Descriptor instead. func (*RestartResponse) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{74} + return file_machine_machine_proto_rawDescGZIP(), []int{73} } func (x *RestartResponse) GetMessages() []*Restart { @@ -4698,7 +4661,7 @@ type StatsRequest struct { func (x *StatsRequest) Reset() { *x = StatsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[75] + mi := &file_machine_machine_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4711,7 +4674,7 @@ func (x *StatsRequest) String() string { func (*StatsRequest) ProtoMessage() {} func (x *StatsRequest) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[75] + mi := &file_machine_machine_proto_msgTypes[74] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4724,7 +4687,7 @@ func (x *StatsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StatsRequest.ProtoReflect.Descriptor instead. func (*StatsRequest) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{75} + return file_machine_machine_proto_rawDescGZIP(), []int{74} } func (x *StatsRequest) GetNamespace() string { @@ -4754,7 +4717,7 @@ type Stats struct { func (x *Stats) Reset() { *x = Stats{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[76] + mi := &file_machine_machine_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4767,7 +4730,7 @@ func (x *Stats) String() string { func (*Stats) ProtoMessage() {} func (x *Stats) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[76] + mi := &file_machine_machine_proto_msgTypes[75] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4780,7 +4743,7 @@ func (x *Stats) ProtoReflect() protoreflect.Message { // Deprecated: Use Stats.ProtoReflect.Descriptor instead. func (*Stats) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{76} + return file_machine_machine_proto_rawDescGZIP(), []int{75} } func (x *Stats) GetMetadata() *common.Metadata { @@ -4808,7 +4771,7 @@ type StatsResponse struct { func (x *StatsResponse) Reset() { *x = StatsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[77] + mi := &file_machine_machine_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4821,7 +4784,7 @@ func (x *StatsResponse) String() string { func (*StatsResponse) ProtoMessage() {} func (x *StatsResponse) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[77] + mi := &file_machine_machine_proto_msgTypes[76] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4834,7 +4797,7 @@ func (x *StatsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StatsResponse.ProtoReflect.Descriptor instead. func (*StatsResponse) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{77} + return file_machine_machine_proto_rawDescGZIP(), []int{76} } func (x *StatsResponse) GetMessages() []*Stats { @@ -4861,7 +4824,7 @@ type Stat struct { func (x *Stat) Reset() { *x = Stat{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[78] + mi := &file_machine_machine_proto_msgTypes[77] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4874,7 +4837,7 @@ func (x *Stat) String() string { func (*Stat) ProtoMessage() {} func (x *Stat) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[78] + mi := &file_machine_machine_proto_msgTypes[77] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4887,7 +4850,7 @@ func (x *Stat) ProtoReflect() protoreflect.Message { // Deprecated: Use Stat.ProtoReflect.Descriptor instead. func (*Stat) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{78} + return file_machine_machine_proto_rawDescGZIP(), []int{77} } func (x *Stat) GetNamespace() string { @@ -4944,7 +4907,7 @@ type Memory struct { func (x *Memory) Reset() { *x = Memory{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[79] + mi := &file_machine_machine_proto_msgTypes[78] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4957,7 +4920,7 @@ func (x *Memory) String() string { func (*Memory) ProtoMessage() {} func (x *Memory) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[79] + mi := &file_machine_machine_proto_msgTypes[78] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4970,7 +4933,7 @@ func (x *Memory) ProtoReflect() protoreflect.Message { // Deprecated: Use Memory.ProtoReflect.Descriptor instead. func (*Memory) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{79} + return file_machine_machine_proto_rawDescGZIP(), []int{78} } func (x *Memory) GetMetadata() *common.Metadata { @@ -4998,7 +4961,7 @@ type MemoryResponse struct { func (x *MemoryResponse) Reset() { *x = MemoryResponse{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[80] + mi := &file_machine_machine_proto_msgTypes[79] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5011,7 +4974,7 @@ func (x *MemoryResponse) String() string { func (*MemoryResponse) ProtoMessage() {} func (x *MemoryResponse) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[80] + mi := &file_machine_machine_proto_msgTypes[79] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5024,7 +4987,7 @@ func (x *MemoryResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use MemoryResponse.ProtoReflect.Descriptor instead. func (*MemoryResponse) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{80} + return file_machine_machine_proto_rawDescGZIP(), []int{79} } func (x *MemoryResponse) GetMessages() []*Memory { @@ -5092,7 +5055,7 @@ type MemInfo struct { func (x *MemInfo) Reset() { *x = MemInfo{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[81] + mi := &file_machine_machine_proto_msgTypes[80] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5105,7 +5068,7 @@ func (x *MemInfo) String() string { func (*MemInfo) ProtoMessage() {} func (x *MemInfo) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[81] + mi := &file_machine_machine_proto_msgTypes[80] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5118,7 +5081,7 @@ func (x *MemInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use MemInfo.ProtoReflect.Descriptor instead. func (*MemInfo) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{81} + return file_machine_machine_proto_rawDescGZIP(), []int{80} } func (x *MemInfo) GetMemtotal() uint64 { @@ -5468,7 +5431,7 @@ type HostnameResponse struct { func (x *HostnameResponse) Reset() { *x = HostnameResponse{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[82] + mi := &file_machine_machine_proto_msgTypes[81] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5481,7 +5444,7 @@ func (x *HostnameResponse) String() string { func (*HostnameResponse) ProtoMessage() {} func (x *HostnameResponse) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[82] + mi := &file_machine_machine_proto_msgTypes[81] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5494,7 +5457,7 @@ func (x *HostnameResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use HostnameResponse.ProtoReflect.Descriptor instead. func (*HostnameResponse) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{82} + return file_machine_machine_proto_rawDescGZIP(), []int{81} } func (x *HostnameResponse) GetMessages() []*Hostname { @@ -5516,7 +5479,7 @@ type Hostname struct { func (x *Hostname) Reset() { *x = Hostname{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[83] + mi := &file_machine_machine_proto_msgTypes[82] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5529,7 +5492,7 @@ func (x *Hostname) String() string { func (*Hostname) ProtoMessage() {} func (x *Hostname) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[83] + mi := &file_machine_machine_proto_msgTypes[82] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5542,7 +5505,7 @@ func (x *Hostname) ProtoReflect() protoreflect.Message { // Deprecated: Use Hostname.ProtoReflect.Descriptor instead. func (*Hostname) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{83} + return file_machine_machine_proto_rawDescGZIP(), []int{82} } func (x *Hostname) GetMetadata() *common.Metadata { @@ -5570,7 +5533,7 @@ type LoadAvgResponse struct { func (x *LoadAvgResponse) Reset() { *x = LoadAvgResponse{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[84] + mi := &file_machine_machine_proto_msgTypes[83] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5583,7 +5546,7 @@ func (x *LoadAvgResponse) String() string { func (*LoadAvgResponse) ProtoMessage() {} func (x *LoadAvgResponse) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[84] + mi := &file_machine_machine_proto_msgTypes[83] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5596,7 +5559,7 @@ func (x *LoadAvgResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use LoadAvgResponse.ProtoReflect.Descriptor instead. func (*LoadAvgResponse) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{84} + return file_machine_machine_proto_rawDescGZIP(), []int{83} } func (x *LoadAvgResponse) GetMessages() []*LoadAvg { @@ -5620,7 +5583,7 @@ type LoadAvg struct { func (x *LoadAvg) Reset() { *x = LoadAvg{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[85] + mi := &file_machine_machine_proto_msgTypes[84] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5633,7 +5596,7 @@ func (x *LoadAvg) String() string { func (*LoadAvg) ProtoMessage() {} func (x *LoadAvg) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[85] + mi := &file_machine_machine_proto_msgTypes[84] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5646,7 +5609,7 @@ func (x *LoadAvg) ProtoReflect() protoreflect.Message { // Deprecated: Use LoadAvg.ProtoReflect.Descriptor instead. func (*LoadAvg) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{85} + return file_machine_machine_proto_rawDescGZIP(), []int{84} } func (x *LoadAvg) GetMetadata() *common.Metadata { @@ -5688,7 +5651,7 @@ type SystemStatResponse struct { func (x *SystemStatResponse) Reset() { *x = SystemStatResponse{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[86] + mi := &file_machine_machine_proto_msgTypes[85] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5701,7 +5664,7 @@ func (x *SystemStatResponse) String() string { func (*SystemStatResponse) ProtoMessage() {} func (x *SystemStatResponse) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[86] + mi := &file_machine_machine_proto_msgTypes[85] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5714,7 +5677,7 @@ func (x *SystemStatResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SystemStatResponse.ProtoReflect.Descriptor instead. func (*SystemStatResponse) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{86} + return file_machine_machine_proto_rawDescGZIP(), []int{85} } func (x *SystemStatResponse) GetMessages() []*SystemStat { @@ -5746,7 +5709,7 @@ type SystemStat struct { func (x *SystemStat) Reset() { *x = SystemStat{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[87] + mi := &file_machine_machine_proto_msgTypes[86] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5759,7 +5722,7 @@ func (x *SystemStat) String() string { func (*SystemStat) ProtoMessage() {} func (x *SystemStat) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[87] + mi := &file_machine_machine_proto_msgTypes[86] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5772,7 +5735,7 @@ func (x *SystemStat) ProtoReflect() protoreflect.Message { // Deprecated: Use SystemStat.ProtoReflect.Descriptor instead. func (*SystemStat) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{87} + return file_machine_machine_proto_rawDescGZIP(), []int{86} } func (x *SystemStat) GetMetadata() *common.Metadata { @@ -5879,7 +5842,7 @@ type CPUStat struct { func (x *CPUStat) Reset() { *x = CPUStat{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[88] + mi := &file_machine_machine_proto_msgTypes[87] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5892,7 +5855,7 @@ func (x *CPUStat) String() string { func (*CPUStat) ProtoMessage() {} func (x *CPUStat) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[88] + mi := &file_machine_machine_proto_msgTypes[87] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5905,7 +5868,7 @@ func (x *CPUStat) ProtoReflect() protoreflect.Message { // Deprecated: Use CPUStat.ProtoReflect.Descriptor instead. func (*CPUStat) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{88} + return file_machine_machine_proto_rawDescGZIP(), []int{87} } func (x *CPUStat) GetUser() float64 { @@ -5998,7 +5961,7 @@ type SoftIRQStat struct { func (x *SoftIRQStat) Reset() { *x = SoftIRQStat{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[89] + mi := &file_machine_machine_proto_msgTypes[88] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6011,7 +5974,7 @@ func (x *SoftIRQStat) String() string { func (*SoftIRQStat) ProtoMessage() {} func (x *SoftIRQStat) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[89] + mi := &file_machine_machine_proto_msgTypes[88] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6024,7 +5987,7 @@ func (x *SoftIRQStat) ProtoReflect() protoreflect.Message { // Deprecated: Use SoftIRQStat.ProtoReflect.Descriptor instead. func (*SoftIRQStat) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{89} + return file_machine_machine_proto_rawDescGZIP(), []int{88} } func (x *SoftIRQStat) GetHi() uint64 { @@ -6108,7 +6071,7 @@ type CPUInfoResponse struct { func (x *CPUInfoResponse) Reset() { *x = CPUInfoResponse{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[90] + mi := &file_machine_machine_proto_msgTypes[89] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6121,7 +6084,7 @@ func (x *CPUInfoResponse) String() string { func (*CPUInfoResponse) ProtoMessage() {} func (x *CPUInfoResponse) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[90] + mi := &file_machine_machine_proto_msgTypes[89] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6134,7 +6097,7 @@ func (x *CPUInfoResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CPUInfoResponse.ProtoReflect.Descriptor instead. func (*CPUInfoResponse) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{90} + return file_machine_machine_proto_rawDescGZIP(), []int{89} } func (x *CPUInfoResponse) GetMessages() []*CPUsInfo { @@ -6156,7 +6119,7 @@ type CPUsInfo struct { func (x *CPUsInfo) Reset() { *x = CPUsInfo{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[91] + mi := &file_machine_machine_proto_msgTypes[90] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6169,7 +6132,7 @@ func (x *CPUsInfo) String() string { func (*CPUsInfo) ProtoMessage() {} func (x *CPUsInfo) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[91] + mi := &file_machine_machine_proto_msgTypes[90] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6182,7 +6145,7 @@ func (x *CPUsInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use CPUsInfo.ProtoReflect.Descriptor instead. func (*CPUsInfo) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{91} + return file_machine_machine_proto_rawDescGZIP(), []int{90} } func (x *CPUsInfo) GetMetadata() *common.Metadata { @@ -6235,7 +6198,7 @@ type CPUInfo struct { func (x *CPUInfo) Reset() { *x = CPUInfo{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[92] + mi := &file_machine_machine_proto_msgTypes[91] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6248,7 +6211,7 @@ func (x *CPUInfo) String() string { func (*CPUInfo) ProtoMessage() {} func (x *CPUInfo) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[92] + mi := &file_machine_machine_proto_msgTypes[91] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6261,7 +6224,7 @@ func (x *CPUInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use CPUInfo.ProtoReflect.Descriptor instead. func (*CPUInfo) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{92} + return file_machine_machine_proto_rawDescGZIP(), []int{91} } func (x *CPUInfo) GetProcessor() uint32 { @@ -6457,7 +6420,7 @@ type NetworkDeviceStatsResponse struct { func (x *NetworkDeviceStatsResponse) Reset() { *x = NetworkDeviceStatsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[93] + mi := &file_machine_machine_proto_msgTypes[92] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6470,7 +6433,7 @@ func (x *NetworkDeviceStatsResponse) String() string { func (*NetworkDeviceStatsResponse) ProtoMessage() {} func (x *NetworkDeviceStatsResponse) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[93] + mi := &file_machine_machine_proto_msgTypes[92] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6483,7 +6446,7 @@ func (x *NetworkDeviceStatsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use NetworkDeviceStatsResponse.ProtoReflect.Descriptor instead. func (*NetworkDeviceStatsResponse) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{93} + return file_machine_machine_proto_rawDescGZIP(), []int{92} } func (x *NetworkDeviceStatsResponse) GetMessages() []*NetworkDeviceStats { @@ -6506,7 +6469,7 @@ type NetworkDeviceStats struct { func (x *NetworkDeviceStats) Reset() { *x = NetworkDeviceStats{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[94] + mi := &file_machine_machine_proto_msgTypes[93] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6519,7 +6482,7 @@ func (x *NetworkDeviceStats) String() string { func (*NetworkDeviceStats) ProtoMessage() {} func (x *NetworkDeviceStats) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[94] + mi := &file_machine_machine_proto_msgTypes[93] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6532,7 +6495,7 @@ func (x *NetworkDeviceStats) ProtoReflect() protoreflect.Message { // Deprecated: Use NetworkDeviceStats.ProtoReflect.Descriptor instead. func (*NetworkDeviceStats) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{94} + return file_machine_machine_proto_rawDescGZIP(), []int{93} } func (x *NetworkDeviceStats) GetMetadata() *common.Metadata { @@ -6583,7 +6546,7 @@ type NetDev struct { func (x *NetDev) Reset() { *x = NetDev{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[95] + mi := &file_machine_machine_proto_msgTypes[94] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6596,7 +6559,7 @@ func (x *NetDev) String() string { func (*NetDev) ProtoMessage() {} func (x *NetDev) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[95] + mi := &file_machine_machine_proto_msgTypes[94] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6609,7 +6572,7 @@ func (x *NetDev) ProtoReflect() protoreflect.Message { // Deprecated: Use NetDev.ProtoReflect.Descriptor instead. func (*NetDev) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{95} + return file_machine_machine_proto_rawDescGZIP(), []int{94} } func (x *NetDev) GetName() string { @@ -6742,7 +6705,7 @@ type DiskStatsResponse struct { func (x *DiskStatsResponse) Reset() { *x = DiskStatsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[96] + mi := &file_machine_machine_proto_msgTypes[95] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6755,7 +6718,7 @@ func (x *DiskStatsResponse) String() string { func (*DiskStatsResponse) ProtoMessage() {} func (x *DiskStatsResponse) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[96] + mi := &file_machine_machine_proto_msgTypes[95] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6768,7 +6731,7 @@ func (x *DiskStatsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DiskStatsResponse.ProtoReflect.Descriptor instead. func (*DiskStatsResponse) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{96} + return file_machine_machine_proto_rawDescGZIP(), []int{95} } func (x *DiskStatsResponse) GetMessages() []*DiskStats { @@ -6791,7 +6754,7 @@ type DiskStats struct { func (x *DiskStats) Reset() { *x = DiskStats{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[97] + mi := &file_machine_machine_proto_msgTypes[96] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6804,7 +6767,7 @@ func (x *DiskStats) String() string { func (*DiskStats) ProtoMessage() {} func (x *DiskStats) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[97] + mi := &file_machine_machine_proto_msgTypes[96] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6817,7 +6780,7 @@ func (x *DiskStats) ProtoReflect() protoreflect.Message { // Deprecated: Use DiskStats.ProtoReflect.Descriptor instead. func (*DiskStats) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{97} + return file_machine_machine_proto_rawDescGZIP(), []int{96} } func (x *DiskStats) GetMetadata() *common.Metadata { @@ -6867,7 +6830,7 @@ type DiskStat struct { func (x *DiskStat) Reset() { *x = DiskStat{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[98] + mi := &file_machine_machine_proto_msgTypes[97] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6880,7 +6843,7 @@ func (x *DiskStat) String() string { func (*DiskStat) ProtoMessage() {} func (x *DiskStat) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[98] + mi := &file_machine_machine_proto_msgTypes[97] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6893,7 +6856,7 @@ func (x *DiskStat) ProtoReflect() protoreflect.Message { // Deprecated: Use DiskStat.ProtoReflect.Descriptor instead. func (*DiskStat) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{98} + return file_machine_machine_proto_rawDescGZIP(), []int{97} } func (x *DiskStat) GetName() string { @@ -7017,7 +6980,7 @@ type EtcdLeaveClusterRequest struct { func (x *EtcdLeaveClusterRequest) Reset() { *x = EtcdLeaveClusterRequest{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[99] + mi := &file_machine_machine_proto_msgTypes[98] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7030,7 +6993,7 @@ func (x *EtcdLeaveClusterRequest) String() string { func (*EtcdLeaveClusterRequest) ProtoMessage() {} func (x *EtcdLeaveClusterRequest) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[99] + mi := &file_machine_machine_proto_msgTypes[98] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7043,7 +7006,7 @@ func (x *EtcdLeaveClusterRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use EtcdLeaveClusterRequest.ProtoReflect.Descriptor instead. func (*EtcdLeaveClusterRequest) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{99} + return file_machine_machine_proto_rawDescGZIP(), []int{98} } type EtcdLeaveCluster struct { @@ -7057,7 +7020,7 @@ type EtcdLeaveCluster struct { func (x *EtcdLeaveCluster) Reset() { *x = EtcdLeaveCluster{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[100] + mi := &file_machine_machine_proto_msgTypes[99] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7070,7 +7033,7 @@ func (x *EtcdLeaveCluster) String() string { func (*EtcdLeaveCluster) ProtoMessage() {} func (x *EtcdLeaveCluster) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[100] + mi := &file_machine_machine_proto_msgTypes[99] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7083,7 +7046,7 @@ func (x *EtcdLeaveCluster) ProtoReflect() protoreflect.Message { // Deprecated: Use EtcdLeaveCluster.ProtoReflect.Descriptor instead. func (*EtcdLeaveCluster) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{100} + return file_machine_machine_proto_rawDescGZIP(), []int{99} } func (x *EtcdLeaveCluster) GetMetadata() *common.Metadata { @@ -7104,7 +7067,7 @@ type EtcdLeaveClusterResponse struct { func (x *EtcdLeaveClusterResponse) Reset() { *x = EtcdLeaveClusterResponse{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[101] + mi := &file_machine_machine_proto_msgTypes[100] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7117,7 +7080,7 @@ func (x *EtcdLeaveClusterResponse) String() string { func (*EtcdLeaveClusterResponse) ProtoMessage() {} func (x *EtcdLeaveClusterResponse) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[101] + mi := &file_machine_machine_proto_msgTypes[100] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7130,7 +7093,7 @@ func (x *EtcdLeaveClusterResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use EtcdLeaveClusterResponse.ProtoReflect.Descriptor instead. func (*EtcdLeaveClusterResponse) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{101} + return file_machine_machine_proto_rawDescGZIP(), []int{100} } func (x *EtcdLeaveClusterResponse) GetMessages() []*EtcdLeaveCluster { @@ -7151,7 +7114,7 @@ type EtcdRemoveMemberRequest struct { func (x *EtcdRemoveMemberRequest) Reset() { *x = EtcdRemoveMemberRequest{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[102] + mi := &file_machine_machine_proto_msgTypes[101] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7164,7 +7127,7 @@ func (x *EtcdRemoveMemberRequest) String() string { func (*EtcdRemoveMemberRequest) ProtoMessage() {} func (x *EtcdRemoveMemberRequest) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[102] + mi := &file_machine_machine_proto_msgTypes[101] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7177,7 +7140,7 @@ func (x *EtcdRemoveMemberRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use EtcdRemoveMemberRequest.ProtoReflect.Descriptor instead. func (*EtcdRemoveMemberRequest) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{102} + return file_machine_machine_proto_rawDescGZIP(), []int{101} } func (x *EtcdRemoveMemberRequest) GetMember() string { @@ -7198,7 +7161,7 @@ type EtcdRemoveMember struct { func (x *EtcdRemoveMember) Reset() { *x = EtcdRemoveMember{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[103] + mi := &file_machine_machine_proto_msgTypes[102] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7211,7 +7174,7 @@ func (x *EtcdRemoveMember) String() string { func (*EtcdRemoveMember) ProtoMessage() {} func (x *EtcdRemoveMember) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[103] + mi := &file_machine_machine_proto_msgTypes[102] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7224,7 +7187,7 @@ func (x *EtcdRemoveMember) ProtoReflect() protoreflect.Message { // Deprecated: Use EtcdRemoveMember.ProtoReflect.Descriptor instead. func (*EtcdRemoveMember) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{103} + return file_machine_machine_proto_rawDescGZIP(), []int{102} } func (x *EtcdRemoveMember) GetMetadata() *common.Metadata { @@ -7245,7 +7208,7 @@ type EtcdRemoveMemberResponse struct { func (x *EtcdRemoveMemberResponse) Reset() { *x = EtcdRemoveMemberResponse{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[104] + mi := &file_machine_machine_proto_msgTypes[103] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7258,7 +7221,7 @@ func (x *EtcdRemoveMemberResponse) String() string { func (*EtcdRemoveMemberResponse) ProtoMessage() {} func (x *EtcdRemoveMemberResponse) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[104] + mi := &file_machine_machine_proto_msgTypes[103] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7271,7 +7234,7 @@ func (x *EtcdRemoveMemberResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use EtcdRemoveMemberResponse.ProtoReflect.Descriptor instead. func (*EtcdRemoveMemberResponse) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{104} + return file_machine_machine_proto_rawDescGZIP(), []int{103} } func (x *EtcdRemoveMemberResponse) GetMessages() []*EtcdRemoveMember { @@ -7290,7 +7253,7 @@ type EtcdForfeitLeadershipRequest struct { func (x *EtcdForfeitLeadershipRequest) Reset() { *x = EtcdForfeitLeadershipRequest{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[105] + mi := &file_machine_machine_proto_msgTypes[104] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7303,7 +7266,7 @@ func (x *EtcdForfeitLeadershipRequest) String() string { func (*EtcdForfeitLeadershipRequest) ProtoMessage() {} func (x *EtcdForfeitLeadershipRequest) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[105] + mi := &file_machine_machine_proto_msgTypes[104] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7316,7 +7279,7 @@ func (x *EtcdForfeitLeadershipRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use EtcdForfeitLeadershipRequest.ProtoReflect.Descriptor instead. func (*EtcdForfeitLeadershipRequest) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{105} + return file_machine_machine_proto_rawDescGZIP(), []int{104} } type EtcdForfeitLeadership struct { @@ -7331,7 +7294,7 @@ type EtcdForfeitLeadership struct { func (x *EtcdForfeitLeadership) Reset() { *x = EtcdForfeitLeadership{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[106] + mi := &file_machine_machine_proto_msgTypes[105] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7344,7 +7307,7 @@ func (x *EtcdForfeitLeadership) String() string { func (*EtcdForfeitLeadership) ProtoMessage() {} func (x *EtcdForfeitLeadership) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[106] + mi := &file_machine_machine_proto_msgTypes[105] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7357,7 +7320,7 @@ func (x *EtcdForfeitLeadership) ProtoReflect() protoreflect.Message { // Deprecated: Use EtcdForfeitLeadership.ProtoReflect.Descriptor instead. func (*EtcdForfeitLeadership) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{106} + return file_machine_machine_proto_rawDescGZIP(), []int{105} } func (x *EtcdForfeitLeadership) GetMetadata() *common.Metadata { @@ -7385,7 +7348,7 @@ type EtcdForfeitLeadershipResponse struct { func (x *EtcdForfeitLeadershipResponse) Reset() { *x = EtcdForfeitLeadershipResponse{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[107] + mi := &file_machine_machine_proto_msgTypes[106] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7398,7 +7361,7 @@ func (x *EtcdForfeitLeadershipResponse) String() string { func (*EtcdForfeitLeadershipResponse) ProtoMessage() {} func (x *EtcdForfeitLeadershipResponse) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[107] + mi := &file_machine_machine_proto_msgTypes[106] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7411,7 +7374,7 @@ func (x *EtcdForfeitLeadershipResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use EtcdForfeitLeadershipResponse.ProtoReflect.Descriptor instead. func (*EtcdForfeitLeadershipResponse) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{107} + return file_machine_machine_proto_rawDescGZIP(), []int{106} } func (x *EtcdForfeitLeadershipResponse) GetMessages() []*EtcdForfeitLeadership { @@ -7432,7 +7395,7 @@ type EtcdMemberListRequest struct { func (x *EtcdMemberListRequest) Reset() { *x = EtcdMemberListRequest{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[108] + mi := &file_machine_machine_proto_msgTypes[107] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7445,7 +7408,7 @@ func (x *EtcdMemberListRequest) String() string { func (*EtcdMemberListRequest) ProtoMessage() {} func (x *EtcdMemberListRequest) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[108] + mi := &file_machine_machine_proto_msgTypes[107] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7458,7 +7421,7 @@ func (x *EtcdMemberListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use EtcdMemberListRequest.ProtoReflect.Descriptor instead. func (*EtcdMemberListRequest) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{108} + return file_machine_machine_proto_rawDescGZIP(), []int{107} } func (x *EtcdMemberListRequest) GetQueryLocal() bool { @@ -7487,7 +7450,7 @@ type EtcdMember struct { func (x *EtcdMember) Reset() { *x = EtcdMember{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[109] + mi := &file_machine_machine_proto_msgTypes[108] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7500,7 +7463,7 @@ func (x *EtcdMember) String() string { func (*EtcdMember) ProtoMessage() {} func (x *EtcdMember) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[109] + mi := &file_machine_machine_proto_msgTypes[108] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7513,7 +7476,7 @@ func (x *EtcdMember) ProtoReflect() protoreflect.Message { // Deprecated: Use EtcdMember.ProtoReflect.Descriptor instead. func (*EtcdMember) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{109} + return file_machine_machine_proto_rawDescGZIP(), []int{108} } func (x *EtcdMember) GetId() uint64 { @@ -7560,7 +7523,7 @@ type EtcdMembers struct { func (x *EtcdMembers) Reset() { *x = EtcdMembers{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[110] + mi := &file_machine_machine_proto_msgTypes[109] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7573,7 +7536,7 @@ func (x *EtcdMembers) String() string { func (*EtcdMembers) ProtoMessage() {} func (x *EtcdMembers) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[110] + mi := &file_machine_machine_proto_msgTypes[109] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7586,7 +7549,7 @@ func (x *EtcdMembers) ProtoReflect() protoreflect.Message { // Deprecated: Use EtcdMembers.ProtoReflect.Descriptor instead. func (*EtcdMembers) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{110} + return file_machine_machine_proto_rawDescGZIP(), []int{109} } func (x *EtcdMembers) GetMetadata() *common.Metadata { @@ -7621,7 +7584,7 @@ type EtcdMemberListResponse struct { func (x *EtcdMemberListResponse) Reset() { *x = EtcdMemberListResponse{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[111] + mi := &file_machine_machine_proto_msgTypes[110] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7634,7 +7597,7 @@ func (x *EtcdMemberListResponse) String() string { func (*EtcdMemberListResponse) ProtoMessage() {} func (x *EtcdMemberListResponse) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[111] + mi := &file_machine_machine_proto_msgTypes[110] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7647,7 +7610,7 @@ func (x *EtcdMemberListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use EtcdMemberListResponse.ProtoReflect.Descriptor instead. func (*EtcdMemberListResponse) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{111} + return file_machine_machine_proto_rawDescGZIP(), []int{110} } func (x *EtcdMemberListResponse) GetMessages() []*EtcdMembers { @@ -7666,7 +7629,7 @@ type EtcdSnapshotRequest struct { func (x *EtcdSnapshotRequest) Reset() { *x = EtcdSnapshotRequest{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[112] + mi := &file_machine_machine_proto_msgTypes[111] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7679,7 +7642,7 @@ func (x *EtcdSnapshotRequest) String() string { func (*EtcdSnapshotRequest) ProtoMessage() {} func (x *EtcdSnapshotRequest) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[112] + mi := &file_machine_machine_proto_msgTypes[111] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7692,7 +7655,7 @@ func (x *EtcdSnapshotRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use EtcdSnapshotRequest.ProtoReflect.Descriptor instead. func (*EtcdSnapshotRequest) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{112} + return file_machine_machine_proto_rawDescGZIP(), []int{111} } type EtcdRecover struct { @@ -7706,7 +7669,7 @@ type EtcdRecover struct { func (x *EtcdRecover) Reset() { *x = EtcdRecover{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[113] + mi := &file_machine_machine_proto_msgTypes[112] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7719,7 +7682,7 @@ func (x *EtcdRecover) String() string { func (*EtcdRecover) ProtoMessage() {} func (x *EtcdRecover) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[113] + mi := &file_machine_machine_proto_msgTypes[112] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7732,7 +7695,7 @@ func (x *EtcdRecover) ProtoReflect() protoreflect.Message { // Deprecated: Use EtcdRecover.ProtoReflect.Descriptor instead. func (*EtcdRecover) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{113} + return file_machine_machine_proto_rawDescGZIP(), []int{112} } func (x *EtcdRecover) GetMetadata() *common.Metadata { @@ -7753,7 +7716,7 @@ type EtcdRecoverResponse struct { func (x *EtcdRecoverResponse) Reset() { *x = EtcdRecoverResponse{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[114] + mi := &file_machine_machine_proto_msgTypes[113] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7766,7 +7729,7 @@ func (x *EtcdRecoverResponse) String() string { func (*EtcdRecoverResponse) ProtoMessage() {} func (x *EtcdRecoverResponse) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[114] + mi := &file_machine_machine_proto_msgTypes[113] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7779,7 +7742,7 @@ func (x *EtcdRecoverResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use EtcdRecoverResponse.ProtoReflect.Descriptor instead. func (*EtcdRecoverResponse) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{114} + return file_machine_machine_proto_rawDescGZIP(), []int{113} } func (x *EtcdRecoverResponse) GetMessages() []*EtcdRecover { @@ -7802,7 +7765,7 @@ type RouteConfig struct { func (x *RouteConfig) Reset() { *x = RouteConfig{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[115] + mi := &file_machine_machine_proto_msgTypes[114] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7815,7 +7778,7 @@ func (x *RouteConfig) String() string { func (*RouteConfig) ProtoMessage() {} func (x *RouteConfig) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[115] + mi := &file_machine_machine_proto_msgTypes[114] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7828,7 +7791,7 @@ func (x *RouteConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use RouteConfig.ProtoReflect.Descriptor instead. func (*RouteConfig) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{115} + return file_machine_machine_proto_rawDescGZIP(), []int{114} } func (x *RouteConfig) GetNetwork() string { @@ -7863,7 +7826,7 @@ type DHCPOptionsConfig struct { func (x *DHCPOptionsConfig) Reset() { *x = DHCPOptionsConfig{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[116] + mi := &file_machine_machine_proto_msgTypes[115] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7876,7 +7839,7 @@ func (x *DHCPOptionsConfig) String() string { func (*DHCPOptionsConfig) ProtoMessage() {} func (x *DHCPOptionsConfig) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[116] + mi := &file_machine_machine_proto_msgTypes[115] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7889,7 +7852,7 @@ func (x *DHCPOptionsConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use DHCPOptionsConfig.ProtoReflect.Descriptor instead. func (*DHCPOptionsConfig) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{116} + return file_machine_machine_proto_rawDescGZIP(), []int{115} } func (x *DHCPOptionsConfig) GetRouteMetric() uint32 { @@ -7916,7 +7879,7 @@ type NetworkDeviceConfig struct { func (x *NetworkDeviceConfig) Reset() { *x = NetworkDeviceConfig{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[117] + mi := &file_machine_machine_proto_msgTypes[116] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -7929,7 +7892,7 @@ func (x *NetworkDeviceConfig) String() string { func (*NetworkDeviceConfig) ProtoMessage() {} func (x *NetworkDeviceConfig) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[117] + mi := &file_machine_machine_proto_msgTypes[116] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -7942,7 +7905,7 @@ func (x *NetworkDeviceConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use NetworkDeviceConfig.ProtoReflect.Descriptor instead. func (*NetworkDeviceConfig) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{117} + return file_machine_machine_proto_rawDescGZIP(), []int{116} } func (x *NetworkDeviceConfig) GetInterface() string { @@ -8006,7 +7969,7 @@ type NetworkConfig struct { func (x *NetworkConfig) Reset() { *x = NetworkConfig{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[118] + mi := &file_machine_machine_proto_msgTypes[117] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8019,7 +7982,7 @@ func (x *NetworkConfig) String() string { func (*NetworkConfig) ProtoMessage() {} func (x *NetworkConfig) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[118] + mi := &file_machine_machine_proto_msgTypes[117] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8032,7 +7995,7 @@ func (x *NetworkConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use NetworkConfig.ProtoReflect.Descriptor instead. func (*NetworkConfig) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{118} + return file_machine_machine_proto_rawDescGZIP(), []int{117} } func (x *NetworkConfig) GetHostname() string { @@ -8061,7 +8024,7 @@ type InstallConfig struct { func (x *InstallConfig) Reset() { *x = InstallConfig{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[119] + mi := &file_machine_machine_proto_msgTypes[118] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8074,7 +8037,7 @@ func (x *InstallConfig) String() string { func (*InstallConfig) ProtoMessage() {} func (x *InstallConfig) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[119] + mi := &file_machine_machine_proto_msgTypes[118] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8087,7 +8050,7 @@ func (x *InstallConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use InstallConfig.ProtoReflect.Descriptor instead. func (*InstallConfig) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{119} + return file_machine_machine_proto_rawDescGZIP(), []int{118} } func (x *InstallConfig) GetInstallDisk() string { @@ -8118,7 +8081,7 @@ type MachineConfig struct { func (x *MachineConfig) Reset() { *x = MachineConfig{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[120] + mi := &file_machine_machine_proto_msgTypes[119] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8131,7 +8094,7 @@ func (x *MachineConfig) String() string { func (*MachineConfig) ProtoMessage() {} func (x *MachineConfig) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[120] + mi := &file_machine_machine_proto_msgTypes[119] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8144,7 +8107,7 @@ func (x *MachineConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use MachineConfig.ProtoReflect.Descriptor instead. func (*MachineConfig) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{120} + return file_machine_machine_proto_rawDescGZIP(), []int{119} } func (x *MachineConfig) GetType() MachineConfig_MachineType { @@ -8186,7 +8149,7 @@ type ControlPlaneConfig struct { func (x *ControlPlaneConfig) Reset() { *x = ControlPlaneConfig{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[121] + mi := &file_machine_machine_proto_msgTypes[120] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8199,7 +8162,7 @@ func (x *ControlPlaneConfig) String() string { func (*ControlPlaneConfig) ProtoMessage() {} func (x *ControlPlaneConfig) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[121] + mi := &file_machine_machine_proto_msgTypes[120] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8212,7 +8175,7 @@ func (x *ControlPlaneConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use ControlPlaneConfig.ProtoReflect.Descriptor instead. func (*ControlPlaneConfig) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{121} + return file_machine_machine_proto_rawDescGZIP(), []int{120} } func (x *ControlPlaneConfig) GetEndpoint() string { @@ -8234,7 +8197,7 @@ type CNIConfig struct { func (x *CNIConfig) Reset() { *x = CNIConfig{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[122] + mi := &file_machine_machine_proto_msgTypes[121] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8247,7 +8210,7 @@ func (x *CNIConfig) String() string { func (*CNIConfig) ProtoMessage() {} func (x *CNIConfig) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[122] + mi := &file_machine_machine_proto_msgTypes[121] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8260,7 +8223,7 @@ func (x *CNIConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use CNIConfig.ProtoReflect.Descriptor instead. func (*CNIConfig) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{122} + return file_machine_machine_proto_rawDescGZIP(), []int{121} } func (x *CNIConfig) GetName() string { @@ -8289,7 +8252,7 @@ type ClusterNetworkConfig struct { func (x *ClusterNetworkConfig) Reset() { *x = ClusterNetworkConfig{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[123] + mi := &file_machine_machine_proto_msgTypes[122] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8302,7 +8265,7 @@ func (x *ClusterNetworkConfig) String() string { func (*ClusterNetworkConfig) ProtoMessage() {} func (x *ClusterNetworkConfig) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[123] + mi := &file_machine_machine_proto_msgTypes[122] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8315,7 +8278,7 @@ func (x *ClusterNetworkConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use ClusterNetworkConfig.ProtoReflect.Descriptor instead. func (*ClusterNetworkConfig) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{123} + return file_machine_machine_proto_rawDescGZIP(), []int{122} } func (x *ClusterNetworkConfig) GetDnsDomain() string { @@ -8346,7 +8309,7 @@ type ClusterConfig struct { func (x *ClusterConfig) Reset() { *x = ClusterConfig{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[124] + mi := &file_machine_machine_proto_msgTypes[123] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8359,7 +8322,7 @@ func (x *ClusterConfig) String() string { func (*ClusterConfig) ProtoMessage() {} func (x *ClusterConfig) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[124] + mi := &file_machine_machine_proto_msgTypes[123] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8372,7 +8335,7 @@ func (x *ClusterConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use ClusterConfig.ProtoReflect.Descriptor instead. func (*ClusterConfig) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{124} + return file_machine_machine_proto_rawDescGZIP(), []int{123} } func (x *ClusterConfig) GetName() string { @@ -8419,7 +8382,7 @@ type GenerateConfigurationRequest struct { func (x *GenerateConfigurationRequest) Reset() { *x = GenerateConfigurationRequest{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[125] + mi := &file_machine_machine_proto_msgTypes[124] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8432,7 +8395,7 @@ func (x *GenerateConfigurationRequest) String() string { func (*GenerateConfigurationRequest) ProtoMessage() {} func (x *GenerateConfigurationRequest) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[125] + mi := &file_machine_machine_proto_msgTypes[124] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8445,7 +8408,7 @@ func (x *GenerateConfigurationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GenerateConfigurationRequest.ProtoReflect.Descriptor instead. func (*GenerateConfigurationRequest) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{125} + return file_machine_machine_proto_rawDescGZIP(), []int{124} } func (x *GenerateConfigurationRequest) GetConfigVersion() string { @@ -8490,7 +8453,7 @@ type GenerateConfiguration struct { func (x *GenerateConfiguration) Reset() { *x = GenerateConfiguration{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[126] + mi := &file_machine_machine_proto_msgTypes[125] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8503,7 +8466,7 @@ func (x *GenerateConfiguration) String() string { func (*GenerateConfiguration) ProtoMessage() {} func (x *GenerateConfiguration) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[126] + mi := &file_machine_machine_proto_msgTypes[125] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8516,7 +8479,7 @@ func (x *GenerateConfiguration) ProtoReflect() protoreflect.Message { // Deprecated: Use GenerateConfiguration.ProtoReflect.Descriptor instead. func (*GenerateConfiguration) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{126} + return file_machine_machine_proto_rawDescGZIP(), []int{125} } func (x *GenerateConfiguration) GetMetadata() *common.Metadata { @@ -8551,7 +8514,7 @@ type GenerateConfigurationResponse struct { func (x *GenerateConfigurationResponse) Reset() { *x = GenerateConfigurationResponse{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[127] + mi := &file_machine_machine_proto_msgTypes[126] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8564,7 +8527,7 @@ func (x *GenerateConfigurationResponse) String() string { func (*GenerateConfigurationResponse) ProtoMessage() {} func (x *GenerateConfigurationResponse) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[127] + mi := &file_machine_machine_proto_msgTypes[126] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8577,7 +8540,7 @@ func (x *GenerateConfigurationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GenerateConfigurationResponse.ProtoReflect.Descriptor instead. func (*GenerateConfigurationResponse) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{127} + return file_machine_machine_proto_rawDescGZIP(), []int{126} } func (x *GenerateConfigurationResponse) GetMessages() []*GenerateConfiguration { @@ -8599,7 +8562,7 @@ type RemoveBootkubeInitializedKey struct { func (x *RemoveBootkubeInitializedKey) Reset() { *x = RemoveBootkubeInitializedKey{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[128] + mi := &file_machine_machine_proto_msgTypes[127] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8612,7 +8575,7 @@ func (x *RemoveBootkubeInitializedKey) String() string { func (*RemoveBootkubeInitializedKey) ProtoMessage() {} func (x *RemoveBootkubeInitializedKey) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[128] + mi := &file_machine_machine_proto_msgTypes[127] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8625,7 +8588,7 @@ func (x *RemoveBootkubeInitializedKey) ProtoReflect() protoreflect.Message { // Deprecated: Use RemoveBootkubeInitializedKey.ProtoReflect.Descriptor instead. func (*RemoveBootkubeInitializedKey) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{128} + return file_machine_machine_proto_rawDescGZIP(), []int{127} } func (x *RemoveBootkubeInitializedKey) GetMetadata() *common.Metadata { @@ -8646,7 +8609,7 @@ type RemoveBootkubeInitializedKeyResponse struct { func (x *RemoveBootkubeInitializedKeyResponse) Reset() { *x = RemoveBootkubeInitializedKeyResponse{} if protoimpl.UnsafeEnabled { - mi := &file_machine_machine_proto_msgTypes[129] + mi := &file_machine_machine_proto_msgTypes[128] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -8659,7 +8622,7 @@ func (x *RemoveBootkubeInitializedKeyResponse) String() string { func (*RemoveBootkubeInitializedKeyResponse) ProtoMessage() {} func (x *RemoveBootkubeInitializedKeyResponse) ProtoReflect() protoreflect.Message { - mi := &file_machine_machine_proto_msgTypes[129] + mi := &file_machine_machine_proto_msgTypes[128] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -8672,7 +8635,7 @@ func (x *RemoveBootkubeInitializedKeyResponse) ProtoReflect() protoreflect.Messa // Deprecated: Use RemoveBootkubeInitializedKeyResponse.ProtoReflect.Descriptor instead. func (*RemoveBootkubeInitializedKeyResponse) Descriptor() ([]byte, []int) { - return file_machine_machine_proto_rawDescGZIP(), []int{129} + return file_machine_machine_proto_rawDescGZIP(), []int{128} } func (x *RemoveBootkubeInitializedKeyResponse) GetMessages() []*RemoveBootkubeInitializedKey { @@ -8682,6 +8645,193 @@ func (x *RemoveBootkubeInitializedKeyResponse) GetMessages() []*RemoveBootkubeIn return nil } +type GenerateClientConfigurationRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Roles in the generated client certificate. + Roles []string `protobuf:"bytes,1,rep,name=roles,proto3" json:"roles,omitempty"` + // Client certificate TTL. + CrtTtl *durationpb.Duration `protobuf:"bytes,2,opt,name=crt_ttl,json=crtTtl,proto3" json:"crt_ttl,omitempty"` +} + +func (x *GenerateClientConfigurationRequest) Reset() { + *x = GenerateClientConfigurationRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_machine_machine_proto_msgTypes[129] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenerateClientConfigurationRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenerateClientConfigurationRequest) ProtoMessage() {} + +func (x *GenerateClientConfigurationRequest) ProtoReflect() protoreflect.Message { + mi := &file_machine_machine_proto_msgTypes[129] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenerateClientConfigurationRequest.ProtoReflect.Descriptor instead. +func (*GenerateClientConfigurationRequest) Descriptor() ([]byte, []int) { + return file_machine_machine_proto_rawDescGZIP(), []int{129} +} + +func (x *GenerateClientConfigurationRequest) GetRoles() []string { + if x != nil { + return x.Roles + } + return nil +} + +func (x *GenerateClientConfigurationRequest) GetCrtTtl() *durationpb.Duration { + if x != nil { + return x.CrtTtl + } + return nil +} + +type GenerateClientConfiguration struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Metadata *common.Metadata `protobuf:"bytes,1,opt,name=metadata,proto3" json:"metadata,omitempty"` + // PEM-encoded CA certificate. + Ca []byte `protobuf:"bytes,2,opt,name=ca,proto3" json:"ca,omitempty"` + // PEM-encoded generated client certificate. + Crt []byte `protobuf:"bytes,3,opt,name=crt,proto3" json:"crt,omitempty"` + // PEM-encoded generated client key. + Key []byte `protobuf:"bytes,4,opt,name=key,proto3" json:"key,omitempty"` + // Client configuration (talosconfig) file content. + Talosconfig []byte `protobuf:"bytes,5,opt,name=talosconfig,proto3" json:"talosconfig,omitempty"` +} + +func (x *GenerateClientConfiguration) Reset() { + *x = GenerateClientConfiguration{} + if protoimpl.UnsafeEnabled { + mi := &file_machine_machine_proto_msgTypes[130] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenerateClientConfiguration) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenerateClientConfiguration) ProtoMessage() {} + +func (x *GenerateClientConfiguration) ProtoReflect() protoreflect.Message { + mi := &file_machine_machine_proto_msgTypes[130] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenerateClientConfiguration.ProtoReflect.Descriptor instead. +func (*GenerateClientConfiguration) Descriptor() ([]byte, []int) { + return file_machine_machine_proto_rawDescGZIP(), []int{130} +} + +func (x *GenerateClientConfiguration) GetMetadata() *common.Metadata { + if x != nil { + return x.Metadata + } + return nil +} + +func (x *GenerateClientConfiguration) GetCa() []byte { + if x != nil { + return x.Ca + } + return nil +} + +func (x *GenerateClientConfiguration) GetCrt() []byte { + if x != nil { + return x.Crt + } + return nil +} + +func (x *GenerateClientConfiguration) GetKey() []byte { + if x != nil { + return x.Key + } + return nil +} + +func (x *GenerateClientConfiguration) GetTalosconfig() []byte { + if x != nil { + return x.Talosconfig + } + return nil +} + +type GenerateClientConfigurationResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Messages []*GenerateClientConfiguration `protobuf:"bytes,1,rep,name=messages,proto3" json:"messages,omitempty"` +} + +func (x *GenerateClientConfigurationResponse) Reset() { + *x = GenerateClientConfigurationResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_machine_machine_proto_msgTypes[131] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GenerateClientConfigurationResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GenerateClientConfigurationResponse) ProtoMessage() {} + +func (x *GenerateClientConfigurationResponse) ProtoReflect() protoreflect.Message { + mi := &file_machine_machine_proto_msgTypes[131] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GenerateClientConfigurationResponse.ProtoReflect.Descriptor instead. +func (*GenerateClientConfigurationResponse) Descriptor() ([]byte, []int) { + return file_machine_machine_proto_rawDescGZIP(), []int{131} +} + +func (x *GenerateClientConfigurationResponse) GetMessages() []*GenerateClientConfiguration { + if x != nil { + return x.Messages + } + return nil +} + var File_machine_machine_proto protoreflect.FileDescriptor var file_machine_machine_proto_rawDesc = []byte{ @@ -8692,7 +8842,9 @@ var file_machine_machine_proto_rawDesc = []byte{ 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x13, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x6a, 0x0a, 0x19, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x64, @@ -9089,808 +9241,837 @@ var file_machine_machine_proto_rawDesc = []byte{ 0x6d, 0x65, 0x73, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x69, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x04, 0x74, 0x61, 0x69, 0x6c, 0x22, 0x12, 0x0a, 0x10, 0x50, 0x72, 0x6f, 0x63, 0x65, - 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x41, 0x0a, 0x11, 0x50, - 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x50, 0x72, 0x6f, - 0x63, 0x65, 0x73, 0x73, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x6b, - 0x0a, 0x07, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x32, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, - 0x73, 0x73, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x61, 0x63, - 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x22, 0x9c, 0x02, 0x0a, 0x0b, - 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x70, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x12, 0x0a, - 0x04, 0x70, 0x70, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x70, 0x69, - 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x68, 0x72, 0x65, 0x61, - 0x64, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, - 0x73, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x70, 0x75, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x01, 0x52, 0x07, 0x63, 0x70, 0x75, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, - 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x4d, 0x65, 0x6d, - 0x6f, 0x72, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x5f, - 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x72, 0x65, - 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x18, 0x0a, 0x07, - 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, - 0x61, 0x62, 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x78, 0x65, 0x63, - 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x67, 0x73, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x67, 0x73, 0x22, 0x6f, 0x0a, 0x0e, 0x52, 0x65, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, - 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2f, 0x0a, 0x06, 0x64, 0x72, - 0x69, 0x76, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x44, 0x72, 0x69, - 0x76, 0x65, 0x72, 0x52, 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x22, 0x37, 0x0a, 0x07, 0x52, - 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x22, 0x3f, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x08, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x5d, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x12, 0x2f, 0x0a, 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, - 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x52, 0x06, 0x64, 0x72, - 0x69, 0x76, 0x65, 0x72, 0x22, 0x5a, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x2c, 0x0a, - 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x73, - 0x74, 0x61, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x6d, 0x61, 0x63, - 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, - 0x22, 0x3b, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x2a, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x74, - 0x61, 0x74, 0x73, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x9f, 0x01, - 0x0a, 0x04, 0x53, 0x74, 0x61, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x75, - 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x6f, - 0x72, 0x79, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x70, 0x75, 0x5f, 0x75, - 0x73, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x63, 0x70, 0x75, 0x55, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x15, 0x0a, 0x06, 0x70, 0x6f, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x70, 0x6f, 0x64, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, - 0x62, 0x0a, 0x06, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2a, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x69, 0x6e, - 0x66, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x2e, 0x4d, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x69, - 0x6e, 0x66, 0x6f, 0x22, 0x3d, 0x0a, 0x0e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, - 0x65, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x73, 0x22, 0x8b, 0x0c, 0x0a, 0x07, 0x4d, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, - 0x0a, 0x08, 0x6d, 0x65, 0x6d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, - 0x6d, 0x66, 0x72, 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x6d, 0x65, 0x6d, - 0x66, 0x72, 0x65, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x65, 0x6d, 0x61, 0x76, 0x61, 0x69, 0x6c, - 0x61, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x6d, 0x65, 0x6d, 0x61, - 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x75, 0x66, 0x66, - 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x62, 0x75, 0x66, 0x66, 0x65, - 0x72, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x06, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x77, - 0x61, 0x70, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, - 0x73, 0x77, 0x61, 0x70, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, - 0x74, 0x69, 0x76, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x1e, - 0x0a, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x61, 0x6e, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x61, 0x6e, 0x6f, 0x6e, 0x12, 0x22, - 0x0a, 0x0c, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x61, 0x6e, 0x6f, 0x6e, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x61, 0x6e, - 0x6f, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x66, 0x69, 0x6c, 0x65, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x66, 0x69, - 0x6c, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x66, 0x69, - 0x6c, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x75, 0x6e, 0x65, 0x76, 0x69, 0x63, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x75, 0x6e, 0x65, - 0x76, 0x69, 0x63, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x6c, 0x6f, 0x63, - 0x6b, 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x6d, 0x6c, 0x6f, 0x63, 0x6b, - 0x65, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x77, 0x61, 0x70, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, - 0x0f, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x73, 0x77, 0x61, 0x70, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x77, 0x61, 0x70, 0x66, 0x72, 0x65, 0x65, 0x18, 0x10, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x08, 0x73, 0x77, 0x61, 0x70, 0x66, 0x72, 0x65, 0x65, 0x12, 0x14, 0x0a, 0x05, - 0x64, 0x69, 0x72, 0x74, 0x79, 0x18, 0x11, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x64, 0x69, 0x72, - 0x74, 0x79, 0x12, 0x1c, 0x0a, 0x09, 0x77, 0x72, 0x69, 0x74, 0x65, 0x62, 0x61, 0x63, 0x6b, 0x18, - 0x12, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x77, 0x72, 0x69, 0x74, 0x65, 0x62, 0x61, 0x63, 0x6b, - 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x6e, 0x6f, 0x6e, 0x70, 0x61, 0x67, 0x65, 0x73, 0x18, 0x13, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x09, 0x61, 0x6e, 0x6f, 0x6e, 0x70, 0x61, 0x67, 0x65, 0x73, 0x12, 0x16, - 0x0a, 0x06, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, - 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x6d, 0x65, 0x6d, 0x18, - 0x15, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x73, 0x68, 0x6d, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, - 0x73, 0x6c, 0x61, 0x62, 0x18, 0x16, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x6c, 0x61, 0x62, - 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x72, 0x65, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x61, 0x62, 0x6c, 0x65, - 0x18, 0x17, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x73, 0x72, 0x65, 0x63, 0x6c, 0x61, 0x69, 0x6d, - 0x61, 0x62, 0x6c, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x75, 0x6e, 0x72, 0x65, 0x63, 0x6c, 0x61, - 0x69, 0x6d, 0x18, 0x18, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x73, 0x75, 0x6e, 0x72, 0x65, 0x63, - 0x6c, 0x61, 0x69, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x73, 0x74, - 0x61, 0x63, 0x6b, 0x18, 0x19, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6b, 0x65, 0x72, 0x6e, 0x65, - 0x6c, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x73, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x65, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x66, 0x73, 0x75, 0x6e, 0x73, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6e, 0x66, 0x73, - 0x75, 0x6e, 0x73, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x6f, 0x75, 0x6e, - 0x63, 0x65, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x62, 0x6f, 0x75, 0x6e, 0x63, 0x65, - 0x12, 0x22, 0x0a, 0x0c, 0x77, 0x72, 0x69, 0x74, 0x65, 0x62, 0x61, 0x63, 0x6b, 0x74, 0x6d, 0x70, - 0x18, 0x1d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x77, 0x72, 0x69, 0x74, 0x65, 0x62, 0x61, 0x63, - 0x6b, 0x74, 0x6d, 0x70, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6c, 0x69, - 0x6d, 0x69, 0x74, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x74, 0x65, 0x64, 0x61, 0x73, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x63, 0x6f, 0x6d, - 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x61, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x76, 0x6d, 0x61, 0x6c, - 0x6c, 0x6f, 0x63, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x20, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, - 0x76, 0x6d, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x20, 0x0a, 0x0b, - 0x76, 0x6d, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x75, 0x73, 0x65, 0x64, 0x18, 0x21, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0b, 0x76, 0x6d, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x75, 0x73, 0x65, 0x64, 0x12, 0x22, - 0x0a, 0x0c, 0x76, 0x6d, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x18, 0x22, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x76, 0x6d, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x63, 0x68, 0x75, - 0x6e, 0x6b, 0x12, 0x2c, 0x0a, 0x11, 0x68, 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x63, 0x6f, - 0x72, 0x72, 0x75, 0x70, 0x74, 0x65, 0x64, 0x18, 0x23, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x68, - 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x72, 0x75, 0x70, 0x74, 0x65, 0x64, - 0x12, 0x24, 0x0a, 0x0d, 0x61, 0x6e, 0x6f, 0x6e, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, - 0x73, 0x18, 0x24, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x61, 0x6e, 0x6f, 0x6e, 0x68, 0x75, 0x67, - 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x73, 0x68, 0x6d, 0x65, 0x6d, 0x68, - 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x18, 0x25, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, - 0x73, 0x68, 0x6d, 0x65, 0x6d, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x12, 0x26, - 0x0a, 0x0e, 0x73, 0x68, 0x6d, 0x65, 0x6d, 0x70, 0x6d, 0x64, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, - 0x18, 0x26, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x73, 0x68, 0x6d, 0x65, 0x6d, 0x70, 0x6d, 0x64, - 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6d, 0x61, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x18, 0x27, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x63, 0x6d, 0x61, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6d, 0x61, 0x66, 0x72, 0x65, 0x65, 0x18, 0x28, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x07, 0x63, 0x6d, 0x61, 0x66, 0x72, 0x65, 0x65, 0x12, 0x26, 0x0a, 0x0e, - 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x29, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x24, 0x0a, 0x0d, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, - 0x73, 0x66, 0x72, 0x65, 0x65, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x68, 0x75, 0x67, - 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x66, 0x72, 0x65, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x68, 0x75, - 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x72, 0x73, 0x76, 0x64, 0x18, 0x2b, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0d, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x72, 0x73, 0x76, 0x64, - 0x12, 0x24, 0x0a, 0x0d, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x73, 0x75, 0x72, - 0x70, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, - 0x65, 0x73, 0x73, 0x75, 0x72, 0x70, 0x12, 0x22, 0x0a, 0x0c, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, - 0x67, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x68, 0x75, - 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x6d, 0x61, 0x70, 0x34, 0x6b, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0b, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6d, 0x61, 0x70, 0x34, 0x6b, 0x12, 0x20, 0x0a, 0x0b, - 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6d, 0x61, 0x70, 0x32, 0x6d, 0x18, 0x2f, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0b, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6d, 0x61, 0x70, 0x32, 0x6d, 0x12, 0x20, - 0x0a, 0x0b, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6d, 0x61, 0x70, 0x31, 0x67, 0x18, 0x30, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x0b, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6d, 0x61, 0x70, 0x31, 0x67, - 0x22, 0x41, 0x0a, 0x10, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, - 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x73, 0x22, 0x54, 0x0a, 0x08, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, - 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3f, 0x0a, 0x0f, 0x4c, 0x6f, 0x61, - 0x64, 0x41, 0x76, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x08, + 0x08, 0x52, 0x04, 0x74, 0x61, 0x69, 0x6c, 0x22, 0x41, 0x0a, 0x11, 0x50, 0x72, 0x6f, 0x63, 0x65, + 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, - 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x41, 0x76, 0x67, - 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x7b, 0x0a, 0x07, 0x4c, 0x6f, - 0x61, 0x64, 0x41, 0x76, 0x67, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, + 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x6b, 0x0a, 0x07, 0x50, 0x72, + 0x6f, 0x63, 0x65, 0x73, 0x73, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x6f, 0x61, 0x64, 0x31, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x01, 0x52, 0x05, 0x6c, 0x6f, 0x61, 0x64, 0x31, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x6f, 0x61, - 0x64, 0x35, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x6c, 0x6f, 0x61, 0x64, 0x35, 0x12, - 0x16, 0x0a, 0x06, 0x6c, 0x6f, 0x61, 0x64, 0x31, 0x35, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, - 0x06, 0x6c, 0x6f, 0x61, 0x64, 0x31, 0x35, 0x22, 0x45, 0x0a, 0x12, 0x53, 0x79, 0x73, 0x74, 0x65, - 0x6d, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, + 0x61, 0x74, 0x61, 0x12, 0x32, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, + 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x09, 0x70, 0x72, + 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x22, 0x9c, 0x02, 0x0a, 0x0b, 0x50, 0x72, 0x6f, 0x63, + 0x65, 0x73, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x70, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x70, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x70, 0x69, + 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x70, 0x70, 0x69, 0x64, 0x12, 0x14, 0x0a, + 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, + 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x12, 0x19, 0x0a, + 0x08, 0x63, 0x70, 0x75, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, + 0x07, 0x63, 0x70, 0x75, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x76, 0x69, 0x72, 0x74, + 0x75, 0x61, 0x6c, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0d, 0x76, 0x69, 0x72, 0x74, 0x75, 0x61, 0x6c, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, + 0x27, 0x0a, 0x0f, 0x72, 0x65, 0x73, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x65, 0x6d, 0x6f, + 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x72, 0x65, 0x73, 0x69, 0x64, 0x65, + 0x6e, 0x74, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, + 0x61, 0x6e, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, + 0x6e, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, + 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x67, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x61, 0x72, 0x67, 0x73, 0x22, 0x6f, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, + 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, + 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2f, 0x0a, 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x52, + 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x22, 0x37, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x22, 0x3f, 0x0a, 0x0f, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, + 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x73, 0x22, 0x5d, 0x0a, 0x0c, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, + 0x2f, 0x0a, 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x17, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, + 0x65, 0x72, 0x44, 0x72, 0x69, 0x76, 0x65, 0x72, 0x52, 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, + 0x22, 0x5a, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x23, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, + 0x2e, 0x53, 0x74, 0x61, 0x74, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x73, 0x22, 0x3b, 0x0a, 0x0d, + 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x53, 0x74, 0x61, 0x74, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0xd6, - 0x03, 0x0a, 0x0a, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x12, 0x2c, 0x0a, - 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x62, - 0x6f, 0x6f, 0x74, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, - 0x62, 0x6f, 0x6f, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x09, 0x63, 0x70, 0x75, 0x5f, - 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x61, - 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x50, 0x55, 0x53, 0x74, 0x61, 0x74, 0x52, 0x08, 0x63, - 0x70, 0x75, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x22, 0x0a, 0x03, 0x63, 0x70, 0x75, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, - 0x50, 0x55, 0x53, 0x74, 0x61, 0x74, 0x52, 0x03, 0x63, 0x70, 0x75, 0x12, 0x1b, 0x0a, 0x09, 0x69, - 0x72, 0x71, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, - 0x69, 0x72, 0x71, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x72, 0x71, 0x18, - 0x06, 0x20, 0x03, 0x28, 0x04, 0x52, 0x03, 0x69, 0x72, 0x71, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x78, 0x74, 0x5f, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x53, 0x77, 0x69, - 0x74, 0x63, 0x68, 0x65, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, - 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, - 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x27, - 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, - 0x67, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, - 0x52, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x63, 0x65, - 0x73, 0x73, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, - 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x69, 0x72, 0x71, 0x5f, 0x74, 0x6f, 0x74, - 0x61, 0x6c, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x73, 0x6f, 0x66, 0x74, 0x49, 0x72, - 0x71, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x2f, 0x0a, 0x08, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x69, - 0x72, 0x71, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x2e, 0x53, 0x6f, 0x66, 0x74, 0x49, 0x52, 0x51, 0x53, 0x74, 0x61, 0x74, 0x52, 0x07, - 0x73, 0x6f, 0x66, 0x74, 0x49, 0x72, 0x71, 0x22, 0xed, 0x01, 0x0a, 0x07, 0x43, 0x50, 0x55, 0x53, - 0x74, 0x61, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x01, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x69, 0x63, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x04, 0x6e, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x06, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x64, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x01, 0x52, 0x04, 0x69, 0x64, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6f, 0x77, 0x61, 0x69, - 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x01, 0x52, 0x06, 0x69, 0x6f, 0x77, 0x61, 0x69, 0x74, 0x12, - 0x10, 0x0a, 0x03, 0x69, 0x72, 0x71, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, 0x69, 0x72, - 0x71, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x69, 0x72, 0x71, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x01, 0x52, 0x07, 0x73, 0x6f, 0x66, 0x74, 0x49, 0x72, 0x71, 0x12, 0x14, 0x0a, 0x05, - 0x73, 0x74, 0x65, 0x61, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x73, 0x74, 0x65, - 0x61, 0x6c, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x75, 0x65, 0x73, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x01, 0x52, 0x05, 0x67, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x75, 0x65, 0x73, - 0x74, 0x5f, 0x6e, 0x69, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x67, 0x75, - 0x65, 0x73, 0x74, 0x4e, 0x69, 0x63, 0x65, 0x22, 0xf7, 0x01, 0x0a, 0x0b, 0x53, 0x6f, 0x66, 0x74, - 0x49, 0x52, 0x51, 0x53, 0x74, 0x61, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x68, 0x69, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x02, 0x68, 0x69, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x6d, 0x65, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x74, 0x69, 0x6d, 0x65, 0x72, 0x12, 0x15, 0x0a, - 0x06, 0x6e, 0x65, 0x74, 0x5f, 0x74, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6e, - 0x65, 0x74, 0x54, 0x78, 0x12, 0x15, 0x0a, 0x06, 0x6e, 0x65, 0x74, 0x5f, 0x72, 0x78, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6e, 0x65, 0x74, 0x52, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x12, 0x22, 0x0a, 0x0d, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x69, 0x6f, 0x5f, 0x70, 0x6f, - 0x6c, 0x6c, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x49, - 0x6f, 0x50, 0x6f, 0x6c, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x6c, 0x65, 0x74, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x6c, 0x65, 0x74, 0x12, - 0x14, 0x0a, 0x05, 0x73, 0x63, 0x68, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, - 0x73, 0x63, 0x68, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x72, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x72, 0x12, - 0x10, 0x0a, 0x03, 0x72, 0x63, 0x75, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x72, 0x63, - 0x75, 0x22, 0x40, 0x0a, 0x0f, 0x43, 0x50, 0x55, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, - 0x2e, 0x43, 0x50, 0x55, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x73, 0x22, 0x65, 0x0a, 0x08, 0x43, 0x50, 0x55, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, - 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2b, 0x0a, - 0x08, 0x63, 0x70, 0x75, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x10, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x50, 0x55, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x07, 0x63, 0x70, 0x75, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x8b, 0x06, 0x0a, 0x07, 0x43, - 0x50, 0x55, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, - 0x73, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, - 0x73, 0x73, 0x6f, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x49, - 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x70, 0x75, 0x5f, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x70, 0x75, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x6f, 0x64, 0x65, - 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x74, 0x65, 0x70, 0x70, 0x69, 0x6e, - 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x65, 0x70, 0x70, 0x69, 0x6e, - 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x63, 0x6f, 0x64, 0x65, 0x12, - 0x17, 0x0a, 0x07, 0x63, 0x70, 0x75, 0x5f, 0x6d, 0x68, 0x7a, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, - 0x52, 0x06, 0x63, 0x70, 0x75, 0x4d, 0x68, 0x7a, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x61, 0x63, 0x68, - 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x61, - 0x63, 0x68, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x68, 0x79, 0x73, 0x69, - 0x63, 0x61, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x68, - 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x69, 0x62, 0x6c, - 0x69, 0x6e, 0x67, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x73, 0x69, 0x62, 0x6c, - 0x69, 0x6e, 0x67, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x72, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, - 0x09, 0x63, 0x70, 0x75, 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x08, 0x63, 0x70, 0x75, 0x43, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x61, 0x70, - 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x70, 0x69, - 0x63, 0x49, 0x64, 0x12, 0x26, 0x0a, 0x0f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x61, - 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e, - 0x69, 0x74, 0x69, 0x61, 0x6c, 0x41, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x66, - 0x70, 0x75, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x66, 0x70, 0x75, 0x12, 0x23, 0x0a, - 0x0d, 0x66, 0x70, 0x75, 0x5f, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x66, 0x70, 0x75, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x20, 0x0a, 0x0c, 0x63, 0x70, 0x75, 0x5f, 0x69, 0x64, 0x5f, 0x6c, 0x65, 0x76, - 0x65, 0x6c, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x63, 0x70, 0x75, 0x49, 0x64, 0x4c, - 0x65, 0x76, 0x65, 0x6c, 0x12, 0x0e, 0x0a, 0x02, 0x77, 0x70, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x02, 0x77, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x14, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x75, - 0x67, 0x73, 0x18, 0x15, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x62, 0x75, 0x67, 0x73, 0x12, 0x1b, - 0x0a, 0x09, 0x62, 0x6f, 0x67, 0x6f, 0x5f, 0x6d, 0x69, 0x70, 0x73, 0x18, 0x16, 0x20, 0x01, 0x28, - 0x01, 0x52, 0x08, 0x62, 0x6f, 0x67, 0x6f, 0x4d, 0x69, 0x70, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x63, - 0x6c, 0x5f, 0x66, 0x6c, 0x75, 0x73, 0x68, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x17, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x0b, 0x63, 0x6c, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x53, 0x69, 0x7a, 0x65, 0x12, - 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, - 0x6e, 0x74, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x63, 0x61, 0x63, 0x68, 0x65, 0x41, - 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0c, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x53, 0x69, 0x7a, 0x65, 0x73, 0x12, 0x29, 0x0a, - 0x10, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x4d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x55, 0x0a, 0x1a, 0x4e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, - 0x94, 0x01, 0x0a, 0x12, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x12, 0x25, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4e, 0x65, - 0x74, 0x44, 0x65, 0x76, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x29, 0x0a, 0x07, 0x64, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6d, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4e, 0x65, 0x74, 0x44, 0x65, 0x76, 0x52, 0x07, 0x64, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x22, 0x86, 0x04, 0x0a, 0x06, 0x4e, 0x65, 0x74, 0x44, 0x65, - 0x76, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x78, 0x5f, 0x62, 0x79, 0x74, 0x65, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x72, 0x78, 0x42, 0x79, 0x74, 0x65, 0x73, - 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x72, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, - 0x1b, 0x0a, 0x09, 0x72, 0x78, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x08, 0x72, 0x78, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, - 0x72, 0x78, 0x5f, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x09, 0x72, 0x78, 0x44, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, - 0x78, 0x5f, 0x66, 0x69, 0x66, 0x6f, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x72, 0x78, - 0x46, 0x69, 0x66, 0x6f, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x78, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x72, 0x78, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, - 0x23, 0x0a, 0x0d, 0x72, 0x78, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x72, 0x78, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, - 0x73, 0x73, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x78, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, - 0x63, 0x61, 0x73, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x72, 0x78, 0x4d, 0x75, - 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x78, 0x5f, 0x62, 0x79, - 0x74, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x78, 0x42, 0x79, 0x74, - 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, - 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x78, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x0c, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x74, 0x78, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x1d, - 0x0a, 0x0a, 0x74, 0x78, 0x5f, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x18, 0x0d, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x09, 0x74, 0x78, 0x44, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x12, 0x17, 0x0a, - 0x07, 0x74, 0x78, 0x5f, 0x66, 0x69, 0x66, 0x6f, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, - 0x74, 0x78, 0x46, 0x69, 0x66, 0x6f, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x78, 0x5f, 0x63, 0x6f, 0x6c, - 0x6c, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x74, - 0x78, 0x43, 0x6f, 0x6c, 0x6c, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x74, - 0x78, 0x5f, 0x63, 0x61, 0x72, 0x72, 0x69, 0x65, 0x72, 0x18, 0x10, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x09, 0x74, 0x78, 0x43, 0x61, 0x72, 0x72, 0x69, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x78, - 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0c, 0x74, 0x78, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x22, - 0x43, 0x0a, 0x11, 0x44, 0x69, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, - 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x73, 0x22, 0x8f, 0x01, 0x0a, 0x09, 0x44, 0x69, 0x73, 0x6b, 0x53, 0x74, 0x61, + 0x0e, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, + 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x9f, 0x01, 0x0a, 0x04, 0x53, 0x74, + 0x61, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, + 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, + 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x55, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x70, 0x75, 0x5f, 0x75, 0x73, 0x61, 0x67, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x63, 0x70, 0x75, 0x55, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x15, 0x0a, 0x06, 0x70, 0x6f, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x05, 0x70, 0x6f, 0x64, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x62, 0x0a, 0x06, 0x4d, + 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x12, 0x2a, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4d, + 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x69, 0x6e, 0x66, 0x6f, 0x22, + 0x3d, 0x0a, 0x0e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x2b, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4d, 0x65, + 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x8b, + 0x0c, 0x0a, 0x07, 0x4d, 0x65, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, + 0x6d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x65, + 0x6d, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x66, 0x72, 0x65, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x66, 0x72, 0x65, 0x65, + 0x12, 0x22, 0x0a, 0x0c, 0x6d, 0x65, 0x6d, 0x61, 0x76, 0x61, 0x69, 0x6c, 0x61, 0x62, 0x6c, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x6d, 0x65, 0x6d, 0x61, 0x76, 0x61, 0x69, 0x6c, + 0x61, 0x62, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x73, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x62, 0x75, 0x66, 0x66, 0x65, 0x72, 0x73, 0x12, 0x16, + 0x0a, 0x06, 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, + 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x77, 0x61, 0x70, 0x63, 0x61, + 0x63, 0x68, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x73, 0x77, 0x61, 0x70, + 0x63, 0x61, 0x63, 0x68, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x1a, + 0x0a, 0x08, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x08, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x61, 0x63, + 0x74, 0x69, 0x76, 0x65, 0x61, 0x6e, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, + 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x61, 0x6e, 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x0c, 0x69, 0x6e, + 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x61, 0x6e, 0x6f, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0c, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x61, 0x6e, 0x6f, 0x6e, 0x12, 0x1e, + 0x0a, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0a, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x22, + 0x0a, 0x0c, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x0c, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x66, 0x69, + 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x75, 0x6e, 0x65, 0x76, 0x69, 0x63, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x75, 0x6e, 0x65, 0x76, 0x69, 0x63, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x18, + 0x0e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x6d, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x1c, + 0x0a, 0x09, 0x73, 0x77, 0x61, 0x70, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x0f, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x09, 0x73, 0x77, 0x61, 0x70, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x1a, 0x0a, 0x08, + 0x73, 0x77, 0x61, 0x70, 0x66, 0x72, 0x65, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, + 0x73, 0x77, 0x61, 0x70, 0x66, 0x72, 0x65, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x64, 0x69, 0x72, 0x74, + 0x79, 0x18, 0x11, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x64, 0x69, 0x72, 0x74, 0x79, 0x12, 0x1c, + 0x0a, 0x09, 0x77, 0x72, 0x69, 0x74, 0x65, 0x62, 0x61, 0x63, 0x6b, 0x18, 0x12, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x09, 0x77, 0x72, 0x69, 0x74, 0x65, 0x62, 0x61, 0x63, 0x6b, 0x12, 0x1c, 0x0a, 0x09, + 0x61, 0x6e, 0x6f, 0x6e, 0x70, 0x61, 0x67, 0x65, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x09, 0x61, 0x6e, 0x6f, 0x6e, 0x70, 0x61, 0x67, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, + 0x70, 0x70, 0x65, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6d, 0x61, 0x70, 0x70, + 0x65, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x68, 0x6d, 0x65, 0x6d, 0x18, 0x15, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x05, 0x73, 0x68, 0x6d, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x6c, 0x61, 0x62, + 0x18, 0x16, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x73, 0x6c, 0x61, 0x62, 0x12, 0x22, 0x0a, 0x0c, + 0x73, 0x72, 0x65, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x17, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0c, 0x73, 0x72, 0x65, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x61, 0x62, 0x6c, 0x65, + 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x75, 0x6e, 0x72, 0x65, 0x63, 0x6c, 0x61, 0x69, 0x6d, 0x18, 0x18, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x73, 0x75, 0x6e, 0x72, 0x65, 0x63, 0x6c, 0x61, 0x69, 0x6d, + 0x12, 0x20, 0x0a, 0x0b, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x18, + 0x19, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6b, 0x65, 0x72, 0x6e, 0x65, 0x6c, 0x73, 0x74, 0x61, + 0x63, 0x6b, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x73, + 0x18, 0x1a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x6e, 0x66, 0x73, 0x75, 0x6e, 0x73, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6e, 0x66, 0x73, 0x75, 0x6e, 0x73, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x62, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x18, 0x1c, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x62, 0x6f, 0x75, 0x6e, 0x63, 0x65, 0x12, 0x22, 0x0a, 0x0c, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x62, 0x61, 0x63, 0x6b, 0x74, 0x6d, 0x70, 0x18, 0x1d, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0c, 0x77, 0x72, 0x69, 0x74, 0x65, 0x62, 0x61, 0x63, 0x6b, 0x74, 0x6d, 0x70, + 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x18, + 0x1e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x6c, 0x69, 0x6d, + 0x69, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x61, + 0x73, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x74, + 0x65, 0x64, 0x61, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x76, 0x6d, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x20, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x76, 0x6d, 0x61, 0x6c, + 0x6c, 0x6f, 0x63, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x20, 0x0a, 0x0b, 0x76, 0x6d, 0x61, 0x6c, + 0x6c, 0x6f, 0x63, 0x75, 0x73, 0x65, 0x64, 0x18, 0x21, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x76, + 0x6d, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x75, 0x73, 0x65, 0x64, 0x12, 0x22, 0x0a, 0x0c, 0x76, 0x6d, + 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x18, 0x22, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0c, 0x76, 0x6d, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x12, 0x2c, + 0x0a, 0x11, 0x68, 0x61, 0x72, 0x64, 0x77, 0x61, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x72, 0x75, 0x70, + 0x74, 0x65, 0x64, 0x18, 0x23, 0x20, 0x01, 0x28, 0x04, 0x52, 0x11, 0x68, 0x61, 0x72, 0x64, 0x77, + 0x61, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x72, 0x75, 0x70, 0x74, 0x65, 0x64, 0x12, 0x24, 0x0a, 0x0d, + 0x61, 0x6e, 0x6f, 0x6e, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x18, 0x24, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0d, 0x61, 0x6e, 0x6f, 0x6e, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, + 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x73, 0x68, 0x6d, 0x65, 0x6d, 0x68, 0x75, 0x67, 0x65, 0x70, + 0x61, 0x67, 0x65, 0x73, 0x18, 0x25, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x73, 0x68, 0x6d, 0x65, + 0x6d, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x73, 0x68, + 0x6d, 0x65, 0x6d, 0x70, 0x6d, 0x64, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x64, 0x18, 0x26, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0e, 0x73, 0x68, 0x6d, 0x65, 0x6d, 0x70, 0x6d, 0x64, 0x6d, 0x61, 0x70, 0x70, + 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6d, 0x61, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x27, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x63, 0x6d, 0x61, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x18, + 0x0a, 0x07, 0x63, 0x6d, 0x61, 0x66, 0x72, 0x65, 0x65, 0x18, 0x28, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x07, 0x63, 0x6d, 0x61, 0x66, 0x72, 0x65, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x68, 0x75, 0x67, 0x65, + 0x70, 0x61, 0x67, 0x65, 0x73, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x29, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0e, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x12, 0x24, 0x0a, 0x0d, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x66, 0x72, 0x65, + 0x65, 0x18, 0x2a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, + 0x65, 0x73, 0x66, 0x72, 0x65, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, + 0x67, 0x65, 0x73, 0x72, 0x73, 0x76, 0x64, 0x18, 0x2b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x68, + 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x72, 0x73, 0x76, 0x64, 0x12, 0x24, 0x0a, 0x0d, + 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x73, 0x75, 0x72, 0x70, 0x18, 0x2c, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0d, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x73, 0x75, + 0x72, 0x70, 0x12, 0x22, 0x0a, 0x0c, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, 0x67, 0x65, 0x73, 0x69, + 0x7a, 0x65, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x68, 0x75, 0x67, 0x65, 0x70, 0x61, + 0x67, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x6d, 0x61, 0x70, 0x34, 0x6b, 0x18, 0x2e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x64, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x6d, 0x61, 0x70, 0x34, 0x6b, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x6d, 0x61, 0x70, 0x32, 0x6d, 0x18, 0x2f, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x64, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x6d, 0x61, 0x70, 0x32, 0x6d, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x6d, 0x61, 0x70, 0x31, 0x67, 0x18, 0x30, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0b, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x6d, 0x61, 0x70, 0x31, 0x67, 0x22, 0x41, 0x0a, 0x10, + 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x2d, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x48, 0x6f, 0x73, + 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, + 0x54, 0x0a, 0x08, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x73, + 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, + 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x3f, 0x0a, 0x0f, 0x4c, 0x6f, 0x61, 0x64, 0x41, 0x76, 0x67, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x61, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x41, 0x76, 0x67, 0x52, 0x08, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x7b, 0x0a, 0x07, 0x4c, 0x6f, 0x61, 0x64, 0x41, 0x76, + 0x67, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, + 0x14, 0x0a, 0x05, 0x6c, 0x6f, 0x61, 0x64, 0x31, 0x18, 0x02, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, + 0x6c, 0x6f, 0x61, 0x64, 0x31, 0x12, 0x14, 0x0a, 0x05, 0x6c, 0x6f, 0x61, 0x64, 0x35, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x6c, 0x6f, 0x61, 0x64, 0x35, 0x12, 0x16, 0x0a, 0x06, 0x6c, + 0x6f, 0x61, 0x64, 0x31, 0x35, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x06, 0x6c, 0x6f, 0x61, + 0x64, 0x31, 0x35, 0x22, 0x45, 0x0a, 0x12, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x53, 0x74, 0x61, + 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2f, 0x0a, 0x08, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x61, + 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x53, 0x74, 0x61, 0x74, + 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0xd6, 0x03, 0x0a, 0x0a, 0x53, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x6f, 0x6f, 0x74, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x62, 0x6f, 0x6f, 0x74, + 0x54, 0x69, 0x6d, 0x65, 0x12, 0x2d, 0x0a, 0x09, 0x63, 0x70, 0x75, 0x5f, 0x74, 0x6f, 0x74, 0x61, + 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x2e, 0x43, 0x50, 0x55, 0x53, 0x74, 0x61, 0x74, 0x52, 0x08, 0x63, 0x70, 0x75, 0x54, 0x6f, + 0x74, 0x61, 0x6c, 0x12, 0x22, 0x0a, 0x03, 0x63, 0x70, 0x75, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x10, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x50, 0x55, 0x53, 0x74, + 0x61, 0x74, 0x52, 0x03, 0x63, 0x70, 0x75, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x72, 0x71, 0x5f, 0x74, + 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x69, 0x72, 0x71, 0x54, + 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x10, 0x0a, 0x03, 0x69, 0x72, 0x71, 0x18, 0x06, 0x20, 0x03, 0x28, + 0x04, 0x52, 0x03, 0x69, 0x72, 0x71, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, + 0x74, 0x5f, 0x73, 0x77, 0x69, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x65, + 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x63, + 0x65, 0x73, 0x73, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x72, + 0x6f, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x72, 0x75, 0x6e, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x52, 0x75, 0x6e, 0x6e, + 0x69, 0x6e, 0x67, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x70, 0x72, + 0x6f, 0x63, 0x65, 0x73, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x24, 0x0a, 0x0e, + 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x69, 0x72, 0x71, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x0b, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x73, 0x6f, 0x66, 0x74, 0x49, 0x72, 0x71, 0x54, 0x6f, 0x74, + 0x61, 0x6c, 0x12, 0x2f, 0x0a, 0x08, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x69, 0x72, 0x71, 0x18, 0x0c, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, + 0x6f, 0x66, 0x74, 0x49, 0x52, 0x51, 0x53, 0x74, 0x61, 0x74, 0x52, 0x07, 0x73, 0x6f, 0x66, 0x74, + 0x49, 0x72, 0x71, 0x22, 0xed, 0x01, 0x0a, 0x07, 0x43, 0x50, 0x55, 0x53, 0x74, 0x61, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x01, 0x52, 0x04, 0x75, + 0x73, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x01, 0x52, 0x04, 0x6e, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x73, 0x74, 0x65, + 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x01, 0x52, 0x06, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x12, + 0x12, 0x0a, 0x04, 0x69, 0x64, 0x6c, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x01, 0x52, 0x04, 0x69, + 0x64, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x6f, 0x77, 0x61, 0x69, 0x74, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x01, 0x52, 0x06, 0x69, 0x6f, 0x77, 0x61, 0x69, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x69, + 0x72, 0x71, 0x18, 0x06, 0x20, 0x01, 0x28, 0x01, 0x52, 0x03, 0x69, 0x72, 0x71, 0x12, 0x19, 0x0a, + 0x08, 0x73, 0x6f, 0x66, 0x74, 0x5f, 0x69, 0x72, 0x71, 0x18, 0x07, 0x20, 0x01, 0x28, 0x01, 0x52, + 0x07, 0x73, 0x6f, 0x66, 0x74, 0x49, 0x72, 0x71, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x65, 0x61, + 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x73, 0x74, 0x65, 0x61, 0x6c, 0x12, 0x14, + 0x0a, 0x05, 0x67, 0x75, 0x65, 0x73, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x01, 0x52, 0x05, 0x67, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x6e, 0x69, + 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x01, 0x52, 0x09, 0x67, 0x75, 0x65, 0x73, 0x74, 0x4e, + 0x69, 0x63, 0x65, 0x22, 0xf7, 0x01, 0x0a, 0x0b, 0x53, 0x6f, 0x66, 0x74, 0x49, 0x52, 0x51, 0x53, + 0x74, 0x61, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x68, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x02, 0x68, 0x69, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x6d, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x05, 0x74, 0x69, 0x6d, 0x65, 0x72, 0x12, 0x15, 0x0a, 0x06, 0x6e, 0x65, 0x74, + 0x5f, 0x74, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x6e, 0x65, 0x74, 0x54, 0x78, + 0x12, 0x15, 0x0a, 0x06, 0x6e, 0x65, 0x74, 0x5f, 0x72, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x05, 0x6e, 0x65, 0x74, 0x52, 0x78, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x22, 0x0a, + 0x0d, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x69, 0x6f, 0x5f, 0x70, 0x6f, 0x6c, 0x6c, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x49, 0x6f, 0x50, 0x6f, 0x6c, + 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x6c, 0x65, 0x74, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x6c, 0x65, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x73, + 0x63, 0x68, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x73, 0x63, 0x68, 0x65, + 0x64, 0x12, 0x18, 0x0a, 0x07, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x72, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x07, 0x68, 0x72, 0x74, 0x69, 0x6d, 0x65, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x72, + 0x63, 0x75, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x72, 0x63, 0x75, 0x22, 0x40, 0x0a, + 0x0f, 0x43, 0x50, 0x55, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x2d, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x50, 0x55, + 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, + 0x65, 0x0a, 0x08, 0x43, 0x50, 0x55, 0x73, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2c, 0x0a, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x2b, 0x0a, 0x08, 0x63, 0x70, 0x75, + 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x61, + 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x50, 0x55, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x63, + 0x70, 0x75, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x8b, 0x06, 0x0a, 0x07, 0x43, 0x50, 0x55, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, + 0x12, 0x1b, 0x0a, 0x09, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x76, 0x65, 0x6e, 0x64, 0x6f, 0x72, 0x49, 0x64, 0x12, 0x1d, 0x0a, + 0x0a, 0x63, 0x70, 0x75, 0x5f, 0x66, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x63, 0x70, 0x75, 0x46, 0x61, 0x6d, 0x69, 0x6c, 0x79, 0x12, 0x14, 0x0a, 0x05, + 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x6d, 0x6f, 0x64, + 0x65, 0x6c, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x5f, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x4e, 0x61, 0x6d, + 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x74, 0x65, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x74, 0x65, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x1c, 0x0a, + 0x09, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x6d, 0x69, 0x63, 0x72, 0x6f, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x63, + 0x70, 0x75, 0x5f, 0x6d, 0x68, 0x7a, 0x18, 0x08, 0x20, 0x01, 0x28, 0x01, 0x52, 0x06, 0x63, 0x70, + 0x75, 0x4d, 0x68, 0x7a, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x73, 0x69, + 0x7a, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x61, 0x63, 0x68, 0x65, 0x53, + 0x69, 0x7a, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, 0x61, 0x6c, 0x5f, + 0x69, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x68, 0x79, 0x73, 0x69, 0x63, + 0x61, 0x6c, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x69, 0x62, 0x6c, 0x69, 0x6e, 0x67, 0x73, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x73, 0x69, 0x62, 0x6c, 0x69, 0x6e, 0x67, 0x73, + 0x12, 0x17, 0x0a, 0x07, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x63, 0x6f, 0x72, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x70, 0x75, + 0x5f, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x63, 0x70, + 0x75, 0x43, 0x6f, 0x72, 0x65, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x61, 0x70, 0x69, 0x63, 0x5f, 0x69, + 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, + 0x26, 0x0a, 0x0f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x5f, 0x61, 0x70, 0x69, 0x63, 0x5f, + 0x69, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, + 0x6c, 0x41, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x66, 0x70, 0x75, 0x18, 0x10, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x66, 0x70, 0x75, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x70, 0x75, + 0x5f, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x66, 0x70, 0x75, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x20, + 0x0a, 0x0c, 0x63, 0x70, 0x75, 0x5f, 0x69, 0x64, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x12, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x63, 0x70, 0x75, 0x49, 0x64, 0x4c, 0x65, 0x76, 0x65, 0x6c, + 0x12, 0x0e, 0x0a, 0x02, 0x77, 0x70, 0x18, 0x13, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x77, 0x70, + 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x18, 0x14, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x05, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x75, 0x67, 0x73, 0x18, 0x15, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x62, 0x75, 0x67, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x6f, + 0x67, 0x6f, 0x5f, 0x6d, 0x69, 0x70, 0x73, 0x18, 0x16, 0x20, 0x01, 0x28, 0x01, 0x52, 0x08, 0x62, + 0x6f, 0x67, 0x6f, 0x4d, 0x69, 0x70, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x63, 0x6c, 0x5f, 0x66, 0x6c, + 0x75, 0x73, 0x68, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, + 0x63, 0x6c, 0x46, 0x6c, 0x75, 0x73, 0x68, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x63, + 0x61, 0x63, 0x68, 0x65, 0x5f, 0x61, 0x6c, 0x69, 0x67, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x18, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x63, 0x61, 0x63, 0x68, 0x65, 0x41, 0x6c, 0x69, 0x67, 0x6e, + 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x5f, + 0x73, 0x69, 0x7a, 0x65, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x53, 0x69, 0x7a, 0x65, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x70, 0x6f, 0x77, + 0x65, 0x72, 0x5f, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x1a, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0f, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x22, 0x55, 0x0a, 0x1a, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x37, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x73, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x94, 0x01, 0x0a, 0x12, + 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x12, 0x27, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x11, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x53, 0x74, - 0x61, 0x74, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x2b, 0x0a, 0x07, 0x64, 0x65, 0x76, - 0x69, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x61, 0x63, - 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x52, 0x07, 0x64, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x22, 0xd8, 0x04, 0x0a, 0x08, 0x44, 0x69, 0x73, 0x6b, 0x53, - 0x74, 0x61, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x61, 0x64, 0x5f, - 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0d, 0x72, 0x65, 0x61, 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x1f, - 0x0a, 0x0b, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x64, 0x12, - 0x21, 0x0a, 0x0c, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x73, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x72, 0x65, 0x61, 0x64, 0x53, 0x65, 0x63, 0x74, 0x6f, - 0x72, 0x73, 0x12, 0x20, 0x0a, 0x0c, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, - 0x6d, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x54, 0x69, - 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x63, 0x6f, - 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x77, - 0x72, 0x69, 0x74, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x21, 0x0a, - 0x0c, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x64, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x0b, 0x77, 0x72, 0x69, 0x74, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x64, - 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x74, 0x6f, 0x72, - 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x77, 0x72, 0x69, 0x74, 0x65, 0x53, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x74, - 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x77, 0x72, - 0x69, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x6f, 0x5f, - 0x69, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0c, 0x69, 0x6f, 0x49, 0x6e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, - 0x1c, 0x0a, 0x0a, 0x69, 0x6f, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x0b, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x08, 0x69, 0x6f, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x2d, 0x0a, - 0x13, 0x69, 0x6f, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, - 0x64, 0x5f, 0x6d, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x69, 0x6f, 0x54, 0x69, - 0x6d, 0x65, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x4d, 0x73, 0x12, 0x2b, 0x0a, 0x11, - 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, - 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, - 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x69, 0x73, - 0x63, 0x61, 0x72, 0x64, 0x5f, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0d, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x64, - 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x5f, 0x73, 0x65, 0x63, 0x74, - 0x6f, 0x72, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x64, 0x69, 0x73, 0x63, 0x61, - 0x72, 0x64, 0x53, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x64, 0x69, 0x73, - 0x63, 0x61, 0x72, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x10, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x0d, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x4d, - 0x73, 0x22, 0x19, 0x0a, 0x17, 0x45, 0x74, 0x63, 0x64, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x40, 0x0a, 0x10, - 0x45, 0x74, 0x63, 0x64, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x51, - 0x0a, 0x18, 0x45, 0x74, 0x63, 0x64, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6d, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x4c, 0x65, 0x61, 0x76, 0x65, - 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x73, 0x22, 0x31, 0x0a, 0x17, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, - 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x22, 0x40, 0x0a, 0x10, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x51, 0x0a, 0x18, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, - 0x74, 0x63, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, - 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x1e, 0x0a, 0x1c, 0x45, 0x74, 0x63, - 0x64, 0x46, 0x6f, 0x72, 0x66, 0x65, 0x69, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x68, - 0x69, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x5d, 0x0a, 0x15, 0x45, 0x74, 0x63, - 0x64, 0x46, 0x6f, 0x72, 0x66, 0x65, 0x69, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x68, - 0x69, 0x70, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x5b, 0x0a, 0x1d, 0x45, 0x74, 0x63, 0x64, - 0x46, 0x6f, 0x72, 0x66, 0x65, 0x69, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x68, 0x69, - 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x08, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6d, 0x61, - 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x46, 0x6f, 0x72, 0x66, 0x65, 0x69, - 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x08, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x38, 0x0a, 0x15, 0x45, 0x74, 0x63, 0x64, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, - 0x0a, 0x0b, 0x71, 0x75, 0x65, 0x72, 0x79, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0a, 0x71, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x22, - 0x76, 0x0a, 0x0a, 0x45, 0x74, 0x63, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x0e, 0x0a, - 0x02, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, - 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x65, 0x65, - 0x72, 0x5f, 0x75, 0x72, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x70, 0x65, - 0x65, 0x72, 0x55, 0x72, 0x6c, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x5f, 0x75, 0x72, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x69, - 0x65, 0x6e, 0x74, 0x55, 0x72, 0x6c, 0x73, 0x22, 0x91, 0x01, 0x0a, 0x0b, 0x45, 0x74, 0x63, 0x64, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x25, 0x0a, 0x0e, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, - 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x6c, - 0x65, 0x67, 0x61, 0x63, 0x79, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x2d, 0x0a, 0x07, - 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0x4a, 0x0a, 0x16, 0x45, - 0x74, 0x63, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, - 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x08, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x15, 0x0a, 0x13, 0x45, 0x74, 0x63, 0x64, 0x53, - 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x3b, - 0x0a, 0x0b, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x2c, 0x0a, - 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x47, 0x0a, 0x13, 0x45, - 0x74, 0x63, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x30, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, - 0x74, 0x63, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x73, 0x22, 0x59, 0x0a, 0x0b, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x18, 0x0a, - 0x07, 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x67, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x72, 0x69, - 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x22, - 0x36, 0x0a, 0x11, 0x44, 0x48, 0x43, 0x50, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x6d, 0x65, - 0x74, 0x72, 0x69, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x72, 0x6f, 0x75, 0x74, - 0x65, 0x4d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x22, 0xf2, 0x01, 0x0a, 0x13, 0x4e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, - 0x1c, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x63, 0x69, 0x64, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x69, 0x64, - 0x72, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x74, 0x75, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, - 0x6d, 0x74, 0x75, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x68, 0x63, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x04, 0x64, 0x68, 0x63, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x67, 0x6e, 0x6f, 0x72, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x12, - 0x3d, 0x0a, 0x0c, 0x64, 0x68, 0x63, 0x70, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, - 0x44, 0x48, 0x43, 0x50, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x52, 0x0b, 0x64, 0x68, 0x63, 0x70, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2c, - 0x0a, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, - 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x22, 0x69, 0x0a, 0x0d, - 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, - 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x68, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x0a, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, - 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, - 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x22, 0x57, 0x0a, 0x0d, 0x49, 0x6e, 0x73, 0x74, 0x61, - 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6c, 0x6c, 0x5f, 0x64, 0x69, 0x73, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, - 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x44, 0x69, 0x73, 0x6b, 0x12, 0x23, 0x0a, 0x0d, 0x69, - 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x22, 0xcb, 0x02, 0x0a, 0x0d, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x12, 0x36, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x22, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, - 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3d, 0x0a, 0x0e, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x49, 0x6e, 0x73, - 0x74, 0x61, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0d, 0x69, 0x6e, 0x73, 0x74, - 0x61, 0x6c, 0x6c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3d, 0x0a, 0x0e, 0x6e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0d, 0x6e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2d, 0x0a, 0x12, 0x6b, 0x75, 0x62, 0x65, - 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x55, 0x0a, 0x0b, 0x4d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, - 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x43, 0x4f, 0x4e, 0x54, 0x52, 0x4f, 0x4c, 0x5f, 0x50, 0x4c, 0x41, 0x4e, 0x45, 0x10, 0x02, 0x12, - 0x0d, 0x0a, 0x09, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4a, 0x4f, 0x49, 0x4e, 0x10, 0x03, 0x22, 0x30, - 0x0a, 0x12, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x22, 0x33, 0x0a, 0x09, 0x43, 0x4e, 0x49, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, + 0x12, 0x25, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0f, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4e, 0x65, 0x74, 0x44, 0x65, 0x76, + 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x29, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x65, 0x2e, 0x4e, 0x65, 0x74, 0x44, 0x65, 0x76, 0x52, 0x07, 0x64, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x73, 0x22, 0x86, 0x04, 0x0a, 0x06, 0x4e, 0x65, 0x74, 0x44, 0x65, 0x76, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x72, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x04, 0x75, 0x72, 0x6c, 0x73, 0x22, 0x68, 0x0a, 0x14, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1d, 0x0a, - 0x0a, 0x64, 0x6e, 0x73, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x09, 0x64, 0x6e, 0x73, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x31, 0x0a, 0x0a, - 0x63, 0x6e, 0x69, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x12, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x4e, 0x49, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x52, 0x09, 0x63, 0x6e, 0x69, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, - 0xec, 0x01, 0x0a, 0x0d, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x40, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, - 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6d, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6c, - 0x61, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x72, - 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x12, 0x46, 0x0a, 0x0f, 0x63, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x5f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, - 0x0e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, - 0x3d, 0x0a, 0x1b, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, - 0x69, 0x6e, 0x67, 0x5f, 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x53, 0x63, 0x68, 0x65, 0x64, - 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x4f, 0x6e, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x73, 0x22, 0x84, - 0x02, 0x0a, 0x1c, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x25, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x3d, 0x0a, 0x0e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, - 0x72, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0d, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3d, 0x0a, 0x0e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, - 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, - 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0d, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3f, 0x0a, 0x0d, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, - 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 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, 0x0c, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, - 0x65, 0x54, 0x69, 0x6d, 0x65, 0x22, 0x7b, 0x0a, 0x15, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, + 0x65, 0x12, 0x19, 0x0a, 0x08, 0x72, 0x78, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x07, 0x72, 0x78, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, + 0x72, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x09, 0x72, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x72, + 0x78, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, + 0x72, 0x78, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x78, 0x5f, 0x64, + 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x72, 0x78, + 0x44, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x78, 0x5f, 0x66, 0x69, + 0x66, 0x6f, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x72, 0x78, 0x46, 0x69, 0x66, 0x6f, + 0x12, 0x19, 0x0a, 0x08, 0x72, 0x78, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x07, 0x72, 0x78, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, + 0x78, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0c, 0x72, 0x78, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, + 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x78, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x73, 0x74, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x72, 0x78, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, + 0x61, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x78, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, + 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x78, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, 0x1d, + 0x0a, 0x0a, 0x74, 0x78, 0x5f, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x09, 0x74, 0x78, 0x50, 0x61, 0x63, 0x6b, 0x65, 0x74, 0x73, 0x12, 0x1b, 0x0a, + 0x09, 0x74, 0x78, 0x5f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x08, 0x74, 0x78, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x78, + 0x5f, 0x64, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, + 0x74, 0x78, 0x44, 0x72, 0x6f, 0x70, 0x70, 0x65, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x78, 0x5f, + 0x66, 0x69, 0x66, 0x6f, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x74, 0x78, 0x46, 0x69, + 0x66, 0x6f, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x78, 0x5f, 0x63, 0x6f, 0x6c, 0x6c, 0x69, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x74, 0x78, 0x43, 0x6f, 0x6c, + 0x6c, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x78, 0x5f, 0x63, 0x61, + 0x72, 0x72, 0x69, 0x65, 0x72, 0x18, 0x10, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x74, 0x78, 0x43, + 0x61, 0x72, 0x72, 0x69, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x0d, 0x74, 0x78, 0x5f, 0x63, 0x6f, 0x6d, + 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x74, + 0x78, 0x43, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x22, 0x43, 0x0a, 0x11, 0x44, + 0x69, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x2e, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x44, 0x69, 0x73, + 0x6b, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, + 0x22, 0x8f, 0x01, 0x0a, 0x09, 0x44, 0x69, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x12, 0x20, 0x0a, 0x0b, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x22, 0x5b, 0x0a, 0x1d, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, + 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x27, 0x0a, 0x05, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x61, + 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x52, 0x05, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x2b, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, + 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x52, 0x07, 0x64, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x73, 0x22, 0xd8, 0x04, 0x0a, 0x08, 0x44, 0x69, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x70, + 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x72, 0x65, 0x61, + 0x64, 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, + 0x61, 0x64, 0x5f, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0a, 0x72, 0x65, 0x61, 0x64, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x72, + 0x65, 0x61, 0x64, 0x5f, 0x73, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0b, 0x72, 0x65, 0x61, 0x64, 0x53, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x20, + 0x0a, 0x0c, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x72, 0x65, 0x61, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, + 0x12, 0x27, 0x0a, 0x0f, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, + 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x77, 0x72, 0x69, 0x74, 0x65, + 0x43, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x77, 0x72, 0x69, + 0x74, 0x65, 0x5f, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x0b, 0x77, 0x72, 0x69, 0x74, 0x65, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, + 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x73, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0c, 0x77, 0x72, 0x69, 0x74, 0x65, 0x53, 0x65, 0x63, 0x74, 0x6f, 0x72, + 0x73, 0x12, 0x22, 0x0a, 0x0d, 0x77, 0x72, 0x69, 0x74, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, + 0x6d, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x77, 0x72, 0x69, 0x74, 0x65, 0x54, + 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x24, 0x0a, 0x0e, 0x69, 0x6f, 0x5f, 0x69, 0x6e, 0x5f, 0x70, + 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x69, + 0x6f, 0x49, 0x6e, 0x50, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x12, 0x1c, 0x0a, 0x0a, 0x69, + 0x6f, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x08, 0x69, 0x6f, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x12, 0x2d, 0x0a, 0x13, 0x69, 0x6f, 0x5f, + 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x73, + 0x18, 0x0c, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x69, 0x6f, 0x54, 0x69, 0x6d, 0x65, 0x57, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x65, 0x64, 0x4d, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x64, 0x69, 0x73, 0x63, + 0x61, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x0d, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x10, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x43, 0x6f, 0x6d, 0x70, + 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x25, 0x0a, 0x0e, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, + 0x5f, 0x6d, 0x65, 0x72, 0x67, 0x65, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x64, + 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x4d, 0x65, 0x72, 0x67, 0x65, 0x64, 0x12, 0x27, 0x0a, 0x0f, + 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x5f, 0x73, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x73, 0x18, + 0x0f, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x53, 0x65, + 0x63, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x26, 0x0a, 0x0f, 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, + 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6d, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, + 0x64, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x54, 0x69, 0x6d, 0x65, 0x4d, 0x73, 0x22, 0x19, 0x0a, + 0x17, 0x45, 0x74, 0x63, 0x64, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x40, 0x0a, 0x10, 0x45, 0x74, 0x63, 0x64, + 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x51, 0x0a, 0x18, 0x45, 0x74, + 0x63, 0x64, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6c, 0x75, 0x73, + 0x74, 0x65, 0x72, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x31, 0x0a, + 0x17, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x22, 0x40, 0x0a, 0x10, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x22, 0x51, 0x0a, 0x18, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, + 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x52, + 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x08, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x1e, 0x0a, 0x1c, 0x45, 0x74, 0x63, 0x64, 0x46, 0x6f, 0x72, + 0x66, 0x65, 0x69, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x5d, 0x0a, 0x15, 0x45, 0x74, 0x63, 0x64, 0x46, 0x6f, 0x72, + 0x66, 0x65, 0x69, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x12, 0x2c, + 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x16, 0x0a, 0x06, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x22, 0x5b, 0x0a, 0x1d, 0x45, 0x74, 0x63, 0x64, 0x46, 0x6f, 0x72, 0x66, + 0x65, 0x69, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x46, 0x6f, 0x72, 0x66, 0x65, 0x69, 0x74, 0x4c, 0x65, 0x61, + 0x64, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x73, 0x22, 0x38, 0x0a, 0x15, 0x45, 0x74, 0x63, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0a, 0x71, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x22, 0x76, 0x0a, 0x0a, 0x45, + 0x74, 0x63, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x02, 0x69, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x73, + 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, + 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x75, 0x72, + 0x6c, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x70, 0x65, 0x65, 0x72, 0x55, 0x72, + 0x6c, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x75, 0x72, 0x6c, + 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x55, + 0x72, 0x6c, 0x73, 0x22, 0x91, 0x01, 0x0a, 0x0b, 0x45, 0x74, 0x63, 0x64, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x73, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x12, 0x25, 0x0a, 0x0e, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x6c, 0x65, 0x67, 0x61, 0x63, + 0x79, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x2d, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0x4a, 0x0a, 0x16, 0x45, 0x74, 0x63, 0x64, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x30, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, + 0x63, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x73, 0x22, 0x15, 0x0a, 0x13, 0x45, 0x74, 0x63, 0x64, 0x53, 0x6e, 0x61, 0x70, 0x73, + 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x3b, 0x0a, 0x0b, 0x45, 0x74, + 0x63, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x47, 0x0a, 0x13, 0x45, 0x74, 0x63, 0x64, 0x52, + 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, + 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x52, + 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, + 0x22, 0x59, 0x0a, 0x0b, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, + 0x18, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x61, 0x74, + 0x65, 0x77, 0x61, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x61, 0x74, 0x65, + 0x77, 0x61, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, 0x22, 0x36, 0x0a, 0x11, 0x44, + 0x48, 0x43, 0x50, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x5f, 0x6d, 0x65, 0x74, 0x72, 0x69, 0x63, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0b, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x4d, 0x65, 0x74, + 0x72, 0x69, 0x63, 0x22, 0xf2, 0x01, 0x0a, 0x13, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, + 0x65, 0x76, 0x69, 0x63, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1c, 0x0a, 0x09, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x69, 0x64, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x63, 0x69, 0x64, 0x72, 0x12, 0x10, 0x0a, + 0x03, 0x6d, 0x74, 0x75, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x6d, 0x74, 0x75, 0x12, + 0x12, 0x0a, 0x04, 0x64, 0x68, 0x63, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x64, + 0x68, 0x63, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x12, 0x3d, 0x0a, 0x0c, 0x64, + 0x68, 0x63, 0x70, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x44, 0x48, 0x43, 0x50, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0b, 0x64, + 0x68, 0x63, 0x70, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x2c, 0x0a, 0x06, 0x72, 0x6f, + 0x75, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6d, 0x61, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x52, 0x06, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x73, 0x22, 0x69, 0x0a, 0x0d, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x68, 0x6f, 0x73, + 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x68, 0x6f, 0x73, + 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3c, 0x0a, 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x76, 0x69, 0x63, + 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0a, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, + 0x63, 0x65, 0x73, 0x22, 0x57, 0x0a, 0x0d, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x5f, + 0x64, 0x69, 0x73, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x73, 0x74, + 0x61, 0x6c, 0x6c, 0x44, 0x69, 0x73, 0x6b, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, + 0x6c, 0x6c, 0x5f, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, + 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x22, 0xcb, 0x02, 0x0a, + 0x0d, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x36, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x22, 0x2e, 0x6d, + 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x2e, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x54, 0x79, 0x70, 0x65, + 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3d, 0x0a, 0x0e, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, + 0x6c, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0d, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x3d, 0x0a, 0x0e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, + 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x12, 0x2d, 0x0a, 0x12, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, + 0x65, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x11, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x56, 0x65, 0x72, 0x73, + 0x69, 0x6f, 0x6e, 0x22, 0x55, 0x0a, 0x0b, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, + 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x49, 0x4e, 0x49, + 0x54, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x54, + 0x52, 0x4f, 0x4c, 0x5f, 0x50, 0x4c, 0x41, 0x4e, 0x45, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x54, + 0x59, 0x50, 0x45, 0x5f, 0x4a, 0x4f, 0x49, 0x4e, 0x10, 0x03, 0x22, 0x30, 0x0a, 0x12, 0x43, 0x6f, + 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x22, 0x33, 0x0a, 0x09, + 0x43, 0x4e, 0x49, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, + 0x04, 0x75, 0x72, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x75, 0x72, 0x6c, + 0x73, 0x22, 0x68, 0x0a, 0x14, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x6e, 0x73, + 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, + 0x6e, 0x73, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x31, 0x0a, 0x0a, 0x63, 0x6e, 0x69, 0x5f, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, + 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x4e, 0x49, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x52, 0x09, 0x63, 0x6e, 0x69, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0xec, 0x01, 0x0a, 0x0d, + 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x40, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x5f, 0x70, 0x6c, 0x61, + 0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6c, + 0x61, 0x6e, 0x65, 0x12, 0x46, 0x0a, 0x0f, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6d, + 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, 0x63, 0x6c, 0x75, + 0x73, 0x74, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x3d, 0x0a, 0x1b, 0x61, + 0x6c, 0x6c, 0x6f, 0x77, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, 0x67, 0x5f, + 0x6f, 0x6e, 0x5f, 0x6d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x18, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x53, 0x63, 0x68, 0x65, 0x64, 0x75, 0x6c, 0x69, 0x6e, + 0x67, 0x4f, 0x6e, 0x4d, 0x61, 0x73, 0x74, 0x65, 0x72, 0x73, 0x22, 0x84, 0x02, 0x0a, 0x1c, 0x47, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x25, 0x0a, 0x0e, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x12, 0x3d, 0x0a, 0x0e, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x61, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x0d, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x12, 0x3d, 0x0a, 0x0e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x5f, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x2e, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x52, 0x0d, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x12, 0x3f, 0x0a, 0x0d, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x5f, 0x74, 0x69, 0x6d, + 0x65, 0x18, 0x04, 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, 0x0c, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x22, 0x7b, 0x0a, 0x15, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x02, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x20, 0x0a, 0x0b, + 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x0b, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x5b, + 0x0a, 0x1d, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x3a, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1e, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x4c, 0x0a, 0x1c, 0x52, + 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x6f, 0x6f, 0x74, 0x6b, 0x75, 0x62, 0x65, 0x49, 0x6e, 0x69, + 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, + 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x69, 0x0a, 0x24, 0x52, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x42, 0x6f, 0x6f, 0x74, 0x6b, 0x75, 0x62, 0x65, 0x49, 0x6e, 0x69, 0x74, 0x69, + 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x41, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x6f, 0x6f, 0x74, 0x6b, 0x75, 0x62, 0x65, 0x49, 0x6e, 0x69, 0x74, + 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x73, 0x22, 0x6e, 0x0a, 0x22, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, + 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x72, 0x6f, 0x6c, 0x65, 0x73, + 0x12, 0x32, 0x0a, 0x07, 0x63, 0x72, 0x74, 0x5f, 0x74, 0x74, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x06, 0x63, 0x72, + 0x74, 0x54, 0x74, 0x6c, 0x22, 0xa1, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x63, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x02, + 0x63, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x72, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x03, 0x63, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x74, 0x61, 0x6c, + 0x6f, 0x73, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x67, 0x0a, 0x23, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x40, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x24, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x73, 0x32, 0xdc, 0x16, 0x0a, 0x0e, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x5d, 0x0a, 0x12, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x22, 0x2e, 0x6d, 0x61, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, + 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, - 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, - 0x4c, 0x0a, 0x1c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x6f, 0x6f, 0x74, 0x6b, 0x75, 0x62, - 0x65, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x12, - 0x2c, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x69, 0x0a, - 0x24, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x6f, 0x6f, 0x74, 0x6b, 0x75, 0x62, 0x65, 0x49, - 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, - 0x65, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x6f, 0x6f, 0x74, 0x6b, 0x75, 0x62, 0x65, - 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x52, 0x08, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x32, 0xe2, 0x15, 0x0a, 0x0e, 0x4d, 0x61, 0x63, - 0x68, 0x69, 0x6e, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x5d, 0x0a, 0x12, 0x41, - 0x70, 0x70, 0x6c, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x22, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x41, 0x70, 0x70, 0x6c, - 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, - 0x41, 0x70, 0x70, 0x6c, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x09, 0x42, 0x6f, - 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x12, 0x19, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, - 0x65, 0x2e, 0x42, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x42, 0x6f, 0x6f, - 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, - 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x1a, 0x2e, 0x6d, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x04, 0x43, 0x6f, 0x70, 0x79, 0x12, 0x14, 0x2e, - 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x44, 0x61, 0x74, - 0x61, 0x30, 0x01, 0x12, 0x3b, 0x0a, 0x07, 0x43, 0x50, 0x55, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x18, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, - 0x2e, 0x43, 0x50, 0x55, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x3f, 0x0a, 0x09, 0x44, 0x69, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1a, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, - 0x44, 0x69, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x2e, 0x0a, 0x05, 0x44, 0x6d, 0x65, 0x73, 0x67, 0x12, 0x15, 0x2e, 0x6d, 0x61, 0x63, - 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x44, 0x6d, 0x65, 0x73, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x0c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x30, - 0x01, 0x12, 0x32, 0x0a, 0x06, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x2e, 0x6d, 0x61, - 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x30, 0x01, 0x12, 0x51, 0x0a, 0x0e, 0x45, 0x74, 0x63, 0x64, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1e, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, - 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, - 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x10, 0x45, 0x74, 0x63, 0x64, - 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x20, 0x2e, 0x6d, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x76, - 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, - 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x57, 0x0a, 0x10, 0x45, 0x74, 0x63, 0x64, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x20, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, - 0x45, 0x74, 0x63, 0x64, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, + 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x09, 0x42, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, + 0x12, 0x19, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x42, 0x6f, 0x6f, 0x74, 0x73, + 0x74, 0x72, 0x61, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x6d, 0x61, + 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x42, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x74, 0x61, + 0x69, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x1a, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, + 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1b, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x6f, 0x6e, 0x74, + 0x61, 0x69, 0x6e, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, + 0x0a, 0x04, 0x43, 0x6f, 0x70, 0x79, 0x12, 0x14, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, + 0x2e, 0x43, 0x6f, 0x70, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x30, 0x01, 0x12, 0x3b, 0x0a, 0x07, + 0x43, 0x50, 0x55, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, + 0x18, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x43, 0x50, 0x55, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x09, 0x44, 0x69, 0x73, + 0x6b, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1a, + 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x53, 0x74, 0x61, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x05, 0x44, 0x6d, + 0x65, 0x73, 0x67, 0x12, 0x15, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x44, 0x6d, + 0x65, 0x73, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x30, 0x01, 0x12, 0x32, 0x0a, 0x06, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0e, 0x2e, 0x6d, + 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x30, 0x01, 0x12, 0x51, + 0x0a, 0x0e, 0x45, 0x74, 0x63, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, + 0x12, 0x1e, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1f, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x57, 0x0a, 0x10, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x20, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, + 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, - 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, - 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, 0x15, 0x45, 0x74, + 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x10, 0x45, 0x74, + 0x63, 0x64, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x20, + 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x4c, 0x65, 0x61, + 0x76, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x21, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x4c, + 0x65, 0x61, 0x76, 0x65, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x66, 0x0a, 0x15, 0x45, 0x74, 0x63, 0x64, 0x46, 0x6f, 0x72, 0x66, 0x65, + 0x69, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x12, 0x25, 0x2e, 0x6d, + 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x46, 0x6f, 0x72, 0x66, 0x65, + 0x69, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x46, 0x6f, 0x72, 0x66, 0x65, 0x69, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, - 0x68, 0x69, 0x70, 0x12, 0x25, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, - 0x63, 0x64, 0x46, 0x6f, 0x72, 0x66, 0x65, 0x69, 0x74, 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, - 0x68, 0x69, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6d, 0x61, 0x63, - 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x46, 0x6f, 0x72, 0x66, 0x65, 0x69, 0x74, - 0x4c, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x12, 0x0c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x1a, - 0x1c, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x12, - 0x3c, 0x0a, 0x0c, 0x45, 0x74, 0x63, 0x64, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, - 0x1c, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x53, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x30, 0x01, 0x12, 0x66, 0x0a, - 0x15, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x25, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, + 0x68, 0x69, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x45, + 0x74, 0x63, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x0c, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x1a, 0x1c, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x12, 0x3c, 0x0a, 0x0c, 0x45, 0x74, 0x63, 0x64, + 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x1c, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x65, 0x2e, 0x45, 0x74, 0x63, 0x64, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x44, 0x61, 0x74, 0x61, 0x30, 0x01, 0x12, 0x66, 0x0a, 0x15, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x25, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, - 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x08, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x19, 0x2e, 0x6d, 0x61, 0x63, 0x68, - 0x69, 0x6e, 0x65, 0x2e, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, 0x0a, 0x4b, 0x75, 0x62, 0x65, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0c, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x30, 0x01, 0x12, 0x31, 0x0a, 0x04, 0x4c, 0x69, - 0x73, 0x74, 0x12, 0x14, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x30, 0x01, 0x12, 0x40, 0x0a, - 0x09, 0x44, 0x69, 0x73, 0x6b, 0x55, 0x73, 0x61, 0x67, 0x65, 0x12, 0x19, 0x2e, 0x6d, 0x61, 0x63, - 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, - 0x44, 0x69, 0x73, 0x6b, 0x55, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x30, 0x01, 0x12, - 0x3b, 0x0a, 0x07, 0x4c, 0x6f, 0x61, 0x64, 0x41, 0x76, 0x67, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, + 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, + 0x0a, 0x08, 0x48, 0x6f, 0x73, 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x1a, 0x18, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4c, 0x6f, 0x61, - 0x64, 0x41, 0x76, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x04, - 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x14, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4c, - 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x30, 0x01, 0x12, 0x39, 0x0a, 0x06, 0x4d, 0x65, - 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x17, 0x2e, 0x6d, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, 0x0a, 0x06, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x17, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, - 0x65, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x51, 0x0a, 0x12, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x23, - 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x09, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, - 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1a, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x04, 0x52, 0x65, 0x61, 0x64, 0x12, 0x14, 0x2e, 0x6d, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x44, 0x61, 0x74, 0x61, - 0x30, 0x01, 0x12, 0x39, 0x0a, 0x06, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x12, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x17, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, - 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, - 0x07, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x17, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x18, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x74, - 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x08, 0x52, - 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x12, 0x18, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, - 0x65, 0x2e, 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x19, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x6f, 0x6c, 0x6c, - 0x62, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x05, - 0x52, 0x65, 0x73, 0x65, 0x74, 0x12, 0x15, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, - 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x6d, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x07, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x12, - 0x17, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, - 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x65, 0x0a, 0x1c, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x6f, 0x6f, 0x74, - 0x6b, 0x75, 0x62, 0x65, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x4b, - 0x65, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x2d, 0x2e, 0x6d, 0x61, 0x63, - 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x6f, 0x6f, 0x74, 0x6b, - 0x75, 0x62, 0x65, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x4b, 0x65, - 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0b, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x1a, 0x1c, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, - 0x0a, 0x0e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x12, 0x1e, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1f, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x4b, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x12, 0x1c, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1d, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, - 0x0a, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x6f, 0x70, 0x12, 0x1b, 0x2e, - 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, - 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6d, 0x61, 0x63, - 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x6f, 0x70, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x08, 0x53, 0x68, 0x75, 0x74, - 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x19, 0x2e, 0x6d, - 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x73, - 0x12, 0x15, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, - 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x41, 0x0a, 0x0a, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x12, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1b, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, - 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x07, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x12, 0x17, 0x2e, - 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, - 0x2e, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x3b, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x2e, 0x67, 0x6f, + 0x74, 0x79, 0x1a, 0x19, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x48, 0x6f, 0x73, + 0x74, 0x6e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x34, 0x0a, + 0x0a, 0x4b, 0x75, 0x62, 0x65, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, - 0x70, 0x74, 0x79, 0x1a, 0x18, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x56, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x59, 0x0a, - 0x0f, 0x63, 0x6f, 0x6d, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x61, 0x70, 0x69, - 0x42, 0x0a, 0x4d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x41, 0x70, 0x69, 0x50, 0x01, 0x5a, 0x38, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x61, 0x6c, 0x6f, 0x73, - 0x2d, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2f, 0x70, - 0x6b, 0x67, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, 0x79, 0x2f, 0x61, 0x70, 0x69, - 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x70, 0x74, 0x79, 0x1a, 0x0c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x44, 0x61, 0x74, + 0x61, 0x30, 0x01, 0x12, 0x31, 0x0a, 0x04, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x14, 0x2e, 0x6d, 0x61, + 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x11, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x46, 0x69, 0x6c, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x30, 0x01, 0x12, 0x40, 0x0a, 0x09, 0x44, 0x69, 0x73, 0x6b, 0x55, 0x73, + 0x61, 0x67, 0x65, 0x12, 0x19, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x44, 0x69, + 0x73, 0x6b, 0x55, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, + 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x55, 0x73, 0x61, + 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x30, 0x01, 0x12, 0x3b, 0x0a, 0x07, 0x4c, 0x6f, 0x61, 0x64, + 0x41, 0x76, 0x67, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x18, 0x2e, 0x6d, 0x61, + 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4c, 0x6f, 0x61, 0x64, 0x41, 0x76, 0x67, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x04, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x14, 0x2e, + 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x44, 0x61, 0x74, + 0x61, 0x30, 0x01, 0x12, 0x39, 0x0a, 0x06, 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x17, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, + 0x4d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x39, + 0x0a, 0x06, 0x4d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x1a, 0x17, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x4d, 0x6f, 0x75, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x12, 0x4e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x23, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x09, + 0x50, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, 0x65, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x1a, 0x1a, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x63, + 0x65, 0x73, 0x73, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, + 0x04, 0x52, 0x65, 0x61, 0x64, 0x12, 0x14, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, + 0x52, 0x65, 0x61, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0c, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x30, 0x01, 0x12, 0x39, 0x0a, 0x06, 0x52, + 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x17, 0x2e, + 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x62, 0x6f, 0x6f, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x12, 0x17, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x18, 0x2e, 0x6d, 0x61, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x08, 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, + 0x12, 0x18, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x6f, 0x6c, 0x6c, 0x62, + 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x6d, 0x61, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x6f, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x05, 0x52, 0x65, 0x73, 0x65, 0x74, 0x12, 0x15, + 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, + 0x52, 0x65, 0x73, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, + 0x07, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x17, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x18, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, 0x63, 0x6f, + 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x1c, 0x52, + 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x6f, 0x6f, 0x74, 0x6b, 0x75, 0x62, 0x65, 0x49, 0x6e, 0x69, + 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, + 0x70, 0x74, 0x79, 0x1a, 0x2d, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x52, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x6f, 0x6f, 0x74, 0x6b, 0x75, 0x62, 0x65, 0x49, 0x6e, 0x69, 0x74, + 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x43, 0x0a, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, + 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x6d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0e, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x52, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x1e, 0x2e, 0x6d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x6d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x65, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4b, 0x0a, 0x0c, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x1c, 0x2e, 0x6d, 0x61, 0x63, + 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, + 0x6e, 0x65, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x53, 0x74, 0x6f, 0x70, 0x12, 0x1b, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, + 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x6f, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x3d, 0x0a, 0x08, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x19, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, + 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x36, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x73, 0x12, 0x15, 0x2e, 0x6d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x0a, 0x53, 0x79, 0x73, 0x74, + 0x65, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1b, + 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x53, + 0x74, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x07, 0x55, + 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x12, 0x17, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, + 0x2e, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x18, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3b, 0x0a, 0x07, 0x56, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x18, 0x2e, 0x6d, + 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x78, 0x0a, 0x1b, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2b, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, + 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x2e, 0x47, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x42, 0x3a, 0x5a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, + 0x61, 0x6c, 0x6f, 0x73, 0x2d, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x74, 0x61, 0x6c, + 0x6f, 0x73, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, 0x79, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -9907,7 +10088,7 @@ func file_machine_machine_proto_rawDescGZIP() []byte { var ( file_machine_machine_proto_enumTypes = make([]protoimpl.EnumInfo, 7) - file_machine_machine_proto_msgTypes = make([]protoimpl.MessageInfo, 130) + file_machine_machine_proto_msgTypes = make([]protoimpl.MessageInfo, 132) file_machine_machine_proto_goTypes = []interface{}{ (SequenceEvent_Action)(0), // 0: machine.SequenceEvent.Action (PhaseEvent_Action)(0), // 1: machine.PhaseEvent.Action @@ -9984,281 +10165,289 @@ var ( (*Container)(nil), // 72: machine.Container (*ContainersResponse)(nil), // 73: machine.ContainersResponse (*DmesgRequest)(nil), // 74: machine.DmesgRequest - (*ProcessesRequest)(nil), // 75: machine.ProcessesRequest - (*ProcessesResponse)(nil), // 76: machine.ProcessesResponse - (*Process)(nil), // 77: machine.Process - (*ProcessInfo)(nil), // 78: machine.ProcessInfo - (*RestartRequest)(nil), // 79: machine.RestartRequest - (*Restart)(nil), // 80: machine.Restart - (*RestartResponse)(nil), // 81: machine.RestartResponse - (*StatsRequest)(nil), // 82: machine.StatsRequest - (*Stats)(nil), // 83: machine.Stats - (*StatsResponse)(nil), // 84: machine.StatsResponse - (*Stat)(nil), // 85: machine.Stat - (*Memory)(nil), // 86: machine.Memory - (*MemoryResponse)(nil), // 87: machine.MemoryResponse - (*MemInfo)(nil), // 88: machine.MemInfo - (*HostnameResponse)(nil), // 89: machine.HostnameResponse - (*Hostname)(nil), // 90: machine.Hostname - (*LoadAvgResponse)(nil), // 91: machine.LoadAvgResponse - (*LoadAvg)(nil), // 92: machine.LoadAvg - (*SystemStatResponse)(nil), // 93: machine.SystemStatResponse - (*SystemStat)(nil), // 94: machine.SystemStat - (*CPUStat)(nil), // 95: machine.CPUStat - (*SoftIRQStat)(nil), // 96: machine.SoftIRQStat - (*CPUInfoResponse)(nil), // 97: machine.CPUInfoResponse - (*CPUsInfo)(nil), // 98: machine.CPUsInfo - (*CPUInfo)(nil), // 99: machine.CPUInfo - (*NetworkDeviceStatsResponse)(nil), // 100: machine.NetworkDeviceStatsResponse - (*NetworkDeviceStats)(nil), // 101: machine.NetworkDeviceStats - (*NetDev)(nil), // 102: machine.NetDev - (*DiskStatsResponse)(nil), // 103: machine.DiskStatsResponse - (*DiskStats)(nil), // 104: machine.DiskStats - (*DiskStat)(nil), // 105: machine.DiskStat - (*EtcdLeaveClusterRequest)(nil), // 106: machine.EtcdLeaveClusterRequest - (*EtcdLeaveCluster)(nil), // 107: machine.EtcdLeaveCluster - (*EtcdLeaveClusterResponse)(nil), // 108: machine.EtcdLeaveClusterResponse - (*EtcdRemoveMemberRequest)(nil), // 109: machine.EtcdRemoveMemberRequest - (*EtcdRemoveMember)(nil), // 110: machine.EtcdRemoveMember - (*EtcdRemoveMemberResponse)(nil), // 111: machine.EtcdRemoveMemberResponse - (*EtcdForfeitLeadershipRequest)(nil), // 112: machine.EtcdForfeitLeadershipRequest - (*EtcdForfeitLeadership)(nil), // 113: machine.EtcdForfeitLeadership - (*EtcdForfeitLeadershipResponse)(nil), // 114: machine.EtcdForfeitLeadershipResponse - (*EtcdMemberListRequest)(nil), // 115: machine.EtcdMemberListRequest - (*EtcdMember)(nil), // 116: machine.EtcdMember - (*EtcdMembers)(nil), // 117: machine.EtcdMembers - (*EtcdMemberListResponse)(nil), // 118: machine.EtcdMemberListResponse - (*EtcdSnapshotRequest)(nil), // 119: machine.EtcdSnapshotRequest - (*EtcdRecover)(nil), // 120: machine.EtcdRecover - (*EtcdRecoverResponse)(nil), // 121: machine.EtcdRecoverResponse - (*RouteConfig)(nil), // 122: machine.RouteConfig - (*DHCPOptionsConfig)(nil), // 123: machine.DHCPOptionsConfig - (*NetworkDeviceConfig)(nil), // 124: machine.NetworkDeviceConfig - (*NetworkConfig)(nil), // 125: machine.NetworkConfig - (*InstallConfig)(nil), // 126: machine.InstallConfig - (*MachineConfig)(nil), // 127: machine.MachineConfig - (*ControlPlaneConfig)(nil), // 128: machine.ControlPlaneConfig - (*CNIConfig)(nil), // 129: machine.CNIConfig - (*ClusterNetworkConfig)(nil), // 130: machine.ClusterNetworkConfig - (*ClusterConfig)(nil), // 131: machine.ClusterConfig - (*GenerateConfigurationRequest)(nil), // 132: machine.GenerateConfigurationRequest - (*GenerateConfiguration)(nil), // 133: machine.GenerateConfiguration - (*GenerateConfigurationResponse)(nil), // 134: machine.GenerateConfigurationResponse - (*RemoveBootkubeInitializedKey)(nil), // 135: machine.RemoveBootkubeInitializedKey - (*RemoveBootkubeInitializedKeyResponse)(nil), // 136: machine.RemoveBootkubeInitializedKeyResponse - (*common.Metadata)(nil), // 137: common.Metadata - (*common.Error)(nil), // 138: common.Error - (*anypb.Any)(nil), // 139: google.protobuf.Any - (*timestamppb.Timestamp)(nil), // 140: google.protobuf.Timestamp - (common.ContainerDriver)(0), // 141: common.ContainerDriver - (*emptypb.Empty)(nil), // 142: google.protobuf.Empty - (*common.Data)(nil), // 143: common.Data + (*ProcessesResponse)(nil), // 75: machine.ProcessesResponse + (*Process)(nil), // 76: machine.Process + (*ProcessInfo)(nil), // 77: machine.ProcessInfo + (*RestartRequest)(nil), // 78: machine.RestartRequest + (*Restart)(nil), // 79: machine.Restart + (*RestartResponse)(nil), // 80: machine.RestartResponse + (*StatsRequest)(nil), // 81: machine.StatsRequest + (*Stats)(nil), // 82: machine.Stats + (*StatsResponse)(nil), // 83: machine.StatsResponse + (*Stat)(nil), // 84: machine.Stat + (*Memory)(nil), // 85: machine.Memory + (*MemoryResponse)(nil), // 86: machine.MemoryResponse + (*MemInfo)(nil), // 87: machine.MemInfo + (*HostnameResponse)(nil), // 88: machine.HostnameResponse + (*Hostname)(nil), // 89: machine.Hostname + (*LoadAvgResponse)(nil), // 90: machine.LoadAvgResponse + (*LoadAvg)(nil), // 91: machine.LoadAvg + (*SystemStatResponse)(nil), // 92: machine.SystemStatResponse + (*SystemStat)(nil), // 93: machine.SystemStat + (*CPUStat)(nil), // 94: machine.CPUStat + (*SoftIRQStat)(nil), // 95: machine.SoftIRQStat + (*CPUInfoResponse)(nil), // 96: machine.CPUInfoResponse + (*CPUsInfo)(nil), // 97: machine.CPUsInfo + (*CPUInfo)(nil), // 98: machine.CPUInfo + (*NetworkDeviceStatsResponse)(nil), // 99: machine.NetworkDeviceStatsResponse + (*NetworkDeviceStats)(nil), // 100: machine.NetworkDeviceStats + (*NetDev)(nil), // 101: machine.NetDev + (*DiskStatsResponse)(nil), // 102: machine.DiskStatsResponse + (*DiskStats)(nil), // 103: machine.DiskStats + (*DiskStat)(nil), // 104: machine.DiskStat + (*EtcdLeaveClusterRequest)(nil), // 105: machine.EtcdLeaveClusterRequest + (*EtcdLeaveCluster)(nil), // 106: machine.EtcdLeaveCluster + (*EtcdLeaveClusterResponse)(nil), // 107: machine.EtcdLeaveClusterResponse + (*EtcdRemoveMemberRequest)(nil), // 108: machine.EtcdRemoveMemberRequest + (*EtcdRemoveMember)(nil), // 109: machine.EtcdRemoveMember + (*EtcdRemoveMemberResponse)(nil), // 110: machine.EtcdRemoveMemberResponse + (*EtcdForfeitLeadershipRequest)(nil), // 111: machine.EtcdForfeitLeadershipRequest + (*EtcdForfeitLeadership)(nil), // 112: machine.EtcdForfeitLeadership + (*EtcdForfeitLeadershipResponse)(nil), // 113: machine.EtcdForfeitLeadershipResponse + (*EtcdMemberListRequest)(nil), // 114: machine.EtcdMemberListRequest + (*EtcdMember)(nil), // 115: machine.EtcdMember + (*EtcdMembers)(nil), // 116: machine.EtcdMembers + (*EtcdMemberListResponse)(nil), // 117: machine.EtcdMemberListResponse + (*EtcdSnapshotRequest)(nil), // 118: machine.EtcdSnapshotRequest + (*EtcdRecover)(nil), // 119: machine.EtcdRecover + (*EtcdRecoverResponse)(nil), // 120: machine.EtcdRecoverResponse + (*RouteConfig)(nil), // 121: machine.RouteConfig + (*DHCPOptionsConfig)(nil), // 122: machine.DHCPOptionsConfig + (*NetworkDeviceConfig)(nil), // 123: machine.NetworkDeviceConfig + (*NetworkConfig)(nil), // 124: machine.NetworkConfig + (*InstallConfig)(nil), // 125: machine.InstallConfig + (*MachineConfig)(nil), // 126: machine.MachineConfig + (*ControlPlaneConfig)(nil), // 127: machine.ControlPlaneConfig + (*CNIConfig)(nil), // 128: machine.CNIConfig + (*ClusterNetworkConfig)(nil), // 129: machine.ClusterNetworkConfig + (*ClusterConfig)(nil), // 130: machine.ClusterConfig + (*GenerateConfigurationRequest)(nil), // 131: machine.GenerateConfigurationRequest + (*GenerateConfiguration)(nil), // 132: machine.GenerateConfiguration + (*GenerateConfigurationResponse)(nil), // 133: machine.GenerateConfigurationResponse + (*RemoveBootkubeInitializedKey)(nil), // 134: machine.RemoveBootkubeInitializedKey + (*RemoveBootkubeInitializedKeyResponse)(nil), // 135: machine.RemoveBootkubeInitializedKeyResponse + (*GenerateClientConfigurationRequest)(nil), // 136: machine.GenerateClientConfigurationRequest + (*GenerateClientConfiguration)(nil), // 137: machine.GenerateClientConfiguration + (*GenerateClientConfigurationResponse)(nil), // 138: machine.GenerateClientConfigurationResponse + (*common.Metadata)(nil), // 139: common.Metadata + (*common.Error)(nil), // 140: common.Error + (*anypb.Any)(nil), // 141: google.protobuf.Any + (*timestamppb.Timestamp)(nil), // 142: google.protobuf.Timestamp + (common.ContainerDriver)(0), // 143: common.ContainerDriver + (*durationpb.Duration)(nil), // 144: google.protobuf.Duration + (*emptypb.Empty)(nil), // 145: google.protobuf.Empty + (*common.Data)(nil), // 146: common.Data } ) var file_machine_machine_proto_depIdxs = []int32{ - 137, // 0: machine.ApplyConfiguration.metadata:type_name -> common.Metadata + 139, // 0: machine.ApplyConfiguration.metadata:type_name -> common.Metadata 8, // 1: machine.ApplyConfigurationResponse.messages:type_name -> machine.ApplyConfiguration - 137, // 2: machine.Reboot.metadata:type_name -> common.Metadata + 139, // 2: machine.Reboot.metadata:type_name -> common.Metadata 10, // 3: machine.RebootResponse.messages:type_name -> machine.Reboot - 137, // 4: machine.Bootstrap.metadata:type_name -> common.Metadata + 139, // 4: machine.Bootstrap.metadata:type_name -> common.Metadata 13, // 5: machine.BootstrapResponse.messages:type_name -> machine.Bootstrap 0, // 6: machine.SequenceEvent.action:type_name -> machine.SequenceEvent.Action - 138, // 7: machine.SequenceEvent.error:type_name -> common.Error + 140, // 7: machine.SequenceEvent.error:type_name -> common.Error 1, // 8: machine.PhaseEvent.action:type_name -> machine.PhaseEvent.Action 2, // 9: machine.TaskEvent.action:type_name -> machine.TaskEvent.Action 3, // 10: machine.ServiceStateEvent.action:type_name -> machine.ServiceStateEvent.Action 39, // 11: machine.ServiceStateEvent.health:type_name -> machine.ServiceHealth - 137, // 12: machine.Event.metadata:type_name -> common.Metadata - 139, // 13: machine.Event.data:type_name -> google.protobuf.Any + 139, // 12: machine.Event.metadata:type_name -> common.Metadata + 141, // 13: machine.Event.data:type_name -> google.protobuf.Any 22, // 14: machine.ResetRequest.system_partitions_to_wipe:type_name -> machine.ResetPartitionSpec - 137, // 15: machine.Reset.metadata:type_name -> common.Metadata + 139, // 15: machine.Reset.metadata:type_name -> common.Metadata 24, // 16: machine.ResetResponse.messages:type_name -> machine.Reset 4, // 17: machine.RecoverRequest.source:type_name -> machine.RecoverRequest.Source - 137, // 18: machine.Recover.metadata:type_name -> common.Metadata + 139, // 18: machine.Recover.metadata:type_name -> common.Metadata 27, // 19: machine.RecoverResponse.messages:type_name -> machine.Recover - 137, // 20: machine.Shutdown.metadata:type_name -> common.Metadata + 139, // 20: machine.Shutdown.metadata:type_name -> common.Metadata 29, // 21: machine.ShutdownResponse.messages:type_name -> machine.Shutdown - 137, // 22: machine.Upgrade.metadata:type_name -> common.Metadata + 139, // 22: machine.Upgrade.metadata:type_name -> common.Metadata 32, // 23: machine.UpgradeResponse.messages:type_name -> machine.Upgrade - 137, // 24: machine.ServiceList.metadata:type_name -> common.Metadata + 139, // 24: machine.ServiceList.metadata:type_name -> common.Metadata 36, // 25: machine.ServiceList.services:type_name -> machine.ServiceInfo 34, // 26: machine.ServiceListResponse.messages:type_name -> machine.ServiceList 37, // 27: machine.ServiceInfo.events:type_name -> machine.ServiceEvents 39, // 28: machine.ServiceInfo.health:type_name -> machine.ServiceHealth 38, // 29: machine.ServiceEvents.events:type_name -> machine.ServiceEvent - 140, // 30: machine.ServiceEvent.ts:type_name -> google.protobuf.Timestamp - 140, // 31: machine.ServiceHealth.last_change:type_name -> google.protobuf.Timestamp - 137, // 32: machine.ServiceStart.metadata:type_name -> common.Metadata + 142, // 30: machine.ServiceEvent.ts:type_name -> google.protobuf.Timestamp + 142, // 31: machine.ServiceHealth.last_change:type_name -> google.protobuf.Timestamp + 139, // 32: machine.ServiceStart.metadata:type_name -> common.Metadata 41, // 33: machine.ServiceStartResponse.messages:type_name -> machine.ServiceStart - 137, // 34: machine.ServiceStop.metadata:type_name -> common.Metadata + 139, // 34: machine.ServiceStop.metadata:type_name -> common.Metadata 44, // 35: machine.ServiceStopResponse.messages:type_name -> machine.ServiceStop - 137, // 36: machine.ServiceRestart.metadata:type_name -> common.Metadata + 139, // 36: machine.ServiceRestart.metadata:type_name -> common.Metadata 47, // 37: machine.ServiceRestartResponse.messages:type_name -> machine.ServiceRestart 5, // 38: machine.ListRequest.types:type_name -> machine.ListRequest.Type - 137, // 39: machine.FileInfo.metadata:type_name -> common.Metadata - 137, // 40: machine.DiskUsageInfo.metadata:type_name -> common.Metadata - 137, // 41: machine.Mounts.metadata:type_name -> common.Metadata + 139, // 39: machine.FileInfo.metadata:type_name -> common.Metadata + 139, // 40: machine.DiskUsageInfo.metadata:type_name -> common.Metadata + 139, // 41: machine.Mounts.metadata:type_name -> common.Metadata 60, // 42: machine.Mounts.stats:type_name -> machine.MountStat 58, // 43: machine.MountsResponse.messages:type_name -> machine.Mounts - 137, // 44: machine.Version.metadata:type_name -> common.Metadata + 139, // 44: machine.Version.metadata:type_name -> common.Metadata 63, // 45: machine.Version.version:type_name -> machine.VersionInfo 64, // 46: machine.Version.platform:type_name -> machine.PlatformInfo 61, // 47: machine.VersionResponse.messages:type_name -> machine.Version - 141, // 48: machine.LogsRequest.driver:type_name -> common.ContainerDriver - 137, // 49: machine.Rollback.metadata:type_name -> common.Metadata + 143, // 48: machine.LogsRequest.driver:type_name -> common.ContainerDriver + 139, // 49: machine.Rollback.metadata:type_name -> common.Metadata 68, // 50: machine.RollbackResponse.messages:type_name -> machine.Rollback - 141, // 51: machine.ContainersRequest.driver:type_name -> common.ContainerDriver - 137, // 52: machine.Container.metadata:type_name -> common.Metadata + 143, // 51: machine.ContainersRequest.driver:type_name -> common.ContainerDriver + 139, // 52: machine.Container.metadata:type_name -> common.Metadata 71, // 53: machine.Container.containers:type_name -> machine.ContainerInfo 72, // 54: machine.ContainersResponse.messages:type_name -> machine.Container - 77, // 55: machine.ProcessesResponse.messages:type_name -> machine.Process - 137, // 56: machine.Process.metadata:type_name -> common.Metadata - 78, // 57: machine.Process.processes:type_name -> machine.ProcessInfo - 141, // 58: machine.RestartRequest.driver:type_name -> common.ContainerDriver - 137, // 59: machine.Restart.metadata:type_name -> common.Metadata - 80, // 60: machine.RestartResponse.messages:type_name -> machine.Restart - 141, // 61: machine.StatsRequest.driver:type_name -> common.ContainerDriver - 137, // 62: machine.Stats.metadata:type_name -> common.Metadata - 85, // 63: machine.Stats.stats:type_name -> machine.Stat - 83, // 64: machine.StatsResponse.messages:type_name -> machine.Stats - 137, // 65: machine.Memory.metadata:type_name -> common.Metadata - 88, // 66: machine.Memory.meminfo:type_name -> machine.MemInfo - 86, // 67: machine.MemoryResponse.messages:type_name -> machine.Memory - 90, // 68: machine.HostnameResponse.messages:type_name -> machine.Hostname - 137, // 69: machine.Hostname.metadata:type_name -> common.Metadata - 92, // 70: machine.LoadAvgResponse.messages:type_name -> machine.LoadAvg - 137, // 71: machine.LoadAvg.metadata:type_name -> common.Metadata - 94, // 72: machine.SystemStatResponse.messages:type_name -> machine.SystemStat - 137, // 73: machine.SystemStat.metadata:type_name -> common.Metadata - 95, // 74: machine.SystemStat.cpu_total:type_name -> machine.CPUStat - 95, // 75: machine.SystemStat.cpu:type_name -> machine.CPUStat - 96, // 76: machine.SystemStat.soft_irq:type_name -> machine.SoftIRQStat - 98, // 77: machine.CPUInfoResponse.messages:type_name -> machine.CPUsInfo - 137, // 78: machine.CPUsInfo.metadata:type_name -> common.Metadata - 99, // 79: machine.CPUsInfo.cpu_info:type_name -> machine.CPUInfo - 101, // 80: machine.NetworkDeviceStatsResponse.messages:type_name -> machine.NetworkDeviceStats - 137, // 81: machine.NetworkDeviceStats.metadata:type_name -> common.Metadata - 102, // 82: machine.NetworkDeviceStats.total:type_name -> machine.NetDev - 102, // 83: machine.NetworkDeviceStats.devices:type_name -> machine.NetDev - 104, // 84: machine.DiskStatsResponse.messages:type_name -> machine.DiskStats - 137, // 85: machine.DiskStats.metadata:type_name -> common.Metadata - 105, // 86: machine.DiskStats.total:type_name -> machine.DiskStat - 105, // 87: machine.DiskStats.devices:type_name -> machine.DiskStat - 137, // 88: machine.EtcdLeaveCluster.metadata:type_name -> common.Metadata - 107, // 89: machine.EtcdLeaveClusterResponse.messages:type_name -> machine.EtcdLeaveCluster - 137, // 90: machine.EtcdRemoveMember.metadata:type_name -> common.Metadata - 110, // 91: machine.EtcdRemoveMemberResponse.messages:type_name -> machine.EtcdRemoveMember - 137, // 92: machine.EtcdForfeitLeadership.metadata:type_name -> common.Metadata - 113, // 93: machine.EtcdForfeitLeadershipResponse.messages:type_name -> machine.EtcdForfeitLeadership - 137, // 94: machine.EtcdMembers.metadata:type_name -> common.Metadata - 116, // 95: machine.EtcdMembers.members:type_name -> machine.EtcdMember - 117, // 96: machine.EtcdMemberListResponse.messages:type_name -> machine.EtcdMembers - 137, // 97: machine.EtcdRecover.metadata:type_name -> common.Metadata - 120, // 98: machine.EtcdRecoverResponse.messages:type_name -> machine.EtcdRecover - 123, // 99: machine.NetworkDeviceConfig.dhcp_options:type_name -> machine.DHCPOptionsConfig - 122, // 100: machine.NetworkDeviceConfig.routes:type_name -> machine.RouteConfig - 124, // 101: machine.NetworkConfig.interfaces:type_name -> machine.NetworkDeviceConfig + 76, // 55: machine.ProcessesResponse.messages:type_name -> machine.Process + 139, // 56: machine.Process.metadata:type_name -> common.Metadata + 77, // 57: machine.Process.processes:type_name -> machine.ProcessInfo + 143, // 58: machine.RestartRequest.driver:type_name -> common.ContainerDriver + 139, // 59: machine.Restart.metadata:type_name -> common.Metadata + 79, // 60: machine.RestartResponse.messages:type_name -> machine.Restart + 143, // 61: machine.StatsRequest.driver:type_name -> common.ContainerDriver + 139, // 62: machine.Stats.metadata:type_name -> common.Metadata + 84, // 63: machine.Stats.stats:type_name -> machine.Stat + 82, // 64: machine.StatsResponse.messages:type_name -> machine.Stats + 139, // 65: machine.Memory.metadata:type_name -> common.Metadata + 87, // 66: machine.Memory.meminfo:type_name -> machine.MemInfo + 85, // 67: machine.MemoryResponse.messages:type_name -> machine.Memory + 89, // 68: machine.HostnameResponse.messages:type_name -> machine.Hostname + 139, // 69: machine.Hostname.metadata:type_name -> common.Metadata + 91, // 70: machine.LoadAvgResponse.messages:type_name -> machine.LoadAvg + 139, // 71: machine.LoadAvg.metadata:type_name -> common.Metadata + 93, // 72: machine.SystemStatResponse.messages:type_name -> machine.SystemStat + 139, // 73: machine.SystemStat.metadata:type_name -> common.Metadata + 94, // 74: machine.SystemStat.cpu_total:type_name -> machine.CPUStat + 94, // 75: machine.SystemStat.cpu:type_name -> machine.CPUStat + 95, // 76: machine.SystemStat.soft_irq:type_name -> machine.SoftIRQStat + 97, // 77: machine.CPUInfoResponse.messages:type_name -> machine.CPUsInfo + 139, // 78: machine.CPUsInfo.metadata:type_name -> common.Metadata + 98, // 79: machine.CPUsInfo.cpu_info:type_name -> machine.CPUInfo + 100, // 80: machine.NetworkDeviceStatsResponse.messages:type_name -> machine.NetworkDeviceStats + 139, // 81: machine.NetworkDeviceStats.metadata:type_name -> common.Metadata + 101, // 82: machine.NetworkDeviceStats.total:type_name -> machine.NetDev + 101, // 83: machine.NetworkDeviceStats.devices:type_name -> machine.NetDev + 103, // 84: machine.DiskStatsResponse.messages:type_name -> machine.DiskStats + 139, // 85: machine.DiskStats.metadata:type_name -> common.Metadata + 104, // 86: machine.DiskStats.total:type_name -> machine.DiskStat + 104, // 87: machine.DiskStats.devices:type_name -> machine.DiskStat + 139, // 88: machine.EtcdLeaveCluster.metadata:type_name -> common.Metadata + 106, // 89: machine.EtcdLeaveClusterResponse.messages:type_name -> machine.EtcdLeaveCluster + 139, // 90: machine.EtcdRemoveMember.metadata:type_name -> common.Metadata + 109, // 91: machine.EtcdRemoveMemberResponse.messages:type_name -> machine.EtcdRemoveMember + 139, // 92: machine.EtcdForfeitLeadership.metadata:type_name -> common.Metadata + 112, // 93: machine.EtcdForfeitLeadershipResponse.messages:type_name -> machine.EtcdForfeitLeadership + 139, // 94: machine.EtcdMembers.metadata:type_name -> common.Metadata + 115, // 95: machine.EtcdMembers.members:type_name -> machine.EtcdMember + 116, // 96: machine.EtcdMemberListResponse.messages:type_name -> machine.EtcdMembers + 139, // 97: machine.EtcdRecover.metadata:type_name -> common.Metadata + 119, // 98: machine.EtcdRecoverResponse.messages:type_name -> machine.EtcdRecover + 122, // 99: machine.NetworkDeviceConfig.dhcp_options:type_name -> machine.DHCPOptionsConfig + 121, // 100: machine.NetworkDeviceConfig.routes:type_name -> machine.RouteConfig + 123, // 101: machine.NetworkConfig.interfaces:type_name -> machine.NetworkDeviceConfig 6, // 102: machine.MachineConfig.type:type_name -> machine.MachineConfig.MachineType - 126, // 103: machine.MachineConfig.install_config:type_name -> machine.InstallConfig - 125, // 104: machine.MachineConfig.network_config:type_name -> machine.NetworkConfig - 129, // 105: machine.ClusterNetworkConfig.cni_config:type_name -> machine.CNIConfig - 128, // 106: machine.ClusterConfig.control_plane:type_name -> machine.ControlPlaneConfig - 130, // 107: machine.ClusterConfig.cluster_network:type_name -> machine.ClusterNetworkConfig - 131, // 108: machine.GenerateConfigurationRequest.cluster_config:type_name -> machine.ClusterConfig - 127, // 109: machine.GenerateConfigurationRequest.machine_config:type_name -> machine.MachineConfig - 140, // 110: machine.GenerateConfigurationRequest.override_time:type_name -> google.protobuf.Timestamp - 137, // 111: machine.GenerateConfiguration.metadata:type_name -> common.Metadata - 133, // 112: machine.GenerateConfigurationResponse.messages:type_name -> machine.GenerateConfiguration - 137, // 113: machine.RemoveBootkubeInitializedKey.metadata:type_name -> common.Metadata - 135, // 114: machine.RemoveBootkubeInitializedKeyResponse.messages:type_name -> machine.RemoveBootkubeInitializedKey - 7, // 115: machine.MachineService.ApplyConfiguration:input_type -> machine.ApplyConfigurationRequest - 12, // 116: machine.MachineService.Bootstrap:input_type -> machine.BootstrapRequest - 70, // 117: machine.MachineService.Containers:input_type -> machine.ContainersRequest - 53, // 118: machine.MachineService.Copy:input_type -> machine.CopyRequest - 142, // 119: machine.MachineService.CPUInfo:input_type -> google.protobuf.Empty - 142, // 120: machine.MachineService.DiskStats:input_type -> google.protobuf.Empty - 74, // 121: machine.MachineService.Dmesg:input_type -> machine.DmesgRequest - 20, // 122: machine.MachineService.Events:input_type -> machine.EventsRequest - 115, // 123: machine.MachineService.EtcdMemberList:input_type -> machine.EtcdMemberListRequest - 109, // 124: machine.MachineService.EtcdRemoveMember:input_type -> machine.EtcdRemoveMemberRequest - 106, // 125: machine.MachineService.EtcdLeaveCluster:input_type -> machine.EtcdLeaveClusterRequest - 112, // 126: machine.MachineService.EtcdForfeitLeadership:input_type -> machine.EtcdForfeitLeadershipRequest - 143, // 127: machine.MachineService.EtcdRecover:input_type -> common.Data - 119, // 128: machine.MachineService.EtcdSnapshot:input_type -> machine.EtcdSnapshotRequest - 132, // 129: machine.MachineService.GenerateConfiguration:input_type -> machine.GenerateConfigurationRequest - 142, // 130: machine.MachineService.Hostname:input_type -> google.protobuf.Empty - 142, // 131: machine.MachineService.Kubeconfig:input_type -> google.protobuf.Empty - 54, // 132: machine.MachineService.List:input_type -> machine.ListRequest - 55, // 133: machine.MachineService.DiskUsage:input_type -> machine.DiskUsageRequest - 142, // 134: machine.MachineService.LoadAvg:input_type -> google.protobuf.Empty - 65, // 135: machine.MachineService.Logs:input_type -> machine.LogsRequest - 142, // 136: machine.MachineService.Memory:input_type -> google.protobuf.Empty - 142, // 137: machine.MachineService.Mounts:input_type -> google.protobuf.Empty - 142, // 138: machine.MachineService.NetworkDeviceStats:input_type -> google.protobuf.Empty - 142, // 139: machine.MachineService.Processes:input_type -> google.protobuf.Empty - 66, // 140: machine.MachineService.Read:input_type -> machine.ReadRequest - 142, // 141: machine.MachineService.Reboot:input_type -> google.protobuf.Empty - 79, // 142: machine.MachineService.Restart:input_type -> machine.RestartRequest - 67, // 143: machine.MachineService.Rollback:input_type -> machine.RollbackRequest - 23, // 144: machine.MachineService.Reset:input_type -> machine.ResetRequest - 26, // 145: machine.MachineService.Recover:input_type -> machine.RecoverRequest - 142, // 146: machine.MachineService.RemoveBootkubeInitializedKey:input_type -> google.protobuf.Empty - 142, // 147: machine.MachineService.ServiceList:input_type -> google.protobuf.Empty - 46, // 148: machine.MachineService.ServiceRestart:input_type -> machine.ServiceRestartRequest - 40, // 149: machine.MachineService.ServiceStart:input_type -> machine.ServiceStartRequest - 43, // 150: machine.MachineService.ServiceStop:input_type -> machine.ServiceStopRequest - 142, // 151: machine.MachineService.Shutdown:input_type -> google.protobuf.Empty - 82, // 152: machine.MachineService.Stats:input_type -> machine.StatsRequest - 142, // 153: machine.MachineService.SystemStat:input_type -> google.protobuf.Empty - 31, // 154: machine.MachineService.Upgrade:input_type -> machine.UpgradeRequest - 142, // 155: machine.MachineService.Version:input_type -> google.protobuf.Empty - 9, // 156: machine.MachineService.ApplyConfiguration:output_type -> machine.ApplyConfigurationResponse - 14, // 157: machine.MachineService.Bootstrap:output_type -> machine.BootstrapResponse - 73, // 158: machine.MachineService.Containers:output_type -> machine.ContainersResponse - 143, // 159: machine.MachineService.Copy:output_type -> common.Data - 97, // 160: machine.MachineService.CPUInfo:output_type -> machine.CPUInfoResponse - 103, // 161: machine.MachineService.DiskStats:output_type -> machine.DiskStatsResponse - 143, // 162: machine.MachineService.Dmesg:output_type -> common.Data - 21, // 163: machine.MachineService.Events:output_type -> machine.Event - 118, // 164: machine.MachineService.EtcdMemberList:output_type -> machine.EtcdMemberListResponse - 111, // 165: machine.MachineService.EtcdRemoveMember:output_type -> machine.EtcdRemoveMemberResponse - 108, // 166: machine.MachineService.EtcdLeaveCluster:output_type -> machine.EtcdLeaveClusterResponse - 114, // 167: machine.MachineService.EtcdForfeitLeadership:output_type -> machine.EtcdForfeitLeadershipResponse - 121, // 168: machine.MachineService.EtcdRecover:output_type -> machine.EtcdRecoverResponse - 143, // 169: machine.MachineService.EtcdSnapshot:output_type -> common.Data - 134, // 170: machine.MachineService.GenerateConfiguration:output_type -> machine.GenerateConfigurationResponse - 89, // 171: machine.MachineService.Hostname:output_type -> machine.HostnameResponse - 143, // 172: machine.MachineService.Kubeconfig:output_type -> common.Data - 56, // 173: machine.MachineService.List:output_type -> machine.FileInfo - 57, // 174: machine.MachineService.DiskUsage:output_type -> machine.DiskUsageInfo - 91, // 175: machine.MachineService.LoadAvg:output_type -> machine.LoadAvgResponse - 143, // 176: machine.MachineService.Logs:output_type -> common.Data - 87, // 177: machine.MachineService.Memory:output_type -> machine.MemoryResponse - 59, // 178: machine.MachineService.Mounts:output_type -> machine.MountsResponse - 100, // 179: machine.MachineService.NetworkDeviceStats:output_type -> machine.NetworkDeviceStatsResponse - 76, // 180: machine.MachineService.Processes:output_type -> machine.ProcessesResponse - 143, // 181: machine.MachineService.Read:output_type -> common.Data - 11, // 182: machine.MachineService.Reboot:output_type -> machine.RebootResponse - 81, // 183: machine.MachineService.Restart:output_type -> machine.RestartResponse - 69, // 184: machine.MachineService.Rollback:output_type -> machine.RollbackResponse - 25, // 185: machine.MachineService.Reset:output_type -> machine.ResetResponse - 28, // 186: machine.MachineService.Recover:output_type -> machine.RecoverResponse - 136, // 187: machine.MachineService.RemoveBootkubeInitializedKey:output_type -> machine.RemoveBootkubeInitializedKeyResponse - 35, // 188: machine.MachineService.ServiceList:output_type -> machine.ServiceListResponse - 48, // 189: machine.MachineService.ServiceRestart:output_type -> machine.ServiceRestartResponse - 42, // 190: machine.MachineService.ServiceStart:output_type -> machine.ServiceStartResponse - 45, // 191: machine.MachineService.ServiceStop:output_type -> machine.ServiceStopResponse - 30, // 192: machine.MachineService.Shutdown:output_type -> machine.ShutdownResponse - 84, // 193: machine.MachineService.Stats:output_type -> machine.StatsResponse - 93, // 194: machine.MachineService.SystemStat:output_type -> machine.SystemStatResponse - 33, // 195: machine.MachineService.Upgrade:output_type -> machine.UpgradeResponse - 62, // 196: machine.MachineService.Version:output_type -> machine.VersionResponse - 156, // [156:197] is the sub-list for method output_type - 115, // [115:156] is the sub-list for method input_type - 115, // [115:115] is the sub-list for extension type_name - 115, // [115:115] is the sub-list for extension extendee - 0, // [0:115] is the sub-list for field type_name + 125, // 103: machine.MachineConfig.install_config:type_name -> machine.InstallConfig + 124, // 104: machine.MachineConfig.network_config:type_name -> machine.NetworkConfig + 128, // 105: machine.ClusterNetworkConfig.cni_config:type_name -> machine.CNIConfig + 127, // 106: machine.ClusterConfig.control_plane:type_name -> machine.ControlPlaneConfig + 129, // 107: machine.ClusterConfig.cluster_network:type_name -> machine.ClusterNetworkConfig + 130, // 108: machine.GenerateConfigurationRequest.cluster_config:type_name -> machine.ClusterConfig + 126, // 109: machine.GenerateConfigurationRequest.machine_config:type_name -> machine.MachineConfig + 142, // 110: machine.GenerateConfigurationRequest.override_time:type_name -> google.protobuf.Timestamp + 139, // 111: machine.GenerateConfiguration.metadata:type_name -> common.Metadata + 132, // 112: machine.GenerateConfigurationResponse.messages:type_name -> machine.GenerateConfiguration + 139, // 113: machine.RemoveBootkubeInitializedKey.metadata:type_name -> common.Metadata + 134, // 114: machine.RemoveBootkubeInitializedKeyResponse.messages:type_name -> machine.RemoveBootkubeInitializedKey + 144, // 115: machine.GenerateClientConfigurationRequest.crt_ttl:type_name -> google.protobuf.Duration + 139, // 116: machine.GenerateClientConfiguration.metadata:type_name -> common.Metadata + 137, // 117: machine.GenerateClientConfigurationResponse.messages:type_name -> machine.GenerateClientConfiguration + 7, // 118: machine.MachineService.ApplyConfiguration:input_type -> machine.ApplyConfigurationRequest + 12, // 119: machine.MachineService.Bootstrap:input_type -> machine.BootstrapRequest + 70, // 120: machine.MachineService.Containers:input_type -> machine.ContainersRequest + 53, // 121: machine.MachineService.Copy:input_type -> machine.CopyRequest + 145, // 122: machine.MachineService.CPUInfo:input_type -> google.protobuf.Empty + 145, // 123: machine.MachineService.DiskStats:input_type -> google.protobuf.Empty + 74, // 124: machine.MachineService.Dmesg:input_type -> machine.DmesgRequest + 20, // 125: machine.MachineService.Events:input_type -> machine.EventsRequest + 114, // 126: machine.MachineService.EtcdMemberList:input_type -> machine.EtcdMemberListRequest + 108, // 127: machine.MachineService.EtcdRemoveMember:input_type -> machine.EtcdRemoveMemberRequest + 105, // 128: machine.MachineService.EtcdLeaveCluster:input_type -> machine.EtcdLeaveClusterRequest + 111, // 129: machine.MachineService.EtcdForfeitLeadership:input_type -> machine.EtcdForfeitLeadershipRequest + 146, // 130: machine.MachineService.EtcdRecover:input_type -> common.Data + 118, // 131: machine.MachineService.EtcdSnapshot:input_type -> machine.EtcdSnapshotRequest + 131, // 132: machine.MachineService.GenerateConfiguration:input_type -> machine.GenerateConfigurationRequest + 145, // 133: machine.MachineService.Hostname:input_type -> google.protobuf.Empty + 145, // 134: machine.MachineService.Kubeconfig:input_type -> google.protobuf.Empty + 54, // 135: machine.MachineService.List:input_type -> machine.ListRequest + 55, // 136: machine.MachineService.DiskUsage:input_type -> machine.DiskUsageRequest + 145, // 137: machine.MachineService.LoadAvg:input_type -> google.protobuf.Empty + 65, // 138: machine.MachineService.Logs:input_type -> machine.LogsRequest + 145, // 139: machine.MachineService.Memory:input_type -> google.protobuf.Empty + 145, // 140: machine.MachineService.Mounts:input_type -> google.protobuf.Empty + 145, // 141: machine.MachineService.NetworkDeviceStats:input_type -> google.protobuf.Empty + 145, // 142: machine.MachineService.Processes:input_type -> google.protobuf.Empty + 66, // 143: machine.MachineService.Read:input_type -> machine.ReadRequest + 145, // 144: machine.MachineService.Reboot:input_type -> google.protobuf.Empty + 78, // 145: machine.MachineService.Restart:input_type -> machine.RestartRequest + 67, // 146: machine.MachineService.Rollback:input_type -> machine.RollbackRequest + 23, // 147: machine.MachineService.Reset:input_type -> machine.ResetRequest + 26, // 148: machine.MachineService.Recover:input_type -> machine.RecoverRequest + 145, // 149: machine.MachineService.RemoveBootkubeInitializedKey:input_type -> google.protobuf.Empty + 145, // 150: machine.MachineService.ServiceList:input_type -> google.protobuf.Empty + 46, // 151: machine.MachineService.ServiceRestart:input_type -> machine.ServiceRestartRequest + 40, // 152: machine.MachineService.ServiceStart:input_type -> machine.ServiceStartRequest + 43, // 153: machine.MachineService.ServiceStop:input_type -> machine.ServiceStopRequest + 145, // 154: machine.MachineService.Shutdown:input_type -> google.protobuf.Empty + 81, // 155: machine.MachineService.Stats:input_type -> machine.StatsRequest + 145, // 156: machine.MachineService.SystemStat:input_type -> google.protobuf.Empty + 31, // 157: machine.MachineService.Upgrade:input_type -> machine.UpgradeRequest + 145, // 158: machine.MachineService.Version:input_type -> google.protobuf.Empty + 136, // 159: machine.MachineService.GenerateClientConfiguration:input_type -> machine.GenerateClientConfigurationRequest + 9, // 160: machine.MachineService.ApplyConfiguration:output_type -> machine.ApplyConfigurationResponse + 14, // 161: machine.MachineService.Bootstrap:output_type -> machine.BootstrapResponse + 73, // 162: machine.MachineService.Containers:output_type -> machine.ContainersResponse + 146, // 163: machine.MachineService.Copy:output_type -> common.Data + 96, // 164: machine.MachineService.CPUInfo:output_type -> machine.CPUInfoResponse + 102, // 165: machine.MachineService.DiskStats:output_type -> machine.DiskStatsResponse + 146, // 166: machine.MachineService.Dmesg:output_type -> common.Data + 21, // 167: machine.MachineService.Events:output_type -> machine.Event + 117, // 168: machine.MachineService.EtcdMemberList:output_type -> machine.EtcdMemberListResponse + 110, // 169: machine.MachineService.EtcdRemoveMember:output_type -> machine.EtcdRemoveMemberResponse + 107, // 170: machine.MachineService.EtcdLeaveCluster:output_type -> machine.EtcdLeaveClusterResponse + 113, // 171: machine.MachineService.EtcdForfeitLeadership:output_type -> machine.EtcdForfeitLeadershipResponse + 120, // 172: machine.MachineService.EtcdRecover:output_type -> machine.EtcdRecoverResponse + 146, // 173: machine.MachineService.EtcdSnapshot:output_type -> common.Data + 133, // 174: machine.MachineService.GenerateConfiguration:output_type -> machine.GenerateConfigurationResponse + 88, // 175: machine.MachineService.Hostname:output_type -> machine.HostnameResponse + 146, // 176: machine.MachineService.Kubeconfig:output_type -> common.Data + 56, // 177: machine.MachineService.List:output_type -> machine.FileInfo + 57, // 178: machine.MachineService.DiskUsage:output_type -> machine.DiskUsageInfo + 90, // 179: machine.MachineService.LoadAvg:output_type -> machine.LoadAvgResponse + 146, // 180: machine.MachineService.Logs:output_type -> common.Data + 86, // 181: machine.MachineService.Memory:output_type -> machine.MemoryResponse + 59, // 182: machine.MachineService.Mounts:output_type -> machine.MountsResponse + 99, // 183: machine.MachineService.NetworkDeviceStats:output_type -> machine.NetworkDeviceStatsResponse + 75, // 184: machine.MachineService.Processes:output_type -> machine.ProcessesResponse + 146, // 185: machine.MachineService.Read:output_type -> common.Data + 11, // 186: machine.MachineService.Reboot:output_type -> machine.RebootResponse + 80, // 187: machine.MachineService.Restart:output_type -> machine.RestartResponse + 69, // 188: machine.MachineService.Rollback:output_type -> machine.RollbackResponse + 25, // 189: machine.MachineService.Reset:output_type -> machine.ResetResponse + 28, // 190: machine.MachineService.Recover:output_type -> machine.RecoverResponse + 135, // 191: machine.MachineService.RemoveBootkubeInitializedKey:output_type -> machine.RemoveBootkubeInitializedKeyResponse + 35, // 192: machine.MachineService.ServiceList:output_type -> machine.ServiceListResponse + 48, // 193: machine.MachineService.ServiceRestart:output_type -> machine.ServiceRestartResponse + 42, // 194: machine.MachineService.ServiceStart:output_type -> machine.ServiceStartResponse + 45, // 195: machine.MachineService.ServiceStop:output_type -> machine.ServiceStopResponse + 30, // 196: machine.MachineService.Shutdown:output_type -> machine.ShutdownResponse + 83, // 197: machine.MachineService.Stats:output_type -> machine.StatsResponse + 92, // 198: machine.MachineService.SystemStat:output_type -> machine.SystemStatResponse + 33, // 199: machine.MachineService.Upgrade:output_type -> machine.UpgradeResponse + 62, // 200: machine.MachineService.Version:output_type -> machine.VersionResponse + 138, // 201: machine.MachineService.GenerateClientConfiguration:output_type -> machine.GenerateClientConfigurationResponse + 160, // [160:202] is the sub-list for method output_type + 118, // [118:160] is the sub-list for method input_type + 118, // [118:118] is the sub-list for extension type_name + 118, // [118:118] is the sub-list for extension extendee + 0, // [0:118] is the sub-list for field type_name } func init() { file_machine_machine_proto_init() } @@ -11084,18 +11273,6 @@ func file_machine_machine_proto_init() { } } file_machine_machine_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ProcessesRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_machine_machine_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProcessesResponse); i { case 0: return &v.state @@ -11107,7 +11284,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Process); i { case 0: return &v.state @@ -11119,7 +11296,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ProcessInfo); i { case 0: return &v.state @@ -11131,7 +11308,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RestartRequest); i { case 0: return &v.state @@ -11143,7 +11320,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Restart); i { case 0: return &v.state @@ -11155,7 +11332,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RestartResponse); i { case 0: return &v.state @@ -11167,7 +11344,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StatsRequest); i { case 0: return &v.state @@ -11179,7 +11356,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Stats); i { case 0: return &v.state @@ -11191,7 +11368,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StatsResponse); i { case 0: return &v.state @@ -11203,7 +11380,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[77].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Stat); i { case 0: return &v.state @@ -11215,7 +11392,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[78].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Memory); i { case 0: return &v.state @@ -11227,7 +11404,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[79].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MemoryResponse); i { case 0: return &v.state @@ -11239,7 +11416,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[80].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MemInfo); i { case 0: return &v.state @@ -11251,7 +11428,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[81].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*HostnameResponse); i { case 0: return &v.state @@ -11263,7 +11440,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[82].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Hostname); i { case 0: return &v.state @@ -11275,7 +11452,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[83].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LoadAvgResponse); i { case 0: return &v.state @@ -11287,7 +11464,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[84].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LoadAvg); i { case 0: return &v.state @@ -11299,7 +11476,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[85].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SystemStatResponse); i { case 0: return &v.state @@ -11311,7 +11488,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[86].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SystemStat); i { case 0: return &v.state @@ -11323,7 +11500,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[87].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CPUStat); i { case 0: return &v.state @@ -11335,7 +11512,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[88].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*SoftIRQStat); i { case 0: return &v.state @@ -11347,7 +11524,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[90].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[89].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CPUInfoResponse); i { case 0: return &v.state @@ -11359,7 +11536,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[91].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[90].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CPUsInfo); i { case 0: return &v.state @@ -11371,7 +11548,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[92].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[91].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CPUInfo); i { case 0: return &v.state @@ -11383,7 +11560,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[93].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[92].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NetworkDeviceStatsResponse); i { case 0: return &v.state @@ -11395,7 +11572,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[94].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[93].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NetworkDeviceStats); i { case 0: return &v.state @@ -11407,7 +11584,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[95].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[94].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NetDev); i { case 0: return &v.state @@ -11419,7 +11596,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[96].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[95].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DiskStatsResponse); i { case 0: return &v.state @@ -11431,7 +11608,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[97].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[96].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DiskStats); i { case 0: return &v.state @@ -11443,7 +11620,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[98].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[97].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DiskStat); i { case 0: return &v.state @@ -11455,7 +11632,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[99].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[98].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EtcdLeaveClusterRequest); i { case 0: return &v.state @@ -11467,7 +11644,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[100].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[99].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EtcdLeaveCluster); i { case 0: return &v.state @@ -11479,7 +11656,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[101].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[100].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EtcdLeaveClusterResponse); i { case 0: return &v.state @@ -11491,7 +11668,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[102].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[101].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EtcdRemoveMemberRequest); i { case 0: return &v.state @@ -11503,7 +11680,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[103].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[102].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EtcdRemoveMember); i { case 0: return &v.state @@ -11515,7 +11692,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[104].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[103].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EtcdRemoveMemberResponse); i { case 0: return &v.state @@ -11527,7 +11704,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[105].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[104].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EtcdForfeitLeadershipRequest); i { case 0: return &v.state @@ -11539,7 +11716,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[106].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[105].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EtcdForfeitLeadership); i { case 0: return &v.state @@ -11551,7 +11728,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[107].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[106].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EtcdForfeitLeadershipResponse); i { case 0: return &v.state @@ -11563,7 +11740,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[108].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[107].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EtcdMemberListRequest); i { case 0: return &v.state @@ -11575,7 +11752,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[109].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[108].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EtcdMember); i { case 0: return &v.state @@ -11587,7 +11764,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[110].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[109].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EtcdMembers); i { case 0: return &v.state @@ -11599,7 +11776,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[111].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[110].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EtcdMemberListResponse); i { case 0: return &v.state @@ -11611,7 +11788,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[112].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[111].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EtcdSnapshotRequest); i { case 0: return &v.state @@ -11623,7 +11800,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[113].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[112].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EtcdRecover); i { case 0: return &v.state @@ -11635,7 +11812,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[114].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[113].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*EtcdRecoverResponse); i { case 0: return &v.state @@ -11647,7 +11824,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[115].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[114].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RouteConfig); i { case 0: return &v.state @@ -11659,7 +11836,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[116].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[115].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*DHCPOptionsConfig); i { case 0: return &v.state @@ -11671,7 +11848,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[117].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[116].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NetworkDeviceConfig); i { case 0: return &v.state @@ -11683,7 +11860,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[118].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[117].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NetworkConfig); i { case 0: return &v.state @@ -11695,7 +11872,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[119].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[118].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*InstallConfig); i { case 0: return &v.state @@ -11707,7 +11884,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[120].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[119].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*MachineConfig); i { case 0: return &v.state @@ -11719,7 +11896,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[121].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[120].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ControlPlaneConfig); i { case 0: return &v.state @@ -11731,7 +11908,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[122].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[121].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CNIConfig); i { case 0: return &v.state @@ -11743,7 +11920,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[123].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[122].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClusterNetworkConfig); i { case 0: return &v.state @@ -11755,7 +11932,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[124].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[123].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ClusterConfig); i { case 0: return &v.state @@ -11767,7 +11944,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[125].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[124].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GenerateConfigurationRequest); i { case 0: return &v.state @@ -11779,7 +11956,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[126].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[125].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GenerateConfiguration); i { case 0: return &v.state @@ -11791,7 +11968,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[127].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[126].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GenerateConfigurationResponse); i { case 0: return &v.state @@ -11803,7 +11980,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[128].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[127].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RemoveBootkubeInitializedKey); i { case 0: return &v.state @@ -11815,7 +11992,7 @@ func file_machine_machine_proto_init() { return nil } } - file_machine_machine_proto_msgTypes[129].Exporter = func(v interface{}, i int) interface{} { + file_machine_machine_proto_msgTypes[128].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*RemoveBootkubeInitializedKeyResponse); i { case 0: return &v.state @@ -11827,6 +12004,42 @@ func file_machine_machine_proto_init() { return nil } } + file_machine_machine_proto_msgTypes[129].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenerateClientConfigurationRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_machine_machine_proto_msgTypes[130].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenerateClientConfiguration); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_machine_machine_proto_msgTypes[131].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GenerateClientConfigurationResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -11834,7 +12047,7 @@ func file_machine_machine_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_machine_machine_proto_rawDesc, NumEnums: 7, - NumMessages: 130, + NumMessages: 132, NumExtensions: 0, NumServices: 1, }, diff --git a/pkg/machinery/api/machine/machine_grpc.pb.go b/pkg/machinery/api/machine/machine_grpc.pb.go index 96501c49f..175a35ece 100644 --- a/pkg/machinery/api/machine/machine_grpc.pb.go +++ b/pkg/machinery/api/machine/machine_grpc.pb.go @@ -71,6 +71,8 @@ type MachineServiceClient interface { SystemStat(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*SystemStatResponse, error) Upgrade(ctx context.Context, in *UpgradeRequest, opts ...grpc.CallOption) (*UpgradeResponse, error) Version(ctx context.Context, in *emptypb.Empty, opts ...grpc.CallOption) (*VersionResponse, error) + // GenerateClientConfiguration generates talosctl client configuration (talosconfig). + GenerateClientConfiguration(ctx context.Context, in *GenerateClientConfigurationRequest, opts ...grpc.CallOption) (*GenerateClientConfigurationResponse, error) } type machineServiceClient struct { @@ -682,6 +684,15 @@ func (c *machineServiceClient) Version(ctx context.Context, in *emptypb.Empty, o return out, nil } +func (c *machineServiceClient) GenerateClientConfiguration(ctx context.Context, in *GenerateClientConfigurationRequest, opts ...grpc.CallOption) (*GenerateClientConfigurationResponse, error) { + out := new(GenerateClientConfigurationResponse) + err := c.cc.Invoke(ctx, "/machine.MachineService/GenerateClientConfiguration", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // MachineServiceServer is the server API for MachineService service. // All implementations must embed UnimplementedMachineServiceServer // for forward compatibility @@ -735,6 +746,8 @@ type MachineServiceServer interface { SystemStat(context.Context, *emptypb.Empty) (*SystemStatResponse, error) Upgrade(context.Context, *UpgradeRequest) (*UpgradeResponse, error) Version(context.Context, *emptypb.Empty) (*VersionResponse, error) + // GenerateClientConfiguration generates talosctl client configuration (talosconfig). + GenerateClientConfiguration(context.Context, *GenerateClientConfigurationRequest) (*GenerateClientConfigurationResponse, error) mustEmbedUnimplementedMachineServiceServer() } @@ -904,6 +917,10 @@ func (UnimplementedMachineServiceServer) Upgrade(context.Context, *UpgradeReques func (UnimplementedMachineServiceServer) Version(context.Context, *emptypb.Empty) (*VersionResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Version not implemented") } + +func (UnimplementedMachineServiceServer) GenerateClientConfiguration(context.Context, *GenerateClientConfigurationRequest) (*GenerateClientConfigurationResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GenerateClientConfiguration not implemented") +} func (UnimplementedMachineServiceServer) mustEmbedUnimplementedMachineServiceServer() {} // UnsafeMachineServiceServer may be embedded to opt out of forward compatibility for this service. @@ -1690,6 +1707,24 @@ func _MachineService_Version_Handler(srv interface{}, ctx context.Context, dec f return interceptor(ctx, in, info, handler) } +func _MachineService_GenerateClientConfiguration_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GenerateClientConfigurationRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(MachineServiceServer).GenerateClientConfiguration(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/machine.MachineService/GenerateClientConfiguration", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(MachineServiceServer).GenerateClientConfiguration(ctx, req.(*GenerateClientConfigurationRequest)) + } + return interceptor(ctx, in, info, handler) +} + // MachineService_ServiceDesc is the grpc.ServiceDesc for MachineService service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -1821,6 +1856,10 @@ var MachineService_ServiceDesc = grpc.ServiceDesc{ MethodName: "Version", Handler: _MachineService_Version_Handler, }, + { + MethodName: "GenerateClientConfiguration", + Handler: _MachineService_GenerateClientConfiguration_Handler, + }, }, Streams: []grpc.StreamDesc{ { diff --git a/pkg/machinery/api/network/network.pb.go b/pkg/machinery/api/network/network.pb.go index 41f1af357..081e2931c 100644 --- a/pkg/machinery/api/network/network.pb.go +++ b/pkg/machinery/api/network/network.pb.go @@ -740,13 +740,11 @@ var file_network_network_proto_rawDesc = []byte{ 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1b, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x66, 0x61, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x42, 0x59, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x0a, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x41, - 0x70, 0x69, 0x50, 0x01, 0x5a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2d, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x74, - 0x61, 0x6c, 0x6f, 0x73, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, - 0x72, 0x79, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6e, 0x73, 0x65, 0x42, 0x3a, 0x5a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2d, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x2f, + 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x72, 0x79, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/pkg/machinery/api/resource/resource.pb.go b/pkg/machinery/api/resource/resource.pb.go index 6b523c281..34a4b141a 100644 --- a/pkg/machinery/api/resource/resource.pb.go +++ b/pkg/machinery/api/resource/resource.pb.go @@ -802,13 +802,11 @@ var file_resource_resource_proto_rawDesc = []byte{ 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, 0x57, 0x61, 0x74, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x42, - 0x5c, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x2e, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2e, - 0x61, 0x70, 0x69, 0x42, 0x0b, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x41, 0x70, 0x69, - 0x50, 0x01, 0x5a, 0x39, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, - 0x61, 0x6c, 0x6f, 0x73, 0x2d, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x74, 0x61, 0x6c, - 0x6f, 0x73, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, 0x79, - 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x3b, 0x5a, 0x39, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x61, + 0x6c, 0x6f, 0x73, 0x2d, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x74, 0x61, 0x6c, 0x6f, + 0x73, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, 0x79, 0x2f, + 0x61, 0x70, 0x69, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/pkg/machinery/api/security/security.pb.go b/pkg/machinery/api/security/security.pb.go index 2e6fca33d..878f0bc15 100644 --- a/pkg/machinery/api/security/security.pb.go +++ b/pkg/machinery/api/security/security.pb.go @@ -142,14 +142,12 @@ var file_security_security_proto_rawDesc = []byte{ 0x72, 0x69, 0x74, 0x79, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x61, 0x70, 0x69, 0x2e, 0x43, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x5c, 0x0a, 0x10, - 0x63, 0x6f, 0x6d, 0x2e, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x2e, 0x61, 0x70, 0x69, - 0x42, 0x0b, 0x53, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x41, 0x70, 0x69, 0x50, 0x01, 0x5a, - 0x39, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x61, 0x6c, 0x6f, - 0x73, 0x2d, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2f, - 0x70, 0x6b, 0x67, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, 0x79, 0x2f, 0x61, 0x70, - 0x69, 0x2f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x3b, 0x5a, 0x39, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x61, 0x6c, 0x6f, 0x73, + 0x2d, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2f, 0x70, + 0x6b, 0x67, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, 0x79, 0x2f, 0x61, 0x70, 0x69, + 0x2f, 0x73, 0x65, 0x63, 0x75, 0x72, 0x69, 0x74, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( diff --git a/pkg/machinery/api/storage/storage.pb.go b/pkg/machinery/api/storage/storage.pb.go index e859e12a9..3cd5124e9 100644 --- a/pkg/machinery/api/storage/storage.pb.go +++ b/pkg/machinery/api/storage/storage.pb.go @@ -344,13 +344,11 @@ var file_storage_storage_proto_rawDesc = []byte{ 0x73, 0x6b, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x2e, 0x44, 0x69, 0x73, 0x6b, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x42, 0x59, 0x0a, 0x0f, 0x63, 0x6f, 0x6d, 0x2e, 0x73, 0x74, 0x6f, 0x72, 0x61, - 0x67, 0x65, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x0a, 0x53, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x41, - 0x70, 0x69, 0x50, 0x01, 0x5a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2d, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x74, - 0x61, 0x6c, 0x6f, 0x73, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, - 0x72, 0x79, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6e, 0x73, 0x65, 0x42, 0x3a, 0x5a, 0x38, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2d, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x2f, + 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, + 0x65, 0x72, 0x79, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/pkg/machinery/api/time/time.pb.go b/pkg/machinery/api/time/time.pb.go index f45030542..e4be047fe 100644 --- a/pkg/machinery/api/time/time.pb.go +++ b/pkg/machinery/api/time/time.pb.go @@ -227,12 +227,11 @@ var file_time_time_proto_rawDesc = []byte{ 0x65, 0x12, 0x32, 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x11, 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x50, 0x0a, 0x0c, 0x63, 0x6f, 0x6d, 0x2e, 0x74, 0x69, 0x6d, - 0x65, 0x2e, 0x61, 0x70, 0x69, 0x42, 0x07, 0x54, 0x69, 0x6d, 0x65, 0x41, 0x70, 0x69, 0x50, 0x01, - 0x5a, 0x35, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x61, 0x6c, - 0x6f, 0x73, 0x2d, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x73, 0x2f, 0x74, 0x61, 0x6c, 0x6f, 0x73, - 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65, 0x72, 0x79, 0x2f, 0x61, - 0x70, 0x69, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x37, 0x5a, 0x35, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2d, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x73, 0x2f, 0x74, 0x61, 0x6c, 0x6f, 0x73, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x6d, 0x61, 0x63, 0x68, + 0x69, 0x6e, 0x65, 0x72, 0x79, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/pkg/machinery/client/client.go b/pkg/machinery/client/client.go index 2ca268e9b..42852c9c3 100644 --- a/pkg/machinery/client/client.go +++ b/pkg/machinery/client/client.go @@ -35,7 +35,7 @@ import ( resourceapi "github.com/talos-systems/talos/pkg/machinery/api/resource" storageapi "github.com/talos-systems/talos/pkg/machinery/api/storage" timeapi "github.com/talos-systems/talos/pkg/machinery/api/time" - "github.com/talos-systems/talos/pkg/machinery/client/config" + clientconfig "github.com/talos-systems/talos/pkg/machinery/client/config" "github.com/talos-systems/talos/pkg/machinery/constants" ) @@ -103,7 +103,7 @@ func (c *Client) resolveConfigContext() error { } // GetConfigContext returns resolved config context. -func (c *Client) GetConfigContext() *config.Context { +func (c *Client) GetConfigContext() *clientconfig.Context { if err := c.resolveConfigContext(); err != nil { return nil } @@ -223,7 +223,7 @@ func (c *Client) getConn(ctx context.Context, opts ...grpc.DialOption) (*grpc.Cl } // CredentialsFromConfigContext constructs the client Credentials from the given configuration Context. -func CredentialsFromConfigContext(context *config.Context) (*Credentials, error) { +func CredentialsFromConfigContext(context *clientconfig.Context) (*Credentials, error) { caBytes, err := base64.StdEncoding.DecodeString(context.CA) if err != nil { return nil, fmt.Errorf("error decoding CA: %w", err) @@ -253,8 +253,8 @@ func CredentialsFromConfigContext(context *config.Context) (*Credentials, error) // NewClientContextAndCredentialsFromConfig initializes Credentials from config file. // // Deprecated: use Option-based methods for client creation. -func NewClientContextAndCredentialsFromConfig(p, ctx string) (context *config.Context, creds *Credentials, err error) { - c, err := config.Open(p) +func NewClientContextAndCredentialsFromConfig(p, ctx string) (context *clientconfig.Context, creds *Credentials, err error) { + c, err := clientconfig.Open(p) if err != nil { return } @@ -267,7 +267,7 @@ func NewClientContextAndCredentialsFromConfig(p, ctx string) (context *config.Co // NewClientContextAndCredentialsFromParsedConfig initializes Credentials from parsed configuration. // // Deprecated: use Option-based methods for client creation. -func NewClientContextAndCredentialsFromParsedConfig(c *config.Config, ctx string) (context *config.Context, creds *Credentials, err error) { +func NewClientContextAndCredentialsFromParsedConfig(c *clientconfig.Config, ctx string) (context *clientconfig.Context, creds *Credentials, err error) { if ctx != "" { c.Context = ctx } @@ -940,6 +940,17 @@ func (c *Client) EtcdRecover(ctx context.Context, snapshot io.Reader, callOption return cli.CloseAndRecv() } +// GenerateClientConfiguration implements proto.MachineServiceClient interface. +func (c *Client) GenerateClientConfiguration(ctx context.Context, req *machineapi.GenerateClientConfigurationRequest, callOptions ...grpc.CallOption) (resp *machineapi.GenerateClientConfigurationResponse, err error) { //nolint:lll + resp, err = c.MachineClient.GenerateClientConfiguration(ctx, req, callOptions...) + + var filtered interface{} + filtered, err = FilterMessages(resp, err) + resp, _ = filtered.(*machineapi.GenerateClientConfigurationResponse) //nolint:errcheck + + return +} + // MachineStream is a common interface for streams returned by streaming APIs. type MachineStream interface { Recv() (*common.Data, error) diff --git a/pkg/machinery/client/config/config.go b/pkg/machinery/client/config/config.go index 09c0a0f8c..296a14642 100644 --- a/pkg/machinery/client/config/config.go +++ b/pkg/machinery/client/config/config.go @@ -6,21 +6,38 @@ package config import ( "bytes" + "encoding/base64" "fmt" "io" "io/ioutil" "os" "path/filepath" + "github.com/talos-systems/crypto/x509" yaml "gopkg.in/yaml.v3" ) -// Config represents the configuration file. +// Config represents the client configuration file (talosconfig). type Config struct { Context string `yaml:"context"` Contexts map[string]*Context `yaml:"contexts"` } +// NewConfig returns the client configuration file with a single context. +func NewConfig(contextName string, endpoints []string, caCrt []byte, client *x509.PEMEncodedCertificateAndKey) *Config { + return &Config{ + Context: contextName, + Contexts: map[string]*Context{ + contextName: { + Endpoints: endpoints, + CA: base64.StdEncoding.EncodeToString(caCrt), + Crt: base64.StdEncoding.EncodeToString(client.Crt), + Key: base64.StdEncoding.EncodeToString(client.Key), + }, + }, + } +} + func (c *Config) upgrade() { for _, ctx := range c.Contexts { ctx.upgrade() diff --git a/pkg/machinery/client/config/config_test.go b/pkg/machinery/client/config/config_test.go index 2d7532b56..c68f8d98b 100644 --- a/pkg/machinery/client/config/config_test.go +++ b/pkg/machinery/client/config/config_test.go @@ -9,74 +9,74 @@ import ( "github.com/stretchr/testify/assert" - "github.com/talos-systems/talos/pkg/machinery/client/config" + clientconfig "github.com/talos-systems/talos/pkg/machinery/client/config" ) func TestConfigMerge(t *testing.T) { - context1 := &config.Context{} - context2 := &config.Context{} + context1 := &clientconfig.Context{} + context2 := &clientconfig.Context{} for _, tt := range []struct { name string - config *config.Config - configToMerge *config.Config + config *clientconfig.Config + configToMerge *clientconfig.Config expectedContext string - expectedContexts map[string]*config.Context + expectedContexts map[string]*clientconfig.Context }{ { name: "IntoEmpty", - config: &config.Config{}, - configToMerge: &config.Config{ + config: &clientconfig.Config{}, + configToMerge: &clientconfig.Config{ Context: "foo", - Contexts: map[string]*config.Context{ + Contexts: map[string]*clientconfig.Context{ "foo": context1, }, }, expectedContext: "foo", - expectedContexts: map[string]*config.Context{ + expectedContexts: map[string]*clientconfig.Context{ "foo": context1, }, }, { name: "NoConflict", - config: &config.Config{ + config: &clientconfig.Config{ Context: "bar", - Contexts: map[string]*config.Context{ + Contexts: map[string]*clientconfig.Context{ "bar": context2, }, }, - configToMerge: &config.Config{ + configToMerge: &clientconfig.Config{ Context: "", - Contexts: map[string]*config.Context{ + Contexts: map[string]*clientconfig.Context{ "foo": context1, }, }, expectedContext: "bar", - expectedContexts: map[string]*config.Context{ + expectedContexts: map[string]*clientconfig.Context{ "foo": context1, "bar": context2, }, }, { name: "WithRename", - config: &config.Config{ + config: &clientconfig.Config{ Context: "bar", - Contexts: map[string]*config.Context{ + Contexts: map[string]*clientconfig.Context{ "bar": context2, }, }, - configToMerge: &config.Config{ + configToMerge: &clientconfig.Config{ Context: "bar", - Contexts: map[string]*config.Context{ + Contexts: map[string]*clientconfig.Context{ "bar": context1, }, }, expectedContext: "bar-1", - expectedContexts: map[string]*config.Context{ + expectedContexts: map[string]*clientconfig.Context{ "bar-1": context1, "bar": context2, }, diff --git a/pkg/machinery/client/options.go b/pkg/machinery/client/options.go index 492436544..279eec48c 100644 --- a/pkg/machinery/client/options.go +++ b/pkg/machinery/client/options.go @@ -10,14 +10,14 @@ import ( "google.golang.org/grpc" - "github.com/talos-systems/talos/pkg/machinery/client/config" + clientconfig "github.com/talos-systems/talos/pkg/machinery/client/config" ) // Options contains the set of client configuration options. type Options struct { endpointsOverride []string - config *config.Config - configContext *config.Context + config *clientconfig.Config + configContext *clientconfig.Context tlsConfig *tls.Config grpcDialOptions []grpc.DialOption @@ -32,7 +32,7 @@ type OptionFunc func(*Options) error // WithConfig configures the Client with the configuration provided. // Additionally use WithContextName to override the default context in the Config. -func WithConfig(cfg *config.Config) OptionFunc { +func WithConfig(cfg *clientconfig.Config) OptionFunc { return func(o *Options) error { o.config = cfg @@ -52,7 +52,7 @@ func WithContextName(name string) OptionFunc { } // WithConfigContext configures the Client with the configuration context provided. -func WithConfigContext(cfg *config.Context) OptionFunc { +func WithConfigContext(cfg *clientconfig.Context) OptionFunc { return func(o *Options) error { o.configContext = cfg @@ -92,7 +92,7 @@ func WithEndpoints(endpoints ...string) OptionFunc { // Additionally use WithContextName to select a context other than the default. func WithDefaultConfig() OptionFunc { return func(o *Options) (err error) { - defaultConfigPath, err := config.GetDefaultPath() + defaultConfigPath, err := clientconfig.GetDefaultPath() if err != nil { return fmt.Errorf("no client configuration provided and no default path found: %w", err) } @@ -105,7 +105,7 @@ func WithDefaultConfig() OptionFunc { // Additionally use WithContextName to select a context other than the default. func WithConfigFromFile(fn string) OptionFunc { return func(o *Options) (err error) { - cfg, err := config.Open(fn) + cfg, err := clientconfig.Open(fn) if err != nil { return fmt.Errorf("failed to read config from %q: %w", fn, err) } diff --git a/pkg/machinery/client/reply.go b/pkg/machinery/client/reply.go index 19050a41a..664fa1d3b 100644 --- a/pkg/machinery/client/reply.go +++ b/pkg/machinery/client/reply.go @@ -29,7 +29,7 @@ func (ne *NodeError) Unwrap() error { return ne.Err } -// FilterMessages removes error Messagess from resp and builds multierror. +// FilterMessages removes error Messages from resp and builds multierror. // //nolint:gocyclo,cyclop func FilterMessages(resp interface{}, err error) (interface{}, error) { @@ -152,7 +152,7 @@ func FilterMessages(resp interface{}, err error) (interface{}, error) { messagesField.SetLen(messagesField.Len() - 1) } - // if all the Messagess were error Messagess... + // if all the Messages were error Messages... if multiErr != nil && messagesField.Len() == 0 { resp = nil } diff --git a/pkg/machinery/config/bundle.go b/pkg/machinery/config/bundle.go index d82eeb32a..a7041a137 100644 --- a/pkg/machinery/config/bundle.go +++ b/pkg/machinery/config/bundle.go @@ -5,12 +5,14 @@ // Package config provides methods to generate and consume Talos configuration. package config -import "github.com/talos-systems/talos/pkg/machinery/client/config" +import ( + clientconfig "github.com/talos-systems/talos/pkg/machinery/client/config" +) // ProviderBundle defines the configuration bundle interface. type ProviderBundle interface { Init() Provider ControlPlane() Provider Join() Provider - TalosConfig() *config.Config + TalosConfig() *clientconfig.Config } diff --git a/pkg/machinery/config/types/v1alpha1/bundle/bundle.go b/pkg/machinery/config/types/v1alpha1/bundle/bundle.go index 9188318dd..6ec6d5398 100644 --- a/pkg/machinery/config/types/v1alpha1/bundle/bundle.go +++ b/pkg/machinery/config/types/v1alpha1/bundle/bundle.go @@ -13,7 +13,7 @@ import ( yaml "gopkg.in/yaml.v3" - "github.com/talos-systems/talos/pkg/machinery/client/config" + clientconfig "github.com/talos-systems/talos/pkg/machinery/client/config" "github.com/talos-systems/talos/pkg/machinery/config/types/v1alpha1" "github.com/talos-systems/talos/pkg/machinery/config/types/v1alpha1/generate" "github.com/talos-systems/talos/pkg/machinery/config/types/v1alpha1/machine" @@ -72,7 +72,7 @@ func NewConfigBundle(opts ...Option) (*v1alpha1.ConfigBundle, error) { defer talosConfig.Close() //nolint:errcheck - if bundle.TalosCfg, err = config.ReadFrom(talosConfig); err != nil { + if bundle.TalosCfg, err = clientconfig.ReadFrom(talosConfig); err != nil { return bundle, err } diff --git a/pkg/machinery/config/types/v1alpha1/generate/generate.go b/pkg/machinery/config/types/v1alpha1/generate/generate.go index 38ce5b1a9..d90293166 100644 --- a/pkg/machinery/config/types/v1alpha1/generate/generate.go +++ b/pkg/machinery/config/types/v1alpha1/generate/generate.go @@ -384,13 +384,10 @@ func NewTalosCA(currentTime time.Time) (ca *x509.CertificateAuthority, err error } // NewAdminCertificateAndKey generates the admin Talos certificate and key. -func NewAdminCertificateAndKey(currentTime time.Time, ca *x509.PEMEncodedCertificateAndKey, loopback string, role role.Role) (p *x509.PEMEncodedCertificateAndKey, err error) { - ips := []net.IP{net.ParseIP(loopback)} - +func NewAdminCertificateAndKey(currentTime time.Time, ca *x509.PEMEncodedCertificateAndKey, roles role.Set, ttl time.Duration) (p *x509.PEMEncodedCertificateAndKey, err error) { opts := []x509.Option{ - x509.Organization(string(role)), - x509.IPAddresses(ips), - x509.NotAfter(currentTime.Add(87600 * time.Hour)), + x509.Organization(roles.Strings()...), + x509.NotAfter(currentTime.Add(ttl)), x509.NotBefore(currentTime), } @@ -418,14 +415,12 @@ func NewInput(clustername, endpoint, kubernetesVersion string, secrets *SecretsB } } - var loopback, podNet, serviceNet string + var podNet, serviceNet string if tnet.IsIPv6(net.ParseIP(endpoint)) { - loopback = "::1" podNet = constants.DefaultIPv6PodNet serviceNet = constants.DefaultIPv6ServiceNet } else { - loopback = "127.0.0.1" podNet = constants.DefaultIPv4PodNet serviceNet = constants.DefaultIPv4ServiceNet } @@ -433,8 +428,8 @@ func NewInput(clustername, endpoint, kubernetesVersion string, secrets *SecretsB secrets.Certs.Admin, err = NewAdminCertificateAndKey( secrets.Clock.Now(), secrets.Certs.OS, - loopback, - role.Admin, + options.Roles, + 87600*time.Hour, ) if err != nil { diff --git a/pkg/machinery/config/types/v1alpha1/generate/options.go b/pkg/machinery/config/types/v1alpha1/generate/options.go index bf4437a35..3f61c1800 100644 --- a/pkg/machinery/config/types/v1alpha1/generate/options.go +++ b/pkg/machinery/config/types/v1alpha1/generate/options.go @@ -7,6 +7,7 @@ package generate import ( "github.com/talos-systems/talos/pkg/machinery/config" v1alpha1 "github.com/talos-systems/talos/pkg/machinery/config/types/v1alpha1" + "github.com/talos-systems/talos/pkg/machinery/role" ) // GenOption controls generate options specific to input generation. @@ -193,6 +194,15 @@ func WithSystemDiskEncryption(cfg *v1alpha1.SystemDiskEncryptionConfig) GenOptio } } +// WithRoles specifies user roles. +func WithRoles(roles role.Set) GenOption { + return func(o *GenOptions) error { + o.Roles = roles + + return nil + } +} + // GenOptions describes generate parameters. type GenOptions struct { EndpointList []string @@ -211,11 +221,13 @@ type GenOptions struct { MachineDisks []*v1alpha1.MachineDisk VersionContract *config.VersionContract SystemDiskEncryptionConfig *v1alpha1.SystemDiskEncryptionConfig + Roles role.Set } // DefaultGenOptions returns default options. func DefaultGenOptions() GenOptions { return GenOptions{ Persist: true, + Roles: role.MakeSet(role.Admin), } } diff --git a/pkg/machinery/config/types/v1alpha1/generate/talosconfig.go b/pkg/machinery/config/types/v1alpha1/generate/talosconfig.go index 59d445ebf..08f0a7da4 100644 --- a/pkg/machinery/config/types/v1alpha1/generate/talosconfig.go +++ b/pkg/machinery/config/types/v1alpha1/generate/talosconfig.go @@ -5,13 +5,11 @@ package generate import ( - "encoding/base64" - - "github.com/talos-systems/talos/pkg/machinery/client/config" + clientconfig "github.com/talos-systems/talos/pkg/machinery/client/config" ) // Talosconfig returns the talos admin Talos config. -func Talosconfig(in *Input, opts ...GenOption) (*config.Config, error) { +func Talosconfig(in *Input, opts ...GenOption) (*clientconfig.Config, error) { options := DefaultGenOptions() for _, opt := range opts { @@ -20,15 +18,5 @@ func Talosconfig(in *Input, opts ...GenOption) (*config.Config, error) { } } - return &config.Config{ - Context: in.ClusterName, - Contexts: map[string]*config.Context{ - in.ClusterName: { - Endpoints: options.EndpointList, - CA: base64.StdEncoding.EncodeToString(in.Certs.OS.Crt), - Crt: base64.StdEncoding.EncodeToString(in.Certs.Admin.Crt), - Key: base64.StdEncoding.EncodeToString(in.Certs.Admin.Key), - }, - }, - }, nil + return clientconfig.NewConfig(in.ClusterName, options.EndpointList, in.Certs.OS.Crt, in.Certs.Admin), nil } diff --git a/pkg/machinery/go.mod b/pkg/machinery/go.mod index 912f3d09a..e2997927f 100644 --- a/pkg/machinery/go.mod +++ b/pkg/machinery/go.mod @@ -24,7 +24,7 @@ require ( github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d github.com/stretchr/objx v0.3.0 // indirect github.com/stretchr/testify v1.7.0 - github.com/talos-systems/crypto v0.2.1-0.20210601174604-cd18ef62eb9f + github.com/talos-systems/crypto v0.3.1-0.20210615131117-6bc5bb50c527 github.com/talos-systems/go-blockdevice v0.2.1-0.20210526155905-30c2bc3cb62a github.com/talos-systems/net v0.2.1-0.20210212213224-05190541b0fa golang.org/x/sys v0.0.0-20210525143221-35b2ab0089ea diff --git a/pkg/machinery/go.sum b/pkg/machinery/go.sum index 4d9ce32e6..2fba15b16 100644 --- a/pkg/machinery/go.sum +++ b/pkg/machinery/go.sum @@ -144,8 +144,8 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/talos-systems/crypto v0.2.1-0.20210601174604-cd18ef62eb9f h1:Xk3zeUZPhvEl9Vs4PlYBohin3QZmizA/YR4URKEyULY= -github.com/talos-systems/crypto v0.2.1-0.20210601174604-cd18ef62eb9f/go.mod h1:xaNCB2/Bxaj+qrkdeodhRv5eKQVvKOGBBMj58MrIPY8= +github.com/talos-systems/crypto v0.3.1-0.20210615131117-6bc5bb50c527 h1:Ut3jI/0FPSyH0QpycKFKAueWKjzQ00OFmkeFG+0uO1A= +github.com/talos-systems/crypto v0.3.1-0.20210615131117-6bc5bb50c527/go.mod h1:xaNCB2/Bxaj+qrkdeodhRv5eKQVvKOGBBMj58MrIPY8= github.com/talos-systems/go-blockdevice v0.2.1-0.20210526155905-30c2bc3cb62a h1:NLuIVKi5tBnRMgxk185AVGmMUzlRcggb2Abrw9uUq3E= github.com/talos-systems/go-blockdevice v0.2.1-0.20210526155905-30c2bc3cb62a/go.mod h1:qnn/zDc09I1DA2BUDDCOSA2D0P8pIDjN8pGiRoRaQig= github.com/talos-systems/go-cmd v0.0.0-20210216164758-68eb0067e0f0/go.mod h1:kf+rZzTEmlDiYQ6ulslvRONnKLQH8x83TowltGMhO+k= diff --git a/pkg/machinery/role/role.go b/pkg/machinery/role/role.go index 3355d351f..a765a346e 100644 --- a/pkg/machinery/role/role.go +++ b/pkg/machinery/role/role.go @@ -5,11 +5,8 @@ package role import ( - "fmt" "sort" "strings" - - "github.com/hashicorp/go-multierror" ) // Role represents Talos user role. @@ -18,28 +15,41 @@ import ( type Role string const ( + // Prefix for all built-in roles. + Prefix = string("os:") + // Admin defines Talos role for admins. - Admin = Role("os:admin") + Admin = Role(Prefix + "admin") // Reader defines Talos role for readers who can access read-only APIs that do not expose secrets. - Reader = Role("os:reader") + Reader = Role(Prefix + "reader") - // Impersonator defines internal Talos role for impersonating another user (and their role). - Impersonator = Role("os:impersonator") + // Impersonator defines Talos role for impersonating another user (and their role). + // Used internally, but may also be granted to the user. + Impersonator = Role(Prefix + "impersonator") ) // Set represents a set of roles. -type Set map[Role]struct{} +type Set struct { + roles map[Role]struct{} +} -// all roles, including internal ones. -var all = MakeSet(Admin, Reader, Impersonator) +var ( + // All roles that can be granted to users. + All = MakeSet(Admin, Reader, Impersonator) + + // Zero is an empty set of roles. + Zero = MakeSet() +) // MakeSet makes a set of roles from constants. // Use Parse in other cases. func MakeSet(roles ...Role) Set { - res := make(Set, len(roles)) + res := Set{ + roles: make(map[Role]struct{}, len(roles)), + } for _, r := range roles { - res[r] = struct{}{} + res.roles[r] = struct{}{} } return res @@ -47,11 +57,11 @@ func MakeSet(roles ...Role) Set { // Parse parses a set of roles. // The returned set is always non-nil and contains all roles, including unknown (for compatibility with future versions). -// The returned error contains roles unknown to the current version. -func Parse(str []string) (Set, error) { - res := make(Set) +// The returned slice contains roles unknown to the current version. +func Parse(str []string) (Set, []string) { + res := MakeSet() - var err *multierror.Error + var unknownRoles []string for _, r := range str { r = strings.TrimSpace(r) @@ -62,21 +72,21 @@ func Parse(str []string) (Set, error) { } role := Role(r) - if _, ok := all[role]; !ok { - err = multierror.Append(err, fmt.Errorf("unexpected role %q", r)) + if _, ok := All.roles[role]; !ok { + unknownRoles = append(unknownRoles, r) } - res[role] = struct{}{} + res.roles[role] = struct{}{} } - return res, err.ErrorOrNil() + return res, unknownRoles } // Strings returns a set as a slice of strings. func (s Set) Strings() []string { - res := make([]string, 0, len(s)) + res := make([]string, 0, len(s.roles)) - for r := range s { + for r := range s.roles { res = append(res, string(r)) } @@ -86,12 +96,21 @@ func (s Set) Strings() []string { } // IncludesAny returns true if there is a non-empty intersection between sets. +// +// Returns false if any set is empty. func (s Set) IncludesAny(other Set) bool { - for r := range other { - if _, ok := s[r]; ok { + for r := range other.roles { + if _, ok := s.roles[r]; ok { return true } } return false } + +// Includes returns true if given role is present in the set. +func (s Set) Includes(role Role) bool { + _, ok := s.roles[role] + + return ok +} diff --git a/pkg/machinery/role/role_test.go b/pkg/machinery/role/role_test.go index 0ade672ae..03c0b5fc7 100644 --- a/pkg/machinery/role/role_test.go +++ b/pkg/machinery/role/role_test.go @@ -12,18 +12,23 @@ import ( "github.com/talos-systems/talos/pkg/machinery/role" ) -func TestRole(t *testing.T) { +func TestSet(t *testing.T) { t.Parallel() - set, err := role.Parse([]string{"os:admin", "os:reader", "os:future", "os:impersonator", "", " "}) - assert.EqualError(t, err, "1 error occurred:\n\t* unexpected role \"os:future\"\n\n") - assert.Equal(t, role.MakeSet(role.Admin, role.Reader, role.Role("os:future"), role.Impersonator), set) + roles, unknownRoles := role.Parse([]string{"os:admin", "os:reader", "os:future", "os:impersonator", "", " "}) + assert.Equal(t, []string{"os:future"}, unknownRoles) + assert.Equal(t, role.MakeSet(role.Admin, role.Reader, role.Role("os:future"), role.Impersonator), roles) - assert.Equal(t, []string{"os:admin", "os:future", "os:impersonator", "os:reader"}, set.Strings()) - assert.Equal(t, []string{}, role.Set.Strings(nil)) + assert.Equal(t, []string{"os:admin", "os:future", "os:impersonator", "os:reader"}, roles.Strings()) + assert.Equal(t, []string{}, role.MakeSet().Strings()) - _, ok := set[role.Admin] - assert.True(t, ok) - assert.True(t, set.IncludesAny(role.MakeSet(role.Admin))) - assert.False(t, set.IncludesAny(nil)) + assert.True(t, roles.Includes(role.Admin)) + assert.False(t, roles.Includes(role.Role("wrong"))) + + assert.True(t, roles.IncludesAny(role.MakeSet(role.Admin))) + assert.False(t, roles.IncludesAny(role.MakeSet(role.Role("wrong")))) + + assert.False(t, roles.IncludesAny(role.MakeSet())) + assert.False(t, role.MakeSet().IncludesAny(roles)) + assert.False(t, role.MakeSet().IncludesAny(role.MakeSet())) } diff --git a/pkg/provision/options.go b/pkg/provision/options.go index 73f65feab..404f3ad82 100644 --- a/pkg/provision/options.go +++ b/pkg/provision/options.go @@ -10,7 +10,7 @@ import ( "runtime" "github.com/talos-systems/talos/pkg/machinery/client" - "github.com/talos-systems/talos/pkg/machinery/client/config" + clientconfig "github.com/talos-systems/talos/pkg/machinery/client/config" ) // Option controls Provisioner. @@ -35,7 +35,7 @@ func WithEndpoint(endpoint string) Option { } // WithTalosConfig specifies talosconfig to use when acessing Talos cluster. -func WithTalosConfig(talosConfig *config.Config) Option { +func WithTalosConfig(talosConfig *clientconfig.Config) Option { return func(o *Options) error { o.TalosConfig = talosConfig @@ -100,7 +100,7 @@ func WithDockerPortsHostIP(hostIP string) Option { // Options describes Provisioner parameters. type Options struct { LogWriter io.Writer - TalosConfig *config.Config + TalosConfig *clientconfig.Config TalosClient *client.Client ForceEndpoint string TargetArch string diff --git a/prototool.yaml b/prototool.yaml index 16c9e8d26..174c673e4 100644 --- a/prototool.yaml +++ b/prototool.yaml @@ -8,15 +8,16 @@ # Protoc directives. protoc: # The Protobuf version to use from https://github.com/protocolbuffers/protobuf/releases. - # By default use 3.8.0. + # By default use 3.11.0. # You probably want to set this to make your builds completely reproducible. - version: 3.15.3 + version: 3.15.6 # Additional paths to include with -I to protoc. # By default, the directory of the config file is included, # or the current directory if there is no config file. includes: - vendor/ + # If not set, compile will fail if there are unused imports. # Setting this will ignore unused imports. #allow_unused_imports: true @@ -44,28 +45,103 @@ lint: # lint rules in lint.rules.add. # Run prototool lint --list-all-lint-groups to see all available lint groups. # Run prototool lint --list-lint-group GROUP to list the linters in the given lint group. - group: google + group: empty + # Linter files to ignore. # These can either be file or directory names. # If there is a directory name, that directory and all sub-directories will be ignored. -# ignores: -# - id: RPC_NAMES_CAMEL_CASE -# files: -# - path/to/foo.proto -# - path/to/bar.proto -# - id: SYNTAX_PROTO3 -# files: -# - path/to/dir + ignores: + - id: FILE_OPTIONS_GO_PACKAGE_NOT_LONG_FORM + files: + - vendor/google/rpc/status.proto + - id: NAMES_NO_COMMON + files: + - common/common.proto -# Linter rules. -# Run prototool lint --list-all-linters to see all available linters. -# Run prototool lint --list-linters to see the currently configured linters. -# rules: + # Linter rules. + # Run prototool lint --list-all-linters to see all available linters. + # Run prototool lint --list-linters to see the currently configured linters. + rules: -# The specific linters to add. -# add: -# - ENUM_NAMES_CAMEL_CASE -# - ENUM_NAMES_CAPITALIZED + # The specific linters to add. + # TODO Enable more: https://github.com/talos-systems/talos/issues/2722. + add: + # All rules except language-specific (C#, Java, Obj-C, PHP, Ruby, but not Go). + - COMMENTS_NO_C_STYLE # Verifies that there are no /* c-style */ comments. + # - COMMENTS_NO_INLINE # Verifies that there are no inline comments. + # - ENUMS_HAVE_COMMENTS # Verifies that all enums have a comment of the form "// EnumName ...". + # - ENUMS_HAVE_SENTENCE_COMMENTS # Verifies that all enums have a comment that contains at least one complete sentence. + # - ENUMS_NO_ALLOW_ALIAS # Verifies that no enums use the option "allow_alias". + # - ENUM_FIELDS_HAVE_COMMENTS # Verifies that all enum fields have a comment of the form "// FIELD_NAME ...". + # - ENUM_FIELDS_HAVE_SENTENCE_COMMENTS # Verifies that all enum fields have a comment that contains at least one complete sentence. + - ENUM_FIELD_NAMES_UPPERCASE # Verifies that all enum field names are UPPERCASE. + - ENUM_FIELD_NAMES_UPPER_SNAKE_CASE # Verifies that all enum field names are UPPER_SNAKE_CASE. + # - ENUM_FIELD_PREFIXES # Verifies that all enum fields are prefixed with [NESTED_MESSAGE_NAME_]ENUM_NAME_. + # - ENUM_FIELD_PREFIXES_EXCEPT_MESSAGE # Verifies that all enum fields are prefixed with ENUM_NAME_. + - ENUM_NAMES_CAMEL_CASE # Verifies that all enum names are CamelCase. + - ENUM_NAMES_CAPITALIZED # Verifies that all enum names are Capitalized. + # - ENUM_ZERO_VALUES_INVALID # Verifies that all enum zero value names are [NESTED_MESSAGE_NAME_]ENUM_NAME_INVALID. + # - ENUM_ZERO_VALUES_INVALID_EXCEPT_MESSAGE # Verifies that all enum zero value names are ENUM_NAME_INVALID. + - FIELDS_NOT_RESERVED # Verifies that no message or enum has a reserved field. + - FILE_HEADER # Verifies that the file header matches the expected file header if the file_header option is set in the configuration file. + - FILE_NAMES_LOWER_SNAKE_CASE # Verifies that the file name is lower_snake_case.proto. + # - FILE_OPTIONS_EQUAL_GO_PACKAGE_PB_SUFFIX # Verifies that the file option "go_package" is equal to $(basename PACKAGE)pb. + # - FILE_OPTIONS_EQUAL_GO_PACKAGE_V2_SUFFIX # Verifies that the file option "go_package" is equal to the last two values of the package separated by "."s, or just the package name if there are no "."s. + - FILE_OPTIONS_GO_PACKAGE_NOT_LONG_FORM # Verifies that the file option "go_package" is not of the form "go/import/path;package". + - FILE_OPTIONS_GO_PACKAGE_SAME_IN_DIR # Verifies that the file option "go_package" of all files in a directory are the same. + - FILE_OPTIONS_REQUIRE_GO_PACKAGE # Verifies that the file option "go_package" is set. + - GOGO_NOT_IMPORTED # Verifies that the "gogo.proto" file from gogo/protobuf is not imported. + - IMPORTS_NOT_PUBLIC # Verifies that there are no public imports. + - IMPORTS_NOT_WEAK # Verifies that there are no weak imports. + # - MESSAGES_HAVE_COMMENTS # Verifies that all non-extended messages have a comment of the form "// MessageName ...". + # - MESSAGES_HAVE_COMMENTS_EXCEPT_REQUEST_RESPONSE_TYPES # Verifies that all non-extended messages except for request and response types have a comment of the form "// MessageName ...". + # - MESSAGES_HAVE_SENTENCE_COMMENTS_EXCEPT_REQUEST_RESPONSE_TYPES # Verifies that all non-extended messages except for request and response types have a comment that contains at least one complete sentence. + - MESSAGES_NOT_EMPTY_EXCEPT_REQUEST_RESPONSE_TYPES # Verifies that all messages except for request and response types are not empty. + - MESSAGE_FIELDS_DURATION # Verifies that all non-map fields that contain "duration" in their name are google.protobuf.Durations. + # - MESSAGE_FIELDS_HAVE_COMMENTS # Verifies that all message fields have a comment of the form "// field_name ...". + # - MESSAGE_FIELDS_HAVE_SENTENCE_COMMENTS # Verifies that all message fields have a comment that contains at least one complete sentence. + - MESSAGE_FIELDS_NOT_FLOATS # Verifies that all message fields are not floats. + - MESSAGE_FIELDS_NO_JSON_NAME # Verifies that no message field has the "json_name" option set. + # - MESSAGE_FIELDS_TIME # Verifies that all non-map fields that contain "time" in their name are google.protobuf.Timestamps. + - MESSAGE_FIELD_NAMES_FILENAME # Verifies that all message field names do not contain "file_name" as "filename" should be used instead. + - MESSAGE_FIELD_NAMES_FILEPATH # Verifies that all message field names do not contain "file_path" as "filepath" should be used instead. + - MESSAGE_FIELD_NAMES_LOWERCASE # Verifies that all message field names are lowercase. + - MESSAGE_FIELD_NAMES_LOWER_SNAKE_CASE # Verifies that all message field names are lower_snake_case. + - MESSAGE_FIELD_NAMES_NO_DESCRIPTOR # Verifies that all message field names are not "descriptor", which results in a collision in Java-generated code. + - MESSAGE_NAMES_CAMEL_CASE # Verifies that all non-extended message names are CamelCase. + - MESSAGE_NAMES_CAPITALIZED # Verifies that all non-extended message names are Capitalized. + - NAMES_NO_COMMON # Verifies that no type name contains the word "common". + # - NAMES_NO_DATA # Verifies that no type name contains the word "data". + # - NAMES_NO_UUID # Verifies that no type name contains the word "uuid". + - ONEOF_NAMES_LOWER_SNAKE_CASE # Verifies that all oneof names are lower_snake_case. + - PACKAGES_SAME_IN_DIR # Verifies that the packages of all files in a directory are the same. + - PACKAGE_IS_DECLARED # Verifies that there is a package declaration. + - PACKAGE_LOWER_CASE # Verifies that the package name only contains characters in the range a-z0-9 and periods. + - PACKAGE_LOWER_SNAKE_CASE # Verifies that the package is lower_snake.case. + # - PACKAGE_MAJOR_BETA_VERSIONED # Verifies that the package is of the form "package.vMAJORVERSION" or "package.vMAJORVERSIONbetaBETAVERSION" with versions >=1. + - PACKAGE_NO_KEYWORDS # Verifies that no packages contain one of the keywords "internal,public,private,protected,std" as part of the name when split on '.'. + # - REQUEST_RESPONSE_NAMES_MATCH_RPC # Verifies that all request names are RpcNameRequest and all response names are RpcNameResponse. + - REQUEST_RESPONSE_TYPES_AFTER_SERVICE # Verifies that request and response types are defined after any services and the response type is defined after the request type. + # - REQUEST_RESPONSE_TYPES_IN_SAME_FILE # Verifies that all request and response types are in the same file as their corresponding service and are not nested messages. + # - REQUEST_RESPONSE_TYPES_ONLY_IN_FILE # Verifies that only request and response types are the only types in the same file as their corresponding service. + # - REQUEST_RESPONSE_TYPES_UNIQUE # Verifies that all request and response types are unique to each RPC. + # - RPCS_HAVE_COMMENTS # Verifies that all rpcs have a comment of the form "// RPCName ...". + # - RPCS_HAVE_SENTENCE_COMMENTS # Verifies that all rpcs have a comment that contains at least one complete sentence. + # - RPCS_NO_STREAMING # Verifies that all rpcs are unary. + - RPC_NAMES_CAMEL_CASE # Verifies that all RPC names are CamelCase. + - RPC_NAMES_CAPITALIZED # Verifies that all RPC names are Capitalized. + - RPC_OPTIONS_NO_GOOGLE_API_HTTP # Verifies that the RPC option "google.api.http" is not used. + # - SERVICES_HAVE_COMMENTS # Verifies that all services have a comment of the form "// ServiceName ...". + - SERVICES_HAVE_SENTENCE_COMMENTS # Verifies that all services have a comment that contains at least one complete sentence. + # - SERVICE_NAMES_API_SUFFIX # Verifies that all service names end with "API". + - SERVICE_NAMES_CAMEL_CASE # Verifies that all service names are CamelCase. + - SERVICE_NAMES_CAPITALIZED # Verifies that all service names are Capitalized. + # - SERVICE_NAMES_MATCH_FILE_NAME # Verifies that there is one service per file and the file name is service_name_lower_snake_case.proto. + - SERVICE_NAMES_NO_PLURALS # Verifies that all CamelCase service names do not contain plural components. + - SYNTAX_PROTO3 # Verifies that the syntax is proto3. + - WKT_DIRECTLY_IMPORTED # Verifies that the Well-Known Types are directly imported using "google/protobuf/" as the base of the import. + # - WKT_DURATION_SUFFIX # Verifies that all google.protobuf.Duration field names are "duration" or end in "_duration". + # - WKT_TIMESTAMP_SUFFIX # Verifies that all google.protobuf.Timestamp field names are "time" or end in "_time". # The specific linters to remove. # remove: diff --git a/website/content/docs/v0.11/Reference/api.md b/website/content/docs/v0.11/Reference/api.md index 40062e8ce..6d6302427 100644 --- a/website/content/docs/v0.11/Reference/api.md +++ b/website/content/docs/v0.11/Reference/api.md @@ -83,6 +83,9 @@ description: Talos gRPC API reference. - [Event](#machine.Event) - [EventsRequest](#machine.EventsRequest) - [FileInfo](#machine.FileInfo) + - [GenerateClientConfiguration](#machine.GenerateClientConfiguration) + - [GenerateClientConfigurationRequest](#machine.GenerateClientConfigurationRequest) + - [GenerateClientConfigurationResponse](#machine.GenerateClientConfigurationResponse) - [GenerateConfiguration](#machine.GenerateConfiguration) - [GenerateConfigurationRequest](#machine.GenerateConfigurationRequest) - [GenerateConfigurationResponse](#machine.GenerateConfigurationResponse) @@ -109,7 +112,6 @@ description: Talos gRPC API reference. - [PlatformInfo](#machine.PlatformInfo) - [Process](#machine.Process) - [ProcessInfo](#machine.ProcessInfo) - - [ProcessesRequest](#machine.ProcessesRequest) - [ProcessesResponse](#machine.ProcessesResponse) - [ReadRequest](#machine.ReadRequest) - [Reboot](#machine.Reboot) @@ -487,7 +489,7 @@ Common metadata message nested in all reply message types ### Health - +The health service definition. | Method Name | Request Type | Response Type | Description | | ----------- | ------------ | ------------- | ------------| @@ -1364,6 +1366,56 @@ TODO: unix timestamp or include proto's Date type | + + +### GenerateClientConfiguration + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| metadata | [common.Metadata](#common.Metadata) | | | +| ca | [bytes](#bytes) | | PEM-encoded CA certificate. | +| crt | [bytes](#bytes) | | PEM-encoded generated client certificate. | +| key | [bytes](#bytes) | | PEM-encoded generated client key. | +| talosconfig | [bytes](#bytes) | | Client configuration (talosconfig) file content. | + + + + + + + + +### GenerateClientConfigurationRequest + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| roles | [string](#string) | repeated | Roles in the generated client certificate. | +| crt_ttl | [google.protobuf.Duration](#google.protobuf.Duration) | | Client certificate TTL. | + + + + + + + + +### GenerateClientConfigurationResponse + + + +| Field | Type | Label | Description | +| ----- | ---- | ----- | ----------- | +| messages | [GenerateClientConfiguration](#machine.GenerateClientConfiguration) | repeated | | + + + + + + ### GenerateConfiguration @@ -1865,20 +1917,10 @@ The messages message containing the requested df stats. - - -### ProcessesRequest -rpc processes - - - - - - ### ProcessesResponse - +rpc processes | Field | Type | Label | Description | @@ -2958,6 +3000,7 @@ This method is available only on control plane nodes (which run etcd). | | SystemStat | [.google.protobuf.Empty](#google.protobuf.Empty) | [SystemStatResponse](#machine.SystemStatResponse) | | | Upgrade | [UpgradeRequest](#machine.UpgradeRequest) | [UpgradeResponse](#machine.UpgradeResponse) | | | Version | [.google.protobuf.Empty](#google.protobuf.Empty) | [VersionResponse](#machine.VersionResponse) | | +| GenerateClientConfiguration | [GenerateClientConfigurationRequest](#machine.GenerateClientConfigurationRequest) | [GenerateClientConfigurationResponse](#machine.GenerateClientConfigurationResponse) | GenerateClientConfiguration generates talosctl client configuration (talosconfig). | diff --git a/website/content/docs/v0.11/Reference/cli.md b/website/content/docs/v0.11/Reference/cli.md index 94312a6a0..0eb9c2bda 100644 --- a/website/content/docs/v0.11/Reference/cli.md +++ b/website/content/docs/v0.11/Reference/cli.md @@ -341,7 +341,7 @@ talosctl config add [flags] ### SEE ALSO -* [talosctl config](#talosctl-config) - Manage the client configuration +* [talosctl config](#talosctl-config) - Manage the client configuration file (talosconfig) ## talosctl config context @@ -368,11 +368,11 @@ talosctl config context [flags] ### SEE ALSO -* [talosctl config](#talosctl-config) - Manage the client configuration +* [talosctl config](#talosctl-config) - Manage the client configuration file (talosconfig) ## talosctl config contexts -List contexts defined in Talos config +List defined contexts ``` talosctl config contexts [flags] @@ -395,7 +395,7 @@ talosctl config contexts [flags] ### SEE ALSO -* [talosctl config](#talosctl-config) - Manage the client configuration +* [talosctl config](#talosctl-config) - Manage the client configuration file (talosconfig) ## talosctl config endpoint @@ -422,11 +422,11 @@ talosctl config endpoint ... [flags] ### SEE ALSO -* [talosctl config](#talosctl-config) - Manage the client configuration +* [talosctl config](#talosctl-config) - Manage the client configuration file (talosconfig) ## talosctl config merge -Merge additional contexts from another Talos config into the default config +Merge additional contexts from another client configuration file ### Synopsis @@ -453,7 +453,36 @@ talosctl config merge [flags] ### SEE ALSO -* [talosctl config](#talosctl-config) - Manage the client configuration +* [talosctl config](#talosctl-config) - Manage the client configuration file (talosconfig) + +## talosctl config new + +Generate a new client configuration file + +``` +talosctl config new [] [flags] +``` + +### Options + +``` + --crt-ttl duration certificate TTL (default 87600h0m0s) + -h, --help help for new + --roles strings roles (default [os:admin]) +``` + +### Options inherited from parent commands + +``` + --context string Context to be used in command + -e, --endpoints strings override default endpoints in Talos configuration + -n, --nodes strings target the specified nodes + --talosconfig string The path to the Talos configuration file (default "/home/user/.talos/config") +``` + +### SEE ALSO + +* [talosctl config](#talosctl-config) - Manage the client configuration file (talosconfig) ## talosctl config node @@ -480,11 +509,11 @@ talosctl config node ... [flags] ### SEE ALSO -* [talosctl config](#talosctl-config) - Manage the client configuration +* [talosctl config](#talosctl-config) - Manage the client configuration file (talosconfig) ## talosctl config -Manage the client configuration +Manage the client configuration file (talosconfig) ### Options @@ -506,9 +535,10 @@ Manage the client configuration * [talosctl](#talosctl) - A CLI for out-of-band management of Kubernetes nodes created by Talos * [talosctl config add](#talosctl-config-add) - Add a new context * [talosctl config context](#talosctl-config-context) - Set the current context -* [talosctl config contexts](#talosctl-config-contexts) - List contexts defined in Talos config +* [talosctl config contexts](#talosctl-config-contexts) - List defined contexts * [talosctl config endpoint](#talosctl-config-endpoint) - Set the endpoint(s) for the current context -* [talosctl config merge](#talosctl-config-merge) - Merge additional contexts from another Talos config into the default config +* [talosctl config merge](#talosctl-config-merge) - Merge additional contexts from another client configuration file +* [talosctl config new](#talosctl-config-new) - Generate a new client configuration file * [talosctl config node](#talosctl-config-node) - Set the node(s) for the current context ## talosctl conformance kubernetes @@ -2142,7 +2172,7 @@ A CLI for out-of-band management of Kubernetes nodes created by Talos * [talosctl bootstrap](#talosctl-bootstrap) - Bootstrap the etcd cluster on the specified node. * [talosctl cluster](#talosctl-cluster) - A collection of commands for managing local docker-based or firecracker-based clusters * [talosctl completion](#talosctl-completion) - Output shell completion code for the specified shell (bash or zsh) -* [talosctl config](#talosctl-config) - Manage the client configuration +* [talosctl config](#talosctl-config) - Manage the client configuration file (talosconfig) * [talosctl conformance](#talosctl-conformance) - Run conformance tests * [talosctl containers](#talosctl-containers) - List containers * [talosctl convert-k8s](#talosctl-convert-k8s) - Convert Kubernetes control plane from self-hosted (bootkube) to Talos-managed (static pods).