diff --git a/pkg/loop/internal/provider.go b/pkg/loop/internal/contract_transmitter.go similarity index 100% rename from pkg/loop/internal/provider.go rename to pkg/loop/internal/contract_transmitter.go diff --git a/pkg/loop/internal/median.go b/pkg/loop/internal/median.go index 1c217e1b3..34631b463 100644 --- a/pkg/loop/internal/median.go +++ b/pkg/loop/internal/median.go @@ -170,28 +170,22 @@ var ( ) type medianProviderClient struct { - *configProviderClient - contractTransmitter libocr.ContractTransmitter - reportCodec median.ReportCodec - medianContract median.MedianContract - onchainConfigCodec median.OnchainConfigCodec + *pluginProviderClient + reportCodec median.ReportCodec + medianContract median.MedianContract + onchainConfigCodec median.OnchainConfigCodec } func (m *medianProviderClient) ClientConn() grpc.ClientConnInterface { return m.cc } func newMedianProviderClient(b *brokerExt, cc grpc.ClientConnInterface) *medianProviderClient { - m := &medianProviderClient{configProviderClient: newConfigProviderClient(b.withName("MedianProviderClient"), cc)} - m.contractTransmitter = &contractTransmitterClient{b, pb.NewContractTransmitterClient(m.cc)} + m := &medianProviderClient{pluginProviderClient: newPluginProviderClient(b.withName("MedianProviderClient"), cc)} m.reportCodec = &reportCodecClient{b, pb.NewReportCodecClient(m.cc)} m.medianContract = &medianContractClient{pb.NewMedianContractClient(m.cc)} m.onchainConfigCodec = &onchainConfigCodecClient{b, pb.NewOnchainConfigCodecClient(m.cc)} return m } -func (m *medianProviderClient) ContractTransmitter() libocr.ContractTransmitter { - return m.contractTransmitter -} - func (m *medianProviderClient) ReportCodec() median.ReportCodec { return m.reportCodec } diff --git a/pkg/loop/internal/pb/relayer.pb.go b/pkg/loop/internal/pb/relayer.pb.go index 97398baf5..6cc307b4d 100644 --- a/pkg/loop/internal/pb/relayer.pb.go +++ b/pkg/loop/internal/pb/relayer.pb.go @@ -283,6 +283,7 @@ type RelayArgs struct { ContractID string `protobuf:"bytes,3,opt,name=contractID,proto3" json:"contractID,omitempty"` New bool `protobuf:"varint,4,opt,name=new,proto3" json:"new,omitempty"` RelayConfig []byte `protobuf:"bytes,5,opt,name=relayConfig,proto3" json:"relayConfig,omitempty"` + ProviderType string `protobuf:"bytes,6,opt,name=providerType,proto3" json:"providerType,omitempty"` } func (x *RelayArgs) Reset() { @@ -352,6 +353,13 @@ func (x *RelayArgs) GetRelayConfig() []byte { return nil } +func (x *RelayArgs) GetProviderType() string { + if x != nil { + return x.ProviderType + } + return "" +} + // RelayArgs represents [github.com/smartcontractkit/chainlink-relay/pkg/types.PluginArgs]. type PluginArgs struct { state protoimpl.MessageState @@ -408,17 +416,18 @@ func (x *PluginArgs) GetPluginConfig() []byte { return nil } -// NewConfigProviderRequest has arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewConfigProvider]. -type NewConfigProviderRequest struct { +// NewPluginProviderRequest has arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewPluginProvider]. +type NewPluginProviderRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - RelayArgs *RelayArgs `protobuf:"bytes,1,opt,name=relayArgs,proto3" json:"relayArgs,omitempty"` + RelayArgs *RelayArgs `protobuf:"bytes,1,opt,name=relayArgs,proto3" json:"relayArgs,omitempty"` + PluginArgs *PluginArgs `protobuf:"bytes,2,opt,name=pluginArgs,proto3" json:"pluginArgs,omitempty"` } -func (x *NewConfigProviderRequest) Reset() { - *x = NewConfigProviderRequest{} +func (x *NewPluginProviderRequest) Reset() { + *x = NewPluginProviderRequest{} if protoimpl.UnsafeEnabled { mi := &file_relayer_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -426,13 +435,13 @@ func (x *NewConfigProviderRequest) Reset() { } } -func (x *NewConfigProviderRequest) String() string { +func (x *NewPluginProviderRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*NewConfigProviderRequest) ProtoMessage() {} +func (*NewPluginProviderRequest) ProtoMessage() {} -func (x *NewConfigProviderRequest) ProtoReflect() protoreflect.Message { +func (x *NewPluginProviderRequest) ProtoReflect() protoreflect.Message { mi := &file_relayer_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -444,29 +453,36 @@ func (x *NewConfigProviderRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use NewConfigProviderRequest.ProtoReflect.Descriptor instead. -func (*NewConfigProviderRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use NewPluginProviderRequest.ProtoReflect.Descriptor instead. +func (*NewPluginProviderRequest) Descriptor() ([]byte, []int) { return file_relayer_proto_rawDescGZIP(), []int{7} } -func (x *NewConfigProviderRequest) GetRelayArgs() *RelayArgs { +func (x *NewPluginProviderRequest) GetRelayArgs() *RelayArgs { if x != nil { return x.RelayArgs } return nil } -// NewConfigProviderReply has return arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewConfigProvider]. -type NewConfigProviderReply struct { +func (x *NewPluginProviderRequest) GetPluginArgs() *PluginArgs { + if x != nil { + return x.PluginArgs + } + return nil +} + +// NewPluginProviderReply has return arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewPluginProvider]. +type NewPluginProviderReply struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ConfigProviderID uint32 `protobuf:"varint,1,opt,name=configProviderID,proto3" json:"configProviderID,omitempty"` + PluginProviderID uint32 `protobuf:"varint,1,opt,name=pluginProviderID,proto3" json:"pluginProviderID,omitempty"` } -func (x *NewConfigProviderReply) Reset() { - *x = NewConfigProviderReply{} +func (x *NewPluginProviderReply) Reset() { + *x = NewPluginProviderReply{} if protoimpl.UnsafeEnabled { mi := &file_relayer_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -474,13 +490,13 @@ func (x *NewConfigProviderReply) Reset() { } } -func (x *NewConfigProviderReply) String() string { +func (x *NewPluginProviderReply) String() string { return protoimpl.X.MessageStringOf(x) } -func (*NewConfigProviderReply) ProtoMessage() {} +func (*NewPluginProviderReply) ProtoMessage() {} -func (x *NewConfigProviderReply) ProtoReflect() protoreflect.Message { +func (x *NewPluginProviderReply) ProtoReflect() protoreflect.Message { mi := &file_relayer_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -492,30 +508,29 @@ func (x *NewConfigProviderReply) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use NewConfigProviderReply.ProtoReflect.Descriptor instead. -func (*NewConfigProviderReply) Descriptor() ([]byte, []int) { +// Deprecated: Use NewPluginProviderReply.ProtoReflect.Descriptor instead. +func (*NewPluginProviderReply) Descriptor() ([]byte, []int) { return file_relayer_proto_rawDescGZIP(), []int{8} } -func (x *NewConfigProviderReply) GetConfigProviderID() uint32 { +func (x *NewPluginProviderReply) GetPluginProviderID() uint32 { if x != nil { - return x.ConfigProviderID + return x.PluginProviderID } return 0 } -// NewMedianProviderRequest has arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewMedianProvider]. -type NewMedianProviderRequest struct { +// NewConfigProviderRequest has arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewConfigProvider]. +type NewConfigProviderRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - RelayArgs *RelayArgs `protobuf:"bytes,1,opt,name=relayArgs,proto3" json:"relayArgs,omitempty"` - PluginArgs *PluginArgs `protobuf:"bytes,2,opt,name=pluginArgs,proto3" json:"pluginArgs,omitempty"` + RelayArgs *RelayArgs `protobuf:"bytes,1,opt,name=relayArgs,proto3" json:"relayArgs,omitempty"` } -func (x *NewMedianProviderRequest) Reset() { - *x = NewMedianProviderRequest{} +func (x *NewConfigProviderRequest) Reset() { + *x = NewConfigProviderRequest{} if protoimpl.UnsafeEnabled { mi := &file_relayer_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -523,13 +538,13 @@ func (x *NewMedianProviderRequest) Reset() { } } -func (x *NewMedianProviderRequest) String() string { +func (x *NewConfigProviderRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*NewMedianProviderRequest) ProtoMessage() {} +func (*NewConfigProviderRequest) ProtoMessage() {} -func (x *NewMedianProviderRequest) ProtoReflect() protoreflect.Message { +func (x *NewConfigProviderRequest) ProtoReflect() protoreflect.Message { mi := &file_relayer_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -541,36 +556,29 @@ func (x *NewMedianProviderRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use NewMedianProviderRequest.ProtoReflect.Descriptor instead. -func (*NewMedianProviderRequest) Descriptor() ([]byte, []int) { +// Deprecated: Use NewConfigProviderRequest.ProtoReflect.Descriptor instead. +func (*NewConfigProviderRequest) Descriptor() ([]byte, []int) { return file_relayer_proto_rawDescGZIP(), []int{9} } -func (x *NewMedianProviderRequest) GetRelayArgs() *RelayArgs { +func (x *NewConfigProviderRequest) GetRelayArgs() *RelayArgs { if x != nil { return x.RelayArgs } return nil } -func (x *NewMedianProviderRequest) GetPluginArgs() *PluginArgs { - if x != nil { - return x.PluginArgs - } - return nil -} - -// NewMedianProviderReply has return arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewMedianProvider]. -type NewMedianProviderReply struct { +// NewConfigProviderReply has return arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewConfigProvider]. +type NewConfigProviderReply struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - MedianProviderID uint32 `protobuf:"varint,1,opt,name=medianProviderID,proto3" json:"medianProviderID,omitempty"` + ConfigProviderID uint32 `protobuf:"varint,1,opt,name=configProviderID,proto3" json:"configProviderID,omitempty"` } -func (x *NewMedianProviderReply) Reset() { - *x = NewMedianProviderReply{} +func (x *NewConfigProviderReply) Reset() { + *x = NewConfigProviderReply{} if protoimpl.UnsafeEnabled { mi := &file_relayer_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -578,13 +586,13 @@ func (x *NewMedianProviderReply) Reset() { } } -func (x *NewMedianProviderReply) String() string { +func (x *NewConfigProviderReply) String() string { return protoimpl.X.MessageStringOf(x) } -func (*NewMedianProviderReply) ProtoMessage() {} +func (*NewConfigProviderReply) ProtoMessage() {} -func (x *NewMedianProviderReply) ProtoReflect() protoreflect.Message { +func (x *NewConfigProviderReply) ProtoReflect() protoreflect.Message { mi := &file_relayer_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -596,118 +604,14 @@ func (x *NewMedianProviderReply) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use NewMedianProviderReply.ProtoReflect.Descriptor instead. -func (*NewMedianProviderReply) Descriptor() ([]byte, []int) { +// Deprecated: Use NewConfigProviderReply.ProtoReflect.Descriptor instead. +func (*NewConfigProviderReply) Descriptor() ([]byte, []int) { return file_relayer_proto_rawDescGZIP(), []int{10} } -func (x *NewMedianProviderReply) GetMedianProviderID() uint32 { - if x != nil { - return x.MedianProviderID - } - return 0 -} - -// NewMercuryProviderRequest has arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewMercuryProvider]. -type NewMercuryProviderRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RelayArgs *RelayArgs `protobuf:"bytes,1,opt,name=relayArgs,proto3" json:"relayArgs,omitempty"` - PluginArgs *PluginArgs `protobuf:"bytes,2,opt,name=pluginArgs,proto3" json:"pluginArgs,omitempty"` -} - -func (x *NewMercuryProviderRequest) Reset() { - *x = NewMercuryProviderRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *NewMercuryProviderRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*NewMercuryProviderRequest) ProtoMessage() {} - -func (x *NewMercuryProviderRequest) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use NewMercuryProviderRequest.ProtoReflect.Descriptor instead. -func (*NewMercuryProviderRequest) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{11} -} - -func (x *NewMercuryProviderRequest) GetRelayArgs() *RelayArgs { - if x != nil { - return x.RelayArgs - } - return nil -} - -func (x *NewMercuryProviderRequest) GetPluginArgs() *PluginArgs { - if x != nil { - return x.PluginArgs - } - return nil -} - -// NewMercuryProviderReply has return arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewMercuryProvider]. -type NewMercuryProviderReply struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - MercuryProviderID uint32 `protobuf:"varint,1,opt,name=mercuryProviderID,proto3" json:"mercuryProviderID,omitempty"` -} - -func (x *NewMercuryProviderReply) Reset() { - *x = NewMercuryProviderReply{} - if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *NewMercuryProviderReply) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*NewMercuryProviderReply) ProtoMessage() {} - -func (x *NewMercuryProviderReply) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use NewMercuryProviderReply.ProtoReflect.Descriptor instead. -func (*NewMercuryProviderReply) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{12} -} - -func (x *NewMercuryProviderReply) GetMercuryProviderID() uint32 { +func (x *NewConfigProviderReply) GetConfigProviderID() uint32 { if x != nil { - return x.MercuryProviderID + return x.ConfigProviderID } return 0 } @@ -721,7 +625,7 @@ type GetChainStatusRequest struct { func (x *GetChainStatusRequest) Reset() { *x = GetChainStatusRequest{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[13] + mi := &file_relayer_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -734,7 +638,7 @@ func (x *GetChainStatusRequest) String() string { func (*GetChainStatusRequest) ProtoMessage() {} func (x *GetChainStatusRequest) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[13] + mi := &file_relayer_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -747,7 +651,7 @@ func (x *GetChainStatusRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetChainStatusRequest.ProtoReflect.Descriptor instead. func (*GetChainStatusRequest) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{13} + return file_relayer_proto_rawDescGZIP(), []int{11} } // ChainStatusReply has return arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.ChainStatus]. @@ -762,7 +666,7 @@ type GetChainStatusReply struct { func (x *GetChainStatusReply) Reset() { *x = GetChainStatusReply{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[14] + mi := &file_relayer_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -775,7 +679,7 @@ func (x *GetChainStatusReply) String() string { func (*GetChainStatusReply) ProtoMessage() {} func (x *GetChainStatusReply) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[14] + mi := &file_relayer_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -788,7 +692,7 @@ func (x *GetChainStatusReply) ProtoReflect() protoreflect.Message { // Deprecated: Use GetChainStatusReply.ProtoReflect.Descriptor instead. func (*GetChainStatusReply) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{14} + return file_relayer_proto_rawDescGZIP(), []int{12} } func (x *GetChainStatusReply) GetChain() *ChainStatus { @@ -812,7 +716,7 @@ type ChainStatus struct { func (x *ChainStatus) Reset() { *x = ChainStatus{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[15] + mi := &file_relayer_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -825,7 +729,7 @@ func (x *ChainStatus) String() string { func (*ChainStatus) ProtoMessage() {} func (x *ChainStatus) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[15] + mi := &file_relayer_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -838,7 +742,7 @@ func (x *ChainStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use ChainStatus.ProtoReflect.Descriptor instead. func (*ChainStatus) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{15} + return file_relayer_proto_rawDescGZIP(), []int{13} } func (x *ChainStatus) GetId() string { @@ -875,7 +779,7 @@ type ListNodeStatusesRequest struct { func (x *ListNodeStatusesRequest) Reset() { *x = ListNodeStatusesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[16] + mi := &file_relayer_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -888,7 +792,7 @@ func (x *ListNodeStatusesRequest) String() string { func (*ListNodeStatusesRequest) ProtoMessage() {} func (x *ListNodeStatusesRequest) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[16] + mi := &file_relayer_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -901,7 +805,7 @@ func (x *ListNodeStatusesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListNodeStatusesRequest.ProtoReflect.Descriptor instead. func (*ListNodeStatusesRequest) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{16} + return file_relayer_proto_rawDescGZIP(), []int{14} } func (x *ListNodeStatusesRequest) GetPageSize() int32 { @@ -932,7 +836,7 @@ type ListNodeStatusesReply struct { func (x *ListNodeStatusesReply) Reset() { *x = ListNodeStatusesReply{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[17] + mi := &file_relayer_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -945,7 +849,7 @@ func (x *ListNodeStatusesReply) String() string { func (*ListNodeStatusesReply) ProtoMessage() {} func (x *ListNodeStatusesReply) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[17] + mi := &file_relayer_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -958,7 +862,7 @@ func (x *ListNodeStatusesReply) ProtoReflect() protoreflect.Message { // Deprecated: Use ListNodeStatusesReply.ProtoReflect.Descriptor instead. func (*ListNodeStatusesReply) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{17} + return file_relayer_proto_rawDescGZIP(), []int{15} } func (x *ListNodeStatusesReply) GetNodes() []*NodeStatus { @@ -997,7 +901,7 @@ type NodeStatus struct { func (x *NodeStatus) Reset() { *x = NodeStatus{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[18] + mi := &file_relayer_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1010,7 +914,7 @@ func (x *NodeStatus) String() string { func (*NodeStatus) ProtoMessage() {} func (x *NodeStatus) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[18] + mi := &file_relayer_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1023,7 +927,7 @@ func (x *NodeStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use NodeStatus.ProtoReflect.Descriptor instead. func (*NodeStatus) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{18} + return file_relayer_proto_rawDescGZIP(), []int{16} } func (x *NodeStatus) GetChainID() string { @@ -1069,7 +973,7 @@ type TransactionRequest struct { func (x *TransactionRequest) Reset() { *x = TransactionRequest{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[19] + mi := &file_relayer_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1082,7 +986,7 @@ func (x *TransactionRequest) String() string { func (*TransactionRequest) ProtoMessage() {} func (x *TransactionRequest) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[19] + mi := &file_relayer_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1095,7 +999,7 @@ func (x *TransactionRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TransactionRequest.ProtoReflect.Descriptor instead. func (*TransactionRequest) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{19} + return file_relayer_proto_rawDescGZIP(), []int{17} } func (x *TransactionRequest) GetFrom() string { @@ -1138,7 +1042,7 @@ type ObserveRequest struct { func (x *ObserveRequest) Reset() { *x = ObserveRequest{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[20] + mi := &file_relayer_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1151,7 +1055,7 @@ func (x *ObserveRequest) String() string { func (*ObserveRequest) ProtoMessage() {} func (x *ObserveRequest) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[20] + mi := &file_relayer_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1164,7 +1068,7 @@ func (x *ObserveRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ObserveRequest.ProtoReflect.Descriptor instead. func (*ObserveRequest) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{20} + return file_relayer_proto_rawDescGZIP(), []int{18} } func (x *ObserveRequest) GetReportTimestamp() *ReportTimestamp { @@ -1186,7 +1090,7 @@ type ObserveReply struct { func (x *ObserveReply) Reset() { *x = ObserveReply{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[21] + mi := &file_relayer_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1199,7 +1103,7 @@ func (x *ObserveReply) String() string { func (*ObserveReply) ProtoMessage() {} func (x *ObserveReply) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[21] + mi := &file_relayer_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1212,7 +1116,7 @@ func (x *ObserveReply) ProtoReflect() protoreflect.Message { // Deprecated: Use ObserveReply.ProtoReflect.Descriptor instead. func (*ObserveReply) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{21} + return file_relayer_proto_rawDescGZIP(), []int{19} } func (x *ObserveReply) GetValue() *BigInt { @@ -1241,7 +1145,7 @@ type ContractConfig struct { func (x *ContractConfig) Reset() { *x = ContractConfig{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[22] + mi := &file_relayer_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1254,7 +1158,7 @@ func (x *ContractConfig) String() string { func (*ContractConfig) ProtoMessage() {} func (x *ContractConfig) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[22] + mi := &file_relayer_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1267,7 +1171,7 @@ func (x *ContractConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use ContractConfig.ProtoReflect.Descriptor instead. func (*ContractConfig) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{22} + return file_relayer_proto_rawDescGZIP(), []int{20} } func (x *ContractConfig) GetConfigDigest() []byte { @@ -1338,7 +1242,7 @@ type ConfigDigestRequest struct { func (x *ConfigDigestRequest) Reset() { *x = ConfigDigestRequest{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[23] + mi := &file_relayer_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1351,7 +1255,7 @@ func (x *ConfigDigestRequest) String() string { func (*ConfigDigestRequest) ProtoMessage() {} func (x *ConfigDigestRequest) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[23] + mi := &file_relayer_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1364,7 +1268,7 @@ func (x *ConfigDigestRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ConfigDigestRequest.ProtoReflect.Descriptor instead. func (*ConfigDigestRequest) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{23} + return file_relayer_proto_rawDescGZIP(), []int{21} } func (x *ConfigDigestRequest) GetContractConfig() *ContractConfig { @@ -1386,7 +1290,7 @@ type ConfigDigestReply struct { func (x *ConfigDigestReply) Reset() { *x = ConfigDigestReply{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[24] + mi := &file_relayer_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1399,7 +1303,7 @@ func (x *ConfigDigestReply) String() string { func (*ConfigDigestReply) ProtoMessage() {} func (x *ConfigDigestReply) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[24] + mi := &file_relayer_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1412,7 +1316,7 @@ func (x *ConfigDigestReply) ProtoReflect() protoreflect.Message { // Deprecated: Use ConfigDigestReply.ProtoReflect.Descriptor instead. func (*ConfigDigestReply) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{24} + return file_relayer_proto_rawDescGZIP(), []int{22} } func (x *ConfigDigestReply) GetConfigDigest() []byte { @@ -1431,7 +1335,7 @@ type ConfigDigestPrefixRequest struct { func (x *ConfigDigestPrefixRequest) Reset() { *x = ConfigDigestPrefixRequest{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[25] + mi := &file_relayer_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1444,7 +1348,7 @@ func (x *ConfigDigestPrefixRequest) String() string { func (*ConfigDigestPrefixRequest) ProtoMessage() {} func (x *ConfigDigestPrefixRequest) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[25] + mi := &file_relayer_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1457,7 +1361,7 @@ func (x *ConfigDigestPrefixRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ConfigDigestPrefixRequest.ProtoReflect.Descriptor instead. func (*ConfigDigestPrefixRequest) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{25} + return file_relayer_proto_rawDescGZIP(), []int{23} } // ConfigDigestPrefixReply has return arguments for [github.com/smartcontractkit/libocr/offchainreporting2plus/types.OffchainConfigDigester.ConfigDigestPrefix]. @@ -1472,7 +1376,7 @@ type ConfigDigestPrefixReply struct { func (x *ConfigDigestPrefixReply) Reset() { *x = ConfigDigestPrefixReply{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[26] + mi := &file_relayer_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1485,7 +1389,7 @@ func (x *ConfigDigestPrefixReply) String() string { func (*ConfigDigestPrefixReply) ProtoMessage() {} func (x *ConfigDigestPrefixReply) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[26] + mi := &file_relayer_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1498,7 +1402,7 @@ func (x *ConfigDigestPrefixReply) ProtoReflect() protoreflect.Message { // Deprecated: Use ConfigDigestPrefixReply.ProtoReflect.Descriptor instead. func (*ConfigDigestPrefixReply) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{26} + return file_relayer_proto_rawDescGZIP(), []int{24} } func (x *ConfigDigestPrefixReply) GetConfigDigestPrefix() uint32 { @@ -1517,7 +1421,7 @@ type LatestConfigDetailsRequest struct { func (x *LatestConfigDetailsRequest) Reset() { *x = LatestConfigDetailsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[27] + mi := &file_relayer_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1530,7 +1434,7 @@ func (x *LatestConfigDetailsRequest) String() string { func (*LatestConfigDetailsRequest) ProtoMessage() {} func (x *LatestConfigDetailsRequest) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[27] + mi := &file_relayer_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1543,7 +1447,7 @@ func (x *LatestConfigDetailsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LatestConfigDetailsRequest.ProtoReflect.Descriptor instead. func (*LatestConfigDetailsRequest) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{27} + return file_relayer_proto_rawDescGZIP(), []int{25} } // LatestConfigDetailsReply has return arguments for [github.com/smartcontractkit/libocr/offchainreporting2plus/types.ContractConfigTracker.LatestConfigDetails]. @@ -1559,7 +1463,7 @@ type LatestConfigDetailsReply struct { func (x *LatestConfigDetailsReply) Reset() { *x = LatestConfigDetailsReply{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[28] + mi := &file_relayer_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1572,7 +1476,7 @@ func (x *LatestConfigDetailsReply) String() string { func (*LatestConfigDetailsReply) ProtoMessage() {} func (x *LatestConfigDetailsReply) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[28] + mi := &file_relayer_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1585,7 +1489,7 @@ func (x *LatestConfigDetailsReply) ProtoReflect() protoreflect.Message { // Deprecated: Use LatestConfigDetailsReply.ProtoReflect.Descriptor instead. func (*LatestConfigDetailsReply) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{28} + return file_relayer_proto_rawDescGZIP(), []int{26} } func (x *LatestConfigDetailsReply) GetChangedInBlock() uint64 { @@ -1614,7 +1518,7 @@ type LatestConfigRequest struct { func (x *LatestConfigRequest) Reset() { *x = LatestConfigRequest{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[29] + mi := &file_relayer_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1627,7 +1531,7 @@ func (x *LatestConfigRequest) String() string { func (*LatestConfigRequest) ProtoMessage() {} func (x *LatestConfigRequest) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[29] + mi := &file_relayer_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1640,7 +1544,7 @@ func (x *LatestConfigRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LatestConfigRequest.ProtoReflect.Descriptor instead. func (*LatestConfigRequest) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{29} + return file_relayer_proto_rawDescGZIP(), []int{27} } func (x *LatestConfigRequest) GetChangedInBlock() uint64 { @@ -1662,7 +1566,7 @@ type LatestConfigReply struct { func (x *LatestConfigReply) Reset() { *x = LatestConfigReply{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[30] + mi := &file_relayer_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1675,7 +1579,7 @@ func (x *LatestConfigReply) String() string { func (*LatestConfigReply) ProtoMessage() {} func (x *LatestConfigReply) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[30] + mi := &file_relayer_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1688,7 +1592,7 @@ func (x *LatestConfigReply) ProtoReflect() protoreflect.Message { // Deprecated: Use LatestConfigReply.ProtoReflect.Descriptor instead. func (*LatestConfigReply) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{30} + return file_relayer_proto_rawDescGZIP(), []int{28} } func (x *LatestConfigReply) GetContractConfig() *ContractConfig { @@ -1707,7 +1611,7 @@ type LatestBlockHeightRequest struct { func (x *LatestBlockHeightRequest) Reset() { *x = LatestBlockHeightRequest{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[31] + mi := &file_relayer_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1720,7 +1624,7 @@ func (x *LatestBlockHeightRequest) String() string { func (*LatestBlockHeightRequest) ProtoMessage() {} func (x *LatestBlockHeightRequest) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[31] + mi := &file_relayer_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1733,7 +1637,7 @@ func (x *LatestBlockHeightRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LatestBlockHeightRequest.ProtoReflect.Descriptor instead. func (*LatestBlockHeightRequest) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{31} + return file_relayer_proto_rawDescGZIP(), []int{29} } // LatestBlockHeightReply has return arguments for [github.com/smartcontractkit/libocr/offchainreporting2plus/types.ContractConfigTracker.LatestBlockHeightReply]. @@ -1748,7 +1652,7 @@ type LatestBlockHeightReply struct { func (x *LatestBlockHeightReply) Reset() { *x = LatestBlockHeightReply{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[32] + mi := &file_relayer_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1761,7 +1665,7 @@ func (x *LatestBlockHeightReply) String() string { func (*LatestBlockHeightReply) ProtoMessage() {} func (x *LatestBlockHeightReply) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[32] + mi := &file_relayer_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1774,7 +1678,7 @@ func (x *LatestBlockHeightReply) ProtoReflect() protoreflect.Message { // Deprecated: Use LatestBlockHeightReply.ProtoReflect.Descriptor instead. func (*LatestBlockHeightReply) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{32} + return file_relayer_proto_rawDescGZIP(), []int{30} } func (x *LatestBlockHeightReply) GetBlockHeight() uint64 { @@ -1798,7 +1702,7 @@ type ReportTimestamp struct { func (x *ReportTimestamp) Reset() { *x = ReportTimestamp{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[33] + mi := &file_relayer_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1811,7 +1715,7 @@ func (x *ReportTimestamp) String() string { func (*ReportTimestamp) ProtoMessage() {} func (x *ReportTimestamp) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[33] + mi := &file_relayer_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1824,7 +1728,7 @@ func (x *ReportTimestamp) ProtoReflect() protoreflect.Message { // Deprecated: Use ReportTimestamp.ProtoReflect.Descriptor instead. func (*ReportTimestamp) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{33} + return file_relayer_proto_rawDescGZIP(), []int{31} } func (x *ReportTimestamp) GetConfigDigest() []byte { @@ -1861,7 +1765,7 @@ type ReportContext struct { func (x *ReportContext) Reset() { *x = ReportContext{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[34] + mi := &file_relayer_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1874,7 +1778,7 @@ func (x *ReportContext) String() string { func (*ReportContext) ProtoMessage() {} func (x *ReportContext) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[34] + mi := &file_relayer_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1887,7 +1791,7 @@ func (x *ReportContext) ProtoReflect() protoreflect.Message { // Deprecated: Use ReportContext.ProtoReflect.Descriptor instead. func (*ReportContext) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{34} + return file_relayer_proto_rawDescGZIP(), []int{32} } func (x *ReportContext) GetReportTimestamp() *ReportTimestamp { @@ -1917,7 +1821,7 @@ type AttributedOnchainSignature struct { func (x *AttributedOnchainSignature) Reset() { *x = AttributedOnchainSignature{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[35] + mi := &file_relayer_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1930,7 +1834,7 @@ func (x *AttributedOnchainSignature) String() string { func (*AttributedOnchainSignature) ProtoMessage() {} func (x *AttributedOnchainSignature) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[35] + mi := &file_relayer_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1943,7 +1847,7 @@ func (x *AttributedOnchainSignature) ProtoReflect() protoreflect.Message { // Deprecated: Use AttributedOnchainSignature.ProtoReflect.Descriptor instead. func (*AttributedOnchainSignature) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{35} + return file_relayer_proto_rawDescGZIP(), []int{33} } func (x *AttributedOnchainSignature) GetSignature() []byte { @@ -1974,7 +1878,7 @@ type TransmitRequest struct { func (x *TransmitRequest) Reset() { *x = TransmitRequest{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[36] + mi := &file_relayer_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1987,7 +1891,7 @@ func (x *TransmitRequest) String() string { func (*TransmitRequest) ProtoMessage() {} func (x *TransmitRequest) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[36] + mi := &file_relayer_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2000,7 +1904,7 @@ func (x *TransmitRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TransmitRequest.ProtoReflect.Descriptor instead. func (*TransmitRequest) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{36} + return file_relayer_proto_rawDescGZIP(), []int{34} } func (x *TransmitRequest) GetReportContext() *ReportContext { @@ -2033,7 +1937,7 @@ type TransmitReply struct { func (x *TransmitReply) Reset() { *x = TransmitReply{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[37] + mi := &file_relayer_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2046,7 +1950,7 @@ func (x *TransmitReply) String() string { func (*TransmitReply) ProtoMessage() {} func (x *TransmitReply) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[37] + mi := &file_relayer_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2059,7 +1963,7 @@ func (x *TransmitReply) ProtoReflect() protoreflect.Message { // Deprecated: Use TransmitReply.ProtoReflect.Descriptor instead. func (*TransmitReply) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{37} + return file_relayer_proto_rawDescGZIP(), []int{35} } type LatestConfigDigestAndEpochRequest struct { @@ -2071,7 +1975,7 @@ type LatestConfigDigestAndEpochRequest struct { func (x *LatestConfigDigestAndEpochRequest) Reset() { *x = LatestConfigDigestAndEpochRequest{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[38] + mi := &file_relayer_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2084,7 +1988,7 @@ func (x *LatestConfigDigestAndEpochRequest) String() string { func (*LatestConfigDigestAndEpochRequest) ProtoMessage() {} func (x *LatestConfigDigestAndEpochRequest) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[38] + mi := &file_relayer_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2097,7 +2001,7 @@ func (x *LatestConfigDigestAndEpochRequest) ProtoReflect() protoreflect.Message // Deprecated: Use LatestConfigDigestAndEpochRequest.ProtoReflect.Descriptor instead. func (*LatestConfigDigestAndEpochRequest) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{38} + return file_relayer_proto_rawDescGZIP(), []int{36} } // LatestConfigDigestAndEpochReply has return arguments for [github.com/smartcontractkit/libocr/offchainreporting2plus/types.ContractTransmitter.LatestConfigDigestAndEpoch]. @@ -2113,7 +2017,7 @@ type LatestConfigDigestAndEpochReply struct { func (x *LatestConfigDigestAndEpochReply) Reset() { *x = LatestConfigDigestAndEpochReply{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[39] + mi := &file_relayer_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2126,7 +2030,7 @@ func (x *LatestConfigDigestAndEpochReply) String() string { func (*LatestConfigDigestAndEpochReply) ProtoMessage() {} func (x *LatestConfigDigestAndEpochReply) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[39] + mi := &file_relayer_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2139,7 +2043,7 @@ func (x *LatestConfigDigestAndEpochReply) ProtoReflect() protoreflect.Message { // Deprecated: Use LatestConfigDigestAndEpochReply.ProtoReflect.Descriptor instead. func (*LatestConfigDigestAndEpochReply) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{39} + return file_relayer_proto_rawDescGZIP(), []int{37} } func (x *LatestConfigDigestAndEpochReply) GetConfigDigest() []byte { @@ -2165,7 +2069,7 @@ type FromAccountRequest struct { func (x *FromAccountRequest) Reset() { *x = FromAccountRequest{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[40] + mi := &file_relayer_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2178,7 +2082,7 @@ func (x *FromAccountRequest) String() string { func (*FromAccountRequest) ProtoMessage() {} func (x *FromAccountRequest) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[40] + mi := &file_relayer_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2191,7 +2095,7 @@ func (x *FromAccountRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use FromAccountRequest.ProtoReflect.Descriptor instead. func (*FromAccountRequest) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{40} + return file_relayer_proto_rawDescGZIP(), []int{38} } // FromAccountReply has return arguments for [github.com/smartcontractkit/chainlink-relay/pkg/types.Service.FromAccount]. @@ -2206,7 +2110,7 @@ type FromAccountReply struct { func (x *FromAccountReply) Reset() { *x = FromAccountReply{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[41] + mi := &file_relayer_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2219,7 +2123,7 @@ func (x *FromAccountReply) String() string { func (*FromAccountReply) ProtoMessage() {} func (x *FromAccountReply) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[41] + mi := &file_relayer_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2232,7 +2136,7 @@ func (x *FromAccountReply) ProtoReflect() protoreflect.Message { // Deprecated: Use FromAccountReply.ProtoReflect.Descriptor instead. func (*FromAccountReply) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{41} + return file_relayer_proto_rawDescGZIP(), []int{39} } func (x *FromAccountReply) GetAccount() string { @@ -2254,7 +2158,7 @@ type NameReply struct { func (x *NameReply) Reset() { *x = NameReply{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[42] + mi := &file_relayer_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2267,7 +2171,7 @@ func (x *NameReply) String() string { func (*NameReply) ProtoMessage() {} func (x *NameReply) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[42] + mi := &file_relayer_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2280,7 +2184,7 @@ func (x *NameReply) ProtoReflect() protoreflect.Message { // Deprecated: Use NameReply.ProtoReflect.Descriptor instead. func (*NameReply) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{42} + return file_relayer_proto_rawDescGZIP(), []int{40} } func (x *NameReply) GetName() string { @@ -2302,7 +2206,7 @@ type HealthReportReply struct { func (x *HealthReportReply) Reset() { *x = HealthReportReply{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[43] + mi := &file_relayer_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2315,7 +2219,7 @@ func (x *HealthReportReply) String() string { func (*HealthReportReply) ProtoMessage() {} func (x *HealthReportReply) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[43] + mi := &file_relayer_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2328,7 +2232,7 @@ func (x *HealthReportReply) ProtoReflect() protoreflect.Message { // Deprecated: Use HealthReportReply.ProtoReflect.Descriptor instead. func (*HealthReportReply) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{43} + return file_relayer_proto_rawDescGZIP(), []int{41} } func (x *HealthReportReply) GetHealthReport() map[string]string { @@ -2351,7 +2255,7 @@ type BigInt struct { func (x *BigInt) Reset() { *x = BigInt{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[44] + mi := &file_relayer_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2364,7 +2268,7 @@ func (x *BigInt) String() string { func (*BigInt) ProtoMessage() {} func (x *BigInt) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[44] + mi := &file_relayer_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2377,7 +2281,7 @@ func (x *BigInt) ProtoReflect() protoreflect.Message { // Deprecated: Use BigInt.ProtoReflect.Descriptor instead. func (*BigInt) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{44} + return file_relayer_proto_rawDescGZIP(), []int{42} } func (x *BigInt) GetNegative() bool { @@ -2406,7 +2310,7 @@ type StarknetSignature struct { func (x *StarknetSignature) Reset() { *x = StarknetSignature{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[45] + mi := &file_relayer_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2419,7 +2323,7 @@ func (x *StarknetSignature) String() string { func (*StarknetSignature) ProtoMessage() {} func (x *StarknetSignature) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[45] + mi := &file_relayer_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2432,7 +2336,7 @@ func (x *StarknetSignature) ProtoReflect() protoreflect.Message { // Deprecated: Use StarknetSignature.ProtoReflect.Descriptor instead. func (*StarknetSignature) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{45} + return file_relayer_proto_rawDescGZIP(), []int{43} } func (x *StarknetSignature) GetX() *BigInt { @@ -2460,7 +2364,7 @@ type StarknetMessageHash struct { func (x *StarknetMessageHash) Reset() { *x = StarknetMessageHash{} if protoimpl.UnsafeEnabled { - mi := &file_relayer_proto_msgTypes[46] + mi := &file_relayer_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2473,7 +2377,7 @@ func (x *StarknetMessageHash) String() string { func (*StarknetMessageHash) ProtoMessage() {} func (x *StarknetMessageHash) ProtoReflect() protoreflect.Message { - mi := &file_relayer_proto_msgTypes[46] + mi := &file_relayer_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2486,7 +2390,7 @@ func (x *StarknetMessageHash) ProtoReflect() protoreflect.Message { // Deprecated: Use StarknetMessageHash.ProtoReflect.Descriptor instead. func (*StarknetMessageHash) Descriptor() ([]byte, []int) { - return file_relayer_proto_rawDescGZIP(), []int{46} + return file_relayer_proto_rawDescGZIP(), []int{44} } func (x *StarknetMessageHash) GetHash() *BigInt { @@ -2519,7 +2423,7 @@ var file_relayer_proto_rawDesc = []byte{ 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x2b, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x73, 0x69, 0x67, - 0x6e, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x22, 0x9b, 0x01, 0x0a, 0x09, 0x52, 0x65, 0x6c, 0x61, + 0x6e, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x22, 0xbf, 0x01, 0x0a, 0x09, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x72, 0x67, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4a, 0x6f, 0x62, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x65, 0x78, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4a, 0x6f, 0x62, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x6a, @@ -2529,332 +2433,316 @@ var file_relayer_proto_rawDesc = []byte{ 0x44, 0x12, 0x10, 0x0a, 0x03, 0x6e, 0x65, 0x77, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x03, 0x6e, 0x65, 0x77, 0x12, 0x20, 0x0a, 0x0b, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x56, 0x0a, 0x0a, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x41, - 0x72, 0x67, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x74, - 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x49, 0x44, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x0c, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x49, 0x0a, - 0x18, 0x4e, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x09, 0x72, 0x65, 0x6c, - 0x61, 0x79, 0x41, 0x72, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6c, - 0x6f, 0x6f, 0x70, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x72, 0x67, 0x73, 0x52, 0x09, 0x72, - 0x65, 0x6c, 0x61, 0x79, 0x41, 0x72, 0x67, 0x73, 0x22, 0x44, 0x0a, 0x16, 0x4e, 0x65, 0x77, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x70, - 0x6c, 0x79, 0x12, 0x2a, 0x0a, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x10, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x44, 0x22, 0x7b, - 0x0a, 0x18, 0x4e, 0x65, 0x77, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x69, - 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, 0x09, 0x72, 0x65, - 0x6c, 0x61, 0x79, 0x41, 0x72, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, - 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x72, 0x67, 0x73, 0x52, 0x09, - 0x72, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x72, 0x67, 0x73, 0x12, 0x30, 0x0a, 0x0a, 0x70, 0x6c, 0x75, - 0x67, 0x69, 0x6e, 0x41, 0x72, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, - 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x41, 0x72, 0x67, 0x73, 0x52, - 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x41, 0x72, 0x67, 0x73, 0x22, 0x44, 0x0a, 0x16, 0x4e, - 0x65, 0x77, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, - 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x2a, 0x0a, 0x10, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x6e, 0x50, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x10, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, - 0x44, 0x22, 0x7c, 0x0a, 0x19, 0x4e, 0x65, 0x77, 0x4d, 0x65, 0x72, 0x63, 0x75, 0x72, 0x79, 0x50, - 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, - 0x0a, 0x09, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x72, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x0f, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x72, - 0x67, 0x73, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x72, 0x67, 0x73, 0x12, 0x30, 0x0a, - 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x41, 0x72, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x41, - 0x72, 0x67, 0x73, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x41, 0x72, 0x67, 0x73, 0x22, - 0x47, 0x0a, 0x17, 0x4e, 0x65, 0x77, 0x4d, 0x65, 0x72, 0x63, 0x75, 0x72, 0x79, 0x50, 0x72, 0x6f, - 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x2c, 0x0a, 0x11, 0x6d, 0x65, - 0x72, 0x63, 0x75, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x44, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x11, 0x6d, 0x65, 0x72, 0x63, 0x75, 0x72, 0x79, 0x50, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x44, 0x22, 0x17, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x43, - 0x68, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x22, 0x3e, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x27, 0x0a, 0x05, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x43, - 0x68, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x05, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x22, 0x4f, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, - 0x12, 0x18, 0x0a, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x22, 0x55, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, - 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 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, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x70, 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x7d, 0x0a, 0x15, 0x4c, 0x69, 0x73, - 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, 0x70, - 0x6c, 0x79, 0x12, 0x26, 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x10, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, - 0x74, 0x61, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x12, 0x26, 0x0a, 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, - 0x61, 0x67, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x68, 0x0a, 0x0a, 0x4e, 0x6f, 0x64, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, - 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x44, - 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, - 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x14, 0x0a, 0x05, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, - 0x74, 0x65, 0x22, 0x82, 0x01, 0x0a, 0x12, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, - 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x0e, 0x0a, - 0x02, 0x74, 0x6f, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x74, 0x6f, 0x12, 0x24, 0x0a, - 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, - 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x42, 0x69, 0x67, 0x49, 0x6e, 0x74, 0x52, 0x06, 0x61, 0x6d, 0x6f, - 0x75, 0x6e, 0x74, 0x12, 0x22, 0x0a, 0x0c, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x68, - 0x65, 0x63, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x62, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x22, 0x51, 0x0a, 0x0e, 0x4f, 0x62, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x0f, 0x72, 0x65, 0x70, - 0x6f, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, - 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x72, 0x65, 0x70, 0x6f, 0x72, - 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x32, 0x0a, 0x0c, 0x4f, 0x62, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x22, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, - 0x2e, 0x42, 0x69, 0x67, 0x49, 0x6e, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xa6, - 0x02, 0x0a, 0x0e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x69, 0x67, 0x6e, 0x65, - 0x72, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x07, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, - 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, - 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, - 0x74, 0x74, 0x65, 0x72, 0x73, 0x12, 0x0c, 0x0a, 0x01, 0x46, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x01, 0x46, 0x12, 0x24, 0x0a, 0x0d, 0x6f, 0x6e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x6f, 0x6e, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x34, 0x0a, 0x15, 0x6f, 0x66, 0x66, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x15, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x26, 0x0a, 0x0e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x53, 0x0a, 0x13, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, - 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x43, 0x6f, - 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, 0x63, 0x6f, - 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x37, 0x0a, 0x11, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6c, - 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x22, 0x1b, 0x0a, 0x19, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x22, 0x49, 0x0a, 0x17, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, - 0x73, 0x74, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x2e, 0x0a, - 0x12, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x50, 0x72, 0x65, - 0x66, 0x69, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x22, 0x1c, 0x0a, - 0x1a, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x66, 0x0a, 0x18, 0x4c, - 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x54, 0x79, 0x70, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70, 0x72, 0x6f, + 0x76, 0x69, 0x64, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x22, 0x56, 0x0a, 0x0a, 0x50, 0x6c, 0x75, + 0x67, 0x69, 0x6e, 0x41, 0x72, 0x67, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x49, 0x44, 0x12, 0x22, 0x0a, + 0x0c, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x22, 0x7b, 0x0a, 0x18, 0x4e, 0x65, 0x77, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x50, 0x72, + 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x2d, 0x0a, + 0x09, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x72, 0x67, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0f, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x72, 0x67, + 0x73, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x72, 0x67, 0x73, 0x12, 0x30, 0x0a, 0x0a, + 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x41, 0x72, 0x67, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x10, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x41, 0x72, + 0x67, 0x73, 0x52, 0x0a, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x41, 0x72, 0x67, 0x73, 0x22, 0x44, + 0x0a, 0x16, 0x4e, 0x65, 0x77, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x2a, 0x0a, 0x10, 0x70, 0x6c, 0x75, 0x67, + 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x10, 0x70, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, + 0x65, 0x72, 0x49, 0x44, 0x22, 0x49, 0x0a, 0x18, 0x4e, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x2d, 0x0a, 0x09, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x72, 0x67, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x52, 0x65, 0x6c, 0x61, 0x79, + 0x41, 0x72, 0x67, 0x73, 0x52, 0x09, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x41, 0x72, 0x67, 0x73, 0x22, + 0x44, 0x0a, 0x16, 0x4e, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x76, + 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x2a, 0x0a, 0x10, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x10, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x49, 0x44, 0x22, 0x17, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x69, + 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x3e, + 0x0a, 0x13, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x27, 0x0a, 0x05, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x43, 0x68, 0x61, 0x69, + 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x05, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x22, 0x4f, + 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0e, 0x0a, + 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, + 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, + 0x55, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x70, 0x61, + 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x01, 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, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x70, 0x61, 0x67, + 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x7d, 0x0a, 0x15, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, + 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, + 0x26, 0x0a, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, + 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x05, 0x6e, 0x6f, 0x64, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x12, 0x26, 0x0a, + 0x0f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x6e, 0x65, 0x78, 0x74, 0x50, 0x61, 0x67, 0x65, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x22, 0x68, 0x0a, 0x0a, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x44, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x49, 0x44, 0x12, 0x12, 0x0a, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, + 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, + 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x22, + 0x82, 0x01, 0x0a, 0x12, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x66, 0x72, 0x6f, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x74, 0x6f, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x74, 0x6f, 0x12, 0x24, 0x0a, 0x06, 0x61, 0x6d, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6c, 0x6f, 0x6f, + 0x70, 0x2e, 0x42, 0x69, 0x67, 0x49, 0x6e, 0x74, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, + 0x12, 0x22, 0x0a, 0x0c, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x43, 0x68, 0x65, 0x63, 0x6b, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x43, + 0x68, 0x65, 0x63, 0x6b, 0x22, 0x51, 0x0a, 0x0e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3f, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x15, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x32, 0x0a, 0x0c, 0x4f, 0x62, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x22, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x42, 0x69, + 0x67, 0x49, 0x6e, 0x74, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xa6, 0x02, 0x0a, 0x0e, + 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x22, + 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x43, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x73, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x07, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x73, 0x12, 0x22, + 0x0a, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x74, 0x65, + 0x72, 0x73, 0x12, 0x0c, 0x0a, 0x01, 0x46, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x01, 0x46, + 0x12, 0x24, 0x0a, 0x0d, 0x6f, 0x6e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x6f, 0x6e, 0x63, 0x68, 0x61, 0x69, 0x6e, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x34, 0x0a, 0x15, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, + 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x15, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0e, + 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x6f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x22, 0x53, 0x0a, 0x13, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, + 0x67, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3c, 0x0a, 0x0e, 0x63, + 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, + 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x72, + 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x37, 0x0a, 0x11, 0x43, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x22, + 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x22, 0x1b, 0x0a, 0x19, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, + 0x73, 0x74, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, + 0x49, 0x0a, 0x17, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x50, + 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x2e, 0x0a, 0x12, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x12, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, + 0x67, 0x65, 0x73, 0x74, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x22, 0x1c, 0x0a, 0x1a, 0x4c, 0x61, + 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x66, 0x0a, 0x18, 0x4c, 0x61, 0x74, 0x65, + 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, + 0x65, 0x70, 0x6c, 0x79, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, + 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0e, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x22, 0x0a, 0x0c, + 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, + 0x22, 0x3d, 0x0a, 0x13, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x0e, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, - 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, - 0x65, 0x73, 0x74, 0x22, 0x3d, 0x0a, 0x13, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x0e, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6e, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x22, 0x51, 0x0a, 0x11, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x3c, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x72, - 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x22, 0x1a, 0x0a, 0x18, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x22, 0x3a, 0x0a, 0x16, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x61, 0x0a, - 0x0f, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, - 0x67, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, - 0x75, 0x6e, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, - 0x22, 0x6e, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, - 0x74, 0x12, 0x3f, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6c, 0x6f, 0x6f, - 0x70, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x52, 0x0f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x78, 0x74, 0x72, 0x61, 0x48, 0x61, 0x73, 0x68, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x65, 0x78, 0x74, 0x72, 0x61, 0x48, 0x61, 0x73, 0x68, - 0x22, 0x52, 0x0a, 0x1a, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x4f, 0x6e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1c, - 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x73, 0x69, 0x67, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x73, 0x69, - 0x67, 0x6e, 0x65, 0x72, 0x22, 0xc8, 0x01, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x0d, 0x72, 0x65, 0x70, 0x6f, - 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6e, - 0x74, 0x65, 0x78, 0x74, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x62, 0x0a, 0x1b, 0x61, - 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x4f, 0x6e, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x20, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, - 0x65, 0x64, 0x4f, 0x6e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x52, 0x1b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x4f, 0x6e, - 0x63, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, - 0x0f, 0x0a, 0x0d, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, - 0x22, 0x23, 0x0a, 0x21, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, - 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x41, 0x6e, 0x64, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x5b, 0x0a, 0x1f, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x41, 0x6e, 0x64, 0x45, 0x70, - 0x6f, 0x63, 0x68, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, - 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x65, 0x70, 0x6f, - 0x63, 0x68, 0x22, 0x14, 0x0a, 0x12, 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x2c, 0x0a, 0x10, 0x46, 0x72, 0x6f, 0x6d, - 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x18, 0x0a, 0x07, - 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x41, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x1f, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, - 0x70, 0x6c, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xa3, 0x01, 0x0a, 0x11, 0x48, 0x65, 0x61, 0x6c, - 0x74, 0x68, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x4d, 0x0a, - 0x0c, 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, - 0x68, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x2e, 0x48, 0x65, 0x61, - 0x6c, 0x74, 0x68, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, - 0x68, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x1a, 0x3f, 0x0a, 0x11, - 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x45, 0x6e, 0x74, 0x72, - 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, - 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3a, 0x0a, - 0x06, 0x42, 0x69, 0x67, 0x49, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x65, 0x67, 0x61, 0x74, - 0x69, 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6e, 0x65, 0x67, 0x61, 0x74, - 0x69, 0x76, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x4b, 0x0a, 0x11, 0x53, 0x74, 0x61, - 0x72, 0x6b, 0x6e, 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1a, - 0x0a, 0x01, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, - 0x2e, 0x42, 0x69, 0x67, 0x49, 0x6e, 0x74, 0x52, 0x01, 0x78, 0x12, 0x1a, 0x0a, 0x01, 0x79, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x42, 0x69, 0x67, - 0x49, 0x6e, 0x74, 0x52, 0x01, 0x79, 0x22, 0x37, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x72, 0x6b, 0x6e, - 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x61, 0x73, 0x68, 0x12, 0x20, 0x0a, - 0x04, 0x68, 0x61, 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6c, 0x6f, - 0x6f, 0x70, 0x2e, 0x42, 0x69, 0x67, 0x49, 0x6e, 0x74, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x32, - 0x4f, 0x0a, 0x0d, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x12, 0x3e, 0x0a, 0x0a, 0x4e, 0x65, 0x77, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x17, - 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4e, 0x65, 0x77, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x65, 0x72, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4e, - 0x65, 0x77, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, - 0x32, 0x73, 0x0a, 0x08, 0x4b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x39, 0x0a, 0x08, - 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x1a, 0x13, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, - 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x2c, 0x0a, 0x04, 0x53, 0x69, 0x67, 0x6e, 0x12, - 0x11, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x0f, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65, - 0x70, 0x6c, 0x79, 0x22, 0x00, 0x32, 0xe9, 0x03, 0x0a, 0x07, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x65, - 0x72, 0x12, 0x53, 0x0a, 0x11, 0x4e, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, - 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x1e, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4e, 0x65, - 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4e, 0x65, - 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, - 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x11, 0x4e, 0x65, 0x77, 0x4d, 0x65, 0x64, - 0x69, 0x61, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x1e, 0x2e, 0x6c, 0x6f, - 0x6f, 0x70, 0x2e, 0x4e, 0x65, 0x77, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x6e, 0x50, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6c, 0x6f, - 0x6f, 0x70, 0x2e, 0x4e, 0x65, 0x77, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x6e, 0x50, 0x72, 0x6f, 0x76, - 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x12, 0x4e, - 0x65, 0x77, 0x4d, 0x65, 0x72, 0x63, 0x75, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, - 0x72, 0x12, 0x1f, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4e, 0x65, 0x77, 0x4d, 0x65, 0x72, 0x63, - 0x75, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4e, 0x65, 0x77, 0x4d, 0x65, 0x72, - 0x63, 0x75, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x70, 0x6c, - 0x79, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1b, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x47, 0x65, 0x74, - 0x43, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, - 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, - 0x50, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x65, 0x73, 0x12, 0x1d, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, - 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, - 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, - 0x00, 0x12, 0x3e, 0x0a, 0x08, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x12, 0x18, 0x2e, - 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 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, - 0x00, 0x32, 0x43, 0x0a, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x12, - 0x35, 0x0a, 0x07, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x12, 0x14, 0x2e, 0x6c, 0x6f, 0x6f, - 0x70, 0x2e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x12, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x52, - 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x32, 0xb6, 0x01, 0x0a, 0x16, 0x4f, 0x66, 0x66, 0x63, 0x68, - 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x65, - 0x72, 0x12, 0x44, 0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x12, 0x19, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, - 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x6c, - 0x6f, 0x6f, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, - 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x12, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x1f, 0x2e, - 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, - 0x74, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, - 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, - 0x73, 0x74, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x32, - 0x8d, 0x02, 0x0a, 0x15, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x66, - 0x69, 0x67, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x72, 0x12, 0x59, 0x0a, 0x13, 0x4c, 0x61, 0x74, + 0x0e, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x64, 0x49, 0x6e, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x22, + 0x51, 0x0a, 0x11, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, + 0x65, 0x70, 0x6c, 0x79, 0x12, 0x3c, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x6c, + 0x6f, 0x6f, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x22, 0x1a, 0x0a, 0x18, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x3a, + 0x0a, 0x16, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x61, 0x0a, 0x0f, 0x52, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x22, 0x0a, + 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, + 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x12, 0x14, 0x0a, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x72, 0x6f, 0x75, 0x6e, 0x64, 0x22, 0x6e, 0x0a, + 0x0d, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3f, + 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x52, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0f, + 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, + 0x1c, 0x0a, 0x09, 0x65, 0x78, 0x74, 0x72, 0x61, 0x48, 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0c, 0x52, 0x09, 0x65, 0x78, 0x74, 0x72, 0x61, 0x48, 0x61, 0x73, 0x68, 0x22, 0x52, 0x0a, + 0x1a, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x4f, 0x6e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x73, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, + 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x69, 0x67, + 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x73, 0x69, 0x67, 0x6e, 0x65, + 0x72, 0x22, 0xc8, 0x01, 0x0a, 0x0f, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x0d, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x6c, + 0x6f, 0x6f, 0x70, 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, + 0x74, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, + 0x12, 0x16, 0x0a, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x06, 0x72, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x62, 0x0a, 0x1b, 0x61, 0x74, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x4f, 0x6e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, + 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x4f, + 0x6e, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, + 0x1b, 0x61, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x4f, 0x6e, 0x63, 0x68, 0x61, + 0x69, 0x6e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0x0f, 0x0a, 0x0d, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x23, 0x0a, + 0x21, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, + 0x65, 0x73, 0x74, 0x41, 0x6e, 0x64, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x22, 0x5b, 0x0a, 0x1f, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x41, 0x6e, 0x64, 0x45, 0x70, 0x6f, 0x63, 0x68, + 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x63, 0x6f, 0x6e, + 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x70, 0x6f, + 0x63, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x65, 0x70, 0x6f, 0x63, 0x68, 0x22, + 0x14, 0x0a, 0x12, 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x2c, 0x0a, 0x10, 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x22, 0x1f, 0x0a, 0x09, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x79, + 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xa3, 0x01, 0x0a, 0x11, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, + 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x4d, 0x0a, 0x0c, 0x68, 0x65, + 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x29, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, + 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, + 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0c, 0x68, 0x65, 0x61, + 0x6c, 0x74, 0x68, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x1a, 0x3f, 0x0a, 0x11, 0x48, 0x65, 0x61, + 0x6c, 0x74, 0x68, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, + 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x3a, 0x0a, 0x06, 0x42, 0x69, + 0x67, 0x49, 0x6e, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, + 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x4b, 0x0a, 0x11, 0x53, 0x74, 0x61, 0x72, 0x6b, 0x6e, + 0x65, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x1a, 0x0a, 0x01, 0x78, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x42, 0x69, + 0x67, 0x49, 0x6e, 0x74, 0x52, 0x01, 0x78, 0x12, 0x1a, 0x0a, 0x01, 0x79, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x42, 0x69, 0x67, 0x49, 0x6e, 0x74, + 0x52, 0x01, 0x79, 0x22, 0x37, 0x0a, 0x13, 0x53, 0x74, 0x61, 0x72, 0x6b, 0x6e, 0x65, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x61, 0x73, 0x68, 0x12, 0x20, 0x0a, 0x04, 0x68, 0x61, + 0x73, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, + 0x42, 0x69, 0x67, 0x49, 0x6e, 0x74, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x32, 0x4f, 0x0a, 0x0d, + 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x3e, 0x0a, + 0x0a, 0x4e, 0x65, 0x77, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x17, 0x2e, 0x6c, 0x6f, + 0x6f, 0x70, 0x2e, 0x4e, 0x65, 0x77, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x15, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4e, 0x65, 0x77, 0x52, + 0x65, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x32, 0x73, 0x0a, + 0x08, 0x4b, 0x65, 0x79, 0x73, 0x74, 0x6f, 0x72, 0x65, 0x12, 0x39, 0x0a, 0x08, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x13, 0x2e, + 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x70, + 0x6c, 0x79, 0x22, 0x00, 0x12, 0x2c, 0x0a, 0x04, 0x53, 0x69, 0x67, 0x6e, 0x12, 0x11, 0x2e, 0x6c, + 0x6f, 0x6f, 0x70, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x0f, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x52, 0x65, 0x70, 0x6c, 0x79, + 0x22, 0x00, 0x32, 0x91, 0x03, 0x0a, 0x07, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x12, 0x53, + 0x0a, 0x11, 0x4e, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x76, 0x69, + 0x64, 0x65, 0x72, 0x12, 0x1e, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4e, 0x65, 0x77, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4e, 0x65, 0x77, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x52, 0x65, 0x70, 0x6c, + 0x79, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x11, 0x4e, 0x65, 0x77, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, + 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, 0x72, 0x12, 0x1e, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, + 0x4e, 0x65, 0x77, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, + 0x4e, 0x65, 0x77, 0x50, 0x6c, 0x75, 0x67, 0x69, 0x6e, 0x50, 0x72, 0x6f, 0x76, 0x69, 0x64, 0x65, + 0x72, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x4a, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x43, + 0x68, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1b, 0x2e, 0x6c, 0x6f, 0x6f, + 0x70, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x19, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x47, + 0x65, 0x74, 0x43, 0x68, 0x61, 0x69, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x65, 0x70, + 0x6c, 0x79, 0x22, 0x00, 0x12, 0x50, 0x0a, 0x10, 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x12, 0x1d, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, + 0x4c, 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4c, + 0x69, 0x73, 0x74, 0x4e, 0x6f, 0x64, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x65, 0x73, 0x52, + 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x3e, 0x0a, 0x08, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x12, 0x18, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 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, 0x00, 0x32, 0x43, 0x0a, 0x0a, 0x44, 0x61, 0x74, 0x61, 0x53, 0x6f, + 0x75, 0x72, 0x63, 0x65, 0x12, 0x35, 0x0a, 0x07, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x12, + 0x14, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4f, 0x62, 0x73, 0x65, 0x72, 0x76, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4f, 0x62, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x32, 0xb6, 0x01, 0x0a, 0x16, + 0x4f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, + 0x67, 0x65, 0x73, 0x74, 0x65, 0x72, 0x12, 0x44, 0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x12, 0x19, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x17, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, + 0x69, 0x67, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x56, 0x0a, 0x12, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x50, 0x72, 0x65, 0x66, + 0x69, 0x78, 0x12, 0x1f, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x52, 0x65, 0x70, + 0x6c, 0x79, 0x22, 0x00, 0x32, 0x8d, 0x02, 0x0a, 0x15, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, + 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x54, 0x72, 0x61, 0x63, 0x6b, 0x65, 0x72, 0x12, 0x59, + 0x0a, 0x13, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x12, 0x20, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, - 0x12, 0x20, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x70, - 0x6c, 0x79, 0x22, 0x00, 0x12, 0x44, 0x0a, 0x0c, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x12, 0x19, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4c, 0x61, 0x74, 0x65, - 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x17, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x53, 0x0a, 0x11, 0x4c, 0x61, - 0x74, 0x65, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, - 0x1e, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1c, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x32, - 0x82, 0x02, 0x0a, 0x13, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x08, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x6d, 0x69, 0x74, 0x12, 0x15, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x13, 0x2e, 0x6c, 0x6f, 0x6f, - 0x70, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, - 0x00, 0x12, 0x6e, 0x0a, 0x1a, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x41, 0x6e, 0x64, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x12, - 0x27, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x41, 0x6e, 0x64, 0x45, 0x70, 0x6f, 0x63, - 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, - 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, - 0x73, 0x74, 0x41, 0x6e, 0x64, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, - 0x00, 0x12, 0x41, 0x0a, 0x0b, 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x18, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x16, 0x2e, 0x6c, 0x6f, 0x6f, - 0x70, 0x2e, 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x70, - 0x6c, 0x79, 0x22, 0x00, 0x32, 0xf5, 0x01, 0x0a, 0x07, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x12, 0x31, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, - 0x1a, 0x0f, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x70, 0x6c, - 0x79, 0x22, 0x00, 0x12, 0x39, 0x0a, 0x05, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x12, 0x16, 0x2e, 0x67, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4c, + 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x44, 0x0a, 0x0c, 0x4c, 0x61, 0x74, + 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x19, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, + 0x2e, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4c, 0x61, 0x74, 0x65, + 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, + 0x53, 0x0a, 0x11, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x12, 0x1e, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4c, 0x61, 0x74, 0x65, + 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1c, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4c, 0x61, 0x74, 0x65, + 0x73, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x70, + 0x6c, 0x79, 0x22, 0x00, 0x32, 0x82, 0x02, 0x0a, 0x13, 0x43, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, + 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x08, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x12, 0x15, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, + 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x13, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x6d, 0x69, 0x74, 0x52, + 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x6e, 0x0a, 0x1a, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x41, 0x6e, 0x64, 0x45, + 0x70, 0x6f, 0x63, 0x68, 0x12, 0x27, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4c, 0x61, 0x74, 0x65, + 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x41, 0x6e, + 0x64, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, + 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x66, 0x69, + 0x67, 0x44, 0x69, 0x67, 0x65, 0x73, 0x74, 0x41, 0x6e, 0x64, 0x45, 0x70, 0x6f, 0x63, 0x68, 0x52, + 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x0b, 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x18, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x46, 0x72, 0x6f, + 0x6d, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x16, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x32, 0xf5, 0x01, 0x0a, 0x07, 0x53, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x31, 0x0a, 0x04, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x0f, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x4e, 0x61, 0x6d, + 0x65, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x12, 0x39, 0x0a, 0x05, 0x43, 0x6c, 0x6f, 0x73, + 0x65, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x22, 0x00, 0x12, 0x39, 0x0a, 0x05, 0x52, 0x65, 0x61, 0x64, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x39, - 0x0a, 0x05, 0x52, 0x65, 0x61, 0x64, 0x79, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, - 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x41, 0x0a, 0x0c, 0x48, 0x65, 0x61, - 0x6c, 0x74, 0x68, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x16, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, - 0x79, 0x1a, 0x17, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, - 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x00, 0x42, 0x42, 0x5a, 0x40, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x73, 0x6d, 0x61, 0x72, 0x74, - 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x6b, 0x69, 0x74, 0x2f, 0x63, 0x68, 0x61, 0x69, - 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x79, 0x2f, 0x70, 0x6b, 0x67, 0x2f, - 0x6c, 0x6f, 0x6f, 0x70, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x62, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x22, 0x00, 0x12, 0x41, + 0x0a, 0x0c, 0x48, 0x65, 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x16, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x1a, 0x17, 0x2e, 0x6c, 0x6f, 0x6f, 0x70, 0x2e, 0x48, 0x65, + 0x61, 0x6c, 0x74, 0x68, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x22, + 0x00, 0x42, 0x42, 0x5a, 0x40, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, + 0x73, 0x6d, 0x61, 0x72, 0x74, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x61, 0x63, 0x74, 0x6b, 0x69, 0x74, + 0x2f, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x6c, 0x69, 0x6e, 0x6b, 0x2d, 0x72, 0x65, 0x6c, 0x61, 0x79, + 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x6c, 0x6f, 0x6f, 0x70, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2869,7 +2757,7 @@ func file_relayer_proto_rawDescGZIP() []byte { return file_relayer_proto_rawDescData } -var file_relayer_proto_msgTypes = make([]protoimpl.MessageInfo, 48) +var file_relayer_proto_msgTypes = make([]protoimpl.MessageInfo, 46) var file_relayer_proto_goTypes = []interface{}{ (*NewRelayerRequest)(nil), // 0: loop.NewRelayerRequest (*NewRelayerReply)(nil), // 1: loop.NewRelayerReply @@ -2878,118 +2766,112 @@ var file_relayer_proto_goTypes = []interface{}{ (*SignReply)(nil), // 4: loop.SignReply (*RelayArgs)(nil), // 5: loop.RelayArgs (*PluginArgs)(nil), // 6: loop.PluginArgs - (*NewConfigProviderRequest)(nil), // 7: loop.NewConfigProviderRequest - (*NewConfigProviderReply)(nil), // 8: loop.NewConfigProviderReply - (*NewMedianProviderRequest)(nil), // 9: loop.NewMedianProviderRequest - (*NewMedianProviderReply)(nil), // 10: loop.NewMedianProviderReply - (*NewMercuryProviderRequest)(nil), // 11: loop.NewMercuryProviderRequest - (*NewMercuryProviderReply)(nil), // 12: loop.NewMercuryProviderReply - (*GetChainStatusRequest)(nil), // 13: loop.GetChainStatusRequest - (*GetChainStatusReply)(nil), // 14: loop.GetChainStatusReply - (*ChainStatus)(nil), // 15: loop.ChainStatus - (*ListNodeStatusesRequest)(nil), // 16: loop.ListNodeStatusesRequest - (*ListNodeStatusesReply)(nil), // 17: loop.ListNodeStatusesReply - (*NodeStatus)(nil), // 18: loop.NodeStatus - (*TransactionRequest)(nil), // 19: loop.TransactionRequest - (*ObserveRequest)(nil), // 20: loop.ObserveRequest - (*ObserveReply)(nil), // 21: loop.ObserveReply - (*ContractConfig)(nil), // 22: loop.ContractConfig - (*ConfigDigestRequest)(nil), // 23: loop.ConfigDigestRequest - (*ConfigDigestReply)(nil), // 24: loop.ConfigDigestReply - (*ConfigDigestPrefixRequest)(nil), // 25: loop.ConfigDigestPrefixRequest - (*ConfigDigestPrefixReply)(nil), // 26: loop.ConfigDigestPrefixReply - (*LatestConfigDetailsRequest)(nil), // 27: loop.LatestConfigDetailsRequest - (*LatestConfigDetailsReply)(nil), // 28: loop.LatestConfigDetailsReply - (*LatestConfigRequest)(nil), // 29: loop.LatestConfigRequest - (*LatestConfigReply)(nil), // 30: loop.LatestConfigReply - (*LatestBlockHeightRequest)(nil), // 31: loop.LatestBlockHeightRequest - (*LatestBlockHeightReply)(nil), // 32: loop.LatestBlockHeightReply - (*ReportTimestamp)(nil), // 33: loop.ReportTimestamp - (*ReportContext)(nil), // 34: loop.ReportContext - (*AttributedOnchainSignature)(nil), // 35: loop.AttributedOnchainSignature - (*TransmitRequest)(nil), // 36: loop.TransmitRequest - (*TransmitReply)(nil), // 37: loop.TransmitReply - (*LatestConfigDigestAndEpochRequest)(nil), // 38: loop.LatestConfigDigestAndEpochRequest - (*LatestConfigDigestAndEpochReply)(nil), // 39: loop.LatestConfigDigestAndEpochReply - (*FromAccountRequest)(nil), // 40: loop.FromAccountRequest - (*FromAccountReply)(nil), // 41: loop.FromAccountReply - (*NameReply)(nil), // 42: loop.NameReply - (*HealthReportReply)(nil), // 43: loop.HealthReportReply - (*BigInt)(nil), // 44: loop.BigInt - (*StarknetSignature)(nil), // 45: loop.StarknetSignature - (*StarknetMessageHash)(nil), // 46: loop.StarknetMessageHash - nil, // 47: loop.HealthReportReply.HealthReportEntry - (*emptypb.Empty)(nil), // 48: google.protobuf.Empty + (*NewPluginProviderRequest)(nil), // 7: loop.NewPluginProviderRequest + (*NewPluginProviderReply)(nil), // 8: loop.NewPluginProviderReply + (*NewConfigProviderRequest)(nil), // 9: loop.NewConfigProviderRequest + (*NewConfigProviderReply)(nil), // 10: loop.NewConfigProviderReply + (*GetChainStatusRequest)(nil), // 11: loop.GetChainStatusRequest + (*GetChainStatusReply)(nil), // 12: loop.GetChainStatusReply + (*ChainStatus)(nil), // 13: loop.ChainStatus + (*ListNodeStatusesRequest)(nil), // 14: loop.ListNodeStatusesRequest + (*ListNodeStatusesReply)(nil), // 15: loop.ListNodeStatusesReply + (*NodeStatus)(nil), // 16: loop.NodeStatus + (*TransactionRequest)(nil), // 17: loop.TransactionRequest + (*ObserveRequest)(nil), // 18: loop.ObserveRequest + (*ObserveReply)(nil), // 19: loop.ObserveReply + (*ContractConfig)(nil), // 20: loop.ContractConfig + (*ConfigDigestRequest)(nil), // 21: loop.ConfigDigestRequest + (*ConfigDigestReply)(nil), // 22: loop.ConfigDigestReply + (*ConfigDigestPrefixRequest)(nil), // 23: loop.ConfigDigestPrefixRequest + (*ConfigDigestPrefixReply)(nil), // 24: loop.ConfigDigestPrefixReply + (*LatestConfigDetailsRequest)(nil), // 25: loop.LatestConfigDetailsRequest + (*LatestConfigDetailsReply)(nil), // 26: loop.LatestConfigDetailsReply + (*LatestConfigRequest)(nil), // 27: loop.LatestConfigRequest + (*LatestConfigReply)(nil), // 28: loop.LatestConfigReply + (*LatestBlockHeightRequest)(nil), // 29: loop.LatestBlockHeightRequest + (*LatestBlockHeightReply)(nil), // 30: loop.LatestBlockHeightReply + (*ReportTimestamp)(nil), // 31: loop.ReportTimestamp + (*ReportContext)(nil), // 32: loop.ReportContext + (*AttributedOnchainSignature)(nil), // 33: loop.AttributedOnchainSignature + (*TransmitRequest)(nil), // 34: loop.TransmitRequest + (*TransmitReply)(nil), // 35: loop.TransmitReply + (*LatestConfigDigestAndEpochRequest)(nil), // 36: loop.LatestConfigDigestAndEpochRequest + (*LatestConfigDigestAndEpochReply)(nil), // 37: loop.LatestConfigDigestAndEpochReply + (*FromAccountRequest)(nil), // 38: loop.FromAccountRequest + (*FromAccountReply)(nil), // 39: loop.FromAccountReply + (*NameReply)(nil), // 40: loop.NameReply + (*HealthReportReply)(nil), // 41: loop.HealthReportReply + (*BigInt)(nil), // 42: loop.BigInt + (*StarknetSignature)(nil), // 43: loop.StarknetSignature + (*StarknetMessageHash)(nil), // 44: loop.StarknetMessageHash + nil, // 45: loop.HealthReportReply.HealthReportEntry + (*emptypb.Empty)(nil), // 46: google.protobuf.Empty } var file_relayer_proto_depIdxs = []int32{ - 5, // 0: loop.NewConfigProviderRequest.relayArgs:type_name -> loop.RelayArgs - 5, // 1: loop.NewMedianProviderRequest.relayArgs:type_name -> loop.RelayArgs - 6, // 2: loop.NewMedianProviderRequest.pluginArgs:type_name -> loop.PluginArgs - 5, // 3: loop.NewMercuryProviderRequest.relayArgs:type_name -> loop.RelayArgs - 6, // 4: loop.NewMercuryProviderRequest.pluginArgs:type_name -> loop.PluginArgs - 15, // 5: loop.GetChainStatusReply.chain:type_name -> loop.ChainStatus - 18, // 6: loop.ListNodeStatusesReply.nodes:type_name -> loop.NodeStatus - 44, // 7: loop.TransactionRequest.amount:type_name -> loop.BigInt - 33, // 8: loop.ObserveRequest.reportTimestamp:type_name -> loop.ReportTimestamp - 44, // 9: loop.ObserveReply.value:type_name -> loop.BigInt - 22, // 10: loop.ConfigDigestRequest.contractConfig:type_name -> loop.ContractConfig - 22, // 11: loop.LatestConfigReply.contractConfig:type_name -> loop.ContractConfig - 33, // 12: loop.ReportContext.reportTimestamp:type_name -> loop.ReportTimestamp - 34, // 13: loop.TransmitRequest.reportContext:type_name -> loop.ReportContext - 35, // 14: loop.TransmitRequest.attributedOnchainSignatures:type_name -> loop.AttributedOnchainSignature - 47, // 15: loop.HealthReportReply.healthReport:type_name -> loop.HealthReportReply.HealthReportEntry - 44, // 16: loop.StarknetSignature.x:type_name -> loop.BigInt - 44, // 17: loop.StarknetSignature.y:type_name -> loop.BigInt - 44, // 18: loop.StarknetMessageHash.hash:type_name -> loop.BigInt - 0, // 19: loop.PluginRelayer.NewRelayer:input_type -> loop.NewRelayerRequest - 48, // 20: loop.Keystore.Accounts:input_type -> google.protobuf.Empty - 3, // 21: loop.Keystore.Sign:input_type -> loop.SignRequest - 7, // 22: loop.Relayer.NewConfigProvider:input_type -> loop.NewConfigProviderRequest - 9, // 23: loop.Relayer.NewMedianProvider:input_type -> loop.NewMedianProviderRequest - 11, // 24: loop.Relayer.NewMercuryProvider:input_type -> loop.NewMercuryProviderRequest - 13, // 25: loop.Relayer.GetChainStatus:input_type -> loop.GetChainStatusRequest - 16, // 26: loop.Relayer.ListNodeStatuses:input_type -> loop.ListNodeStatusesRequest - 19, // 27: loop.Relayer.Transact:input_type -> loop.TransactionRequest - 20, // 28: loop.DataSource.Observe:input_type -> loop.ObserveRequest - 23, // 29: loop.OffchainConfigDigester.ConfigDigest:input_type -> loop.ConfigDigestRequest - 25, // 30: loop.OffchainConfigDigester.ConfigDigestPrefix:input_type -> loop.ConfigDigestPrefixRequest - 27, // 31: loop.ContractConfigTracker.LatestConfigDetails:input_type -> loop.LatestConfigDetailsRequest - 29, // 32: loop.ContractConfigTracker.LatestConfig:input_type -> loop.LatestConfigRequest - 31, // 33: loop.ContractConfigTracker.LatestBlockHeight:input_type -> loop.LatestBlockHeightRequest - 36, // 34: loop.ContractTransmitter.Transmit:input_type -> loop.TransmitRequest - 38, // 35: loop.ContractTransmitter.LatestConfigDigestAndEpoch:input_type -> loop.LatestConfigDigestAndEpochRequest - 40, // 36: loop.ContractTransmitter.FromAccount:input_type -> loop.FromAccountRequest - 48, // 37: loop.Service.Name:input_type -> google.protobuf.Empty - 48, // 38: loop.Service.Close:input_type -> google.protobuf.Empty - 48, // 39: loop.Service.Ready:input_type -> google.protobuf.Empty - 48, // 40: loop.Service.HealthReport:input_type -> google.protobuf.Empty - 1, // 41: loop.PluginRelayer.NewRelayer:output_type -> loop.NewRelayerReply - 2, // 42: loop.Keystore.Accounts:output_type -> loop.AccountsReply - 4, // 43: loop.Keystore.Sign:output_type -> loop.SignReply - 8, // 44: loop.Relayer.NewConfigProvider:output_type -> loop.NewConfigProviderReply - 10, // 45: loop.Relayer.NewMedianProvider:output_type -> loop.NewMedianProviderReply - 12, // 46: loop.Relayer.NewMercuryProvider:output_type -> loop.NewMercuryProviderReply - 14, // 47: loop.Relayer.GetChainStatus:output_type -> loop.GetChainStatusReply - 17, // 48: loop.Relayer.ListNodeStatuses:output_type -> loop.ListNodeStatusesReply - 48, // 49: loop.Relayer.Transact:output_type -> google.protobuf.Empty - 21, // 50: loop.DataSource.Observe:output_type -> loop.ObserveReply - 24, // 51: loop.OffchainConfigDigester.ConfigDigest:output_type -> loop.ConfigDigestReply - 26, // 52: loop.OffchainConfigDigester.ConfigDigestPrefix:output_type -> loop.ConfigDigestPrefixReply - 28, // 53: loop.ContractConfigTracker.LatestConfigDetails:output_type -> loop.LatestConfigDetailsReply - 30, // 54: loop.ContractConfigTracker.LatestConfig:output_type -> loop.LatestConfigReply - 32, // 55: loop.ContractConfigTracker.LatestBlockHeight:output_type -> loop.LatestBlockHeightReply - 37, // 56: loop.ContractTransmitter.Transmit:output_type -> loop.TransmitReply - 39, // 57: loop.ContractTransmitter.LatestConfigDigestAndEpoch:output_type -> loop.LatestConfigDigestAndEpochReply - 41, // 58: loop.ContractTransmitter.FromAccount:output_type -> loop.FromAccountReply - 42, // 59: loop.Service.Name:output_type -> loop.NameReply - 48, // 60: loop.Service.Close:output_type -> google.protobuf.Empty - 48, // 61: loop.Service.Ready:output_type -> google.protobuf.Empty - 43, // 62: loop.Service.HealthReport:output_type -> loop.HealthReportReply - 41, // [41:63] is the sub-list for method output_type - 19, // [19:41] is the sub-list for method input_type - 19, // [19:19] is the sub-list for extension type_name - 19, // [19:19] is the sub-list for extension extendee - 0, // [0:19] is the sub-list for field type_name + 5, // 0: loop.NewPluginProviderRequest.relayArgs:type_name -> loop.RelayArgs + 6, // 1: loop.NewPluginProviderRequest.pluginArgs:type_name -> loop.PluginArgs + 5, // 2: loop.NewConfigProviderRequest.relayArgs:type_name -> loop.RelayArgs + 13, // 3: loop.GetChainStatusReply.chain:type_name -> loop.ChainStatus + 16, // 4: loop.ListNodeStatusesReply.nodes:type_name -> loop.NodeStatus + 42, // 5: loop.TransactionRequest.amount:type_name -> loop.BigInt + 31, // 6: loop.ObserveRequest.reportTimestamp:type_name -> loop.ReportTimestamp + 42, // 7: loop.ObserveReply.value:type_name -> loop.BigInt + 20, // 8: loop.ConfigDigestRequest.contractConfig:type_name -> loop.ContractConfig + 20, // 9: loop.LatestConfigReply.contractConfig:type_name -> loop.ContractConfig + 31, // 10: loop.ReportContext.reportTimestamp:type_name -> loop.ReportTimestamp + 32, // 11: loop.TransmitRequest.reportContext:type_name -> loop.ReportContext + 33, // 12: loop.TransmitRequest.attributedOnchainSignatures:type_name -> loop.AttributedOnchainSignature + 45, // 13: loop.HealthReportReply.healthReport:type_name -> loop.HealthReportReply.HealthReportEntry + 42, // 14: loop.StarknetSignature.x:type_name -> loop.BigInt + 42, // 15: loop.StarknetSignature.y:type_name -> loop.BigInt + 42, // 16: loop.StarknetMessageHash.hash:type_name -> loop.BigInt + 0, // 17: loop.PluginRelayer.NewRelayer:input_type -> loop.NewRelayerRequest + 46, // 18: loop.Keystore.Accounts:input_type -> google.protobuf.Empty + 3, // 19: loop.Keystore.Sign:input_type -> loop.SignRequest + 9, // 20: loop.Relayer.NewConfigProvider:input_type -> loop.NewConfigProviderRequest + 7, // 21: loop.Relayer.NewPluginProvider:input_type -> loop.NewPluginProviderRequest + 11, // 22: loop.Relayer.GetChainStatus:input_type -> loop.GetChainStatusRequest + 14, // 23: loop.Relayer.ListNodeStatuses:input_type -> loop.ListNodeStatusesRequest + 17, // 24: loop.Relayer.Transact:input_type -> loop.TransactionRequest + 18, // 25: loop.DataSource.Observe:input_type -> loop.ObserveRequest + 21, // 26: loop.OffchainConfigDigester.ConfigDigest:input_type -> loop.ConfigDigestRequest + 23, // 27: loop.OffchainConfigDigester.ConfigDigestPrefix:input_type -> loop.ConfigDigestPrefixRequest + 25, // 28: loop.ContractConfigTracker.LatestConfigDetails:input_type -> loop.LatestConfigDetailsRequest + 27, // 29: loop.ContractConfigTracker.LatestConfig:input_type -> loop.LatestConfigRequest + 29, // 30: loop.ContractConfigTracker.LatestBlockHeight:input_type -> loop.LatestBlockHeightRequest + 34, // 31: loop.ContractTransmitter.Transmit:input_type -> loop.TransmitRequest + 36, // 32: loop.ContractTransmitter.LatestConfigDigestAndEpoch:input_type -> loop.LatestConfigDigestAndEpochRequest + 38, // 33: loop.ContractTransmitter.FromAccount:input_type -> loop.FromAccountRequest + 46, // 34: loop.Service.Name:input_type -> google.protobuf.Empty + 46, // 35: loop.Service.Close:input_type -> google.protobuf.Empty + 46, // 36: loop.Service.Ready:input_type -> google.protobuf.Empty + 46, // 37: loop.Service.HealthReport:input_type -> google.protobuf.Empty + 1, // 38: loop.PluginRelayer.NewRelayer:output_type -> loop.NewRelayerReply + 2, // 39: loop.Keystore.Accounts:output_type -> loop.AccountsReply + 4, // 40: loop.Keystore.Sign:output_type -> loop.SignReply + 10, // 41: loop.Relayer.NewConfigProvider:output_type -> loop.NewConfigProviderReply + 8, // 42: loop.Relayer.NewPluginProvider:output_type -> loop.NewPluginProviderReply + 12, // 43: loop.Relayer.GetChainStatus:output_type -> loop.GetChainStatusReply + 15, // 44: loop.Relayer.ListNodeStatuses:output_type -> loop.ListNodeStatusesReply + 46, // 45: loop.Relayer.Transact:output_type -> google.protobuf.Empty + 19, // 46: loop.DataSource.Observe:output_type -> loop.ObserveReply + 22, // 47: loop.OffchainConfigDigester.ConfigDigest:output_type -> loop.ConfigDigestReply + 24, // 48: loop.OffchainConfigDigester.ConfigDigestPrefix:output_type -> loop.ConfigDigestPrefixReply + 26, // 49: loop.ContractConfigTracker.LatestConfigDetails:output_type -> loop.LatestConfigDetailsReply + 28, // 50: loop.ContractConfigTracker.LatestConfig:output_type -> loop.LatestConfigReply + 30, // 51: loop.ContractConfigTracker.LatestBlockHeight:output_type -> loop.LatestBlockHeightReply + 35, // 52: loop.ContractTransmitter.Transmit:output_type -> loop.TransmitReply + 37, // 53: loop.ContractTransmitter.LatestConfigDigestAndEpoch:output_type -> loop.LatestConfigDigestAndEpochReply + 39, // 54: loop.ContractTransmitter.FromAccount:output_type -> loop.FromAccountReply + 40, // 55: loop.Service.Name:output_type -> loop.NameReply + 46, // 56: loop.Service.Close:output_type -> google.protobuf.Empty + 46, // 57: loop.Service.Ready:output_type -> google.protobuf.Empty + 41, // 58: loop.Service.HealthReport:output_type -> loop.HealthReportReply + 38, // [38:59] is the sub-list for method output_type + 17, // [17:38] is the sub-list for method input_type + 17, // [17:17] is the sub-list for extension type_name + 17, // [17:17] is the sub-list for extension extendee + 0, // [0:17] is the sub-list for field type_name } func init() { file_relayer_proto_init() } @@ -3083,7 +2965,7 @@ func file_relayer_proto_init() { } } file_relayer_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NewConfigProviderRequest); i { + switch v := v.(*NewPluginProviderRequest); i { case 0: return &v.state case 1: @@ -3095,7 +2977,7 @@ func file_relayer_proto_init() { } } file_relayer_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NewConfigProviderReply); i { + switch v := v.(*NewPluginProviderReply); i { case 0: return &v.state case 1: @@ -3107,7 +2989,7 @@ func file_relayer_proto_init() { } } file_relayer_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NewMedianProviderRequest); i { + switch v := v.(*NewConfigProviderRequest); i { case 0: return &v.state case 1: @@ -3119,7 +3001,7 @@ func file_relayer_proto_init() { } } file_relayer_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NewMedianProviderReply); i { + switch v := v.(*NewConfigProviderReply); i { case 0: return &v.state case 1: @@ -3131,30 +3013,6 @@ func file_relayer_proto_init() { } } file_relayer_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NewMercuryProviderRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_relayer_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NewMercuryProviderReply); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_relayer_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetChainStatusRequest); i { case 0: return &v.state @@ -3166,7 +3024,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GetChainStatusReply); i { case 0: return &v.state @@ -3178,7 +3036,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ChainStatus); i { case 0: return &v.state @@ -3190,7 +3048,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListNodeStatusesRequest); i { case 0: return &v.state @@ -3202,7 +3060,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ListNodeStatusesReply); i { case 0: return &v.state @@ -3214,7 +3072,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NodeStatus); i { case 0: return &v.state @@ -3226,7 +3084,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TransactionRequest); i { case 0: return &v.state @@ -3238,7 +3096,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ObserveRequest); i { case 0: return &v.state @@ -3250,7 +3108,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ObserveReply); i { case 0: return &v.state @@ -3262,7 +3120,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ContractConfig); i { case 0: return &v.state @@ -3274,7 +3132,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ConfigDigestRequest); i { case 0: return &v.state @@ -3286,7 +3144,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ConfigDigestReply); i { case 0: return &v.state @@ -3298,7 +3156,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ConfigDigestPrefixRequest); i { case 0: return &v.state @@ -3310,7 +3168,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ConfigDigestPrefixReply); i { case 0: return &v.state @@ -3322,7 +3180,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LatestConfigDetailsRequest); i { case 0: return &v.state @@ -3334,7 +3192,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LatestConfigDetailsReply); i { case 0: return &v.state @@ -3346,7 +3204,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LatestConfigRequest); i { case 0: return &v.state @@ -3358,7 +3216,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LatestConfigReply); i { case 0: return &v.state @@ -3370,7 +3228,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LatestBlockHeightRequest); i { case 0: return &v.state @@ -3382,7 +3240,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LatestBlockHeightReply); i { case 0: return &v.state @@ -3394,7 +3252,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ReportTimestamp); i { case 0: return &v.state @@ -3406,7 +3264,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ReportContext); i { case 0: return &v.state @@ -3418,7 +3276,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AttributedOnchainSignature); i { case 0: return &v.state @@ -3430,7 +3288,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TransmitRequest); i { case 0: return &v.state @@ -3442,7 +3300,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*TransmitReply); i { case 0: return &v.state @@ -3454,7 +3312,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LatestConfigDigestAndEpochRequest); i { case 0: return &v.state @@ -3466,7 +3324,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*LatestConfigDigestAndEpochReply); i { case 0: return &v.state @@ -3478,7 +3336,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FromAccountRequest); i { case 0: return &v.state @@ -3490,7 +3348,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*FromAccountReply); i { case 0: return &v.state @@ -3502,7 +3360,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*NameReply); i { case 0: return &v.state @@ -3514,7 +3372,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*HealthReportReply); i { case 0: return &v.state @@ -3526,7 +3384,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*BigInt); i { case 0: return &v.state @@ -3538,7 +3396,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StarknetSignature); i { case 0: return &v.state @@ -3550,7 +3408,7 @@ func file_relayer_proto_init() { return nil } } - file_relayer_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { + file_relayer_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StarknetMessageHash); i { case 0: return &v.state @@ -3569,7 +3427,7 @@ func file_relayer_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_relayer_proto_rawDesc, NumEnums: 0, - NumMessages: 48, + NumMessages: 46, NumExtensions: 0, NumServices: 8, }, diff --git a/pkg/loop/internal/pb/relayer.proto b/pkg/loop/internal/pb/relayer.proto index 78c06e24b..5aded6508 100644 --- a/pkg/loop/internal/pb/relayer.proto +++ b/pkg/loop/internal/pb/relayer.proto @@ -41,8 +41,7 @@ message SignReply { service Relayer { rpc NewConfigProvider (NewConfigProviderRequest) returns (NewConfigProviderReply) {} - rpc NewMedianProvider (NewMedianProviderRequest) returns (NewMedianProviderReply) {} - rpc NewMercuryProvider (NewMercuryProviderRequest) returns (NewMercuryProviderReply) {} + rpc NewPluginProvider (NewPluginProviderRequest) returns (NewPluginProviderReply) {} rpc GetChainStatus (GetChainStatusRequest) returns (GetChainStatusReply) {} rpc ListNodeStatuses (ListNodeStatusesRequest) returns (ListNodeStatusesReply) {} @@ -56,6 +55,7 @@ message RelayArgs { string contractID = 3; bool new = 4; bytes relayConfig = 5; + string providerType = 6; } // RelayArgs represents [github.com/smartcontractkit/chainlink-relay/pkg/types.PluginArgs]. @@ -64,39 +64,29 @@ message PluginArgs { bytes pluginConfig = 2; } -// NewConfigProviderRequest has arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewConfigProvider]. -message NewConfigProviderRequest { - RelayArgs relayArgs = 1; -} - -// NewConfigProviderReply has return arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewConfigProvider]. -message NewConfigProviderReply { - uint32 configProviderID = 1; -} - -// NewMedianProviderRequest has arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewMedianProvider]. -message NewMedianProviderRequest { +// NewPluginProviderRequest has arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewPluginProvider]. +message NewPluginProviderRequest { RelayArgs relayArgs = 1; PluginArgs pluginArgs = 2; } -// NewMedianProviderReply has return arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewMedianProvider]. -message NewMedianProviderReply { - uint32 medianProviderID = 1; +// NewPluginProviderReply has return arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewPluginProvider]. +message NewPluginProviderReply { + uint32 pluginProviderID = 1; } -// NewMercuryProviderRequest has arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewMercuryProvider]. -message NewMercuryProviderRequest { +// NewConfigProviderRequest has arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewConfigProvider]. +message NewConfigProviderRequest { RelayArgs relayArgs = 1; - PluginArgs pluginArgs = 2; } -// NewMercuryProviderReply has return arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewMercuryProvider]. -message NewMercuryProviderReply { - uint32 mercuryProviderID = 1; +// NewConfigProviderReply has return arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.NewConfigProvider]. +message NewConfigProviderReply { + uint32 configProviderID = 1; } message GetChainStatusRequest {} + // ChainStatusReply has return arguments for [github.com/smartcontractkit/chainlink-relay/pkg/loop.Relayer.ChainStatus]. message GetChainStatusReply { ChainStatus chain = 1; diff --git a/pkg/loop/internal/pb/relayer_grpc.pb.go b/pkg/loop/internal/pb/relayer_grpc.pb.go index b675b6140..c715e31ff 100644 --- a/pkg/loop/internal/pb/relayer_grpc.pb.go +++ b/pkg/loop/internal/pb/relayer_grpc.pb.go @@ -237,12 +237,11 @@ var Keystore_ServiceDesc = grpc.ServiceDesc{ } const ( - Relayer_NewConfigProvider_FullMethodName = "/loop.Relayer/NewConfigProvider" - Relayer_NewMedianProvider_FullMethodName = "/loop.Relayer/NewMedianProvider" - Relayer_NewMercuryProvider_FullMethodName = "/loop.Relayer/NewMercuryProvider" - Relayer_GetChainStatus_FullMethodName = "/loop.Relayer/GetChainStatus" - Relayer_ListNodeStatuses_FullMethodName = "/loop.Relayer/ListNodeStatuses" - Relayer_Transact_FullMethodName = "/loop.Relayer/Transact" + Relayer_NewConfigProvider_FullMethodName = "/loop.Relayer/NewConfigProvider" + Relayer_NewPluginProvider_FullMethodName = "/loop.Relayer/NewPluginProvider" + Relayer_GetChainStatus_FullMethodName = "/loop.Relayer/GetChainStatus" + Relayer_ListNodeStatuses_FullMethodName = "/loop.Relayer/ListNodeStatuses" + Relayer_Transact_FullMethodName = "/loop.Relayer/Transact" ) // RelayerClient is the client API for Relayer service. @@ -250,8 +249,7 @@ const ( // For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream. type RelayerClient interface { NewConfigProvider(ctx context.Context, in *NewConfigProviderRequest, opts ...grpc.CallOption) (*NewConfigProviderReply, error) - NewMedianProvider(ctx context.Context, in *NewMedianProviderRequest, opts ...grpc.CallOption) (*NewMedianProviderReply, error) - NewMercuryProvider(ctx context.Context, in *NewMercuryProviderRequest, opts ...grpc.CallOption) (*NewMercuryProviderReply, error) + NewPluginProvider(ctx context.Context, in *NewPluginProviderRequest, opts ...grpc.CallOption) (*NewPluginProviderReply, error) GetChainStatus(ctx context.Context, in *GetChainStatusRequest, opts ...grpc.CallOption) (*GetChainStatusReply, error) ListNodeStatuses(ctx context.Context, in *ListNodeStatusesRequest, opts ...grpc.CallOption) (*ListNodeStatusesReply, error) Transact(ctx context.Context, in *TransactionRequest, opts ...grpc.CallOption) (*emptypb.Empty, error) @@ -274,18 +272,9 @@ func (c *relayerClient) NewConfigProvider(ctx context.Context, in *NewConfigProv return out, nil } -func (c *relayerClient) NewMedianProvider(ctx context.Context, in *NewMedianProviderRequest, opts ...grpc.CallOption) (*NewMedianProviderReply, error) { - out := new(NewMedianProviderReply) - err := c.cc.Invoke(ctx, Relayer_NewMedianProvider_FullMethodName, in, out, opts...) - if err != nil { - return nil, err - } - return out, nil -} - -func (c *relayerClient) NewMercuryProvider(ctx context.Context, in *NewMercuryProviderRequest, opts ...grpc.CallOption) (*NewMercuryProviderReply, error) { - out := new(NewMercuryProviderReply) - err := c.cc.Invoke(ctx, Relayer_NewMercuryProvider_FullMethodName, in, out, opts...) +func (c *relayerClient) NewPluginProvider(ctx context.Context, in *NewPluginProviderRequest, opts ...grpc.CallOption) (*NewPluginProviderReply, error) { + out := new(NewPluginProviderReply) + err := c.cc.Invoke(ctx, Relayer_NewPluginProvider_FullMethodName, in, out, opts...) if err != nil { return nil, err } @@ -324,8 +313,7 @@ func (c *relayerClient) Transact(ctx context.Context, in *TransactionRequest, op // for forward compatibility type RelayerServer interface { NewConfigProvider(context.Context, *NewConfigProviderRequest) (*NewConfigProviderReply, error) - NewMedianProvider(context.Context, *NewMedianProviderRequest) (*NewMedianProviderReply, error) - NewMercuryProvider(context.Context, *NewMercuryProviderRequest) (*NewMercuryProviderReply, error) + NewPluginProvider(context.Context, *NewPluginProviderRequest) (*NewPluginProviderReply, error) GetChainStatus(context.Context, *GetChainStatusRequest) (*GetChainStatusReply, error) ListNodeStatuses(context.Context, *ListNodeStatusesRequest) (*ListNodeStatusesReply, error) Transact(context.Context, *TransactionRequest) (*emptypb.Empty, error) @@ -339,11 +327,8 @@ type UnimplementedRelayerServer struct { func (UnimplementedRelayerServer) NewConfigProvider(context.Context, *NewConfigProviderRequest) (*NewConfigProviderReply, error) { return nil, status.Errorf(codes.Unimplemented, "method NewConfigProvider not implemented") } -func (UnimplementedRelayerServer) NewMedianProvider(context.Context, *NewMedianProviderRequest) (*NewMedianProviderReply, error) { - return nil, status.Errorf(codes.Unimplemented, "method NewMedianProvider not implemented") -} -func (UnimplementedRelayerServer) NewMercuryProvider(context.Context, *NewMercuryProviderRequest) (*NewMercuryProviderReply, error) { - return nil, status.Errorf(codes.Unimplemented, "method NewMercuryProvider not implemented") +func (UnimplementedRelayerServer) NewPluginProvider(context.Context, *NewPluginProviderRequest) (*NewPluginProviderReply, error) { + return nil, status.Errorf(codes.Unimplemented, "method NewPluginProvider not implemented") } func (UnimplementedRelayerServer) GetChainStatus(context.Context, *GetChainStatusRequest) (*GetChainStatusReply, error) { return nil, status.Errorf(codes.Unimplemented, "method GetChainStatus not implemented") @@ -385,38 +370,20 @@ func _Relayer_NewConfigProvider_Handler(srv interface{}, ctx context.Context, de return interceptor(ctx, in, info, handler) } -func _Relayer_NewMedianProvider_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(NewMedianProviderRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(RelayerServer).NewMedianProvider(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: Relayer_NewMedianProvider_FullMethodName, - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RelayerServer).NewMedianProvider(ctx, req.(*NewMedianProviderRequest)) - } - return interceptor(ctx, in, info, handler) -} - -func _Relayer_NewMercuryProvider_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(NewMercuryProviderRequest) +func _Relayer_NewPluginProvider_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(NewPluginProviderRequest) if err := dec(in); err != nil { return nil, err } if interceptor == nil { - return srv.(RelayerServer).NewMercuryProvider(ctx, in) + return srv.(RelayerServer).NewPluginProvider(ctx, in) } info := &grpc.UnaryServerInfo{ Server: srv, - FullMethod: Relayer_NewMercuryProvider_FullMethodName, + FullMethod: Relayer_NewPluginProvider_FullMethodName, } handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(RelayerServer).NewMercuryProvider(ctx, req.(*NewMercuryProviderRequest)) + return srv.(RelayerServer).NewPluginProvider(ctx, req.(*NewPluginProviderRequest)) } return interceptor(ctx, in, info, handler) } @@ -487,12 +454,8 @@ var Relayer_ServiceDesc = grpc.ServiceDesc{ Handler: _Relayer_NewConfigProvider_Handler, }, { - MethodName: "NewMedianProvider", - Handler: _Relayer_NewMedianProvider_Handler, - }, - { - MethodName: "NewMercuryProvider", - Handler: _Relayer_NewMercuryProvider_Handler, + MethodName: "NewPluginProvider", + Handler: _Relayer_NewPluginProvider_Handler, }, { MethodName: "GetChainStatus", diff --git a/pkg/loop/internal/plugin_provider.go b/pkg/loop/internal/plugin_provider.go new file mode 100644 index 000000000..18551b3d2 --- /dev/null +++ b/pkg/loop/internal/plugin_provider.go @@ -0,0 +1,25 @@ +package internal + +import ( + libocr "github.com/smartcontractkit/libocr/offchainreporting2plus/types" + "google.golang.org/grpc" + + "github.com/smartcontractkit/chainlink-relay/pkg/loop/internal/pb" +) + +type pluginProviderClient struct { + *configProviderClient + contractTransmitter libocr.ContractTransmitter +} + +func (p *pluginProviderClient) ClientConn() grpc.ClientConnInterface { return p.cc } + +func newPluginProviderClient(b *brokerExt, cc grpc.ClientConnInterface) *pluginProviderClient { + p := &pluginProviderClient{configProviderClient: newConfigProviderClient(b.withName("PluginProviderClient"), cc)} + p.contractTransmitter = &contractTransmitterClient{b, pb.NewContractTransmitterClient(p.cc)} + return p +} + +func (p *pluginProviderClient) ContractTransmitter() libocr.ContractTransmitter { + return p.contractTransmitter +} diff --git a/pkg/loop/internal/relayer.go b/pkg/loop/internal/relayer.go index c29894939..86824d559 100644 --- a/pkg/loop/internal/relayer.go +++ b/pkg/loop/internal/relayer.go @@ -184,15 +184,16 @@ func (r *relayerClient) NewConfigProvider(ctx context.Context, rargs types.Relay return newConfigProviderClient(r.withName("ConfigProviderClient"), cc), nil } -func (r *relayerClient) NewMedianProvider(ctx context.Context, rargs types.RelayArgs, pargs types.PluginArgs) (types.MedianProvider, error) { - cc := r.newClientConn("MedianProvider", func(ctx context.Context) (uint32, resources, error) { - reply, err := r.relayer.NewMedianProvider(ctx, &pb.NewMedianProviderRequest{ +func (r *relayerClient) NewPluginProvider(ctx context.Context, rargs types.RelayArgs, pargs types.PluginArgs) (types.PluginProvider, error) { + cc := r.newClientConn("PluginProvider", func(ctx context.Context) (uint32, resources, error) { + reply, err := r.relayer.NewPluginProvider(ctx, &pb.NewPluginProviderRequest{ RelayArgs: &pb.RelayArgs{ ExternalJobID: rargs.ExternalJobID[:], JobID: rargs.JobID, ContractID: rargs.ContractID, New: rargs.New, RelayConfig: rargs.RelayConfig, + ProviderType: rargs.ProviderType, }, PluginArgs: &pb.PluginArgs{ TransmitterID: pargs.TransmitterID, @@ -202,17 +203,20 @@ func (r *relayerClient) NewMedianProvider(ctx context.Context, rargs types.Relay if err != nil { return 0, nil, err } - return reply.MedianProviderID, nil, nil + return reply.PluginProviderID, nil, nil }) - return newMedianProviderClient(r.brokerExt, cc), nil -} - -func (r *relayerClient) NewMercuryProvider(context.Context, types.RelayArgs, types.PluginArgs) (types.MercuryProvider, error) { - return nil, errors.New("mercury is not supported") -} -func (r *relayerClient) NewFunctionsProvider(context.Context, types.RelayArgs, types.PluginArgs) (types.FunctionsProvider, error) { - return nil, errors.New("functions are not supported") + // TODO: Remove this when we have fully transitioned all relayers to running in LOOPPs. + // This allows callers to type assert a PluginProvider into a product provider type (eg. MedianProvider) + // for interoperability with legacy code. + switch rargs.ProviderType { + case string(types.Median): + return newMedianProviderClient(r.brokerExt, cc), nil + case string(types.GenericPlugin): + return newPluginProviderClient(r.brokerExt, cc), nil + default: + return nil, fmt.Errorf("provider type not supported: %s", rargs.ProviderType) + } } func (r *relayerClient) GetChainStatus(ctx context.Context) (types.ChainStatus, error) { @@ -306,27 +310,55 @@ func (r *relayerServer) NewConfigProvider(ctx context.Context, request *pb.NewCo return &pb.NewConfigProviderReply{ConfigProviderID: id}, nil } -func (r *relayerServer) NewMedianProvider(ctx context.Context, request *pb.NewMedianProviderRequest) (*pb.NewMedianProviderReply, error) { +func (r *relayerServer) NewPluginProvider(ctx context.Context, request *pb.NewPluginProviderRequest) (*pb.NewPluginProviderReply, error) { exJobID, err := uuid.FromBytes(request.RelayArgs.ExternalJobID) if err != nil { return nil, fmt.Errorf("invalid uuid bytes for ExternalJobID: %w", err) } - provider, err := r.impl.NewMedianProvider(ctx, types.RelayArgs{ + relayArgs := types.RelayArgs{ ExternalJobID: exJobID, JobID: request.RelayArgs.JobID, ContractID: request.RelayArgs.ContractID, New: request.RelayArgs.New, RelayConfig: request.RelayArgs.RelayConfig, - }, types.PluginArgs{ + ProviderType: request.RelayArgs.ProviderType, + } + pluginArgs := types.PluginArgs{ TransmitterID: request.PluginArgs.TransmitterID, PluginConfig: request.PluginArgs.PluginConfig, - }) + } + + switch request.RelayArgs.ProviderType { + case string(types.Median): + id, err := r.newMedianProvider(ctx, relayArgs, pluginArgs) + if err != nil { + return nil, err + } + return &pb.NewPluginProviderReply{PluginProviderID: id}, nil + case string(types.GenericPlugin): + id, err := r.newPluginProvider(ctx, relayArgs, pluginArgs) + if err != nil { + return nil, err + } + return &pb.NewPluginProviderReply{PluginProviderID: id}, nil + } + + return nil, fmt.Errorf("provider type not supported: %s", relayArgs.ProviderType) +} + +func (r *relayerServer) newMedianProvider(ctx context.Context, relayArgs types.RelayArgs, pluginArgs types.PluginArgs) (uint32, error) { + i, ok := r.impl.(MedianProvider) + if !ok { + return 0, errors.New("median not supported") + } + + provider, err := i.NewMedianProvider(ctx, relayArgs, pluginArgs) if err != nil { - return nil, err + return 0, err } err = provider.Start(ctx) if err != nil { - return nil, err + return 0, err } const name = "MedianProvider" providerRes := resource{name: name, Closer: provider} @@ -341,14 +373,35 @@ func (r *relayerServer) NewMedianProvider(ctx context.Context, request *pb.NewMe pb.RegisterOnchainConfigCodecServer(s, &onchainConfigCodecServer{impl: provider.OnchainConfigCodec()}) }, providerRes) if err != nil { - return nil, err + return 0, err } - return &pb.NewMedianProviderReply{MedianProviderID: id}, nil + return id, err } -func (r *relayerServer) NewMercuryProvider(ctx context.Context, request *pb.NewMercuryProviderRequest) (*pb.NewMercuryProviderReply, error) { - return nil, errors.New("mercury is not supported") +func (r *relayerServer) newPluginProvider(ctx context.Context, relayArgs types.RelayArgs, pluginArgs types.PluginArgs) (uint32, error) { + provider, err := r.impl.NewPluginProvider(ctx, relayArgs, pluginArgs) + if err != nil { + return 0, err + } + err = provider.Start(ctx) + if err != nil { + return 0, err + } + const name = "PluginProvider" + providerRes := resource{name: name, Closer: provider} + + id, _, err := r.serveNew(name, func(s *grpc.Server) { + pb.RegisterServiceServer(s, &serviceServer{srv: provider}) + pb.RegisterOffchainConfigDigesterServer(s, &offchainConfigDigesterServer{impl: provider.OffchainConfigDigester()}) + pb.RegisterContractConfigTrackerServer(s, &contractConfigTrackerServer{impl: provider.ContractConfigTracker()}) + pb.RegisterContractTransmitterServer(s, &contractTransmitterServer{impl: provider.ContractTransmitter()}) + }, providerRes) + if err != nil { + return 0, err + } + + return id, err } func (r *relayerServer) GetChainStatus(ctx context.Context, request *pb.GetChainStatusRequest) (*pb.GetChainStatusReply, error) { diff --git a/pkg/loop/internal/test/plugin_provider.go b/pkg/loop/internal/test/plugin_provider.go new file mode 100644 index 000000000..c9878832f --- /dev/null +++ b/pkg/loop/internal/test/plugin_provider.go @@ -0,0 +1,31 @@ +package test + +import ( + "context" + + libocr "github.com/smartcontractkit/libocr/offchainreporting2plus/types" +) + +type StaticPluginProvider struct{} + +func (s StaticPluginProvider) Start(ctx context.Context) error { return nil } + +func (s StaticPluginProvider) Close() error { return nil } + +func (s StaticPluginProvider) Ready() error { panic("unimplemented") } + +func (s StaticPluginProvider) Name() string { panic("unimplemented") } + +func (s StaticPluginProvider) HealthReport() map[string]error { panic("unimplemented") } + +func (s StaticPluginProvider) OffchainConfigDigester() libocr.OffchainConfigDigester { + return staticOffchainConfigDigester{} +} + +func (s StaticPluginProvider) ContractConfigTracker() libocr.ContractConfigTracker { + return staticContractConfigTracker{} +} + +func (s StaticPluginProvider) ContractTransmitter() libocr.ContractTransmitter { + return staticContractTransmitter{} +} diff --git a/pkg/loop/internal/test/relayer.go b/pkg/loop/internal/test/relayer.go index bce764324..12357e04e 100644 --- a/pkg/loop/internal/test/relayer.go +++ b/pkg/loop/internal/test/relayer.go @@ -76,7 +76,8 @@ func (s staticRelayer) NewConfigProvider(ctx context.Context, r types.RelayArgs) } func (s staticRelayer) NewMedianProvider(ctx context.Context, r types.RelayArgs, p types.PluginArgs) (types.MedianProvider, error) { - if !equalRelayArgs(r, RelayArgs) { + ra := newRelayArgsWithProviderType(types.Median) + if !equalRelayArgs(r, ra) { return nil, fmt.Errorf("expected relay args:\n\t%v\nbut got:\n\t%v", RelayArgs, r) } if !reflect.DeepEqual(PluginArgs, p) { @@ -85,12 +86,15 @@ func (s staticRelayer) NewMedianProvider(ctx context.Context, r types.RelayArgs, return StaticMedianProvider{}, nil } -func (s staticRelayer) NewMercuryProvider(ctx context.Context, rargs types.RelayArgs, pargs types.PluginArgs) (types.MercuryProvider, error) { - panic("unimplemented") -} - -func (s staticRelayer) NewFunctionsProvider(ctx context.Context, rargs types.RelayArgs, pargs types.PluginArgs) (types.FunctionsProvider, error) { - panic("unimplemented") +func (s staticRelayer) NewPluginProvider(ctx context.Context, r types.RelayArgs, p types.PluginArgs) (types.PluginProvider, error) { + ra := newRelayArgsWithProviderType(types.Median) + if !equalRelayArgs(r, ra) { + return nil, fmt.Errorf("expected relay args:\n\t%v\nbut got:\n\t%v", RelayArgs, r) + } + if !reflect.DeepEqual(PluginArgs, p) { + return nil, fmt.Errorf("expected plugin args %v but got %v", PluginArgs, p) + } + return StaticPluginProvider{}, nil } func (s staticRelayer) GetChainStatus(ctx context.Context) (types.ChainStatus, error) { @@ -133,6 +137,17 @@ func equalRelayArgs(a, b types.RelayArgs) bool { bytes.Equal(a.RelayConfig, b.RelayConfig) } +func newRelayArgsWithProviderType(_type types.OCR2PluginType) types.RelayArgs { + return types.RelayArgs{ + ExternalJobID: RelayArgs.ExternalJobID, + JobID: RelayArgs.JobID, + ContractID: RelayArgs.ContractID, + New: RelayArgs.New, + RelayConfig: RelayArgs.RelayConfig, + ProviderType: string(_type), + } +} + func TestPluginRelayer(t *testing.T, p internal.PluginRelayer) { ctx := utils.Context(t) @@ -183,7 +198,9 @@ func TestRelayer(t *testing.T, relayer internal.Relayer) { t.Run("MedianProvider", func(t *testing.T) { t.Parallel() - provider, err := relayer.NewMedianProvider(ctx, RelayArgs, PluginArgs) + ra := newRelayArgsWithProviderType(types.Median) + p, err := relayer.NewPluginProvider(ctx, ra, PluginArgs) + provider := p.(types.MedianProvider) require.NoError(t, err) require.NoError(t, provider.Start(ctx)) t.Cleanup(func() { assert.NoError(t, provider.Close()) }) @@ -270,6 +287,57 @@ func TestRelayer(t *testing.T, relayer internal.Relayer) { }) }) + t.Run("PluginProvider", func(t *testing.T) { + t.Parallel() + ra := newRelayArgsWithProviderType(types.GenericPlugin) + provider, err := relayer.NewPluginProvider(ctx, ra, PluginArgs) + require.NoError(t, err) + require.NoError(t, provider.Start(ctx)) + t.Cleanup(func() { assert.NoError(t, provider.Close()) }) + + t.Run("ReportingPluginProvider", func(t *testing.T) { + t.Parallel() + + t.Run("OffchainConfigDigester", func(t *testing.T) { + t.Parallel() + ocd := provider.OffchainConfigDigester() + gotConfigDigestPrefix, err := ocd.ConfigDigestPrefix() + require.NoError(t, err) + assert.Equal(t, configDigestPrefix, gotConfigDigestPrefix) + gotConfigDigest, err := ocd.ConfigDigest(contractConfig) + require.NoError(t, err) + assert.Equal(t, configDigest, gotConfigDigest) + }) + t.Run("ContractConfigTracker", func(t *testing.T) { + t.Parallel() + cct := provider.ContractConfigTracker() + gotBlockHeight, err := cct.LatestBlockHeight(ctx) + require.NoError(t, err) + assert.Equal(t, blockHeight, gotBlockHeight) + gotChangedInBlock, gotConfigDigest, err := cct.LatestConfigDetails(ctx) + require.NoError(t, err) + assert.Equal(t, changedInBlock, gotChangedInBlock) + assert.Equal(t, configDigest, gotConfigDigest) + gotContractConfig, err := cct.LatestConfig(ctx, changedInBlock) + require.NoError(t, err) + assert.Equal(t, contractConfig, gotContractConfig) + }) + t.Run("ContractTransmitter", func(t *testing.T) { + t.Parallel() + ct := provider.ContractTransmitter() + gotAccount, err := ct.FromAccount() + require.NoError(t, err) + assert.Equal(t, account, gotAccount) + gotConfigDigest, gotEpoch, err := ct.LatestConfigDigestAndEpoch(ctx) + require.NoError(t, err) + assert.Equal(t, configDigest, gotConfigDigest) + assert.Equal(t, epoch, gotEpoch) + err = ct.Transmit(ctx, reportContext, report, sigs) + require.NoError(t, err) + }) + }) + }) + t.Run("GetChainStatus", func(t *testing.T) { t.Parallel() gotChain, err := relayer.GetChainStatus(ctx) diff --git a/pkg/loop/internal/test/test.go b/pkg/loop/internal/test/test.go index bd9e6426f..3e814e9f6 100644 --- a/pkg/loop/internal/test/test.go +++ b/pkg/loop/internal/test/test.go @@ -85,6 +85,7 @@ URL = 'https://test.url' ContractID: "testcontract", New: true, RelayConfig: []byte{42: 11}, + ProviderType: string(types.Median), } report = libocr.Report{42: 101} reportContext = libocr.ReportContext{ diff --git a/pkg/loop/internal/types.go b/pkg/loop/internal/types.go index df2d43b05..f47648472 100644 --- a/pkg/loop/internal/types.go +++ b/pkg/loop/internal/types.go @@ -10,12 +10,22 @@ type PluginRelayer interface { NewRelayer(ctx context.Context, config string, keystore types.Keystore) (Relayer, error) } +type MedianProvider interface { + NewMedianProvider(context.Context, types.RelayArgs, types.PluginArgs) (types.MedianProvider, error) +} + +type MercuryProvider interface { + NewMercuryProvider(context.Context, types.RelayArgs, types.PluginArgs) (types.MercuryProvider, error) +} + +type FunctionsProvider interface { + NewFunctionsProvider(context.Context, types.RelayArgs, types.PluginArgs) (types.FunctionsProvider, error) +} + // Relayer extends [types.Relayer] and includes [context.Context]s. type Relayer interface { types.ChainService NewConfigProvider(context.Context, types.RelayArgs) (types.ConfigProvider, error) - NewMedianProvider(context.Context, types.RelayArgs, types.PluginArgs) (types.MedianProvider, error) - NewMercuryProvider(context.Context, types.RelayArgs, types.PluginArgs) (types.MercuryProvider, error) - NewFunctionsProvider(context.Context, types.RelayArgs, types.PluginArgs) (types.FunctionsProvider, error) + NewPluginProvider(context.Context, types.RelayArgs, types.PluginArgs) (types.PluginProvider, error) } diff --git a/pkg/loop/plugin_median_test.go b/pkg/loop/plugin_median_test.go index 2abfe7ba8..dfb75cfff 100644 --- a/pkg/loop/plugin_median_test.go +++ b/pkg/loop/plugin_median_test.go @@ -69,9 +69,11 @@ func newMedianProvider(t *testing.T, pr loop.PluginRelayer) types.MedianProvider require.NoError(t, err) require.NoError(t, r.Start(ctx)) t.Cleanup(func() { assert.NoError(t, r.Close()) }) - p, err := r.NewMedianProvider(ctx, test.RelayArgs, test.PluginArgs) + p, err := r.NewPluginProvider(ctx, test.RelayArgs, test.PluginArgs) + mp, ok := p.(types.MedianProvider) + require.True(t, ok) require.NoError(t, err) - require.NoError(t, p.Start(ctx)) - t.Cleanup(func() { assert.NoError(t, p.Close()) }) - return p + require.NoError(t, mp.Start(ctx)) + t.Cleanup(func() { assert.NoError(t, mp.Close()) }) + return mp } diff --git a/pkg/loop/relayer_service.go b/pkg/loop/relayer_service.go index dd791312a..fd650cba7 100644 --- a/pkg/loop/relayer_service.go +++ b/pkg/loop/relayer_service.go @@ -49,25 +49,11 @@ func (r *RelayerService) NewConfigProvider(ctx context.Context, args types.Relay return r.service.NewConfigProvider(ctx, args) } -func (r *RelayerService) NewMedianProvider(ctx context.Context, rargs types.RelayArgs, pargs types.PluginArgs) (types.MedianProvider, error) { +func (r *RelayerService) NewPluginProvider(ctx context.Context, rargs types.RelayArgs, pargs types.PluginArgs) (types.PluginProvider, error) { if err := r.wait(ctx); err != nil { return nil, err } - return r.service.NewMedianProvider(ctx, rargs, pargs) -} - -func (r *RelayerService) NewMercuryProvider(ctx context.Context, rargs types.RelayArgs, pargs types.PluginArgs) (types.MercuryProvider, error) { - if err := r.wait(ctx); err != nil { - return nil, err - } - return r.service.NewMercuryProvider(ctx, rargs, pargs) -} - -func (r *RelayerService) NewFunctionsProvider(ctx context.Context, rargs types.RelayArgs, pargs types.PluginArgs) (types.FunctionsProvider, error) { - if err := r.wait(ctx); err != nil { - return nil, err - } - return r.service.NewFunctionsProvider(ctx, rargs, pargs) + return r.service.NewPluginProvider(ctx, rargs, pargs) } func (r *RelayerService) GetChainStatus(ctx context.Context) (types.ChainStatus, error) { diff --git a/pkg/types/plugin.go b/pkg/types/plugin.go new file mode 100644 index 000000000..e352ed40b --- /dev/null +++ b/pkg/types/plugin.go @@ -0,0 +1,16 @@ +package types + +// OCR2PluginType defines supported OCR2 plugin types. +type OCR2PluginType string + +const ( + Median OCR2PluginType = "median" + DKG OCR2PluginType = "dkg" + OCR2VRF OCR2PluginType = "ocr2vrf" + + // TODO: sc-55296 to rename ocr2keeper to ocr2automation in code + OCR2Keeper OCR2PluginType = "ocr2automation" + Functions OCR2PluginType = "functions" + Mercury OCR2PluginType = "mercury" + GenericPlugin OCR2PluginType = "plugin" +) diff --git a/pkg/types/provider_mercury.go b/pkg/types/provider_mercury.go index 0dea7ff8b..d9beda5db 100644 --- a/pkg/types/provider_mercury.go +++ b/pkg/types/provider_mercury.go @@ -10,10 +10,11 @@ import ( // MercuryProvider provides components needed for a mercury OCR2 plugin. // Mercury requires config tracking but does not transmit on-chain. type MercuryProvider interface { - ConfigProvider + PluginProvider + ReportCodecV1() v1.ReportCodec ReportCodecV2() v2.ReportCodec ReportCodecV3() v3.ReportCodec OnchainConfigCodec() mercury.OnchainConfigCodec - ContractTransmitter() mercury.Transmitter + MercuryServerFetcher() mercury.MercuryServerFetcher } diff --git a/pkg/types/relayer.go b/pkg/types/relayer.go index 3cdcc5088..2dcda62a9 100644 --- a/pkg/types/relayer.go +++ b/pkg/types/relayer.go @@ -21,6 +21,7 @@ type RelayArgs struct { ContractID string New bool // Whether this is a first time job add. RelayConfig []byte + ProviderType string } type ChainStatus struct {