diff --git a/dgraph/cmd/alpha/run.go b/dgraph/cmd/alpha/run.go index bcd5a11a568..40dbd1edd3f 100644 --- a/dgraph/cmd/alpha/run.go +++ b/dgraph/cmd/alpha/run.go @@ -636,6 +636,10 @@ func run() { removeOnUpdate := cache.GetBool("remove-on-update") cachePercent, err := x.GetCachePercentages(cachePercentage, 3) x.Check(err) + x.CachePercent = cachePercent + x.RemoveOnUpdate = removeOnUpdate + x.TotalCache = totalCache + postingListCacheSize := (cachePercent[0] * (totalCache << 20)) / 100 pstoreBlockCacheSize := (cachePercent[1] * (totalCache << 20)) / 100 pstoreIndexCacheSize := (cachePercent[2] * (totalCache << 20)) / 100 diff --git a/dgraph/cmd/root.go b/dgraph/cmd/root.go index 4554ed6d136..83f7907c898 100644 --- a/dgraph/cmd/root.go +++ b/dgraph/cmd/root.go @@ -34,6 +34,7 @@ import ( "github.com/hypermodeinc/dgraph/v24/dgraph/cmd/migrate" "github.com/hypermodeinc/dgraph/v24/dgraph/cmd/version" "github.com/hypermodeinc/dgraph/v24/dgraph/cmd/zero" + dgraphimport "github.com/hypermodeinc/dgraph/v24/dgraph_import" "github.com/hypermodeinc/dgraph/v24/upgrade" "github.com/hypermodeinc/dgraph/v24/x" ) @@ -74,7 +75,7 @@ var rootConf = viper.New() var subcommands = []*x.SubCommand{ &bulk.Bulk, &cert.Cert, &conv.Conv, &live.Live, &alpha.Alpha, &zero.Zero, &version.Version, &debug.Debug, &migrate.Migrate, &debuginfo.DebugInfo, &upgrade.Upgrade, &decrypt.Decrypt, &increment.Increment, - &checkupgrade.CheckUpgrade, + &checkupgrade.CheckUpgrade, &dgraphimport.Import, } func initCmds() { diff --git a/dgraph/cmd/zero/run.go b/dgraph/cmd/zero/run.go index 9047352bc87..1cbd372d813 100644 --- a/dgraph/cmd/zero/run.go +++ b/dgraph/cmd/zero/run.go @@ -284,6 +284,10 @@ func run() { x.WorkerConfig.MyAddr = fmt.Sprintf("localhost:%d", x.PortZeroGrpc+opts.portOffset) } + if x.WorkerConfig.MyGrpcAddr == "" { + x.WorkerConfig.MyGrpcAddr = fmt.Sprintf("localhost:%d", x.Config.PortOffset+x.PortGrpc) + } + nodeId := opts.raft.GetUint64("idx") if nodeId == 0 { log.Fatalf("ERROR: raft.idx flag cannot be 0. Please set idx to a unique positive integer.") diff --git a/dgraph/cmd/zero/tablet.go b/dgraph/cmd/zero/tablet.go index 85adb9863db..4cdfecce91a 100644 --- a/dgraph/cmd/zero/tablet.go +++ b/dgraph/cmd/zero/tablet.go @@ -108,6 +108,21 @@ func (s *Server) MoveTablet(ctx context.Context, req *pb.MoveTabletRequest) (*pb req.DstGroup)}, nil } +func (s *Server) ApplyDrainmode(ctx context.Context, req *pb.Drainmode) (*pb.Status, error) { + knownGroups := s.KnownGroups() + + for _, grp := range knownGroups { + pl := s.Leader(grp) + wc := pb.NewWorkerClient(pl.Get()) + in := &pb.Drainmode{State: req.State} + + if status, err := wc.ApplyDrainmode(ctx, in); err != nil { + return status, errors.Wrapf(err, "while applying drainmode") + } + } + return nil, nil +} + // movePredicate is the main entry point for move predicate logic. This Zero must remain the leader // for the entire duration of predicate move. If this Zero stops being the leader, the final // proposal of reassigning the tablet to the destination would fail automatically. diff --git a/dgraph_import/dgraph_import.go b/dgraph_import/dgraph_import.go new file mode 100644 index 00000000000..5dda5208764 --- /dev/null +++ b/dgraph_import/dgraph_import.go @@ -0,0 +1,49 @@ +package dgraphimport + +import ( + "context" + "fmt" + "os" + + "github.com/hypermodeinc/dgraph/v24/edgraph" + "github.com/hypermodeinc/dgraph/v24/x" + "github.com/spf13/cobra" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" +) + +var ( + Import x.SubCommand +) + +func init() { + Import.Cmd = &cobra.Command{ + Use: "import", + Short: "Run the import tool", + Run: func(cmd *cobra.Command, args []string) { + run() + }, + Annotations: map[string]string{"group": "tool"}, + } + Import.Cmd.SetHelpTemplate(x.NonRootTemplate) +} + +func run() { + if err := importP(); err != nil { + fmt.Fprintln(os.Stderr, err) + } +} + +func importP() error { + client, err := edgraph.NewImportClient("localhost:9080", grpc.WithTransportCredentials(insecure.NewCredentials())) + if err != nil { + return err + } + + alphas, err := client.InitiateSnapShotStream(context.Background()) + if err := client.StreamSnapshot(context.Background(), "/home/shiva/workspace/dgraph-work/benchmarks/data/out", alphas.LeaderAlphas); err != nil { + fmt.Println("error is---------", err) + } + + return nil +} diff --git a/dgraphapi/cluster.go b/dgraphapi/cluster.go index edf182a3081..06d6e9d3206 100644 --- a/dgraphapi/cluster.go +++ b/dgraphapi/cluster.go @@ -18,10 +18,12 @@ import ( "time" "github.com/pkg/errors" + "google.golang.org/protobuf/encoding/protojson" "github.com/dgraph-io/dgo/v240" "github.com/dgraph-io/dgo/v240/protos/api" "github.com/hypermodeinc/dgraph/v24/graphql/schema" + "github.com/hypermodeinc/dgraph/v24/protos/pb" "github.com/hypermodeinc/dgraph/v24/x" ) @@ -57,12 +59,13 @@ type HttpToken struct { // HTTPClient allows doing operations on Dgraph over http type HTTPClient struct { *HttpToken - adminURL string - graphqlURL string - licenseURL string - stateURL string - dqlURL string - dqlMutateUrl string + adminURL string + graphqlURL string + licenseURL string + stateURL string + dqlURL string + dqlMutateUrl string + alphaStateURL string } // GraphQLParams are used for making graphql requests to dgraph @@ -656,7 +659,7 @@ func (hc *HTTPClient) ApplyLicenseGraphQL(license []byte) ([]byte, error) { return hc.RunGraphqlQuery(params, true) } -func (hc *HTTPClient) GetZeroState() (*LicenseResponse, error) { +func (hc *HTTPClient) GetLicenseInfo() (*LicenseResponse, error) { response, err := http.Get(hc.stateURL) if err != nil { return nil, errors.Wrap(err, "error getting zero state http response") @@ -679,6 +682,27 @@ func (hc *HTTPClient) GetZeroState() (*LicenseResponse, error) { return &stateResponse, nil } +func (hc *HTTPClient) GetAlphaState() (*pb.MembershipState, error) { + req, err := http.NewRequest(http.MethodGet, hc.alphaStateURL, nil) + if err != nil { + return nil, err + } + if hc.HttpToken != nil { + req.Header.Add("X-Dgraph-AccessToken", hc.AccessJwt) + } + + resp, err := DoReq(req) + if err != nil { + return nil, err + } + + var state pb.MembershipState + if err = protojson.Unmarshal(resp, &state); err != nil { + return nil, err + } + return &state, err +} + func (hc *HTTPClient) PostDqlQuery(query string) ([]byte, error) { req, err := http.NewRequest(http.MethodPost, hc.dqlURL, bytes.NewBufferString(query)) if err != nil { @@ -795,13 +819,15 @@ func GetHttpClient(alphaUrl, zeroUrl string) (*HTTPClient, error) { stateUrl := "http://" + zeroUrl + "/state" dqlUrl := "http://" + alphaUrl + "/query" dqlMutateUrl := "http://" + alphaUrl + "/mutate" + alphaStateUrl := "http://" + alphaUrl + "/state" return &HTTPClient{ - adminURL: adminUrl, - graphqlURL: graphQLUrl, - licenseURL: licenseUrl, - stateURL: stateUrl, - dqlURL: dqlUrl, - dqlMutateUrl: dqlMutateUrl, - HttpToken: &HttpToken{}, + adminURL: adminUrl, + graphqlURL: graphQLUrl, + licenseURL: licenseUrl, + stateURL: stateUrl, + dqlURL: dqlUrl, + dqlMutateUrl: dqlMutateUrl, + alphaStateURL: alphaStateUrl, + HttpToken: &HttpToken{}, }, nil } diff --git a/dgraphtest/local_cluster.go b/dgraphtest/local_cluster.go index d9d4f3e8965..fa5ae804289 100644 --- a/dgraphtest/local_cluster.go +++ b/dgraphtest/local_cluster.go @@ -842,7 +842,7 @@ func (c *LocalCluster) serverURL(server, endpoint string) (string, error) { if err != nil { return "", err } - url := "0.0.0.0:" + pubPort + endpoint + url := GetLocalHostUrl(pubPort, endpoint) return url, nil } @@ -1189,3 +1189,7 @@ func (c *LocalCluster) GetZeroGrpcPublicPort() (string, error) { func (c *LocalCluster) GetTempDir() string { return c.tempBinDir } + +func GetLocalHostUrl(pubPort, endpoint string) string { + return "0.0.0.0:" + pubPort + endpoint +} diff --git a/edgraph/import.go b/edgraph/import.go new file mode 100644 index 00000000000..ab9211dcacd --- /dev/null +++ b/edgraph/import.go @@ -0,0 +1,139 @@ +package edgraph + +import ( + "context" + "fmt" + "math" + "os" + "path/filepath" + "strconv" + + "github.com/dgraph-io/badger/v4" + apiv25 "github.com/dgraph-io/dgo/v240/protos/api.v25" + "github.com/dgraph-io/ristretto/v2/z" + "github.com/golang/glog" + "google.golang.org/grpc" +) + +type Client struct { + opts grpc.DialOption + dg apiv25.DgraphClient +} + +func NewImportClient(endpoint string, opts grpc.DialOption) (*Client, error) { + conn, err := grpc.NewClient(endpoint, opts) + if err != nil { + return nil, fmt.Errorf("failed to connect to endpoint [%s]: %w", endpoint, err) + } + + return &Client{dg: apiv25.NewDgraphClient(conn), opts: opts}, nil +} + +func (c *Client) InitiateSnapShotStream(ctx context.Context) (*apiv25.InitiateSnapShotStreamResponse, error) { + req := &apiv25.InitiateSnapShotStreamRequest{} + return c.dg.InitiateSnapShotStream(ctx, req) +} + +func (c *Client) StreamSnapshot(ctx context.Context, pDir string, alphas map[uint32]string) error { + groupDirs, err := getPDiPdirrectories(pDir) + if err != nil { + return fmt.Errorf("Error getting p directories: %v", err) + } + + for key, leader := range alphas { + pDir, exists := groupDirs[key-1] + if !exists { + fmt.Printf("No p directory found for group %d, skipping...\n", key) + continue + } + + if _, err := os.Stat(pDir); os.IsNotExist(err) { + fmt.Printf("p directory does not exist: %s, skipping...\n", pDir) + continue + } + + conn, err := grpc.NewClient(leader, c.opts) + if err != nil { + return fmt.Errorf("Failed to connect to leader %s: %v", leader, err) + } + defer conn.Close() + + dg := apiv25.NewDgraphClient(conn) + err = stream(ctx, dg, pDir) + if err != nil { + return err + } + } + + return nil +} + +func stream(ctx context.Context, dg apiv25.DgraphClient, pdir string) error { + out, err := dg.StreamPSnapshot(ctx) + if err != nil { + return fmt.Errorf("failed to start snapshot stream: %w", err) + } + + opt := badger.DefaultOptions(pdir) + ps, err := badger.OpenManaged(opt) + if err != nil { + return fmt.Errorf("failed to open BadgerDB: %w", err) + } + defer ps.Close() + + stream := ps.NewStreamAt(math.MaxUint64) + stream.LogPrefix = "Sending P dir" + stream.KeyToList = nil + stream.Send = func(buf *z.Buffer) error { + kvs := &apiv25.KVS{Data: buf.Bytes()} + if err := out.Send(kvs); err != nil { + return fmt.Errorf("failed to send data: %w", err) + } + return nil + } + + if err := stream.Orchestrate(ctx); err != nil { + return fmt.Errorf("stream orchestration failed: %w", err) + } + + done := &apiv25.KVS{ + Done: true, + Predicates: []string{}, + Types: []string{}, + } + if err := out.Send(done); err != nil { + return fmt.Errorf("failed to send 'done' signal: %w", err) + } + + fmt.Println("Snapshot writes DONE. Sending ACK") + ack, err := out.CloseAndRecv() + if err != nil { + return fmt.Errorf("failed to receive ACK: %w", err) + } + glog.Infof("Received ACK with message: %v\n", ack.Message) + + return nil +} + +func getPDiPdirrectories(basePath string) (map[uint32]string, error) { + groupDirs := make(map[uint32]string) + + entries, err := os.ReadDir(basePath) + if err != nil { + return nil, err + } + + for _, entry := range entries { + if entry.IsDir() { + groupID, err := strconv.Atoi(entry.Name()) + if err == nil { + pDir := filepath.Join(basePath, entry.Name(), "p") + if _, err := os.Stat(pDir); err == nil { + groupDirs[uint32(groupID)] = pDir + } + } + } + } + + return groupDirs, nil +} diff --git a/edgraph/import_test.go b/edgraph/import_test.go new file mode 100644 index 00000000000..71a89137b75 --- /dev/null +++ b/edgraph/import_test.go @@ -0,0 +1,261 @@ +//go:build integration + +/* + * SPDX-FileCopyrightText: © Hypermode Inc. + * SPDX-License-Identifier: Apache-2.0 + */ +package edgraph + +import ( + "context" + "fmt" + "os" + "reflect" + "testing" + "time" + + "github.com/hypermodeinc/dgraph/v24/dgraphapi" + "github.com/hypermodeinc/dgraph/v24/dgraphtest" + "github.com/hypermodeinc/dgraph/v24/x" + "github.com/stretchr/testify/require" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" +) + +func TestGetPDiPdirrectories(t *testing.T) { + tests := []struct { + name string + basePath string + want map[uint32]string + wantErr bool + }{ + { + name: "valid directory structure", + basePath: "testdata/valid", + want: map[uint32]string{ + 1: "testdata/valid/1/p", + 2: "testdata/valid/2/p", + }, + wantErr: false, + }, + { + name: "invalid directory structure", + basePath: "testdata/invalid", + want: nil, + wantErr: true, + }, + { + name: "non-existent directory", + basePath: "testdata/non-existent", + want: nil, + wantErr: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + // Create test data directories + if tt.name == "valid directory structure" { + err := os.MkdirAll(tt.basePath+"/1/p", 0755) + require.NoError(t, err) + err = os.MkdirAll(tt.basePath+"/2/p", 0755) + require.NoError(t, err) + } + + got, err := getPDiPdirrectories(tt.basePath) + if (err != nil) != tt.wantErr { + t.Errorf("getPDiPdirrectories() error = %v, wantErr %v", err, tt.wantErr) + return + } + if !reflect.DeepEqual(got, tt.want) { + t.Errorf("getPDiPdirrectories() = %v, want %v", got, tt.want) + } + + // Clean up test data directories + err = os.RemoveAll(tt.basePath) + require.NoError(t, err) + }) + } +} + +func TestInitiateSnapshotStreamForSingleNode(t *testing.T) { + conf := dgraphtest.NewClusterConfig().WithNumAlphas(1).WithNumZeros(1).WithReplicas(1). + WithACL(time.Hour) + c, err := dgraphtest.NewLocalCluster(conf) + require.NoError(t, err) + defer func() { c.Cleanup(t.Failed()) }() + require.NoError(t, c.Start()) + + gc, cleanup, err := c.Client() + require.NoError(t, err) + defer cleanup() + require.NoError(t, gc.Login(context.Background(), + dgraphapi.DefaultUser, dgraphapi.DefaultPassword)) + + hc, err := c.HTTPClient() + require.NoError(t, err) + require.NoError(t, hc.LoginIntoNamespace(dgraphapi.DefaultUser, + dgraphapi.DefaultPassword, x.GalaxyNamespace)) + + pubPort, err := c.GetAlphaGrpcPublicPort() + require.NoError(t, err) + client, err := NewImportClient(dgraphtest.GetLocalHostUrl(pubPort, ""), grpc.WithTransportCredentials(insecure.NewCredentials())) + + require.NoError(t, err) + + resp, err := client.InitiateSnapShotStream(context.Background()) + require.NoError(t, err) + + require.Equal(t, `leader_alphas:{key:1 value:"localhost:9080"}`, resp.String()) + + _, err = gc.Query("schema{}") + require.Error(t, err) + require.ErrorContains(t, err, "the server is in draining mode") +} + +func TestInitiateSnapshotStreamForHA(t *testing.T) { + conf := dgraphtest.NewClusterConfig().WithNumAlphas(3).WithNumZeros(1).WithReplicas(3) + c, err := dgraphtest.NewLocalCluster(conf) + require.NoError(t, err) + defer func() { c.Cleanup(t.Failed()) }() + require.NoError(t, c.Start()) + + hc, err := c.HTTPClient() + require.NoError(t, err) + state, err := hc.GetAlphaState() + require.NoError(t, err) + + pubPort, err := c.GetAlphaGrpcPublicPort() + require.NoError(t, err) + client, err := NewImportClient(dgraphtest.GetLocalHostUrl(pubPort, ""), grpc.WithTransportCredentials(insecure.NewCredentials())) + require.NoError(t, err) + + resp, err := client.InitiateSnapShotStream(context.Background()) + require.NoError(t, err) + + for _, group := range state.Groups { + for _, node := range group.Members { + if node.Leader { + require.Equal(t, resp.LeaderAlphas[node.GroupId], node.GrpcAddr) + } + } + } + + for i := 0; i <= 2; i++ { + gc, cleanup, err := c.AlphaClient(i) + require.NoError(t, err) + defer cleanup() + _, err = gc.Query("schema{}") + require.Error(t, err) + require.ErrorContains(t, err, "the server is in draining mode") + } +} + +func TestInitiateSnapshotStreamForHASharded(t *testing.T) { + conf := dgraphtest.NewClusterConfig().WithNumAlphas(6).WithNumZeros(1).WithReplicas(3) + c, err := dgraphtest.NewLocalCluster(conf) + require.NoError(t, err) + defer func() { c.Cleanup(t.Failed()) }() + require.NoError(t, c.Start()) + + hc, err := c.HTTPClient() + require.NoError(t, err) + + state, err := hc.GetAlphaState() + require.NoError(t, err) + pubPort, err := c.GetAlphaGrpcPublicPort() + require.NoError(t, err) + client, err := NewImportClient(dgraphtest.GetLocalHostUrl(pubPort, ""), + grpc.WithTransportCredentials(insecure.NewCredentials())) + require.NoError(t, err) + + resp, err := client.InitiateSnapShotStream(context.Background()) + require.NoError(t, err) + for _, group := range state.Groups { + for _, node := range group.Members { + if node.Leader { + require.Equal(t, resp.LeaderAlphas[node.GroupId], node.GrpcAddr) + } + } + } + + for i := 0; i < 6; i++ { + gc, cleanup, err := c.AlphaClient(int(i)) + require.NoError(t, err) + defer cleanup() + _, err = gc.Query("schema{}") + require.Error(t, err) + require.ErrorContains(t, err, "the server is in draining mode") + } +} + +func TestImportApis(t *testing.T) { + conf := dgraphtest.NewClusterConfig().WithNumAlphas(1).WithNumZeros(1).WithReplicas(1) + c, err := dgraphtest.NewLocalCluster(conf) + require.NoError(t, err) + defer func() { c.Cleanup(t.Failed()) }() + require.NoError(t, c.Start()) + + hc, err := c.HTTPClient() + require.NoError(t, err) + // check current leader of cluster + state, err := hc.GetAlphaState() + require.NoError(t, err) + + gc, cleanup, err := c.Client() + require.NoError(t, err) + defer cleanup() + // check schema before streaming process + schemaresp, err := gc.Query("schema{}") + require.NoError(t, err) + + fmt.Println("before streaming schema==========>", string(schemaresp.Json)) + + pubPort, err := c.GetAlphaGrpcPublicPort() + require.NoError(t, err) + + // create a import client + importClient, err := NewImportClient(dgraphtest.GetLocalHostUrl(pubPort, ""), + grpc.WithTransportCredentials(insecure.NewCredentials())) + require.NoError(t, err) + + // initiating snapshot + resp, err := importClient.InitiateSnapShotStream(context.Background()) + require.NoError(t, err) + + for _, group := range state.Groups { + for _, node := range group.Members { + if node.Leader { + require.Equal(t, resp.LeaderAlphas[node.GroupId], node.GrpcAddr) + } + } + } + + _, err = gc.Query("schema{}") + require.Error(t, err) + require.ErrorContains(t, err, "the server is in draining mode") + + // get public port of alpha because we are using docker here + pub, err := c.GetAlphaGrpcPublicPort() + require.NoError(t, err) + + url := dgraphtest.GetLocalHostUrl(pub, "") + + resp.LeaderAlphas[1] = url + + // start streaming sp directory + err = importClient.StreamSnapshot(context.Background(), "/home/shiva/workspace/dgraph-work/benchmarks/data/out", resp.LeaderAlphas) + require.NoError(t, err) + + // require.NoError(t, c.StopAlpha(0)) + // require.NoError(t, c.StartAlpha(0)) + // require.NoError(t, c.HealthCheck(false)) + + gc, cleanup, err = c.Client() + require.NoError(t, err) + defer cleanup() + schemaresp, err = gc.Query("schema{}") + require.NoError(t, err) + + fmt.Println("after streaming==========>", string(schemaresp.Json)) +} diff --git a/edgraph/server.go b/edgraph/server.go index 10803bb3d21..f2cf1a05b7a 100644 --- a/edgraph/server.go +++ b/edgraph/server.go @@ -33,6 +33,7 @@ import ( "github.com/dgraph-io/dgo/v240" "github.com/dgraph-io/dgo/v240/protos/api" + apiv25 "github.com/dgraph-io/dgo/v240/protos/api.v25" "github.com/hypermodeinc/dgraph/v24/chunker" "github.com/hypermodeinc/dgraph/v24/conn" "github.com/hypermodeinc/dgraph/v24/dql" @@ -1882,6 +1883,55 @@ func (s *Server) CheckVersion(ctx context.Context, c *api.Check) (v *api.Version return v, nil } +func (s *ServerV25) InitiateSnapShotStream(ctx context.Context, + c *apiv25.InitiateSnapShotStreamRequest) (v *apiv25.InitiateSnapShotStreamResponse, err error) { + leaders := make(map[uint32]string) + ms := worker.GetMembershipState() + + for groupID, n := range ms.Groups { + for _, a := range n.Members { + if a.Leader { + leaders[uint32(groupID)] = a.GrpcAddr + } + } + } + + drainMode := &pb.Drainmode{State: true} + if err := worker.ProposeDrain(ctx, drainMode); err != nil { + return nil, err + } + + resp := &apiv25.InitiateSnapShotStreamResponse{ + LeaderAlphas: leaders, + } + + return resp, nil +} + +func (s *ServerV25) StreamPSnapshot(stream apiv25.Dgraph_StreamPSnapshotServer) error { + leaders := make(map[uint32]string) + ms := worker.GetMembershipState() + + for groupID, n := range ms.Groups { + for _, a := range n.Members { + if a.Leader { + leaders[uint32(groupID)] = a.GrpcAddr + } + } + } + + if err := worker.FlushKvs(stream); err != nil { + return err + } + + drainMode := &pb.Drainmode{State: false} + if err := worker.ProposeDrain(stream.Context(), drainMode); err != nil { + return err + } + + return nil +} + // ------------------------------------------------------------------------------------------------- // HELPER FUNCTIONS // ------------------------------------------------------------------------------------------------- diff --git a/go.mod b/go.mod index fd65e8a028c..810067df443 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/Masterminds/semver/v3 v3.3.1 github.com/blevesearch/bleve/v2 v2.4.4 github.com/dgraph-io/badger/v4 v4.6.0 - github.com/dgraph-io/dgo/v240 v240.1.1-0.20250304130327-2843f027cbe2 + github.com/dgraph-io/dgo/v240 v240.1.1-0.20250310071638-edbfb65921ae github.com/dgraph-io/gqlgen v0.13.2 github.com/dgraph-io/gqlparser/v2 v2.2.2 github.com/dgraph-io/graphql-transport-ws v0.0.0-20210511143556-2cef522f1f15 diff --git a/go.sum b/go.sum index ff59f09bacc..3bca88a95db 100644 --- a/go.sum +++ b/go.sum @@ -129,8 +129,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgraph-io/badger/v4 v4.6.0 h1:acOwfOOZ4p1dPRnYzvkVm7rUk2Y21TgPVepCy5dJdFQ= github.com/dgraph-io/badger/v4 v4.6.0/go.mod h1:KSJ5VTuZNC3Sd+YhvVjk2nYua9UZnnTr/SkXvdtiPgI= -github.com/dgraph-io/dgo/v240 v240.1.1-0.20250304130327-2843f027cbe2 h1:5pwHr5yXCgPqYrV3I4hqRRrh8iV5hHvh9Fcp3XPHGrA= -github.com/dgraph-io/dgo/v240 v240.1.1-0.20250304130327-2843f027cbe2/go.mod h1:NYkKhL4iYHoKzDufJRLOx9c+YKaChwmbEDxWYTIfshc= +github.com/dgraph-io/dgo/v240 v240.1.1-0.20250310071638-edbfb65921ae h1:O48TB/G2cA9Xtzrc6oQJKkESDUZyL8lWF6IJtlR2e6E= +github.com/dgraph-io/dgo/v240 v240.1.1-0.20250310071638-edbfb65921ae/go.mod h1:Y0XKzTXtjC7a6KMWxXA7VicT0usE6HdaBc6OuV/J8Mw= github.com/dgraph-io/gqlgen v0.13.2 h1:TNhndk+eHKj5qE7BenKKSYdSIdOGhLqxR1rCiMso9KM= github.com/dgraph-io/gqlgen v0.13.2/go.mod h1:iCOrOv9lngN7KAo+jMgvUPVDlYHdf7qDwsTkQby2Sis= github.com/dgraph-io/gqlparser/v2 v2.1.1/go.mod h1:MYS4jppjyx8b9tuUtjV7jU1UFZK6P9fvO8TsIsQtRKU= diff --git a/protos/pb.proto b/protos/pb.proto index 27ec4f22ec6..04b7508bbc7 100644 --- a/protos/pb.proto +++ b/protos/pb.proto @@ -122,6 +122,7 @@ message Member { bool clusterInfoOnly = 13; bool forceGroupId = 14; + string grpcAddr = 15; } message Group { @@ -325,6 +326,7 @@ message Proposal { DeleteNsRequest delete_ns = 14; // Used to delete namespace. // Skipping 15 as it is used for uint64 key in master and might be needed later here. uint64 start_ts = 16; + Drainmode drainmode =17; } message CDCState { @@ -583,6 +585,7 @@ service Zero { rpc RemoveNode(RemoveNodeRequest) returns (Status) {} rpc MoveTablet(MoveTabletRequest) returns (Status) {} rpc ApplyLicense(ApplyLicenseRequest) returns (Status) {} + rpc ApplyDrainmode(Drainmode) returns (Status) {} } service Worker { @@ -602,8 +605,12 @@ service Worker { returns (UpdateGraphQLSchemaResponse) {} rpc DeleteNamespace(DeleteNsRequest) returns (Status) {} rpc TaskStatus(TaskStatusRequest) returns (TaskStatusResponse) {} + rpc ApplyDrainmode(Drainmode) returns (Status) {} } +message Drainmode { + bool state = 1; +} message TabletResponse { repeated Tablet tablets = 1; } diff --git a/protos/pb/pb.pb.go b/protos/pb/pb.pb.go index 9cb0535fdf4..75751d14b8d 100644 --- a/protos/pb/pb.pb.go +++ b/protos/pb/pb.pb.go @@ -419,7 +419,7 @@ func (x NumLeaseType) Number() protoreflect.EnumNumber { // Deprecated: Use NumLeaseType.Descriptor instead. func (NumLeaseType) EnumDescriptor() ([]byte, []int) { - return file_pb_proto_rawDescGZIP(), []int{56, 0} + return file_pb_proto_rawDescGZIP(), []int{57, 0} } type DropOperation_DropOp int32 @@ -471,7 +471,7 @@ func (x DropOperation_DropOp) Number() protoreflect.EnumNumber { // Deprecated: Use DropOperation_DropOp.Descriptor instead. func (DropOperation_DropOp) EnumDescriptor() ([]byte, []int) { - return file_pb_proto_rawDescGZIP(), []int{65, 0} + return file_pb_proto_rawDescGZIP(), []int{66, 0} } type BackupKey_KeyType int32 @@ -535,7 +535,7 @@ func (x BackupKey_KeyType) Number() protoreflect.EnumNumber { // Deprecated: Use BackupKey_KeyType.Descriptor instead. func (BackupKey_KeyType) EnumDescriptor() ([]byte, []int) { - return file_pb_proto_rawDescGZIP(), []int{68, 0} + return file_pb_proto_rawDescGZIP(), []int{69, 0} } type List struct { @@ -1339,6 +1339,7 @@ type Member struct { Learner bool `protobuf:"varint,7,opt,name=learner,proto3" json:"learner,omitempty"` ClusterInfoOnly bool `protobuf:"varint,13,opt,name=clusterInfoOnly,proto3" json:"clusterInfoOnly,omitempty"` ForceGroupId bool `protobuf:"varint,14,opt,name=forceGroupId,proto3" json:"forceGroupId,omitempty"` + GrpcAddr string `protobuf:"bytes,15,opt,name=grpcAddr,proto3" json:"grpcAddr,omitempty"` } func (x *Member) Reset() { @@ -1436,6 +1437,13 @@ func (x *Member) GetForceGroupId() bool { return false } +func (x *Member) GetGrpcAddr() string { + if x != nil { + return x.GrpcAddr + } + return "" +} + type Group struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2778,7 +2786,8 @@ type Proposal struct { CdcState *CDCState `protobuf:"bytes,13,opt,name=cdc_state,json=cdcState,proto3" json:"cdc_state,omitempty"` DeleteNs *DeleteNsRequest `protobuf:"bytes,14,opt,name=delete_ns,json=deleteNs,proto3" json:"delete_ns,omitempty"` // Used to delete namespace. // Skipping 15 as it is used for uint64 key in master and might be needed later here. - StartTs uint64 `protobuf:"varint,16,opt,name=start_ts,json=startTs,proto3" json:"start_ts,omitempty"` + StartTs uint64 `protobuf:"varint,16,opt,name=start_ts,json=startTs,proto3" json:"start_ts,omitempty"` + Drainmode *Drainmode `protobuf:"bytes,17,opt,name=drainmode,proto3" json:"drainmode,omitempty"` } func (x *Proposal) Reset() { @@ -2897,6 +2906,13 @@ func (x *Proposal) GetStartTs() uint64 { return 0 } +func (x *Proposal) GetDrainmode() *Drainmode { + if x != nil { + return x.Drainmode + } + return nil +} + type CDCState struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -4643,6 +4659,53 @@ func (x *RaftBatch) GetPayload() *api.Payload { return nil } +type Drainmode struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + State bool `protobuf:"varint,1,opt,name=state,proto3" json:"state,omitempty"` +} + +func (x *Drainmode) Reset() { + *x = Drainmode{} + if protoimpl.UnsafeEnabled { + mi := &file_pb_proto_msgTypes[52] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Drainmode) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Drainmode) ProtoMessage() {} + +func (x *Drainmode) ProtoReflect() protoreflect.Message { + mi := &file_pb_proto_msgTypes[52] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Drainmode.ProtoReflect.Descriptor instead. +func (*Drainmode) Descriptor() ([]byte, []int) { + return file_pb_proto_rawDescGZIP(), []int{52} +} + +func (x *Drainmode) GetState() bool { + if x != nil { + return x.State + } + return false +} + type TabletResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -4654,7 +4717,7 @@ type TabletResponse struct { func (x *TabletResponse) Reset() { *x = TabletResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pb_proto_msgTypes[52] + mi := &file_pb_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4667,7 +4730,7 @@ func (x *TabletResponse) String() string { func (*TabletResponse) ProtoMessage() {} func (x *TabletResponse) ProtoReflect() protoreflect.Message { - mi := &file_pb_proto_msgTypes[52] + mi := &file_pb_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4680,7 +4743,7 @@ func (x *TabletResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TabletResponse.ProtoReflect.Descriptor instead. func (*TabletResponse) Descriptor() ([]byte, []int) { - return file_pb_proto_rawDescGZIP(), []int{52} + return file_pb_proto_rawDescGZIP(), []int{53} } func (x *TabletResponse) GetTablets() []*Tablet { @@ -4702,7 +4765,7 @@ type TabletRequest struct { func (x *TabletRequest) Reset() { *x = TabletRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pb_proto_msgTypes[53] + mi := &file_pb_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4715,7 +4778,7 @@ func (x *TabletRequest) String() string { func (*TabletRequest) ProtoMessage() {} func (x *TabletRequest) ProtoReflect() protoreflect.Message { - mi := &file_pb_proto_msgTypes[53] + mi := &file_pb_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4728,7 +4791,7 @@ func (x *TabletRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TabletRequest.ProtoReflect.Descriptor instead. func (*TabletRequest) Descriptor() ([]byte, []int) { - return file_pb_proto_rawDescGZIP(), []int{53} + return file_pb_proto_rawDescGZIP(), []int{54} } func (x *TabletRequest) GetTablets() []*Tablet { @@ -4757,7 +4820,7 @@ type SubscriptionRequest struct { func (x *SubscriptionRequest) Reset() { *x = SubscriptionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pb_proto_msgTypes[54] + mi := &file_pb_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4770,7 +4833,7 @@ func (x *SubscriptionRequest) String() string { func (*SubscriptionRequest) ProtoMessage() {} func (x *SubscriptionRequest) ProtoReflect() protoreflect.Message { - mi := &file_pb_proto_msgTypes[54] + mi := &file_pb_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4783,7 +4846,7 @@ func (x *SubscriptionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SubscriptionRequest.ProtoReflect.Descriptor instead. func (*SubscriptionRequest) Descriptor() ([]byte, []int) { - return file_pb_proto_rawDescGZIP(), []int{54} + return file_pb_proto_rawDescGZIP(), []int{55} } func (x *SubscriptionRequest) GetPrefixes() [][]byte { @@ -4811,7 +4874,7 @@ type SubscriptionResponse struct { func (x *SubscriptionResponse) Reset() { *x = SubscriptionResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pb_proto_msgTypes[55] + mi := &file_pb_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4824,7 +4887,7 @@ func (x *SubscriptionResponse) String() string { func (*SubscriptionResponse) ProtoMessage() {} func (x *SubscriptionResponse) ProtoReflect() protoreflect.Message { - mi := &file_pb_proto_msgTypes[55] + mi := &file_pb_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4837,7 +4900,7 @@ func (x *SubscriptionResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SubscriptionResponse.ProtoReflect.Descriptor instead. func (*SubscriptionResponse) Descriptor() ([]byte, []int) { - return file_pb_proto_rawDescGZIP(), []int{55} + return file_pb_proto_rawDescGZIP(), []int{56} } func (x *SubscriptionResponse) GetKvs() *pb.KVList { @@ -4864,7 +4927,7 @@ type Num struct { func (x *Num) Reset() { *x = Num{} if protoimpl.UnsafeEnabled { - mi := &file_pb_proto_msgTypes[56] + mi := &file_pb_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4877,7 +4940,7 @@ func (x *Num) String() string { func (*Num) ProtoMessage() {} func (x *Num) ProtoReflect() protoreflect.Message { - mi := &file_pb_proto_msgTypes[56] + mi := &file_pb_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4890,7 +4953,7 @@ func (x *Num) ProtoReflect() protoreflect.Message { // Deprecated: Use Num.ProtoReflect.Descriptor instead. func (*Num) Descriptor() ([]byte, []int) { - return file_pb_proto_rawDescGZIP(), []int{56} + return file_pb_proto_rawDescGZIP(), []int{57} } func (x *Num) GetVal() uint64 { @@ -4942,7 +5005,7 @@ type AssignedIds struct { func (x *AssignedIds) Reset() { *x = AssignedIds{} if protoimpl.UnsafeEnabled { - mi := &file_pb_proto_msgTypes[57] + mi := &file_pb_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4955,7 +5018,7 @@ func (x *AssignedIds) String() string { func (*AssignedIds) ProtoMessage() {} func (x *AssignedIds) ProtoReflect() protoreflect.Message { - mi := &file_pb_proto_msgTypes[57] + mi := &file_pb_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4968,7 +5031,7 @@ func (x *AssignedIds) ProtoReflect() protoreflect.Message { // Deprecated: Use AssignedIds.ProtoReflect.Descriptor instead. func (*AssignedIds) Descriptor() ([]byte, []int) { - return file_pb_proto_rawDescGZIP(), []int{57} + return file_pb_proto_rawDescGZIP(), []int{58} } func (x *AssignedIds) GetStartId() uint64 { @@ -5004,7 +5067,7 @@ type RemoveNodeRequest struct { func (x *RemoveNodeRequest) Reset() { *x = RemoveNodeRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pb_proto_msgTypes[58] + mi := &file_pb_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5017,7 +5080,7 @@ func (x *RemoveNodeRequest) String() string { func (*RemoveNodeRequest) ProtoMessage() {} func (x *RemoveNodeRequest) ProtoReflect() protoreflect.Message { - mi := &file_pb_proto_msgTypes[58] + mi := &file_pb_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5030,7 +5093,7 @@ func (x *RemoveNodeRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RemoveNodeRequest.ProtoReflect.Descriptor instead. func (*RemoveNodeRequest) Descriptor() ([]byte, []int) { - return file_pb_proto_rawDescGZIP(), []int{58} + return file_pb_proto_rawDescGZIP(), []int{59} } func (x *RemoveNodeRequest) GetNodeId() uint64 { @@ -5060,7 +5123,7 @@ type MoveTabletRequest struct { func (x *MoveTabletRequest) Reset() { *x = MoveTabletRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pb_proto_msgTypes[59] + mi := &file_pb_proto_msgTypes[60] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5073,7 +5136,7 @@ func (x *MoveTabletRequest) String() string { func (*MoveTabletRequest) ProtoMessage() {} func (x *MoveTabletRequest) ProtoReflect() protoreflect.Message { - mi := &file_pb_proto_msgTypes[59] + mi := &file_pb_proto_msgTypes[60] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5086,7 +5149,7 @@ func (x *MoveTabletRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use MoveTabletRequest.ProtoReflect.Descriptor instead. func (*MoveTabletRequest) Descriptor() ([]byte, []int) { - return file_pb_proto_rawDescGZIP(), []int{59} + return file_pb_proto_rawDescGZIP(), []int{60} } func (x *MoveTabletRequest) GetNamespace() uint64 { @@ -5121,7 +5184,7 @@ type ApplyLicenseRequest struct { func (x *ApplyLicenseRequest) Reset() { *x = ApplyLicenseRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pb_proto_msgTypes[60] + mi := &file_pb_proto_msgTypes[61] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5134,7 +5197,7 @@ func (x *ApplyLicenseRequest) String() string { func (*ApplyLicenseRequest) ProtoMessage() {} func (x *ApplyLicenseRequest) ProtoReflect() protoreflect.Message { - mi := &file_pb_proto_msgTypes[60] + mi := &file_pb_proto_msgTypes[61] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5147,7 +5210,7 @@ func (x *ApplyLicenseRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ApplyLicenseRequest.ProtoReflect.Descriptor instead. func (*ApplyLicenseRequest) Descriptor() ([]byte, []int) { - return file_pb_proto_rawDescGZIP(), []int{60} + return file_pb_proto_rawDescGZIP(), []int{61} } func (x *ApplyLicenseRequest) GetLicense() []byte { @@ -5169,7 +5232,7 @@ type SnapshotMeta struct { func (x *SnapshotMeta) Reset() { *x = SnapshotMeta{} if protoimpl.UnsafeEnabled { - mi := &file_pb_proto_msgTypes[61] + mi := &file_pb_proto_msgTypes[62] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5182,7 +5245,7 @@ func (x *SnapshotMeta) String() string { func (*SnapshotMeta) ProtoMessage() {} func (x *SnapshotMeta) ProtoReflect() protoreflect.Message { - mi := &file_pb_proto_msgTypes[61] + mi := &file_pb_proto_msgTypes[62] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5195,7 +5258,7 @@ func (x *SnapshotMeta) ProtoReflect() protoreflect.Message { // Deprecated: Use SnapshotMeta.ProtoReflect.Descriptor instead. func (*SnapshotMeta) Descriptor() ([]byte, []int) { - return file_pb_proto_rawDescGZIP(), []int{61} + return file_pb_proto_rawDescGZIP(), []int{62} } func (x *SnapshotMeta) GetClientTs() uint64 { @@ -5226,7 +5289,7 @@ type Status struct { func (x *Status) Reset() { *x = Status{} if protoimpl.UnsafeEnabled { - mi := &file_pb_proto_msgTypes[62] + mi := &file_pb_proto_msgTypes[63] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5239,7 +5302,7 @@ func (x *Status) String() string { func (*Status) ProtoMessage() {} func (x *Status) ProtoReflect() protoreflect.Message { - mi := &file_pb_proto_msgTypes[62] + mi := &file_pb_proto_msgTypes[63] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5252,7 +5315,7 @@ func (x *Status) ProtoReflect() protoreflect.Message { // Deprecated: Use Status.ProtoReflect.Descriptor instead. func (*Status) Descriptor() ([]byte, []int) { - return file_pb_proto_rawDescGZIP(), []int{62} + return file_pb_proto_rawDescGZIP(), []int{63} } func (x *Status) GetCode() int32 { @@ -5298,7 +5361,7 @@ type BackupRequest struct { func (x *BackupRequest) Reset() { *x = BackupRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pb_proto_msgTypes[63] + mi := &file_pb_proto_msgTypes[64] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5311,7 +5374,7 @@ func (x *BackupRequest) String() string { func (*BackupRequest) ProtoMessage() {} func (x *BackupRequest) ProtoReflect() protoreflect.Message { - mi := &file_pb_proto_msgTypes[63] + mi := &file_pb_proto_msgTypes[64] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5324,7 +5387,7 @@ func (x *BackupRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use BackupRequest.ProtoReflect.Descriptor instead. func (*BackupRequest) Descriptor() ([]byte, []int) { - return file_pb_proto_rawDescGZIP(), []int{63} + return file_pb_proto_rawDescGZIP(), []int{64} } func (x *BackupRequest) GetReadTs() uint64 { @@ -5415,7 +5478,7 @@ type BackupResponse struct { func (x *BackupResponse) Reset() { *x = BackupResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pb_proto_msgTypes[64] + mi := &file_pb_proto_msgTypes[65] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5428,7 +5491,7 @@ func (x *BackupResponse) String() string { func (*BackupResponse) ProtoMessage() {} func (x *BackupResponse) ProtoReflect() protoreflect.Message { - mi := &file_pb_proto_msgTypes[64] + mi := &file_pb_proto_msgTypes[65] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5441,7 +5504,7 @@ func (x *BackupResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use BackupResponse.ProtoReflect.Descriptor instead. func (*BackupResponse) Descriptor() ([]byte, []int) { - return file_pb_proto_rawDescGZIP(), []int{64} + return file_pb_proto_rawDescGZIP(), []int{65} } func (x *BackupResponse) GetDropOperations() []*DropOperation { @@ -5465,7 +5528,7 @@ type DropOperation struct { func (x *DropOperation) Reset() { *x = DropOperation{} if protoimpl.UnsafeEnabled { - mi := &file_pb_proto_msgTypes[65] + mi := &file_pb_proto_msgTypes[66] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5478,7 +5541,7 @@ func (x *DropOperation) String() string { func (*DropOperation) ProtoMessage() {} func (x *DropOperation) ProtoReflect() protoreflect.Message { - mi := &file_pb_proto_msgTypes[65] + mi := &file_pb_proto_msgTypes[66] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5491,7 +5554,7 @@ func (x *DropOperation) ProtoReflect() protoreflect.Message { // Deprecated: Use DropOperation.ProtoReflect.Descriptor instead. func (*DropOperation) Descriptor() ([]byte, []int) { - return file_pb_proto_rawDescGZIP(), []int{65} + return file_pb_proto_rawDescGZIP(), []int{66} } func (x *DropOperation) GetDropOp() DropOperation_DropOp { @@ -5529,7 +5592,7 @@ type ExportRequest struct { func (x *ExportRequest) Reset() { *x = ExportRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pb_proto_msgTypes[66] + mi := &file_pb_proto_msgTypes[67] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5542,7 +5605,7 @@ func (x *ExportRequest) String() string { func (*ExportRequest) ProtoMessage() {} func (x *ExportRequest) ProtoReflect() protoreflect.Message { - mi := &file_pb_proto_msgTypes[66] + mi := &file_pb_proto_msgTypes[67] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5555,7 +5618,7 @@ func (x *ExportRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ExportRequest.ProtoReflect.Descriptor instead. func (*ExportRequest) Descriptor() ([]byte, []int) { - return file_pb_proto_rawDescGZIP(), []int{66} + return file_pb_proto_rawDescGZIP(), []int{67} } func (x *ExportRequest) GetGroupId() uint32 { @@ -5642,7 +5705,7 @@ type ExportResponse struct { func (x *ExportResponse) Reset() { *x = ExportResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pb_proto_msgTypes[67] + mi := &file_pb_proto_msgTypes[68] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5655,7 +5718,7 @@ func (x *ExportResponse) String() string { func (*ExportResponse) ProtoMessage() {} func (x *ExportResponse) ProtoReflect() protoreflect.Message { - mi := &file_pb_proto_msgTypes[67] + mi := &file_pb_proto_msgTypes[68] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5668,7 +5731,7 @@ func (x *ExportResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ExportResponse.ProtoReflect.Descriptor instead. func (*ExportResponse) Descriptor() ([]byte, []int) { - return file_pb_proto_rawDescGZIP(), []int{67} + return file_pb_proto_rawDescGZIP(), []int{68} } func (x *ExportResponse) GetCode() int32 { @@ -5710,7 +5773,7 @@ type BackupKey struct { func (x *BackupKey) Reset() { *x = BackupKey{} if protoimpl.UnsafeEnabled { - mi := &file_pb_proto_msgTypes[68] + mi := &file_pb_proto_msgTypes[69] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5723,7 +5786,7 @@ func (x *BackupKey) String() string { func (*BackupKey) ProtoMessage() {} func (x *BackupKey) ProtoReflect() protoreflect.Message { - mi := &file_pb_proto_msgTypes[68] + mi := &file_pb_proto_msgTypes[69] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5736,7 +5799,7 @@ func (x *BackupKey) ProtoReflect() protoreflect.Message { // Deprecated: Use BackupKey.ProtoReflect.Descriptor instead. func (*BackupKey) Descriptor() ([]byte, []int) { - return file_pb_proto_rawDescGZIP(), []int{68} + return file_pb_proto_rawDescGZIP(), []int{69} } func (x *BackupKey) GetType() BackupKey_KeyType { @@ -5804,7 +5867,7 @@ type BackupPostingList struct { func (x *BackupPostingList) Reset() { *x = BackupPostingList{} if protoimpl.UnsafeEnabled { - mi := &file_pb_proto_msgTypes[69] + mi := &file_pb_proto_msgTypes[70] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5817,7 +5880,7 @@ func (x *BackupPostingList) String() string { func (*BackupPostingList) ProtoMessage() {} func (x *BackupPostingList) ProtoReflect() protoreflect.Message { - mi := &file_pb_proto_msgTypes[69] + mi := &file_pb_proto_msgTypes[70] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5830,7 +5893,7 @@ func (x *BackupPostingList) ProtoReflect() protoreflect.Message { // Deprecated: Use BackupPostingList.ProtoReflect.Descriptor instead. func (*BackupPostingList) Descriptor() ([]byte, []int) { - return file_pb_proto_rawDescGZIP(), []int{69} + return file_pb_proto_rawDescGZIP(), []int{70} } func (x *BackupPostingList) GetUids() []uint64 { @@ -5882,7 +5945,7 @@ type UpdateGraphQLSchemaRequest struct { func (x *UpdateGraphQLSchemaRequest) Reset() { *x = UpdateGraphQLSchemaRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pb_proto_msgTypes[70] + mi := &file_pb_proto_msgTypes[71] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5895,7 +5958,7 @@ func (x *UpdateGraphQLSchemaRequest) String() string { func (*UpdateGraphQLSchemaRequest) ProtoMessage() {} func (x *UpdateGraphQLSchemaRequest) ProtoReflect() protoreflect.Message { - mi := &file_pb_proto_msgTypes[70] + mi := &file_pb_proto_msgTypes[71] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5908,7 +5971,7 @@ func (x *UpdateGraphQLSchemaRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateGraphQLSchemaRequest.ProtoReflect.Descriptor instead. func (*UpdateGraphQLSchemaRequest) Descriptor() ([]byte, []int) { - return file_pb_proto_rawDescGZIP(), []int{70} + return file_pb_proto_rawDescGZIP(), []int{71} } func (x *UpdateGraphQLSchemaRequest) GetStartTs() uint64 { @@ -5950,7 +6013,7 @@ type UpdateGraphQLSchemaResponse struct { func (x *UpdateGraphQLSchemaResponse) Reset() { *x = UpdateGraphQLSchemaResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pb_proto_msgTypes[71] + mi := &file_pb_proto_msgTypes[72] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -5963,7 +6026,7 @@ func (x *UpdateGraphQLSchemaResponse) String() string { func (*UpdateGraphQLSchemaResponse) ProtoMessage() {} func (x *UpdateGraphQLSchemaResponse) ProtoReflect() protoreflect.Message { - mi := &file_pb_proto_msgTypes[71] + mi := &file_pb_proto_msgTypes[72] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -5976,7 +6039,7 @@ func (x *UpdateGraphQLSchemaResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateGraphQLSchemaResponse.ProtoReflect.Descriptor instead. func (*UpdateGraphQLSchemaResponse) Descriptor() ([]byte, []int) { - return file_pb_proto_rawDescGZIP(), []int{71} + return file_pb_proto_rawDescGZIP(), []int{72} } func (x *UpdateGraphQLSchemaResponse) GetUid() uint64 { @@ -6000,7 +6063,7 @@ type BulkMeta struct { func (x *BulkMeta) Reset() { *x = BulkMeta{} if protoimpl.UnsafeEnabled { - mi := &file_pb_proto_msgTypes[72] + mi := &file_pb_proto_msgTypes[73] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6013,7 +6076,7 @@ func (x *BulkMeta) String() string { func (*BulkMeta) ProtoMessage() {} func (x *BulkMeta) ProtoReflect() protoreflect.Message { - mi := &file_pb_proto_msgTypes[72] + mi := &file_pb_proto_msgTypes[73] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6026,7 +6089,7 @@ func (x *BulkMeta) ProtoReflect() protoreflect.Message { // Deprecated: Use BulkMeta.ProtoReflect.Descriptor instead. func (*BulkMeta) Descriptor() ([]byte, []int) { - return file_pb_proto_rawDescGZIP(), []int{72} + return file_pb_proto_rawDescGZIP(), []int{73} } func (x *BulkMeta) GetEdgeCount() int64 { @@ -6062,7 +6125,7 @@ type DeleteNsRequest struct { func (x *DeleteNsRequest) Reset() { *x = DeleteNsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pb_proto_msgTypes[73] + mi := &file_pb_proto_msgTypes[74] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6075,7 +6138,7 @@ func (x *DeleteNsRequest) String() string { func (*DeleteNsRequest) ProtoMessage() {} func (x *DeleteNsRequest) ProtoReflect() protoreflect.Message { - mi := &file_pb_proto_msgTypes[73] + mi := &file_pb_proto_msgTypes[74] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6088,7 +6151,7 @@ func (x *DeleteNsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteNsRequest.ProtoReflect.Descriptor instead. func (*DeleteNsRequest) Descriptor() ([]byte, []int) { - return file_pb_proto_rawDescGZIP(), []int{73} + return file_pb_proto_rawDescGZIP(), []int{74} } func (x *DeleteNsRequest) GetGroupId() uint32 { @@ -6116,7 +6179,7 @@ type TaskStatusRequest struct { func (x *TaskStatusRequest) Reset() { *x = TaskStatusRequest{} if protoimpl.UnsafeEnabled { - mi := &file_pb_proto_msgTypes[74] + mi := &file_pb_proto_msgTypes[75] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6129,7 +6192,7 @@ func (x *TaskStatusRequest) String() string { func (*TaskStatusRequest) ProtoMessage() {} func (x *TaskStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_pb_proto_msgTypes[74] + mi := &file_pb_proto_msgTypes[75] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6142,7 +6205,7 @@ func (x *TaskStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TaskStatusRequest.ProtoReflect.Descriptor instead. func (*TaskStatusRequest) Descriptor() ([]byte, []int) { - return file_pb_proto_rawDescGZIP(), []int{74} + return file_pb_proto_rawDescGZIP(), []int{75} } func (x *TaskStatusRequest) GetTaskId() uint64 { @@ -6163,7 +6226,7 @@ type TaskStatusResponse struct { func (x *TaskStatusResponse) Reset() { *x = TaskStatusResponse{} if protoimpl.UnsafeEnabled { - mi := &file_pb_proto_msgTypes[75] + mi := &file_pb_proto_msgTypes[76] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -6176,7 +6239,7 @@ func (x *TaskStatusResponse) String() string { func (*TaskStatusResponse) ProtoMessage() {} func (x *TaskStatusResponse) ProtoReflect() protoreflect.Message { - mi := &file_pb_proto_msgTypes[75] + mi := &file_pb_proto_msgTypes[76] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -6189,7 +6252,7 @@ func (x *TaskStatusResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use TaskStatusResponse.ProtoReflect.Descriptor instead. func (*TaskStatusResponse) Descriptor() ([]byte, []int) { - return file_pb_proto_rawDescGZIP(), []int{75} + return file_pb_proto_rawDescGZIP(), []int{76} } func (x *TaskStatusResponse) GetTaskMeta() uint64 { @@ -6308,7 +6371,7 @@ var file_pb_proto_rawDesc = []byte{ 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x54, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x6c, 0x65, 0x61, 0x72, 0x6e, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x4c, 0x65, 0x61, 0x72, 0x6e, - 0x65, 0x72, 0x22, 0xfe, 0x01, 0x0a, 0x06, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x0e, 0x0a, + 0x65, 0x72, 0x22, 0x9a, 0x02, 0x0a, 0x06, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x06, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x64, 0x64, 0x72, 0x18, @@ -6324,803 +6387,815 @@ var file_pb_proto_rawDesc = []byte{ 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x49, 0x64, 0x22, 0xdd, 0x02, 0x0a, 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x30, 0x0a, - 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, - 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, - 0x30, 0x0a, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x74, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, - 0x54, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x23, - 0x0a, 0x0d, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x74, 0x73, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x54, 0x73, 0x1a, 0x46, 0x0a, 0x0c, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x20, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x46, 0x0a, 0x0c, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x74, 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, 0x20, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, - 0x62, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x22, 0x6f, 0x0a, 0x07, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, - 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x1a, - 0x0a, 0x08, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x54, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x08, 0x65, 0x78, 0x70, 0x69, 0x72, 0x79, 0x54, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x64, 0x22, 0xac, 0x04, 0x0a, 0x0c, 0x5a, 0x65, 0x72, 0x6f, 0x50, 0x72, 0x6f, - 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x41, 0x0a, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x5f, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x62, 0x2e, - 0x5a, 0x65, 0x72, 0x6f, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x2e, 0x53, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x54, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x73, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x54, 0x73, 0x12, 0x22, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x06, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, - 0x62, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, 0x78, 0x55, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x06, 0x6d, 0x61, 0x78, 0x55, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x54, - 0x78, 0x6e, 0x54, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x54, - 0x78, 0x6e, 0x54, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x4e, 0x73, 0x49, 0x44, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x4e, 0x73, 0x49, 0x44, 0x12, 0x1c, - 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x52, 0x61, 0x66, 0x74, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x52, 0x61, 0x66, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x03, - 0x74, 0x78, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x54, 0x78, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x03, 0x74, 0x78, 0x6e, 0x12, - 0x10, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x69, - 0x64, 0x12, 0x25, 0x0a, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, - 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x73, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x2e, - 0x5a, 0x65, 0x72, 0x6f, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x08, 0x73, 0x6e, - 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x30, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x5f, 0x6e, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x08, - 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x73, 0x12, 0x24, 0x0a, 0x07, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x1a, 0x3d, - 0x0a, 0x0f, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x54, 0x73, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, - 0x08, 0x10, 0x09, 0x22, 0xf1, 0x03, 0x0a, 0x0f, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, - 0x69, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, - 0x72, 0x12, 0x37, 0x0a, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, - 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x45, 0x6e, 0x74, - 0x72, 0x79, 0x52, 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x34, 0x0a, 0x05, 0x7a, 0x65, - 0x72, 0x6f, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, 0x2e, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x5a, - 0x65, 0x72, 0x6f, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x7a, 0x65, 0x72, 0x6f, 0x73, - 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x61, 0x78, 0x55, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x06, 0x6d, 0x61, 0x78, 0x55, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x54, - 0x78, 0x6e, 0x54, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x54, - 0x78, 0x6e, 0x54, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x4e, 0x73, 0x49, 0x44, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x4e, 0x73, 0x49, 0x44, 0x12, 0x1c, - 0x0a, 0x09, 0x6d, 0x61, 0x78, 0x52, 0x61, 0x66, 0x74, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x09, 0x6d, 0x61, 0x78, 0x52, 0x61, 0x66, 0x74, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x07, - 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, - 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, - 0x65, 0x64, 0x12, 0x10, 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x03, 0x63, 0x69, 0x64, 0x12, 0x25, 0x0a, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, - 0x73, 0x65, 0x52, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x1a, 0x44, 0x0a, 0x0b, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1f, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x70, 0x62, - 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x1a, 0x44, 0x0a, 0x0a, 0x5a, 0x65, 0x72, 0x6f, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x70, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x67, 0x72, 0x70, 0x63, 0x41, 0x64, 0x64, 0x72, 0x18, + 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x67, 0x72, 0x70, 0x63, 0x41, 0x64, 0x64, 0x72, 0x22, + 0xdd, 0x02, 0x0a, 0x05, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x30, 0x0a, 0x07, 0x6d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, 0x62, 0x2e, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x30, 0x0a, 0x07, 0x74, + 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x70, + 0x62, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x1f, 0x0a, + 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0a, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x54, 0x73, 0x12, 0x1a, + 0x0a, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x08, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x68, + 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x0c, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x73, 0x1a, + 0x46, 0x0a, 0x0c, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x20, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x81, 0x01, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x22, 0x0a, 0x06, 0x6d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, - 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, - 0x29, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, - 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, - 0x78, 0x5f, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0a, 0x6d, 0x61, 0x78, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0xb8, 0x02, 0x0a, 0x0a, - 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 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, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x18, - 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x70, 0x74, 0x69, - 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x70, 0x74, 0x69, 0x6d, 0x65, - 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x45, 0x63, 0x68, 0x6f, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x08, 0x6c, 0x61, 0x73, 0x74, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x18, 0x0a, 0x07, - 0x6f, 0x6e, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x6f, - 0x6e, 0x67, 0x6f, 0x69, 0x6e, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x69, - 0x6e, 0x67, 0x18, 0x09, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x69, - 0x6e, 0x67, 0x12, 0x1f, 0x0a, 0x0b, 0x65, 0x65, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x73, 0x73, 0x69, 0x67, - 0x6e, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x41, 0x73, - 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x22, 0xf5, 0x01, 0x0a, 0x06, 0x54, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x12, 0x18, 0x0a, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, - 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, - 0x63, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x12, - 0x22, 0x0a, 0x0d, 0x6f, 0x6e, 0x5f, 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x6f, 0x6e, 0x44, 0x69, 0x73, 0x6b, 0x42, 0x79, - 0x74, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, - 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, - 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x6f, 0x76, 0x65, 0x54, - 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6d, 0x6f, 0x76, 0x65, 0x54, 0x73, 0x12, - 0x2d, 0x0a, 0x12, 0x75, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, - 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x75, 0x6e, 0x63, - 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0xe5, - 0x02, 0x0a, 0x0c, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x65, 0x64, 0x45, 0x64, 0x67, 0x65, 0x12, - 0x16, 0x0a, 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x06, 0x52, - 0x06, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x74, 0x74, 0x72, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x74, 0x74, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x32, 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x69, - 0x6e, 0x67, 0x2e, 0x56, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x69, - 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x06, 0x52, 0x07, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x49, 0x64, - 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6c, 0x61, 0x6e, 0x67, 0x12, 0x23, 0x0a, 0x02, 0x6f, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x65, 0x64, 0x45, 0x64, - 0x67, 0x65, 0x2e, 0x4f, 0x70, 0x52, 0x02, 0x6f, 0x70, 0x12, 0x22, 0x0a, 0x06, 0x66, 0x61, 0x63, - 0x65, 0x74, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x46, 0x61, 0x63, 0x65, 0x74, 0x52, 0x06, 0x66, 0x61, 0x63, 0x65, 0x74, 0x73, 0x12, 0x22, 0x0a, - 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x50, 0x72, 0x65, 0x64, 0x73, 0x18, 0x0a, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x50, 0x72, 0x65, 0x64, - 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, - 0x1f, 0x0a, 0x02, 0x4f, 0x70, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x45, 0x54, 0x10, 0x00, 0x12, 0x07, - 0x0a, 0x03, 0x44, 0x45, 0x4c, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x56, 0x52, 0x10, 0x02, - 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x22, 0xf1, 0x02, 0x0a, 0x09, 0x4d, 0x75, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x46, 0x0a, 0x0c, 0x54, 0x61, 0x62, 0x6c, 0x65, + 0x74, 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, 0x20, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, + 0x6f, 0x0a, 0x07, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x75, 0x73, + 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x12, 0x1a, + 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x08, 0x6d, 0x61, 0x78, 0x4e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x65, 0x78, + 0x70, 0x69, 0x72, 0x79, 0x54, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x65, 0x78, + 0x70, 0x69, 0x72, 0x79, 0x54, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, + 0x22, 0xac, 0x04, 0x0a, 0x0c, 0x5a, 0x65, 0x72, 0x6f, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, + 0x6c, 0x12, 0x41, 0x0a, 0x0b, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x5f, 0x74, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x62, 0x2e, 0x5a, 0x65, 0x72, 0x6f, + 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, + 0x74, 0x54, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, + 0x6f, 0x74, 0x54, 0x73, 0x12, 0x22, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x74, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x16, 0x0a, 0x06, + 0x6d, 0x61, 0x78, 0x55, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6d, 0x61, + 0x78, 0x55, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x54, 0x78, 0x6e, 0x54, 0x73, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x54, 0x78, 0x6e, 0x54, 0x73, + 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x4e, 0x73, 0x49, 0x44, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x4e, 0x73, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x61, + 0x78, 0x52, 0x61, 0x66, 0x74, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6d, + 0x61, 0x78, 0x52, 0x61, 0x66, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x03, 0x74, 0x78, 0x6e, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x78, 0x6e, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x03, 0x74, 0x78, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x63, + 0x69, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x69, 0x64, 0x12, 0x25, 0x0a, + 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, + 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x07, 0x6c, 0x69, 0x63, + 0x65, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x5a, 0x65, 0x72, 0x6f, + 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, + 0x6f, 0x74, 0x12, 0x30, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x6e, 0x73, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x4e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x08, 0x64, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x4e, 0x73, 0x12, 0x24, 0x0a, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x18, + 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, + 0x74, 0x52, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x53, 0x6e, + 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x54, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, + 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, 0x08, 0x10, 0x09, 0x22, + 0xf1, 0x03, 0x0a, 0x0f, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x37, 0x0a, + 0x06, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12, 0x34, 0x0a, 0x05, 0x7a, 0x65, 0x72, 0x6f, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x73, 0x68, 0x69, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x5a, 0x65, 0x72, 0x6f, 0x73, + 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x05, 0x7a, 0x65, 0x72, 0x6f, 0x73, 0x12, 0x16, 0x0a, 0x06, + 0x6d, 0x61, 0x78, 0x55, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6d, 0x61, + 0x78, 0x55, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x61, 0x78, 0x54, 0x78, 0x6e, 0x54, 0x73, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x61, 0x78, 0x54, 0x78, 0x6e, 0x54, 0x73, + 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x61, 0x78, 0x4e, 0x73, 0x49, 0x44, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x07, 0x6d, 0x61, 0x78, 0x4e, 0x73, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x61, + 0x78, 0x52, 0x61, 0x66, 0x74, 0x49, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6d, + 0x61, 0x78, 0x52, 0x61, 0x66, 0x74, 0x49, 0x64, 0x12, 0x24, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x64, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x12, 0x10, + 0x0a, 0x03, 0x63, 0x69, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x63, 0x69, 0x64, + 0x12, 0x25, 0x0a, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x2e, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x07, + 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x1a, 0x44, 0x0a, 0x0b, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x44, 0x0a, + 0x0a, 0x5a, 0x65, 0x72, 0x6f, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x20, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, + 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0x81, 0x01, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x22, 0x0a, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x52, 0x06, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x29, 0x0a, 0x05, 0x73, + 0x74, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x2e, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, + 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6d, 0x61, 0x78, 0x5f, 0x70, 0x65, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x6d, 0x61, 0x78, + 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x22, 0xb8, 0x02, 0x0a, 0x0a, 0x48, 0x65, 0x61, 0x6c, + 0x74, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6e, + 0x63, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 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, 0x14, 0x0a, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x05, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, + 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, + 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x70, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, + 0x6c, 0x61, 0x73, 0x74, 0x45, 0x63, 0x68, 0x6f, 0x18, 0x07, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, + 0x6c, 0x61, 0x73, 0x74, 0x45, 0x63, 0x68, 0x6f, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x6e, 0x67, 0x6f, + 0x69, 0x6e, 0x67, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x6f, 0x6e, 0x67, 0x6f, 0x69, + 0x6e, 0x67, 0x12, 0x1a, 0x0a, 0x08, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x69, 0x6e, 0x67, 0x18, 0x09, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x69, 0x6e, 0x67, 0x12, 0x1f, + 0x0a, 0x0b, 0x65, 0x65, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x0a, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x0a, 0x65, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, + 0x21, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, + 0x65, 0x64, 0x22, 0xf5, 0x01, 0x0a, 0x06, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x18, 0x0a, + 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, + 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x64, 0x69, + 0x63, 0x61, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x65, 0x64, + 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x6f, + 0x6e, 0x5f, 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0b, 0x6f, 0x6e, 0x44, 0x69, 0x73, 0x6b, 0x42, 0x79, 0x74, 0x65, 0x73, 0x12, + 0x16, 0x0a, 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x06, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, + 0x6e, 0x6c, 0x79, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, + 0x6e, 0x6c, 0x79, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x6f, 0x76, 0x65, 0x54, 0x73, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x06, 0x6d, 0x6f, 0x76, 0x65, 0x54, 0x73, 0x12, 0x2d, 0x0a, 0x12, 0x75, + 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x65, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, + 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x75, 0x6e, 0x63, 0x6f, 0x6d, 0x70, 0x72, + 0x65, 0x73, 0x73, 0x65, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0xe5, 0x02, 0x0a, 0x0c, 0x44, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x65, 0x64, 0x45, 0x64, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x06, 0x52, 0x06, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x74, 0x74, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x04, 0x61, 0x74, 0x74, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x32, 0x0a, + 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x56, + 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x19, 0x0a, 0x08, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x06, 0x52, 0x07, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, + 0x6c, 0x61, 0x6e, 0x67, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6c, 0x61, 0x6e, 0x67, + 0x12, 0x23, 0x0a, 0x02, 0x6f, 0x70, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x70, + 0x62, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x65, 0x64, 0x45, 0x64, 0x67, 0x65, 0x2e, 0x4f, + 0x70, 0x52, 0x02, 0x6f, 0x70, 0x12, 0x22, 0x0a, 0x06, 0x66, 0x61, 0x63, 0x65, 0x74, 0x73, 0x18, + 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x61, 0x63, 0x65, + 0x74, 0x52, 0x06, 0x66, 0x61, 0x63, 0x65, 0x74, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x61, 0x6c, 0x6c, + 0x6f, 0x77, 0x65, 0x64, 0x50, 0x72, 0x65, 0x64, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x0c, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 0x64, 0x50, 0x72, 0x65, 0x64, 0x73, 0x12, 0x1c, 0x0a, + 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x1f, 0x0a, 0x02, 0x4f, + 0x70, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x45, 0x54, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x44, 0x45, + 0x4c, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x4f, 0x56, 0x52, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x06, + 0x10, 0x07, 0x22, 0xf1, 0x02, 0x0a, 0x09, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x54, 0x73, 0x12, 0x26, 0x0a, 0x05, 0x65, 0x64, 0x67, 0x65, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x65, 0x64, 0x45, 0x64, 0x67, 0x65, 0x52, 0x05, 0x65, 0x64, 0x67, 0x65, 0x73, 0x12, 0x28, + 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, + 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x24, 0x0a, 0x05, 0x74, 0x79, 0x70, 0x65, + 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x79, 0x70, + 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x12, 0x2d, + 0x0a, 0x07, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x6f, 0x70, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x14, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x44, + 0x72, 0x6f, 0x70, 0x4f, 0x70, 0x52, 0x06, 0x64, 0x72, 0x6f, 0x70, 0x4f, 0x70, 0x12, 0x1d, 0x0a, + 0x0a, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x64, 0x72, 0x6f, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x28, 0x0a, 0x08, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, + 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x3e, 0x0a, 0x06, 0x44, 0x72, 0x6f, 0x70, 0x4f, 0x70, + 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4c, + 0x4c, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x41, 0x54, 0x41, 0x10, 0x02, 0x12, 0x08, 0x0a, + 0x04, 0x54, 0x59, 0x50, 0x45, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x4c, 0x4c, 0x5f, 0x49, + 0x4e, 0x5f, 0x4e, 0x53, 0x10, 0x04, 0x22, 0xca, 0x01, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x12, 0x3a, 0x0a, 0x0a, 0x70, 0x72, 0x65, 0x64, 0x5f, 0x68, 0x69, 0x6e, 0x74, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x72, 0x65, 0x64, 0x48, 0x69, 0x6e, 0x74, 0x73, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x70, 0x72, 0x65, 0x64, 0x48, 0x69, 0x6e, 0x74, 0x73, 0x1a, + 0x53, 0x0a, 0x0e, 0x50, 0x72, 0x65, 0x64, 0x48, 0x69, 0x6e, 0x74, 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, 0x2b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x2e, 0x48, 0x69, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2d, 0x0a, 0x08, 0x48, 0x69, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x0a, 0x0a, + 0x06, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x4c, 0x49, 0x53, + 0x54, 0x10, 0x02, 0x22, 0x93, 0x01, 0x0a, 0x08, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, + 0x12, 0x29, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x61, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x06, 0x72, 0x65, 0x61, 0x64, 0x54, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x6f, + 0x6e, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x64, 0x6f, 0x6e, 0x65, 0x12, 0x19, + 0x0a, 0x08, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x73, 0x22, 0x74, 0x0a, 0x0c, 0x5a, 0x65, 0x72, + 0x6f, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, + 0x23, 0x0a, 0x0d, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x5f, 0x74, 0x73, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x54, 0x73, 0x12, 0x29, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, + 0x68, 0x69, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, + 0xdb, 0x05, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, + 0x0a, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x09, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x73, 0x12, 0x1a, 0x0a, 0x08, + 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x62, 0x61, 0x63, 0x6b, + 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x62, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, + 0x6b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x4b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x6b, + 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, + 0x4b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x6e, 0x6f, 0x6e, + 0x79, 0x6d, 0x6f, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x6e, 0x6f, + 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, + 0x65, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x5f, + 0x61, 0x64, 0x64, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x61, 0x75, 0x6c, + 0x74, 0x41, 0x64, 0x64, 0x72, 0x12, 0x2a, 0x0a, 0x11, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x72, + 0x6f, 0x6c, 0x65, 0x69, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0f, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x69, 0x64, 0x46, 0x69, 0x6c, + 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, + 0x74, 0x69, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, + 0x76, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x69, 0x64, 0x46, 0x69, 0x6c, + 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x50, 0x61, 0x74, 0x68, + 0x12, 0x1f, 0x0a, 0x0b, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, + 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x69, 0x65, 0x6c, + 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x46, 0x6f, + 0x72, 0x6d, 0x61, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x6e, + 0x75, 0x6d, 0x18, 0x10, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x4e, 0x75, 0x6d, 0x12, 0x29, 0x0a, 0x10, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, + 0x61, 0x6c, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x11, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x69, + 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x46, 0x72, 0x6f, 0x6d, 0x12, 0x1d, + 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x12, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x24, 0x0a, + 0x0d, 0x66, 0x72, 0x6f, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x13, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x66, 0x72, 0x6f, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, + 0x61, 0x63, 0x65, 0x12, 0x38, 0x0a, 0x17, 0x69, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, + 0x63, 0x65, 0x41, 0x77, 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x18, 0x14, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x69, 0x73, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, + 0x65, 0x41, 0x77, 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x22, 0x97, 0x04, + 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x2b, 0x0a, 0x09, 0x6d, 0x75, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, + 0x70, 0x62, 0x2e, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x09, 0x6d, 0x75, + 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1d, 0x0a, 0x02, 0x6b, 0x76, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x62, 0x61, 0x64, 0x67, 0x65, 0x72, 0x70, 0x62, 0x34, 0x2e, + 0x4b, 0x56, 0x52, 0x02, 0x6b, 0x76, 0x12, 0x29, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x73, 0x68, 0x69, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x5f, 0x70, 0x72, 0x65, 0x64, 0x69, + 0x63, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6c, 0x65, 0x61, + 0x6e, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x25, 0x0a, 0x05, 0x64, 0x65, + 0x6c, 0x74, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x4f, + 0x72, 0x61, 0x63, 0x6c, 0x65, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x52, 0x05, 0x64, 0x65, 0x6c, 0x74, + 0x61, 0x12, 0x28, 0x0a, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, + 0x74, 0x52, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x68, + 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x65, 0x78, + 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x12, 0x2c, + 0x0a, 0x07, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x29, 0x0a, 0x09, + 0x63, 0x64, 0x63, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x44, 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x08, 0x63, + 0x64, 0x63, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x30, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x5f, 0x6e, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x2e, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, + 0x08, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x74, 0x61, + 0x72, 0x74, 0x54, 0x73, 0x12, 0x2b, 0x0a, 0x09, 0x64, 0x72, 0x61, 0x69, 0x6e, 0x6d, 0x6f, 0x64, + 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x72, 0x61, + 0x69, 0x6e, 0x6d, 0x6f, 0x64, 0x65, 0x52, 0x09, 0x64, 0x72, 0x61, 0x69, 0x6e, 0x6d, 0x6f, 0x64, + 0x65, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x22, 0x23, 0x0a, 0x08, 0x43, 0x44, 0x43, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x74, 0x54, 0x73, 0x22, 0x63, 0x0a, 0x03, + 0x4b, 0x56, 0x53, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x6f, 0x6e, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x64, 0x6f, 0x6e, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, + 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x0a, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, + 0x79, 0x70, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x79, 0x70, 0x65, + 0x73, 0x22, 0x80, 0x04, 0x0a, 0x07, 0x50, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x12, 0x10, 0x0a, + 0x03, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x06, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, + 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2e, 0x0a, 0x08, 0x76, 0x61, 0x6c, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, + 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x56, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x52, 0x07, 0x76, 0x61, + 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x3a, 0x0a, 0x0c, 0x70, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x70, 0x62, + 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, + 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x70, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, 0x5f, 0x74, 0x61, 0x67, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6c, 0x61, 0x6e, 0x67, 0x54, 0x61, 0x67, 0x12, 0x22, 0x0a, 0x06, + 0x66, 0x61, 0x63, 0x65, 0x74, 0x73, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x61, + 0x70, 0x69, 0x2e, 0x46, 0x61, 0x63, 0x65, 0x74, 0x52, 0x06, 0x66, 0x61, 0x63, 0x65, 0x74, 0x73, + 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x70, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x02, 0x6f, 0x70, + 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x0d, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x63, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, + 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x73, 0x22, 0xa0, 0x01, 0x0a, 0x07, 0x56, 0x61, 0x6c, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, + 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x42, 0x49, 0x4e, 0x41, 0x52, 0x59, 0x10, 0x01, 0x12, 0x07, 0x0a, + 0x03, 0x49, 0x4e, 0x54, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10, + 0x03, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x4f, 0x4f, 0x4c, 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x44, + 0x41, 0x54, 0x45, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x05, 0x12, 0x07, 0x0a, 0x03, 0x47, 0x45, 0x4f, + 0x10, 0x06, 0x12, 0x07, 0x0a, 0x03, 0x55, 0x49, 0x44, 0x10, 0x07, 0x12, 0x0c, 0x0a, 0x08, 0x50, + 0x41, 0x53, 0x53, 0x57, 0x4f, 0x52, 0x44, 0x10, 0x08, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, + 0x49, 0x4e, 0x47, 0x10, 0x09, 0x12, 0x0a, 0x0a, 0x06, 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, + 0x0a, 0x12, 0x0c, 0x0a, 0x08, 0x42, 0x49, 0x47, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10, 0x0b, 0x12, + 0x0a, 0x0a, 0x06, 0x56, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10, 0x0c, 0x22, 0x31, 0x0a, 0x0b, 0x50, + 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x07, 0x0a, 0x03, 0x52, 0x45, + 0x46, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x10, 0x01, 0x12, 0x0e, + 0x0a, 0x0a, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x4c, 0x41, 0x4e, 0x47, 0x10, 0x02, 0x4a, 0x04, + 0x08, 0x06, 0x10, 0x07, 0x22, 0x51, 0x0a, 0x08, 0x55, 0x69, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x12, 0x12, 0x0a, 0x04, 0x62, 0x61, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, + 0x62, 0x61, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x73, 0x12, 0x19, 0x0a, 0x08, + 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, + 0x6e, 0x75, 0x6d, 0x55, 0x69, 0x64, 0x73, 0x22, 0x6b, 0x0a, 0x07, 0x55, 0x69, 0x64, 0x50, 0x61, + 0x63, 0x6b, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x73, 0x69, 0x7a, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x69, 0x7a, + 0x65, 0x12, 0x24, 0x0a, 0x06, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x69, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, + 0x06, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x61, 0x6c, 0x6c, 0x6f, 0x63, + 0x5f, 0x72, 0x65, 0x66, 0x18, 0x17, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x61, 0x6c, 0x6c, 0x6f, + 0x63, 0x52, 0x65, 0x66, 0x22, 0x8c, 0x01, 0x0a, 0x0b, 0x50, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, + 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x04, 0x70, 0x61, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x69, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x52, + 0x04, 0x70, 0x61, 0x63, 0x6b, 0x12, 0x27, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, + 0x74, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x1b, + 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, + 0x70, 0x6c, 0x69, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x04, 0x52, 0x06, 0x73, 0x70, 0x6c, + 0x69, 0x74, 0x73, 0x22, 0x34, 0x0a, 0x0a, 0x46, 0x61, 0x63, 0x65, 0x74, 0x50, 0x61, 0x72, 0x61, + 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, + 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x22, 0x4e, 0x0a, 0x0b, 0x46, 0x61, 0x63, + 0x65, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x6c, 0x6c, 0x5f, + 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x61, 0x6c, 0x6c, 0x4b, + 0x65, 0x79, 0x73, 0x12, 0x24, 0x0a, 0x05, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x61, 0x63, 0x65, 0x74, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x52, 0x05, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x22, 0x2c, 0x0a, 0x06, 0x46, 0x61, 0x63, + 0x65, 0x74, 0x73, 0x12, 0x22, 0x0a, 0x06, 0x66, 0x61, 0x63, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x61, 0x63, 0x65, 0x74, 0x52, + 0x06, 0x66, 0x61, 0x63, 0x65, 0x74, 0x73, 0x22, 0x39, 0x0a, 0x0a, 0x46, 0x61, 0x63, 0x65, 0x74, + 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x0b, 0x66, 0x61, 0x63, 0x65, 0x74, 0x73, 0x5f, + 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, + 0x46, 0x61, 0x63, 0x65, 0x74, 0x73, 0x52, 0x0a, 0x66, 0x61, 0x63, 0x65, 0x74, 0x73, 0x4c, 0x69, + 0x73, 0x74, 0x22, 0x44, 0x0a, 0x08, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x03, 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x72, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x67, 0x73, 0x22, 0x6a, 0x0a, 0x0a, 0x46, 0x69, 0x6c, 0x74, + 0x65, 0x72, 0x54, 0x72, 0x65, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x70, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x02, 0x6f, 0x70, 0x12, 0x2a, 0x0a, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, + 0x65, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, + 0x6c, 0x74, 0x65, 0x72, 0x54, 0x72, 0x65, 0x65, 0x52, 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, + 0x65, 0x6e, 0x12, 0x20, 0x0a, 0x04, 0x66, 0x75, 0x6e, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, + 0x66, 0x75, 0x6e, 0x63, 0x22, 0x78, 0x0a, 0x0d, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, + 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, + 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x79, 0x70, 0x65, + 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x22, 0xd1, + 0x02, 0x0a, 0x0a, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x1c, 0x0a, + 0x09, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x09, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, + 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, + 0x65, 0x72, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, + 0x7a, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x72, 0x65, 0x76, 0x65, 0x72, 0x73, 0x65, 0x12, 0x14, 0x0a, + 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x70, 0x73, 0x65, 0x72, + 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x75, 0x70, 0x73, 0x65, 0x72, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6c, + 0x61, 0x6e, 0x67, 0x12, 0x1f, 0x0a, 0x0b, 0x6e, 0x6f, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, + 0x63, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x6e, 0x6f, 0x43, 0x6f, 0x6e, 0x66, + 0x6c, 0x69, 0x63, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x18, 0x0b, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x12, 0x34, 0x0a, 0x0b, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x70, 0x65, + 0x63, 0x73, 0x22, 0x3a, 0x0a, 0x0c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4e, 0x6f, + 0x64, 0x65, 0x42, 0x02, 0x18, 0x01, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, 0xc1, + 0x04, 0x0a, 0x0c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, + 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x32, 0x0a, + 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x56, + 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x38, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, + 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, + 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6c, + 0x69, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x70, 0x73, 0x65, 0x72, 0x74, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x06, 0x75, 0x70, 0x73, 0x65, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6c, + 0x61, 0x6e, 0x67, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x12, + 0x16, 0x0a, 0x06, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x06, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x6e, 0x6f, 0x6e, 0x5f, 0x6e, + 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x6e, + 0x6f, 0x6e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x6e, 0x6f, + 0x6e, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x6e, 0x6f, 0x6e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, + 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, + 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0e, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, + 0x12, 0x1f, 0x0a, 0x0b, 0x6e, 0x6f, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x18, + 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x6e, 0x6f, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, + 0x74, 0x12, 0x34, 0x0a, 0x0b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x73, + 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x56, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0a, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x53, 0x70, 0x65, 0x63, 0x73, 0x22, 0x39, 0x0a, 0x09, 0x44, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x69, 0x76, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x09, + 0x0a, 0x05, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x56, + 0x45, 0x52, 0x53, 0x45, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, + 0x10, 0x03, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x52, 0x08, 0x65, 0x78, 0x70, 0x6c, 0x69, 0x63, + 0x69, 0x74, 0x22, 0x4f, 0x0a, 0x0f, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x64, 0x65, + 0x78, 0x53, 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x07, 0x6f, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, + 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x69, 0x72, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x22, 0x34, 0x0a, 0x0a, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x69, + 0x72, 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, 0x22, 0x53, 0x0a, 0x0a, 0x54, 0x79, 0x70, + 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, + 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x22, 0x32, + 0x0a, 0x09, 0x4d, 0x61, 0x70, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x70, + 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0c, 0x52, 0x0d, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, + 0x79, 0x73, 0x22, 0xb2, 0x01, 0x0a, 0x14, 0x4d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x65, 0x64, 0x69, + 0x63, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, + 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x75, + 0x72, 0x63, 0x65, 0x5f, 0x67, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x73, + 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x69, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x64, 0x65, 0x73, 0x74, + 0x5f, 0x67, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x64, 0x65, 0x73, 0x74, + 0x47, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x74, 0x78, 0x6e, 0x5f, 0x74, 0x73, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x05, 0x74, 0x78, 0x6e, 0x54, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, + 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x22, 0x43, 0x0a, 0x09, 0x54, 0x78, 0x6e, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x73, 0x12, + 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x73, 0x22, 0xe4, 0x01, 0x0a, + 0x0b, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x04, + 0x74, 0x78, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x62, 0x2e, + 0x54, 0x78, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x04, 0x74, 0x78, 0x6e, 0x73, 0x12, + 0x21, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6d, 0x61, 0x78, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, + 0x65, 0x64, 0x12, 0x4c, 0x0a, 0x0f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x63, 0x68, 0x65, 0x63, + 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x62, + 0x2e, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x2e, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x0e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, + 0x1a, 0x41, 0x0a, 0x13, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, + 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0x1f, 0x0a, 0x0d, 0x54, 0x78, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x04, + 0x52, 0x02, 0x74, 0x73, 0x22, 0x26, 0x0a, 0x0c, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x5e, 0x0a, 0x09, + 0x52, 0x61, 0x66, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x29, 0x0a, 0x07, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, + 0x52, 0x61, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x78, 0x74, 0x12, 0x26, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x21, 0x0a, 0x09, + 0x44, 0x72, 0x61, 0x69, 0x6e, 0x6d, 0x6f, 0x64, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, + 0x36, 0x0a, 0x0e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x24, 0x0a, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x07, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x22, 0x50, 0x0a, 0x0d, 0x54, 0x61, 0x62, 0x6c, 0x65, + 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x24, 0x0a, 0x07, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x54, + 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x12, 0x19, + 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0x5d, 0x0a, 0x13, 0x53, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0c, 0x52, 0x08, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x07, + 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, + 0x62, 0x61, 0x64, 0x67, 0x65, 0x72, 0x70, 0x62, 0x34, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x52, + 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x22, 0x3b, 0x0a, 0x14, 0x53, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x23, 0x0a, 0x03, 0x6b, 0x76, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, + 0x62, 0x61, 0x64, 0x67, 0x65, 0x72, 0x70, 0x62, 0x34, 0x2e, 0x4b, 0x56, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x03, 0x6b, 0x76, 0x73, 0x22, 0xba, 0x01, 0x0a, 0x03, 0x4e, 0x75, 0x6d, 0x12, 0x10, 0x0a, + 0x03, 0x76, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x76, 0x61, 0x6c, 0x12, + 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x12, 0x1c, 0x0a, 0x09, + 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x09, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x65, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x75, + 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x62, 0x75, 0x6d, 0x70, 0x12, 0x25, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x11, 0x2e, 0x70, + 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x2e, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x2b, 0x0a, 0x09, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x4e, 0x53, 0x5f, 0x49, 0x44, 0x10, 0x00, 0x12, 0x07, 0x0a, + 0x03, 0x55, 0x49, 0x44, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x54, 0x58, 0x4e, 0x5f, 0x54, 0x53, + 0x10, 0x02, 0x22, 0x5a, 0x0a, 0x0b, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x49, 0x64, + 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x49, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x65, + 0x6e, 0x64, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x65, 0x6e, 0x64, 0x49, + 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, 0x22, 0x45, + 0x0a, 0x11, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0x65, 0x0a, 0x11, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, + 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, + 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6e, + 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, + 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x08, 0x64, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x22, 0x2f, 0x0a, 0x13, + 0x41, 0x70, 0x70, 0x6c, 0x79, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x22, 0x46, 0x0a, + 0x0c, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x1b, 0x0a, + 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, + 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0x2e, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, + 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, + 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0xd9, 0x02, 0x0a, 0x0d, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x65, 0x61, 0x64, 0x5f, + 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x72, 0x65, 0x61, 0x64, 0x54, 0x73, + 0x12, 0x19, 0x0a, 0x08, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, + 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x6e, 0x69, 0x78, 0x5f, 0x74, + 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x6e, 0x69, 0x78, 0x54, 0x73, 0x12, + 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4b, 0x65, 0x79, + 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, + 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, 0x75, + 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, + 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, + 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, + 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, 0x66, 0x75, 0x6c, 0x6c, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x46, 0x75, 0x6c, + 0x6c, 0x22, 0x4c, 0x0a, 0x0e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x0f, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x6f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x70, + 0x62, 0x2e, 0x44, 0x72, 0x6f, 0x70, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x0e, 0x64, 0x72, 0x6f, 0x70, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, + 0x90, 0x01, 0x0a, 0x0d, 0x44, 0x72, 0x6f, 0x70, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x31, 0x0a, 0x07, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x6f, 0x70, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x72, 0x6f, 0x70, 0x4f, 0x70, 0x65, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x72, 0x6f, 0x70, 0x4f, 0x70, 0x52, 0x06, 0x64, 0x72, + 0x6f, 0x70, 0x4f, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x72, 0x6f, 0x70, 0x56, 0x61, + 0x6c, 0x75, 0x65, 0x22, 0x2d, 0x0a, 0x06, 0x44, 0x72, 0x6f, 0x70, 0x4f, 0x70, 0x12, 0x07, 0x0a, + 0x03, 0x41, 0x4c, 0x4c, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x41, 0x54, 0x41, 0x10, 0x01, + 0x12, 0x08, 0x0a, 0x04, 0x41, 0x54, 0x54, 0x52, 0x10, 0x02, 0x12, 0x06, 0x0a, 0x02, 0x4e, 0x53, + 0x10, 0x03, 0x22, 0xb5, 0x02, 0x0a, 0x0d, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, - 0x19, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x73, 0x12, 0x26, 0x0a, 0x05, 0x65, 0x64, - 0x67, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x44, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x65, 0x64, 0x45, 0x64, 0x67, 0x65, 0x52, 0x05, 0x65, 0x64, 0x67, - 0x65, 0x73, 0x12, 0x28, 0x0a, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x04, 0x20, 0x03, + 0x17, 0x0a, 0x07, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x06, 0x72, 0x65, 0x61, 0x64, 0x54, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x6e, 0x69, 0x78, + 0x5f, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x6e, 0x69, 0x78, 0x54, + 0x73, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, + 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, + 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x61, + 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x09, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, + 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1c, + 0x0a, 0x09, 0x61, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x09, 0x61, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, + 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x4c, 0x0a, 0x0e, 0x45, 0x78, + 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, + 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, + 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, + 0x73, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x22, 0xab, 0x02, 0x0a, 0x09, 0x42, 0x61, 0x63, + 0x6b, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, + 0x4b, 0x65, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, + 0x65, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x74, 0x74, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x61, 0x74, 0x74, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, + 0x5f, 0x75, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x73, 0x74, 0x61, 0x72, + 0x74, 0x55, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x72, 0x6d, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x04, 0x74, 0x65, 0x72, 0x6d, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1c, + 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x68, 0x0a, 0x07, + 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, + 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x41, 0x54, 0x41, 0x10, 0x01, 0x12, 0x09, + 0x0a, 0x05, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x56, + 0x45, 0x52, 0x53, 0x45, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x10, + 0x04, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x52, 0x45, 0x56, 0x10, 0x05, + 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x43, 0x48, 0x45, 0x4d, 0x41, 0x10, 0x06, 0x12, 0x08, 0x0a, 0x04, + 0x54, 0x59, 0x50, 0x45, 0x10, 0x07, 0x22, 0xa2, 0x01, 0x0a, 0x11, 0x42, 0x61, 0x63, 0x6b, 0x75, + 0x70, 0x50, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, + 0x75, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x04, 0x52, 0x04, 0x75, 0x69, 0x64, 0x73, + 0x12, 0x27, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x52, + 0x08, 0x70, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x63, 0x6f, + 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x73, + 0x18, 0x04, 0x20, 0x03, 0x28, 0x04, 0x52, 0x06, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x73, 0x12, 0x1b, + 0x0a, 0x09, 0x75, 0x69, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x08, 0x75, 0x69, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, 0xc6, 0x01, 0x0a, 0x1a, + 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x61, 0x70, 0x68, 0x51, 0x4c, 0x53, 0x63, 0x68, + 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x74, + 0x61, 0x72, 0x74, 0x54, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x71, 0x6c, + 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x67, + 0x72, 0x61, 0x70, 0x68, 0x71, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x33, 0x0a, 0x0c, + 0x64, 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x70, 0x72, 0x65, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x52, 0x06, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x24, 0x0a, 0x05, - 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, - 0x2e, 0x54, 0x79, 0x70, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x05, 0x74, 0x79, 0x70, - 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x07, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x6f, 0x70, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x44, 0x72, 0x6f, 0x70, 0x4f, 0x70, 0x52, 0x06, 0x64, 0x72, 0x6f, 0x70, 0x4f, - 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x72, 0x6f, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x28, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x3e, 0x0a, 0x06, 0x44, 0x72, - 0x6f, 0x70, 0x4f, 0x70, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x07, - 0x0a, 0x03, 0x41, 0x4c, 0x4c, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x41, 0x54, 0x41, 0x10, - 0x02, 0x12, 0x08, 0x0a, 0x04, 0x54, 0x59, 0x50, 0x45, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x41, - 0x4c, 0x4c, 0x5f, 0x49, 0x4e, 0x5f, 0x4e, 0x53, 0x10, 0x04, 0x22, 0xca, 0x01, 0x0a, 0x08, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3a, 0x0a, 0x0a, 0x70, 0x72, 0x65, 0x64, 0x5f, - 0x68, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x62, - 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x72, 0x65, 0x64, 0x48, 0x69, - 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x70, 0x72, 0x65, 0x64, 0x48, 0x69, - 0x6e, 0x74, 0x73, 0x1a, 0x53, 0x0a, 0x0e, 0x50, 0x72, 0x65, 0x64, 0x48, 0x69, 0x6e, 0x74, 0x73, + 0x64, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x64, 0x67, 0x72, 0x61, 0x70, 0x68, 0x50, 0x72, 0x65, 0x64, + 0x73, 0x12, 0x31, 0x0a, 0x0c, 0x64, 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, + 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x79, 0x70, + 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x64, 0x67, 0x72, 0x61, 0x70, 0x68, 0x54, + 0x79, 0x70, 0x65, 0x73, 0x22, 0x2f, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, + 0x61, 0x70, 0x68, 0x51, 0x4c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x03, 0x75, 0x69, 0x64, 0x22, 0xdb, 0x01, 0x0a, 0x08, 0x42, 0x75, 0x6c, 0x6b, 0x4d, 0x65, + 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65, 0x64, 0x67, 0x65, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x12, 0x3a, 0x0a, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, 0x6d, 0x61, 0x70, 0x18, + 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x75, 0x6c, 0x6b, 0x4d, + 0x65, 0x74, 0x61, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, + 0x72, 0x79, 0x52, 0x09, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x61, 0x70, 0x12, 0x24, 0x0a, + 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, + 0x62, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x05, 0x74, 0x79, + 0x70, 0x65, 0x73, 0x1a, 0x4e, 0x0a, 0x0e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2b, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x2e, 0x48, 0x69, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x2d, 0x0a, 0x08, 0x48, 0x69, 0x6e, 0x74, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, - 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x49, 0x4e, 0x47, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x08, 0x0a, - 0x04, 0x4c, 0x49, 0x53, 0x54, 0x10, 0x02, 0x22, 0x93, 0x01, 0x0a, 0x08, 0x53, 0x6e, 0x61, 0x70, - 0x73, 0x68, 0x6f, 0x74, 0x12, 0x29, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x61, 0x66, 0x74, 0x43, - 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, - 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x73, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x72, 0x65, 0x61, 0x64, 0x54, 0x73, 0x12, 0x12, - 0x0a, 0x04, 0x64, 0x6f, 0x6e, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x64, 0x6f, - 0x6e, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x74, 0x73, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x73, 0x22, 0x74, 0x0a, - 0x0c, 0x5a, 0x65, 0x72, 0x6f, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x14, 0x0a, - 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x12, 0x23, 0x0a, 0x0d, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x5f, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0c, 0x63, 0x68, 0x65, 0x63, - 0x6b, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x54, 0x73, 0x12, 0x29, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x22, 0xdb, 0x05, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, + 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x63, 0x68, 0x65, + 0x6d, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, + 0x02, 0x38, 0x01, 0x22, 0x4a, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, - 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x5f, 0x74, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x54, 0x73, - 0x12, 0x1a, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, - 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x62, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x63, 0x72, - 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1c, 0x0a, 0x09, - 0x61, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x09, 0x61, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, 0x12, 0x2e, 0x0a, 0x13, 0x65, 0x6e, - 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x66, 0x69, 0x6c, - 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x61, - 0x75, 0x6c, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x76, 0x61, 0x75, 0x6c, 0x74, 0x41, 0x64, 0x64, 0x72, 0x12, 0x2a, 0x0a, 0x11, 0x76, 0x61, 0x75, - 0x6c, 0x74, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x69, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x6f, 0x6c, 0x65, 0x69, - 0x64, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x73, - 0x65, 0x63, 0x72, 0x65, 0x74, 0x69, 0x64, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x11, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x69, - 0x64, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x70, - 0x61, 0x74, 0x68, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x76, 0x61, 0x75, 0x6c, 0x74, - 0x50, 0x61, 0x74, 0x68, 0x12, 0x1f, 0x0a, 0x0b, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x66, 0x69, - 0x65, 0x6c, 0x64, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x76, 0x61, 0x75, 0x6c, 0x74, - 0x46, 0x69, 0x65, 0x6c, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x76, 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x76, 0x61, 0x75, - 0x6c, 0x74, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x61, 0x63, 0x6b, - 0x75, 0x70, 0x5f, 0x6e, 0x75, 0x6d, 0x18, 0x10, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x62, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x4e, 0x75, 0x6d, 0x12, 0x29, 0x0a, 0x10, 0x69, 0x6e, 0x63, 0x72, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x11, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0f, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x6c, 0x46, 0x72, - 0x6f, 0x6d, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x73, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, - 0x18, 0x12, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x69, 0x73, 0x50, 0x61, 0x72, 0x74, 0x69, 0x61, - 0x6c, 0x12, 0x24, 0x0a, 0x0d, 0x66, 0x72, 0x6f, 0x6d, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0d, 0x66, 0x72, 0x6f, 0x6d, 0x4e, 0x61, - 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x38, 0x0a, 0x17, 0x69, 0x73, 0x4e, 0x61, 0x6d, - 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x41, 0x77, 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x74, 0x6f, - 0x72, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x17, 0x69, 0x73, 0x4e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x41, 0x77, 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x22, 0xea, 0x03, 0x0a, 0x08, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x12, 0x2b, - 0x0a, 0x09, 0x6d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x52, 0x09, 0x6d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1d, 0x0a, 0x02, 0x6b, - 0x76, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x62, 0x61, 0x64, 0x67, 0x65, 0x72, - 0x70, 0x62, 0x34, 0x2e, 0x4b, 0x56, 0x52, 0x02, 0x6b, 0x76, 0x12, 0x29, 0x0a, 0x05, 0x73, 0x74, - 0x61, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x5f, 0x70, - 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, - 0x63, 0x6c, 0x65, 0x61, 0x6e, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x25, - 0x0a, 0x05, 0x64, 0x65, 0x6c, 0x74, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, - 0x70, 0x62, 0x2e, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x52, 0x05, - 0x64, 0x65, 0x6c, 0x74, 0x61, 0x12, 0x28, 0x0a, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x6e, 0x61, - 0x70, 0x73, 0x68, 0x6f, 0x74, 0x52, 0x08, 0x73, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, - 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, - 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x10, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, - 0x75, 0x6d, 0x12, 0x2c, 0x0a, 0x07, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x12, 0x29, 0x0a, 0x09, 0x63, 0x64, 0x63, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x0d, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x44, 0x43, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x08, 0x63, 0x64, 0x63, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x30, 0x0a, 0x09, 0x64, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x5f, 0x6e, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, + 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, + 0x2c, 0x0a, 0x11, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, 0x64, 0x22, 0x31, 0x0a, + 0x12, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x61, 0x73, 0x6b, 0x5f, 0x6d, 0x65, 0x74, 0x61, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x74, 0x61, 0x73, 0x6b, 0x4d, 0x65, 0x74, 0x61, + 0x32, 0xc4, 0x01, 0x0a, 0x04, 0x52, 0x61, 0x66, 0x74, 0x12, 0x2d, 0x0a, 0x09, 0x48, 0x65, 0x61, + 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x12, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x61, 0x79, + 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, + 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x00, 0x30, 0x01, 0x12, 0x2e, 0x0a, 0x0b, 0x52, 0x61, 0x66, 0x74, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0d, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x61, 0x66, + 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x1a, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x61, 0x79, + 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x28, 0x01, 0x12, 0x2e, 0x0a, 0x0b, 0x4a, 0x6f, 0x69, 0x6e, + 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x61, 0x66, + 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x1a, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, + 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x12, 0x2d, 0x0a, 0x06, 0x49, 0x73, 0x50, 0x65, + 0x65, 0x72, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x61, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x78, 0x74, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xe3, 0x05, 0x0a, 0x04, 0x5a, 0x65, 0x72, 0x6f, + 0x12, 0x2c, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, 0x0a, 0x2e, 0x70, 0x62, + 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x1a, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x43, 0x6f, 0x6e, + 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x00, 0x12, 0x2d, + 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, + 0x69, 0x70, 0x12, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x1a, 0x0c, 0x2e, + 0x61, 0x70, 0x69, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x12, 0x39, 0x0a, + 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, + 0x70, 0x12, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, + 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x2b, 0x0a, 0x06, 0x4f, 0x72, 0x61, 0x63, + 0x6c, 0x65, 0x12, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x1a, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x44, 0x65, 0x6c, 0x74, + 0x61, 0x22, 0x00, 0x30, 0x01, 0x12, 0x27, 0x0a, 0x0b, 0x53, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x53, + 0x65, 0x72, 0x76, 0x65, 0x12, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, + 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x22, 0x00, 0x12, 0x31, + 0x0a, 0x06, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, + 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x70, 0x62, + 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x00, 0x12, 0x27, 0x0a, 0x09, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x07, + 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x1a, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x73, 0x73, + 0x69, 0x67, 0x6e, 0x65, 0x64, 0x49, 0x64, 0x73, 0x22, 0x00, 0x12, 0x28, 0x0a, 0x0a, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x73, 0x12, 0x07, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x75, + 0x6d, 0x1a, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x49, + 0x64, 0x73, 0x22, 0x00, 0x12, 0x33, 0x0a, 0x0d, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x4f, 0x72, + 0x41, 0x62, 0x6f, 0x72, 0x74, 0x12, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x78, 0x6e, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x1a, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x78, 0x6e, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x00, 0x12, 0x30, 0x0a, 0x08, 0x54, 0x72, 0x79, + 0x41, 0x62, 0x6f, 0x72, 0x74, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x78, 0x6e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x73, 0x1a, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x4f, 0x72, + 0x61, 0x63, 0x6c, 0x65, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x22, 0x00, 0x12, 0x34, 0x0a, 0x0f, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x52, 0x08, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x73, 0x12, 0x19, 0x0a, - 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x73, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x22, 0x23, - 0x0a, 0x08, 0x43, 0x44, 0x43, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x73, 0x65, - 0x6e, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x73, 0x65, 0x6e, - 0x74, 0x54, 0x73, 0x22, 0x63, 0x0a, 0x03, 0x4b, 0x56, 0x53, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, - 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x12, - 0x0a, 0x04, 0x64, 0x6f, 0x6e, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x64, 0x6f, - 0x6e, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x22, 0x80, 0x04, 0x0a, 0x07, 0x50, 0x6f, 0x73, - 0x74, 0x69, 0x6e, 0x67, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x06, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2e, 0x0a, 0x08, - 0x76, 0x61, 0x6c, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, - 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x56, 0x61, 0x6c, 0x54, - 0x79, 0x70, 0x65, 0x52, 0x07, 0x76, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x3a, 0x0a, 0x0c, - 0x70, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, - 0x50, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x70, 0x6f, 0x73, - 0x74, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x6c, 0x61, 0x6e, 0x67, - 0x5f, 0x74, 0x61, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6c, 0x61, 0x6e, 0x67, - 0x54, 0x61, 0x67, 0x12, 0x22, 0x0a, 0x06, 0x66, 0x61, 0x63, 0x65, 0x74, 0x73, 0x18, 0x09, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x46, 0x61, 0x63, 0x65, 0x74, 0x52, - 0x06, 0x66, 0x61, 0x63, 0x65, 0x74, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x70, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x02, 0x6f, 0x70, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x5f, 0x74, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, - 0x54, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x74, 0x73, 0x18, - 0x0e, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x73, 0x22, - 0xa0, 0x01, 0x0a, 0x07, 0x56, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x44, - 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x42, 0x49, 0x4e, 0x41, - 0x52, 0x59, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x49, 0x4e, 0x54, 0x10, 0x02, 0x12, 0x09, 0x0a, - 0x05, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10, 0x03, 0x12, 0x08, 0x0a, 0x04, 0x42, 0x4f, 0x4f, 0x4c, - 0x10, 0x04, 0x12, 0x0c, 0x0a, 0x08, 0x44, 0x41, 0x54, 0x45, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x05, - 0x12, 0x07, 0x0a, 0x03, 0x47, 0x45, 0x4f, 0x10, 0x06, 0x12, 0x07, 0x0a, 0x03, 0x55, 0x49, 0x44, - 0x10, 0x07, 0x12, 0x0c, 0x0a, 0x08, 0x50, 0x41, 0x53, 0x53, 0x57, 0x4f, 0x52, 0x44, 0x10, 0x08, - 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x09, 0x12, 0x0a, 0x0a, 0x06, - 0x4f, 0x42, 0x4a, 0x45, 0x43, 0x54, 0x10, 0x0a, 0x12, 0x0c, 0x0a, 0x08, 0x42, 0x49, 0x47, 0x46, - 0x4c, 0x4f, 0x41, 0x54, 0x10, 0x0b, 0x12, 0x0a, 0x0a, 0x06, 0x56, 0x46, 0x4c, 0x4f, 0x41, 0x54, - 0x10, 0x0c, 0x22, 0x31, 0x0a, 0x0b, 0x50, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x54, 0x79, 0x70, - 0x65, 0x12, 0x07, 0x0a, 0x03, 0x52, 0x45, 0x46, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x56, 0x41, - 0x4c, 0x55, 0x45, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x5f, 0x4c, - 0x41, 0x4e, 0x47, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x22, 0x51, 0x0a, 0x08, 0x55, - 0x69, 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x61, 0x73, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x04, 0x62, 0x61, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x64, - 0x65, 0x6c, 0x74, 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x06, 0x64, 0x65, 0x6c, - 0x74, 0x61, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x69, 0x64, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x55, 0x69, 0x64, 0x73, 0x22, 0x6b, - 0x0a, 0x07, 0x55, 0x69, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x12, 0x1d, 0x0a, 0x0a, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x24, 0x0a, 0x06, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x69, - 0x64, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x06, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x12, 0x1b, - 0x0a, 0x09, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x5f, 0x72, 0x65, 0x66, 0x18, 0x17, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x08, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x52, 0x65, 0x66, 0x22, 0x8c, 0x01, 0x0a, 0x0b, - 0x50, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x04, 0x70, - 0x61, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x2e, 0x55, - 0x69, 0x64, 0x50, 0x61, 0x63, 0x6b, 0x52, 0x04, 0x70, 0x61, 0x63, 0x6b, 0x12, 0x27, 0x0a, 0x08, - 0x70, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, - 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x52, 0x08, 0x70, 0x6f, 0x73, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, - 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x54, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x04, 0x52, 0x06, 0x73, 0x70, 0x6c, 0x69, 0x74, 0x73, 0x22, 0x34, 0x0a, 0x0a, 0x46, 0x61, - 0x63, 0x65, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x6c, - 0x69, 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x61, 0x6c, 0x69, 0x61, 0x73, - 0x22, 0x4e, 0x0a, 0x0b, 0x46, 0x61, 0x63, 0x65, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, - 0x19, 0x0a, 0x08, 0x61, 0x6c, 0x6c, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x07, 0x61, 0x6c, 0x6c, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x24, 0x0a, 0x05, 0x70, 0x61, - 0x72, 0x61, 0x6d, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x46, - 0x61, 0x63, 0x65, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x52, 0x05, 0x70, 0x61, 0x72, 0x61, 0x6d, - 0x22, 0x2c, 0x0a, 0x06, 0x46, 0x61, 0x63, 0x65, 0x74, 0x73, 0x12, 0x22, 0x0a, 0x06, 0x66, 0x61, - 0x63, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x46, 0x61, 0x63, 0x65, 0x74, 0x52, 0x06, 0x66, 0x61, 0x63, 0x65, 0x74, 0x73, 0x22, 0x39, - 0x0a, 0x0a, 0x46, 0x61, 0x63, 0x65, 0x74, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x2b, 0x0a, 0x0b, - 0x66, 0x61, 0x63, 0x65, 0x74, 0x73, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x61, 0x63, 0x65, 0x74, 0x73, 0x52, 0x0a, 0x66, - 0x61, 0x63, 0x65, 0x74, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x44, 0x0a, 0x08, 0x46, 0x75, 0x6e, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x61, - 0x72, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x61, 0x72, 0x67, 0x73, 0x22, - 0x6a, 0x0a, 0x0a, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x72, 0x65, 0x65, 0x12, 0x0e, 0x0a, - 0x02, 0x6f, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x6f, 0x70, 0x12, 0x2a, 0x0a, - 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x54, 0x72, 0x65, 0x65, 0x52, - 0x08, 0x63, 0x68, 0x69, 0x6c, 0x64, 0x72, 0x65, 0x6e, 0x12, 0x20, 0x0a, 0x04, 0x66, 0x75, 0x6e, - 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x46, 0x75, 0x6e, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x04, 0x66, 0x75, 0x6e, 0x63, 0x22, 0x78, 0x0a, 0x0d, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, - 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x65, 0x64, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x65, - 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, - 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x73, 0x12, - 0x14, 0x0a, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, - 0x74, 0x79, 0x70, 0x65, 0x73, 0x22, 0xd1, 0x02, 0x0a, 0x0a, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x4e, 0x6f, 0x64, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, - 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1c, 0x0a, 0x09, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, - 0x09, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, - 0x76, 0x65, 0x72, 0x73, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x72, 0x65, 0x76, - 0x65, 0x72, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, - 0x73, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x16, - 0x0a, 0x06, 0x75, 0x70, 0x73, 0x65, 0x72, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, - 0x75, 0x70, 0x73, 0x65, 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x12, 0x1f, 0x0a, 0x0b, 0x6e, 0x6f, - 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0a, 0x6e, 0x6f, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x75, - 0x6e, 0x69, 0x71, 0x75, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x75, 0x6e, 0x69, - 0x71, 0x75, 0x65, 0x12, 0x34, 0x0a, 0x0b, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x73, 0x70, 0x65, - 0x63, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x56, 0x65, - 0x63, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x70, 0x65, 0x63, 0x52, 0x0a, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x53, 0x70, 0x65, 0x63, 0x73, 0x22, 0x3a, 0x0a, 0x0c, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2a, 0x0a, 0x06, 0x73, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x53, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4e, 0x6f, 0x64, 0x65, 0x42, 0x02, 0x18, 0x01, 0x52, 0x06, 0x73, - 0x63, 0x68, 0x65, 0x6d, 0x61, 0x22, 0xc1, 0x04, 0x0a, 0x0c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x65, 0x64, 0x69, - 0x63, 0x61, 0x74, 0x65, 0x12, 0x32, 0x0a, 0x0a, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, - 0x73, 0x74, 0x69, 0x6e, 0x67, 0x2e, 0x56, 0x61, 0x6c, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x38, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x70, 0x62, - 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x44, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x72, 0x18, - 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x69, 0x7a, 0x65, 0x72, - 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x6c, 0x69, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x70, - 0x73, 0x65, 0x72, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x75, 0x70, 0x73, 0x65, - 0x72, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x04, 0x6c, 0x61, 0x6e, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, - 0x18, 0x0e, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x75, 0x6e, 0x69, 0x71, 0x75, 0x65, 0x12, 0x21, - 0x0a, 0x0c, 0x6e, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x6e, 0x6f, 0x6e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, - 0x65, 0x12, 0x2a, 0x0a, 0x11, 0x6e, 0x6f, 0x6e, 0x5f, 0x6e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, - 0x65, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x6e, 0x6f, - 0x6e, 0x4e, 0x75, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x28, 0x0a, - 0x10, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x54, - 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6e, 0x6f, 0x5f, 0x63, 0x6f, - 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x6e, 0x6f, - 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x12, 0x34, 0x0a, 0x0b, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x5f, 0x73, 0x70, 0x65, 0x63, 0x73, 0x18, 0x0f, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x70, 0x62, 0x2e, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x70, - 0x65, 0x63, 0x52, 0x0a, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x70, 0x65, 0x63, 0x73, 0x22, 0x39, - 0x0a, 0x09, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x08, 0x0a, 0x04, 0x4e, - 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x10, 0x01, - 0x12, 0x0b, 0x0a, 0x07, 0x52, 0x45, 0x56, 0x45, 0x52, 0x53, 0x45, 0x10, 0x02, 0x12, 0x0a, 0x0a, - 0x06, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x07, 0x10, 0x08, 0x52, - 0x08, 0x65, 0x78, 0x70, 0x6c, 0x69, 0x63, 0x69, 0x74, 0x22, 0x4f, 0x0a, 0x0f, 0x56, 0x65, 0x63, - 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x53, 0x70, 0x65, 0x63, 0x12, 0x12, 0x0a, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x12, 0x28, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x69, - 0x72, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x34, 0x0a, 0x0a, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x69, 0x72, 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, - 0x22, 0x53, 0x0a, 0x0a, 0x54, 0x79, 0x70, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1b, - 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x28, 0x0a, 0x06, 0x66, - 0x69, 0x65, 0x6c, 0x64, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, - 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x06, 0x66, - 0x69, 0x65, 0x6c, 0x64, 0x73, 0x22, 0x32, 0x0a, 0x09, 0x4d, 0x61, 0x70, 0x48, 0x65, 0x61, 0x64, - 0x65, 0x72, 0x12, 0x25, 0x0a, 0x0e, 0x70, 0x61, 0x72, 0x74, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x0d, 0x70, 0x61, 0x72, 0x74, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x22, 0xb2, 0x01, 0x0a, 0x14, 0x4d, 0x6f, + 0x65, 0x73, 0x74, 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, + 0x00, 0x12, 0x31, 0x0a, 0x0a, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x12, + 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4e, 0x6f, 0x64, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x0a, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x74, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x54, 0x61, 0x62, 0x6c, + 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x0c, 0x41, 0x70, 0x70, 0x6c, 0x79, + 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x70, 0x70, + 0x6c, 0x79, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x2d, + 0x0a, 0x0e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x44, 0x72, 0x61, 0x69, 0x6e, 0x6d, 0x6f, 0x64, 0x65, + 0x12, 0x0d, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x72, 0x61, 0x69, 0x6e, 0x6d, 0x6f, 0x64, 0x65, 0x1a, + 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x32, 0x9d, 0x06, + 0x0a, 0x06, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x2a, 0x0a, 0x06, 0x4d, 0x75, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x0d, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x1a, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x78, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x78, 0x74, 0x22, 0x00, 0x12, 0x24, 0x0a, 0x09, 0x53, 0x65, 0x72, 0x76, 0x65, 0x54, 0x61, 0x73, + 0x6b, 0x12, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x1a, 0x0a, 0x2e, 0x70, + 0x62, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x12, 0x2d, 0x0a, 0x0e, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x12, 0x0c, 0x2e, 0x70, + 0x62, 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x1a, 0x07, 0x2e, 0x70, 0x62, 0x2e, + 0x4b, 0x56, 0x53, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x29, 0x0a, 0x04, 0x53, 0x6f, 0x72, + 0x74, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x1a, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x22, 0x00, 0x12, 0x2f, 0x0a, 0x06, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x11, + 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x06, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x12, + 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x2b, 0x0a, 0x07, 0x52, 0x65, 0x73, 0x74, + 0x6f, 0x72, 0x65, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x06, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x12, + 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x2d, 0x0a, 0x10, 0x52, 0x65, 0x63, 0x65, + 0x69, 0x76, 0x65, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x07, 0x2e, 0x70, + 0x62, 0x2e, 0x4b, 0x56, 0x53, 0x1a, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x22, 0x00, 0x28, 0x01, 0x12, 0x39, 0x0a, 0x0d, 0x4d, 0x6f, 0x76, 0x65, 0x50, + 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x67, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x47, 0x69, 0x64, 0x12, - 0x19, 0x0a, 0x08, 0x64, 0x65, 0x73, 0x74, 0x5f, 0x67, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x07, 0x64, 0x65, 0x73, 0x74, 0x47, 0x69, 0x64, 0x12, 0x15, 0x0a, 0x06, 0x74, 0x78, - 0x6e, 0x5f, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, 0x74, 0x78, 0x6e, 0x54, - 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x65, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x68, - 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, 0x65, 0x78, - 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x22, 0x43, - 0x0a, 0x09, 0x54, 0x78, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x54, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x5f, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x69, - 0x74, 0x54, 0x73, 0x22, 0xe4, 0x01, 0x0a, 0x0b, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x44, 0x65, - 0x6c, 0x74, 0x61, 0x12, 0x21, 0x0a, 0x04, 0x74, 0x78, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x0d, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x78, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x04, 0x74, 0x78, 0x6e, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x61, 0x78, 0x5f, 0x61, 0x73, - 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6d, 0x61, - 0x78, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x12, 0x4c, 0x0a, 0x0f, 0x67, 0x72, 0x6f, - 0x75, 0x70, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x70, 0x62, 0x2e, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x44, 0x65, - 0x6c, 0x74, 0x61, 0x2e, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, - 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0e, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x1a, 0x41, 0x0a, 0x13, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x43, 0x68, 0x65, 0x63, 0x6b, 0x73, 0x75, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x1f, 0x0a, 0x0d, 0x54, 0x78, - 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x73, 0x12, 0x0e, 0x0a, 0x02, 0x74, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x04, 0x52, 0x02, 0x74, 0x73, 0x22, 0x26, 0x0a, 0x0c, 0x50, - 0x65, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x22, 0x5e, 0x0a, 0x09, 0x52, 0x61, 0x66, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, - 0x12, 0x29, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x61, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, - 0x78, 0x74, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x26, 0x0a, 0x07, 0x70, - 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x22, 0x36, 0x0a, 0x0e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x62, 0x6c, - 0x65, 0x74, 0x52, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x22, 0x50, 0x0a, 0x0d, 0x54, - 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x24, 0x0a, 0x07, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, - 0x70, 0x62, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x07, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x74, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0x5d, 0x0a, - 0x13, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x08, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x65, 0x73, - 0x12, 0x2a, 0x0a, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x62, 0x61, 0x64, 0x67, 0x65, 0x72, 0x70, 0x62, 0x34, 0x2e, 0x4d, 0x61, - 0x74, 0x63, 0x68, 0x52, 0x07, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x65, 0x73, 0x22, 0x3b, 0x0a, 0x14, - 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x03, 0x6b, 0x76, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x11, 0x2e, 0x62, 0x61, 0x64, 0x67, 0x65, 0x72, 0x70, 0x62, 0x34, 0x2e, 0x4b, 0x56, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x03, 0x6b, 0x76, 0x73, 0x22, 0xba, 0x01, 0x0a, 0x03, 0x4e, 0x75, - 0x6d, 0x12, 0x10, 0x0a, 0x03, 0x76, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, - 0x76, 0x61, 0x6c, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, 0x6c, 0x79, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, 0x6c, 0x79, - 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x65, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x09, 0x66, 0x6f, 0x72, 0x77, 0x61, 0x72, 0x64, 0x65, 0x64, 0x12, 0x12, - 0x0a, 0x04, 0x62, 0x75, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x62, 0x75, - 0x6d, 0x70, 0x12, 0x25, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x2e, 0x6c, 0x65, 0x61, 0x73, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x2b, 0x0a, 0x09, 0x6c, 0x65, 0x61, - 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x4e, 0x53, 0x5f, 0x49, 0x44, 0x10, - 0x00, 0x12, 0x07, 0x0a, 0x03, 0x55, 0x49, 0x44, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x54, 0x58, - 0x4e, 0x5f, 0x54, 0x53, 0x10, 0x02, 0x22, 0x5a, 0x0a, 0x0b, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, - 0x65, 0x64, 0x49, 0x64, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x49, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x49, 0x64, 0x12, - 0x14, 0x0a, 0x05, 0x65, 0x6e, 0x64, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x05, - 0x65, 0x6e, 0x64, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x6f, 0x6e, - 0x6c, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x72, 0x65, 0x61, 0x64, 0x4f, 0x6e, - 0x6c, 0x79, 0x22, 0x45, 0x0a, 0x11, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4e, 0x6f, 0x64, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x64, 0x12, - 0x18, 0x0a, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0x65, 0x0a, 0x11, 0x4d, 0x6f, 0x76, - 0x65, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1c, - 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x74, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x64, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x64, 0x73, 0x74, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x22, 0x2f, 0x0a, 0x13, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, - 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6c, 0x69, 0x63, 0x65, 0x6e, 0x73, - 0x65, 0x22, 0x46, 0x0a, 0x0c, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x73, 0x12, 0x19, - 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x22, 0x2e, 0x0a, 0x06, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x05, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x22, 0xd9, 0x02, 0x0a, 0x0d, 0x42, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x72, - 0x65, 0x61, 0x64, 0x5f, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x72, 0x65, - 0x61, 0x64, 0x54, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x5f, 0x74, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x73, 0x69, 0x6e, 0x63, 0x65, 0x54, 0x73, 0x12, - 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0d, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x6e, - 0x69, 0x78, 0x5f, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x75, 0x6e, 0x69, - 0x78, 0x54, 0x73, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, - 0x6b, 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x4b, 0x65, 0x79, 0x12, 0x1d, 0x0a, 0x0a, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x6b, - 0x65, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, - 0x4b, 0x65, 0x79, 0x12, 0x23, 0x0a, 0x0d, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x6e, 0x6f, 0x6e, - 0x79, 0x6d, 0x6f, 0x75, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x6e, 0x6f, - 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x72, 0x65, 0x64, 0x69, 0x63, - 0x61, 0x74, 0x65, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x70, 0x72, 0x65, 0x64, - 0x69, 0x63, 0x61, 0x74, 0x65, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x66, 0x6f, 0x72, 0x63, 0x65, 0x5f, - 0x66, 0x75, 0x6c, 0x6c, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x66, 0x6f, 0x72, 0x63, - 0x65, 0x46, 0x75, 0x6c, 0x6c, 0x22, 0x4c, 0x0a, 0x0e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x0f, 0x64, 0x72, 0x6f, 0x70, 0x5f, - 0x6f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x72, 0x6f, 0x70, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x64, 0x72, 0x6f, 0x70, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x22, 0x90, 0x01, 0x0a, 0x0d, 0x44, 0x72, 0x6f, 0x70, 0x4f, 0x70, 0x65, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x07, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x6f, 0x70, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x72, 0x6f, 0x70, - 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x44, 0x72, 0x6f, 0x70, 0x4f, 0x70, - 0x52, 0x06, 0x64, 0x72, 0x6f, 0x70, 0x4f, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x64, 0x72, 0x6f, 0x70, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x72, - 0x6f, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2d, 0x0a, 0x06, 0x44, 0x72, 0x6f, 0x70, 0x4f, - 0x70, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x4c, 0x4c, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x41, - 0x54, 0x41, 0x10, 0x01, 0x12, 0x08, 0x0a, 0x04, 0x41, 0x54, 0x54, 0x52, 0x10, 0x02, 0x12, 0x06, - 0x0a, 0x02, 0x4e, 0x53, 0x10, 0x03, 0x22, 0xb5, 0x02, 0x0a, 0x0d, 0x45, 0x78, 0x70, 0x6f, 0x72, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, 0x6f, 0x75, - 0x70, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x72, 0x65, 0x61, 0x64, 0x54, 0x73, 0x12, 0x17, 0x0a, 0x07, - 0x75, 0x6e, 0x69, 0x78, 0x5f, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, - 0x6e, 0x69, 0x78, 0x54, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x20, 0x0a, - 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x64, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x1d, 0x0a, 0x0a, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x1d, - 0x0a, 0x0a, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x4b, 0x65, 0x79, 0x12, 0x23, 0x0a, - 0x0d, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x61, 0x6e, 0x6f, 0x6e, 0x79, 0x6d, 0x6f, 0x75, 0x73, - 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x0a, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x22, 0x4c, - 0x0a, 0x0e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x12, 0x0a, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, - 0x63, 0x6f, 0x64, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x6d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x03, 0x6d, 0x73, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x22, 0xab, 0x02, 0x0a, - 0x09, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x4b, 0x65, 0x79, 0x2e, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x52, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x61, 0x74, 0x74, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x61, 0x74, 0x74, 0x72, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x75, 0x69, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x73, - 0x74, 0x61, 0x72, 0x74, 0x5f, 0x75, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x55, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x72, 0x6d, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x74, 0x65, 0x72, 0x6d, 0x12, 0x14, 0x0a, 0x05, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, - 0x22, 0x68, 0x0a, 0x07, 0x4b, 0x65, 0x79, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, - 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x41, 0x54, 0x41, - 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x44, 0x45, 0x58, 0x10, 0x02, 0x12, 0x0b, 0x0a, - 0x07, 0x52, 0x45, 0x56, 0x45, 0x52, 0x53, 0x45, 0x10, 0x03, 0x12, 0x09, 0x0a, 0x05, 0x43, 0x4f, - 0x55, 0x4e, 0x54, 0x10, 0x04, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x55, 0x4e, 0x54, 0x5f, 0x52, - 0x45, 0x56, 0x10, 0x05, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x43, 0x48, 0x45, 0x4d, 0x41, 0x10, 0x06, - 0x12, 0x08, 0x0a, 0x04, 0x54, 0x59, 0x50, 0x45, 0x10, 0x07, 0x22, 0xa2, 0x01, 0x0a, 0x11, 0x42, - 0x61, 0x63, 0x6b, 0x75, 0x70, 0x50, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x4c, 0x69, 0x73, 0x74, - 0x12, 0x12, 0x0a, 0x04, 0x75, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x04, 0x52, 0x04, - 0x75, 0x69, 0x64, 0x73, 0x12, 0x27, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x6f, 0x73, 0x74, - 0x69, 0x6e, 0x67, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x1b, 0x0a, - 0x09, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x54, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x70, - 0x6c, 0x69, 0x74, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x04, 0x52, 0x06, 0x73, 0x70, 0x6c, 0x69, - 0x74, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x69, 0x64, 0x5f, 0x62, 0x79, 0x74, 0x65, 0x73, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x75, 0x69, 0x64, 0x42, 0x79, 0x74, 0x65, 0x73, 0x22, - 0xc6, 0x01, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x61, 0x70, 0x68, 0x51, - 0x4c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, - 0x0a, 0x08, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x07, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x73, 0x12, 0x25, 0x0a, 0x0e, 0x67, 0x72, 0x61, - 0x70, 0x68, 0x71, 0x6c, 0x5f, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x67, 0x72, 0x61, 0x70, 0x68, 0x71, 0x6c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, - 0x12, 0x33, 0x0a, 0x0c, 0x64, 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, 0x70, 0x72, 0x65, 0x64, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x64, 0x67, 0x72, 0x61, 0x70, 0x68, - 0x50, 0x72, 0x65, 0x64, 0x73, 0x12, 0x31, 0x0a, 0x0c, 0x64, 0x67, 0x72, 0x61, 0x70, 0x68, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, - 0x2e, 0x54, 0x79, 0x70, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x0b, 0x64, 0x67, 0x72, - 0x61, 0x70, 0x68, 0x54, 0x79, 0x70, 0x65, 0x73, 0x22, 0x2f, 0x0a, 0x1b, 0x55, 0x70, 0x64, 0x61, + 0x61, 0x64, 0x1a, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x22, 0x00, 0x12, 0x3b, 0x0a, 0x09, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, + 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, 0x62, 0x61, 0x64, 0x67, 0x65, + 0x72, 0x70, 0x62, 0x34, 0x2e, 0x4b, 0x56, 0x4c, 0x69, 0x73, 0x74, 0x22, 0x00, 0x30, 0x01, 0x12, + 0x58, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x61, 0x70, 0x68, 0x51, 0x4c, + 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x1e, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x61, 0x70, 0x68, 0x51, 0x4c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x03, 0x75, 0x69, 0x64, 0x22, 0xdb, 0x01, 0x0a, 0x08, 0x42, 0x75, - 0x6c, 0x6b, 0x4d, 0x65, 0x74, 0x61, 0x12, 0x1d, 0x0a, 0x0a, 0x65, 0x64, 0x67, 0x65, 0x5f, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x65, 0x64, 0x67, 0x65, - 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x3a, 0x0a, 0x0a, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x5f, - 0x6d, 0x61, 0x70, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x70, 0x62, 0x2e, 0x42, - 0x75, 0x6c, 0x6b, 0x4d, 0x65, 0x74, 0x61, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x61, - 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x73, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x4d, 0x61, - 0x70, 0x12, 0x24, 0x0a, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x52, 0x05, 0x74, 0x79, 0x70, 0x65, 0x73, 0x1a, 0x4e, 0x0a, 0x0e, 0x53, 0x63, 0x68, 0x65, 0x6d, - 0x61, 0x4d, 0x61, 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x70, 0x62, 0x2e, - 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x4a, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x4e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x07, 0x67, 0x72, - 0x6f, 0x75, 0x70, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, - 0x61, 0x63, 0x65, 0x22, 0x2c, 0x0a, 0x11, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x74, 0x61, 0x73, 0x6b, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x74, 0x61, 0x73, 0x6b, 0x49, - 0x64, 0x22, 0x31, 0x0a, 0x12, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x61, 0x73, 0x6b, 0x5f, - 0x6d, 0x65, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x74, 0x61, 0x73, 0x6b, - 0x4d, 0x65, 0x74, 0x61, 0x32, 0xc4, 0x01, 0x0a, 0x04, 0x52, 0x61, 0x66, 0x74, 0x12, 0x2d, 0x0a, - 0x09, 0x48, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x12, 0x0c, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x48, 0x65, - 0x61, 0x6c, 0x74, 0x68, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x00, 0x30, 0x01, 0x12, 0x2e, 0x0a, 0x0b, - 0x52, 0x61, 0x66, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0d, 0x2e, 0x70, 0x62, - 0x2e, 0x52, 0x61, 0x66, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x1a, 0x0c, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x28, 0x01, 0x12, 0x2e, 0x0a, 0x0b, - 0x4a, 0x6f, 0x69, 0x6e, 0x43, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x0f, 0x2e, 0x70, 0x62, - 0x2e, 0x52, 0x61, 0x66, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x1a, 0x0c, 0x2e, 0x61, - 0x70, 0x69, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x12, 0x2d, 0x0a, 0x06, - 0x49, 0x73, 0x50, 0x65, 0x65, 0x72, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x61, 0x66, 0x74, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x50, 0x65, 0x65, - 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x32, 0xb4, 0x05, 0x0a, 0x04, - 0x5a, 0x65, 0x72, 0x6f, 0x12, 0x2c, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x12, - 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x1a, 0x13, 0x2e, 0x70, 0x62, - 0x2e, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x22, 0x00, 0x12, 0x2d, 0x0a, 0x10, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x12, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x1a, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, - 0x00, 0x12, 0x39, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x73, 0x68, 0x69, 0x70, 0x12, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x1a, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, - 0x68, 0x69, 0x70, 0x53, 0x74, 0x61, 0x74, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x2b, 0x0a, 0x06, - 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x12, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, - 0x44, 0x65, 0x6c, 0x74, 0x61, 0x22, 0x00, 0x30, 0x01, 0x12, 0x27, 0x0a, 0x0b, 0x53, 0x68, 0x6f, - 0x75, 0x6c, 0x64, 0x53, 0x65, 0x72, 0x76, 0x65, 0x12, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, - 0x62, 0x6c, 0x65, 0x74, 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, - 0x22, 0x00, 0x12, 0x31, 0x0a, 0x06, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x11, 0x2e, 0x70, - 0x62, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x27, 0x0a, 0x09, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x49, - 0x64, 0x73, 0x12, 0x07, 0x2e, 0x70, 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x1a, 0x0f, 0x2e, 0x70, 0x62, - 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x49, 0x64, 0x73, 0x22, 0x00, 0x12, 0x28, - 0x0a, 0x0a, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x73, 0x12, 0x07, 0x2e, 0x70, - 0x62, 0x2e, 0x4e, 0x75, 0x6d, 0x1a, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x41, 0x73, 0x73, 0x69, 0x67, - 0x6e, 0x65, 0x64, 0x49, 0x64, 0x73, 0x22, 0x00, 0x12, 0x33, 0x0a, 0x0d, 0x43, 0x6f, 0x6d, 0x6d, - 0x69, 0x74, 0x4f, 0x72, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x12, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, - 0x54, 0x78, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x1a, 0x0f, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x54, 0x78, 0x6e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x00, 0x12, 0x30, 0x0a, - 0x08, 0x54, 0x72, 0x79, 0x41, 0x62, 0x6f, 0x72, 0x74, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x54, - 0x78, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x73, 0x1a, 0x0f, 0x2e, 0x70, - 0x62, 0x2e, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x44, 0x65, 0x6c, 0x74, 0x61, 0x22, 0x00, 0x12, - 0x34, 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, - 0x63, 0x65, 0x12, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x0a, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4e, - 0x6f, 0x64, 0x65, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x4e, - 0x6f, 0x64, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x2e, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x0a, 0x4d, 0x6f, 0x76, 0x65, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x6f, 0x76, 0x65, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0a, 0x2e, - 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x35, 0x0a, 0x0c, 0x41, - 0x70, 0x70, 0x6c, 0x79, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x12, 0x17, 0x2e, 0x70, 0x62, - 0x2e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x4c, 0x69, 0x63, 0x65, 0x6e, 0x73, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x22, 0x00, 0x32, 0xee, 0x05, 0x0a, 0x06, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x12, 0x2a, 0x0a, - 0x06, 0x4d, 0x75, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0d, 0x2e, 0x70, 0x62, 0x2e, 0x4d, 0x75, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x0f, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x54, 0x78, 0x6e, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x22, 0x00, 0x12, 0x24, 0x0a, 0x09, 0x53, 0x65, 0x72, - 0x76, 0x65, 0x54, 0x61, 0x73, 0x6b, 0x12, 0x09, 0x2e, 0x70, 0x62, 0x2e, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x12, - 0x2d, 0x0a, 0x0e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, - 0x74, 0x12, 0x0c, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x6e, 0x61, 0x70, 0x73, 0x68, 0x6f, 0x74, 0x1a, - 0x07, 0x2e, 0x70, 0x62, 0x2e, 0x4b, 0x56, 0x53, 0x22, 0x00, 0x28, 0x01, 0x30, 0x01, 0x12, 0x29, - 0x0a, 0x04, 0x53, 0x6f, 0x72, 0x74, 0x12, 0x0f, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x6f, 0x72, 0x74, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x6f, 0x72, - 0x74, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x12, 0x2f, 0x0a, 0x06, 0x53, 0x63, 0x68, - 0x65, 0x6d, 0x61, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x10, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x61, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x06, 0x42, 0x61, - 0x63, 0x6b, 0x75, 0x70, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x61, 0x63, 0x6b, 0x75, 0x70, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x42, 0x61, 0x63, - 0x6b, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x2b, 0x0a, - 0x07, 0x52, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x52, 0x65, - 0x73, 0x74, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0a, 0x2e, 0x70, - 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x31, 0x0a, 0x06, 0x45, 0x78, - 0x70, 0x6f, 0x72, 0x74, 0x12, 0x11, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x78, 0x70, 0x6f, 0x72, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x70, 0x62, 0x2e, 0x45, 0x78, 0x70, - 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x2d, 0x0a, - 0x10, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, - 0x65, 0x12, 0x07, 0x2e, 0x70, 0x62, 0x2e, 0x4b, 0x56, 0x53, 0x1a, 0x0c, 0x2e, 0x61, 0x70, 0x69, - 0x2e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x28, 0x01, 0x12, 0x39, 0x0a, 0x0d, - 0x4d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, 0x12, 0x18, 0x2e, - 0x70, 0x62, 0x2e, 0x4d, 0x6f, 0x76, 0x65, 0x50, 0x72, 0x65, 0x64, 0x69, 0x63, 0x61, 0x74, 0x65, - 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x0c, 0x2e, 0x61, 0x70, 0x69, 0x2e, 0x50, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x00, 0x12, 0x3b, 0x0a, 0x09, 0x53, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x62, 0x65, 0x12, 0x17, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x11, 0x2e, - 0x62, 0x61, 0x64, 0x67, 0x65, 0x72, 0x70, 0x62, 0x34, 0x2e, 0x4b, 0x56, 0x4c, 0x69, 0x73, 0x74, - 0x22, 0x00, 0x30, 0x01, 0x12, 0x58, 0x0a, 0x13, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, - 0x61, 0x70, 0x68, 0x51, 0x4c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x12, 0x1e, 0x2e, 0x70, 0x62, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x61, 0x70, 0x68, 0x51, 0x4c, 0x53, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x70, 0x62, - 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x72, 0x61, 0x70, 0x68, 0x51, 0x4c, 0x53, 0x63, - 0x68, 0x65, 0x6d, 0x61, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x34, - 0x0a, 0x0f, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, - 0x65, 0x12, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x22, 0x00, 0x12, 0x3d, 0x0a, 0x0a, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x54, - 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x00, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x70, 0x62, 0x2e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x47, 0x72, 0x61, 0x70, 0x68, 0x51, 0x4c, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x61, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x34, 0x0a, 0x0f, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x13, 0x2e, 0x70, + 0x62, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4e, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, + 0x3d, 0x0a, 0x0a, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x15, 0x2e, + 0x70, 0x62, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x70, 0x62, 0x2e, 0x54, 0x61, 0x73, 0x6b, 0x53, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x2d, + 0x0a, 0x0e, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x44, 0x72, 0x61, 0x69, 0x6e, 0x6d, 0x6f, 0x64, 0x65, + 0x12, 0x0d, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x72, 0x61, 0x69, 0x6e, 0x6d, 0x6f, 0x64, 0x65, 0x1a, + 0x0a, 0x2e, 0x70, 0x62, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x42, 0x06, 0x5a, + 0x04, 0x2e, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -7136,7 +7211,7 @@ func file_pb_proto_rawDescGZIP() []byte { } var file_pb_proto_enumTypes = make([]protoimpl.EnumInfo, 9) -var file_pb_proto_msgTypes = make([]protoimpl.MessageInfo, 85) +var file_pb_proto_msgTypes = make([]protoimpl.MessageInfo, 86) var file_pb_proto_goTypes = []interface{}{ (DirectedEdge_Op)(0), // 0: pb.DirectedEdge.Op (Mutations_DropOp)(0), // 1: pb.Mutations.DropOp @@ -7199,45 +7274,46 @@ var file_pb_proto_goTypes = []interface{}{ (*TxnTimestamps)(nil), // 58: pb.TxnTimestamps (*PeerResponse)(nil), // 59: pb.PeerResponse (*RaftBatch)(nil), // 60: pb.RaftBatch - (*TabletResponse)(nil), // 61: pb.TabletResponse - (*TabletRequest)(nil), // 62: pb.TabletRequest - (*SubscriptionRequest)(nil), // 63: pb.SubscriptionRequest - (*SubscriptionResponse)(nil), // 64: pb.SubscriptionResponse - (*Num)(nil), // 65: pb.Num - (*AssignedIds)(nil), // 66: pb.AssignedIds - (*RemoveNodeRequest)(nil), // 67: pb.RemoveNodeRequest - (*MoveTabletRequest)(nil), // 68: pb.MoveTabletRequest - (*ApplyLicenseRequest)(nil), // 69: pb.ApplyLicenseRequest - (*SnapshotMeta)(nil), // 70: pb.SnapshotMeta - (*Status)(nil), // 71: pb.Status - (*BackupRequest)(nil), // 72: pb.BackupRequest - (*BackupResponse)(nil), // 73: pb.BackupResponse - (*DropOperation)(nil), // 74: pb.DropOperation - (*ExportRequest)(nil), // 75: pb.ExportRequest - (*ExportResponse)(nil), // 76: pb.ExportResponse - (*BackupKey)(nil), // 77: pb.BackupKey - (*BackupPostingList)(nil), // 78: pb.BackupPostingList - (*UpdateGraphQLSchemaRequest)(nil), // 79: pb.UpdateGraphQLSchemaRequest - (*UpdateGraphQLSchemaResponse)(nil), // 80: pb.UpdateGraphQLSchemaResponse - (*BulkMeta)(nil), // 81: pb.BulkMeta - (*DeleteNsRequest)(nil), // 82: pb.DeleteNsRequest - (*TaskStatusRequest)(nil), // 83: pb.TaskStatusRequest - (*TaskStatusResponse)(nil), // 84: pb.TaskStatusResponse - nil, // 85: pb.Result.VectorMetricsEntry - nil, // 86: pb.Group.MembersEntry - nil, // 87: pb.Group.TabletsEntry - nil, // 88: pb.ZeroProposal.SnapshotTsEntry - nil, // 89: pb.MembershipState.GroupsEntry - nil, // 90: pb.MembershipState.ZerosEntry - nil, // 91: pb.Metadata.PredHintsEntry - nil, // 92: pb.OracleDelta.GroupChecksumsEntry - nil, // 93: pb.BulkMeta.SchemaMapEntry - (*api.TxnContext)(nil), // 94: api.TxnContext - (*api.Facet)(nil), // 95: api.Facet - (*pb.KV)(nil), // 96: badgerpb4.KV - (*api.Payload)(nil), // 97: api.Payload - (*pb.Match)(nil), // 98: badgerpb4.Match - (*pb.KVList)(nil), // 99: badgerpb4.KVList + (*Drainmode)(nil), // 61: pb.Drainmode + (*TabletResponse)(nil), // 62: pb.TabletResponse + (*TabletRequest)(nil), // 63: pb.TabletRequest + (*SubscriptionRequest)(nil), // 64: pb.SubscriptionRequest + (*SubscriptionResponse)(nil), // 65: pb.SubscriptionResponse + (*Num)(nil), // 66: pb.Num + (*AssignedIds)(nil), // 67: pb.AssignedIds + (*RemoveNodeRequest)(nil), // 68: pb.RemoveNodeRequest + (*MoveTabletRequest)(nil), // 69: pb.MoveTabletRequest + (*ApplyLicenseRequest)(nil), // 70: pb.ApplyLicenseRequest + (*SnapshotMeta)(nil), // 71: pb.SnapshotMeta + (*Status)(nil), // 72: pb.Status + (*BackupRequest)(nil), // 73: pb.BackupRequest + (*BackupResponse)(nil), // 74: pb.BackupResponse + (*DropOperation)(nil), // 75: pb.DropOperation + (*ExportRequest)(nil), // 76: pb.ExportRequest + (*ExportResponse)(nil), // 77: pb.ExportResponse + (*BackupKey)(nil), // 78: pb.BackupKey + (*BackupPostingList)(nil), // 79: pb.BackupPostingList + (*UpdateGraphQLSchemaRequest)(nil), // 80: pb.UpdateGraphQLSchemaRequest + (*UpdateGraphQLSchemaResponse)(nil), // 81: pb.UpdateGraphQLSchemaResponse + (*BulkMeta)(nil), // 82: pb.BulkMeta + (*DeleteNsRequest)(nil), // 83: pb.DeleteNsRequest + (*TaskStatusRequest)(nil), // 84: pb.TaskStatusRequest + (*TaskStatusResponse)(nil), // 85: pb.TaskStatusResponse + nil, // 86: pb.Result.VectorMetricsEntry + nil, // 87: pb.Group.MembersEntry + nil, // 88: pb.Group.TabletsEntry + nil, // 89: pb.ZeroProposal.SnapshotTsEntry + nil, // 90: pb.MembershipState.GroupsEntry + nil, // 91: pb.MembershipState.ZerosEntry + nil, // 92: pb.Metadata.PredHintsEntry + nil, // 93: pb.OracleDelta.GroupChecksumsEntry + nil, // 94: pb.BulkMeta.SchemaMapEntry + (*api.TxnContext)(nil), // 95: api.TxnContext + (*api.Facet)(nil), // 96: api.Facet + (*pb.KV)(nil), // 97: badgerpb4.KV + (*api.Payload)(nil), // 98: api.Payload + (*pb.Match)(nil), // 99: badgerpb4.Match + (*pb.KVList)(nil), // 100: badgerpb4.KVList } var file_pb_proto_depIdxs = []int32{ 3, // 0: pb.TaskValue.val_type:type_name -> pb.Posting.ValType @@ -7250,155 +7326,160 @@ var file_pb_proto_depIdxs = []int32{ 13, // 7: pb.Result.value_matrix:type_name -> pb.ValueList 44, // 8: pb.Result.facet_matrix:type_name -> pb.FacetsList 14, // 9: pb.Result.lang_matrix:type_name -> pb.LangList - 85, // 10: pb.Result.vector_metrics:type_name -> pb.Result.VectorMetricsEntry + 86, // 10: pb.Result.vector_metrics:type_name -> pb.Result.VectorMetricsEntry 16, // 11: pb.SortMessage.order:type_name -> pb.Order 9, // 12: pb.SortMessage.uid_matrix:type_name -> pb.List 9, // 13: pb.SortResult.uid_matrix:type_name -> pb.List - 86, // 14: pb.Group.members:type_name -> pb.Group.MembersEntry - 87, // 15: pb.Group.tablets:type_name -> pb.Group.TabletsEntry - 88, // 16: pb.ZeroProposal.snapshot_ts:type_name -> pb.ZeroProposal.SnapshotTsEntry + 87, // 14: pb.Group.members:type_name -> pb.Group.MembersEntry + 88, // 15: pb.Group.tablets:type_name -> pb.Group.TabletsEntry + 89, // 16: pb.ZeroProposal.snapshot_ts:type_name -> pb.ZeroProposal.SnapshotTsEntry 20, // 17: pb.ZeroProposal.member:type_name -> pb.Member 27, // 18: pb.ZeroProposal.tablet:type_name -> pb.Tablet - 94, // 19: pb.ZeroProposal.txn:type_name -> api.TxnContext + 95, // 19: pb.ZeroProposal.txn:type_name -> api.TxnContext 22, // 20: pb.ZeroProposal.license:type_name -> pb.License 32, // 21: pb.ZeroProposal.snapshot:type_name -> pb.ZeroSnapshot - 82, // 22: pb.ZeroProposal.delete_ns:type_name -> pb.DeleteNsRequest + 83, // 22: pb.ZeroProposal.delete_ns:type_name -> pb.DeleteNsRequest 27, // 23: pb.ZeroProposal.tablets:type_name -> pb.Tablet - 89, // 24: pb.MembershipState.groups:type_name -> pb.MembershipState.GroupsEntry - 90, // 25: pb.MembershipState.zeros:type_name -> pb.MembershipState.ZerosEntry + 90, // 24: pb.MembershipState.groups:type_name -> pb.MembershipState.GroupsEntry + 91, // 25: pb.MembershipState.zeros:type_name -> pb.MembershipState.ZerosEntry 20, // 26: pb.MembershipState.removed:type_name -> pb.Member 22, // 27: pb.MembershipState.license:type_name -> pb.License 20, // 28: pb.ConnectionState.member:type_name -> pb.Member 24, // 29: pb.ConnectionState.state:type_name -> pb.MembershipState 3, // 30: pb.DirectedEdge.value_type:type_name -> pb.Posting.ValType 0, // 31: pb.DirectedEdge.op:type_name -> pb.DirectedEdge.Op - 95, // 32: pb.DirectedEdge.facets:type_name -> api.Facet + 96, // 32: pb.DirectedEdge.facets:type_name -> api.Facet 28, // 33: pb.Mutations.edges:type_name -> pb.DirectedEdge 50, // 34: pb.Mutations.schema:type_name -> pb.SchemaUpdate 53, // 35: pb.Mutations.types:type_name -> pb.TypeUpdate 1, // 36: pb.Mutations.drop_op:type_name -> pb.Mutations.DropOp 30, // 37: pb.Mutations.metadata:type_name -> pb.Metadata - 91, // 38: pb.Metadata.pred_hints:type_name -> pb.Metadata.PredHintsEntry + 92, // 38: pb.Metadata.pred_hints:type_name -> pb.Metadata.PredHintsEntry 19, // 39: pb.Snapshot.context:type_name -> pb.RaftContext 24, // 40: pb.ZeroSnapshot.state:type_name -> pb.MembershipState 29, // 41: pb.Proposal.mutations:type_name -> pb.Mutations - 96, // 42: pb.Proposal.kv:type_name -> badgerpb4.KV + 97, // 42: pb.Proposal.kv:type_name -> badgerpb4.KV 24, // 43: pb.Proposal.state:type_name -> pb.MembershipState 57, // 44: pb.Proposal.delta:type_name -> pb.OracleDelta 31, // 45: pb.Proposal.snapshot:type_name -> pb.Snapshot 33, // 46: pb.Proposal.restore:type_name -> pb.RestoreRequest 35, // 47: pb.Proposal.cdc_state:type_name -> pb.CDCState - 82, // 48: pb.Proposal.delete_ns:type_name -> pb.DeleteNsRequest - 3, // 49: pb.Posting.val_type:type_name -> pb.Posting.ValType - 4, // 50: pb.Posting.posting_type:type_name -> pb.Posting.PostingType - 95, // 51: pb.Posting.facets:type_name -> api.Facet - 38, // 52: pb.UidPack.blocks:type_name -> pb.UidBlock - 39, // 53: pb.PostingList.pack:type_name -> pb.UidPack - 37, // 54: pb.PostingList.postings:type_name -> pb.Posting - 41, // 55: pb.FacetParams.param:type_name -> pb.FacetParam - 95, // 56: pb.Facets.facets:type_name -> api.Facet - 43, // 57: pb.FacetsList.facets_list:type_name -> pb.Facets - 46, // 58: pb.FilterTree.children:type_name -> pb.FilterTree - 45, // 59: pb.FilterTree.func:type_name -> pb.Function - 51, // 60: pb.SchemaNode.index_specs:type_name -> pb.VectorIndexSpec - 48, // 61: pb.SchemaResult.schema:type_name -> pb.SchemaNode - 3, // 62: pb.SchemaUpdate.value_type:type_name -> pb.Posting.ValType - 5, // 63: pb.SchemaUpdate.directive:type_name -> pb.SchemaUpdate.Directive - 51, // 64: pb.SchemaUpdate.index_specs:type_name -> pb.VectorIndexSpec - 52, // 65: pb.VectorIndexSpec.options:type_name -> pb.OptionPair - 50, // 66: pb.TypeUpdate.fields:type_name -> pb.SchemaUpdate - 56, // 67: pb.OracleDelta.txns:type_name -> pb.TxnStatus - 92, // 68: pb.OracleDelta.group_checksums:type_name -> pb.OracleDelta.GroupChecksumsEntry - 19, // 69: pb.RaftBatch.context:type_name -> pb.RaftContext - 97, // 70: pb.RaftBatch.payload:type_name -> api.Payload - 27, // 71: pb.TabletResponse.tablets:type_name -> pb.Tablet - 27, // 72: pb.TabletRequest.tablets:type_name -> pb.Tablet - 98, // 73: pb.SubscriptionRequest.matches:type_name -> badgerpb4.Match - 99, // 74: pb.SubscriptionResponse.kvs:type_name -> badgerpb4.KVList - 6, // 75: pb.Num.type:type_name -> pb.Num.leaseType - 74, // 76: pb.BackupResponse.drop_operations:type_name -> pb.DropOperation - 7, // 77: pb.DropOperation.drop_op:type_name -> pb.DropOperation.DropOp - 8, // 78: pb.BackupKey.type:type_name -> pb.BackupKey.KeyType - 37, // 79: pb.BackupPostingList.postings:type_name -> pb.Posting - 50, // 80: pb.UpdateGraphQLSchemaRequest.dgraph_preds:type_name -> pb.SchemaUpdate - 53, // 81: pb.UpdateGraphQLSchemaRequest.dgraph_types:type_name -> pb.TypeUpdate - 93, // 82: pb.BulkMeta.schema_map:type_name -> pb.BulkMeta.SchemaMapEntry - 53, // 83: pb.BulkMeta.types:type_name -> pb.TypeUpdate - 20, // 84: pb.Group.MembersEntry.value:type_name -> pb.Member - 27, // 85: pb.Group.TabletsEntry.value:type_name -> pb.Tablet - 21, // 86: pb.MembershipState.GroupsEntry.value:type_name -> pb.Group - 20, // 87: pb.MembershipState.ZerosEntry.value:type_name -> pb.Member - 2, // 88: pb.Metadata.PredHintsEntry.value:type_name -> pb.Metadata.HintType - 50, // 89: pb.BulkMeta.SchemaMapEntry.value:type_name -> pb.SchemaUpdate - 97, // 90: pb.Raft.Heartbeat:input_type -> api.Payload - 60, // 91: pb.Raft.RaftMessage:input_type -> pb.RaftBatch - 19, // 92: pb.Raft.JoinCluster:input_type -> pb.RaftContext - 19, // 93: pb.Raft.IsPeer:input_type -> pb.RaftContext - 20, // 94: pb.Zero.Connect:input_type -> pb.Member - 21, // 95: pb.Zero.UpdateMembership:input_type -> pb.Group - 97, // 96: pb.Zero.StreamMembership:input_type -> api.Payload - 97, // 97: pb.Zero.Oracle:input_type -> api.Payload - 27, // 98: pb.Zero.ShouldServe:input_type -> pb.Tablet - 62, // 99: pb.Zero.Inform:input_type -> pb.TabletRequest - 65, // 100: pb.Zero.AssignIds:input_type -> pb.Num - 65, // 101: pb.Zero.Timestamps:input_type -> pb.Num - 94, // 102: pb.Zero.CommitOrAbort:input_type -> api.TxnContext - 58, // 103: pb.Zero.TryAbort:input_type -> pb.TxnTimestamps - 82, // 104: pb.Zero.DeleteNamespace:input_type -> pb.DeleteNsRequest - 67, // 105: pb.Zero.RemoveNode:input_type -> pb.RemoveNodeRequest - 68, // 106: pb.Zero.MoveTablet:input_type -> pb.MoveTabletRequest - 69, // 107: pb.Zero.ApplyLicense:input_type -> pb.ApplyLicenseRequest - 29, // 108: pb.Worker.Mutate:input_type -> pb.Mutations - 12, // 109: pb.Worker.ServeTask:input_type -> pb.Query - 31, // 110: pb.Worker.StreamSnapshot:input_type -> pb.Snapshot - 17, // 111: pb.Worker.Sort:input_type -> pb.SortMessage - 47, // 112: pb.Worker.Schema:input_type -> pb.SchemaRequest - 72, // 113: pb.Worker.Backup:input_type -> pb.BackupRequest - 33, // 114: pb.Worker.Restore:input_type -> pb.RestoreRequest - 75, // 115: pb.Worker.Export:input_type -> pb.ExportRequest - 36, // 116: pb.Worker.ReceivePredicate:input_type -> pb.KVS - 55, // 117: pb.Worker.MovePredicate:input_type -> pb.MovePredicatePayload - 63, // 118: pb.Worker.Subscribe:input_type -> pb.SubscriptionRequest - 79, // 119: pb.Worker.UpdateGraphQLSchema:input_type -> pb.UpdateGraphQLSchemaRequest - 82, // 120: pb.Worker.DeleteNamespace:input_type -> pb.DeleteNsRequest - 83, // 121: pb.Worker.TaskStatus:input_type -> pb.TaskStatusRequest - 26, // 122: pb.Raft.Heartbeat:output_type -> pb.HealthInfo - 97, // 123: pb.Raft.RaftMessage:output_type -> api.Payload - 97, // 124: pb.Raft.JoinCluster:output_type -> api.Payload - 59, // 125: pb.Raft.IsPeer:output_type -> pb.PeerResponse - 25, // 126: pb.Zero.Connect:output_type -> pb.ConnectionState - 97, // 127: pb.Zero.UpdateMembership:output_type -> api.Payload - 24, // 128: pb.Zero.StreamMembership:output_type -> pb.MembershipState - 57, // 129: pb.Zero.Oracle:output_type -> pb.OracleDelta - 27, // 130: pb.Zero.ShouldServe:output_type -> pb.Tablet - 61, // 131: pb.Zero.Inform:output_type -> pb.TabletResponse - 66, // 132: pb.Zero.AssignIds:output_type -> pb.AssignedIds - 66, // 133: pb.Zero.Timestamps:output_type -> pb.AssignedIds - 94, // 134: pb.Zero.CommitOrAbort:output_type -> api.TxnContext - 57, // 135: pb.Zero.TryAbort:output_type -> pb.OracleDelta - 71, // 136: pb.Zero.DeleteNamespace:output_type -> pb.Status - 71, // 137: pb.Zero.RemoveNode:output_type -> pb.Status - 71, // 138: pb.Zero.MoveTablet:output_type -> pb.Status - 71, // 139: pb.Zero.ApplyLicense:output_type -> pb.Status - 94, // 140: pb.Worker.Mutate:output_type -> api.TxnContext - 15, // 141: pb.Worker.ServeTask:output_type -> pb.Result - 36, // 142: pb.Worker.StreamSnapshot:output_type -> pb.KVS - 18, // 143: pb.Worker.Sort:output_type -> pb.SortResult - 49, // 144: pb.Worker.Schema:output_type -> pb.SchemaResult - 73, // 145: pb.Worker.Backup:output_type -> pb.BackupResponse - 71, // 146: pb.Worker.Restore:output_type -> pb.Status - 76, // 147: pb.Worker.Export:output_type -> pb.ExportResponse - 97, // 148: pb.Worker.ReceivePredicate:output_type -> api.Payload - 97, // 149: pb.Worker.MovePredicate:output_type -> api.Payload - 99, // 150: pb.Worker.Subscribe:output_type -> badgerpb4.KVList - 80, // 151: pb.Worker.UpdateGraphQLSchema:output_type -> pb.UpdateGraphQLSchemaResponse - 71, // 152: pb.Worker.DeleteNamespace:output_type -> pb.Status - 84, // 153: pb.Worker.TaskStatus:output_type -> pb.TaskStatusResponse - 122, // [122:154] is the sub-list for method output_type - 90, // [90:122] is the sub-list for method input_type - 90, // [90:90] is the sub-list for extension type_name - 90, // [90:90] is the sub-list for extension extendee - 0, // [0:90] is the sub-list for field type_name + 83, // 48: pb.Proposal.delete_ns:type_name -> pb.DeleteNsRequest + 61, // 49: pb.Proposal.drainmode:type_name -> pb.Drainmode + 3, // 50: pb.Posting.val_type:type_name -> pb.Posting.ValType + 4, // 51: pb.Posting.posting_type:type_name -> pb.Posting.PostingType + 96, // 52: pb.Posting.facets:type_name -> api.Facet + 38, // 53: pb.UidPack.blocks:type_name -> pb.UidBlock + 39, // 54: pb.PostingList.pack:type_name -> pb.UidPack + 37, // 55: pb.PostingList.postings:type_name -> pb.Posting + 41, // 56: pb.FacetParams.param:type_name -> pb.FacetParam + 96, // 57: pb.Facets.facets:type_name -> api.Facet + 43, // 58: pb.FacetsList.facets_list:type_name -> pb.Facets + 46, // 59: pb.FilterTree.children:type_name -> pb.FilterTree + 45, // 60: pb.FilterTree.func:type_name -> pb.Function + 51, // 61: pb.SchemaNode.index_specs:type_name -> pb.VectorIndexSpec + 48, // 62: pb.SchemaResult.schema:type_name -> pb.SchemaNode + 3, // 63: pb.SchemaUpdate.value_type:type_name -> pb.Posting.ValType + 5, // 64: pb.SchemaUpdate.directive:type_name -> pb.SchemaUpdate.Directive + 51, // 65: pb.SchemaUpdate.index_specs:type_name -> pb.VectorIndexSpec + 52, // 66: pb.VectorIndexSpec.options:type_name -> pb.OptionPair + 50, // 67: pb.TypeUpdate.fields:type_name -> pb.SchemaUpdate + 56, // 68: pb.OracleDelta.txns:type_name -> pb.TxnStatus + 93, // 69: pb.OracleDelta.group_checksums:type_name -> pb.OracleDelta.GroupChecksumsEntry + 19, // 70: pb.RaftBatch.context:type_name -> pb.RaftContext + 98, // 71: pb.RaftBatch.payload:type_name -> api.Payload + 27, // 72: pb.TabletResponse.tablets:type_name -> pb.Tablet + 27, // 73: pb.TabletRequest.tablets:type_name -> pb.Tablet + 99, // 74: pb.SubscriptionRequest.matches:type_name -> badgerpb4.Match + 100, // 75: pb.SubscriptionResponse.kvs:type_name -> badgerpb4.KVList + 6, // 76: pb.Num.type:type_name -> pb.Num.leaseType + 75, // 77: pb.BackupResponse.drop_operations:type_name -> pb.DropOperation + 7, // 78: pb.DropOperation.drop_op:type_name -> pb.DropOperation.DropOp + 8, // 79: pb.BackupKey.type:type_name -> pb.BackupKey.KeyType + 37, // 80: pb.BackupPostingList.postings:type_name -> pb.Posting + 50, // 81: pb.UpdateGraphQLSchemaRequest.dgraph_preds:type_name -> pb.SchemaUpdate + 53, // 82: pb.UpdateGraphQLSchemaRequest.dgraph_types:type_name -> pb.TypeUpdate + 94, // 83: pb.BulkMeta.schema_map:type_name -> pb.BulkMeta.SchemaMapEntry + 53, // 84: pb.BulkMeta.types:type_name -> pb.TypeUpdate + 20, // 85: pb.Group.MembersEntry.value:type_name -> pb.Member + 27, // 86: pb.Group.TabletsEntry.value:type_name -> pb.Tablet + 21, // 87: pb.MembershipState.GroupsEntry.value:type_name -> pb.Group + 20, // 88: pb.MembershipState.ZerosEntry.value:type_name -> pb.Member + 2, // 89: pb.Metadata.PredHintsEntry.value:type_name -> pb.Metadata.HintType + 50, // 90: pb.BulkMeta.SchemaMapEntry.value:type_name -> pb.SchemaUpdate + 98, // 91: pb.Raft.Heartbeat:input_type -> api.Payload + 60, // 92: pb.Raft.RaftMessage:input_type -> pb.RaftBatch + 19, // 93: pb.Raft.JoinCluster:input_type -> pb.RaftContext + 19, // 94: pb.Raft.IsPeer:input_type -> pb.RaftContext + 20, // 95: pb.Zero.Connect:input_type -> pb.Member + 21, // 96: pb.Zero.UpdateMembership:input_type -> pb.Group + 98, // 97: pb.Zero.StreamMembership:input_type -> api.Payload + 98, // 98: pb.Zero.Oracle:input_type -> api.Payload + 27, // 99: pb.Zero.ShouldServe:input_type -> pb.Tablet + 63, // 100: pb.Zero.Inform:input_type -> pb.TabletRequest + 66, // 101: pb.Zero.AssignIds:input_type -> pb.Num + 66, // 102: pb.Zero.Timestamps:input_type -> pb.Num + 95, // 103: pb.Zero.CommitOrAbort:input_type -> api.TxnContext + 58, // 104: pb.Zero.TryAbort:input_type -> pb.TxnTimestamps + 83, // 105: pb.Zero.DeleteNamespace:input_type -> pb.DeleteNsRequest + 68, // 106: pb.Zero.RemoveNode:input_type -> pb.RemoveNodeRequest + 69, // 107: pb.Zero.MoveTablet:input_type -> pb.MoveTabletRequest + 70, // 108: pb.Zero.ApplyLicense:input_type -> pb.ApplyLicenseRequest + 61, // 109: pb.Zero.ApplyDrainmode:input_type -> pb.Drainmode + 29, // 110: pb.Worker.Mutate:input_type -> pb.Mutations + 12, // 111: pb.Worker.ServeTask:input_type -> pb.Query + 31, // 112: pb.Worker.StreamSnapshot:input_type -> pb.Snapshot + 17, // 113: pb.Worker.Sort:input_type -> pb.SortMessage + 47, // 114: pb.Worker.Schema:input_type -> pb.SchemaRequest + 73, // 115: pb.Worker.Backup:input_type -> pb.BackupRequest + 33, // 116: pb.Worker.Restore:input_type -> pb.RestoreRequest + 76, // 117: pb.Worker.Export:input_type -> pb.ExportRequest + 36, // 118: pb.Worker.ReceivePredicate:input_type -> pb.KVS + 55, // 119: pb.Worker.MovePredicate:input_type -> pb.MovePredicatePayload + 64, // 120: pb.Worker.Subscribe:input_type -> pb.SubscriptionRequest + 80, // 121: pb.Worker.UpdateGraphQLSchema:input_type -> pb.UpdateGraphQLSchemaRequest + 83, // 122: pb.Worker.DeleteNamespace:input_type -> pb.DeleteNsRequest + 84, // 123: pb.Worker.TaskStatus:input_type -> pb.TaskStatusRequest + 61, // 124: pb.Worker.ApplyDrainmode:input_type -> pb.Drainmode + 26, // 125: pb.Raft.Heartbeat:output_type -> pb.HealthInfo + 98, // 126: pb.Raft.RaftMessage:output_type -> api.Payload + 98, // 127: pb.Raft.JoinCluster:output_type -> api.Payload + 59, // 128: pb.Raft.IsPeer:output_type -> pb.PeerResponse + 25, // 129: pb.Zero.Connect:output_type -> pb.ConnectionState + 98, // 130: pb.Zero.UpdateMembership:output_type -> api.Payload + 24, // 131: pb.Zero.StreamMembership:output_type -> pb.MembershipState + 57, // 132: pb.Zero.Oracle:output_type -> pb.OracleDelta + 27, // 133: pb.Zero.ShouldServe:output_type -> pb.Tablet + 62, // 134: pb.Zero.Inform:output_type -> pb.TabletResponse + 67, // 135: pb.Zero.AssignIds:output_type -> pb.AssignedIds + 67, // 136: pb.Zero.Timestamps:output_type -> pb.AssignedIds + 95, // 137: pb.Zero.CommitOrAbort:output_type -> api.TxnContext + 57, // 138: pb.Zero.TryAbort:output_type -> pb.OracleDelta + 72, // 139: pb.Zero.DeleteNamespace:output_type -> pb.Status + 72, // 140: pb.Zero.RemoveNode:output_type -> pb.Status + 72, // 141: pb.Zero.MoveTablet:output_type -> pb.Status + 72, // 142: pb.Zero.ApplyLicense:output_type -> pb.Status + 72, // 143: pb.Zero.ApplyDrainmode:output_type -> pb.Status + 95, // 144: pb.Worker.Mutate:output_type -> api.TxnContext + 15, // 145: pb.Worker.ServeTask:output_type -> pb.Result + 36, // 146: pb.Worker.StreamSnapshot:output_type -> pb.KVS + 18, // 147: pb.Worker.Sort:output_type -> pb.SortResult + 49, // 148: pb.Worker.Schema:output_type -> pb.SchemaResult + 74, // 149: pb.Worker.Backup:output_type -> pb.BackupResponse + 72, // 150: pb.Worker.Restore:output_type -> pb.Status + 77, // 151: pb.Worker.Export:output_type -> pb.ExportResponse + 98, // 152: pb.Worker.ReceivePredicate:output_type -> api.Payload + 98, // 153: pb.Worker.MovePredicate:output_type -> api.Payload + 100, // 154: pb.Worker.Subscribe:output_type -> badgerpb4.KVList + 81, // 155: pb.Worker.UpdateGraphQLSchema:output_type -> pb.UpdateGraphQLSchemaResponse + 72, // 156: pb.Worker.DeleteNamespace:output_type -> pb.Status + 85, // 157: pb.Worker.TaskStatus:output_type -> pb.TaskStatusResponse + 72, // 158: pb.Worker.ApplyDrainmode:output_type -> pb.Status + 125, // [125:159] is the sub-list for method output_type + 91, // [91:125] is the sub-list for method input_type + 91, // [91:91] is the sub-list for extension type_name + 91, // [91:91] is the sub-list for extension extendee + 0, // [0:91] is the sub-list for field type_name } func init() { file_pb_proto_init() } @@ -8032,7 +8113,7 @@ func file_pb_proto_init() { } } file_pb_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TabletResponse); i { + switch v := v.(*Drainmode); i { case 0: return &v.state case 1: @@ -8044,7 +8125,7 @@ func file_pb_proto_init() { } } file_pb_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TabletRequest); i { + switch v := v.(*TabletResponse); i { case 0: return &v.state case 1: @@ -8056,7 +8137,7 @@ func file_pb_proto_init() { } } file_pb_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubscriptionRequest); i { + switch v := v.(*TabletRequest); i { case 0: return &v.state case 1: @@ -8068,7 +8149,7 @@ func file_pb_proto_init() { } } file_pb_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SubscriptionResponse); i { + switch v := v.(*SubscriptionRequest); i { case 0: return &v.state case 1: @@ -8080,7 +8161,7 @@ func file_pb_proto_init() { } } file_pb_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Num); i { + switch v := v.(*SubscriptionResponse); i { case 0: return &v.state case 1: @@ -8092,7 +8173,7 @@ func file_pb_proto_init() { } } file_pb_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AssignedIds); i { + switch v := v.(*Num); i { case 0: return &v.state case 1: @@ -8104,7 +8185,7 @@ func file_pb_proto_init() { } } file_pb_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RemoveNodeRequest); i { + switch v := v.(*AssignedIds); i { case 0: return &v.state case 1: @@ -8116,7 +8197,7 @@ func file_pb_proto_init() { } } file_pb_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MoveTabletRequest); i { + switch v := v.(*RemoveNodeRequest); i { case 0: return &v.state case 1: @@ -8128,7 +8209,7 @@ func file_pb_proto_init() { } } file_pb_proto_msgTypes[60].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ApplyLicenseRequest); i { + switch v := v.(*MoveTabletRequest); i { case 0: return &v.state case 1: @@ -8140,7 +8221,7 @@ func file_pb_proto_init() { } } file_pb_proto_msgTypes[61].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SnapshotMeta); i { + switch v := v.(*ApplyLicenseRequest); i { case 0: return &v.state case 1: @@ -8152,7 +8233,7 @@ func file_pb_proto_init() { } } file_pb_proto_msgTypes[62].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Status); i { + switch v := v.(*SnapshotMeta); i { case 0: return &v.state case 1: @@ -8164,7 +8245,7 @@ func file_pb_proto_init() { } } file_pb_proto_msgTypes[63].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BackupRequest); i { + switch v := v.(*Status); i { case 0: return &v.state case 1: @@ -8176,7 +8257,7 @@ func file_pb_proto_init() { } } file_pb_proto_msgTypes[64].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BackupResponse); i { + switch v := v.(*BackupRequest); i { case 0: return &v.state case 1: @@ -8188,7 +8269,7 @@ func file_pb_proto_init() { } } file_pb_proto_msgTypes[65].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DropOperation); i { + switch v := v.(*BackupResponse); i { case 0: return &v.state case 1: @@ -8200,7 +8281,7 @@ func file_pb_proto_init() { } } file_pb_proto_msgTypes[66].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExportRequest); i { + switch v := v.(*DropOperation); i { case 0: return &v.state case 1: @@ -8212,7 +8293,7 @@ func file_pb_proto_init() { } } file_pb_proto_msgTypes[67].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExportResponse); i { + switch v := v.(*ExportRequest); i { case 0: return &v.state case 1: @@ -8224,7 +8305,7 @@ func file_pb_proto_init() { } } file_pb_proto_msgTypes[68].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BackupKey); i { + switch v := v.(*ExportResponse); i { case 0: return &v.state case 1: @@ -8236,7 +8317,7 @@ func file_pb_proto_init() { } } file_pb_proto_msgTypes[69].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BackupPostingList); i { + switch v := v.(*BackupKey); i { case 0: return &v.state case 1: @@ -8248,7 +8329,7 @@ func file_pb_proto_init() { } } file_pb_proto_msgTypes[70].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateGraphQLSchemaRequest); i { + switch v := v.(*BackupPostingList); i { case 0: return &v.state case 1: @@ -8260,7 +8341,7 @@ func file_pb_proto_init() { } } file_pb_proto_msgTypes[71].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateGraphQLSchemaResponse); i { + switch v := v.(*UpdateGraphQLSchemaRequest); i { case 0: return &v.state case 1: @@ -8272,7 +8353,7 @@ func file_pb_proto_init() { } } file_pb_proto_msgTypes[72].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BulkMeta); i { + switch v := v.(*UpdateGraphQLSchemaResponse); i { case 0: return &v.state case 1: @@ -8284,7 +8365,7 @@ func file_pb_proto_init() { } } file_pb_proto_msgTypes[73].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteNsRequest); i { + switch v := v.(*BulkMeta); i { case 0: return &v.state case 1: @@ -8296,7 +8377,7 @@ func file_pb_proto_init() { } } file_pb_proto_msgTypes[74].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TaskStatusRequest); i { + switch v := v.(*DeleteNsRequest); i { case 0: return &v.state case 1: @@ -8308,6 +8389,18 @@ func file_pb_proto_init() { } } file_pb_proto_msgTypes[75].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TaskStatusRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_pb_proto_msgTypes[76].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TaskStatusResponse); i { case 0: return &v.state @@ -8326,7 +8419,7 @@ func file_pb_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_pb_proto_rawDesc, NumEnums: 9, - NumMessages: 85, + NumMessages: 86, NumExtensions: 0, NumServices: 3, }, diff --git a/protos/pb/pb_grpc.pb.go b/protos/pb/pb_grpc.pb.go index fda72e69333..8ce2664422c 100644 --- a/protos/pb/pb_grpc.pb.go +++ b/protos/pb/pb_grpc.pb.go @@ -307,6 +307,7 @@ const ( Zero_RemoveNode_FullMethodName = "/pb.Zero/RemoveNode" Zero_MoveTablet_FullMethodName = "/pb.Zero/MoveTablet" Zero_ApplyLicense_FullMethodName = "/pb.Zero/ApplyLicense" + Zero_ApplyDrainmode_FullMethodName = "/pb.Zero/ApplyDrainmode" ) // ZeroClient is the client API for Zero service. @@ -328,6 +329,7 @@ type ZeroClient interface { RemoveNode(ctx context.Context, in *RemoveNodeRequest, opts ...grpc.CallOption) (*Status, error) MoveTablet(ctx context.Context, in *MoveTabletRequest, opts ...grpc.CallOption) (*Status, error) ApplyLicense(ctx context.Context, in *ApplyLicenseRequest, opts ...grpc.CallOption) (*Status, error) + ApplyDrainmode(ctx context.Context, in *Drainmode, opts ...grpc.CallOption) (*Status, error) } type zeroClient struct { @@ -510,6 +512,15 @@ func (c *zeroClient) ApplyLicense(ctx context.Context, in *ApplyLicenseRequest, return out, nil } +func (c *zeroClient) ApplyDrainmode(ctx context.Context, in *Drainmode, opts ...grpc.CallOption) (*Status, error) { + out := new(Status) + err := c.cc.Invoke(ctx, Zero_ApplyDrainmode_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // ZeroServer is the server API for Zero service. // All implementations must embed UnimplementedZeroServer // for forward compatibility @@ -529,6 +540,7 @@ type ZeroServer interface { RemoveNode(context.Context, *RemoveNodeRequest) (*Status, error) MoveTablet(context.Context, *MoveTabletRequest) (*Status, error) ApplyLicense(context.Context, *ApplyLicenseRequest) (*Status, error) + ApplyDrainmode(context.Context, *Drainmode) (*Status, error) mustEmbedUnimplementedZeroServer() } @@ -578,6 +590,9 @@ func (UnimplementedZeroServer) MoveTablet(context.Context, *MoveTabletRequest) ( func (UnimplementedZeroServer) ApplyLicense(context.Context, *ApplyLicenseRequest) (*Status, error) { return nil, status.Errorf(codes.Unimplemented, "method ApplyLicense not implemented") } +func (UnimplementedZeroServer) ApplyDrainmode(context.Context, *Drainmode) (*Status, error) { + return nil, status.Errorf(codes.Unimplemented, "method ApplyDrainmode not implemented") +} func (UnimplementedZeroServer) mustEmbedUnimplementedZeroServer() {} // UnsafeZeroServer may be embedded to opt out of forward compatibility for this service. @@ -849,6 +864,24 @@ func _Zero_ApplyLicense_Handler(srv interface{}, ctx context.Context, dec func(i return interceptor(ctx, in, info, handler) } +func _Zero_ApplyDrainmode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Drainmode) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ZeroServer).ApplyDrainmode(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Zero_ApplyDrainmode_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ZeroServer).ApplyDrainmode(ctx, req.(*Drainmode)) + } + return interceptor(ctx, in, info, handler) +} + // Zero_ServiceDesc is the grpc.ServiceDesc for Zero service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -904,6 +937,10 @@ var Zero_ServiceDesc = grpc.ServiceDesc{ MethodName: "ApplyLicense", Handler: _Zero_ApplyLicense_Handler, }, + { + MethodName: "ApplyDrainmode", + Handler: _Zero_ApplyDrainmode_Handler, + }, }, Streams: []grpc.StreamDesc{ { @@ -935,6 +972,7 @@ const ( Worker_UpdateGraphQLSchema_FullMethodName = "/pb.Worker/UpdateGraphQLSchema" Worker_DeleteNamespace_FullMethodName = "/pb.Worker/DeleteNamespace" Worker_TaskStatus_FullMethodName = "/pb.Worker/TaskStatus" + Worker_ApplyDrainmode_FullMethodName = "/pb.Worker/ApplyDrainmode" ) // WorkerClient is the client API for Worker service. @@ -956,6 +994,7 @@ type WorkerClient interface { UpdateGraphQLSchema(ctx context.Context, in *UpdateGraphQLSchemaRequest, opts ...grpc.CallOption) (*UpdateGraphQLSchemaResponse, error) DeleteNamespace(ctx context.Context, in *DeleteNsRequest, opts ...grpc.CallOption) (*Status, error) TaskStatus(ctx context.Context, in *TaskStatusRequest, opts ...grpc.CallOption) (*TaskStatusResponse, error) + ApplyDrainmode(ctx context.Context, in *Drainmode, opts ...grpc.CallOption) (*Status, error) } type workerClient struct { @@ -1162,6 +1201,15 @@ func (c *workerClient) TaskStatus(ctx context.Context, in *TaskStatusRequest, op return out, nil } +func (c *workerClient) ApplyDrainmode(ctx context.Context, in *Drainmode, opts ...grpc.CallOption) (*Status, error) { + out := new(Status) + err := c.cc.Invoke(ctx, Worker_ApplyDrainmode_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // WorkerServer is the server API for Worker service. // All implementations must embed UnimplementedWorkerServer // for forward compatibility @@ -1181,6 +1229,7 @@ type WorkerServer interface { UpdateGraphQLSchema(context.Context, *UpdateGraphQLSchemaRequest) (*UpdateGraphQLSchemaResponse, error) DeleteNamespace(context.Context, *DeleteNsRequest) (*Status, error) TaskStatus(context.Context, *TaskStatusRequest) (*TaskStatusResponse, error) + ApplyDrainmode(context.Context, *Drainmode) (*Status, error) mustEmbedUnimplementedWorkerServer() } @@ -1230,6 +1279,9 @@ func (UnimplementedWorkerServer) DeleteNamespace(context.Context, *DeleteNsReque func (UnimplementedWorkerServer) TaskStatus(context.Context, *TaskStatusRequest) (*TaskStatusResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method TaskStatus not implemented") } +func (UnimplementedWorkerServer) ApplyDrainmode(context.Context, *Drainmode) (*Status, error) { + return nil, status.Errorf(codes.Unimplemented, "method ApplyDrainmode not implemented") +} func (UnimplementedWorkerServer) mustEmbedUnimplementedWorkerServer() {} // UnsafeWorkerServer may be embedded to opt out of forward compatibility for this service. @@ -1514,6 +1566,24 @@ func _Worker_TaskStatus_Handler(srv interface{}, ctx context.Context, dec func(i return interceptor(ctx, in, info, handler) } +func _Worker_ApplyDrainmode_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(Drainmode) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(WorkerServer).ApplyDrainmode(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Worker_ApplyDrainmode_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(WorkerServer).ApplyDrainmode(ctx, req.(*Drainmode)) + } + return interceptor(ctx, in, info, handler) +} + // Worker_ServiceDesc is the grpc.ServiceDesc for Worker service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -1565,6 +1635,10 @@ var Worker_ServiceDesc = grpc.ServiceDesc{ MethodName: "TaskStatus", Handler: _Worker_TaskStatus_Handler, }, + { + MethodName: "ApplyDrainmode", + Handler: _Worker_ApplyDrainmode_Handler, + }, }, Streams: []grpc.StreamDesc{ { diff --git a/systest/license/license_test.go b/systest/license/license_test.go index 3f801640688..c0c9a5e2806 100644 --- a/systest/license/license_test.go +++ b/systest/license/license_test.go @@ -141,7 +141,7 @@ func (lsuite *LicenseTestSuite) TestEnterpriseLicenseWithGraphqlEndPoint() { } func assertLicenseNotEnabled(t *testing.T, hcli *dgraphapi.HTTPClient, user string) { - response, err := hcli.GetZeroState() + response, err := hcli.GetLicenseInfo() require.NoError(t, err) require.Equal(t, response.Extensions["user"], user) diff --git a/worker/draft.go b/worker/draft.go index 0e6e767e676..b2858e33bbb 100644 --- a/worker/draft.go +++ b/worker/draft.go @@ -678,6 +678,10 @@ func (n *node) applyCommitted(proposal *pb.Proposal, key uint64) error { n.elog.Printf("Applying Oracle Delta for key: %d", key) return n.commitOrAbort(key, proposal.Delta) + case proposal.Drainmode != nil: + x.UpdateDrainingMode(proposal.Drainmode.State) + return nil + case proposal.Snapshot != nil: existing, err := n.Store.Snapshot() if err != nil { diff --git a/worker/groups.go b/worker/groups.go index 488b2b2b129..cd15bed780a 100644 --- a/worker/groups.go +++ b/worker/groups.go @@ -70,6 +70,10 @@ func StartRaftNodes(walStore *raftwal.DiskStorage, bindall bool) { } } + if x.WorkerConfig.MyGrpcAddr == "" { + x.WorkerConfig.MyGrpcAddr = fmt.Sprintf("localhost:%d", x.Config.PortOffset+x.PortGrpc) + } + x.AssertTruef(len(x.WorkerConfig.ZeroAddr) > 0, "Providing dgraphzero address is mandatory.") for _, zeroAddr := range x.WorkerConfig.ZeroAddr { x.AssertTruef(zeroAddr != x.WorkerConfig.MyAddr, @@ -95,10 +99,11 @@ func StartRaftNodes(walStore *raftwal.DiskStorage, bindall bool) { // Successfully connect with dgraphzero, before doing anything else. // Connect with Zero leader and figure out what group we should belong to. m := &pb.Member{ - Id: raftIdx, - GroupId: x.WorkerConfig.ProposedGroupId, - Addr: x.WorkerConfig.MyAddr, - Learner: x.WorkerConfig.Raft.GetBool("learner"), + Id: raftIdx, + GroupId: x.WorkerConfig.ProposedGroupId, + Addr: x.WorkerConfig.MyAddr, + Learner: x.WorkerConfig.Raft.GetBool("learner"), + GrpcAddr: x.WorkerConfig.MyGrpcAddr, } if m.GroupId > 0 { m.ForceGroupId = true @@ -750,6 +755,7 @@ func (g *groupi) doSendMembership(tablets map[string]*pb.Tablet) error { Addr: x.WorkerConfig.MyAddr, Leader: leader, LastUpdate: uint64(time.Now().Unix()), + GrpcAddr: x.WorkerConfig.MyGrpcAddr, } group := &pb.Group{ Members: make(map[uint64]*pb.Member), diff --git a/worker/online_restore.go b/worker/online_restore.go index ffebdb98bc0..9d8301777e1 100644 --- a/worker/online_restore.go +++ b/worker/online_restore.go @@ -607,3 +607,15 @@ func buildPredsForDefaultNamespace(restorePreds []string, fromNamespace uint64) } return filtered } + +func ProposeDrain(ctx context.Context, drainMode *pb.Drainmode) error { + pl := groups().connToZeroLeader() + if pl == nil { + return conn.ErrNoConnection + } + con := pl.Get() + c := pb.NewZeroClient(con) + status, err := c.ApplyDrainmode(ctx, drainMode) + fmt.Println("status ans erros", status, err) + return err +} diff --git a/worker/snapshot.go b/worker/snapshot.go index 06b571a0ad6..e44aa1047db 100644 --- a/worker/snapshot.go +++ b/worker/snapshot.go @@ -16,6 +16,7 @@ import ( "go.etcd.io/etcd/raft/v3" "github.com/dgraph-io/badger/v4" + api_v25 "github.com/dgraph-io/dgo/v240/protos/api.v25" "github.com/dgraph-io/ristretto/v2/z" "github.com/hypermodeinc/dgraph/v24/conn" "github.com/hypermodeinc/dgraph/v24/posting" @@ -34,6 +35,71 @@ type badgerWriter interface { Flush() error } +func FlushKvs(stream api_v25.Dgraph_StreamPSnapshotServer) error { + + // schema.Init(State.Pstore) + // postingListCacheSize := (x.CachePercent[0] * (x.TotalCache << 20)) / 100 + // pstoreBlockCacheSize := (x.CachePercent[1] * (totalCacx.TotalCachehe << 20)) / 100 + // pstoreIndexCacheSize := (x.CachePercent[2] * (x.TotalCache << 20)) / 100 + // posting.Init(State.Pstore, postingListCacheSize, x.RemoveOnUpdate) + // defer posting.Cleanup() + // Init(State.Pstore) + if err := pstore.DropAll(); err != nil { + return err + } + var writer badgerWriter + sw := pstore.NewStreamWriter() + defer sw.Cancel() + + if err := sw.Prepare(); err != nil { + return err + } + + writer = sw + + // We can use count to check the number of posting lists returned in tests. + size := 0 + for { + kvs, err := stream.Recv() + if kvs != nil { + glog.Infoln("All key-values have been received.", string(kvs.Data)) + } + + if err != nil { + return err + } + if kvs.Done { + glog.Infoln("All key-values have been received.") + break + } + + size += len(kvs.Data) + glog.Infof("Received batch of size: %s. Total so far: %s\n", + humanize.IBytes(uint64(len(kvs.Data))), humanize.IBytes(uint64(size))) + + buf := z.NewBufferSlice(kvs.Data) + if err := writer.Write(buf); err != nil { + return err + } + } + if err := writer.Flush(); err != nil { + return err + } + + glog.Infof("P dir writes DONE. Sending ACK") + // Send an acknowledgement back to the leader. + if err := stream.SendAndClose(&api_v25.ReceiveSnapshotKVRequest{Message: "done"}); err != nil { + return err + } + + // posting.ResetCache() + // ResetAclCache() + // State.Dispose() + // InitServerState() + + return nil +} + // populateSnapshot gets data for a shard from the leader and writes it to BadgerDB on the follower. func (n *node) populateSnapshot(snap *pb.Snapshot, pl *conn.Pool) error { c := pb.NewWorkerClient(pl.Get()) diff --git a/worker/worker.go b/worker/worker.go index 7c5f65948c1..a2fb92f4fba 100644 --- a/worker/worker.go +++ b/worker/worker.go @@ -8,6 +8,7 @@ package worker import ( + "context" "fmt" "log" "math" @@ -90,6 +91,14 @@ func (w *grpcWorker) Subscribe( }, matches) } +func (w *grpcWorker) ApplyDrainmode(ctx context.Context, req *pb.Drainmode) (*pb.Status, error) { + drainMode := &pb.Drainmode{State: req.State} + node := groups().Node + err := node.proposeAndWait(ctx, &pb.Proposal{Drainmode: drainMode}) // Subscribe on given prefixes. + + return nil, err +} + // RunServer initializes a tcp server on port which listens to requests from // other workers for pb.communication. func RunServer(bindall bool) { diff --git a/x/config.go b/x/config.go index 44c49127fb5..82e5343e010 100644 --- a/x/config.go +++ b/x/config.go @@ -85,6 +85,8 @@ type WorkerOptions struct { Trace *z.SuperFlag // MyAddr stores the address and port for this alpha. MyAddr string + // MyGrpcAddr stores public grpc address and port for this alpha. + MyGrpcAddr string // ZeroAddr stores the list of address:port for the zero instances associated with this alpha. // Alpha would communicate via only one zero address from the list. All // the other addresses serve as fallback. diff --git a/x/x.go b/x/x.go index 9a2f6830034..b43f98218ac 100644 --- a/x/x.go +++ b/x/x.go @@ -141,7 +141,10 @@ var ( // GuardiansUid is a map from namespace to the Uid of guardians group node. GuardiansUid = &sync.Map{} // GrootUid is a map from namespace to the Uid of groot user node. - GrootUid = &sync.Map{} + GrootUid = &sync.Map{} + CachePercent []int64 + TotalCache int64 + RemoveOnUpdate bool ) func init() {