diff --git a/beacon-chain/rpc/BUILD.bazel b/beacon-chain/rpc/BUILD.bazel index 8c414473d0..2bd3792b69 100644 --- a/beacon-chain/rpc/BUILD.bazel +++ b/beacon-chain/rpc/BUILD.bazel @@ -29,6 +29,7 @@ go_library( "//proto/beacon/p2p/v1:go_default_library", "//proto/beacon/rpc/v1:go_default_library", "//shared/featureconfig:go_default_library", + "//shared/logutil:go_default_library", "//shared/params:go_default_library", "//shared/traceutil:go_default_library", "@com_github_grpc_ecosystem_go_grpc_middleware//:go_default_library", diff --git a/beacon-chain/rpc/node/BUILD.bazel b/beacon-chain/rpc/node/BUILD.bazel index b737a5a077..89d65683a1 100644 --- a/beacon-chain/rpc/node/BUILD.bazel +++ b/beacon-chain/rpc/node/BUILD.bazel @@ -12,6 +12,7 @@ go_library( "//beacon-chain/p2p:go_default_library", "//beacon-chain/sync:go_default_library", "//proto/beacon/rpc/v1:go_default_library", + "//shared/logutil:go_default_library", "//shared/version:go_default_library", "@com_github_gogo_protobuf//types:go_default_library", "@com_github_libp2p_go_libp2p_core//network:go_default_library", @@ -33,7 +34,6 @@ go_test( "//beacon-chain/p2p:go_default_library", "//beacon-chain/p2p/testing:go_default_library", "//beacon-chain/sync/initial-sync/testing:go_default_library", - "//proto/beacon/rpc/v1:go_default_library", "//shared/bytesutil:go_default_library", "//shared/testutil:go_default_library", "//shared/testutil/assert:go_default_library", diff --git a/beacon-chain/rpc/node/server.go b/beacon-chain/rpc/node/server.go index 48a759bbc0..107980a42a 100644 --- a/beacon-chain/rpc/node/server.go +++ b/beacon-chain/rpc/node/server.go @@ -17,7 +17,8 @@ import ( "github.com/prysmaticlabs/prysm/beacon-chain/db" "github.com/prysmaticlabs/prysm/beacon-chain/p2p" "github.com/prysmaticlabs/prysm/beacon-chain/sync" - pbrpc "github.com/prysmaticlabs/prysm/proto/beacon/rpc/v1" + pb "github.com/prysmaticlabs/prysm/proto/beacon/rpc/v1" + "github.com/prysmaticlabs/prysm/shared/logutil" "github.com/prysmaticlabs/prysm/shared/version" "google.golang.org/grpc" "google.golang.org/grpc/codes" @@ -28,6 +29,8 @@ import ( // providing RPC endpoints for verifying a beacon node's sync status, genesis and // version information, and services the node implements and runs. type Server struct { + LogsStreamer logutil.Streamer + StreamLogsBufferSize int SyncChecker sync.Checker Server *grpc.Server BeaconDB db.ReadOnlyDatabase @@ -120,13 +123,6 @@ func (ns *Server) GetHost(_ context.Context, _ *ptypes.Empty) (*ethpb.HostData, }, nil } -// GetLogsEndpoint -func (ns *Server) GetLogsEndpoint(_ context.Context, _ *ptypes.Empty) (*pbrpc.LogsEndpointResponse, error) { - return &pbrpc.LogsEndpointResponse{ - BeaconLogsEndpoint: fmt.Sprintf("%s:%d", ns.BeaconMonitoringHost, ns.BeaconMonitoringPort), - }, nil -} - // GetPeer returns the data known about the peer defined by the provided peer id. func (ns *Server) GetPeer(_ context.Context, peerReq *ethpb.PeerRequest) (*ethpb.Peer, error) { pid, err := peer.Decode(peerReq.PeerId) @@ -224,3 +220,35 @@ func (ns *Server) ListPeers(ctx context.Context, _ *ptypes.Empty) (*ethpb.Peers, Peers: res, }, nil } + +// StreamBeaconLogs from the beacon node via a gRPC server-side stream. +func (ns *Server) StreamBeaconLogs(_ *ptypes.Empty, stream pb.Health_StreamBeaconLogsServer) error { + ch := make(chan []byte, ns.StreamLogsBufferSize) + defer close(ch) + sub := ns.LogsStreamer.LogsFeed().Subscribe(ch) + defer sub.Unsubscribe() + + recentLogs := ns.LogsStreamer.GetLastFewLogs() + logStrings := make([]string, len(recentLogs)) + for i, log := range recentLogs { + logStrings[i] = string(log) + } + if err := stream.Send(&pb.LogsResponse{ + Logs: logStrings, + }); err != nil { + return status.Errorf(codes.Unavailable, "Could not send over stream: %v", err) + } + for { + select { + case log := <-ch: + resp := &pb.LogsResponse{ + Logs: []string{string(log)}, + } + if err := stream.Send(resp); err != nil { + return status.Errorf(codes.Unavailable, "Could not send over stream: %v", err) + } + case <-stream.Context().Done(): + return status.Error(codes.Canceled, "Context canceled") + } + } +} diff --git a/beacon-chain/rpc/node/server_test.go b/beacon-chain/rpc/node/server_test.go index 4c168d0a37..160c618958 100644 --- a/beacon-chain/rpc/node/server_test.go +++ b/beacon-chain/rpc/node/server_test.go @@ -10,19 +10,19 @@ import ( "github.com/ethereum/go-ethereum/p2p/enode" ptypes "github.com/gogo/protobuf/types" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" + "google.golang.org/grpc" + "google.golang.org/grpc/reflection" + mock "github.com/prysmaticlabs/prysm/beacon-chain/blockchain/testing" dbutil "github.com/prysmaticlabs/prysm/beacon-chain/db/testing" "github.com/prysmaticlabs/prysm/beacon-chain/p2p" mockP2p "github.com/prysmaticlabs/prysm/beacon-chain/p2p/testing" mockSync "github.com/prysmaticlabs/prysm/beacon-chain/sync/initial-sync/testing" - pbrpc "github.com/prysmaticlabs/prysm/proto/beacon/rpc/v1" "github.com/prysmaticlabs/prysm/shared/bytesutil" "github.com/prysmaticlabs/prysm/shared/testutil" "github.com/prysmaticlabs/prysm/shared/testutil/assert" "github.com/prysmaticlabs/prysm/shared/testutil/require" "github.com/prysmaticlabs/prysm/shared/version" - "google.golang.org/grpc" - "google.golang.org/grpc/reflection" ) func TestNodeServer_GetSyncStatus(t *testing.T) { @@ -78,19 +78,6 @@ func TestNodeServer_GetVersion(t *testing.T) { assert.Equal(t, v, res.Version) } -func TestNodeServer_GetLogsEndpoint(t *testing.T) { - ns := &Server{ - BeaconMonitoringHost: "localhost", - BeaconMonitoringPort: 8080, - } - res, err := ns.GetLogsEndpoint(context.Background(), &ptypes.Empty{}) - require.NoError(t, err) - want := &pbrpc.LogsEndpointResponse{ - BeaconLogsEndpoint: "localhost:8080", - } - assert.DeepEqual(t, want, res) -} - func TestNodeServer_GetImplementedServices(t *testing.T) { server := grpc.NewServer() ns := &Server{ diff --git a/beacon-chain/rpc/service.go b/beacon-chain/rpc/service.go index b97eca595a..a3afa98206 100644 --- a/beacon-chain/rpc/service.go +++ b/beacon-chain/rpc/service.go @@ -37,6 +37,7 @@ import ( pbp2p "github.com/prysmaticlabs/prysm/proto/beacon/p2p/v1" pbrpc "github.com/prysmaticlabs/prysm/proto/beacon/rpc/v1" "github.com/prysmaticlabs/prysm/shared/featureconfig" + "github.com/prysmaticlabs/prysm/shared/logutil" "github.com/prysmaticlabs/prysm/shared/params" "github.com/prysmaticlabs/prysm/shared/traceutil" "github.com/sirupsen/logrus" @@ -259,6 +260,8 @@ func (s *Service) Start() { StateGen: s.stateGen, } nodeServer := &node.Server{ + LogsStreamer: logutil.NewStreamServer(), + StreamLogsBufferSize: 100, // Enough to handle bursts of beacon node logs for gRPC streaming. BeaconDB: s.beaconDB, Server: s.grpcServer, SyncChecker: s.syncService, diff --git a/go.mod b/go.mod index 727fe7ec58..7832239b7d 100644 --- a/go.mod +++ b/go.mod @@ -37,7 +37,6 @@ require ( github.com/google/gopacket v1.1.19 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 github.com/google/uuid v1.1.2 - github.com/gorilla/websocket v1.4.2 github.com/graph-gophers/graphql-go v0.0.0-20200309224638-dae41bde9ef9 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.2.2 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 diff --git a/proto/beacon/rpc/v1/health.pb.go b/proto/beacon/rpc/v1/health.pb.go index 818270549e..bda4d8fb21 100755 --- a/proto/beacon/rpc/v1/health.pb.go +++ b/proto/beacon/rpc/v1/health.pb.go @@ -29,25 +29,25 @@ var _ = math.Inf // proto package needs to be updated. const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package -type LogsEndpointResponse struct { - BeaconLogsEndpoint string `protobuf:"bytes,1,opt,name=beacon_logs_endpoint,json=beaconLogsEndpoint,proto3" json:"beacon_logs_endpoint,omitempty"` +type LogsResponse struct { + Logs []string `protobuf:"bytes,1,rep,name=logs,proto3" json:"logs,omitempty"` XXX_NoUnkeyedLiteral struct{} `json:"-"` XXX_unrecognized []byte `json:"-"` XXX_sizecache int32 `json:"-"` } -func (m *LogsEndpointResponse) Reset() { *m = LogsEndpointResponse{} } -func (m *LogsEndpointResponse) String() string { return proto.CompactTextString(m) } -func (*LogsEndpointResponse) ProtoMessage() {} -func (*LogsEndpointResponse) Descriptor() ([]byte, []int) { +func (m *LogsResponse) Reset() { *m = LogsResponse{} } +func (m *LogsResponse) String() string { return proto.CompactTextString(m) } +func (*LogsResponse) ProtoMessage() {} +func (*LogsResponse) Descriptor() ([]byte, []int) { return fileDescriptor_2e4b7e98e3e10444, []int{0} } -func (m *LogsEndpointResponse) XXX_Unmarshal(b []byte) error { +func (m *LogsResponse) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) } -func (m *LogsEndpointResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { +func (m *LogsResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { if deterministic { - return xxx_messageInfo_LogsEndpointResponse.Marshal(b, m, deterministic) + return xxx_messageInfo_LogsResponse.Marshal(b, m, deterministic) } else { b = b[:cap(b)] n, err := m.MarshalToSizedBuffer(b) @@ -57,50 +57,49 @@ func (m *LogsEndpointResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte return b[:n], nil } } -func (m *LogsEndpointResponse) XXX_Merge(src proto.Message) { - xxx_messageInfo_LogsEndpointResponse.Merge(m, src) +func (m *LogsResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_LogsResponse.Merge(m, src) } -func (m *LogsEndpointResponse) XXX_Size() int { +func (m *LogsResponse) XXX_Size() int { return m.Size() } -func (m *LogsEndpointResponse) XXX_DiscardUnknown() { - xxx_messageInfo_LogsEndpointResponse.DiscardUnknown(m) +func (m *LogsResponse) XXX_DiscardUnknown() { + xxx_messageInfo_LogsResponse.DiscardUnknown(m) } -var xxx_messageInfo_LogsEndpointResponse proto.InternalMessageInfo +var xxx_messageInfo_LogsResponse proto.InternalMessageInfo -func (m *LogsEndpointResponse) GetBeaconLogsEndpoint() string { +func (m *LogsResponse) GetLogs() []string { if m != nil { - return m.BeaconLogsEndpoint + return m.Logs } - return "" + return nil } func init() { - proto.RegisterType((*LogsEndpointResponse)(nil), "ethereum.beacon.rpc.v1.LogsEndpointResponse") + proto.RegisterType((*LogsResponse)(nil), "ethereum.beacon.rpc.v1.LogsResponse") } func init() { proto.RegisterFile("proto/beacon/rpc/v1/health.proto", fileDescriptor_2e4b7e98e3e10444) } var fileDescriptor_2e4b7e98e3e10444 = []byte{ - // 258 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x6c, 0x90, 0xc1, 0x4a, 0xc3, 0x40, - 0x10, 0x86, 0x59, 0x0f, 0x05, 0x17, 0x41, 0x58, 0x4a, 0x91, 0x2a, 0xa1, 0x04, 0x0f, 0x22, 0xb2, - 0x63, 0xf4, 0x0d, 0x84, 0x62, 0x0f, 0x9e, 0xfa, 0x02, 0x65, 0x13, 0xc7, 0x6c, 0x20, 0xdd, 0x59, - 0xb2, 0xd3, 0x80, 0x57, 0xbd, 0x7b, 0xf1, 0xa5, 0x3c, 0x0a, 0xbe, 0x80, 0x04, 0x1f, 0x44, 0x9a, - 0x6d, 0xa0, 0x87, 0x1e, 0x87, 0x6f, 0x7e, 0xfe, 0x6f, 0x46, 0xce, 0x7c, 0x43, 0x4c, 0x90, 0xa3, - 0x29, 0xc8, 0x41, 0xe3, 0x0b, 0x68, 0x33, 0xb0, 0x68, 0x6a, 0xb6, 0xba, 0x47, 0x6a, 0x82, 0x6c, - 0xb1, 0xc1, 0xcd, 0x5a, 0xc7, 0x25, 0xdd, 0xf8, 0x42, 0xb7, 0xd9, 0xf4, 0xa2, 0x24, 0x2a, 0x6b, - 0x04, 0xe3, 0x2b, 0x30, 0xce, 0x11, 0x1b, 0xae, 0xc8, 0x85, 0x98, 0x9a, 0x9e, 0xef, 0x68, 0x3f, - 0xe5, 0x9b, 0x17, 0xc0, 0xb5, 0xe7, 0xd7, 0x08, 0xd3, 0x85, 0x1c, 0x3f, 0x51, 0x19, 0xe6, 0xee, - 0xd9, 0x53, 0xe5, 0x78, 0x89, 0xc1, 0x93, 0x0b, 0xa8, 0x6e, 0xe5, 0x38, 0x76, 0xac, 0x6a, 0x2a, - 0xc3, 0x0a, 0x77, 0xfc, 0x4c, 0xcc, 0xc4, 0xd5, 0xf1, 0x52, 0x45, 0xb6, 0x9f, 0xbc, 0xfb, 0x10, - 0x72, 0xb4, 0xe8, 0x6d, 0xd5, 0xbb, 0x90, 0xa7, 0x8f, 0xc8, 0xfb, 0x58, 0x4d, 0x74, 0xd4, 0xd0, - 0x83, 0x86, 0x9e, 0x6f, 0x35, 0xa6, 0x37, 0xfa, 0xf0, 0x51, 0xfa, 0x90, 0x56, 0x7a, 0xfd, 0xf6, - 0xf3, 0xf7, 0x79, 0x74, 0xa9, 0x52, 0x40, 0xb6, 0xd0, 0x66, 0xa6, 0xf6, 0xd6, 0x0c, 0x5f, 0x82, - 0xad, 0x2a, 0x0c, 0xaa, 0x0f, 0x27, 0x5f, 0x5d, 0x22, 0xbe, 0xbb, 0x44, 0xfc, 0x76, 0x89, 0xc8, - 0x47, 0x7d, 0xef, 0xfd, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x73, 0x6a, 0x3d, 0x50, 0x66, 0x01, - 0x00, 0x00, + // 249 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe2, 0x52, 0x28, 0x28, 0xca, 0x2f, + 0xc9, 0xd7, 0x4f, 0x4a, 0x4d, 0x4c, 0xce, 0xcf, 0xd3, 0x2f, 0x2a, 0x48, 0xd6, 0x2f, 0x33, 0xd4, + 0xcf, 0x48, 0x4d, 0xcc, 0x29, 0xc9, 0xd0, 0x03, 0x4b, 0x09, 0x89, 0xa5, 0x96, 0x64, 0xa4, 0x16, + 0xa5, 0x96, 0xe6, 0xea, 0x41, 0x14, 0xe9, 0x15, 0x15, 0x24, 0xeb, 0x95, 0x19, 0x4a, 0xc9, 0xa4, + 0xe7, 0xe7, 0xa7, 0xe7, 0xa4, 0xea, 0x27, 0x16, 0x64, 0xea, 0x27, 0xe6, 0xe5, 0xe5, 0x97, 0x24, + 0x96, 0x64, 0xe6, 0xe7, 0x15, 0x43, 0x74, 0x49, 0x49, 0x43, 0x65, 0xc1, 0xbc, 0xa4, 0xd2, 0x34, + 0xfd, 0xd4, 0xdc, 0x82, 0x92, 0x4a, 0x88, 0xa4, 0x92, 0x12, 0x17, 0x8f, 0x4f, 0x7e, 0x7a, 0x71, + 0x50, 0x6a, 0x71, 0x41, 0x7e, 0x5e, 0x71, 0xaa, 0x90, 0x10, 0x17, 0x4b, 0x4e, 0x7e, 0x7a, 0xb1, + 0x04, 0xa3, 0x02, 0xb3, 0x06, 0x67, 0x10, 0x98, 0x6d, 0xd4, 0xc6, 0xc8, 0xc5, 0xe6, 0x01, 0x76, + 0x87, 0x50, 0x0d, 0x97, 0x40, 0x70, 0x49, 0x51, 0x6a, 0x62, 0xae, 0x13, 0xd8, 0x01, 0x20, 0xad, + 0x42, 0x62, 0x7a, 0x10, 0x0b, 0xf4, 0x60, 0x16, 0xe8, 0xb9, 0x82, 0x2c, 0x90, 0x52, 0xd1, 0xc3, + 0xee, 0x5c, 0x3d, 0x64, 0x0b, 0x95, 0x34, 0x9a, 0x2e, 0x3f, 0x99, 0xcc, 0xa4, 0x24, 0xa4, 0xa0, + 0x9f, 0x5a, 0x92, 0xa1, 0x5f, 0x66, 0x98, 0x98, 0x53, 0x90, 0x91, 0x08, 0xf3, 0xb7, 0x3e, 0xc8, + 0x7e, 0xfd, 0x62, 0xb0, 0x8d, 0x06, 0x8c, 0x4e, 0x3c, 0x27, 0x1e, 0xc9, 0x31, 0x5e, 0x78, 0x24, + 0xc7, 0xf8, 0xe0, 0x91, 0x1c, 0x63, 0x12, 0x1b, 0xd8, 0x3e, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, + 0xff, 0xb7, 0x40, 0x67, 0x57, 0x38, 0x01, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -115,7 +114,7 @@ const _ = grpc.SupportPackageIsVersion4 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type HealthClient interface { - GetLogsEndpoint(ctx context.Context, in *types.Empty, opts ...grpc.CallOption) (*LogsEndpointResponse, error) + StreamBeaconLogs(ctx context.Context, in *types.Empty, opts ...grpc.CallOption) (Health_StreamBeaconLogsClient, error) } type healthClient struct { @@ -126,64 +125,91 @@ func NewHealthClient(cc *grpc.ClientConn) HealthClient { return &healthClient{cc} } -func (c *healthClient) GetLogsEndpoint(ctx context.Context, in *types.Empty, opts ...grpc.CallOption) (*LogsEndpointResponse, error) { - out := new(LogsEndpointResponse) - err := c.cc.Invoke(ctx, "/ethereum.beacon.rpc.v1.Health/GetLogsEndpoint", in, out, opts...) +func (c *healthClient) StreamBeaconLogs(ctx context.Context, in *types.Empty, opts ...grpc.CallOption) (Health_StreamBeaconLogsClient, error) { + stream, err := c.cc.NewStream(ctx, &_Health_serviceDesc.Streams[0], "/ethereum.beacon.rpc.v1.Health/StreamBeaconLogs", opts...) if err != nil { return nil, err } - return out, nil + x := &healthStreamBeaconLogsClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type Health_StreamBeaconLogsClient interface { + Recv() (*LogsResponse, error) + grpc.ClientStream +} + +type healthStreamBeaconLogsClient struct { + grpc.ClientStream +} + +func (x *healthStreamBeaconLogsClient) Recv() (*LogsResponse, error) { + m := new(LogsResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil } // HealthServer is the server API for Health service. type HealthServer interface { - GetLogsEndpoint(context.Context, *types.Empty) (*LogsEndpointResponse, error) + StreamBeaconLogs(*types.Empty, Health_StreamBeaconLogsServer) error } // UnimplementedHealthServer can be embedded to have forward compatible implementations. type UnimplementedHealthServer struct { } -func (*UnimplementedHealthServer) GetLogsEndpoint(ctx context.Context, req *types.Empty) (*LogsEndpointResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetLogsEndpoint not implemented") +func (*UnimplementedHealthServer) StreamBeaconLogs(req *types.Empty, srv Health_StreamBeaconLogsServer) error { + return status.Errorf(codes.Unimplemented, "method StreamBeaconLogs not implemented") } func RegisterHealthServer(s *grpc.Server, srv HealthServer) { s.RegisterService(&_Health_serviceDesc, srv) } -func _Health_GetLogsEndpoint_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(types.Empty) - if err := dec(in); err != nil { - return nil, err +func _Health_StreamBeaconLogs_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(types.Empty) + if err := stream.RecvMsg(m); err != nil { + return err } - if interceptor == nil { - return srv.(HealthServer).GetLogsEndpoint(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/ethereum.beacon.rpc.v1.Health/GetLogsEndpoint", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(HealthServer).GetLogsEndpoint(ctx, req.(*types.Empty)) - } - return interceptor(ctx, in, info, handler) + return srv.(HealthServer).StreamBeaconLogs(m, &healthStreamBeaconLogsServer{stream}) +} + +type Health_StreamBeaconLogsServer interface { + Send(*LogsResponse) error + grpc.ServerStream +} + +type healthStreamBeaconLogsServer struct { + grpc.ServerStream +} + +func (x *healthStreamBeaconLogsServer) Send(m *LogsResponse) error { + return x.ServerStream.SendMsg(m) } var _Health_serviceDesc = grpc.ServiceDesc{ ServiceName: "ethereum.beacon.rpc.v1.Health", HandlerType: (*HealthServer)(nil), - Methods: []grpc.MethodDesc{ + Methods: []grpc.MethodDesc{}, + Streams: []grpc.StreamDesc{ { - MethodName: "GetLogsEndpoint", - Handler: _Health_GetLogsEndpoint_Handler, + StreamName: "StreamBeaconLogs", + Handler: _Health_StreamBeaconLogs_Handler, + ServerStreams: true, }, }, - Streams: []grpc.StreamDesc{}, Metadata: "proto/beacon/rpc/v1/health.proto", } -func (m *LogsEndpointResponse) Marshal() (dAtA []byte, err error) { +func (m *LogsResponse) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) n, err := m.MarshalToSizedBuffer(dAtA[:size]) @@ -193,12 +219,12 @@ func (m *LogsEndpointResponse) Marshal() (dAtA []byte, err error) { return dAtA[:n], nil } -func (m *LogsEndpointResponse) MarshalTo(dAtA []byte) (int, error) { +func (m *LogsResponse) MarshalTo(dAtA []byte) (int, error) { size := m.Size() return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *LogsEndpointResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { +func (m *LogsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i := len(dAtA) _ = i var l int @@ -207,12 +233,14 @@ func (m *LogsEndpointResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { i -= len(m.XXX_unrecognized) copy(dAtA[i:], m.XXX_unrecognized) } - if len(m.BeaconLogsEndpoint) > 0 { - i -= len(m.BeaconLogsEndpoint) - copy(dAtA[i:], m.BeaconLogsEndpoint) - i = encodeVarintHealth(dAtA, i, uint64(len(m.BeaconLogsEndpoint))) - i-- - dAtA[i] = 0xa + if len(m.Logs) > 0 { + for iNdEx := len(m.Logs) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.Logs[iNdEx]) + copy(dAtA[i:], m.Logs[iNdEx]) + i = encodeVarintHealth(dAtA, i, uint64(len(m.Logs[iNdEx]))) + i-- + dAtA[i] = 0xa + } } return len(dAtA) - i, nil } @@ -228,15 +256,17 @@ func encodeVarintHealth(dAtA []byte, offset int, v uint64) int { dAtA[offset] = uint8(v) return base } -func (m *LogsEndpointResponse) Size() (n int) { +func (m *LogsResponse) Size() (n int) { if m == nil { return 0 } var l int _ = l - l = len(m.BeaconLogsEndpoint) - if l > 0 { - n += 1 + l + sovHealth(uint64(l)) + if len(m.Logs) > 0 { + for _, s := range m.Logs { + l = len(s) + n += 1 + l + sovHealth(uint64(l)) + } } if m.XXX_unrecognized != nil { n += len(m.XXX_unrecognized) @@ -250,7 +280,7 @@ func sovHealth(x uint64) (n int) { func sozHealth(x uint64) (n int) { return sovHealth(uint64((x << 1) ^ uint64((int64(x) >> 63)))) } -func (m *LogsEndpointResponse) Unmarshal(dAtA []byte) error { +func (m *LogsResponse) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 for iNdEx < l { @@ -273,15 +303,15 @@ func (m *LogsEndpointResponse) Unmarshal(dAtA []byte) error { fieldNum := int32(wire >> 3) wireType := int(wire & 0x7) if wireType == 4 { - return fmt.Errorf("proto: LogsEndpointResponse: wiretype end group for non-group") + return fmt.Errorf("proto: LogsResponse: wiretype end group for non-group") } if fieldNum <= 0 { - return fmt.Errorf("proto: LogsEndpointResponse: illegal tag %d (wire type %d)", fieldNum, wire) + return fmt.Errorf("proto: LogsResponse: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field BeaconLogsEndpoint", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field Logs", wireType) } var stringLen uint64 for shift := uint(0); ; shift += 7 { @@ -309,7 +339,7 @@ func (m *LogsEndpointResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.BeaconLogsEndpoint = string(dAtA[iNdEx:postIndex]) + m.Logs = append(m.Logs, string(dAtA[iNdEx:postIndex])) iNdEx = postIndex default: iNdEx = preIndex diff --git a/proto/beacon/rpc/v1/health.proto b/proto/beacon/rpc/v1/health.proto index 20c01810ea..44f9cae370 100644 --- a/proto/beacon/rpc/v1/health.proto +++ b/proto/beacon/rpc/v1/health.proto @@ -8,17 +8,15 @@ import "google/protobuf/empty.proto"; // Health service API // // The health service is able to return important metadata about a beacon node -// such as the address of the logs websocket endpoint used by web clients. +// such being able to stream logs via gRPC. service Health { - // Returns the websocket endpoint which can be reached to subscribe - // to logs from the beacon node. - rpc GetLogsEndpoint(google.protobuf.Empty) returns (LogsEndpointResponse) { + rpc StreamBeaconLogs(google.protobuf.Empty) returns (stream LogsResponse) { option (google.api.http) = { - get: "/eth/v1alpha1/health/logs/endpoint" + get: "/eth/v1alpha1/health/logs/stream" }; } } -message LogsEndpointResponse { - string beacon_logs_endpoint = 1; +message LogsResponse { + repeated string logs = 1; } diff --git a/proto/beacon/rpc/v1_gateway/health.pb.go b/proto/beacon/rpc/v1_gateway/health.pb.go index 1e0b6bd1e2..55a05d0146 100755 --- a/proto/beacon/rpc/v1_gateway/health.pb.go +++ b/proto/beacon/rpc/v1_gateway/health.pb.go @@ -32,16 +32,16 @@ const ( // of the legacy proto package is being used. const _ = proto.ProtoPackageIsVersion4 -type LogsEndpointResponse struct { +type LogsResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - BeaconLogsEndpoint string `protobuf:"bytes,1,opt,name=beacon_logs_endpoint,json=beaconLogsEndpoint,proto3" json:"beacon_logs_endpoint,omitempty"` + Logs []string `protobuf:"bytes,1,rep,name=logs,proto3" json:"logs,omitempty"` } -func (x *LogsEndpointResponse) Reset() { - *x = LogsEndpointResponse{} +func (x *LogsResponse) Reset() { + *x = LogsResponse{} if protoimpl.UnsafeEnabled { mi := &file_proto_beacon_rpc_v1_health_proto_msgTypes[0] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -49,13 +49,13 @@ func (x *LogsEndpointResponse) Reset() { } } -func (x *LogsEndpointResponse) String() string { +func (x *LogsResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*LogsEndpointResponse) ProtoMessage() {} +func (*LogsResponse) ProtoMessage() {} -func (x *LogsEndpointResponse) ProtoReflect() protoreflect.Message { +func (x *LogsResponse) ProtoReflect() protoreflect.Message { mi := &file_proto_beacon_rpc_v1_health_proto_msgTypes[0] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -67,16 +67,16 @@ func (x *LogsEndpointResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use LogsEndpointResponse.ProtoReflect.Descriptor instead. -func (*LogsEndpointResponse) Descriptor() ([]byte, []int) { +// Deprecated: Use LogsResponse.ProtoReflect.Descriptor instead. +func (*LogsResponse) Descriptor() ([]byte, []int) { return file_proto_beacon_rpc_v1_health_proto_rawDescGZIP(), []int{0} } -func (x *LogsEndpointResponse) GetBeaconLogsEndpoint() string { +func (x *LogsResponse) GetLogs() []string { if x != nil { - return x.BeaconLogsEndpoint + return x.Logs } - return "" + return nil } var File_proto_beacon_rpc_v1_health_proto protoreflect.FileDescriptor @@ -89,21 +89,18 @@ var file_proto_beacon_rpc_v1_health_proto_rawDesc = []byte{ 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x48, 0x0a, 0x14, 0x4c, 0x6f, 0x67, 0x73, 0x45, 0x6e, 0x64, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, - 0x14, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x5f, 0x65, 0x6e, 0x64, - 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x62, 0x65, 0x61, - 0x63, 0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x73, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x32, - 0x8e, 0x01, 0x0a, 0x06, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x83, 0x01, 0x0a, 0x0f, 0x47, - 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x16, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x2c, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, - 0x6d, 0x2e, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, - 0x4c, 0x6f, 0x67, 0x73, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x12, 0x22, 0x2f, 0x65, - 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x68, 0x65, 0x61, 0x6c, - 0x74, 0x68, 0x2f, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x22, 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x32, 0x86, 0x01, 0x0a, 0x06, 0x48, 0x65, + 0x61, 0x6c, 0x74, 0x68, 0x12, 0x7c, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x65, + 0x61, 0x63, 0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x1a, 0x24, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x62, 0x65, 0x61, 0x63, + 0x6f, 0x6e, 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x12, 0x20, + 0x2f, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x68, 0x65, + 0x61, 0x6c, 0x74, 0x68, 0x2f, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x30, 0x01, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -120,12 +117,12 @@ func file_proto_beacon_rpc_v1_health_proto_rawDescGZIP() []byte { var file_proto_beacon_rpc_v1_health_proto_msgTypes = make([]protoimpl.MessageInfo, 1) var file_proto_beacon_rpc_v1_health_proto_goTypes = []interface{}{ - (*LogsEndpointResponse)(nil), // 0: ethereum.beacon.rpc.v1.LogsEndpointResponse - (*empty.Empty)(nil), // 1: google.protobuf.Empty + (*LogsResponse)(nil), // 0: ethereum.beacon.rpc.v1.LogsResponse + (*empty.Empty)(nil), // 1: google.protobuf.Empty } var file_proto_beacon_rpc_v1_health_proto_depIdxs = []int32{ - 1, // 0: ethereum.beacon.rpc.v1.Health.GetLogsEndpoint:input_type -> google.protobuf.Empty - 0, // 1: ethereum.beacon.rpc.v1.Health.GetLogsEndpoint:output_type -> ethereum.beacon.rpc.v1.LogsEndpointResponse + 1, // 0: ethereum.beacon.rpc.v1.Health.StreamBeaconLogs:input_type -> google.protobuf.Empty + 0, // 1: ethereum.beacon.rpc.v1.Health.StreamBeaconLogs:output_type -> ethereum.beacon.rpc.v1.LogsResponse 1, // [1:2] is the sub-list for method output_type 0, // [0:1] is the sub-list for method input_type 0, // [0:0] is the sub-list for extension type_name @@ -140,7 +137,7 @@ func file_proto_beacon_rpc_v1_health_proto_init() { } if !protoimpl.UnsafeEnabled { file_proto_beacon_rpc_v1_health_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LogsEndpointResponse); i { + switch v := v.(*LogsResponse); i { case 0: return &v.state case 1: @@ -184,7 +181,7 @@ const _ = grpc.SupportPackageIsVersion6 // // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. type HealthClient interface { - GetLogsEndpoint(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*LogsEndpointResponse, error) + StreamBeaconLogs(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (Health_StreamBeaconLogsClient, error) } type healthClient struct { @@ -195,59 +192,86 @@ func NewHealthClient(cc grpc.ClientConnInterface) HealthClient { return &healthClient{cc} } -func (c *healthClient) GetLogsEndpoint(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (*LogsEndpointResponse, error) { - out := new(LogsEndpointResponse) - err := c.cc.Invoke(ctx, "/ethereum.beacon.rpc.v1.Health/GetLogsEndpoint", in, out, opts...) +func (c *healthClient) StreamBeaconLogs(ctx context.Context, in *empty.Empty, opts ...grpc.CallOption) (Health_StreamBeaconLogsClient, error) { + stream, err := c.cc.NewStream(ctx, &_Health_serviceDesc.Streams[0], "/ethereum.beacon.rpc.v1.Health/StreamBeaconLogs", opts...) if err != nil { return nil, err } - return out, nil + x := &healthStreamBeaconLogsClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type Health_StreamBeaconLogsClient interface { + Recv() (*LogsResponse, error) + grpc.ClientStream +} + +type healthStreamBeaconLogsClient struct { + grpc.ClientStream +} + +func (x *healthStreamBeaconLogsClient) Recv() (*LogsResponse, error) { + m := new(LogsResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil } // HealthServer is the server API for Health service. type HealthServer interface { - GetLogsEndpoint(context.Context, *empty.Empty) (*LogsEndpointResponse, error) + StreamBeaconLogs(*empty.Empty, Health_StreamBeaconLogsServer) error } // UnimplementedHealthServer can be embedded to have forward compatible implementations. type UnimplementedHealthServer struct { } -func (*UnimplementedHealthServer) GetLogsEndpoint(context.Context, *empty.Empty) (*LogsEndpointResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method GetLogsEndpoint not implemented") +func (*UnimplementedHealthServer) StreamBeaconLogs(*empty.Empty, Health_StreamBeaconLogsServer) error { + return status.Errorf(codes.Unimplemented, "method StreamBeaconLogs not implemented") } func RegisterHealthServer(s *grpc.Server, srv HealthServer) { s.RegisterService(&_Health_serviceDesc, srv) } -func _Health_GetLogsEndpoint_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(empty.Empty) - if err := dec(in); err != nil { - return nil, err +func _Health_StreamBeaconLogs_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(empty.Empty) + if err := stream.RecvMsg(m); err != nil { + return err } - if interceptor == nil { - return srv.(HealthServer).GetLogsEndpoint(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/ethereum.beacon.rpc.v1.Health/GetLogsEndpoint", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(HealthServer).GetLogsEndpoint(ctx, req.(*empty.Empty)) - } - return interceptor(ctx, in, info, handler) + return srv.(HealthServer).StreamBeaconLogs(m, &healthStreamBeaconLogsServer{stream}) +} + +type Health_StreamBeaconLogsServer interface { + Send(*LogsResponse) error + grpc.ServerStream +} + +type healthStreamBeaconLogsServer struct { + grpc.ServerStream +} + +func (x *healthStreamBeaconLogsServer) Send(m *LogsResponse) error { + return x.ServerStream.SendMsg(m) } var _Health_serviceDesc = grpc.ServiceDesc{ ServiceName: "ethereum.beacon.rpc.v1.Health", HandlerType: (*HealthServer)(nil), - Methods: []grpc.MethodDesc{ + Methods: []grpc.MethodDesc{}, + Streams: []grpc.StreamDesc{ { - MethodName: "GetLogsEndpoint", - Handler: _Health_GetLogsEndpoint_Handler, + StreamName: "StreamBeaconLogs", + Handler: _Health_StreamBeaconLogs_Handler, + ServerStreams: true, }, }, - Streams: []grpc.StreamDesc{}, Metadata: "proto/beacon/rpc/v1/health.proto", } diff --git a/proto/beacon/rpc/v1_gateway/health.pb.gw.go b/proto/beacon/rpc/v1_gateway/health.pb.gw.go index 26c3038e77..4e8b9a6874 100755 --- a/proto/beacon/rpc/v1_gateway/health.pb.gw.go +++ b/proto/beacon/rpc/v1_gateway/health.pb.gw.go @@ -32,21 +32,20 @@ var _ = runtime.String var _ = utilities.NewDoubleArray var _ = descriptor.ForMessage -func request_Health_GetLogsEndpoint_0(ctx context.Context, marshaler runtime.Marshaler, client HealthClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { +func request_Health_StreamBeaconLogs_0(ctx context.Context, marshaler runtime.Marshaler, client HealthClient, req *http.Request, pathParams map[string]string) (Health_StreamBeaconLogsClient, runtime.ServerMetadata, error) { var protoReq empty.Empty var metadata runtime.ServerMetadata - msg, err := client.GetLogsEndpoint(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) - return msg, metadata, err - -} - -func local_request_Health_GetLogsEndpoint_0(ctx context.Context, marshaler runtime.Marshaler, server HealthServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { - var protoReq empty.Empty - var metadata runtime.ServerMetadata - - msg, err := server.GetLogsEndpoint(ctx, &protoReq) - return msg, metadata, err + stream, err := client.StreamBeaconLogs(ctx, &protoReq) + if err != nil { + return nil, metadata, err + } + header, err := stream.Header() + if err != nil { + return nil, metadata, err + } + metadata.HeaderMD = header + return stream, metadata, nil } @@ -55,24 +54,11 @@ func local_request_Health_GetLogsEndpoint_0(ctx context.Context, marshaler runti // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. func RegisterHealthHandlerServer(ctx context.Context, mux *runtime.ServeMux, server HealthServer) error { - mux.Handle("GET", pattern_Health_GetLogsEndpoint_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { - ctx, cancel := context.WithCancel(req.Context()) - defer cancel() - inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) - rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - resp, md, err := local_request_Health_GetLogsEndpoint_0(rctx, inboundMarshaler, server, req, pathParams) - ctx = runtime.NewServerMetadataContext(ctx, md) - if err != nil { - runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) - return - } - - forward_Health_GetLogsEndpoint_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) - + mux.Handle("GET", pattern_Health_StreamBeaconLogs_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + err := status.Error(codes.Unimplemented, "streaming calls are not yet supported in the in-process transport") + _, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return }) return nil @@ -116,7 +102,7 @@ func RegisterHealthHandler(ctx context.Context, mux *runtime.ServeMux, conn *grp // "HealthClient" to call the correct interceptors. func RegisterHealthHandlerClient(ctx context.Context, mux *runtime.ServeMux, client HealthClient) error { - mux.Handle("GET", pattern_Health_GetLogsEndpoint_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + mux.Handle("GET", pattern_Health_StreamBeaconLogs_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { ctx, cancel := context.WithCancel(req.Context()) defer cancel() inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) @@ -125,14 +111,14 @@ func RegisterHealthHandlerClient(ctx context.Context, mux *runtime.ServeMux, cli runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - resp, md, err := request_Health_GetLogsEndpoint_0(rctx, inboundMarshaler, client, req, pathParams) + resp, md, err := request_Health_StreamBeaconLogs_0(rctx, inboundMarshaler, client, req, pathParams) ctx = runtime.NewServerMetadataContext(ctx, md) if err != nil { runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) return } - forward_Health_GetLogsEndpoint_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + forward_Health_StreamBeaconLogs_0(ctx, mux, outboundMarshaler, w, req, func() (proto.Message, error) { return resp.Recv() }, mux.GetForwardResponseOptions()...) }) @@ -140,9 +126,9 @@ func RegisterHealthHandlerClient(ctx context.Context, mux *runtime.ServeMux, cli } var ( - pattern_Health_GetLogsEndpoint_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"eth", "v1alpha1", "health", "logs", "endpoint"}, "", runtime.AssumeColonVerbOpt(true))) + pattern_Health_StreamBeaconLogs_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"eth", "v1alpha1", "health", "logs", "stream"}, "", runtime.AssumeColonVerbOpt(true))) ) var ( - forward_Health_GetLogsEndpoint_0 = runtime.ForwardResponseMessage + forward_Health_StreamBeaconLogs_0 = runtime.ForwardResponseStream ) diff --git a/proto/validator/accounts/v2/BUILD.bazel b/proto/validator/accounts/v2/BUILD.bazel index 222fb8cb6b..f7a02a28e3 100644 --- a/proto/validator/accounts/v2/BUILD.bazel +++ b/proto/validator/accounts/v2/BUILD.bazel @@ -11,6 +11,7 @@ proto_library( ], visibility = ["//visibility:public"], deps = [ + "//proto/beacon/rpc/v1:v1_proto", "@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:proto", "@com_google_protobuf//:empty_proto", "@go_googleapis//google/api:annotations_proto", @@ -28,6 +29,7 @@ go_proto_library( proto = ":ethereum_validator_accounts_v2_proto", visibility = ["//visibility:public"], deps = [ + "//proto/beacon/rpc/v1:go_default_library", "@com_github_golang_protobuf//descriptor:go_default_library", "@com_github_golang_protobuf//ptypes/empty:go_default_library", "@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library", @@ -45,6 +47,7 @@ go_proto_library( proto = ":ethereum_validator_accounts_v2_proto", visibility = ["//visibility:public"], deps = [ + "//proto/beacon/rpc/v1:go_default_library", "@com_github_prysmaticlabs_ethereumapis//eth/v1alpha1:go_default_library", "@go_googleapis//google/api:annotations_go_proto", ], diff --git a/proto/validator/accounts/v2/web_api.pb.go b/proto/validator/accounts/v2/web_api.pb.go index 3444aa8a2c..e0375d3358 100755 --- a/proto/validator/accounts/v2/web_api.pb.go +++ b/proto/validator/accounts/v2/web_api.pb.go @@ -14,6 +14,7 @@ import ( proto "github.com/gogo/protobuf/proto" types "github.com/gogo/protobuf/types" v1alpha1 "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" + v1 "github.com/prysmaticlabs/prysm/proto/beacon/rpc/v1" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" @@ -1316,131 +1317,133 @@ func init() { } var fileDescriptor_8a5153635bfe042e = []byte{ - // 1979 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x58, 0xcf, 0x6f, 0x1c, 0x49, - 0xf5, 0xff, 0xb6, 0xed, 0x38, 0xe3, 0x37, 0xe3, 0x1f, 0x29, 0x3b, 0xf6, 0x64, 0xe2, 0xd8, 0x4e, - 0x67, 0x13, 0x3b, 0x4e, 0x76, 0x26, 0x3b, 0xf9, 0x6e, 0x12, 0xe5, 0x82, 0xe2, 0xf1, 0x90, 0x44, - 0xce, 0x0f, 0xd3, 0xf1, 0x26, 0xe2, 0xb2, 0xad, 0x72, 0x77, 0xa5, 0xa7, 0xe4, 0x99, 0xea, 0xde, - 0xee, 0x1a, 0xc7, 0x0e, 0x17, 0x58, 0xad, 0x84, 0x00, 0x71, 0x80, 0x3d, 0x20, 0x24, 0x84, 0x04, - 0x67, 0x0e, 0x20, 0x21, 0xed, 0xbf, 0xc0, 0x11, 0x09, 0xee, 0xa0, 0x88, 0x0b, 0xf0, 0x4f, 0xa0, - 0xaa, 0xae, 0xea, 0x1f, 0x93, 0xe9, 0x1d, 0x5b, 0xc0, 0x85, 0x5b, 0xd7, 0xfb, 0xf9, 0xa9, 0x57, - 0xaf, 0xde, 0x7b, 0xd5, 0x70, 0x3d, 0x08, 0x7d, 0xee, 0x37, 0x0e, 0x71, 0x97, 0xba, 0x98, 0xfb, - 0x61, 0x03, 0x3b, 0x8e, 0xdf, 0x67, 0x3c, 0x6a, 0x1c, 0x36, 0x1b, 0x6f, 0xc8, 0xbe, 0x8d, 0x03, - 0x5a, 0x97, 0x32, 0x68, 0x85, 0xf0, 0x0e, 0x09, 0x49, 0xbf, 0x57, 0x4f, 0xa4, 0xeb, 0x5a, 0xba, - 0x7e, 0xd8, 0xac, 0xad, 0x12, 0xde, 0x69, 0x1c, 0x7e, 0x84, 0xbb, 0x41, 0x07, 0x7f, 0xd4, 0xd8, - 0x27, 0xd8, 0xf1, 0x99, 0xed, 0x74, 0x30, 0x65, 0xb1, 0x81, 0xda, 0x52, 0x4e, 0x80, 0xf9, 0x2e, - 0x51, 0x8c, 0xe5, 0x1c, 0x23, 0xb5, 0xae, 0xb8, 0x9e, 0xef, 0x7b, 0x5d, 0xd2, 0xc0, 0x01, 0x6d, - 0x60, 0xc6, 0x7c, 0x8e, 0x39, 0xf5, 0x59, 0xa4, 0xb8, 0x17, 0x15, 0x57, 0xae, 0xf6, 0xfb, 0xaf, - 0x1b, 0xa4, 0x17, 0xf0, 0x63, 0xc5, 0xfc, 0xd0, 0xa3, 0xbc, 0xd3, 0xdf, 0xaf, 0x3b, 0x7e, 0xaf, - 0xe1, 0xf9, 0x9e, 0x9f, 0x4a, 0x89, 0x55, 0xbc, 0x75, 0xf1, 0x15, 0x8b, 0x9b, 0xff, 0x1c, 0x83, - 0xf9, 0x56, 0x48, 0x30, 0x27, 0xaf, 0x70, 0xb7, 0x4b, 0xb8, 0x45, 0x3e, 0xeb, 0x93, 0x88, 0xa3, - 0x67, 0x00, 0x07, 0xe4, 0xb8, 0x87, 0x19, 0xf6, 0x48, 0x58, 0x35, 0xd6, 0x8c, 0x8d, 0x99, 0x66, - 0xbd, 0xfe, 0xf5, 0xe1, 0xa8, 0xef, 0x24, 0x1a, 0x3b, 0x94, 0xb9, 0x56, 0xc6, 0x02, 0x5a, 0x87, - 0xd9, 0x37, 0xd2, 0x81, 0x1d, 0xe0, 0x28, 0x7a, 0xe3, 0x87, 0x6e, 0x75, 0x6c, 0xcd, 0xd8, 0x98, - 0xb2, 0x66, 0x62, 0xf2, 0xae, 0xa2, 0xa2, 0x1a, 0x94, 0x7a, 0x8c, 0xf4, 0x7c, 0x46, 0x9d, 0xea, - 0xb8, 0x94, 0x48, 0xd6, 0xe8, 0x32, 0x54, 0x58, 0xbf, 0x67, 0x6b, 0x97, 0xd5, 0x89, 0x35, 0x63, - 0x63, 0xc2, 0x2a, 0xb3, 0x7e, 0xef, 0x81, 0x22, 0xa1, 0x55, 0x28, 0x87, 0xa4, 0xe7, 0x73, 0x62, - 0x63, 0xd7, 0x0d, 0xab, 0x67, 0xa4, 0x05, 0x88, 0x49, 0x0f, 0x5c, 0x37, 0x44, 0xd7, 0x60, 0x56, - 0x09, 0x38, 0xa1, 0x00, 0xc3, 0x3b, 0xd5, 0x49, 0x29, 0x34, 0x1d, 0x93, 0x5b, 0x21, 0xdf, 0xc5, - 0xbc, 0x93, 0x91, 0x3b, 0x20, 0xc7, 0xb1, 0xdc, 0xd9, 0xac, 0xdc, 0x0e, 0x39, 0x96, 0x72, 0x37, - 0x00, 0x69, 0x7b, 0x38, 0x35, 0x59, 0x92, 0xa2, 0xca, 0x42, 0x0b, 0x2b, 0xa3, 0xe6, 0xa7, 0xb0, - 0x90, 0x0f, 0x76, 0x14, 0xf8, 0x2c, 0x22, 0xe8, 0x9b, 0x30, 0x19, 0x87, 0x41, 0x46, 0xba, 0x3c, - 0x3a, 0xd2, 0x79, 0x7d, 0x4b, 0x69, 0x9b, 0x5f, 0x19, 0xb0, 0xd4, 0x76, 0x29, 0x8f, 0xd9, 0x2d, - 0x9f, 0xbd, 0xa6, 0x9e, 0x3e, 0xd1, 0x81, 0xc8, 0x18, 0x27, 0x89, 0xcc, 0xd8, 0x09, 0x23, 0x33, - 0x7e, 0xf2, 0xc8, 0x4c, 0x0c, 0x8f, 0xcc, 0x1d, 0xa8, 0x3e, 0x24, 0x8c, 0x84, 0x98, 0x93, 0xa7, - 0xea, 0xb8, 0x93, 0xe8, 0x64, 0x53, 0xc2, 0xc8, 0xa7, 0x84, 0xf9, 0x43, 0x03, 0x66, 0x06, 0x82, - 0xb9, 0x0a, 0xe5, 0x24, 0xd5, 0x78, 0x47, 0x6f, 0x54, 0xa7, 0x19, 0xef, 0xa0, 0x57, 0x30, 0x9b, - 0x66, 0xa6, 0x7d, 0x40, 0x59, 0x9c, 0x8b, 0xa7, 0x4f, 0xf0, 0x99, 0x83, 0xdc, 0xda, 0xfc, 0xa9, - 0x01, 0xf3, 0x4f, 0x68, 0xc4, 0x75, 0x36, 0xea, 0xd0, 0x7f, 0x08, 0xf3, 0x1e, 0xe1, 0xb6, 0x4b, - 0x02, 0x3f, 0xa2, 0xdc, 0xe6, 0x47, 0xb6, 0x8b, 0x39, 0x96, 0xc8, 0x4a, 0xd6, 0x9c, 0x47, 0xf8, - 0x76, 0xcc, 0xd9, 0x3b, 0xda, 0xc6, 0x1c, 0xa3, 0x8b, 0x30, 0x15, 0x60, 0x8f, 0xd8, 0x11, 0x7d, - 0x4b, 0x24, 0xb2, 0x33, 0x56, 0x49, 0x10, 0x5e, 0xd0, 0xb7, 0x04, 0x5d, 0x02, 0x90, 0x4c, 0xee, - 0x1f, 0x10, 0xa6, 0x02, 0x2f, 0xc5, 0xf7, 0x04, 0x01, 0xcd, 0xc1, 0x38, 0xee, 0x76, 0x65, 0x94, - 0x4b, 0x96, 0xf8, 0x34, 0x7f, 0x6d, 0xc0, 0x42, 0x1e, 0x94, 0x8a, 0x53, 0x0b, 0x4a, 0xc9, 0x4d, - 0x32, 0xd6, 0xc6, 0x37, 0xca, 0xcd, 0xf5, 0x51, 0xfb, 0x57, 0x36, 0xac, 0x44, 0x51, 0x24, 0x03, - 0x23, 0x47, 0x22, 0xd4, 0x09, 0x26, 0x95, 0x34, 0x82, 0xbc, 0x9b, 0xe0, 0xba, 0x04, 0xc0, 0x7d, - 0x8e, 0xbb, 0xf1, 0xa6, 0xc6, 0xe5, 0xa6, 0xa6, 0x24, 0x45, 0xec, 0xca, 0xfc, 0x9d, 0x01, 0x67, - 0x95, 0x71, 0xd4, 0x84, 0xf3, 0xca, 0x3b, 0x65, 0x9e, 0x1d, 0xf4, 0xf7, 0xbb, 0xd4, 0x11, 0xa9, - 0x26, 0xe3, 0x55, 0xb1, 0xe6, 0x53, 0xe6, 0xae, 0xe4, 0xed, 0x90, 0x63, 0x51, 0x19, 0x14, 0x24, - 0x9b, 0xe1, 0x1e, 0x51, 0x18, 0xca, 0x8a, 0xf6, 0x0c, 0xf7, 0x88, 0x40, 0x3a, 0x78, 0x00, 0xe3, - 0xd2, 0xe0, 0xb4, 0x9b, 0x8b, 0xfe, 0xba, 0x90, 0x0b, 0xe9, 0xa1, 0x2c, 0xb9, 0xd9, 0x9c, 0x9d, - 0x49, 0xc9, 0x32, 0x65, 0x77, 0x60, 0x46, 0xc7, 0x23, 0xbd, 0x62, 0x29, 0xdc, 0x38, 0xa8, 0x15, - 0x0b, 0x02, 0x8d, 0x32, 0x42, 0x55, 0x38, 0x4b, 0x99, 0x4b, 0x1d, 0x12, 0x55, 0xc7, 0xd6, 0xc6, - 0x37, 0x26, 0x2c, 0xbd, 0x34, 0x3f, 0x85, 0xf2, 0x83, 0x3e, 0xef, 0x68, 0x4b, 0x35, 0x28, 0x25, - 0x75, 0x52, 0xa5, 0xbc, 0x5e, 0xa3, 0xdb, 0x70, 0x5e, 0x7f, 0xdb, 0x8e, 0xb8, 0xe2, 0x61, 0x4f, - 0x82, 0x52, 0x9b, 0x5e, 0xd0, 0xcc, 0x56, 0x86, 0x67, 0x3e, 0x87, 0x4a, 0x6c, 0x5f, 0x1d, 0xfe, - 0x02, 0x9c, 0x89, 0x4f, 0x2b, 0xb6, 0x1e, 0x2f, 0xd0, 0x75, 0x98, 0x93, 0x1f, 0x36, 0x39, 0x0a, - 0x68, 0x98, 0x5a, 0x9d, 0xb0, 0x66, 0x25, 0xbd, 0x9d, 0x90, 0xcd, 0xbf, 0x18, 0xb0, 0xf8, 0xcc, - 0x77, 0x49, 0xcb, 0x67, 0x8c, 0x38, 0x82, 0x94, 0xd8, 0xbe, 0x05, 0x0b, 0xaa, 0x15, 0x8a, 0x86, - 0x67, 0x13, 0xe6, 0x06, 0x3e, 0x65, 0x5c, 0xb9, 0x42, 0x31, 0x4f, 0xe8, 0xb6, 0x15, 0x07, 0x2d, - 0xc3, 0x94, 0x13, 0xdb, 0x21, 0xf1, 0x5d, 0x2c, 0x59, 0x29, 0x41, 0x44, 0x2d, 0x3a, 0x66, 0x0e, - 0x65, 0x9e, 0x3c, 0xb1, 0x92, 0xa5, 0x97, 0xe2, 0xd8, 0x3d, 0xc2, 0x48, 0x44, 0x23, 0x9b, 0xd3, - 0x1e, 0xd1, 0x0d, 0x41, 0xd1, 0xf6, 0x68, 0x8f, 0xa0, 0x7b, 0x50, 0xd5, 0xc7, 0xee, 0xf8, 0x8c, - 0x87, 0xd8, 0xe1, 0xb2, 0x00, 0x92, 0x28, 0x92, 0xdd, 0xa1, 0x62, 0x2d, 0x2a, 0x7e, 0x4b, 0xb1, - 0x1f, 0xc4, 0x5c, 0xf3, 0xbb, 0xe2, 0xe2, 0xf8, 0x5e, 0xa4, 0x51, 0x26, 0xfb, 0xbb, 0x03, 0x4b, - 0xc9, 0xf5, 0xb0, 0xbb, 0xbe, 0x17, 0x0d, 0x6e, 0xf1, 0x7c, 0xc2, 0xce, 0xea, 0x67, 0xe2, 0x92, - 0x57, 0x1a, 0xcb, 0xc6, 0x25, 0xab, 0x61, 0x7e, 0x69, 0xc0, 0xf9, 0x56, 0x07, 0x33, 0x8f, 0xe8, - 0xfe, 0xa8, 0x13, 0xe4, 0x3a, 0xcc, 0x39, 0xfd, 0x30, 0x24, 0x2c, 0xd3, 0x50, 0x63, 0xe7, 0xb3, - 0x8a, 0x9e, 0xed, 0xa8, 0x03, 0x3d, 0xf7, 0x04, 0xb9, 0x34, 0xfe, 0x35, 0xb9, 0x74, 0x0f, 0xce, - 0x3d, 0xc2, 0xd1, 0x40, 0xd5, 0xbd, 0x02, 0xd3, 0xaa, 0xea, 0x92, 0x23, 0x1a, 0xc9, 0x92, 0x22, - 0x8e, 0xaa, 0x12, 0x13, 0xdb, 0x92, 0x66, 0x1e, 0xc2, 0xe2, 0xe3, 0x5e, 0xe0, 0x87, 0x5c, 0xdc, - 0x06, 0xee, 0x87, 0x24, 0x53, 0x22, 0xd1, 0x81, 0xa6, 0xd9, 0x54, 0xca, 0x10, 0x57, 0xde, 0xa0, - 0x29, 0xeb, 0x5c, 0xc2, 0x79, 0xac, 0x18, 0x79, 0xf1, 0x81, 0xdd, 0xa5, 0xe2, 0x3a, 0x04, 0xe6, - 0x0e, 0x2c, 0xbd, 0xe7, 0x37, 0x4d, 0x56, 0xed, 0xce, 0x7e, 0xff, 0xf2, 0x22, 0xcd, 0x4b, 0x4a, - 0x4d, 0x64, 0xbe, 0x02, 0xf4, 0x08, 0x47, 0x9f, 0x44, 0xc4, 0x7d, 0x45, 0xf6, 0x13, 0x3b, 0x26, - 0x4c, 0x77, 0x70, 0x64, 0x47, 0xd4, 0x63, 0xc4, 0xb5, 0xfb, 0x81, 0xda, 0x7f, 0xb9, 0x83, 0xa3, - 0x17, 0x92, 0xf6, 0x49, 0x20, 0x8a, 0xa0, 0x90, 0x51, 0xad, 0x5e, 0xe5, 0x79, 0x47, 0x87, 0xd2, - 0x34, 0xa1, 0x22, 0x4e, 0x3f, 0x31, 0x89, 0x60, 0x42, 0x24, 0x8a, 0x8a, 0x82, 0xfc, 0x36, 0x7f, - 0x39, 0x06, 0x0b, 0x5b, 0x32, 0x51, 0x5e, 0x70, 0xcc, 0xfb, 0xd1, 0xff, 0xd8, 0xa5, 0x43, 0xdf, - 0x00, 0x90, 0xf3, 0xb3, 0xdd, 0x21, 0xd8, 0x95, 0x93, 0x59, 0xb9, 0xb9, 0x96, 0xb6, 0x25, 0xc2, - 0x3b, 0x75, 0x3d, 0x35, 0xd7, 0x5b, 0x42, 0xf0, 0x11, 0xc1, 0xae, 0x35, 0xe5, 0xe8, 0xcf, 0xcd, - 0xbb, 0x30, 0x93, 0xef, 0xd2, 0xa8, 0x0c, 0x67, 0xb7, 0xdb, 0xd6, 0xe3, 0x97, 0xed, 0xed, 0xb9, - 0xff, 0x43, 0x15, 0x28, 0x3d, 0x7e, 0xba, 0xfb, 0xdc, 0xda, 0x6b, 0x6f, 0xcf, 0x19, 0x08, 0x60, - 0xd2, 0x6a, 0x3f, 0x7d, 0xbe, 0xd7, 0x9e, 0x1b, 0x6b, 0xfe, 0x7d, 0x02, 0x26, 0xe3, 0x83, 0x40, - 0xbf, 0x32, 0xa0, 0x92, 0x9d, 0xd3, 0xd0, 0xed, 0x51, 0x8d, 0x71, 0xc8, 0x08, 0x5d, 0xfb, 0xff, - 0xd3, 0x29, 0xc5, 0xe7, 0x68, 0x5e, 0xfb, 0xfc, 0x4f, 0x7f, 0xfb, 0x72, 0x6c, 0xcd, 0xbc, 0x28, - 0x5e, 0x23, 0xe9, 0x1b, 0x25, 0xce, 0x99, 0x86, 0x23, 0x55, 0xee, 0x1b, 0x9b, 0x88, 0x43, 0x25, - 0x3b, 0xe5, 0xa1, 0xc5, 0x7a, 0xfc, 0x2a, 0xa8, 0xeb, 0x79, 0xbf, 0xde, 0x16, 0xaf, 0x82, 0xda, - 0x29, 0x47, 0x49, 0x73, 0x59, 0xfa, 0x5f, 0x44, 0x0b, 0xc3, 0xfc, 0xa3, 0x1f, 0x1b, 0x30, 0x37, - 0x38, 0xa7, 0x15, 0xba, 0xbe, 0x37, 0xca, 0x75, 0xd1, 0xc4, 0x67, 0xae, 0x4b, 0x10, 0x97, 0xd1, - 0x6a, 0x1e, 0x84, 0x9e, 0xfa, 0x1a, 0x9e, 0x52, 0x44, 0xbf, 0x37, 0x60, 0x76, 0xe0, 0x66, 0xa3, - 0x3b, 0xa3, 0xdc, 0x0e, 0x2f, 0x41, 0xb5, 0xbb, 0xa7, 0xd6, 0x53, 0x68, 0x6f, 0x49, 0xb4, 0x9b, - 0xe6, 0xd5, 0xa1, 0x47, 0x96, 0x54, 0xa3, 0x46, 0x5c, 0x4b, 0xee, 0x1b, 0x9b, 0xcd, 0xdf, 0x8e, - 0x41, 0x29, 0x79, 0xb2, 0xfc, 0xdc, 0x80, 0x4a, 0x76, 0x40, 0x1b, 0x9d, 0x6d, 0x43, 0x66, 0xcc, - 0xd1, 0xd9, 0x36, 0x6c, 0x06, 0x34, 0x57, 0x24, 0xf4, 0x2a, 0x5a, 0xcc, 0x43, 0x4f, 0xc6, 0xbb, - 0xef, 0x1b, 0x30, 0x93, 0x6f, 0x40, 0xe8, 0xe3, 0x91, 0x69, 0x3d, 0xac, 0x61, 0xd5, 0x0a, 0x92, - 0xa4, 0x28, 0xdf, 0x75, 0x4d, 0x6f, 0x10, 0x97, 0xca, 0x90, 0x7d, 0xaf, 0x04, 0x93, 0x71, 0xe1, - 0x43, 0x5f, 0x18, 0x30, 0xfb, 0x90, 0xf0, 0x6c, 0x19, 0x2c, 0xcc, 0xc1, 0x91, 0x61, 0x19, 0x56, - 0x4c, 0xcd, 0x2b, 0x12, 0xd4, 0x25, 0x34, 0x00, 0x2a, 0x2e, 0xa2, 0x8d, 0x28, 0x76, 0xf9, 0x95, - 0x01, 0x17, 0x1e, 0x12, 0xfe, 0x52, 0xb3, 0x77, 0x71, 0xc8, 0xa9, 0x43, 0x03, 0xd9, 0x24, 0xd1, - 0xdd, 0x82, 0xa2, 0x55, 0xa8, 0xa1, 0x03, 0xf5, 0x71, 0x81, 0x62, 0x91, 0x96, 0x82, 0xbc, 0x29, - 0x21, 0x7f, 0x80, 0xcc, 0xa1, 0x90, 0x83, 0x1c, 0xb6, 0xdf, 0x18, 0xb0, 0x94, 0xc3, 0x41, 0xc2, - 0xd7, 0x7e, 0xd8, 0xc3, 0xcc, 0x21, 0xa8, 0x39, 0xd2, 0x7d, 0x2a, 0xac, 0x21, 0xdf, 0x3e, 0x95, - 0x8e, 0x02, 0xbc, 0x21, 0x01, 0x9b, 0x68, 0x6d, 0x38, 0xe0, 0x0c, 0xa4, 0x1f, 0x18, 0x30, 0x9d, - 0x85, 0x1b, 0xa1, 0x9b, 0x05, 0x0e, 0x45, 0x8e, 0xa7, 0x62, 0x1a, 0xde, 0xe5, 0x51, 0xf0, 0xa2, - 0xa2, 0x82, 0xa3, 0xc0, 0x1c, 0xa6, 0x9e, 0x7f, 0x61, 0xc0, 0x42, 0x16, 0xcb, 0x16, 0xee, 0x0a, - 0x8c, 0xb9, 0x4b, 0x5b, 0x0c, 0x49, 0x4b, 0x6b, 0x64, 0x1b, 0xa3, 0x90, 0x69, 0x05, 0xf3, 0xaa, - 0x04, 0xb8, 0x8a, 0x2e, 0x0d, 0x05, 0xb8, 0xaf, 0x51, 0x1c, 0xc2, 0xb9, 0x2c, 0xba, 0x6f, 0xf5, - 0x49, 0x9f, 0x14, 0xde, 0x8d, 0xab, 0xa3, 0xbc, 0x4b, 0x75, 0xd3, 0x94, 0xae, 0x97, 0x51, 0x6d, - 0xa8, 0xeb, 0xcf, 0xa4, 0x0b, 0x17, 0x4a, 0x0f, 0x09, 0xdf, 0x25, 0x24, 0x2c, 0xbe, 0x8a, 0xcb, - 0x05, 0xee, 0xa4, 0xd6, 0x08, 0x2f, 0x81, 0x90, 0x69, 0xfe, 0x79, 0x02, 0x26, 0x1f, 0x11, 0xdc, - 0xe5, 0x1d, 0xf4, 0xb3, 0x38, 0x85, 0xb7, 0x92, 0xb1, 0x26, 0x7d, 0x87, 0x14, 0x02, 0x18, 0xd9, - 0x18, 0x86, 0xbf, 0x67, 0xcc, 0x9b, 0x12, 0xda, 0x35, 0xf4, 0x41, 0x1e, 0x5a, 0x47, 0x22, 0x91, - 0x3f, 0xf5, 0x6c, 0x27, 0xf5, 0x1e, 0xb7, 0x48, 0x9e, 0x9d, 0xe3, 0xff, 0x8d, 0xf2, 0x34, 0xec, - 0x01, 0x62, 0xde, 0x90, 0x80, 0xae, 0xa2, 0x2b, 0x43, 0x01, 0x89, 0x39, 0xb1, 0x41, 0x12, 0xd7, - 0x3f, 0x32, 0x60, 0xee, 0x05, 0x0f, 0x09, 0xee, 0x6d, 0x25, 0x0f, 0x8c, 0x42, 0x3c, 0x37, 0x4f, - 0x82, 0x27, 0xc1, 0xd1, 0x90, 0x38, 0xae, 0xa3, 0xf5, 0x62, 0x1c, 0x49, 0xc9, 0x14, 0x00, 0x6e, - 0x19, 0xe8, 0x27, 0x06, 0xcc, 0xc7, 0x68, 0x5e, 0x66, 0xdf, 0x48, 0xff, 0x21, 0x40, 0x4d, 0x09, - 0xe8, 0x26, 0xda, 0x2c, 0x06, 0x94, 0x52, 0x35, 0xa6, 0xe6, 0x3f, 0xc6, 0x61, 0x42, 0x3c, 0x8e, - 0xd1, 0x77, 0x00, 0xd2, 0xc9, 0xbe, 0x10, 0x52, 0x73, 0x14, 0xa4, 0xf7, 0x5f, 0x07, 0xe6, 0x65, - 0x09, 0xec, 0x22, 0xba, 0x90, 0x07, 0x46, 0x19, 0xe5, 0x14, 0x77, 0xe9, 0x5b, 0xe2, 0xa2, 0xcf, - 0x0d, 0x38, 0xf3, 0xc4, 0xf7, 0x28, 0x43, 0x37, 0x46, 0xfe, 0x86, 0x49, 0xff, 0x14, 0x8c, 0x0e, - 0x50, 0xf6, 0xd9, 0xaf, 0xfb, 0xbd, 0x39, 0x9f, 0xc7, 0xd1, 0x15, 0x7e, 0xc5, 0x54, 0xf9, 0x85, - 0x01, 0x93, 0xe2, 0xb9, 0xd2, 0x0f, 0xfe, 0x9b, 0x28, 0x56, 0x25, 0x8a, 0x0b, 0xe6, 0xc0, 0x8c, - 0x19, 0x49, 0xc7, 0x02, 0xc6, 0xb7, 0x61, 0xf2, 0x89, 0xef, 0xf9, 0x7d, 0x5e, 0x78, 0x08, 0x45, - 0xe3, 0x44, 0x81, 0xe9, 0xae, 0xb4, 0x76, 0xdf, 0xd8, 0xdc, 0xaa, 0xfc, 0xe1, 0xdd, 0x8a, 0xf1, - 0xc7, 0x77, 0x2b, 0xc6, 0x5f, 0xdf, 0xad, 0x18, 0xfb, 0x93, 0x52, 0xfd, 0xf6, 0xbf, 0x02, 0x00, - 0x00, 0xff, 0xff, 0xb2, 0x72, 0x68, 0x73, 0x14, 0x18, 0x00, 0x00, + // 2009 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x58, 0xcd, 0x6f, 0x1c, 0x49, + 0x15, 0xa7, 0x6d, 0xc7, 0x19, 0xbf, 0x99, 0xd8, 0x4e, 0xd9, 0xb1, 0x27, 0x8e, 0x63, 0x3b, 0x95, + 0x0f, 0x3b, 0x4e, 0x76, 0x26, 0x99, 0xb0, 0x49, 0x94, 0x0b, 0x8a, 0xc7, 0x43, 0x12, 0x39, 0x1f, + 0xa6, 0xe3, 0x4d, 0xc4, 0x65, 0x5b, 0xe5, 0xee, 0x4a, 0x4f, 0xc9, 0x33, 0xdd, 0xbd, 0xdd, 0x35, + 0x13, 0x3b, 0x5c, 0x60, 0x59, 0x09, 0x81, 0xc4, 0x01, 0xf6, 0x80, 0x90, 0x10, 0x12, 0x9c, 0x39, + 0x80, 0x84, 0xb4, 0xff, 0x02, 0x07, 0x0e, 0x48, 0xfc, 0x01, 0xa0, 0x88, 0x0b, 0xf0, 0x4f, 0xa0, + 0xaa, 0xae, 0xea, 0x8f, 0xc9, 0xf4, 0x8e, 0x2d, 0xc4, 0x85, 0x5b, 0xd7, 0xfb, 0xfc, 0xd5, 0xab, + 0x57, 0xef, 0xbd, 0x6a, 0xb8, 0x1e, 0x84, 0x3e, 0xf7, 0xeb, 0x7d, 0xd2, 0x61, 0x0e, 0xe1, 0x7e, + 0x58, 0x27, 0xb6, 0xed, 0xf7, 0x3c, 0x1e, 0xd5, 0xfb, 0x8d, 0xfa, 0x5b, 0xba, 0x6f, 0x91, 0x80, + 0xd5, 0xa4, 0x0c, 0x5a, 0xa1, 0xbc, 0x4d, 0x43, 0xda, 0xeb, 0xd6, 0x12, 0xe9, 0x9a, 0x96, 0xae, + 0xf5, 0x1b, 0x4b, 0x6b, 0xb1, 0xa9, 0x7d, 0x4a, 0x6c, 0xdf, 0xab, 0x87, 0x81, 0x5d, 0xef, 0xdf, + 0xae, 0xb7, 0x29, 0xe9, 0xf0, 0x76, 0x6c, 0x61, 0x69, 0x95, 0xf2, 0x76, 0xbd, 0x7f, 0x9b, 0x74, + 0x82, 0x36, 0xb9, 0xad, 0x04, 0x2d, 0xbb, 0x4d, 0x98, 0xa7, 0x04, 0x16, 0x73, 0x02, 0x9e, 0xef, + 0x50, 0xc5, 0x58, 0xce, 0x31, 0x52, 0xff, 0x8a, 0xeb, 0xfa, 0xbe, 0xdb, 0xa1, 0x75, 0x12, 0xb0, + 0x3a, 0xf1, 0x3c, 0x9f, 0x13, 0xce, 0x7c, 0x2f, 0x52, 0xdc, 0x0b, 0x8a, 0x2b, 0x57, 0xfb, 0xbd, + 0x37, 0x75, 0xda, 0x0d, 0xf8, 0x91, 0x62, 0x7e, 0xe4, 0x32, 0xde, 0xee, 0xed, 0xd7, 0x6c, 0xbf, + 0x5b, 0x77, 0x7d, 0xd7, 0x4f, 0xa5, 0xc4, 0x2a, 0xde, 0x91, 0xf8, 0x8a, 0xc5, 0xf1, 0xbf, 0xc7, + 0x60, 0xae, 0x19, 0x52, 0xc2, 0xe9, 0x6b, 0xd2, 0xe9, 0x50, 0x6e, 0xd2, 0xcf, 0x7a, 0x34, 0xe2, + 0xe8, 0x39, 0xc0, 0x01, 0x3d, 0xea, 0x12, 0x8f, 0xb8, 0x34, 0xac, 0x1a, 0x6b, 0xc6, 0xc6, 0x74, + 0xa3, 0x56, 0xfb, 0xfa, 0x80, 0xd5, 0x76, 0x12, 0x8d, 0x1d, 0xe6, 0x39, 0x66, 0xc6, 0x02, 0x5a, + 0x87, 0x99, 0xb7, 0xd2, 0x81, 0x15, 0x90, 0x28, 0x7a, 0xeb, 0x87, 0x4e, 0x75, 0x6c, 0xcd, 0xd8, + 0x98, 0x32, 0xa7, 0x63, 0xf2, 0xae, 0xa2, 0xa2, 0x25, 0x28, 0x75, 0x3d, 0xda, 0xf5, 0x3d, 0x66, + 0x57, 0xc7, 0xa5, 0x44, 0xb2, 0x46, 0x97, 0xa0, 0xe2, 0xf5, 0xba, 0x96, 0x76, 0x59, 0x9d, 0x58, + 0x33, 0x36, 0x26, 0xcc, 0xb2, 0xd7, 0xeb, 0x3e, 0x54, 0x24, 0xb4, 0x0a, 0xe5, 0x90, 0x76, 0x7d, + 0x4e, 0x2d, 0xe2, 0x38, 0x61, 0xf5, 0x94, 0xb4, 0x00, 0x31, 0xe9, 0xa1, 0xe3, 0x84, 0xe8, 0x1a, + 0xcc, 0x28, 0x01, 0x3b, 0x14, 0x60, 0x78, 0xbb, 0x3a, 0x29, 0x85, 0xce, 0xc4, 0xe4, 0x66, 0xc8, + 0x77, 0x09, 0x6f, 0x67, 0xe4, 0x0e, 0xe8, 0x51, 0x2c, 0x77, 0x3a, 0x2b, 0xb7, 0x43, 0x8f, 0xa4, + 0xdc, 0x0d, 0x40, 0xda, 0x1e, 0x49, 0x4d, 0x96, 0xa4, 0xa8, 0xb2, 0xd0, 0x24, 0xca, 0x28, 0xfe, + 0x14, 0xe6, 0xf3, 0xc1, 0x8e, 0x02, 0xdf, 0x8b, 0x28, 0xfa, 0x36, 0x4c, 0xc6, 0x61, 0x90, 0x91, + 0x2e, 0x8f, 0x8e, 0x74, 0x5e, 0xdf, 0x54, 0xda, 0xf8, 0x2b, 0x03, 0x16, 0x5b, 0x0e, 0xe3, 0x31, + 0xbb, 0xe9, 0x7b, 0x6f, 0x98, 0xab, 0x4f, 0x74, 0x20, 0x32, 0xc6, 0x71, 0x22, 0x33, 0x76, 0xcc, + 0xc8, 0x8c, 0x1f, 0x3f, 0x32, 0x13, 0xc3, 0x23, 0x73, 0x17, 0xaa, 0x8f, 0xa8, 0x47, 0x43, 0xc2, + 0xe9, 0x33, 0x75, 0xdc, 0x49, 0x74, 0xb2, 0x29, 0x61, 0xe4, 0x53, 0x02, 0xff, 0xc4, 0x80, 0xe9, + 0x81, 0x60, 0xae, 0x42, 0x39, 0x49, 0x35, 0xde, 0xd6, 0x1b, 0xd5, 0x69, 0xc6, 0xdb, 0xe8, 0x35, + 0xcc, 0xa4, 0x99, 0x69, 0x1d, 0x30, 0x2f, 0xce, 0xc5, 0x93, 0x27, 0xf8, 0xf4, 0x41, 0x6e, 0x8d, + 0x7f, 0x6e, 0xc0, 0xdc, 0x53, 0x16, 0x71, 0x9d, 0x8d, 0x3a, 0xf4, 0x1f, 0xc1, 0x9c, 0x4b, 0xb9, + 0xe5, 0xd0, 0xc0, 0x8f, 0x18, 0xb7, 0xf8, 0xa1, 0xe5, 0x10, 0x4e, 0x24, 0xb2, 0x92, 0x39, 0xeb, + 0x52, 0xbe, 0x1d, 0x73, 0xf6, 0x0e, 0xb7, 0x09, 0x27, 0xe8, 0x02, 0x4c, 0x05, 0xc4, 0xa5, 0x56, + 0xc4, 0xde, 0x51, 0x89, 0xec, 0x94, 0x59, 0x12, 0x84, 0x97, 0xec, 0x1d, 0x45, 0x17, 0x01, 0x24, + 0x93, 0xfb, 0x07, 0xd4, 0x53, 0x81, 0x97, 0xe2, 0x7b, 0x82, 0x80, 0x66, 0x61, 0x9c, 0x74, 0x3a, + 0x32, 0xca, 0x25, 0x53, 0x7c, 0xe2, 0xdf, 0x1a, 0x30, 0x9f, 0x07, 0xa5, 0xe2, 0xd4, 0x84, 0x52, + 0x72, 0x93, 0x8c, 0xb5, 0xf1, 0x8d, 0x72, 0x63, 0x7d, 0xd4, 0xfe, 0x95, 0x0d, 0x33, 0x51, 0x14, + 0xc9, 0xe0, 0xd1, 0x43, 0x11, 0xea, 0x04, 0x93, 0x4a, 0x1a, 0x41, 0xde, 0x4d, 0x70, 0x5d, 0x04, + 0xe0, 0x3e, 0x27, 0x9d, 0x78, 0x53, 0xe3, 0x72, 0x53, 0x53, 0x92, 0x22, 0x76, 0x85, 0xff, 0x60, + 0xc0, 0x69, 0x65, 0x1c, 0x35, 0xe0, 0x9c, 0xf2, 0xce, 0x3c, 0xd7, 0x0a, 0x7a, 0xfb, 0x1d, 0x66, + 0x8b, 0x54, 0x93, 0xf1, 0xaa, 0x98, 0x73, 0x29, 0x73, 0x57, 0xf2, 0x76, 0xe8, 0x91, 0xa8, 0x0c, + 0x0a, 0x92, 0xe5, 0x91, 0x2e, 0x55, 0x18, 0xca, 0x8a, 0xf6, 0x9c, 0x74, 0xa9, 0x40, 0x3a, 0x78, + 0x00, 0xe3, 0xd2, 0xe0, 0x19, 0x27, 0x17, 0xfd, 0x75, 0x21, 0x17, 0xb2, 0xbe, 0x2c, 0xb9, 0xd9, + 0x9c, 0x9d, 0x4e, 0xc9, 0x32, 0x65, 0x77, 0x60, 0x5a, 0xc7, 0x23, 0xbd, 0x62, 0x29, 0xdc, 0x38, + 0xa8, 0x15, 0x13, 0x02, 0x8d, 0x32, 0x42, 0x55, 0x38, 0xcd, 0x3c, 0x87, 0xd9, 0x34, 0xaa, 0x8e, + 0xad, 0x8d, 0x6f, 0x4c, 0x98, 0x7a, 0x89, 0x3f, 0x85, 0xf2, 0xc3, 0x1e, 0x6f, 0x6b, 0x4b, 0x4b, + 0x50, 0x4a, 0xea, 0xa4, 0x4a, 0x79, 0xbd, 0x46, 0x77, 0xe0, 0x9c, 0xfe, 0xb6, 0x6c, 0x71, 0xc5, + 0xc3, 0xae, 0x04, 0xa5, 0x36, 0x3d, 0xaf, 0x99, 0xcd, 0x0c, 0x0f, 0xbf, 0x80, 0x4a, 0x6c, 0x5f, + 0x1d, 0xfe, 0x3c, 0x9c, 0x8a, 0x4f, 0x2b, 0xb6, 0x1e, 0x2f, 0xd0, 0x75, 0x98, 0x95, 0x1f, 0x16, + 0x3d, 0x0c, 0x58, 0x98, 0x5a, 0x9d, 0x30, 0x67, 0x24, 0xbd, 0x95, 0x90, 0xf1, 0xdf, 0x0c, 0x58, + 0x78, 0xee, 0x3b, 0xb4, 0xe9, 0x7b, 0x1e, 0xb5, 0x05, 0x29, 0xb1, 0x7d, 0x0b, 0xe6, 0x55, 0x2b, + 0x14, 0x0d, 0xcf, 0xa2, 0x9e, 0x13, 0xf8, 0xcc, 0xe3, 0xca, 0x15, 0x8a, 0x79, 0x42, 0xb7, 0xa5, + 0x38, 0x68, 0x19, 0xa6, 0xec, 0xd8, 0x0e, 0x8d, 0xef, 0x62, 0xc9, 0x4c, 0x09, 0x22, 0x6a, 0xd1, + 0x91, 0x67, 0x33, 0xcf, 0x95, 0x27, 0x56, 0x32, 0xf5, 0x52, 0x1c, 0xbb, 0x4b, 0x3d, 0x1a, 0xb1, + 0xc8, 0xe2, 0xac, 0x4b, 0x75, 0x43, 0x50, 0xb4, 0x3d, 0xd6, 0xa5, 0xe8, 0x3e, 0x54, 0xf5, 0xb1, + 0xdb, 0xbe, 0xc7, 0x43, 0x62, 0x73, 0x59, 0x00, 0x69, 0x14, 0xc9, 0xee, 0x50, 0x31, 0x17, 0x14, + 0xbf, 0xa9, 0xd8, 0x0f, 0x63, 0x2e, 0xfe, 0xbe, 0xb8, 0x38, 0xbe, 0x1b, 0x69, 0x94, 0xc9, 0xfe, + 0xee, 0xc2, 0x62, 0x72, 0x3d, 0xac, 0x8e, 0xef, 0x46, 0x83, 0x5b, 0x3c, 0x97, 0xb0, 0xb3, 0xfa, + 0x99, 0xb8, 0xe4, 0x95, 0xc6, 0xb2, 0x71, 0xc9, 0x6a, 0xe0, 0x2f, 0x0d, 0x38, 0xd7, 0x6c, 0x13, + 0xcf, 0xa5, 0xba, 0x3f, 0xea, 0x04, 0xb9, 0x0e, 0xb3, 0x76, 0x2f, 0x0c, 0xa9, 0x97, 0x69, 0xa8, + 0xb1, 0xf3, 0x19, 0x45, 0xcf, 0x76, 0xd4, 0x81, 0x9e, 0x7b, 0x8c, 0x5c, 0x1a, 0xff, 0x9a, 0x5c, + 0xba, 0x0f, 0x67, 0x1f, 0x93, 0x68, 0xa0, 0xea, 0x5e, 0x86, 0x33, 0xaa, 0xea, 0xd2, 0x43, 0x16, + 0xc9, 0x92, 0x22, 0x8e, 0xaa, 0x12, 0x13, 0x5b, 0x92, 0x86, 0xfb, 0xb0, 0xf0, 0xa4, 0x1b, 0xf8, + 0x21, 0x17, 0xb7, 0x81, 0xfb, 0x21, 0xcd, 0x94, 0x48, 0x74, 0xa0, 0x69, 0x16, 0x93, 0x32, 0xd4, + 0x91, 0x37, 0x68, 0xca, 0x3c, 0x9b, 0x70, 0x9e, 0x28, 0x46, 0x5e, 0x7c, 0x60, 0x77, 0xa9, 0xb8, + 0x0e, 0x01, 0xde, 0x81, 0xc5, 0x0f, 0xfc, 0xa6, 0xc9, 0xaa, 0xdd, 0x59, 0x1f, 0x5e, 0x5e, 0xa4, + 0x79, 0x49, 0xa9, 0x89, 0xf0, 0x6b, 0x40, 0x8f, 0x49, 0xf4, 0x49, 0x44, 0x9d, 0xd7, 0x74, 0x3f, + 0xb1, 0x83, 0xe1, 0x4c, 0x9b, 0x44, 0x56, 0xc4, 0x5c, 0x8f, 0x3a, 0x56, 0x2f, 0x50, 0xfb, 0x2f, + 0xb7, 0x49, 0xf4, 0x52, 0xd2, 0x3e, 0x09, 0x44, 0x11, 0x14, 0x32, 0xaa, 0xd5, 0xab, 0x3c, 0x6f, + 0xeb, 0x50, 0x62, 0x0c, 0x15, 0x71, 0xfa, 0x89, 0x49, 0x04, 0x13, 0x22, 0x51, 0x54, 0x14, 0xe4, + 0x37, 0xfe, 0xf5, 0x18, 0xcc, 0x6f, 0xc9, 0x44, 0x79, 0xc9, 0x09, 0xef, 0x45, 0xff, 0x67, 0x97, + 0x0e, 0x7d, 0x0b, 0x40, 0xce, 0xcf, 0x56, 0x9b, 0x12, 0x47, 0x4e, 0x66, 0xe5, 0xc6, 0x5a, 0xda, + 0x96, 0x28, 0x6f, 0xd7, 0xf4, 0xd4, 0x5c, 0x6b, 0x0a, 0xc1, 0xc7, 0x94, 0x38, 0xe6, 0x94, 0xad, + 0x3f, 0x37, 0xef, 0xc1, 0x74, 0xbe, 0x4b, 0xa3, 0x32, 0x9c, 0xde, 0x6e, 0x99, 0x4f, 0x5e, 0xb5, + 0xb6, 0x67, 0xbf, 0x81, 0x2a, 0x50, 0x7a, 0xf2, 0x6c, 0xf7, 0x85, 0xb9, 0xd7, 0xda, 0x9e, 0x35, + 0x10, 0xc0, 0xa4, 0xd9, 0x7a, 0xf6, 0x62, 0xaf, 0x35, 0x3b, 0xd6, 0xf8, 0xe7, 0x04, 0x4c, 0xc6, + 0x07, 0x81, 0x7e, 0x63, 0x40, 0x25, 0x3b, 0xa7, 0xa1, 0x3b, 0xa3, 0x1a, 0xe3, 0x90, 0x11, 0x7a, + 0xe9, 0x9b, 0x27, 0x53, 0x8a, 0xcf, 0x11, 0x5f, 0xfb, 0xfc, 0xaf, 0xff, 0xf8, 0x72, 0x6c, 0x0d, + 0x5f, 0x10, 0xef, 0x95, 0xf4, 0x15, 0x13, 0xe7, 0x4c, 0xdd, 0x96, 0x2a, 0x0f, 0x8c, 0x4d, 0xc4, + 0xa1, 0x92, 0x9d, 0xf2, 0xd0, 0x42, 0x2d, 0x7e, 0x15, 0xd4, 0xf4, 0xbc, 0x5f, 0x6b, 0x89, 0x57, + 0xc1, 0xd2, 0x09, 0x47, 0x49, 0xbc, 0x2c, 0xfd, 0x2f, 0xa0, 0xf9, 0x61, 0xfe, 0xd1, 0x4f, 0x0d, + 0x98, 0x1d, 0x9c, 0xd3, 0x0a, 0x5d, 0xdf, 0x1f, 0xe5, 0xba, 0x68, 0xe2, 0xc3, 0xeb, 0x12, 0xc4, + 0x25, 0xb4, 0x9a, 0x07, 0xa1, 0xa7, 0xbe, 0xba, 0xab, 0x14, 0xd1, 0x1f, 0x0d, 0x98, 0x19, 0xb8, + 0xd9, 0xe8, 0xee, 0x28, 0xb7, 0xc3, 0x4b, 0xd0, 0xd2, 0xbd, 0x13, 0xeb, 0x29, 0xb4, 0xb7, 0x24, + 0xda, 0x4d, 0x7c, 0x75, 0xe8, 0x91, 0x25, 0xd5, 0xa8, 0x1e, 0xd7, 0x92, 0x07, 0xc6, 0x66, 0xe3, + 0xf7, 0x63, 0x50, 0x4a, 0x9e, 0x2c, 0xbf, 0x34, 0xa0, 0x92, 0x1d, 0xd0, 0x46, 0x67, 0xdb, 0x90, + 0x19, 0x73, 0x74, 0xb6, 0x0d, 0x9b, 0x01, 0xf1, 0x8a, 0x84, 0x5e, 0x45, 0x0b, 0x79, 0xe8, 0xc9, + 0x78, 0xf7, 0x23, 0x03, 0xa6, 0xf3, 0x0d, 0x08, 0x7d, 0x3c, 0x32, 0xad, 0x87, 0x35, 0xac, 0xa5, + 0x82, 0x24, 0x29, 0xca, 0x77, 0x5d, 0xd3, 0xeb, 0xd4, 0x61, 0x32, 0x64, 0x3f, 0x28, 0xc1, 0x64, + 0x5c, 0xf8, 0xd0, 0x17, 0x06, 0xcc, 0x3c, 0xa2, 0x3c, 0x5b, 0x06, 0x0b, 0x73, 0x70, 0x64, 0x58, + 0x86, 0x15, 0x53, 0x7c, 0x59, 0x82, 0xba, 0x88, 0x06, 0x40, 0xa9, 0x3f, 0x01, 0x51, 0xec, 0xf2, + 0x2b, 0x03, 0xce, 0x3f, 0xa2, 0xfc, 0x95, 0x66, 0xef, 0x92, 0x90, 0x33, 0x9b, 0x05, 0xb2, 0x49, + 0xa2, 0x7b, 0x05, 0x45, 0xab, 0x50, 0x43, 0x07, 0xea, 0xe3, 0x02, 0xc5, 0x22, 0x2d, 0x05, 0x79, + 0x53, 0x42, 0xbe, 0x82, 0xf0, 0x50, 0xc8, 0x41, 0x0e, 0xdb, 0xef, 0x0c, 0x58, 0xcc, 0xe1, 0xa0, + 0xe1, 0x1b, 0x3f, 0xec, 0x12, 0xcf, 0xa6, 0xa8, 0x31, 0xd2, 0x7d, 0x2a, 0xac, 0x21, 0xdf, 0x39, + 0x91, 0x8e, 0x02, 0xbc, 0x21, 0x01, 0x63, 0xb4, 0x36, 0x1c, 0x70, 0x06, 0xd2, 0x8f, 0x0d, 0x38, + 0x93, 0x85, 0x1b, 0xa1, 0x9b, 0x05, 0x0e, 0x45, 0x8e, 0xa7, 0x62, 0x1a, 0xde, 0xa5, 0x51, 0xf0, + 0xa2, 0xa2, 0x82, 0xa3, 0xc0, 0xf4, 0x53, 0xcf, 0xbf, 0x32, 0x60, 0x3e, 0x8b, 0x65, 0x8b, 0x74, + 0x04, 0xc6, 0xdc, 0xa5, 0x2d, 0x86, 0xa4, 0xa5, 0x35, 0xb2, 0x8d, 0x51, 0xc8, 0xb4, 0x02, 0xbe, + 0x2a, 0x01, 0xae, 0xa2, 0x8b, 0x43, 0x01, 0xee, 0x6b, 0x14, 0x7d, 0x38, 0x9b, 0x45, 0xf7, 0x9d, + 0x1e, 0xed, 0xd1, 0xc2, 0xbb, 0x71, 0x75, 0x94, 0x77, 0xa9, 0x8e, 0xb1, 0x74, 0xbd, 0x8c, 0x96, + 0x86, 0xba, 0xfe, 0x4c, 0xba, 0x70, 0xa0, 0xf4, 0x88, 0xf2, 0x5d, 0x4a, 0xc3, 0xe2, 0xab, 0xb8, + 0x5c, 0xe0, 0x4e, 0x6a, 0x8d, 0xf0, 0x12, 0x08, 0x99, 0xc6, 0x9f, 0x27, 0x60, 0xf2, 0xb1, 0xfc, + 0xff, 0x86, 0x7e, 0x11, 0xa7, 0xf0, 0x56, 0x32, 0xd6, 0xa4, 0xef, 0x90, 0x42, 0x00, 0x23, 0x1b, + 0xc3, 0xf0, 0xf7, 0x0c, 0xbe, 0x29, 0xa1, 0x5d, 0x43, 0x57, 0xf2, 0xd0, 0xe2, 0x3f, 0x81, 0xf2, + 0xa7, 0x9e, 0x65, 0xa7, 0xde, 0xe3, 0x16, 0xc9, 0xb3, 0x73, 0xfc, 0x7f, 0x51, 0x9e, 0x86, 0x3d, + 0x40, 0xf0, 0x0d, 0x09, 0xe8, 0x2a, 0xba, 0x3c, 0x14, 0x90, 0x98, 0x13, 0xeb, 0x34, 0x71, 0xfd, + 0x43, 0x03, 0x66, 0x5f, 0xf2, 0x90, 0x92, 0xee, 0x56, 0xf2, 0xc0, 0x28, 0xc4, 0x73, 0x25, 0xc5, + 0x13, 0x47, 0xbe, 0x16, 0x06, 0x76, 0xad, 0x7f, 0xbb, 0x96, 0x1d, 0x4c, 0x71, 0x5d, 0xfa, 0xbf, + 0x8e, 0xd6, 0x8b, 0xfd, 0x27, 0xa5, 0x52, 0x38, 0xbe, 0x65, 0xa0, 0x9f, 0x19, 0x30, 0x17, 0xa3, + 0x78, 0x95, 0x7d, 0x1b, 0x15, 0x02, 0xb9, 0x79, 0x9c, 0xc0, 0x24, 0x80, 0x1a, 0x12, 0xd0, 0x4d, + 0xb4, 0x59, 0x0c, 0x28, 0xa5, 0x6a, 0x4c, 0x8d, 0x7f, 0x8d, 0xc3, 0x84, 0x78, 0x14, 0xa3, 0xef, + 0x01, 0xa4, 0x13, 0x7d, 0x21, 0xa4, 0xc6, 0x28, 0x48, 0x1f, 0xbe, 0x0a, 0xf0, 0x25, 0x09, 0xec, + 0x02, 0x3a, 0x9f, 0x07, 0xc6, 0x3c, 0xc6, 0x19, 0xe9, 0xb0, 0x77, 0xd4, 0x41, 0x9f, 0x1b, 0x70, + 0xea, 0xa9, 0xef, 0x32, 0x0f, 0xdd, 0x18, 0xf9, 0xfb, 0x25, 0xfd, 0x43, 0x30, 0x3a, 0x40, 0xd9, + 0xe7, 0xbe, 0xee, 0xf3, 0x78, 0x2e, 0x8f, 0xa3, 0x23, 0xfc, 0x8a, 0x69, 0xf2, 0x0b, 0x03, 0x26, + 0xc5, 0x33, 0xa5, 0x17, 0xfc, 0x2f, 0x51, 0xac, 0x4a, 0x14, 0xe7, 0xf1, 0xc0, 0x6c, 0x19, 0x49, + 0xc7, 0x02, 0xc6, 0x77, 0x61, 0xf2, 0xa9, 0xef, 0xfa, 0x3d, 0x5e, 0x78, 0x08, 0x45, 0x63, 0x44, + 0x81, 0xe9, 0x8e, 0xb4, 0xf6, 0xc0, 0xd8, 0xdc, 0xaa, 0xfc, 0xe9, 0xfd, 0x8a, 0xf1, 0x97, 0xf7, + 0x2b, 0xc6, 0xdf, 0xdf, 0xaf, 0x18, 0xfb, 0x93, 0x52, 0xfd, 0xce, 0x7f, 0x02, 0x00, 0x00, 0xff, + 0xff, 0x1b, 0x14, 0x9b, 0x39, 0x2e, 0x18, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -2079,7 +2082,7 @@ func (c *healthClient) StreamBeaconLogs(ctx context.Context, in *types.Empty, op } type Health_StreamBeaconLogsClient interface { - Recv() (*LogsResponse, error) + Recv() (*v1.LogsResponse, error) grpc.ClientStream } @@ -2087,8 +2090,8 @@ type healthStreamBeaconLogsClient struct { grpc.ClientStream } -func (x *healthStreamBeaconLogsClient) Recv() (*LogsResponse, error) { - m := new(LogsResponse) +func (x *healthStreamBeaconLogsClient) Recv() (*v1.LogsResponse, error) { + m := new(v1.LogsResponse) if err := x.ClientStream.RecvMsg(m); err != nil { return nil, err } @@ -2201,7 +2204,7 @@ func _Health_StreamBeaconLogs_Handler(srv interface{}, stream grpc.ServerStream) } type Health_StreamBeaconLogsServer interface { - Send(*LogsResponse) error + Send(*v1.LogsResponse) error grpc.ServerStream } @@ -2209,7 +2212,7 @@ type healthStreamBeaconLogsServer struct { grpc.ServerStream } -func (x *healthStreamBeaconLogsServer) Send(m *LogsResponse) error { +func (x *healthStreamBeaconLogsServer) Send(m *v1.LogsResponse) error { return x.ServerStream.SendMsg(m) } diff --git a/proto/validator/accounts/v2/web_api.proto b/proto/validator/accounts/v2/web_api.proto index 3851b42afc..300bfb0c23 100644 --- a/proto/validator/accounts/v2/web_api.proto +++ b/proto/validator/accounts/v2/web_api.proto @@ -1,6 +1,7 @@ syntax = "proto3"; package ethereum.validator.accounts.v2; +import "proto/beacon/rpc/v1/health.proto"; import "eth/v1alpha1/beacon_chain.proto"; import "eth/v1alpha1/node.proto"; import "eth/v1alpha1/validator.proto"; @@ -104,7 +105,7 @@ service Health { get: "/v2/validator/health/logs/endpoints" }; } - rpc StreamBeaconLogs(google.protobuf.Empty) returns (stream LogsResponse) { + rpc StreamBeaconLogs(google.protobuf.Empty) returns (stream ethereum.beacon.rpc.v1.LogsResponse) { option (google.api.http) = { get: "/v2/validator/health/logs/beacon/stream" }; diff --git a/proto/validator/accounts/v2_gateway/web_api.pb.go b/proto/validator/accounts/v2_gateway/web_api.pb.go index eda37b7a69..cd9abae2fb 100755 --- a/proto/validator/accounts/v2_gateway/web_api.pb.go +++ b/proto/validator/accounts/v2_gateway/web_api.pb.go @@ -15,6 +15,7 @@ import ( proto "github.com/golang/protobuf/proto" empty "github.com/golang/protobuf/ptypes/empty" v1alpha1 "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" + v1 "github.com/prysmaticlabs/prysm/proto/beacon/rpc/v1" _ "google.golang.org/genproto/googleapis/api/annotations" grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" @@ -1318,387 +1319,388 @@ var file_proto_validator_accounts_v2_web_api_proto_rawDesc = []byte{ 0x72, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x77, 0x65, 0x62, 0x5f, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x1e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x1a, 0x1f, 0x65, 0x74, 0x68, - 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, - 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x65, 0x74, - 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, 0x69, 0x2f, - 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2d, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xeb, 0x02, - 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x0a, 0x6b, 0x65, 0x79, 0x6d, 0x61, 0x6e, 0x61, - 0x67, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x65, 0x74, 0x68, 0x65, - 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x4b, 0x65, 0x79, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x72, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x0a, 0x6b, 0x65, 0x79, 0x6d, 0x61, - 0x6e, 0x61, 0x67, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x0f, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, - 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, - 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x1a, - 0x0a, 0x08, 0x6d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x08, 0x6d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x12, 0x21, 0x0a, 0x0c, 0x6e, 0x75, - 0x6d, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0b, 0x6e, 0x75, 0x6d, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x1f, 0x0a, - 0x0b, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x64, 0x64, 0x72, 0x12, 0x26, - 0x0a, 0x0f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x72, 0x74, 0x5f, 0x70, 0x61, 0x74, - 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, - 0x72, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x26, 0x0a, 0x0f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, - 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x74, 0x68, 0x12, 0x2b, - 0x0a, 0x12, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x61, 0x5f, 0x63, 0x72, 0x74, 0x5f, - 0x70, 0x61, 0x74, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x6d, 0x6f, - 0x74, 0x65, 0x43, 0x61, 0x43, 0x72, 0x74, 0x50, 0x61, 0x74, 0x68, 0x22, 0x5e, 0x0a, 0x14, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x06, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x52, 0x06, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x22, 0xb7, 0x01, 0x0a, 0x17, - 0x45, 0x64, 0x69, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x6d, 0x6f, 0x74, - 0x65, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, - 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x64, 0x64, 0x72, 0x12, 0x26, 0x0a, 0x0f, 0x72, 0x65, 0x6d, 0x6f, - 0x74, 0x65, 0x5f, 0x63, 0x72, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x72, 0x74, 0x50, 0x61, 0x74, 0x68, - 0x12, 0x26, 0x0a, 0x0f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x70, - 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x74, - 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x74, 0x68, 0x12, 0x2b, 0x0a, 0x12, 0x72, 0x65, 0x6d, 0x6f, - 0x74, 0x65, 0x5f, 0x63, 0x61, 0x5f, 0x63, 0x72, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x61, 0x43, 0x72, - 0x74, 0x50, 0x61, 0x74, 0x68, 0x22, 0x36, 0x0a, 0x18, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x4d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x22, 0x8a, 0x01, - 0x0a, 0x0e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x50, 0x61, 0x74, - 0x68, 0x12, 0x57, 0x0a, 0x0f, 0x6b, 0x65, 0x79, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x5f, - 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x65, 0x74, 0x68, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x1a, 0x20, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x2f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x2f, 0x72, 0x70, 0x63, 0x2f, 0x76, 0x31, + 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x65, + 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x62, 0x65, 0x61, 0x63, + 0x6f, 0x6e, 0x5f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, + 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x6e, 0x6f, 0x64, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x65, 0x74, 0x68, 0x2f, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x61, 0x70, + 0x69, 0x2f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x1a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x2d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x67, 0x6f, 0x67, + 0x6f, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x67, 0x6f, 0x67, 0x6f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, + 0xeb, 0x02, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x4e, 0x0a, 0x0a, 0x6b, 0x65, 0x79, 0x6d, 0x61, + 0x6e, 0x61, 0x67, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x65, 0x74, + 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x4b, 0x65, 0x79, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x0a, 0x6b, 0x65, 0x79, + 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x12, 0x27, 0x0a, 0x0f, 0x77, 0x61, 0x6c, 0x6c, 0x65, + 0x74, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0e, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, + 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x08, 0x6d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x12, 0x21, 0x0a, 0x0c, + 0x6e, 0x75, 0x6d, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0b, 0x6e, 0x75, 0x6d, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, + 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x64, 0x64, 0x72, + 0x12, 0x26, 0x0a, 0x0f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x72, 0x74, 0x5f, 0x70, + 0x61, 0x74, 0x68, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x74, + 0x65, 0x43, 0x72, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x26, 0x0a, 0x0f, 0x72, 0x65, 0x6d, 0x6f, + 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x74, 0x68, + 0x12, 0x2b, 0x0a, 0x12, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x61, 0x5f, 0x63, 0x72, + 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, + 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x61, 0x43, 0x72, 0x74, 0x50, 0x61, 0x74, 0x68, 0x22, 0x5e, 0x0a, + 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x06, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, + 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x06, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x22, 0xb7, 0x01, + 0x0a, 0x17, 0x45, 0x64, 0x69, 0x74, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x6d, + 0x6f, 0x74, 0x65, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x41, 0x64, 0x64, 0x72, 0x12, 0x26, 0x0a, 0x0f, 0x72, 0x65, + 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x72, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x72, 0x74, 0x50, 0x61, + 0x74, 0x68, 0x12, 0x26, 0x0a, 0x0f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x6b, 0x65, 0x79, + 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x72, 0x65, 0x6d, + 0x6f, 0x74, 0x65, 0x4b, 0x65, 0x79, 0x50, 0x61, 0x74, 0x68, 0x12, 0x2b, 0x0a, 0x12, 0x72, 0x65, + 0x6d, 0x6f, 0x74, 0x65, 0x5f, 0x63, 0x61, 0x5f, 0x63, 0x72, 0x74, 0x5f, 0x70, 0x61, 0x74, 0x68, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x72, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x43, 0x61, + 0x43, 0x72, 0x74, 0x50, 0x61, 0x74, 0x68, 0x22, 0x36, 0x0a, 0x18, 0x47, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x4d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x22, + 0x8a, 0x01, 0x0a, 0x0e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x5f, 0x70, 0x61, 0x74, + 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x50, + 0x61, 0x74, 0x68, 0x12, 0x57, 0x0a, 0x0f, 0x6b, 0x65, 0x79, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, + 0x72, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x65, + 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x4b, 0x65, + 0x79, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x0e, 0x6b, 0x65, + 0x79, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x4b, 0x69, 0x6e, 0x64, 0x22, 0x92, 0x01, 0x0a, + 0x13, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x13, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x70, 0x6f, + 0x73, 0x69, 0x74, 0x5f, 0x74, 0x78, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x10, 0x67, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x54, 0x78, 0x44, + 0x61, 0x74, 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, + 0x12, 0x1d, 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, + 0x10, 0x0a, 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, + 0x6c, 0x22, 0xa2, 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x65, + 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, + 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x08, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, + 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, + 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x74, 0x6f, 0x74, + 0x61, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x22, 0xb1, 0x01, 0x0a, 0x07, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x12, 0x32, 0x0a, 0x15, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, + 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x64, 0x65, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x74, 0x78, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x0d, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x54, 0x78, 0x44, 0x61, 0x74, + 0x61, 0x12, 0x27, 0x0a, 0x0f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x70, 0x61, 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x65, 0x72, 0x69, + 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x74, 0x68, 0x22, 0x4b, 0x0a, 0x0e, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, + 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, + 0x0c, 0x52, 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x18, 0x0a, + 0x07, 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x04, 0x52, 0x07, + 0x69, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x5e, 0x0a, 0x0b, 0x41, 0x75, 0x74, 0x68, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, + 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, + 0x72, 0x64, 0x12, 0x33, 0x0a, 0x15, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x5f, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x14, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x4f, 0x0a, 0x0c, 0x41, 0x75, 0x74, 0x68, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x29, 0x0a, + 0x10, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x45, 0x78, + 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xdf, 0x01, 0x0a, 0x16, 0x4e, 0x6f, 0x64, + 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, + 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x12, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x45, 0x6e, 0x64, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, + 0x74, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x79, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x79, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x12, 0x21, 0x0a, + 0x0c, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x0b, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x54, 0x69, 0x6d, 0x65, + 0x12, 0x38, 0x0a, 0x18, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x74, + 0x72, 0x61, 0x63, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x16, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, + 0x61, 0x63, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x80, 0x01, 0x0a, 0x14, 0x4c, + 0x6f, 0x67, 0x73, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x4c, + 0x6f, 0x67, 0x73, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x14, 0x62, + 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x62, 0x65, 0x61, 0x63, 0x6f, + 0x6e, 0x4c, 0x6f, 0x67, 0x73, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x22, 0x93, 0x01, + 0x0a, 0x15, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, + 0x6e, 0x74, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, + 0x72, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x33, + 0x0a, 0x15, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x70, + 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x22, 0x38, 0x0a, 0x11, 0x48, 0x61, 0x73, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x61, 0x6c, 0x6c, + 0x65, 0x74, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0c, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x22, 0x76, 0x0a, + 0x16, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x6b, 0x65, 0x79, 0x73, 0x74, + 0x6f, 0x72, 0x65, 0x73, 0x5f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x09, 0x52, 0x11, 0x6b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x49, 0x6d, + 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x12, 0x2d, 0x0a, 0x12, 0x6b, 0x65, 0x79, 0x73, 0x74, 0x6f, + 0x72, 0x65, 0x73, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x11, 0x6b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x50, 0x61, 0x73, + 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x4b, 0x0a, 0x17, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4b, + 0x65, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x30, 0x0a, 0x14, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x12, + 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, + 0x79, 0x73, 0x22, 0x57, 0x0a, 0x12, 0x48, 0x61, 0x73, 0x55, 0x73, 0x65, 0x64, 0x57, 0x65, 0x62, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x68, 0x61, 0x73, 0x5f, + 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0b, 0x68, 0x61, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x55, 0x70, 0x12, 0x1d, 0x0a, 0x0a, + 0x68, 0x61, 0x73, 0x5f, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x09, 0x68, 0x61, 0x73, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x22, 0x22, 0x0a, 0x0c, 0x4c, + 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6c, + 0x6f, 0x67, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x22, + 0x9e, 0x02, 0x0a, 0x14, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x62, 0x65, 0x61, 0x63, + 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x4e, 0x6f, + 0x64, 0x65, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, + 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x63, + 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x79, 0x6e, 0x63, + 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x79, 0x6e, 0x63, 0x69, + 0x6e, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x5f, 0x74, 0x69, + 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, + 0x73, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x18, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, + 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, + 0x3f, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, + 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, + 0x6e, 0x48, 0x65, 0x61, 0x64, 0x52, 0x09, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x48, 0x65, 0x61, 0x64, + 0x2a, 0x37, 0x0a, 0x0e, 0x4b, 0x65, 0x79, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x4b, 0x69, + 0x6e, 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x52, 0x49, 0x56, 0x45, 0x44, 0x10, 0x00, 0x12, + 0x0c, 0x0a, 0x08, 0x49, 0x4d, 0x50, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0a, 0x0a, + 0x06, 0x52, 0x45, 0x4d, 0x4f, 0x54, 0x45, 0x10, 0x02, 0x32, 0xe9, 0x04, 0x0a, 0x06, 0x57, 0x61, + 0x6c, 0x6c, 0x65, 0x74, 0x12, 0xa1, 0x01, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, + 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x33, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, + 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, + 0x6c, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x4b, 0x65, 0x79, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x0e, 0x6b, 0x65, 0x79, 0x6d, - 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x4b, 0x69, 0x6e, 0x64, 0x22, 0x92, 0x01, 0x0a, 0x13, 0x4c, - 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x13, 0x67, 0x65, 0x74, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x5f, 0x74, 0x78, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x10, 0x67, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x54, 0x78, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x1d, - 0x0a, 0x0a, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x10, 0x0a, - 0x03, 0x61, 0x6c, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x61, 0x6c, 0x6c, 0x22, - 0xa2, 0x01, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x08, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x65, 0x74, 0x68, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, + 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x22, 0x1b, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2f, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x74, 0x0a, 0x0c, 0x57, 0x61, 0x6c, 0x6c, + 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x1a, 0x2e, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, + 0x32, 0x2e, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x8d, + 0x01, 0x0a, 0x10, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4d, 0x6e, 0x65, 0x6d, 0x6f, + 0x6e, 0x69, 0x63, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x38, 0x2e, 0x65, 0x74, + 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x4d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x12, 0x1f, 0x2f, + 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x6d, 0x6e, 0x65, + 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x12, 0xb4, + 0x01, 0x0a, 0x0f, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x72, + 0x65, 0x73, 0x12, 0x36, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, + 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x74, 0x6f, + 0x72, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x52, 0x08, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x26, 0x0a, - 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1d, 0x0a, 0x0a, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x73, - 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x09, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x53, 0x69, 0x7a, 0x65, 0x22, 0xb1, 0x01, 0x0a, 0x07, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x32, 0x0a, 0x15, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x70, - 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x13, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x0c, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, 0x0a, 0x0f, 0x64, 0x65, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x5f, 0x74, 0x78, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x0d, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x54, 0x78, 0x44, 0x61, 0x74, 0x61, 0x12, - 0x27, 0x0a, 0x0f, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x61, - 0x74, 0x68, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x64, 0x65, 0x72, 0x69, 0x76, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x74, 0x68, 0x22, 0x4b, 0x0a, 0x0e, 0x41, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, - 0x0a, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x69, - 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x04, 0x52, 0x07, 0x69, 0x6e, - 0x64, 0x69, 0x63, 0x65, 0x73, 0x22, 0x5e, 0x0a, 0x0b, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, - 0x12, 0x33, 0x0a, 0x15, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x6e, - 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x14, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x4f, 0x0a, 0x0c, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x29, 0x0a, 0x10, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x65, 0x78, 0x70, 0x69, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x45, 0x78, 0x70, 0x69, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xdf, 0x01, 0x0a, 0x16, 0x4e, 0x6f, 0x64, 0x65, 0x43, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x30, 0x0a, 0x14, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x5f, 0x6e, 0x6f, 0x64, 0x65, - 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x12, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x45, 0x6e, 0x64, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x79, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x07, 0x73, 0x79, 0x6e, 0x63, 0x69, 0x6e, 0x67, 0x12, 0x21, 0x0a, 0x0c, 0x67, - 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x0b, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x38, - 0x0a, 0x18, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, - 0x63, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x16, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, - 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x80, 0x01, 0x0a, 0x14, 0x4c, 0x6f, 0x67, - 0x73, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x36, 0x0a, 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x6c, - 0x6f, 0x67, 0x73, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x15, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x4c, 0x6f, 0x67, - 0x73, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x30, 0x0a, 0x14, 0x62, 0x65, 0x61, - 0x63, 0x6f, 0x6e, 0x5f, 0x6c, 0x6f, 0x67, 0x73, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x4c, - 0x6f, 0x67, 0x73, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x22, 0x93, 0x01, 0x0a, 0x15, - 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, - 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0f, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, - 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, 0x33, 0x0a, 0x15, - 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, 0x70, 0x61, 0x73, - 0x73, 0x77, 0x6f, 0x72, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x22, 0x38, 0x0a, 0x11, 0x48, 0x61, 0x73, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x77, - 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x22, 0x76, 0x0a, 0x16, 0x49, - 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x6b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x72, - 0x65, 0x73, 0x5f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x11, 0x6b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x49, 0x6d, 0x70, 0x6f, - 0x72, 0x74, 0x65, 0x64, 0x12, 0x2d, 0x0a, 0x12, 0x6b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x73, 0x5f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x11, 0x6b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x50, 0x61, 0x73, 0x73, 0x77, - 0x6f, 0x72, 0x64, 0x22, 0x4b, 0x0a, 0x17, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4b, 0x65, 0x79, - 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, - 0x0a, 0x14, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x12, 0x69, 0x6d, - 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x73, - 0x22, 0x57, 0x0a, 0x12, 0x48, 0x61, 0x73, 0x55, 0x73, 0x65, 0x64, 0x57, 0x65, 0x62, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x22, 0x0a, 0x0d, 0x68, 0x61, 0x73, 0x5f, 0x73, 0x69, - 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x75, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x68, - 0x61, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x55, 0x70, 0x12, 0x1d, 0x0a, 0x0a, 0x68, 0x61, - 0x73, 0x5f, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, - 0x68, 0x61, 0x73, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x22, 0x22, 0x0a, 0x0c, 0x4c, 0x6f, 0x67, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x6f, 0x67, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x04, 0x6c, 0x6f, 0x67, 0x73, 0x22, 0x9e, 0x02, - 0x0a, 0x14, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, - 0x5f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x4e, 0x6f, 0x64, 0x65, - 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x6e, - 0x65, 0x63, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x63, 0x6f, 0x6e, - 0x6e, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x79, 0x6e, 0x63, 0x69, 0x6e, - 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x79, 0x6e, 0x63, 0x69, 0x6e, 0x67, - 0x12, 0x21, 0x0a, 0x0c, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x5f, 0x74, 0x69, 0x6d, 0x65, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x67, 0x65, 0x6e, 0x65, 0x73, 0x69, 0x73, 0x54, - 0x69, 0x6d, 0x65, 0x12, 0x38, 0x0a, 0x18, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x5f, 0x63, - 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x16, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x43, 0x6f, - 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x3f, 0x0a, - 0x0a, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x5f, 0x68, 0x65, 0x61, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x20, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x48, - 0x65, 0x61, 0x64, 0x52, 0x09, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x48, 0x65, 0x61, 0x64, 0x2a, 0x37, - 0x0a, 0x0e, 0x4b, 0x65, 0x79, 0x6d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x72, 0x4b, 0x69, 0x6e, 0x64, - 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x52, 0x49, 0x56, 0x45, 0x44, 0x10, 0x00, 0x12, 0x0c, 0x0a, - 0x08, 0x49, 0x4d, 0x50, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x52, - 0x45, 0x4d, 0x4f, 0x54, 0x45, 0x10, 0x02, 0x32, 0xe9, 0x04, 0x0a, 0x06, 0x57, 0x61, 0x6c, 0x6c, - 0x65, 0x74, 0x12, 0xa1, 0x01, 0x0a, 0x0c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, - 0x6c, 0x65, 0x74, 0x12, 0x33, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x6d, 0x70, 0x6f, + 0x72, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x22, 0x25, 0x2f, 0x76, 0x32, + 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x77, 0x61, 0x6c, 0x6c, 0x65, + 0x74, 0x2f, 0x6b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x69, 0x6d, 0x70, 0x6f, + 0x72, 0x74, 0x3a, 0x01, 0x2a, 0x32, 0xb0, 0x02, 0x0a, 0x08, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x73, 0x12, 0x99, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x73, 0x12, 0x33, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x57, 0x61, 0x6c, 0x6c, 0x65, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, + 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x22, 0x1b, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2f, 0x63, 0x72, 0x65, - 0x61, 0x74, 0x65, 0x3a, 0x01, 0x2a, 0x12, 0x74, 0x0a, 0x0c, 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x2e, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x87, + 0x01, 0x0a, 0x0e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, + 0x64, 0x12, 0x35, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, + 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, + 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, + 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, + 0x22, 0x26, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x22, 0x1b, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, + 0x2f, 0x65, 0x64, 0x69, 0x74, 0x3a, 0x01, 0x2a, 0x32, 0x81, 0x08, 0x0a, 0x06, 0x42, 0x65, 0x61, + 0x63, 0x6f, 0x6e, 0x12, 0x84, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x42, 0x65, 0x61, 0x63, 0x6f, + 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, + 0x34, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, + 0x2e, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, + 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x62, 0x65, 0x61, + 0x63, 0x6f, 0x6e, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0xb7, 0x01, 0x0a, 0x19, 0x47, + 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x61, 0x72, 0x74, 0x69, + 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, + 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x61, 0x72, + 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x35, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, + 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, + 0x12, 0x22, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, + 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x2f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0xac, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, + 0x12, 0x32, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, + 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x50, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, + 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, + 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x22, 0x12, 0x20, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x2f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x2f, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x6e, 0x63, 0x65, 0x12, 0x89, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, + 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x2c, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, + 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, + 0x73, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, + 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x12, 0x1f, + 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x62, 0x65, + 0x61, 0x63, 0x6f, 0x6e, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, + 0x9c, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x33, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, + 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, + 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x61, + 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, + 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, + 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, + 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, + 0x1d, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x62, + 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x2f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x76, + 0x0a, 0x11, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x51, 0x75, + 0x65, 0x75, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x25, 0x2e, 0x65, 0x74, + 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, + 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x51, 0x75, 0x65, + 0x75, 0x65, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x76, 0x32, 0x2f, + 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, + 0x2f, 0x71, 0x75, 0x65, 0x75, 0x65, 0x12, 0x64, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, + 0x72, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x65, 0x74, 0x68, + 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, + 0x61, 0x31, 0x2e, 0x50, 0x65, 0x65, 0x72, 0x73, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, + 0x12, 0x1a, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, + 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x2f, 0x70, 0x65, 0x65, 0x72, 0x73, 0x32, 0xcc, 0x04, 0x0a, + 0x06, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x97, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x42, + 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x36, 0x2e, 0x65, 0x74, + 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, + 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x12, 0x24, 0x2f, 0x76, 0x32, + 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, + 0x68, 0x2f, 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x8d, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x45, 0x6e, 0x64, + 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x34, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, - 0x57, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x12, 0x8d, 0x01, 0x0a, - 0x10, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x4d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, - 0x63, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x38, 0x2e, 0x65, 0x74, 0x68, 0x65, - 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x4d, 0x6e, 0x65, 0x6d, 0x6f, 0x6e, 0x69, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x12, 0x1f, 0x2f, 0x76, 0x32, - 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x6d, 0x6e, 0x65, 0x6d, 0x6f, - 0x6e, 0x69, 0x63, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x12, 0xb4, 0x01, 0x0a, - 0x0f, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, - 0x12, 0x36, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, - 0x32, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, + 0x4c, 0x6f, 0x67, 0x73, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, 0x76, + 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x68, 0x65, 0x61, 0x6c, + 0x74, 0x68, 0x2f, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x73, 0x12, 0x83, 0x01, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x65, 0x61, 0x63, + 0x6f, 0x6e, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x24, + 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, + 0x2e, 0x72, 0x70, 0x63, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x12, 0x27, 0x2f, 0x76, + 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x68, 0x65, 0x61, 0x6c, + 0x74, 0x68, 0x2f, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x2f, 0x73, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x30, 0x01, 0x12, 0x91, 0x01, 0x0a, 0x13, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x4c, 0x6f, 0x67, 0x73, 0x12, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x2c, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, + 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x12, 0x2a, 0x2f, + 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x68, 0x65, 0x61, + 0x6c, 0x74, 0x68, 0x2f, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, + 0x6f, 0x72, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x30, 0x01, 0x32, 0xea, 0x03, 0x0a, 0x04, + 0x41, 0x75, 0x74, 0x68, 0x12, 0x7b, 0x0a, 0x0a, 0x48, 0x61, 0x73, 0x55, 0x73, 0x65, 0x64, 0x57, + 0x65, 0x62, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x32, 0x2e, 0x65, 0x74, 0x68, + 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x48, 0x61, 0x73, 0x55, + 0x73, 0x65, 0x64, 0x57, 0x65, 0x62, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, + 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, + 0x64, 0x12, 0x82, 0x01, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x2b, 0x2e, 0x65, 0x74, + 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x75, 0x74, + 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, - 0x4b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x30, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x22, 0x25, 0x2f, 0x76, 0x32, 0x2f, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x77, 0x61, 0x6c, 0x6c, 0x65, 0x74, 0x2f, - 0x6b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x73, 0x2f, 0x69, 0x6d, 0x70, 0x6f, 0x72, 0x74, - 0x3a, 0x01, 0x2a, 0x32, 0xb0, 0x02, 0x0a, 0x08, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, - 0x12, 0x99, 0x01, 0x0a, 0x0c, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x73, 0x12, 0x33, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, - 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, - 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x41, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x18, 0x12, 0x16, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x2f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x87, 0x01, 0x0a, - 0x0e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x12, - 0x35, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, - 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x26, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x22, 0x1b, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x2f, 0x65, - 0x64, 0x69, 0x74, 0x3a, 0x01, 0x2a, 0x32, 0x81, 0x08, 0x0a, 0x06, 0x42, 0x65, 0x61, 0x63, 0x6f, - 0x6e, 0x12, 0x84, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x34, 0x2e, - 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x42, - 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x76, 0x32, - 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x62, 0x65, 0x61, 0x63, 0x6f, - 0x6e, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0xb7, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, - 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, - 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, - 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x50, 0x61, 0x72, 0x74, 0x69, - 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x35, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, - 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2a, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x24, 0x12, 0x22, - 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x62, 0x65, - 0x61, 0x63, 0x6f, 0x6e, 0x2f, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0xac, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x50, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x32, - 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, - 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, - 0x50, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, - 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x6f, 0x72, 0x50, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x22, 0x12, - 0x20, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x62, - 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x2f, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, - 0x65, 0x12, 0x89, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x73, 0x12, 0x2c, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, - 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, 0x69, 0x73, 0x74, - 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x21, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, - 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x73, 0x22, 0x27, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x12, 0x1f, 0x2f, 0x76, - 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x62, 0x65, 0x61, 0x63, - 0x6f, 0x6e, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x12, 0x9c, 0x01, - 0x0a, 0x14, 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x61, - 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x33, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, - 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, 0x2e, 0x4c, - 0x69, 0x73, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x65, 0x74, - 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, - 0x68, 0x61, 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x42, 0x61, 0x6c, - 0x61, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x25, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1f, 0x12, 0x1d, 0x2f, - 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x62, 0x65, 0x61, - 0x63, 0x6f, 0x6e, 0x2f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x76, 0x0a, 0x11, - 0x47, 0x65, 0x74, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x51, 0x75, 0x65, 0x75, - 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x25, 0x2e, 0x65, 0x74, 0x68, 0x65, - 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, - 0x31, 0x2e, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x51, 0x75, 0x65, 0x75, 0x65, - 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x62, 0x65, 0x61, 0x63, 0x6f, 0x6e, 0x2f, 0x71, - 0x75, 0x65, 0x75, 0x65, 0x12, 0x64, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x50, 0x65, 0x65, 0x72, 0x73, - 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x1c, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, - 0x65, 0x75, 0x6d, 0x2e, 0x65, 0x74, 0x68, 0x2e, 0x76, 0x31, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x31, - 0x2e, 0x50, 0x65, 0x65, 0x72, 0x73, 0x22, 0x22, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1c, 0x12, 0x1a, - 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x62, 0x65, - 0x61, 0x63, 0x6f, 0x6e, 0x2f, 0x70, 0x65, 0x65, 0x72, 0x73, 0x32, 0xd4, 0x04, 0x0a, 0x06, 0x48, - 0x65, 0x61, 0x6c, 0x74, 0x68, 0x12, 0x97, 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x42, 0x65, 0x61, - 0x63, 0x6f, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x43, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x36, 0x2e, 0x65, 0x74, 0x68, 0x65, - 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x43, - 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x2c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x26, 0x12, 0x24, 0x2f, 0x76, 0x32, 0x2f, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2f, - 0x6e, 0x6f, 0x64, 0x65, 0x5f, 0x63, 0x6f, 0x6e, 0x6e, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x8d, 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x4c, 0x6f, 0x67, 0x73, 0x45, 0x6e, 0x64, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x34, 0x2e, 0x65, - 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x6f, - 0x67, 0x73, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x2b, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x25, 0x12, 0x23, 0x2f, 0x76, 0x32, 0x2f, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, - 0x2f, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, - 0x8b, 0x01, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x42, 0x65, 0x61, 0x63, 0x6f, 0x6e, - 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x2c, 0x2e, 0x65, - 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x6f, - 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x29, 0x12, 0x27, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2f, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x62, 0x65, - 0x61, 0x63, 0x6f, 0x6e, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x30, 0x01, 0x12, 0x91, 0x01, - 0x0a, 0x13, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, - 0x72, 0x4c, 0x6f, 0x67, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x2c, 0x2e, - 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x4c, - 0x6f, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x2c, 0x12, 0x2a, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x6f, 0x72, 0x2f, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x2f, 0x6c, 0x6f, 0x67, 0x73, 0x2f, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x30, - 0x01, 0x32, 0xea, 0x03, 0x0a, 0x04, 0x41, 0x75, 0x74, 0x68, 0x12, 0x7b, 0x0a, 0x0a, 0x48, 0x61, - 0x73, 0x55, 0x73, 0x65, 0x64, 0x57, 0x65, 0x62, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x1a, 0x32, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, - 0x32, 0x2e, 0x48, 0x61, 0x73, 0x55, 0x73, 0x65, 0x64, 0x57, 0x65, 0x62, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x21, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x76, - 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x69, 0x6e, 0x69, 0x74, - 0x69, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x82, 0x01, 0x0a, 0x05, 0x4c, 0x6f, 0x67, 0x69, - 0x6e, 0x12, 0x2b, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x18, 0x22, 0x13, + 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x6c, 0x6f, + 0x67, 0x69, 0x6e, 0x3a, 0x01, 0x2a, 0x12, 0x84, 0x01, 0x0a, 0x06, 0x53, 0x69, 0x67, 0x6e, 0x75, + 0x70, 0x12, 0x2b, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, - 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1e, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x18, 0x22, 0x13, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, - 0x74, 0x6f, 0x72, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x3a, 0x01, 0x2a, 0x12, 0x84, 0x01, 0x0a, - 0x06, 0x53, 0x69, 0x67, 0x6e, 0x75, 0x70, 0x12, 0x2b, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, - 0x75, 0x6d, 0x2e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x65, 0x74, 0x68, 0x65, 0x72, 0x65, 0x75, 0x6d, 0x2e, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2e, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x14, 0x2f, 0x76, 0x32, 0x2f, - 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x73, 0x69, 0x67, 0x6e, 0x75, 0x70, - 0x3a, 0x01, 0x2a, 0x12, 0x59, 0x0a, 0x06, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1f, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, 0x14, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x6c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x3a, 0x01, 0x2a, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x41, 0x75, 0x74, 0x68, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x19, 0x22, 0x14, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x2f, 0x73, 0x69, 0x67, 0x6e, 0x75, 0x70, 0x3a, 0x01, 0x2a, 0x12, 0x59, 0x0a, + 0x06, 0x4c, 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, + 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, + 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x22, + 0x14, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x2f, 0x6c, + 0x6f, 0x67, 0x6f, 0x75, 0x74, 0x3a, 0x01, 0x2a, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1749,6 +1751,7 @@ var file_proto_validator_accounts_v2_web_api_proto_goTypes = []interface{}{ (*v1alpha1.ValidatorBalances)(nil), // 30: ethereum.eth.v1alpha1.ValidatorBalances (*v1alpha1.ValidatorQueue)(nil), // 31: ethereum.eth.v1alpha1.ValidatorQueue (*v1alpha1.Peers)(nil), // 32: ethereum.eth.v1alpha1.Peers + (*v1.LogsResponse)(nil), // 33: ethereum.beacon.rpc.v1.LogsResponse } var file_proto_validator_accounts_v2_web_api_proto_depIdxs = []int32{ 0, // 0: ethereum.validator.accounts.v2.CreateWalletRequest.keymanager:type_name -> ethereum.validator.accounts.v2.KeymanagerKind @@ -1792,7 +1795,7 @@ var file_proto_validator_accounts_v2_web_api_proto_depIdxs = []int32{ 32, // 38: ethereum.validator.accounts.v2.Beacon.GetPeers:output_type -> ethereum.eth.v1alpha1.Peers 12, // 39: ethereum.validator.accounts.v2.Health.GetBeaconNodeConnection:output_type -> ethereum.validator.accounts.v2.NodeConnectionResponse 13, // 40: ethereum.validator.accounts.v2.Health.GetLogsEndpoints:output_type -> ethereum.validator.accounts.v2.LogsEndpointResponse - 19, // 41: ethereum.validator.accounts.v2.Health.StreamBeaconLogs:output_type -> ethereum.validator.accounts.v2.LogsResponse + 33, // 41: ethereum.validator.accounts.v2.Health.StreamBeaconLogs:output_type -> ethereum.beacon.rpc.v1.LogsResponse 19, // 42: ethereum.validator.accounts.v2.Health.StreamValidatorLogs:output_type -> ethereum.validator.accounts.v2.LogsResponse 18, // 43: ethereum.validator.accounts.v2.Auth.HasUsedWeb:output_type -> ethereum.validator.accounts.v2.HasUsedWebResponse 11, // 44: ethereum.validator.accounts.v2.Auth.Login:output_type -> ethereum.validator.accounts.v2.AuthResponse @@ -2709,7 +2712,7 @@ func (c *healthClient) StreamBeaconLogs(ctx context.Context, in *empty.Empty, op } type Health_StreamBeaconLogsClient interface { - Recv() (*LogsResponse, error) + Recv() (*v1.LogsResponse, error) grpc.ClientStream } @@ -2717,8 +2720,8 @@ type healthStreamBeaconLogsClient struct { grpc.ClientStream } -func (x *healthStreamBeaconLogsClient) Recv() (*LogsResponse, error) { - m := new(LogsResponse) +func (x *healthStreamBeaconLogsClient) Recv() (*v1.LogsResponse, error) { + m := new(v1.LogsResponse) if err := x.ClientStream.RecvMsg(m); err != nil { return nil, err } @@ -2831,7 +2834,7 @@ func _Health_StreamBeaconLogs_Handler(srv interface{}, stream grpc.ServerStream) } type Health_StreamBeaconLogsServer interface { - Send(*LogsResponse) error + Send(*v1.LogsResponse) error grpc.ServerStream } @@ -2839,7 +2842,7 @@ type healthStreamBeaconLogsServer struct { grpc.ServerStream } -func (x *healthStreamBeaconLogsServer) Send(m *LogsResponse) error { +func (x *healthStreamBeaconLogsServer) Send(m *v1.LogsResponse) error { return x.ServerStream.SendMsg(m) } diff --git a/shared/logutil/BUILD.bazel b/shared/logutil/BUILD.bazel index 279e7c2547..a301c4426b 100644 --- a/shared/logutil/BUILD.bazel +++ b/shared/logutil/BUILD.bazel @@ -13,7 +13,6 @@ go_library( "//shared/event:go_default_library", "//shared/params:go_default_library", "//shared/rand:go_default_library", - "@com_github_gorilla_websocket//:go_default_library", "@com_github_hashicorp_golang_lru//:go_default_library", "@com_github_sirupsen_logrus//:go_default_library", ], diff --git a/shared/logutil/stream.go b/shared/logutil/stream.go index 30ea86eb17..39abce1c39 100644 --- a/shared/logutil/stream.go +++ b/shared/logutil/stream.go @@ -2,90 +2,66 @@ package logutil import ( "io" - "net/http" - "sync" - "github.com/gorilla/websocket" lru "github.com/hashicorp/golang-lru" "github.com/prysmaticlabs/prysm/shared/event" "github.com/prysmaticlabs/prysm/shared/rand" - log "github.com/sirupsen/logrus" ) const ( - // LogCacheSize is the number of log entries to keep in memory for new - // websocket connections. - LogCacheSize = 20 - // Size for the buffered channel used for receiving log messages. The default - // value should be enough to handle most incoming amount of logs without - // blocking the thread. - logBufferSize = 100 + // The number of log entries to keep in memory. + logCacheSize = 20 ) var ( - // Compile time interface check. - _ = io.Writer(&StreamServer{}) - streamUpgrader = websocket.Upgrader{ - ReadBufferSize: 1024, - WriteBufferSize: 1024, - CheckOrigin: func(r *http.Request) bool { - // Only allow requests from localhost. - return true - }, - } + // Compile time interface checks. + _ = io.Writer(&StreamServer{}) + _ = Streamer(&StreamServer{}) ) +// Streamer defines a struct which can retrieve and stream process logs. +type Streamer interface { + GetLastFewLogs() [][]byte + LogsFeed() *event.Feed +} + // StreamServer defines a a websocket server which can receive events from // a feed and write them to open websocket connections. type StreamServer struct { - feed *event.Feed - cache *lru.Cache - clients map[*websocket.Conn]bool - lock sync.RWMutex + feed *event.Feed + cache *lru.Cache } -// NewLogStreamServer initializes a new stream server capable of -// streaming log events via a websocket connection. -func NewLogStreamServer() *StreamServer { - c, err := lru.New(LogCacheSize) +// NewStreamServer initializes a new stream server capable of +// streaming log events. +func NewStreamServer() *StreamServer { + c, err := lru.New(logCacheSize) if err != nil { panic(err) // This can only occur when the LogCacheSize is negative. } ss := &StreamServer{ - feed: new(event.Feed), - cache: c, - clients: make(map[*websocket.Conn]bool), + feed: new(event.Feed), + cache: c, } addLogWriter(ss) - go ss.sendLogsToClients() return ss } -// Handler for new websocket connections to stream new events received -// via an event feed as they occur. -func (ss *StreamServer) Handler(w http.ResponseWriter, r *http.Request) { - conn, err := streamUpgrader.Upgrade(w, r, nil) - if err != nil { - log.Errorf("Could not write websocket message: %v", err) - return - } - - // Backfill stream with recent messages. +// GetLastFewLogs returns the last few entries of logs stored in an LRU cache. +func (ss *StreamServer) GetLastFewLogs() [][]byte { + messages := make([][]byte, 0) for _, k := range ss.cache.Keys() { d, ok := ss.cache.Get(k) if ok { - if err := conn.WriteMessage(websocket.TextMessage, d.([]byte)); err != nil { - log.Errorf("Could not write websocket message: %v", err) - if err := conn.Close(); err != nil { - log.Errorf("Could not close websocket connection: %v", err) - } - return - } + messages = append(messages, d.([]byte)) } } - ss.lock.Lock() - ss.clients[conn] = true - ss.lock.Unlock() + return messages +} + +// LogsFeed returns a feed callers can subscribe to to receive logs via a channel. +func (ss *StreamServer) LogsFeed() *event.Feed { + return ss.feed } // Write a binary message and send over the event feed. @@ -94,41 +70,3 @@ func (ss *StreamServer) Write(p []byte) (n int, err error) { ss.cache.Add(rand.NewGenerator().Uint64(), p) return len(p), nil } - -func (ss *StreamServer) sendLogsToClients() { - ch := make(chan []byte, logBufferSize) - defer close(ch) - sub := ss.feed.Subscribe(ch) - defer sub.Unsubscribe() - - for { - select { - case evt := <-ch: - ss.lock.Lock() - for conn := range ss.clients { - if err := conn.WriteMessage(websocket.TextMessage, evt); err != nil { - log.WithError(err).Error("Could not write websocket message") - ss.removeClient(conn) - } - } - ss.lock.Unlock() - case err := <-sub.Err(): - ss.lock.Lock() - for conn := range ss.clients { - if err := conn.WriteMessage(websocket.CloseInternalServerErr, []byte(err.Error())); err != nil { - log.WithError(err).Error("Could not write websocket message") - } - ss.removeClient(conn) - } - ss.lock.Unlock() - } - } -} - -// The caller of this function needs to acquire a mutex. -func (ss *StreamServer) removeClient(conn *websocket.Conn) { - delete(ss.clients, conn) - if err := conn.Close(); err != nil { - log.Errorf("Could not close websocket connection: %v", err) - } -} diff --git a/shared/logutil/stream_test.go b/shared/logutil/stream_test.go index d9b0d3bd4a..acec95250e 100644 --- a/shared/logutil/stream_test.go +++ b/shared/logutil/stream_test.go @@ -1,59 +1,13 @@ package logutil import ( - "bufio" - "bytes" - "io" - "io/ioutil" - "net" - "net/http" - "net/http/httptest" - "strings" "testing" - "time" "github.com/prysmaticlabs/prysm/shared/testutil/require" ) -type fakeAddr int - -var ( - localAddr = fakeAddr(1) - remoteAddr = fakeAddr(2) -) - -func (a fakeAddr) Network() string { - return "net" -} - -func (a fakeAddr) String() string { - return "str" -} - -type fakeNetConn struct { - io.Reader - io.Writer -} - -func (c fakeNetConn) Close() error { return nil } -func (c fakeNetConn) LocalAddr() net.Addr { return localAddr } -func (c fakeNetConn) RemoteAddr() net.Addr { return remoteAddr } -func (c fakeNetConn) SetDeadline(_ time.Time) error { return nil } -func (c fakeNetConn) SetReadDeadline(_ time.Time) error { return nil } -func (c fakeNetConn) SetWriteDeadline(_ time.Time) error { return nil } - -type testResponseWriter struct { - brw *bufio.ReadWriter - http.ResponseWriter -} - -func (resp *testResponseWriter) Hijack() (net.Conn, *bufio.ReadWriter, error) { - rw := bufio.NewReadWriter(bufio.NewReader(strings.NewReader("")), bufio.NewWriter(&bytes.Buffer{})) - return fakeNetConn{strings.NewReader(""), resp.brw}, rw, nil -} - -func TestLogStreamServer_BackfillsMessages(t *testing.T) { - ss := NewLogStreamServer() +func TestStreamServer_BackfillsMessages(t *testing.T) { + ss := NewStreamServer() msgs := [][]byte{ []byte("foo"), []byte("bar"), @@ -64,33 +18,6 @@ func TestLogStreamServer_BackfillsMessages(t *testing.T) { require.NoError(t, err) } - br := bufio.NewReader(strings.NewReader("")) - buf := new(bytes.Buffer) - bw := bufio.NewWriter(buf) - rw := httptest.NewRecorder() - resp := &testResponseWriter{ - brw: bufio.NewReadWriter(br, bw), - ResponseWriter: rw, - } - req := &http.Request{ - Method: "GET", - Host: "localhost", - Header: http.Header{ - "Upgrade": []string{"websocket"}, - "Connection": []string{"upgrade"}, - "Sec-Websocket-Key": []string{"dGhlIHNhbXBsZSBub25jZQ=="}, - "Sec-Websocket-Version": []string{"13"}, - }, - } - - ss.Handler(resp, req) - go ss.sendLogsToClients() - require.NoError(t, resp.brw.Flush()) - dst, err := ioutil.ReadAll(buf) - require.NoError(t, err) - for _, msg := range msgs { - if !strings.Contains(string(dst), string(msg)) { - t.Errorf("Stream does contain message %s", msg) - } - } + recentMessages := ss.GetLastFewLogs() + require.DeepEqual(t, msgs, recentMessages) } diff --git a/shared/prometheus/BUILD.bazel b/shared/prometheus/BUILD.bazel index 1291fa82c4..a7aadf8f45 100644 --- a/shared/prometheus/BUILD.bazel +++ b/shared/prometheus/BUILD.bazel @@ -13,7 +13,6 @@ go_library( visibility = ["//visibility:public"], deps = [ "//shared:go_default_library", - "//shared/logutil:go_default_library", "@com_github_golang_gddo//httputil:go_default_library", "@com_github_prometheus_client_golang//prometheus:go_default_library", "@com_github_prometheus_client_golang//prometheus/promauto:go_default_library", diff --git a/shared/prometheus/service.go b/shared/prometheus/service.go index 6383a34201..6a57e9a1d3 100644 --- a/shared/prometheus/service.go +++ b/shared/prometheus/service.go @@ -15,7 +15,6 @@ import ( "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp" "github.com/prysmaticlabs/prysm/shared" - "github.com/prysmaticlabs/prysm/shared/logutil" "github.com/sirupsen/logrus" ) @@ -47,7 +46,6 @@ func NewService(addr string, svcRegistry *shared.ServiceRegistry, additionalHand })) mux.HandleFunc("/healthz", s.healthzHandler) mux.HandleFunc("/goroutinez", s.goroutinezHandler) - mux.HandleFunc("/logs", logutil.NewLogStreamServer().Handler) // Register additional handlers. for _, h := range additionalHandlers { diff --git a/validator/client/BUILD.bazel b/validator/client/BUILD.bazel index b9aedeb374..f6ca6c8901 100644 --- a/validator/client/BUILD.bazel +++ b/validator/client/BUILD.bazel @@ -22,7 +22,6 @@ go_library( visibility = ["//validator:__subpackages__"], deps = [ "//beacon-chain/core/helpers:go_default_library", - "//proto/beacon/rpc/v1:go_default_library", "//proto/validator/accounts/v2:go_default_library", "//shared/blockutil:go_default_library", "//shared/bls:go_default_library", diff --git a/validator/client/service.go b/validator/client/service.go index e9adecd0c1..e3cfe98fac 100644 --- a/validator/client/service.go +++ b/validator/client/service.go @@ -15,7 +15,6 @@ import ( lru "github.com/hashicorp/golang-lru" "github.com/pkg/errors" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" - pbrpc "github.com/prysmaticlabs/prysm/proto/beacon/rpc/v1" "github.com/prysmaticlabs/prysm/shared/bytesutil" "github.com/prysmaticlabs/prysm/shared/event" "github.com/prysmaticlabs/prysm/shared/grpcutils" @@ -47,12 +46,6 @@ type GenesisFetcher interface { GenesisInfo(ctx context.Context) (*ethpb.Genesis, error) } -// BeaconNodeInfoFetcher can retrieve information such as the logs endpoint -// from a beacon node via RPC. -type BeaconNodeInfoFetcher interface { - BeaconLogsEndpoint(ctx context.Context) (string, error) -} - // ValidatorService represents a service to manage the validator client // routine. type ValidatorService struct { @@ -326,17 +319,6 @@ func (v *ValidatorService) GenesisInfo(ctx context.Context) (*ethpb.Genesis, err return nc.GetGenesis(ctx, &ptypes.Empty{}) } -// BeaconLogsEndpoint retrieves the websocket endpoint string at which -// clients can subscribe to for beacon node logs. -func (v *ValidatorService) BeaconLogsEndpoint(ctx context.Context) (string, error) { - hc := pbrpc.NewHealthClient(v.conn) - resp, err := hc.GetLogsEndpoint(ctx, &ptypes.Empty{}) - if err != nil { - return "", err - } - return resp.BeaconLogsEndpoint, nil -} - // to accounts changes in the keymanager, then updates those keys' // buckets in bolt DB if a bucket for a key does not exist. func recheckValidatingKeysBucket(ctx context.Context, valDB db.Database, km keymanager.IKeymanager) { diff --git a/validator/client/service_test.go b/validator/client/service_test.go index c3c7d36177..2ceb770c9c 100644 --- a/validator/client/service_test.go +++ b/validator/client/service_test.go @@ -14,7 +14,6 @@ import ( ) var _ shared.Service = (*ValidatorService)(nil) -var _ BeaconNodeInfoFetcher = (*ValidatorService)(nil) var _ GenesisFetcher = (*ValidatorService)(nil) var _ SyncChecker = (*ValidatorService)(nil) diff --git a/validator/node/node.go b/validator/node/node.go index f4ef1da7ed..7dc84d4150 100644 --- a/validator/node/node.go +++ b/validator/node/node.go @@ -464,7 +464,6 @@ func (s *ValidatorClient) registerRPCService(cliCtx *cli.Context, km keymanager. ValidatorService: vs, SyncChecker: vs, GenesisFetcher: vs, - BeaconNodeInfoFetcher: vs, NodeGatewayEndpoint: nodeGatewayEndpoint, WalletDir: walletDir, Wallet: s.wallet, diff --git a/validator/rpc/BUILD.bazel b/validator/rpc/BUILD.bazel index 9bf0aba9d9..f611cb4b15 100644 --- a/validator/rpc/BUILD.bazel +++ b/validator/rpc/BUILD.bazel @@ -15,11 +15,13 @@ go_library( importpath = "github.com/prysmaticlabs/prysm/validator/rpc", visibility = ["//validator:__subpackages__"], deps = [ + "//proto/beacon/rpc/v1:go_default_library", "//proto/validator/accounts/v2:go_default_library", "//shared/cmd:go_default_library", "//shared/event:go_default_library", "//shared/featureconfig:go_default_library", "//shared/fileutil:go_default_library", + "//shared/logutil:go_default_library", "//shared/pagination:go_default_library", "//shared/petnames:go_default_library", "//shared/promptutil:go_default_library", diff --git a/validator/rpc/beacon.go b/validator/rpc/beacon.go index 662efd13f6..65efe39640 100644 --- a/validator/rpc/beacon.go +++ b/validator/rpc/beacon.go @@ -12,6 +12,7 @@ import ( grpc_prometheus "github.com/grpc-ecosystem/go-grpc-prometheus" "github.com/pkg/errors" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" + healthpb "github.com/prysmaticlabs/prysm/proto/beacon/rpc/v1" pb "github.com/prysmaticlabs/prysm/proto/validator/accounts/v2" "github.com/prysmaticlabs/prysm/validator/client" "google.golang.org/grpc" @@ -54,6 +55,7 @@ func (s *Server) registerBeaconClient() error { } s.beaconChainClient = ethpb.NewBeaconChainClient(conn) s.beaconNodeClient = ethpb.NewNodeClient(conn) + s.beaconNodeHealthClient = healthpb.NewHealthClient(conn) return nil } diff --git a/validator/rpc/health.go b/validator/rpc/health.go index 0596d021e7..0bffcfb77c 100644 --- a/validator/rpc/health.go +++ b/validator/rpc/health.go @@ -2,10 +2,10 @@ package rpc import ( "context" - "fmt" "time" ptypes "github.com/gogo/protobuf/types" + "github.com/pkg/errors" pb "github.com/prysmaticlabs/prysm/proto/validator/accounts/v2" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -38,22 +38,63 @@ func (s *Server) GetBeaconNodeConnection(ctx context.Context, _ *ptypes.Empty) ( // GetLogsEndpoints for the beacon and validator client. func (s *Server) GetLogsEndpoints(ctx context.Context, _ *ptypes.Empty) (*pb.LogsEndpointResponse, error) { - beaconLogsEndpoint, err := s.beaconNodeInfoFetcher.BeaconLogsEndpoint(ctx) + return nil, status.Error(codes.Unimplemented, "unimplemented") +} + +// StreamBeaconLogs from the beacon node via a gRPC server-side stream. +func (s *Server) StreamBeaconLogs(req *ptypes.Empty, stream pb.Health_StreamBeaconLogsServer) error { + client, err := s.beaconNodeHealthClient.StreamBeaconLogs(s.ctx, req) if err != nil { - return nil, err + return err + } + for { + select { + case <-s.ctx.Done(): + return status.Error(codes.Canceled, "Context canceled") + case <-stream.Context().Done(): + return status.Error(codes.Canceled, "Context canceled") + default: + resp, err := client.Recv() + if err != nil { + return errors.Wrap(err, "could not receive beacon logs from stream") + } + if err := stream.Send(resp); err != nil { + return status.Errorf(codes.Unavailable, "Could not send over stream: %v", err) + } + } } - return &pb.LogsEndpointResponse{ - BeaconLogsEndpoint: beaconLogsEndpoint + "/logs", - ValidatorLogsEndpoint: fmt.Sprintf("%s:%d/logs", s.validatorMonitoringHost, s.validatorMonitoringPort), - }, nil } -// StreamBeaconLogs -- -func (s *Server) StreamBeaconLogs(_ *ptypes.Empty, stream pb.Health_StreamBeaconLogsServer) error { - return status.Error(codes.Unimplemented, "unimplemented") -} - -// StreamValidatorLogs -- +// StreamValidatorLogs from the validator client via a gRPC server-side stream. func (s *Server) StreamValidatorLogs(_ *ptypes.Empty, stream pb.Health_StreamValidatorLogsServer) error { - return status.Error(codes.Unimplemented, "unimplemented") + ch := make(chan []byte, s.streamLogsBufferSize) + defer close(ch) + sub := s.logsStreamer.LogsFeed().Subscribe(ch) + defer sub.Unsubscribe() + + recentLogs := s.logsStreamer.GetLastFewLogs() + logStrings := make([]string, len(recentLogs)) + for i, log := range recentLogs { + logStrings[i] = string(log) + } + if err := stream.Send(&pb.LogsResponse{ + Logs: logStrings, + }); err != nil { + return status.Errorf(codes.Unavailable, "Could not send over stream: %v", err) + } + for { + select { + case log := <-ch: + resp := &pb.LogsResponse{ + Logs: []string{string(log)}, + } + if err := stream.Send(resp); err != nil { + return status.Errorf(codes.Unavailable, "Could not send over stream: %v", err) + } + case <-s.ctx.Done(): + return status.Error(codes.Canceled, "Context canceled") + case <-stream.Context().Done(): + return status.Error(codes.Canceled, "Context canceled") + } + } } diff --git a/validator/rpc/health_test.go b/validator/rpc/health_test.go index 391dccdf02..7eafead46b 100644 --- a/validator/rpc/health_test.go +++ b/validator/rpc/health_test.go @@ -63,19 +63,3 @@ func TestServer_GetBeaconNodeConnection(t *testing.T) { } require.DeepEqual(t, want, got) } - -func TestServer_GetLogsEndpoints(t *testing.T) { - ctx := context.Background() - s := &Server{ - validatorMonitoringHost: "localhost", - validatorMonitoringPort: 8081, - beaconNodeInfoFetcher: &mockBeaconInfoFetcher{endpoint: "localhost:8080"}, - } - got, err := s.GetLogsEndpoints(ctx, &ptypes.Empty{}) - require.NoError(t, err) - want := &pb.LogsEndpointResponse{ - BeaconLogsEndpoint: "localhost:8080/logs", - ValidatorLogsEndpoint: "localhost:8081/logs", - } - require.DeepEqual(t, want, got) -} diff --git a/validator/rpc/intercepter.go b/validator/rpc/intercepter.go index ee1889a8c8..9922076105 100644 --- a/validator/rpc/intercepter.go +++ b/validator/rpc/intercepter.go @@ -29,6 +29,7 @@ var ( "/ethereum.validator.accounts.v2.Beacon/GetValidators": true, "/ethereum.validator.accounts.v2.Beacon/GetValidatorQueue": true, "/ethereum.validator.accounts.v2.Beacon/GetPeers": true, + "/ethereum.validator.accounts.v2.Beacon/StreamValidatorLogs": true, } authLock sync.RWMutex ) diff --git a/validator/rpc/server.go b/validator/rpc/server.go index af31252b71..0c29aa0394 100644 --- a/validator/rpc/server.go +++ b/validator/rpc/server.go @@ -12,8 +12,10 @@ import ( grpc_opentracing "github.com/grpc-ecosystem/go-grpc-middleware/tracing/opentracing" grpc_prometheus "github.com/grpc-ecosystem/go-grpc-prometheus" ethpb "github.com/prysmaticlabs/ethereumapis/eth/v1alpha1" + healthpb "github.com/prysmaticlabs/prysm/proto/beacon/rpc/v1" pb "github.com/prysmaticlabs/prysm/proto/validator/accounts/v2" "github.com/prysmaticlabs/prysm/shared/event" + "github.com/prysmaticlabs/prysm/shared/logutil" "github.com/prysmaticlabs/prysm/shared/rand" "github.com/prysmaticlabs/prysm/shared/traceutil" "github.com/prysmaticlabs/prysm/validator/accounts/wallet" @@ -54,7 +56,6 @@ type Config struct { ValidatorService *client.ValidatorService SyncChecker client.SyncChecker GenesisFetcher client.GenesisFetcher - BeaconNodeInfoFetcher client.BeaconNodeInfoFetcher WalletInitializedFeed *event.Feed NodeGatewayEndpoint string Wallet *wallet.Wallet @@ -63,8 +64,11 @@ type Config struct { // Server defining a gRPC server for the remote signer API. type Server struct { + logsStreamer logutil.Streamer + streamLogsBufferSize int beaconChainClient ethpb.BeaconChainClient beaconNodeClient ethpb.NodeClient + beaconNodeHealthClient healthpb.HealthClient valDB db.Database ctx context.Context cancel context.CancelFunc @@ -86,7 +90,6 @@ type Server struct { validatorService *client.ValidatorService syncChecker client.SyncChecker genesisFetcher client.GenesisFetcher - beaconNodeInfoFetcher client.BeaconNodeInfoFetcher walletDir string wallet *wallet.Wallet walletInitializedFeed *event.Feed @@ -104,6 +107,8 @@ func NewServer(ctx context.Context, cfg *Config) *Server { return &Server{ ctx: ctx, cancel: cancel, + logsStreamer: logutil.NewStreamServer(), + streamLogsBufferSize: 1000, // Enough to handle most bursts of logs in the validator client. host: cfg.Host, port: cfg.Port, withCert: cfg.CertFlag, @@ -117,7 +122,6 @@ func NewServer(ctx context.Context, cfg *Config) *Server { valDB: cfg.ValDB, validatorService: cfg.ValidatorService, syncChecker: cfg.SyncChecker, - beaconNodeInfoFetcher: cfg.BeaconNodeInfoFetcher, genesisFetcher: cfg.GenesisFetcher, walletDir: cfg.WalletDir, walletInitializedFeed: cfg.WalletInitializedFeed,