From e3d57fe5beddcffe64543dc114f5d2d1f225fa59 Mon Sep 17 00:00:00 2001 From: Edward J Date: Tue, 12 Nov 2024 16:05:49 -0800 Subject: [PATCH 1/3] Use provider from compose file or saved local state file --- src/cmd/cli/command/commands.go | 141 +++++++++++++----- src/cmd/cli/command/compose.go | 10 +- src/cmd/cli/command/hidden.go | 25 ++++ src/cmd/cli/command/hidden_windows.go | 29 ++++ src/cmd/cli/command/localstate.go | 35 +++++ src/pkg/cli/client/byoc/aws/byoc.go | 66 ++++---- .../client/byoc/aws/byoc_integration_test.go | 68 ++------- src/pkg/cli/client/byoc/aws/byoc_test.go | 15 -- src/pkg/cli/client/byoc/aws/stream.go | 2 +- src/pkg/cli/client/byoc/baseclient.go | 19 --- src/pkg/cli/client/byoc/do/byoc.go | 28 ++-- src/pkg/cli/client/provider.go | 15 ++ src/pkg/cli/connect.go | 23 +-- src/pkg/clouds/do/appPlatform/setup.go | 12 +- 14 files changed, 297 insertions(+), 191 deletions(-) create mode 100644 src/cmd/cli/command/hidden.go create mode 100644 src/cmd/cli/command/hidden_windows.go create mode 100644 src/cmd/cli/command/localstate.go diff --git a/src/cmd/cli/command/commands.go b/src/cmd/cli/command/commands.go index 719c07f6d..cc930b3be 100644 --- a/src/cmd/cli/command/commands.go +++ b/src/cmd/cli/command/commands.go @@ -91,7 +91,7 @@ func Execute(ctx context.Context) error { if strings.Contains(err.Error(), "maximum number of projects") { projectName := "" - provider, err := getProvider(ctx) + provider, err := getProvider(ctx, nil) if err != nil { return err } @@ -385,7 +385,8 @@ var whoamiCmd = &cobra.Command{ Args: cobra.NoArgs, Short: "Show the current user", RunE: func(cmd *cobra.Command, args []string) error { - provider, err := getProvider(cmd.Context()) + loader := configureLoader(cmd) + provider, err := getProvider(cmd.Context(), loader) if err != nil { return err } @@ -412,7 +413,7 @@ var certGenerateCmd = &cobra.Command{ Short: "Generate a TLS certificate", RunE: func(cmd *cobra.Command, args []string) error { loader := configureLoader(cmd) - provider, err := getProvider(cmd.Context()) + provider, err := getProvider(cmd.Context(), loader) if err != nil { return err } @@ -660,7 +661,7 @@ var configSetCmd = &cobra.Command{ // Make sure we have a project to set config for before asking for a value loader := configureLoader(cmd) - provider, err := getProvider(cmd.Context()) + provider, err := getProvider(cmd.Context(), loader) if err != nil { return err } @@ -737,7 +738,7 @@ var configDeleteCmd = &cobra.Command{ Short: "Removes one or more config values", RunE: func(cmd *cobra.Command, names []string) error { loader := configureLoader(cmd) - provider, err := getProvider(cmd.Context()) + provider, err := getProvider(cmd.Context(), loader) if err != nil { return err } @@ -764,7 +765,7 @@ var configListCmd = &cobra.Command{ Short: "List configs", RunE: func(cmd *cobra.Command, args []string) error { loader := configureLoader(cmd) - provider, err := getProvider(cmd.Context()) + provider, err := getProvider(cmd.Context(), loader) if err != nil { return err } @@ -781,7 +782,7 @@ var debugCmd = &cobra.Command{ etag, _ := cmd.Flags().GetString("etag") loader := configureLoader(cmd) - provider, err := getProvider(cmd.Context()) + provider, err := getProvider(cmd.Context(), loader) if err != nil { return err } @@ -800,7 +801,7 @@ var deleteCmd = &cobra.Command{ var tail, _ = cmd.Flags().GetBool("tail") loader := configureLoader(cmd) - provider, err := getProvider(cmd.Context()) + provider, err := getProvider(cmd.Context(), loader) if err != nil { return err } @@ -902,7 +903,7 @@ var cdDestroyCmd = &cobra.Command{ Short: "Destroy the service stack", RunE: func(cmd *cobra.Command, args []string) error { loader := configureLoader(cmd) - provider, err := getProvider(cmd.Context()) + provider, err := getProvider(cmd.Context(), loader) if err != nil { return err } @@ -916,7 +917,7 @@ var cdDownCmd = &cobra.Command{ Short: "Refresh and then destroy the service stack", RunE: func(cmd *cobra.Command, args []string) error { loader := configureLoader(cmd) - provider, err := getProvider(cmd.Context()) + provider, err := getProvider(cmd.Context(), loader) if err != nil { return err } @@ -930,7 +931,7 @@ var cdRefreshCmd = &cobra.Command{ Short: "Refresh the service stack", RunE: func(cmd *cobra.Command, args []string) error { loader := configureLoader(cmd) - provider, err := getProvider(cmd.Context()) + provider, err := getProvider(cmd.Context(), loader) if err != nil { return err } @@ -944,7 +945,7 @@ var cdCancelCmd = &cobra.Command{ Short: "Cancel the current CD operation", RunE: func(cmd *cobra.Command, args []string) error { loader := configureLoader(cmd) - provider, err := getProvider(cmd.Context()) + provider, err := getProvider(cmd.Context(), loader) if err != nil { return err } @@ -959,7 +960,8 @@ var cdTearDownCmd = &cobra.Command{ RunE: func(cmd *cobra.Command, args []string) error { force, _ := cmd.Flags().GetBool("force") - provider, err := getProvider(cmd.Context()) + loader := configureLoader(cmd) + provider, err := getProvider(cmd.Context(), loader) if err != nil { return err } @@ -976,7 +978,7 @@ var cdListCmd = &cobra.Command{ remote, _ := cmd.Flags().GetBool("remote") loader := configureLoader(cmd) - provider, err := getProvider(cmd.Context()) + provider, err := getProvider(cmd.Context(), loader) if err != nil { return err } @@ -994,7 +996,7 @@ var cdPreviewCmd = &cobra.Command{ Short: "Preview the changes that will be made by the CD task", RunE: func(cmd *cobra.Command, args []string) error { loader := configureLoader(cmd) - provider, err := getProvider(cmd.Context()) + provider, err := getProvider(cmd.Context(), loader) if err != nil { return err } @@ -1076,30 +1078,29 @@ var providerDescription = map[cliClient.ProviderID]string{ cliClient.ProviderDO: "Deploy to DigitalOcean using the DIGITALOCEAN_TOKEN, SPACES_ACCESS_KEY_ID, and SPACES_SECRET_ACCESS_KEY environment variables.", } -func getProvider(ctx context.Context) (cliClient.Provider, error) { +func getProvider(ctx context.Context, loader *compose.Loader) (cliClient.Provider, error) { + state, source, err := getLocalStateAndUpdateProviderID(ctx, loader) + if err != nil { + return nil, err + } + extraMsg := "" switch providerID { case cliClient.ProviderAuto: if !nonInteractive { - // Prompt the user to choose a provider if in interactive mode - options := []string{} - for _, p := range cliClient.AllProviders() { - options = append(options, p.String()) - } - var optionValue string - if err := survey.AskOne(&survey.Select{ - Message: "Choose a cloud provider:", - Options: options, - Help: "The provider you choose will be used for deploying services.", - Description: func(value string, i int) string { - return providerDescription[cliClient.ProviderID(value)] - }, - }, &optionValue); err != nil { + if err := promptForProviderID(); err != nil { return nil, err } - if err := providerID.Set(optionValue); err != nil { - panic(err) + source = "interactive prompt" + if state != nil { + state.Provider = providerID + if err := state.Write(); err != nil { + term.Warn("Failed to save the provider to the local state file:", err) + } else { + term.Printf("Provider has been set to %s and saved to the local state file %s", providerID, state.StateFilePath()) + } + } else { + term.Printf("To skip this prompt, set the DEFANG_PROVIDER=%s in your environment, or use:\n\n defang --provider=%s\n\n", providerID, providerID) } - term.Printf("To skip this prompt, set the DEFANG_PROVIDER=%s in your environment, or use:\n\n defang --provider=%s\n\n", optionValue, optionValue) } else { // Defaults to defang provider in non-interactive mode if awsInEnv() { @@ -1120,8 +1121,80 @@ func getProvider(ctx context.Context) (cliClient.Provider, error) { } case cliClient.ProviderDefang: // Ignore any env vars when explicitly using the Defang playground provider + extraMsg = "; consider using BYOC (https://s.defang.io/byoc)" } - provider := cli.NewProvider(ctx, providerID, client) + term.Infof("Using %s provider from %s%s", providerID.Name(), source, extraMsg) + provider, err := cli.NewProvider(ctx, providerID, client) + if err != nil { + return nil, err + } return provider, nil } + +func promptForProviderID() error { + // Prompt the user to choose a provider if in interactive mode + options := []string{} + for _, p := range cliClient.AllProviders() { + options = append(options, p.String()) + } + var optionValue string + if err := survey.AskOne(&survey.Select{ + Message: "Choose a cloud provider:", + Options: options, + Help: "The provider you choose will be used for deploying services.", + Description: func(value string, i int) string { + return providerDescription[cliClient.ProviderID(value)] + }, + }, &optionValue); err != nil { + return err + } + if err := providerID.Set(optionValue); err != nil { + panic(err) + } + return nil +} + +func getLocalStateAndUpdateProviderID(ctx context.Context, loader *compose.Loader) (*LocalState, string, error) { + if val, ok := os.LookupEnv("DEFANG_PROVIDER"); ok && val == providerID.String() { + // Sanitize the provider value from the environment variable + if err := providerID.Set(val); err != nil { + return nil, "", fmt.Errorf("invalid provider '%v' in environment variable DEFANG_PROVIDER, supported providers are: %v", val, cliClient.AllProviders()) + } + return nil, "environment variable", nil + } + + if RootCmd.PersistentFlags().Changed("provider") { + return nil, "command line flag", nil + } + + if loader == nil { + return nil, "", nil + } + proj, err := loader.LoadProject(ctx) + if err != nil { + return nil, "", err + } + + if val, ok := proj.Extensions["x-defang-provider"]; ok { + str, ok := val.(string) + if !ok { + return nil, "", fmt.Errorf("invalid provider '%v' in compose file, supported providers are: %v", val, cliClient.AllProviders()) + } + if err := providerID.Set(str); err != nil { + return nil, "", fmt.Errorf("invalid provider '%v' in compose file, supported providers are: %v", val, cliClient.AllProviders()) + } + return nil, "compose file", nil + } + state := &LocalState{WorkingDir: proj.WorkingDir} + + if err := state.Read(); err != nil { + if os.IsNotExist(err) { + return state, "", nil + } + term.Warn("Failed to read the local state file:", err) + return nil, "", nil + } + providerID = state.Provider + return state, fmt.Sprintf("local state file %v", state.StateFilePath()), nil +} diff --git a/src/cmd/cli/command/compose.go b/src/cmd/cli/command/compose.go index 8a1d0f872..47939ff2a 100644 --- a/src/cmd/cli/command/compose.go +++ b/src/cmd/cli/command/compose.go @@ -59,7 +59,7 @@ func makeComposeUpCmd() *cobra.Command { since := time.Now() loader := configureLoader(cmd) - provider, err := getProvider(cmd.Context()) + provider, err := getProvider(cmd.Context(), loader) if err != nil { return err } @@ -254,7 +254,7 @@ func makeComposeDownCmd() *cobra.Command { var detach, _ = cmd.Flags().GetBool("detach") loader := configureLoader(cmd) - provider, err := getProvider(cmd.Context()) + provider, err := getProvider(cmd.Context(), loader) if err != nil { return err } @@ -311,7 +311,7 @@ func makeComposeConfigCmd() *cobra.Command { Short: "Reads a Compose file and shows the generated config", RunE: func(cmd *cobra.Command, args []string) error { loader := configureLoader(cmd) - provider, err := getProvider(cmd.Context()) + provider, err := getProvider(cmd.Context(), loader) if err != nil { return err } @@ -334,7 +334,7 @@ func makeComposeLsCmd() *cobra.Command { long, _ := cmd.Flags().GetBool("long") loader := configureLoader(cmd) - provider, err := getProvider(cmd.Context()) + provider, err := getProvider(cmd.Context(), loader) if err != nil { return err } @@ -407,7 +407,7 @@ func makeComposeLogsCmd() *cobra.Command { } loader := configureLoader(cmd) - provider, err := getProvider(cmd.Context()) + provider, err := getProvider(cmd.Context(), loader) if err != nil { return err } diff --git a/src/cmd/cli/command/hidden.go b/src/cmd/cli/command/hidden.go new file mode 100644 index 000000000..54006a4d1 --- /dev/null +++ b/src/cmd/cli/command/hidden.go @@ -0,0 +1,25 @@ +//go:build !windows + +package command + +import ( + "os" + "path/filepath" + "strings" +) + +func WriteHiddenFile(path string, data []byte, perm os.FileMode) error { + return os.WriteFile(getHiddenPath(path), data, perm) +} + +func ReadHiddenFile(path string) ([]byte, error) { + return os.ReadFile(getHiddenPath(path)) +} + +func getHiddenPath(path string) string { + dir, name := filepath.Split(path) + if !strings.HasPrefix(name, ".") { + name = "." + name + } + return filepath.Join(dir, name) +} diff --git a/src/cmd/cli/command/hidden_windows.go b/src/cmd/cli/command/hidden_windows.go new file mode 100644 index 000000000..3b5d466c8 --- /dev/null +++ b/src/cmd/cli/command/hidden_windows.go @@ -0,0 +1,29 @@ +package command + +import ( + "os" + "syscall" +) + +func WriteHiddenFile(path string, data []byte, perm os.FileMode) error { + err := os.WriteFile(path, data, perm) + if err != nil { + return err + } + + winPath, err := syscall.UTF16PtrFromString(path) + if err != nil { + return err + } + + err = syscall.SetFileAttributes(winPath, syscall.FILE_ATTRIBUTE_HIDDEN) + if err != nil { + return err + } + + return nil +} + +func ReadHiddenFile(path string) ([]byte, error) { + return os.ReadFile(path) +} diff --git a/src/cmd/cli/command/localstate.go b/src/cmd/cli/command/localstate.go new file mode 100644 index 000000000..ee307ed1a --- /dev/null +++ b/src/cmd/cli/command/localstate.go @@ -0,0 +1,35 @@ +package command + +import ( + "encoding/json" + "path/filepath" + + cliClient "github.com/DefangLabs/defang/src/pkg/cli/client" +) + +const DEFANG_LOCAL_STATE_FILENAME = ".defang" + +type LocalState struct { + WorkingDir string `json:"-"` + Provider cliClient.ProviderID `json:"provider"` +} + +func (state *LocalState) Read() error { + bytes, err := ReadHiddenFile(state.StateFilePath()) + if err != nil { + return err + } + return json.Unmarshal(bytes, state) +} + +func (state *LocalState) Write() error { + if bytes, err := json.MarshalIndent(state, "", " "); err != nil { + return err + } else { + return WriteHiddenFile(state.StateFilePath(), bytes, 0644) + } +} + +func (state *LocalState) StateFilePath() string { + return filepath.Join(state.WorkingDir, DEFANG_LOCAL_STATE_FILENAME) +} diff --git a/src/pkg/cli/client/byoc/aws/byoc.go b/src/pkg/cli/client/byoc/aws/byoc.go index b9864021c..36bd5348e 100644 --- a/src/pkg/cli/client/byoc/aws/byoc.go +++ b/src/pkg/cli/client/byoc/aws/byoc.go @@ -74,17 +74,29 @@ func (e ErrMissingAwsCreds) Unwrap() error { return e.err } -func NewByocProvider(ctx context.Context, tenantId types.TenantID) (*ByocAws, error) { +func AnnotateAwsError(err error) error { + if err == nil { + return nil + } + term.Debug("AWS error:", err) + if strings.Contains(err.Error(), "get credentials:") { + return connect.NewError(connect.CodeUnauthenticated, ErrMissingAwsCreds{err}) + } + if cerr := new(aws.ErrNoSuchKey); errors.As(err, &cerr) { + return connect.NewError(connect.CodeNotFound, err) + } + if cerr := new(aws.ErrParameterNotFound); errors.As(err, &cerr) { + return connect.NewError(connect.CodeNotFound, err) + } + return err +} + +func NewByocProvider(ctx context.Context, tenantId types.TenantID) *ByocAws { b := &ByocAws{ driver: cfn.New(byoc.CdTaskPrefix, aws.Region("")), // default region } b.ByocBaseClient = byoc.NewByocBaseClient(ctx, tenantId, b) - - _, err := b.AccountInfo(ctx) - if err != nil { - return b, ErrMissingAwsCreds{err: err} - } - return b, nil + return b } func (b *ByocAws) setUpCD(ctx context.Context, projectName string) (string, error) { @@ -132,7 +144,7 @@ func (b *ByocAws) setUpCD(ctx context.Context, projectName string) (string, erro }, } if err := b.driver.SetUp(ctx, containers); err != nil { - return "", byoc.AnnotateAwsError(err) + return "", AnnotateAwsError(err) } b.SetupDone = true @@ -272,7 +284,7 @@ func (b *ByocAws) deploy(ctx context.Context, req *defangv1.DeployRequest, cmd s func (b *ByocAws) findZone(ctx context.Context, domain, roleARN string) (string, error) { cfg, err := b.driver.LoadConfig(ctx) if err != nil { - return "", byoc.AnnotateAwsError(err) + return "", AnnotateAwsError(err) } if roleARN != "" { @@ -305,7 +317,7 @@ func (b *ByocAws) PrepareDomainDelegation(ctx context.Context, req client.Prepar cfg, err := b.driver.LoadConfig(ctx) if err != nil { - return nil, byoc.AnnotateAwsError(err) + return nil, AnnotateAwsError(err) } r53Client := route53.NewFromConfig(cfg) @@ -320,7 +332,7 @@ func (b *ByocAws) PrepareDomainDelegation(ctx context.Context, req client.Prepar zone, err := aws.GetHostedZoneByName(ctx, projectDomain, r53Client) if err != nil { if !errors.Is(err, aws.ErrZoneNotFound) { - return nil, byoc.AnnotateAwsError(err) // TODO: we should not fail deployment if this fails + return nil, AnnotateAwsError(err) // TODO: we should not fail deployment if this fails } term.Debugf("Zone %q not found, delegation set will be created", projectDomain) // Case 1: The zone doesn't exist: we'll create a delegation set and let CD/Pulumi create the hosted zone @@ -328,7 +340,7 @@ func (b *ByocAws) PrepareDomainDelegation(ctx context.Context, req client.Prepar // Case 2: Get the NS records for the existing subdomain zone nsServers, err = aws.ListResourceRecords(ctx, *zone.Id, projectDomain, r53types.RRTypeNs, r53Client) if err != nil { - return nil, byoc.AnnotateAwsError(err) // TODO: we should not fail deployment if this fails + return nil, AnnotateAwsError(err) // TODO: we should not fail deployment if this fails } term.Debugf("Zone %q found, NS records: %v", projectDomain, nsServers) } @@ -349,7 +361,7 @@ func (b *ByocAws) PrepareDomainDelegation(ctx context.Context, req client.Prepar delegationSet, err = aws.GetDelegationSet(ctx, r53Client) } if err != nil { - return nil, byoc.AnnotateAwsError(err) + return nil, AnnotateAwsError(err) } if len(delegationSet.NameServers) == 0 { return nil, errors.New("no NS records found for the delegation set") // should not happen @@ -381,11 +393,11 @@ func (b *ByocAws) AccountInfo(ctx context.Context) (client.AccountInfo, error) { // Use STS to get the account ID cfg, err := b.driver.LoadConfig(ctx) if err != nil { - return nil, byoc.AnnotateAwsError(err) + return nil, AnnotateAwsError(err) } identity, err := sts.NewFromConfig(cfg).GetCallerIdentity(ctx, &sts.GetCallerIdentityInput{}) if err != nil { - return nil, byoc.AnnotateAwsError(err) + return nil, AnnotateAwsError(err) } return AWSAccountInfo{ region: cfg.Region, @@ -499,7 +511,7 @@ func (b *ByocAws) Delete(ctx context.Context, req *defangv1.DeleteRequest) (*def } taskArn, err := b.runCdCommand(ctx, cmd) if err != nil { - return nil, byoc.AnnotateAwsError(err) + return nil, AnnotateAwsError(err) } etag := ecs.GetTaskID(taskArn) // TODO: this is the CD task ID, not the etag b.lastCdEtag = etag @@ -526,14 +538,14 @@ func (b *ByocAws) getProjectUpdate(ctx context.Context, projectName string) (*de if errors.As(err, &cfnErr) { return nil, nil // no services yet } - return nil, byoc.AnnotateAwsError(err) + return nil, AnnotateAwsError(err) } bucketName = b.bucketName() } cfg, err := b.driver.LoadConfig(ctx) if err != nil { - return nil, byoc.AnnotateAwsError(err) + return nil, AnnotateAwsError(err) } s3Client := s3.NewFromConfig(cfg) @@ -552,7 +564,7 @@ func (b *ByocAws) getProjectUpdate(ctx context.Context, projectName string) (*de term.Debug("s3.GetObject:", err) return nil, nil // no services yet } - return nil, byoc.AnnotateAwsError(err) + return nil, AnnotateAwsError(err) } defer getObjectOutput.Body.Close() pbBytes, err := io.ReadAll(getObjectOutput.Body) @@ -594,7 +606,7 @@ func (b *ByocAws) PutConfig(ctx context.Context, secret *defangv1.PutConfigReque fqn := b.getSecretID(secret.Project, secret.Name) term.Debugf("Putting parameter %q", fqn) err := b.driver.PutSecret(ctx, fqn, secret.Value) - return byoc.AnnotateAwsError(err) + return AnnotateAwsError(err) } func (b *ByocAws) ListConfig(ctx context.Context, req *defangv1.ListConfigsRequest) (*defangv1.Secrets, error) { @@ -664,7 +676,7 @@ func (b *ByocAws) Query(ctx context.Context, req *defangv1.DebugRequest) error { sb.WriteByte('\n') } }); err != nil { - term.Warn("CloudWatch query failed:", byoc.AnnotateAwsError(err)) + term.Warn("CloudWatch query failed:", AnnotateAwsError(err)) // continue reading other log groups } } @@ -702,7 +714,7 @@ func (b *ByocAws) Follow(ctx context.Context, req *defangv1.TailRequest) (client taskArn = b.lastCdTaskArn } if err != nil { - return nil, byoc.AnnotateAwsError(err) + return nil, AnnotateAwsError(err) } if taskArn != nil { var cancel context.CancelCauseFunc @@ -864,7 +876,7 @@ func (b *ByocAws) BootstrapCommand(ctx context.Context, req client.BootstrapComm } cdTaskArn, err := b.runCdCommand(ctx, cmd) // TODO: make domain optional for defang cd if err != nil || cdTaskArn == nil { - return "", byoc.AnnotateAwsError(err) + return "", AnnotateAwsError(err) } return ecs.GetTaskID(cdTaskArn), nil } @@ -880,7 +892,7 @@ func (b *ByocAws) DeleteConfig(ctx context.Context, secrets *defangv1.Secrets) e } term.Debug("Deleting parameters", ids) if err := b.driver.DeleteSecrets(ctx, ids...); err != nil { - return byoc.AnnotateAwsError(err) + return AnnotateAwsError(err) } return nil } @@ -889,14 +901,14 @@ func (b *ByocAws) BootstrapList(ctx context.Context) ([]string, error) { bucketName := b.bucketName() if bucketName == "" { if err := b.driver.FillOutputs(ctx); err != nil { - return nil, byoc.AnnotateAwsError(err) + return nil, AnnotateAwsError(err) } bucketName = b.bucketName() } cfg, err := b.driver.LoadConfig(ctx) if err != nil { - return nil, byoc.AnnotateAwsError(err) + return nil, AnnotateAwsError(err) } s3client := s3.NewFromConfig(cfg) @@ -908,7 +920,7 @@ func (b *ByocAws) BootstrapList(ctx context.Context) ([]string, error) { Prefix: &prefix, }) if err != nil { - return nil, byoc.AnnotateAwsError(err) + return nil, AnnotateAwsError(err) } var stacks []string for _, obj := range out.Contents { diff --git a/src/pkg/cli/client/byoc/aws/byoc_integration_test.go b/src/pkg/cli/client/byoc/aws/byoc_integration_test.go index eed0b8c2e..5f5678e51 100644 --- a/src/pkg/cli/client/byoc/aws/byoc_integration_test.go +++ b/src/pkg/cli/client/byoc/aws/byoc_integration_test.go @@ -4,11 +4,9 @@ package aws import ( "context" - "errors" "strings" "testing" - "github.com/DefangLabs/defang/src/pkg/cli/client" defangv1 "github.com/DefangLabs/defang/src/protos/io/defang/v1" "github.com/bufbuild/connect-go" ) @@ -16,20 +14,13 @@ import ( var ctx = context.Background() func TestDeploy(t *testing.T) { - b, err := NewByocProvider(ctx, client.GrpcClient{}, "ten ant") // no domain - if err != nil { - var credErr ErrMissingAwsCreds - if errors.As(err, &credErr) { - t.Skip("skipping test; not authenticated") - } - t.Fatalf("unexpected error: %v", err) - } - b.ProjectName = "byoc_integration_test" + b := NewByocProvider(ctx, "ten ant") // no domain t.Run("multiple ingress without domain", func(t *testing.T) { t.Skip("skipping test: delegation enabled") _, err := b.Deploy(context.Background(), &defangv1.DeployRequest{ + Project: "byoc_integration_test", Services: []*defangv1.Service{{ Name: "test", Image: "docker.io/library/nginx:latest", @@ -49,18 +40,9 @@ func TestDeploy(t *testing.T) { } func TestTail(t *testing.T) { - b, err := NewByocProvider(ctx, client.GrpcClient{}, "TestTail") - if err != nil { - var credErr ErrMissingAwsCreds - if errors.As(err, &credErr) { - t.Skip("skipping test; not authenticated") - } - t.Fatalf("unexpected error: %v", err) - } - b.ProjectName = "byoc_integration_test" - b.ProjectDomain = "example.com" // avoid rpc call + b := NewByocProvider(ctx, "TestTail") - ss, err := b.Follow(context.Background(), &defangv1.TailRequest{}) + ss, err := b.Follow(context.Background(), &defangv1.TailRequest{Project: "byoc_integration_test"}) if err != nil { // the only acceptable error is "unauthorized" if connect.CodeOf(err) == connect.CodeUnauthenticated { @@ -84,17 +66,9 @@ func TestTail(t *testing.T) { } func TestGetServices(t *testing.T) { - b, err := NewByocProvider(ctx, client.GrpcClient{}, "TestGetServices") - if err != nil { - var credErr ErrMissingAwsCreds - if errors.As(err, &credErr) { - t.Skip("skipping test; not authenticated") - } - t.Fatalf("unexpected error: %v", err) - } - b.ProjectName = "byoc_integration_test" + b := NewByocProvider(ctx, "TestGetServices") - services, err := b.GetServices(context.Background()) + services, err := b.GetServices(context.Background(), &defangv1.GetServicesRequest{Project: "byoc_integration_test"}) if err != nil { if connect.CodeOf(err) == connect.CodeUnauthenticated { t.Skip("skipping test; not authorized") @@ -111,18 +85,10 @@ func TestGetServices(t *testing.T) { func TestPutSecret(t *testing.T) { const secretName = "hello" - b, err := NewByocProvider(ctx, client.GrpcClient{}, "TestPutSecret") - if err != nil { - var credErr ErrMissingAwsCreds - if errors.As(err, &credErr) { - t.Skip("skipping test; not authenticated") - } - t.Fatalf("unexpected error: %v", err) - } - b.ProjectName = "byoc_integration_test" + b := NewByocProvider(ctx, "TestPutSecret") t.Run("delete non-existent", func(t *testing.T) { - err := b.DeleteConfig(context.Background(), &defangv1.Secrets{Names: []string{secretName}}) + err := b.DeleteConfig(context.Background(), &defangv1.Secrets{Project: "byoc_integration_test", Names: []string{secretName}}) if err != nil { // the only acceptable error is "unauthorized" if connect.CodeOf(err) == connect.CodeUnauthenticated { @@ -142,7 +108,7 @@ func TestPutSecret(t *testing.T) { }) t.Run("put", func(t *testing.T) { - err := b.PutConfig(context.Background(), &defangv1.PutConfigRequest{Name: secretName, Value: "world"}) + err := b.PutConfig(context.Background(), &defangv1.PutConfigRequest{Project: "byoc_integration_test", Name: secretName, Value: "world"}) if err != nil { // the only acceptable error is "unauthorized" if connect.CodeOf(err) == connect.CodeUnauthenticated { @@ -151,10 +117,10 @@ func TestPutSecret(t *testing.T) { t.Fatalf("unexpected error: %v", err) } t.Cleanup(func() { - b.DeleteConfig(context.Background(), &defangv1.Secrets{Names: []string{secretName}}) + b.DeleteConfig(context.Background(), &defangv1.Secrets{Project: "byoc_integration_test", Names: []string{secretName}}) }) // Check that the secret is in the list - prefix := "/Defang/" + b.ProjectName + "/beta/" + prefix := "/Defang/byoc_integration_test/beta/" secrets, err := b.driver.ListSecretsByPrefix(context.Background(), prefix) if err != nil { t.Fatalf("unexpected error: %v", err) @@ -170,18 +136,10 @@ func TestPutSecret(t *testing.T) { } func TestListSecrets(t *testing.T) { - b, err := NewByocProvider(ctx, client.GrpcClient{}, "TestListSecrets") - if err != nil { - var credErr ErrMissingAwsCreds - if errors.As(err, &credErr) { - t.Skip("skipping test; not authenticated") - } - t.Fatalf("unexpected error: %v", err) - } - b.ProjectName = "byoc_integration_test2" // ensure we don't accidentally see the secrets from the other test + b := NewByocProvider(ctx, "TestListSecrets") t.Run("list", func(t *testing.T) { - secrets, err := b.ListConfig(context.Background()) + secrets, err := b.ListConfig(context.Background(), &defangv1.ListConfigsRequest{Project: "byoc_integration_test2"}) // ensure we don't accidentally see the secrets from the other test if err != nil { // the only acceptable error is "unauthorized" if connect.CodeOf(err) == connect.CodeUnauthenticated { diff --git a/src/pkg/cli/client/byoc/aws/byoc_test.go b/src/pkg/cli/client/byoc/aws/byoc_test.go index abfe7164e..1a5373bcb 100644 --- a/src/pkg/cli/client/byoc/aws/byoc_test.go +++ b/src/pkg/cli/client/byoc/aws/byoc_test.go @@ -6,7 +6,6 @@ import ( "context" "embed" "encoding/json" - "errors" "io" "path" "strings" @@ -170,20 +169,6 @@ func TestSubscribe(t *testing.T) { } } -func TestNewByocProvider(t *testing.T) { - t.Run("no aws credentials", func(t *testing.T) { - _, err := NewByocProvider(context.Background(), "tenant1") - if err != nil { - var credErr ErrMissingAwsCreds - if !errors.As(err, &credErr) { - t.Fatalf("NewByocProvider() failed: %v", err) - } - } else { - t.Fatal("NewByocProvider() failed: expected MissingAwsCreds error but didn't get one") - } - }) -} - func TestGetCDImageTag(t *testing.T) { ctx := context.Background() diff --git a/src/pkg/cli/client/byoc/aws/stream.go b/src/pkg/cli/client/byoc/aws/stream.go index 55275014d..ddc0a4e32 100644 --- a/src/pkg/cli/client/byoc/aws/stream.go +++ b/src/pkg/cli/client/byoc/aws/stream.go @@ -50,7 +50,7 @@ func (bs *byocServerStream) Err() error { if bs.err == io.EOF { return nil // same as the original gRPC/connect server stream } - return byoc.AnnotateAwsError(bs.err) + return AnnotateAwsError(bs.err) } func (bs *byocServerStream) Msg() *defangv1.TailResponse { diff --git a/src/pkg/cli/client/byoc/baseclient.go b/src/pkg/cli/client/byoc/baseclient.go index 85e515572..502042cd7 100644 --- a/src/pkg/cli/client/byoc/baseclient.go +++ b/src/pkg/cli/client/byoc/baseclient.go @@ -10,12 +10,10 @@ import ( "github.com/DefangLabs/defang/src/pkg" "github.com/DefangLabs/defang/src/pkg/cli/client" - "github.com/DefangLabs/defang/src/pkg/clouds/aws" "github.com/DefangLabs/defang/src/pkg/quota" "github.com/DefangLabs/defang/src/pkg/term" "github.com/DefangLabs/defang/src/pkg/types" defangv1 "github.com/DefangLabs/defang/src/protos/io/defang/v1" - "github.com/bufbuild/connect-go" ) const ( @@ -28,23 +26,6 @@ var ( DefangPrefix = pkg.Getenv("DEFANG_PREFIX", "Defang") // prefix for all resources created by Defang ) -func AnnotateAwsError(err error) error { - if err == nil { - return nil - } - term.Debug("AWS error:", err) - if strings.Contains(err.Error(), "get credentials:") { - return connect.NewError(connect.CodeUnauthenticated, err) - } - if aws.IsS3NoSuchKeyError(err) { - return connect.NewError(connect.CodeNotFound, err) - } - if aws.IsParameterNotFoundError(err) { - return connect.NewError(connect.CodeNotFound, err) - } - return err -} - // This function was copied from Fabric controller and slightly modified to work with BYOC func DnsSafeLabel(fqn string) string { return strings.ReplaceAll(DnsSafe(fqn), ".", "-") diff --git a/src/pkg/cli/client/byoc/do/byoc.go b/src/pkg/cli/client/byoc/do/byoc.go index e98890194..74847933e 100644 --- a/src/pkg/cli/client/byoc/do/byoc.go +++ b/src/pkg/cli/client/byoc/do/byoc.go @@ -20,6 +20,7 @@ import ( "github.com/DefangLabs/defang/src/pkg" "github.com/DefangLabs/defang/src/pkg/cli/client" "github.com/DefangLabs/defang/src/pkg/cli/client/byoc" + awsbyoc "github.com/DefangLabs/defang/src/pkg/cli/client/byoc/aws" "github.com/DefangLabs/defang/src/pkg/cli/compose" "github.com/DefangLabs/defang/src/pkg/clouds/aws" @@ -57,23 +58,20 @@ type ByocDo struct { var _ client.Provider = (*ByocDo)(nil) -func NewByocProvider(ctx context.Context, tenantId types.TenantID) (*ByocDo, error) { +func NewByocProvider(ctx context.Context, tenantId types.TenantID) *ByocDo { doRegion := do.Region(os.Getenv("REGION")) if doRegion == "" { doRegion = region.SFO3 // TODO: change default } - client, err := appPlatform.NewClient(ctx) - if err != nil { - return nil, err - } + client := appPlatform.NewClient(ctx) b := &ByocDo{ client: client, driver: appPlatform.New(doRegion), } b.ByocBaseClient = byoc.NewByocBaseClient(ctx, tenantId, b) - return b, nil + return b } func (b *ByocDo) getCdImageTag(ctx context.Context, projectName string) (string, error) { @@ -127,7 +125,7 @@ func (b *ByocDo) getProjectUpdate(ctx context.Context, projectName string) (*def term.Debug("s3.GetObject:", err) return nil, nil // no services yet } - return nil, byoc.AnnotateAwsError(err) + return nil, awsbyoc.AnnotateAwsError(err) } defer getObjectOutput.Body.Close() pbBytes, err := io.ReadAll(getObjectOutput.Body) @@ -489,16 +487,24 @@ func (b *ByocDo) TearDown(ctx context.Context) error { } func (b *ByocDo) AccountInfo(ctx context.Context) (client.AccountInfo, error) { - return DoAccountInfo{region: b.driver.Region.String()}, nil + accessToken := os.Getenv("DIGITALOCEAN_TOKEN") + if accessToken == "" { + return nil, errors.New("DIGITALOCEAN_TOKEN must be set (https://docs.defang.io/docs/providers/digitalocean#getting-started)") + } + account, _, err := b.client.Account.Get(ctx) + if err != nil { + return nil, err + } + return DoAccountInfo{region: b.driver.Region.String(), accountID: account.Email}, nil } type DoAccountInfo struct { - region string - // accountID string TODO: Find out the best field to be used as account id from https://docs.digitalocean.com/reference/api/api-reference/#tag/Account + region string + accountID string } func (i DoAccountInfo) AccountID() string { - return "DigitalOcean" + return i.accountID } func (i DoAccountInfo) Region() string { diff --git a/src/pkg/cli/client/provider.go b/src/pkg/cli/client/provider.go index 40b0ddd96..9591f29f9 100644 --- a/src/pkg/cli/client/provider.go +++ b/src/pkg/cli/client/provider.go @@ -38,6 +38,21 @@ func (p ProviderID) String() string { return string(p) } +func (p ProviderID) Name() string { + switch p { + case ProviderAuto: + return "Auto" + case ProviderDefang: + return "Defang Playground" + case ProviderAWS: + return "AWS" + case ProviderDO: + return "DigitalOcean" + default: + return p.String() + } +} + func (p *ProviderID) Set(str string) error { str = strings.ToLower(str) for _, provider := range allProviders { diff --git a/src/pkg/cli/connect.go b/src/pkg/cli/connect.go index 3274e9ac2..0b7c1c1b3 100644 --- a/src/pkg/cli/connect.go +++ b/src/pkg/cli/connect.go @@ -56,24 +56,17 @@ func NewGrpcClient(ctx context.Context, cluster string) client.GrpcClient { return grpcClient } -func NewProvider(ctx context.Context, providerID client.ProviderID, grpcClient client.GrpcClient) client.Provider { +func NewProvider(ctx context.Context, providerID client.ProviderID, grpcClient client.GrpcClient) (client.Provider, error) { + var provider client.Provider + term.Debugf("Creating provider %q", providerID) switch providerID { case client.ProviderAWS: - term.Info("Using AWS provider") - awsProvider, err := aws.NewByocProvider(ctx, grpcClient.TenantID) - if err != nil { - term.Fatal(err) - } - return awsProvider + provider = aws.NewByocProvider(ctx, grpcClient.TenantID) case client.ProviderDO: - term.Info("Using DigitalOcean provider") - doProvider, err := do.NewByocProvider(ctx, grpcClient.TenantID) - if err != nil { - term.Fatal(err) - } - return doProvider + provider = do.NewByocProvider(ctx, grpcClient.TenantID) default: - term.Info("Using Defang Playground; consider using BYOC (https://s.defang.io/byoc)") - return &client.PlaygroundProvider{GrpcClient: grpcClient} + provider = &client.PlaygroundProvider{GrpcClient: grpcClient} } + _, err := provider.AccountInfo(ctx) + return provider, err } diff --git a/src/pkg/clouds/do/appPlatform/setup.go b/src/pkg/clouds/do/appPlatform/setup.go index b454f03d8..6105e33ce 100644 --- a/src/pkg/clouds/do/appPlatform/setup.go +++ b/src/pkg/clouds/do/appPlatform/setup.go @@ -123,10 +123,7 @@ func getImageSourceSpec() (*godo.ImageSourceSpec, error) { } func (d DoApp) Run(ctx context.Context, env []*godo.AppVariableDefinition, cmd ...string) (*godo.App, error) { - client, err := NewClient(ctx) - if err != nil { - return nil, err - } + client := NewClient(ctx) image, err := getImageSourceSpec() if err != nil { @@ -231,14 +228,11 @@ func waitForActiveDeployment(ctx context.Context, apps godo.AppsService, appID s return fmt.Errorf("timeout waiting to app (%s) deployment", appID) } -func NewClient(ctx context.Context) (*godo.Client, error) { +func NewClient(ctx context.Context) *godo.Client { accessToken := os.Getenv("DIGITALOCEAN_TOKEN") - if accessToken == "" { - return nil, errors.New("DIGITALOCEAN_TOKEN must be set (https://docs.defang.io/docs/providers/digitalocean#getting-started)") - } tokenSource := &oauth2.Token{AccessToken: accessToken} httpClient := oauth2.NewClient(ctx, oauth2.StaticTokenSource(tokenSource)) - return godo.NewClient(httpClient), nil + return godo.NewClient(httpClient) } var s3InvalidCharsRegexp = regexp.MustCompile(`[^a-zA-Z0-9!_.*'()-]`) From d98d1359a6fba894a5125e99a66633ac306fdd76 Mon Sep 17 00:00:00 2001 From: Edward J Date: Wed, 13 Nov 2024 10:39:44 -0800 Subject: [PATCH 2/3] Use fabric to save default provider for project --- src/cmd/cli/command/commands.go | 101 +- src/cmd/cli/command/hidden.go | 25 - src/cmd/cli/command/hidden_windows.go | 29 - src/cmd/cli/command/localstate.go | 35 - src/pkg/cli/client/grpc.go | 9 + .../v1/defangv1connect/fabric.connect.go | 58 + src/protos/io/defang/v1/fabric.pb.go | 2255 +++++++++-------- src/protos/io/defang/v1/fabric.proto | 24 + 8 files changed, 1347 insertions(+), 1189 deletions(-) delete mode 100644 src/cmd/cli/command/hidden.go delete mode 100644 src/cmd/cli/command/hidden_windows.go delete mode 100644 src/cmd/cli/command/localstate.go diff --git a/src/cmd/cli/command/commands.go b/src/cmd/cli/command/commands.go index cc930b3be..fd8f81fbb 100644 --- a/src/cmd/cli/command/commands.go +++ b/src/cmd/cli/command/commands.go @@ -1079,28 +1079,28 @@ var providerDescription = map[cliClient.ProviderID]string{ } func getProvider(ctx context.Context, loader *compose.Loader) (cliClient.Provider, error) { - state, source, err := getLocalStateAndUpdateProviderID(ctx, loader) - if err != nil { - return nil, err - } extraMsg := "" + source := "" + + if val, ok := os.LookupEnv("DEFANG_PROVIDER"); ok && val == providerID.String() { + // Sanitize the provider value from the environment variable + if err := providerID.Set(val); err != nil { + return nil, fmt.Errorf("invalid provider '%v' in environment variable DEFANG_PROVIDER, supported providers are: %v", val, cliClient.AllProviders()) + } + source = "environment variable" + } + + if RootCmd.PersistentFlags().Changed("provider") { + source = "command line flag" + } + switch providerID { case cliClient.ProviderAuto: if !nonInteractive { - if err := promptForProviderID(); err != nil { + var err error + if source, err = determineProviderID(ctx, loader); err != nil { return nil, err } - source = "interactive prompt" - if state != nil { - state.Provider = providerID - if err := state.Write(); err != nil { - term.Warn("Failed to save the provider to the local state file:", err) - } else { - term.Printf("Provider has been set to %s and saved to the local state file %s", providerID, state.StateFilePath()) - } - } else { - term.Printf("To skip this prompt, set the DEFANG_PROVIDER=%s in your environment, or use:\n\n defang --provider=%s\n\n", providerID, providerID) - } } else { // Defaults to defang provider in non-interactive mode if awsInEnv() { @@ -1132,7 +1132,23 @@ func getProvider(ctx context.Context, loader *compose.Loader) (cliClient.Provide return provider, nil } -func promptForProviderID() error { +func determineProviderID(ctx context.Context, loader *compose.Loader) (string, error) { + proj, err := loader.LoadProject(ctx) + if err != nil { + term.Warn("Unable to load project:", err) + } else if !RootCmd.PersistentFlags().Changed("provider") { // If user manually selected auto provider, do not load from remote + resp, err := client.GetSelectedProvider(ctx, &defangv1.GetSelectedProviderRequest{Project: proj.Name}) + if err != nil { + term.Warn("Unable to get selected provider:", err) + } else if resp.Provider != "" { + if err := providerID.Set(resp.Provider); err != nil { + term.Warn("Invalid provider from fabric:", err) + } else { + return "defang server", nil + } + } + } + // Prompt the user to choose a provider if in interactive mode options := []string{} for _, p := range cliClient.AllProviders() { @@ -1147,54 +1163,19 @@ func promptForProviderID() error { return providerDescription[cliClient.ProviderID(value)] }, }, &optionValue); err != nil { - return err + return "", err } if err := providerID.Set(optionValue); err != nil { panic(err) } - return nil -} - -func getLocalStateAndUpdateProviderID(ctx context.Context, loader *compose.Loader) (*LocalState, string, error) { - if val, ok := os.LookupEnv("DEFANG_PROVIDER"); ok && val == providerID.String() { - // Sanitize the provider value from the environment variable - if err := providerID.Set(val); err != nil { - return nil, "", fmt.Errorf("invalid provider '%v' in environment variable DEFANG_PROVIDER, supported providers are: %v", val, cliClient.AllProviders()) - } - return nil, "environment variable", nil - } - - if RootCmd.PersistentFlags().Changed("provider") { - return nil, "command line flag", nil - } - - if loader == nil { - return nil, "", nil - } - proj, err := loader.LoadProject(ctx) - if err != nil { - return nil, "", err - } - - if val, ok := proj.Extensions["x-defang-provider"]; ok { - str, ok := val.(string) - if !ok { - return nil, "", fmt.Errorf("invalid provider '%v' in compose file, supported providers are: %v", val, cliClient.AllProviders()) - } - if err := providerID.Set(str); err != nil { - return nil, "", fmt.Errorf("invalid provider '%v' in compose file, supported providers are: %v", val, cliClient.AllProviders()) - } - return nil, "compose file", nil - } - state := &LocalState{WorkingDir: proj.WorkingDir} - if err := state.Read(); err != nil { - if os.IsNotExist(err) { - return state, "", nil + // Save the selected provider to the fabric + if proj != nil { + if err := client.SetSelectedProvider(ctx, &defangv1.SetSelectedProviderRequest{Project: proj.Name, Provider: providerID.String()}); err != nil { + term.Warn("Unable to save selected provider to defang server:", err) + } else { + term.Printf("%v is now the default provider for project %v and will auto-select next time if no other provider is specified. Use --provider=auto to reselect.", providerID, proj.Name) } - term.Warn("Failed to read the local state file:", err) - return nil, "", nil } - providerID = state.Provider - return state, fmt.Sprintf("local state file %v", state.StateFilePath()), nil + return "interactive prompt", nil } diff --git a/src/cmd/cli/command/hidden.go b/src/cmd/cli/command/hidden.go deleted file mode 100644 index 54006a4d1..000000000 --- a/src/cmd/cli/command/hidden.go +++ /dev/null @@ -1,25 +0,0 @@ -//go:build !windows - -package command - -import ( - "os" - "path/filepath" - "strings" -) - -func WriteHiddenFile(path string, data []byte, perm os.FileMode) error { - return os.WriteFile(getHiddenPath(path), data, perm) -} - -func ReadHiddenFile(path string) ([]byte, error) { - return os.ReadFile(getHiddenPath(path)) -} - -func getHiddenPath(path string) string { - dir, name := filepath.Split(path) - if !strings.HasPrefix(name, ".") { - name = "." + name - } - return filepath.Join(dir, name) -} diff --git a/src/cmd/cli/command/hidden_windows.go b/src/cmd/cli/command/hidden_windows.go deleted file mode 100644 index 3b5d466c8..000000000 --- a/src/cmd/cli/command/hidden_windows.go +++ /dev/null @@ -1,29 +0,0 @@ -package command - -import ( - "os" - "syscall" -) - -func WriteHiddenFile(path string, data []byte, perm os.FileMode) error { - err := os.WriteFile(path, data, perm) - if err != nil { - return err - } - - winPath, err := syscall.UTF16PtrFromString(path) - if err != nil { - return err - } - - err = syscall.SetFileAttributes(winPath, syscall.FILE_ATTRIBUTE_HIDDEN) - if err != nil { - return err - } - - return nil -} - -func ReadHiddenFile(path string) ([]byte, error) { - return os.ReadFile(path) -} diff --git a/src/cmd/cli/command/localstate.go b/src/cmd/cli/command/localstate.go deleted file mode 100644 index ee307ed1a..000000000 --- a/src/cmd/cli/command/localstate.go +++ /dev/null @@ -1,35 +0,0 @@ -package command - -import ( - "encoding/json" - "path/filepath" - - cliClient "github.com/DefangLabs/defang/src/pkg/cli/client" -) - -const DEFANG_LOCAL_STATE_FILENAME = ".defang" - -type LocalState struct { - WorkingDir string `json:"-"` - Provider cliClient.ProviderID `json:"provider"` -} - -func (state *LocalState) Read() error { - bytes, err := ReadHiddenFile(state.StateFilePath()) - if err != nil { - return err - } - return json.Unmarshal(bytes, state) -} - -func (state *LocalState) Write() error { - if bytes, err := json.MarshalIndent(state, "", " "); err != nil { - return err - } else { - return WriteHiddenFile(state.StateFilePath(), bytes, 0644) - } -} - -func (state *LocalState) StateFilePath() string { - return filepath.Join(state.WorkingDir, DEFANG_LOCAL_STATE_FILENAME) -} diff --git a/src/pkg/cli/client/grpc.go b/src/pkg/cli/client/grpc.go index d6eaf3341..9cc2dcde7 100644 --- a/src/pkg/cli/client/grpc.go +++ b/src/pkg/cli/client/grpc.go @@ -121,3 +121,12 @@ func (g GrpcClient) VerifyDNSSetup(ctx context.Context, req *defangv1.VerifyDNSS _, err := g.client.VerifyDNSSetup(ctx, connect.NewRequest(req)) return err } + +func (g GrpcClient) GetSelectedProvider(ctx context.Context, req *defangv1.GetSelectedProviderRequest) (*defangv1.GetSelectedProviderResponse, error) { + return getMsg(g.client.GetSelectedProvider(ctx, connect.NewRequest(req))) +} + +func (g GrpcClient) SetSelectedProvider(ctx context.Context, req *defangv1.SetSelectedProviderRequest) error { + _, err := g.client.SetSelectedProvider(ctx, connect.NewRequest(req)) + return err +} diff --git a/src/protos/io/defang/v1/defangv1connect/fabric.connect.go b/src/protos/io/defang/v1/defangv1connect/fabric.connect.go index 169281f12..68cffe216 100644 --- a/src/protos/io/defang/v1/defangv1connect/fabric.connect.go +++ b/src/protos/io/defang/v1/defangv1connect/fabric.connect.go @@ -129,6 +129,12 @@ const ( // FabricControllerVerifyDNSSetupProcedure is the fully-qualified name of the FabricController's // VerifyDNSSetup RPC. FabricControllerVerifyDNSSetupProcedure = "/io.defang.v1.FabricController/VerifyDNSSetup" + // FabricControllerGetSelectedProviderProcedure is the fully-qualified name of the + // FabricController's GetSelectedProvider RPC. + FabricControllerGetSelectedProviderProcedure = "/io.defang.v1.FabricController/GetSelectedProvider" + // FabricControllerSetSelectedProviderProcedure is the fully-qualified name of the + // FabricController's SetSelectedProvider RPC. + FabricControllerSetSelectedProviderProcedure = "/io.defang.v1.FabricController/SetSelectedProvider" ) // FabricControllerClient is a client for the io.defang.v1.FabricController service. @@ -177,6 +183,8 @@ type FabricControllerClient interface { // Endpoint for GDPR compliance DeleteMe(context.Context, *connect_go.Request[emptypb.Empty]) (*connect_go.Response[emptypb.Empty], error) VerifyDNSSetup(context.Context, *connect_go.Request[v1.VerifyDNSSetupRequest]) (*connect_go.Response[emptypb.Empty], error) + GetSelectedProvider(context.Context, *connect_go.Request[v1.GetSelectedProviderRequest]) (*connect_go.Response[v1.GetSelectedProviderResponse], error) + SetSelectedProvider(context.Context, *connect_go.Request[v1.SetSelectedProviderRequest]) (*connect_go.Response[emptypb.Empty], error) } // NewFabricControllerClient constructs a client for the io.defang.v1.FabricController service. By @@ -375,6 +383,18 @@ func NewFabricControllerClient(httpClient connect_go.HTTPClient, baseURL string, connect_go.WithIdempotency(connect_go.IdempotencyNoSideEffects), connect_go.WithClientOptions(opts...), ), + getSelectedProvider: connect_go.NewClient[v1.GetSelectedProviderRequest, v1.GetSelectedProviderResponse]( + httpClient, + baseURL+FabricControllerGetSelectedProviderProcedure, + connect_go.WithIdempotency(connect_go.IdempotencyNoSideEffects), + connect_go.WithClientOptions(opts...), + ), + setSelectedProvider: connect_go.NewClient[v1.SetSelectedProviderRequest, emptypb.Empty]( + httpClient, + baseURL+FabricControllerSetSelectedProviderProcedure, + connect_go.WithIdempotency(connect_go.IdempotencyIdempotent), + connect_go.WithClientOptions(opts...), + ), } } @@ -414,6 +434,8 @@ type fabricControllerClient struct { track *connect_go.Client[v1.TrackRequest, emptypb.Empty] deleteMe *connect_go.Client[emptypb.Empty, emptypb.Empty] verifyDNSSetup *connect_go.Client[v1.VerifyDNSSetupRequest, emptypb.Empty] + getSelectedProvider *connect_go.Client[v1.GetSelectedProviderRequest, v1.GetSelectedProviderResponse] + setSelectedProvider *connect_go.Client[v1.SetSelectedProviderRequest, emptypb.Empty] } // GetStatus calls io.defang.v1.FabricController.GetStatus. @@ -598,6 +620,16 @@ func (c *fabricControllerClient) VerifyDNSSetup(ctx context.Context, req *connec return c.verifyDNSSetup.CallUnary(ctx, req) } +// GetSelectedProvider calls io.defang.v1.FabricController.GetSelectedProvider. +func (c *fabricControllerClient) GetSelectedProvider(ctx context.Context, req *connect_go.Request[v1.GetSelectedProviderRequest]) (*connect_go.Response[v1.GetSelectedProviderResponse], error) { + return c.getSelectedProvider.CallUnary(ctx, req) +} + +// SetSelectedProvider calls io.defang.v1.FabricController.SetSelectedProvider. +func (c *fabricControllerClient) SetSelectedProvider(ctx context.Context, req *connect_go.Request[v1.SetSelectedProviderRequest]) (*connect_go.Response[emptypb.Empty], error) { + return c.setSelectedProvider.CallUnary(ctx, req) +} + // FabricControllerHandler is an implementation of the io.defang.v1.FabricController service. type FabricControllerHandler interface { GetStatus(context.Context, *connect_go.Request[emptypb.Empty]) (*connect_go.Response[v1.Status], error) @@ -644,6 +676,8 @@ type FabricControllerHandler interface { // Endpoint for GDPR compliance DeleteMe(context.Context, *connect_go.Request[emptypb.Empty]) (*connect_go.Response[emptypb.Empty], error) VerifyDNSSetup(context.Context, *connect_go.Request[v1.VerifyDNSSetupRequest]) (*connect_go.Response[emptypb.Empty], error) + GetSelectedProvider(context.Context, *connect_go.Request[v1.GetSelectedProviderRequest]) (*connect_go.Response[v1.GetSelectedProviderResponse], error) + SetSelectedProvider(context.Context, *connect_go.Request[v1.SetSelectedProviderRequest]) (*connect_go.Response[emptypb.Empty], error) } // NewFabricControllerHandler builds an HTTP handler from the service implementation. It returns the @@ -838,6 +872,18 @@ func NewFabricControllerHandler(svc FabricControllerHandler, opts ...connect_go. connect_go.WithIdempotency(connect_go.IdempotencyNoSideEffects), connect_go.WithHandlerOptions(opts...), ) + fabricControllerGetSelectedProviderHandler := connect_go.NewUnaryHandler( + FabricControllerGetSelectedProviderProcedure, + svc.GetSelectedProvider, + connect_go.WithIdempotency(connect_go.IdempotencyNoSideEffects), + connect_go.WithHandlerOptions(opts...), + ) + fabricControllerSetSelectedProviderHandler := connect_go.NewUnaryHandler( + FabricControllerSetSelectedProviderProcedure, + svc.SetSelectedProvider, + connect_go.WithIdempotency(connect_go.IdempotencyIdempotent), + connect_go.WithHandlerOptions(opts...), + ) return "/io.defang.v1.FabricController/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { case FabricControllerGetStatusProcedure: @@ -908,6 +954,10 @@ func NewFabricControllerHandler(svc FabricControllerHandler, opts ...connect_go. fabricControllerDeleteMeHandler.ServeHTTP(w, r) case FabricControllerVerifyDNSSetupProcedure: fabricControllerVerifyDNSSetupHandler.ServeHTTP(w, r) + case FabricControllerGetSelectedProviderProcedure: + fabricControllerGetSelectedProviderHandler.ServeHTTP(w, r) + case FabricControllerSetSelectedProviderProcedure: + fabricControllerSetSelectedProviderHandler.ServeHTTP(w, r) default: http.NotFound(w, r) } @@ -1052,3 +1102,11 @@ func (UnimplementedFabricControllerHandler) DeleteMe(context.Context, *connect_g func (UnimplementedFabricControllerHandler) VerifyDNSSetup(context.Context, *connect_go.Request[v1.VerifyDNSSetupRequest]) (*connect_go.Response[emptypb.Empty], error) { return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("io.defang.v1.FabricController.VerifyDNSSetup is not implemented")) } + +func (UnimplementedFabricControllerHandler) GetSelectedProvider(context.Context, *connect_go.Request[v1.GetSelectedProviderRequest]) (*connect_go.Response[v1.GetSelectedProviderResponse], error) { + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("io.defang.v1.FabricController.GetSelectedProvider is not implemented")) +} + +func (UnimplementedFabricControllerHandler) SetSelectedProvider(context.Context, *connect_go.Request[v1.SetSelectedProviderRequest]) (*connect_go.Response[emptypb.Empty], error) { + return nil, connect_go.NewError(connect_go.CodeUnimplemented, errors.New("io.defang.v1.FabricController.SetSelectedProvider is not implemented")) +} diff --git a/src/protos/io/defang/v1/fabric.pb.go b/src/protos/io/defang/v1/fabric.pb.go index 59e36127d..db250edbd 100644 --- a/src/protos/io/defang/v1/fabric.pb.go +++ b/src/protos/io/defang/v1/fabric.pb.go @@ -461,6 +461,149 @@ func (SubscriptionTier) EnumDescriptor() ([]byte, []int) { return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{7} } +type GetSelectedProviderRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` +} + +func (x *GetSelectedProviderRequest) Reset() { + *x = GetSelectedProviderRequest{} + mi := &file_io_defang_v1_fabric_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetSelectedProviderRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetSelectedProviderRequest) ProtoMessage() {} + +func (x *GetSelectedProviderRequest) ProtoReflect() protoreflect.Message { + mi := &file_io_defang_v1_fabric_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetSelectedProviderRequest.ProtoReflect.Descriptor instead. +func (*GetSelectedProviderRequest) Descriptor() ([]byte, []int) { + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{0} +} + +func (x *GetSelectedProviderRequest) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +type GetSelectedProviderResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Provider string `protobuf:"bytes,1,opt,name=provider,proto3" json:"provider,omitempty"` +} + +func (x *GetSelectedProviderResponse) Reset() { + *x = GetSelectedProviderResponse{} + mi := &file_io_defang_v1_fabric_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GetSelectedProviderResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetSelectedProviderResponse) ProtoMessage() {} + +func (x *GetSelectedProviderResponse) ProtoReflect() protoreflect.Message { + mi := &file_io_defang_v1_fabric_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GetSelectedProviderResponse.ProtoReflect.Descriptor instead. +func (*GetSelectedProviderResponse) Descriptor() ([]byte, []int) { + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{1} +} + +func (x *GetSelectedProviderResponse) GetProvider() string { + if x != nil { + return x.Provider + } + return "" +} + +type SetSelectedProviderRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + Provider string `protobuf:"bytes,2,opt,name=provider,proto3" json:"provider,omitempty"` +} + +func (x *SetSelectedProviderRequest) Reset() { + *x = SetSelectedProviderRequest{} + mi := &file_io_defang_v1_fabric_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SetSelectedProviderRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetSelectedProviderRequest) ProtoMessage() {} + +func (x *SetSelectedProviderRequest) ProtoReflect() protoreflect.Message { + mi := &file_io_defang_v1_fabric_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SetSelectedProviderRequest.ProtoReflect.Descriptor instead. +func (*SetSelectedProviderRequest) Descriptor() ([]byte, []int) { + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{2} +} + +func (x *SetSelectedProviderRequest) GetProject() string { + if x != nil { + return x.Project + } + return "" +} + +func (x *SetSelectedProviderRequest) GetProvider() string { + if x != nil { + return x.Provider + } + return "" +} + type VerifyDNSSetupRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -472,7 +615,7 @@ type VerifyDNSSetupRequest struct { func (x *VerifyDNSSetupRequest) Reset() { *x = VerifyDNSSetupRequest{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[0] + mi := &file_io_defang_v1_fabric_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -484,7 +627,7 @@ func (x *VerifyDNSSetupRequest) String() string { func (*VerifyDNSSetupRequest) ProtoMessage() {} func (x *VerifyDNSSetupRequest) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[0] + mi := &file_io_defang_v1_fabric_proto_msgTypes[3] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -497,7 +640,7 @@ func (x *VerifyDNSSetupRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use VerifyDNSSetupRequest.ProtoReflect.Descriptor instead. func (*VerifyDNSSetupRequest) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{0} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{3} } func (x *VerifyDNSSetupRequest) GetDomain() string { @@ -524,7 +667,7 @@ type DestroyRequest struct { func (x *DestroyRequest) Reset() { *x = DestroyRequest{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[1] + mi := &file_io_defang_v1_fabric_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -536,7 +679,7 @@ func (x *DestroyRequest) String() string { func (*DestroyRequest) ProtoMessage() {} func (x *DestroyRequest) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[1] + mi := &file_io_defang_v1_fabric_proto_msgTypes[4] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -549,7 +692,7 @@ func (x *DestroyRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DestroyRequest.ProtoReflect.Descriptor instead. func (*DestroyRequest) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{1} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{4} } func (x *DestroyRequest) GetProject() string { @@ -569,7 +712,7 @@ type DestroyResponse struct { func (x *DestroyResponse) Reset() { *x = DestroyResponse{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[2] + mi := &file_io_defang_v1_fabric_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -581,7 +724,7 @@ func (x *DestroyResponse) String() string { func (*DestroyResponse) ProtoMessage() {} func (x *DestroyResponse) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[2] + mi := &file_io_defang_v1_fabric_proto_msgTypes[5] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -594,7 +737,7 @@ func (x *DestroyResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DestroyResponse.ProtoReflect.Descriptor instead. func (*DestroyResponse) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{2} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{5} } func (x *DestroyResponse) GetEtag() string { @@ -618,7 +761,7 @@ type DebugRequest struct { func (x *DebugRequest) Reset() { *x = DebugRequest{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[3] + mi := &file_io_defang_v1_fabric_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -630,7 +773,7 @@ func (x *DebugRequest) String() string { func (*DebugRequest) ProtoMessage() {} func (x *DebugRequest) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[3] + mi := &file_io_defang_v1_fabric_proto_msgTypes[6] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -643,7 +786,7 @@ func (x *DebugRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DebugRequest.ProtoReflect.Descriptor instead. func (*DebugRequest) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{3} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{6} } func (x *DebugRequest) GetFiles() []*File { @@ -693,7 +836,7 @@ type DebugResponse struct { func (x *DebugResponse) Reset() { *x = DebugResponse{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[4] + mi := &file_io_defang_v1_fabric_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -705,7 +848,7 @@ func (x *DebugResponse) String() string { func (*DebugResponse) ProtoMessage() {} func (x *DebugResponse) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[4] + mi := &file_io_defang_v1_fabric_proto_msgTypes[7] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -718,7 +861,7 @@ func (x *DebugResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DebugResponse.ProtoReflect.Descriptor instead. func (*DebugResponse) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{4} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{7} } func (x *DebugResponse) GetGeneral() string { @@ -755,7 +898,7 @@ type Issue struct { func (x *Issue) Reset() { *x = Issue{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[5] + mi := &file_io_defang_v1_fabric_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -767,7 +910,7 @@ func (x *Issue) String() string { func (*Issue) ProtoMessage() {} func (x *Issue) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[5] + mi := &file_io_defang_v1_fabric_proto_msgTypes[8] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -780,7 +923,7 @@ func (x *Issue) ProtoReflect() protoreflect.Message { // Deprecated: Use Issue.ProtoReflect.Descriptor instead. func (*Issue) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{5} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{8} } func (x *Issue) GetType() string { @@ -822,7 +965,7 @@ type CodeChange struct { func (x *CodeChange) Reset() { *x = CodeChange{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[6] + mi := &file_io_defang_v1_fabric_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -834,7 +977,7 @@ func (x *CodeChange) String() string { func (*CodeChange) ProtoMessage() {} func (x *CodeChange) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[6] + mi := &file_io_defang_v1_fabric_proto_msgTypes[9] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -847,7 +990,7 @@ func (x *CodeChange) ProtoReflect() protoreflect.Message { // Deprecated: Use CodeChange.ProtoReflect.Descriptor instead. func (*CodeChange) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{6} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{9} } func (x *CodeChange) GetFile() string { @@ -878,7 +1021,7 @@ type TrackRequest struct { func (x *TrackRequest) Reset() { *x = TrackRequest{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[7] + mi := &file_io_defang_v1_fabric_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -890,7 +1033,7 @@ func (x *TrackRequest) String() string { func (*TrackRequest) ProtoMessage() {} func (x *TrackRequest) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[7] + mi := &file_io_defang_v1_fabric_proto_msgTypes[10] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -903,7 +1046,7 @@ func (x *TrackRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TrackRequest.ProtoReflect.Descriptor instead. func (*TrackRequest) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{7} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{10} } func (x *TrackRequest) GetAnonId() string { @@ -958,7 +1101,7 @@ type DeployRequest struct { func (x *DeployRequest) Reset() { *x = DeployRequest{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[8] + mi := &file_io_defang_v1_fabric_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -970,7 +1113,7 @@ func (x *DeployRequest) String() string { func (*DeployRequest) ProtoMessage() {} func (x *DeployRequest) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[8] + mi := &file_io_defang_v1_fabric_proto_msgTypes[11] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -983,7 +1126,7 @@ func (x *DeployRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeployRequest.ProtoReflect.Descriptor instead. func (*DeployRequest) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{8} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{11} } // Deprecated: Marked as deprecated in io/defang/v1/fabric.proto. @@ -1041,7 +1184,7 @@ type DeployResponse struct { func (x *DeployResponse) Reset() { *x = DeployResponse{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[9] + mi := &file_io_defang_v1_fabric_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1053,7 +1196,7 @@ func (x *DeployResponse) String() string { func (*DeployResponse) ProtoMessage() {} func (x *DeployResponse) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[9] + mi := &file_io_defang_v1_fabric_proto_msgTypes[12] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1066,7 +1209,7 @@ func (x *DeployResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeployResponse.ProtoReflect.Descriptor instead. func (*DeployResponse) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{9} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{12} } func (x *DeployResponse) GetServices() []*ServiceInfo { @@ -1095,7 +1238,7 @@ type DeleteRequest struct { func (x *DeleteRequest) Reset() { *x = DeleteRequest{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[10] + mi := &file_io_defang_v1_fabric_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1107,7 +1250,7 @@ func (x *DeleteRequest) String() string { func (*DeleteRequest) ProtoMessage() {} func (x *DeleteRequest) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[10] + mi := &file_io_defang_v1_fabric_proto_msgTypes[13] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1120,7 +1263,7 @@ func (x *DeleteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteRequest.ProtoReflect.Descriptor instead. func (*DeleteRequest) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{10} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{13} } func (x *DeleteRequest) GetNames() []string { @@ -1154,7 +1297,7 @@ type DeleteResponse struct { func (x *DeleteResponse) Reset() { *x = DeleteResponse{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[11] + mi := &file_io_defang_v1_fabric_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1166,7 +1309,7 @@ func (x *DeleteResponse) String() string { func (*DeleteResponse) ProtoMessage() {} func (x *DeleteResponse) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[11] + mi := &file_io_defang_v1_fabric_proto_msgTypes[14] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1179,7 +1322,7 @@ func (x *DeleteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteResponse.ProtoReflect.Descriptor instead. func (*DeleteResponse) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{11} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{14} } func (x *DeleteResponse) GetEtag() string { @@ -1201,7 +1344,7 @@ type GenerateFilesRequest struct { func (x *GenerateFilesRequest) Reset() { *x = GenerateFilesRequest{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[12] + mi := &file_io_defang_v1_fabric_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1213,7 +1356,7 @@ func (x *GenerateFilesRequest) String() string { func (*GenerateFilesRequest) ProtoMessage() {} func (x *GenerateFilesRequest) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[12] + mi := &file_io_defang_v1_fabric_proto_msgTypes[15] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1226,7 +1369,7 @@ func (x *GenerateFilesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GenerateFilesRequest.ProtoReflect.Descriptor instead. func (*GenerateFilesRequest) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{12} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{15} } func (x *GenerateFilesRequest) GetPrompt() string { @@ -1261,7 +1404,7 @@ type File struct { func (x *File) Reset() { *x = File{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[13] + mi := &file_io_defang_v1_fabric_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1273,7 +1416,7 @@ func (x *File) String() string { func (*File) ProtoMessage() {} func (x *File) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[13] + mi := &file_io_defang_v1_fabric_proto_msgTypes[16] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1286,7 +1429,7 @@ func (x *File) ProtoReflect() protoreflect.Message { // Deprecated: Use File.ProtoReflect.Descriptor instead. func (*File) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{13} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{16} } func (x *File) GetName() string { @@ -1313,7 +1456,7 @@ type GenerateFilesResponse struct { func (x *GenerateFilesResponse) Reset() { *x = GenerateFilesResponse{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[14] + mi := &file_io_defang_v1_fabric_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1325,7 +1468,7 @@ func (x *GenerateFilesResponse) String() string { func (*GenerateFilesResponse) ProtoMessage() {} func (x *GenerateFilesResponse) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[14] + mi := &file_io_defang_v1_fabric_proto_msgTypes[17] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1338,7 +1481,7 @@ func (x *GenerateFilesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GenerateFilesResponse.ProtoReflect.Descriptor instead. func (*GenerateFilesResponse) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{14} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{17} } func (x *GenerateFilesResponse) GetFiles() []*File { @@ -1358,7 +1501,7 @@ type StartGenerateResponse struct { func (x *StartGenerateResponse) Reset() { *x = StartGenerateResponse{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[15] + mi := &file_io_defang_v1_fabric_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1370,7 +1513,7 @@ func (x *StartGenerateResponse) String() string { func (*StartGenerateResponse) ProtoMessage() {} func (x *StartGenerateResponse) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[15] + mi := &file_io_defang_v1_fabric_proto_msgTypes[18] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1383,7 +1526,7 @@ func (x *StartGenerateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StartGenerateResponse.ProtoReflect.Descriptor instead. func (*StartGenerateResponse) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{15} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{18} } func (x *StartGenerateResponse) GetUuid() string { @@ -1403,7 +1546,7 @@ type GenerateStatusRequest struct { func (x *GenerateStatusRequest) Reset() { *x = GenerateStatusRequest{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[16] + mi := &file_io_defang_v1_fabric_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1415,7 +1558,7 @@ func (x *GenerateStatusRequest) String() string { func (*GenerateStatusRequest) ProtoMessage() {} func (x *GenerateStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[16] + mi := &file_io_defang_v1_fabric_proto_msgTypes[19] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1428,7 +1571,7 @@ func (x *GenerateStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GenerateStatusRequest.ProtoReflect.Descriptor instead. func (*GenerateStatusRequest) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{16} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{19} } func (x *GenerateStatusRequest) GetUuid() string { @@ -1449,7 +1592,7 @@ type UploadURLRequest struct { func (x *UploadURLRequest) Reset() { *x = UploadURLRequest{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[17] + mi := &file_io_defang_v1_fabric_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1461,7 +1604,7 @@ func (x *UploadURLRequest) String() string { func (*UploadURLRequest) ProtoMessage() {} func (x *UploadURLRequest) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[17] + mi := &file_io_defang_v1_fabric_proto_msgTypes[20] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1474,7 +1617,7 @@ func (x *UploadURLRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UploadURLRequest.ProtoReflect.Descriptor instead. func (*UploadURLRequest) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{17} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{20} } func (x *UploadURLRequest) GetDigest() string { @@ -1501,7 +1644,7 @@ type UploadURLResponse struct { func (x *UploadURLResponse) Reset() { *x = UploadURLResponse{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[18] + mi := &file_io_defang_v1_fabric_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1513,7 +1656,7 @@ func (x *UploadURLResponse) String() string { func (*UploadURLResponse) ProtoMessage() {} func (x *UploadURLResponse) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[18] + mi := &file_io_defang_v1_fabric_proto_msgTypes[21] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1526,7 +1669,7 @@ func (x *UploadURLResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UploadURLResponse.ProtoReflect.Descriptor instead. func (*UploadURLResponse) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{18} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{21} } func (x *UploadURLResponse) GetUrl() string { @@ -1560,7 +1703,7 @@ type ServiceInfo struct { func (x *ServiceInfo) Reset() { *x = ServiceInfo{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[19] + mi := &file_io_defang_v1_fabric_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1572,7 +1715,7 @@ func (x *ServiceInfo) String() string { func (*ServiceInfo) ProtoMessage() {} func (x *ServiceInfo) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[19] + mi := &file_io_defang_v1_fabric_proto_msgTypes[22] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1585,7 +1728,7 @@ func (x *ServiceInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use ServiceInfo.ProtoReflect.Descriptor instead. func (*ServiceInfo) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{19} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{22} } func (x *ServiceInfo) GetService() *Service { @@ -1705,7 +1848,7 @@ type Secrets struct { func (x *Secrets) Reset() { *x = Secrets{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[20] + mi := &file_io_defang_v1_fabric_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1717,7 +1860,7 @@ func (x *Secrets) String() string { func (*Secrets) ProtoMessage() {} func (x *Secrets) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[20] + mi := &file_io_defang_v1_fabric_proto_msgTypes[23] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1730,7 +1873,7 @@ func (x *Secrets) ProtoReflect() protoreflect.Message { // Deprecated: Use Secrets.ProtoReflect.Descriptor instead. func (*Secrets) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{20} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{23} } func (x *Secrets) GetNames() []string { @@ -1760,7 +1903,7 @@ type SecretValue struct { func (x *SecretValue) Reset() { *x = SecretValue{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[21] + mi := &file_io_defang_v1_fabric_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1772,7 +1915,7 @@ func (x *SecretValue) String() string { func (*SecretValue) ProtoMessage() {} func (x *SecretValue) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[21] + mi := &file_io_defang_v1_fabric_proto_msgTypes[24] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1785,7 +1928,7 @@ func (x *SecretValue) ProtoReflect() protoreflect.Message { // Deprecated: Use SecretValue.ProtoReflect.Descriptor instead. func (*SecretValue) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{21} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{24} } func (x *SecretValue) GetName() string { @@ -1822,7 +1965,7 @@ type Config struct { func (x *Config) Reset() { *x = Config{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[22] + mi := &file_io_defang_v1_fabric_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1834,7 +1977,7 @@ func (x *Config) String() string { func (*Config) ProtoMessage() {} func (x *Config) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[22] + mi := &file_io_defang_v1_fabric_proto_msgTypes[25] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1847,7 +1990,7 @@ func (x *Config) ProtoReflect() protoreflect.Message { // Deprecated: Use Config.ProtoReflect.Descriptor instead. func (*Config) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{22} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{25} } func (x *Config) GetName() string { @@ -1889,7 +2032,7 @@ type ConfigKey struct { func (x *ConfigKey) Reset() { *x = ConfigKey{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[23] + mi := &file_io_defang_v1_fabric_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1901,7 +2044,7 @@ func (x *ConfigKey) String() string { func (*ConfigKey) ProtoMessage() {} func (x *ConfigKey) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[23] + mi := &file_io_defang_v1_fabric_proto_msgTypes[26] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1914,7 +2057,7 @@ func (x *ConfigKey) ProtoReflect() protoreflect.Message { // Deprecated: Use ConfigKey.ProtoReflect.Descriptor instead. func (*ConfigKey) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{23} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{26} } func (x *ConfigKey) GetName() string { @@ -1944,7 +2087,7 @@ type PutConfigRequest struct { func (x *PutConfigRequest) Reset() { *x = PutConfigRequest{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[24] + mi := &file_io_defang_v1_fabric_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1956,7 +2099,7 @@ func (x *PutConfigRequest) String() string { func (*PutConfigRequest) ProtoMessage() {} func (x *PutConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[24] + mi := &file_io_defang_v1_fabric_proto_msgTypes[27] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1969,7 +2112,7 @@ func (x *PutConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PutConfigRequest.ProtoReflect.Descriptor instead. func (*PutConfigRequest) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{24} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{27} } func (x *PutConfigRequest) GetName() string { @@ -2010,7 +2153,7 @@ type GetConfigsRequest struct { func (x *GetConfigsRequest) Reset() { *x = GetConfigsRequest{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[25] + mi := &file_io_defang_v1_fabric_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2022,7 +2165,7 @@ func (x *GetConfigsRequest) String() string { func (*GetConfigsRequest) ProtoMessage() {} func (x *GetConfigsRequest) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[25] + mi := &file_io_defang_v1_fabric_proto_msgTypes[28] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2035,7 +2178,7 @@ func (x *GetConfigsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetConfigsRequest.ProtoReflect.Descriptor instead. func (*GetConfigsRequest) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{25} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{28} } func (x *GetConfigsRequest) GetConfigs() []*ConfigKey { @@ -2055,7 +2198,7 @@ type GetConfigsResponse struct { func (x *GetConfigsResponse) Reset() { *x = GetConfigsResponse{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[26] + mi := &file_io_defang_v1_fabric_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2067,7 +2210,7 @@ func (x *GetConfigsResponse) String() string { func (*GetConfigsResponse) ProtoMessage() {} func (x *GetConfigsResponse) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[26] + mi := &file_io_defang_v1_fabric_proto_msgTypes[29] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2080,7 +2223,7 @@ func (x *GetConfigsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetConfigsResponse.ProtoReflect.Descriptor instead. func (*GetConfigsResponse) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{26} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{29} } func (x *GetConfigsResponse) GetConfigs() []*Config { @@ -2100,7 +2243,7 @@ type DeleteConfigsRequest struct { func (x *DeleteConfigsRequest) Reset() { *x = DeleteConfigsRequest{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[27] + mi := &file_io_defang_v1_fabric_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2112,7 +2255,7 @@ func (x *DeleteConfigsRequest) String() string { func (*DeleteConfigsRequest) ProtoMessage() {} func (x *DeleteConfigsRequest) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[27] + mi := &file_io_defang_v1_fabric_proto_msgTypes[30] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2125,7 +2268,7 @@ func (x *DeleteConfigsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteConfigsRequest.ProtoReflect.Descriptor instead. func (*DeleteConfigsRequest) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{27} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{30} } func (x *DeleteConfigsRequest) GetConfigs() []*ConfigKey { @@ -2145,7 +2288,7 @@ type ListConfigsRequest struct { func (x *ListConfigsRequest) Reset() { *x = ListConfigsRequest{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[28] + mi := &file_io_defang_v1_fabric_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2157,7 +2300,7 @@ func (x *ListConfigsRequest) String() string { func (*ListConfigsRequest) ProtoMessage() {} func (x *ListConfigsRequest) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[28] + mi := &file_io_defang_v1_fabric_proto_msgTypes[31] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2170,7 +2313,7 @@ func (x *ListConfigsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListConfigsRequest.ProtoReflect.Descriptor instead. func (*ListConfigsRequest) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{28} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{31} } func (x *ListConfigsRequest) GetProject() string { @@ -2190,7 +2333,7 @@ type ListConfigsResponse struct { func (x *ListConfigsResponse) Reset() { *x = ListConfigsResponse{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[29] + mi := &file_io_defang_v1_fabric_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2202,7 +2345,7 @@ func (x *ListConfigsResponse) String() string { func (*ListConfigsResponse) ProtoMessage() {} func (x *ListConfigsResponse) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[29] + mi := &file_io_defang_v1_fabric_proto_msgTypes[32] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2215,7 +2358,7 @@ func (x *ListConfigsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListConfigsResponse.ProtoReflect.Descriptor instead. func (*ListConfigsResponse) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{29} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{32} } func (x *ListConfigsResponse) GetConfigs() []*ConfigKey { @@ -2241,7 +2384,7 @@ type TokenRequest struct { func (x *TokenRequest) Reset() { *x = TokenRequest{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[30] + mi := &file_io_defang_v1_fabric_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2253,7 +2396,7 @@ func (x *TokenRequest) String() string { func (*TokenRequest) ProtoMessage() {} func (x *TokenRequest) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[30] + mi := &file_io_defang_v1_fabric_proto_msgTypes[33] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2266,7 +2409,7 @@ func (x *TokenRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TokenRequest.ProtoReflect.Descriptor instead. func (*TokenRequest) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{30} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{33} } func (x *TokenRequest) GetTenant() string { @@ -2329,7 +2472,7 @@ type TokenResponse struct { func (x *TokenResponse) Reset() { *x = TokenResponse{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[31] + mi := &file_io_defang_v1_fabric_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2341,7 +2484,7 @@ func (x *TokenResponse) String() string { func (*TokenResponse) ProtoMessage() {} func (x *TokenResponse) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[31] + mi := &file_io_defang_v1_fabric_proto_msgTypes[34] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2354,7 +2497,7 @@ func (x *TokenResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TokenResponse.ProtoReflect.Descriptor instead. func (*TokenResponse) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{31} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{34} } func (x *TokenResponse) GetAccessToken() string { @@ -2381,7 +2524,7 @@ type Status struct { func (x *Status) Reset() { *x = Status{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[32] + mi := &file_io_defang_v1_fabric_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2393,7 +2536,7 @@ func (x *Status) String() string { func (*Status) ProtoMessage() {} func (x *Status) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[32] + mi := &file_io_defang_v1_fabric_proto_msgTypes[35] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2406,7 +2549,7 @@ func (x *Status) ProtoReflect() protoreflect.Message { // Deprecated: Use Status.ProtoReflect.Descriptor instead. func (*Status) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{32} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{35} } func (x *Status) GetVersion() string { @@ -2428,7 +2571,7 @@ type Version struct { func (x *Version) Reset() { *x = Version{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[33] + mi := &file_io_defang_v1_fabric_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2440,7 +2583,7 @@ func (x *Version) String() string { func (*Version) ProtoMessage() {} func (x *Version) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[33] + mi := &file_io_defang_v1_fabric_proto_msgTypes[36] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2453,7 +2596,7 @@ func (x *Version) ProtoReflect() protoreflect.Message { // Deprecated: Use Version.ProtoReflect.Descriptor instead. func (*Version) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{33} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{36} } func (x *Version) GetFabric() string { @@ -2490,7 +2633,7 @@ type TailRequest struct { func (x *TailRequest) Reset() { *x = TailRequest{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[34] + mi := &file_io_defang_v1_fabric_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2502,7 +2645,7 @@ func (x *TailRequest) String() string { func (*TailRequest) ProtoMessage() {} func (x *TailRequest) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[34] + mi := &file_io_defang_v1_fabric_proto_msgTypes[37] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2515,7 +2658,7 @@ func (x *TailRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TailRequest.ProtoReflect.Descriptor instead. func (*TailRequest) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{34} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{37} } func (x *TailRequest) GetServices() []string { @@ -2561,7 +2704,7 @@ type LogEntry struct { func (x *LogEntry) Reset() { *x = LogEntry{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[35] + mi := &file_io_defang_v1_fabric_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2573,7 +2716,7 @@ func (x *LogEntry) String() string { func (*LogEntry) ProtoMessage() {} func (x *LogEntry) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[35] + mi := &file_io_defang_v1_fabric_proto_msgTypes[38] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2586,7 +2729,7 @@ func (x *LogEntry) ProtoReflect() protoreflect.Message { // Deprecated: Use LogEntry.ProtoReflect.Descriptor instead. func (*LogEntry) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{35} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{38} } func (x *LogEntry) GetMessage() string { @@ -2644,7 +2787,7 @@ type TailResponse struct { func (x *TailResponse) Reset() { *x = TailResponse{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[36] + mi := &file_io_defang_v1_fabric_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2656,7 +2799,7 @@ func (x *TailResponse) String() string { func (*TailResponse) ProtoMessage() {} func (x *TailResponse) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[36] + mi := &file_io_defang_v1_fabric_proto_msgTypes[39] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2669,7 +2812,7 @@ func (x *TailResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TailResponse.ProtoReflect.Descriptor instead. func (*TailResponse) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{36} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{39} } func (x *TailResponse) GetEntries() []*LogEntry { @@ -2711,7 +2854,7 @@ type ListServicesResponse struct { func (x *ListServicesResponse) Reset() { *x = ListServicesResponse{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[37] + mi := &file_io_defang_v1_fabric_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2723,7 +2866,7 @@ func (x *ListServicesResponse) String() string { func (*ListServicesResponse) ProtoMessage() {} func (x *ListServicesResponse) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[37] + mi := &file_io_defang_v1_fabric_proto_msgTypes[40] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2736,7 +2879,7 @@ func (x *ListServicesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListServicesResponse.ProtoReflect.Descriptor instead. func (*ListServicesResponse) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{37} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{40} } func (x *ListServicesResponse) GetServices() []*ServiceInfo { @@ -2768,7 +2911,7 @@ type ProjectUpdate struct { func (x *ProjectUpdate) Reset() { *x = ProjectUpdate{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[38] + mi := &file_io_defang_v1_fabric_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2780,7 +2923,7 @@ func (x *ProjectUpdate) String() string { func (*ProjectUpdate) ProtoMessage() {} func (x *ProjectUpdate) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[38] + mi := &file_io_defang_v1_fabric_proto_msgTypes[41] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2793,7 +2936,7 @@ func (x *ProjectUpdate) ProtoReflect() protoreflect.Message { // Deprecated: Use ProjectUpdate.ProtoReflect.Descriptor instead. func (*ProjectUpdate) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{38} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{41} } func (x *ProjectUpdate) GetServices() []*ServiceInfo { @@ -2843,7 +2986,7 @@ type ServiceID struct { func (x *ServiceID) Reset() { *x = ServiceID{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[39] + mi := &file_io_defang_v1_fabric_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2855,7 +2998,7 @@ func (x *ServiceID) String() string { func (*ServiceID) ProtoMessage() {} func (x *ServiceID) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[39] + mi := &file_io_defang_v1_fabric_proto_msgTypes[42] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2868,7 +3011,7 @@ func (x *ServiceID) ProtoReflect() protoreflect.Message { // Deprecated: Use ServiceID.ProtoReflect.Descriptor instead. func (*ServiceID) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{39} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{42} } func (x *ServiceID) GetName() string { @@ -2898,7 +3041,7 @@ type Device struct { func (x *Device) Reset() { *x = Device{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[40] + mi := &file_io_defang_v1_fabric_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2910,7 +3053,7 @@ func (x *Device) String() string { func (*Device) ProtoMessage() {} func (x *Device) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[40] + mi := &file_io_defang_v1_fabric_proto_msgTypes[43] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2923,7 +3066,7 @@ func (x *Device) ProtoReflect() protoreflect.Message { // Deprecated: Use Device.ProtoReflect.Descriptor instead. func (*Device) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{40} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{43} } func (x *Device) GetCapabilities() []string { @@ -2960,7 +3103,7 @@ type Resource struct { func (x *Resource) Reset() { *x = Resource{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[41] + mi := &file_io_defang_v1_fabric_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2972,7 +3115,7 @@ func (x *Resource) String() string { func (*Resource) ProtoMessage() {} func (x *Resource) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[41] + mi := &file_io_defang_v1_fabric_proto_msgTypes[44] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2985,7 +3128,7 @@ func (x *Resource) ProtoReflect() protoreflect.Message { // Deprecated: Use Resource.ProtoReflect.Descriptor instead. func (*Resource) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{41} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{44} } func (x *Resource) GetMemory() float32 { @@ -3020,7 +3163,7 @@ type Resources struct { func (x *Resources) Reset() { *x = Resources{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[42] + mi := &file_io_defang_v1_fabric_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3032,7 +3175,7 @@ func (x *Resources) String() string { func (*Resources) ProtoMessage() {} func (x *Resources) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[42] + mi := &file_io_defang_v1_fabric_proto_msgTypes[45] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3045,7 +3188,7 @@ func (x *Resources) ProtoReflect() protoreflect.Message { // Deprecated: Use Resources.ProtoReflect.Descriptor instead. func (*Resources) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{42} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{45} } func (x *Resources) GetReservations() *Resource { @@ -3067,7 +3210,7 @@ type Deploy struct { func (x *Deploy) Reset() { *x = Deploy{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[43] + mi := &file_io_defang_v1_fabric_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3079,7 +3222,7 @@ func (x *Deploy) String() string { func (*Deploy) ProtoMessage() {} func (x *Deploy) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[43] + mi := &file_io_defang_v1_fabric_proto_msgTypes[46] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3092,7 +3235,7 @@ func (x *Deploy) ProtoReflect() protoreflect.Message { // Deprecated: Use Deploy.ProtoReflect.Descriptor instead. func (*Deploy) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{43} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{46} } func (x *Deploy) GetReplicas() uint32 { @@ -3122,7 +3265,7 @@ type Port struct { func (x *Port) Reset() { *x = Port{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[44] + mi := &file_io_defang_v1_fabric_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3134,7 +3277,7 @@ func (x *Port) String() string { func (*Port) ProtoMessage() {} func (x *Port) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[44] + mi := &file_io_defang_v1_fabric_proto_msgTypes[47] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3147,7 +3290,7 @@ func (x *Port) ProtoReflect() protoreflect.Message { // Deprecated: Use Port.ProtoReflect.Descriptor instead. func (*Port) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{44} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{47} } func (x *Port) GetTarget() uint32 { @@ -3182,7 +3325,7 @@ type Secret struct { func (x *Secret) Reset() { *x = Secret{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[45] + mi := &file_io_defang_v1_fabric_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3194,7 +3337,7 @@ func (x *Secret) String() string { func (*Secret) ProtoMessage() {} func (x *Secret) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[45] + mi := &file_io_defang_v1_fabric_proto_msgTypes[48] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3207,7 +3350,7 @@ func (x *Secret) ProtoReflect() protoreflect.Message { // Deprecated: Use Secret.ProtoReflect.Descriptor instead. func (*Secret) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{45} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{48} } func (x *Secret) GetSource() string { @@ -3232,7 +3375,7 @@ type Build struct { func (x *Build) Reset() { *x = Build{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[46] + mi := &file_io_defang_v1_fabric_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3244,7 +3387,7 @@ func (x *Build) String() string { func (*Build) ProtoMessage() {} func (x *Build) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[46] + mi := &file_io_defang_v1_fabric_proto_msgTypes[49] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3257,7 +3400,7 @@ func (x *Build) ProtoReflect() protoreflect.Message { // Deprecated: Use Build.ProtoReflect.Descriptor instead. func (*Build) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{46} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{49} } func (x *Build) GetContext() string { @@ -3309,7 +3452,7 @@ type HealthCheck struct { func (x *HealthCheck) Reset() { *x = HealthCheck{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[47] + mi := &file_io_defang_v1_fabric_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3321,7 +3464,7 @@ func (x *HealthCheck) String() string { func (*HealthCheck) ProtoMessage() {} func (x *HealthCheck) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[47] + mi := &file_io_defang_v1_fabric_proto_msgTypes[50] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3334,7 +3477,7 @@ func (x *HealthCheck) ProtoReflect() protoreflect.Message { // Deprecated: Use HealthCheck.ProtoReflect.Descriptor instead. func (*HealthCheck) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{47} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{50} } func (x *HealthCheck) GetTest() []string { @@ -3396,7 +3539,7 @@ type Service struct { func (x *Service) Reset() { *x = Service{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[48] + mi := &file_io_defang_v1_fabric_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3408,7 +3551,7 @@ func (x *Service) String() string { func (*Service) ProtoMessage() {} func (x *Service) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[48] + mi := &file_io_defang_v1_fabric_proto_msgTypes[51] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3421,7 +3564,7 @@ func (x *Service) ProtoReflect() protoreflect.Message { // Deprecated: Use Service.ProtoReflect.Descriptor instead. func (*Service) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{48} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{51} } func (x *Service) GetName() string { @@ -3570,7 +3713,7 @@ type StaticFiles struct { func (x *StaticFiles) Reset() { *x = StaticFiles{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[49] + mi := &file_io_defang_v1_fabric_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3582,7 +3725,7 @@ func (x *StaticFiles) String() string { func (*StaticFiles) ProtoMessage() {} func (x *StaticFiles) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[49] + mi := &file_io_defang_v1_fabric_proto_msgTypes[52] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3595,7 +3738,7 @@ func (x *StaticFiles) ProtoReflect() protoreflect.Message { // Deprecated: Use StaticFiles.ProtoReflect.Descriptor instead. func (*StaticFiles) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{49} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{52} } func (x *StaticFiles) GetFolder() string { @@ -3621,7 +3764,7 @@ type Redis struct { func (x *Redis) Reset() { *x = Redis{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[50] + mi := &file_io_defang_v1_fabric_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3633,7 +3776,7 @@ func (x *Redis) String() string { func (*Redis) ProtoMessage() {} func (x *Redis) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[50] + mi := &file_io_defang_v1_fabric_proto_msgTypes[53] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3646,7 +3789,7 @@ func (x *Redis) ProtoReflect() protoreflect.Message { // Deprecated: Use Redis.ProtoReflect.Descriptor instead. func (*Redis) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{50} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{53} } // Deprecated: Marked as deprecated in io/defang/v1/fabric.proto. @@ -3658,7 +3801,7 @@ type Postgres struct { func (x *Postgres) Reset() { *x = Postgres{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[51] + mi := &file_io_defang_v1_fabric_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3670,7 +3813,7 @@ func (x *Postgres) String() string { func (*Postgres) ProtoMessage() {} func (x *Postgres) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[51] + mi := &file_io_defang_v1_fabric_proto_msgTypes[54] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3683,7 +3826,7 @@ func (x *Postgres) ProtoReflect() protoreflect.Message { // Deprecated: Use Postgres.ProtoReflect.Descriptor instead. func (*Postgres) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{51} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{54} } // TODO: internal message; move to a separate proto file; was Event @@ -3705,7 +3848,7 @@ type DeployEvent struct { func (x *DeployEvent) Reset() { *x = DeployEvent{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[52] + mi := &file_io_defang_v1_fabric_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3717,7 +3860,7 @@ func (x *DeployEvent) String() string { func (*DeployEvent) ProtoMessage() {} func (x *DeployEvent) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[52] + mi := &file_io_defang_v1_fabric_proto_msgTypes[55] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3730,7 +3873,7 @@ func (x *DeployEvent) ProtoReflect() protoreflect.Message { // Deprecated: Use DeployEvent.ProtoReflect.Descriptor instead. func (*DeployEvent) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{52} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{55} } func (x *DeployEvent) GetMode() DeploymentMode { @@ -3815,7 +3958,7 @@ type Event struct { func (x *Event) Reset() { *x = Event{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[53] + mi := &file_io_defang_v1_fabric_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3827,7 +3970,7 @@ func (x *Event) String() string { func (*Event) ProtoMessage() {} func (x *Event) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[53] + mi := &file_io_defang_v1_fabric_proto_msgTypes[56] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3840,7 +3983,7 @@ func (x *Event) ProtoReflect() protoreflect.Message { // Deprecated: Use Event.ProtoReflect.Descriptor instead. func (*Event) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{53} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{56} } func (x *Event) GetSpecversion() string { @@ -3916,7 +4059,7 @@ type PublishRequest struct { func (x *PublishRequest) Reset() { *x = PublishRequest{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[54] + mi := &file_io_defang_v1_fabric_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3928,7 +4071,7 @@ func (x *PublishRequest) String() string { func (*PublishRequest) ProtoMessage() {} func (x *PublishRequest) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[54] + mi := &file_io_defang_v1_fabric_proto_msgTypes[57] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3941,7 +4084,7 @@ func (x *PublishRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PublishRequest.ProtoReflect.Descriptor instead. func (*PublishRequest) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{54} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{57} } func (x *PublishRequest) GetEvent() *Event { @@ -3963,7 +4106,7 @@ type SubscribeRequest struct { func (x *SubscribeRequest) Reset() { *x = SubscribeRequest{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[55] + mi := &file_io_defang_v1_fabric_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3975,7 +4118,7 @@ func (x *SubscribeRequest) String() string { func (*SubscribeRequest) ProtoMessage() {} func (x *SubscribeRequest) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[55] + mi := &file_io_defang_v1_fabric_proto_msgTypes[58] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3988,7 +4131,7 @@ func (x *SubscribeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SubscribeRequest.ProtoReflect.Descriptor instead. func (*SubscribeRequest) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{55} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{58} } func (x *SubscribeRequest) GetServices() []string { @@ -4026,7 +4169,7 @@ type SubscribeResponse struct { func (x *SubscribeResponse) Reset() { *x = SubscribeResponse{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[56] + mi := &file_io_defang_v1_fabric_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4038,7 +4181,7 @@ func (x *SubscribeResponse) String() string { func (*SubscribeResponse) ProtoMessage() {} func (x *SubscribeResponse) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[56] + mi := &file_io_defang_v1_fabric_proto_msgTypes[59] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4051,7 +4194,7 @@ func (x *SubscribeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SubscribeResponse.ProtoReflect.Descriptor instead. func (*SubscribeResponse) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{56} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{59} } // Deprecated: Marked as deprecated in io/defang/v1/fabric.proto. @@ -4093,7 +4236,7 @@ type GetServicesRequest struct { func (x *GetServicesRequest) Reset() { *x = GetServicesRequest{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[57] + mi := &file_io_defang_v1_fabric_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4105,7 +4248,7 @@ func (x *GetServicesRequest) String() string { func (*GetServicesRequest) ProtoMessage() {} func (x *GetServicesRequest) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[57] + mi := &file_io_defang_v1_fabric_proto_msgTypes[60] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4118,7 +4261,7 @@ func (x *GetServicesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetServicesRequest.ProtoReflect.Descriptor instead. func (*GetServicesRequest) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{57} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{60} } func (x *GetServicesRequest) GetProject() string { @@ -4138,7 +4281,7 @@ type DelegateSubdomainZoneRequest struct { func (x *DelegateSubdomainZoneRequest) Reset() { *x = DelegateSubdomainZoneRequest{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[58] + mi := &file_io_defang_v1_fabric_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4150,7 +4293,7 @@ func (x *DelegateSubdomainZoneRequest) String() string { func (*DelegateSubdomainZoneRequest) ProtoMessage() {} func (x *DelegateSubdomainZoneRequest) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[58] + mi := &file_io_defang_v1_fabric_proto_msgTypes[61] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4163,7 +4306,7 @@ func (x *DelegateSubdomainZoneRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DelegateSubdomainZoneRequest.ProtoReflect.Descriptor instead. func (*DelegateSubdomainZoneRequest) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{58} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{61} } func (x *DelegateSubdomainZoneRequest) GetNameServerRecords() []string { @@ -4183,7 +4326,7 @@ type DelegateSubdomainZoneResponse struct { func (x *DelegateSubdomainZoneResponse) Reset() { *x = DelegateSubdomainZoneResponse{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[59] + mi := &file_io_defang_v1_fabric_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4195,7 +4338,7 @@ func (x *DelegateSubdomainZoneResponse) String() string { func (*DelegateSubdomainZoneResponse) ProtoMessage() {} func (x *DelegateSubdomainZoneResponse) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[59] + mi := &file_io_defang_v1_fabric_proto_msgTypes[62] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4208,7 +4351,7 @@ func (x *DelegateSubdomainZoneResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DelegateSubdomainZoneResponse.ProtoReflect.Descriptor instead. func (*DelegateSubdomainZoneResponse) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{59} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{62} } func (x *DelegateSubdomainZoneResponse) GetZone() string { @@ -4232,7 +4375,7 @@ type WhoAmIResponse struct { func (x *WhoAmIResponse) Reset() { *x = WhoAmIResponse{} - mi := &file_io_defang_v1_fabric_proto_msgTypes[60] + mi := &file_io_defang_v1_fabric_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4244,7 +4387,7 @@ func (x *WhoAmIResponse) String() string { func (*WhoAmIResponse) ProtoMessage() {} func (x *WhoAmIResponse) ProtoReflect() protoreflect.Message { - mi := &file_io_defang_v1_fabric_proto_msgTypes[60] + mi := &file_io_defang_v1_fabric_proto_msgTypes[63] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4257,7 +4400,7 @@ func (x *WhoAmIResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use WhoAmIResponse.ProtoReflect.Descriptor instead. func (*WhoAmIResponse) Descriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{60} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{63} } func (x *WhoAmIResponse) GetTenant() string { @@ -4304,698 +4447,723 @@ var file_io_defang_v1_fabric_proto_rawDesc = []byte{ 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, 0x22, 0x49, 0x0a, 0x15, 0x56, 0x65, 0x72, 0x69, 0x66, - 0x79, 0x44, 0x4e, 0x53, 0x53, 0x65, 0x74, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x61, 0x72, 0x67, - 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, - 0x74, 0x73, 0x22, 0x2a, 0x0a, 0x0e, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x25, - 0x0a, 0x0f, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x65, 0x74, 0x61, 0x67, 0x22, 0x96, 0x01, 0x0a, 0x0c, 0x44, 0x65, 0x62, 0x75, 0x67, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, - 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x65, 0x74, 0x61, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, - 0x0a, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6c, 0x6f, - 0x67, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x05, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x22, 0x72, - 0x0a, 0x0d, 0x44, 0x65, 0x62, 0x75, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x12, 0x2b, 0x0a, 0x06, 0x69, 0x73, 0x73, - 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x69, 0x6f, 0x2e, 0x64, - 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x65, 0x52, 0x06, - 0x69, 0x73, 0x73, 0x75, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x73, 0x22, 0x8e, 0x01, 0x0a, 0x05, 0x49, 0x73, 0x73, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x07, - 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x3b, 0x0a, 0x0c, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x69, - 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x64, 0x65, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0b, 0x63, 0x6f, 0x64, 0x65, 0x43, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x73, 0x22, 0x38, 0x0a, 0x0a, 0x43, 0x6f, 0x64, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x22, 0xec, 0x01, - 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, - 0x0a, 0x07, 0x61, 0x6e, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x61, 0x6e, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x4a, 0x0a, - 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x2a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, - 0x2e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x72, - 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, - 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x73, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x6f, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x63, - 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x63, 0x68, 0x1a, 0x3d, 0x0a, - 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x85, 0x02, 0x0a, - 0x0d, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x35, - 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x15, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x02, 0x18, 0x01, 0x52, 0x08, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x12, 0x30, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x1c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, - 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x52, - 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x12, - 0x27, 0x0a, 0x0f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x6f, 0x6d, 0x61, - 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x65, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x2a, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x65, 0x74, 0x49, 0x64, 0x22, 0x5b, 0x0a, 0x0e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, - 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x12, 0x0a, - 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, - 0x67, 0x22, 0x68, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x64, - 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x65, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x24, 0x0a, 0x0e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, - 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, - 0x67, 0x22, 0x67, 0x0a, 0x14, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, - 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x6f, - 0x6d, 0x70, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x72, 0x6f, 0x6d, 0x70, - 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x75, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, - 0x09, 0x61, 0x67, 0x72, 0x65, 0x65, 0x5f, 0x74, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x08, 0x61, 0x67, 0x72, 0x65, 0x65, 0x54, 0x6f, 0x73, 0x22, 0x34, 0x0a, 0x04, 0x46, 0x69, - 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x22, 0x41, 0x0a, 0x15, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x28, 0x0a, 0x05, 0x66, 0x69, 0x6c, - 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, - 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x05, 0x66, 0x69, - 0x6c, 0x65, 0x73, 0x22, 0x2b, 0x0a, 0x15, 0x53, 0x74, 0x61, 0x72, 0x74, 0x47, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, - 0x22, 0x2b, 0x0a, 0x15, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x22, 0x44, 0x0a, - 0x10, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x22, 0x25, 0x0a, 0x11, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x52, 0x4c, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x22, 0xa1, 0x04, 0x0a, 0x0b, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2f, 0x0a, 0x07, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x69, 0x6f, - 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x65, - 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, - 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x17, 0x0a, 0x07, 0x6e, 0x61, 0x74, 0x5f, 0x69, 0x70, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, - 0x52, 0x06, 0x6e, 0x61, 0x74, 0x49, 0x70, 0x73, 0x12, 0x15, 0x0a, 0x06, 0x6c, 0x62, 0x5f, 0x69, - 0x70, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x6c, 0x62, 0x49, 0x70, 0x73, 0x12, - 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x5f, 0x66, 0x71, 0x64, 0x6e, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, 0x65, 0x46, 0x71, - 0x64, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x66, 0x71, 0x64, - 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x46, - 0x71, 0x64, 0x6e, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, - 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, - 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, - 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x7a, 0x6f, 0x6e, - 0x65, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x7a, 0x6f, 0x6e, 0x65, - 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x73, 0x65, 0x5f, 0x61, 0x63, 0x6d, 0x65, 0x5f, 0x63, - 0x65, 0x72, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x41, 0x63, - 0x6d, 0x65, 0x43, 0x65, 0x72, 0x74, 0x12, 0x30, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, - 0x0f, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x6f, 0x6d, 0x61, - 0x69, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x6f, - 0x6d, 0x61, 0x69, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x4a, 0x04, 0x08, 0x0e, 0x10, 0x0f, 0x22, 0x3d, - 0x0a, 0x07, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61, 0x6d, + 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x36, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x53, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, + 0x39, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, + 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x52, 0x0a, 0x1a, 0x53, 0x65, + 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x49, + 0x0a, 0x15, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x44, 0x4e, 0x53, 0x53, 0x65, 0x74, 0x75, 0x70, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, + 0x18, 0x0a, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x22, 0x2a, 0x0a, 0x0e, 0x44, 0x65, 0x73, + 0x74, 0x72, 0x6f, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x25, 0x0a, 0x0f, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x22, 0x96, 0x01, 0x0a, + 0x0c, 0x44, 0x65, 0x62, 0x75, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, + 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x69, + 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x69, 0x6c, 0x65, + 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x73, 0x22, 0x72, 0x0a, 0x0d, 0x44, 0x65, 0x62, 0x75, 0x67, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x6c, + 0x12, 0x2b, 0x0a, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, + 0x49, 0x73, 0x73, 0x75, 0x65, 0x52, 0x06, 0x69, 0x73, 0x73, 0x75, 0x65, 0x73, 0x12, 0x1a, 0x0a, + 0x08, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x08, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x73, 0x22, 0x8e, 0x01, 0x0a, 0x05, 0x49, 0x73, + 0x73, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, + 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x76, 0x65, 0x72, + 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x3b, 0x0a, + 0x0c, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0b, 0x63, + 0x6f, 0x64, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x73, 0x22, 0x38, 0x0a, 0x0a, 0x43, 0x6f, + 0x64, 0x65, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x22, 0xec, 0x01, 0x0a, 0x0c, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x61, 0x6e, 0x6f, 0x6e, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x6e, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x14, + 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x12, 0x4a, 0x0a, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, + 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, + 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x70, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, 0x65, 0x73, + 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x6f, 0x73, + 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x63, 0x68, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x61, 0x72, 0x63, 0x68, 0x1a, 0x3d, 0x0a, 0x0f, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x69, + 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0x85, 0x02, 0x0a, 0x0d, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x35, 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, + 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x42, 0x02, + 0x18, 0x01, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x1c, 0x0a, 0x07, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, + 0x01, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x30, 0x0a, 0x04, 0x6d, 0x6f, + 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, + 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x65, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, + 0x2a, 0x0a, 0x11, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x49, 0x64, 0x22, 0x5b, 0x0a, 0x0e, 0x44, + 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, + 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x22, 0x68, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x55, 0x0a, - 0x0b, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, - 0x3a, 0x02, 0x18, 0x01, 0x22, 0x7a, 0x0a, 0x06, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x12, 0x2c, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x18, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x22, 0x39, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4b, 0x65, 0x79, 0x12, 0x12, 0x0a, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x84, 0x01, 0x0a, 0x10, - 0x50, 0x75, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, - 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2c, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x22, 0x46, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, - 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4b, 0x65, - 0x79, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x22, 0x44, 0x0a, 0x12, 0x47, 0x65, - 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x2e, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x14, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, - 0x22, 0x49, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6f, 0x2e, 0x64, - 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4b, - 0x65, 0x79, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x22, 0x2e, 0x0a, 0x12, 0x4c, - 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x48, 0x0a, 0x13, 0x4c, - 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x31, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4b, 0x65, 0x79, 0x52, 0x07, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x73, 0x22, 0xd4, 0x01, 0x0a, 0x0c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x1b, - 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x61, 0x75, 0x74, 0x68, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, - 0x63, 0x6f, 0x70, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, - 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x73, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x1d, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x5f, 0x69, 0x6e, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x09, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, 0x73, 0x49, 0x6e, 0x12, 0x17, - 0x0a, 0x07, 0x61, 0x6e, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x61, 0x6e, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x66, 0x72, 0x65, - 0x73, 0x68, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x57, 0x0a, 0x0d, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, - 0x0c, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x5f, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x22, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x5f, 0x0a, 0x07, 0x56, 0x65, 0x72, - 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x61, 0x62, 0x72, 0x69, 0x63, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x61, 0x62, 0x72, 0x69, 0x63, 0x12, 0x17, 0x0a, 0x07, - 0x63, 0x6c, 0x69, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, - 0x6c, 0x69, 0x4d, 0x69, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x75, 0x6c, 0x75, 0x6d, 0x69, 0x5f, - 0x6d, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x75, 0x6c, 0x75, 0x6d, - 0x69, 0x4d, 0x69, 0x6e, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x22, 0x89, 0x01, 0x0a, 0x0b, 0x54, - 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x30, 0x0a, 0x05, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x05, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x12, 0x18, 0x0a, 0x07, - 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0xb8, 0x01, 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x38, 0x0a, - 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x64, 0x65, 0x72, - 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x12, - 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, - 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x12, 0x12, 0x0a, - 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73, - 0x74, 0x22, 0x88, 0x01, 0x0a, 0x0c, 0x54, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x30, 0x0a, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, - 0x72, 0x69, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, - 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x22, 0x67, 0x0a, 0x14, - 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, - 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, - 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0xb6, 0x01, 0x0a, 0x0d, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, - 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x69, 0x6f, 0x2e, 0x64, - 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x17, - 0x0a, 0x07, 0x61, 0x6c, 0x62, 0x5f, 0x61, 0x72, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x06, 0x61, 0x6c, 0x62, 0x41, 0x72, 0x6e, 0x12, 0x1c, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x02, 0x18, 0x01, 0x52, 0x07, 0x70, 0x72, - 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x12, - 0x1d, 0x0a, 0x0a, 0x63, 0x64, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x39, - 0x0a, 0x09, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, - 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x5e, 0x0a, 0x06, 0x44, 0x65, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, - 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, - 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x12, - 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x6a, 0x0a, 0x08, 0x52, 0x65, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x12, 0x0a, - 0x04, 0x63, 0x70, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x04, 0x63, 0x70, 0x75, - 0x73, 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, - 0x31, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x07, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, - 0x73, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x4b, 0x0a, 0x09, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, - 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x0c, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, - 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x52, 0x0c, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x02, - 0x18, 0x01, 0x22, 0x5f, 0x0a, 0x06, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x1a, 0x0a, 0x08, - 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, - 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, 0x35, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6f, - 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x73, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x3a, - 0x02, 0x18, 0x01, 0x22, 0x7e, 0x0a, 0x04, 0x50, 0x6f, 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x52, 0x08, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x26, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x3a, - 0x02, 0x18, 0x01, 0x22, 0x24, 0x0a, 0x06, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x16, 0x0a, - 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3a, 0x02, 0x18, 0x01, 0x22, 0xe4, 0x01, 0x0a, 0x05, 0x42, 0x75, - 0x69, 0x6c, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x1e, 0x0a, - 0x0a, 0x64, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x64, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x66, 0x69, 0x6c, 0x65, 0x12, 0x31, 0x0a, - 0x04, 0x61, 0x72, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6f, - 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, - 0x2e, 0x41, 0x72, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x04, 0x61, 0x72, 0x67, 0x73, - 0x12, 0x19, 0x0a, 0x08, 0x73, 0x68, 0x6d, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x02, 0x52, 0x07, 0x73, 0x68, 0x6d, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x72, - 0x67, 0x65, 0x74, 0x1a, 0x37, 0x0a, 0x09, 0x41, 0x72, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, - 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, - 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x02, 0x18, 0x01, - 0x22, 0x75, 0x0a, 0x0b, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, - 0x12, 0x0a, 0x04, 0x74, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, - 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, - 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x74, - 0x72, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x72, 0x65, 0x74, 0x72, - 0x69, 0x65, 0x73, 0x3a, 0x02, 0x18, 0x01, 0x22, 0xd8, 0x06, 0x0a, 0x07, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x32, 0x0a, - 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x16, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x12, 0x1e, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, - 0x6c, 0x12, 0x2c, 0x0a, 0x06, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x14, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, - 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x06, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, - 0x28, 0x0a, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, - 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, - 0x72, 0x74, 0x52, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x12, 0x48, 0x0a, 0x0b, 0x65, 0x6e, 0x76, - 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, - 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, - 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, - 0x65, 0x6e, 0x74, 0x12, 0x29, 0x0a, 0x05, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x08, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, - 0x31, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x05, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x2e, - 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x3b, - 0x0a, 0x0b, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x0b, - 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x63, - 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, - 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x6f, 0x6d, 0x61, 0x69, - 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x6e, 0x69, 0x74, 0x18, 0x0d, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x04, 0x69, 0x6e, 0x69, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x64, 0x6e, 0x73, - 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x64, 0x6e, 0x73, - 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x3c, 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x5f, 0x66, - 0x69, 0x6c, 0x65, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x69, 0x6f, 0x2e, - 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, - 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x74, 0x69, 0x63, 0x46, 0x69, 0x6c, - 0x65, 0x73, 0x12, 0x31, 0x0a, 0x08, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x18, 0x10, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, - 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x08, 0x6e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x12, 0x29, 0x0a, 0x05, 0x72, 0x65, 0x64, 0x69, 0x73, 0x18, 0x12, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x64, 0x69, 0x73, 0x52, 0x05, 0x72, 0x65, 0x64, 0x69, 0x73, - 0x12, 0x32, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x73, 0x18, 0x13, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x73, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x74, - 0x67, 0x72, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, - 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x1a, 0x3e, - 0x0a, 0x10, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x02, - 0x18, 0x01, 0x22, 0x47, 0x0a, 0x0b, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x65, - 0x73, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x64, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, - 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x73, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x0b, 0x0a, 0x05, 0x52, - 0x65, 0x64, 0x69, 0x73, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x0e, 0x0a, 0x08, 0x50, 0x6f, 0x73, 0x74, - 0x67, 0x72, 0x65, 0x73, 0x3a, 0x02, 0x18, 0x01, 0x22, 0xa3, 0x02, 0x0a, 0x0b, 0x44, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, - 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, - 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0f, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, - 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x08, 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, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, - 0x74, 0x61, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x91, - 0x02, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x70, 0x65, 0x63, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, - 0x70, 0x65, 0x63, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, - 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, - 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x28, 0x0a, 0x0f, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0f, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, - 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x08, 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, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, - 0x74, 0x61, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x3a, 0x02, - 0x18, 0x01, 0x22, 0x3b, 0x0a, 0x0e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, - 0x5c, 0x0a, 0x10, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, - 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, - 0x74, 0x61, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0xaa, 0x01, - 0x0a, 0x11, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x42, - 0x02, 0x18, 0x01, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x30, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, - 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, 0x2e, 0x0a, 0x12, 0x47, 0x65, - 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x4e, 0x0a, 0x1c, 0x44, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5a, - 0x6f, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x6e, 0x61, - 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x6e, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x22, 0x33, 0x0a, 0x1d, 0x44, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5a, - 0x6f, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x7a, - 0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x22, - 0xa7, 0x01, 0x0a, 0x0e, 0x57, 0x68, 0x6f, 0x41, 0x6d, 0x49, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x07, - 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, - 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x04, 0x74, 0x69, 0x65, 0x72, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x54, - 0x69, 0x65, 0x72, 0x52, 0x04, 0x74, 0x69, 0x65, 0x72, 0x2a, 0x54, 0x0a, 0x0e, 0x44, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x55, - 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x10, - 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x44, 0x45, 0x56, 0x45, 0x4c, 0x4f, 0x50, 0x4d, 0x45, 0x4e, 0x54, - 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x54, 0x41, 0x47, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, - 0x0e, 0x0a, 0x0a, 0x50, 0x52, 0x4f, 0x44, 0x55, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x03, 0x2a, - 0x89, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x12, 0x11, 0x0a, 0x0d, 0x4e, 0x4f, 0x54, 0x5f, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, - 0x44, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x5f, 0x51, 0x55, 0x45, - 0x55, 0x45, 0x44, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x5f, 0x50, - 0x52, 0x4f, 0x56, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x11, 0x0a, - 0x0d, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x03, - 0x12, 0x14, 0x0a, 0x10, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x41, - 0x54, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x11, 0x0a, 0x0d, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x5f, - 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x42, 0x55, 0x49, - 0x4c, 0x44, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x06, 0x12, 0x11, 0x0a, - 0x0d, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x51, 0x55, 0x45, 0x55, 0x45, 0x44, 0x10, 0x07, - 0x12, 0x16, 0x0a, 0x12, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x50, - 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x08, 0x12, 0x18, 0x0a, 0x14, 0x44, 0x45, 0x50, 0x4c, - 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x44, - 0x10, 0x09, 0x12, 0x15, 0x0a, 0x11, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, - 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x0a, 0x12, 0x10, 0x0a, 0x0c, 0x42, 0x55, 0x49, - 0x4c, 0x44, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x0b, 0x2a, 0x42, 0x0a, 0x0a, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x4f, 0x4e, - 0x46, 0x49, 0x47, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, - 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x53, 0x45, 0x4e, 0x53, 0x49, 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x2a, - 0x3f, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0f, 0x0a, 0x0b, 0x4c, - 0x49, 0x4e, 0x55, 0x58, 0x5f, 0x41, 0x4d, 0x44, 0x36, 0x34, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, - 0x4c, 0x49, 0x4e, 0x55, 0x58, 0x5f, 0x41, 0x52, 0x4d, 0x36, 0x34, 0x10, 0x01, 0x12, 0x0d, 0x0a, - 0x09, 0x4c, 0x49, 0x4e, 0x55, 0x58, 0x5f, 0x41, 0x4e, 0x59, 0x10, 0x02, 0x1a, 0x02, 0x18, 0x01, - 0x2a, 0x48, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x07, 0x0a, 0x03, - 0x41, 0x4e, 0x59, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x55, 0x44, 0x50, 0x10, 0x01, 0x12, 0x07, - 0x0a, 0x03, 0x54, 0x43, 0x50, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x54, 0x54, 0x50, 0x10, - 0x03, 0x12, 0x09, 0x0a, 0x05, 0x48, 0x54, 0x54, 0x50, 0x32, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, - 0x47, 0x52, 0x50, 0x43, 0x10, 0x05, 0x1a, 0x02, 0x18, 0x01, 0x2a, 0x21, 0x0a, 0x04, 0x4d, 0x6f, - 0x64, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x4f, 0x53, 0x54, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, - 0x49, 0x4e, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x01, 0x1a, 0x02, 0x18, 0x01, 0x2a, 0x37, 0x0a, - 0x07, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, - 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x49, - 0x56, 0x41, 0x54, 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, - 0x10, 0x02, 0x1a, 0x02, 0x18, 0x01, 0x2a, 0x61, 0x0a, 0x10, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x1d, 0x53, 0x55, - 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x49, 0x45, 0x52, 0x5f, - 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, - 0x08, 0x50, 0x45, 0x52, 0x53, 0x4f, 0x4e, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x42, - 0x41, 0x53, 0x49, 0x43, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x50, 0x52, 0x4f, 0x10, 0x03, 0x12, - 0x08, 0x0a, 0x04, 0x54, 0x45, 0x41, 0x4d, 0x10, 0x04, 0x32, 0xab, 0x14, 0x0a, 0x10, 0x46, 0x61, - 0x62, 0x72, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x12, 0x3e, - 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 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, 0x14, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x40, - 0x0a, 0x0a, 0x47, 0x65, 0x74, 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, 0x15, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, - 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x03, 0x90, 0x02, 0x01, - 0x12, 0x40, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, - 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x0b, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x54, 0x6f, 0x6b, 0x65, - 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, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x12, 0x3f, 0x0a, 0x04, 0x54, 0x61, 0x69, 0x6c, 0x12, 0x19, 0x2e, 0x69, 0x6f, 0x2e, 0x64, - 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, - 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x30, 0x01, 0x12, 0x3f, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x15, 0x2e, 0x69, + 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x44, 0x6f, 0x6d, 0x61, + 0x69, 0x6e, 0x22, 0x24, 0x0a, 0x0e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x22, 0x67, 0x0a, 0x14, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x16, 0x0a, 0x06, 0x70, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x70, 0x72, 0x6f, 0x6d, 0x70, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, + 0x75, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6c, 0x61, 0x6e, 0x67, + 0x75, 0x61, 0x67, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x67, 0x72, 0x65, 0x65, 0x5f, 0x74, 0x6f, + 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x61, 0x67, 0x72, 0x65, 0x65, 0x54, 0x6f, + 0x73, 0x22, 0x34, 0x0a, 0x04, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, + 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x41, 0x0a, 0x15, 0x47, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x28, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x12, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x46, + 0x69, 0x6c, 0x65, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x22, 0x2b, 0x0a, 0x15, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x75, 0x75, 0x69, 0x64, 0x22, 0x2b, 0x0a, 0x15, 0x47, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x12, 0x0a, 0x04, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x75, 0x75, 0x69, 0x64, 0x22, 0x44, 0x0a, 0x10, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x52, + 0x4c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0x25, 0x0a, 0x11, 0x55, 0x70, + 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, + 0x6c, 0x22, 0xa1, 0x04, 0x0a, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, + 0x6f, 0x12, 0x2f, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, + 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, + 0x61, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x12, 0x16, + 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x61, 0x74, 0x5f, 0x69, 0x70, + 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x61, 0x74, 0x49, 0x70, 0x73, 0x12, + 0x15, 0x0a, 0x06, 0x6c, 0x62, 0x5f, 0x69, 0x70, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x05, 0x6c, 0x62, 0x49, 0x70, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x72, 0x69, 0x76, 0x61, 0x74, + 0x65, 0x5f, 0x66, 0x71, 0x64, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x70, 0x72, + 0x69, 0x76, 0x61, 0x74, 0x65, 0x46, 0x71, 0x64, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x5f, 0x66, 0x71, 0x64, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x46, 0x71, 0x64, 0x6e, 0x12, 0x39, 0x0a, 0x0a, 0x63, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x63, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x39, 0x0a, 0x0a, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, + 0x5f, 0x61, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x41, 0x74, + 0x12, 0x17, 0x0a, 0x07, 0x7a, 0x6f, 0x6e, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x7a, 0x6f, 0x6e, 0x65, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0d, 0x75, 0x73, 0x65, + 0x5f, 0x61, 0x63, 0x6d, 0x65, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0b, 0x75, 0x73, 0x65, 0x41, 0x63, 0x6d, 0x65, 0x43, 0x65, 0x72, 0x74, 0x12, 0x30, 0x0a, + 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x1a, 0x19, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x03, - 0x88, 0x02, 0x01, 0x12, 0x43, 0x0a, 0x06, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x1b, 0x2e, + 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, + 0x1e, 0x0a, 0x0a, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x10, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x4a, + 0x04, 0x08, 0x0e, 0x10, 0x0f, 0x22, 0x3d, 0x0a, 0x07, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, + 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x05, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x3a, 0x02, 0x18, 0x01, 0x22, 0x55, 0x0a, 0x0b, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x18, 0x0a, + 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x7a, 0x0a, 0x06, 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, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2c, 0x0a, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, + 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x54, 0x79, 0x70, + 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x39, 0x0a, 0x09, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x4b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x22, 0x84, 0x01, 0x0a, 0x10, 0x50, 0x75, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x2c, 0x0a, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x69, 0x6f, 0x2e, 0x64, + 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x46, 0x0a, 0x11, 0x47, 0x65, 0x74, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x31, + 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4b, 0x65, 0x79, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x73, 0x22, 0x44, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2e, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, + 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x07, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x22, 0x49, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x31, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x4b, 0x65, 0x79, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x73, 0x22, 0x2e, 0x0a, 0x12, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, + 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x22, 0x48, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, 0x0a, 0x07, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6f, 0x2e, + 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x4b, 0x65, 0x79, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x22, 0xd4, 0x01, 0x0a, + 0x0c, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, + 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, + 0x65, 0x6e, 0x61, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x5f, 0x63, 0x6f, + 0x64, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x75, 0x74, 0x68, 0x43, 0x6f, + 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x70, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x73, 0x73, 0x65, + 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x73, 0x73, + 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x78, 0x70, 0x69, 0x72, 0x65, + 0x73, 0x5f, 0x69, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x65, 0x78, 0x70, 0x69, + 0x72, 0x65, 0x73, 0x49, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x61, 0x6e, 0x6f, 0x6e, 0x5f, 0x69, 0x64, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x6e, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x23, + 0x0a, 0x0d, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x22, 0x57, 0x0a, 0x0d, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x65, + 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x66, 0x72, 0x65, + 0x73, 0x68, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, + 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x22, 0x0a, 0x06, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, + 0x22, 0x5f, 0x0a, 0x07, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x66, + 0x61, 0x62, 0x72, 0x69, 0x63, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x61, 0x62, + 0x72, 0x69, 0x63, 0x12, 0x17, 0x0a, 0x07, 0x63, 0x6c, 0x69, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6c, 0x69, 0x4d, 0x69, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, + 0x70, 0x75, 0x6c, 0x75, 0x6d, 0x69, 0x5f, 0x6d, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x70, 0x75, 0x6c, 0x75, 0x6d, 0x69, 0x4d, 0x69, 0x6e, 0x4a, 0x04, 0x08, 0x02, 0x10, + 0x03, 0x22, 0x89, 0x01, 0x0a, 0x0b, 0x54, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x30, 0x0a, + 0x05, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x05, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x12, + 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, + 0x74, 0x61, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0xb8, 0x01, + 0x0a, 0x08, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x16, + 0x0a, 0x06, 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, + 0x73, 0x74, 0x64, 0x65, 0x72, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x65, 0x74, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x22, 0x88, 0x01, 0x0a, 0x0c, 0x54, 0x61, 0x69, + 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x07, 0x65, 0x6e, 0x74, + 0x72, 0x69, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x69, 0x6f, 0x2e, + 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x07, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x6f, 0x73, + 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x6f, 0x73, 0x74, 0x4a, 0x04, 0x08, + 0x01, 0x10, 0x02, 0x22, 0x67, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x35, 0x0a, 0x08, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, 0xb6, 0x01, 0x0a, + 0x0d, 0x50, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x35, + 0x0a, 0x08, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x61, 0x6c, 0x62, 0x5f, 0x61, 0x72, 0x6e, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x6c, 0x62, 0x41, 0x72, 0x6e, 0x12, 0x1c, + 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x02, 0x18, 0x01, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x18, 0x0a, 0x07, + 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, + 0x6f, 0x6d, 0x70, 0x6f, 0x73, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x64, 0x5f, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x63, 0x64, 0x56, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x39, 0x0a, 0x09, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, + 0x22, 0x5e, 0x0a, 0x06, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x61, + 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x0c, 0x63, 0x61, 0x70, 0x61, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x69, 0x65, 0x73, 0x12, 0x16, + 0x0a, 0x06, 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x64, 0x72, 0x69, 0x76, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x3a, 0x02, 0x18, 0x01, + 0x22, 0x6a, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x6d, 0x65, 0x6d, 0x6f, 0x72, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x06, 0x6d, 0x65, + 0x6d, 0x6f, 0x72, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x70, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x02, 0x52, 0x04, 0x63, 0x70, 0x75, 0x73, 0x12, 0x2e, 0x0a, 0x07, 0x64, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x69, 0x6f, 0x2e, 0x64, + 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, + 0x07, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x73, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x4b, 0x0a, 0x09, + 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x12, 0x3a, 0x0a, 0x0c, 0x72, 0x65, 0x73, + 0x65, 0x72, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x16, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x5f, 0x0a, 0x06, 0x44, 0x65, 0x70, + 0x6c, 0x6f, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x72, 0x65, 0x70, 0x6c, 0x69, 0x63, 0x61, 0x73, 0x12, + 0x35, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, + 0x31, 0x2e, 0x52, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x52, 0x09, 0x72, 0x65, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x7e, 0x0a, 0x04, 0x50, 0x6f, + 0x72, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x69, + 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x26, + 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x12, 0x2e, 0x69, + 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x6f, 0x64, 0x65, + 0x52, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x24, 0x0a, 0x06, 0x53, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x3a, 0x02, 0x18, 0x01, + 0x22, 0xe4, 0x01, 0x0a, 0x05, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x78, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x6f, 0x63, 0x6b, 0x65, 0x72, 0x66, 0x69, + 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x6f, 0x63, 0x6b, 0x65, 0x72, + 0x66, 0x69, 0x6c, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x61, 0x72, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, + 0x31, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x2e, 0x41, 0x72, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, + 0x79, 0x52, 0x04, 0x61, 0x72, 0x67, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x68, 0x6d, 0x5f, 0x73, + 0x69, 0x7a, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x73, 0x68, 0x6d, 0x53, 0x69, + 0x7a, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x1a, 0x37, 0x0a, 0x09, 0x41, 0x72, + 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x75, 0x0a, 0x0b, 0x48, 0x65, 0x61, 0x6c, 0x74, + 0x68, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x73, 0x74, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x74, 0x69, 0x6d, 0x65, 0x6f, 0x75, 0x74, + 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x07, 0x72, 0x65, 0x74, 0x72, 0x69, 0x65, 0x73, 0x3a, 0x02, 0x18, 0x01, 0x22, 0xd8, + 0x06, 0x0a, 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, + 0x0a, 0x05, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x69, + 0x6d, 0x61, 0x67, 0x65, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x52, 0x08, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x1e, 0x0a, 0x08, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x6e, 0x61, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x08, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x12, 0x2c, 0x0a, 0x06, 0x64, 0x65, 0x70, 0x6c, + 0x6f, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, + 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x06, + 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x28, 0x0a, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, 0x18, + 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, + 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x72, 0x74, 0x52, 0x05, 0x70, 0x6f, 0x72, 0x74, 0x73, + 0x12, 0x48, 0x0a, 0x0b, 0x65, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x18, + 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, + 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x45, 0x6e, 0x76, + 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0b, 0x65, + 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x29, 0x0a, 0x05, 0x62, 0x75, + 0x69, 0x6c, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x69, 0x6f, 0x2e, 0x64, + 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x05, + 0x62, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x2e, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, + 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x52, 0x07, 0x73, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x3b, 0x0a, 0x0b, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x63, + 0x68, 0x65, 0x63, 0x6b, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x69, 0x6f, 0x2e, + 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, + 0x43, 0x68, 0x65, 0x63, 0x6b, 0x52, 0x0b, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x63, 0x68, 0x65, + 0x63, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x0b, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x1e, 0x0a, 0x0a, + 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0a, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x69, 0x6e, 0x69, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x69, 0x6e, 0x69, 0x74, + 0x12, 0x19, 0x0a, 0x08, 0x64, 0x6e, 0x73, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x18, 0x0e, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x64, 0x6e, 0x73, 0x52, 0x6f, 0x6c, 0x65, 0x12, 0x3c, 0x0a, 0x0c, 0x73, + 0x74, 0x61, 0x74, 0x69, 0x63, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x74, 0x61, 0x74, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x0b, 0x73, 0x74, + 0x61, 0x74, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x31, 0x0a, 0x08, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x69, 0x6f, + 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x52, 0x08, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x73, 0x12, 0x29, 0x0a, 0x05, + 0x72, 0x65, 0x64, 0x69, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x69, 0x6f, + 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x64, 0x69, 0x73, + 0x52, 0x05, 0x72, 0x65, 0x64, 0x69, 0x73, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x74, 0x67, + 0x72, 0x65, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x69, 0x6f, 0x2e, 0x64, + 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, + 0x73, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, + 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x1a, 0x3e, 0x0a, 0x10, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, + 0x6d, 0x65, 0x6e, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x47, 0x0a, 0x0b, 0x53, 0x74, 0x61, + 0x74, 0x69, 0x63, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x6c, 0x64, + 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, + 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x73, 0x3a, 0x02, + 0x18, 0x01, 0x22, 0x0b, 0x0a, 0x05, 0x52, 0x65, 0x64, 0x69, 0x73, 0x3a, 0x02, 0x18, 0x01, 0x22, + 0x0e, 0x0a, 0x08, 0x50, 0x6f, 0x73, 0x74, 0x67, 0x72, 0x65, 0x73, 0x3a, 0x02, 0x18, 0x01, 0x22, + 0xa3, 0x02, 0x0a, 0x0b, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x30, 0x0a, 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x69, 0x6f, 0x2e, - 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, - 0x17, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x44, 0x1a, 0x19, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, - 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, - 0x6e, 0x66, 0x6f, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x48, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x12, 0x1b, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, - 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, - 0x02, 0x01, 0x12, 0x4b, 0x0a, 0x07, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x12, 0x1c, 0x2e, - 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x73, - 0x74, 0x72, 0x6f, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x69, 0x6f, - 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x72, - 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x02, 0x12, - 0x44, 0x0a, 0x07, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x12, 0x1c, 0x2e, 0x69, 0x6f, 0x2e, - 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, - 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x6d, 0x6f, 0x64, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x28, 0x0a, + 0x0f, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x61, 0x74, + 0x61, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x08, 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, 0x04, 0x74, 0x69, 0x6d, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x91, 0x02, 0x0a, 0x05, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x20, 0x0a, 0x0b, 0x73, 0x70, 0x65, 0x63, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x70, 0x65, 0x63, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, + 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x28, 0x0a, + 0x0f, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x64, 0x61, 0x74, 0x61, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x61, 0x74, 0x61, 0x73, + 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x61, 0x74, + 0x61, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, + 0x63, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, + 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x08, 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, 0x04, 0x74, 0x69, 0x6d, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x04, 0x64, 0x61, 0x74, 0x61, 0x3a, 0x02, 0x18, 0x01, 0x22, 0x3b, 0x0a, 0x0e, 0x50, 0x75, 0x62, + 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x05, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x69, 0x6f, 0x2e, + 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, + 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0x5c, 0x0a, 0x10, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x65, 0x74, 0x61, 0x67, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x65, 0x74, 0x61, 0x67, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, + 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, + 0x6a, 0x65, 0x63, 0x74, 0x22, 0xaa, 0x01, 0x0a, 0x11, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x07, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x69, 0x6f, + 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x42, 0x02, 0x18, 0x01, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x30, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, + 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x22, 0x2e, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, + 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, + 0x74, 0x22, 0x4e, 0x0a, 0x1c, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, + 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5a, 0x6f, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x6e, 0x61, 0x6d, 0x65, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x5f, 0x72, 0x65, 0x63, 0x6f, 0x72, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, + 0x6e, 0x61, 0x6d, 0x65, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x52, 0x65, 0x63, 0x6f, 0x72, 0x64, + 0x73, 0x22, 0x33, 0x0a, 0x1d, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, + 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5a, 0x6f, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x7a, 0x6f, 0x6e, 0x65, 0x22, 0xa7, 0x01, 0x0a, 0x0e, 0x57, 0x68, 0x6f, 0x41, 0x6d, + 0x49, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x65, 0x6e, + 0x61, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x65, 0x6e, 0x61, 0x6e, + 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x72, + 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x72, 0x65, 0x67, + 0x69, 0x6f, 0x6e, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x32, 0x0a, 0x04, + 0x74, 0x69, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x69, 0x6f, 0x2e, + 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x65, 0x72, 0x52, 0x04, 0x74, 0x69, 0x65, 0x72, + 0x2a, 0x54, 0x0a, 0x0e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x6f, + 0x64, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x44, 0x45, 0x56, 0x45, + 0x4c, 0x4f, 0x50, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x54, 0x41, + 0x47, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x50, 0x52, 0x4f, 0x44, 0x55, 0x43, + 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x03, 0x2a, 0x89, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x69, + 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x11, 0x0a, 0x0d, 0x4e, 0x4f, 0x54, 0x5f, 0x53, + 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x42, 0x55, + 0x49, 0x4c, 0x44, 0x5f, 0x51, 0x55, 0x45, 0x55, 0x45, 0x44, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, + 0x42, 0x55, 0x49, 0x4c, 0x44, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x49, + 0x4e, 0x47, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x5f, 0x50, 0x45, + 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x42, 0x55, 0x49, 0x4c, 0x44, + 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x11, 0x0a, + 0x0d, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x05, + 0x12, 0x12, 0x0a, 0x0e, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, + 0x4e, 0x47, 0x10, 0x06, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x51, + 0x55, 0x45, 0x55, 0x45, 0x44, 0x10, 0x07, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x45, 0x50, 0x4c, 0x4f, + 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x08, 0x12, + 0x18, 0x0a, 0x14, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x4f, + 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x09, 0x12, 0x15, 0x0a, 0x11, 0x44, 0x45, 0x50, + 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x0a, + 0x12, 0x10, 0x0a, 0x0c, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, + 0x10, 0x0b, 0x2a, 0x42, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, + 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, + 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x45, 0x4e, 0x53, 0x49, + 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x2a, 0x3f, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x12, 0x0f, 0x0a, 0x0b, 0x4c, 0x49, 0x4e, 0x55, 0x58, 0x5f, 0x41, 0x4d, 0x44, 0x36, + 0x34, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x4c, 0x49, 0x4e, 0x55, 0x58, 0x5f, 0x41, 0x52, 0x4d, + 0x36, 0x34, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x49, 0x4e, 0x55, 0x58, 0x5f, 0x41, 0x4e, + 0x59, 0x10, 0x02, 0x1a, 0x02, 0x18, 0x01, 0x2a, 0x48, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6c, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4e, 0x59, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, + 0x55, 0x44, 0x50, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x54, 0x43, 0x50, 0x10, 0x02, 0x12, 0x08, + 0x0a, 0x04, 0x48, 0x54, 0x54, 0x50, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x48, 0x54, 0x54, 0x50, + 0x32, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x47, 0x52, 0x50, 0x43, 0x10, 0x05, 0x1a, 0x02, 0x18, + 0x01, 0x2a, 0x21, 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x4f, 0x53, + 0x54, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x01, + 0x1a, 0x02, 0x18, 0x01, 0x2a, 0x37, 0x0a, 0x07, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, + 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, + 0x06, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x10, 0x02, 0x1a, 0x02, 0x18, 0x01, 0x2a, 0x61, 0x0a, + 0x10, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x65, + 0x72, 0x12, 0x21, 0x0a, 0x1d, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, + 0x4e, 0x5f, 0x54, 0x49, 0x45, 0x52, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, + 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x50, 0x45, 0x52, 0x53, 0x4f, 0x4e, 0x41, 0x4c, + 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x42, 0x41, 0x53, 0x49, 0x43, 0x10, 0x02, 0x12, 0x07, 0x0a, + 0x03, 0x50, 0x52, 0x4f, 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x45, 0x41, 0x4d, 0x10, 0x04, + 0x32, 0xfa, 0x15, 0x0a, 0x10, 0x46, 0x61, 0x62, 0x72, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x74, 0x72, + 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x12, 0x3e, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, + 0x75, 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, 0x14, 0x2e, 0x69, 0x6f, 0x2e, + 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x40, 0x0a, 0x0a, 0x47, 0x65, 0x74, 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, 0x15, 0x2e, 0x69, 0x6f, + 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, + 0x6f, 0x6e, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x40, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x12, 0x1a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x69, + 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x0b, 0x52, 0x65, 0x76, + 0x6f, 0x6b, 0x65, 0x54, 0x6f, 0x6b, 0x65, 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, - 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x4e, 0x0a, 0x09, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x62, 0x65, 0x12, 0x1e, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x58, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, - 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, - 0x58, 0x0a, 0x0d, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, - 0x12, 0x22, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x0d, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x12, 0x22, 0x2e, 0x69, 0x6f, 0x2e, - 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, - 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x5f, 0x0a, 0x0e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x23, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x69, 0x6f, 0x2e, - 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x03, 0x90, 0x02, 0x01, 0x12, 0x40, 0x0a, 0x05, 0x44, 0x65, 0x62, 0x75, 0x67, 0x12, 0x1a, 0x2e, - 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x62, - 0x75, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x69, 0x6f, 0x2e, 0x64, - 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x08, 0x53, 0x69, 0x67, 0x6e, 0x45, 0x55, - 0x4c, 0x41, 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, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x08, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x6f, 0x53, 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, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x03, - 0x90, 0x02, 0x01, 0x12, 0x48, 0x0a, 0x09, 0x50, 0x75, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x12, 0x1e, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, - 0x50, 0x75, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x43, 0x0a, - 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x15, - 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x73, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x03, 0x88, - 0x02, 0x01, 0x12, 0x4e, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x73, 0x12, 0x20, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, - 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x22, 0x06, 0x88, 0x02, 0x01, 0x90, - 0x02, 0x01, 0x12, 0x54, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, - 0x12, 0x1f, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x20, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x48, 0x0a, 0x09, 0x50, 0x75, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1e, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x03, 0x90, - 0x02, 0x02, 0x12, 0x50, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x73, 0x12, 0x22, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x04, 0x54, 0x61, 0x69, 0x6c, + 0x12, 0x19, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, + 0x54, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x69, 0x6f, + 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x69, 0x6c, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x3f, 0x0a, 0x06, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x12, 0x15, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x1a, 0x19, 0x2e, 0x69, 0x6f, 0x2e, + 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, + 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x43, 0x0a, 0x06, 0x44, 0x65, + 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x1b, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, + 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x3e, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x17, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x44, 0x1a, + 0x19, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, + 0x48, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1b, 0x2e, 0x69, 0x6f, 0x2e, 0x64, + 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x4b, 0x0a, 0x07, 0x44, 0x65, 0x73, + 0x74, 0x72, 0x6f, 0x79, 0x12, 0x1c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, + 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, + 0x31, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x03, 0x90, 0x02, 0x02, 0x12, 0x44, 0x0a, 0x07, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, + 0x68, 0x12, 0x1c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x4e, 0x0a, 0x09, + 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x1e, 0x2e, 0x69, 0x6f, 0x2e, 0x64, + 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x69, 0x6f, 0x2e, 0x64, + 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x58, 0x0a, 0x0b, + 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x69, 0x6f, + 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, + 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, + 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x58, 0x0a, 0x0d, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x22, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, + 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, + 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x69, 0x6f, + 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x58, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x12, 0x22, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, + 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5f, 0x0a, 0x0e, 0x47, 0x65, + 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x23, 0x2e, 0x69, + 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, + 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x23, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x40, 0x0a, 0x05, 0x44, + 0x65, 0x62, 0x75, 0x67, 0x12, 0x1a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, + 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x1b, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, + 0x44, 0x65, 0x62, 0x75, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, + 0x08, 0x53, 0x69, 0x67, 0x6e, 0x45, 0x55, 0x4c, 0x41, 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, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x08, 0x43, 0x68, 0x65, + 0x63, 0x6b, 0x54, 0x6f, 0x53, 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, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x48, 0x0a, 0x09, 0x50, 0x75, + 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x1e, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, + 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x03, 0x90, 0x02, 0x02, 0x12, 0x57, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x73, 0x12, 0x20, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x52, 0x0a, - 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x52, 0x4c, - 0x12, 0x1e, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, - 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1f, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, - 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x70, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, - 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5a, 0x6f, 0x6e, 0x65, 0x12, 0x2a, 0x2e, 0x69, 0x6f, 0x2e, - 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x65, 0x53, 0x75, 0x62, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5a, 0x6f, 0x6e, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, - 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x75, - 0x62, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5a, 0x6f, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x75, 0x62, - 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5a, 0x6f, 0x6e, 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, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x64, 0x0a, 0x18, 0x47, 0x65, - 0x74, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x64, 0x6f, 0x6d, 0x61, - 0x69, 0x6e, 0x5a, 0x6f, 0x6e, 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, 0x2b, - 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5a, - 0x6f, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, - 0x12, 0x43, 0x0a, 0x06, 0x57, 0x68, 0x6f, 0x41, 0x6d, 0x49, 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, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, - 0x31, 0x2e, 0x57, 0x68, 0x6f, 0x41, 0x6d, 0x49, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x3b, 0x0a, 0x05, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x12, 0x1a, - 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, - 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x08, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x65, 0x12, 0x16, + 0x03, 0x88, 0x02, 0x01, 0x12, 0x43, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x15, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, + 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x4e, 0x0a, 0x0b, 0x4c, 0x69, 0x73, + 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x20, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, + 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x69, 0x6f, 0x2e, + 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x73, 0x22, 0x06, 0x88, 0x02, 0x01, 0x90, 0x02, 0x01, 0x12, 0x54, 0x0a, 0x0a, 0x47, 0x65, 0x74, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x1f, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, + 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, + 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, + 0x48, 0x0a, 0x09, 0x50, 0x75, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1e, 0x2e, 0x69, + 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x74, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, + 0x6d, 0x70, 0x74, 0x79, 0x22, 0x03, 0x90, 0x02, 0x02, 0x12, 0x50, 0x0a, 0x0d, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x22, 0x2e, 0x69, 0x6f, 0x2e, + 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 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, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x03, - 0x90, 0x02, 0x02, 0x12, 0x52, 0x0a, 0x0e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x44, 0x4e, 0x53, - 0x53, 0x65, 0x74, 0x75, 0x70, 0x12, 0x23, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x44, 0x4e, 0x53, 0x53, 0x65, - 0x74, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, - 0x74, 0x79, 0x22, 0x03, 0x90, 0x02, 0x01, 0x42, 0xb0, 0x01, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x2e, - 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x46, 0x61, - 0x62, 0x72, 0x69, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3d, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x44, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x4c, 0x61, - 0x62, 0x73, 0x2f, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2f, 0x73, 0x72, 0x63, 0x2f, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x69, 0x6f, 0x2f, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2f, 0x76, - 0x31, 0x3b, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x49, 0x44, 0x58, - 0xaa, 0x02, 0x0c, 0x49, 0x6f, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x56, 0x31, 0xca, - 0x02, 0x0c, 0x49, 0x6f, 0x5c, 0x44, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x5c, 0x56, 0x31, 0xe2, 0x02, - 0x18, 0x49, 0x6f, 0x5c, 0x44, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, - 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, 0x49, 0x6f, 0x3a, 0x3a, - 0x44, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x03, 0x90, 0x02, 0x02, 0x12, 0x57, 0x0a, 0x0b, 0x4c, + 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x20, 0x2e, 0x69, 0x6f, 0x2e, + 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x69, + 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x03, 0x90, 0x02, 0x01, 0x12, 0x52, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x70, + 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x52, 0x4c, 0x12, 0x1e, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, + 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x52, 0x4c, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, + 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x52, 0x4c, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x70, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5a, 0x6f, 0x6e, + 0x65, 0x12, 0x2a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x64, 0x6f, 0x6d, 0x61, + 0x69, 0x6e, 0x5a, 0x6f, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, + 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5a, 0x6f, + 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x13, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x53, 0x75, 0x62, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5a, 0x6f, 0x6e, + 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, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x12, 0x64, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, + 0x53, 0x75, 0x62, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5a, 0x6f, 0x6e, 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, 0x2b, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, + 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, + 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5a, 0x6f, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x43, 0x0a, 0x06, 0x57, 0x68, 0x6f, 0x41, 0x6d, + 0x49, 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, 0x69, 0x6f, 0x2e, 0x64, + 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x68, 0x6f, 0x41, 0x6d, 0x49, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x3b, 0x0a, 0x05, + 0x54, 0x72, 0x61, 0x63, 0x6b, 0x12, 0x1a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, + 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x08, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x4d, 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, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x03, 0x90, 0x02, 0x02, 0x12, 0x52, 0x0a, 0x0e, 0x56, 0x65, + 0x72, 0x69, 0x66, 0x79, 0x44, 0x4e, 0x53, 0x53, 0x65, 0x74, 0x75, 0x70, 0x12, 0x23, 0x2e, 0x69, + 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x69, + 0x66, 0x79, 0x44, 0x4e, 0x53, 0x53, 0x65, 0x74, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x6f, + 0x0a, 0x13, 0x47, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x28, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, + 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, + 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, + 0x5c, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x28, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x03, 0x90, 0x02, 0x02, 0x42, 0xb0, 0x01, + 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, + 0x76, 0x31, 0x42, 0x0b, 0x46, 0x61, 0x62, 0x72, 0x69, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, + 0x01, 0x5a, 0x3d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x44, 0x65, + 0x66, 0x61, 0x6e, 0x67, 0x4c, 0x61, 0x62, 0x73, 0x2f, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2f, + 0x73, 0x72, 0x63, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x69, 0x6f, 0x2f, 0x64, 0x65, + 0x66, 0x61, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x3b, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x76, 0x31, + 0xa2, 0x02, 0x03, 0x49, 0x44, 0x58, 0xaa, 0x02, 0x0c, 0x49, 0x6f, 0x2e, 0x44, 0x65, 0x66, 0x61, + 0x6e, 0x67, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0c, 0x49, 0x6f, 0x5c, 0x44, 0x65, 0x66, 0x61, 0x6e, + 0x67, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x18, 0x49, 0x6f, 0x5c, 0x44, 0x65, 0x66, 0x61, 0x6e, 0x67, + 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, + 0x02, 0x0e, 0x49, 0x6f, 0x3a, 0x3a, 0x44, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x3a, 0x3a, 0x56, 0x31, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -5011,7 +5179,7 @@ func file_io_defang_v1_fabric_proto_rawDescGZIP() []byte { } var file_io_defang_v1_fabric_proto_enumTypes = make([]protoimpl.EnumInfo, 8) -var file_io_defang_v1_fabric_proto_msgTypes = make([]protoimpl.MessageInfo, 64) +var file_io_defang_v1_fabric_proto_msgTypes = make([]protoimpl.MessageInfo, 67) var file_io_defang_v1_fabric_proto_goTypes = []any{ (DeploymentMode)(0), // 0: io.defang.v1.DeploymentMode (ServiceState)(0), // 1: io.defang.v1.ServiceState @@ -5021,191 +5189,198 @@ var file_io_defang_v1_fabric_proto_goTypes = []any{ (Mode)(0), // 5: io.defang.v1.Mode (Network)(0), // 6: io.defang.v1.Network (SubscriptionTier)(0), // 7: io.defang.v1.SubscriptionTier - (*VerifyDNSSetupRequest)(nil), // 8: io.defang.v1.VerifyDNSSetupRequest - (*DestroyRequest)(nil), // 9: io.defang.v1.DestroyRequest - (*DestroyResponse)(nil), // 10: io.defang.v1.DestroyResponse - (*DebugRequest)(nil), // 11: io.defang.v1.DebugRequest - (*DebugResponse)(nil), // 12: io.defang.v1.DebugResponse - (*Issue)(nil), // 13: io.defang.v1.Issue - (*CodeChange)(nil), // 14: io.defang.v1.CodeChange - (*TrackRequest)(nil), // 15: io.defang.v1.TrackRequest - (*DeployRequest)(nil), // 16: io.defang.v1.DeployRequest - (*DeployResponse)(nil), // 17: io.defang.v1.DeployResponse - (*DeleteRequest)(nil), // 18: io.defang.v1.DeleteRequest - (*DeleteResponse)(nil), // 19: io.defang.v1.DeleteResponse - (*GenerateFilesRequest)(nil), // 20: io.defang.v1.GenerateFilesRequest - (*File)(nil), // 21: io.defang.v1.File - (*GenerateFilesResponse)(nil), // 22: io.defang.v1.GenerateFilesResponse - (*StartGenerateResponse)(nil), // 23: io.defang.v1.StartGenerateResponse - (*GenerateStatusRequest)(nil), // 24: io.defang.v1.GenerateStatusRequest - (*UploadURLRequest)(nil), // 25: io.defang.v1.UploadURLRequest - (*UploadURLResponse)(nil), // 26: io.defang.v1.UploadURLResponse - (*ServiceInfo)(nil), // 27: io.defang.v1.ServiceInfo - (*Secrets)(nil), // 28: io.defang.v1.Secrets - (*SecretValue)(nil), // 29: io.defang.v1.SecretValue - (*Config)(nil), // 30: io.defang.v1.Config - (*ConfigKey)(nil), // 31: io.defang.v1.ConfigKey - (*PutConfigRequest)(nil), // 32: io.defang.v1.PutConfigRequest - (*GetConfigsRequest)(nil), // 33: io.defang.v1.GetConfigsRequest - (*GetConfigsResponse)(nil), // 34: io.defang.v1.GetConfigsResponse - (*DeleteConfigsRequest)(nil), // 35: io.defang.v1.DeleteConfigsRequest - (*ListConfigsRequest)(nil), // 36: io.defang.v1.ListConfigsRequest - (*ListConfigsResponse)(nil), // 37: io.defang.v1.ListConfigsResponse - (*TokenRequest)(nil), // 38: io.defang.v1.TokenRequest - (*TokenResponse)(nil), // 39: io.defang.v1.TokenResponse - (*Status)(nil), // 40: io.defang.v1.Status - (*Version)(nil), // 41: io.defang.v1.Version - (*TailRequest)(nil), // 42: io.defang.v1.TailRequest - (*LogEntry)(nil), // 43: io.defang.v1.LogEntry - (*TailResponse)(nil), // 44: io.defang.v1.TailResponse - (*ListServicesResponse)(nil), // 45: io.defang.v1.ListServicesResponse - (*ProjectUpdate)(nil), // 46: io.defang.v1.ProjectUpdate - (*ServiceID)(nil), // 47: io.defang.v1.ServiceID - (*Device)(nil), // 48: io.defang.v1.Device - (*Resource)(nil), // 49: io.defang.v1.Resource - (*Resources)(nil), // 50: io.defang.v1.Resources - (*Deploy)(nil), // 51: io.defang.v1.Deploy - (*Port)(nil), // 52: io.defang.v1.Port - (*Secret)(nil), // 53: io.defang.v1.Secret - (*Build)(nil), // 54: io.defang.v1.Build - (*HealthCheck)(nil), // 55: io.defang.v1.HealthCheck - (*Service)(nil), // 56: io.defang.v1.Service - (*StaticFiles)(nil), // 57: io.defang.v1.StaticFiles - (*Redis)(nil), // 58: io.defang.v1.Redis - (*Postgres)(nil), // 59: io.defang.v1.Postgres - (*DeployEvent)(nil), // 60: io.defang.v1.DeployEvent - (*Event)(nil), // 61: io.defang.v1.Event - (*PublishRequest)(nil), // 62: io.defang.v1.PublishRequest - (*SubscribeRequest)(nil), // 63: io.defang.v1.SubscribeRequest - (*SubscribeResponse)(nil), // 64: io.defang.v1.SubscribeResponse - (*GetServicesRequest)(nil), // 65: io.defang.v1.GetServicesRequest - (*DelegateSubdomainZoneRequest)(nil), // 66: io.defang.v1.DelegateSubdomainZoneRequest - (*DelegateSubdomainZoneResponse)(nil), // 67: io.defang.v1.DelegateSubdomainZoneResponse - (*WhoAmIResponse)(nil), // 68: io.defang.v1.WhoAmIResponse - nil, // 69: io.defang.v1.TrackRequest.PropertiesEntry - nil, // 70: io.defang.v1.Build.ArgsEntry - nil, // 71: io.defang.v1.Service.EnvironmentEntry - (*timestamppb.Timestamp)(nil), // 72: google.protobuf.Timestamp - (*emptypb.Empty)(nil), // 73: google.protobuf.Empty + (*GetSelectedProviderRequest)(nil), // 8: io.defang.v1.GetSelectedProviderRequest + (*GetSelectedProviderResponse)(nil), // 9: io.defang.v1.GetSelectedProviderResponse + (*SetSelectedProviderRequest)(nil), // 10: io.defang.v1.SetSelectedProviderRequest + (*VerifyDNSSetupRequest)(nil), // 11: io.defang.v1.VerifyDNSSetupRequest + (*DestroyRequest)(nil), // 12: io.defang.v1.DestroyRequest + (*DestroyResponse)(nil), // 13: io.defang.v1.DestroyResponse + (*DebugRequest)(nil), // 14: io.defang.v1.DebugRequest + (*DebugResponse)(nil), // 15: io.defang.v1.DebugResponse + (*Issue)(nil), // 16: io.defang.v1.Issue + (*CodeChange)(nil), // 17: io.defang.v1.CodeChange + (*TrackRequest)(nil), // 18: io.defang.v1.TrackRequest + (*DeployRequest)(nil), // 19: io.defang.v1.DeployRequest + (*DeployResponse)(nil), // 20: io.defang.v1.DeployResponse + (*DeleteRequest)(nil), // 21: io.defang.v1.DeleteRequest + (*DeleteResponse)(nil), // 22: io.defang.v1.DeleteResponse + (*GenerateFilesRequest)(nil), // 23: io.defang.v1.GenerateFilesRequest + (*File)(nil), // 24: io.defang.v1.File + (*GenerateFilesResponse)(nil), // 25: io.defang.v1.GenerateFilesResponse + (*StartGenerateResponse)(nil), // 26: io.defang.v1.StartGenerateResponse + (*GenerateStatusRequest)(nil), // 27: io.defang.v1.GenerateStatusRequest + (*UploadURLRequest)(nil), // 28: io.defang.v1.UploadURLRequest + (*UploadURLResponse)(nil), // 29: io.defang.v1.UploadURLResponse + (*ServiceInfo)(nil), // 30: io.defang.v1.ServiceInfo + (*Secrets)(nil), // 31: io.defang.v1.Secrets + (*SecretValue)(nil), // 32: io.defang.v1.SecretValue + (*Config)(nil), // 33: io.defang.v1.Config + (*ConfigKey)(nil), // 34: io.defang.v1.ConfigKey + (*PutConfigRequest)(nil), // 35: io.defang.v1.PutConfigRequest + (*GetConfigsRequest)(nil), // 36: io.defang.v1.GetConfigsRequest + (*GetConfigsResponse)(nil), // 37: io.defang.v1.GetConfigsResponse + (*DeleteConfigsRequest)(nil), // 38: io.defang.v1.DeleteConfigsRequest + (*ListConfigsRequest)(nil), // 39: io.defang.v1.ListConfigsRequest + (*ListConfigsResponse)(nil), // 40: io.defang.v1.ListConfigsResponse + (*TokenRequest)(nil), // 41: io.defang.v1.TokenRequest + (*TokenResponse)(nil), // 42: io.defang.v1.TokenResponse + (*Status)(nil), // 43: io.defang.v1.Status + (*Version)(nil), // 44: io.defang.v1.Version + (*TailRequest)(nil), // 45: io.defang.v1.TailRequest + (*LogEntry)(nil), // 46: io.defang.v1.LogEntry + (*TailResponse)(nil), // 47: io.defang.v1.TailResponse + (*ListServicesResponse)(nil), // 48: io.defang.v1.ListServicesResponse + (*ProjectUpdate)(nil), // 49: io.defang.v1.ProjectUpdate + (*ServiceID)(nil), // 50: io.defang.v1.ServiceID + (*Device)(nil), // 51: io.defang.v1.Device + (*Resource)(nil), // 52: io.defang.v1.Resource + (*Resources)(nil), // 53: io.defang.v1.Resources + (*Deploy)(nil), // 54: io.defang.v1.Deploy + (*Port)(nil), // 55: io.defang.v1.Port + (*Secret)(nil), // 56: io.defang.v1.Secret + (*Build)(nil), // 57: io.defang.v1.Build + (*HealthCheck)(nil), // 58: io.defang.v1.HealthCheck + (*Service)(nil), // 59: io.defang.v1.Service + (*StaticFiles)(nil), // 60: io.defang.v1.StaticFiles + (*Redis)(nil), // 61: io.defang.v1.Redis + (*Postgres)(nil), // 62: io.defang.v1.Postgres + (*DeployEvent)(nil), // 63: io.defang.v1.DeployEvent + (*Event)(nil), // 64: io.defang.v1.Event + (*PublishRequest)(nil), // 65: io.defang.v1.PublishRequest + (*SubscribeRequest)(nil), // 66: io.defang.v1.SubscribeRequest + (*SubscribeResponse)(nil), // 67: io.defang.v1.SubscribeResponse + (*GetServicesRequest)(nil), // 68: io.defang.v1.GetServicesRequest + (*DelegateSubdomainZoneRequest)(nil), // 69: io.defang.v1.DelegateSubdomainZoneRequest + (*DelegateSubdomainZoneResponse)(nil), // 70: io.defang.v1.DelegateSubdomainZoneResponse + (*WhoAmIResponse)(nil), // 71: io.defang.v1.WhoAmIResponse + nil, // 72: io.defang.v1.TrackRequest.PropertiesEntry + nil, // 73: io.defang.v1.Build.ArgsEntry + nil, // 74: io.defang.v1.Service.EnvironmentEntry + (*timestamppb.Timestamp)(nil), // 75: google.protobuf.Timestamp + (*emptypb.Empty)(nil), // 76: google.protobuf.Empty } var file_io_defang_v1_fabric_proto_depIdxs = []int32{ - 21, // 0: io.defang.v1.DebugRequest.files:type_name -> io.defang.v1.File - 13, // 1: io.defang.v1.DebugResponse.issues:type_name -> io.defang.v1.Issue - 14, // 2: io.defang.v1.Issue.code_changes:type_name -> io.defang.v1.CodeChange - 69, // 3: io.defang.v1.TrackRequest.properties:type_name -> io.defang.v1.TrackRequest.PropertiesEntry - 56, // 4: io.defang.v1.DeployRequest.services:type_name -> io.defang.v1.Service + 24, // 0: io.defang.v1.DebugRequest.files:type_name -> io.defang.v1.File + 16, // 1: io.defang.v1.DebugResponse.issues:type_name -> io.defang.v1.Issue + 17, // 2: io.defang.v1.Issue.code_changes:type_name -> io.defang.v1.CodeChange + 72, // 3: io.defang.v1.TrackRequest.properties:type_name -> io.defang.v1.TrackRequest.PropertiesEntry + 59, // 4: io.defang.v1.DeployRequest.services:type_name -> io.defang.v1.Service 0, // 5: io.defang.v1.DeployRequest.mode:type_name -> io.defang.v1.DeploymentMode - 27, // 6: io.defang.v1.DeployResponse.services:type_name -> io.defang.v1.ServiceInfo - 21, // 7: io.defang.v1.GenerateFilesResponse.files:type_name -> io.defang.v1.File - 56, // 8: io.defang.v1.ServiceInfo.service:type_name -> io.defang.v1.Service - 72, // 9: io.defang.v1.ServiceInfo.created_at:type_name -> google.protobuf.Timestamp - 72, // 10: io.defang.v1.ServiceInfo.updated_at:type_name -> google.protobuf.Timestamp + 30, // 6: io.defang.v1.DeployResponse.services:type_name -> io.defang.v1.ServiceInfo + 24, // 7: io.defang.v1.GenerateFilesResponse.files:type_name -> io.defang.v1.File + 59, // 8: io.defang.v1.ServiceInfo.service:type_name -> io.defang.v1.Service + 75, // 9: io.defang.v1.ServiceInfo.created_at:type_name -> google.protobuf.Timestamp + 75, // 10: io.defang.v1.ServiceInfo.updated_at:type_name -> google.protobuf.Timestamp 1, // 11: io.defang.v1.ServiceInfo.state:type_name -> io.defang.v1.ServiceState 2, // 12: io.defang.v1.Config.type:type_name -> io.defang.v1.ConfigType 2, // 13: io.defang.v1.PutConfigRequest.type:type_name -> io.defang.v1.ConfigType - 31, // 14: io.defang.v1.GetConfigsRequest.configs:type_name -> io.defang.v1.ConfigKey - 30, // 15: io.defang.v1.GetConfigsResponse.configs:type_name -> io.defang.v1.Config - 31, // 16: io.defang.v1.DeleteConfigsRequest.configs:type_name -> io.defang.v1.ConfigKey - 31, // 17: io.defang.v1.ListConfigsResponse.configs:type_name -> io.defang.v1.ConfigKey - 72, // 18: io.defang.v1.TailRequest.since:type_name -> google.protobuf.Timestamp - 72, // 19: io.defang.v1.LogEntry.timestamp:type_name -> google.protobuf.Timestamp - 43, // 20: io.defang.v1.TailResponse.entries:type_name -> io.defang.v1.LogEntry - 27, // 21: io.defang.v1.ListServicesResponse.services:type_name -> io.defang.v1.ServiceInfo - 27, // 22: io.defang.v1.ProjectUpdate.services:type_name -> io.defang.v1.ServiceInfo - 48, // 23: io.defang.v1.Resource.devices:type_name -> io.defang.v1.Device - 49, // 24: io.defang.v1.Resources.reservations:type_name -> io.defang.v1.Resource - 50, // 25: io.defang.v1.Deploy.resources:type_name -> io.defang.v1.Resources + 34, // 14: io.defang.v1.GetConfigsRequest.configs:type_name -> io.defang.v1.ConfigKey + 33, // 15: io.defang.v1.GetConfigsResponse.configs:type_name -> io.defang.v1.Config + 34, // 16: io.defang.v1.DeleteConfigsRequest.configs:type_name -> io.defang.v1.ConfigKey + 34, // 17: io.defang.v1.ListConfigsResponse.configs:type_name -> io.defang.v1.ConfigKey + 75, // 18: io.defang.v1.TailRequest.since:type_name -> google.protobuf.Timestamp + 75, // 19: io.defang.v1.LogEntry.timestamp:type_name -> google.protobuf.Timestamp + 46, // 20: io.defang.v1.TailResponse.entries:type_name -> io.defang.v1.LogEntry + 30, // 21: io.defang.v1.ListServicesResponse.services:type_name -> io.defang.v1.ServiceInfo + 30, // 22: io.defang.v1.ProjectUpdate.services:type_name -> io.defang.v1.ServiceInfo + 51, // 23: io.defang.v1.Resource.devices:type_name -> io.defang.v1.Device + 52, // 24: io.defang.v1.Resources.reservations:type_name -> io.defang.v1.Resource + 53, // 25: io.defang.v1.Deploy.resources:type_name -> io.defang.v1.Resources 4, // 26: io.defang.v1.Port.protocol:type_name -> io.defang.v1.Protocol 5, // 27: io.defang.v1.Port.mode:type_name -> io.defang.v1.Mode - 70, // 28: io.defang.v1.Build.args:type_name -> io.defang.v1.Build.ArgsEntry + 73, // 28: io.defang.v1.Build.args:type_name -> io.defang.v1.Build.ArgsEntry 3, // 29: io.defang.v1.Service.platform:type_name -> io.defang.v1.Platform - 51, // 30: io.defang.v1.Service.deploy:type_name -> io.defang.v1.Deploy - 52, // 31: io.defang.v1.Service.ports:type_name -> io.defang.v1.Port - 71, // 32: io.defang.v1.Service.environment:type_name -> io.defang.v1.Service.EnvironmentEntry - 54, // 33: io.defang.v1.Service.build:type_name -> io.defang.v1.Build - 53, // 34: io.defang.v1.Service.secrets:type_name -> io.defang.v1.Secret - 55, // 35: io.defang.v1.Service.healthcheck:type_name -> io.defang.v1.HealthCheck - 57, // 36: io.defang.v1.Service.static_files:type_name -> io.defang.v1.StaticFiles + 54, // 30: io.defang.v1.Service.deploy:type_name -> io.defang.v1.Deploy + 55, // 31: io.defang.v1.Service.ports:type_name -> io.defang.v1.Port + 74, // 32: io.defang.v1.Service.environment:type_name -> io.defang.v1.Service.EnvironmentEntry + 57, // 33: io.defang.v1.Service.build:type_name -> io.defang.v1.Build + 56, // 34: io.defang.v1.Service.secrets:type_name -> io.defang.v1.Secret + 58, // 35: io.defang.v1.Service.healthcheck:type_name -> io.defang.v1.HealthCheck + 60, // 36: io.defang.v1.Service.static_files:type_name -> io.defang.v1.StaticFiles 6, // 37: io.defang.v1.Service.networks:type_name -> io.defang.v1.Network - 58, // 38: io.defang.v1.Service.redis:type_name -> io.defang.v1.Redis - 59, // 39: io.defang.v1.Service.postgres:type_name -> io.defang.v1.Postgres + 61, // 38: io.defang.v1.Service.redis:type_name -> io.defang.v1.Redis + 62, // 39: io.defang.v1.Service.postgres:type_name -> io.defang.v1.Postgres 0, // 40: io.defang.v1.DeployEvent.mode:type_name -> io.defang.v1.DeploymentMode - 72, // 41: io.defang.v1.DeployEvent.time:type_name -> google.protobuf.Timestamp - 72, // 42: io.defang.v1.Event.time:type_name -> google.protobuf.Timestamp - 61, // 43: io.defang.v1.PublishRequest.event:type_name -> io.defang.v1.Event - 27, // 44: io.defang.v1.SubscribeResponse.service:type_name -> io.defang.v1.ServiceInfo + 75, // 41: io.defang.v1.DeployEvent.time:type_name -> google.protobuf.Timestamp + 75, // 42: io.defang.v1.Event.time:type_name -> google.protobuf.Timestamp + 64, // 43: io.defang.v1.PublishRequest.event:type_name -> io.defang.v1.Event + 30, // 44: io.defang.v1.SubscribeResponse.service:type_name -> io.defang.v1.ServiceInfo 1, // 45: io.defang.v1.SubscribeResponse.state:type_name -> io.defang.v1.ServiceState 7, // 46: io.defang.v1.WhoAmIResponse.tier:type_name -> io.defang.v1.SubscriptionTier - 73, // 47: io.defang.v1.FabricController.GetStatus:input_type -> google.protobuf.Empty - 73, // 48: io.defang.v1.FabricController.GetVersion:input_type -> google.protobuf.Empty - 38, // 49: io.defang.v1.FabricController.Token:input_type -> io.defang.v1.TokenRequest - 73, // 50: io.defang.v1.FabricController.RevokeToken:input_type -> google.protobuf.Empty - 42, // 51: io.defang.v1.FabricController.Tail:input_type -> io.defang.v1.TailRequest - 56, // 52: io.defang.v1.FabricController.Update:input_type -> io.defang.v1.Service - 16, // 53: io.defang.v1.FabricController.Deploy:input_type -> io.defang.v1.DeployRequest - 47, // 54: io.defang.v1.FabricController.Get:input_type -> io.defang.v1.ServiceID - 18, // 55: io.defang.v1.FabricController.Delete:input_type -> io.defang.v1.DeleteRequest - 9, // 56: io.defang.v1.FabricController.Destroy:input_type -> io.defang.v1.DestroyRequest - 62, // 57: io.defang.v1.FabricController.Publish:input_type -> io.defang.v1.PublishRequest - 63, // 58: io.defang.v1.FabricController.Subscribe:input_type -> io.defang.v1.SubscribeRequest - 65, // 59: io.defang.v1.FabricController.GetServices:input_type -> io.defang.v1.GetServicesRequest - 20, // 60: io.defang.v1.FabricController.GenerateFiles:input_type -> io.defang.v1.GenerateFilesRequest - 20, // 61: io.defang.v1.FabricController.StartGenerate:input_type -> io.defang.v1.GenerateFilesRequest - 24, // 62: io.defang.v1.FabricController.GenerateStatus:input_type -> io.defang.v1.GenerateStatusRequest - 11, // 63: io.defang.v1.FabricController.Debug:input_type -> io.defang.v1.DebugRequest - 73, // 64: io.defang.v1.FabricController.SignEULA:input_type -> google.protobuf.Empty - 73, // 65: io.defang.v1.FabricController.CheckToS:input_type -> google.protobuf.Empty - 32, // 66: io.defang.v1.FabricController.PutSecret:input_type -> io.defang.v1.PutConfigRequest - 28, // 67: io.defang.v1.FabricController.DeleteSecrets:input_type -> io.defang.v1.Secrets - 36, // 68: io.defang.v1.FabricController.ListSecrets:input_type -> io.defang.v1.ListConfigsRequest - 33, // 69: io.defang.v1.FabricController.GetConfigs:input_type -> io.defang.v1.GetConfigsRequest - 32, // 70: io.defang.v1.FabricController.PutConfig:input_type -> io.defang.v1.PutConfigRequest - 35, // 71: io.defang.v1.FabricController.DeleteConfigs:input_type -> io.defang.v1.DeleteConfigsRequest - 36, // 72: io.defang.v1.FabricController.ListConfigs:input_type -> io.defang.v1.ListConfigsRequest - 25, // 73: io.defang.v1.FabricController.CreateUploadURL:input_type -> io.defang.v1.UploadURLRequest - 66, // 74: io.defang.v1.FabricController.DelegateSubdomainZone:input_type -> io.defang.v1.DelegateSubdomainZoneRequest - 73, // 75: io.defang.v1.FabricController.DeleteSubdomainZone:input_type -> google.protobuf.Empty - 73, // 76: io.defang.v1.FabricController.GetDelegateSubdomainZone:input_type -> google.protobuf.Empty - 73, // 77: io.defang.v1.FabricController.WhoAmI:input_type -> google.protobuf.Empty - 15, // 78: io.defang.v1.FabricController.Track:input_type -> io.defang.v1.TrackRequest - 73, // 79: io.defang.v1.FabricController.DeleteMe:input_type -> google.protobuf.Empty - 8, // 80: io.defang.v1.FabricController.VerifyDNSSetup:input_type -> io.defang.v1.VerifyDNSSetupRequest - 40, // 81: io.defang.v1.FabricController.GetStatus:output_type -> io.defang.v1.Status - 41, // 82: io.defang.v1.FabricController.GetVersion:output_type -> io.defang.v1.Version - 39, // 83: io.defang.v1.FabricController.Token:output_type -> io.defang.v1.TokenResponse - 73, // 84: io.defang.v1.FabricController.RevokeToken:output_type -> google.protobuf.Empty - 44, // 85: io.defang.v1.FabricController.Tail:output_type -> io.defang.v1.TailResponse - 27, // 86: io.defang.v1.FabricController.Update:output_type -> io.defang.v1.ServiceInfo - 17, // 87: io.defang.v1.FabricController.Deploy:output_type -> io.defang.v1.DeployResponse - 27, // 88: io.defang.v1.FabricController.Get:output_type -> io.defang.v1.ServiceInfo - 19, // 89: io.defang.v1.FabricController.Delete:output_type -> io.defang.v1.DeleteResponse - 10, // 90: io.defang.v1.FabricController.Destroy:output_type -> io.defang.v1.DestroyResponse - 73, // 91: io.defang.v1.FabricController.Publish:output_type -> google.protobuf.Empty - 64, // 92: io.defang.v1.FabricController.Subscribe:output_type -> io.defang.v1.SubscribeResponse - 45, // 93: io.defang.v1.FabricController.GetServices:output_type -> io.defang.v1.ListServicesResponse - 22, // 94: io.defang.v1.FabricController.GenerateFiles:output_type -> io.defang.v1.GenerateFilesResponse - 23, // 95: io.defang.v1.FabricController.StartGenerate:output_type -> io.defang.v1.StartGenerateResponse - 22, // 96: io.defang.v1.FabricController.GenerateStatus:output_type -> io.defang.v1.GenerateFilesResponse - 12, // 97: io.defang.v1.FabricController.Debug:output_type -> io.defang.v1.DebugResponse - 73, // 98: io.defang.v1.FabricController.SignEULA:output_type -> google.protobuf.Empty - 73, // 99: io.defang.v1.FabricController.CheckToS:output_type -> google.protobuf.Empty - 73, // 100: io.defang.v1.FabricController.PutSecret:output_type -> google.protobuf.Empty - 73, // 101: io.defang.v1.FabricController.DeleteSecrets:output_type -> google.protobuf.Empty - 28, // 102: io.defang.v1.FabricController.ListSecrets:output_type -> io.defang.v1.Secrets - 34, // 103: io.defang.v1.FabricController.GetConfigs:output_type -> io.defang.v1.GetConfigsResponse - 73, // 104: io.defang.v1.FabricController.PutConfig:output_type -> google.protobuf.Empty - 73, // 105: io.defang.v1.FabricController.DeleteConfigs:output_type -> google.protobuf.Empty - 37, // 106: io.defang.v1.FabricController.ListConfigs:output_type -> io.defang.v1.ListConfigsResponse - 26, // 107: io.defang.v1.FabricController.CreateUploadURL:output_type -> io.defang.v1.UploadURLResponse - 67, // 108: io.defang.v1.FabricController.DelegateSubdomainZone:output_type -> io.defang.v1.DelegateSubdomainZoneResponse - 73, // 109: io.defang.v1.FabricController.DeleteSubdomainZone:output_type -> google.protobuf.Empty - 67, // 110: io.defang.v1.FabricController.GetDelegateSubdomainZone:output_type -> io.defang.v1.DelegateSubdomainZoneResponse - 68, // 111: io.defang.v1.FabricController.WhoAmI:output_type -> io.defang.v1.WhoAmIResponse - 73, // 112: io.defang.v1.FabricController.Track:output_type -> google.protobuf.Empty - 73, // 113: io.defang.v1.FabricController.DeleteMe:output_type -> google.protobuf.Empty - 73, // 114: io.defang.v1.FabricController.VerifyDNSSetup:output_type -> google.protobuf.Empty - 81, // [81:115] is the sub-list for method output_type - 47, // [47:81] is the sub-list for method input_type + 76, // 47: io.defang.v1.FabricController.GetStatus:input_type -> google.protobuf.Empty + 76, // 48: io.defang.v1.FabricController.GetVersion:input_type -> google.protobuf.Empty + 41, // 49: io.defang.v1.FabricController.Token:input_type -> io.defang.v1.TokenRequest + 76, // 50: io.defang.v1.FabricController.RevokeToken:input_type -> google.protobuf.Empty + 45, // 51: io.defang.v1.FabricController.Tail:input_type -> io.defang.v1.TailRequest + 59, // 52: io.defang.v1.FabricController.Update:input_type -> io.defang.v1.Service + 19, // 53: io.defang.v1.FabricController.Deploy:input_type -> io.defang.v1.DeployRequest + 50, // 54: io.defang.v1.FabricController.Get:input_type -> io.defang.v1.ServiceID + 21, // 55: io.defang.v1.FabricController.Delete:input_type -> io.defang.v1.DeleteRequest + 12, // 56: io.defang.v1.FabricController.Destroy:input_type -> io.defang.v1.DestroyRequest + 65, // 57: io.defang.v1.FabricController.Publish:input_type -> io.defang.v1.PublishRequest + 66, // 58: io.defang.v1.FabricController.Subscribe:input_type -> io.defang.v1.SubscribeRequest + 68, // 59: io.defang.v1.FabricController.GetServices:input_type -> io.defang.v1.GetServicesRequest + 23, // 60: io.defang.v1.FabricController.GenerateFiles:input_type -> io.defang.v1.GenerateFilesRequest + 23, // 61: io.defang.v1.FabricController.StartGenerate:input_type -> io.defang.v1.GenerateFilesRequest + 27, // 62: io.defang.v1.FabricController.GenerateStatus:input_type -> io.defang.v1.GenerateStatusRequest + 14, // 63: io.defang.v1.FabricController.Debug:input_type -> io.defang.v1.DebugRequest + 76, // 64: io.defang.v1.FabricController.SignEULA:input_type -> google.protobuf.Empty + 76, // 65: io.defang.v1.FabricController.CheckToS:input_type -> google.protobuf.Empty + 35, // 66: io.defang.v1.FabricController.PutSecret:input_type -> io.defang.v1.PutConfigRequest + 31, // 67: io.defang.v1.FabricController.DeleteSecrets:input_type -> io.defang.v1.Secrets + 39, // 68: io.defang.v1.FabricController.ListSecrets:input_type -> io.defang.v1.ListConfigsRequest + 36, // 69: io.defang.v1.FabricController.GetConfigs:input_type -> io.defang.v1.GetConfigsRequest + 35, // 70: io.defang.v1.FabricController.PutConfig:input_type -> io.defang.v1.PutConfigRequest + 38, // 71: io.defang.v1.FabricController.DeleteConfigs:input_type -> io.defang.v1.DeleteConfigsRequest + 39, // 72: io.defang.v1.FabricController.ListConfigs:input_type -> io.defang.v1.ListConfigsRequest + 28, // 73: io.defang.v1.FabricController.CreateUploadURL:input_type -> io.defang.v1.UploadURLRequest + 69, // 74: io.defang.v1.FabricController.DelegateSubdomainZone:input_type -> io.defang.v1.DelegateSubdomainZoneRequest + 76, // 75: io.defang.v1.FabricController.DeleteSubdomainZone:input_type -> google.protobuf.Empty + 76, // 76: io.defang.v1.FabricController.GetDelegateSubdomainZone:input_type -> google.protobuf.Empty + 76, // 77: io.defang.v1.FabricController.WhoAmI:input_type -> google.protobuf.Empty + 18, // 78: io.defang.v1.FabricController.Track:input_type -> io.defang.v1.TrackRequest + 76, // 79: io.defang.v1.FabricController.DeleteMe:input_type -> google.protobuf.Empty + 11, // 80: io.defang.v1.FabricController.VerifyDNSSetup:input_type -> io.defang.v1.VerifyDNSSetupRequest + 8, // 81: io.defang.v1.FabricController.GetSelectedProvider:input_type -> io.defang.v1.GetSelectedProviderRequest + 10, // 82: io.defang.v1.FabricController.SetSelectedProvider:input_type -> io.defang.v1.SetSelectedProviderRequest + 43, // 83: io.defang.v1.FabricController.GetStatus:output_type -> io.defang.v1.Status + 44, // 84: io.defang.v1.FabricController.GetVersion:output_type -> io.defang.v1.Version + 42, // 85: io.defang.v1.FabricController.Token:output_type -> io.defang.v1.TokenResponse + 76, // 86: io.defang.v1.FabricController.RevokeToken:output_type -> google.protobuf.Empty + 47, // 87: io.defang.v1.FabricController.Tail:output_type -> io.defang.v1.TailResponse + 30, // 88: io.defang.v1.FabricController.Update:output_type -> io.defang.v1.ServiceInfo + 20, // 89: io.defang.v1.FabricController.Deploy:output_type -> io.defang.v1.DeployResponse + 30, // 90: io.defang.v1.FabricController.Get:output_type -> io.defang.v1.ServiceInfo + 22, // 91: io.defang.v1.FabricController.Delete:output_type -> io.defang.v1.DeleteResponse + 13, // 92: io.defang.v1.FabricController.Destroy:output_type -> io.defang.v1.DestroyResponse + 76, // 93: io.defang.v1.FabricController.Publish:output_type -> google.protobuf.Empty + 67, // 94: io.defang.v1.FabricController.Subscribe:output_type -> io.defang.v1.SubscribeResponse + 48, // 95: io.defang.v1.FabricController.GetServices:output_type -> io.defang.v1.ListServicesResponse + 25, // 96: io.defang.v1.FabricController.GenerateFiles:output_type -> io.defang.v1.GenerateFilesResponse + 26, // 97: io.defang.v1.FabricController.StartGenerate:output_type -> io.defang.v1.StartGenerateResponse + 25, // 98: io.defang.v1.FabricController.GenerateStatus:output_type -> io.defang.v1.GenerateFilesResponse + 15, // 99: io.defang.v1.FabricController.Debug:output_type -> io.defang.v1.DebugResponse + 76, // 100: io.defang.v1.FabricController.SignEULA:output_type -> google.protobuf.Empty + 76, // 101: io.defang.v1.FabricController.CheckToS:output_type -> google.protobuf.Empty + 76, // 102: io.defang.v1.FabricController.PutSecret:output_type -> google.protobuf.Empty + 76, // 103: io.defang.v1.FabricController.DeleteSecrets:output_type -> google.protobuf.Empty + 31, // 104: io.defang.v1.FabricController.ListSecrets:output_type -> io.defang.v1.Secrets + 37, // 105: io.defang.v1.FabricController.GetConfigs:output_type -> io.defang.v1.GetConfigsResponse + 76, // 106: io.defang.v1.FabricController.PutConfig:output_type -> google.protobuf.Empty + 76, // 107: io.defang.v1.FabricController.DeleteConfigs:output_type -> google.protobuf.Empty + 40, // 108: io.defang.v1.FabricController.ListConfigs:output_type -> io.defang.v1.ListConfigsResponse + 29, // 109: io.defang.v1.FabricController.CreateUploadURL:output_type -> io.defang.v1.UploadURLResponse + 70, // 110: io.defang.v1.FabricController.DelegateSubdomainZone:output_type -> io.defang.v1.DelegateSubdomainZoneResponse + 76, // 111: io.defang.v1.FabricController.DeleteSubdomainZone:output_type -> google.protobuf.Empty + 70, // 112: io.defang.v1.FabricController.GetDelegateSubdomainZone:output_type -> io.defang.v1.DelegateSubdomainZoneResponse + 71, // 113: io.defang.v1.FabricController.WhoAmI:output_type -> io.defang.v1.WhoAmIResponse + 76, // 114: io.defang.v1.FabricController.Track:output_type -> google.protobuf.Empty + 76, // 115: io.defang.v1.FabricController.DeleteMe:output_type -> google.protobuf.Empty + 76, // 116: io.defang.v1.FabricController.VerifyDNSSetup:output_type -> google.protobuf.Empty + 9, // 117: io.defang.v1.FabricController.GetSelectedProvider:output_type -> io.defang.v1.GetSelectedProviderResponse + 76, // 118: io.defang.v1.FabricController.SetSelectedProvider:output_type -> google.protobuf.Empty + 83, // [83:119] is the sub-list for method output_type + 47, // [47:83] is the sub-list for method input_type 47, // [47:47] is the sub-list for extension type_name 47, // [47:47] is the sub-list for extension extendee 0, // [0:47] is the sub-list for field type_name @@ -5222,7 +5397,7 @@ func file_io_defang_v1_fabric_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_io_defang_v1_fabric_proto_rawDesc, NumEnums: 8, - NumMessages: 64, + NumMessages: 67, NumExtensions: 0, NumServices: 1, }, diff --git a/src/protos/io/defang/v1/fabric.proto b/src/protos/io/defang/v1/fabric.proto index 73fb61864..5166e1fc2 100644 --- a/src/protos/io/defang/v1/fabric.proto +++ b/src/protos/io/defang/v1/fabric.proto @@ -104,6 +104,30 @@ service FabricController { rpc VerifyDNSSetup(VerifyDNSSetupRequest) returns (google.protobuf.Empty) { option idempotency_level = NO_SIDE_EFFECTS; } + + rpc GetSelectedProvider(GetSelectedProviderRequest) + returns (GetSelectedProviderResponse) { + option idempotency_level = NO_SIDE_EFFECTS; + } + + rpc SetSelectedProvider(SetSelectedProviderRequest) + returns (google.protobuf.Empty) { + option idempotency_level = IDEMPOTENT; + } + +} + +message GetSelectedProviderRequest { + string project = 1; +} + +message GetSelectedProviderResponse { + string provider = 1; +} + +message SetSelectedProviderRequest { + string project = 1; + string provider = 2; } message VerifyDNSSetupRequest { From c56865ccc3680cabbbc86a18b3e518097c64d778 Mon Sep 17 00:00:00 2001 From: Edward J Date: Wed, 13 Nov 2024 11:16:59 -0800 Subject: [PATCH 3/3] Make provider an enum in grpc and use loader.LoadProjectName --- src/cmd/cli/command/commands.go | 19 +- src/pkg/cli/client/provider.go | 30 +- src/protos/io/defang/v1/fabric.pb.go | 1008 ++++++++++++++------------ src/protos/io/defang/v1/fabric.proto | 12 +- 4 files changed, 583 insertions(+), 486 deletions(-) diff --git a/src/cmd/cli/command/commands.go b/src/cmd/cli/command/commands.go index fd8f81fbb..8d747de3f 100644 --- a/src/cmd/cli/command/commands.go +++ b/src/cmd/cli/command/commands.go @@ -1133,19 +1133,16 @@ func getProvider(ctx context.Context, loader *compose.Loader) (cliClient.Provide } func determineProviderID(ctx context.Context, loader *compose.Loader) (string, error) { - proj, err := loader.LoadProject(ctx) + projName, err := loader.LoadProjectName(ctx) if err != nil { term.Warn("Unable to load project:", err) } else if !RootCmd.PersistentFlags().Changed("provider") { // If user manually selected auto provider, do not load from remote - resp, err := client.GetSelectedProvider(ctx, &defangv1.GetSelectedProviderRequest{Project: proj.Name}) + resp, err := client.GetSelectedProvider(ctx, &defangv1.GetSelectedProviderRequest{Project: projName}) if err != nil { term.Warn("Unable to get selected provider:", err) - } else if resp.Provider != "" { - if err := providerID.Set(resp.Provider); err != nil { - term.Warn("Invalid provider from fabric:", err) - } else { - return "defang server", nil - } + } else if resp.Provider != defangv1.Provider_PROVIDER_UNSPECIFIED { + providerID.SetEnumValue(resp.Provider) + return "defang server", nil } } @@ -1170,11 +1167,11 @@ func determineProviderID(ctx context.Context, loader *compose.Loader) (string, e } // Save the selected provider to the fabric - if proj != nil { - if err := client.SetSelectedProvider(ctx, &defangv1.SetSelectedProviderRequest{Project: proj.Name, Provider: providerID.String()}); err != nil { + if projName != "" { + if err := client.SetSelectedProvider(ctx, &defangv1.SetSelectedProviderRequest{Project: projName, Provider: providerID.EnumValue()}); err != nil { term.Warn("Unable to save selected provider to defang server:", err) } else { - term.Printf("%v is now the default provider for project %v and will auto-select next time if no other provider is specified. Use --provider=auto to reselect.", providerID, proj.Name) + term.Printf("%v is now the default provider for project %v and will auto-select next time if no other provider is specified. Use --provider=auto to reselect.", providerID, projName) } } return "interactive prompt", nil diff --git a/src/pkg/cli/client/provider.go b/src/pkg/cli/client/provider.go index 9591f29f9..6a947444f 100644 --- a/src/pkg/cli/client/provider.go +++ b/src/pkg/cli/client/provider.go @@ -17,8 +17,8 @@ const ( ProviderDefang ProviderID = "defang" ProviderAWS ProviderID = "aws" ProviderDO ProviderID = "digitalocean" - // ProviderAzure Provider = "azure" // ProviderGCP Provider = "gcp" + // ProviderAzure Provider = "azure" ) var allProviders = []ProviderID{ @@ -26,8 +26,8 @@ var allProviders = []ProviderID{ ProviderDefang, ProviderAWS, ProviderDO, - // ProviderAzure, // ProviderGCP, + // ProviderAzure, } func AllProviders() []ProviderID { @@ -53,6 +53,19 @@ func (p ProviderID) Name() string { } } +func (p ProviderID) EnumValue() defangv1.Provider { + switch p { + case ProviderDefang: + return defangv1.Provider_DEFANG + case ProviderAWS: + return defangv1.Provider_AWS + case ProviderDO: + return defangv1.Provider_DIGITALOCEAN + default: + return defangv1.Provider_PROVIDER_UNSPECIFIED + } +} + func (p *ProviderID) Set(str string) error { str = strings.ToLower(str) for _, provider := range allProviders { @@ -65,6 +78,19 @@ func (p *ProviderID) Set(str string) error { return fmt.Errorf("provider not one of %v", allProviders) } +func (p *ProviderID) SetEnumValue(val defangv1.Provider) { + switch val { + case defangv1.Provider_DEFANG: + *p = ProviderDefang + case defangv1.Provider_AWS: + *p = ProviderAWS + case defangv1.Provider_DIGITALOCEAN: + *p = ProviderDO + default: + *p = ProviderAuto + } +} + func (p ProviderID) Type() string { return "provider" } diff --git a/src/protos/io/defang/v1/fabric.pb.go b/src/protos/io/defang/v1/fabric.pb.go index db250edbd..1bdfc3a49 100644 --- a/src/protos/io/defang/v1/fabric.pb.go +++ b/src/protos/io/defang/v1/fabric.pb.go @@ -24,6 +24,61 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +type Provider int32 + +const ( + Provider_PROVIDER_UNSPECIFIED Provider = 0 + Provider_DEFANG Provider = 1 + Provider_AWS Provider = 2 + Provider_DIGITALOCEAN Provider = 3 + Provider_GCP Provider = 4 +) + +// Enum value maps for Provider. +var ( + Provider_name = map[int32]string{ + 0: "PROVIDER_UNSPECIFIED", + 1: "DEFANG", + 2: "AWS", + 3: "DIGITALOCEAN", + 4: "GCP", + } + Provider_value = map[string]int32{ + "PROVIDER_UNSPECIFIED": 0, + "DEFANG": 1, + "AWS": 2, + "DIGITALOCEAN": 3, + "GCP": 4, + } +) + +func (x Provider) Enum() *Provider { + p := new(Provider) + *p = x + return p +} + +func (x Provider) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Provider) Descriptor() protoreflect.EnumDescriptor { + return file_io_defang_v1_fabric_proto_enumTypes[0].Descriptor() +} + +func (Provider) Type() protoreflect.EnumType { + return &file_io_defang_v1_fabric_proto_enumTypes[0] +} + +func (x Provider) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Provider.Descriptor instead. +func (Provider) EnumDescriptor() ([]byte, []int) { + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{0} +} + type DeploymentMode int32 const ( @@ -60,11 +115,11 @@ func (x DeploymentMode) String() string { } func (DeploymentMode) Descriptor() protoreflect.EnumDescriptor { - return file_io_defang_v1_fabric_proto_enumTypes[0].Descriptor() + return file_io_defang_v1_fabric_proto_enumTypes[1].Descriptor() } func (DeploymentMode) Type() protoreflect.EnumType { - return &file_io_defang_v1_fabric_proto_enumTypes[0] + return &file_io_defang_v1_fabric_proto_enumTypes[1] } func (x DeploymentMode) Number() protoreflect.EnumNumber { @@ -73,7 +128,7 @@ func (x DeploymentMode) Number() protoreflect.EnumNumber { // Deprecated: Use DeploymentMode.Descriptor instead. func (DeploymentMode) EnumDescriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{0} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{1} } type ServiceState int32 @@ -138,11 +193,11 @@ func (x ServiceState) String() string { } func (ServiceState) Descriptor() protoreflect.EnumDescriptor { - return file_io_defang_v1_fabric_proto_enumTypes[1].Descriptor() + return file_io_defang_v1_fabric_proto_enumTypes[2].Descriptor() } func (ServiceState) Type() protoreflect.EnumType { - return &file_io_defang_v1_fabric_proto_enumTypes[1] + return &file_io_defang_v1_fabric_proto_enumTypes[2] } func (x ServiceState) Number() protoreflect.EnumNumber { @@ -151,7 +206,7 @@ func (x ServiceState) Number() protoreflect.EnumNumber { // Deprecated: Use ServiceState.Descriptor instead. func (ServiceState) EnumDescriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{1} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{2} } type ConfigType int32 @@ -184,11 +239,11 @@ func (x ConfigType) String() string { } func (ConfigType) Descriptor() protoreflect.EnumDescriptor { - return file_io_defang_v1_fabric_proto_enumTypes[2].Descriptor() + return file_io_defang_v1_fabric_proto_enumTypes[3].Descriptor() } func (ConfigType) Type() protoreflect.EnumType { - return &file_io_defang_v1_fabric_proto_enumTypes[2] + return &file_io_defang_v1_fabric_proto_enumTypes[3] } func (x ConfigType) Number() protoreflect.EnumNumber { @@ -197,7 +252,7 @@ func (x ConfigType) Number() protoreflect.EnumNumber { // Deprecated: Use ConfigType.Descriptor instead. func (ConfigType) EnumDescriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{2} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{3} } // Deprecated: Marked as deprecated in io/defang/v1/fabric.proto. @@ -234,11 +289,11 @@ func (x Platform) String() string { } func (Platform) Descriptor() protoreflect.EnumDescriptor { - return file_io_defang_v1_fabric_proto_enumTypes[3].Descriptor() + return file_io_defang_v1_fabric_proto_enumTypes[4].Descriptor() } func (Platform) Type() protoreflect.EnumType { - return &file_io_defang_v1_fabric_proto_enumTypes[3] + return &file_io_defang_v1_fabric_proto_enumTypes[4] } func (x Platform) Number() protoreflect.EnumNumber { @@ -247,7 +302,7 @@ func (x Platform) Number() protoreflect.EnumNumber { // Deprecated: Use Platform.Descriptor instead. func (Platform) EnumDescriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{3} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{4} } // Deprecated: Marked as deprecated in io/defang/v1/fabric.proto. @@ -293,11 +348,11 @@ func (x Protocol) String() string { } func (Protocol) Descriptor() protoreflect.EnumDescriptor { - return file_io_defang_v1_fabric_proto_enumTypes[4].Descriptor() + return file_io_defang_v1_fabric_proto_enumTypes[5].Descriptor() } func (Protocol) Type() protoreflect.EnumType { - return &file_io_defang_v1_fabric_proto_enumTypes[4] + return &file_io_defang_v1_fabric_proto_enumTypes[5] } func (x Protocol) Number() protoreflect.EnumNumber { @@ -306,7 +361,7 @@ func (x Protocol) Number() protoreflect.EnumNumber { // Deprecated: Use Protocol.Descriptor instead. func (Protocol) EnumDescriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{4} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{5} } // Deprecated: Marked as deprecated in io/defang/v1/fabric.proto. @@ -340,11 +395,11 @@ func (x Mode) String() string { } func (Mode) Descriptor() protoreflect.EnumDescriptor { - return file_io_defang_v1_fabric_proto_enumTypes[5].Descriptor() + return file_io_defang_v1_fabric_proto_enumTypes[6].Descriptor() } func (Mode) Type() protoreflect.EnumType { - return &file_io_defang_v1_fabric_proto_enumTypes[5] + return &file_io_defang_v1_fabric_proto_enumTypes[6] } func (x Mode) Number() protoreflect.EnumNumber { @@ -353,7 +408,7 @@ func (x Mode) Number() protoreflect.EnumNumber { // Deprecated: Use Mode.Descriptor instead. func (Mode) EnumDescriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{5} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{6} } // Deprecated: Marked as deprecated in io/defang/v1/fabric.proto. @@ -390,11 +445,11 @@ func (x Network) String() string { } func (Network) Descriptor() protoreflect.EnumDescriptor { - return file_io_defang_v1_fabric_proto_enumTypes[6].Descriptor() + return file_io_defang_v1_fabric_proto_enumTypes[7].Descriptor() } func (Network) Type() protoreflect.EnumType { - return &file_io_defang_v1_fabric_proto_enumTypes[6] + return &file_io_defang_v1_fabric_proto_enumTypes[7] } func (x Network) Number() protoreflect.EnumNumber { @@ -403,7 +458,7 @@ func (x Network) Number() protoreflect.EnumNumber { // Deprecated: Use Network.Descriptor instead. func (Network) EnumDescriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{6} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{7} } type SubscriptionTier int32 @@ -445,11 +500,11 @@ func (x SubscriptionTier) String() string { } func (SubscriptionTier) Descriptor() protoreflect.EnumDescriptor { - return file_io_defang_v1_fabric_proto_enumTypes[7].Descriptor() + return file_io_defang_v1_fabric_proto_enumTypes[8].Descriptor() } func (SubscriptionTier) Type() protoreflect.EnumType { - return &file_io_defang_v1_fabric_proto_enumTypes[7] + return &file_io_defang_v1_fabric_proto_enumTypes[8] } func (x SubscriptionTier) Number() protoreflect.EnumNumber { @@ -458,7 +513,7 @@ func (x SubscriptionTier) Number() protoreflect.EnumNumber { // Deprecated: Use SubscriptionTier.Descriptor instead. func (SubscriptionTier) EnumDescriptor() ([]byte, []int) { - return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{7} + return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{8} } type GetSelectedProviderRequest struct { @@ -511,7 +566,7 @@ type GetSelectedProviderResponse struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Provider string `protobuf:"bytes,1,opt,name=provider,proto3" json:"provider,omitempty"` + Provider Provider `protobuf:"varint,1,opt,name=provider,proto3,enum=io.defang.v1.Provider" json:"provider,omitempty"` } func (x *GetSelectedProviderResponse) Reset() { @@ -544,11 +599,11 @@ func (*GetSelectedProviderResponse) Descriptor() ([]byte, []int) { return file_io_defang_v1_fabric_proto_rawDescGZIP(), []int{1} } -func (x *GetSelectedProviderResponse) GetProvider() string { +func (x *GetSelectedProviderResponse) GetProvider() Provider { if x != nil { return x.Provider } - return "" + return Provider_PROVIDER_UNSPECIFIED } type SetSelectedProviderRequest struct { @@ -556,8 +611,8 @@ type SetSelectedProviderRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` - Provider string `protobuf:"bytes,2,opt,name=provider,proto3" json:"provider,omitempty"` + Project string `protobuf:"bytes,1,opt,name=project,proto3" json:"project,omitempty"` + Provider Provider `protobuf:"varint,2,opt,name=provider,proto3,enum=io.defang.v1.Provider" json:"provider,omitempty"` } func (x *SetSelectedProviderRequest) Reset() { @@ -597,11 +652,11 @@ func (x *SetSelectedProviderRequest) GetProject() string { return "" } -func (x *SetSelectedProviderRequest) GetProvider() string { +func (x *SetSelectedProviderRequest) GetProvider() Provider { if x != nil { return x.Provider } - return "" + return Provider_PROVIDER_UNSPECIFIED } type VerifyDNSSetupRequest struct { @@ -4451,15 +4506,18 @@ var file_io_defang_v1_fabric_proto_rawDesc = []byte{ 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x22, - 0x39, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1a, - 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x52, 0x0a, 0x1a, 0x53, 0x65, - 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, - 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, - 0x63, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x49, + 0x51, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, + 0x0a, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x16, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, + 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x22, 0x6a, 0x0a, 0x1a, 0x53, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x32, 0x0a, 0x08, 0x70, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x69, + 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x52, 0x08, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x22, 0x49, 0x0a, 0x15, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x44, 0x4e, 0x53, 0x53, 0x65, 0x74, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, @@ -4929,241 +4987,246 @@ var file_io_defang_v1_fabric_proto_rawDesc = []byte{ 0x74, 0x69, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x65, 0x72, 0x52, 0x04, 0x74, 0x69, 0x65, 0x72, - 0x2a, 0x54, 0x0a, 0x0e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x6f, - 0x64, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, - 0x44, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x44, 0x45, 0x56, 0x45, - 0x4c, 0x4f, 0x50, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x54, 0x41, - 0x47, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x50, 0x52, 0x4f, 0x44, 0x55, 0x43, - 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x03, 0x2a, 0x89, 0x02, 0x0a, 0x0c, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x11, 0x0a, 0x0d, 0x4e, 0x4f, 0x54, 0x5f, 0x53, - 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x42, 0x55, - 0x49, 0x4c, 0x44, 0x5f, 0x51, 0x55, 0x45, 0x55, 0x45, 0x44, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, - 0x42, 0x55, 0x49, 0x4c, 0x44, 0x5f, 0x50, 0x52, 0x4f, 0x56, 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x49, - 0x4e, 0x47, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x5f, 0x50, 0x45, - 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x42, 0x55, 0x49, 0x4c, 0x44, - 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x04, 0x12, 0x11, 0x0a, - 0x0d, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x5f, 0x52, 0x55, 0x4e, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x05, - 0x12, 0x12, 0x0a, 0x0e, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x5f, 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, - 0x4e, 0x47, 0x10, 0x06, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x51, - 0x55, 0x45, 0x55, 0x45, 0x44, 0x10, 0x07, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x45, 0x50, 0x4c, 0x4f, - 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x08, 0x12, - 0x18, 0x0a, 0x14, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x4f, - 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x09, 0x12, 0x15, 0x0a, 0x11, 0x44, 0x45, 0x50, - 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x0a, - 0x12, 0x10, 0x0a, 0x0c, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, - 0x10, 0x0b, 0x2a, 0x42, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, - 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, - 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x45, 0x4e, 0x53, 0x49, - 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x2a, 0x3f, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x12, 0x0f, 0x0a, 0x0b, 0x4c, 0x49, 0x4e, 0x55, 0x58, 0x5f, 0x41, 0x4d, 0x44, 0x36, - 0x34, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x4c, 0x49, 0x4e, 0x55, 0x58, 0x5f, 0x41, 0x52, 0x4d, - 0x36, 0x34, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x49, 0x4e, 0x55, 0x58, 0x5f, 0x41, 0x4e, - 0x59, 0x10, 0x02, 0x1a, 0x02, 0x18, 0x01, 0x2a, 0x48, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4e, 0x59, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, - 0x55, 0x44, 0x50, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x54, 0x43, 0x50, 0x10, 0x02, 0x12, 0x08, - 0x0a, 0x04, 0x48, 0x54, 0x54, 0x50, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x48, 0x54, 0x54, 0x50, - 0x32, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x47, 0x52, 0x50, 0x43, 0x10, 0x05, 0x1a, 0x02, 0x18, - 0x01, 0x2a, 0x21, 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x4f, 0x53, - 0x54, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x47, 0x52, 0x45, 0x53, 0x53, 0x10, 0x01, - 0x1a, 0x02, 0x18, 0x01, 0x2a, 0x37, 0x0a, 0x07, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, - 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, - 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, - 0x06, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x10, 0x02, 0x1a, 0x02, 0x18, 0x01, 0x2a, 0x61, 0x0a, - 0x10, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x65, - 0x72, 0x12, 0x21, 0x0a, 0x1d, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x54, 0x49, 0x45, 0x52, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, - 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x50, 0x45, 0x52, 0x53, 0x4f, 0x4e, 0x41, 0x4c, - 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x42, 0x41, 0x53, 0x49, 0x43, 0x10, 0x02, 0x12, 0x07, 0x0a, - 0x03, 0x50, 0x52, 0x4f, 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x45, 0x41, 0x4d, 0x10, 0x04, - 0x32, 0xfa, 0x15, 0x0a, 0x10, 0x46, 0x61, 0x62, 0x72, 0x69, 0x63, 0x43, 0x6f, 0x6e, 0x74, 0x72, - 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x12, 0x3e, 0x0a, 0x09, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, - 0x75, 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, 0x14, 0x2e, 0x69, 0x6f, 0x2e, - 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x40, 0x0a, 0x0a, 0x47, 0x65, 0x74, 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, 0x15, 0x2e, 0x69, 0x6f, - 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x40, 0x0a, 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x12, 0x1a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x69, - 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x0b, 0x52, 0x65, 0x76, - 0x6f, 0x6b, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x2a, 0x54, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x14, + 0x50, 0x52, 0x4f, 0x56, 0x49, 0x44, 0x45, 0x52, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x46, 0x41, 0x4e, 0x47, + 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x57, 0x53, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x44, + 0x49, 0x47, 0x49, 0x54, 0x41, 0x4c, 0x4f, 0x43, 0x45, 0x41, 0x4e, 0x10, 0x03, 0x12, 0x07, 0x0a, + 0x03, 0x47, 0x43, 0x50, 0x10, 0x04, 0x2a, 0x54, 0x0a, 0x0e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x10, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x5f, 0x4d, 0x4f, 0x44, 0x45, 0x10, 0x00, 0x12, 0x0f, + 0x0a, 0x0b, 0x44, 0x45, 0x56, 0x45, 0x4c, 0x4f, 0x50, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, + 0x0b, 0x0a, 0x07, 0x53, 0x54, 0x41, 0x47, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, + 0x50, 0x52, 0x4f, 0x44, 0x55, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x03, 0x2a, 0x89, 0x02, 0x0a, + 0x0c, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x11, 0x0a, + 0x0d, 0x4e, 0x4f, 0x54, 0x5f, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, + 0x12, 0x10, 0x0a, 0x0c, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x5f, 0x51, 0x55, 0x45, 0x55, 0x45, 0x44, + 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x5f, 0x50, 0x52, 0x4f, 0x56, + 0x49, 0x53, 0x49, 0x4f, 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x12, 0x11, 0x0a, 0x0d, 0x42, 0x55, + 0x49, 0x4c, 0x44, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x14, 0x0a, + 0x10, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x41, 0x54, 0x49, 0x4e, + 0x47, 0x10, 0x04, 0x12, 0x11, 0x0a, 0x0d, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x5f, 0x52, 0x55, 0x4e, + 0x4e, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x5f, + 0x53, 0x54, 0x4f, 0x50, 0x50, 0x49, 0x4e, 0x47, 0x10, 0x06, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x50, + 0x44, 0x41, 0x54, 0x45, 0x5f, 0x51, 0x55, 0x45, 0x55, 0x45, 0x44, 0x10, 0x07, 0x12, 0x16, 0x0a, + 0x12, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x50, 0x45, 0x4e, 0x44, + 0x49, 0x4e, 0x47, 0x10, 0x08, 0x12, 0x18, 0x0a, 0x14, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x4d, + 0x45, 0x4e, 0x54, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x09, 0x12, + 0x15, 0x0a, 0x11, 0x44, 0x45, 0x50, 0x4c, 0x4f, 0x59, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x46, 0x41, + 0x49, 0x4c, 0x45, 0x44, 0x10, 0x0a, 0x12, 0x10, 0x0a, 0x0c, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x5f, + 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x0b, 0x2a, 0x42, 0x0a, 0x0a, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, + 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, + 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x4f, 0x4e, 0x46, 0x49, 0x47, 0x54, 0x59, 0x50, 0x45, + 0x5f, 0x53, 0x45, 0x4e, 0x53, 0x49, 0x54, 0x49, 0x56, 0x45, 0x10, 0x01, 0x2a, 0x3f, 0x0a, 0x08, + 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0f, 0x0a, 0x0b, 0x4c, 0x49, 0x4e, 0x55, + 0x58, 0x5f, 0x41, 0x4d, 0x44, 0x36, 0x34, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x4c, 0x49, 0x4e, + 0x55, 0x58, 0x5f, 0x41, 0x52, 0x4d, 0x36, 0x34, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4c, 0x49, + 0x4e, 0x55, 0x58, 0x5f, 0x41, 0x4e, 0x59, 0x10, 0x02, 0x1a, 0x02, 0x18, 0x01, 0x2a, 0x48, 0x0a, + 0x08, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4e, 0x59, + 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x55, 0x44, 0x50, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x54, + 0x43, 0x50, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x54, 0x54, 0x50, 0x10, 0x03, 0x12, 0x09, + 0x0a, 0x05, 0x48, 0x54, 0x54, 0x50, 0x32, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x47, 0x52, 0x50, + 0x43, 0x10, 0x05, 0x1a, 0x02, 0x18, 0x01, 0x2a, 0x21, 0x0a, 0x04, 0x4d, 0x6f, 0x64, 0x65, 0x12, + 0x08, 0x0a, 0x04, 0x48, 0x4f, 0x53, 0x54, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x49, 0x4e, 0x47, + 0x52, 0x45, 0x53, 0x53, 0x10, 0x01, 0x1a, 0x02, 0x18, 0x01, 0x2a, 0x37, 0x0a, 0x07, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, + 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x49, 0x56, 0x41, 0x54, + 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x50, 0x55, 0x42, 0x4c, 0x49, 0x43, 0x10, 0x02, 0x1a, + 0x02, 0x18, 0x01, 0x2a, 0x61, 0x0a, 0x10, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x65, 0x72, 0x12, 0x21, 0x0a, 0x1d, 0x53, 0x55, 0x42, 0x53, 0x43, + 0x52, 0x49, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x49, 0x45, 0x52, 0x5f, 0x55, 0x4e, 0x53, + 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x50, 0x45, + 0x52, 0x53, 0x4f, 0x4e, 0x41, 0x4c, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x42, 0x41, 0x53, 0x49, + 0x43, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x50, 0x52, 0x4f, 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, + 0x54, 0x45, 0x41, 0x4d, 0x10, 0x04, 0x32, 0xfa, 0x15, 0x0a, 0x10, 0x46, 0x61, 0x62, 0x72, 0x69, + 0x63, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x12, 0x3e, 0x0a, 0x09, 0x47, + 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 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, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x04, 0x54, 0x61, 0x69, 0x6c, - 0x12, 0x19, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, - 0x54, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1a, 0x2e, 0x69, 0x6f, - 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x69, 0x6c, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x3f, 0x0a, 0x06, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x12, 0x15, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x1a, 0x19, 0x2e, 0x69, 0x6f, 0x2e, - 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x43, 0x0a, 0x06, 0x44, 0x65, - 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x1b, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, - 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x3e, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x17, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, - 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x44, 0x1a, - 0x19, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, - 0x48, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x1b, 0x2e, 0x69, 0x6f, 0x2e, 0x64, - 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, - 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x4b, 0x0a, 0x07, 0x44, 0x65, 0x73, - 0x74, 0x72, 0x6f, 0x79, 0x12, 0x1c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, - 0x31, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x03, 0x90, 0x02, 0x02, 0x12, 0x44, 0x0a, 0x07, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, - 0x68, 0x12, 0x1c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, - 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x4e, 0x0a, 0x09, - 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x1e, 0x2e, 0x69, 0x6f, 0x2e, 0x64, - 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x69, 0x6f, 0x2e, 0x64, - 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, 0x58, 0x0a, 0x0b, - 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x69, 0x6f, - 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, - 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, - 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x58, 0x0a, 0x0d, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x22, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, - 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, - 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x69, 0x6f, - 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x58, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x12, 0x22, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5f, 0x0a, 0x0e, 0x47, 0x65, - 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x23, 0x2e, 0x69, - 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x1a, 0x14, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x40, 0x0a, 0x0a, 0x47, + 0x65, 0x74, 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, 0x15, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x40, 0x0a, + 0x05, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, + 0x31, 0x2e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x3d, 0x0a, 0x0b, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x54, 0x6f, 0x6b, 0x65, 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, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3f, + 0x0a, 0x04, 0x54, 0x61, 0x69, 0x6c, 0x12, 0x19, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x54, 0x61, 0x69, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, 0x01, 0x12, + 0x3f, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x15, 0x2e, 0x69, 0x6f, 0x2e, 0x64, + 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x1a, 0x19, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x03, 0x88, 0x02, 0x01, + 0x12, 0x43, 0x0a, 0x06, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x1b, 0x2e, 0x69, 0x6f, 0x2e, + 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, + 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x03, 0x47, 0x65, 0x74, 0x12, 0x17, 0x2e, 0x69, + 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, + 0x69, 0x63, 0x65, 0x49, 0x44, 0x1a, 0x19, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, + 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x6e, 0x66, 0x6f, + 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x48, 0x0a, 0x06, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x12, + 0x1b, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x69, + 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, + 0x4b, 0x0a, 0x07, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x12, 0x1c, 0x2e, 0x69, 0x6f, 0x2e, + 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, + 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, + 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x73, 0x74, 0x72, 0x6f, 0x79, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x02, 0x12, 0x44, 0x0a, 0x07, + 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x12, 0x1c, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, + 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x73, 0x68, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x03, 0x88, + 0x02, 0x01, 0x12, 0x4e, 0x0a, 0x09, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, + 0x1e, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1f, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x30, 0x01, 0x12, 0x58, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, + 0x73, 0x12, 0x20, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, + 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x58, 0x0a, 0x0d, + 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x22, 0x2e, + 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x40, 0x0a, 0x05, 0x44, - 0x65, 0x62, 0x75, 0x67, 0x12, 0x1a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1b, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, - 0x44, 0x65, 0x62, 0x75, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, - 0x08, 0x53, 0x69, 0x67, 0x6e, 0x45, 0x55, 0x4c, 0x41, 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, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x08, 0x43, 0x68, 0x65, - 0x63, 0x6b, 0x54, 0x6f, 0x53, 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, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x58, 0x0a, 0x0d, 0x53, 0x74, 0x61, 0x72, 0x74, 0x47, + 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x12, 0x22, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, + 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, + 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x69, 0x6f, + 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x5f, 0x0a, 0x0e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x23, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x23, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, + 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x46, + 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, + 0x01, 0x12, 0x40, 0x0a, 0x05, 0x44, 0x65, 0x62, 0x75, 0x67, 0x12, 0x1a, 0x2e, 0x69, 0x6f, 0x2e, + 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x62, 0x75, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x08, 0x53, 0x69, 0x67, 0x6e, 0x45, 0x55, 0x4c, 0x41, 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, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, + 0x3f, 0x0a, 0x08, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x6f, 0x53, 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, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x03, 0x90, 0x02, 0x01, + 0x12, 0x48, 0x0a, 0x09, 0x50, 0x75, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x1e, 0x2e, + 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x74, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x48, 0x0a, 0x09, 0x50, 0x75, - 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x1e, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, - 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x43, 0x0a, 0x0d, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x15, 0x2e, 0x69, 0x6f, + 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x73, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, + 0x4e, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x20, + 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x15, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x22, 0x06, 0x88, 0x02, 0x01, 0x90, 0x02, 0x01, 0x12, + 0x54, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x1f, 0x2e, + 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, + 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, + 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x48, 0x0a, 0x09, 0x50, 0x75, 0x74, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x12, 0x1e, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, + 0x31, 0x2e, 0x50, 0x75, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x03, 0x90, 0x02, 0x02, 0x12, + 0x50, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, + 0x12, 0x22, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x03, 0x90, 0x02, + 0x02, 0x12, 0x57, 0x0a, 0x0b, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, + 0x12, 0x20, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, + 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x52, 0x0a, 0x0f, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x52, 0x4c, 0x12, 0x1e, 0x2e, + 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x6c, + 0x6f, 0x61, 0x64, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, + 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x6c, + 0x6f, 0x61, 0x64, 0x55, 0x52, 0x4c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x70, + 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x64, 0x6f, 0x6d, + 0x61, 0x69, 0x6e, 0x5a, 0x6f, 0x6e, 0x65, 0x12, 0x2a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, + 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, + 0x75, 0x62, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5a, 0x6f, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, + 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x64, 0x6f, + 0x6d, 0x61, 0x69, 0x6e, 0x5a, 0x6f, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x45, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x75, 0x62, 0x64, 0x6f, 0x6d, + 0x61, 0x69, 0x6e, 0x5a, 0x6f, 0x6e, 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, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x64, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x44, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5a, + 0x6f, 0x6e, 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, 0x2b, 0x2e, 0x69, 0x6f, + 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5a, 0x6f, 0x6e, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x43, 0x0a, + 0x06, 0x57, 0x68, 0x6f, 0x41, 0x6d, 0x49, 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, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x57, + 0x68, 0x6f, 0x41, 0x6d, 0x49, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, + 0x02, 0x01, 0x12, 0x3b, 0x0a, 0x05, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x12, 0x1a, 0x2e, 0x69, 0x6f, + 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x6b, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, + 0x3f, 0x0a, 0x08, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 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, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x03, 0x90, 0x02, 0x02, + 0x12, 0x52, 0x0a, 0x0e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x44, 0x4e, 0x53, 0x53, 0x65, 0x74, + 0x75, 0x70, 0x12, 0x23, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, + 0x31, 0x2e, 0x56, 0x65, 0x72, 0x69, 0x66, 0x79, 0x44, 0x4e, 0x53, 0x53, 0x65, 0x74, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, - 0x03, 0x88, 0x02, 0x01, 0x12, 0x43, 0x0a, 0x0d, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x53, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x15, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x03, 0x88, 0x02, 0x01, 0x12, 0x4e, 0x0a, 0x0b, 0x4c, 0x69, 0x73, - 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x73, 0x12, 0x20, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, - 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x69, 0x6f, 0x2e, - 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x73, 0x22, 0x06, 0x88, 0x02, 0x01, 0x90, 0x02, 0x01, 0x12, 0x54, 0x0a, 0x0a, 0x47, 0x65, 0x74, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x1f, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, - 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, - 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, - 0x48, 0x0a, 0x09, 0x50, 0x75, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x1e, 0x2e, 0x69, - 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x75, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6d, 0x70, 0x74, 0x79, 0x22, 0x03, 0x90, 0x02, 0x02, 0x12, 0x50, 0x0a, 0x0d, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x22, 0x2e, 0x69, 0x6f, 0x2e, - 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x03, 0x90, 0x02, 0x02, 0x12, 0x57, 0x0a, 0x0b, 0x4c, - 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x12, 0x20, 0x2e, 0x69, 0x6f, 0x2e, - 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x69, - 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x03, 0x90, 0x02, 0x01, 0x12, 0x52, 0x0a, 0x0f, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x55, 0x70, - 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x52, 0x4c, 0x12, 0x1e, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, - 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x52, 0x4c, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, - 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x52, 0x4c, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x70, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5a, 0x6f, 0x6e, - 0x65, 0x12, 0x2a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, - 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x64, 0x6f, 0x6d, 0x61, - 0x69, 0x6e, 0x5a, 0x6f, 0x6e, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, - 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5a, 0x6f, - 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x13, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x53, 0x75, 0x62, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5a, 0x6f, 0x6e, - 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, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x12, 0x64, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, - 0x53, 0x75, 0x62, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5a, 0x6f, 0x6e, 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, 0x2b, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x75, 0x62, - 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x5a, 0x6f, 0x6e, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x43, 0x0a, 0x06, 0x57, 0x68, 0x6f, 0x41, 0x6d, - 0x49, 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, 0x69, 0x6f, 0x2e, 0x64, - 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x57, 0x68, 0x6f, 0x41, 0x6d, 0x49, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x3b, 0x0a, 0x05, - 0x54, 0x72, 0x61, 0x63, 0x6b, 0x12, 0x1a, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x08, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x4d, 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, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x03, 0x90, 0x02, 0x02, 0x12, 0x52, 0x0a, 0x0e, 0x56, 0x65, - 0x72, 0x69, 0x66, 0x79, 0x44, 0x4e, 0x53, 0x53, 0x65, 0x74, 0x75, 0x70, 0x12, 0x23, 0x2e, 0x69, - 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x56, 0x65, 0x72, 0x69, - 0x66, 0x79, 0x44, 0x4e, 0x53, 0x53, 0x65, 0x74, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x6f, - 0x0a, 0x13, 0x47, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x28, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, + 0x03, 0x90, 0x02, 0x01, 0x12, 0x6f, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x28, 0x2e, 0x69, 0x6f, + 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x29, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, - 0x5c, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x28, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, - 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x03, 0x90, 0x02, 0x02, 0x42, 0xb0, 0x01, - 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x2e, 0x69, 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x42, 0x0b, 0x46, 0x61, 0x62, 0x72, 0x69, 0x63, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, - 0x01, 0x5a, 0x3d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x44, 0x65, - 0x66, 0x61, 0x6e, 0x67, 0x4c, 0x61, 0x62, 0x73, 0x2f, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2f, - 0x73, 0x72, 0x63, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x2f, 0x69, 0x6f, 0x2f, 0x64, 0x65, - 0x66, 0x61, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x3b, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x76, 0x31, - 0xa2, 0x02, 0x03, 0x49, 0x44, 0x58, 0xaa, 0x02, 0x0c, 0x49, 0x6f, 0x2e, 0x44, 0x65, 0x66, 0x61, - 0x6e, 0x67, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0c, 0x49, 0x6f, 0x5c, 0x44, 0x65, 0x66, 0x61, 0x6e, - 0x67, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x18, 0x49, 0x6f, 0x5c, 0x44, 0x65, 0x66, 0x61, 0x6e, 0x67, - 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, - 0x02, 0x0e, 0x49, 0x6f, 0x3a, 0x3a, 0x44, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x3a, 0x3a, 0x56, 0x31, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x03, 0x90, 0x02, 0x01, 0x12, 0x5c, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x53, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x28, 0x2e, 0x69, + 0x6f, 0x2e, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x53, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x03, + 0x90, 0x02, 0x02, 0x42, 0xb0, 0x01, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x2e, 0x69, 0x6f, 0x2e, 0x64, + 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x46, 0x61, 0x62, 0x72, 0x69, 0x63, + 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x44, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x4c, 0x61, 0x62, 0x73, 0x2f, 0x64, + 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2f, 0x73, 0x72, 0x63, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, + 0x2f, 0x69, 0x6f, 0x2f, 0x64, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2f, 0x76, 0x31, 0x3b, 0x64, 0x65, + 0x66, 0x61, 0x6e, 0x67, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x49, 0x44, 0x58, 0xaa, 0x02, 0x0c, 0x49, + 0x6f, 0x2e, 0x44, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x0c, 0x49, 0x6f, + 0x5c, 0x44, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x18, 0x49, 0x6f, 0x5c, + 0x44, 0x65, 0x66, 0x61, 0x6e, 0x67, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0e, 0x49, 0x6f, 0x3a, 0x3a, 0x44, 0x65, 0x66, 0x61, + 0x6e, 0x67, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -5178,212 +5241,215 @@ func file_io_defang_v1_fabric_proto_rawDescGZIP() []byte { return file_io_defang_v1_fabric_proto_rawDescData } -var file_io_defang_v1_fabric_proto_enumTypes = make([]protoimpl.EnumInfo, 8) +var file_io_defang_v1_fabric_proto_enumTypes = make([]protoimpl.EnumInfo, 9) var file_io_defang_v1_fabric_proto_msgTypes = make([]protoimpl.MessageInfo, 67) var file_io_defang_v1_fabric_proto_goTypes = []any{ - (DeploymentMode)(0), // 0: io.defang.v1.DeploymentMode - (ServiceState)(0), // 1: io.defang.v1.ServiceState - (ConfigType)(0), // 2: io.defang.v1.ConfigType - (Platform)(0), // 3: io.defang.v1.Platform - (Protocol)(0), // 4: io.defang.v1.Protocol - (Mode)(0), // 5: io.defang.v1.Mode - (Network)(0), // 6: io.defang.v1.Network - (SubscriptionTier)(0), // 7: io.defang.v1.SubscriptionTier - (*GetSelectedProviderRequest)(nil), // 8: io.defang.v1.GetSelectedProviderRequest - (*GetSelectedProviderResponse)(nil), // 9: io.defang.v1.GetSelectedProviderResponse - (*SetSelectedProviderRequest)(nil), // 10: io.defang.v1.SetSelectedProviderRequest - (*VerifyDNSSetupRequest)(nil), // 11: io.defang.v1.VerifyDNSSetupRequest - (*DestroyRequest)(nil), // 12: io.defang.v1.DestroyRequest - (*DestroyResponse)(nil), // 13: io.defang.v1.DestroyResponse - (*DebugRequest)(nil), // 14: io.defang.v1.DebugRequest - (*DebugResponse)(nil), // 15: io.defang.v1.DebugResponse - (*Issue)(nil), // 16: io.defang.v1.Issue - (*CodeChange)(nil), // 17: io.defang.v1.CodeChange - (*TrackRequest)(nil), // 18: io.defang.v1.TrackRequest - (*DeployRequest)(nil), // 19: io.defang.v1.DeployRequest - (*DeployResponse)(nil), // 20: io.defang.v1.DeployResponse - (*DeleteRequest)(nil), // 21: io.defang.v1.DeleteRequest - (*DeleteResponse)(nil), // 22: io.defang.v1.DeleteResponse - (*GenerateFilesRequest)(nil), // 23: io.defang.v1.GenerateFilesRequest - (*File)(nil), // 24: io.defang.v1.File - (*GenerateFilesResponse)(nil), // 25: io.defang.v1.GenerateFilesResponse - (*StartGenerateResponse)(nil), // 26: io.defang.v1.StartGenerateResponse - (*GenerateStatusRequest)(nil), // 27: io.defang.v1.GenerateStatusRequest - (*UploadURLRequest)(nil), // 28: io.defang.v1.UploadURLRequest - (*UploadURLResponse)(nil), // 29: io.defang.v1.UploadURLResponse - (*ServiceInfo)(nil), // 30: io.defang.v1.ServiceInfo - (*Secrets)(nil), // 31: io.defang.v1.Secrets - (*SecretValue)(nil), // 32: io.defang.v1.SecretValue - (*Config)(nil), // 33: io.defang.v1.Config - (*ConfigKey)(nil), // 34: io.defang.v1.ConfigKey - (*PutConfigRequest)(nil), // 35: io.defang.v1.PutConfigRequest - (*GetConfigsRequest)(nil), // 36: io.defang.v1.GetConfigsRequest - (*GetConfigsResponse)(nil), // 37: io.defang.v1.GetConfigsResponse - (*DeleteConfigsRequest)(nil), // 38: io.defang.v1.DeleteConfigsRequest - (*ListConfigsRequest)(nil), // 39: io.defang.v1.ListConfigsRequest - (*ListConfigsResponse)(nil), // 40: io.defang.v1.ListConfigsResponse - (*TokenRequest)(nil), // 41: io.defang.v1.TokenRequest - (*TokenResponse)(nil), // 42: io.defang.v1.TokenResponse - (*Status)(nil), // 43: io.defang.v1.Status - (*Version)(nil), // 44: io.defang.v1.Version - (*TailRequest)(nil), // 45: io.defang.v1.TailRequest - (*LogEntry)(nil), // 46: io.defang.v1.LogEntry - (*TailResponse)(nil), // 47: io.defang.v1.TailResponse - (*ListServicesResponse)(nil), // 48: io.defang.v1.ListServicesResponse - (*ProjectUpdate)(nil), // 49: io.defang.v1.ProjectUpdate - (*ServiceID)(nil), // 50: io.defang.v1.ServiceID - (*Device)(nil), // 51: io.defang.v1.Device - (*Resource)(nil), // 52: io.defang.v1.Resource - (*Resources)(nil), // 53: io.defang.v1.Resources - (*Deploy)(nil), // 54: io.defang.v1.Deploy - (*Port)(nil), // 55: io.defang.v1.Port - (*Secret)(nil), // 56: io.defang.v1.Secret - (*Build)(nil), // 57: io.defang.v1.Build - (*HealthCheck)(nil), // 58: io.defang.v1.HealthCheck - (*Service)(nil), // 59: io.defang.v1.Service - (*StaticFiles)(nil), // 60: io.defang.v1.StaticFiles - (*Redis)(nil), // 61: io.defang.v1.Redis - (*Postgres)(nil), // 62: io.defang.v1.Postgres - (*DeployEvent)(nil), // 63: io.defang.v1.DeployEvent - (*Event)(nil), // 64: io.defang.v1.Event - (*PublishRequest)(nil), // 65: io.defang.v1.PublishRequest - (*SubscribeRequest)(nil), // 66: io.defang.v1.SubscribeRequest - (*SubscribeResponse)(nil), // 67: io.defang.v1.SubscribeResponse - (*GetServicesRequest)(nil), // 68: io.defang.v1.GetServicesRequest - (*DelegateSubdomainZoneRequest)(nil), // 69: io.defang.v1.DelegateSubdomainZoneRequest - (*DelegateSubdomainZoneResponse)(nil), // 70: io.defang.v1.DelegateSubdomainZoneResponse - (*WhoAmIResponse)(nil), // 71: io.defang.v1.WhoAmIResponse - nil, // 72: io.defang.v1.TrackRequest.PropertiesEntry - nil, // 73: io.defang.v1.Build.ArgsEntry - nil, // 74: io.defang.v1.Service.EnvironmentEntry - (*timestamppb.Timestamp)(nil), // 75: google.protobuf.Timestamp - (*emptypb.Empty)(nil), // 76: google.protobuf.Empty + (Provider)(0), // 0: io.defang.v1.Provider + (DeploymentMode)(0), // 1: io.defang.v1.DeploymentMode + (ServiceState)(0), // 2: io.defang.v1.ServiceState + (ConfigType)(0), // 3: io.defang.v1.ConfigType + (Platform)(0), // 4: io.defang.v1.Platform + (Protocol)(0), // 5: io.defang.v1.Protocol + (Mode)(0), // 6: io.defang.v1.Mode + (Network)(0), // 7: io.defang.v1.Network + (SubscriptionTier)(0), // 8: io.defang.v1.SubscriptionTier + (*GetSelectedProviderRequest)(nil), // 9: io.defang.v1.GetSelectedProviderRequest + (*GetSelectedProviderResponse)(nil), // 10: io.defang.v1.GetSelectedProviderResponse + (*SetSelectedProviderRequest)(nil), // 11: io.defang.v1.SetSelectedProviderRequest + (*VerifyDNSSetupRequest)(nil), // 12: io.defang.v1.VerifyDNSSetupRequest + (*DestroyRequest)(nil), // 13: io.defang.v1.DestroyRequest + (*DestroyResponse)(nil), // 14: io.defang.v1.DestroyResponse + (*DebugRequest)(nil), // 15: io.defang.v1.DebugRequest + (*DebugResponse)(nil), // 16: io.defang.v1.DebugResponse + (*Issue)(nil), // 17: io.defang.v1.Issue + (*CodeChange)(nil), // 18: io.defang.v1.CodeChange + (*TrackRequest)(nil), // 19: io.defang.v1.TrackRequest + (*DeployRequest)(nil), // 20: io.defang.v1.DeployRequest + (*DeployResponse)(nil), // 21: io.defang.v1.DeployResponse + (*DeleteRequest)(nil), // 22: io.defang.v1.DeleteRequest + (*DeleteResponse)(nil), // 23: io.defang.v1.DeleteResponse + (*GenerateFilesRequest)(nil), // 24: io.defang.v1.GenerateFilesRequest + (*File)(nil), // 25: io.defang.v1.File + (*GenerateFilesResponse)(nil), // 26: io.defang.v1.GenerateFilesResponse + (*StartGenerateResponse)(nil), // 27: io.defang.v1.StartGenerateResponse + (*GenerateStatusRequest)(nil), // 28: io.defang.v1.GenerateStatusRequest + (*UploadURLRequest)(nil), // 29: io.defang.v1.UploadURLRequest + (*UploadURLResponse)(nil), // 30: io.defang.v1.UploadURLResponse + (*ServiceInfo)(nil), // 31: io.defang.v1.ServiceInfo + (*Secrets)(nil), // 32: io.defang.v1.Secrets + (*SecretValue)(nil), // 33: io.defang.v1.SecretValue + (*Config)(nil), // 34: io.defang.v1.Config + (*ConfigKey)(nil), // 35: io.defang.v1.ConfigKey + (*PutConfigRequest)(nil), // 36: io.defang.v1.PutConfigRequest + (*GetConfigsRequest)(nil), // 37: io.defang.v1.GetConfigsRequest + (*GetConfigsResponse)(nil), // 38: io.defang.v1.GetConfigsResponse + (*DeleteConfigsRequest)(nil), // 39: io.defang.v1.DeleteConfigsRequest + (*ListConfigsRequest)(nil), // 40: io.defang.v1.ListConfigsRequest + (*ListConfigsResponse)(nil), // 41: io.defang.v1.ListConfigsResponse + (*TokenRequest)(nil), // 42: io.defang.v1.TokenRequest + (*TokenResponse)(nil), // 43: io.defang.v1.TokenResponse + (*Status)(nil), // 44: io.defang.v1.Status + (*Version)(nil), // 45: io.defang.v1.Version + (*TailRequest)(nil), // 46: io.defang.v1.TailRequest + (*LogEntry)(nil), // 47: io.defang.v1.LogEntry + (*TailResponse)(nil), // 48: io.defang.v1.TailResponse + (*ListServicesResponse)(nil), // 49: io.defang.v1.ListServicesResponse + (*ProjectUpdate)(nil), // 50: io.defang.v1.ProjectUpdate + (*ServiceID)(nil), // 51: io.defang.v1.ServiceID + (*Device)(nil), // 52: io.defang.v1.Device + (*Resource)(nil), // 53: io.defang.v1.Resource + (*Resources)(nil), // 54: io.defang.v1.Resources + (*Deploy)(nil), // 55: io.defang.v1.Deploy + (*Port)(nil), // 56: io.defang.v1.Port + (*Secret)(nil), // 57: io.defang.v1.Secret + (*Build)(nil), // 58: io.defang.v1.Build + (*HealthCheck)(nil), // 59: io.defang.v1.HealthCheck + (*Service)(nil), // 60: io.defang.v1.Service + (*StaticFiles)(nil), // 61: io.defang.v1.StaticFiles + (*Redis)(nil), // 62: io.defang.v1.Redis + (*Postgres)(nil), // 63: io.defang.v1.Postgres + (*DeployEvent)(nil), // 64: io.defang.v1.DeployEvent + (*Event)(nil), // 65: io.defang.v1.Event + (*PublishRequest)(nil), // 66: io.defang.v1.PublishRequest + (*SubscribeRequest)(nil), // 67: io.defang.v1.SubscribeRequest + (*SubscribeResponse)(nil), // 68: io.defang.v1.SubscribeResponse + (*GetServicesRequest)(nil), // 69: io.defang.v1.GetServicesRequest + (*DelegateSubdomainZoneRequest)(nil), // 70: io.defang.v1.DelegateSubdomainZoneRequest + (*DelegateSubdomainZoneResponse)(nil), // 71: io.defang.v1.DelegateSubdomainZoneResponse + (*WhoAmIResponse)(nil), // 72: io.defang.v1.WhoAmIResponse + nil, // 73: io.defang.v1.TrackRequest.PropertiesEntry + nil, // 74: io.defang.v1.Build.ArgsEntry + nil, // 75: io.defang.v1.Service.EnvironmentEntry + (*timestamppb.Timestamp)(nil), // 76: google.protobuf.Timestamp + (*emptypb.Empty)(nil), // 77: google.protobuf.Empty } var file_io_defang_v1_fabric_proto_depIdxs = []int32{ - 24, // 0: io.defang.v1.DebugRequest.files:type_name -> io.defang.v1.File - 16, // 1: io.defang.v1.DebugResponse.issues:type_name -> io.defang.v1.Issue - 17, // 2: io.defang.v1.Issue.code_changes:type_name -> io.defang.v1.CodeChange - 72, // 3: io.defang.v1.TrackRequest.properties:type_name -> io.defang.v1.TrackRequest.PropertiesEntry - 59, // 4: io.defang.v1.DeployRequest.services:type_name -> io.defang.v1.Service - 0, // 5: io.defang.v1.DeployRequest.mode:type_name -> io.defang.v1.DeploymentMode - 30, // 6: io.defang.v1.DeployResponse.services:type_name -> io.defang.v1.ServiceInfo - 24, // 7: io.defang.v1.GenerateFilesResponse.files:type_name -> io.defang.v1.File - 59, // 8: io.defang.v1.ServiceInfo.service:type_name -> io.defang.v1.Service - 75, // 9: io.defang.v1.ServiceInfo.created_at:type_name -> google.protobuf.Timestamp - 75, // 10: io.defang.v1.ServiceInfo.updated_at:type_name -> google.protobuf.Timestamp - 1, // 11: io.defang.v1.ServiceInfo.state:type_name -> io.defang.v1.ServiceState - 2, // 12: io.defang.v1.Config.type:type_name -> io.defang.v1.ConfigType - 2, // 13: io.defang.v1.PutConfigRequest.type:type_name -> io.defang.v1.ConfigType - 34, // 14: io.defang.v1.GetConfigsRequest.configs:type_name -> io.defang.v1.ConfigKey - 33, // 15: io.defang.v1.GetConfigsResponse.configs:type_name -> io.defang.v1.Config - 34, // 16: io.defang.v1.DeleteConfigsRequest.configs:type_name -> io.defang.v1.ConfigKey - 34, // 17: io.defang.v1.ListConfigsResponse.configs:type_name -> io.defang.v1.ConfigKey - 75, // 18: io.defang.v1.TailRequest.since:type_name -> google.protobuf.Timestamp - 75, // 19: io.defang.v1.LogEntry.timestamp:type_name -> google.protobuf.Timestamp - 46, // 20: io.defang.v1.TailResponse.entries:type_name -> io.defang.v1.LogEntry - 30, // 21: io.defang.v1.ListServicesResponse.services:type_name -> io.defang.v1.ServiceInfo - 30, // 22: io.defang.v1.ProjectUpdate.services:type_name -> io.defang.v1.ServiceInfo - 51, // 23: io.defang.v1.Resource.devices:type_name -> io.defang.v1.Device - 52, // 24: io.defang.v1.Resources.reservations:type_name -> io.defang.v1.Resource - 53, // 25: io.defang.v1.Deploy.resources:type_name -> io.defang.v1.Resources - 4, // 26: io.defang.v1.Port.protocol:type_name -> io.defang.v1.Protocol - 5, // 27: io.defang.v1.Port.mode:type_name -> io.defang.v1.Mode - 73, // 28: io.defang.v1.Build.args:type_name -> io.defang.v1.Build.ArgsEntry - 3, // 29: io.defang.v1.Service.platform:type_name -> io.defang.v1.Platform - 54, // 30: io.defang.v1.Service.deploy:type_name -> io.defang.v1.Deploy - 55, // 31: io.defang.v1.Service.ports:type_name -> io.defang.v1.Port - 74, // 32: io.defang.v1.Service.environment:type_name -> io.defang.v1.Service.EnvironmentEntry - 57, // 33: io.defang.v1.Service.build:type_name -> io.defang.v1.Build - 56, // 34: io.defang.v1.Service.secrets:type_name -> io.defang.v1.Secret - 58, // 35: io.defang.v1.Service.healthcheck:type_name -> io.defang.v1.HealthCheck - 60, // 36: io.defang.v1.Service.static_files:type_name -> io.defang.v1.StaticFiles - 6, // 37: io.defang.v1.Service.networks:type_name -> io.defang.v1.Network - 61, // 38: io.defang.v1.Service.redis:type_name -> io.defang.v1.Redis - 62, // 39: io.defang.v1.Service.postgres:type_name -> io.defang.v1.Postgres - 0, // 40: io.defang.v1.DeployEvent.mode:type_name -> io.defang.v1.DeploymentMode - 75, // 41: io.defang.v1.DeployEvent.time:type_name -> google.protobuf.Timestamp - 75, // 42: io.defang.v1.Event.time:type_name -> google.protobuf.Timestamp - 64, // 43: io.defang.v1.PublishRequest.event:type_name -> io.defang.v1.Event - 30, // 44: io.defang.v1.SubscribeResponse.service:type_name -> io.defang.v1.ServiceInfo - 1, // 45: io.defang.v1.SubscribeResponse.state:type_name -> io.defang.v1.ServiceState - 7, // 46: io.defang.v1.WhoAmIResponse.tier:type_name -> io.defang.v1.SubscriptionTier - 76, // 47: io.defang.v1.FabricController.GetStatus:input_type -> google.protobuf.Empty - 76, // 48: io.defang.v1.FabricController.GetVersion:input_type -> google.protobuf.Empty - 41, // 49: io.defang.v1.FabricController.Token:input_type -> io.defang.v1.TokenRequest - 76, // 50: io.defang.v1.FabricController.RevokeToken:input_type -> google.protobuf.Empty - 45, // 51: io.defang.v1.FabricController.Tail:input_type -> io.defang.v1.TailRequest - 59, // 52: io.defang.v1.FabricController.Update:input_type -> io.defang.v1.Service - 19, // 53: io.defang.v1.FabricController.Deploy:input_type -> io.defang.v1.DeployRequest - 50, // 54: io.defang.v1.FabricController.Get:input_type -> io.defang.v1.ServiceID - 21, // 55: io.defang.v1.FabricController.Delete:input_type -> io.defang.v1.DeleteRequest - 12, // 56: io.defang.v1.FabricController.Destroy:input_type -> io.defang.v1.DestroyRequest - 65, // 57: io.defang.v1.FabricController.Publish:input_type -> io.defang.v1.PublishRequest - 66, // 58: io.defang.v1.FabricController.Subscribe:input_type -> io.defang.v1.SubscribeRequest - 68, // 59: io.defang.v1.FabricController.GetServices:input_type -> io.defang.v1.GetServicesRequest - 23, // 60: io.defang.v1.FabricController.GenerateFiles:input_type -> io.defang.v1.GenerateFilesRequest - 23, // 61: io.defang.v1.FabricController.StartGenerate:input_type -> io.defang.v1.GenerateFilesRequest - 27, // 62: io.defang.v1.FabricController.GenerateStatus:input_type -> io.defang.v1.GenerateStatusRequest - 14, // 63: io.defang.v1.FabricController.Debug:input_type -> io.defang.v1.DebugRequest - 76, // 64: io.defang.v1.FabricController.SignEULA:input_type -> google.protobuf.Empty - 76, // 65: io.defang.v1.FabricController.CheckToS:input_type -> google.protobuf.Empty - 35, // 66: io.defang.v1.FabricController.PutSecret:input_type -> io.defang.v1.PutConfigRequest - 31, // 67: io.defang.v1.FabricController.DeleteSecrets:input_type -> io.defang.v1.Secrets - 39, // 68: io.defang.v1.FabricController.ListSecrets:input_type -> io.defang.v1.ListConfigsRequest - 36, // 69: io.defang.v1.FabricController.GetConfigs:input_type -> io.defang.v1.GetConfigsRequest - 35, // 70: io.defang.v1.FabricController.PutConfig:input_type -> io.defang.v1.PutConfigRequest - 38, // 71: io.defang.v1.FabricController.DeleteConfigs:input_type -> io.defang.v1.DeleteConfigsRequest - 39, // 72: io.defang.v1.FabricController.ListConfigs:input_type -> io.defang.v1.ListConfigsRequest - 28, // 73: io.defang.v1.FabricController.CreateUploadURL:input_type -> io.defang.v1.UploadURLRequest - 69, // 74: io.defang.v1.FabricController.DelegateSubdomainZone:input_type -> io.defang.v1.DelegateSubdomainZoneRequest - 76, // 75: io.defang.v1.FabricController.DeleteSubdomainZone:input_type -> google.protobuf.Empty - 76, // 76: io.defang.v1.FabricController.GetDelegateSubdomainZone:input_type -> google.protobuf.Empty - 76, // 77: io.defang.v1.FabricController.WhoAmI:input_type -> google.protobuf.Empty - 18, // 78: io.defang.v1.FabricController.Track:input_type -> io.defang.v1.TrackRequest - 76, // 79: io.defang.v1.FabricController.DeleteMe:input_type -> google.protobuf.Empty - 11, // 80: io.defang.v1.FabricController.VerifyDNSSetup:input_type -> io.defang.v1.VerifyDNSSetupRequest - 8, // 81: io.defang.v1.FabricController.GetSelectedProvider:input_type -> io.defang.v1.GetSelectedProviderRequest - 10, // 82: io.defang.v1.FabricController.SetSelectedProvider:input_type -> io.defang.v1.SetSelectedProviderRequest - 43, // 83: io.defang.v1.FabricController.GetStatus:output_type -> io.defang.v1.Status - 44, // 84: io.defang.v1.FabricController.GetVersion:output_type -> io.defang.v1.Version - 42, // 85: io.defang.v1.FabricController.Token:output_type -> io.defang.v1.TokenResponse - 76, // 86: io.defang.v1.FabricController.RevokeToken:output_type -> google.protobuf.Empty - 47, // 87: io.defang.v1.FabricController.Tail:output_type -> io.defang.v1.TailResponse - 30, // 88: io.defang.v1.FabricController.Update:output_type -> io.defang.v1.ServiceInfo - 20, // 89: io.defang.v1.FabricController.Deploy:output_type -> io.defang.v1.DeployResponse - 30, // 90: io.defang.v1.FabricController.Get:output_type -> io.defang.v1.ServiceInfo - 22, // 91: io.defang.v1.FabricController.Delete:output_type -> io.defang.v1.DeleteResponse - 13, // 92: io.defang.v1.FabricController.Destroy:output_type -> io.defang.v1.DestroyResponse - 76, // 93: io.defang.v1.FabricController.Publish:output_type -> google.protobuf.Empty - 67, // 94: io.defang.v1.FabricController.Subscribe:output_type -> io.defang.v1.SubscribeResponse - 48, // 95: io.defang.v1.FabricController.GetServices:output_type -> io.defang.v1.ListServicesResponse - 25, // 96: io.defang.v1.FabricController.GenerateFiles:output_type -> io.defang.v1.GenerateFilesResponse - 26, // 97: io.defang.v1.FabricController.StartGenerate:output_type -> io.defang.v1.StartGenerateResponse - 25, // 98: io.defang.v1.FabricController.GenerateStatus:output_type -> io.defang.v1.GenerateFilesResponse - 15, // 99: io.defang.v1.FabricController.Debug:output_type -> io.defang.v1.DebugResponse - 76, // 100: io.defang.v1.FabricController.SignEULA:output_type -> google.protobuf.Empty - 76, // 101: io.defang.v1.FabricController.CheckToS:output_type -> google.protobuf.Empty - 76, // 102: io.defang.v1.FabricController.PutSecret:output_type -> google.protobuf.Empty - 76, // 103: io.defang.v1.FabricController.DeleteSecrets:output_type -> google.protobuf.Empty - 31, // 104: io.defang.v1.FabricController.ListSecrets:output_type -> io.defang.v1.Secrets - 37, // 105: io.defang.v1.FabricController.GetConfigs:output_type -> io.defang.v1.GetConfigsResponse - 76, // 106: io.defang.v1.FabricController.PutConfig:output_type -> google.protobuf.Empty - 76, // 107: io.defang.v1.FabricController.DeleteConfigs:output_type -> google.protobuf.Empty - 40, // 108: io.defang.v1.FabricController.ListConfigs:output_type -> io.defang.v1.ListConfigsResponse - 29, // 109: io.defang.v1.FabricController.CreateUploadURL:output_type -> io.defang.v1.UploadURLResponse - 70, // 110: io.defang.v1.FabricController.DelegateSubdomainZone:output_type -> io.defang.v1.DelegateSubdomainZoneResponse - 76, // 111: io.defang.v1.FabricController.DeleteSubdomainZone:output_type -> google.protobuf.Empty - 70, // 112: io.defang.v1.FabricController.GetDelegateSubdomainZone:output_type -> io.defang.v1.DelegateSubdomainZoneResponse - 71, // 113: io.defang.v1.FabricController.WhoAmI:output_type -> io.defang.v1.WhoAmIResponse - 76, // 114: io.defang.v1.FabricController.Track:output_type -> google.protobuf.Empty - 76, // 115: io.defang.v1.FabricController.DeleteMe:output_type -> google.protobuf.Empty - 76, // 116: io.defang.v1.FabricController.VerifyDNSSetup:output_type -> google.protobuf.Empty - 9, // 117: io.defang.v1.FabricController.GetSelectedProvider:output_type -> io.defang.v1.GetSelectedProviderResponse - 76, // 118: io.defang.v1.FabricController.SetSelectedProvider:output_type -> google.protobuf.Empty - 83, // [83:119] is the sub-list for method output_type - 47, // [47:83] is the sub-list for method input_type - 47, // [47:47] is the sub-list for extension type_name - 47, // [47:47] is the sub-list for extension extendee - 0, // [0:47] is the sub-list for field type_name + 0, // 0: io.defang.v1.GetSelectedProviderResponse.provider:type_name -> io.defang.v1.Provider + 0, // 1: io.defang.v1.SetSelectedProviderRequest.provider:type_name -> io.defang.v1.Provider + 25, // 2: io.defang.v1.DebugRequest.files:type_name -> io.defang.v1.File + 17, // 3: io.defang.v1.DebugResponse.issues:type_name -> io.defang.v1.Issue + 18, // 4: io.defang.v1.Issue.code_changes:type_name -> io.defang.v1.CodeChange + 73, // 5: io.defang.v1.TrackRequest.properties:type_name -> io.defang.v1.TrackRequest.PropertiesEntry + 60, // 6: io.defang.v1.DeployRequest.services:type_name -> io.defang.v1.Service + 1, // 7: io.defang.v1.DeployRequest.mode:type_name -> io.defang.v1.DeploymentMode + 31, // 8: io.defang.v1.DeployResponse.services:type_name -> io.defang.v1.ServiceInfo + 25, // 9: io.defang.v1.GenerateFilesResponse.files:type_name -> io.defang.v1.File + 60, // 10: io.defang.v1.ServiceInfo.service:type_name -> io.defang.v1.Service + 76, // 11: io.defang.v1.ServiceInfo.created_at:type_name -> google.protobuf.Timestamp + 76, // 12: io.defang.v1.ServiceInfo.updated_at:type_name -> google.protobuf.Timestamp + 2, // 13: io.defang.v1.ServiceInfo.state:type_name -> io.defang.v1.ServiceState + 3, // 14: io.defang.v1.Config.type:type_name -> io.defang.v1.ConfigType + 3, // 15: io.defang.v1.PutConfigRequest.type:type_name -> io.defang.v1.ConfigType + 35, // 16: io.defang.v1.GetConfigsRequest.configs:type_name -> io.defang.v1.ConfigKey + 34, // 17: io.defang.v1.GetConfigsResponse.configs:type_name -> io.defang.v1.Config + 35, // 18: io.defang.v1.DeleteConfigsRequest.configs:type_name -> io.defang.v1.ConfigKey + 35, // 19: io.defang.v1.ListConfigsResponse.configs:type_name -> io.defang.v1.ConfigKey + 76, // 20: io.defang.v1.TailRequest.since:type_name -> google.protobuf.Timestamp + 76, // 21: io.defang.v1.LogEntry.timestamp:type_name -> google.protobuf.Timestamp + 47, // 22: io.defang.v1.TailResponse.entries:type_name -> io.defang.v1.LogEntry + 31, // 23: io.defang.v1.ListServicesResponse.services:type_name -> io.defang.v1.ServiceInfo + 31, // 24: io.defang.v1.ProjectUpdate.services:type_name -> io.defang.v1.ServiceInfo + 52, // 25: io.defang.v1.Resource.devices:type_name -> io.defang.v1.Device + 53, // 26: io.defang.v1.Resources.reservations:type_name -> io.defang.v1.Resource + 54, // 27: io.defang.v1.Deploy.resources:type_name -> io.defang.v1.Resources + 5, // 28: io.defang.v1.Port.protocol:type_name -> io.defang.v1.Protocol + 6, // 29: io.defang.v1.Port.mode:type_name -> io.defang.v1.Mode + 74, // 30: io.defang.v1.Build.args:type_name -> io.defang.v1.Build.ArgsEntry + 4, // 31: io.defang.v1.Service.platform:type_name -> io.defang.v1.Platform + 55, // 32: io.defang.v1.Service.deploy:type_name -> io.defang.v1.Deploy + 56, // 33: io.defang.v1.Service.ports:type_name -> io.defang.v1.Port + 75, // 34: io.defang.v1.Service.environment:type_name -> io.defang.v1.Service.EnvironmentEntry + 58, // 35: io.defang.v1.Service.build:type_name -> io.defang.v1.Build + 57, // 36: io.defang.v1.Service.secrets:type_name -> io.defang.v1.Secret + 59, // 37: io.defang.v1.Service.healthcheck:type_name -> io.defang.v1.HealthCheck + 61, // 38: io.defang.v1.Service.static_files:type_name -> io.defang.v1.StaticFiles + 7, // 39: io.defang.v1.Service.networks:type_name -> io.defang.v1.Network + 62, // 40: io.defang.v1.Service.redis:type_name -> io.defang.v1.Redis + 63, // 41: io.defang.v1.Service.postgres:type_name -> io.defang.v1.Postgres + 1, // 42: io.defang.v1.DeployEvent.mode:type_name -> io.defang.v1.DeploymentMode + 76, // 43: io.defang.v1.DeployEvent.time:type_name -> google.protobuf.Timestamp + 76, // 44: io.defang.v1.Event.time:type_name -> google.protobuf.Timestamp + 65, // 45: io.defang.v1.PublishRequest.event:type_name -> io.defang.v1.Event + 31, // 46: io.defang.v1.SubscribeResponse.service:type_name -> io.defang.v1.ServiceInfo + 2, // 47: io.defang.v1.SubscribeResponse.state:type_name -> io.defang.v1.ServiceState + 8, // 48: io.defang.v1.WhoAmIResponse.tier:type_name -> io.defang.v1.SubscriptionTier + 77, // 49: io.defang.v1.FabricController.GetStatus:input_type -> google.protobuf.Empty + 77, // 50: io.defang.v1.FabricController.GetVersion:input_type -> google.protobuf.Empty + 42, // 51: io.defang.v1.FabricController.Token:input_type -> io.defang.v1.TokenRequest + 77, // 52: io.defang.v1.FabricController.RevokeToken:input_type -> google.protobuf.Empty + 46, // 53: io.defang.v1.FabricController.Tail:input_type -> io.defang.v1.TailRequest + 60, // 54: io.defang.v1.FabricController.Update:input_type -> io.defang.v1.Service + 20, // 55: io.defang.v1.FabricController.Deploy:input_type -> io.defang.v1.DeployRequest + 51, // 56: io.defang.v1.FabricController.Get:input_type -> io.defang.v1.ServiceID + 22, // 57: io.defang.v1.FabricController.Delete:input_type -> io.defang.v1.DeleteRequest + 13, // 58: io.defang.v1.FabricController.Destroy:input_type -> io.defang.v1.DestroyRequest + 66, // 59: io.defang.v1.FabricController.Publish:input_type -> io.defang.v1.PublishRequest + 67, // 60: io.defang.v1.FabricController.Subscribe:input_type -> io.defang.v1.SubscribeRequest + 69, // 61: io.defang.v1.FabricController.GetServices:input_type -> io.defang.v1.GetServicesRequest + 24, // 62: io.defang.v1.FabricController.GenerateFiles:input_type -> io.defang.v1.GenerateFilesRequest + 24, // 63: io.defang.v1.FabricController.StartGenerate:input_type -> io.defang.v1.GenerateFilesRequest + 28, // 64: io.defang.v1.FabricController.GenerateStatus:input_type -> io.defang.v1.GenerateStatusRequest + 15, // 65: io.defang.v1.FabricController.Debug:input_type -> io.defang.v1.DebugRequest + 77, // 66: io.defang.v1.FabricController.SignEULA:input_type -> google.protobuf.Empty + 77, // 67: io.defang.v1.FabricController.CheckToS:input_type -> google.protobuf.Empty + 36, // 68: io.defang.v1.FabricController.PutSecret:input_type -> io.defang.v1.PutConfigRequest + 32, // 69: io.defang.v1.FabricController.DeleteSecrets:input_type -> io.defang.v1.Secrets + 40, // 70: io.defang.v1.FabricController.ListSecrets:input_type -> io.defang.v1.ListConfigsRequest + 37, // 71: io.defang.v1.FabricController.GetConfigs:input_type -> io.defang.v1.GetConfigsRequest + 36, // 72: io.defang.v1.FabricController.PutConfig:input_type -> io.defang.v1.PutConfigRequest + 39, // 73: io.defang.v1.FabricController.DeleteConfigs:input_type -> io.defang.v1.DeleteConfigsRequest + 40, // 74: io.defang.v1.FabricController.ListConfigs:input_type -> io.defang.v1.ListConfigsRequest + 29, // 75: io.defang.v1.FabricController.CreateUploadURL:input_type -> io.defang.v1.UploadURLRequest + 70, // 76: io.defang.v1.FabricController.DelegateSubdomainZone:input_type -> io.defang.v1.DelegateSubdomainZoneRequest + 77, // 77: io.defang.v1.FabricController.DeleteSubdomainZone:input_type -> google.protobuf.Empty + 77, // 78: io.defang.v1.FabricController.GetDelegateSubdomainZone:input_type -> google.protobuf.Empty + 77, // 79: io.defang.v1.FabricController.WhoAmI:input_type -> google.protobuf.Empty + 19, // 80: io.defang.v1.FabricController.Track:input_type -> io.defang.v1.TrackRequest + 77, // 81: io.defang.v1.FabricController.DeleteMe:input_type -> google.protobuf.Empty + 12, // 82: io.defang.v1.FabricController.VerifyDNSSetup:input_type -> io.defang.v1.VerifyDNSSetupRequest + 9, // 83: io.defang.v1.FabricController.GetSelectedProvider:input_type -> io.defang.v1.GetSelectedProviderRequest + 11, // 84: io.defang.v1.FabricController.SetSelectedProvider:input_type -> io.defang.v1.SetSelectedProviderRequest + 44, // 85: io.defang.v1.FabricController.GetStatus:output_type -> io.defang.v1.Status + 45, // 86: io.defang.v1.FabricController.GetVersion:output_type -> io.defang.v1.Version + 43, // 87: io.defang.v1.FabricController.Token:output_type -> io.defang.v1.TokenResponse + 77, // 88: io.defang.v1.FabricController.RevokeToken:output_type -> google.protobuf.Empty + 48, // 89: io.defang.v1.FabricController.Tail:output_type -> io.defang.v1.TailResponse + 31, // 90: io.defang.v1.FabricController.Update:output_type -> io.defang.v1.ServiceInfo + 21, // 91: io.defang.v1.FabricController.Deploy:output_type -> io.defang.v1.DeployResponse + 31, // 92: io.defang.v1.FabricController.Get:output_type -> io.defang.v1.ServiceInfo + 23, // 93: io.defang.v1.FabricController.Delete:output_type -> io.defang.v1.DeleteResponse + 14, // 94: io.defang.v1.FabricController.Destroy:output_type -> io.defang.v1.DestroyResponse + 77, // 95: io.defang.v1.FabricController.Publish:output_type -> google.protobuf.Empty + 68, // 96: io.defang.v1.FabricController.Subscribe:output_type -> io.defang.v1.SubscribeResponse + 49, // 97: io.defang.v1.FabricController.GetServices:output_type -> io.defang.v1.ListServicesResponse + 26, // 98: io.defang.v1.FabricController.GenerateFiles:output_type -> io.defang.v1.GenerateFilesResponse + 27, // 99: io.defang.v1.FabricController.StartGenerate:output_type -> io.defang.v1.StartGenerateResponse + 26, // 100: io.defang.v1.FabricController.GenerateStatus:output_type -> io.defang.v1.GenerateFilesResponse + 16, // 101: io.defang.v1.FabricController.Debug:output_type -> io.defang.v1.DebugResponse + 77, // 102: io.defang.v1.FabricController.SignEULA:output_type -> google.protobuf.Empty + 77, // 103: io.defang.v1.FabricController.CheckToS:output_type -> google.protobuf.Empty + 77, // 104: io.defang.v1.FabricController.PutSecret:output_type -> google.protobuf.Empty + 77, // 105: io.defang.v1.FabricController.DeleteSecrets:output_type -> google.protobuf.Empty + 32, // 106: io.defang.v1.FabricController.ListSecrets:output_type -> io.defang.v1.Secrets + 38, // 107: io.defang.v1.FabricController.GetConfigs:output_type -> io.defang.v1.GetConfigsResponse + 77, // 108: io.defang.v1.FabricController.PutConfig:output_type -> google.protobuf.Empty + 77, // 109: io.defang.v1.FabricController.DeleteConfigs:output_type -> google.protobuf.Empty + 41, // 110: io.defang.v1.FabricController.ListConfigs:output_type -> io.defang.v1.ListConfigsResponse + 30, // 111: io.defang.v1.FabricController.CreateUploadURL:output_type -> io.defang.v1.UploadURLResponse + 71, // 112: io.defang.v1.FabricController.DelegateSubdomainZone:output_type -> io.defang.v1.DelegateSubdomainZoneResponse + 77, // 113: io.defang.v1.FabricController.DeleteSubdomainZone:output_type -> google.protobuf.Empty + 71, // 114: io.defang.v1.FabricController.GetDelegateSubdomainZone:output_type -> io.defang.v1.DelegateSubdomainZoneResponse + 72, // 115: io.defang.v1.FabricController.WhoAmI:output_type -> io.defang.v1.WhoAmIResponse + 77, // 116: io.defang.v1.FabricController.Track:output_type -> google.protobuf.Empty + 77, // 117: io.defang.v1.FabricController.DeleteMe:output_type -> google.protobuf.Empty + 77, // 118: io.defang.v1.FabricController.VerifyDNSSetup:output_type -> google.protobuf.Empty + 10, // 119: io.defang.v1.FabricController.GetSelectedProvider:output_type -> io.defang.v1.GetSelectedProviderResponse + 77, // 120: io.defang.v1.FabricController.SetSelectedProvider:output_type -> google.protobuf.Empty + 85, // [85:121] is the sub-list for method output_type + 49, // [49:85] is the sub-list for method input_type + 49, // [49:49] is the sub-list for extension type_name + 49, // [49:49] is the sub-list for extension extendee + 0, // [0:49] is the sub-list for field type_name } func init() { file_io_defang_v1_fabric_proto_init() } @@ -5396,7 +5462,7 @@ func file_io_defang_v1_fabric_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_io_defang_v1_fabric_proto_rawDesc, - NumEnums: 8, + NumEnums: 9, NumMessages: 67, NumExtensions: 0, NumServices: 1, diff --git a/src/protos/io/defang/v1/fabric.proto b/src/protos/io/defang/v1/fabric.proto index 5166e1fc2..dde282a8b 100644 --- a/src/protos/io/defang/v1/fabric.proto +++ b/src/protos/io/defang/v1/fabric.proto @@ -117,17 +117,25 @@ service FabricController { } +enum Provider { + PROVIDER_UNSPECIFIED = 0; + DEFANG = 1; + AWS = 2; + DIGITALOCEAN = 3; + GCP = 4; +} + message GetSelectedProviderRequest { string project = 1; } message GetSelectedProviderResponse { - string provider = 1; + Provider provider = 1; } message SetSelectedProviderRequest { string project = 1; - string provider = 2; + Provider provider = 2; } message VerifyDNSSetupRequest {