From 81178a652d8768bf7a9dffbeb0e25f8fc1572efa Mon Sep 17 00:00:00 2001 From: Jeff Yanta Date: Tue, 14 May 2024 16:20:06 -0400 Subject: [PATCH 01/16] Initial APIs for sending chat messages with real-time updates --- generated/go/chat/v1/chat_service.pb.go | 1531 +++++++++++++---- .../go/chat/v1/chat_service.pb.validate.go | 941 +++++++++- generated/go/chat/v1/chat_service_grpc.pb.go | 107 +- generated/go/common/v1/model.pb.go | 367 ++-- generated/go/common/v1/model.pb.validate.go | 149 ++ .../go/messaging/v1/messaging_service.pb.go | 797 ++++----- .../v1/messaging_service.pb.validate.go | 149 -- .../chat/v1/chat_service_connect.ts | 20 +- .../protobuf-es/chat/v1/chat_service_pb.ts | 492 +++++- generated/protobuf-es/common/v1/model_pb.ts | 90 +- .../messaging/v1/messaging_service_pb.ts | 108 +- proto/chat/v1/chat_service.proto | 108 +- proto/common/v1/model.proto | 17 + proto/messaging/v1/messaging_service.proto | 24 +- 14 files changed, 3681 insertions(+), 1219 deletions(-) diff --git a/generated/go/chat/v1/chat_service.pb.go b/generated/go/chat/v1/chat_service.pb.go index 4ef8021..702defd 100644 --- a/generated/go/chat/v1/chat_service.pb.go +++ b/generated/go/chat/v1/chat_service.pb.go @@ -355,11 +355,56 @@ func (SetSubscriptionStateResponse_Result) EnumDescriptor() ([]byte, []int) { return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{9, 0} } +type SendMessageResponse_Result int32 + +const ( + SendMessageResponse_OK SendMessageResponse_Result = 0 +) + +// Enum value maps for SendMessageResponse_Result. +var ( + SendMessageResponse_Result_name = map[int32]string{ + 0: "OK", + } + SendMessageResponse_Result_value = map[string]int32{ + "OK": 0, + } +) + +func (x SendMessageResponse_Result) Enum() *SendMessageResponse_Result { + p := new(SendMessageResponse_Result) + *p = x + return p +} + +func (x SendMessageResponse_Result) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SendMessageResponse_Result) Descriptor() protoreflect.EnumDescriptor { + return file_chat_v1_chat_service_proto_enumTypes[7].Descriptor() +} + +func (SendMessageResponse_Result) Type() protoreflect.EnumType { + return &file_chat_v1_chat_service_proto_enumTypes[7] +} + +func (x SendMessageResponse_Result) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use SendMessageResponse_Result.Descriptor instead. +func (SendMessageResponse_Result) EnumDescriptor() ([]byte, []int) { + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{16, 0} +} + type Pointer_Kind int32 const ( - Pointer_UNKNOWN Pointer_Kind = 0 - Pointer_READ Pointer_Kind = 1 + Pointer_UNKNOWN Pointer_Kind = 0 + Pointer_READ Pointer_Kind = 1 + Pointer_DELIVERED Pointer_Kind = 2 + Pointer_SENT Pointer_Kind = 3 // Probably always inferred by OK result in SendMessageResponse ) // Enum value maps for Pointer_Kind. @@ -367,10 +412,14 @@ var ( Pointer_Kind_name = map[int32]string{ 0: "UNKNOWN", 1: "READ", + 2: "DELIVERED", + 3: "SENT", } Pointer_Kind_value = map[string]int32{ - "UNKNOWN": 0, - "READ": 1, + "UNKNOWN": 0, + "READ": 1, + "DELIVERED": 2, + "SENT": 3, } ) @@ -385,11 +434,11 @@ func (x Pointer_Kind) String() string { } func (Pointer_Kind) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v1_chat_service_proto_enumTypes[7].Descriptor() + return file_chat_v1_chat_service_proto_enumTypes[8].Descriptor() } func (Pointer_Kind) Type() protoreflect.EnumType { - return &file_chat_v1_chat_service_proto_enumTypes[7] + return &file_chat_v1_chat_service_proto_enumTypes[8] } func (x Pointer_Kind) Number() protoreflect.EnumNumber { @@ -398,7 +447,7 @@ func (x Pointer_Kind) Number() protoreflect.EnumNumber { // Deprecated: Use Pointer_Kind.Descriptor instead. func (Pointer_Kind) EnumDescriptor() ([]byte, []int) { - return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{12, 0} + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{20, 0} } type ExchangeDataContent_Verb int32 @@ -461,11 +510,11 @@ func (x ExchangeDataContent_Verb) String() string { } func (ExchangeDataContent_Verb) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v1_chat_service_proto_enumTypes[8].Descriptor() + return file_chat_v1_chat_service_proto_enumTypes[9].Descriptor() } func (ExchangeDataContent_Verb) Type() protoreflect.EnumType { - return &file_chat_v1_chat_service_proto_enumTypes[8] + return &file_chat_v1_chat_service_proto_enumTypes[9] } func (x ExchangeDataContent_Verb) Number() protoreflect.EnumNumber { @@ -474,7 +523,7 @@ func (x ExchangeDataContent_Verb) Number() protoreflect.EnumNumber { // Deprecated: Use ExchangeDataContent_Verb.Descriptor instead. func (ExchangeDataContent_Verb) EnumDescriptor() ([]byte, []int) { - return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{17, 0} + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{25, 0} } type GetChatsRequest struct { @@ -1081,10 +1130,457 @@ func (x *SetSubscriptionStateResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SetSubscriptionStateResponse) ProtoMessage() {} +func (*SetSubscriptionStateResponse) ProtoMessage() {} + +func (x *SetSubscriptionStateResponse) ProtoReflect() protoreflect.Message { + mi := &file_chat_v1_chat_service_proto_msgTypes[9] + 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 SetSubscriptionStateResponse.ProtoReflect.Descriptor instead. +func (*SetSubscriptionStateResponse) Descriptor() ([]byte, []int) { + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{9} +} + +func (x *SetSubscriptionStateResponse) GetResult() SetSubscriptionStateResponse_Result { + if x != nil { + return x.Result + } + return SetSubscriptionStateResponse_OK +} + +type OpenChatEventStream struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ChatId *ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` + Owner *v1.SolanaAccountId `protobuf:"bytes,2,opt,name=owner,proto3" json:"owner,omitempty"` + Signature *v1.Signature `protobuf:"bytes,3,opt,name=signature,proto3" json:"signature,omitempty"` +} + +func (x *OpenChatEventStream) Reset() { + *x = OpenChatEventStream{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v1_chat_service_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OpenChatEventStream) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OpenChatEventStream) ProtoMessage() {} + +func (x *OpenChatEventStream) ProtoReflect() protoreflect.Message { + mi := &file_chat_v1_chat_service_proto_msgTypes[10] + 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 OpenChatEventStream.ProtoReflect.Descriptor instead. +func (*OpenChatEventStream) Descriptor() ([]byte, []int) { + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{10} +} + +func (x *OpenChatEventStream) GetChatId() *ChatId { + if x != nil { + return x.ChatId + } + return nil +} + +func (x *OpenChatEventStream) GetOwner() *v1.SolanaAccountId { + if x != nil { + return x.Owner + } + return nil +} + +func (x *OpenChatEventStream) GetSignature() *v1.Signature { + if x != nil { + return x.Signature + } + return nil +} + +type ChatStreamEvent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Messages []*ChatMessage `protobuf:"bytes,1,rep,name=messages,proto3" json:"messages,omitempty"` + Pointers []*Pointer `protobuf:"bytes,2,rep,name=pointers,proto3" json:"pointers,omitempty"` +} + +func (x *ChatStreamEvent) Reset() { + *x = ChatStreamEvent{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v1_chat_service_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChatStreamEvent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatStreamEvent) ProtoMessage() {} + +func (x *ChatStreamEvent) ProtoReflect() protoreflect.Message { + mi := &file_chat_v1_chat_service_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 ChatStreamEvent.ProtoReflect.Descriptor instead. +func (*ChatStreamEvent) Descriptor() ([]byte, []int) { + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{11} +} + +func (x *ChatStreamEvent) GetMessages() []*ChatMessage { + if x != nil { + return x.Messages + } + return nil +} + +func (x *ChatStreamEvent) GetPointers() []*Pointer { + if x != nil { + return x.Pointers + } + return nil +} + +type ChatStreamEventBatch struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Events []*ChatStreamEvent `protobuf:"bytes,2,rep,name=events,proto3" json:"events,omitempty"` +} + +func (x *ChatStreamEventBatch) Reset() { + *x = ChatStreamEventBatch{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v1_chat_service_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChatStreamEventBatch) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatStreamEventBatch) ProtoMessage() {} + +func (x *ChatStreamEventBatch) ProtoReflect() protoreflect.Message { + mi := &file_chat_v1_chat_service_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 ChatStreamEventBatch.ProtoReflect.Descriptor instead. +func (*ChatStreamEventBatch) Descriptor() ([]byte, []int) { + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{12} +} + +func (x *ChatStreamEventBatch) GetEvents() []*ChatStreamEvent { + if x != nil { + return x.Events + } + return nil +} + +type StreamChatEventsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Type: + // + // *StreamChatEventsRequest_OpenStream + // *StreamChatEventsRequest_Pong + Type isStreamChatEventsRequest_Type `protobuf_oneof:"type"` +} + +func (x *StreamChatEventsRequest) Reset() { + *x = StreamChatEventsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v1_chat_service_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StreamChatEventsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StreamChatEventsRequest) ProtoMessage() {} + +func (x *StreamChatEventsRequest) ProtoReflect() protoreflect.Message { + mi := &file_chat_v1_chat_service_proto_msgTypes[13] + 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 StreamChatEventsRequest.ProtoReflect.Descriptor instead. +func (*StreamChatEventsRequest) Descriptor() ([]byte, []int) { + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{13} +} + +func (m *StreamChatEventsRequest) GetType() isStreamChatEventsRequest_Type { + if m != nil { + return m.Type + } + return nil +} + +func (x *StreamChatEventsRequest) GetOpenStream() *OpenChatEventStream { + if x, ok := x.GetType().(*StreamChatEventsRequest_OpenStream); ok { + return x.OpenStream + } + return nil +} + +func (x *StreamChatEventsRequest) GetPong() *v1.ClientPong { + if x, ok := x.GetType().(*StreamChatEventsRequest_Pong); ok { + return x.Pong + } + return nil +} + +type isStreamChatEventsRequest_Type interface { + isStreamChatEventsRequest_Type() +} + +type StreamChatEventsRequest_OpenStream struct { + OpenStream *OpenChatEventStream `protobuf:"bytes,1,opt,name=open_stream,json=openStream,proto3,oneof"` +} + +type StreamChatEventsRequest_Pong struct { + Pong *v1.ClientPong `protobuf:"bytes,2,opt,name=pong,proto3,oneof"` +} + +func (*StreamChatEventsRequest_OpenStream) isStreamChatEventsRequest_Type() {} + +func (*StreamChatEventsRequest_Pong) isStreamChatEventsRequest_Type() {} + +type StreamChatEventsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Type: + // + // *StreamChatEventsResponse_Events + // *StreamChatEventsResponse_Ping + Type isStreamChatEventsResponse_Type `protobuf_oneof:"type"` +} + +func (x *StreamChatEventsResponse) Reset() { + *x = StreamChatEventsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v1_chat_service_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StreamChatEventsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StreamChatEventsResponse) ProtoMessage() {} + +func (x *StreamChatEventsResponse) ProtoReflect() protoreflect.Message { + mi := &file_chat_v1_chat_service_proto_msgTypes[14] + 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 StreamChatEventsResponse.ProtoReflect.Descriptor instead. +func (*StreamChatEventsResponse) Descriptor() ([]byte, []int) { + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{14} +} + +func (m *StreamChatEventsResponse) GetType() isStreamChatEventsResponse_Type { + if m != nil { + return m.Type + } + return nil +} + +func (x *StreamChatEventsResponse) GetEvents() *ChatStreamEventBatch { + if x, ok := x.GetType().(*StreamChatEventsResponse_Events); ok { + return x.Events + } + return nil +} + +func (x *StreamChatEventsResponse) GetPing() *v1.ServerPing { + if x, ok := x.GetType().(*StreamChatEventsResponse_Ping); ok { + return x.Ping + } + return nil +} + +type isStreamChatEventsResponse_Type interface { + isStreamChatEventsResponse_Type() +} + +type StreamChatEventsResponse_Events struct { + Events *ChatStreamEventBatch `protobuf:"bytes,1,opt,name=events,proto3,oneof"` +} + +type StreamChatEventsResponse_Ping struct { + Ping *v1.ServerPing `protobuf:"bytes,2,opt,name=ping,proto3,oneof"` +} + +func (*StreamChatEventsResponse_Events) isStreamChatEventsResponse_Type() {} + +func (*StreamChatEventsResponse_Ping) isStreamChatEventsResponse_Type() {} + +type SendMessageRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Owner *v1.SolanaAccountId `protobuf:"bytes,1,opt,name=owner,proto3" json:"owner,omitempty"` + Signature *v1.Signature `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty"` + ChatId *ChatId `protobuf:"bytes,3,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` + // todo: What field type should this be? Maybe the chat message itself with fields missing? + Content []*Content `protobuf:"bytes,4,rep,name=content,proto3" json:"content,omitempty"` +} + +func (x *SendMessageRequest) Reset() { + *x = SendMessageRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v1_chat_service_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SendMessageRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SendMessageRequest) ProtoMessage() {} + +func (x *SendMessageRequest) ProtoReflect() protoreflect.Message { + mi := &file_chat_v1_chat_service_proto_msgTypes[15] + 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 SendMessageRequest.ProtoReflect.Descriptor instead. +func (*SendMessageRequest) Descriptor() ([]byte, []int) { + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{15} +} + +func (x *SendMessageRequest) GetOwner() *v1.SolanaAccountId { + if x != nil { + return x.Owner + } + return nil +} + +func (x *SendMessageRequest) GetSignature() *v1.Signature { + if x != nil { + return x.Signature + } + return nil +} + +func (x *SendMessageRequest) GetChatId() *ChatId { + if x != nil { + return x.ChatId + } + return nil +} + +func (x *SendMessageRequest) GetContent() []*Content { + if x != nil { + return x.Content + } + return nil +} + +type SendMessageResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Result SendMessageResponse_Result `protobuf:"varint,1,opt,name=result,proto3,enum=code.chat.v1.SendMessageResponse_Result" json:"result,omitempty"` + Message *ChatMessage `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` +} + +func (x *SendMessageResponse) Reset() { + *x = SendMessageResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v1_chat_service_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SendMessageResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SendMessageResponse) ProtoMessage() {} -func (x *SetSubscriptionStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_chat_service_proto_msgTypes[9] +func (x *SendMessageResponse) ProtoReflect() protoreflect.Message { + mi := &file_chat_v1_chat_service_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1095,16 +1591,23 @@ func (x *SetSubscriptionStateResponse) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SetSubscriptionStateResponse.ProtoReflect.Descriptor instead. -func (*SetSubscriptionStateResponse) Descriptor() ([]byte, []int) { - return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{9} +// Deprecated: Use SendMessageResponse.ProtoReflect.Descriptor instead. +func (*SendMessageResponse) Descriptor() ([]byte, []int) { + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{16} } -func (x *SetSubscriptionStateResponse) GetResult() SetSubscriptionStateResponse_Result { +func (x *SendMessageResponse) GetResult() SendMessageResponse_Result { if x != nil { return x.Result } - return SetSubscriptionStateResponse_OK + return SendMessageResponse_OK +} + +func (x *SendMessageResponse) GetMessage() *ChatMessage { + if x != nil { + return x.Message + } + return nil } type ChatId struct { @@ -1118,7 +1621,7 @@ type ChatId struct { func (x *ChatId) Reset() { *x = ChatId{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_chat_service_proto_msgTypes[10] + mi := &file_chat_v1_chat_service_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1131,7 +1634,7 @@ func (x *ChatId) String() string { func (*ChatId) ProtoMessage() {} func (x *ChatId) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_chat_service_proto_msgTypes[10] + mi := &file_chat_v1_chat_service_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1144,7 +1647,7 @@ func (x *ChatId) ProtoReflect() protoreflect.Message { // Deprecated: Use ChatId.ProtoReflect.Descriptor instead. func (*ChatId) Descriptor() ([]byte, []int) { - return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{10} + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{17} } func (x *ChatId) GetValue() []byte { @@ -1165,7 +1668,7 @@ type ChatMessageId struct { func (x *ChatMessageId) Reset() { *x = ChatMessageId{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_chat_service_proto_msgTypes[11] + mi := &file_chat_v1_chat_service_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1178,7 +1681,7 @@ func (x *ChatMessageId) String() string { func (*ChatMessageId) ProtoMessage() {} func (x *ChatMessageId) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_chat_service_proto_msgTypes[11] + mi := &file_chat_v1_chat_service_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1191,7 +1694,7 @@ func (x *ChatMessageId) ProtoReflect() protoreflect.Message { // Deprecated: Use ChatMessageId.ProtoReflect.Descriptor instead. func (*ChatMessageId) Descriptor() ([]byte, []int) { - return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{11} + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{18} } func (x *ChatMessageId) GetValue() []byte { @@ -1201,6 +1704,54 @@ func (x *ChatMessageId) GetValue() []byte { return nil } +type ChatMemberId struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // todo: Public key for now + Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *ChatMemberId) Reset() { + *x = ChatMemberId{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v1_chat_service_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChatMemberId) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatMemberId) ProtoMessage() {} + +func (x *ChatMemberId) ProtoReflect() protoreflect.Message { + mi := &file_chat_v1_chat_service_proto_msgTypes[19] + 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 ChatMemberId.ProtoReflect.Descriptor instead. +func (*ChatMemberId) Descriptor() ([]byte, []int) { + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{19} +} + +func (x *ChatMemberId) GetValue() []byte { + if x != nil { + return x.Value + } + return nil +} + type Pointer struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1208,12 +1759,13 @@ type Pointer struct { Kind Pointer_Kind `protobuf:"varint,1,opt,name=kind,proto3,enum=code.chat.v1.Pointer_Kind" json:"kind,omitempty"` Value *ChatMessageId `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + User *ChatMemberId `protobuf:"bytes,3,opt,name=user,proto3" json:"user,omitempty"` } func (x *Pointer) Reset() { *x = Pointer{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_chat_service_proto_msgTypes[12] + mi := &file_chat_v1_chat_service_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1226,7 +1778,7 @@ func (x *Pointer) String() string { func (*Pointer) ProtoMessage() {} func (x *Pointer) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_chat_service_proto_msgTypes[12] + mi := &file_chat_v1_chat_service_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1239,7 +1791,7 @@ func (x *Pointer) ProtoReflect() protoreflect.Message { // Deprecated: Use Pointer.ProtoReflect.Descriptor instead. func (*Pointer) Descriptor() ([]byte, []int) { - return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{12} + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{20} } func (x *Pointer) GetKind() Pointer_Kind { @@ -1256,6 +1808,13 @@ func (x *Pointer) GetValue() *ChatMessageId { return nil } +func (x *Pointer) GetUser() *ChatMemberId { + if x != nil { + return x.User + } + return nil +} + type ChatMetadata struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1293,7 +1852,7 @@ type ChatMetadata struct { func (x *ChatMetadata) Reset() { *x = ChatMetadata{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_chat_service_proto_msgTypes[13] + mi := &file_chat_v1_chat_service_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1306,7 +1865,7 @@ func (x *ChatMetadata) String() string { func (*ChatMetadata) ProtoMessage() {} func (x *ChatMetadata) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_chat_service_proto_msgTypes[13] + mi := &file_chat_v1_chat_service_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1319,7 +1878,7 @@ func (x *ChatMetadata) ProtoReflect() protoreflect.Message { // Deprecated: Use ChatMetadata.ProtoReflect.Descriptor instead. func (*ChatMetadata) Descriptor() ([]byte, []int) { - return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{13} + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{21} } func (x *ChatMetadata) GetChatId() *ChatId { @@ -1336,7 +1895,7 @@ func (m *ChatMetadata) GetTitle() isChatMetadata_Title { return nil } -func (x *ChatMetadata) GetLocalized() *LocalizedContent { +func (x *ChatMetadata) GetLocalized() *ServerLocalizedContent { if x, ok := x.GetTitle().(*ChatMetadata_Localized); ok { return x.Localized } @@ -1411,7 +1970,7 @@ type isChatMetadata_Title interface { } type ChatMetadata_Localized struct { - Localized *LocalizedContent `protobuf:"bytes,2,opt,name=localized,proto3,oneof"` + Localized *ServerLocalizedContent `protobuf:"bytes,2,opt,name=localized,proto3,oneof"` } type ChatMetadata_Domain struct { @@ -1434,13 +1993,14 @@ type ChatMessage struct { // Ordered message content. A message may have more than one piece of content. Content []*Content `protobuf:"bytes,3,rep,name=content,proto3" json:"content,omitempty"` // Cursor value for this message for reference in subsequent GetMessagesRequest - Cursor *Cursor `protobuf:"bytes,4,opt,name=cursor,proto3" json:"cursor,omitempty"` + Cursor *Cursor `protobuf:"bytes,4,opt,name=cursor,proto3" json:"cursor,omitempty"` + Sender *ChatMemberId `protobuf:"bytes,5,opt,name=sender,proto3" json:"sender,omitempty"` } func (x *ChatMessage) Reset() { *x = ChatMessage{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_chat_service_proto_msgTypes[14] + mi := &file_chat_v1_chat_service_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1453,7 +2013,7 @@ func (x *ChatMessage) String() string { func (*ChatMessage) ProtoMessage() {} func (x *ChatMessage) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_chat_service_proto_msgTypes[14] + mi := &file_chat_v1_chat_service_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1466,7 +2026,7 @@ func (x *ChatMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use ChatMessage.ProtoReflect.Descriptor instead. func (*ChatMessage) Descriptor() ([]byte, []int) { - return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{14} + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{22} } func (x *ChatMessage) GetMessageId() *ChatMessageId { @@ -1497,6 +2057,13 @@ func (x *ChatMessage) GetCursor() *Cursor { return nil } +func (x *ChatMessage) GetSender() *ChatMemberId { + if x != nil { + return x.Sender + } + return nil +} + type Content struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1504,16 +2071,17 @@ type Content struct { // Types that are assignable to Type: // - // *Content_Localized + // *Content_ServerLocalized // *Content_ExchangeData // *Content_NaclBox + // *Content_UserText Type isContent_Type `protobuf_oneof:"type"` } func (x *Content) Reset() { *x = Content{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_chat_service_proto_msgTypes[15] + mi := &file_chat_v1_chat_service_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1526,7 +2094,7 @@ func (x *Content) String() string { func (*Content) ProtoMessage() {} func (x *Content) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_chat_service_proto_msgTypes[15] + mi := &file_chat_v1_chat_service_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1539,7 +2107,7 @@ func (x *Content) ProtoReflect() protoreflect.Message { // Deprecated: Use Content.ProtoReflect.Descriptor instead. func (*Content) Descriptor() ([]byte, []int) { - return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{15} + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{23} } func (m *Content) GetType() isContent_Type { @@ -1549,9 +2117,9 @@ func (m *Content) GetType() isContent_Type { return nil } -func (x *Content) GetLocalized() *LocalizedContent { - if x, ok := x.GetType().(*Content_Localized); ok { - return x.Localized +func (x *Content) GetServerLocalized() *ServerLocalizedContent { + if x, ok := x.GetType().(*Content_ServerLocalized); ok { + return x.ServerLocalized } return nil } @@ -1570,12 +2138,19 @@ func (x *Content) GetNaclBox() *NaclBoxEncryptedContent { return nil } +func (x *Content) GetUserText() *UserTextContent { + if x, ok := x.GetType().(*Content_UserText); ok { + return x.UserText + } + return nil +} + type isContent_Type interface { isContent_Type() } -type Content_Localized struct { - Localized *LocalizedContent `protobuf:"bytes,1,opt,name=localized,proto3,oneof"` +type Content_ServerLocalized struct { + ServerLocalized *ServerLocalizedContent `protobuf:"bytes,1,opt,name=server_localized,json=serverLocalized,proto3,oneof"` } type Content_ExchangeData struct { @@ -1586,13 +2161,19 @@ type Content_NaclBox struct { NaclBox *NaclBoxEncryptedContent `protobuf:"bytes,3,opt,name=nacl_box,json=naclBox,proto3,oneof"` } -func (*Content_Localized) isContent_Type() {} +type Content_UserText struct { + UserText *UserTextContent `protobuf:"bytes,4,opt,name=user_text,json=userText,proto3,oneof"` +} + +func (*Content_ServerLocalized) isContent_Type() {} func (*Content_ExchangeData) isContent_Type() {} func (*Content_NaclBox) isContent_Type() {} -type LocalizedContent struct { +func (*Content_UserText) isContent_Type() {} + +type ServerLocalizedContent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -1602,23 +2183,23 @@ type LocalizedContent struct { KeyOrText string `protobuf:"bytes,1,opt,name=key_or_text,json=keyOrText,proto3" json:"key_or_text,omitempty"` } -func (x *LocalizedContent) Reset() { - *x = LocalizedContent{} +func (x *ServerLocalizedContent) Reset() { + *x = ServerLocalizedContent{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_chat_service_proto_msgTypes[16] + mi := &file_chat_v1_chat_service_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } } -func (x *LocalizedContent) String() string { +func (x *ServerLocalizedContent) String() string { return protoimpl.X.MessageStringOf(x) } -func (*LocalizedContent) ProtoMessage() {} +func (*ServerLocalizedContent) ProtoMessage() {} -func (x *LocalizedContent) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_chat_service_proto_msgTypes[16] +func (x *ServerLocalizedContent) ProtoReflect() protoreflect.Message { + mi := &file_chat_v1_chat_service_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1629,12 +2210,12 @@ func (x *LocalizedContent) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use LocalizedContent.ProtoReflect.Descriptor instead. -func (*LocalizedContent) Descriptor() ([]byte, []int) { - return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{16} +// Deprecated: Use ServerLocalizedContent.ProtoReflect.Descriptor instead. +func (*ServerLocalizedContent) Descriptor() ([]byte, []int) { + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{24} } -func (x *LocalizedContent) GetKeyOrText() string { +func (x *ServerLocalizedContent) GetKeyOrText() string { if x != nil { return x.KeyOrText } @@ -1657,7 +2238,7 @@ type ExchangeDataContent struct { func (x *ExchangeDataContent) Reset() { *x = ExchangeDataContent{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_chat_service_proto_msgTypes[17] + mi := &file_chat_v1_chat_service_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1670,7 +2251,7 @@ func (x *ExchangeDataContent) String() string { func (*ExchangeDataContent) ProtoMessage() {} func (x *ExchangeDataContent) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_chat_service_proto_msgTypes[17] + mi := &file_chat_v1_chat_service_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1683,7 +2264,7 @@ func (x *ExchangeDataContent) ProtoReflect() protoreflect.Message { // Deprecated: Use ExchangeDataContent.ProtoReflect.Descriptor instead. func (*ExchangeDataContent) Descriptor() ([]byte, []int) { - return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{17} + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{25} } func (x *ExchangeDataContent) GetVerb() ExchangeDataContent_Verb { @@ -1743,7 +2324,7 @@ type NaclBoxEncryptedContent struct { func (x *NaclBoxEncryptedContent) Reset() { *x = NaclBoxEncryptedContent{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_chat_service_proto_msgTypes[18] + mi := &file_chat_v1_chat_service_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1756,7 +2337,7 @@ func (x *NaclBoxEncryptedContent) String() string { func (*NaclBoxEncryptedContent) ProtoMessage() {} func (x *NaclBoxEncryptedContent) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_chat_service_proto_msgTypes[18] + mi := &file_chat_v1_chat_service_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1769,7 +2350,7 @@ func (x *NaclBoxEncryptedContent) ProtoReflect() protoreflect.Message { // Deprecated: Use NaclBoxEncryptedContent.ProtoReflect.Descriptor instead. func (*NaclBoxEncryptedContent) Descriptor() ([]byte, []int) { - return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{18} + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{26} } func (x *NaclBoxEncryptedContent) GetPeerPublicKey() *v1.SolanaAccountId { @@ -1793,6 +2374,53 @@ func (x *NaclBoxEncryptedContent) GetEncryptedPayload() []byte { return nil } +type UserTextContent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Text string `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"` +} + +func (x *UserTextContent) Reset() { + *x = UserTextContent{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v1_chat_service_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *UserTextContent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UserTextContent) ProtoMessage() {} + +func (x *UserTextContent) ProtoReflect() protoreflect.Message { + mi := &file_chat_v1_chat_service_proto_msgTypes[27] + 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 UserTextContent.ProtoReflect.Descriptor instead. +func (*UserTextContent) Descriptor() ([]byte, []int) { + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{27} +} + +func (x *UserTextContent) GetText() string { + if x != nil { + return x.Text + } + return "" +} + // Opaque cursor used across paged APIs. Underlying bytes may change as paging // strategies evolve. type Cursor struct { @@ -1806,7 +2434,7 @@ type Cursor struct { func (x *Cursor) Reset() { *x = Cursor{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_chat_service_proto_msgTypes[19] + mi := &file_chat_v1_chat_service_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1819,7 +2447,7 @@ func (x *Cursor) String() string { func (*Cursor) ProtoMessage() {} func (x *Cursor) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_chat_service_proto_msgTypes[19] + mi := &file_chat_v1_chat_service_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1832,7 +2460,7 @@ func (x *Cursor) ProtoReflect() protoreflect.Message { // Deprecated: Use Cursor.ProtoReflect.Descriptor instead. func (*Cursor) Descriptor() ([]byte, []int) { - return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{19} + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{28} } func (x *Cursor) GetValue() []byte { @@ -2004,166 +2632,273 @@ var file_chat_v1_chat_service_proto_rawDesc = []byte{ 0x3a, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x55, 0x4e, - 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x10, 0x02, 0x22, 0x2b, 0x0a, 0x06, 0x43, - 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x20, 0x18, - 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x32, 0x0a, 0x0d, 0x43, 0x68, 0x61, 0x74, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, - 0x04, 0x10, 0x20, 0x18, 0x40, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x97, 0x01, 0x0a, - 0x07, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x2e, 0x4b, 0x69, - 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x3d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x1d, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, - 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, - 0x52, 0x45, 0x41, 0x44, 0x10, 0x01, 0x22, 0xf7, 0x03, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, - 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, - 0x49, 0x64, 0x12, 0x3e, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, - 0x65, 0x64, 0x12, 0x30, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x64, 0x6f, - 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x38, 0x0a, 0x0c, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x52, 0x0b, 0x72, 0x65, 0x61, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x1d, - 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x19, 0x0a, - 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x73, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x12, 0x19, 0x0a, - 0x08, 0x63, 0x61, 0x6e, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x63, 0x61, 0x6e, 0x4d, 0x75, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x6e, 0x5f, - 0x75, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0e, 0x63, 0x61, 0x6e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, - 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, - 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x0b, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, - 0x42, 0x0e, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, - 0x22, 0xfa, 0x01, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x46, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, - 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x02, 0x74, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x02, 0x74, 0x73, - 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, - 0x01, 0x04, 0x08, 0x01, 0x10, 0x0a, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, - 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xe6, 0x01, - 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x3e, 0x0a, 0x09, 0x6c, 0x6f, 0x63, - 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x6f, 0x63, 0x61, - 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, - 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x0d, 0x65, 0x78, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, - 0x61, 0x74, 0x61, 0x12, 0x42, 0x0a, 0x08, 0x6e, 0x61, 0x63, 0x6c, 0x5f, 0x62, 0x6f, 0x78, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, - 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, - 0x6e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, - 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x40, 0x0a, 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, - 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x0b, 0x6b, 0x65, - 0x79, 0x5f, 0x6f, 0x72, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x09, 0x6b, - 0x65, 0x79, 0x4f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x22, 0x95, 0x03, 0x0a, 0x13, 0x45, 0x78, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x12, 0x3a, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, 0x12, 0x39, 0x0a, 0x05, - 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, - 0x52, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, - 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, - 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x57, 0x69, 0x74, 0x68, 0x6f, - 0x75, 0x74, 0x52, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, - 0x6c, 0x22, 0xa4, 0x01, 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, - 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x47, 0x41, 0x56, 0x45, 0x10, - 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x10, 0x02, 0x12, - 0x0c, 0x0a, 0x08, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x45, 0x57, 0x10, 0x03, 0x12, 0x0d, 0x0a, - 0x09, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, - 0x53, 0x45, 0x4e, 0x54, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, - 0x45, 0x44, 0x10, 0x06, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, 0x4e, 0x54, 0x10, 0x07, 0x12, - 0x08, 0x0a, 0x04, 0x50, 0x41, 0x49, 0x44, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x55, 0x52, - 0x43, 0x48, 0x41, 0x53, 0x45, 0x44, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x45, 0x43, 0x45, - 0x49, 0x56, 0x45, 0x44, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0a, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x45, - 0x4e, 0x54, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0b, 0x42, 0x16, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, - 0x22, 0xcc, 0x01, 0x0a, 0x17, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, - 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x0f, - 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x0d, 0x70, 0x65, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, - 0x79, 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, - 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x18, 0x18, 0x18, 0x52, 0x05, 0x6e, - 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, - 0x64, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, - 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x10, 0x65, - 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, - 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, - 0x04, 0x10, 0x08, 0x18, 0x40, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x32, 0xc8, 0x03, 0x0a, - 0x04, 0x43, 0x68, 0x61, 0x74, 0x12, 0x49, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, - 0x73, 0x12, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x52, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, - 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, - 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, - 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x55, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x53, + 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x10, 0x02, 0x22, 0xd8, 0x01, 0x0a, 0x13, + 0x4f, 0x70, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x41, + 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, + 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, + 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x7b, 0x0a, 0x0f, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x35, 0x0a, 0x08, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, + 0x12, 0x31, 0x0a, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x73, 0x22, 0x5c, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x44, 0x0a, 0x06, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x0d, 0xba, 0xe9, 0xc0, 0x03, + 0x08, 0x92, 0x01, 0x05, 0x08, 0x01, 0x10, 0x80, 0x08, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x73, 0x22, 0xa0, 0x01, 0x0a, 0x17, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x44, 0x0a, + 0x0b, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x12, 0x30, 0x0a, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x6e, 0x67, 0x48, 0x00, 0x52, + 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, + 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x99, 0x01, 0x0a, 0x18, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, + 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x42, 0x61, 0x74, 0x63, 0x68, 0x48, 0x00, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, + 0x30, 0x0a, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x04, 0x70, 0x69, 0x6e, + 0x67, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, + 0x22, 0x96, 0x02, 0x0a, 0x12, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, + 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, + 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, + 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x01, + 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x9e, 0x01, 0x0a, 0x13, 0x53, 0x65, + 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x40, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x10, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x68, + 0x61, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x20, 0x18, 0x20, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x32, 0x0a, 0x0d, 0x43, 0x68, 0x61, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, + 0x10, 0x20, 0x18, 0x40, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x31, 0x0a, 0x0c, 0x43, + 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, + 0x06, 0x7a, 0x04, 0x10, 0x20, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xe0, + 0x01, 0x0a, 0x07, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x04, 0x6b, 0x69, + 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x2e, + 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x3d, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, + 0x10, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2e, 0x0a, 0x04, 0x75, 0x73, 0x65, + 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x49, 0x64, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x22, 0x36, 0x0a, 0x04, 0x4b, 0x69, 0x6e, + 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, + 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x4c, 0x49, + 0x56, 0x45, 0x52, 0x45, 0x44, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, + 0x03, 0x22, 0xfd, 0x03, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x44, 0x0a, + 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, + 0x7a, 0x65, 0x64, 0x12, 0x30, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x64, + 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x38, 0x0a, 0x0c, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x52, 0x0b, 0x72, 0x65, 0x61, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, + 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x19, + 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, + 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x12, 0x19, + 0x0a, 0x08, 0x63, 0x61, 0x6e, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x07, 0x63, 0x61, 0x6e, 0x4d, 0x75, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x6e, + 0x5f, 0x75, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0e, 0x63, 0x61, 0x6e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x62, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, + 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, + 0x64, 0x42, 0x0e, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, + 0x01, 0x22, 0xae, 0x02, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x46, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x02, 0x74, 0x73, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, + 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x02, 0x74, + 0x73, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, + 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x0a, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x32, + 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, + 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, + 0x65, 0x72, 0x22, 0xb7, 0x02, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x51, + 0x0a, 0x10, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, + 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4c, 0x6f, + 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x0f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, + 0x64, 0x12, 0x48, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x65, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x42, 0x0a, 0x08, 0x6e, + 0x61, 0x63, 0x6c, 0x5f, 0x62, 0x6f, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x63, + 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x6e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x12, + 0x3c, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x48, 0x00, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x54, 0x65, 0x78, 0x74, 0x42, 0x0d, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x46, 0x0a, 0x16, + 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x72, + 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, + 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x4f, 0x72, + 0x54, 0x65, 0x78, 0x74, 0x22, 0x95, 0x03, 0x0a, 0x13, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x3a, 0x0a, 0x04, + 0x76, 0x65, 0x72, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x65, + 0x72, 0x62, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, 0x12, 0x39, 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x05, 0x65, 0x78, + 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x52, 0x61, + 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x22, 0xa4, 0x01, + 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, + 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x47, 0x41, 0x56, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, + 0x08, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x57, + 0x49, 0x54, 0x48, 0x44, 0x52, 0x45, 0x57, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, + 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, + 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x45, 0x44, 0x10, 0x06, + 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, 0x4e, 0x54, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x50, + 0x41, 0x49, 0x44, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x55, 0x52, 0x43, 0x48, 0x41, 0x53, + 0x45, 0x44, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, + 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0a, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x45, 0x4e, 0x54, 0x5f, 0x54, + 0x49, 0x50, 0x10, 0x0b, 0x42, 0x16, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x5f, 0x64, 0x61, 0x74, 0x61, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xcc, 0x01, 0x0a, + 0x17, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, + 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x0f, 0x70, 0x65, 0x65, 0x72, + 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, + 0x70, 0x65, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, + 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, + 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x18, 0x18, 0x18, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, + 0x12, 0x39, 0x0a, 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, + 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0c, 0xba, 0xe9, 0xc0, + 0x03, 0x07, 0x7a, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x10, 0x65, 0x6e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x33, 0x0a, 0x0f, 0x55, + 0x73, 0x65, 0x72, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x20, + 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, + 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, + 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, + 0x7a, 0x04, 0x10, 0x08, 0x18, 0x40, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x32, 0x83, 0x05, + 0x0a, 0x04, 0x43, 0x68, 0x61, 0x74, 0x12, 0x49, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, + 0x74, 0x73, 0x12, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, + 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x76, 0x61, + 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x14, 0x53, 0x65, 0x74, + 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x31, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, - 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x64, - 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, - 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x68, 0x61, 0x74, - 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x68, 0x61, 0x74, 0xa2, 0x02, 0x09, 0x43, 0x50, 0x42, 0x43, 0x68, - 0x61, 0x74, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, + 0x52, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, + 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, + 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x5a, 0x44, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, + 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, + 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2f, 0x76, 0x31, 0x3b, + 0x63, 0x68, 0x61, 0x74, 0xa2, 0x02, 0x09, 0x43, 0x50, 0x42, 0x43, 0x68, 0x61, 0x74, 0x56, 0x31, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2178,8 +2913,8 @@ func file_chat_v1_chat_service_proto_rawDescGZIP() []byte { return file_chat_v1_chat_service_proto_rawDescData } -var file_chat_v1_chat_service_proto_enumTypes = make([]protoimpl.EnumInfo, 9) -var file_chat_v1_chat_service_proto_msgTypes = make([]protoimpl.MessageInfo, 20) +var file_chat_v1_chat_service_proto_enumTypes = make([]protoimpl.EnumInfo, 10) +var file_chat_v1_chat_service_proto_msgTypes = make([]protoimpl.MessageInfo, 29) var file_chat_v1_chat_service_proto_goTypes = []interface{}{ (GetChatsRequest_Direction)(0), // 0: code.chat.v1.GetChatsRequest.Direction (GetChatsResponse_Result)(0), // 1: code.chat.v1.GetChatsResponse.Result @@ -2188,95 +2923,130 @@ var file_chat_v1_chat_service_proto_goTypes = []interface{}{ (AdvancePointerResponse_Result)(0), // 4: code.chat.v1.AdvancePointerResponse.Result (SetMuteStateResponse_Result)(0), // 5: code.chat.v1.SetMuteStateResponse.Result (SetSubscriptionStateResponse_Result)(0), // 6: code.chat.v1.SetSubscriptionStateResponse.Result - (Pointer_Kind)(0), // 7: code.chat.v1.Pointer.Kind - (ExchangeDataContent_Verb)(0), // 8: code.chat.v1.ExchangeDataContent.Verb - (*GetChatsRequest)(nil), // 9: code.chat.v1.GetChatsRequest - (*GetChatsResponse)(nil), // 10: code.chat.v1.GetChatsResponse - (*GetMessagesRequest)(nil), // 11: code.chat.v1.GetMessagesRequest - (*GetMessagesResponse)(nil), // 12: code.chat.v1.GetMessagesResponse - (*AdvancePointerRequest)(nil), // 13: code.chat.v1.AdvancePointerRequest - (*AdvancePointerResponse)(nil), // 14: code.chat.v1.AdvancePointerResponse - (*SetMuteStateRequest)(nil), // 15: code.chat.v1.SetMuteStateRequest - (*SetMuteStateResponse)(nil), // 16: code.chat.v1.SetMuteStateResponse - (*SetSubscriptionStateRequest)(nil), // 17: code.chat.v1.SetSubscriptionStateRequest - (*SetSubscriptionStateResponse)(nil), // 18: code.chat.v1.SetSubscriptionStateResponse - (*ChatId)(nil), // 19: code.chat.v1.ChatId - (*ChatMessageId)(nil), // 20: code.chat.v1.ChatMessageId - (*Pointer)(nil), // 21: code.chat.v1.Pointer - (*ChatMetadata)(nil), // 22: code.chat.v1.ChatMetadata - (*ChatMessage)(nil), // 23: code.chat.v1.ChatMessage - (*Content)(nil), // 24: code.chat.v1.Content - (*LocalizedContent)(nil), // 25: code.chat.v1.LocalizedContent - (*ExchangeDataContent)(nil), // 26: code.chat.v1.ExchangeDataContent - (*NaclBoxEncryptedContent)(nil), // 27: code.chat.v1.NaclBoxEncryptedContent - (*Cursor)(nil), // 28: code.chat.v1.Cursor - (*v1.SolanaAccountId)(nil), // 29: code.common.v1.SolanaAccountId - (*v1.Signature)(nil), // 30: code.common.v1.Signature - (*v1.Domain)(nil), // 31: code.common.v1.Domain - (*timestamppb.Timestamp)(nil), // 32: google.protobuf.Timestamp - (*v2.ExchangeData)(nil), // 33: code.transaction.v2.ExchangeData - (*v2.ExchangeDataWithoutRate)(nil), // 34: code.transaction.v2.ExchangeDataWithoutRate + (SendMessageResponse_Result)(0), // 7: code.chat.v1.SendMessageResponse.Result + (Pointer_Kind)(0), // 8: code.chat.v1.Pointer.Kind + (ExchangeDataContent_Verb)(0), // 9: code.chat.v1.ExchangeDataContent.Verb + (*GetChatsRequest)(nil), // 10: code.chat.v1.GetChatsRequest + (*GetChatsResponse)(nil), // 11: code.chat.v1.GetChatsResponse + (*GetMessagesRequest)(nil), // 12: code.chat.v1.GetMessagesRequest + (*GetMessagesResponse)(nil), // 13: code.chat.v1.GetMessagesResponse + (*AdvancePointerRequest)(nil), // 14: code.chat.v1.AdvancePointerRequest + (*AdvancePointerResponse)(nil), // 15: code.chat.v1.AdvancePointerResponse + (*SetMuteStateRequest)(nil), // 16: code.chat.v1.SetMuteStateRequest + (*SetMuteStateResponse)(nil), // 17: code.chat.v1.SetMuteStateResponse + (*SetSubscriptionStateRequest)(nil), // 18: code.chat.v1.SetSubscriptionStateRequest + (*SetSubscriptionStateResponse)(nil), // 19: code.chat.v1.SetSubscriptionStateResponse + (*OpenChatEventStream)(nil), // 20: code.chat.v1.OpenChatEventStream + (*ChatStreamEvent)(nil), // 21: code.chat.v1.ChatStreamEvent + (*ChatStreamEventBatch)(nil), // 22: code.chat.v1.ChatStreamEventBatch + (*StreamChatEventsRequest)(nil), // 23: code.chat.v1.StreamChatEventsRequest + (*StreamChatEventsResponse)(nil), // 24: code.chat.v1.StreamChatEventsResponse + (*SendMessageRequest)(nil), // 25: code.chat.v1.SendMessageRequest + (*SendMessageResponse)(nil), // 26: code.chat.v1.SendMessageResponse + (*ChatId)(nil), // 27: code.chat.v1.ChatId + (*ChatMessageId)(nil), // 28: code.chat.v1.ChatMessageId + (*ChatMemberId)(nil), // 29: code.chat.v1.ChatMemberId + (*Pointer)(nil), // 30: code.chat.v1.Pointer + (*ChatMetadata)(nil), // 31: code.chat.v1.ChatMetadata + (*ChatMessage)(nil), // 32: code.chat.v1.ChatMessage + (*Content)(nil), // 33: code.chat.v1.Content + (*ServerLocalizedContent)(nil), // 34: code.chat.v1.ServerLocalizedContent + (*ExchangeDataContent)(nil), // 35: code.chat.v1.ExchangeDataContent + (*NaclBoxEncryptedContent)(nil), // 36: code.chat.v1.NaclBoxEncryptedContent + (*UserTextContent)(nil), // 37: code.chat.v1.UserTextContent + (*Cursor)(nil), // 38: code.chat.v1.Cursor + (*v1.SolanaAccountId)(nil), // 39: code.common.v1.SolanaAccountId + (*v1.Signature)(nil), // 40: code.common.v1.Signature + (*v1.ClientPong)(nil), // 41: code.common.v1.ClientPong + (*v1.ServerPing)(nil), // 42: code.common.v1.ServerPing + (*v1.Domain)(nil), // 43: code.common.v1.Domain + (*timestamppb.Timestamp)(nil), // 44: google.protobuf.Timestamp + (*v2.ExchangeData)(nil), // 45: code.transaction.v2.ExchangeData + (*v2.ExchangeDataWithoutRate)(nil), // 46: code.transaction.v2.ExchangeDataWithoutRate } var file_chat_v1_chat_service_proto_depIdxs = []int32{ - 29, // 0: code.chat.v1.GetChatsRequest.owner:type_name -> code.common.v1.SolanaAccountId - 30, // 1: code.chat.v1.GetChatsRequest.signature:type_name -> code.common.v1.Signature - 28, // 2: code.chat.v1.GetChatsRequest.cursor:type_name -> code.chat.v1.Cursor + 39, // 0: code.chat.v1.GetChatsRequest.owner:type_name -> code.common.v1.SolanaAccountId + 40, // 1: code.chat.v1.GetChatsRequest.signature:type_name -> code.common.v1.Signature + 38, // 2: code.chat.v1.GetChatsRequest.cursor:type_name -> code.chat.v1.Cursor 0, // 3: code.chat.v1.GetChatsRequest.direction:type_name -> code.chat.v1.GetChatsRequest.Direction 1, // 4: code.chat.v1.GetChatsResponse.result:type_name -> code.chat.v1.GetChatsResponse.Result - 22, // 5: code.chat.v1.GetChatsResponse.chats:type_name -> code.chat.v1.ChatMetadata - 19, // 6: code.chat.v1.GetMessagesRequest.chat_id:type_name -> code.chat.v1.ChatId - 29, // 7: code.chat.v1.GetMessagesRequest.owner:type_name -> code.common.v1.SolanaAccountId - 30, // 8: code.chat.v1.GetMessagesRequest.signature:type_name -> code.common.v1.Signature - 28, // 9: code.chat.v1.GetMessagesRequest.cursor:type_name -> code.chat.v1.Cursor + 31, // 5: code.chat.v1.GetChatsResponse.chats:type_name -> code.chat.v1.ChatMetadata + 27, // 6: code.chat.v1.GetMessagesRequest.chat_id:type_name -> code.chat.v1.ChatId + 39, // 7: code.chat.v1.GetMessagesRequest.owner:type_name -> code.common.v1.SolanaAccountId + 40, // 8: code.chat.v1.GetMessagesRequest.signature:type_name -> code.common.v1.Signature + 38, // 9: code.chat.v1.GetMessagesRequest.cursor:type_name -> code.chat.v1.Cursor 2, // 10: code.chat.v1.GetMessagesRequest.direction:type_name -> code.chat.v1.GetMessagesRequest.Direction 3, // 11: code.chat.v1.GetMessagesResponse.result:type_name -> code.chat.v1.GetMessagesResponse.Result - 23, // 12: code.chat.v1.GetMessagesResponse.messages:type_name -> code.chat.v1.ChatMessage - 19, // 13: code.chat.v1.AdvancePointerRequest.chat_id:type_name -> code.chat.v1.ChatId - 21, // 14: code.chat.v1.AdvancePointerRequest.pointer:type_name -> code.chat.v1.Pointer - 29, // 15: code.chat.v1.AdvancePointerRequest.owner:type_name -> code.common.v1.SolanaAccountId - 30, // 16: code.chat.v1.AdvancePointerRequest.signature:type_name -> code.common.v1.Signature + 32, // 12: code.chat.v1.GetMessagesResponse.messages:type_name -> code.chat.v1.ChatMessage + 27, // 13: code.chat.v1.AdvancePointerRequest.chat_id:type_name -> code.chat.v1.ChatId + 30, // 14: code.chat.v1.AdvancePointerRequest.pointer:type_name -> code.chat.v1.Pointer + 39, // 15: code.chat.v1.AdvancePointerRequest.owner:type_name -> code.common.v1.SolanaAccountId + 40, // 16: code.chat.v1.AdvancePointerRequest.signature:type_name -> code.common.v1.Signature 4, // 17: code.chat.v1.AdvancePointerResponse.result:type_name -> code.chat.v1.AdvancePointerResponse.Result - 19, // 18: code.chat.v1.SetMuteStateRequest.chat_id:type_name -> code.chat.v1.ChatId - 29, // 19: code.chat.v1.SetMuteStateRequest.owner:type_name -> code.common.v1.SolanaAccountId - 30, // 20: code.chat.v1.SetMuteStateRequest.signature:type_name -> code.common.v1.Signature + 27, // 18: code.chat.v1.SetMuteStateRequest.chat_id:type_name -> code.chat.v1.ChatId + 39, // 19: code.chat.v1.SetMuteStateRequest.owner:type_name -> code.common.v1.SolanaAccountId + 40, // 20: code.chat.v1.SetMuteStateRequest.signature:type_name -> code.common.v1.Signature 5, // 21: code.chat.v1.SetMuteStateResponse.result:type_name -> code.chat.v1.SetMuteStateResponse.Result - 19, // 22: code.chat.v1.SetSubscriptionStateRequest.chat_id:type_name -> code.chat.v1.ChatId - 29, // 23: code.chat.v1.SetSubscriptionStateRequest.owner:type_name -> code.common.v1.SolanaAccountId - 30, // 24: code.chat.v1.SetSubscriptionStateRequest.signature:type_name -> code.common.v1.Signature + 27, // 22: code.chat.v1.SetSubscriptionStateRequest.chat_id:type_name -> code.chat.v1.ChatId + 39, // 23: code.chat.v1.SetSubscriptionStateRequest.owner:type_name -> code.common.v1.SolanaAccountId + 40, // 24: code.chat.v1.SetSubscriptionStateRequest.signature:type_name -> code.common.v1.Signature 6, // 25: code.chat.v1.SetSubscriptionStateResponse.result:type_name -> code.chat.v1.SetSubscriptionStateResponse.Result - 7, // 26: code.chat.v1.Pointer.kind:type_name -> code.chat.v1.Pointer.Kind - 20, // 27: code.chat.v1.Pointer.value:type_name -> code.chat.v1.ChatMessageId - 19, // 28: code.chat.v1.ChatMetadata.chat_id:type_name -> code.chat.v1.ChatId - 25, // 29: code.chat.v1.ChatMetadata.localized:type_name -> code.chat.v1.LocalizedContent - 31, // 30: code.chat.v1.ChatMetadata.domain:type_name -> code.common.v1.Domain - 21, // 31: code.chat.v1.ChatMetadata.read_pointer:type_name -> code.chat.v1.Pointer - 28, // 32: code.chat.v1.ChatMetadata.cursor:type_name -> code.chat.v1.Cursor - 20, // 33: code.chat.v1.ChatMessage.message_id:type_name -> code.chat.v1.ChatMessageId - 32, // 34: code.chat.v1.ChatMessage.ts:type_name -> google.protobuf.Timestamp - 24, // 35: code.chat.v1.ChatMessage.content:type_name -> code.chat.v1.Content - 28, // 36: code.chat.v1.ChatMessage.cursor:type_name -> code.chat.v1.Cursor - 25, // 37: code.chat.v1.Content.localized:type_name -> code.chat.v1.LocalizedContent - 26, // 38: code.chat.v1.Content.exchange_data:type_name -> code.chat.v1.ExchangeDataContent - 27, // 39: code.chat.v1.Content.nacl_box:type_name -> code.chat.v1.NaclBoxEncryptedContent - 8, // 40: code.chat.v1.ExchangeDataContent.verb:type_name -> code.chat.v1.ExchangeDataContent.Verb - 33, // 41: code.chat.v1.ExchangeDataContent.exact:type_name -> code.transaction.v2.ExchangeData - 34, // 42: code.chat.v1.ExchangeDataContent.partial:type_name -> code.transaction.v2.ExchangeDataWithoutRate - 29, // 43: code.chat.v1.NaclBoxEncryptedContent.peer_public_key:type_name -> code.common.v1.SolanaAccountId - 9, // 44: code.chat.v1.Chat.GetChats:input_type -> code.chat.v1.GetChatsRequest - 11, // 45: code.chat.v1.Chat.GetMessages:input_type -> code.chat.v1.GetMessagesRequest - 13, // 46: code.chat.v1.Chat.AdvancePointer:input_type -> code.chat.v1.AdvancePointerRequest - 15, // 47: code.chat.v1.Chat.SetMuteState:input_type -> code.chat.v1.SetMuteStateRequest - 17, // 48: code.chat.v1.Chat.SetSubscriptionState:input_type -> code.chat.v1.SetSubscriptionStateRequest - 10, // 49: code.chat.v1.Chat.GetChats:output_type -> code.chat.v1.GetChatsResponse - 12, // 50: code.chat.v1.Chat.GetMessages:output_type -> code.chat.v1.GetMessagesResponse - 14, // 51: code.chat.v1.Chat.AdvancePointer:output_type -> code.chat.v1.AdvancePointerResponse - 16, // 52: code.chat.v1.Chat.SetMuteState:output_type -> code.chat.v1.SetMuteStateResponse - 18, // 53: code.chat.v1.Chat.SetSubscriptionState:output_type -> code.chat.v1.SetSubscriptionStateResponse - 49, // [49:54] is the sub-list for method output_type - 44, // [44:49] is the sub-list for method input_type - 44, // [44:44] is the sub-list for extension type_name - 44, // [44:44] is the sub-list for extension extendee - 0, // [0:44] is the sub-list for field type_name + 27, // 26: code.chat.v1.OpenChatEventStream.chat_id:type_name -> code.chat.v1.ChatId + 39, // 27: code.chat.v1.OpenChatEventStream.owner:type_name -> code.common.v1.SolanaAccountId + 40, // 28: code.chat.v1.OpenChatEventStream.signature:type_name -> code.common.v1.Signature + 32, // 29: code.chat.v1.ChatStreamEvent.messages:type_name -> code.chat.v1.ChatMessage + 30, // 30: code.chat.v1.ChatStreamEvent.pointers:type_name -> code.chat.v1.Pointer + 21, // 31: code.chat.v1.ChatStreamEventBatch.events:type_name -> code.chat.v1.ChatStreamEvent + 20, // 32: code.chat.v1.StreamChatEventsRequest.open_stream:type_name -> code.chat.v1.OpenChatEventStream + 41, // 33: code.chat.v1.StreamChatEventsRequest.pong:type_name -> code.common.v1.ClientPong + 22, // 34: code.chat.v1.StreamChatEventsResponse.events:type_name -> code.chat.v1.ChatStreamEventBatch + 42, // 35: code.chat.v1.StreamChatEventsResponse.ping:type_name -> code.common.v1.ServerPing + 39, // 36: code.chat.v1.SendMessageRequest.owner:type_name -> code.common.v1.SolanaAccountId + 40, // 37: code.chat.v1.SendMessageRequest.signature:type_name -> code.common.v1.Signature + 27, // 38: code.chat.v1.SendMessageRequest.chat_id:type_name -> code.chat.v1.ChatId + 33, // 39: code.chat.v1.SendMessageRequest.content:type_name -> code.chat.v1.Content + 7, // 40: code.chat.v1.SendMessageResponse.result:type_name -> code.chat.v1.SendMessageResponse.Result + 32, // 41: code.chat.v1.SendMessageResponse.message:type_name -> code.chat.v1.ChatMessage + 8, // 42: code.chat.v1.Pointer.kind:type_name -> code.chat.v1.Pointer.Kind + 28, // 43: code.chat.v1.Pointer.value:type_name -> code.chat.v1.ChatMessageId + 29, // 44: code.chat.v1.Pointer.user:type_name -> code.chat.v1.ChatMemberId + 27, // 45: code.chat.v1.ChatMetadata.chat_id:type_name -> code.chat.v1.ChatId + 34, // 46: code.chat.v1.ChatMetadata.localized:type_name -> code.chat.v1.ServerLocalizedContent + 43, // 47: code.chat.v1.ChatMetadata.domain:type_name -> code.common.v1.Domain + 30, // 48: code.chat.v1.ChatMetadata.read_pointer:type_name -> code.chat.v1.Pointer + 38, // 49: code.chat.v1.ChatMetadata.cursor:type_name -> code.chat.v1.Cursor + 28, // 50: code.chat.v1.ChatMessage.message_id:type_name -> code.chat.v1.ChatMessageId + 44, // 51: code.chat.v1.ChatMessage.ts:type_name -> google.protobuf.Timestamp + 33, // 52: code.chat.v1.ChatMessage.content:type_name -> code.chat.v1.Content + 38, // 53: code.chat.v1.ChatMessage.cursor:type_name -> code.chat.v1.Cursor + 29, // 54: code.chat.v1.ChatMessage.sender:type_name -> code.chat.v1.ChatMemberId + 34, // 55: code.chat.v1.Content.server_localized:type_name -> code.chat.v1.ServerLocalizedContent + 35, // 56: code.chat.v1.Content.exchange_data:type_name -> code.chat.v1.ExchangeDataContent + 36, // 57: code.chat.v1.Content.nacl_box:type_name -> code.chat.v1.NaclBoxEncryptedContent + 37, // 58: code.chat.v1.Content.user_text:type_name -> code.chat.v1.UserTextContent + 9, // 59: code.chat.v1.ExchangeDataContent.verb:type_name -> code.chat.v1.ExchangeDataContent.Verb + 45, // 60: code.chat.v1.ExchangeDataContent.exact:type_name -> code.transaction.v2.ExchangeData + 46, // 61: code.chat.v1.ExchangeDataContent.partial:type_name -> code.transaction.v2.ExchangeDataWithoutRate + 39, // 62: code.chat.v1.NaclBoxEncryptedContent.peer_public_key:type_name -> code.common.v1.SolanaAccountId + 10, // 63: code.chat.v1.Chat.GetChats:input_type -> code.chat.v1.GetChatsRequest + 12, // 64: code.chat.v1.Chat.GetMessages:input_type -> code.chat.v1.GetMessagesRequest + 14, // 65: code.chat.v1.Chat.AdvancePointer:input_type -> code.chat.v1.AdvancePointerRequest + 16, // 66: code.chat.v1.Chat.SetMuteState:input_type -> code.chat.v1.SetMuteStateRequest + 18, // 67: code.chat.v1.Chat.SetSubscriptionState:input_type -> code.chat.v1.SetSubscriptionStateRequest + 23, // 68: code.chat.v1.Chat.StreamChatEvents:input_type -> code.chat.v1.StreamChatEventsRequest + 25, // 69: code.chat.v1.Chat.SendMessage:input_type -> code.chat.v1.SendMessageRequest + 11, // 70: code.chat.v1.Chat.GetChats:output_type -> code.chat.v1.GetChatsResponse + 13, // 71: code.chat.v1.Chat.GetMessages:output_type -> code.chat.v1.GetMessagesResponse + 15, // 72: code.chat.v1.Chat.AdvancePointer:output_type -> code.chat.v1.AdvancePointerResponse + 17, // 73: code.chat.v1.Chat.SetMuteState:output_type -> code.chat.v1.SetMuteStateResponse + 19, // 74: code.chat.v1.Chat.SetSubscriptionState:output_type -> code.chat.v1.SetSubscriptionStateResponse + 24, // 75: code.chat.v1.Chat.StreamChatEvents:output_type -> code.chat.v1.StreamChatEventsResponse + 26, // 76: code.chat.v1.Chat.SendMessage:output_type -> code.chat.v1.SendMessageResponse + 70, // [70:77] is the sub-list for method output_type + 63, // [63:70] is the sub-list for method input_type + 63, // [63:63] is the sub-list for extension type_name + 63, // [63:63] is the sub-list for extension extendee + 0, // [0:63] is the sub-list for field type_name } func init() { file_chat_v1_chat_service_proto_init() } @@ -2406,7 +3176,7 @@ func file_chat_v1_chat_service_proto_init() { } } file_chat_v1_chat_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatId); i { + switch v := v.(*OpenChatEventStream); i { case 0: return &v.state case 1: @@ -2418,7 +3188,7 @@ func file_chat_v1_chat_service_proto_init() { } } file_chat_v1_chat_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatMessageId); i { + switch v := v.(*ChatStreamEvent); i { case 0: return &v.state case 1: @@ -2430,7 +3200,7 @@ func file_chat_v1_chat_service_proto_init() { } } file_chat_v1_chat_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Pointer); i { + switch v := v.(*ChatStreamEventBatch); i { case 0: return &v.state case 1: @@ -2442,7 +3212,7 @@ func file_chat_v1_chat_service_proto_init() { } } file_chat_v1_chat_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatMetadata); i { + switch v := v.(*StreamChatEventsRequest); i { case 0: return &v.state case 1: @@ -2454,7 +3224,7 @@ func file_chat_v1_chat_service_proto_init() { } } file_chat_v1_chat_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatMessage); i { + switch v := v.(*StreamChatEventsResponse); i { case 0: return &v.state case 1: @@ -2466,7 +3236,7 @@ func file_chat_v1_chat_service_proto_init() { } } file_chat_v1_chat_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Content); i { + switch v := v.(*SendMessageRequest); i { case 0: return &v.state case 1: @@ -2478,7 +3248,7 @@ func file_chat_v1_chat_service_proto_init() { } } file_chat_v1_chat_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LocalizedContent); i { + switch v := v.(*SendMessageResponse); i { case 0: return &v.state case 1: @@ -2490,7 +3260,7 @@ func file_chat_v1_chat_service_proto_init() { } } file_chat_v1_chat_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExchangeDataContent); i { + switch v := v.(*ChatId); i { case 0: return &v.state case 1: @@ -2502,7 +3272,7 @@ func file_chat_v1_chat_service_proto_init() { } } file_chat_v1_chat_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NaclBoxEncryptedContent); i { + switch v := v.(*ChatMessageId); i { case 0: return &v.state case 1: @@ -2514,6 +3284,114 @@ func file_chat_v1_chat_service_proto_init() { } } file_chat_v1_chat_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChatMemberId); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v1_chat_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Pointer); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v1_chat_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChatMetadata); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v1_chat_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChatMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v1_chat_service_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Content); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v1_chat_service_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ServerLocalizedContent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v1_chat_service_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExchangeDataContent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v1_chat_service_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NaclBoxEncryptedContent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v1_chat_service_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*UserTextContent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v1_chat_service_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Cursor); i { case 0: return &v.state @@ -2527,15 +3405,24 @@ func file_chat_v1_chat_service_proto_init() { } } file_chat_v1_chat_service_proto_msgTypes[13].OneofWrappers = []interface{}{ + (*StreamChatEventsRequest_OpenStream)(nil), + (*StreamChatEventsRequest_Pong)(nil), + } + file_chat_v1_chat_service_proto_msgTypes[14].OneofWrappers = []interface{}{ + (*StreamChatEventsResponse_Events)(nil), + (*StreamChatEventsResponse_Ping)(nil), + } + file_chat_v1_chat_service_proto_msgTypes[21].OneofWrappers = []interface{}{ (*ChatMetadata_Localized)(nil), (*ChatMetadata_Domain)(nil), } - file_chat_v1_chat_service_proto_msgTypes[15].OneofWrappers = []interface{}{ - (*Content_Localized)(nil), + file_chat_v1_chat_service_proto_msgTypes[23].OneofWrappers = []interface{}{ + (*Content_ServerLocalized)(nil), (*Content_ExchangeData)(nil), (*Content_NaclBox)(nil), + (*Content_UserText)(nil), } - file_chat_v1_chat_service_proto_msgTypes[17].OneofWrappers = []interface{}{ + file_chat_v1_chat_service_proto_msgTypes[25].OneofWrappers = []interface{}{ (*ExchangeDataContent_Exact)(nil), (*ExchangeDataContent_Partial)(nil), } @@ -2544,8 +3431,8 @@ func file_chat_v1_chat_service_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_chat_v1_chat_service_proto_rawDesc, - NumEnums: 9, - NumMessages: 20, + NumEnums: 10, + NumMessages: 29, NumExtensions: 0, NumServices: 1, }, diff --git a/generated/go/chat/v1/chat_service.pb.validate.go b/generated/go/chat/v1/chat_service.pb.validate.go index 99e7cc8..c3a623b 100644 --- a/generated/go/chat/v1/chat_service.pb.validate.go +++ b/generated/go/chat/v1/chat_service.pb.validate.go @@ -1052,6 +1052,729 @@ var _ interface { ErrorName() string } = SetSubscriptionStateResponseValidationError{} +// Validate checks the field values on OpenChatEventStream with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *OpenChatEventStream) Validate() error { + if m == nil { + return nil + } + + if m.GetChatId() == nil { + return OpenChatEventStreamValidationError{ + field: "ChatId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetChatId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return OpenChatEventStreamValidationError{ + field: "ChatId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetOwner() == nil { + return OpenChatEventStreamValidationError{ + field: "Owner", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return OpenChatEventStreamValidationError{ + field: "Owner", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetSignature() == nil { + return OpenChatEventStreamValidationError{ + field: "Signature", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return OpenChatEventStreamValidationError{ + field: "Signature", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// OpenChatEventStreamValidationError is the validation error returned by +// OpenChatEventStream.Validate if the designated constraints aren't met. +type OpenChatEventStreamValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e OpenChatEventStreamValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e OpenChatEventStreamValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e OpenChatEventStreamValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e OpenChatEventStreamValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e OpenChatEventStreamValidationError) ErrorName() string { + return "OpenChatEventStreamValidationError" +} + +// Error satisfies the builtin error interface +func (e OpenChatEventStreamValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sOpenChatEventStream.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = OpenChatEventStreamValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = OpenChatEventStreamValidationError{} + +// Validate checks the field values on ChatStreamEvent with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *ChatStreamEvent) Validate() error { + if m == nil { + return nil + } + + for idx, item := range m.GetMessages() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChatStreamEventValidationError{ + field: fmt.Sprintf("Messages[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + for idx, item := range m.GetPointers() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChatStreamEventValidationError{ + field: fmt.Sprintf("Pointers[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// ChatStreamEventValidationError is the validation error returned by +// ChatStreamEvent.Validate if the designated constraints aren't met. +type ChatStreamEventValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ChatStreamEventValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ChatStreamEventValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ChatStreamEventValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ChatStreamEventValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ChatStreamEventValidationError) ErrorName() string { return "ChatStreamEventValidationError" } + +// Error satisfies the builtin error interface +func (e ChatStreamEventValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sChatStreamEvent.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ChatStreamEventValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ChatStreamEventValidationError{} + +// Validate checks the field values on ChatStreamEventBatch with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *ChatStreamEventBatch) Validate() error { + if m == nil { + return nil + } + + if l := len(m.GetEvents()); l < 1 || l > 1024 { + return ChatStreamEventBatchValidationError{ + field: "Events", + reason: "value must contain between 1 and 1024 items, inclusive", + } + } + + for idx, item := range m.GetEvents() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChatStreamEventBatchValidationError{ + field: fmt.Sprintf("Events[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// ChatStreamEventBatchValidationError is the validation error returned by +// ChatStreamEventBatch.Validate if the designated constraints aren't met. +type ChatStreamEventBatchValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ChatStreamEventBatchValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ChatStreamEventBatchValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ChatStreamEventBatchValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ChatStreamEventBatchValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ChatStreamEventBatchValidationError) ErrorName() string { + return "ChatStreamEventBatchValidationError" +} + +// Error satisfies the builtin error interface +func (e ChatStreamEventBatchValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sChatStreamEventBatch.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ChatStreamEventBatchValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ChatStreamEventBatchValidationError{} + +// Validate checks the field values on StreamChatEventsRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *StreamChatEventsRequest) Validate() error { + if m == nil { + return nil + } + + switch m.Type.(type) { + + case *StreamChatEventsRequest_OpenStream: + + if v, ok := interface{}(m.GetOpenStream()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamChatEventsRequestValidationError{ + field: "OpenStream", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *StreamChatEventsRequest_Pong: + + if v, ok := interface{}(m.GetPong()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamChatEventsRequestValidationError{ + field: "Pong", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return StreamChatEventsRequestValidationError{ + field: "Type", + reason: "value is required", + } + + } + + return nil +} + +// StreamChatEventsRequestValidationError is the validation error returned by +// StreamChatEventsRequest.Validate if the designated constraints aren't met. +type StreamChatEventsRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e StreamChatEventsRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e StreamChatEventsRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e StreamChatEventsRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e StreamChatEventsRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e StreamChatEventsRequestValidationError) ErrorName() string { + return "StreamChatEventsRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e StreamChatEventsRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sStreamChatEventsRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = StreamChatEventsRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = StreamChatEventsRequestValidationError{} + +// Validate checks the field values on StreamChatEventsResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *StreamChatEventsResponse) Validate() error { + if m == nil { + return nil + } + + switch m.Type.(type) { + + case *StreamChatEventsResponse_Events: + + if v, ok := interface{}(m.GetEvents()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamChatEventsResponseValidationError{ + field: "Events", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *StreamChatEventsResponse_Ping: + + if v, ok := interface{}(m.GetPing()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamChatEventsResponseValidationError{ + field: "Ping", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return StreamChatEventsResponseValidationError{ + field: "Type", + reason: "value is required", + } + + } + + return nil +} + +// StreamChatEventsResponseValidationError is the validation error returned by +// StreamChatEventsResponse.Validate if the designated constraints aren't met. +type StreamChatEventsResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e StreamChatEventsResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e StreamChatEventsResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e StreamChatEventsResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e StreamChatEventsResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e StreamChatEventsResponseValidationError) ErrorName() string { + return "StreamChatEventsResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e StreamChatEventsResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sStreamChatEventsResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = StreamChatEventsResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = StreamChatEventsResponseValidationError{} + +// Validate checks the field values on SendMessageRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *SendMessageRequest) Validate() error { + if m == nil { + return nil + } + + if m.GetOwner() == nil { + return SendMessageRequestValidationError{ + field: "Owner", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SendMessageRequestValidationError{ + field: "Owner", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetSignature() == nil { + return SendMessageRequestValidationError{ + field: "Signature", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SendMessageRequestValidationError{ + field: "Signature", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetChatId() == nil { + return SendMessageRequestValidationError{ + field: "ChatId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetChatId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SendMessageRequestValidationError{ + field: "ChatId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(m.GetContent()) != 1 { + return SendMessageRequestValidationError{ + field: "Content", + reason: "value must contain exactly 1 item(s)", + } + } + + for idx, item := range m.GetContent() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SendMessageRequestValidationError{ + field: fmt.Sprintf("Content[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// SendMessageRequestValidationError is the validation error returned by +// SendMessageRequest.Validate if the designated constraints aren't met. +type SendMessageRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e SendMessageRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e SendMessageRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e SendMessageRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e SendMessageRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e SendMessageRequestValidationError) ErrorName() string { + return "SendMessageRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e SendMessageRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sSendMessageRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = SendMessageRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = SendMessageRequestValidationError{} + +// Validate checks the field values on SendMessageResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *SendMessageResponse) Validate() error { + if m == nil { + return nil + } + + // no validation rules for Result + + if v, ok := interface{}(m.GetMessage()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SendMessageResponseValidationError{ + field: "Message", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// SendMessageResponseValidationError is the validation error returned by +// SendMessageResponse.Validate if the designated constraints aren't met. +type SendMessageResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e SendMessageResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e SendMessageResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e SendMessageResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e SendMessageResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e SendMessageResponseValidationError) ErrorName() string { + return "SendMessageResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e SendMessageResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sSendMessageResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = SendMessageResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = SendMessageResponseValidationError{} + // Validate checks the field values on ChatId with the rules defined in the // proto definition for this message. If any rules are violated, an error is returned. func (m *ChatId) Validate() error { @@ -1195,6 +1918,78 @@ var _ interface { ErrorName() string } = ChatMessageIdValidationError{} +// Validate checks the field values on ChatMemberId with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *ChatMemberId) Validate() error { + if m == nil { + return nil + } + + if len(m.GetValue()) != 32 { + return ChatMemberIdValidationError{ + field: "Value", + reason: "value length must be 32 bytes", + } + } + + return nil +} + +// ChatMemberIdValidationError is the validation error returned by +// ChatMemberId.Validate if the designated constraints aren't met. +type ChatMemberIdValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ChatMemberIdValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ChatMemberIdValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ChatMemberIdValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ChatMemberIdValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ChatMemberIdValidationError) ErrorName() string { return "ChatMemberIdValidationError" } + +// Error satisfies the builtin error interface +func (e ChatMemberIdValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sChatMemberId.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ChatMemberIdValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ChatMemberIdValidationError{} + // Validate checks the field values on Pointer with the rules defined in the // proto definition for this message. If any rules are violated, an error is returned. func (m *Pointer) Validate() error { @@ -1221,6 +2016,16 @@ func (m *Pointer) Validate() error { } } + if v, ok := interface{}(m.GetUser()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return PointerValidationError{ + field: "User", + reason: "embedded message failed validation", + cause: err, + } + } + } + return nil } @@ -1490,6 +2295,16 @@ func (m *ChatMessage) Validate() error { } } + if v, ok := interface{}(m.GetSender()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChatMessageValidationError{ + field: "Sender", + reason: "embedded message failed validation", + cause: err, + } + } + } + return nil } @@ -1556,12 +2371,12 @@ func (m *Content) Validate() error { switch m.Type.(type) { - case *Content_Localized: + case *Content_ServerLocalized: - if v, ok := interface{}(m.GetLocalized()).(interface{ Validate() error }); ok { + if v, ok := interface{}(m.GetServerLocalized()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ContentValidationError{ - field: "Localized", + field: "ServerLocalized", reason: "embedded message failed validation", cause: err, } @@ -1592,6 +2407,18 @@ func (m *Content) Validate() error { } } + case *Content_UserText: + + if v, ok := interface{}(m.GetUserText()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ContentValidationError{ + field: "UserText", + reason: "embedded message failed validation", + cause: err, + } + } + } + default: return ContentValidationError{ field: "Type", @@ -1657,16 +2484,16 @@ var _ interface { ErrorName() string } = ContentValidationError{} -// Validate checks the field values on LocalizedContent with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. -func (m *LocalizedContent) Validate() error { +// Validate checks the field values on ServerLocalizedContent with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *ServerLocalizedContent) Validate() error { if m == nil { return nil } if l := utf8.RuneCountInString(m.GetKeyOrText()); l < 1 || l > 1024 { - return LocalizedContentValidationError{ + return ServerLocalizedContentValidationError{ field: "KeyOrText", reason: "value length must be between 1 and 1024 runes, inclusive", } @@ -1675,9 +2502,9 @@ func (m *LocalizedContent) Validate() error { return nil } -// LocalizedContentValidationError is the validation error returned by -// LocalizedContent.Validate if the designated constraints aren't met. -type LocalizedContentValidationError struct { +// ServerLocalizedContentValidationError is the validation error returned by +// ServerLocalizedContent.Validate if the designated constraints aren't met. +type ServerLocalizedContentValidationError struct { field string reason string cause error @@ -1685,22 +2512,24 @@ type LocalizedContentValidationError struct { } // Field function returns field value. -func (e LocalizedContentValidationError) Field() string { return e.field } +func (e ServerLocalizedContentValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e LocalizedContentValidationError) Reason() string { return e.reason } +func (e ServerLocalizedContentValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e LocalizedContentValidationError) Cause() error { return e.cause } +func (e ServerLocalizedContentValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e LocalizedContentValidationError) Key() bool { return e.key } +func (e ServerLocalizedContentValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e LocalizedContentValidationError) ErrorName() string { return "LocalizedContentValidationError" } +func (e ServerLocalizedContentValidationError) ErrorName() string { + return "ServerLocalizedContentValidationError" +} // Error satisfies the builtin error interface -func (e LocalizedContentValidationError) Error() string { +func (e ServerLocalizedContentValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -1712,14 +2541,14 @@ func (e LocalizedContentValidationError) Error() string { } return fmt.Sprintf( - "invalid %sLocalizedContent.%s: %s%s", + "invalid %sServerLocalizedContent.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = LocalizedContentValidationError{} +var _ error = ServerLocalizedContentValidationError{} var _ interface { Field() string @@ -1727,7 +2556,7 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = LocalizedContentValidationError{} +} = ServerLocalizedContentValidationError{} // Validate checks the field values on ExchangeDataContent with the rules // defined in the proto definition for this message. If any rules are @@ -1930,6 +2759,78 @@ var _ interface { ErrorName() string } = NaclBoxEncryptedContentValidationError{} +// Validate checks the field values on UserTextContent with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *UserTextContent) Validate() error { + if m == nil { + return nil + } + + if l := utf8.RuneCountInString(m.GetText()); l < 1 || l > 1024 { + return UserTextContentValidationError{ + field: "Text", + reason: "value length must be between 1 and 1024 runes, inclusive", + } + } + + return nil +} + +// UserTextContentValidationError is the validation error returned by +// UserTextContent.Validate if the designated constraints aren't met. +type UserTextContentValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e UserTextContentValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e UserTextContentValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e UserTextContentValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e UserTextContentValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e UserTextContentValidationError) ErrorName() string { return "UserTextContentValidationError" } + +// Error satisfies the builtin error interface +func (e UserTextContentValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sUserTextContent.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = UserTextContentValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = UserTextContentValidationError{} + // Validate checks the field values on Cursor with the rules defined in the // proto definition for this message. If any rules are violated, an error is returned. func (m *Cursor) Validate() error { diff --git a/generated/go/chat/v1/chat_service_grpc.pb.go b/generated/go/chat/v1/chat_service_grpc.pb.go index 65e1c23..bb8dcc9 100644 --- a/generated/go/chat/v1/chat_service_grpc.pb.go +++ b/generated/go/chat/v1/chat_service_grpc.pb.go @@ -32,6 +32,8 @@ type ChatClient interface { SetMuteState(ctx context.Context, in *SetMuteStateRequest, opts ...grpc.CallOption) (*SetMuteStateResponse, error) // SetSubscriptionState configures the susbscription state of a chat SetSubscriptionState(ctx context.Context, in *SetSubscriptionStateRequest, opts ...grpc.CallOption) (*SetSubscriptionStateResponse, error) + StreamChatEvents(ctx context.Context, opts ...grpc.CallOption) (Chat_StreamChatEventsClient, error) + SendMessage(ctx context.Context, in *SendMessageRequest, opts ...grpc.CallOption) (*SendMessageResponse, error) } type chatClient struct { @@ -87,6 +89,46 @@ func (c *chatClient) SetSubscriptionState(ctx context.Context, in *SetSubscripti return out, nil } +func (c *chatClient) StreamChatEvents(ctx context.Context, opts ...grpc.CallOption) (Chat_StreamChatEventsClient, error) { + stream, err := c.cc.NewStream(ctx, &Chat_ServiceDesc.Streams[0], "/code.chat.v1.Chat/StreamChatEvents", opts...) + if err != nil { + return nil, err + } + x := &chatStreamChatEventsClient{stream} + return x, nil +} + +type Chat_StreamChatEventsClient interface { + Send(*StreamChatEventsRequest) error + Recv() (*StreamChatEventsResponse, error) + grpc.ClientStream +} + +type chatStreamChatEventsClient struct { + grpc.ClientStream +} + +func (x *chatStreamChatEventsClient) Send(m *StreamChatEventsRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *chatStreamChatEventsClient) Recv() (*StreamChatEventsResponse, error) { + m := new(StreamChatEventsResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *chatClient) SendMessage(ctx context.Context, in *SendMessageRequest, opts ...grpc.CallOption) (*SendMessageResponse, error) { + out := new(SendMessageResponse) + err := c.cc.Invoke(ctx, "/code.chat.v1.Chat/SendMessage", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // ChatServer is the server API for Chat service. // All implementations must embed UnimplementedChatServer // for forward compatibility @@ -101,6 +143,8 @@ type ChatServer interface { SetMuteState(context.Context, *SetMuteStateRequest) (*SetMuteStateResponse, error) // SetSubscriptionState configures the susbscription state of a chat SetSubscriptionState(context.Context, *SetSubscriptionStateRequest) (*SetSubscriptionStateResponse, error) + StreamChatEvents(Chat_StreamChatEventsServer) error + SendMessage(context.Context, *SendMessageRequest) (*SendMessageResponse, error) mustEmbedUnimplementedChatServer() } @@ -123,6 +167,12 @@ func (UnimplementedChatServer) SetMuteState(context.Context, *SetMuteStateReques func (UnimplementedChatServer) SetSubscriptionState(context.Context, *SetSubscriptionStateRequest) (*SetSubscriptionStateResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method SetSubscriptionState not implemented") } +func (UnimplementedChatServer) StreamChatEvents(Chat_StreamChatEventsServer) error { + return status.Errorf(codes.Unimplemented, "method StreamChatEvents not implemented") +} +func (UnimplementedChatServer) SendMessage(context.Context, *SendMessageRequest) (*SendMessageResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SendMessage not implemented") +} func (UnimplementedChatServer) mustEmbedUnimplementedChatServer() {} // UnsafeChatServer may be embedded to opt out of forward compatibility for this service. @@ -226,6 +276,50 @@ func _Chat_SetSubscriptionState_Handler(srv interface{}, ctx context.Context, de return interceptor(ctx, in, info, handler) } +func _Chat_StreamChatEvents_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(ChatServer).StreamChatEvents(&chatStreamChatEventsServer{stream}) +} + +type Chat_StreamChatEventsServer interface { + Send(*StreamChatEventsResponse) error + Recv() (*StreamChatEventsRequest, error) + grpc.ServerStream +} + +type chatStreamChatEventsServer struct { + grpc.ServerStream +} + +func (x *chatStreamChatEventsServer) Send(m *StreamChatEventsResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *chatStreamChatEventsServer) Recv() (*StreamChatEventsRequest, error) { + m := new(StreamChatEventsRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func _Chat_SendMessage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SendMessageRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ChatServer).SendMessage(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/code.chat.v1.Chat/SendMessage", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ChatServer).SendMessage(ctx, req.(*SendMessageRequest)) + } + return interceptor(ctx, in, info, handler) +} + // Chat_ServiceDesc is the grpc.ServiceDesc for Chat service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -253,7 +347,18 @@ var Chat_ServiceDesc = grpc.ServiceDesc{ MethodName: "SetSubscriptionState", Handler: _Chat_SetSubscriptionState_Handler, }, + { + MethodName: "SendMessage", + Handler: _Chat_SendMessage_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "StreamChatEvents", + Handler: _Chat_StreamChatEvents_Handler, + ServerStreams: true, + ClientStreams: true, + }, }, - Streams: []grpc.StreamDesc{}, Metadata: "chat/v1/chat_service.proto", } diff --git a/generated/go/common/v1/model.pb.go b/generated/go/common/v1/model.pb.go index 7313dc6..063d87f 100644 --- a/generated/go/common/v1/model.pb.go +++ b/generated/go/common/v1/model.pb.go @@ -10,6 +10,8 @@ import ( _ "github.com/envoyproxy/protoc-gen-validate/validate" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" + durationpb "google.golang.org/protobuf/types/known/durationpb" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" sync "sync" ) @@ -1104,91 +1106,217 @@ func (x *Response) GetMessage() string { return "" } +type ServerPing struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Timestamp the ping was sent on the stream, for client to get a sense + // of potential network latency + Timestamp *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` + // The delay server will apply before sending the next ping + PingDelay *durationpb.Duration `protobuf:"bytes,2,opt,name=ping_delay,json=pingDelay,proto3" json:"ping_delay,omitempty"` +} + +func (x *ServerPing) Reset() { + *x = ServerPing{} + if protoimpl.UnsafeEnabled { + mi := &file_common_v1_model_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ServerPing) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ServerPing) ProtoMessage() {} + +func (x *ServerPing) ProtoReflect() protoreflect.Message { + mi := &file_common_v1_model_proto_msgTypes[18] + 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 ServerPing.ProtoReflect.Descriptor instead. +func (*ServerPing) Descriptor() ([]byte, []int) { + return file_common_v1_model_proto_rawDescGZIP(), []int{18} +} + +func (x *ServerPing) GetTimestamp() *timestamppb.Timestamp { + if x != nil { + return x.Timestamp + } + return nil +} + +func (x *ServerPing) GetPingDelay() *durationpb.Duration { + if x != nil { + return x.PingDelay + } + return nil +} + +type ClientPong struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Timestamp the Pong was sent on the stream, for server to get a sense + // of potential network latency + Timestamp *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` +} + +func (x *ClientPong) Reset() { + *x = ClientPong{} + if protoimpl.UnsafeEnabled { + mi := &file_common_v1_model_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ClientPong) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientPong) ProtoMessage() {} + +func (x *ClientPong) ProtoReflect() protoreflect.Message { + mi := &file_common_v1_model_proto_msgTypes[19] + 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 ClientPong.ProtoReflect.Descriptor instead. +func (*ClientPong) Descriptor() ([]byte, []int) { + return file_common_v1_model_proto_rawDescGZIP(), []int{19} +} + +func (x *ClientPong) GetTimestamp() *timestamppb.Timestamp { + if x != nil { + return x.Timestamp + } + return nil +} + var File_common_v1_model_proto protoreflect.FileDescriptor var file_common_v1_model_proto_rawDesc = []byte{ 0x0a, 0x15, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x1a, 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, - 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0x34, 0x0a, 0x0f, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x22, 0x34, 0x0a, 0x0f, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x20, 0x18, 0x20, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x99, 0x01, 0x0a, 0x12, 0x49, 0x6e, 0x73, 0x74, + 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x45, + 0x0a, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, + 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x07, 0x61, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x73, 0x69, 0x67, 0x6e, + 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x53, 0x69, 0x67, 0x6e, + 0x65, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x61, 0x62, 0x6c, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x57, 0x72, 0x69, 0x74, 0x61, + 0x62, 0x6c, 0x65, 0x22, 0x31, 0x0a, 0x0b, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x12, 0x22, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, 0x05, 0x10, 0x01, 0x18, 0xd0, 0x09, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2e, 0x0a, 0x09, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x68, + 0x61, 0x73, 0x68, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x20, 0x18, 0x20, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x99, 0x01, 0x0a, 0x12, 0x49, 0x6e, 0x73, 0x74, 0x72, - 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x45, 0x0a, - 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, - 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x07, 0x61, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x65, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x53, 0x69, 0x67, 0x6e, 0x65, - 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x77, 0x72, 0x69, 0x74, 0x61, 0x62, 0x6c, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x57, 0x72, 0x69, 0x74, 0x61, 0x62, - 0x6c, 0x65, 0x22, 0x31, 0x0a, 0x0b, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x22, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, - 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, 0x05, 0x10, 0x01, 0x18, 0xd0, 0x09, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2e, 0x0a, 0x09, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x68, 0x61, - 0x73, 0x68, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2e, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x40, 0x18, 0x40, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2d, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x20, 0x18, 0x20, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2e, 0x0a, 0x09, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x40, 0x18, 0x40, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2d, 0x0a, 0x08, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, - 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, - 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x20, 0x18, 0x20, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2b, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2b, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, + 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, + 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x22, 0x34, 0x0a, 0x0f, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, + 0x6e, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, + 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x31, 0x0a, 0x0b, 0x44, 0x65, 0x76, 0x69, + 0x63, 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x22, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, + 0x01, 0x18, 0xdc, 0x7f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x32, 0x0a, 0x0c, 0x41, + 0x70, 0x70, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, + 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x02, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0x3f, 0x0a, 0x0b, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x30, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0xba, + 0xe9, 0xc0, 0x03, 0x15, 0x72, 0x13, 0x32, 0x11, 0x5e, 0x5c, 0x2b, 0x5b, 0x31, 0x2d, 0x39, 0x5d, + 0x5c, 0x64, 0x7b, 0x31, 0x2c, 0x31, 0x34, 0x7d, 0x24, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0x2e, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x24, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0e, 0xba, 0xe9, 0xc0, 0x03, 0x09, + 0x72, 0x07, 0x10, 0x01, 0x18, 0xfd, 0x01, 0x68, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0x54, 0x0a, 0x0c, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, + 0x12, 0x3c, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x48, 0x00, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x42, 0x06, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x29, 0x0a, 0x04, 0x48, 0x61, 0x73, 0x68, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, - 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0x34, 0x0a, 0x0f, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x31, 0x0a, 0x0b, 0x44, 0x65, 0x76, 0x69, 0x63, - 0x65, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x22, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, - 0x18, 0xdc, 0x7f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x32, 0x0a, 0x0c, 0x41, 0x70, - 0x70, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, - 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x02, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x3f, - 0x0a, 0x0b, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x30, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x1a, 0xba, 0xe9, - 0xc0, 0x03, 0x15, 0x72, 0x13, 0x32, 0x11, 0x5e, 0x5c, 0x2b, 0x5b, 0x31, 0x2d, 0x39, 0x5d, 0x5c, - 0x64, 0x7b, 0x31, 0x2c, 0x31, 0x34, 0x7d, 0x24, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, - 0x2e, 0x0a, 0x06, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x24, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0e, 0xba, 0xe9, 0xc0, 0x03, 0x09, 0x72, - 0x07, 0x10, 0x01, 0x18, 0xfd, 0x01, 0x68, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, - 0x54, 0x0a, 0x0c, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x68, 0x69, 0x70, 0x12, - 0x3c, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, - 0x02, 0x10, 0x01, 0x48, 0x00, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x42, 0x06, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x29, 0x0a, 0x04, 0x48, 0x61, 0x73, 0x68, 0x12, 0x21, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, - 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x20, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0x67, 0x0a, 0x06, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x5d, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x47, 0xba, 0xe9, 0xc0, 0x03, 0x42, - 0x72, 0x40, 0x32, 0x3e, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x5d, 0x7b, 0x32, 0x2c, - 0x34, 0x7d, 0x28, 0x5b, 0x5f, 0x2d, 0x5d, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x5d, 0x7b, - 0x34, 0x7d, 0x29, 0x3f, 0x28, 0x5b, 0x5f, 0x2d, 0x5d, 0x28, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, - 0x7a, 0x5d, 0x7b, 0x32, 0x7d, 0x7c, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x33, 0x7d, 0x29, 0x29, - 0x3f, 0x24, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x29, 0x0a, 0x04, 0x55, 0x55, 0x49, - 0x44, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, - 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x22, 0x69, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, - 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x62, - 0x6f, 0x64, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x22, - 0x8e, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, 0x06, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x22, 0x1b, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, - 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, 0x01, + 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x20, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x22, 0x67, 0x0a, 0x06, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x5d, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x47, 0xba, 0xe9, 0xc0, 0x03, + 0x42, 0x72, 0x40, 0x32, 0x3e, 0x5e, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x5d, 0x7b, 0x32, + 0x2c, 0x34, 0x7d, 0x28, 0x5b, 0x5f, 0x2d, 0x5d, 0x5b, 0x41, 0x2d, 0x5a, 0x61, 0x2d, 0x7a, 0x5d, + 0x7b, 0x34, 0x7d, 0x29, 0x3f, 0x28, 0x5b, 0x5f, 0x2d, 0x5d, 0x28, 0x5b, 0x41, 0x2d, 0x5a, 0x61, + 0x2d, 0x7a, 0x5d, 0x7b, 0x32, 0x7d, 0x7c, 0x5b, 0x30, 0x2d, 0x39, 0x5d, 0x7b, 0x33, 0x7d, 0x29, + 0x29, 0x3f, 0x24, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x29, 0x0a, 0x04, 0x55, 0x55, + 0x49, 0x44, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x69, 0x0a, 0x07, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x18, 0x0a, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x65, 0x72, + 0x76, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x12, 0x0a, 0x04, + 0x62, 0x6f, 0x64, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, + 0x22, 0x8e, 0x01, 0x0a, 0x08, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, + 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x62, 0x6f, 0x64, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x22, 0x1b, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, + 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x45, 0x52, 0x52, 0x4f, 0x52, 0x10, + 0x01, 0x22, 0x98, 0x01, 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x69, 0x6e, 0x67, + 0x12, 0x44, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x44, 0x0a, 0x0a, 0x70, 0x69, 0x6e, 0x67, 0x5f, 0x64, + 0x65, 0x6c, 0x61, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xaa, 0x01, 0x02, 0x08, + 0x01, 0x52, 0x09, 0x70, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x22, 0x52, 0x0a, 0x0a, + 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x6e, 0x67, 0x12, 0x44, 0x0a, 0x09, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2a, 0xbf, 0x02, 0x0a, 0x0b, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x52, 0x49, 0x4d, 0x41, 0x52, 0x59, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x54, 0x45, @@ -1232,38 +1360,45 @@ func file_common_v1_model_proto_rawDescGZIP() []byte { } var file_common_v1_model_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_common_v1_model_proto_msgTypes = make([]protoimpl.MessageInfo, 18) +var file_common_v1_model_proto_msgTypes = make([]protoimpl.MessageInfo, 20) var file_common_v1_model_proto_goTypes = []interface{}{ - (AccountType)(0), // 0: code.common.v1.AccountType - (Response_Result)(0), // 1: code.common.v1.Response.Result - (*SolanaAccountId)(nil), // 2: code.common.v1.SolanaAccountId - (*InstructionAccount)(nil), // 3: code.common.v1.InstructionAccount - (*Transaction)(nil), // 4: code.common.v1.Transaction - (*Blockhash)(nil), // 5: code.common.v1.Blockhash - (*Signature)(nil), // 6: code.common.v1.Signature - (*IntentId)(nil), // 7: code.common.v1.IntentId - (*UserId)(nil), // 8: code.common.v1.UserId - (*DataContainerId)(nil), // 9: code.common.v1.DataContainerId - (*DeviceToken)(nil), // 10: code.common.v1.DeviceToken - (*AppInstallId)(nil), // 11: code.common.v1.AppInstallId - (*PhoneNumber)(nil), // 12: code.common.v1.PhoneNumber - (*Domain)(nil), // 13: code.common.v1.Domain - (*Relationship)(nil), // 14: code.common.v1.Relationship - (*Hash)(nil), // 15: code.common.v1.Hash - (*Locale)(nil), // 16: code.common.v1.Locale - (*UUID)(nil), // 17: code.common.v1.UUID - (*Request)(nil), // 18: code.common.v1.Request - (*Response)(nil), // 19: code.common.v1.Response + (AccountType)(0), // 0: code.common.v1.AccountType + (Response_Result)(0), // 1: code.common.v1.Response.Result + (*SolanaAccountId)(nil), // 2: code.common.v1.SolanaAccountId + (*InstructionAccount)(nil), // 3: code.common.v1.InstructionAccount + (*Transaction)(nil), // 4: code.common.v1.Transaction + (*Blockhash)(nil), // 5: code.common.v1.Blockhash + (*Signature)(nil), // 6: code.common.v1.Signature + (*IntentId)(nil), // 7: code.common.v1.IntentId + (*UserId)(nil), // 8: code.common.v1.UserId + (*DataContainerId)(nil), // 9: code.common.v1.DataContainerId + (*DeviceToken)(nil), // 10: code.common.v1.DeviceToken + (*AppInstallId)(nil), // 11: code.common.v1.AppInstallId + (*PhoneNumber)(nil), // 12: code.common.v1.PhoneNumber + (*Domain)(nil), // 13: code.common.v1.Domain + (*Relationship)(nil), // 14: code.common.v1.Relationship + (*Hash)(nil), // 15: code.common.v1.Hash + (*Locale)(nil), // 16: code.common.v1.Locale + (*UUID)(nil), // 17: code.common.v1.UUID + (*Request)(nil), // 18: code.common.v1.Request + (*Response)(nil), // 19: code.common.v1.Response + (*ServerPing)(nil), // 20: code.common.v1.ServerPing + (*ClientPong)(nil), // 21: code.common.v1.ClientPong + (*timestamppb.Timestamp)(nil), // 22: google.protobuf.Timestamp + (*durationpb.Duration)(nil), // 23: google.protobuf.Duration } var file_common_v1_model_proto_depIdxs = []int32{ 2, // 0: code.common.v1.InstructionAccount.account:type_name -> code.common.v1.SolanaAccountId 13, // 1: code.common.v1.Relationship.domain:type_name -> code.common.v1.Domain 1, // 2: code.common.v1.Response.result:type_name -> code.common.v1.Response.Result - 3, // [3:3] is the sub-list for method output_type - 3, // [3:3] is the sub-list for method input_type - 3, // [3:3] is the sub-list for extension type_name - 3, // [3:3] is the sub-list for extension extendee - 0, // [0:3] is the sub-list for field type_name + 22, // 3: code.common.v1.ServerPing.timestamp:type_name -> google.protobuf.Timestamp + 23, // 4: code.common.v1.ServerPing.ping_delay:type_name -> google.protobuf.Duration + 22, // 5: code.common.v1.ClientPong.timestamp:type_name -> google.protobuf.Timestamp + 6, // [6:6] is the sub-list for method output_type + 6, // [6:6] is the sub-list for method input_type + 6, // [6:6] is the sub-list for extension type_name + 6, // [6:6] is the sub-list for extension extendee + 0, // [0:6] is the sub-list for field type_name } func init() { file_common_v1_model_proto_init() } @@ -1488,6 +1623,30 @@ func file_common_v1_model_proto_init() { return nil } } + file_common_v1_model_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ServerPing); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_common_v1_model_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ClientPong); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } file_common_v1_model_proto_msgTypes[12].OneofWrappers = []interface{}{ (*Relationship_Domain)(nil), @@ -1498,7 +1657,7 @@ func file_common_v1_model_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_common_v1_model_proto_rawDesc, NumEnums: 2, - NumMessages: 18, + NumMessages: 20, NumExtensions: 0, NumServices: 0, }, diff --git a/generated/go/common/v1/model.pb.validate.go b/generated/go/common/v1/model.pb.validate.go index a274246..3a4f7b0 100644 --- a/generated/go/common/v1/model.pb.validate.go +++ b/generated/go/common/v1/model.pb.validate.go @@ -1392,3 +1392,152 @@ var _ interface { Cause() error ErrorName() string } = ResponseValidationError{} + +// Validate checks the field values on ServerPing with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *ServerPing) Validate() error { + if m == nil { + return nil + } + + if m.GetTimestamp() == nil { + return ServerPingValidationError{ + field: "Timestamp", + reason: "value is required", + } + } + + if m.GetPingDelay() == nil { + return ServerPingValidationError{ + field: "PingDelay", + reason: "value is required", + } + } + + return nil +} + +// ServerPingValidationError is the validation error returned by +// ServerPing.Validate if the designated constraints aren't met. +type ServerPingValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ServerPingValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ServerPingValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ServerPingValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ServerPingValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ServerPingValidationError) ErrorName() string { return "ServerPingValidationError" } + +// Error satisfies the builtin error interface +func (e ServerPingValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sServerPing.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ServerPingValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ServerPingValidationError{} + +// Validate checks the field values on ClientPong with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *ClientPong) Validate() error { + if m == nil { + return nil + } + + if m.GetTimestamp() == nil { + return ClientPongValidationError{ + field: "Timestamp", + reason: "value is required", + } + } + + return nil +} + +// ClientPongValidationError is the validation error returned by +// ClientPong.Validate if the designated constraints aren't met. +type ClientPongValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ClientPongValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ClientPongValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ClientPongValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ClientPongValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ClientPongValidationError) ErrorName() string { return "ClientPongValidationError" } + +// Error satisfies the builtin error interface +func (e ClientPongValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sClientPong.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ClientPongValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ClientPongValidationError{} diff --git a/generated/go/messaging/v1/messaging_service.pb.go b/generated/go/messaging/v1/messaging_service.pb.go index b86f7ae..0a63c32 100644 --- a/generated/go/messaging/v1/messaging_service.pb.go +++ b/generated/go/messaging/v1/messaging_service.pb.go @@ -12,7 +12,6 @@ import ( _ "github.com/envoyproxy/protoc-gen-validate/validate" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - durationpb "google.golang.org/protobuf/types/known/durationpb" timestamppb "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" sync "sync" @@ -228,7 +227,7 @@ type OpenMessageStreamWithKeepAliveRequest struct { // // *OpenMessageStreamWithKeepAliveRequest_Request // *OpenMessageStreamWithKeepAliveRequest_Pong - RequestOrPong isOpenMessageStreamWithKeepAliveRequest_RequestOrPong `protobuf_oneof:"requestOrPong"` + RequestOrPong isOpenMessageStreamWithKeepAliveRequest_RequestOrPong `protobuf_oneof:"request_or_pong"` } func (x *OpenMessageStreamWithKeepAliveRequest) Reset() { @@ -277,7 +276,7 @@ func (x *OpenMessageStreamWithKeepAliveRequest) GetRequest() *OpenMessageStreamR return nil } -func (x *OpenMessageStreamWithKeepAliveRequest) GetPong() *ClientPong { +func (x *OpenMessageStreamWithKeepAliveRequest) GetPong() *v1.ClientPong { if x, ok := x.GetRequestOrPong().(*OpenMessageStreamWithKeepAliveRequest_Pong); ok { return x.Pong } @@ -293,7 +292,7 @@ type OpenMessageStreamWithKeepAliveRequest_Request struct { } type OpenMessageStreamWithKeepAliveRequest_Pong struct { - Pong *ClientPong `protobuf:"bytes,2,opt,name=pong,proto3,oneof"` + Pong *v1.ClientPong `protobuf:"bytes,2,opt,name=pong,proto3,oneof"` } func (*OpenMessageStreamWithKeepAliveRequest_Request) isOpenMessageStreamWithKeepAliveRequest_RequestOrPong() { @@ -311,7 +310,7 @@ type OpenMessageStreamWithKeepAliveResponse struct { // // *OpenMessageStreamWithKeepAliveResponse_Response // *OpenMessageStreamWithKeepAliveResponse_Ping - ResponseOrPing isOpenMessageStreamWithKeepAliveResponse_ResponseOrPing `protobuf_oneof:"responseOrPing"` + ResponseOrPing isOpenMessageStreamWithKeepAliveResponse_ResponseOrPing `protobuf_oneof:"response_or_ping"` } func (x *OpenMessageStreamWithKeepAliveResponse) Reset() { @@ -360,7 +359,7 @@ func (x *OpenMessageStreamWithKeepAliveResponse) GetResponse() *OpenMessageStrea return nil } -func (x *OpenMessageStreamWithKeepAliveResponse) GetPing() *ServerPing { +func (x *OpenMessageStreamWithKeepAliveResponse) GetPing() *v1.ServerPing { if x, ok := x.GetResponseOrPing().(*OpenMessageStreamWithKeepAliveResponse_Ping); ok { return x.Ping } @@ -376,7 +375,7 @@ type OpenMessageStreamWithKeepAliveResponse_Response struct { } type OpenMessageStreamWithKeepAliveResponse_Ping struct { - Ping *ServerPing `protobuf:"bytes,2,opt,name=ping,proto3,oneof"` + Ping *v1.ServerPing `protobuf:"bytes,2,opt,name=ping,proto3,oneof"` } func (*OpenMessageStreamWithKeepAliveResponse_Response) isOpenMessageStreamWithKeepAliveResponse_ResponseOrPing() { @@ -1637,113 +1636,6 @@ func (*Message_ClientRejectedLogin) isMessage_Kind() {} func (*Message_AirdropReceived) isMessage_Kind() {} -type ServerPing struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Timestamp the ping was sent on the stream, for client to get a sense - // of potential network latency - Timestamp *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` - // The delay server will apply before sending the next ping - PingDelay *durationpb.Duration `protobuf:"bytes,2,opt,name=ping_delay,json=pingDelay,proto3" json:"ping_delay,omitempty"` -} - -func (x *ServerPing) Reset() { - *x = ServerPing{} - if protoimpl.UnsafeEnabled { - mi := &file_messaging_v1_messaging_service_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ServerPing) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ServerPing) ProtoMessage() {} - -func (x *ServerPing) ProtoReflect() protoreflect.Message { - mi := &file_messaging_v1_messaging_service_proto_msgTypes[22] - 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 ServerPing.ProtoReflect.Descriptor instead. -func (*ServerPing) Descriptor() ([]byte, []int) { - return file_messaging_v1_messaging_service_proto_rawDescGZIP(), []int{22} -} - -func (x *ServerPing) GetTimestamp() *timestamppb.Timestamp { - if x != nil { - return x.Timestamp - } - return nil -} - -func (x *ServerPing) GetPingDelay() *durationpb.Duration { - if x != nil { - return x.PingDelay - } - return nil -} - -type ClientPong struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Timestamp the Pong was sent on the stream, for server to get a sense - // of potential network latency - Timestamp *timestamppb.Timestamp `protobuf:"bytes,1,opt,name=timestamp,proto3" json:"timestamp,omitempty"` -} - -func (x *ClientPong) Reset() { - *x = ClientPong{} - if protoimpl.UnsafeEnabled { - mi := &file_messaging_v1_messaging_service_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClientPong) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClientPong) ProtoMessage() {} - -func (x *ClientPong) ProtoReflect() protoreflect.Message { - mi := &file_messaging_v1_messaging_service_proto_msgTypes[23] - 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 ClientPong.ProtoReflect.Descriptor instead. -func (*ClientPong) Descriptor() ([]byte, []int) { - return file_messaging_v1_messaging_service_proto_rawDescGZIP(), []int{23} -} - -func (x *ClientPong) GetTimestamp() *timestamppb.Timestamp { - if x != nil { - return x.Timestamp - } - return nil -} - var File_messaging_v1_messaging_service_proto protoreflect.FileDescriptor var file_messaging_v1_messaging_service_proto_rawDesc = []byte{ @@ -1756,8 +1648,6 @@ var file_messaging_v1_messaging_service_proto_rawDesc = []byte{ 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x1a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xb4, 0x01, 0x0a, 0x18, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, 0x73, @@ -1778,332 +1668,317 @@ var file_messaging_v1_messaging_service_proto_rawDesc = []byte{ 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x0d, 0xba, 0xe9, 0xc0, 0x03, 0x08, 0x92, 0x01, 0x05, 0x08, 0x01, 0x10, 0x80, 0x08, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, - 0xbd, 0x01, 0x0a, 0x25, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, + 0xbc, 0x01, 0x0a, 0x25, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x57, 0x69, 0x74, 0x68, 0x4b, 0x65, 0x65, 0x70, 0x41, 0x6c, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x47, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x33, 0x0a, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x6e, 0x67, 0x48, - 0x00, 0x52, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x42, 0x16, 0x0a, 0x0d, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x4f, 0x72, 0x50, 0x6f, 0x6e, 0x67, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, - 0xc2, 0x01, 0x0a, 0x26, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x57, 0x69, 0x74, 0x68, 0x4b, 0x65, 0x65, 0x70, 0x41, 0x6c, 0x69, - 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x08, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, - 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, - 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x42, 0x17, 0x0a, 0x0e, 0x72, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x4f, 0x72, 0x50, 0x69, 0x6e, 0x67, 0x12, 0x05, 0xb8, - 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xaf, 0x01, 0x0a, 0x13, 0x50, 0x6f, 0x6c, 0x6c, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x53, 0x0a, 0x0e, - 0x72, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, - 0x6f, 0x75, 0x73, 0x4b, 0x65, 0x79, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x0d, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x4b, 0x65, - 0x79, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, - 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x5d, 0x0a, 0x14, 0x50, 0x6f, 0x6c, 0x6c, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, - 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, - 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x0d, 0xba, 0xe9, - 0xc0, 0x03, 0x08, 0x92, 0x01, 0x05, 0x08, 0x00, 0x10, 0x80, 0x08, 0x52, 0x08, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0xb7, 0x01, 0x0a, 0x12, 0x41, 0x63, 0x6b, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x53, 0x0a, 0x0e, - 0x72, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, - 0x6f, 0x75, 0x73, 0x4b, 0x65, 0x79, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x0d, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x4b, 0x65, - 0x79, 0x12, 0x4c, 0x0a, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x49, 0x64, 0x42, 0x0d, 0xba, 0xe9, 0xc0, 0x03, 0x08, 0x92, 0x01, 0x05, 0x08, 0x01, - 0x10, 0x80, 0x08, 0x52, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x73, 0x22, - 0x70, 0x0a, 0x14, 0x41, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x6b, 0x4d, - 0x65, 0x73, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, - 0x10, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, - 0x00, 0x22, 0xf0, 0x01, 0x0a, 0x12, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, - 0x01, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x53, 0x0a, 0x0e, 0x72, 0x65, - 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, + 0x73, 0x74, 0x12, 0x30, 0x0a, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x04, + 0x70, 0x6f, 0x6e, 0x67, 0x42, 0x18, 0x0a, 0x0f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, + 0x6f, 0x72, 0x5f, 0x70, 0x6f, 0x6e, 0x67, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xc1, + 0x01, 0x0a, 0x26, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x57, 0x69, 0x74, 0x68, 0x4b, 0x65, 0x65, 0x70, 0x41, 0x6c, 0x69, 0x76, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4a, 0x0a, 0x08, 0x72, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, + 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, 0x08, 0x72, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x69, 0x6e, 0x67, 0x48, + 0x00, 0x52, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x42, 0x19, 0x0a, 0x10, 0x72, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x5f, 0x6f, 0x72, 0x5f, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x05, 0xb8, 0xe9, 0xc0, + 0x03, 0x01, 0x22, 0xaf, 0x01, 0x0a, 0x13, 0x50, 0x6f, 0x6c, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x53, 0x0a, 0x0e, 0x72, 0x65, + 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x4b, 0x65, 0x79, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x4b, 0x65, 0x79, 0x12, - 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, + 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x22, 0xc1, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x06, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x12, 0x3b, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, + 0x74, 0x75, 0x72, 0x65, 0x22, 0x5d, 0x0a, 0x14, 0x50, 0x6f, 0x6c, 0x6c, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x08, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, + 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x0d, 0xba, 0xe9, 0xc0, 0x03, + 0x08, 0x92, 0x01, 0x05, 0x08, 0x00, 0x10, 0x80, 0x08, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x73, 0x22, 0xb7, 0x01, 0x0a, 0x12, 0x41, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x53, 0x0a, 0x0e, 0x72, 0x65, + 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, + 0x73, 0x4b, 0x65, 0x79, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, + 0x52, 0x0d, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x4b, 0x65, 0x79, 0x12, + 0x4c, 0x0a, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x49, 0x64, 0x42, 0x0d, 0xba, 0xe9, 0xc0, 0x03, 0x08, 0x92, 0x01, 0x05, 0x08, 0x01, 0x10, 0x80, + 0x08, 0x52, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x73, 0x22, 0x70, 0x0a, + 0x14, 0x41, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x6b, 0x4d, 0x65, 0x73, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x10, 0x0a, + 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x22, + 0xf0, 0x01, 0x0a, 0x12, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x40, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x49, 0x64, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, - 0x22, 0x26, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, - 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x4e, 0x4f, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x5f, - 0x53, 0x54, 0x52, 0x45, 0x41, 0x4d, 0x10, 0x01, 0x22, 0x32, 0x0a, 0x0d, 0x52, 0x65, 0x6e, 0x64, - 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, - 0x04, 0x10, 0x20, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2e, 0x0a, 0x09, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, - 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x6d, 0x0a, 0x11, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x6f, 0x47, 0x72, 0x61, 0x62, 0x42, 0x69, 0x6c, - 0x6c, 0x12, 0x58, 0x0a, 0x11, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x5f, 0x61, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, - 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, - 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x10, 0x72, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x6f, 0x72, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xdc, 0x04, 0x0a, 0x14, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x6f, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, - 0x42, 0x69, 0x6c, 0x6c, 0x12, 0x58, 0x0a, 0x11, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x6f, - 0x72, 0x5f, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, - 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x10, 0x72, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x39, - 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, - 0x48, 0x00, 0x52, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, 0x07, 0x70, 0x61, 0x72, - 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, - 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x57, 0x69, 0x74, - 0x68, 0x6f, 0x75, 0x74, 0x52, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, - 0x69, 0x61, 0x6c, 0x12, 0x2e, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x06, 0x64, 0x6f, 0x6d, - 0x61, 0x69, 0x6e, 0x12, 0x3b, 0x0a, 0x08, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x52, 0x08, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x72, - 0x12, 0x37, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x09, - 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x47, 0x0a, 0x0e, 0x72, 0x65, 0x6e, - 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, - 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, - 0x4b, 0x65, 0x79, 0x52, 0x0d, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x4b, - 0x65, 0x79, 0x12, 0x5e, 0x0a, 0x0f, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, - 0x5f, 0x66, 0x65, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x6f, + 0x61, 0x67, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x53, 0x0a, 0x0e, 0x72, 0x65, 0x6e, 0x64, + 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, + 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x4b, + 0x65, 0x79, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, + 0x72, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x43, 0x0a, + 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x22, 0xc1, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x45, 0x0a, 0x06, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x12, 0x3b, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x49, 0x64, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x22, 0x26, + 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, + 0x12, 0x14, 0x0a, 0x10, 0x4e, 0x4f, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x45, 0x5f, 0x53, 0x54, + 0x52, 0x45, 0x41, 0x4d, 0x10, 0x01, 0x22, 0x32, 0x0a, 0x0d, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x7a, + 0x76, 0x6f, 0x75, 0x73, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, + 0x20, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2e, 0x0a, 0x09, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, + 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x6d, 0x0a, 0x11, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x6f, 0x47, 0x72, 0x61, 0x62, 0x42, 0x69, 0x6c, 0x6c, 0x12, + 0x58, 0x0a, 0x11, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, + 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x10, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x6f, 0x72, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0xdc, 0x04, 0x0a, 0x14, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x6f, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x42, 0x69, + 0x6c, 0x6c, 0x12, 0x58, 0x0a, 0x11, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x5f, + 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, + 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x10, 0x72, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x6f, 0x72, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x05, + 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x46, 0x65, 0x65, 0x50, - 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x92, 0x01, 0x02, - 0x10, 0x03, 0x52, 0x0e, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x46, 0x65, - 0x65, 0x73, 0x42, 0x16, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, - 0x61, 0x74, 0x61, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x53, 0x0a, 0x0b, 0x43, 0x6f, - 0x64, 0x65, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x12, 0x44, 0x0a, 0x09, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, - 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, - 0x5a, 0x0a, 0x15, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x41, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, - 0x01, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x8f, 0x01, 0x0a, 0x0f, - 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, - 0x41, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, - 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x49, 0x64, 0x12, 0x39, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x55, 0x0a, - 0x0d, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x44, - 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, - 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x22, 0xbb, 0x02, 0x0a, 0x0e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x54, 0x6f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x3a, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x42, - 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x64, 0x6f, 0x6d, - 0x61, 0x69, 0x6e, 0x12, 0x47, 0x0a, 0x08, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x08, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, - 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, - 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x12, 0x53, 0x0a, 0x0e, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x5f, - 0x6b, 0x65, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, - 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x4b, 0x65, 0x79, 0x42, 0x0a, 0xba, 0xe9, 0xc0, - 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, - 0x6f, 0x75, 0x73, 0x4b, 0x65, 0x79, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, - 0x10, 0x04, 0x22, 0x5b, 0x0a, 0x13, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6a, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x44, 0x0a, 0x09, 0x74, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, - 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, - 0xfc, 0x01, 0x0a, 0x0f, 0x41, 0x69, 0x72, 0x64, 0x72, 0x6f, 0x70, 0x52, 0x65, 0x63, 0x65, 0x69, - 0x76, 0x65, 0x64, 0x12, 0x4f, 0x0a, 0x0c, 0x61, 0x69, 0x72, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, + 0x52, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, + 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x57, 0x69, 0x74, 0x68, 0x6f, + 0x75, 0x74, 0x52, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, + 0x6c, 0x12, 0x2e, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, + 0x6e, 0x12, 0x3b, 0x0a, 0x08, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x49, 0x64, 0x52, 0x08, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x37, + 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x52, 0x09, 0x73, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x47, 0x0a, 0x0e, 0x72, 0x65, 0x6e, 0x64, 0x65, + 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, + 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x4b, 0x65, + 0x79, 0x52, 0x0d, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x4b, 0x65, 0x79, + 0x12, 0x5e, 0x0a, 0x0f, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x5f, 0x66, + 0x65, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x41, 0x69, 0x72, 0x64, 0x72, 0x6f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, - 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x0b, 0x61, 0x69, 0x72, 0x64, 0x72, 0x6f, 0x70, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x52, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x42, 0x0a, - 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0c, 0x65, 0x78, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x44, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, - 0x02, 0x08, 0x01, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xc2, - 0x07, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x38, 0x0a, 0x02, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x00, - 0x52, 0x02, 0x69, 0x64, 0x12, 0x6a, 0x0a, 0x1e, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, - 0x02, 0x10, 0x00, 0x52, 0x1b, 0x73, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x12, 0x57, 0x0a, 0x14, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x6f, 0x5f, 0x67, - 0x72, 0x61, 0x62, 0x5f, 0x62, 0x69, 0x6c, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x6f, 0x47, 0x72, 0x61, 0x62, - 0x42, 0x69, 0x6c, 0x6c, 0x48, 0x00, 0x52, 0x11, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, - 0x6f, 0x47, 0x72, 0x61, 0x62, 0x42, 0x69, 0x6c, 0x6c, 0x12, 0x60, 0x0a, 0x17, 0x72, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x6f, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x5f, - 0x62, 0x69, 0x6c, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x6f, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x42, - 0x69, 0x6c, 0x6c, 0x48, 0x00, 0x52, 0x14, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x6f, - 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x12, 0x43, 0x0a, 0x0c, 0x63, - 0x6f, 0x64, 0x65, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, - 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, - 0x64, 0x48, 0x00, 0x52, 0x0b, 0x63, 0x6f, 0x64, 0x65, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, - 0x12, 0x62, 0x0a, 0x17, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x6a, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x28, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, - 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6a, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x15, 0x63, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x79, - 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x4f, 0x0a, 0x10, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x73, - 0x75, 0x62, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x74, - 0x65, 0x64, 0x48, 0x00, 0x52, 0x0f, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x53, 0x75, 0x62, 0x6d, - 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, 0x49, 0x0a, 0x0e, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, - 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, - 0x31, 0x2e, 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x48, - 0x00, 0x52, 0x0d, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x64, - 0x12, 0x4d, 0x0a, 0x10, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x6f, 0x5f, 0x6c, - 0x6f, 0x67, 0x69, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x6f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x48, 0x00, 0x52, - 0x0e, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x6f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, - 0x5c, 0x0a, 0x15, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, - 0x65, 0x64, 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, - 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x4f, 0x0a, - 0x10, 0x61, 0x69, 0x72, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, - 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x69, 0x72, 0x64, - 0x72, 0x6f, 0x70, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0f, 0x61, - 0x69, 0x72, 0x64, 0x72, 0x6f, 0x70, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x42, 0x0d, - 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x4a, 0x04, 0x08, - 0x0b, 0x10, 0x0c, 0x22, 0x98, 0x01, 0x0a, 0x0a, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x69, - 0x6e, 0x67, 0x12, 0x44, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x44, 0x0a, 0x0a, 0x70, 0x69, 0x6e, 0x67, - 0x5f, 0x64, 0x65, 0x6c, 0x61, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xaa, 0x01, - 0x02, 0x08, 0x01, 0x52, 0x09, 0x70, 0x69, 0x6e, 0x67, 0x44, 0x65, 0x6c, 0x61, 0x79, 0x22, 0x52, - 0x0a, 0x0a, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x6e, 0x67, 0x12, 0x44, 0x0a, 0x09, + 0x41, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x46, 0x65, 0x65, 0x50, 0x61, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x92, 0x01, 0x02, 0x10, 0x03, + 0x52, 0x0e, 0x61, 0x64, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x46, 0x65, 0x65, 0x73, + 0x42, 0x16, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, + 0x61, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x53, 0x0a, 0x0b, 0x43, 0x6f, 0x64, 0x65, + 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x12, 0x44, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, + 0x08, 0x01, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x5a, 0x0a, + 0x15, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, + 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x41, 0x0a, 0x09, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, + 0x08, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, 0x8f, 0x01, 0x0a, 0x0f, 0x49, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x12, 0x41, 0x0a, + 0x09, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, + 0x12, 0x39, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x55, 0x0a, 0x0d, 0x57, + 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x44, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x32, 0xb7, 0x04, 0x0a, 0x09, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, - 0x12, 0x70, 0x0a, 0x11, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x2b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x30, 0x01, 0x12, 0x99, 0x01, 0x0a, 0x1e, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x57, 0x69, 0x74, 0x68, 0x4b, 0x65, 0x65, 0x70, - 0x41, 0x6c, 0x69, 0x76, 0x65, 0x12, 0x38, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x57, 0x69, 0x74, 0x68, 0x4b, - 0x65, 0x65, 0x70, 0x41, 0x6c, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x39, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, - 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x57, 0x69, 0x74, 0x68, 0x4b, 0x65, 0x65, 0x70, 0x41, 0x6c, 0x69, - 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x5f, - 0x0a, 0x0c, 0x50, 0x6f, 0x6c, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x26, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x6c, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x5d, 0x0a, 0x0b, 0x41, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x25, + 0x6d, 0x70, 0x22, 0xbb, 0x02, 0x0a, 0x0e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x6f, + 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x3a, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x42, 0x0a, 0xba, + 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, + 0x6e, 0x12, 0x47, 0x0a, 0x08, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x72, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, + 0x52, 0x08, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, + 0x53, 0x0a, 0x0e, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x5f, 0x6b, 0x65, + 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x6e, 0x64, + 0x65, 0x7a, 0x76, 0x6f, 0x75, 0x73, 0x4b, 0x65, 0x79, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x7a, 0x76, 0x6f, 0x75, + 0x73, 0x4b, 0x65, 0x79, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, + 0x22, 0x5b, 0x0a, 0x13, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x44, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, + 0x74, 0x61, 0x6d, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, + 0x08, 0x01, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xfc, 0x01, + 0x0a, 0x0f, 0x41, 0x69, 0x72, 0x64, 0x72, 0x6f, 0x70, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x64, 0x12, 0x4f, 0x0a, 0x0c, 0x61, 0x69, 0x72, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x74, 0x79, 0x70, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x69, + 0x72, 0x64, 0x72, 0x6f, 0x70, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x0b, 0x61, 0x69, 0x72, 0x64, 0x72, 0x6f, 0x70, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x52, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, + 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x42, 0x0a, 0xba, 0xe9, + 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0c, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x44, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, + 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, 0x08, + 0x01, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xc2, 0x07, 0x0a, + 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x38, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x00, 0x52, 0x02, + 0x69, 0x64, 0x12, 0x6a, 0x0a, 0x1e, 0x73, 0x65, 0x6e, 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x5f, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x73, 0x69, 0x67, 0x6e, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, + 0x00, 0x52, 0x1b, 0x73, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x57, + 0x0a, 0x14, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x6f, 0x5f, 0x67, 0x72, 0x61, + 0x62, 0x5f, 0x62, 0x69, 0x6c, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x6f, 0x47, 0x72, 0x61, 0x62, 0x42, 0x69, + 0x6c, 0x6c, 0x48, 0x00, 0x52, 0x11, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x6f, 0x47, + 0x72, 0x61, 0x62, 0x42, 0x69, 0x6c, 0x6c, 0x12, 0x60, 0x0a, 0x17, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x5f, 0x74, 0x6f, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x5f, 0x62, 0x69, + 0x6c, 0x6c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x54, 0x6f, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x42, 0x69, 0x6c, + 0x6c, 0x48, 0x00, 0x52, 0x14, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x6f, 0x52, 0x65, + 0x63, 0x65, 0x69, 0x76, 0x65, 0x42, 0x69, 0x6c, 0x6c, 0x12, 0x43, 0x0a, 0x0c, 0x63, 0x6f, 0x64, + 0x65, 0x5f, 0x73, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x64, 0x65, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x48, + 0x00, 0x52, 0x0b, 0x63, 0x6f, 0x64, 0x65, 0x53, 0x63, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x12, 0x62, + 0x0a, 0x17, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x5f, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x28, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, + 0x65, 0x64, 0x50, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x15, 0x63, 0x6c, 0x69, + 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x50, 0x61, 0x79, 0x6d, 0x65, + 0x6e, 0x74, 0x12, 0x4f, 0x0a, 0x10, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x75, 0x62, + 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, 0x74, 0x65, 0x64, + 0x48, 0x00, 0x52, 0x0f, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x53, 0x75, 0x62, 0x6d, 0x69, 0x74, + 0x74, 0x65, 0x64, 0x12, 0x49, 0x0a, 0x0e, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x5f, 0x63, + 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, + 0x57, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x48, 0x00, 0x52, + 0x0d, 0x77, 0x65, 0x62, 0x68, 0x6f, 0x6f, 0x6b, 0x43, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x4d, + 0x0a, 0x10, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x5f, 0x74, 0x6f, 0x5f, 0x6c, 0x6f, 0x67, + 0x69, 0x6e, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x54, 0x6f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x0e, 0x72, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x54, 0x6f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x5c, 0x0a, + 0x15, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x5f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4c, + 0x6f, 0x67, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x13, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, + 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x12, 0x4f, 0x0a, 0x10, 0x61, + 0x69, 0x72, 0x64, 0x72, 0x6f, 0x70, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x69, 0x72, 0x64, 0x72, 0x6f, + 0x70, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0f, 0x61, 0x69, 0x72, + 0x64, 0x72, 0x6f, 0x70, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x42, 0x0d, 0x0a, 0x04, + 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x4a, 0x04, 0x08, 0x0b, 0x10, + 0x0c, 0x32, 0xb7, 0x04, 0x0a, 0x09, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x12, + 0x70, 0x0a, 0x11, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x12, 0x2b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, + 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x30, + 0x01, 0x12, 0x99, 0x01, 0x0a, 0x1e, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x57, 0x69, 0x74, 0x68, 0x4b, 0x65, 0x65, 0x70, 0x41, + 0x6c, 0x69, 0x76, 0x65, 0x12, 0x38, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x57, 0x69, 0x74, 0x68, 0x4b, 0x65, + 0x65, 0x70, 0x41, 0x6c, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, - 0x76, 0x31, 0x2e, 0x41, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, + 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x57, 0x69, 0x74, 0x68, 0x4b, 0x65, 0x65, 0x70, 0x41, 0x6c, 0x69, 0x76, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x5f, 0x0a, + 0x0c, 0x50, 0x6f, 0x6c, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x26, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, + 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x6b, 0x4d, 0x65, 0x73, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, - 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x25, 0x2e, + 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x6c, 0x6c, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5d, + 0x0a, 0x0b, 0x41, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x7f, 0x0a, 0x1c, - 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x5a, 0x4e, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x64, 0x2f, 0x67, 0x6f, 0x2f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2f, - 0x76, 0x31, 0x3b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0xa2, 0x02, 0x0e, 0x43, - 0x50, 0x42, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x56, 0x31, 0x62, 0x06, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x31, 0x2e, 0x41, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5c, 0x0a, + 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x25, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x7f, 0x0a, 0x1c, 0x63, + 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2e, 0x76, 0x31, 0x5a, 0x4e, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x64, 0x2f, 0x67, 0x6f, 0x2f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x2f, 0x76, + 0x31, 0x3b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0xa2, 0x02, 0x0e, 0x43, 0x50, + 0x42, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x69, 0x6e, 0x67, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -2119,7 +1994,7 @@ func file_messaging_v1_messaging_service_proto_rawDescGZIP() []byte { } var file_messaging_v1_messaging_service_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_messaging_v1_messaging_service_proto_msgTypes = make([]protoimpl.MessageInfo, 24) +var file_messaging_v1_messaging_service_proto_msgTypes = make([]protoimpl.MessageInfo, 22) var file_messaging_v1_messaging_service_proto_goTypes = []interface{}{ (AckMesssagesResponse_Result)(0), // 0: code.messaging.v1.AckMesssagesResponse.Result (SendMessageResponse_Result)(0), // 1: code.messaging.v1.SendMessageResponse.Result @@ -2145,9 +2020,9 @@ var file_messaging_v1_messaging_service_proto_goTypes = []interface{}{ (*ClientRejectedLogin)(nil), // 21: code.messaging.v1.ClientRejectedLogin (*AirdropReceived)(nil), // 22: code.messaging.v1.AirdropReceived (*Message)(nil), // 23: code.messaging.v1.Message - (*ServerPing)(nil), // 24: code.messaging.v1.ServerPing - (*ClientPong)(nil), // 25: code.messaging.v1.ClientPong - (*v1.Signature)(nil), // 26: code.common.v1.Signature + (*v1.Signature)(nil), // 24: code.common.v1.Signature + (*v1.ClientPong)(nil), // 25: code.common.v1.ClientPong + (*v1.ServerPing)(nil), // 26: code.common.v1.ServerPing (*v1.SolanaAccountId)(nil), // 27: code.common.v1.SolanaAccountId (*v2.ExchangeData)(nil), // 28: code.transaction.v2.ExchangeData (*v2.ExchangeDataWithoutRate)(nil), // 29: code.transaction.v2.ExchangeDataWithoutRate @@ -2157,25 +2032,24 @@ var file_messaging_v1_messaging_service_proto_goTypes = []interface{}{ (*v1.IntentId)(nil), // 33: code.common.v1.IntentId (*v2.Metadata)(nil), // 34: code.transaction.v2.Metadata (v2.AirdropType)(0), // 35: code.transaction.v2.AirdropType - (*durationpb.Duration)(nil), // 36: google.protobuf.Duration } var file_messaging_v1_messaging_service_proto_depIdxs = []int32{ 12, // 0: code.messaging.v1.OpenMessageStreamRequest.rendezvous_key:type_name -> code.messaging.v1.RendezvousKey - 26, // 1: code.messaging.v1.OpenMessageStreamRequest.signature:type_name -> code.common.v1.Signature + 24, // 1: code.messaging.v1.OpenMessageStreamRequest.signature:type_name -> code.common.v1.Signature 23, // 2: code.messaging.v1.OpenMessageStreamResponse.messages:type_name -> code.messaging.v1.Message 2, // 3: code.messaging.v1.OpenMessageStreamWithKeepAliveRequest.request:type_name -> code.messaging.v1.OpenMessageStreamRequest - 25, // 4: code.messaging.v1.OpenMessageStreamWithKeepAliveRequest.pong:type_name -> code.messaging.v1.ClientPong + 25, // 4: code.messaging.v1.OpenMessageStreamWithKeepAliveRequest.pong:type_name -> code.common.v1.ClientPong 3, // 5: code.messaging.v1.OpenMessageStreamWithKeepAliveResponse.response:type_name -> code.messaging.v1.OpenMessageStreamResponse - 24, // 6: code.messaging.v1.OpenMessageStreamWithKeepAliveResponse.ping:type_name -> code.messaging.v1.ServerPing + 26, // 6: code.messaging.v1.OpenMessageStreamWithKeepAliveResponse.ping:type_name -> code.common.v1.ServerPing 12, // 7: code.messaging.v1.PollMessagesRequest.rendezvous_key:type_name -> code.messaging.v1.RendezvousKey - 26, // 8: code.messaging.v1.PollMessagesRequest.signature:type_name -> code.common.v1.Signature + 24, // 8: code.messaging.v1.PollMessagesRequest.signature:type_name -> code.common.v1.Signature 23, // 9: code.messaging.v1.PollMessagesResponse.messages:type_name -> code.messaging.v1.Message 12, // 10: code.messaging.v1.AckMessagesRequest.rendezvous_key:type_name -> code.messaging.v1.RendezvousKey 13, // 11: code.messaging.v1.AckMessagesRequest.message_ids:type_name -> code.messaging.v1.MessageId 0, // 12: code.messaging.v1.AckMesssagesResponse.result:type_name -> code.messaging.v1.AckMesssagesResponse.Result 23, // 13: code.messaging.v1.SendMessageRequest.message:type_name -> code.messaging.v1.Message 12, // 14: code.messaging.v1.SendMessageRequest.rendezvous_key:type_name -> code.messaging.v1.RendezvousKey - 26, // 15: code.messaging.v1.SendMessageRequest.signature:type_name -> code.common.v1.Signature + 24, // 15: code.messaging.v1.SendMessageRequest.signature:type_name -> code.common.v1.Signature 1, // 16: code.messaging.v1.SendMessageResponse.result:type_name -> code.messaging.v1.SendMessageResponse.Result 13, // 17: code.messaging.v1.SendMessageResponse.message_id:type_name -> code.messaging.v1.MessageId 27, // 18: code.messaging.v1.RequestToGrabBill.requestor_account:type_name -> code.common.v1.SolanaAccountId @@ -2184,7 +2058,7 @@ var file_messaging_v1_messaging_service_proto_depIdxs = []int32{ 29, // 21: code.messaging.v1.RequestToReceiveBill.partial:type_name -> code.transaction.v2.ExchangeDataWithoutRate 30, // 22: code.messaging.v1.RequestToReceiveBill.domain:type_name -> code.common.v1.Domain 27, // 23: code.messaging.v1.RequestToReceiveBill.verifier:type_name -> code.common.v1.SolanaAccountId - 26, // 24: code.messaging.v1.RequestToReceiveBill.signature:type_name -> code.common.v1.Signature + 24, // 24: code.messaging.v1.RequestToReceiveBill.signature:type_name -> code.common.v1.Signature 12, // 25: code.messaging.v1.RequestToReceiveBill.rendezvous_key:type_name -> code.messaging.v1.RendezvousKey 31, // 26: code.messaging.v1.RequestToReceiveBill.additional_fees:type_name -> code.transaction.v2.AdditionalFeePayment 32, // 27: code.messaging.v1.CodeScanned.timestamp:type_name -> google.protobuf.Timestamp @@ -2194,14 +2068,14 @@ var file_messaging_v1_messaging_service_proto_depIdxs = []int32{ 32, // 31: code.messaging.v1.WebhookCalled.timestamp:type_name -> google.protobuf.Timestamp 30, // 32: code.messaging.v1.RequestToLogin.domain:type_name -> code.common.v1.Domain 27, // 33: code.messaging.v1.RequestToLogin.verifier:type_name -> code.common.v1.SolanaAccountId - 26, // 34: code.messaging.v1.RequestToLogin.signature:type_name -> code.common.v1.Signature + 24, // 34: code.messaging.v1.RequestToLogin.signature:type_name -> code.common.v1.Signature 12, // 35: code.messaging.v1.RequestToLogin.rendezvous_key:type_name -> code.messaging.v1.RendezvousKey 32, // 36: code.messaging.v1.ClientRejectedLogin.timestamp:type_name -> google.protobuf.Timestamp 35, // 37: code.messaging.v1.AirdropReceived.airdrop_type:type_name -> code.transaction.v2.AirdropType 28, // 38: code.messaging.v1.AirdropReceived.exchange_data:type_name -> code.transaction.v2.ExchangeData 32, // 39: code.messaging.v1.AirdropReceived.timestamp:type_name -> google.protobuf.Timestamp 13, // 40: code.messaging.v1.Message.id:type_name -> code.messaging.v1.MessageId - 26, // 41: code.messaging.v1.Message.send_message_request_signature:type_name -> code.common.v1.Signature + 24, // 41: code.messaging.v1.Message.send_message_request_signature:type_name -> code.common.v1.Signature 14, // 42: code.messaging.v1.Message.request_to_grab_bill:type_name -> code.messaging.v1.RequestToGrabBill 15, // 43: code.messaging.v1.Message.request_to_receive_bill:type_name -> code.messaging.v1.RequestToReceiveBill 16, // 44: code.messaging.v1.Message.code_scanned:type_name -> code.messaging.v1.CodeScanned @@ -2211,24 +2085,21 @@ var file_messaging_v1_messaging_service_proto_depIdxs = []int32{ 20, // 48: code.messaging.v1.Message.request_to_login:type_name -> code.messaging.v1.RequestToLogin 21, // 49: code.messaging.v1.Message.client_rejected_login:type_name -> code.messaging.v1.ClientRejectedLogin 22, // 50: code.messaging.v1.Message.airdrop_received:type_name -> code.messaging.v1.AirdropReceived - 32, // 51: code.messaging.v1.ServerPing.timestamp:type_name -> google.protobuf.Timestamp - 36, // 52: code.messaging.v1.ServerPing.ping_delay:type_name -> google.protobuf.Duration - 32, // 53: code.messaging.v1.ClientPong.timestamp:type_name -> google.protobuf.Timestamp - 2, // 54: code.messaging.v1.Messaging.OpenMessageStream:input_type -> code.messaging.v1.OpenMessageStreamRequest - 4, // 55: code.messaging.v1.Messaging.OpenMessageStreamWithKeepAlive:input_type -> code.messaging.v1.OpenMessageStreamWithKeepAliveRequest - 6, // 56: code.messaging.v1.Messaging.PollMessages:input_type -> code.messaging.v1.PollMessagesRequest - 8, // 57: code.messaging.v1.Messaging.AckMessages:input_type -> code.messaging.v1.AckMessagesRequest - 10, // 58: code.messaging.v1.Messaging.SendMessage:input_type -> code.messaging.v1.SendMessageRequest - 3, // 59: code.messaging.v1.Messaging.OpenMessageStream:output_type -> code.messaging.v1.OpenMessageStreamResponse - 5, // 60: code.messaging.v1.Messaging.OpenMessageStreamWithKeepAlive:output_type -> code.messaging.v1.OpenMessageStreamWithKeepAliveResponse - 7, // 61: code.messaging.v1.Messaging.PollMessages:output_type -> code.messaging.v1.PollMessagesResponse - 9, // 62: code.messaging.v1.Messaging.AckMessages:output_type -> code.messaging.v1.AckMesssagesResponse - 11, // 63: code.messaging.v1.Messaging.SendMessage:output_type -> code.messaging.v1.SendMessageResponse - 59, // [59:64] is the sub-list for method output_type - 54, // [54:59] is the sub-list for method input_type - 54, // [54:54] is the sub-list for extension type_name - 54, // [54:54] is the sub-list for extension extendee - 0, // [0:54] is the sub-list for field type_name + 2, // 51: code.messaging.v1.Messaging.OpenMessageStream:input_type -> code.messaging.v1.OpenMessageStreamRequest + 4, // 52: code.messaging.v1.Messaging.OpenMessageStreamWithKeepAlive:input_type -> code.messaging.v1.OpenMessageStreamWithKeepAliveRequest + 6, // 53: code.messaging.v1.Messaging.PollMessages:input_type -> code.messaging.v1.PollMessagesRequest + 8, // 54: code.messaging.v1.Messaging.AckMessages:input_type -> code.messaging.v1.AckMessagesRequest + 10, // 55: code.messaging.v1.Messaging.SendMessage:input_type -> code.messaging.v1.SendMessageRequest + 3, // 56: code.messaging.v1.Messaging.OpenMessageStream:output_type -> code.messaging.v1.OpenMessageStreamResponse + 5, // 57: code.messaging.v1.Messaging.OpenMessageStreamWithKeepAlive:output_type -> code.messaging.v1.OpenMessageStreamWithKeepAliveResponse + 7, // 58: code.messaging.v1.Messaging.PollMessages:output_type -> code.messaging.v1.PollMessagesResponse + 9, // 59: code.messaging.v1.Messaging.AckMessages:output_type -> code.messaging.v1.AckMesssagesResponse + 11, // 60: code.messaging.v1.Messaging.SendMessage:output_type -> code.messaging.v1.SendMessageResponse + 56, // [56:61] is the sub-list for method output_type + 51, // [51:56] is the sub-list for method input_type + 51, // [51:51] is the sub-list for extension type_name + 51, // [51:51] is the sub-list for extension extendee + 0, // [0:51] is the sub-list for field type_name } func init() { file_messaging_v1_messaging_service_proto_init() } @@ -2501,30 +2372,6 @@ func file_messaging_v1_messaging_service_proto_init() { return nil } } - file_messaging_v1_messaging_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ServerPing); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_messaging_v1_messaging_service_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ClientPong); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } } file_messaging_v1_messaging_service_proto_msgTypes[2].OneofWrappers = []interface{}{ (*OpenMessageStreamWithKeepAliveRequest_Request)(nil), @@ -2555,7 +2402,7 @@ func file_messaging_v1_messaging_service_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_messaging_v1_messaging_service_proto_rawDesc, NumEnums: 2, - NumMessages: 24, + NumMessages: 22, NumExtensions: 0, NumServices: 1, }, diff --git a/generated/go/messaging/v1/messaging_service.pb.validate.go b/generated/go/messaging/v1/messaging_service.pb.validate.go index 19dd2ed..3b14a85 100644 --- a/generated/go/messaging/v1/messaging_service.pb.validate.go +++ b/generated/go/messaging/v1/messaging_service.pb.validate.go @@ -2221,152 +2221,3 @@ var _ interface { Cause() error ErrorName() string } = MessageValidationError{} - -// Validate checks the field values on ServerPing with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. -func (m *ServerPing) Validate() error { - if m == nil { - return nil - } - - if m.GetTimestamp() == nil { - return ServerPingValidationError{ - field: "Timestamp", - reason: "value is required", - } - } - - if m.GetPingDelay() == nil { - return ServerPingValidationError{ - field: "PingDelay", - reason: "value is required", - } - } - - return nil -} - -// ServerPingValidationError is the validation error returned by -// ServerPing.Validate if the designated constraints aren't met. -type ServerPingValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e ServerPingValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e ServerPingValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e ServerPingValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e ServerPingValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e ServerPingValidationError) ErrorName() string { return "ServerPingValidationError" } - -// Error satisfies the builtin error interface -func (e ServerPingValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sServerPing.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = ServerPingValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = ServerPingValidationError{} - -// Validate checks the field values on ClientPong with the rules defined in the -// proto definition for this message. If any rules are violated, an error is returned. -func (m *ClientPong) Validate() error { - if m == nil { - return nil - } - - if m.GetTimestamp() == nil { - return ClientPongValidationError{ - field: "Timestamp", - reason: "value is required", - } - } - - return nil -} - -// ClientPongValidationError is the validation error returned by -// ClientPong.Validate if the designated constraints aren't met. -type ClientPongValidationError struct { - field string - reason string - cause error - key bool -} - -// Field function returns field value. -func (e ClientPongValidationError) Field() string { return e.field } - -// Reason function returns reason value. -func (e ClientPongValidationError) Reason() string { return e.reason } - -// Cause function returns cause value. -func (e ClientPongValidationError) Cause() error { return e.cause } - -// Key function returns key value. -func (e ClientPongValidationError) Key() bool { return e.key } - -// ErrorName returns error name. -func (e ClientPongValidationError) ErrorName() string { return "ClientPongValidationError" } - -// Error satisfies the builtin error interface -func (e ClientPongValidationError) Error() string { - cause := "" - if e.cause != nil { - cause = fmt.Sprintf(" | caused by: %v", e.cause) - } - - key := "" - if e.key { - key = "key for " - } - - return fmt.Sprintf( - "invalid %sClientPong.%s: %s%s", - key, - e.field, - e.reason, - cause) -} - -var _ error = ClientPongValidationError{} - -var _ interface { - Field() string - Reason() string - Key() bool - Cause() error - ErrorName() string -} = ClientPongValidationError{} diff --git a/generated/protobuf-es/chat/v1/chat_service_connect.ts b/generated/protobuf-es/chat/v1/chat_service_connect.ts index 967554f..886e2d7 100644 --- a/generated/protobuf-es/chat/v1/chat_service_connect.ts +++ b/generated/protobuf-es/chat/v1/chat_service_connect.ts @@ -3,7 +3,7 @@ /* eslint-disable */ // @ts-nocheck -import { AdvancePointerRequest, AdvancePointerResponse, GetChatsRequest, GetChatsResponse, GetMessagesRequest, GetMessagesResponse, SetMuteStateRequest, SetMuteStateResponse, SetSubscriptionStateRequest, SetSubscriptionStateResponse } from "./chat_service_pb"; +import { AdvancePointerRequest, AdvancePointerResponse, GetChatsRequest, GetChatsResponse, GetMessagesRequest, GetMessagesResponse, SendMessageRequest, SendMessageResponse, SetMuteStateRequest, SetMuteStateResponse, SetSubscriptionStateRequest, SetSubscriptionStateResponse, StreamChatEventsRequest, StreamChatEventsResponse } from "./chat_service_pb"; import { MethodKind } from "@bufbuild/protobuf"; /** @@ -67,6 +67,24 @@ export const Chat = { O: SetSubscriptionStateResponse, kind: MethodKind.Unary, }, + /** + * @generated from rpc code.chat.v1.Chat.StreamChatEvents + */ + streamChatEvents: { + name: "StreamChatEvents", + I: StreamChatEventsRequest, + O: StreamChatEventsResponse, + kind: MethodKind.BiDiStreaming, + }, + /** + * @generated from rpc code.chat.v1.Chat.SendMessage + */ + sendMessage: { + name: "SendMessage", + I: SendMessageRequest, + O: SendMessageResponse, + kind: MethodKind.Unary, + }, } } as const; diff --git a/generated/protobuf-es/chat/v1/chat_service_pb.ts b/generated/protobuf-es/chat/v1/chat_service_pb.ts index d271301..f27b39e 100644 --- a/generated/protobuf-es/chat/v1/chat_service_pb.ts +++ b/generated/protobuf-es/chat/v1/chat_service_pb.ts @@ -5,7 +5,7 @@ import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialMessage, PlainMessage } from "@bufbuild/protobuf"; import { Message, proto3, Timestamp } from "@bufbuild/protobuf"; -import { Domain, Signature, SolanaAccountId } from "../../common/v1/model_pb"; +import { ClientPong, Domain, ServerPing, Signature, SolanaAccountId } from "../../common/v1/model_pb"; import { ExchangeData, ExchangeDataWithoutRate } from "../../transaction/v2/transaction_service_pb"; /** @@ -656,6 +656,349 @@ proto3.util.setEnumType(SetSubscriptionStateResponse_Result, "code.chat.v1.SetSu { no: 2, name: "CANT_UNSUBSCRIBE" }, ]); +/** + * @generated from message code.chat.v1.OpenChatEventStream + */ +export class OpenChatEventStream extends Message { + /** + * @generated from field: code.chat.v1.ChatId chat_id = 1; + */ + chatId?: ChatId; + + /** + * @generated from field: code.common.v1.SolanaAccountId owner = 2; + */ + owner?: SolanaAccountId; + + /** + * @generated from field: code.common.v1.Signature signature = 3; + */ + signature?: Signature; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "code.chat.v1.OpenChatEventStream"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "chat_id", kind: "message", T: ChatId }, + { no: 2, name: "owner", kind: "message", T: SolanaAccountId }, + { no: 3, name: "signature", kind: "message", T: Signature }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): OpenChatEventStream { + return new OpenChatEventStream().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): OpenChatEventStream { + return new OpenChatEventStream().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): OpenChatEventStream { + return new OpenChatEventStream().fromJsonString(jsonString, options); + } + + static equals(a: OpenChatEventStream | PlainMessage | undefined, b: OpenChatEventStream | PlainMessage | undefined): boolean { + return proto3.util.equals(OpenChatEventStream, a, b); + } +} + +/** + * @generated from message code.chat.v1.ChatStreamEvent + */ +export class ChatStreamEvent extends Message { + /** + * @generated from field: repeated code.chat.v1.ChatMessage messages = 1; + */ + messages: ChatMessage[] = []; + + /** + * @generated from field: repeated code.chat.v1.Pointer pointers = 2; + */ + pointers: Pointer[] = []; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "code.chat.v1.ChatStreamEvent"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "messages", kind: "message", T: ChatMessage, repeated: true }, + { no: 2, name: "pointers", kind: "message", T: Pointer, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ChatStreamEvent { + return new ChatStreamEvent().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ChatStreamEvent { + return new ChatStreamEvent().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ChatStreamEvent { + return new ChatStreamEvent().fromJsonString(jsonString, options); + } + + static equals(a: ChatStreamEvent | PlainMessage | undefined, b: ChatStreamEvent | PlainMessage | undefined): boolean { + return proto3.util.equals(ChatStreamEvent, a, b); + } +} + +/** + * @generated from message code.chat.v1.ChatStreamEventBatch + */ +export class ChatStreamEventBatch extends Message { + /** + * @generated from field: repeated code.chat.v1.ChatStreamEvent events = 2; + */ + events: ChatStreamEvent[] = []; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "code.chat.v1.ChatStreamEventBatch"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 2, name: "events", kind: "message", T: ChatStreamEvent, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ChatStreamEventBatch { + return new ChatStreamEventBatch().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ChatStreamEventBatch { + return new ChatStreamEventBatch().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ChatStreamEventBatch { + return new ChatStreamEventBatch().fromJsonString(jsonString, options); + } + + static equals(a: ChatStreamEventBatch | PlainMessage | undefined, b: ChatStreamEventBatch | PlainMessage | undefined): boolean { + return proto3.util.equals(ChatStreamEventBatch, a, b); + } +} + +/** + * @generated from message code.chat.v1.StreamChatEventsRequest + */ +export class StreamChatEventsRequest extends Message { + /** + * @generated from oneof code.chat.v1.StreamChatEventsRequest.type + */ + type: { + /** + * @generated from field: code.chat.v1.OpenChatEventStream open_stream = 1; + */ + value: OpenChatEventStream; + case: "openStream"; + } | { + /** + * @generated from field: code.common.v1.ClientPong pong = 2; + */ + value: ClientPong; + case: "pong"; + } | { case: undefined; value?: undefined } = { case: undefined }; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "code.chat.v1.StreamChatEventsRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "open_stream", kind: "message", T: OpenChatEventStream, oneof: "type" }, + { no: 2, name: "pong", kind: "message", T: ClientPong, oneof: "type" }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): StreamChatEventsRequest { + return new StreamChatEventsRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): StreamChatEventsRequest { + return new StreamChatEventsRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): StreamChatEventsRequest { + return new StreamChatEventsRequest().fromJsonString(jsonString, options); + } + + static equals(a: StreamChatEventsRequest | PlainMessage | undefined, b: StreamChatEventsRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(StreamChatEventsRequest, a, b); + } +} + +/** + * @generated from message code.chat.v1.StreamChatEventsResponse + */ +export class StreamChatEventsResponse extends Message { + /** + * @generated from oneof code.chat.v1.StreamChatEventsResponse.type + */ + type: { + /** + * @generated from field: code.chat.v1.ChatStreamEventBatch events = 1; + */ + value: ChatStreamEventBatch; + case: "events"; + } | { + /** + * @generated from field: code.common.v1.ServerPing ping = 2; + */ + value: ServerPing; + case: "ping"; + } | { case: undefined; value?: undefined } = { case: undefined }; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "code.chat.v1.StreamChatEventsResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "events", kind: "message", T: ChatStreamEventBatch, oneof: "type" }, + { no: 2, name: "ping", kind: "message", T: ServerPing, oneof: "type" }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): StreamChatEventsResponse { + return new StreamChatEventsResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): StreamChatEventsResponse { + return new StreamChatEventsResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): StreamChatEventsResponse { + return new StreamChatEventsResponse().fromJsonString(jsonString, options); + } + + static equals(a: StreamChatEventsResponse | PlainMessage | undefined, b: StreamChatEventsResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(StreamChatEventsResponse, a, b); + } +} + +/** + * @generated from message code.chat.v1.SendMessageRequest + */ +export class SendMessageRequest extends Message { + /** + * @generated from field: code.common.v1.SolanaAccountId owner = 1; + */ + owner?: SolanaAccountId; + + /** + * @generated from field: code.common.v1.Signature signature = 2; + */ + signature?: Signature; + + /** + * @generated from field: code.chat.v1.ChatId chat_id = 3; + */ + chatId?: ChatId; + + /** + * todo: What field type should this be? Maybe the chat message itself with fields missing? + * + * @generated from field: repeated code.chat.v1.Content content = 4; + */ + content: Content[] = []; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "code.chat.v1.SendMessageRequest"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "owner", kind: "message", T: SolanaAccountId }, + { no: 2, name: "signature", kind: "message", T: Signature }, + { no: 3, name: "chat_id", kind: "message", T: ChatId }, + { no: 4, name: "content", kind: "message", T: Content, repeated: true }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SendMessageRequest { + return new SendMessageRequest().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SendMessageRequest { + return new SendMessageRequest().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SendMessageRequest { + return new SendMessageRequest().fromJsonString(jsonString, options); + } + + static equals(a: SendMessageRequest | PlainMessage | undefined, b: SendMessageRequest | PlainMessage | undefined): boolean { + return proto3.util.equals(SendMessageRequest, a, b); + } +} + +/** + * @generated from message code.chat.v1.SendMessageResponse + */ +export class SendMessageResponse extends Message { + /** + * @generated from field: code.chat.v1.SendMessageResponse.Result result = 1; + */ + result = SendMessageResponse_Result.OK; + + /** + * @generated from field: code.chat.v1.ChatMessage message = 2; + */ + message?: ChatMessage; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "code.chat.v1.SendMessageResponse"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "result", kind: "enum", T: proto3.getEnumType(SendMessageResponse_Result) }, + { no: 2, name: "message", kind: "message", T: ChatMessage }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): SendMessageResponse { + return new SendMessageResponse().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): SendMessageResponse { + return new SendMessageResponse().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): SendMessageResponse { + return new SendMessageResponse().fromJsonString(jsonString, options); + } + + static equals(a: SendMessageResponse | PlainMessage | undefined, b: SendMessageResponse | PlainMessage | undefined): boolean { + return proto3.util.equals(SendMessageResponse, a, b); + } +} + +/** + * @generated from enum code.chat.v1.SendMessageResponse.Result + */ +export enum SendMessageResponse_Result { + /** + * @generated from enum value: OK = 0; + */ + OK = 0, +} +// Retrieve enum metadata with: proto3.getEnumType(SendMessageResponse_Result) +proto3.util.setEnumType(SendMessageResponse_Result, "code.chat.v1.SendMessageResponse.Result", [ + { no: 0, name: "OK" }, +]); + /** * @generated from message code.chat.v1.ChatId */ @@ -730,6 +1073,45 @@ export class ChatMessageId extends Message { } } +/** + * @generated from message code.chat.v1.ChatMemberId + */ +export class ChatMemberId extends Message { + /** + * todo: Public key for now + * + * @generated from field: bytes value = 1; + */ + value = new Uint8Array(0); + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "code.chat.v1.ChatMemberId"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "value", kind: "scalar", T: 12 /* ScalarType.BYTES */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ChatMemberId { + return new ChatMemberId().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ChatMemberId { + return new ChatMemberId().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ChatMemberId { + return new ChatMemberId().fromJsonString(jsonString, options); + } + + static equals(a: ChatMemberId | PlainMessage | undefined, b: ChatMemberId | PlainMessage | undefined): boolean { + return proto3.util.equals(ChatMemberId, a, b); + } +} + /** * @generated from message code.chat.v1.Pointer */ @@ -744,6 +1126,11 @@ export class Pointer extends Message { */ value?: ChatMessageId; + /** + * @generated from field: code.chat.v1.ChatMemberId user = 3; + */ + user?: ChatMemberId; + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); @@ -754,6 +1141,7 @@ export class Pointer extends Message { static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "kind", kind: "enum", T: proto3.getEnumType(Pointer_Kind) }, { no: 2, name: "value", kind: "message", T: ChatMessageId }, + { no: 3, name: "user", kind: "message", T: ChatMemberId }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): Pointer { @@ -786,11 +1174,25 @@ export enum Pointer_Kind { * @generated from enum value: READ = 1; */ READ = 1, + + /** + * @generated from enum value: DELIVERED = 2; + */ + DELIVERED = 2, + + /** + * Probably always inferred by OK result in SendMessageResponse + * + * @generated from enum value: SENT = 3; + */ + SENT = 3, } // Retrieve enum metadata with: proto3.getEnumType(Pointer_Kind) proto3.util.setEnumType(Pointer_Kind, "code.chat.v1.Pointer.Kind", [ { no: 0, name: "UNKNOWN" }, { no: 1, name: "READ" }, + { no: 2, name: "DELIVERED" }, + { no: 3, name: "SENT" }, ]); /** @@ -809,9 +1211,9 @@ export class ChatMetadata extends Message { */ title: { /** - * @generated from field: code.chat.v1.LocalizedContent localized = 2; + * @generated from field: code.chat.v1.ServerLocalizedContent localized = 2; */ - value: LocalizedContent; + value: ServerLocalizedContent; case: "localized"; } | { /** @@ -889,7 +1291,7 @@ export class ChatMetadata extends Message { static readonly typeName = "code.chat.v1.ChatMetadata"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "chat_id", kind: "message", T: ChatId }, - { no: 2, name: "localized", kind: "message", T: LocalizedContent, oneof: "title" }, + { no: 2, name: "localized", kind: "message", T: ServerLocalizedContent, oneof: "title" }, { no: 3, name: "domain", kind: "message", T: Domain, oneof: "title" }, { no: 4, name: "read_pointer", kind: "message", T: Pointer }, { no: 5, name: "num_unread", kind: "scalar", T: 13 /* ScalarType.UINT32 */ }, @@ -950,6 +1352,11 @@ export class ChatMessage extends Message { */ cursor?: Cursor; + /** + * @generated from field: code.chat.v1.ChatMemberId sender = 5; + */ + sender?: ChatMemberId; + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); @@ -962,6 +1369,7 @@ export class ChatMessage extends Message { { no: 2, name: "ts", kind: "message", T: Timestamp }, { no: 3, name: "content", kind: "message", T: Content, repeated: true }, { no: 4, name: "cursor", kind: "message", T: Cursor }, + { no: 5, name: "sender", kind: "message", T: ChatMemberId }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): ChatMessage { @@ -990,10 +1398,10 @@ export class Content extends Message { */ type: { /** - * @generated from field: code.chat.v1.LocalizedContent localized = 1; + * @generated from field: code.chat.v1.ServerLocalizedContent server_localized = 1; */ - value: LocalizedContent; - case: "localized"; + value: ServerLocalizedContent; + case: "serverLocalized"; } | { /** * @generated from field: code.chat.v1.ExchangeDataContent exchange_data = 2; @@ -1006,6 +1414,12 @@ export class Content extends Message { */ value: NaclBoxEncryptedContent; case: "naclBox"; + } | { + /** + * @generated from field: code.chat.v1.UserTextContent user_text = 4; + */ + value: UserTextContent; + case: "userText"; } | { case: undefined; value?: undefined } = { case: undefined }; constructor(data?: PartialMessage) { @@ -1016,9 +1430,10 @@ export class Content extends Message { static readonly runtime: typeof proto3 = proto3; static readonly typeName = "code.chat.v1.Content"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "localized", kind: "message", T: LocalizedContent, oneof: "type" }, + { no: 1, name: "server_localized", kind: "message", T: ServerLocalizedContent, oneof: "type" }, { no: 2, name: "exchange_data", kind: "message", T: ExchangeDataContent, oneof: "type" }, { no: 3, name: "nacl_box", kind: "message", T: NaclBoxEncryptedContent, oneof: "type" }, + { no: 4, name: "user_text", kind: "message", T: UserTextContent, oneof: "type" }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): Content { @@ -1039,9 +1454,9 @@ export class Content extends Message { } /** - * @generated from message code.chat.v1.LocalizedContent + * @generated from message code.chat.v1.ServerLocalizedContent */ -export class LocalizedContent extends Message { +export class ServerLocalizedContent extends Message { /** * When server-side localization is in place, clients will always see the * localized text. @@ -1050,31 +1465,31 @@ export class LocalizedContent extends Message { */ keyOrText = ""; - constructor(data?: PartialMessage) { + constructor(data?: PartialMessage) { super(); proto3.util.initPartial(data, this); } static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "code.chat.v1.LocalizedContent"; + static readonly typeName = "code.chat.v1.ServerLocalizedContent"; static readonly fields: FieldList = proto3.util.newFieldList(() => [ { no: 1, name: "key_or_text", kind: "scalar", T: 9 /* ScalarType.STRING */ }, ]); - static fromBinary(bytes: Uint8Array, options?: Partial): LocalizedContent { - return new LocalizedContent().fromBinary(bytes, options); + static fromBinary(bytes: Uint8Array, options?: Partial): ServerLocalizedContent { + return new ServerLocalizedContent().fromBinary(bytes, options); } - static fromJson(jsonValue: JsonValue, options?: Partial): LocalizedContent { - return new LocalizedContent().fromJson(jsonValue, options); + static fromJson(jsonValue: JsonValue, options?: Partial): ServerLocalizedContent { + return new ServerLocalizedContent().fromJson(jsonValue, options); } - static fromJsonString(jsonString: string, options?: Partial): LocalizedContent { - return new LocalizedContent().fromJsonString(jsonString, options); + static fromJsonString(jsonString: string, options?: Partial): ServerLocalizedContent { + return new ServerLocalizedContent().fromJsonString(jsonString, options); } - static equals(a: LocalizedContent | PlainMessage | undefined, b: LocalizedContent | PlainMessage | undefined): boolean { - return proto3.util.equals(LocalizedContent, a, b); + static equals(a: ServerLocalizedContent | PlainMessage | undefined, b: ServerLocalizedContent | PlainMessage | undefined): boolean { + return proto3.util.equals(ServerLocalizedContent, a, b); } } @@ -1263,6 +1678,43 @@ export class NaclBoxEncryptedContent extends Message { } } +/** + * @generated from message code.chat.v1.UserTextContent + */ +export class UserTextContent extends Message { + /** + * @generated from field: string text = 1; + */ + text = ""; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "code.chat.v1.UserTextContent"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "text", kind: "scalar", T: 9 /* ScalarType.STRING */ }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): UserTextContent { + return new UserTextContent().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): UserTextContent { + return new UserTextContent().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): UserTextContent { + return new UserTextContent().fromJsonString(jsonString, options); + } + + static equals(a: UserTextContent | PlainMessage | undefined, b: UserTextContent | PlainMessage | undefined): boolean { + return proto3.util.equals(UserTextContent, a, b); + } +} + /** * Opaque cursor used across paged APIs. Underlying bytes may change as paging * strategies evolve. diff --git a/generated/protobuf-es/common/v1/model_pb.ts b/generated/protobuf-es/common/v1/model_pb.ts index a73e784..51b4ba9 100644 --- a/generated/protobuf-es/common/v1/model_pb.ts +++ b/generated/protobuf-es/common/v1/model_pb.ts @@ -4,7 +4,7 @@ // @ts-nocheck import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialMessage, PlainMessage } from "@bufbuild/protobuf"; -import { Message, proto3 } from "@bufbuild/protobuf"; +import { Duration, Message, proto3, Timestamp } from "@bufbuild/protobuf"; /** * AccountType associates a type to an account, which infers how an account is used @@ -889,3 +889,91 @@ proto3.util.setEnumType(Response_Result, "code.common.v1.Response.Result", [ { no: 1, name: "ERROR" }, ]); +/** + * @generated from message code.common.v1.ServerPing + */ +export class ServerPing extends Message { + /** + * Timestamp the ping was sent on the stream, for client to get a sense + * of potential network latency + * + * @generated from field: google.protobuf.Timestamp timestamp = 1; + */ + timestamp?: Timestamp; + + /** + * The delay server will apply before sending the next ping + * + * @generated from field: google.protobuf.Duration ping_delay = 2; + */ + pingDelay?: Duration; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "code.common.v1.ServerPing"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "timestamp", kind: "message", T: Timestamp }, + { no: 2, name: "ping_delay", kind: "message", T: Duration }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ServerPing { + return new ServerPing().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ServerPing { + return new ServerPing().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ServerPing { + return new ServerPing().fromJsonString(jsonString, options); + } + + static equals(a: ServerPing | PlainMessage | undefined, b: ServerPing | PlainMessage | undefined): boolean { + return proto3.util.equals(ServerPing, a, b); + } +} + +/** + * @generated from message code.common.v1.ClientPong + */ +export class ClientPong extends Message { + /** + * Timestamp the Pong was sent on the stream, for server to get a sense + * of potential network latency + * + * @generated from field: google.protobuf.Timestamp timestamp = 1; + */ + timestamp?: Timestamp; + + constructor(data?: PartialMessage) { + super(); + proto3.util.initPartial(data, this); + } + + static readonly runtime: typeof proto3 = proto3; + static readonly typeName = "code.common.v1.ClientPong"; + static readonly fields: FieldList = proto3.util.newFieldList(() => [ + { no: 1, name: "timestamp", kind: "message", T: Timestamp }, + ]); + + static fromBinary(bytes: Uint8Array, options?: Partial): ClientPong { + return new ClientPong().fromBinary(bytes, options); + } + + static fromJson(jsonValue: JsonValue, options?: Partial): ClientPong { + return new ClientPong().fromJson(jsonValue, options); + } + + static fromJsonString(jsonString: string, options?: Partial): ClientPong { + return new ClientPong().fromJsonString(jsonString, options); + } + + static equals(a: ClientPong | PlainMessage | undefined, b: ClientPong | PlainMessage | undefined): boolean { + return proto3.util.equals(ClientPong, a, b); + } +} + diff --git a/generated/protobuf-es/messaging/v1/messaging_service_pb.ts b/generated/protobuf-es/messaging/v1/messaging_service_pb.ts index 47e427e..470ce93 100644 --- a/generated/protobuf-es/messaging/v1/messaging_service_pb.ts +++ b/generated/protobuf-es/messaging/v1/messaging_service_pb.ts @@ -4,8 +4,8 @@ // @ts-nocheck import type { BinaryReadOptions, FieldList, JsonReadOptions, JsonValue, PartialMessage, PlainMessage } from "@bufbuild/protobuf"; -import { Duration, Message as Message$1, proto3, Timestamp } from "@bufbuild/protobuf"; -import { Domain, IntentId, Signature, SolanaAccountId } from "../../common/v1/model_pb"; +import { Message as Message$1, proto3, Timestamp } from "@bufbuild/protobuf"; +import { ClientPong, Domain, IntentId, ServerPing, Signature, SolanaAccountId } from "../../common/v1/model_pb"; import { AdditionalFeePayment, AirdropType, ExchangeData, ExchangeDataWithoutRate, Metadata } from "../../transaction/v2/transaction_service_pb"; /** @@ -97,7 +97,7 @@ export class OpenMessageStreamResponse extends Message$1 { /** - * @generated from oneof code.messaging.v1.OpenMessageStreamWithKeepAliveRequest.requestOrPong + * @generated from oneof code.messaging.v1.OpenMessageStreamWithKeepAliveRequest.request_or_pong */ requestOrPong: { /** @@ -107,7 +107,7 @@ export class OpenMessageStreamWithKeepAliveRequest extends Message$1 [ - { no: 1, name: "request", kind: "message", T: OpenMessageStreamRequest, oneof: "requestOrPong" }, - { no: 2, name: "pong", kind: "message", T: ClientPong, oneof: "requestOrPong" }, + { no: 1, name: "request", kind: "message", T: OpenMessageStreamRequest, oneof: "request_or_pong" }, + { no: 2, name: "pong", kind: "message", T: ClientPong, oneof: "request_or_pong" }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): OpenMessageStreamWithKeepAliveRequest { @@ -147,7 +147,7 @@ export class OpenMessageStreamWithKeepAliveRequest extends Message$1 { /** - * @generated from oneof code.messaging.v1.OpenMessageStreamWithKeepAliveResponse.responseOrPing + * @generated from oneof code.messaging.v1.OpenMessageStreamWithKeepAliveResponse.response_or_ping */ responseOrPing: { /** @@ -157,7 +157,7 @@ export class OpenMessageStreamWithKeepAliveResponse extends Message$1 [ - { no: 1, name: "response", kind: "message", T: OpenMessageStreamResponse, oneof: "responseOrPing" }, - { no: 2, name: "ping", kind: "message", T: ServerPing, oneof: "responseOrPing" }, + { no: 1, name: "response", kind: "message", T: OpenMessageStreamResponse, oneof: "response_or_ping" }, + { no: 2, name: "ping", kind: "message", T: ServerPing, oneof: "response_or_ping" }, ]); static fromBinary(bytes: Uint8Array, options?: Partial): OpenMessageStreamWithKeepAliveResponse { @@ -1207,91 +1207,3 @@ export class Message extends Message$1 { } } -/** - * @generated from message code.messaging.v1.ServerPing - */ -export class ServerPing extends Message$1 { - /** - * Timestamp the ping was sent on the stream, for client to get a sense - * of potential network latency - * - * @generated from field: google.protobuf.Timestamp timestamp = 1; - */ - timestamp?: Timestamp; - - /** - * The delay server will apply before sending the next ping - * - * @generated from field: google.protobuf.Duration ping_delay = 2; - */ - pingDelay?: Duration; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "code.messaging.v1.ServerPing"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "timestamp", kind: "message", T: Timestamp }, - { no: 2, name: "ping_delay", kind: "message", T: Duration }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): ServerPing { - return new ServerPing().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): ServerPing { - return new ServerPing().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): ServerPing { - return new ServerPing().fromJsonString(jsonString, options); - } - - static equals(a: ServerPing | PlainMessage | undefined, b: ServerPing | PlainMessage | undefined): boolean { - return proto3.util.equals(ServerPing, a, b); - } -} - -/** - * @generated from message code.messaging.v1.ClientPong - */ -export class ClientPong extends Message$1 { - /** - * Timestamp the Pong was sent on the stream, for server to get a sense - * of potential network latency - * - * @generated from field: google.protobuf.Timestamp timestamp = 1; - */ - timestamp?: Timestamp; - - constructor(data?: PartialMessage) { - super(); - proto3.util.initPartial(data, this); - } - - static readonly runtime: typeof proto3 = proto3; - static readonly typeName = "code.messaging.v1.ClientPong"; - static readonly fields: FieldList = proto3.util.newFieldList(() => [ - { no: 1, name: "timestamp", kind: "message", T: Timestamp }, - ]); - - static fromBinary(bytes: Uint8Array, options?: Partial): ClientPong { - return new ClientPong().fromBinary(bytes, options); - } - - static fromJson(jsonValue: JsonValue, options?: Partial): ClientPong { - return new ClientPong().fromJson(jsonValue, options); - } - - static fromJsonString(jsonString: string, options?: Partial): ClientPong { - return new ClientPong().fromJsonString(jsonString, options); - } - - static equals(a: ClientPong | PlainMessage | undefined, b: ClientPong | PlainMessage | undefined): boolean { - return proto3.util.equals(ClientPong, a, b); - } -} - diff --git a/proto/chat/v1/chat_service.proto b/proto/chat/v1/chat_service.proto index 1329388..263b361 100644 --- a/proto/chat/v1/chat_service.proto +++ b/proto/chat/v1/chat_service.proto @@ -26,6 +26,14 @@ service Chat { // SetSubscriptionState configures the susbscription state of a chat rpc SetSubscriptionState(SetSubscriptionStateRequest) returns (SetSubscriptionStateResponse); + + // + // Experimental PoC two-way chat APIs below + // + + rpc StreamChatEvents(stream StreamChatEventsRequest) returns (stream StreamChatEventsResponse); + + rpc SendMessage(SendMessageRequest) returns (SendMessageResponse); } message GetChatsRequest { @@ -145,6 +153,68 @@ message SetSubscriptionStateResponse { } } +message OpenChatEventStream { + ChatId chat_id = 1 [(validate.rules).message.required = true]; + + common.v1.SolanaAccountId owner = 2 [(validate.rules).message.required = true]; + + common.v1.Signature signature = 3 [(validate.rules).message.required = true]; +} + +message ChatStreamEvent { + repeated ChatMessage messages = 1; + + repeated Pointer pointers = 2; +} + +message ChatStreamEventBatch { + repeated ChatStreamEvent events = 2 [(validate.rules).repeated = { + min_items: 1 + max_items: 1024 + }]; +} + +message StreamChatEventsRequest { + oneof type { + option (validate.required) = true; + + OpenChatEventStream open_stream = 1; + common.v1.ClientPong pong = 2; + } +} + +message StreamChatEventsResponse { + oneof type { + option (validate.required) = true; + + ChatStreamEventBatch events = 1; + common.v1.ServerPing ping = 2; + } +} + +message SendMessageRequest { + common.v1.SolanaAccountId owner = 1 [(validate.rules).message.required = true]; + + common.v1.Signature signature = 2 [(validate.rules).message.required = true]; + + ChatId chat_id = 3 [(validate.rules).message.required = true]; + + // todo: What field type should this be? Maybe the chat message itself with fields missing? + repeated Content content = 4 [(validate.rules).repeated = { + min_items: 1 + max_items: 1 + }]; +} + +message SendMessageResponse { + Result result = 1; + enum Result { + OK = 0; + } + + ChatMessage message = 2; +} + message ChatId { bytes value = 1 [(validate.rules).bytes = { min_len: 32 @@ -159,14 +229,26 @@ message ChatMessageId { }]; } +message ChatMemberId { + // todo: Public key for now + bytes value = 1 [(validate.rules).bytes = { + min_len: 32 + max_len: 32 + }]; +} + message Pointer { Kind kind = 1; enum Kind { - UNKNOWN = 0; - READ = 1; + UNKNOWN = 0; + READ = 1; + DELIVERED = 2; + SENT = 3; // Probably always inferred by OK result in SendMessageResponse } ChatMessageId value = 2 [(validate.rules).message.required = true]; + + ChatMemberId user = 3; } message ChatMetadata { @@ -176,8 +258,8 @@ message ChatMetadata { oneof title { option (validate.required) = true; - LocalizedContent localized = 2; - common.v1.Domain domain = 3; + ServerLocalizedContent localized = 2; + common.v1.Domain domain = 3; } // Pointer in the chat indicating the most recently read message by the user @@ -223,19 +305,22 @@ message ChatMessage { // Cursor value for this message for reference in subsequent GetMessagesRequest Cursor cursor = 4; + + ChatMemberId sender = 5; } message Content { oneof type { option (validate.required) = true; - LocalizedContent localized = 1; - ExchangeDataContent exchange_data = 2; - NaclBoxEncryptedContent nacl_box = 3; + ServerLocalizedContent server_localized = 1; + ExchangeDataContent exchange_data = 2; + NaclBoxEncryptedContent nacl_box = 3; + UserTextContent user_text = 4; } } -message LocalizedContent { +message ServerLocalizedContent { // When server-side localization is in place, clients will always see the // localized text. string key_or_text = 1 [(validate.rules).string = { @@ -283,6 +368,13 @@ message NaclBoxEncryptedContent { }]; } +message UserTextContent { + string text = 1 [(validate.rules).string = { + min_len: 1 + max_len: 1024 + }]; +} + // Opaque cursor used across paged APIs. Underlying bytes may change as paging // strategies evolve. message Cursor { diff --git a/proto/common/v1/model.proto b/proto/common/v1/model.proto index e22b776..f3abf85 100644 --- a/proto/common/v1/model.proto +++ b/proto/common/v1/model.proto @@ -6,6 +6,8 @@ option go_package = "github.com/code-payments/code-protobuf-api/generated/go/com option java_package = "com.codeinc.gen.common.v1"; option objc_class_prefix = "CPBCommonV1"; +import "google/protobuf/duration.proto"; +import "google/protobuf/timestamp.proto"; import "validate/validate.proto"; // AccountType associates a type to an account, which infers how an account is used @@ -181,3 +183,18 @@ message Response { ERROR = 1; } } + +message ServerPing { + // Timestamp the ping was sent on the stream, for client to get a sense + // of potential network latency + google.protobuf.Timestamp timestamp = 1 [(validate.rules).timestamp.required = true]; + + // The delay server will apply before sending the next ping + google.protobuf.Duration ping_delay = 2 [(validate.rules).duration.required = true]; +} + +message ClientPong { + // Timestamp the Pong was sent on the stream, for server to get a sense + // of potential network latency + google.protobuf.Timestamp timestamp = 1 [(validate.rules).timestamp.required = true]; +} diff --git a/proto/messaging/v1/messaging_service.proto b/proto/messaging/v1/messaging_service.proto index 1a6a01a..7ccec82 100644 --- a/proto/messaging/v1/messaging_service.proto +++ b/proto/messaging/v1/messaging_service.proto @@ -9,7 +9,6 @@ option objc_class_prefix = "CPBMessagingV1"; import "common/v1/model.proto"; import "transaction/v2/transaction_service.proto"; import "validate/validate.proto"; -import "google/protobuf/duration.proto"; import "google/protobuf/timestamp.proto"; service Messaging { @@ -125,20 +124,20 @@ message OpenMessageStreamResponse { } message OpenMessageStreamWithKeepAliveRequest { - oneof requestOrPong { + oneof request_or_pong { option (validate.required) = true; OpenMessageStreamRequest request = 1; - ClientPong pong = 2; + common.v1.ClientPong pong = 2; } } message OpenMessageStreamWithKeepAliveResponse { - oneof responseOrPing { + oneof response_or_ping { option (validate.required) = true; OpenMessageStreamResponse response = 1; - ServerPing ping = 2; + common.v1.ServerPing ping = 2; } } @@ -414,18 +413,3 @@ message Message { // Reserved for deprecated LoginAttempt field reserved 11; } - -message ServerPing { - // Timestamp the ping was sent on the stream, for client to get a sense - // of potential network latency - google.protobuf.Timestamp timestamp = 1 [(validate.rules).timestamp.required = true]; - - // The delay server will apply before sending the next ping - google.protobuf.Duration ping_delay = 2 [(validate.rules).duration.required = true]; -} - -message ClientPong { - // Timestamp the Pong was sent on the stream, for server to get a sense - // of potential network latency - google.protobuf.Timestamp timestamp = 1 [(validate.rules).timestamp.required = true]; -} From 3aee86e01d86e58248e61fdb968d0b73ca24dbe3 Mon Sep 17 00:00:00 2001 From: Jeff Yanta Date: Fri, 17 May 2024 10:18:53 -0400 Subject: [PATCH 02/16] Add missing proto validation --- generated/go/chat/v1/chat_service.pb.go | 502 +++++++++--------- .../go/chat/v1/chat_service.pb.validate.go | 14 + proto/chat/v1/chat_service.proto | 4 +- 3 files changed, 268 insertions(+), 252 deletions(-) diff --git a/generated/go/chat/v1/chat_service.pb.go b/generated/go/chat/v1/chat_service.pb.go index 702defd..28ca625 100644 --- a/generated/go/chat/v1/chat_service.pb.go +++ b/generated/go/chat/v1/chat_service.pb.go @@ -2646,259 +2646,261 @@ var file_chat_v1_chat_service_proto_rawDesc = []byte{ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x7b, 0x0a, 0x0f, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x35, 0x0a, 0x08, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, - 0x12, 0x31, 0x0a, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x73, 0x22, 0x5c, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x44, 0x0a, 0x06, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x0d, 0xba, 0xe9, 0xc0, 0x03, - 0x08, 0x92, 0x01, 0x05, 0x08, 0x01, 0x10, 0x80, 0x08, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x73, 0x22, 0xa0, 0x01, 0x0a, 0x17, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x44, 0x0a, - 0x0b, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x12, 0x30, 0x0a, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x6e, 0x67, 0x48, 0x00, 0x52, - 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, - 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x99, 0x01, 0x0a, 0x18, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, - 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x42, 0x61, 0x74, 0x63, 0x68, 0x48, 0x00, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, - 0x30, 0x0a, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x04, 0x70, 0x69, 0x6e, - 0x67, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, - 0x22, 0x96, 0x02, 0x0a, 0x12, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, - 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, - 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, - 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x01, - 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x9e, 0x01, 0x0a, 0x13, 0x53, 0x65, - 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x40, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, - 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x10, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x68, - 0x61, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x93, 0x01, 0x0a, 0x0f, 0x43, 0x68, 0x61, 0x74, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x41, 0x0a, 0x08, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x92, 0x01, + 0x02, 0x10, 0x64, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x3d, 0x0a, + 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, + 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x92, 0x01, 0x02, + 0x10, 0x64, 0x52, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x22, 0x5c, 0x0a, 0x14, + 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, + 0x61, 0x74, 0x63, 0x68, 0x12, 0x44, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x42, 0x0d, 0xba, 0xe9, 0xc0, 0x03, 0x08, 0x92, 0x01, 0x05, 0x08, 0x01, 0x10, + 0x80, 0x08, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xa0, 0x01, 0x0a, 0x17, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x0b, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x73, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x43, + 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x48, 0x00, + 0x52, 0x0a, 0x6f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x30, 0x0a, 0x04, + 0x70, 0x6f, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, + 0x6e, 0x74, 0x50, 0x6f, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x42, 0x0d, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x99, 0x01, + 0x0a, 0x18, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x65, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x48, 0x00, + 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x04, 0x70, 0x69, 0x6e, 0x67, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x69, + 0x6e, 0x67, 0x48, 0x00, 0x52, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, + 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x96, 0x02, 0x0a, 0x12, 0x53, 0x65, + 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, + 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, + 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, + 0x74, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, + 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x01, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x22, 0x9e, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x06, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x33, 0x0a, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, + 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x22, 0x10, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, + 0x4b, 0x10, 0x00, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, + 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x20, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0x32, 0x0a, 0x0d, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, + 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, + 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x20, 0x18, 0x40, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0x31, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x20, 0x18, 0x20, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x32, 0x0a, 0x0d, 0x43, 0x68, 0x61, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, - 0x10, 0x20, 0x18, 0x40, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x31, 0x0a, 0x0c, 0x43, - 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, - 0x06, 0x7a, 0x04, 0x10, 0x20, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xe0, - 0x01, 0x0a, 0x07, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x04, 0x6b, 0x69, - 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x2e, - 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x3d, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2e, 0x0a, 0x04, 0x75, 0x73, 0x65, - 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x49, 0x64, 0x52, 0x04, 0x75, 0x73, 0x65, 0x72, 0x22, 0x36, 0x0a, 0x04, 0x4b, 0x69, 0x6e, - 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, - 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x4c, 0x49, - 0x56, 0x45, 0x52, 0x45, 0x44, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, - 0x03, 0x22, 0xfd, 0x03, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, - 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x44, 0x0a, - 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, - 0x7a, 0x65, 0x64, 0x12, 0x30, 0x0a, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x64, - 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x38, 0x0a, 0x0c, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x52, 0x0b, 0x72, 0x65, 0x61, 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, - 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x19, - 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, - 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x12, 0x19, - 0x0a, 0x08, 0x63, 0x61, 0x6e, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x07, 0x63, 0x61, 0x6e, 0x4d, 0x75, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x6e, - 0x5f, 0x75, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x18, 0x09, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0e, 0x63, 0x61, 0x6e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x62, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, - 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, - 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x73, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, - 0x64, 0x42, 0x0e, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, - 0x01, 0x22, 0xae, 0x02, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x46, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x02, 0x74, 0x73, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x02, 0x74, - 0x73, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, - 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x0a, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x32, - 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xe0, 0x01, 0x0a, 0x07, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x12, 0x2e, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x2e, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, + 0x69, 0x6e, 0x64, 0x12, 0x3d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x12, 0x2e, 0x0a, 0x04, 0x75, 0x73, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x52, 0x04, 0x75, 0x73, + 0x65, 0x72, 0x22, 0x36, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, + 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, + 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, 0x44, 0x10, 0x02, + 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x03, 0x22, 0xfd, 0x03, 0x0a, 0x0c, 0x43, + 0x68, 0x61, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x07, 0x63, + 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, + 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, + 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x44, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, + 0x7a, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4c, + 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x30, 0x0a, 0x06, + 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x44, 0x6f, + 0x6d, 0x61, 0x69, 0x6e, 0x48, 0x00, 0x52, 0x06, 0x64, 0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x12, 0x38, + 0x0a, 0x0c, 0x72, 0x65, 0x61, 0x64, 0x5f, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x0b, 0x72, 0x65, 0x61, + 0x64, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, + 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x75, + 0x6d, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, + 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, + 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x62, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x61, 0x6e, 0x5f, 0x6d, + 0x75, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x61, 0x6e, 0x4d, 0x75, + 0x74, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x6e, 0x5f, 0x75, 0x6e, 0x73, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x62, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x63, 0x61, 0x6e, + 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x63, + 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, + 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x73, 0x5f, + 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, + 0x69, 0x73, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x42, 0x0e, 0x0a, 0x05, 0x74, 0x69, + 0x74, 0x6c, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xae, 0x02, 0x0a, 0x0b, 0x43, + 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x46, 0x0a, 0x0a, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, - 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, - 0x65, 0x72, 0x22, 0xb7, 0x02, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x51, - 0x0a, 0x10, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, - 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4c, 0x6f, - 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, - 0x52, 0x0f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, - 0x64, 0x12, 0x48, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, - 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x65, - 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x42, 0x0a, 0x08, 0x6e, - 0x61, 0x63, 0x6c, 0x5f, 0x62, 0x6f, 0x78, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x63, - 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x6e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x12, - 0x3c, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x48, 0x00, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x54, 0x65, 0x78, 0x74, 0x42, 0x0d, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x46, 0x0a, 0x16, - 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x72, - 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, - 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x4f, 0x72, - 0x54, 0x65, 0x78, 0x74, 0x22, 0x95, 0x03, 0x0a, 0x13, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x3a, 0x0a, 0x04, - 0x76, 0x65, 0x72, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x65, - 0x72, 0x62, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, 0x12, 0x39, 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x05, 0x65, 0x78, - 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x52, 0x61, - 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x22, 0xa4, 0x01, - 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, - 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x47, 0x41, 0x56, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, - 0x08, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x57, - 0x49, 0x54, 0x48, 0x44, 0x52, 0x45, 0x57, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, - 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, - 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x45, 0x44, 0x10, 0x06, - 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, 0x4e, 0x54, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x50, - 0x41, 0x49, 0x44, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x55, 0x52, 0x43, 0x48, 0x41, 0x53, - 0x45, 0x44, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, - 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0a, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x45, 0x4e, 0x54, 0x5f, 0x54, - 0x49, 0x50, 0x10, 0x0b, 0x42, 0x16, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x5f, 0x64, 0x61, 0x74, 0x61, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xcc, 0x01, 0x0a, - 0x17, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, - 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x0f, 0x70, 0x65, 0x65, 0x72, - 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, - 0x70, 0x65, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, - 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, - 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x18, 0x18, 0x18, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, - 0x12, 0x39, 0x0a, 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0c, 0xba, 0xe9, 0xc0, - 0x03, 0x07, 0x7a, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x10, 0x65, 0x6e, 0x63, 0x72, 0x79, - 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x33, 0x0a, 0x0f, 0x55, - 0x73, 0x65, 0x72, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x20, - 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, - 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, - 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, - 0x7a, 0x04, 0x10, 0x08, 0x18, 0x40, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x32, 0x83, 0x05, - 0x0a, 0x04, 0x43, 0x68, 0x61, 0x74, 0x12, 0x49, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, - 0x74, 0x73, 0x12, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, - 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x76, 0x61, - 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x14, 0x53, 0x65, 0x74, - 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x53, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, - 0x52, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, + 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x49, 0x64, 0x12, 0x36, 0x0a, 0x02, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, + 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x02, 0x74, 0x73, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x0a, + 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, + 0x73, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, + 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x32, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, + 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x49, 0x64, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x22, 0xb7, 0x02, 0x0a, 0x07, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x51, 0x0a, 0x10, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0f, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x0d, 0x65, 0x78, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x44, 0x61, 0x74, 0x61, 0x12, 0x42, 0x0a, 0x08, 0x6e, 0x61, 0x63, 0x6c, 0x5f, 0x62, 0x6f, 0x78, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, + 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, + 0x07, 0x6e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x12, 0x3c, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, + 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x54, + 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x08, 0x75, 0x73, + 0x65, 0x72, 0x54, 0x65, 0x78, 0x74, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, + 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x46, 0x0a, 0x16, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4c, + 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, + 0x2c, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x72, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, + 0x80, 0x08, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x4f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x22, 0x95, 0x03, + 0x0a, 0x13, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x3a, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x52, 0x04, 0x76, 0x65, 0x72, + 0x62, 0x12, 0x39, 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, 0x07, + 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x52, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, + 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x22, 0xa4, 0x01, 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, + 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, + 0x47, 0x41, 0x56, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, + 0x45, 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x45, 0x57, + 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, + 0x04, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x52, + 0x45, 0x54, 0x55, 0x52, 0x4e, 0x45, 0x44, 0x10, 0x06, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, + 0x4e, 0x54, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x41, 0x49, 0x44, 0x10, 0x08, 0x12, 0x0d, + 0x0a, 0x09, 0x50, 0x55, 0x52, 0x43, 0x48, 0x41, 0x53, 0x45, 0x44, 0x10, 0x09, 0x12, 0x10, 0x0a, + 0x0c, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0a, 0x12, + 0x0c, 0x0a, 0x08, 0x53, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0b, 0x42, 0x16, 0x0a, + 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x12, 0x05, + 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xcc, 0x01, 0x0a, 0x17, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, + 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x12, 0x53, 0x0a, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, + 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, + 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x70, 0x65, 0x65, 0x72, 0x50, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x18, + 0x18, 0x18, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x11, 0x65, 0x6e, 0x63, + 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, 0x05, 0x10, 0x01, 0x18, + 0x80, 0x08, 0x52, 0x10, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x79, + 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x33, 0x0a, 0x0f, 0x55, 0x73, 0x65, 0x72, 0x54, 0x65, 0x78, 0x74, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, + 0x18, 0x80, 0x08, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, + 0x73, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x08, 0x18, 0x40, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x32, 0x83, 0x05, 0x0a, 0x04, 0x43, 0x68, 0x61, 0x74, 0x12, + 0x49, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x12, 0x1d, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, + 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x47, 0x65, + 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, + 0x0a, 0x0e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0c, 0x53, + 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, + 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, - 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, - 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x5a, 0x44, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, - 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, - 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2f, 0x76, 0x31, 0x3b, - 0x63, 0x68, 0x61, 0x74, 0xa2, 0x02, 0x09, 0x43, 0x50, 0x42, 0x43, 0x68, 0x61, 0x74, 0x56, 0x31, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x65, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x52, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, + 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, + 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, + 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x68, 0x61, 0x74, 0xa2, 0x02, 0x09, + 0x43, 0x50, 0x42, 0x43, 0x68, 0x61, 0x74, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( diff --git a/generated/go/chat/v1/chat_service.pb.validate.go b/generated/go/chat/v1/chat_service.pb.validate.go index c3a623b..ec7ff98 100644 --- a/generated/go/chat/v1/chat_service.pb.validate.go +++ b/generated/go/chat/v1/chat_service.pb.validate.go @@ -1178,6 +1178,13 @@ func (m *ChatStreamEvent) Validate() error { return nil } + if len(m.GetMessages()) > 100 { + return ChatStreamEventValidationError{ + field: "Messages", + reason: "value must contain no more than 100 item(s)", + } + } + for idx, item := range m.GetMessages() { _, _ = idx, item @@ -1193,6 +1200,13 @@ func (m *ChatStreamEvent) Validate() error { } + if len(m.GetPointers()) > 100 { + return ChatStreamEventValidationError{ + field: "Pointers", + reason: "value must contain no more than 100 item(s)", + } + } + for idx, item := range m.GetPointers() { _, _ = idx, item diff --git a/proto/chat/v1/chat_service.proto b/proto/chat/v1/chat_service.proto index 263b361..f80874b 100644 --- a/proto/chat/v1/chat_service.proto +++ b/proto/chat/v1/chat_service.proto @@ -162,9 +162,9 @@ message OpenChatEventStream { } message ChatStreamEvent { - repeated ChatMessage messages = 1; + repeated ChatMessage messages = 1 [(validate.rules).repeated.max_items = 100]; - repeated Pointer pointers = 2; + repeated Pointer pointers = 2 [(validate.rules).repeated.max_items = 100]; } message ChatStreamEventBatch { From 4b79f72c7b83ec4007a86c82aac4204bc0c5f429 Mon Sep 17 00:00:00 2001 From: Jeff Yanta Date: Tue, 21 May 2024 13:52:59 -0400 Subject: [PATCH 03/16] Add a placeholder thank you message content --- generated/go/chat/v1/chat_service.pb.go | 333 +++++++++++------- .../go/chat/v1/chat_service.pb.validate.go | 117 ++++-- proto/chat/v1/chat_service.proto | 9 +- 3 files changed, 306 insertions(+), 153 deletions(-) diff --git a/generated/go/chat/v1/chat_service.pb.go b/generated/go/chat/v1/chat_service.pb.go index 28ca625..f4a62ab 100644 --- a/generated/go/chat/v1/chat_service.pb.go +++ b/generated/go/chat/v1/chat_service.pb.go @@ -2074,7 +2074,8 @@ type Content struct { // *Content_ServerLocalized // *Content_ExchangeData // *Content_NaclBox - // *Content_UserText + // *Content_Text + // *Content_ThankYou Type isContent_Type `protobuf_oneof:"type"` } @@ -2138,9 +2139,16 @@ func (x *Content) GetNaclBox() *NaclBoxEncryptedContent { return nil } -func (x *Content) GetUserText() *UserTextContent { - if x, ok := x.GetType().(*Content_UserText); ok { - return x.UserText +func (x *Content) GetText() *TextContent { + if x, ok := x.GetType().(*Content_Text); ok { + return x.Text + } + return nil +} + +func (x *Content) GetThankYou() *ThankYouContent { + if x, ok := x.GetType().(*Content_ThankYou); ok { + return x.ThankYou } return nil } @@ -2161,8 +2169,12 @@ type Content_NaclBox struct { NaclBox *NaclBoxEncryptedContent `protobuf:"bytes,3,opt,name=nacl_box,json=naclBox,proto3,oneof"` } -type Content_UserText struct { - UserText *UserTextContent `protobuf:"bytes,4,opt,name=user_text,json=userText,proto3,oneof"` +type Content_Text struct { + Text *TextContent `protobuf:"bytes,4,opt,name=text,proto3,oneof"` +} + +type Content_ThankYou struct { + ThankYou *ThankYouContent `protobuf:"bytes,5,opt,name=thank_you,json=thankYou,proto3,oneof"` } func (*Content_ServerLocalized) isContent_Type() {} @@ -2171,7 +2183,9 @@ func (*Content_ExchangeData) isContent_Type() {} func (*Content_NaclBox) isContent_Type() {} -func (*Content_UserText) isContent_Type() {} +func (*Content_Text) isContent_Type() {} + +func (*Content_ThankYou) isContent_Type() {} type ServerLocalizedContent struct { state protoimpl.MessageState @@ -2374,7 +2388,7 @@ func (x *NaclBoxEncryptedContent) GetEncryptedPayload() []byte { return nil } -type UserTextContent struct { +type TextContent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields @@ -2382,8 +2396,8 @@ type UserTextContent struct { Text string `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"` } -func (x *UserTextContent) Reset() { - *x = UserTextContent{} +func (x *TextContent) Reset() { + *x = TextContent{} if protoimpl.UnsafeEnabled { mi := &file_chat_v1_chat_service_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2391,13 +2405,13 @@ func (x *UserTextContent) Reset() { } } -func (x *UserTextContent) String() string { +func (x *TextContent) String() string { return protoimpl.X.MessageStringOf(x) } -func (*UserTextContent) ProtoMessage() {} +func (*TextContent) ProtoMessage() {} -func (x *UserTextContent) ProtoReflect() protoreflect.Message { +func (x *TextContent) ProtoReflect() protoreflect.Message { mi := &file_chat_v1_chat_service_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) @@ -2409,18 +2423,56 @@ func (x *UserTextContent) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use UserTextContent.ProtoReflect.Descriptor instead. -func (*UserTextContent) Descriptor() ([]byte, []int) { +// Deprecated: Use TextContent.ProtoReflect.Descriptor instead. +func (*TextContent) Descriptor() ([]byte, []int) { return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{27} } -func (x *UserTextContent) GetText() string { +func (x *TextContent) GetText() string { if x != nil { return x.Text } return "" } +type ThankYouContent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ThankYouContent) Reset() { + *x = ThankYouContent{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v1_chat_service_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ThankYouContent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ThankYouContent) ProtoMessage() {} + +func (x *ThankYouContent) ProtoReflect() protoreflect.Message { + mi := &file_chat_v1_chat_service_proto_msgTypes[28] + 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 ThankYouContent.ProtoReflect.Descriptor instead. +func (*ThankYouContent) Descriptor() ([]byte, []int) { + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{28} +} + // Opaque cursor used across paged APIs. Underlying bytes may change as paging // strategies evolve. type Cursor struct { @@ -2434,7 +2486,7 @@ type Cursor struct { func (x *Cursor) Reset() { *x = Cursor{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_chat_service_proto_msgTypes[28] + mi := &file_chat_v1_chat_service_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2447,7 +2499,7 @@ func (x *Cursor) String() string { func (*Cursor) ProtoMessage() {} func (x *Cursor) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_chat_service_proto_msgTypes[28] + mi := &file_chat_v1_chat_service_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2460,7 +2512,7 @@ func (x *Cursor) ProtoReflect() protoreflect.Message { // Deprecated: Use Cursor.ProtoReflect.Descriptor instead. func (*Cursor) Descriptor() ([]byte, []int) { - return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{28} + return file_chat_v1_chat_service_proto_rawDescGZIP(), []int{29} } func (x *Cursor) GetValue() []byte { @@ -2783,7 +2835,7 @@ var file_chat_v1_chat_service_proto_rawDesc = []byte{ 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x32, 0x0a, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x49, 0x64, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x22, 0xb7, 0x02, 0x0a, 0x07, + 0x72, 0x49, 0x64, 0x52, 0x06, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x22, 0xe8, 0x02, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x51, 0x0a, 0x10, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, @@ -2798,58 +2850,62 @@ var file_chat_v1_chat_service_proto_rawDesc = []byte{ 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, - 0x07, 0x6e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x12, 0x3c, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, - 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x54, - 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x08, 0x75, 0x73, - 0x65, 0x72, 0x54, 0x65, 0x78, 0x74, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, - 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x46, 0x0a, 0x16, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x4c, - 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, - 0x2c, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x72, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, - 0x80, 0x08, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x4f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x22, 0x95, 0x03, - 0x0a, 0x13, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x3a, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x52, 0x04, 0x76, 0x65, 0x72, - 0x62, 0x12, 0x39, 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, - 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, 0x07, - 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, - 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x52, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, - 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x22, 0xa4, 0x01, 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, - 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, - 0x47, 0x41, 0x56, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, - 0x45, 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x45, 0x57, - 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, - 0x04, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x52, - 0x45, 0x54, 0x55, 0x52, 0x4e, 0x45, 0x44, 0x10, 0x06, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, - 0x4e, 0x54, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x41, 0x49, 0x44, 0x10, 0x08, 0x12, 0x0d, - 0x0a, 0x09, 0x50, 0x55, 0x52, 0x43, 0x48, 0x41, 0x53, 0x45, 0x44, 0x10, 0x09, 0x12, 0x10, 0x0a, - 0x0c, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0a, 0x12, - 0x0c, 0x0a, 0x08, 0x53, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0b, 0x42, 0x16, 0x0a, - 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x12, 0x05, - 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xcc, 0x01, 0x0a, 0x17, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, - 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x12, 0x53, 0x0a, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, - 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, - 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, - 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x70, 0x65, 0x65, 0x72, 0x50, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x18, - 0x18, 0x18, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x11, 0x65, 0x6e, 0x63, - 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, 0x05, 0x10, 0x01, 0x18, - 0x80, 0x08, 0x52, 0x10, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x33, 0x0a, 0x0f, 0x55, 0x73, 0x65, 0x72, 0x54, 0x65, 0x78, 0x74, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, + 0x07, 0x6e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x12, 0x2f, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x48, 0x00, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3c, 0x0a, 0x09, 0x74, 0x68, 0x61, + 0x6e, 0x6b, 0x5f, 0x79, 0x6f, 0x75, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x54, 0x68, 0x61, 0x6e, + 0x6b, 0x59, 0x6f, 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x08, 0x74, + 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x46, 0x0a, 0x16, 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x12, 0x2c, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x72, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, - 0x18, 0x80, 0x08, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, + 0x18, 0x80, 0x08, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x4f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x22, 0x95, + 0x03, 0x0a, 0x13, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x3a, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x52, 0x04, 0x76, 0x65, + 0x72, 0x62, 0x12, 0x39, 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, + 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x52, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, + 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x22, 0xa4, 0x01, 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, + 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, + 0x04, 0x47, 0x41, 0x56, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x43, 0x45, 0x49, + 0x56, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x45, + 0x57, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, + 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, + 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x45, 0x44, 0x10, 0x06, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, + 0x45, 0x4e, 0x54, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x41, 0x49, 0x44, 0x10, 0x08, 0x12, + 0x0d, 0x0a, 0x09, 0x50, 0x55, 0x52, 0x43, 0x48, 0x41, 0x53, 0x45, 0x44, 0x10, 0x09, 0x12, 0x10, + 0x0a, 0x0c, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0a, + 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0b, 0x42, 0x16, + 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x12, + 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xcc, 0x01, 0x0a, 0x17, 0x4e, 0x61, 0x63, 0x6c, 0x42, + 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, + 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, + 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x70, 0x65, 0x65, 0x72, 0x50, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, + 0x18, 0x18, 0x18, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x11, 0x65, 0x6e, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, 0x05, 0x10, 0x01, + 0x18, 0x80, 0x08, 0x52, 0x10, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, + 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x2f, 0x0a, 0x0b, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, + 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x11, 0x0a, 0x0f, 0x54, 0x68, 0x61, 0x6e, 0x6b, 0x59, + 0x6f, 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x08, 0x18, 0x40, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x32, 0x83, 0x05, 0x0a, 0x04, 0x43, 0x68, 0x61, 0x74, 0x12, @@ -2916,7 +2972,7 @@ func file_chat_v1_chat_service_proto_rawDescGZIP() []byte { } var file_chat_v1_chat_service_proto_enumTypes = make([]protoimpl.EnumInfo, 10) -var file_chat_v1_chat_service_proto_msgTypes = make([]protoimpl.MessageInfo, 29) +var file_chat_v1_chat_service_proto_msgTypes = make([]protoimpl.MessageInfo, 30) var file_chat_v1_chat_service_proto_goTypes = []interface{}{ (GetChatsRequest_Direction)(0), // 0: code.chat.v1.GetChatsRequest.Direction (GetChatsResponse_Result)(0), // 1: code.chat.v1.GetChatsResponse.Result @@ -2955,56 +3011,57 @@ var file_chat_v1_chat_service_proto_goTypes = []interface{}{ (*ServerLocalizedContent)(nil), // 34: code.chat.v1.ServerLocalizedContent (*ExchangeDataContent)(nil), // 35: code.chat.v1.ExchangeDataContent (*NaclBoxEncryptedContent)(nil), // 36: code.chat.v1.NaclBoxEncryptedContent - (*UserTextContent)(nil), // 37: code.chat.v1.UserTextContent - (*Cursor)(nil), // 38: code.chat.v1.Cursor - (*v1.SolanaAccountId)(nil), // 39: code.common.v1.SolanaAccountId - (*v1.Signature)(nil), // 40: code.common.v1.Signature - (*v1.ClientPong)(nil), // 41: code.common.v1.ClientPong - (*v1.ServerPing)(nil), // 42: code.common.v1.ServerPing - (*v1.Domain)(nil), // 43: code.common.v1.Domain - (*timestamppb.Timestamp)(nil), // 44: google.protobuf.Timestamp - (*v2.ExchangeData)(nil), // 45: code.transaction.v2.ExchangeData - (*v2.ExchangeDataWithoutRate)(nil), // 46: code.transaction.v2.ExchangeDataWithoutRate + (*TextContent)(nil), // 37: code.chat.v1.TextContent + (*ThankYouContent)(nil), // 38: code.chat.v1.ThankYouContent + (*Cursor)(nil), // 39: code.chat.v1.Cursor + (*v1.SolanaAccountId)(nil), // 40: code.common.v1.SolanaAccountId + (*v1.Signature)(nil), // 41: code.common.v1.Signature + (*v1.ClientPong)(nil), // 42: code.common.v1.ClientPong + (*v1.ServerPing)(nil), // 43: code.common.v1.ServerPing + (*v1.Domain)(nil), // 44: code.common.v1.Domain + (*timestamppb.Timestamp)(nil), // 45: google.protobuf.Timestamp + (*v2.ExchangeData)(nil), // 46: code.transaction.v2.ExchangeData + (*v2.ExchangeDataWithoutRate)(nil), // 47: code.transaction.v2.ExchangeDataWithoutRate } var file_chat_v1_chat_service_proto_depIdxs = []int32{ - 39, // 0: code.chat.v1.GetChatsRequest.owner:type_name -> code.common.v1.SolanaAccountId - 40, // 1: code.chat.v1.GetChatsRequest.signature:type_name -> code.common.v1.Signature - 38, // 2: code.chat.v1.GetChatsRequest.cursor:type_name -> code.chat.v1.Cursor + 40, // 0: code.chat.v1.GetChatsRequest.owner:type_name -> code.common.v1.SolanaAccountId + 41, // 1: code.chat.v1.GetChatsRequest.signature:type_name -> code.common.v1.Signature + 39, // 2: code.chat.v1.GetChatsRequest.cursor:type_name -> code.chat.v1.Cursor 0, // 3: code.chat.v1.GetChatsRequest.direction:type_name -> code.chat.v1.GetChatsRequest.Direction 1, // 4: code.chat.v1.GetChatsResponse.result:type_name -> code.chat.v1.GetChatsResponse.Result 31, // 5: code.chat.v1.GetChatsResponse.chats:type_name -> code.chat.v1.ChatMetadata 27, // 6: code.chat.v1.GetMessagesRequest.chat_id:type_name -> code.chat.v1.ChatId - 39, // 7: code.chat.v1.GetMessagesRequest.owner:type_name -> code.common.v1.SolanaAccountId - 40, // 8: code.chat.v1.GetMessagesRequest.signature:type_name -> code.common.v1.Signature - 38, // 9: code.chat.v1.GetMessagesRequest.cursor:type_name -> code.chat.v1.Cursor + 40, // 7: code.chat.v1.GetMessagesRequest.owner:type_name -> code.common.v1.SolanaAccountId + 41, // 8: code.chat.v1.GetMessagesRequest.signature:type_name -> code.common.v1.Signature + 39, // 9: code.chat.v1.GetMessagesRequest.cursor:type_name -> code.chat.v1.Cursor 2, // 10: code.chat.v1.GetMessagesRequest.direction:type_name -> code.chat.v1.GetMessagesRequest.Direction 3, // 11: code.chat.v1.GetMessagesResponse.result:type_name -> code.chat.v1.GetMessagesResponse.Result 32, // 12: code.chat.v1.GetMessagesResponse.messages:type_name -> code.chat.v1.ChatMessage 27, // 13: code.chat.v1.AdvancePointerRequest.chat_id:type_name -> code.chat.v1.ChatId 30, // 14: code.chat.v1.AdvancePointerRequest.pointer:type_name -> code.chat.v1.Pointer - 39, // 15: code.chat.v1.AdvancePointerRequest.owner:type_name -> code.common.v1.SolanaAccountId - 40, // 16: code.chat.v1.AdvancePointerRequest.signature:type_name -> code.common.v1.Signature + 40, // 15: code.chat.v1.AdvancePointerRequest.owner:type_name -> code.common.v1.SolanaAccountId + 41, // 16: code.chat.v1.AdvancePointerRequest.signature:type_name -> code.common.v1.Signature 4, // 17: code.chat.v1.AdvancePointerResponse.result:type_name -> code.chat.v1.AdvancePointerResponse.Result 27, // 18: code.chat.v1.SetMuteStateRequest.chat_id:type_name -> code.chat.v1.ChatId - 39, // 19: code.chat.v1.SetMuteStateRequest.owner:type_name -> code.common.v1.SolanaAccountId - 40, // 20: code.chat.v1.SetMuteStateRequest.signature:type_name -> code.common.v1.Signature + 40, // 19: code.chat.v1.SetMuteStateRequest.owner:type_name -> code.common.v1.SolanaAccountId + 41, // 20: code.chat.v1.SetMuteStateRequest.signature:type_name -> code.common.v1.Signature 5, // 21: code.chat.v1.SetMuteStateResponse.result:type_name -> code.chat.v1.SetMuteStateResponse.Result 27, // 22: code.chat.v1.SetSubscriptionStateRequest.chat_id:type_name -> code.chat.v1.ChatId - 39, // 23: code.chat.v1.SetSubscriptionStateRequest.owner:type_name -> code.common.v1.SolanaAccountId - 40, // 24: code.chat.v1.SetSubscriptionStateRequest.signature:type_name -> code.common.v1.Signature + 40, // 23: code.chat.v1.SetSubscriptionStateRequest.owner:type_name -> code.common.v1.SolanaAccountId + 41, // 24: code.chat.v1.SetSubscriptionStateRequest.signature:type_name -> code.common.v1.Signature 6, // 25: code.chat.v1.SetSubscriptionStateResponse.result:type_name -> code.chat.v1.SetSubscriptionStateResponse.Result 27, // 26: code.chat.v1.OpenChatEventStream.chat_id:type_name -> code.chat.v1.ChatId - 39, // 27: code.chat.v1.OpenChatEventStream.owner:type_name -> code.common.v1.SolanaAccountId - 40, // 28: code.chat.v1.OpenChatEventStream.signature:type_name -> code.common.v1.Signature + 40, // 27: code.chat.v1.OpenChatEventStream.owner:type_name -> code.common.v1.SolanaAccountId + 41, // 28: code.chat.v1.OpenChatEventStream.signature:type_name -> code.common.v1.Signature 32, // 29: code.chat.v1.ChatStreamEvent.messages:type_name -> code.chat.v1.ChatMessage 30, // 30: code.chat.v1.ChatStreamEvent.pointers:type_name -> code.chat.v1.Pointer 21, // 31: code.chat.v1.ChatStreamEventBatch.events:type_name -> code.chat.v1.ChatStreamEvent 20, // 32: code.chat.v1.StreamChatEventsRequest.open_stream:type_name -> code.chat.v1.OpenChatEventStream - 41, // 33: code.chat.v1.StreamChatEventsRequest.pong:type_name -> code.common.v1.ClientPong + 42, // 33: code.chat.v1.StreamChatEventsRequest.pong:type_name -> code.common.v1.ClientPong 22, // 34: code.chat.v1.StreamChatEventsResponse.events:type_name -> code.chat.v1.ChatStreamEventBatch - 42, // 35: code.chat.v1.StreamChatEventsResponse.ping:type_name -> code.common.v1.ServerPing - 39, // 36: code.chat.v1.SendMessageRequest.owner:type_name -> code.common.v1.SolanaAccountId - 40, // 37: code.chat.v1.SendMessageRequest.signature:type_name -> code.common.v1.Signature + 43, // 35: code.chat.v1.StreamChatEventsResponse.ping:type_name -> code.common.v1.ServerPing + 40, // 36: code.chat.v1.SendMessageRequest.owner:type_name -> code.common.v1.SolanaAccountId + 41, // 37: code.chat.v1.SendMessageRequest.signature:type_name -> code.common.v1.Signature 27, // 38: code.chat.v1.SendMessageRequest.chat_id:type_name -> code.chat.v1.ChatId 33, // 39: code.chat.v1.SendMessageRequest.content:type_name -> code.chat.v1.Content 7, // 40: code.chat.v1.SendMessageResponse.result:type_name -> code.chat.v1.SendMessageResponse.Result @@ -3014,41 +3071,42 @@ var file_chat_v1_chat_service_proto_depIdxs = []int32{ 29, // 44: code.chat.v1.Pointer.user:type_name -> code.chat.v1.ChatMemberId 27, // 45: code.chat.v1.ChatMetadata.chat_id:type_name -> code.chat.v1.ChatId 34, // 46: code.chat.v1.ChatMetadata.localized:type_name -> code.chat.v1.ServerLocalizedContent - 43, // 47: code.chat.v1.ChatMetadata.domain:type_name -> code.common.v1.Domain + 44, // 47: code.chat.v1.ChatMetadata.domain:type_name -> code.common.v1.Domain 30, // 48: code.chat.v1.ChatMetadata.read_pointer:type_name -> code.chat.v1.Pointer - 38, // 49: code.chat.v1.ChatMetadata.cursor:type_name -> code.chat.v1.Cursor + 39, // 49: code.chat.v1.ChatMetadata.cursor:type_name -> code.chat.v1.Cursor 28, // 50: code.chat.v1.ChatMessage.message_id:type_name -> code.chat.v1.ChatMessageId - 44, // 51: code.chat.v1.ChatMessage.ts:type_name -> google.protobuf.Timestamp + 45, // 51: code.chat.v1.ChatMessage.ts:type_name -> google.protobuf.Timestamp 33, // 52: code.chat.v1.ChatMessage.content:type_name -> code.chat.v1.Content - 38, // 53: code.chat.v1.ChatMessage.cursor:type_name -> code.chat.v1.Cursor + 39, // 53: code.chat.v1.ChatMessage.cursor:type_name -> code.chat.v1.Cursor 29, // 54: code.chat.v1.ChatMessage.sender:type_name -> code.chat.v1.ChatMemberId 34, // 55: code.chat.v1.Content.server_localized:type_name -> code.chat.v1.ServerLocalizedContent 35, // 56: code.chat.v1.Content.exchange_data:type_name -> code.chat.v1.ExchangeDataContent 36, // 57: code.chat.v1.Content.nacl_box:type_name -> code.chat.v1.NaclBoxEncryptedContent - 37, // 58: code.chat.v1.Content.user_text:type_name -> code.chat.v1.UserTextContent - 9, // 59: code.chat.v1.ExchangeDataContent.verb:type_name -> code.chat.v1.ExchangeDataContent.Verb - 45, // 60: code.chat.v1.ExchangeDataContent.exact:type_name -> code.transaction.v2.ExchangeData - 46, // 61: code.chat.v1.ExchangeDataContent.partial:type_name -> code.transaction.v2.ExchangeDataWithoutRate - 39, // 62: code.chat.v1.NaclBoxEncryptedContent.peer_public_key:type_name -> code.common.v1.SolanaAccountId - 10, // 63: code.chat.v1.Chat.GetChats:input_type -> code.chat.v1.GetChatsRequest - 12, // 64: code.chat.v1.Chat.GetMessages:input_type -> code.chat.v1.GetMessagesRequest - 14, // 65: code.chat.v1.Chat.AdvancePointer:input_type -> code.chat.v1.AdvancePointerRequest - 16, // 66: code.chat.v1.Chat.SetMuteState:input_type -> code.chat.v1.SetMuteStateRequest - 18, // 67: code.chat.v1.Chat.SetSubscriptionState:input_type -> code.chat.v1.SetSubscriptionStateRequest - 23, // 68: code.chat.v1.Chat.StreamChatEvents:input_type -> code.chat.v1.StreamChatEventsRequest - 25, // 69: code.chat.v1.Chat.SendMessage:input_type -> code.chat.v1.SendMessageRequest - 11, // 70: code.chat.v1.Chat.GetChats:output_type -> code.chat.v1.GetChatsResponse - 13, // 71: code.chat.v1.Chat.GetMessages:output_type -> code.chat.v1.GetMessagesResponse - 15, // 72: code.chat.v1.Chat.AdvancePointer:output_type -> code.chat.v1.AdvancePointerResponse - 17, // 73: code.chat.v1.Chat.SetMuteState:output_type -> code.chat.v1.SetMuteStateResponse - 19, // 74: code.chat.v1.Chat.SetSubscriptionState:output_type -> code.chat.v1.SetSubscriptionStateResponse - 24, // 75: code.chat.v1.Chat.StreamChatEvents:output_type -> code.chat.v1.StreamChatEventsResponse - 26, // 76: code.chat.v1.Chat.SendMessage:output_type -> code.chat.v1.SendMessageResponse - 70, // [70:77] is the sub-list for method output_type - 63, // [63:70] is the sub-list for method input_type - 63, // [63:63] is the sub-list for extension type_name - 63, // [63:63] is the sub-list for extension extendee - 0, // [0:63] is the sub-list for field type_name + 37, // 58: code.chat.v1.Content.text:type_name -> code.chat.v1.TextContent + 38, // 59: code.chat.v1.Content.thank_you:type_name -> code.chat.v1.ThankYouContent + 9, // 60: code.chat.v1.ExchangeDataContent.verb:type_name -> code.chat.v1.ExchangeDataContent.Verb + 46, // 61: code.chat.v1.ExchangeDataContent.exact:type_name -> code.transaction.v2.ExchangeData + 47, // 62: code.chat.v1.ExchangeDataContent.partial:type_name -> code.transaction.v2.ExchangeDataWithoutRate + 40, // 63: code.chat.v1.NaclBoxEncryptedContent.peer_public_key:type_name -> code.common.v1.SolanaAccountId + 10, // 64: code.chat.v1.Chat.GetChats:input_type -> code.chat.v1.GetChatsRequest + 12, // 65: code.chat.v1.Chat.GetMessages:input_type -> code.chat.v1.GetMessagesRequest + 14, // 66: code.chat.v1.Chat.AdvancePointer:input_type -> code.chat.v1.AdvancePointerRequest + 16, // 67: code.chat.v1.Chat.SetMuteState:input_type -> code.chat.v1.SetMuteStateRequest + 18, // 68: code.chat.v1.Chat.SetSubscriptionState:input_type -> code.chat.v1.SetSubscriptionStateRequest + 23, // 69: code.chat.v1.Chat.StreamChatEvents:input_type -> code.chat.v1.StreamChatEventsRequest + 25, // 70: code.chat.v1.Chat.SendMessage:input_type -> code.chat.v1.SendMessageRequest + 11, // 71: code.chat.v1.Chat.GetChats:output_type -> code.chat.v1.GetChatsResponse + 13, // 72: code.chat.v1.Chat.GetMessages:output_type -> code.chat.v1.GetMessagesResponse + 15, // 73: code.chat.v1.Chat.AdvancePointer:output_type -> code.chat.v1.AdvancePointerResponse + 17, // 74: code.chat.v1.Chat.SetMuteState:output_type -> code.chat.v1.SetMuteStateResponse + 19, // 75: code.chat.v1.Chat.SetSubscriptionState:output_type -> code.chat.v1.SetSubscriptionStateResponse + 24, // 76: code.chat.v1.Chat.StreamChatEvents:output_type -> code.chat.v1.StreamChatEventsResponse + 26, // 77: code.chat.v1.Chat.SendMessage:output_type -> code.chat.v1.SendMessageResponse + 71, // [71:78] is the sub-list for method output_type + 64, // [64:71] is the sub-list for method input_type + 64, // [64:64] is the sub-list for extension type_name + 64, // [64:64] is the sub-list for extension extendee + 0, // [0:64] is the sub-list for field type_name } func init() { file_chat_v1_chat_service_proto_init() } @@ -3382,7 +3440,7 @@ func file_chat_v1_chat_service_proto_init() { } } file_chat_v1_chat_service_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UserTextContent); i { + switch v := v.(*TextContent); i { case 0: return &v.state case 1: @@ -3394,6 +3452,18 @@ func file_chat_v1_chat_service_proto_init() { } } file_chat_v1_chat_service_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ThankYouContent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v1_chat_service_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Cursor); i { case 0: return &v.state @@ -3422,7 +3492,8 @@ func file_chat_v1_chat_service_proto_init() { (*Content_ServerLocalized)(nil), (*Content_ExchangeData)(nil), (*Content_NaclBox)(nil), - (*Content_UserText)(nil), + (*Content_Text)(nil), + (*Content_ThankYou)(nil), } file_chat_v1_chat_service_proto_msgTypes[25].OneofWrappers = []interface{}{ (*ExchangeDataContent_Exact)(nil), @@ -3434,7 +3505,7 @@ func file_chat_v1_chat_service_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_chat_v1_chat_service_proto_rawDesc, NumEnums: 10, - NumMessages: 29, + NumMessages: 30, NumExtensions: 0, NumServices: 1, }, diff --git a/generated/go/chat/v1/chat_service.pb.validate.go b/generated/go/chat/v1/chat_service.pb.validate.go index ec7ff98..837e968 100644 --- a/generated/go/chat/v1/chat_service.pb.validate.go +++ b/generated/go/chat/v1/chat_service.pb.validate.go @@ -2421,12 +2421,24 @@ func (m *Content) Validate() error { } } - case *Content_UserText: + case *Content_Text: - if v, ok := interface{}(m.GetUserText()).(interface{ Validate() error }); ok { + if v, ok := interface{}(m.GetText()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ContentValidationError{ - field: "UserText", + field: "Text", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *Content_ThankYou: + + if v, ok := interface{}(m.GetThankYou()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ContentValidationError{ + field: "ThankYou", reason: "embedded message failed validation", cause: err, } @@ -2773,16 +2785,16 @@ var _ interface { ErrorName() string } = NaclBoxEncryptedContentValidationError{} -// Validate checks the field values on UserTextContent with the rules defined -// in the proto definition for this message. If any rules are violated, an -// error is returned. -func (m *UserTextContent) Validate() error { +// Validate checks the field values on TextContent with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *TextContent) Validate() error { if m == nil { return nil } if l := utf8.RuneCountInString(m.GetText()); l < 1 || l > 1024 { - return UserTextContentValidationError{ + return TextContentValidationError{ field: "Text", reason: "value length must be between 1 and 1024 runes, inclusive", } @@ -2791,9 +2803,74 @@ func (m *UserTextContent) Validate() error { return nil } -// UserTextContentValidationError is the validation error returned by -// UserTextContent.Validate if the designated constraints aren't met. -type UserTextContentValidationError struct { +// TextContentValidationError is the validation error returned by +// TextContent.Validate if the designated constraints aren't met. +type TextContentValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e TextContentValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e TextContentValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e TextContentValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e TextContentValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e TextContentValidationError) ErrorName() string { return "TextContentValidationError" } + +// Error satisfies the builtin error interface +func (e TextContentValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sTextContent.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = TextContentValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = TextContentValidationError{} + +// Validate checks the field values on ThankYouContent with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *ThankYouContent) Validate() error { + if m == nil { + return nil + } + + return nil +} + +// ThankYouContentValidationError is the validation error returned by +// ThankYouContent.Validate if the designated constraints aren't met. +type ThankYouContentValidationError struct { field string reason string cause error @@ -2801,22 +2878,22 @@ type UserTextContentValidationError struct { } // Field function returns field value. -func (e UserTextContentValidationError) Field() string { return e.field } +func (e ThankYouContentValidationError) Field() string { return e.field } // Reason function returns reason value. -func (e UserTextContentValidationError) Reason() string { return e.reason } +func (e ThankYouContentValidationError) Reason() string { return e.reason } // Cause function returns cause value. -func (e UserTextContentValidationError) Cause() error { return e.cause } +func (e ThankYouContentValidationError) Cause() error { return e.cause } // Key function returns key value. -func (e UserTextContentValidationError) Key() bool { return e.key } +func (e ThankYouContentValidationError) Key() bool { return e.key } // ErrorName returns error name. -func (e UserTextContentValidationError) ErrorName() string { return "UserTextContentValidationError" } +func (e ThankYouContentValidationError) ErrorName() string { return "ThankYouContentValidationError" } // Error satisfies the builtin error interface -func (e UserTextContentValidationError) Error() string { +func (e ThankYouContentValidationError) Error() string { cause := "" if e.cause != nil { cause = fmt.Sprintf(" | caused by: %v", e.cause) @@ -2828,14 +2905,14 @@ func (e UserTextContentValidationError) Error() string { } return fmt.Sprintf( - "invalid %sUserTextContent.%s: %s%s", + "invalid %sThankYouContent.%s: %s%s", key, e.field, e.reason, cause) } -var _ error = UserTextContentValidationError{} +var _ error = ThankYouContentValidationError{} var _ interface { Field() string @@ -2843,7 +2920,7 @@ var _ interface { Key() bool Cause() error ErrorName() string -} = UserTextContentValidationError{} +} = ThankYouContentValidationError{} // Validate checks the field values on Cursor with the rules defined in the // proto definition for this message. If any rules are violated, an error is returned. diff --git a/proto/chat/v1/chat_service.proto b/proto/chat/v1/chat_service.proto index f80874b..d306d08 100644 --- a/proto/chat/v1/chat_service.proto +++ b/proto/chat/v1/chat_service.proto @@ -316,7 +316,8 @@ message Content { ServerLocalizedContent server_localized = 1; ExchangeDataContent exchange_data = 2; NaclBoxEncryptedContent nacl_box = 3; - UserTextContent user_text = 4; + TextContent text = 4; + ThankYouContent thank_you = 5; } } @@ -368,13 +369,17 @@ message NaclBoxEncryptedContent { }]; } -message UserTextContent { +message TextContent { string text = 1 [(validate.rules).string = { min_len: 1 max_len: 1024 }]; } +message ThankYouContent { + // todo: May need additional metdata (who is being thanked, which tip, etc) +} + // Opaque cursor used across paged APIs. Underlying bytes may change as paging // strategies evolve. message Cursor { From ca1535214933789d24e1ad4f02c397c5455fe942 Mon Sep 17 00:00:00 2001 From: Jeff Yanta Date: Wed, 5 Jun 2024 12:54:01 -0400 Subject: [PATCH 04/16] Define a new v2 Chat service --- generated/go/chat/v2/chat_service.pb.go | 3981 +++++++++++++++++ .../go/chat/v2/chat_service.pb.validate.go | 3330 ++++++++++++++ generated/go/chat/v2/chat_service_grpc.pb.go | 370 ++ proto/chat/v1/chat_service.proto | 1 + proto/chat/v2/chat_service.proto | 503 +++ 5 files changed, 8185 insertions(+) create mode 100644 generated/go/chat/v2/chat_service.pb.go create mode 100644 generated/go/chat/v2/chat_service.pb.validate.go create mode 100644 generated/go/chat/v2/chat_service_grpc.pb.go create mode 100644 proto/chat/v2/chat_service.proto diff --git a/generated/go/chat/v2/chat_service.pb.go b/generated/go/chat/v2/chat_service.pb.go new file mode 100644 index 0000000..2fd51b6 --- /dev/null +++ b/generated/go/chat/v2/chat_service.pb.go @@ -0,0 +1,3981 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.28.1 +// protoc v3.21.12 +// source: chat/v2/chat_service.proto + +package chat + +import ( + v1 "github.com/code-payments/code-protobuf-api/generated/go/common/v1" + v2 "github.com/code-payments/code-protobuf-api/generated/go/transaction/v2" + _ "github.com/envoyproxy/protoc-gen-validate/validate" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + timestamppb "google.golang.org/protobuf/types/known/timestamppb" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type GetChatsRequest_Direction int32 + +const ( + GetChatsRequest_ASC GetChatsRequest_Direction = 0 + GetChatsRequest_DESC GetChatsRequest_Direction = 1 +) + +// Enum value maps for GetChatsRequest_Direction. +var ( + GetChatsRequest_Direction_name = map[int32]string{ + 0: "ASC", + 1: "DESC", + } + GetChatsRequest_Direction_value = map[string]int32{ + "ASC": 0, + "DESC": 1, + } +) + +func (x GetChatsRequest_Direction) Enum() *GetChatsRequest_Direction { + p := new(GetChatsRequest_Direction) + *p = x + return p +} + +func (x GetChatsRequest_Direction) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (GetChatsRequest_Direction) Descriptor() protoreflect.EnumDescriptor { + return file_chat_v2_chat_service_proto_enumTypes[0].Descriptor() +} + +func (GetChatsRequest_Direction) Type() protoreflect.EnumType { + return &file_chat_v2_chat_service_proto_enumTypes[0] +} + +func (x GetChatsRequest_Direction) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use GetChatsRequest_Direction.Descriptor instead. +func (GetChatsRequest_Direction) EnumDescriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{0, 0} +} + +type GetChatsResponse_Result int32 + +const ( + GetChatsResponse_OK GetChatsResponse_Result = 0 + GetChatsResponse_NOT_FOUND GetChatsResponse_Result = 1 +) + +// Enum value maps for GetChatsResponse_Result. +var ( + GetChatsResponse_Result_name = map[int32]string{ + 0: "OK", + 1: "NOT_FOUND", + } + GetChatsResponse_Result_value = map[string]int32{ + "OK": 0, + "NOT_FOUND": 1, + } +) + +func (x GetChatsResponse_Result) Enum() *GetChatsResponse_Result { + p := new(GetChatsResponse_Result) + *p = x + return p +} + +func (x GetChatsResponse_Result) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (GetChatsResponse_Result) Descriptor() protoreflect.EnumDescriptor { + return file_chat_v2_chat_service_proto_enumTypes[1].Descriptor() +} + +func (GetChatsResponse_Result) Type() protoreflect.EnumType { + return &file_chat_v2_chat_service_proto_enumTypes[1] +} + +func (x GetChatsResponse_Result) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use GetChatsResponse_Result.Descriptor instead. +func (GetChatsResponse_Result) EnumDescriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{1, 0} +} + +type GetMessagesRequest_Direction int32 + +const ( + GetMessagesRequest_ASC GetMessagesRequest_Direction = 0 + GetMessagesRequest_DESC GetMessagesRequest_Direction = 1 +) + +// Enum value maps for GetMessagesRequest_Direction. +var ( + GetMessagesRequest_Direction_name = map[int32]string{ + 0: "ASC", + 1: "DESC", + } + GetMessagesRequest_Direction_value = map[string]int32{ + "ASC": 0, + "DESC": 1, + } +) + +func (x GetMessagesRequest_Direction) Enum() *GetMessagesRequest_Direction { + p := new(GetMessagesRequest_Direction) + *p = x + return p +} + +func (x GetMessagesRequest_Direction) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (GetMessagesRequest_Direction) Descriptor() protoreflect.EnumDescriptor { + return file_chat_v2_chat_service_proto_enumTypes[2].Descriptor() +} + +func (GetMessagesRequest_Direction) Type() protoreflect.EnumType { + return &file_chat_v2_chat_service_proto_enumTypes[2] +} + +func (x GetMessagesRequest_Direction) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use GetMessagesRequest_Direction.Descriptor instead. +func (GetMessagesRequest_Direction) EnumDescriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{2, 0} +} + +type GetMessagesResponse_Result int32 + +const ( + GetMessagesResponse_OK GetMessagesResponse_Result = 0 + GetMessagesResponse_NOT_FOUND GetMessagesResponse_Result = 1 +) + +// Enum value maps for GetMessagesResponse_Result. +var ( + GetMessagesResponse_Result_name = map[int32]string{ + 0: "OK", + 1: "NOT_FOUND", + } + GetMessagesResponse_Result_value = map[string]int32{ + "OK": 0, + "NOT_FOUND": 1, + } +) + +func (x GetMessagesResponse_Result) Enum() *GetMessagesResponse_Result { + p := new(GetMessagesResponse_Result) + *p = x + return p +} + +func (x GetMessagesResponse_Result) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (GetMessagesResponse_Result) Descriptor() protoreflect.EnumDescriptor { + return file_chat_v2_chat_service_proto_enumTypes[3].Descriptor() +} + +func (GetMessagesResponse_Result) Type() protoreflect.EnumType { + return &file_chat_v2_chat_service_proto_enumTypes[3] +} + +func (x GetMessagesResponse_Result) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use GetMessagesResponse_Result.Descriptor instead. +func (GetMessagesResponse_Result) EnumDescriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{3, 0} +} + +type SendMessageResponse_Result int32 + +const ( + SendMessageResponse_OK SendMessageResponse_Result = 0 + SendMessageResponse_CHAT_NOT_FOUND SendMessageResponse_Result = 1 + SendMessageResponse_INVALID_CHAT_TYPE SendMessageResponse_Result = 2 + SendMessageResponse_INVALID_CONTENT_TYPE SendMessageResponse_Result = 3 +) + +// Enum value maps for SendMessageResponse_Result. +var ( + SendMessageResponse_Result_name = map[int32]string{ + 0: "OK", + 1: "CHAT_NOT_FOUND", + 2: "INVALID_CHAT_TYPE", + 3: "INVALID_CONTENT_TYPE", + } + SendMessageResponse_Result_value = map[string]int32{ + "OK": 0, + "CHAT_NOT_FOUND": 1, + "INVALID_CHAT_TYPE": 2, + "INVALID_CONTENT_TYPE": 3, + } +) + +func (x SendMessageResponse_Result) Enum() *SendMessageResponse_Result { + p := new(SendMessageResponse_Result) + *p = x + return p +} + +func (x SendMessageResponse_Result) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SendMessageResponse_Result) Descriptor() protoreflect.EnumDescriptor { + return file_chat_v2_chat_service_proto_enumTypes[4].Descriptor() +} + +func (SendMessageResponse_Result) Type() protoreflect.EnumType { + return &file_chat_v2_chat_service_proto_enumTypes[4] +} + +func (x SendMessageResponse_Result) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use SendMessageResponse_Result.Descriptor instead. +func (SendMessageResponse_Result) EnumDescriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{10, 0} +} + +type AdvancePointerResponse_Result int32 + +const ( + AdvancePointerResponse_OK AdvancePointerResponse_Result = 0 + AdvancePointerResponse_CHAT_NOT_FOUND AdvancePointerResponse_Result = 1 + AdvancePointerResponse_MESSAGE_NOT_FOUND AdvancePointerResponse_Result = 2 +) + +// Enum value maps for AdvancePointerResponse_Result. +var ( + AdvancePointerResponse_Result_name = map[int32]string{ + 0: "OK", + 1: "CHAT_NOT_FOUND", + 2: "MESSAGE_NOT_FOUND", + } + AdvancePointerResponse_Result_value = map[string]int32{ + "OK": 0, + "CHAT_NOT_FOUND": 1, + "MESSAGE_NOT_FOUND": 2, + } +) + +func (x AdvancePointerResponse_Result) Enum() *AdvancePointerResponse_Result { + p := new(AdvancePointerResponse_Result) + *p = x + return p +} + +func (x AdvancePointerResponse_Result) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (AdvancePointerResponse_Result) Descriptor() protoreflect.EnumDescriptor { + return file_chat_v2_chat_service_proto_enumTypes[5].Descriptor() +} + +func (AdvancePointerResponse_Result) Type() protoreflect.EnumType { + return &file_chat_v2_chat_service_proto_enumTypes[5] +} + +func (x AdvancePointerResponse_Result) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use AdvancePointerResponse_Result.Descriptor instead. +func (AdvancePointerResponse_Result) EnumDescriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{12, 0} +} + +type SetMuteStateResponse_Result int32 + +const ( + SetMuteStateResponse_OK SetMuteStateResponse_Result = 0 + SetMuteStateResponse_CHAT_NOT_FOUND SetMuteStateResponse_Result = 1 + SetMuteStateResponse_CANT_MUTE SetMuteStateResponse_Result = 2 +) + +// Enum value maps for SetMuteStateResponse_Result. +var ( + SetMuteStateResponse_Result_name = map[int32]string{ + 0: "OK", + 1: "CHAT_NOT_FOUND", + 2: "CANT_MUTE", + } + SetMuteStateResponse_Result_value = map[string]int32{ + "OK": 0, + "CHAT_NOT_FOUND": 1, + "CANT_MUTE": 2, + } +) + +func (x SetMuteStateResponse_Result) Enum() *SetMuteStateResponse_Result { + p := new(SetMuteStateResponse_Result) + *p = x + return p +} + +func (x SetMuteStateResponse_Result) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SetMuteStateResponse_Result) Descriptor() protoreflect.EnumDescriptor { + return file_chat_v2_chat_service_proto_enumTypes[6].Descriptor() +} + +func (SetMuteStateResponse_Result) Type() protoreflect.EnumType { + return &file_chat_v2_chat_service_proto_enumTypes[6] +} + +func (x SetMuteStateResponse_Result) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use SetMuteStateResponse_Result.Descriptor instead. +func (SetMuteStateResponse_Result) EnumDescriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{14, 0} +} + +type SetSubscriptionStateResponse_Result int32 + +const ( + SetSubscriptionStateResponse_OK SetSubscriptionStateResponse_Result = 0 + SetSubscriptionStateResponse_CHAT_NOT_FOUND SetSubscriptionStateResponse_Result = 1 + SetSubscriptionStateResponse_CANT_UNSUBSCRIBE SetSubscriptionStateResponse_Result = 2 +) + +// Enum value maps for SetSubscriptionStateResponse_Result. +var ( + SetSubscriptionStateResponse_Result_name = map[int32]string{ + 0: "OK", + 1: "CHAT_NOT_FOUND", + 2: "CANT_UNSUBSCRIBE", + } + SetSubscriptionStateResponse_Result_value = map[string]int32{ + "OK": 0, + "CHAT_NOT_FOUND": 1, + "CANT_UNSUBSCRIBE": 2, + } +) + +func (x SetSubscriptionStateResponse_Result) Enum() *SetSubscriptionStateResponse_Result { + p := new(SetSubscriptionStateResponse_Result) + *p = x + return p +} + +func (x SetSubscriptionStateResponse_Result) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SetSubscriptionStateResponse_Result) Descriptor() protoreflect.EnumDescriptor { + return file_chat_v2_chat_service_proto_enumTypes[7].Descriptor() +} + +func (SetSubscriptionStateResponse_Result) Type() protoreflect.EnumType { + return &file_chat_v2_chat_service_proto_enumTypes[7] +} + +func (x SetSubscriptionStateResponse_Result) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use SetSubscriptionStateResponse_Result.Descriptor instead. +func (SetSubscriptionStateResponse_Result) EnumDescriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{16, 0} +} + +type ChatMetadata_Kind int32 + +const ( + ChatMetadata_UNKNOWN ChatMetadata_Kind = 0 + ChatMetadata_NOTIFICATION ChatMetadata_Kind = 1 + ChatMetadata_TWO_WAY ChatMetadata_Kind = 2 // GROUP = 3; +) + +// Enum value maps for ChatMetadata_Kind. +var ( + ChatMetadata_Kind_name = map[int32]string{ + 0: "UNKNOWN", + 1: "NOTIFICATION", + 2: "TWO_WAY", + } + ChatMetadata_Kind_value = map[string]int32{ + "UNKNOWN": 0, + "NOTIFICATION": 1, + "TWO_WAY": 2, + } +) + +func (x ChatMetadata_Kind) Enum() *ChatMetadata_Kind { + p := new(ChatMetadata_Kind) + *p = x + return p +} + +func (x ChatMetadata_Kind) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ChatMetadata_Kind) Descriptor() protoreflect.EnumDescriptor { + return file_chat_v2_chat_service_proto_enumTypes[8].Descriptor() +} + +func (ChatMetadata_Kind) Type() protoreflect.EnumType { + return &file_chat_v2_chat_service_proto_enumTypes[8] +} + +func (x ChatMetadata_Kind) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ChatMetadata_Kind.Descriptor instead. +func (ChatMetadata_Kind) EnumDescriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{20, 0} +} + +type ChatMemberIdentity_Platform int32 + +const ( + ChatMemberIdentity_UNKNOWN ChatMemberIdentity_Platform = 0 + ChatMemberIdentity_TWITTER ChatMemberIdentity_Platform = 1 +) + +// Enum value maps for ChatMemberIdentity_Platform. +var ( + ChatMemberIdentity_Platform_name = map[int32]string{ + 0: "UNKNOWN", + 1: "TWITTER", + } + ChatMemberIdentity_Platform_value = map[string]int32{ + "UNKNOWN": 0, + "TWITTER": 1, + } +) + +func (x ChatMemberIdentity_Platform) Enum() *ChatMemberIdentity_Platform { + p := new(ChatMemberIdentity_Platform) + *p = x + return p +} + +func (x ChatMemberIdentity_Platform) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ChatMemberIdentity_Platform) Descriptor() protoreflect.EnumDescriptor { + return file_chat_v2_chat_service_proto_enumTypes[9].Descriptor() +} + +func (ChatMemberIdentity_Platform) Type() protoreflect.EnumType { + return &file_chat_v2_chat_service_proto_enumTypes[9] +} + +func (x ChatMemberIdentity_Platform) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ChatMemberIdentity_Platform.Descriptor instead. +func (ChatMemberIdentity_Platform) EnumDescriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{23, 0} +} + +type Pointer_Kind int32 + +const ( + Pointer_UNKNOWN Pointer_Kind = 0 + Pointer_SENT Pointer_Kind = 1 // Always inferred by OK result in SendMessageResponse or message presence in a chat + Pointer_DELIVERED Pointer_Kind = 2 + Pointer_READ Pointer_Kind = 3 +) + +// Enum value maps for Pointer_Kind. +var ( + Pointer_Kind_name = map[int32]string{ + 0: "UNKNOWN", + 1: "SENT", + 2: "DELIVERED", + 3: "READ", + } + Pointer_Kind_value = map[string]int32{ + "UNKNOWN": 0, + "SENT": 1, + "DELIVERED": 2, + "READ": 3, + } +) + +func (x Pointer_Kind) Enum() *Pointer_Kind { + p := new(Pointer_Kind) + *p = x + return p +} + +func (x Pointer_Kind) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Pointer_Kind) Descriptor() protoreflect.EnumDescriptor { + return file_chat_v2_chat_service_proto_enumTypes[10].Descriptor() +} + +func (Pointer_Kind) Type() protoreflect.EnumType { + return &file_chat_v2_chat_service_proto_enumTypes[10] +} + +func (x Pointer_Kind) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Pointer_Kind.Descriptor instead. +func (Pointer_Kind) EnumDescriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{24, 0} +} + +type ExchangeDataContent_Verb int32 + +const ( + ExchangeDataContent_UNKNOWN ExchangeDataContent_Verb = 0 + ExchangeDataContent_GAVE ExchangeDataContent_Verb = 1 + ExchangeDataContent_RECEIVED ExchangeDataContent_Verb = 2 + ExchangeDataContent_WITHDREW ExchangeDataContent_Verb = 3 + ExchangeDataContent_DEPOSITED ExchangeDataContent_Verb = 4 + ExchangeDataContent_SENT ExchangeDataContent_Verb = 5 + ExchangeDataContent_RETURNED ExchangeDataContent_Verb = 6 + ExchangeDataContent_SPENT ExchangeDataContent_Verb = 7 + ExchangeDataContent_PAID ExchangeDataContent_Verb = 8 + ExchangeDataContent_PURCHASED ExchangeDataContent_Verb = 9 + ExchangeDataContent_RECEIVED_TIP ExchangeDataContent_Verb = 10 + ExchangeDataContent_SENT_TIP ExchangeDataContent_Verb = 11 +) + +// Enum value maps for ExchangeDataContent_Verb. +var ( + ExchangeDataContent_Verb_name = map[int32]string{ + 0: "UNKNOWN", + 1: "GAVE", + 2: "RECEIVED", + 3: "WITHDREW", + 4: "DEPOSITED", + 5: "SENT", + 6: "RETURNED", + 7: "SPENT", + 8: "PAID", + 9: "PURCHASED", + 10: "RECEIVED_TIP", + 11: "SENT_TIP", + } + ExchangeDataContent_Verb_value = map[string]int32{ + "UNKNOWN": 0, + "GAVE": 1, + "RECEIVED": 2, + "WITHDREW": 3, + "DEPOSITED": 4, + "SENT": 5, + "RETURNED": 6, + "SPENT": 7, + "PAID": 8, + "PURCHASED": 9, + "RECEIVED_TIP": 10, + "SENT_TIP": 11, + } +) + +func (x ExchangeDataContent_Verb) Enum() *ExchangeDataContent_Verb { + p := new(ExchangeDataContent_Verb) + *p = x + return p +} + +func (x ExchangeDataContent_Verb) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ExchangeDataContent_Verb) Descriptor() protoreflect.EnumDescriptor { + return file_chat_v2_chat_service_proto_enumTypes[11].Descriptor() +} + +func (ExchangeDataContent_Verb) Type() protoreflect.EnumType { + return &file_chat_v2_chat_service_proto_enumTypes[11] +} + +func (x ExchangeDataContent_Verb) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ExchangeDataContent_Verb.Descriptor instead. +func (ExchangeDataContent_Verb) EnumDescriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{28, 0} +} + +type GetChatsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Owner *v1.SolanaAccountId `protobuf:"bytes,1,opt,name=owner,proto3" json:"owner,omitempty"` + Signature *v1.Signature `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty"` + PageSize uint32 `protobuf:"varint,3,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + Cursor *Cursor `protobuf:"bytes,4,opt,name=cursor,proto3" json:"cursor,omitempty"` + Direction GetChatsRequest_Direction `protobuf:"varint,5,opt,name=direction,proto3,enum=code.chat.v2.GetChatsRequest_Direction" json:"direction,omitempty"` +} + +func (x *GetChatsRequest) Reset() { + *x = GetChatsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetChatsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetChatsRequest) ProtoMessage() {} + +func (x *GetChatsRequest) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[0] + 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 GetChatsRequest.ProtoReflect.Descriptor instead. +func (*GetChatsRequest) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{0} +} + +func (x *GetChatsRequest) GetOwner() *v1.SolanaAccountId { + if x != nil { + return x.Owner + } + return nil +} + +func (x *GetChatsRequest) GetSignature() *v1.Signature { + if x != nil { + return x.Signature + } + return nil +} + +func (x *GetChatsRequest) GetPageSize() uint32 { + if x != nil { + return x.PageSize + } + return 0 +} + +func (x *GetChatsRequest) GetCursor() *Cursor { + if x != nil { + return x.Cursor + } + return nil +} + +func (x *GetChatsRequest) GetDirection() GetChatsRequest_Direction { + if x != nil { + return x.Direction + } + return GetChatsRequest_ASC +} + +type GetChatsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Result GetChatsResponse_Result `protobuf:"varint,1,opt,name=result,proto3,enum=code.chat.v2.GetChatsResponse_Result" json:"result,omitempty"` + Chats []*ChatMetadata `protobuf:"bytes,2,rep,name=chats,proto3" json:"chats,omitempty"` +} + +func (x *GetChatsResponse) Reset() { + *x = GetChatsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetChatsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetChatsResponse) ProtoMessage() {} + +func (x *GetChatsResponse) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[1] + 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 GetChatsResponse.ProtoReflect.Descriptor instead. +func (*GetChatsResponse) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{1} +} + +func (x *GetChatsResponse) GetResult() GetChatsResponse_Result { + if x != nil { + return x.Result + } + return GetChatsResponse_OK +} + +func (x *GetChatsResponse) GetChats() []*ChatMetadata { + if x != nil { + return x.Chats + } + return nil +} + +type GetMessagesRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ChatId *ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` + MemberId *ChatMemberId `protobuf:"bytes,2,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` + Owner *v1.SolanaAccountId `protobuf:"bytes,3,opt,name=owner,proto3" json:"owner,omitempty"` + Signature *v1.Signature `protobuf:"bytes,4,opt,name=signature,proto3" json:"signature,omitempty"` + PageSize uint32 `protobuf:"varint,5,opt,name=page_size,json=pageSize,proto3" json:"page_size,omitempty"` + Cursor *Cursor `protobuf:"bytes,6,opt,name=cursor,proto3" json:"cursor,omitempty"` + Direction GetMessagesRequest_Direction `protobuf:"varint,7,opt,name=direction,proto3,enum=code.chat.v2.GetMessagesRequest_Direction" json:"direction,omitempty"` +} + +func (x *GetMessagesRequest) Reset() { + *x = GetMessagesRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetMessagesRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetMessagesRequest) ProtoMessage() {} + +func (x *GetMessagesRequest) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[2] + 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 GetMessagesRequest.ProtoReflect.Descriptor instead. +func (*GetMessagesRequest) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{2} +} + +func (x *GetMessagesRequest) GetChatId() *ChatId { + if x != nil { + return x.ChatId + } + return nil +} + +func (x *GetMessagesRequest) GetMemberId() *ChatMemberId { + if x != nil { + return x.MemberId + } + return nil +} + +func (x *GetMessagesRequest) GetOwner() *v1.SolanaAccountId { + if x != nil { + return x.Owner + } + return nil +} + +func (x *GetMessagesRequest) GetSignature() *v1.Signature { + if x != nil { + return x.Signature + } + return nil +} + +func (x *GetMessagesRequest) GetPageSize() uint32 { + if x != nil { + return x.PageSize + } + return 0 +} + +func (x *GetMessagesRequest) GetCursor() *Cursor { + if x != nil { + return x.Cursor + } + return nil +} + +func (x *GetMessagesRequest) GetDirection() GetMessagesRequest_Direction { + if x != nil { + return x.Direction + } + return GetMessagesRequest_ASC +} + +type GetMessagesResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Result GetMessagesResponse_Result `protobuf:"varint,1,opt,name=result,proto3,enum=code.chat.v2.GetMessagesResponse_Result" json:"result,omitempty"` + Messages []*ChatMessage `protobuf:"bytes,2,rep,name=messages,proto3" json:"messages,omitempty"` +} + +func (x *GetMessagesResponse) Reset() { + *x = GetMessagesResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetMessagesResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetMessagesResponse) ProtoMessage() {} + +func (x *GetMessagesResponse) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[3] + 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 GetMessagesResponse.ProtoReflect.Descriptor instead. +func (*GetMessagesResponse) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{3} +} + +func (x *GetMessagesResponse) GetResult() GetMessagesResponse_Result { + if x != nil { + return x.Result + } + return GetMessagesResponse_OK +} + +func (x *GetMessagesResponse) GetMessages() []*ChatMessage { + if x != nil { + return x.Messages + } + return nil +} + +type OpenChatEventStream struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ChatId *ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` + MemberId *ChatMemberId `protobuf:"bytes,2,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` + Owner *v1.SolanaAccountId `protobuf:"bytes,3,opt,name=owner,proto3" json:"owner,omitempty"` + Signature *v1.Signature `protobuf:"bytes,4,opt,name=signature,proto3" json:"signature,omitempty"` +} + +func (x *OpenChatEventStream) Reset() { + *x = OpenChatEventStream{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OpenChatEventStream) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OpenChatEventStream) ProtoMessage() {} + +func (x *OpenChatEventStream) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[4] + 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 OpenChatEventStream.ProtoReflect.Descriptor instead. +func (*OpenChatEventStream) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{4} +} + +func (x *OpenChatEventStream) GetChatId() *ChatId { + if x != nil { + return x.ChatId + } + return nil +} + +func (x *OpenChatEventStream) GetMemberId() *ChatMemberId { + if x != nil { + return x.MemberId + } + return nil +} + +func (x *OpenChatEventStream) GetOwner() *v1.SolanaAccountId { + if x != nil { + return x.Owner + } + return nil +} + +func (x *OpenChatEventStream) GetSignature() *v1.Signature { + if x != nil { + return x.Signature + } + return nil +} + +type ChatStreamEvent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Type: + // + // *ChatStreamEvent_Message + // *ChatStreamEvent_Pointer + Type isChatStreamEvent_Type `protobuf_oneof:"type"` +} + +func (x *ChatStreamEvent) Reset() { + *x = ChatStreamEvent{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChatStreamEvent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatStreamEvent) ProtoMessage() {} + +func (x *ChatStreamEvent) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[5] + 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 ChatStreamEvent.ProtoReflect.Descriptor instead. +func (*ChatStreamEvent) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{5} +} + +func (m *ChatStreamEvent) GetType() isChatStreamEvent_Type { + if m != nil { + return m.Type + } + return nil +} + +func (x *ChatStreamEvent) GetMessage() *ChatMessage { + if x, ok := x.GetType().(*ChatStreamEvent_Message); ok { + return x.Message + } + return nil +} + +func (x *ChatStreamEvent) GetPointer() *Pointer { + if x, ok := x.GetType().(*ChatStreamEvent_Pointer); ok { + return x.Pointer + } + return nil +} + +type isChatStreamEvent_Type interface { + isChatStreamEvent_Type() +} + +type ChatStreamEvent_Message struct { + Message *ChatMessage `protobuf:"bytes,1,opt,name=message,proto3,oneof"` +} + +type ChatStreamEvent_Pointer struct { + Pointer *Pointer `protobuf:"bytes,2,opt,name=pointer,proto3,oneof"` +} + +func (*ChatStreamEvent_Message) isChatStreamEvent_Type() {} + +func (*ChatStreamEvent_Pointer) isChatStreamEvent_Type() {} + +type ChatStreamEventBatch struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Events []*ChatStreamEvent `protobuf:"bytes,2,rep,name=events,proto3" json:"events,omitempty"` +} + +func (x *ChatStreamEventBatch) Reset() { + *x = ChatStreamEventBatch{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChatStreamEventBatch) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatStreamEventBatch) ProtoMessage() {} + +func (x *ChatStreamEventBatch) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[6] + 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 ChatStreamEventBatch.ProtoReflect.Descriptor instead. +func (*ChatStreamEventBatch) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{6} +} + +func (x *ChatStreamEventBatch) GetEvents() []*ChatStreamEvent { + if x != nil { + return x.Events + } + return nil +} + +type StreamChatEventsRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Type: + // + // *StreamChatEventsRequest_OpenStream + // *StreamChatEventsRequest_Pong + Type isStreamChatEventsRequest_Type `protobuf_oneof:"type"` +} + +func (x *StreamChatEventsRequest) Reset() { + *x = StreamChatEventsRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StreamChatEventsRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StreamChatEventsRequest) ProtoMessage() {} + +func (x *StreamChatEventsRequest) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[7] + 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 StreamChatEventsRequest.ProtoReflect.Descriptor instead. +func (*StreamChatEventsRequest) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{7} +} + +func (m *StreamChatEventsRequest) GetType() isStreamChatEventsRequest_Type { + if m != nil { + return m.Type + } + return nil +} + +func (x *StreamChatEventsRequest) GetOpenStream() *OpenChatEventStream { + if x, ok := x.GetType().(*StreamChatEventsRequest_OpenStream); ok { + return x.OpenStream + } + return nil +} + +func (x *StreamChatEventsRequest) GetPong() *v1.ClientPong { + if x, ok := x.GetType().(*StreamChatEventsRequest_Pong); ok { + return x.Pong + } + return nil +} + +type isStreamChatEventsRequest_Type interface { + isStreamChatEventsRequest_Type() +} + +type StreamChatEventsRequest_OpenStream struct { + OpenStream *OpenChatEventStream `protobuf:"bytes,1,opt,name=open_stream,json=openStream,proto3,oneof"` +} + +type StreamChatEventsRequest_Pong struct { + Pong *v1.ClientPong `protobuf:"bytes,2,opt,name=pong,proto3,oneof"` +} + +func (*StreamChatEventsRequest_OpenStream) isStreamChatEventsRequest_Type() {} + +func (*StreamChatEventsRequest_Pong) isStreamChatEventsRequest_Type() {} + +type StreamChatEventsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Type: + // + // *StreamChatEventsResponse_Events + // *StreamChatEventsResponse_Ping + Type isStreamChatEventsResponse_Type `protobuf_oneof:"type"` +} + +func (x *StreamChatEventsResponse) Reset() { + *x = StreamChatEventsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StreamChatEventsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StreamChatEventsResponse) ProtoMessage() {} + +func (x *StreamChatEventsResponse) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[8] + 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 StreamChatEventsResponse.ProtoReflect.Descriptor instead. +func (*StreamChatEventsResponse) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{8} +} + +func (m *StreamChatEventsResponse) GetType() isStreamChatEventsResponse_Type { + if m != nil { + return m.Type + } + return nil +} + +func (x *StreamChatEventsResponse) GetEvents() *ChatStreamEventBatch { + if x, ok := x.GetType().(*StreamChatEventsResponse_Events); ok { + return x.Events + } + return nil +} + +func (x *StreamChatEventsResponse) GetPing() *v1.ServerPing { + if x, ok := x.GetType().(*StreamChatEventsResponse_Ping); ok { + return x.Ping + } + return nil +} + +type isStreamChatEventsResponse_Type interface { + isStreamChatEventsResponse_Type() +} + +type StreamChatEventsResponse_Events struct { + Events *ChatStreamEventBatch `protobuf:"bytes,1,opt,name=events,proto3,oneof"` +} + +type StreamChatEventsResponse_Ping struct { + Ping *v1.ServerPing `protobuf:"bytes,2,opt,name=ping,proto3,oneof"` +} + +func (*StreamChatEventsResponse_Events) isStreamChatEventsResponse_Type() {} + +func (*StreamChatEventsResponse_Ping) isStreamChatEventsResponse_Type() {} + +type SendMessageRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ChatId *ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` + MemberId *ChatMemberId `protobuf:"bytes,2,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` + Content []*Content `protobuf:"bytes,3,rep,name=content,proto3" json:"content,omitempty"` + Owner *v1.SolanaAccountId `protobuf:"bytes,4,opt,name=owner,proto3" json:"owner,omitempty"` + Signature *v1.Signature `protobuf:"bytes,5,opt,name=signature,proto3" json:"signature,omitempty"` +} + +func (x *SendMessageRequest) Reset() { + *x = SendMessageRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SendMessageRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SendMessageRequest) ProtoMessage() {} + +func (x *SendMessageRequest) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[9] + 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 SendMessageRequest.ProtoReflect.Descriptor instead. +func (*SendMessageRequest) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{9} +} + +func (x *SendMessageRequest) GetChatId() *ChatId { + if x != nil { + return x.ChatId + } + return nil +} + +func (x *SendMessageRequest) GetMemberId() *ChatMemberId { + if x != nil { + return x.MemberId + } + return nil +} + +func (x *SendMessageRequest) GetContent() []*Content { + if x != nil { + return x.Content + } + return nil +} + +func (x *SendMessageRequest) GetOwner() *v1.SolanaAccountId { + if x != nil { + return x.Owner + } + return nil +} + +func (x *SendMessageRequest) GetSignature() *v1.Signature { + if x != nil { + return x.Signature + } + return nil +} + +type SendMessageResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Result SendMessageResponse_Result `protobuf:"varint,1,opt,name=result,proto3,enum=code.chat.v2.SendMessageResponse_Result" json:"result,omitempty"` + // The chat message that was sent, which includes server-side metadata like + // the generated message ID and official timestamp + Message *ChatMessage `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` +} + +func (x *SendMessageResponse) Reset() { + *x = SendMessageResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SendMessageResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SendMessageResponse) ProtoMessage() {} + +func (x *SendMessageResponse) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[10] + 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 SendMessageResponse.ProtoReflect.Descriptor instead. +func (*SendMessageResponse) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{10} +} + +func (x *SendMessageResponse) GetResult() SendMessageResponse_Result { + if x != nil { + return x.Result + } + return SendMessageResponse_OK +} + +func (x *SendMessageResponse) GetMessage() *ChatMessage { + if x != nil { + return x.Message + } + return nil +} + +type AdvancePointerRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ChatId *ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` + Pointer *Pointer `protobuf:"bytes,2,opt,name=pointer,proto3" json:"pointer,omitempty"` + Owner *v1.SolanaAccountId `protobuf:"bytes,3,opt,name=owner,proto3" json:"owner,omitempty"` + Signature *v1.Signature `protobuf:"bytes,4,opt,name=signature,proto3" json:"signature,omitempty"` +} + +func (x *AdvancePointerRequest) Reset() { + *x = AdvancePointerRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AdvancePointerRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AdvancePointerRequest) ProtoMessage() {} + +func (x *AdvancePointerRequest) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_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 AdvancePointerRequest.ProtoReflect.Descriptor instead. +func (*AdvancePointerRequest) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{11} +} + +func (x *AdvancePointerRequest) GetChatId() *ChatId { + if x != nil { + return x.ChatId + } + return nil +} + +func (x *AdvancePointerRequest) GetPointer() *Pointer { + if x != nil { + return x.Pointer + } + return nil +} + +func (x *AdvancePointerRequest) GetOwner() *v1.SolanaAccountId { + if x != nil { + return x.Owner + } + return nil +} + +func (x *AdvancePointerRequest) GetSignature() *v1.Signature { + if x != nil { + return x.Signature + } + return nil +} + +type AdvancePointerResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Result AdvancePointerResponse_Result `protobuf:"varint,1,opt,name=result,proto3,enum=code.chat.v2.AdvancePointerResponse_Result" json:"result,omitempty"` +} + +func (x *AdvancePointerResponse) Reset() { + *x = AdvancePointerResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AdvancePointerResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AdvancePointerResponse) ProtoMessage() {} + +func (x *AdvancePointerResponse) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_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 AdvancePointerResponse.ProtoReflect.Descriptor instead. +func (*AdvancePointerResponse) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{12} +} + +func (x *AdvancePointerResponse) GetResult() AdvancePointerResponse_Result { + if x != nil { + return x.Result + } + return AdvancePointerResponse_OK +} + +type SetMuteStateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ChatId *ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` + MemberId *ChatMemberId `protobuf:"bytes,2,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` + IsMuted bool `protobuf:"varint,3,opt,name=is_muted,json=isMuted,proto3" json:"is_muted,omitempty"` + Owner *v1.SolanaAccountId `protobuf:"bytes,4,opt,name=owner,proto3" json:"owner,omitempty"` + Signature *v1.Signature `protobuf:"bytes,5,opt,name=signature,proto3" json:"signature,omitempty"` +} + +func (x *SetMuteStateRequest) Reset() { + *x = SetMuteStateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SetMuteStateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetMuteStateRequest) ProtoMessage() {} + +func (x *SetMuteStateRequest) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[13] + 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 SetMuteStateRequest.ProtoReflect.Descriptor instead. +func (*SetMuteStateRequest) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{13} +} + +func (x *SetMuteStateRequest) GetChatId() *ChatId { + if x != nil { + return x.ChatId + } + return nil +} + +func (x *SetMuteStateRequest) GetMemberId() *ChatMemberId { + if x != nil { + return x.MemberId + } + return nil +} + +func (x *SetMuteStateRequest) GetIsMuted() bool { + if x != nil { + return x.IsMuted + } + return false +} + +func (x *SetMuteStateRequest) GetOwner() *v1.SolanaAccountId { + if x != nil { + return x.Owner + } + return nil +} + +func (x *SetMuteStateRequest) GetSignature() *v1.Signature { + if x != nil { + return x.Signature + } + return nil +} + +type SetMuteStateResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Result SetMuteStateResponse_Result `protobuf:"varint,1,opt,name=result,proto3,enum=code.chat.v2.SetMuteStateResponse_Result" json:"result,omitempty"` +} + +func (x *SetMuteStateResponse) Reset() { + *x = SetMuteStateResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SetMuteStateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetMuteStateResponse) ProtoMessage() {} + +func (x *SetMuteStateResponse) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[14] + 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 SetMuteStateResponse.ProtoReflect.Descriptor instead. +func (*SetMuteStateResponse) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{14} +} + +func (x *SetMuteStateResponse) GetResult() SetMuteStateResponse_Result { + if x != nil { + return x.Result + } + return SetMuteStateResponse_OK +} + +type SetSubscriptionStateRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ChatId *ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` + MemberId *ChatMemberId `protobuf:"bytes,2,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` + IsSubscribed bool `protobuf:"varint,3,opt,name=is_subscribed,json=isSubscribed,proto3" json:"is_subscribed,omitempty"` + Owner *v1.SolanaAccountId `protobuf:"bytes,4,opt,name=owner,proto3" json:"owner,omitempty"` + Signature *v1.Signature `protobuf:"bytes,5,opt,name=signature,proto3" json:"signature,omitempty"` +} + +func (x *SetSubscriptionStateRequest) Reset() { + *x = SetSubscriptionStateRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SetSubscriptionStateRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetSubscriptionStateRequest) ProtoMessage() {} + +func (x *SetSubscriptionStateRequest) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[15] + 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 SetSubscriptionStateRequest.ProtoReflect.Descriptor instead. +func (*SetSubscriptionStateRequest) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{15} +} + +func (x *SetSubscriptionStateRequest) GetChatId() *ChatId { + if x != nil { + return x.ChatId + } + return nil +} + +func (x *SetSubscriptionStateRequest) GetMemberId() *ChatMemberId { + if x != nil { + return x.MemberId + } + return nil +} + +func (x *SetSubscriptionStateRequest) GetIsSubscribed() bool { + if x != nil { + return x.IsSubscribed + } + return false +} + +func (x *SetSubscriptionStateRequest) GetOwner() *v1.SolanaAccountId { + if x != nil { + return x.Owner + } + return nil +} + +func (x *SetSubscriptionStateRequest) GetSignature() *v1.Signature { + if x != nil { + return x.Signature + } + return nil +} + +type SetSubscriptionStateResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Result SetSubscriptionStateResponse_Result `protobuf:"varint,1,opt,name=result,proto3,enum=code.chat.v2.SetSubscriptionStateResponse_Result" json:"result,omitempty"` +} + +func (x *SetSubscriptionStateResponse) Reset() { + *x = SetSubscriptionStateResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *SetSubscriptionStateResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SetSubscriptionStateResponse) ProtoMessage() {} + +func (x *SetSubscriptionStateResponse) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[16] + 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 SetSubscriptionStateResponse.ProtoReflect.Descriptor instead. +func (*SetSubscriptionStateResponse) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{16} +} + +func (x *SetSubscriptionStateResponse) GetResult() SetSubscriptionStateResponse_Result { + if x != nil { + return x.Result + } + return SetSubscriptionStateResponse_OK +} + +type ChatId struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *ChatId) Reset() { + *x = ChatId{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChatId) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatId) ProtoMessage() {} + +func (x *ChatId) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[17] + 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 ChatId.ProtoReflect.Descriptor instead. +func (*ChatId) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{17} +} + +func (x *ChatId) GetValue() []byte { + if x != nil { + return x.Value + } + return nil +} + +type ChatMessageId struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Guaranteed to be a time-based UUID. This should be used to construct a + // consistently ordered message history based on time. + Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *ChatMessageId) Reset() { + *x = ChatMessageId{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChatMessageId) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatMessageId) ProtoMessage() {} + +func (x *ChatMessageId) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[18] + 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 ChatMessageId.ProtoReflect.Descriptor instead. +func (*ChatMessageId) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{18} +} + +func (x *ChatMessageId) GetValue() []byte { + if x != nil { + return x.Value + } + return nil +} + +type ChatMemberId struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Random UUID + Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *ChatMemberId) Reset() { + *x = ChatMemberId{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChatMemberId) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatMemberId) ProtoMessage() {} + +func (x *ChatMemberId) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[19] + 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 ChatMemberId.ProtoReflect.Descriptor instead. +func (*ChatMemberId) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{19} +} + +func (x *ChatMemberId) GetValue() []byte { + if x != nil { + return x.Value + } + return nil +} + +// todo: Support is_verified in a clean way +type ChatMetadata struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Globally unique ID for this chat + ChatId *ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` + // The type of chat + Kind ChatMetadata_Kind `protobuf:"varint,2,opt,name=kind,proto3,enum=code.chat.v2.ChatMetadata_Kind" json:"kind,omitempty"` + // The chat title, which will be localized by server when applicable + Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"` + // The members in this chat + // + // For NOTIFICATION chats, this list has exactly 1 item + // For TWO_WAY chats, this list has exactly 2 items + // + // todo: If we support group chats, then we'll likely return the first page + // + // or a prioritized list. The remaining members would be fetched via + // a new RPC. + Members []*ChatMember `protobuf:"bytes,4,rep,name=members,proto3" json:"members,omitempty"` + // Estimated number of unread messages in this chat + NumUnread uint32 `protobuf:"varint,5,opt,name=num_unread,json=numUnread,proto3" json:"num_unread,omitempty"` + // Can the user mute this chat? + CanMute bool `protobuf:"varint,6,opt,name=can_mute,json=canMute,proto3" json:"can_mute,omitempty"` + // Has the user muted this chat? + IsMuted bool `protobuf:"varint,7,opt,name=is_muted,json=isMuted,proto3" json:"is_muted,omitempty"` + // Can the user unsubscribe from this chat? + CanUnsubscribe bool `protobuf:"varint,8,opt,name=can_unsubscribe,json=canUnsubscribe,proto3" json:"can_unsubscribe,omitempty"` + // Is the user subscribed to this chat? + IsSubscribed bool `protobuf:"varint,9,opt,name=is_subscribed,json=isSubscribed,proto3" json:"is_subscribed,omitempty"` + // Cursor value for this chat for reference in subsequent GetChatsRequest + Cursor *Cursor `protobuf:"bytes,10,opt,name=cursor,proto3" json:"cursor,omitempty"` +} + +func (x *ChatMetadata) Reset() { + *x = ChatMetadata{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChatMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatMetadata) ProtoMessage() {} + +func (x *ChatMetadata) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[20] + 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 ChatMetadata.ProtoReflect.Descriptor instead. +func (*ChatMetadata) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{20} +} + +func (x *ChatMetadata) GetChatId() *ChatId { + if x != nil { + return x.ChatId + } + return nil +} + +func (x *ChatMetadata) GetKind() ChatMetadata_Kind { + if x != nil { + return x.Kind + } + return ChatMetadata_UNKNOWN +} + +func (x *ChatMetadata) GetTitle() string { + if x != nil { + return x.Title + } + return "" +} + +func (x *ChatMetadata) GetMembers() []*ChatMember { + if x != nil { + return x.Members + } + return nil +} + +func (x *ChatMetadata) GetNumUnread() uint32 { + if x != nil { + return x.NumUnread + } + return 0 +} + +func (x *ChatMetadata) GetCanMute() bool { + if x != nil { + return x.CanMute + } + return false +} + +func (x *ChatMetadata) GetIsMuted() bool { + if x != nil { + return x.IsMuted + } + return false +} + +func (x *ChatMetadata) GetCanUnsubscribe() bool { + if x != nil { + return x.CanUnsubscribe + } + return false +} + +func (x *ChatMetadata) GetIsSubscribed() bool { + if x != nil { + return x.IsSubscribed + } + return false +} + +func (x *ChatMetadata) GetCursor() *Cursor { + if x != nil { + return x.Cursor + } + return nil +} + +type ChatMessage struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Globally unique ID for this message + MessageId *ChatMessageId `protobuf:"bytes,1,opt,name=message_id,json=messageId,proto3" json:"message_id,omitempty"` + // The chat member that sent the message. For NOTIFICATION chats, this field + // is omitted since the chat has exactly 1 member. + SenderId *ChatMemberId `protobuf:"bytes,2,opt,name=sender_id,json=senderId,proto3" json:"sender_id,omitempty"` + // Ordered message content. A message may have more than one piece of content. + Content []*Content `protobuf:"bytes,3,rep,name=content,proto3" json:"content,omitempty"` + // Timestamp this message was generated at. This value is also encoded in + // any time-based UUID message IDs. + Ts *timestamppb.Timestamp `protobuf:"bytes,4,opt,name=ts,proto3" json:"ts,omitempty"` + // Cursor value for this message for reference in a paged GetMessagesRequest + Cursor *Cursor `protobuf:"bytes,5,opt,name=cursor,proto3" json:"cursor,omitempty"` +} + +func (x *ChatMessage) Reset() { + *x = ChatMessage{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChatMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatMessage) ProtoMessage() {} + +func (x *ChatMessage) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[21] + 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 ChatMessage.ProtoReflect.Descriptor instead. +func (*ChatMessage) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{21} +} + +func (x *ChatMessage) GetMessageId() *ChatMessageId { + if x != nil { + return x.MessageId + } + return nil +} + +func (x *ChatMessage) GetSenderId() *ChatMemberId { + if x != nil { + return x.SenderId + } + return nil +} + +func (x *ChatMessage) GetContent() []*Content { + if x != nil { + return x.Content + } + return nil +} + +func (x *ChatMessage) GetTs() *timestamppb.Timestamp { + if x != nil { + return x.Ts + } + return nil +} + +func (x *ChatMessage) GetCursor() *Cursor { + if x != nil { + return x.Cursor + } + return nil +} + +type ChatMember struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Globally unique ID for this chat member + MemberId *ChatMemberId `protobuf:"bytes,1,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` + // Is this chat member yourself? This enables client to identify which member_id + // is themselves. + IsSelf bool `protobuf:"varint,2,opt,name=is_self,json=isSelf,proto3" json:"is_self,omitempty"` + // The chat member's identity if it has been revealed. + Identity *ChatMemberIdentity `protobuf:"bytes,3,opt,name=identity,proto3" json:"identity,omitempty"` + // Chat message state for this member. This list will have DELIVERED and READ + // pointers, if they exist. SENT pointers should be inferred by persistence + // on server. + Pointers []*Pointer `protobuf:"bytes,4,rep,name=pointers,proto3" json:"pointers,omitempty"` +} + +func (x *ChatMember) Reset() { + *x = ChatMember{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChatMember) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatMember) ProtoMessage() {} + +func (x *ChatMember) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[22] + 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 ChatMember.ProtoReflect.Descriptor instead. +func (*ChatMember) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{22} +} + +func (x *ChatMember) GetMemberId() *ChatMemberId { + if x != nil { + return x.MemberId + } + return nil +} + +func (x *ChatMember) GetIsSelf() bool { + if x != nil { + return x.IsSelf + } + return false +} + +func (x *ChatMember) GetIdentity() *ChatMemberIdentity { + if x != nil { + return x.Identity + } + return nil +} + +func (x *ChatMember) GetPointers() []*Pointer { + if x != nil { + return x.Pointers + } + return nil +} + +type ChatMemberIdentity struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The external social platform linked to this chat member + Platform ChatMemberIdentity_Platform `protobuf:"varint,1,opt,name=platform,proto3,enum=code.chat.v2.ChatMemberIdentity_Platform" json:"platform,omitempty"` + // The chat member's username on the external social platform + Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"` +} + +func (x *ChatMemberIdentity) Reset() { + *x = ChatMemberIdentity{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChatMemberIdentity) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatMemberIdentity) ProtoMessage() {} + +func (x *ChatMemberIdentity) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[23] + 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 ChatMemberIdentity.ProtoReflect.Descriptor instead. +func (*ChatMemberIdentity) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{23} +} + +func (x *ChatMemberIdentity) GetPlatform() ChatMemberIdentity_Platform { + if x != nil { + return x.Platform + } + return ChatMemberIdentity_UNKNOWN +} + +func (x *ChatMemberIdentity) GetUsername() string { + if x != nil { + return x.Username + } + return "" +} + +// Pointer in a chat indicating a user's message state in a chat. +type Pointer struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Kind Pointer_Kind `protobuf:"varint,1,opt,name=kind,proto3,enum=code.chat.v2.Pointer_Kind" json:"kind,omitempty"` + // Everything at or before this message ID is considered to have the state + // inferred by the type of pointer. + Value *ChatMessageId `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + // The chat member associated with this pointer state + MemberId *ChatMemberId `protobuf:"bytes,3,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` +} + +func (x *Pointer) Reset() { + *x = Pointer{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Pointer) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Pointer) ProtoMessage() {} + +func (x *Pointer) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[24] + 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 Pointer.ProtoReflect.Descriptor instead. +func (*Pointer) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{24} +} + +func (x *Pointer) GetKind() Pointer_Kind { + if x != nil { + return x.Kind + } + return Pointer_UNKNOWN +} + +func (x *Pointer) GetValue() *ChatMessageId { + if x != nil { + return x.Value + } + return nil +} + +func (x *Pointer) GetMemberId() *ChatMemberId { + if x != nil { + return x.MemberId + } + return nil +} + +// Content for a chat message +type Content struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Type: + // + // *Content_Text + // *Content_Localized + // *Content_ExchangeData + // *Content_NaclBox + // *Content_ThankYou + Type isContent_Type `protobuf_oneof:"type"` +} + +func (x *Content) Reset() { + *x = Content{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Content) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Content) ProtoMessage() {} + +func (x *Content) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[25] + 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 Content.ProtoReflect.Descriptor instead. +func (*Content) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{25} +} + +func (m *Content) GetType() isContent_Type { + if m != nil { + return m.Type + } + return nil +} + +func (x *Content) GetText() *TextContent { + if x, ok := x.GetType().(*Content_Text); ok { + return x.Text + } + return nil +} + +func (x *Content) GetLocalized() *LocalizedContent { + if x, ok := x.GetType().(*Content_Localized); ok { + return x.Localized + } + return nil +} + +func (x *Content) GetExchangeData() *ExchangeDataContent { + if x, ok := x.GetType().(*Content_ExchangeData); ok { + return x.ExchangeData + } + return nil +} + +func (x *Content) GetNaclBox() *NaclBoxEncryptedContent { + if x, ok := x.GetType().(*Content_NaclBox); ok { + return x.NaclBox + } + return nil +} + +func (x *Content) GetThankYou() *ThankYouContent { + if x, ok := x.GetType().(*Content_ThankYou); ok { + return x.ThankYou + } + return nil +} + +type isContent_Type interface { + isContent_Type() +} + +type Content_Text struct { + Text *TextContent `protobuf:"bytes,1,opt,name=text,proto3,oneof"` +} + +type Content_Localized struct { + Localized *LocalizedContent `protobuf:"bytes,2,opt,name=localized,proto3,oneof"` +} + +type Content_ExchangeData struct { + ExchangeData *ExchangeDataContent `protobuf:"bytes,3,opt,name=exchange_data,json=exchangeData,proto3,oneof"` +} + +type Content_NaclBox struct { + NaclBox *NaclBoxEncryptedContent `protobuf:"bytes,4,opt,name=nacl_box,json=naclBox,proto3,oneof"` +} + +type Content_ThankYou struct { + ThankYou *ThankYouContent `protobuf:"bytes,5,opt,name=thank_you,json=thankYou,proto3,oneof"` +} + +func (*Content_Text) isContent_Type() {} + +func (*Content_Localized) isContent_Type() {} + +func (*Content_ExchangeData) isContent_Type() {} + +func (*Content_NaclBox) isContent_Type() {} + +func (*Content_ThankYou) isContent_Type() {} + +// Raw text content +type TextContent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Text string `protobuf:"bytes,1,opt,name=text,proto3" json:"text,omitempty"` +} + +func (x *TextContent) Reset() { + *x = TextContent{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *TextContent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TextContent) ProtoMessage() {} + +func (x *TextContent) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[26] + 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 TextContent.ProtoReflect.Descriptor instead. +func (*TextContent) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{26} +} + +func (x *TextContent) GetText() string { + if x != nil { + return x.Text + } + return "" +} + +// Text content that is either a localization key that should be translated on +// client, or a server-side translated piece of text. +type LocalizedContent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + KeyOrText string `protobuf:"bytes,1,opt,name=key_or_text,json=keyOrText,proto3" json:"key_or_text,omitempty"` +} + +func (x *LocalizedContent) Reset() { + *x = LocalizedContent{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LocalizedContent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LocalizedContent) ProtoMessage() {} + +func (x *LocalizedContent) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[27] + 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 LocalizedContent.ProtoReflect.Descriptor instead. +func (*LocalizedContent) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{27} +} + +func (x *LocalizedContent) GetKeyOrText() string { + if x != nil { + return x.KeyOrText + } + return "" +} + +// Exchange data content for movement of a value of Kin. +type ExchangeDataContent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Verb describing how the amount of Kin was exchanged + // + // Note: The current definition is not suitable outside a NOTIFICATION chat + // + // as not enough context is provided as to which member this verb is + // associated with. + Verb ExchangeDataContent_Verb `protobuf:"varint,1,opt,name=verb,proto3,enum=code.chat.v2.ExchangeDataContent_Verb" json:"verb,omitempty"` + // An amount of Kin being exchanged + // + // Types that are assignable to ExchangeData: + // + // *ExchangeDataContent_Exact + // *ExchangeDataContent_Partial + ExchangeData isExchangeDataContent_ExchangeData `protobuf_oneof:"exchange_data"` + // An ID that can be referenced to the source of the exchange of Kin + // + // Types that are assignable to Reference: + // + // *ExchangeDataContent_Intent + // *ExchangeDataContent_Signature + Reference isExchangeDataContent_Reference `protobuf_oneof:"reference"` +} + +func (x *ExchangeDataContent) Reset() { + *x = ExchangeDataContent{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ExchangeDataContent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExchangeDataContent) ProtoMessage() {} + +func (x *ExchangeDataContent) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[28] + 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 ExchangeDataContent.ProtoReflect.Descriptor instead. +func (*ExchangeDataContent) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{28} +} + +func (x *ExchangeDataContent) GetVerb() ExchangeDataContent_Verb { + if x != nil { + return x.Verb + } + return ExchangeDataContent_UNKNOWN +} + +func (m *ExchangeDataContent) GetExchangeData() isExchangeDataContent_ExchangeData { + if m != nil { + return m.ExchangeData + } + return nil +} + +func (x *ExchangeDataContent) GetExact() *v2.ExchangeData { + if x, ok := x.GetExchangeData().(*ExchangeDataContent_Exact); ok { + return x.Exact + } + return nil +} + +func (x *ExchangeDataContent) GetPartial() *v2.ExchangeDataWithoutRate { + if x, ok := x.GetExchangeData().(*ExchangeDataContent_Partial); ok { + return x.Partial + } + return nil +} + +func (m *ExchangeDataContent) GetReference() isExchangeDataContent_Reference { + if m != nil { + return m.Reference + } + return nil +} + +func (x *ExchangeDataContent) GetIntent() *v1.IntentId { + if x, ok := x.GetReference().(*ExchangeDataContent_Intent); ok { + return x.Intent + } + return nil +} + +func (x *ExchangeDataContent) GetSignature() *v1.Signature { + if x, ok := x.GetReference().(*ExchangeDataContent_Signature); ok { + return x.Signature + } + return nil +} + +type isExchangeDataContent_ExchangeData interface { + isExchangeDataContent_ExchangeData() +} + +type ExchangeDataContent_Exact struct { + Exact *v2.ExchangeData `protobuf:"bytes,2,opt,name=exact,proto3,oneof"` +} + +type ExchangeDataContent_Partial struct { + Partial *v2.ExchangeDataWithoutRate `protobuf:"bytes,3,opt,name=partial,proto3,oneof"` +} + +func (*ExchangeDataContent_Exact) isExchangeDataContent_ExchangeData() {} + +func (*ExchangeDataContent_Partial) isExchangeDataContent_ExchangeData() {} + +type isExchangeDataContent_Reference interface { + isExchangeDataContent_Reference() +} + +type ExchangeDataContent_Intent struct { + Intent *v1.IntentId `protobuf:"bytes,4,opt,name=intent,proto3,oneof"` +} + +type ExchangeDataContent_Signature struct { + Signature *v1.Signature `protobuf:"bytes,5,opt,name=signature,proto3,oneof"` +} + +func (*ExchangeDataContent_Intent) isExchangeDataContent_Reference() {} + +func (*ExchangeDataContent_Signature) isExchangeDataContent_Reference() {} + +// Encrypted piece of content using NaCl box encryption +type NaclBoxEncryptedContent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + PeerPublicKey *v1.SolanaAccountId `protobuf:"bytes,1,opt,name=peer_public_key,json=peerPublicKey,proto3" json:"peer_public_key,omitempty"` + Nonce []byte `protobuf:"bytes,2,opt,name=nonce,proto3" json:"nonce,omitempty"` + EncryptedPayload []byte `protobuf:"bytes,3,opt,name=encrypted_payload,json=encryptedPayload,proto3" json:"encrypted_payload,omitempty"` +} + +func (x *NaclBoxEncryptedContent) Reset() { + *x = NaclBoxEncryptedContent{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *NaclBoxEncryptedContent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NaclBoxEncryptedContent) ProtoMessage() {} + +func (x *NaclBoxEncryptedContent) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[29] + 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 NaclBoxEncryptedContent.ProtoReflect.Descriptor instead. +func (*NaclBoxEncryptedContent) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{29} +} + +func (x *NaclBoxEncryptedContent) GetPeerPublicKey() *v1.SolanaAccountId { + if x != nil { + return x.PeerPublicKey + } + return nil +} + +func (x *NaclBoxEncryptedContent) GetNonce() []byte { + if x != nil { + return x.Nonce + } + return nil +} + +func (x *NaclBoxEncryptedContent) GetEncryptedPayload() []byte { + if x != nil { + return x.EncryptedPayload + } + return nil +} + +type ThankYouContent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The tip intent that is being thanked. + TipIntent *v1.IntentId `protobuf:"bytes,1,opt,name=tip_intent,json=tipIntent,proto3" json:"tip_intent,omitempty"` +} + +func (x *ThankYouContent) Reset() { + *x = ThankYouContent{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ThankYouContent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ThankYouContent) ProtoMessage() {} + +func (x *ThankYouContent) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[30] + 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 ThankYouContent.ProtoReflect.Descriptor instead. +func (*ThankYouContent) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{30} +} + +func (x *ThankYouContent) GetTipIntent() *v1.IntentId { + if x != nil { + return x.TipIntent + } + return nil +} + +// Opaque cursor used across paged APIs. Underlying bytes may change as paging +// strategies evolve. Expected length value will vary based on the RPC being +// executed.package +type Cursor struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` +} + +func (x *Cursor) Reset() { + *x = Cursor{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Cursor) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Cursor) ProtoMessage() {} + +func (x *Cursor) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[31] + 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 Cursor.ProtoReflect.Descriptor instead. +func (*Cursor) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{31} +} + +func (x *Cursor) GetValue() []byte { + if x != nil { + return x.Value + } + return nil +} + +var File_chat_v2_chat_service_proto protoreflect.FileDescriptor + +var file_chat_v2_chat_service_proto_rawDesc = []byte{ + 0x0a, 0x1a, 0x63, 0x68, 0x61, 0x74, 0x2f, 0x76, 0x32, 0x2f, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x73, + 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0c, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x1a, 0x15, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2f, 0x76, 0x31, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x1a, 0x28, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, + 0x32, 0x2f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x73, 0x65, + 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x76, 0x61, + 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2f, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x65, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd6, 0x02, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, + 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, + 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, + 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, + 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x12, 0x26, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xba, 0xe9, 0xc0, 0x03, 0x04, 0x2a, 0x02, 0x18, 0x64, 0x52, + 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, + 0x73, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, + 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x45, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, + 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x1e, + 0x0a, 0x09, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x07, 0x0a, 0x03, 0x41, + 0x53, 0x43, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, 0x10, 0x01, 0x22, 0xb2, + 0x01, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x12, 0x3e, 0x0a, 0x05, 0x63, 0x68, 0x61, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x42, 0x0c, 0xba, + 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x64, 0x52, 0x05, 0x63, 0x68, 0x61, + 0x74, 0x73, 0x22, 0x1f, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, + 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, + 0x44, 0x10, 0x01, 0x22, 0xd0, 0x03, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, + 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, + 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, + 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x49, 0x64, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x41, + 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, + 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, + 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x26, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, + 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xba, 0xe9, 0xc0, 0x03, 0x04, + 0x2a, 0x02, 0x18, 0x64, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x2c, + 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, + 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x48, 0x0a, 0x09, + 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x2a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, + 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, + 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x1e, 0x0a, 0x09, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x53, 0x43, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, + 0x44, 0x45, 0x53, 0x43, 0x10, 0x01, 0x22, 0xbd, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, + 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, + 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x12, 0x43, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x0c, 0xba, + 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x64, 0x52, 0x08, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x1f, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, + 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, + 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x01, 0x22, 0x9d, 0x02, 0x0a, 0x13, 0x4f, 0x70, 0x65, 0x6e, 0x43, + 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x39, + 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, + 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, + 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x41, + 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, + 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, + 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x0f, 0x43, 0x68, 0x61, 0x74, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x35, 0x0a, 0x07, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x12, 0x31, 0x0a, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x07, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, + 0xc0, 0x03, 0x01, 0x22, 0x5c, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x44, 0x0a, 0x06, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x0d, 0xba, 0xe9, 0xc0, 0x03, + 0x08, 0x92, 0x01, 0x05, 0x08, 0x01, 0x10, 0x80, 0x08, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x73, 0x22, 0xa0, 0x01, 0x0a, 0x17, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x44, 0x0a, + 0x0b, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x12, 0x30, 0x0a, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x6e, 0x67, 0x48, 0x00, 0x52, + 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, + 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x99, 0x01, 0x0a, 0x18, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, + 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x42, 0x61, 0x74, 0x63, 0x68, 0x48, 0x00, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, + 0x30, 0x0a, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x04, 0x70, 0x69, 0x6e, + 0x67, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, + 0x22, 0xdb, 0x02, 0x0a, 0x12, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, + 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, + 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, + 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, + 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x01, 0x52, 0x07, 0x63, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, + 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, + 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xe3, + 0x01, 0x0a, 0x13, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x55, 0x0a, + 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, + 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, + 0x44, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x43, + 0x48, 0x41, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, + 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, + 0x50, 0x45, 0x10, 0x03, 0x22, 0x97, 0x02, 0x0a, 0x15, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, + 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, + 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, + 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x07, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x07, 0x70, + 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, + 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, + 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x9a, + 0x01, 0x0a, 0x16, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x3b, + 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, + 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, + 0x4e, 0x44, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, + 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x22, 0xb8, 0x02, 0x0a, 0x13, + 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, + 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, + 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x41, + 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, + 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, + 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x4d, 0x75, + 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x41, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, + 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x22, 0x33, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, + 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, + 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x41, 0x4e, 0x54, + 0x5f, 0x4d, 0x55, 0x54, 0x45, 0x10, 0x02, 0x22, 0xca, 0x02, 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x53, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, + 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, + 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, + 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x73, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, + 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, + 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, + 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, + 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, + 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, + 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x1c, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x22, 0x3a, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, + 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, + 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x55, + 0x4e, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x10, 0x02, 0x22, 0x2b, 0x0a, 0x06, + 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x20, + 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x32, 0x0a, 0x0d, 0x43, 0x68, 0x61, + 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, + 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x31, 0x0a, + 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, + 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0xf5, 0x03, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, + 0x61, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x3f, 0x0a, 0x04, + 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x69, 0x6e, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x22, 0x0a, + 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, + 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, + 0x65, 0x12, 0x40, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, + 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x61, + 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x55, 0x6e, 0x72, 0x65, + 0x61, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x61, 0x6e, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x18, 0x06, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x61, 0x6e, 0x4d, 0x75, 0x74, 0x65, 0x12, 0x19, 0x0a, + 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x6e, 0x5f, + 0x75, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0e, 0x63, 0x61, 0x6e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, + 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, + 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, + 0x72, 0x73, 0x6f, 0x72, 0x22, 0x32, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0b, 0x0a, 0x07, + 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x4e, 0x4f, 0x54, + 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x54, + 0x57, 0x4f, 0x5f, 0x57, 0x41, 0x59, 0x10, 0x02, 0x22, 0xb3, 0x02, 0x0a, 0x0b, 0x43, 0x68, 0x61, + 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x46, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, + 0x12, 0x37, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x52, + 0x08, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, + 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x02, 0x74, 0x73, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x02, 0x74, 0x73, + 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xe9, + 0x01, 0x0a, 0x0a, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x43, 0x0a, + 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, + 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x73, 0x65, 0x6c, 0x66, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x53, 0x65, 0x6c, 0x66, 0x12, 0x3c, 0x0a, 0x08, 0x69, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, + 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, + 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x08, 0x70, 0x6f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x02, + 0x52, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x22, 0xbc, 0x01, 0x0a, 0x12, 0x43, + 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x12, 0x51, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x0a, + 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x18, 0x01, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x27, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x72, 0x04, 0x10, + 0x01, 0x18, 0x0f, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x24, 0x0a, + 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, + 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x49, 0x54, 0x54, 0x45, + 0x52, 0x10, 0x01, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x81, 0x02, 0x0a, 0x07, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x2e, 0x4b, 0x69, 0x6e, 0x64, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x6b, 0x69, 0x6e, + 0x64, 0x12, 0x3d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, + 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x49, 0x64, 0x22, 0x36, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0b, 0x0a, + 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, + 0x4e, 0x54, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, + 0x44, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, 0x03, 0x22, 0xd5, 0x02, + 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x74, 0x65, 0x78, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x48, 0x00, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3e, 0x0a, 0x09, 0x6c, 0x6f, + 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x6f, 0x63, + 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, + 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x0d, 0x65, 0x78, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x44, 0x61, 0x74, 0x61, 0x12, 0x42, 0x0a, 0x08, 0x6e, 0x61, 0x63, 0x6c, 0x5f, 0x62, 0x6f, 0x78, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, + 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, + 0x07, 0x6e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x12, 0x3c, 0x0a, 0x09, 0x74, 0x68, 0x61, 0x6e, + 0x6b, 0x5f, 0x79, 0x6f, 0x75, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x68, 0x61, 0x6e, 0x6b, + 0x59, 0x6f, 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x08, 0x74, 0x68, + 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, + 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x2f, 0x0a, 0x0b, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, + 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x40, 0x0a, 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, + 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x0b, 0x6b, 0x65, + 0x79, 0x5f, 0x6f, 0x72, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x09, 0x6b, + 0x65, 0x79, 0x4f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x22, 0xa4, 0x04, 0x0a, 0x13, 0x45, 0x78, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x12, 0x46, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, + 0x20, 0x00, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, 0x12, 0x39, 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, + 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x05, 0x65, 0x78, + 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, + 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x52, 0x61, + 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x32, 0x0a, + 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x48, 0x01, 0x52, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x12, 0x39, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, + 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xa4, 0x01, 0x0a, + 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, + 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x47, 0x41, 0x56, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, + 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x57, 0x49, + 0x54, 0x48, 0x44, 0x52, 0x45, 0x57, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, 0x4f, + 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, + 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x45, 0x44, 0x10, 0x06, 0x12, + 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, 0x4e, 0x54, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x41, + 0x49, 0x44, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x55, 0x52, 0x43, 0x48, 0x41, 0x53, 0x45, + 0x44, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x5f, + 0x54, 0x49, 0x50, 0x10, 0x0a, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x49, + 0x50, 0x10, 0x0b, 0x42, 0x16, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, + 0x64, 0x61, 0x74, 0x61, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x42, 0x12, 0x0a, 0x09, 0x72, + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, + 0xcc, 0x01, 0x0a, 0x17, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x0f, 0x70, + 0x65, 0x65, 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, + 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, + 0x01, 0x52, 0x0d, 0x70, 0x65, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, + 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, + 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x18, 0x18, 0x18, 0x52, 0x05, 0x6e, 0x6f, + 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, + 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0c, + 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x10, 0x65, 0x6e, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x62, + 0x0a, 0x0f, 0x54, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x12, 0x43, 0x0a, 0x0a, 0x74, 0x69, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x74, 0x69, 0x70, + 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, + 0x10, 0x04, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, + 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x32, + 0x83, 0x05, 0x0a, 0x04, 0x43, 0x68, 0x61, 0x74, 0x12, 0x49, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x43, + 0x68, 0x61, 0x74, 0x73, 0x12, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x73, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x52, + 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, + 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, + 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x55, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, + 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, + 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x29, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, + 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, + 0x65, 0x2d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, + 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2f, 0x76, + 0x32, 0x3b, 0x63, 0x68, 0x61, 0x74, 0xa2, 0x02, 0x09, 0x43, 0x50, 0x42, 0x43, 0x68, 0x61, 0x74, + 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_chat_v2_chat_service_proto_rawDescOnce sync.Once + file_chat_v2_chat_service_proto_rawDescData = file_chat_v2_chat_service_proto_rawDesc +) + +func file_chat_v2_chat_service_proto_rawDescGZIP() []byte { + file_chat_v2_chat_service_proto_rawDescOnce.Do(func() { + file_chat_v2_chat_service_proto_rawDescData = protoimpl.X.CompressGZIP(file_chat_v2_chat_service_proto_rawDescData) + }) + return file_chat_v2_chat_service_proto_rawDescData +} + +var file_chat_v2_chat_service_proto_enumTypes = make([]protoimpl.EnumInfo, 12) +var file_chat_v2_chat_service_proto_msgTypes = make([]protoimpl.MessageInfo, 32) +var file_chat_v2_chat_service_proto_goTypes = []interface{}{ + (GetChatsRequest_Direction)(0), // 0: code.chat.v2.GetChatsRequest.Direction + (GetChatsResponse_Result)(0), // 1: code.chat.v2.GetChatsResponse.Result + (GetMessagesRequest_Direction)(0), // 2: code.chat.v2.GetMessagesRequest.Direction + (GetMessagesResponse_Result)(0), // 3: code.chat.v2.GetMessagesResponse.Result + (SendMessageResponse_Result)(0), // 4: code.chat.v2.SendMessageResponse.Result + (AdvancePointerResponse_Result)(0), // 5: code.chat.v2.AdvancePointerResponse.Result + (SetMuteStateResponse_Result)(0), // 6: code.chat.v2.SetMuteStateResponse.Result + (SetSubscriptionStateResponse_Result)(0), // 7: code.chat.v2.SetSubscriptionStateResponse.Result + (ChatMetadata_Kind)(0), // 8: code.chat.v2.ChatMetadata.Kind + (ChatMemberIdentity_Platform)(0), // 9: code.chat.v2.ChatMemberIdentity.Platform + (Pointer_Kind)(0), // 10: code.chat.v2.Pointer.Kind + (ExchangeDataContent_Verb)(0), // 11: code.chat.v2.ExchangeDataContent.Verb + (*GetChatsRequest)(nil), // 12: code.chat.v2.GetChatsRequest + (*GetChatsResponse)(nil), // 13: code.chat.v2.GetChatsResponse + (*GetMessagesRequest)(nil), // 14: code.chat.v2.GetMessagesRequest + (*GetMessagesResponse)(nil), // 15: code.chat.v2.GetMessagesResponse + (*OpenChatEventStream)(nil), // 16: code.chat.v2.OpenChatEventStream + (*ChatStreamEvent)(nil), // 17: code.chat.v2.ChatStreamEvent + (*ChatStreamEventBatch)(nil), // 18: code.chat.v2.ChatStreamEventBatch + (*StreamChatEventsRequest)(nil), // 19: code.chat.v2.StreamChatEventsRequest + (*StreamChatEventsResponse)(nil), // 20: code.chat.v2.StreamChatEventsResponse + (*SendMessageRequest)(nil), // 21: code.chat.v2.SendMessageRequest + (*SendMessageResponse)(nil), // 22: code.chat.v2.SendMessageResponse + (*AdvancePointerRequest)(nil), // 23: code.chat.v2.AdvancePointerRequest + (*AdvancePointerResponse)(nil), // 24: code.chat.v2.AdvancePointerResponse + (*SetMuteStateRequest)(nil), // 25: code.chat.v2.SetMuteStateRequest + (*SetMuteStateResponse)(nil), // 26: code.chat.v2.SetMuteStateResponse + (*SetSubscriptionStateRequest)(nil), // 27: code.chat.v2.SetSubscriptionStateRequest + (*SetSubscriptionStateResponse)(nil), // 28: code.chat.v2.SetSubscriptionStateResponse + (*ChatId)(nil), // 29: code.chat.v2.ChatId + (*ChatMessageId)(nil), // 30: code.chat.v2.ChatMessageId + (*ChatMemberId)(nil), // 31: code.chat.v2.ChatMemberId + (*ChatMetadata)(nil), // 32: code.chat.v2.ChatMetadata + (*ChatMessage)(nil), // 33: code.chat.v2.ChatMessage + (*ChatMember)(nil), // 34: code.chat.v2.ChatMember + (*ChatMemberIdentity)(nil), // 35: code.chat.v2.ChatMemberIdentity + (*Pointer)(nil), // 36: code.chat.v2.Pointer + (*Content)(nil), // 37: code.chat.v2.Content + (*TextContent)(nil), // 38: code.chat.v2.TextContent + (*LocalizedContent)(nil), // 39: code.chat.v2.LocalizedContent + (*ExchangeDataContent)(nil), // 40: code.chat.v2.ExchangeDataContent + (*NaclBoxEncryptedContent)(nil), // 41: code.chat.v2.NaclBoxEncryptedContent + (*ThankYouContent)(nil), // 42: code.chat.v2.ThankYouContent + (*Cursor)(nil), // 43: code.chat.v2.Cursor + (*v1.SolanaAccountId)(nil), // 44: code.common.v1.SolanaAccountId + (*v1.Signature)(nil), // 45: code.common.v1.Signature + (*v1.ClientPong)(nil), // 46: code.common.v1.ClientPong + (*v1.ServerPing)(nil), // 47: code.common.v1.ServerPing + (*timestamppb.Timestamp)(nil), // 48: google.protobuf.Timestamp + (*v2.ExchangeData)(nil), // 49: code.transaction.v2.ExchangeData + (*v2.ExchangeDataWithoutRate)(nil), // 50: code.transaction.v2.ExchangeDataWithoutRate + (*v1.IntentId)(nil), // 51: code.common.v1.IntentId +} +var file_chat_v2_chat_service_proto_depIdxs = []int32{ + 44, // 0: code.chat.v2.GetChatsRequest.owner:type_name -> code.common.v1.SolanaAccountId + 45, // 1: code.chat.v2.GetChatsRequest.signature:type_name -> code.common.v1.Signature + 43, // 2: code.chat.v2.GetChatsRequest.cursor:type_name -> code.chat.v2.Cursor + 0, // 3: code.chat.v2.GetChatsRequest.direction:type_name -> code.chat.v2.GetChatsRequest.Direction + 1, // 4: code.chat.v2.GetChatsResponse.result:type_name -> code.chat.v2.GetChatsResponse.Result + 32, // 5: code.chat.v2.GetChatsResponse.chats:type_name -> code.chat.v2.ChatMetadata + 29, // 6: code.chat.v2.GetMessagesRequest.chat_id:type_name -> code.chat.v2.ChatId + 31, // 7: code.chat.v2.GetMessagesRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 44, // 8: code.chat.v2.GetMessagesRequest.owner:type_name -> code.common.v1.SolanaAccountId + 45, // 9: code.chat.v2.GetMessagesRequest.signature:type_name -> code.common.v1.Signature + 43, // 10: code.chat.v2.GetMessagesRequest.cursor:type_name -> code.chat.v2.Cursor + 2, // 11: code.chat.v2.GetMessagesRequest.direction:type_name -> code.chat.v2.GetMessagesRequest.Direction + 3, // 12: code.chat.v2.GetMessagesResponse.result:type_name -> code.chat.v2.GetMessagesResponse.Result + 33, // 13: code.chat.v2.GetMessagesResponse.messages:type_name -> code.chat.v2.ChatMessage + 29, // 14: code.chat.v2.OpenChatEventStream.chat_id:type_name -> code.chat.v2.ChatId + 31, // 15: code.chat.v2.OpenChatEventStream.member_id:type_name -> code.chat.v2.ChatMemberId + 44, // 16: code.chat.v2.OpenChatEventStream.owner:type_name -> code.common.v1.SolanaAccountId + 45, // 17: code.chat.v2.OpenChatEventStream.signature:type_name -> code.common.v1.Signature + 33, // 18: code.chat.v2.ChatStreamEvent.message:type_name -> code.chat.v2.ChatMessage + 36, // 19: code.chat.v2.ChatStreamEvent.pointer:type_name -> code.chat.v2.Pointer + 17, // 20: code.chat.v2.ChatStreamEventBatch.events:type_name -> code.chat.v2.ChatStreamEvent + 16, // 21: code.chat.v2.StreamChatEventsRequest.open_stream:type_name -> code.chat.v2.OpenChatEventStream + 46, // 22: code.chat.v2.StreamChatEventsRequest.pong:type_name -> code.common.v1.ClientPong + 18, // 23: code.chat.v2.StreamChatEventsResponse.events:type_name -> code.chat.v2.ChatStreamEventBatch + 47, // 24: code.chat.v2.StreamChatEventsResponse.ping:type_name -> code.common.v1.ServerPing + 29, // 25: code.chat.v2.SendMessageRequest.chat_id:type_name -> code.chat.v2.ChatId + 31, // 26: code.chat.v2.SendMessageRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 37, // 27: code.chat.v2.SendMessageRequest.content:type_name -> code.chat.v2.Content + 44, // 28: code.chat.v2.SendMessageRequest.owner:type_name -> code.common.v1.SolanaAccountId + 45, // 29: code.chat.v2.SendMessageRequest.signature:type_name -> code.common.v1.Signature + 4, // 30: code.chat.v2.SendMessageResponse.result:type_name -> code.chat.v2.SendMessageResponse.Result + 33, // 31: code.chat.v2.SendMessageResponse.message:type_name -> code.chat.v2.ChatMessage + 29, // 32: code.chat.v2.AdvancePointerRequest.chat_id:type_name -> code.chat.v2.ChatId + 36, // 33: code.chat.v2.AdvancePointerRequest.pointer:type_name -> code.chat.v2.Pointer + 44, // 34: code.chat.v2.AdvancePointerRequest.owner:type_name -> code.common.v1.SolanaAccountId + 45, // 35: code.chat.v2.AdvancePointerRequest.signature:type_name -> code.common.v1.Signature + 5, // 36: code.chat.v2.AdvancePointerResponse.result:type_name -> code.chat.v2.AdvancePointerResponse.Result + 29, // 37: code.chat.v2.SetMuteStateRequest.chat_id:type_name -> code.chat.v2.ChatId + 31, // 38: code.chat.v2.SetMuteStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 44, // 39: code.chat.v2.SetMuteStateRequest.owner:type_name -> code.common.v1.SolanaAccountId + 45, // 40: code.chat.v2.SetMuteStateRequest.signature:type_name -> code.common.v1.Signature + 6, // 41: code.chat.v2.SetMuteStateResponse.result:type_name -> code.chat.v2.SetMuteStateResponse.Result + 29, // 42: code.chat.v2.SetSubscriptionStateRequest.chat_id:type_name -> code.chat.v2.ChatId + 31, // 43: code.chat.v2.SetSubscriptionStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 44, // 44: code.chat.v2.SetSubscriptionStateRequest.owner:type_name -> code.common.v1.SolanaAccountId + 45, // 45: code.chat.v2.SetSubscriptionStateRequest.signature:type_name -> code.common.v1.Signature + 7, // 46: code.chat.v2.SetSubscriptionStateResponse.result:type_name -> code.chat.v2.SetSubscriptionStateResponse.Result + 29, // 47: code.chat.v2.ChatMetadata.chat_id:type_name -> code.chat.v2.ChatId + 8, // 48: code.chat.v2.ChatMetadata.kind:type_name -> code.chat.v2.ChatMetadata.Kind + 34, // 49: code.chat.v2.ChatMetadata.members:type_name -> code.chat.v2.ChatMember + 43, // 50: code.chat.v2.ChatMetadata.cursor:type_name -> code.chat.v2.Cursor + 30, // 51: code.chat.v2.ChatMessage.message_id:type_name -> code.chat.v2.ChatMessageId + 31, // 52: code.chat.v2.ChatMessage.sender_id:type_name -> code.chat.v2.ChatMemberId + 37, // 53: code.chat.v2.ChatMessage.content:type_name -> code.chat.v2.Content + 48, // 54: code.chat.v2.ChatMessage.ts:type_name -> google.protobuf.Timestamp + 43, // 55: code.chat.v2.ChatMessage.cursor:type_name -> code.chat.v2.Cursor + 31, // 56: code.chat.v2.ChatMember.member_id:type_name -> code.chat.v2.ChatMemberId + 35, // 57: code.chat.v2.ChatMember.identity:type_name -> code.chat.v2.ChatMemberIdentity + 36, // 58: code.chat.v2.ChatMember.pointers:type_name -> code.chat.v2.Pointer + 9, // 59: code.chat.v2.ChatMemberIdentity.platform:type_name -> code.chat.v2.ChatMemberIdentity.Platform + 10, // 60: code.chat.v2.Pointer.kind:type_name -> code.chat.v2.Pointer.Kind + 30, // 61: code.chat.v2.Pointer.value:type_name -> code.chat.v2.ChatMessageId + 31, // 62: code.chat.v2.Pointer.member_id:type_name -> code.chat.v2.ChatMemberId + 38, // 63: code.chat.v2.Content.text:type_name -> code.chat.v2.TextContent + 39, // 64: code.chat.v2.Content.localized:type_name -> code.chat.v2.LocalizedContent + 40, // 65: code.chat.v2.Content.exchange_data:type_name -> code.chat.v2.ExchangeDataContent + 41, // 66: code.chat.v2.Content.nacl_box:type_name -> code.chat.v2.NaclBoxEncryptedContent + 42, // 67: code.chat.v2.Content.thank_you:type_name -> code.chat.v2.ThankYouContent + 11, // 68: code.chat.v2.ExchangeDataContent.verb:type_name -> code.chat.v2.ExchangeDataContent.Verb + 49, // 69: code.chat.v2.ExchangeDataContent.exact:type_name -> code.transaction.v2.ExchangeData + 50, // 70: code.chat.v2.ExchangeDataContent.partial:type_name -> code.transaction.v2.ExchangeDataWithoutRate + 51, // 71: code.chat.v2.ExchangeDataContent.intent:type_name -> code.common.v1.IntentId + 45, // 72: code.chat.v2.ExchangeDataContent.signature:type_name -> code.common.v1.Signature + 44, // 73: code.chat.v2.NaclBoxEncryptedContent.peer_public_key:type_name -> code.common.v1.SolanaAccountId + 51, // 74: code.chat.v2.ThankYouContent.tip_intent:type_name -> code.common.v1.IntentId + 12, // 75: code.chat.v2.Chat.GetChats:input_type -> code.chat.v2.GetChatsRequest + 14, // 76: code.chat.v2.Chat.GetMessages:input_type -> code.chat.v2.GetMessagesRequest + 19, // 77: code.chat.v2.Chat.StreamChatEvents:input_type -> code.chat.v2.StreamChatEventsRequest + 21, // 78: code.chat.v2.Chat.SendMessage:input_type -> code.chat.v2.SendMessageRequest + 23, // 79: code.chat.v2.Chat.AdvancePointer:input_type -> code.chat.v2.AdvancePointerRequest + 25, // 80: code.chat.v2.Chat.SetMuteState:input_type -> code.chat.v2.SetMuteStateRequest + 27, // 81: code.chat.v2.Chat.SetSubscriptionState:input_type -> code.chat.v2.SetSubscriptionStateRequest + 13, // 82: code.chat.v2.Chat.GetChats:output_type -> code.chat.v2.GetChatsResponse + 15, // 83: code.chat.v2.Chat.GetMessages:output_type -> code.chat.v2.GetMessagesResponse + 20, // 84: code.chat.v2.Chat.StreamChatEvents:output_type -> code.chat.v2.StreamChatEventsResponse + 22, // 85: code.chat.v2.Chat.SendMessage:output_type -> code.chat.v2.SendMessageResponse + 24, // 86: code.chat.v2.Chat.AdvancePointer:output_type -> code.chat.v2.AdvancePointerResponse + 26, // 87: code.chat.v2.Chat.SetMuteState:output_type -> code.chat.v2.SetMuteStateResponse + 28, // 88: code.chat.v2.Chat.SetSubscriptionState:output_type -> code.chat.v2.SetSubscriptionStateResponse + 82, // [82:89] is the sub-list for method output_type + 75, // [75:82] is the sub-list for method input_type + 75, // [75:75] is the sub-list for extension type_name + 75, // [75:75] is the sub-list for extension extendee + 0, // [0:75] is the sub-list for field type_name +} + +func init() { file_chat_v2_chat_service_proto_init() } +func file_chat_v2_chat_service_proto_init() { + if File_chat_v2_chat_service_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_chat_v2_chat_service_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetChatsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetChatsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMessagesRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GetMessagesResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OpenChatEventStream); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChatStreamEvent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChatStreamEventBatch); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StreamChatEventsRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StreamChatEventsResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SendMessageRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SendMessageResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AdvancePointerRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AdvancePointerResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SetMuteStateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SetMuteStateResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SetSubscriptionStateRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SetSubscriptionStateResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChatId); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChatMessageId); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChatMemberId); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChatMetadata); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChatMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChatMember); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ChatMemberIdentity); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Pointer); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Content); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*TextContent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LocalizedContent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExchangeDataContent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NaclBoxEncryptedContent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ThankYouContent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Cursor); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_chat_v2_chat_service_proto_msgTypes[5].OneofWrappers = []interface{}{ + (*ChatStreamEvent_Message)(nil), + (*ChatStreamEvent_Pointer)(nil), + } + file_chat_v2_chat_service_proto_msgTypes[7].OneofWrappers = []interface{}{ + (*StreamChatEventsRequest_OpenStream)(nil), + (*StreamChatEventsRequest_Pong)(nil), + } + file_chat_v2_chat_service_proto_msgTypes[8].OneofWrappers = []interface{}{ + (*StreamChatEventsResponse_Events)(nil), + (*StreamChatEventsResponse_Ping)(nil), + } + file_chat_v2_chat_service_proto_msgTypes[25].OneofWrappers = []interface{}{ + (*Content_Text)(nil), + (*Content_Localized)(nil), + (*Content_ExchangeData)(nil), + (*Content_NaclBox)(nil), + (*Content_ThankYou)(nil), + } + file_chat_v2_chat_service_proto_msgTypes[28].OneofWrappers = []interface{}{ + (*ExchangeDataContent_Exact)(nil), + (*ExchangeDataContent_Partial)(nil), + (*ExchangeDataContent_Intent)(nil), + (*ExchangeDataContent_Signature)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_chat_v2_chat_service_proto_rawDesc, + NumEnums: 12, + NumMessages: 32, + NumExtensions: 0, + NumServices: 1, + }, + GoTypes: file_chat_v2_chat_service_proto_goTypes, + DependencyIndexes: file_chat_v2_chat_service_proto_depIdxs, + EnumInfos: file_chat_v2_chat_service_proto_enumTypes, + MessageInfos: file_chat_v2_chat_service_proto_msgTypes, + }.Build() + File_chat_v2_chat_service_proto = out.File + file_chat_v2_chat_service_proto_rawDesc = nil + file_chat_v2_chat_service_proto_goTypes = nil + file_chat_v2_chat_service_proto_depIdxs = nil +} diff --git a/generated/go/chat/v2/chat_service.pb.validate.go b/generated/go/chat/v2/chat_service.pb.validate.go new file mode 100644 index 0000000..cffb922 --- /dev/null +++ b/generated/go/chat/v2/chat_service.pb.validate.go @@ -0,0 +1,3330 @@ +// Code generated by protoc-gen-validate. DO NOT EDIT. +// source: chat/v2/chat_service.proto + +package chat + +import ( + "bytes" + "errors" + "fmt" + "net" + "net/mail" + "net/url" + "regexp" + "strings" + "time" + "unicode/utf8" + + "github.com/golang/protobuf/ptypes" +) + +// ensure the imports are used +var ( + _ = bytes.MinRead + _ = errors.New("") + _ = fmt.Print + _ = utf8.UTFMax + _ = (*regexp.Regexp)(nil) + _ = (*strings.Reader)(nil) + _ = net.IPv4len + _ = time.Duration(0) + _ = (*url.URL)(nil) + _ = (*mail.Address)(nil) + _ = ptypes.DynamicAny{} +) + +// Validate checks the field values on GetChatsRequest with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *GetChatsRequest) Validate() error { + if m == nil { + return nil + } + + if m.GetOwner() == nil { + return GetChatsRequestValidationError{ + field: "Owner", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetChatsRequestValidationError{ + field: "Owner", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetSignature() == nil { + return GetChatsRequestValidationError{ + field: "Signature", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetChatsRequestValidationError{ + field: "Signature", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetPageSize() > 100 { + return GetChatsRequestValidationError{ + field: "PageSize", + reason: "value must be less than or equal to 100", + } + } + + if v, ok := interface{}(m.GetCursor()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetChatsRequestValidationError{ + field: "Cursor", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for Direction + + return nil +} + +// GetChatsRequestValidationError is the validation error returned by +// GetChatsRequest.Validate if the designated constraints aren't met. +type GetChatsRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e GetChatsRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e GetChatsRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e GetChatsRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e GetChatsRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e GetChatsRequestValidationError) ErrorName() string { return "GetChatsRequestValidationError" } + +// Error satisfies the builtin error interface +func (e GetChatsRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sGetChatsRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = GetChatsRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = GetChatsRequestValidationError{} + +// Validate checks the field values on GetChatsResponse with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *GetChatsResponse) Validate() error { + if m == nil { + return nil + } + + // no validation rules for Result + + if len(m.GetChats()) > 100 { + return GetChatsResponseValidationError{ + field: "Chats", + reason: "value must contain no more than 100 item(s)", + } + } + + for idx, item := range m.GetChats() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetChatsResponseValidationError{ + field: fmt.Sprintf("Chats[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// GetChatsResponseValidationError is the validation error returned by +// GetChatsResponse.Validate if the designated constraints aren't met. +type GetChatsResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e GetChatsResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e GetChatsResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e GetChatsResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e GetChatsResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e GetChatsResponseValidationError) ErrorName() string { return "GetChatsResponseValidationError" } + +// Error satisfies the builtin error interface +func (e GetChatsResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sGetChatsResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = GetChatsResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = GetChatsResponseValidationError{} + +// Validate checks the field values on GetMessagesRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *GetMessagesRequest) Validate() error { + if m == nil { + return nil + } + + if m.GetChatId() == nil { + return GetMessagesRequestValidationError{ + field: "ChatId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetChatId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetMessagesRequestValidationError{ + field: "ChatId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetMemberId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetMessagesRequestValidationError{ + field: "MemberId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetOwner() == nil { + return GetMessagesRequestValidationError{ + field: "Owner", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetMessagesRequestValidationError{ + field: "Owner", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetSignature() == nil { + return GetMessagesRequestValidationError{ + field: "Signature", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetMessagesRequestValidationError{ + field: "Signature", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetPageSize() > 100 { + return GetMessagesRequestValidationError{ + field: "PageSize", + reason: "value must be less than or equal to 100", + } + } + + if v, ok := interface{}(m.GetCursor()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetMessagesRequestValidationError{ + field: "Cursor", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for Direction + + return nil +} + +// GetMessagesRequestValidationError is the validation error returned by +// GetMessagesRequest.Validate if the designated constraints aren't met. +type GetMessagesRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e GetMessagesRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e GetMessagesRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e GetMessagesRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e GetMessagesRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e GetMessagesRequestValidationError) ErrorName() string { + return "GetMessagesRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e GetMessagesRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sGetMessagesRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = GetMessagesRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = GetMessagesRequestValidationError{} + +// Validate checks the field values on GetMessagesResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *GetMessagesResponse) Validate() error { + if m == nil { + return nil + } + + // no validation rules for Result + + if len(m.GetMessages()) > 100 { + return GetMessagesResponseValidationError{ + field: "Messages", + reason: "value must contain no more than 100 item(s)", + } + } + + for idx, item := range m.GetMessages() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return GetMessagesResponseValidationError{ + field: fmt.Sprintf("Messages[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// GetMessagesResponseValidationError is the validation error returned by +// GetMessagesResponse.Validate if the designated constraints aren't met. +type GetMessagesResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e GetMessagesResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e GetMessagesResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e GetMessagesResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e GetMessagesResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e GetMessagesResponseValidationError) ErrorName() string { + return "GetMessagesResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e GetMessagesResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sGetMessagesResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = GetMessagesResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = GetMessagesResponseValidationError{} + +// Validate checks the field values on OpenChatEventStream with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *OpenChatEventStream) Validate() error { + if m == nil { + return nil + } + + if m.GetChatId() == nil { + return OpenChatEventStreamValidationError{ + field: "ChatId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetChatId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return OpenChatEventStreamValidationError{ + field: "ChatId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetMemberId() == nil { + return OpenChatEventStreamValidationError{ + field: "MemberId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetMemberId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return OpenChatEventStreamValidationError{ + field: "MemberId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetOwner() == nil { + return OpenChatEventStreamValidationError{ + field: "Owner", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return OpenChatEventStreamValidationError{ + field: "Owner", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetSignature() == nil { + return OpenChatEventStreamValidationError{ + field: "Signature", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return OpenChatEventStreamValidationError{ + field: "Signature", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// OpenChatEventStreamValidationError is the validation error returned by +// OpenChatEventStream.Validate if the designated constraints aren't met. +type OpenChatEventStreamValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e OpenChatEventStreamValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e OpenChatEventStreamValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e OpenChatEventStreamValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e OpenChatEventStreamValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e OpenChatEventStreamValidationError) ErrorName() string { + return "OpenChatEventStreamValidationError" +} + +// Error satisfies the builtin error interface +func (e OpenChatEventStreamValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sOpenChatEventStream.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = OpenChatEventStreamValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = OpenChatEventStreamValidationError{} + +// Validate checks the field values on ChatStreamEvent with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *ChatStreamEvent) Validate() error { + if m == nil { + return nil + } + + switch m.Type.(type) { + + case *ChatStreamEvent_Message: + + if v, ok := interface{}(m.GetMessage()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChatStreamEventValidationError{ + field: "Message", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *ChatStreamEvent_Pointer: + + if v, ok := interface{}(m.GetPointer()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChatStreamEventValidationError{ + field: "Pointer", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return ChatStreamEventValidationError{ + field: "Type", + reason: "value is required", + } + + } + + return nil +} + +// ChatStreamEventValidationError is the validation error returned by +// ChatStreamEvent.Validate if the designated constraints aren't met. +type ChatStreamEventValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ChatStreamEventValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ChatStreamEventValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ChatStreamEventValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ChatStreamEventValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ChatStreamEventValidationError) ErrorName() string { return "ChatStreamEventValidationError" } + +// Error satisfies the builtin error interface +func (e ChatStreamEventValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sChatStreamEvent.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ChatStreamEventValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ChatStreamEventValidationError{} + +// Validate checks the field values on ChatStreamEventBatch with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *ChatStreamEventBatch) Validate() error { + if m == nil { + return nil + } + + if l := len(m.GetEvents()); l < 1 || l > 1024 { + return ChatStreamEventBatchValidationError{ + field: "Events", + reason: "value must contain between 1 and 1024 items, inclusive", + } + } + + for idx, item := range m.GetEvents() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChatStreamEventBatchValidationError{ + field: fmt.Sprintf("Events[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// ChatStreamEventBatchValidationError is the validation error returned by +// ChatStreamEventBatch.Validate if the designated constraints aren't met. +type ChatStreamEventBatchValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ChatStreamEventBatchValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ChatStreamEventBatchValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ChatStreamEventBatchValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ChatStreamEventBatchValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ChatStreamEventBatchValidationError) ErrorName() string { + return "ChatStreamEventBatchValidationError" +} + +// Error satisfies the builtin error interface +func (e ChatStreamEventBatchValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sChatStreamEventBatch.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ChatStreamEventBatchValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ChatStreamEventBatchValidationError{} + +// Validate checks the field values on StreamChatEventsRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *StreamChatEventsRequest) Validate() error { + if m == nil { + return nil + } + + switch m.Type.(type) { + + case *StreamChatEventsRequest_OpenStream: + + if v, ok := interface{}(m.GetOpenStream()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamChatEventsRequestValidationError{ + field: "OpenStream", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *StreamChatEventsRequest_Pong: + + if v, ok := interface{}(m.GetPong()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamChatEventsRequestValidationError{ + field: "Pong", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return StreamChatEventsRequestValidationError{ + field: "Type", + reason: "value is required", + } + + } + + return nil +} + +// StreamChatEventsRequestValidationError is the validation error returned by +// StreamChatEventsRequest.Validate if the designated constraints aren't met. +type StreamChatEventsRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e StreamChatEventsRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e StreamChatEventsRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e StreamChatEventsRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e StreamChatEventsRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e StreamChatEventsRequestValidationError) ErrorName() string { + return "StreamChatEventsRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e StreamChatEventsRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sStreamChatEventsRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = StreamChatEventsRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = StreamChatEventsRequestValidationError{} + +// Validate checks the field values on StreamChatEventsResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *StreamChatEventsResponse) Validate() error { + if m == nil { + return nil + } + + switch m.Type.(type) { + + case *StreamChatEventsResponse_Events: + + if v, ok := interface{}(m.GetEvents()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamChatEventsResponseValidationError{ + field: "Events", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *StreamChatEventsResponse_Ping: + + if v, ok := interface{}(m.GetPing()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamChatEventsResponseValidationError{ + field: "Ping", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return StreamChatEventsResponseValidationError{ + field: "Type", + reason: "value is required", + } + + } + + return nil +} + +// StreamChatEventsResponseValidationError is the validation error returned by +// StreamChatEventsResponse.Validate if the designated constraints aren't met. +type StreamChatEventsResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e StreamChatEventsResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e StreamChatEventsResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e StreamChatEventsResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e StreamChatEventsResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e StreamChatEventsResponseValidationError) ErrorName() string { + return "StreamChatEventsResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e StreamChatEventsResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sStreamChatEventsResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = StreamChatEventsResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = StreamChatEventsResponseValidationError{} + +// Validate checks the field values on SendMessageRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *SendMessageRequest) Validate() error { + if m == nil { + return nil + } + + if m.GetChatId() == nil { + return SendMessageRequestValidationError{ + field: "ChatId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetChatId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SendMessageRequestValidationError{ + field: "ChatId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetMemberId() == nil { + return SendMessageRequestValidationError{ + field: "MemberId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetMemberId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SendMessageRequestValidationError{ + field: "MemberId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(m.GetContent()) != 1 { + return SendMessageRequestValidationError{ + field: "Content", + reason: "value must contain exactly 1 item(s)", + } + } + + for idx, item := range m.GetContent() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SendMessageRequestValidationError{ + field: fmt.Sprintf("Content[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if m.GetOwner() == nil { + return SendMessageRequestValidationError{ + field: "Owner", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SendMessageRequestValidationError{ + field: "Owner", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetSignature() == nil { + return SendMessageRequestValidationError{ + field: "Signature", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SendMessageRequestValidationError{ + field: "Signature", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// SendMessageRequestValidationError is the validation error returned by +// SendMessageRequest.Validate if the designated constraints aren't met. +type SendMessageRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e SendMessageRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e SendMessageRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e SendMessageRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e SendMessageRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e SendMessageRequestValidationError) ErrorName() string { + return "SendMessageRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e SendMessageRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sSendMessageRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = SendMessageRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = SendMessageRequestValidationError{} + +// Validate checks the field values on SendMessageResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *SendMessageResponse) Validate() error { + if m == nil { + return nil + } + + // no validation rules for Result + + if v, ok := interface{}(m.GetMessage()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SendMessageResponseValidationError{ + field: "Message", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// SendMessageResponseValidationError is the validation error returned by +// SendMessageResponse.Validate if the designated constraints aren't met. +type SendMessageResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e SendMessageResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e SendMessageResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e SendMessageResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e SendMessageResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e SendMessageResponseValidationError) ErrorName() string { + return "SendMessageResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e SendMessageResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sSendMessageResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = SendMessageResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = SendMessageResponseValidationError{} + +// Validate checks the field values on AdvancePointerRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *AdvancePointerRequest) Validate() error { + if m == nil { + return nil + } + + if m.GetChatId() == nil { + return AdvancePointerRequestValidationError{ + field: "ChatId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetChatId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AdvancePointerRequestValidationError{ + field: "ChatId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetPointer() == nil { + return AdvancePointerRequestValidationError{ + field: "Pointer", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetPointer()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AdvancePointerRequestValidationError{ + field: "Pointer", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetOwner() == nil { + return AdvancePointerRequestValidationError{ + field: "Owner", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AdvancePointerRequestValidationError{ + field: "Owner", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetSignature() == nil { + return AdvancePointerRequestValidationError{ + field: "Signature", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return AdvancePointerRequestValidationError{ + field: "Signature", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// AdvancePointerRequestValidationError is the validation error returned by +// AdvancePointerRequest.Validate if the designated constraints aren't met. +type AdvancePointerRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e AdvancePointerRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e AdvancePointerRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e AdvancePointerRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e AdvancePointerRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e AdvancePointerRequestValidationError) ErrorName() string { + return "AdvancePointerRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e AdvancePointerRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sAdvancePointerRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = AdvancePointerRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = AdvancePointerRequestValidationError{} + +// Validate checks the field values on AdvancePointerResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *AdvancePointerResponse) Validate() error { + if m == nil { + return nil + } + + // no validation rules for Result + + return nil +} + +// AdvancePointerResponseValidationError is the validation error returned by +// AdvancePointerResponse.Validate if the designated constraints aren't met. +type AdvancePointerResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e AdvancePointerResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e AdvancePointerResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e AdvancePointerResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e AdvancePointerResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e AdvancePointerResponseValidationError) ErrorName() string { + return "AdvancePointerResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e AdvancePointerResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sAdvancePointerResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = AdvancePointerResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = AdvancePointerResponseValidationError{} + +// Validate checks the field values on SetMuteStateRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *SetMuteStateRequest) Validate() error { + if m == nil { + return nil + } + + if m.GetChatId() == nil { + return SetMuteStateRequestValidationError{ + field: "ChatId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetChatId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SetMuteStateRequestValidationError{ + field: "ChatId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetMemberId() == nil { + return SetMuteStateRequestValidationError{ + field: "MemberId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetMemberId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SetMuteStateRequestValidationError{ + field: "MemberId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for IsMuted + + if m.GetOwner() == nil { + return SetMuteStateRequestValidationError{ + field: "Owner", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SetMuteStateRequestValidationError{ + field: "Owner", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetSignature() == nil { + return SetMuteStateRequestValidationError{ + field: "Signature", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SetMuteStateRequestValidationError{ + field: "Signature", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// SetMuteStateRequestValidationError is the validation error returned by +// SetMuteStateRequest.Validate if the designated constraints aren't met. +type SetMuteStateRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e SetMuteStateRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e SetMuteStateRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e SetMuteStateRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e SetMuteStateRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e SetMuteStateRequestValidationError) ErrorName() string { + return "SetMuteStateRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e SetMuteStateRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sSetMuteStateRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = SetMuteStateRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = SetMuteStateRequestValidationError{} + +// Validate checks the field values on SetMuteStateResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *SetMuteStateResponse) Validate() error { + if m == nil { + return nil + } + + // no validation rules for Result + + return nil +} + +// SetMuteStateResponseValidationError is the validation error returned by +// SetMuteStateResponse.Validate if the designated constraints aren't met. +type SetMuteStateResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e SetMuteStateResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e SetMuteStateResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e SetMuteStateResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e SetMuteStateResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e SetMuteStateResponseValidationError) ErrorName() string { + return "SetMuteStateResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e SetMuteStateResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sSetMuteStateResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = SetMuteStateResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = SetMuteStateResponseValidationError{} + +// Validate checks the field values on SetSubscriptionStateRequest with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *SetSubscriptionStateRequest) Validate() error { + if m == nil { + return nil + } + + if m.GetChatId() == nil { + return SetSubscriptionStateRequestValidationError{ + field: "ChatId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetChatId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SetSubscriptionStateRequestValidationError{ + field: "ChatId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetMemberId() == nil { + return SetSubscriptionStateRequestValidationError{ + field: "MemberId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetMemberId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SetSubscriptionStateRequestValidationError{ + field: "MemberId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for IsSubscribed + + if m.GetOwner() == nil { + return SetSubscriptionStateRequestValidationError{ + field: "Owner", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SetSubscriptionStateRequestValidationError{ + field: "Owner", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetSignature() == nil { + return SetSubscriptionStateRequestValidationError{ + field: "Signature", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return SetSubscriptionStateRequestValidationError{ + field: "Signature", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// SetSubscriptionStateRequestValidationError is the validation error returned +// by SetSubscriptionStateRequest.Validate if the designated constraints +// aren't met. +type SetSubscriptionStateRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e SetSubscriptionStateRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e SetSubscriptionStateRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e SetSubscriptionStateRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e SetSubscriptionStateRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e SetSubscriptionStateRequestValidationError) ErrorName() string { + return "SetSubscriptionStateRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e SetSubscriptionStateRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sSetSubscriptionStateRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = SetSubscriptionStateRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = SetSubscriptionStateRequestValidationError{} + +// Validate checks the field values on SetSubscriptionStateResponse with the +// rules defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *SetSubscriptionStateResponse) Validate() error { + if m == nil { + return nil + } + + // no validation rules for Result + + return nil +} + +// SetSubscriptionStateResponseValidationError is the validation error returned +// by SetSubscriptionStateResponse.Validate if the designated constraints +// aren't met. +type SetSubscriptionStateResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e SetSubscriptionStateResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e SetSubscriptionStateResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e SetSubscriptionStateResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e SetSubscriptionStateResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e SetSubscriptionStateResponseValidationError) ErrorName() string { + return "SetSubscriptionStateResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e SetSubscriptionStateResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sSetSubscriptionStateResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = SetSubscriptionStateResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = SetSubscriptionStateResponseValidationError{} + +// Validate checks the field values on ChatId with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *ChatId) Validate() error { + if m == nil { + return nil + } + + if len(m.GetValue()) != 32 { + return ChatIdValidationError{ + field: "Value", + reason: "value length must be 32 bytes", + } + } + + return nil +} + +// ChatIdValidationError is the validation error returned by ChatId.Validate if +// the designated constraints aren't met. +type ChatIdValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ChatIdValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ChatIdValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ChatIdValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ChatIdValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ChatIdValidationError) ErrorName() string { return "ChatIdValidationError" } + +// Error satisfies the builtin error interface +func (e ChatIdValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sChatId.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ChatIdValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ChatIdValidationError{} + +// Validate checks the field values on ChatMessageId with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *ChatMessageId) Validate() error { + if m == nil { + return nil + } + + if len(m.GetValue()) != 16 { + return ChatMessageIdValidationError{ + field: "Value", + reason: "value length must be 16 bytes", + } + } + + return nil +} + +// ChatMessageIdValidationError is the validation error returned by +// ChatMessageId.Validate if the designated constraints aren't met. +type ChatMessageIdValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ChatMessageIdValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ChatMessageIdValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ChatMessageIdValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ChatMessageIdValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ChatMessageIdValidationError) ErrorName() string { return "ChatMessageIdValidationError" } + +// Error satisfies the builtin error interface +func (e ChatMessageIdValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sChatMessageId.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ChatMessageIdValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ChatMessageIdValidationError{} + +// Validate checks the field values on ChatMemberId with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *ChatMemberId) Validate() error { + if m == nil { + return nil + } + + if len(m.GetValue()) != 16 { + return ChatMemberIdValidationError{ + field: "Value", + reason: "value length must be 16 bytes", + } + } + + return nil +} + +// ChatMemberIdValidationError is the validation error returned by +// ChatMemberId.Validate if the designated constraints aren't met. +type ChatMemberIdValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ChatMemberIdValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ChatMemberIdValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ChatMemberIdValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ChatMemberIdValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ChatMemberIdValidationError) ErrorName() string { return "ChatMemberIdValidationError" } + +// Error satisfies the builtin error interface +func (e ChatMemberIdValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sChatMemberId.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ChatMemberIdValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ChatMemberIdValidationError{} + +// Validate checks the field values on ChatMetadata with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *ChatMetadata) Validate() error { + if m == nil { + return nil + } + + if m.GetChatId() == nil { + return ChatMetadataValidationError{ + field: "ChatId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetChatId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChatMetadataValidationError{ + field: "ChatId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if _, ok := _ChatMetadata_Kind_NotInLookup[m.GetKind()]; ok { + return ChatMetadataValidationError{ + field: "Kind", + reason: "value must not be in list [0]", + } + } + + if l := utf8.RuneCountInString(m.GetTitle()); l < 1 || l > 1024 { + return ChatMetadataValidationError{ + field: "Title", + reason: "value length must be between 1 and 1024 runes, inclusive", + } + } + + if l := len(m.GetMembers()); l < 1 || l > 2 { + return ChatMetadataValidationError{ + field: "Members", + reason: "value must contain between 1 and 2 items, inclusive", + } + } + + for idx, item := range m.GetMembers() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChatMetadataValidationError{ + field: fmt.Sprintf("Members[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + // no validation rules for NumUnread + + // no validation rules for CanMute + + // no validation rules for IsMuted + + // no validation rules for CanUnsubscribe + + // no validation rules for IsSubscribed + + if v, ok := interface{}(m.GetCursor()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChatMetadataValidationError{ + field: "Cursor", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// ChatMetadataValidationError is the validation error returned by +// ChatMetadata.Validate if the designated constraints aren't met. +type ChatMetadataValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ChatMetadataValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ChatMetadataValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ChatMetadataValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ChatMetadataValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ChatMetadataValidationError) ErrorName() string { return "ChatMetadataValidationError" } + +// Error satisfies the builtin error interface +func (e ChatMetadataValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sChatMetadata.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ChatMetadataValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ChatMetadataValidationError{} + +var _ChatMetadata_Kind_NotInLookup = map[ChatMetadata_Kind]struct{}{ + 0: {}, +} + +// Validate checks the field values on ChatMessage with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *ChatMessage) Validate() error { + if m == nil { + return nil + } + + if m.GetMessageId() == nil { + return ChatMessageValidationError{ + field: "MessageId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetMessageId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChatMessageValidationError{ + field: "MessageId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if v, ok := interface{}(m.GetSenderId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChatMessageValidationError{ + field: "SenderId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if l := len(m.GetContent()); l < 1 || l > 2 { + return ChatMessageValidationError{ + field: "Content", + reason: "value must contain between 1 and 2 items, inclusive", + } + } + + for idx, item := range m.GetContent() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChatMessageValidationError{ + field: fmt.Sprintf("Content[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + if m.GetTs() == nil { + return ChatMessageValidationError{ + field: "Ts", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetCursor()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChatMessageValidationError{ + field: "Cursor", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// ChatMessageValidationError is the validation error returned by +// ChatMessage.Validate if the designated constraints aren't met. +type ChatMessageValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ChatMessageValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ChatMessageValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ChatMessageValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ChatMessageValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ChatMessageValidationError) ErrorName() string { return "ChatMessageValidationError" } + +// Error satisfies the builtin error interface +func (e ChatMessageValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sChatMessage.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ChatMessageValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ChatMessageValidationError{} + +// Validate checks the field values on ChatMember with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *ChatMember) Validate() error { + if m == nil { + return nil + } + + if m.GetMemberId() == nil { + return ChatMemberValidationError{ + field: "MemberId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetMemberId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChatMemberValidationError{ + field: "MemberId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + // no validation rules for IsSelf + + if v, ok := interface{}(m.GetIdentity()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChatMemberValidationError{ + field: "Identity", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(m.GetPointers()) > 2 { + return ChatMemberValidationError{ + field: "Pointers", + reason: "value must contain no more than 2 item(s)", + } + } + + for idx, item := range m.GetPointers() { + _, _ = idx, item + + if v, ok := interface{}(item).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ChatMemberValidationError{ + field: fmt.Sprintf("Pointers[%v]", idx), + reason: "embedded message failed validation", + cause: err, + } + } + } + + } + + return nil +} + +// ChatMemberValidationError is the validation error returned by +// ChatMember.Validate if the designated constraints aren't met. +type ChatMemberValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ChatMemberValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ChatMemberValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ChatMemberValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ChatMemberValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ChatMemberValidationError) ErrorName() string { return "ChatMemberValidationError" } + +// Error satisfies the builtin error interface +func (e ChatMemberValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sChatMember.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ChatMemberValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ChatMemberValidationError{} + +// Validate checks the field values on ChatMemberIdentity with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *ChatMemberIdentity) Validate() error { + if m == nil { + return nil + } + + if _, ok := _ChatMemberIdentity_Platform_InLookup[m.GetPlatform()]; !ok { + return ChatMemberIdentityValidationError{ + field: "Platform", + reason: "value must be in list [1]", + } + } + + if l := utf8.RuneCountInString(m.GetUsername()); l < 1 || l > 15 { + return ChatMemberIdentityValidationError{ + field: "Username", + reason: "value length must be between 1 and 15 runes, inclusive", + } + } + + return nil +} + +// ChatMemberIdentityValidationError is the validation error returned by +// ChatMemberIdentity.Validate if the designated constraints aren't met. +type ChatMemberIdentityValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ChatMemberIdentityValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ChatMemberIdentityValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ChatMemberIdentityValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ChatMemberIdentityValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ChatMemberIdentityValidationError) ErrorName() string { + return "ChatMemberIdentityValidationError" +} + +// Error satisfies the builtin error interface +func (e ChatMemberIdentityValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sChatMemberIdentity.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ChatMemberIdentityValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ChatMemberIdentityValidationError{} + +var _ChatMemberIdentity_Platform_InLookup = map[ChatMemberIdentity_Platform]struct{}{ + 1: {}, +} + +// Validate checks the field values on Pointer with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *Pointer) Validate() error { + if m == nil { + return nil + } + + if _, ok := _Pointer_Kind_NotInLookup[m.GetKind()]; ok { + return PointerValidationError{ + field: "Kind", + reason: "value must not be in list [0]", + } + } + + if m.GetValue() == nil { + return PointerValidationError{ + field: "Value", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetValue()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return PointerValidationError{ + field: "Value", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetMemberId() == nil { + return PointerValidationError{ + field: "MemberId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetMemberId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return PointerValidationError{ + field: "MemberId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// PointerValidationError is the validation error returned by Pointer.Validate +// if the designated constraints aren't met. +type PointerValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e PointerValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e PointerValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e PointerValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e PointerValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e PointerValidationError) ErrorName() string { return "PointerValidationError" } + +// Error satisfies the builtin error interface +func (e PointerValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sPointer.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = PointerValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = PointerValidationError{} + +var _Pointer_Kind_NotInLookup = map[Pointer_Kind]struct{}{ + 0: {}, +} + +// Validate checks the field values on Content with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *Content) Validate() error { + if m == nil { + return nil + } + + switch m.Type.(type) { + + case *Content_Text: + + if v, ok := interface{}(m.GetText()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ContentValidationError{ + field: "Text", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *Content_Localized: + + if v, ok := interface{}(m.GetLocalized()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ContentValidationError{ + field: "Localized", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *Content_ExchangeData: + + if v, ok := interface{}(m.GetExchangeData()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ContentValidationError{ + field: "ExchangeData", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *Content_NaclBox: + + if v, ok := interface{}(m.GetNaclBox()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ContentValidationError{ + field: "NaclBox", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *Content_ThankYou: + + if v, ok := interface{}(m.GetThankYou()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ContentValidationError{ + field: "ThankYou", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return ContentValidationError{ + field: "Type", + reason: "value is required", + } + + } + + return nil +} + +// ContentValidationError is the validation error returned by Content.Validate +// if the designated constraints aren't met. +type ContentValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ContentValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ContentValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ContentValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ContentValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ContentValidationError) ErrorName() string { return "ContentValidationError" } + +// Error satisfies the builtin error interface +func (e ContentValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sContent.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ContentValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ContentValidationError{} + +// Validate checks the field values on TextContent with the rules defined in +// the proto definition for this message. If any rules are violated, an error +// is returned. +func (m *TextContent) Validate() error { + if m == nil { + return nil + } + + if l := utf8.RuneCountInString(m.GetText()); l < 1 || l > 1024 { + return TextContentValidationError{ + field: "Text", + reason: "value length must be between 1 and 1024 runes, inclusive", + } + } + + return nil +} + +// TextContentValidationError is the validation error returned by +// TextContent.Validate if the designated constraints aren't met. +type TextContentValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e TextContentValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e TextContentValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e TextContentValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e TextContentValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e TextContentValidationError) ErrorName() string { return "TextContentValidationError" } + +// Error satisfies the builtin error interface +func (e TextContentValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sTextContent.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = TextContentValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = TextContentValidationError{} + +// Validate checks the field values on LocalizedContent with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *LocalizedContent) Validate() error { + if m == nil { + return nil + } + + if l := utf8.RuneCountInString(m.GetKeyOrText()); l < 1 || l > 1024 { + return LocalizedContentValidationError{ + field: "KeyOrText", + reason: "value length must be between 1 and 1024 runes, inclusive", + } + } + + return nil +} + +// LocalizedContentValidationError is the validation error returned by +// LocalizedContent.Validate if the designated constraints aren't met. +type LocalizedContentValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e LocalizedContentValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e LocalizedContentValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e LocalizedContentValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e LocalizedContentValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e LocalizedContentValidationError) ErrorName() string { return "LocalizedContentValidationError" } + +// Error satisfies the builtin error interface +func (e LocalizedContentValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sLocalizedContent.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = LocalizedContentValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = LocalizedContentValidationError{} + +// Validate checks the field values on ExchangeDataContent with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *ExchangeDataContent) Validate() error { + if m == nil { + return nil + } + + if _, ok := _ExchangeDataContent_Verb_NotInLookup[m.GetVerb()]; ok { + return ExchangeDataContentValidationError{ + field: "Verb", + reason: "value must not be in list [0]", + } + } + + switch m.ExchangeData.(type) { + + case *ExchangeDataContent_Exact: + + if v, ok := interface{}(m.GetExact()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ExchangeDataContentValidationError{ + field: "Exact", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *ExchangeDataContent_Partial: + + if v, ok := interface{}(m.GetPartial()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ExchangeDataContentValidationError{ + field: "Partial", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return ExchangeDataContentValidationError{ + field: "ExchangeData", + reason: "value is required", + } + + } + + switch m.Reference.(type) { + + case *ExchangeDataContent_Intent: + + if v, ok := interface{}(m.GetIntent()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ExchangeDataContentValidationError{ + field: "Intent", + reason: "embedded message failed validation", + cause: err, + } + } + } + + case *ExchangeDataContent_Signature: + + if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ExchangeDataContentValidationError{ + field: "Signature", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return ExchangeDataContentValidationError{ + field: "Reference", + reason: "value is required", + } + + } + + return nil +} + +// ExchangeDataContentValidationError is the validation error returned by +// ExchangeDataContent.Validate if the designated constraints aren't met. +type ExchangeDataContentValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ExchangeDataContentValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ExchangeDataContentValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ExchangeDataContentValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ExchangeDataContentValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ExchangeDataContentValidationError) ErrorName() string { + return "ExchangeDataContentValidationError" +} + +// Error satisfies the builtin error interface +func (e ExchangeDataContentValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sExchangeDataContent.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ExchangeDataContentValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ExchangeDataContentValidationError{} + +var _ExchangeDataContent_Verb_NotInLookup = map[ExchangeDataContent_Verb]struct{}{ + 0: {}, +} + +// Validate checks the field values on NaclBoxEncryptedContent with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *NaclBoxEncryptedContent) Validate() error { + if m == nil { + return nil + } + + if m.GetPeerPublicKey() == nil { + return NaclBoxEncryptedContentValidationError{ + field: "PeerPublicKey", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetPeerPublicKey()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return NaclBoxEncryptedContentValidationError{ + field: "PeerPublicKey", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if len(m.GetNonce()) != 24 { + return NaclBoxEncryptedContentValidationError{ + field: "Nonce", + reason: "value length must be 24 bytes", + } + } + + if l := len(m.GetEncryptedPayload()); l < 1 || l > 1024 { + return NaclBoxEncryptedContentValidationError{ + field: "EncryptedPayload", + reason: "value length must be between 1 and 1024 bytes, inclusive", + } + } + + return nil +} + +// NaclBoxEncryptedContentValidationError is the validation error returned by +// NaclBoxEncryptedContent.Validate if the designated constraints aren't met. +type NaclBoxEncryptedContentValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e NaclBoxEncryptedContentValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e NaclBoxEncryptedContentValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e NaclBoxEncryptedContentValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e NaclBoxEncryptedContentValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e NaclBoxEncryptedContentValidationError) ErrorName() string { + return "NaclBoxEncryptedContentValidationError" +} + +// Error satisfies the builtin error interface +func (e NaclBoxEncryptedContentValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sNaclBoxEncryptedContent.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = NaclBoxEncryptedContentValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = NaclBoxEncryptedContentValidationError{} + +// Validate checks the field values on ThankYouContent with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *ThankYouContent) Validate() error { + if m == nil { + return nil + } + + if m.GetTipIntent() == nil { + return ThankYouContentValidationError{ + field: "TipIntent", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetTipIntent()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ThankYouContentValidationError{ + field: "TipIntent", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// ThankYouContentValidationError is the validation error returned by +// ThankYouContent.Validate if the designated constraints aren't met. +type ThankYouContentValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ThankYouContentValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ThankYouContentValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ThankYouContentValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ThankYouContentValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ThankYouContentValidationError) ErrorName() string { return "ThankYouContentValidationError" } + +// Error satisfies the builtin error interface +func (e ThankYouContentValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sThankYouContent.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ThankYouContentValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ThankYouContentValidationError{} + +// Validate checks the field values on Cursor with the rules defined in the +// proto definition for this message. If any rules are violated, an error is returned. +func (m *Cursor) Validate() error { + if m == nil { + return nil + } + + if l := len(m.GetValue()); l < 16 || l > 32 { + return CursorValidationError{ + field: "Value", + reason: "value length must be between 16 and 32 bytes, inclusive", + } + } + + return nil +} + +// CursorValidationError is the validation error returned by Cursor.Validate if +// the designated constraints aren't met. +type CursorValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e CursorValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e CursorValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e CursorValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e CursorValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e CursorValidationError) ErrorName() string { return "CursorValidationError" } + +// Error satisfies the builtin error interface +func (e CursorValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sCursor.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = CursorValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = CursorValidationError{} diff --git a/generated/go/chat/v2/chat_service_grpc.pb.go b/generated/go/chat/v2/chat_service_grpc.pb.go new file mode 100644 index 0000000..778247b --- /dev/null +++ b/generated/go/chat/v2/chat_service_grpc.pb.go @@ -0,0 +1,370 @@ +// Code generated by protoc-gen-go-grpc. DO NOT EDIT. +// versions: +// - protoc-gen-go-grpc v1.2.0 +// - protoc v3.21.12 +// source: chat/v2/chat_service.proto + +package chat + +import ( + context "context" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" +) + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +// Requires gRPC-Go v1.32.0 or later. +const _ = grpc.SupportPackageIsVersion7 + +// ChatClient is the client API for Chat service. +// +// 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 ChatClient interface { + // GetChats gets the set of chats for an owner account using a paged API + GetChats(ctx context.Context, in *GetChatsRequest, opts ...grpc.CallOption) (*GetChatsResponse, error) + // GetMessages gets the set of messages for a chat using a paged API + GetMessages(ctx context.Context, in *GetMessagesRequest, opts ...grpc.CallOption) (*GetMessagesResponse, error) + // StreamChatEvents streams chat events in real-time. This RPC also supports + // flushes to push initial chat state after stream open. + StreamChatEvents(ctx context.Context, opts ...grpc.CallOption) (Chat_StreamChatEventsClient, error) + // SendMessage sends a message to a chat + SendMessage(ctx context.Context, in *SendMessageRequest, opts ...grpc.CallOption) (*SendMessageResponse, error) + // AdvancePointer advances a pointer in chat history + AdvancePointer(ctx context.Context, in *AdvancePointerRequest, opts ...grpc.CallOption) (*AdvancePointerResponse, error) + // SetMuteState configures the mute state of a chat + SetMuteState(ctx context.Context, in *SetMuteStateRequest, opts ...grpc.CallOption) (*SetMuteStateResponse, error) + // SetSubscriptionState configures the susbscription state of a chat + SetSubscriptionState(ctx context.Context, in *SetSubscriptionStateRequest, opts ...grpc.CallOption) (*SetSubscriptionStateResponse, error) +} + +type chatClient struct { + cc grpc.ClientConnInterface +} + +func NewChatClient(cc grpc.ClientConnInterface) ChatClient { + return &chatClient{cc} +} + +func (c *chatClient) GetChats(ctx context.Context, in *GetChatsRequest, opts ...grpc.CallOption) (*GetChatsResponse, error) { + out := new(GetChatsResponse) + err := c.cc.Invoke(ctx, "/code.chat.v2.Chat/GetChats", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *chatClient) GetMessages(ctx context.Context, in *GetMessagesRequest, opts ...grpc.CallOption) (*GetMessagesResponse, error) { + out := new(GetMessagesResponse) + err := c.cc.Invoke(ctx, "/code.chat.v2.Chat/GetMessages", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *chatClient) StreamChatEvents(ctx context.Context, opts ...grpc.CallOption) (Chat_StreamChatEventsClient, error) { + stream, err := c.cc.NewStream(ctx, &Chat_ServiceDesc.Streams[0], "/code.chat.v2.Chat/StreamChatEvents", opts...) + if err != nil { + return nil, err + } + x := &chatStreamChatEventsClient{stream} + return x, nil +} + +type Chat_StreamChatEventsClient interface { + Send(*StreamChatEventsRequest) error + Recv() (*StreamChatEventsResponse, error) + grpc.ClientStream +} + +type chatStreamChatEventsClient struct { + grpc.ClientStream +} + +func (x *chatStreamChatEventsClient) Send(m *StreamChatEventsRequest) error { + return x.ClientStream.SendMsg(m) +} + +func (x *chatStreamChatEventsClient) Recv() (*StreamChatEventsResponse, error) { + m := new(StreamChatEventsResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func (c *chatClient) SendMessage(ctx context.Context, in *SendMessageRequest, opts ...grpc.CallOption) (*SendMessageResponse, error) { + out := new(SendMessageResponse) + err := c.cc.Invoke(ctx, "/code.chat.v2.Chat/SendMessage", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *chatClient) AdvancePointer(ctx context.Context, in *AdvancePointerRequest, opts ...grpc.CallOption) (*AdvancePointerResponse, error) { + out := new(AdvancePointerResponse) + err := c.cc.Invoke(ctx, "/code.chat.v2.Chat/AdvancePointer", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *chatClient) SetMuteState(ctx context.Context, in *SetMuteStateRequest, opts ...grpc.CallOption) (*SetMuteStateResponse, error) { + out := new(SetMuteStateResponse) + err := c.cc.Invoke(ctx, "/code.chat.v2.Chat/SetMuteState", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *chatClient) SetSubscriptionState(ctx context.Context, in *SetSubscriptionStateRequest, opts ...grpc.CallOption) (*SetSubscriptionStateResponse, error) { + out := new(SetSubscriptionStateResponse) + err := c.cc.Invoke(ctx, "/code.chat.v2.Chat/SetSubscriptionState", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// ChatServer is the server API for Chat service. +// All implementations must embed UnimplementedChatServer +// for forward compatibility +type ChatServer interface { + // GetChats gets the set of chats for an owner account using a paged API + GetChats(context.Context, *GetChatsRequest) (*GetChatsResponse, error) + // GetMessages gets the set of messages for a chat using a paged API + GetMessages(context.Context, *GetMessagesRequest) (*GetMessagesResponse, error) + // StreamChatEvents streams chat events in real-time. This RPC also supports + // flushes to push initial chat state after stream open. + StreamChatEvents(Chat_StreamChatEventsServer) error + // SendMessage sends a message to a chat + SendMessage(context.Context, *SendMessageRequest) (*SendMessageResponse, error) + // AdvancePointer advances a pointer in chat history + AdvancePointer(context.Context, *AdvancePointerRequest) (*AdvancePointerResponse, error) + // SetMuteState configures the mute state of a chat + SetMuteState(context.Context, *SetMuteStateRequest) (*SetMuteStateResponse, error) + // SetSubscriptionState configures the susbscription state of a chat + SetSubscriptionState(context.Context, *SetSubscriptionStateRequest) (*SetSubscriptionStateResponse, error) + mustEmbedUnimplementedChatServer() +} + +// UnimplementedChatServer must be embedded to have forward compatible implementations. +type UnimplementedChatServer struct { +} + +func (UnimplementedChatServer) GetChats(context.Context, *GetChatsRequest) (*GetChatsResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetChats not implemented") +} +func (UnimplementedChatServer) GetMessages(context.Context, *GetMessagesRequest) (*GetMessagesResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetMessages not implemented") +} +func (UnimplementedChatServer) StreamChatEvents(Chat_StreamChatEventsServer) error { + return status.Errorf(codes.Unimplemented, "method StreamChatEvents not implemented") +} +func (UnimplementedChatServer) SendMessage(context.Context, *SendMessageRequest) (*SendMessageResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SendMessage not implemented") +} +func (UnimplementedChatServer) AdvancePointer(context.Context, *AdvancePointerRequest) (*AdvancePointerResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method AdvancePointer not implemented") +} +func (UnimplementedChatServer) SetMuteState(context.Context, *SetMuteStateRequest) (*SetMuteStateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SetMuteState not implemented") +} +func (UnimplementedChatServer) SetSubscriptionState(context.Context, *SetSubscriptionStateRequest) (*SetSubscriptionStateResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method SetSubscriptionState not implemented") +} +func (UnimplementedChatServer) mustEmbedUnimplementedChatServer() {} + +// UnsafeChatServer may be embedded to opt out of forward compatibility for this service. +// Use of this interface is not recommended, as added methods to ChatServer will +// result in compilation errors. +type UnsafeChatServer interface { + mustEmbedUnimplementedChatServer() +} + +func RegisterChatServer(s grpc.ServiceRegistrar, srv ChatServer) { + s.RegisterService(&Chat_ServiceDesc, srv) +} + +func _Chat_GetChats_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetChatsRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ChatServer).GetChats(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/code.chat.v2.Chat/GetChats", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ChatServer).GetChats(ctx, req.(*GetChatsRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Chat_GetMessages_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetMessagesRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ChatServer).GetMessages(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/code.chat.v2.Chat/GetMessages", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ChatServer).GetMessages(ctx, req.(*GetMessagesRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Chat_StreamChatEvents_Handler(srv interface{}, stream grpc.ServerStream) error { + return srv.(ChatServer).StreamChatEvents(&chatStreamChatEventsServer{stream}) +} + +type Chat_StreamChatEventsServer interface { + Send(*StreamChatEventsResponse) error + Recv() (*StreamChatEventsRequest, error) + grpc.ServerStream +} + +type chatStreamChatEventsServer struct { + grpc.ServerStream +} + +func (x *chatStreamChatEventsServer) Send(m *StreamChatEventsResponse) error { + return x.ServerStream.SendMsg(m) +} + +func (x *chatStreamChatEventsServer) Recv() (*StreamChatEventsRequest, error) { + m := new(StreamChatEventsRequest) + if err := x.ServerStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil +} + +func _Chat_SendMessage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SendMessageRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ChatServer).SendMessage(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/code.chat.v2.Chat/SendMessage", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ChatServer).SendMessage(ctx, req.(*SendMessageRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Chat_AdvancePointer_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(AdvancePointerRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ChatServer).AdvancePointer(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/code.chat.v2.Chat/AdvancePointer", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ChatServer).AdvancePointer(ctx, req.(*AdvancePointerRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Chat_SetMuteState_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetMuteStateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ChatServer).SetMuteState(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/code.chat.v2.Chat/SetMuteState", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ChatServer).SetMuteState(ctx, req.(*SetMuteStateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Chat_SetSubscriptionState_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(SetSubscriptionStateRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ChatServer).SetSubscriptionState(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/code.chat.v2.Chat/SetSubscriptionState", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ChatServer).SetSubscriptionState(ctx, req.(*SetSubscriptionStateRequest)) + } + return interceptor(ctx, in, info, handler) +} + +// Chat_ServiceDesc is the grpc.ServiceDesc for Chat service. +// It's only intended for direct use with grpc.RegisterService, +// and not to be introspected or modified (even as a copy) +var Chat_ServiceDesc = grpc.ServiceDesc{ + ServiceName: "code.chat.v2.Chat", + HandlerType: (*ChatServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "GetChats", + Handler: _Chat_GetChats_Handler, + }, + { + MethodName: "GetMessages", + Handler: _Chat_GetMessages_Handler, + }, + { + MethodName: "SendMessage", + Handler: _Chat_SendMessage_Handler, + }, + { + MethodName: "AdvancePointer", + Handler: _Chat_AdvancePointer_Handler, + }, + { + MethodName: "SetMuteState", + Handler: _Chat_SetMuteState_Handler, + }, + { + MethodName: "SetSubscriptionState", + Handler: _Chat_SetSubscriptionState_Handler, + }, + }, + Streams: []grpc.StreamDesc{ + { + StreamName: "StreamChatEvents", + Handler: _Chat_StreamChatEvents_Handler, + ServerStreams: true, + ClientStreams: true, + }, + }, + Metadata: "chat/v2/chat_service.proto", +} diff --git a/proto/chat/v1/chat_service.proto b/proto/chat/v1/chat_service.proto index d306d08..e3d6b73 100644 --- a/proto/chat/v1/chat_service.proto +++ b/proto/chat/v1/chat_service.proto @@ -11,6 +11,7 @@ import "transaction/v2/transaction_service.proto"; import "google/protobuf/timestamp.proto"; import "validate/validate.proto"; +// Deprecated: Use the v2 service service Chat { // GetChats gets the set of chats for an owner account rpc GetChats(GetChatsRequest) returns (GetChatsResponse); diff --git a/proto/chat/v2/chat_service.proto b/proto/chat/v2/chat_service.proto new file mode 100644 index 0000000..6424f08 --- /dev/null +++ b/proto/chat/v2/chat_service.proto @@ -0,0 +1,503 @@ +syntax = "proto3"; + +package code.chat.v2; + +option go_package = "github.com/code-payments/code-protobuf-api/generated/go/chat/v2;chat"; +option java_package = "com.codeinc.gen.chat.v2"; +option objc_class_prefix = "CPBChatV2"; + +import "common/v1/model.proto"; +import "transaction/v2/transaction_service.proto"; +import "google/protobuf/timestamp.proto"; +import "validate/validate.proto"; + +service Chat { + // GetChats gets the set of chats for an owner account using a paged API + rpc GetChats(GetChatsRequest) returns (GetChatsResponse); + + // GetMessages gets the set of messages for a chat using a paged API + rpc GetMessages(GetMessagesRequest) returns (GetMessagesResponse); + + // StreamChatEvents streams chat events in real-time. This RPC also supports + // flushes to push initial chat state after stream open. + rpc StreamChatEvents(stream StreamChatEventsRequest) returns (stream StreamChatEventsResponse); + + // SendMessage sends a message to a chat + rpc SendMessage(SendMessageRequest) returns (SendMessageResponse); + + // AdvancePointer advances a pointer in chat history + rpc AdvancePointer(AdvancePointerRequest) returns (AdvancePointerResponse); + + // SetMuteState configures the mute state of a chat + rpc SetMuteState(SetMuteStateRequest) returns (SetMuteStateResponse); + + // SetSubscriptionState configures the susbscription state of a chat + rpc SetSubscriptionState(SetSubscriptionStateRequest) returns (SetSubscriptionStateResponse); +} + +message GetChatsRequest { + common.v1.SolanaAccountId owner = 1 [(validate.rules).message.required = true]; + + common.v1.Signature signature = 2 [(validate.rules).message.required = true]; + + uint32 page_size = 3 [(validate.rules).uint32.lte = 100]; + + Cursor cursor = 4; + + Direction direction = 5; + enum Direction { + ASC = 0; + DESC = 1; + } +} + +message GetChatsResponse { + Result result = 1; + enum Result { + OK = 0; + NOT_FOUND = 1; + } + + repeated ChatMetadata chats = 2 [(validate.rules).repeated = { + min_items: 0 + max_items: 100 + }]; +} + +message GetMessagesRequest { + ChatId chat_id = 1 [(validate.rules).message.required = true]; + + ChatMemberId member_id = 2; + + common.v1.SolanaAccountId owner = 3 [(validate.rules).message.required = true]; + + common.v1.Signature signature = 4 [(validate.rules).message.required = true]; + + uint32 page_size = 5 [(validate.rules).uint32.lte = 100]; + + Cursor cursor = 6; + + Direction direction = 7; + enum Direction { + ASC = 0; + DESC = 1; + } +} + +message GetMessagesResponse { + Result result = 1; + enum Result { + OK = 0; + NOT_FOUND = 1; + } + + repeated ChatMessage messages = 2 [(validate.rules).repeated = { + min_items: 0 + max_items: 100 + }]; +} + +message OpenChatEventStream { + ChatId chat_id = 1 [(validate.rules).message.required = true]; + + ChatMemberId member_id = 2 [(validate.rules).message.required = true]; + + common.v1.SolanaAccountId owner = 3 [(validate.rules).message.required = true]; + + common.v1.Signature signature = 4 [(validate.rules).message.required = true]; +} + +message ChatStreamEvent { + oneof type { + option (validate.required) = true; + + ChatMessage message = 1; + Pointer pointer = 2; + } +} + +message ChatStreamEventBatch { + repeated ChatStreamEvent events = 2 [(validate.rules).repeated = { + min_items: 1 + max_items: 1024 + }]; +} + +message StreamChatEventsRequest { + oneof type { + option (validate.required) = true; + + OpenChatEventStream open_stream = 1; + common.v1.ClientPong pong = 2; + } +} + +message StreamChatEventsResponse { + oneof type { + option (validate.required) = true; + + ChatStreamEventBatch events = 1; + common.v1.ServerPing ping = 2; + } +} + +message SendMessageRequest { + ChatId chat_id = 1 [(validate.rules).message.required = true]; + + ChatMemberId member_id = 2 [(validate.rules).message.required = true]; + + repeated Content content = 3 [(validate.rules).repeated = { + min_items: 1 + max_items: 1 + }]; + + common.v1.SolanaAccountId owner = 4 [(validate.rules).message.required = true]; + + common.v1.Signature signature = 5 [(validate.rules).message.required = true]; +} + +message SendMessageResponse { + Result result = 1; + enum Result { + OK = 0; + CHAT_NOT_FOUND = 1; + INVALID_CHAT_TYPE = 2; + INVALID_CONTENT_TYPE = 3; + } + + // The chat message that was sent, which includes server-side metadata like + // the generated message ID and official timestamp + ChatMessage message = 2; +} + +message AdvancePointerRequest { + ChatId chat_id = 1 [(validate.rules).message.required = true]; + + Pointer pointer = 2 [(validate.rules).message.required = true]; + + common.v1.SolanaAccountId owner = 3 [(validate.rules).message.required = true]; + + common.v1.Signature signature = 4 [(validate.rules).message.required = true]; +} + +message AdvancePointerResponse { + Result result = 1; + enum Result { + OK = 0; + CHAT_NOT_FOUND = 1; + MESSAGE_NOT_FOUND = 2; + } +} + +message SetMuteStateRequest { + ChatId chat_id = 1 [(validate.rules).message.required = true]; + + ChatMemberId member_id = 2 [(validate.rules).message.required = true]; + + bool is_muted = 3; + + common.v1.SolanaAccountId owner = 4 [(validate.rules).message.required = true]; + + common.v1.Signature signature = 5 [(validate.rules).message.required = true]; +} + +message SetMuteStateResponse { + Result result = 1; + enum Result { + OK = 0; + CHAT_NOT_FOUND = 1; + CANT_MUTE = 2; + } +} + +message SetSubscriptionStateRequest { + ChatId chat_id = 1 [(validate.rules).message.required = true]; + + ChatMemberId member_id = 2 [(validate.rules).message.required = true]; + + bool is_subscribed = 3; + + common.v1.SolanaAccountId owner = 4 [(validate.rules).message.required = true]; + + common.v1.Signature signature = 5 [(validate.rules).message.required = true]; +} + +message SetSubscriptionStateResponse { + Result result = 1; + enum Result { + OK = 0; + CHAT_NOT_FOUND = 1; + CANT_UNSUBSCRIBE = 2; + } +} + +message ChatId { + bytes value = 1 [(validate.rules).bytes = { + min_len: 32 + max_len: 32 + }]; +} + +message ChatMessageId { + // Guaranteed to be a time-based UUID. This should be used to construct a + // consistently ordered message history based on time. + bytes value = 1 [(validate.rules).bytes = { + min_len: 16 + max_len: 16 + }]; +} + +message ChatMemberId { + // Random UUID + bytes value = 1 [(validate.rules).bytes = { + min_len: 16 + max_len: 16 + }]; +} + +// todo: Support is_verified in a clean way +message ChatMetadata { + // Globally unique ID for this chat + ChatId chat_id = 1 [(validate.rules).message.required = true]; + + // The type of chat + Kind kind = 2 [(validate.rules).enum = { + not_in: [0] // UNKNOWN + }]; + enum Kind { + UNKNOWN = 0; + NOTIFICATION = 1; + TWO_WAY = 2; + // GROUP = 3; + } + + // The chat title, which will be localized by server when applicable + string title = 3 [(validate.rules).string = { + min_len: 1 + max_len: 1024 + }]; + + // The members in this chat + // + // For NOTIFICATION chats, this list has exactly 1 item + // For TWO_WAY chats, this list has exactly 2 items + // + // todo: If we support group chats, then we'll likely return the first page + // or a prioritized list. The remaining members would be fetched via + // a new RPC. + repeated ChatMember members = 4 [(validate.rules).repeated = { + min_items: 1 + max_items: 2 + }]; + + // Estimated number of unread messages in this chat + uint32 num_unread = 5; + + // Can the user mute this chat? + bool can_mute = 6; + + // Has the user muted this chat? + bool is_muted = 7; + + // Can the user unsubscribe from this chat? + bool can_unsubscribe = 8; + + // Is the user subscribed to this chat? + bool is_subscribed = 9; + + // Cursor value for this chat for reference in subsequent GetChatsRequest + Cursor cursor = 10; +} + +message ChatMessage { + // Globally unique ID for this message + ChatMessageId message_id = 1 [(validate.rules).message.required = true]; + + // The chat member that sent the message. For NOTIFICATION chats, this field + // is omitted since the chat has exactly 1 member. + ChatMemberId sender_id = 2; + + // Ordered message content. A message may have more than one piece of content. + repeated Content content = 3 [(validate.rules).repeated = { + min_items: 1 + max_items: 2 + }]; + + // Timestamp this message was generated at. This value is also encoded in + // any time-based UUID message IDs. + google.protobuf.Timestamp ts = 4 [(validate.rules).timestamp.required = true]; + + // Cursor value for this message for reference in a paged GetMessagesRequest + Cursor cursor = 5; +} + +message ChatMember { + // Globally unique ID for this chat member + ChatMemberId member_id = 1 [(validate.rules).message.required = true]; + + // Is this chat member yourself? This enables client to identify which member_id + // is themselves. + bool is_self = 2; + + // The chat member's identity if it has been revealed. + ChatMemberIdentity identity = 3; + + // Chat message state for this member. This list will have DELIVERED and READ + // pointers, if they exist. SENT pointers should be inferred by persistence + // on server. + repeated Pointer pointers = 4 [(validate.rules).repeated = { + min_items: 0 + max_items: 2 + }]; +} + +message ChatMemberIdentity { + // The external social platform linked to this chat member + Platform platform = 1 [(validate.rules).enum = { + in: [1] // TWITTER + }]; + enum Platform { + UNKNOWN = 0; + TWITTER = 1; + } + + // The chat member's username on the external social platform + string username = 2 [(validate.rules).string = { + min_len: 1 + max_len: 15 // Twitter limit + }]; + + // Reserved for a display name + reserved 3; +} + +// Pointer in a chat indicating a user's message state in a chat. +message Pointer { + Kind kind = 1 [(validate.rules).enum = { + not_in: [0] // UNKNOWN + }]; + enum Kind { + UNKNOWN = 0; + SENT = 1; // Always inferred by OK result in SendMessageResponse or message presence in a chat + DELIVERED = 2; + READ = 3; + } + + // Everything at or before this message ID is considered to have the state + // inferred by the type of pointer. + ChatMessageId value = 2 [(validate.rules).message.required = true]; + + // The chat member associated with this pointer state + ChatMemberId member_id = 3 [(validate.rules).message.required = true]; +} + +// Content for a chat message +message Content { + oneof type { + option (validate.required) = true; + + TextContent text = 1; + LocalizedContent localized = 2; + ExchangeDataContent exchange_data = 3; + NaclBoxEncryptedContent nacl_box = 4; + ThankYouContent thank_you = 5; + } +} + +// Raw text content +message TextContent { + string text = 1 [(validate.rules).string = { + min_len: 1 + max_len: 1024 + }]; +} + +// Text content that is either a localization key that should be translated on +// client, or a server-side translated piece of text. +message LocalizedContent { + string key_or_text = 1 [(validate.rules).string = { + min_len: 1 + max_len: 1024 + }]; +} + +// Exchange data content for movement of a value of Kin. +message ExchangeDataContent { + enum Verb { + UNKNOWN = 0; + GAVE = 1; + RECEIVED = 2; + WITHDREW = 3; + DEPOSITED = 4; + SENT = 5; + RETURNED = 6; + SPENT = 7; + PAID = 8; + PURCHASED = 9; + RECEIVED_TIP = 10; + SENT_TIP = 11; + } + + // Verb describing how the amount of Kin was exchanged + // + // Note: The current definition is not suitable outside a NOTIFICATION chat + // as not enough context is provided as to which member this verb is + // associated with. + Verb verb = 1 [(validate.rules).enum = { + not_in: [0] // UNKNOWN + }]; + + // An amount of Kin being exchanged + oneof exchange_data { + option (validate.required) = true; + + transaction.v2.ExchangeData exact = 2; + transaction.v2.ExchangeDataWithoutRate partial = 3; + } + + // An ID that can be referenced to the source of the exchange of Kin + oneof reference { + option (validate.required) = true; + + common.v1.IntentId intent = 4; + common.v1.Signature signature = 5; + } +} + +// Encrypted piece of content using NaCl box encryption +message NaclBoxEncryptedContent { + common.v1.SolanaAccountId peer_public_key = 1 [(validate.rules).message.required = true]; + + bytes nonce = 2 [(validate.rules).bytes = { + min_len: 24 + max_len: 24 + }]; + + bytes encrypted_payload = 3 [(validate.rules).bytes = { + min_len: 1 + max_len: 1024 + }]; +} + +message ThankYouContent { + // The tip intent that is being thanked. + common.v1.IntentId tip_intent = 1 [(validate.rules).message.required = true]; + + // Reserved for the thanker, which is only required if we support GROUP chats. + // Otherwise, it can be inferred from the sender in a TWO_WAY chat. + reserved 2; + + // Reserved for the thankee, which is only required if we support GROUP chats. + // Otherwise, it can be inferred from the sender in a TWO_WAY chat. + reserved 3; +} + +// Opaque cursor used across paged APIs. Underlying bytes may change as paging +// strategies evolve. Expected length value will vary based on the RPC being +// executed.package +message Cursor { + bytes value = 1 [(validate.rules).bytes = { + min_len: 16 + max_len: 32 + }]; +} From 2d14454ac6af438a1a3241dadfec3777c1a9bff4 Mon Sep 17 00:00:00 2001 From: Jeff Yanta Date: Wed, 5 Jun 2024 13:41:05 -0400 Subject: [PATCH 05/16] Add missing validation to GetMessagesRequest.member_id --- generated/go/chat/v2/chat_service.pb.go | 863 +++++++++--------- .../go/chat/v2/chat_service.pb.validate.go | 7 + proto/chat/v2/chat_service.proto | 2 +- 3 files changed, 440 insertions(+), 432 deletions(-) diff --git a/generated/go/chat/v2/chat_service.pb.go b/generated/go/chat/v2/chat_service.pb.go index 2fd51b6..a91e341 100644 --- a/generated/go/chat/v2/chat_service.pb.go +++ b/generated/go/chat/v2/chat_service.pb.go @@ -2922,165 +2922,195 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x64, 0x52, 0x05, 0x63, 0x68, 0x61, 0x74, 0x73, 0x22, 0x1f, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, - 0x44, 0x10, 0x01, 0x22, 0xd0, 0x03, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x44, 0x10, 0x01, 0x22, 0xdc, 0x03, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, - 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, + 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x49, 0x64, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x41, - 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, - 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, - 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, - 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x26, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, - 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xba, 0xe9, 0xc0, 0x03, 0x04, - 0x2a, 0x02, 0x18, 0x64, 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x2c, - 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, - 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x48, 0x0a, 0x09, - 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x2a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, - 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x1e, 0x0a, 0x09, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x53, 0x43, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, - 0x44, 0x45, 0x53, 0x43, 0x10, 0x01, 0x22, 0xbd, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, - 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, - 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x12, 0x43, 0x0a, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x0c, 0xba, - 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x64, 0x52, 0x08, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x73, 0x22, 0x1f, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, - 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, - 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x01, 0x22, 0x9d, 0x02, 0x0a, 0x13, 0x4f, 0x70, 0x65, 0x6e, 0x43, - 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x39, - 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, - 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, - 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, - 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x41, - 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, - 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, - 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, - 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x0f, 0x43, 0x68, 0x61, 0x74, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x35, 0x0a, 0x07, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x31, 0x0a, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x07, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, - 0xc0, 0x03, 0x01, 0x22, 0x5c, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x44, 0x0a, 0x06, 0x65, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x0d, 0xba, 0xe9, 0xc0, 0x03, - 0x08, 0x92, 0x01, 0x05, 0x08, 0x01, 0x10, 0x80, 0x08, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x73, 0x22, 0xa0, 0x01, 0x0a, 0x17, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x44, 0x0a, - 0x0b, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x12, 0x30, 0x0a, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x6e, 0x67, 0x48, 0x00, 0x52, - 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, - 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x99, 0x01, 0x0a, 0x18, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, - 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, - 0x42, 0x61, 0x74, 0x63, 0x68, 0x48, 0x00, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, - 0x30, 0x0a, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x04, 0x70, 0x69, 0x6e, + 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, + 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, + 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, + 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, + 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x12, 0x26, 0x0a, 0x09, 0x70, 0x61, 0x67, 0x65, 0x5f, 0x73, 0x69, 0x7a, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0d, 0x42, 0x09, 0xba, 0xe9, 0xc0, 0x03, 0x04, 0x2a, 0x02, 0x18, 0x64, + 0x52, 0x08, 0x70, 0x61, 0x67, 0x65, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, + 0x72, 0x73, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, + 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x48, 0x0a, 0x09, 0x64, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x44, 0x69, + 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x22, 0x1e, 0x0a, 0x09, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, + 0x07, 0x0a, 0x03, 0x41, 0x53, 0x43, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, + 0x10, 0x01, 0x22, 0xbd, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x06, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x43, 0x0a, 0x08, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, + 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, + 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x64, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x73, 0x22, 0x1f, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, + 0x4b, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, + 0x10, 0x01, 0x22, 0x9d, 0x02, 0x0a, 0x13, 0x4f, 0x70, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x74, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, + 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, + 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, + 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, + 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, + 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, + 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, + 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x0f, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x35, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x31, 0x0a, + 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, + 0x5c, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x44, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, + 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x0d, 0xba, 0xe9, 0xc0, 0x03, 0x08, 0x92, 0x01, 0x05, + 0x08, 0x01, 0x10, 0x80, 0x08, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xa0, 0x01, + 0x0a, 0x17, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x0b, 0x6f, 0x70, 0x65, + 0x6e, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x70, + 0x65, 0x6e, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, + 0x30, 0x0a, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, - 0x22, 0xdb, 0x02, 0x0a, 0x12, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, - 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, - 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, - 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, - 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x01, 0x52, 0x07, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, - 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xe3, - 0x01, 0x0a, 0x13, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x55, 0x0a, - 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, - 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, - 0x44, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x43, - 0x48, 0x41, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, - 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, - 0x50, 0x45, 0x10, 0x03, 0x22, 0x97, 0x02, 0x0a, 0x15, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, - 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, - 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, - 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x07, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x07, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, - 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x9a, - 0x01, 0x0a, 0x16, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x3b, + 0x22, 0x99, 0x01, 0x0a, 0x18, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, + 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, + 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x61, 0x74, 0x63, + 0x68, 0x48, 0x00, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x04, 0x70, + 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x50, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x42, 0x0d, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xdb, 0x02, 0x0a, + 0x12, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, + 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, + 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, + 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x01, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, + 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, + 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xe3, 0x01, 0x0a, 0x13, 0x53, + 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x40, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x55, 0x0a, 0x06, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x43, + 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x01, 0x12, + 0x15, 0x0a, 0x11, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x43, 0x48, 0x41, 0x54, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, + 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x03, + 0x22, 0x97, 0x02, 0x0a, 0x15, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, + 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, + 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, + 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0a, 0xba, + 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, + 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, + 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x9a, 0x01, 0x0a, 0x16, 0x41, + 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x3b, 0x0a, 0x06, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, + 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x01, + 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, + 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x22, 0xb8, 0x02, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x4d, + 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, + 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, + 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, + 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, + 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, + 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, + 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, + 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x33, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, - 0x4e, 0x44, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, - 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x22, 0xb8, 0x02, 0x0a, 0x13, - 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x4e, 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x4d, 0x55, 0x54, + 0x45, 0x10, 0x02, 0x22, 0xca, 0x02, 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, @@ -3089,293 +3119,264 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x41, - 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, - 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, - 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, - 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x4d, 0x75, - 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x41, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, - 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x22, 0x33, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, - 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, - 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x41, 0x4e, 0x54, - 0x5f, 0x4d, 0x55, 0x54, 0x45, 0x10, 0x02, 0x22, 0xca, 0x02, 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x53, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, - 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, - 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, - 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x73, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, - 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, - 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, - 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, - 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, - 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, - 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x22, 0xa5, 0x01, 0x0a, 0x1c, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x72, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x62, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, + 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x22, 0xa5, 0x01, 0x0a, 0x1c, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x22, 0x3a, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, - 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, - 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x55, - 0x4e, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x10, 0x02, 0x22, 0x2b, 0x0a, 0x06, - 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x20, - 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x32, 0x0a, 0x0d, 0x43, 0x68, 0x61, - 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, - 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x31, 0x0a, - 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, - 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0xf5, 0x03, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x65, 0x12, 0x49, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x31, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x3a, 0x0a, 0x06, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x12, + 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, + 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x55, 0x42, + 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x10, 0x02, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x68, 0x61, 0x74, + 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x20, 0x18, 0x20, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x32, 0x0a, 0x0d, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, + 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x31, 0x0a, 0x0c, 0x43, 0x68, 0x61, + 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, + 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xf5, 0x03, 0x0a, + 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, + 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, + 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, + 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x3f, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x2e, 0x4b, 0x69, 0x6e, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, + 0x02, 0x20, 0x00, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x22, 0x0a, 0x05, 0x74, 0x69, 0x74, + 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, + 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x40, 0x0a, + 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, + 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, + 0x01, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, + 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x19, + 0x0a, 0x08, 0x63, 0x61, 0x6e, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x07, 0x63, 0x61, 0x6e, 0x4d, 0x75, 0x74, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, + 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, + 0x75, 0x74, 0x65, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x6e, 0x5f, 0x75, 0x6e, 0x73, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x63, + 0x61, 0x6e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x23, 0x0a, + 0x0d, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, 0x09, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, + 0x65, 0x64, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, - 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x3f, 0x0a, 0x04, - 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, - 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x69, 0x6e, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, - 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x22, 0x0a, - 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, - 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, - 0x65, 0x12, 0x40, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, - 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x61, - 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x55, 0x6e, 0x72, 0x65, - 0x61, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x61, 0x6e, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x61, 0x6e, 0x4d, 0x75, 0x74, 0x65, 0x12, 0x19, 0x0a, - 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x6e, 0x5f, - 0x75, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0e, 0x63, 0x61, 0x6e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, - 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, - 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, - 0x72, 0x73, 0x6f, 0x72, 0x22, 0x32, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0b, 0x0a, 0x07, - 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x4e, 0x4f, 0x54, - 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x54, - 0x57, 0x4f, 0x5f, 0x57, 0x41, 0x59, 0x10, 0x02, 0x22, 0xb3, 0x02, 0x0a, 0x0b, 0x43, 0x68, 0x61, - 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x46, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, + 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, + 0x22, 0x32, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, + 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, + 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x4f, 0x5f, 0x57, + 0x41, 0x59, 0x10, 0x02, 0x22, 0xb3, 0x02, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x46, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, + 0x01, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x09, + 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, + 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x52, 0x08, 0x73, 0x65, 0x6e, + 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, + 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x02, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, + 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x02, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x06, + 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, + 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xe9, 0x01, 0x0a, 0x0a, 0x43, + 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, - 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, - 0x12, 0x37, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x52, - 0x08, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, - 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x02, 0x74, 0x73, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x02, 0x74, 0x73, - 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xe9, - 0x01, 0x0a, 0x0a, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x43, 0x0a, - 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, - 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x73, 0x65, 0x6c, 0x66, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x53, 0x65, 0x6c, 0x66, 0x12, 0x3c, 0x0a, 0x08, 0x69, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, - 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, - 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x08, 0x70, 0x6f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x02, - 0x52, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x22, 0xbc, 0x01, 0x0a, 0x12, 0x43, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, + 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x73, 0x65, 0x6c, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x06, 0x69, 0x73, 0x53, 0x65, 0x6c, 0x66, 0x12, 0x3c, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x69, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0c, + 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x02, 0x52, 0x08, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x22, 0xbc, 0x01, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x74, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x51, 0x0a, + 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x12, 0x51, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x0a, - 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x18, 0x01, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x27, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x72, 0x04, 0x10, - 0x01, 0x18, 0x0f, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x24, 0x0a, - 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, - 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x49, 0x54, 0x54, 0x45, - 0x52, 0x10, 0x01, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x81, 0x02, 0x0a, 0x07, 0x50, 0x6f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x2e, 0x4b, 0x69, 0x6e, 0x64, 0x42, - 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x6b, 0x69, 0x6e, - 0x64, 0x12, 0x3d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, - 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, - 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x49, 0x64, 0x22, 0x36, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0b, 0x0a, - 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, - 0x4e, 0x54, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, - 0x44, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, 0x03, 0x22, 0xd5, 0x02, - 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x74, 0x65, 0x78, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x48, 0x00, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3e, 0x0a, 0x09, 0x6c, 0x6f, - 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x6f, 0x63, - 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, - 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x0d, 0x65, 0x78, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x44, 0x61, 0x74, 0x61, 0x12, 0x42, 0x0a, 0x08, 0x6e, 0x61, 0x63, 0x6c, 0x5f, 0x62, 0x6f, 0x78, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, - 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, - 0x07, 0x6e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x12, 0x3c, 0x0a, 0x09, 0x74, 0x68, 0x61, 0x6e, - 0x6b, 0x5f, 0x79, 0x6f, 0x75, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x68, 0x61, 0x6e, 0x6b, - 0x59, 0x6f, 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x08, 0x74, 0x68, - 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, - 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x2f, 0x0a, 0x0b, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, - 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x40, 0x0a, 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, - 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x0b, 0x6b, 0x65, - 0x79, 0x5f, 0x6f, 0x72, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, - 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x09, 0x6b, - 0x65, 0x79, 0x4f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x22, 0xa4, 0x04, 0x0a, 0x13, 0x45, 0x78, 0x63, + 0x79, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x82, 0x01, 0x02, 0x18, 0x01, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x12, 0x27, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x0f, 0x52, + 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x24, 0x0a, 0x08, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, + 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x49, 0x54, 0x54, 0x45, 0x52, 0x10, 0x01, 0x4a, + 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x81, 0x02, 0x0a, 0x07, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x12, 0x3a, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, + 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x2e, 0x4b, 0x69, 0x6e, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x3d, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x09, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, + 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, + 0x64, 0x22, 0x36, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, + 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x01, + 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, 0x44, 0x10, 0x02, 0x12, + 0x08, 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, 0x03, 0x22, 0xd5, 0x02, 0x0a, 0x07, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3e, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, + 0x7a, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, + 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x12, 0x46, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, - 0x20, 0x00, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, 0x12, 0x39, 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, - 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, - 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x05, 0x65, 0x78, - 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, - 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x52, 0x61, - 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x32, 0x0a, - 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x48, 0x01, 0x52, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x12, 0x39, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, - 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xa4, 0x01, 0x0a, - 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, - 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x47, 0x41, 0x56, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, - 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x57, 0x49, - 0x54, 0x48, 0x44, 0x52, 0x45, 0x57, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, 0x4f, - 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, - 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x45, 0x44, 0x10, 0x06, 0x12, - 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, 0x4e, 0x54, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x41, - 0x49, 0x44, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x55, 0x52, 0x43, 0x48, 0x41, 0x53, 0x45, - 0x44, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x5f, - 0x54, 0x49, 0x50, 0x10, 0x0a, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x49, - 0x50, 0x10, 0x0b, 0x42, 0x16, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, - 0x64, 0x61, 0x74, 0x61, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x42, 0x12, 0x0a, 0x09, 0x72, - 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, - 0xcc, 0x01, 0x0a, 0x17, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, - 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x0f, 0x70, - 0x65, 0x65, 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, - 0x01, 0x52, 0x0d, 0x70, 0x65, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, - 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, - 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x18, 0x18, 0x18, 0x52, 0x05, 0x6e, 0x6f, - 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, - 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0c, - 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x10, 0x65, 0x6e, - 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x62, - 0x0a, 0x0f, 0x54, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x12, 0x43, 0x0a, 0x0a, 0x74, 0x69, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x42, - 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x74, 0x69, 0x70, - 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, - 0x10, 0x04, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, - 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x32, - 0x83, 0x05, 0x0a, 0x04, 0x43, 0x68, 0x61, 0x74, 0x12, 0x49, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x43, - 0x68, 0x61, 0x74, 0x73, 0x12, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x73, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x52, - 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, - 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, - 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x55, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, - 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, - 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x29, + 0x48, 0x00, 0x52, 0x0c, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x12, 0x42, 0x0a, 0x08, 0x6e, 0x61, 0x63, 0x6c, 0x5f, 0x62, 0x6f, 0x78, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, + 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x6e, 0x61, 0x63, + 0x6c, 0x42, 0x6f, 0x78, 0x12, 0x3c, 0x0a, 0x09, 0x74, 0x68, 0x61, 0x6e, 0x6b, 0x5f, 0x79, 0x6f, + 0x75, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x08, 0x74, 0x68, 0x61, 0x6e, 0x6b, 0x59, + 0x6f, 0x75, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, + 0x01, 0x22, 0x2f, 0x0a, 0x0b, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x12, 0x20, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, + 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x04, 0x74, 0x65, + 0x78, 0x74, 0x22, 0x40, 0x0a, 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x72, + 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, + 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x4f, 0x72, + 0x54, 0x65, 0x78, 0x74, 0x22, 0xa4, 0x04, 0x0a, 0x13, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x04, + 0x76, 0x65, 0x72, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x65, + 0x72, 0x62, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, + 0x76, 0x65, 0x72, 0x62, 0x12, 0x39, 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, + 0x48, 0x0a, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x52, 0x61, 0x74, 0x65, 0x48, 0x00, + 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x32, 0x0a, 0x06, 0x69, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x49, 0x64, 0x48, 0x01, 0x52, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, + 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x01, 0x52, 0x09, 0x73, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xa4, 0x01, 0x0a, 0x04, 0x56, 0x65, 0x72, + 0x62, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, + 0x0a, 0x04, 0x47, 0x41, 0x56, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x43, 0x45, + 0x49, 0x56, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, + 0x45, 0x57, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x45, + 0x44, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x05, 0x12, 0x0c, 0x0a, + 0x08, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x45, 0x44, 0x10, 0x06, 0x12, 0x09, 0x0a, 0x05, 0x53, + 0x50, 0x45, 0x4e, 0x54, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x41, 0x49, 0x44, 0x10, 0x08, + 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x55, 0x52, 0x43, 0x48, 0x41, 0x53, 0x45, 0x44, 0x10, 0x09, 0x12, + 0x10, 0x0a, 0x0c, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x5f, 0x54, 0x49, 0x50, 0x10, + 0x0a, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0b, 0x42, + 0x16, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, + 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x42, 0x12, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xcc, 0x01, 0x0a, 0x17, + 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x5f, + 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, + 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x70, + 0x65, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x05, + 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, + 0x03, 0x06, 0x7a, 0x04, 0x10, 0x18, 0x18, 0x18, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, + 0x39, 0x0a, 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x79, + 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, + 0x07, 0x7a, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x10, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, + 0x74, 0x65, 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x62, 0x0a, 0x0f, 0x54, 0x68, + 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, + 0x0a, 0x74, 0x69, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x74, 0x69, 0x70, 0x49, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x2b, + 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, + 0x10, 0x10, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x32, 0x83, 0x05, 0x0a, 0x04, + 0x43, 0x68, 0x61, 0x74, 0x12, 0x49, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, + 0x12, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, + 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x52, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x20, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, + 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, + 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, + 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x52, 0x0a, 0x0b, 0x53, 0x65, + 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, + 0x0a, 0x0e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0c, 0x53, + 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, + 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, - 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, - 0x65, 0x2d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, - 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2f, 0x76, - 0x32, 0x3b, 0x63, 0x68, 0x61, 0x74, 0xa2, 0x02, 0x09, 0x43, 0x50, 0x42, 0x43, 0x68, 0x61, 0x74, - 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x42, 0x6b, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x63, + 0x2e, 0x67, 0x65, 0x6e, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x5a, 0x44, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, + 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x62, 0x75, 0x66, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, + 0x65, 0x64, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2f, 0x76, 0x32, 0x3b, 0x63, 0x68, + 0x61, 0x74, 0xa2, 0x02, 0x09, 0x43, 0x50, 0x42, 0x43, 0x68, 0x61, 0x74, 0x56, 0x32, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/generated/go/chat/v2/chat_service.pb.validate.go b/generated/go/chat/v2/chat_service.pb.validate.go index cffb922..036aa3a 100644 --- a/generated/go/chat/v2/chat_service.pb.validate.go +++ b/generated/go/chat/v2/chat_service.pb.validate.go @@ -265,6 +265,13 @@ func (m *GetMessagesRequest) Validate() error { } } + if m.GetMemberId() == nil { + return GetMessagesRequestValidationError{ + field: "MemberId", + reason: "value is required", + } + } + if v, ok := interface{}(m.GetMemberId()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return GetMessagesRequestValidationError{ diff --git a/proto/chat/v2/chat_service.proto b/proto/chat/v2/chat_service.proto index 6424f08..77944ec 100644 --- a/proto/chat/v2/chat_service.proto +++ b/proto/chat/v2/chat_service.proto @@ -67,7 +67,7 @@ message GetChatsResponse { message GetMessagesRequest { ChatId chat_id = 1 [(validate.rules).message.required = true]; - ChatMemberId member_id = 2; + ChatMemberId member_id = 2 [(validate.rules).message.required = true]; common.v1.SolanaAccountId owner = 3 [(validate.rules).message.required = true]; From ca7587f92a73237b8173db4fb1ab25de87c335b8 Mon Sep 17 00:00:00 2001 From: Jeff Yanta Date: Tue, 11 Jun 2024 11:07:18 -0400 Subject: [PATCH 06/16] Add missing result codes --- generated/go/chat/v2/chat_service.pb.go | 1580 +++++++++-------- .../go/chat/v2/chat_service.pb.validate.go | 81 + proto/chat/v2/chat_service.proto | 40 +- 3 files changed, 981 insertions(+), 720 deletions(-) diff --git a/generated/go/chat/v2/chat_service.pb.go b/generated/go/chat/v2/chat_service.pb.go index a91e341..cf9ccf3 100644 --- a/generated/go/chat/v2/chat_service.pb.go +++ b/generated/go/chat/v2/chat_service.pb.go @@ -165,19 +165,25 @@ func (GetMessagesRequest_Direction) EnumDescriptor() ([]byte, []int) { type GetMessagesResponse_Result int32 const ( - GetMessagesResponse_OK GetMessagesResponse_Result = 0 - GetMessagesResponse_NOT_FOUND GetMessagesResponse_Result = 1 + GetMessagesResponse_OK GetMessagesResponse_Result = 0 + GetMessagesResponse_DENIED GetMessagesResponse_Result = 1 + GetMessagesResponse_CHAT_NOT_FOUND GetMessagesResponse_Result = 2 + GetMessagesResponse_MESSAGE_NOT_FOUND GetMessagesResponse_Result = 3 ) // Enum value maps for GetMessagesResponse_Result. var ( GetMessagesResponse_Result_name = map[int32]string{ 0: "OK", - 1: "NOT_FOUND", + 1: "DENIED", + 2: "CHAT_NOT_FOUND", + 3: "MESSAGE_NOT_FOUND", } GetMessagesResponse_Result_value = map[string]int32{ - "OK": 0, - "NOT_FOUND": 1, + "OK": 0, + "DENIED": 1, + "CHAT_NOT_FOUND": 2, + "MESSAGE_NOT_FOUND": 3, } ) @@ -208,28 +214,77 @@ func (GetMessagesResponse_Result) EnumDescriptor() ([]byte, []int) { return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{3, 0} } +type ChatStreamEventError_Code int32 + +const ( + ChatStreamEventError_DENIED ChatStreamEventError_Code = 0 + ChatStreamEventError_CHAT_NOT_FOUND ChatStreamEventError_Code = 1 +) + +// Enum value maps for ChatStreamEventError_Code. +var ( + ChatStreamEventError_Code_name = map[int32]string{ + 0: "DENIED", + 1: "CHAT_NOT_FOUND", + } + ChatStreamEventError_Code_value = map[string]int32{ + "DENIED": 0, + "CHAT_NOT_FOUND": 1, + } +) + +func (x ChatStreamEventError_Code) Enum() *ChatStreamEventError_Code { + p := new(ChatStreamEventError_Code) + *p = x + return p +} + +func (x ChatStreamEventError_Code) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ChatStreamEventError_Code) Descriptor() protoreflect.EnumDescriptor { + return file_chat_v2_chat_service_proto_enumTypes[4].Descriptor() +} + +func (ChatStreamEventError_Code) Type() protoreflect.EnumType { + return &file_chat_v2_chat_service_proto_enumTypes[4] +} + +func (x ChatStreamEventError_Code) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ChatStreamEventError_Code.Descriptor instead. +func (ChatStreamEventError_Code) EnumDescriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{7, 0} +} + type SendMessageResponse_Result int32 const ( SendMessageResponse_OK SendMessageResponse_Result = 0 - SendMessageResponse_CHAT_NOT_FOUND SendMessageResponse_Result = 1 - SendMessageResponse_INVALID_CHAT_TYPE SendMessageResponse_Result = 2 - SendMessageResponse_INVALID_CONTENT_TYPE SendMessageResponse_Result = 3 + SendMessageResponse_DENIED SendMessageResponse_Result = 1 + SendMessageResponse_CHAT_NOT_FOUND SendMessageResponse_Result = 2 + SendMessageResponse_INVALID_CHAT_TYPE SendMessageResponse_Result = 3 + SendMessageResponse_INVALID_CONTENT_TYPE SendMessageResponse_Result = 4 ) // Enum value maps for SendMessageResponse_Result. var ( SendMessageResponse_Result_name = map[int32]string{ 0: "OK", - 1: "CHAT_NOT_FOUND", - 2: "INVALID_CHAT_TYPE", - 3: "INVALID_CONTENT_TYPE", + 1: "DENIED", + 2: "CHAT_NOT_FOUND", + 3: "INVALID_CHAT_TYPE", + 4: "INVALID_CONTENT_TYPE", } SendMessageResponse_Result_value = map[string]int32{ "OK": 0, - "CHAT_NOT_FOUND": 1, - "INVALID_CHAT_TYPE": 2, - "INVALID_CONTENT_TYPE": 3, + "DENIED": 1, + "CHAT_NOT_FOUND": 2, + "INVALID_CHAT_TYPE": 3, + "INVALID_CONTENT_TYPE": 4, } ) @@ -244,11 +299,11 @@ func (x SendMessageResponse_Result) String() string { } func (SendMessageResponse_Result) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[4].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[5].Descriptor() } func (SendMessageResponse_Result) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[4] + return &file_chat_v2_chat_service_proto_enumTypes[5] } func (x SendMessageResponse_Result) Number() protoreflect.EnumNumber { @@ -257,28 +312,34 @@ func (x SendMessageResponse_Result) Number() protoreflect.EnumNumber { // Deprecated: Use SendMessageResponse_Result.Descriptor instead. func (SendMessageResponse_Result) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{10, 0} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{11, 0} } type AdvancePointerResponse_Result int32 const ( - AdvancePointerResponse_OK AdvancePointerResponse_Result = 0 - AdvancePointerResponse_CHAT_NOT_FOUND AdvancePointerResponse_Result = 1 - AdvancePointerResponse_MESSAGE_NOT_FOUND AdvancePointerResponse_Result = 2 + AdvancePointerResponse_OK AdvancePointerResponse_Result = 0 + AdvancePointerResponse_DENIED AdvancePointerResponse_Result = 1 + AdvancePointerResponse_CHAT_NOT_FOUND AdvancePointerResponse_Result = 2 + AdvancePointerResponse_MESSAGE_NOT_FOUND AdvancePointerResponse_Result = 3 + AdvancePointerResponse_INVALID_POINTER_TYPE AdvancePointerResponse_Result = 4 ) // Enum value maps for AdvancePointerResponse_Result. var ( AdvancePointerResponse_Result_name = map[int32]string{ 0: "OK", - 1: "CHAT_NOT_FOUND", - 2: "MESSAGE_NOT_FOUND", + 1: "DENIED", + 2: "CHAT_NOT_FOUND", + 3: "MESSAGE_NOT_FOUND", + 4: "INVALID_POINTER_TYPE", } AdvancePointerResponse_Result_value = map[string]int32{ - "OK": 0, - "CHAT_NOT_FOUND": 1, - "MESSAGE_NOT_FOUND": 2, + "OK": 0, + "DENIED": 1, + "CHAT_NOT_FOUND": 2, + "MESSAGE_NOT_FOUND": 3, + "INVALID_POINTER_TYPE": 4, } ) @@ -293,11 +354,11 @@ func (x AdvancePointerResponse_Result) String() string { } func (AdvancePointerResponse_Result) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[5].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[6].Descriptor() } func (AdvancePointerResponse_Result) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[5] + return &file_chat_v2_chat_service_proto_enumTypes[6] } func (x AdvancePointerResponse_Result) Number() protoreflect.EnumNumber { @@ -306,28 +367,31 @@ func (x AdvancePointerResponse_Result) Number() protoreflect.EnumNumber { // Deprecated: Use AdvancePointerResponse_Result.Descriptor instead. func (AdvancePointerResponse_Result) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{12, 0} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{13, 0} } type SetMuteStateResponse_Result int32 const ( SetMuteStateResponse_OK SetMuteStateResponse_Result = 0 - SetMuteStateResponse_CHAT_NOT_FOUND SetMuteStateResponse_Result = 1 - SetMuteStateResponse_CANT_MUTE SetMuteStateResponse_Result = 2 + SetMuteStateResponse_DENIED SetMuteStateResponse_Result = 1 + SetMuteStateResponse_CHAT_NOT_FOUND SetMuteStateResponse_Result = 2 + SetMuteStateResponse_CANT_MUTE SetMuteStateResponse_Result = 3 ) // Enum value maps for SetMuteStateResponse_Result. var ( SetMuteStateResponse_Result_name = map[int32]string{ 0: "OK", - 1: "CHAT_NOT_FOUND", - 2: "CANT_MUTE", + 1: "DENIED", + 2: "CHAT_NOT_FOUND", + 3: "CANT_MUTE", } SetMuteStateResponse_Result_value = map[string]int32{ "OK": 0, - "CHAT_NOT_FOUND": 1, - "CANT_MUTE": 2, + "DENIED": 1, + "CHAT_NOT_FOUND": 2, + "CANT_MUTE": 3, } ) @@ -342,11 +406,11 @@ func (x SetMuteStateResponse_Result) String() string { } func (SetMuteStateResponse_Result) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[6].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[7].Descriptor() } func (SetMuteStateResponse_Result) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[6] + return &file_chat_v2_chat_service_proto_enumTypes[7] } func (x SetMuteStateResponse_Result) Number() protoreflect.EnumNumber { @@ -355,28 +419,31 @@ func (x SetMuteStateResponse_Result) Number() protoreflect.EnumNumber { // Deprecated: Use SetMuteStateResponse_Result.Descriptor instead. func (SetMuteStateResponse_Result) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{14, 0} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{15, 0} } type SetSubscriptionStateResponse_Result int32 const ( SetSubscriptionStateResponse_OK SetSubscriptionStateResponse_Result = 0 - SetSubscriptionStateResponse_CHAT_NOT_FOUND SetSubscriptionStateResponse_Result = 1 - SetSubscriptionStateResponse_CANT_UNSUBSCRIBE SetSubscriptionStateResponse_Result = 2 + SetSubscriptionStateResponse_DENIED SetSubscriptionStateResponse_Result = 1 + SetSubscriptionStateResponse_CHAT_NOT_FOUND SetSubscriptionStateResponse_Result = 2 + SetSubscriptionStateResponse_CANT_UNSUBSCRIBE SetSubscriptionStateResponse_Result = 3 ) // Enum value maps for SetSubscriptionStateResponse_Result. var ( SetSubscriptionStateResponse_Result_name = map[int32]string{ 0: "OK", - 1: "CHAT_NOT_FOUND", - 2: "CANT_UNSUBSCRIBE", + 1: "DENIED", + 2: "CHAT_NOT_FOUND", + 3: "CANT_UNSUBSCRIBE", } SetSubscriptionStateResponse_Result_value = map[string]int32{ "OK": 0, - "CHAT_NOT_FOUND": 1, - "CANT_UNSUBSCRIBE": 2, + "DENIED": 1, + "CHAT_NOT_FOUND": 2, + "CANT_UNSUBSCRIBE": 3, } ) @@ -391,11 +458,11 @@ func (x SetSubscriptionStateResponse_Result) String() string { } func (SetSubscriptionStateResponse_Result) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[7].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[8].Descriptor() } func (SetSubscriptionStateResponse_Result) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[7] + return &file_chat_v2_chat_service_proto_enumTypes[8] } func (x SetSubscriptionStateResponse_Result) Number() protoreflect.EnumNumber { @@ -404,7 +471,7 @@ func (x SetSubscriptionStateResponse_Result) Number() protoreflect.EnumNumber { // Deprecated: Use SetSubscriptionStateResponse_Result.Descriptor instead. func (SetSubscriptionStateResponse_Result) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{16, 0} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{17, 0} } type ChatMetadata_Kind int32 @@ -440,11 +507,11 @@ func (x ChatMetadata_Kind) String() string { } func (ChatMetadata_Kind) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[8].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[9].Descriptor() } func (ChatMetadata_Kind) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[8] + return &file_chat_v2_chat_service_proto_enumTypes[9] } func (x ChatMetadata_Kind) Number() protoreflect.EnumNumber { @@ -453,7 +520,7 @@ func (x ChatMetadata_Kind) Number() protoreflect.EnumNumber { // Deprecated: Use ChatMetadata_Kind.Descriptor instead. func (ChatMetadata_Kind) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{20, 0} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{21, 0} } type ChatMemberIdentity_Platform int32 @@ -486,11 +553,11 @@ func (x ChatMemberIdentity_Platform) String() string { } func (ChatMemberIdentity_Platform) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[9].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[10].Descriptor() } func (ChatMemberIdentity_Platform) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[9] + return &file_chat_v2_chat_service_proto_enumTypes[10] } func (x ChatMemberIdentity_Platform) Number() protoreflect.EnumNumber { @@ -499,7 +566,7 @@ func (x ChatMemberIdentity_Platform) Number() protoreflect.EnumNumber { // Deprecated: Use ChatMemberIdentity_Platform.Descriptor instead. func (ChatMemberIdentity_Platform) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{23, 0} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{24, 0} } type Pointer_Kind int32 @@ -538,11 +605,11 @@ func (x Pointer_Kind) String() string { } func (Pointer_Kind) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[10].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[11].Descriptor() } func (Pointer_Kind) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[10] + return &file_chat_v2_chat_service_proto_enumTypes[11] } func (x Pointer_Kind) Number() protoreflect.EnumNumber { @@ -551,7 +618,7 @@ func (x Pointer_Kind) Number() protoreflect.EnumNumber { // Deprecated: Use Pointer_Kind.Descriptor instead. func (Pointer_Kind) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{24, 0} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{25, 0} } type ExchangeDataContent_Verb int32 @@ -614,11 +681,11 @@ func (x ExchangeDataContent_Verb) String() string { } func (ExchangeDataContent_Verb) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[11].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[12].Descriptor() } func (ExchangeDataContent_Verb) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[11] + return &file_chat_v2_chat_service_proto_enumTypes[12] } func (x ExchangeDataContent_Verb) Number() protoreflect.EnumNumber { @@ -627,7 +694,7 @@ func (x ExchangeDataContent_Verb) Number() protoreflect.EnumNumber { // Deprecated: Use ExchangeDataContent_Verb.Descriptor instead. func (ExchangeDataContent_Verb) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{28, 0} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{29, 0} } type GetChatsRequest struct { @@ -1113,6 +1180,53 @@ func (x *ChatStreamEventBatch) GetEvents() []*ChatStreamEvent { return nil } +type ChatStreamEventError struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Code ChatStreamEventError_Code `protobuf:"varint,1,opt,name=code,proto3,enum=code.chat.v2.ChatStreamEventError_Code" json:"code,omitempty"` +} + +func (x *ChatStreamEventError) Reset() { + *x = ChatStreamEventError{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ChatStreamEventError) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatStreamEventError) ProtoMessage() {} + +func (x *ChatStreamEventError) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[7] + 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 ChatStreamEventError.ProtoReflect.Descriptor instead. +func (*ChatStreamEventError) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{7} +} + +func (x *ChatStreamEventError) GetCode() ChatStreamEventError_Code { + if x != nil { + return x.Code + } + return ChatStreamEventError_DENIED +} + type StreamChatEventsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1128,7 +1242,7 @@ type StreamChatEventsRequest struct { func (x *StreamChatEventsRequest) Reset() { *x = StreamChatEventsRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[7] + mi := &file_chat_v2_chat_service_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1141,7 +1255,7 @@ func (x *StreamChatEventsRequest) String() string { func (*StreamChatEventsRequest) ProtoMessage() {} func (x *StreamChatEventsRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[7] + mi := &file_chat_v2_chat_service_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1154,7 +1268,7 @@ func (x *StreamChatEventsRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use StreamChatEventsRequest.ProtoReflect.Descriptor instead. func (*StreamChatEventsRequest) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{7} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{8} } func (m *StreamChatEventsRequest) GetType() isStreamChatEventsRequest_Type { @@ -1203,13 +1317,14 @@ type StreamChatEventsResponse struct { // // *StreamChatEventsResponse_Events // *StreamChatEventsResponse_Ping + // *StreamChatEventsResponse_Error Type isStreamChatEventsResponse_Type `protobuf_oneof:"type"` } func (x *StreamChatEventsResponse) Reset() { *x = StreamChatEventsResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[8] + mi := &file_chat_v2_chat_service_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1222,7 +1337,7 @@ func (x *StreamChatEventsResponse) String() string { func (*StreamChatEventsResponse) ProtoMessage() {} func (x *StreamChatEventsResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[8] + mi := &file_chat_v2_chat_service_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1235,7 +1350,7 @@ func (x *StreamChatEventsResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use StreamChatEventsResponse.ProtoReflect.Descriptor instead. func (*StreamChatEventsResponse) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{8} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{9} } func (m *StreamChatEventsResponse) GetType() isStreamChatEventsResponse_Type { @@ -1259,6 +1374,13 @@ func (x *StreamChatEventsResponse) GetPing() *v1.ServerPing { return nil } +func (x *StreamChatEventsResponse) GetError() *ChatStreamEventError { + if x, ok := x.GetType().(*StreamChatEventsResponse_Error); ok { + return x.Error + } + return nil +} + type isStreamChatEventsResponse_Type interface { isStreamChatEventsResponse_Type() } @@ -1271,10 +1393,16 @@ type StreamChatEventsResponse_Ping struct { Ping *v1.ServerPing `protobuf:"bytes,2,opt,name=ping,proto3,oneof"` } +type StreamChatEventsResponse_Error struct { + Error *ChatStreamEventError `protobuf:"bytes,3,opt,name=error,proto3,oneof"` +} + func (*StreamChatEventsResponse_Events) isStreamChatEventsResponse_Type() {} func (*StreamChatEventsResponse_Ping) isStreamChatEventsResponse_Type() {} +func (*StreamChatEventsResponse_Error) isStreamChatEventsResponse_Type() {} + type SendMessageRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1290,7 +1418,7 @@ type SendMessageRequest struct { func (x *SendMessageRequest) Reset() { *x = SendMessageRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[9] + mi := &file_chat_v2_chat_service_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1303,7 +1431,7 @@ func (x *SendMessageRequest) String() string { func (*SendMessageRequest) ProtoMessage() {} func (x *SendMessageRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[9] + mi := &file_chat_v2_chat_service_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1316,7 +1444,7 @@ func (x *SendMessageRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SendMessageRequest.ProtoReflect.Descriptor instead. func (*SendMessageRequest) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{9} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{10} } func (x *SendMessageRequest) GetChatId() *ChatId { @@ -1368,7 +1496,7 @@ type SendMessageResponse struct { func (x *SendMessageResponse) Reset() { *x = SendMessageResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[10] + mi := &file_chat_v2_chat_service_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1381,7 +1509,7 @@ func (x *SendMessageResponse) String() string { func (*SendMessageResponse) ProtoMessage() {} func (x *SendMessageResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[10] + mi := &file_chat_v2_chat_service_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1394,7 +1522,7 @@ func (x *SendMessageResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SendMessageResponse.ProtoReflect.Descriptor instead. func (*SendMessageResponse) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{10} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{11} } func (x *SendMessageResponse) GetResult() SendMessageResponse_Result { @@ -1425,7 +1553,7 @@ type AdvancePointerRequest struct { func (x *AdvancePointerRequest) Reset() { *x = AdvancePointerRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[11] + mi := &file_chat_v2_chat_service_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1438,7 +1566,7 @@ func (x *AdvancePointerRequest) String() string { func (*AdvancePointerRequest) ProtoMessage() {} func (x *AdvancePointerRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[11] + mi := &file_chat_v2_chat_service_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1451,7 +1579,7 @@ func (x *AdvancePointerRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AdvancePointerRequest.ProtoReflect.Descriptor instead. func (*AdvancePointerRequest) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{11} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{12} } func (x *AdvancePointerRequest) GetChatId() *ChatId { @@ -1493,7 +1621,7 @@ type AdvancePointerResponse struct { func (x *AdvancePointerResponse) Reset() { *x = AdvancePointerResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[12] + mi := &file_chat_v2_chat_service_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1506,7 +1634,7 @@ func (x *AdvancePointerResponse) String() string { func (*AdvancePointerResponse) ProtoMessage() {} func (x *AdvancePointerResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[12] + mi := &file_chat_v2_chat_service_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1519,7 +1647,7 @@ func (x *AdvancePointerResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use AdvancePointerResponse.ProtoReflect.Descriptor instead. func (*AdvancePointerResponse) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{12} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{13} } func (x *AdvancePointerResponse) GetResult() AdvancePointerResponse_Result { @@ -1544,7 +1672,7 @@ type SetMuteStateRequest struct { func (x *SetMuteStateRequest) Reset() { *x = SetMuteStateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[13] + mi := &file_chat_v2_chat_service_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1557,7 +1685,7 @@ func (x *SetMuteStateRequest) String() string { func (*SetMuteStateRequest) ProtoMessage() {} func (x *SetMuteStateRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[13] + mi := &file_chat_v2_chat_service_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1570,7 +1698,7 @@ func (x *SetMuteStateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetMuteStateRequest.ProtoReflect.Descriptor instead. func (*SetMuteStateRequest) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{13} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{14} } func (x *SetMuteStateRequest) GetChatId() *ChatId { @@ -1619,7 +1747,7 @@ type SetMuteStateResponse struct { func (x *SetMuteStateResponse) Reset() { *x = SetMuteStateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[14] + mi := &file_chat_v2_chat_service_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1632,7 +1760,7 @@ func (x *SetMuteStateResponse) String() string { func (*SetMuteStateResponse) ProtoMessage() {} func (x *SetMuteStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[14] + mi := &file_chat_v2_chat_service_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1645,7 +1773,7 @@ func (x *SetMuteStateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SetMuteStateResponse.ProtoReflect.Descriptor instead. func (*SetMuteStateResponse) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{14} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{15} } func (x *SetMuteStateResponse) GetResult() SetMuteStateResponse_Result { @@ -1670,7 +1798,7 @@ type SetSubscriptionStateRequest struct { func (x *SetSubscriptionStateRequest) Reset() { *x = SetSubscriptionStateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[15] + mi := &file_chat_v2_chat_service_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1683,7 +1811,7 @@ func (x *SetSubscriptionStateRequest) String() string { func (*SetSubscriptionStateRequest) ProtoMessage() {} func (x *SetSubscriptionStateRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[15] + mi := &file_chat_v2_chat_service_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1696,7 +1824,7 @@ func (x *SetSubscriptionStateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetSubscriptionStateRequest.ProtoReflect.Descriptor instead. func (*SetSubscriptionStateRequest) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{15} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{16} } func (x *SetSubscriptionStateRequest) GetChatId() *ChatId { @@ -1745,7 +1873,7 @@ type SetSubscriptionStateResponse struct { func (x *SetSubscriptionStateResponse) Reset() { *x = SetSubscriptionStateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[16] + mi := &file_chat_v2_chat_service_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1758,7 +1886,7 @@ func (x *SetSubscriptionStateResponse) String() string { func (*SetSubscriptionStateResponse) ProtoMessage() {} func (x *SetSubscriptionStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[16] + mi := &file_chat_v2_chat_service_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1771,7 +1899,7 @@ func (x *SetSubscriptionStateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SetSubscriptionStateResponse.ProtoReflect.Descriptor instead. func (*SetSubscriptionStateResponse) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{16} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{17} } func (x *SetSubscriptionStateResponse) GetResult() SetSubscriptionStateResponse_Result { @@ -1792,7 +1920,7 @@ type ChatId struct { func (x *ChatId) Reset() { *x = ChatId{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[17] + mi := &file_chat_v2_chat_service_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1805,7 +1933,7 @@ func (x *ChatId) String() string { func (*ChatId) ProtoMessage() {} func (x *ChatId) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[17] + mi := &file_chat_v2_chat_service_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1818,7 +1946,7 @@ func (x *ChatId) ProtoReflect() protoreflect.Message { // Deprecated: Use ChatId.ProtoReflect.Descriptor instead. func (*ChatId) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{17} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{18} } func (x *ChatId) GetValue() []byte { @@ -1841,7 +1969,7 @@ type ChatMessageId struct { func (x *ChatMessageId) Reset() { *x = ChatMessageId{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[18] + mi := &file_chat_v2_chat_service_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1854,7 +1982,7 @@ func (x *ChatMessageId) String() string { func (*ChatMessageId) ProtoMessage() {} func (x *ChatMessageId) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[18] + mi := &file_chat_v2_chat_service_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1867,7 +1995,7 @@ func (x *ChatMessageId) ProtoReflect() protoreflect.Message { // Deprecated: Use ChatMessageId.ProtoReflect.Descriptor instead. func (*ChatMessageId) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{18} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{19} } func (x *ChatMessageId) GetValue() []byte { @@ -1889,7 +2017,7 @@ type ChatMemberId struct { func (x *ChatMemberId) Reset() { *x = ChatMemberId{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[19] + mi := &file_chat_v2_chat_service_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1902,7 +2030,7 @@ func (x *ChatMemberId) String() string { func (*ChatMemberId) ProtoMessage() {} func (x *ChatMemberId) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[19] + mi := &file_chat_v2_chat_service_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1915,7 +2043,7 @@ func (x *ChatMemberId) ProtoReflect() protoreflect.Message { // Deprecated: Use ChatMemberId.ProtoReflect.Descriptor instead. func (*ChatMemberId) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{19} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{20} } func (x *ChatMemberId) GetValue() []byte { @@ -1964,7 +2092,7 @@ type ChatMetadata struct { func (x *ChatMetadata) Reset() { *x = ChatMetadata{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[20] + mi := &file_chat_v2_chat_service_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1977,7 +2105,7 @@ func (x *ChatMetadata) String() string { func (*ChatMetadata) ProtoMessage() {} func (x *ChatMetadata) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[20] + mi := &file_chat_v2_chat_service_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1990,7 +2118,7 @@ func (x *ChatMetadata) ProtoReflect() protoreflect.Message { // Deprecated: Use ChatMetadata.ProtoReflect.Descriptor instead. func (*ChatMetadata) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{20} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{21} } func (x *ChatMetadata) GetChatId() *ChatId { @@ -2085,7 +2213,7 @@ type ChatMessage struct { func (x *ChatMessage) Reset() { *x = ChatMessage{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[21] + mi := &file_chat_v2_chat_service_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2098,7 +2226,7 @@ func (x *ChatMessage) String() string { func (*ChatMessage) ProtoMessage() {} func (x *ChatMessage) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[21] + mi := &file_chat_v2_chat_service_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2111,7 +2239,7 @@ func (x *ChatMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use ChatMessage.ProtoReflect.Descriptor instead. func (*ChatMessage) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{21} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{22} } func (x *ChatMessage) GetMessageId() *ChatMessageId { @@ -2170,7 +2298,7 @@ type ChatMember struct { func (x *ChatMember) Reset() { *x = ChatMember{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[22] + mi := &file_chat_v2_chat_service_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2183,7 +2311,7 @@ func (x *ChatMember) String() string { func (*ChatMember) ProtoMessage() {} func (x *ChatMember) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[22] + mi := &file_chat_v2_chat_service_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2196,7 +2324,7 @@ func (x *ChatMember) ProtoReflect() protoreflect.Message { // Deprecated: Use ChatMember.ProtoReflect.Descriptor instead. func (*ChatMember) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{22} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{23} } func (x *ChatMember) GetMemberId() *ChatMemberId { @@ -2241,7 +2369,7 @@ type ChatMemberIdentity struct { func (x *ChatMemberIdentity) Reset() { *x = ChatMemberIdentity{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[23] + mi := &file_chat_v2_chat_service_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2254,7 +2382,7 @@ func (x *ChatMemberIdentity) String() string { func (*ChatMemberIdentity) ProtoMessage() {} func (x *ChatMemberIdentity) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[23] + mi := &file_chat_v2_chat_service_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2267,7 +2395,7 @@ func (x *ChatMemberIdentity) ProtoReflect() protoreflect.Message { // Deprecated: Use ChatMemberIdentity.ProtoReflect.Descriptor instead. func (*ChatMemberIdentity) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{23} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{24} } func (x *ChatMemberIdentity) GetPlatform() ChatMemberIdentity_Platform { @@ -2301,7 +2429,7 @@ type Pointer struct { func (x *Pointer) Reset() { *x = Pointer{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[24] + mi := &file_chat_v2_chat_service_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2314,7 +2442,7 @@ func (x *Pointer) String() string { func (*Pointer) ProtoMessage() {} func (x *Pointer) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[24] + mi := &file_chat_v2_chat_service_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2327,7 +2455,7 @@ func (x *Pointer) ProtoReflect() protoreflect.Message { // Deprecated: Use Pointer.ProtoReflect.Descriptor instead. func (*Pointer) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{24} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{25} } func (x *Pointer) GetKind() Pointer_Kind { @@ -2370,7 +2498,7 @@ type Content struct { func (x *Content) Reset() { *x = Content{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[25] + mi := &file_chat_v2_chat_service_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2383,7 +2511,7 @@ func (x *Content) String() string { func (*Content) ProtoMessage() {} func (x *Content) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[25] + mi := &file_chat_v2_chat_service_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2396,7 +2524,7 @@ func (x *Content) ProtoReflect() protoreflect.Message { // Deprecated: Use Content.ProtoReflect.Descriptor instead. func (*Content) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{25} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{26} } func (m *Content) GetType() isContent_Type { @@ -2487,7 +2615,7 @@ type TextContent struct { func (x *TextContent) Reset() { *x = TextContent{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[26] + mi := &file_chat_v2_chat_service_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2500,7 +2628,7 @@ func (x *TextContent) String() string { func (*TextContent) ProtoMessage() {} func (x *TextContent) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[26] + mi := &file_chat_v2_chat_service_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2513,7 +2641,7 @@ func (x *TextContent) ProtoReflect() protoreflect.Message { // Deprecated: Use TextContent.ProtoReflect.Descriptor instead. func (*TextContent) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{26} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{27} } func (x *TextContent) GetText() string { @@ -2536,7 +2664,7 @@ type LocalizedContent struct { func (x *LocalizedContent) Reset() { *x = LocalizedContent{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[27] + mi := &file_chat_v2_chat_service_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2549,7 +2677,7 @@ func (x *LocalizedContent) String() string { func (*LocalizedContent) ProtoMessage() {} func (x *LocalizedContent) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[27] + mi := &file_chat_v2_chat_service_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2562,7 +2690,7 @@ func (x *LocalizedContent) ProtoReflect() protoreflect.Message { // Deprecated: Use LocalizedContent.ProtoReflect.Descriptor instead. func (*LocalizedContent) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{27} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{28} } func (x *LocalizedContent) GetKeyOrText() string { @@ -2604,7 +2732,7 @@ type ExchangeDataContent struct { func (x *ExchangeDataContent) Reset() { *x = ExchangeDataContent{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[28] + mi := &file_chat_v2_chat_service_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2617,7 +2745,7 @@ func (x *ExchangeDataContent) String() string { func (*ExchangeDataContent) ProtoMessage() {} func (x *ExchangeDataContent) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[28] + mi := &file_chat_v2_chat_service_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2630,7 +2758,7 @@ func (x *ExchangeDataContent) ProtoReflect() protoreflect.Message { // Deprecated: Use ExchangeDataContent.ProtoReflect.Descriptor instead. func (*ExchangeDataContent) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{28} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{29} } func (x *ExchangeDataContent) GetVerb() ExchangeDataContent_Verb { @@ -2728,7 +2856,7 @@ type NaclBoxEncryptedContent struct { func (x *NaclBoxEncryptedContent) Reset() { *x = NaclBoxEncryptedContent{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[29] + mi := &file_chat_v2_chat_service_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2741,7 +2869,7 @@ func (x *NaclBoxEncryptedContent) String() string { func (*NaclBoxEncryptedContent) ProtoMessage() {} func (x *NaclBoxEncryptedContent) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[29] + mi := &file_chat_v2_chat_service_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2754,7 +2882,7 @@ func (x *NaclBoxEncryptedContent) ProtoReflect() protoreflect.Message { // Deprecated: Use NaclBoxEncryptedContent.ProtoReflect.Descriptor instead. func (*NaclBoxEncryptedContent) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{29} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{30} } func (x *NaclBoxEncryptedContent) GetPeerPublicKey() *v1.SolanaAccountId { @@ -2790,7 +2918,7 @@ type ThankYouContent struct { func (x *ThankYouContent) Reset() { *x = ThankYouContent{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[30] + mi := &file_chat_v2_chat_service_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2803,7 +2931,7 @@ func (x *ThankYouContent) String() string { func (*ThankYouContent) ProtoMessage() {} func (x *ThankYouContent) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[30] + mi := &file_chat_v2_chat_service_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2816,7 +2944,7 @@ func (x *ThankYouContent) ProtoReflect() protoreflect.Message { // Deprecated: Use ThankYouContent.ProtoReflect.Descriptor instead. func (*ThankYouContent) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{30} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{31} } func (x *ThankYouContent) GetTipIntent() *v1.IntentId { @@ -2840,7 +2968,7 @@ type Cursor struct { func (x *Cursor) Reset() { *x = Cursor{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[31] + mi := &file_chat_v2_chat_service_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2853,7 +2981,7 @@ func (x *Cursor) String() string { func (*Cursor) ProtoMessage() {} func (x *Cursor) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[31] + mi := &file_chat_v2_chat_service_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2866,7 +2994,7 @@ func (x *Cursor) ProtoReflect() protoreflect.Message { // Deprecated: Use Cursor.ProtoReflect.Descriptor instead. func (*Cursor) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{31} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{32} } func (x *Cursor) GetValue() []byte { @@ -2952,7 +3080,7 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x1e, 0x0a, 0x09, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x07, 0x0a, 0x03, 0x41, 0x53, 0x43, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x44, 0x45, 0x53, 0x43, - 0x10, 0x01, 0x22, 0xbd, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x10, 0x01, 0x22, 0xe5, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, @@ -2962,107 +3090,21 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x64, 0x52, 0x08, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x73, 0x22, 0x1f, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, - 0x4b, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, - 0x10, 0x01, 0x22, 0x9d, 0x02, 0x0a, 0x13, 0x4f, 0x70, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x74, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, - 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, - 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, - 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, - 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, - 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, - 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, - 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, - 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, - 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x0f, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x35, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x31, 0x0a, - 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, - 0x5c, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, 0x44, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x0d, 0xba, 0xe9, 0xc0, 0x03, 0x08, 0x92, 0x01, 0x05, - 0x08, 0x01, 0x10, 0x80, 0x08, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0xa0, 0x01, - 0x0a, 0x17, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x44, 0x0a, 0x0b, 0x6f, 0x70, 0x65, - 0x6e, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x70, - 0x65, 0x6e, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x70, 0x65, 0x6e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x12, - 0x30, 0x0a, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x43, - 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x04, 0x70, 0x6f, 0x6e, - 0x67, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, - 0x22, 0x99, 0x01, 0x0a, 0x18, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3c, 0x0a, - 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, - 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x61, 0x74, 0x63, - 0x68, 0x48, 0x00, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x30, 0x0a, 0x04, 0x70, - 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x50, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x42, 0x0d, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xdb, 0x02, 0x0a, - 0x12, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, - 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, - 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, - 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, - 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x01, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, - 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, - 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xe3, 0x01, 0x0a, 0x13, 0x53, - 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x40, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x55, 0x0a, 0x06, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x43, - 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x01, 0x12, - 0x15, 0x0a, 0x11, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x43, 0x48, 0x41, 0x54, 0x5f, - 0x54, 0x59, 0x50, 0x45, 0x10, 0x02, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, - 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x03, - 0x22, 0x97, 0x02, 0x0a, 0x15, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, - 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, - 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, - 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0a, 0xba, - 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x73, 0x22, 0x47, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, + 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, + 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, + 0x44, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x4e, + 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x03, 0x22, 0x9d, 0x02, 0x0a, 0x13, 0x4f, + 0x70, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, + 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, + 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x49, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, @@ -3070,313 +3112,418 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, - 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x9a, 0x01, 0x0a, 0x16, 0x41, - 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x3b, 0x0a, 0x06, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, - 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x01, - 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, - 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x22, 0xb8, 0x02, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x4d, - 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, - 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, - 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, - 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, - 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, - 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, - 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, - 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x22, 0x8e, 0x01, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, - 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x33, - 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, - 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, - 0x4e, 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x4d, 0x55, 0x54, - 0x45, 0x10, 0x02, 0x22, 0xca, 0x02, 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, - 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, - 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, - 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x62, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, - 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, - 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, - 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x22, 0xa5, 0x01, 0x0a, 0x1c, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x49, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x31, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x3a, 0x0a, 0x06, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x12, + 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x8a, 0x01, 0x0a, 0x0f, 0x43, + 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x35, + 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, + 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x00, 0x52, 0x07, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x31, 0x0a, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, + 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x5c, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x74, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x12, + 0x44, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, + 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x42, 0x0d, + 0xba, 0xe9, 0xc0, 0x03, 0x08, 0x92, 0x01, 0x05, 0x08, 0x01, 0x10, 0x80, 0x08, 0x52, 0x06, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x7b, 0x0a, 0x14, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x12, 0x3b, 0x0a, + 0x04, 0x63, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x2e, + 0x43, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x63, 0x6f, 0x64, 0x65, 0x22, 0x26, 0x0a, 0x04, 0x43, 0x6f, + 0x64, 0x65, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, - 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x55, 0x42, - 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x10, 0x02, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x68, 0x61, 0x74, - 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x20, 0x18, 0x20, 0x52, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x32, 0x0a, 0x0d, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, - 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x31, 0x0a, 0x0c, 0x43, 0x68, 0x61, - 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, - 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xf5, 0x03, 0x0a, - 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, - 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, - 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, - 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x3f, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x2e, 0x4b, 0x69, 0x6e, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, - 0x02, 0x20, 0x00, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x22, 0x0a, 0x05, 0x74, 0x69, 0x74, - 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, - 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x40, 0x0a, - 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, - 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, - 0x01, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, - 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x19, - 0x0a, 0x08, 0x63, 0x61, 0x6e, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x07, 0x63, 0x61, 0x6e, 0x4d, 0x75, 0x74, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, - 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, - 0x75, 0x74, 0x65, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x6e, 0x5f, 0x75, 0x6e, 0x73, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x63, - 0x61, 0x6e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x23, 0x0a, - 0x0d, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, 0x09, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, - 0x65, 0x64, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, - 0x22, 0x32, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, - 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, - 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x4f, 0x5f, 0x57, - 0x41, 0x59, 0x10, 0x02, 0x22, 0xb3, 0x02, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x46, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, - 0x01, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x09, - 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, - 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x52, 0x08, 0x73, 0x65, 0x6e, - 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, - 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x02, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, - 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x02, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x06, - 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, - 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xe9, 0x01, 0x0a, 0x0a, 0x43, - 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, - 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, - 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x73, 0x65, 0x6c, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x06, 0x69, 0x73, 0x53, 0x65, 0x6c, 0x66, 0x12, 0x3c, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x69, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0c, - 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x02, 0x52, 0x08, 0x70, 0x6f, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x22, 0xbc, 0x01, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x74, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x51, 0x0a, - 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, - 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, - 0x05, 0x82, 0x01, 0x02, 0x18, 0x01, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x12, 0x27, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x0f, 0x52, - 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x24, 0x0a, 0x08, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, - 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x49, 0x54, 0x54, 0x45, 0x52, 0x10, 0x01, 0x4a, - 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x81, 0x02, 0x0a, 0x07, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x12, 0x3a, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, - 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x2e, 0x4b, 0x69, 0x6e, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, - 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x3d, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, - 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x09, - 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, - 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, - 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, - 0x64, 0x22, 0x36, 0x0a, 0x04, 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, - 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x01, - 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, 0x44, 0x10, 0x02, 0x12, - 0x08, 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, 0x03, 0x22, 0xd5, 0x02, 0x0a, 0x07, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, - 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3e, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, - 0x7a, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, - 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x63, - 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x0c, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, - 0x12, 0x42, 0x0a, 0x08, 0x6e, 0x61, 0x63, 0x6c, 0x5f, 0x62, 0x6f, 0x78, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, - 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x6e, 0x61, 0x63, - 0x6c, 0x42, 0x6f, 0x78, 0x12, 0x3c, 0x0a, 0x09, 0x74, 0x68, 0x61, 0x6e, 0x6b, 0x5f, 0x79, 0x6f, - 0x75, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x43, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x08, 0x74, 0x68, 0x61, 0x6e, 0x6b, 0x59, - 0x6f, 0x75, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, - 0x01, 0x22, 0x2f, 0x0a, 0x0b, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x12, 0x20, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, - 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x04, 0x74, 0x65, - 0x78, 0x74, 0x22, 0x40, 0x0a, 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x72, - 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, - 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x4f, 0x72, - 0x54, 0x65, 0x78, 0x74, 0x22, 0xa4, 0x04, 0x0a, 0x13, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x04, - 0x76, 0x65, 0x72, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x65, - 0x72, 0x62, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, - 0x76, 0x65, 0x72, 0x62, 0x12, 0x39, 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, - 0x48, 0x0a, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, - 0x61, 0x74, 0x61, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x52, 0x61, 0x74, 0x65, 0x48, 0x00, - 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x32, 0x0a, 0x06, 0x69, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x49, 0x64, 0x48, 0x01, 0x52, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, - 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x01, 0x52, 0x09, 0x73, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xa4, 0x01, 0x0a, 0x04, 0x56, 0x65, 0x72, - 0x62, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, - 0x0a, 0x04, 0x47, 0x41, 0x56, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x43, 0x45, - 0x49, 0x56, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, - 0x45, 0x57, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x45, - 0x44, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x05, 0x12, 0x0c, 0x0a, - 0x08, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x45, 0x44, 0x10, 0x06, 0x12, 0x09, 0x0a, 0x05, 0x53, - 0x50, 0x45, 0x4e, 0x54, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x41, 0x49, 0x44, 0x10, 0x08, - 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x55, 0x52, 0x43, 0x48, 0x41, 0x53, 0x45, 0x44, 0x10, 0x09, 0x12, - 0x10, 0x0a, 0x0c, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x5f, 0x54, 0x49, 0x50, 0x10, - 0x0a, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0b, 0x42, - 0x16, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, - 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x42, 0x12, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xcc, 0x01, 0x0a, 0x17, - 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x5f, - 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, - 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x70, - 0x65, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x05, - 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, - 0x03, 0x06, 0x7a, 0x04, 0x10, 0x18, 0x18, 0x18, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, - 0x39, 0x0a, 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x79, - 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, - 0x07, 0x7a, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x10, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, - 0x74, 0x65, 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x62, 0x0a, 0x0f, 0x54, 0x68, - 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, - 0x0a, 0x74, 0x69, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, - 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x74, 0x69, 0x70, 0x49, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x2b, - 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, - 0x10, 0x10, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x32, 0x83, 0x05, 0x0a, 0x04, - 0x43, 0x68, 0x61, 0x74, 0x12, 0x49, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, - 0x12, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, - 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x52, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x20, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, - 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, - 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, - 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x52, 0x0a, 0x0b, 0x53, 0x65, - 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, - 0x0a, 0x0e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0c, 0x53, - 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, - 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, + 0x10, 0x01, 0x22, 0xa0, 0x01, 0x0a, 0x17, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, + 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x44, + 0x0a, 0x0b, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x4f, 0x70, 0x65, 0x6e, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x70, 0x65, 0x6e, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x12, 0x30, 0x0a, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x6e, 0x67, 0x48, 0x00, + 0x52, 0x04, 0x70, 0x6f, 0x6e, 0x67, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, + 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xd5, 0x01, 0x0a, 0x18, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x3c, 0x0a, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x42, 0x61, 0x74, 0x63, 0x68, 0x48, 0x00, 0x52, 0x06, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, + 0x12, 0x30, 0x0a, 0x04, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x65, 0x72, 0x76, 0x65, 0x72, 0x50, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x04, 0x70, 0x69, + 0x6e, 0x67, 0x12, 0x3a, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x42, 0x0d, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xdb, 0x02, + 0x0a, 0x12, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, + 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, + 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, + 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, + 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x01, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, + 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, + 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xef, 0x01, 0x0a, 0x13, + 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x61, 0x0a, 0x06, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, + 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, + 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, + 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x54, 0x59, 0x50, + 0x45, 0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x43, + 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x04, 0x22, 0x97, 0x02, + 0x0a, 0x15, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, + 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, + 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, + 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, + 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xc0, 0x01, 0x0a, 0x16, 0x41, 0x64, 0x76, 0x61, + 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, + 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x61, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, + 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, + 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x45, 0x53, + 0x53, 0x41, 0x47, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x03, + 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x50, 0x4f, 0x49, 0x4e, + 0x54, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x04, 0x22, 0xb8, 0x02, 0x0a, 0x13, 0x53, + 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, + 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, + 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x41, 0x0a, + 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, + 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, + 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, + 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, + 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x9a, 0x01, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, + 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x22, 0x3f, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, + 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, + 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, + 0x44, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x4d, 0x55, 0x54, 0x45, + 0x10, 0x03, 0x22, 0xca, 0x02, 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, + 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, + 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x62, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, + 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, + 0xb1, 0x01, 0x0a, 0x1c, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x49, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x31, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x46, 0x0a, 0x06, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, + 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, + 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x14, 0x0a, + 0x10, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, + 0x45, 0x10, 0x03, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, + 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x20, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0x32, 0x0a, 0x0d, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, + 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, + 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0x31, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xf5, 0x03, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, + 0x74, 0x49, 0x64, 0x12, 0x3f, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x69, + 0x6e, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, + 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x22, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, + 0x08, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, + 0x02, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, + 0x6d, 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, + 0x6e, 0x75, 0x6d, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x61, 0x6e, + 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x61, 0x6e, + 0x4d, 0x75, 0x74, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, + 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x6e, 0x5f, 0x75, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x62, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x63, 0x61, 0x6e, 0x55, 0x6e, 0x73, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x73, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x12, 0x2c, 0x0a, + 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, + 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0x32, 0x0a, 0x04, 0x4b, + 0x69, 0x6e, 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, + 0x12, 0x10, 0x0a, 0x0c, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, + 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x4f, 0x5f, 0x57, 0x41, 0x59, 0x10, 0x02, 0x22, + 0xb3, 0x02, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x46, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, + 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x49, 0x64, + 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, + 0x01, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, + 0x36, 0x0a, 0x02, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, + 0x02, 0x08, 0x01, 0x52, 0x02, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, + 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, + 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xe9, 0x01, 0x0a, 0x0a, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, + 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, + 0x73, 0x65, 0x6c, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x53, 0x65, + 0x6c, 0x66, 0x12, 0x3c, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x12, 0x3f, 0x0a, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, + 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x02, 0x52, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x73, 0x22, 0xbc, 0x01, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x51, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x18, + 0x01, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x27, 0x0a, 0x08, 0x75, + 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xba, + 0xe9, 0xc0, 0x03, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x0f, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, + 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x24, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, + 0x07, 0x54, 0x57, 0x49, 0x54, 0x54, 0x45, 0x52, 0x10, 0x01, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, + 0x22, 0x81, 0x02, 0x0a, 0x07, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x04, + 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x2e, 0x4b, 0x69, 0x6e, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, + 0x20, 0x00, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x3d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, + 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, + 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x22, 0x36, 0x0a, 0x04, + 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, + 0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x44, + 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, 0x44, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x52, 0x45, + 0x41, 0x44, 0x10, 0x03, 0x22, 0xd5, 0x02, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x12, 0x2f, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x65, + 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x04, 0x74, 0x65, 0x78, + 0x74, 0x12, 0x3e, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, + 0x64, 0x12, 0x48, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, + 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x65, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x42, 0x0a, 0x08, 0x6e, + 0x61, 0x63, 0x6c, 0x5f, 0x62, 0x6f, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x63, + 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x6e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x12, + 0x3c, 0x0a, 0x09, 0x74, 0x68, 0x61, 0x6e, 0x6b, 0x5f, 0x79, 0x6f, 0x75, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x54, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x48, 0x00, 0x52, 0x08, 0x74, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x42, 0x0d, 0x0a, + 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x2f, 0x0a, 0x0b, + 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x04, 0x74, + 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, + 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x40, 0x0a, + 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x12, 0x2c, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x72, 0x5f, 0x74, 0x65, 0x78, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, + 0x01, 0x18, 0x80, 0x08, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x4f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x22, + 0xa4, 0x04, 0x0a, 0x13, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x42, 0x0a, 0xba, + 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, 0x12, + 0x39, 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x48, 0x00, 0x52, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, 0x07, 0x70, 0x61, + 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, + 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x57, 0x69, + 0x74, 0x68, 0x6f, 0x75, 0x74, 0x52, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, 0x61, 0x72, + 0x74, 0x69, 0x61, 0x6c, 0x12, 0x32, 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x48, 0x01, + 0x52, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x22, 0xa4, 0x01, 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, 0x0b, 0x0a, 0x07, + 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x47, 0x41, 0x56, + 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x10, + 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x45, 0x57, 0x10, 0x03, 0x12, + 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x08, + 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x54, 0x55, + 0x52, 0x4e, 0x45, 0x44, 0x10, 0x06, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, 0x4e, 0x54, 0x10, + 0x07, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x41, 0x49, 0x44, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x50, + 0x55, 0x52, 0x43, 0x48, 0x41, 0x53, 0x45, 0x44, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x45, + 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0a, 0x12, 0x0c, 0x0a, 0x08, + 0x53, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0b, 0x42, 0x16, 0x0a, 0x0d, 0x65, 0x78, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x12, 0x05, 0xb8, 0xe9, 0xc0, + 0x03, 0x01, 0x42, 0x12, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, + 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xcc, 0x01, 0x0a, 0x17, 0x4e, 0x61, 0x63, 0x6c, 0x42, + 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, + 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, + 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x70, 0x65, 0x65, 0x72, 0x50, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, + 0x18, 0x18, 0x18, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x11, 0x65, 0x6e, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, 0x05, 0x10, 0x01, + 0x18, 0x80, 0x08, 0x52, 0x10, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, + 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x62, 0x0a, 0x0f, 0x54, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, + 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x0a, 0x74, 0x69, 0x70, 0x5f, + 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, + 0x10, 0x01, 0x52, 0x09, 0x74, 0x69, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4a, 0x04, 0x08, + 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, + 0x73, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x20, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x32, 0x83, 0x05, 0x0a, 0x04, 0x43, 0x68, 0x61, 0x74, 0x12, + 0x49, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x12, 0x1d, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, + 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x47, 0x65, + 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, + 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, + 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x52, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x41, 0x64, 0x76, + 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x23, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, + 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, + 0x14, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x42, 0x6b, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x63, - 0x2e, 0x67, 0x65, 0x6e, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x5a, 0x44, 0x67, 0x69, - 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x64, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2f, 0x76, 0x32, 0x3b, 0x63, 0x68, - 0x61, 0x74, 0xa2, 0x02, 0x09, 0x43, 0x50, 0x42, 0x43, 0x68, 0x61, 0x74, 0x56, 0x32, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, + 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, + 0x73, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, + 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, + 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2f, 0x76, 0x32, 0x3b, 0x63, 0x68, 0x61, 0x74, 0xa2, 0x02, 0x09, + 0x43, 0x50, 0x42, 0x43, 0x68, 0x61, 0x74, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -3391,157 +3538,161 @@ func file_chat_v2_chat_service_proto_rawDescGZIP() []byte { return file_chat_v2_chat_service_proto_rawDescData } -var file_chat_v2_chat_service_proto_enumTypes = make([]protoimpl.EnumInfo, 12) -var file_chat_v2_chat_service_proto_msgTypes = make([]protoimpl.MessageInfo, 32) +var file_chat_v2_chat_service_proto_enumTypes = make([]protoimpl.EnumInfo, 13) +var file_chat_v2_chat_service_proto_msgTypes = make([]protoimpl.MessageInfo, 33) var file_chat_v2_chat_service_proto_goTypes = []interface{}{ (GetChatsRequest_Direction)(0), // 0: code.chat.v2.GetChatsRequest.Direction (GetChatsResponse_Result)(0), // 1: code.chat.v2.GetChatsResponse.Result (GetMessagesRequest_Direction)(0), // 2: code.chat.v2.GetMessagesRequest.Direction (GetMessagesResponse_Result)(0), // 3: code.chat.v2.GetMessagesResponse.Result - (SendMessageResponse_Result)(0), // 4: code.chat.v2.SendMessageResponse.Result - (AdvancePointerResponse_Result)(0), // 5: code.chat.v2.AdvancePointerResponse.Result - (SetMuteStateResponse_Result)(0), // 6: code.chat.v2.SetMuteStateResponse.Result - (SetSubscriptionStateResponse_Result)(0), // 7: code.chat.v2.SetSubscriptionStateResponse.Result - (ChatMetadata_Kind)(0), // 8: code.chat.v2.ChatMetadata.Kind - (ChatMemberIdentity_Platform)(0), // 9: code.chat.v2.ChatMemberIdentity.Platform - (Pointer_Kind)(0), // 10: code.chat.v2.Pointer.Kind - (ExchangeDataContent_Verb)(0), // 11: code.chat.v2.ExchangeDataContent.Verb - (*GetChatsRequest)(nil), // 12: code.chat.v2.GetChatsRequest - (*GetChatsResponse)(nil), // 13: code.chat.v2.GetChatsResponse - (*GetMessagesRequest)(nil), // 14: code.chat.v2.GetMessagesRequest - (*GetMessagesResponse)(nil), // 15: code.chat.v2.GetMessagesResponse - (*OpenChatEventStream)(nil), // 16: code.chat.v2.OpenChatEventStream - (*ChatStreamEvent)(nil), // 17: code.chat.v2.ChatStreamEvent - (*ChatStreamEventBatch)(nil), // 18: code.chat.v2.ChatStreamEventBatch - (*StreamChatEventsRequest)(nil), // 19: code.chat.v2.StreamChatEventsRequest - (*StreamChatEventsResponse)(nil), // 20: code.chat.v2.StreamChatEventsResponse - (*SendMessageRequest)(nil), // 21: code.chat.v2.SendMessageRequest - (*SendMessageResponse)(nil), // 22: code.chat.v2.SendMessageResponse - (*AdvancePointerRequest)(nil), // 23: code.chat.v2.AdvancePointerRequest - (*AdvancePointerResponse)(nil), // 24: code.chat.v2.AdvancePointerResponse - (*SetMuteStateRequest)(nil), // 25: code.chat.v2.SetMuteStateRequest - (*SetMuteStateResponse)(nil), // 26: code.chat.v2.SetMuteStateResponse - (*SetSubscriptionStateRequest)(nil), // 27: code.chat.v2.SetSubscriptionStateRequest - (*SetSubscriptionStateResponse)(nil), // 28: code.chat.v2.SetSubscriptionStateResponse - (*ChatId)(nil), // 29: code.chat.v2.ChatId - (*ChatMessageId)(nil), // 30: code.chat.v2.ChatMessageId - (*ChatMemberId)(nil), // 31: code.chat.v2.ChatMemberId - (*ChatMetadata)(nil), // 32: code.chat.v2.ChatMetadata - (*ChatMessage)(nil), // 33: code.chat.v2.ChatMessage - (*ChatMember)(nil), // 34: code.chat.v2.ChatMember - (*ChatMemberIdentity)(nil), // 35: code.chat.v2.ChatMemberIdentity - (*Pointer)(nil), // 36: code.chat.v2.Pointer - (*Content)(nil), // 37: code.chat.v2.Content - (*TextContent)(nil), // 38: code.chat.v2.TextContent - (*LocalizedContent)(nil), // 39: code.chat.v2.LocalizedContent - (*ExchangeDataContent)(nil), // 40: code.chat.v2.ExchangeDataContent - (*NaclBoxEncryptedContent)(nil), // 41: code.chat.v2.NaclBoxEncryptedContent - (*ThankYouContent)(nil), // 42: code.chat.v2.ThankYouContent - (*Cursor)(nil), // 43: code.chat.v2.Cursor - (*v1.SolanaAccountId)(nil), // 44: code.common.v1.SolanaAccountId - (*v1.Signature)(nil), // 45: code.common.v1.Signature - (*v1.ClientPong)(nil), // 46: code.common.v1.ClientPong - (*v1.ServerPing)(nil), // 47: code.common.v1.ServerPing - (*timestamppb.Timestamp)(nil), // 48: google.protobuf.Timestamp - (*v2.ExchangeData)(nil), // 49: code.transaction.v2.ExchangeData - (*v2.ExchangeDataWithoutRate)(nil), // 50: code.transaction.v2.ExchangeDataWithoutRate - (*v1.IntentId)(nil), // 51: code.common.v1.IntentId + (ChatStreamEventError_Code)(0), // 4: code.chat.v2.ChatStreamEventError.Code + (SendMessageResponse_Result)(0), // 5: code.chat.v2.SendMessageResponse.Result + (AdvancePointerResponse_Result)(0), // 6: code.chat.v2.AdvancePointerResponse.Result + (SetMuteStateResponse_Result)(0), // 7: code.chat.v2.SetMuteStateResponse.Result + (SetSubscriptionStateResponse_Result)(0), // 8: code.chat.v2.SetSubscriptionStateResponse.Result + (ChatMetadata_Kind)(0), // 9: code.chat.v2.ChatMetadata.Kind + (ChatMemberIdentity_Platform)(0), // 10: code.chat.v2.ChatMemberIdentity.Platform + (Pointer_Kind)(0), // 11: code.chat.v2.Pointer.Kind + (ExchangeDataContent_Verb)(0), // 12: code.chat.v2.ExchangeDataContent.Verb + (*GetChatsRequest)(nil), // 13: code.chat.v2.GetChatsRequest + (*GetChatsResponse)(nil), // 14: code.chat.v2.GetChatsResponse + (*GetMessagesRequest)(nil), // 15: code.chat.v2.GetMessagesRequest + (*GetMessagesResponse)(nil), // 16: code.chat.v2.GetMessagesResponse + (*OpenChatEventStream)(nil), // 17: code.chat.v2.OpenChatEventStream + (*ChatStreamEvent)(nil), // 18: code.chat.v2.ChatStreamEvent + (*ChatStreamEventBatch)(nil), // 19: code.chat.v2.ChatStreamEventBatch + (*ChatStreamEventError)(nil), // 20: code.chat.v2.ChatStreamEventError + (*StreamChatEventsRequest)(nil), // 21: code.chat.v2.StreamChatEventsRequest + (*StreamChatEventsResponse)(nil), // 22: code.chat.v2.StreamChatEventsResponse + (*SendMessageRequest)(nil), // 23: code.chat.v2.SendMessageRequest + (*SendMessageResponse)(nil), // 24: code.chat.v2.SendMessageResponse + (*AdvancePointerRequest)(nil), // 25: code.chat.v2.AdvancePointerRequest + (*AdvancePointerResponse)(nil), // 26: code.chat.v2.AdvancePointerResponse + (*SetMuteStateRequest)(nil), // 27: code.chat.v2.SetMuteStateRequest + (*SetMuteStateResponse)(nil), // 28: code.chat.v2.SetMuteStateResponse + (*SetSubscriptionStateRequest)(nil), // 29: code.chat.v2.SetSubscriptionStateRequest + (*SetSubscriptionStateResponse)(nil), // 30: code.chat.v2.SetSubscriptionStateResponse + (*ChatId)(nil), // 31: code.chat.v2.ChatId + (*ChatMessageId)(nil), // 32: code.chat.v2.ChatMessageId + (*ChatMemberId)(nil), // 33: code.chat.v2.ChatMemberId + (*ChatMetadata)(nil), // 34: code.chat.v2.ChatMetadata + (*ChatMessage)(nil), // 35: code.chat.v2.ChatMessage + (*ChatMember)(nil), // 36: code.chat.v2.ChatMember + (*ChatMemberIdentity)(nil), // 37: code.chat.v2.ChatMemberIdentity + (*Pointer)(nil), // 38: code.chat.v2.Pointer + (*Content)(nil), // 39: code.chat.v2.Content + (*TextContent)(nil), // 40: code.chat.v2.TextContent + (*LocalizedContent)(nil), // 41: code.chat.v2.LocalizedContent + (*ExchangeDataContent)(nil), // 42: code.chat.v2.ExchangeDataContent + (*NaclBoxEncryptedContent)(nil), // 43: code.chat.v2.NaclBoxEncryptedContent + (*ThankYouContent)(nil), // 44: code.chat.v2.ThankYouContent + (*Cursor)(nil), // 45: code.chat.v2.Cursor + (*v1.SolanaAccountId)(nil), // 46: code.common.v1.SolanaAccountId + (*v1.Signature)(nil), // 47: code.common.v1.Signature + (*v1.ClientPong)(nil), // 48: code.common.v1.ClientPong + (*v1.ServerPing)(nil), // 49: code.common.v1.ServerPing + (*timestamppb.Timestamp)(nil), // 50: google.protobuf.Timestamp + (*v2.ExchangeData)(nil), // 51: code.transaction.v2.ExchangeData + (*v2.ExchangeDataWithoutRate)(nil), // 52: code.transaction.v2.ExchangeDataWithoutRate + (*v1.IntentId)(nil), // 53: code.common.v1.IntentId } var file_chat_v2_chat_service_proto_depIdxs = []int32{ - 44, // 0: code.chat.v2.GetChatsRequest.owner:type_name -> code.common.v1.SolanaAccountId - 45, // 1: code.chat.v2.GetChatsRequest.signature:type_name -> code.common.v1.Signature - 43, // 2: code.chat.v2.GetChatsRequest.cursor:type_name -> code.chat.v2.Cursor + 46, // 0: code.chat.v2.GetChatsRequest.owner:type_name -> code.common.v1.SolanaAccountId + 47, // 1: code.chat.v2.GetChatsRequest.signature:type_name -> code.common.v1.Signature + 45, // 2: code.chat.v2.GetChatsRequest.cursor:type_name -> code.chat.v2.Cursor 0, // 3: code.chat.v2.GetChatsRequest.direction:type_name -> code.chat.v2.GetChatsRequest.Direction 1, // 4: code.chat.v2.GetChatsResponse.result:type_name -> code.chat.v2.GetChatsResponse.Result - 32, // 5: code.chat.v2.GetChatsResponse.chats:type_name -> code.chat.v2.ChatMetadata - 29, // 6: code.chat.v2.GetMessagesRequest.chat_id:type_name -> code.chat.v2.ChatId - 31, // 7: code.chat.v2.GetMessagesRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 44, // 8: code.chat.v2.GetMessagesRequest.owner:type_name -> code.common.v1.SolanaAccountId - 45, // 9: code.chat.v2.GetMessagesRequest.signature:type_name -> code.common.v1.Signature - 43, // 10: code.chat.v2.GetMessagesRequest.cursor:type_name -> code.chat.v2.Cursor + 34, // 5: code.chat.v2.GetChatsResponse.chats:type_name -> code.chat.v2.ChatMetadata + 31, // 6: code.chat.v2.GetMessagesRequest.chat_id:type_name -> code.chat.v2.ChatId + 33, // 7: code.chat.v2.GetMessagesRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 46, // 8: code.chat.v2.GetMessagesRequest.owner:type_name -> code.common.v1.SolanaAccountId + 47, // 9: code.chat.v2.GetMessagesRequest.signature:type_name -> code.common.v1.Signature + 45, // 10: code.chat.v2.GetMessagesRequest.cursor:type_name -> code.chat.v2.Cursor 2, // 11: code.chat.v2.GetMessagesRequest.direction:type_name -> code.chat.v2.GetMessagesRequest.Direction 3, // 12: code.chat.v2.GetMessagesResponse.result:type_name -> code.chat.v2.GetMessagesResponse.Result - 33, // 13: code.chat.v2.GetMessagesResponse.messages:type_name -> code.chat.v2.ChatMessage - 29, // 14: code.chat.v2.OpenChatEventStream.chat_id:type_name -> code.chat.v2.ChatId - 31, // 15: code.chat.v2.OpenChatEventStream.member_id:type_name -> code.chat.v2.ChatMemberId - 44, // 16: code.chat.v2.OpenChatEventStream.owner:type_name -> code.common.v1.SolanaAccountId - 45, // 17: code.chat.v2.OpenChatEventStream.signature:type_name -> code.common.v1.Signature - 33, // 18: code.chat.v2.ChatStreamEvent.message:type_name -> code.chat.v2.ChatMessage - 36, // 19: code.chat.v2.ChatStreamEvent.pointer:type_name -> code.chat.v2.Pointer - 17, // 20: code.chat.v2.ChatStreamEventBatch.events:type_name -> code.chat.v2.ChatStreamEvent - 16, // 21: code.chat.v2.StreamChatEventsRequest.open_stream:type_name -> code.chat.v2.OpenChatEventStream - 46, // 22: code.chat.v2.StreamChatEventsRequest.pong:type_name -> code.common.v1.ClientPong - 18, // 23: code.chat.v2.StreamChatEventsResponse.events:type_name -> code.chat.v2.ChatStreamEventBatch - 47, // 24: code.chat.v2.StreamChatEventsResponse.ping:type_name -> code.common.v1.ServerPing - 29, // 25: code.chat.v2.SendMessageRequest.chat_id:type_name -> code.chat.v2.ChatId - 31, // 26: code.chat.v2.SendMessageRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 37, // 27: code.chat.v2.SendMessageRequest.content:type_name -> code.chat.v2.Content - 44, // 28: code.chat.v2.SendMessageRequest.owner:type_name -> code.common.v1.SolanaAccountId - 45, // 29: code.chat.v2.SendMessageRequest.signature:type_name -> code.common.v1.Signature - 4, // 30: code.chat.v2.SendMessageResponse.result:type_name -> code.chat.v2.SendMessageResponse.Result - 33, // 31: code.chat.v2.SendMessageResponse.message:type_name -> code.chat.v2.ChatMessage - 29, // 32: code.chat.v2.AdvancePointerRequest.chat_id:type_name -> code.chat.v2.ChatId - 36, // 33: code.chat.v2.AdvancePointerRequest.pointer:type_name -> code.chat.v2.Pointer - 44, // 34: code.chat.v2.AdvancePointerRequest.owner:type_name -> code.common.v1.SolanaAccountId - 45, // 35: code.chat.v2.AdvancePointerRequest.signature:type_name -> code.common.v1.Signature - 5, // 36: code.chat.v2.AdvancePointerResponse.result:type_name -> code.chat.v2.AdvancePointerResponse.Result - 29, // 37: code.chat.v2.SetMuteStateRequest.chat_id:type_name -> code.chat.v2.ChatId - 31, // 38: code.chat.v2.SetMuteStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 44, // 39: code.chat.v2.SetMuteStateRequest.owner:type_name -> code.common.v1.SolanaAccountId - 45, // 40: code.chat.v2.SetMuteStateRequest.signature:type_name -> code.common.v1.Signature - 6, // 41: code.chat.v2.SetMuteStateResponse.result:type_name -> code.chat.v2.SetMuteStateResponse.Result - 29, // 42: code.chat.v2.SetSubscriptionStateRequest.chat_id:type_name -> code.chat.v2.ChatId - 31, // 43: code.chat.v2.SetSubscriptionStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 44, // 44: code.chat.v2.SetSubscriptionStateRequest.owner:type_name -> code.common.v1.SolanaAccountId - 45, // 45: code.chat.v2.SetSubscriptionStateRequest.signature:type_name -> code.common.v1.Signature - 7, // 46: code.chat.v2.SetSubscriptionStateResponse.result:type_name -> code.chat.v2.SetSubscriptionStateResponse.Result - 29, // 47: code.chat.v2.ChatMetadata.chat_id:type_name -> code.chat.v2.ChatId - 8, // 48: code.chat.v2.ChatMetadata.kind:type_name -> code.chat.v2.ChatMetadata.Kind - 34, // 49: code.chat.v2.ChatMetadata.members:type_name -> code.chat.v2.ChatMember - 43, // 50: code.chat.v2.ChatMetadata.cursor:type_name -> code.chat.v2.Cursor - 30, // 51: code.chat.v2.ChatMessage.message_id:type_name -> code.chat.v2.ChatMessageId - 31, // 52: code.chat.v2.ChatMessage.sender_id:type_name -> code.chat.v2.ChatMemberId - 37, // 53: code.chat.v2.ChatMessage.content:type_name -> code.chat.v2.Content - 48, // 54: code.chat.v2.ChatMessage.ts:type_name -> google.protobuf.Timestamp - 43, // 55: code.chat.v2.ChatMessage.cursor:type_name -> code.chat.v2.Cursor - 31, // 56: code.chat.v2.ChatMember.member_id:type_name -> code.chat.v2.ChatMemberId - 35, // 57: code.chat.v2.ChatMember.identity:type_name -> code.chat.v2.ChatMemberIdentity - 36, // 58: code.chat.v2.ChatMember.pointers:type_name -> code.chat.v2.Pointer - 9, // 59: code.chat.v2.ChatMemberIdentity.platform:type_name -> code.chat.v2.ChatMemberIdentity.Platform - 10, // 60: code.chat.v2.Pointer.kind:type_name -> code.chat.v2.Pointer.Kind - 30, // 61: code.chat.v2.Pointer.value:type_name -> code.chat.v2.ChatMessageId - 31, // 62: code.chat.v2.Pointer.member_id:type_name -> code.chat.v2.ChatMemberId - 38, // 63: code.chat.v2.Content.text:type_name -> code.chat.v2.TextContent - 39, // 64: code.chat.v2.Content.localized:type_name -> code.chat.v2.LocalizedContent - 40, // 65: code.chat.v2.Content.exchange_data:type_name -> code.chat.v2.ExchangeDataContent - 41, // 66: code.chat.v2.Content.nacl_box:type_name -> code.chat.v2.NaclBoxEncryptedContent - 42, // 67: code.chat.v2.Content.thank_you:type_name -> code.chat.v2.ThankYouContent - 11, // 68: code.chat.v2.ExchangeDataContent.verb:type_name -> code.chat.v2.ExchangeDataContent.Verb - 49, // 69: code.chat.v2.ExchangeDataContent.exact:type_name -> code.transaction.v2.ExchangeData - 50, // 70: code.chat.v2.ExchangeDataContent.partial:type_name -> code.transaction.v2.ExchangeDataWithoutRate - 51, // 71: code.chat.v2.ExchangeDataContent.intent:type_name -> code.common.v1.IntentId - 45, // 72: code.chat.v2.ExchangeDataContent.signature:type_name -> code.common.v1.Signature - 44, // 73: code.chat.v2.NaclBoxEncryptedContent.peer_public_key:type_name -> code.common.v1.SolanaAccountId - 51, // 74: code.chat.v2.ThankYouContent.tip_intent:type_name -> code.common.v1.IntentId - 12, // 75: code.chat.v2.Chat.GetChats:input_type -> code.chat.v2.GetChatsRequest - 14, // 76: code.chat.v2.Chat.GetMessages:input_type -> code.chat.v2.GetMessagesRequest - 19, // 77: code.chat.v2.Chat.StreamChatEvents:input_type -> code.chat.v2.StreamChatEventsRequest - 21, // 78: code.chat.v2.Chat.SendMessage:input_type -> code.chat.v2.SendMessageRequest - 23, // 79: code.chat.v2.Chat.AdvancePointer:input_type -> code.chat.v2.AdvancePointerRequest - 25, // 80: code.chat.v2.Chat.SetMuteState:input_type -> code.chat.v2.SetMuteStateRequest - 27, // 81: code.chat.v2.Chat.SetSubscriptionState:input_type -> code.chat.v2.SetSubscriptionStateRequest - 13, // 82: code.chat.v2.Chat.GetChats:output_type -> code.chat.v2.GetChatsResponse - 15, // 83: code.chat.v2.Chat.GetMessages:output_type -> code.chat.v2.GetMessagesResponse - 20, // 84: code.chat.v2.Chat.StreamChatEvents:output_type -> code.chat.v2.StreamChatEventsResponse - 22, // 85: code.chat.v2.Chat.SendMessage:output_type -> code.chat.v2.SendMessageResponse - 24, // 86: code.chat.v2.Chat.AdvancePointer:output_type -> code.chat.v2.AdvancePointerResponse - 26, // 87: code.chat.v2.Chat.SetMuteState:output_type -> code.chat.v2.SetMuteStateResponse - 28, // 88: code.chat.v2.Chat.SetSubscriptionState:output_type -> code.chat.v2.SetSubscriptionStateResponse - 82, // [82:89] is the sub-list for method output_type - 75, // [75:82] is the sub-list for method input_type - 75, // [75:75] is the sub-list for extension type_name - 75, // [75:75] is the sub-list for extension extendee - 0, // [0:75] is the sub-list for field type_name + 35, // 13: code.chat.v2.GetMessagesResponse.messages:type_name -> code.chat.v2.ChatMessage + 31, // 14: code.chat.v2.OpenChatEventStream.chat_id:type_name -> code.chat.v2.ChatId + 33, // 15: code.chat.v2.OpenChatEventStream.member_id:type_name -> code.chat.v2.ChatMemberId + 46, // 16: code.chat.v2.OpenChatEventStream.owner:type_name -> code.common.v1.SolanaAccountId + 47, // 17: code.chat.v2.OpenChatEventStream.signature:type_name -> code.common.v1.Signature + 35, // 18: code.chat.v2.ChatStreamEvent.message:type_name -> code.chat.v2.ChatMessage + 38, // 19: code.chat.v2.ChatStreamEvent.pointer:type_name -> code.chat.v2.Pointer + 18, // 20: code.chat.v2.ChatStreamEventBatch.events:type_name -> code.chat.v2.ChatStreamEvent + 4, // 21: code.chat.v2.ChatStreamEventError.code:type_name -> code.chat.v2.ChatStreamEventError.Code + 17, // 22: code.chat.v2.StreamChatEventsRequest.open_stream:type_name -> code.chat.v2.OpenChatEventStream + 48, // 23: code.chat.v2.StreamChatEventsRequest.pong:type_name -> code.common.v1.ClientPong + 19, // 24: code.chat.v2.StreamChatEventsResponse.events:type_name -> code.chat.v2.ChatStreamEventBatch + 49, // 25: code.chat.v2.StreamChatEventsResponse.ping:type_name -> code.common.v1.ServerPing + 20, // 26: code.chat.v2.StreamChatEventsResponse.error:type_name -> code.chat.v2.ChatStreamEventError + 31, // 27: code.chat.v2.SendMessageRequest.chat_id:type_name -> code.chat.v2.ChatId + 33, // 28: code.chat.v2.SendMessageRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 39, // 29: code.chat.v2.SendMessageRequest.content:type_name -> code.chat.v2.Content + 46, // 30: code.chat.v2.SendMessageRequest.owner:type_name -> code.common.v1.SolanaAccountId + 47, // 31: code.chat.v2.SendMessageRequest.signature:type_name -> code.common.v1.Signature + 5, // 32: code.chat.v2.SendMessageResponse.result:type_name -> code.chat.v2.SendMessageResponse.Result + 35, // 33: code.chat.v2.SendMessageResponse.message:type_name -> code.chat.v2.ChatMessage + 31, // 34: code.chat.v2.AdvancePointerRequest.chat_id:type_name -> code.chat.v2.ChatId + 38, // 35: code.chat.v2.AdvancePointerRequest.pointer:type_name -> code.chat.v2.Pointer + 46, // 36: code.chat.v2.AdvancePointerRequest.owner:type_name -> code.common.v1.SolanaAccountId + 47, // 37: code.chat.v2.AdvancePointerRequest.signature:type_name -> code.common.v1.Signature + 6, // 38: code.chat.v2.AdvancePointerResponse.result:type_name -> code.chat.v2.AdvancePointerResponse.Result + 31, // 39: code.chat.v2.SetMuteStateRequest.chat_id:type_name -> code.chat.v2.ChatId + 33, // 40: code.chat.v2.SetMuteStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 46, // 41: code.chat.v2.SetMuteStateRequest.owner:type_name -> code.common.v1.SolanaAccountId + 47, // 42: code.chat.v2.SetMuteStateRequest.signature:type_name -> code.common.v1.Signature + 7, // 43: code.chat.v2.SetMuteStateResponse.result:type_name -> code.chat.v2.SetMuteStateResponse.Result + 31, // 44: code.chat.v2.SetSubscriptionStateRequest.chat_id:type_name -> code.chat.v2.ChatId + 33, // 45: code.chat.v2.SetSubscriptionStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 46, // 46: code.chat.v2.SetSubscriptionStateRequest.owner:type_name -> code.common.v1.SolanaAccountId + 47, // 47: code.chat.v2.SetSubscriptionStateRequest.signature:type_name -> code.common.v1.Signature + 8, // 48: code.chat.v2.SetSubscriptionStateResponse.result:type_name -> code.chat.v2.SetSubscriptionStateResponse.Result + 31, // 49: code.chat.v2.ChatMetadata.chat_id:type_name -> code.chat.v2.ChatId + 9, // 50: code.chat.v2.ChatMetadata.kind:type_name -> code.chat.v2.ChatMetadata.Kind + 36, // 51: code.chat.v2.ChatMetadata.members:type_name -> code.chat.v2.ChatMember + 45, // 52: code.chat.v2.ChatMetadata.cursor:type_name -> code.chat.v2.Cursor + 32, // 53: code.chat.v2.ChatMessage.message_id:type_name -> code.chat.v2.ChatMessageId + 33, // 54: code.chat.v2.ChatMessage.sender_id:type_name -> code.chat.v2.ChatMemberId + 39, // 55: code.chat.v2.ChatMessage.content:type_name -> code.chat.v2.Content + 50, // 56: code.chat.v2.ChatMessage.ts:type_name -> google.protobuf.Timestamp + 45, // 57: code.chat.v2.ChatMessage.cursor:type_name -> code.chat.v2.Cursor + 33, // 58: code.chat.v2.ChatMember.member_id:type_name -> code.chat.v2.ChatMemberId + 37, // 59: code.chat.v2.ChatMember.identity:type_name -> code.chat.v2.ChatMemberIdentity + 38, // 60: code.chat.v2.ChatMember.pointers:type_name -> code.chat.v2.Pointer + 10, // 61: code.chat.v2.ChatMemberIdentity.platform:type_name -> code.chat.v2.ChatMemberIdentity.Platform + 11, // 62: code.chat.v2.Pointer.kind:type_name -> code.chat.v2.Pointer.Kind + 32, // 63: code.chat.v2.Pointer.value:type_name -> code.chat.v2.ChatMessageId + 33, // 64: code.chat.v2.Pointer.member_id:type_name -> code.chat.v2.ChatMemberId + 40, // 65: code.chat.v2.Content.text:type_name -> code.chat.v2.TextContent + 41, // 66: code.chat.v2.Content.localized:type_name -> code.chat.v2.LocalizedContent + 42, // 67: code.chat.v2.Content.exchange_data:type_name -> code.chat.v2.ExchangeDataContent + 43, // 68: code.chat.v2.Content.nacl_box:type_name -> code.chat.v2.NaclBoxEncryptedContent + 44, // 69: code.chat.v2.Content.thank_you:type_name -> code.chat.v2.ThankYouContent + 12, // 70: code.chat.v2.ExchangeDataContent.verb:type_name -> code.chat.v2.ExchangeDataContent.Verb + 51, // 71: code.chat.v2.ExchangeDataContent.exact:type_name -> code.transaction.v2.ExchangeData + 52, // 72: code.chat.v2.ExchangeDataContent.partial:type_name -> code.transaction.v2.ExchangeDataWithoutRate + 53, // 73: code.chat.v2.ExchangeDataContent.intent:type_name -> code.common.v1.IntentId + 47, // 74: code.chat.v2.ExchangeDataContent.signature:type_name -> code.common.v1.Signature + 46, // 75: code.chat.v2.NaclBoxEncryptedContent.peer_public_key:type_name -> code.common.v1.SolanaAccountId + 53, // 76: code.chat.v2.ThankYouContent.tip_intent:type_name -> code.common.v1.IntentId + 13, // 77: code.chat.v2.Chat.GetChats:input_type -> code.chat.v2.GetChatsRequest + 15, // 78: code.chat.v2.Chat.GetMessages:input_type -> code.chat.v2.GetMessagesRequest + 21, // 79: code.chat.v2.Chat.StreamChatEvents:input_type -> code.chat.v2.StreamChatEventsRequest + 23, // 80: code.chat.v2.Chat.SendMessage:input_type -> code.chat.v2.SendMessageRequest + 25, // 81: code.chat.v2.Chat.AdvancePointer:input_type -> code.chat.v2.AdvancePointerRequest + 27, // 82: code.chat.v2.Chat.SetMuteState:input_type -> code.chat.v2.SetMuteStateRequest + 29, // 83: code.chat.v2.Chat.SetSubscriptionState:input_type -> code.chat.v2.SetSubscriptionStateRequest + 14, // 84: code.chat.v2.Chat.GetChats:output_type -> code.chat.v2.GetChatsResponse + 16, // 85: code.chat.v2.Chat.GetMessages:output_type -> code.chat.v2.GetMessagesResponse + 22, // 86: code.chat.v2.Chat.StreamChatEvents:output_type -> code.chat.v2.StreamChatEventsResponse + 24, // 87: code.chat.v2.Chat.SendMessage:output_type -> code.chat.v2.SendMessageResponse + 26, // 88: code.chat.v2.Chat.AdvancePointer:output_type -> code.chat.v2.AdvancePointerResponse + 28, // 89: code.chat.v2.Chat.SetMuteState:output_type -> code.chat.v2.SetMuteStateResponse + 30, // 90: code.chat.v2.Chat.SetSubscriptionState:output_type -> code.chat.v2.SetSubscriptionStateResponse + 84, // [84:91] is the sub-list for method output_type + 77, // [77:84] is the sub-list for method input_type + 77, // [77:77] is the sub-list for extension type_name + 77, // [77:77] is the sub-list for extension extendee + 0, // [0:77] is the sub-list for field type_name } func init() { file_chat_v2_chat_service_proto_init() } @@ -3635,7 +3786,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamChatEventsRequest); i { + switch v := v.(*ChatStreamEventError); i { case 0: return &v.state case 1: @@ -3647,7 +3798,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamChatEventsResponse); i { + switch v := v.(*StreamChatEventsRequest); i { case 0: return &v.state case 1: @@ -3659,7 +3810,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SendMessageRequest); i { + switch v := v.(*StreamChatEventsResponse); i { case 0: return &v.state case 1: @@ -3671,7 +3822,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SendMessageResponse); i { + switch v := v.(*SendMessageRequest); i { case 0: return &v.state case 1: @@ -3683,7 +3834,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AdvancePointerRequest); i { + switch v := v.(*SendMessageResponse); i { case 0: return &v.state case 1: @@ -3695,7 +3846,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AdvancePointerResponse); i { + switch v := v.(*AdvancePointerRequest); i { case 0: return &v.state case 1: @@ -3707,7 +3858,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetMuteStateRequest); i { + switch v := v.(*AdvancePointerResponse); i { case 0: return &v.state case 1: @@ -3719,7 +3870,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetMuteStateResponse); i { + switch v := v.(*SetMuteStateRequest); i { case 0: return &v.state case 1: @@ -3731,7 +3882,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetSubscriptionStateRequest); i { + switch v := v.(*SetMuteStateResponse); i { case 0: return &v.state case 1: @@ -3743,7 +3894,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetSubscriptionStateResponse); i { + switch v := v.(*SetSubscriptionStateRequest); i { case 0: return &v.state case 1: @@ -3755,7 +3906,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatId); i { + switch v := v.(*SetSubscriptionStateResponse); i { case 0: return &v.state case 1: @@ -3767,7 +3918,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatMessageId); i { + switch v := v.(*ChatId); i { case 0: return &v.state case 1: @@ -3779,7 +3930,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatMemberId); i { + switch v := v.(*ChatMessageId); i { case 0: return &v.state case 1: @@ -3791,7 +3942,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatMetadata); i { + switch v := v.(*ChatMemberId); i { case 0: return &v.state case 1: @@ -3803,7 +3954,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatMessage); i { + switch v := v.(*ChatMetadata); i { case 0: return &v.state case 1: @@ -3815,7 +3966,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatMember); i { + switch v := v.(*ChatMessage); i { case 0: return &v.state case 1: @@ -3827,7 +3978,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatMemberIdentity); i { + switch v := v.(*ChatMember); i { case 0: return &v.state case 1: @@ -3839,7 +3990,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Pointer); i { + switch v := v.(*ChatMemberIdentity); i { case 0: return &v.state case 1: @@ -3851,7 +4002,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Content); i { + switch v := v.(*Pointer); i { case 0: return &v.state case 1: @@ -3863,7 +4014,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TextContent); i { + switch v := v.(*Content); i { case 0: return &v.state case 1: @@ -3875,7 +4026,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LocalizedContent); i { + switch v := v.(*TextContent); i { case 0: return &v.state case 1: @@ -3887,7 +4038,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExchangeDataContent); i { + switch v := v.(*LocalizedContent); i { case 0: return &v.state case 1: @@ -3899,7 +4050,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NaclBoxEncryptedContent); i { + switch v := v.(*ExchangeDataContent); i { case 0: return &v.state case 1: @@ -3911,7 +4062,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ThankYouContent); i { + switch v := v.(*NaclBoxEncryptedContent); i { case 0: return &v.state case 1: @@ -3923,6 +4074,18 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ThankYouContent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Cursor); i { case 0: return &v.state @@ -3939,22 +4102,23 @@ func file_chat_v2_chat_service_proto_init() { (*ChatStreamEvent_Message)(nil), (*ChatStreamEvent_Pointer)(nil), } - file_chat_v2_chat_service_proto_msgTypes[7].OneofWrappers = []interface{}{ + file_chat_v2_chat_service_proto_msgTypes[8].OneofWrappers = []interface{}{ (*StreamChatEventsRequest_OpenStream)(nil), (*StreamChatEventsRequest_Pong)(nil), } - file_chat_v2_chat_service_proto_msgTypes[8].OneofWrappers = []interface{}{ + file_chat_v2_chat_service_proto_msgTypes[9].OneofWrappers = []interface{}{ (*StreamChatEventsResponse_Events)(nil), (*StreamChatEventsResponse_Ping)(nil), + (*StreamChatEventsResponse_Error)(nil), } - file_chat_v2_chat_service_proto_msgTypes[25].OneofWrappers = []interface{}{ + file_chat_v2_chat_service_proto_msgTypes[26].OneofWrappers = []interface{}{ (*Content_Text)(nil), (*Content_Localized)(nil), (*Content_ExchangeData)(nil), (*Content_NaclBox)(nil), (*Content_ThankYou)(nil), } - file_chat_v2_chat_service_proto_msgTypes[28].OneofWrappers = []interface{}{ + file_chat_v2_chat_service_proto_msgTypes[29].OneofWrappers = []interface{}{ (*ExchangeDataContent_Exact)(nil), (*ExchangeDataContent_Partial)(nil), (*ExchangeDataContent_Intent)(nil), @@ -3965,8 +4129,8 @@ func file_chat_v2_chat_service_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_chat_v2_chat_service_proto_rawDesc, - NumEnums: 12, - NumMessages: 32, + NumEnums: 13, + NumMessages: 33, NumExtensions: 0, NumServices: 1, }, diff --git a/generated/go/chat/v2/chat_service.pb.validate.go b/generated/go/chat/v2/chat_service.pb.validate.go index 036aa3a..636bf5b 100644 --- a/generated/go/chat/v2/chat_service.pb.validate.go +++ b/generated/go/chat/v2/chat_service.pb.validate.go @@ -808,6 +808,75 @@ var _ interface { ErrorName() string } = ChatStreamEventBatchValidationError{} +// Validate checks the field values on ChatStreamEventError with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *ChatStreamEventError) Validate() error { + if m == nil { + return nil + } + + // no validation rules for Code + + return nil +} + +// ChatStreamEventErrorValidationError is the validation error returned by +// ChatStreamEventError.Validate if the designated constraints aren't met. +type ChatStreamEventErrorValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e ChatStreamEventErrorValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e ChatStreamEventErrorValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e ChatStreamEventErrorValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e ChatStreamEventErrorValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e ChatStreamEventErrorValidationError) ErrorName() string { + return "ChatStreamEventErrorValidationError" +} + +// Error satisfies the builtin error interface +func (e ChatStreamEventErrorValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sChatStreamEventError.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = ChatStreamEventErrorValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = ChatStreamEventErrorValidationError{} + // Validate checks the field values on StreamChatEventsRequest with the rules // defined in the proto definition for this message. If any rules are // violated, an error is returned. @@ -943,6 +1012,18 @@ func (m *StreamChatEventsResponse) Validate() error { } } + case *StreamChatEventsResponse_Error: + + if v, ok := interface{}(m.GetError()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StreamChatEventsResponseValidationError{ + field: "Error", + reason: "embedded message failed validation", + cause: err, + } + } + } + default: return StreamChatEventsResponseValidationError{ field: "Type", diff --git a/proto/chat/v2/chat_service.proto b/proto/chat/v2/chat_service.proto index 77944ec..85e50ae 100644 --- a/proto/chat/v2/chat_service.proto +++ b/proto/chat/v2/chat_service.proto @@ -87,8 +87,10 @@ message GetMessagesRequest { message GetMessagesResponse { Result result = 1; enum Result { - OK = 0; - NOT_FOUND = 1; + OK = 0; + DENIED = 1; + CHAT_NOT_FOUND = 2; + MESSAGE_NOT_FOUND = 3; } repeated ChatMessage messages = 2 [(validate.rules).repeated = { @@ -123,6 +125,14 @@ message ChatStreamEventBatch { }]; } +message ChatStreamEventError { + Code code = 1; + enum Code { + DENIED = 0; + CHAT_NOT_FOUND = 1; + } +} + message StreamChatEventsRequest { oneof type { option (validate.required) = true; @@ -138,6 +148,7 @@ message StreamChatEventsResponse { ChatStreamEventBatch events = 1; common.v1.ServerPing ping = 2; + ChatStreamEventError error = 3; } } @@ -160,9 +171,10 @@ message SendMessageResponse { Result result = 1; enum Result { OK = 0; - CHAT_NOT_FOUND = 1; - INVALID_CHAT_TYPE = 2; - INVALID_CONTENT_TYPE = 3; + DENIED = 1; + CHAT_NOT_FOUND = 2; + INVALID_CHAT_TYPE = 3; + INVALID_CONTENT_TYPE = 4; } // The chat message that was sent, which includes server-side metadata like @@ -183,9 +195,11 @@ message AdvancePointerRequest { message AdvancePointerResponse { Result result = 1; enum Result { - OK = 0; - CHAT_NOT_FOUND = 1; - MESSAGE_NOT_FOUND = 2; + OK = 0; + DENIED = 1; + CHAT_NOT_FOUND = 2; + MESSAGE_NOT_FOUND = 3; + INVALID_POINTER_TYPE = 4; } } @@ -205,8 +219,9 @@ message SetMuteStateResponse { Result result = 1; enum Result { OK = 0; - CHAT_NOT_FOUND = 1; - CANT_MUTE = 2; + DENIED = 1; + CHAT_NOT_FOUND = 2; + CANT_MUTE = 3; } } @@ -226,8 +241,9 @@ message SetSubscriptionStateResponse { Result result = 1; enum Result { OK = 0; - CHAT_NOT_FOUND = 1; - CANT_UNSUBSCRIBE = 2; + DENIED = 1; + CHAT_NOT_FOUND = 2; + CANT_UNSUBSCRIBE = 3; } } From 2e4fbcd11dcb1ecc7aa91c81b7d440853572c1fd Mon Sep 17 00:00:00 2001 From: Jeff Yanta Date: Thu, 13 Jun 2024 10:37:59 -0400 Subject: [PATCH 07/16] Expand allowable chat v2 cursor byte range --- generated/go/chat/v2/chat_service.pb.go | 2 +- generated/go/chat/v2/chat_service.pb.validate.go | 4 ++-- proto/chat/v2/chat_service.proto | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/generated/go/chat/v2/chat_service.pb.go b/generated/go/chat/v2/chat_service.pb.go index cf9ccf3..52beb00 100644 --- a/generated/go/chat/v2/chat_service.pb.go +++ b/generated/go/chat/v2/chat_service.pb.go @@ -3474,7 +3474,7 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x10, 0x01, 0x52, 0x09, 0x74, 0x69, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x20, 0x52, + 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x08, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x32, 0x83, 0x05, 0x0a, 0x04, 0x43, 0x68, 0x61, 0x74, 0x12, 0x49, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x12, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, diff --git a/generated/go/chat/v2/chat_service.pb.validate.go b/generated/go/chat/v2/chat_service.pb.validate.go index 636bf5b..aae25fc 100644 --- a/generated/go/chat/v2/chat_service.pb.validate.go +++ b/generated/go/chat/v2/chat_service.pb.validate.go @@ -3353,10 +3353,10 @@ func (m *Cursor) Validate() error { return nil } - if l := len(m.GetValue()); l < 16 || l > 32 { + if l := len(m.GetValue()); l < 8 || l > 32 { return CursorValidationError{ field: "Value", - reason: "value length must be between 16 and 32 bytes, inclusive", + reason: "value length must be between 8 and 32 bytes, inclusive", } } diff --git a/proto/chat/v2/chat_service.proto b/proto/chat/v2/chat_service.proto index 85e50ae..5bcb40e 100644 --- a/proto/chat/v2/chat_service.proto +++ b/proto/chat/v2/chat_service.proto @@ -513,7 +513,7 @@ message ThankYouContent { // executed.package message Cursor { bytes value = 1 [(validate.rules).bytes = { - min_len: 16 + min_len: 8 max_len: 32 }]; } From 5885f1307f31c68acf09fdb89e0f24953ba76c36 Mon Sep 17 00:00:00 2001 From: Jeff Yanta Date: Mon, 17 Jun 2024 13:18:52 -0400 Subject: [PATCH 08/16] First pass at a new RPC to start two-way chats, initially from a tip --- generated/go/chat/v2/chat_service.pb.go | 1719 ++++++++++------- .../go/chat/v2/chat_service.pb.validate.go | 288 ++- generated/go/chat/v2/chat_service_grpc.pb.go | 40 + proto/chat/v2/chat_service.proto | 69 +- 4 files changed, 1402 insertions(+), 714 deletions(-) diff --git a/generated/go/chat/v2/chat_service.pb.go b/generated/go/chat/v2/chat_service.pb.go index 52beb00..a22f464 100644 --- a/generated/go/chat/v2/chat_service.pb.go +++ b/generated/go/chat/v2/chat_service.pb.go @@ -24,6 +24,107 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +type ChatType int32 + +const ( + ChatType_UNKNOWN_CHAT_TYPE ChatType = 0 + ChatType_NOTIFICATION ChatType = 1 + ChatType_TWO_WAY ChatType = 2 // GROUP = 3; +) + +// Enum value maps for ChatType. +var ( + ChatType_name = map[int32]string{ + 0: "UNKNOWN_CHAT_TYPE", + 1: "NOTIFICATION", + 2: "TWO_WAY", + } + ChatType_value = map[string]int32{ + "UNKNOWN_CHAT_TYPE": 0, + "NOTIFICATION": 1, + "TWO_WAY": 2, + } +) + +func (x ChatType) Enum() *ChatType { + p := new(ChatType) + *p = x + return p +} + +func (x ChatType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ChatType) Descriptor() protoreflect.EnumDescriptor { + return file_chat_v2_chat_service_proto_enumTypes[0].Descriptor() +} + +func (ChatType) Type() protoreflect.EnumType { + return &file_chat_v2_chat_service_proto_enumTypes[0] +} + +func (x ChatType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use ChatType.Descriptor instead. +func (ChatType) EnumDescriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{0} +} + +type PointerType int32 + +const ( + PointerType_UNKNOWN_POINTER_TYPE PointerType = 0 + PointerType_SENT PointerType = 1 // Always inferred by OK result in SendMessageResponse or message presence in a chat + PointerType_DELIVERED PointerType = 2 + PointerType_READ PointerType = 3 +) + +// Enum value maps for PointerType. +var ( + PointerType_name = map[int32]string{ + 0: "UNKNOWN_POINTER_TYPE", + 1: "SENT", + 2: "DELIVERED", + 3: "READ", + } + PointerType_value = map[string]int32{ + "UNKNOWN_POINTER_TYPE": 0, + "SENT": 1, + "DELIVERED": 2, + "READ": 3, + } +) + +func (x PointerType) Enum() *PointerType { + p := new(PointerType) + *p = x + return p +} + +func (x PointerType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (PointerType) Descriptor() protoreflect.EnumDescriptor { + return file_chat_v2_chat_service_proto_enumTypes[1].Descriptor() +} + +func (PointerType) Type() protoreflect.EnumType { + return &file_chat_v2_chat_service_proto_enumTypes[1] +} + +func (x PointerType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use PointerType.Descriptor instead. +func (PointerType) EnumDescriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{1} +} + type GetChatsRequest_Direction int32 const ( @@ -54,11 +155,11 @@ func (x GetChatsRequest_Direction) String() string { } func (GetChatsRequest_Direction) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[0].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[2].Descriptor() } func (GetChatsRequest_Direction) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[0] + return &file_chat_v2_chat_service_proto_enumTypes[2] } func (x GetChatsRequest_Direction) Number() protoreflect.EnumNumber { @@ -100,11 +201,11 @@ func (x GetChatsResponse_Result) String() string { } func (GetChatsResponse_Result) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[1].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[3].Descriptor() } func (GetChatsResponse_Result) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[1] + return &file_chat_v2_chat_service_proto_enumTypes[3] } func (x GetChatsResponse_Result) Number() protoreflect.EnumNumber { @@ -146,11 +247,11 @@ func (x GetMessagesRequest_Direction) String() string { } func (GetMessagesRequest_Direction) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[2].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[4].Descriptor() } func (GetMessagesRequest_Direction) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[2] + return &file_chat_v2_chat_service_proto_enumTypes[4] } func (x GetMessagesRequest_Direction) Number() protoreflect.EnumNumber { @@ -198,11 +299,11 @@ func (x GetMessagesResponse_Result) String() string { } func (GetMessagesResponse_Result) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[3].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[5].Descriptor() } func (GetMessagesResponse_Result) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[3] + return &file_chat_v2_chat_service_proto_enumTypes[5] } func (x GetMessagesResponse_Result) Number() protoreflect.EnumNumber { @@ -244,11 +345,11 @@ func (x ChatStreamEventError_Code) String() string { } func (ChatStreamEventError_Code) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[4].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[6].Descriptor() } func (ChatStreamEventError_Code) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[4] + return &file_chat_v2_chat_service_proto_enumTypes[6] } func (x ChatStreamEventError_Code) Number() protoreflect.EnumNumber { @@ -260,6 +361,55 @@ func (ChatStreamEventError_Code) EnumDescriptor() ([]byte, []int) { return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{7, 0} } +type StartChatResponse_Result int32 + +const ( + StartChatResponse_OK StartChatResponse_Result = 0 + StartChatResponse_DENIED StartChatResponse_Result = 1 + StartChatResponse_INVALID_PARAMETER StartChatResponse_Result = 2 +) + +// Enum value maps for StartChatResponse_Result. +var ( + StartChatResponse_Result_name = map[int32]string{ + 0: "OK", + 1: "DENIED", + 2: "INVALID_PARAMETER", + } + StartChatResponse_Result_value = map[string]int32{ + "OK": 0, + "DENIED": 1, + "INVALID_PARAMETER": 2, + } +) + +func (x StartChatResponse_Result) Enum() *StartChatResponse_Result { + p := new(StartChatResponse_Result) + *p = x + return p +} + +func (x StartChatResponse_Result) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (StartChatResponse_Result) Descriptor() protoreflect.EnumDescriptor { + return file_chat_v2_chat_service_proto_enumTypes[7].Descriptor() +} + +func (StartChatResponse_Result) Type() protoreflect.EnumType { + return &file_chat_v2_chat_service_proto_enumTypes[7] +} + +func (x StartChatResponse_Result) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use StartChatResponse_Result.Descriptor instead. +func (StartChatResponse_Result) EnumDescriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{12, 0} +} + type SendMessageResponse_Result int32 const ( @@ -299,11 +449,11 @@ func (x SendMessageResponse_Result) String() string { } func (SendMessageResponse_Result) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[5].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[8].Descriptor() } func (SendMessageResponse_Result) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[5] + return &file_chat_v2_chat_service_proto_enumTypes[8] } func (x SendMessageResponse_Result) Number() protoreflect.EnumNumber { @@ -312,7 +462,7 @@ func (x SendMessageResponse_Result) Number() protoreflect.EnumNumber { // Deprecated: Use SendMessageResponse_Result.Descriptor instead. func (SendMessageResponse_Result) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{11, 0} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{14, 0} } type AdvancePointerResponse_Result int32 @@ -354,11 +504,11 @@ func (x AdvancePointerResponse_Result) String() string { } func (AdvancePointerResponse_Result) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[6].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[9].Descriptor() } func (AdvancePointerResponse_Result) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[6] + return &file_chat_v2_chat_service_proto_enumTypes[9] } func (x AdvancePointerResponse_Result) Number() protoreflect.EnumNumber { @@ -367,7 +517,7 @@ func (x AdvancePointerResponse_Result) Number() protoreflect.EnumNumber { // Deprecated: Use AdvancePointerResponse_Result.Descriptor instead. func (AdvancePointerResponse_Result) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{13, 0} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{16, 0} } type SetMuteStateResponse_Result int32 @@ -406,11 +556,11 @@ func (x SetMuteStateResponse_Result) String() string { } func (SetMuteStateResponse_Result) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[7].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[10].Descriptor() } func (SetMuteStateResponse_Result) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[7] + return &file_chat_v2_chat_service_proto_enumTypes[10] } func (x SetMuteStateResponse_Result) Number() protoreflect.EnumNumber { @@ -419,7 +569,7 @@ func (x SetMuteStateResponse_Result) Number() protoreflect.EnumNumber { // Deprecated: Use SetMuteStateResponse_Result.Descriptor instead. func (SetMuteStateResponse_Result) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{15, 0} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{18, 0} } type SetSubscriptionStateResponse_Result int32 @@ -458,11 +608,11 @@ func (x SetSubscriptionStateResponse_Result) String() string { } func (SetSubscriptionStateResponse_Result) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[8].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[11].Descriptor() } func (SetSubscriptionStateResponse_Result) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[8] + return &file_chat_v2_chat_service_proto_enumTypes[11] } func (x SetSubscriptionStateResponse_Result) Number() protoreflect.EnumNumber { @@ -471,56 +621,7 @@ func (x SetSubscriptionStateResponse_Result) Number() protoreflect.EnumNumber { // Deprecated: Use SetSubscriptionStateResponse_Result.Descriptor instead. func (SetSubscriptionStateResponse_Result) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{17, 0} -} - -type ChatMetadata_Kind int32 - -const ( - ChatMetadata_UNKNOWN ChatMetadata_Kind = 0 - ChatMetadata_NOTIFICATION ChatMetadata_Kind = 1 - ChatMetadata_TWO_WAY ChatMetadata_Kind = 2 // GROUP = 3; -) - -// Enum value maps for ChatMetadata_Kind. -var ( - ChatMetadata_Kind_name = map[int32]string{ - 0: "UNKNOWN", - 1: "NOTIFICATION", - 2: "TWO_WAY", - } - ChatMetadata_Kind_value = map[string]int32{ - "UNKNOWN": 0, - "NOTIFICATION": 1, - "TWO_WAY": 2, - } -) - -func (x ChatMetadata_Kind) Enum() *ChatMetadata_Kind { - p := new(ChatMetadata_Kind) - *p = x - return p -} - -func (x ChatMetadata_Kind) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ChatMetadata_Kind) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[9].Descriptor() -} - -func (ChatMetadata_Kind) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[9] -} - -func (x ChatMetadata_Kind) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ChatMetadata_Kind.Descriptor instead. -func (ChatMetadata_Kind) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{21, 0} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{20, 0} } type ChatMemberIdentity_Platform int32 @@ -553,11 +654,11 @@ func (x ChatMemberIdentity_Platform) String() string { } func (ChatMemberIdentity_Platform) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[10].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[12].Descriptor() } func (ChatMemberIdentity_Platform) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[10] + return &file_chat_v2_chat_service_proto_enumTypes[12] } func (x ChatMemberIdentity_Platform) Number() protoreflect.EnumNumber { @@ -566,59 +667,7 @@ func (x ChatMemberIdentity_Platform) Number() protoreflect.EnumNumber { // Deprecated: Use ChatMemberIdentity_Platform.Descriptor instead. func (ChatMemberIdentity_Platform) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{24, 0} -} - -type Pointer_Kind int32 - -const ( - Pointer_UNKNOWN Pointer_Kind = 0 - Pointer_SENT Pointer_Kind = 1 // Always inferred by OK result in SendMessageResponse or message presence in a chat - Pointer_DELIVERED Pointer_Kind = 2 - Pointer_READ Pointer_Kind = 3 -) - -// Enum value maps for Pointer_Kind. -var ( - Pointer_Kind_name = map[int32]string{ - 0: "UNKNOWN", - 1: "SENT", - 2: "DELIVERED", - 3: "READ", - } - Pointer_Kind_value = map[string]int32{ - "UNKNOWN": 0, - "SENT": 1, - "DELIVERED": 2, - "READ": 3, - } -) - -func (x Pointer_Kind) Enum() *Pointer_Kind { - p := new(Pointer_Kind) - *p = x - return p -} - -func (x Pointer_Kind) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (Pointer_Kind) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[11].Descriptor() -} - -func (Pointer_Kind) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[11] -} - -func (x Pointer_Kind) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use Pointer_Kind.Descriptor instead. -func (Pointer_Kind) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{25, 0} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{27, 0} } type ExchangeDataContent_Verb int32 @@ -681,11 +730,11 @@ func (x ExchangeDataContent_Verb) String() string { } func (ExchangeDataContent_Verb) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[12].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[13].Descriptor() } func (ExchangeDataContent_Verb) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[12] + return &file_chat_v2_chat_service_proto_enumTypes[13] } func (x ExchangeDataContent_Verb) Number() protoreflect.EnumNumber { @@ -694,7 +743,7 @@ func (x ExchangeDataContent_Verb) Number() protoreflect.EnumNumber { // Deprecated: Use ExchangeDataContent_Verb.Descriptor instead. func (ExchangeDataContent_Verb) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{29, 0} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{32, 0} } type GetChatsRequest struct { @@ -1403,6 +1452,194 @@ func (*StreamChatEventsResponse_Ping) isStreamChatEventsResponse_Type() {} func (*StreamChatEventsResponse_Error) isStreamChatEventsResponse_Type() {} +type StartChatRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Owner *v1.SolanaAccountId `protobuf:"bytes,1,opt,name=owner,proto3" json:"owner,omitempty"` + Signature *v1.Signature `protobuf:"bytes,2,opt,name=signature,proto3" json:"signature,omitempty"` + // Types that are assignable to Parameters: + // + // *StartChatRequest_TipChat + Parameters isStartChatRequest_Parameters `protobuf_oneof:"parameters"` +} + +func (x *StartChatRequest) Reset() { + *x = StartChatRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StartChatRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StartChatRequest) ProtoMessage() {} + +func (x *StartChatRequest) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[10] + 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 StartChatRequest.ProtoReflect.Descriptor instead. +func (*StartChatRequest) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{10} +} + +func (x *StartChatRequest) GetOwner() *v1.SolanaAccountId { + if x != nil { + return x.Owner + } + return nil +} + +func (x *StartChatRequest) GetSignature() *v1.Signature { + if x != nil { + return x.Signature + } + return nil +} + +func (m *StartChatRequest) GetParameters() isStartChatRequest_Parameters { + if m != nil { + return m.Parameters + } + return nil +} + +func (x *StartChatRequest) GetTipChat() *StartTipChatParameters { + if x, ok := x.GetParameters().(*StartChatRequest_TipChat); ok { + return x.TipChat + } + return nil +} + +type isStartChatRequest_Parameters interface { + isStartChatRequest_Parameters() +} + +type StartChatRequest_TipChat struct { + TipChat *StartTipChatParameters `protobuf:"bytes,3,opt,name=tip_chat,json=tipChat,proto3,oneof"` // GroupChatParameters group_chat = 4; +} + +func (*StartChatRequest_TipChat) isStartChatRequest_Parameters() {} + +// Starts a two-way chat between a tipper and tippee. Chat members are +// inferred from the 12 word public keys +type StartTipChatParameters struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + IntentId *v1.IntentId `protobuf:"bytes,1,opt,name=intent_id,json=intentId,proto3" json:"intent_id,omitempty"` +} + +func (x *StartTipChatParameters) Reset() { + *x = StartTipChatParameters{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StartTipChatParameters) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StartTipChatParameters) ProtoMessage() {} + +func (x *StartTipChatParameters) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_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 StartTipChatParameters.ProtoReflect.Descriptor instead. +func (*StartTipChatParameters) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{11} +} + +func (x *StartTipChatParameters) GetIntentId() *v1.IntentId { + if x != nil { + return x.IntentId + } + return nil +} + +type StartChatResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Result StartChatResponse_Result `protobuf:"varint,1,opt,name=result,proto3,enum=code.chat.v2.StartChatResponse_Result" json:"result,omitempty"` + // The chat to use if the RPC was successful + Chat *ChatMetadata `protobuf:"bytes,2,opt,name=chat,proto3" json:"chat,omitempty"` +} + +func (x *StartChatResponse) Reset() { + *x = StartChatResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StartChatResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StartChatResponse) ProtoMessage() {} + +func (x *StartChatResponse) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_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 StartChatResponse.ProtoReflect.Descriptor instead. +func (*StartChatResponse) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{12} +} + +func (x *StartChatResponse) GetResult() StartChatResponse_Result { + if x != nil { + return x.Result + } + return StartChatResponse_OK +} + +func (x *StartChatResponse) GetChat() *ChatMetadata { + if x != nil { + return x.Chat + } + return nil +} + type SendMessageRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1418,7 +1655,7 @@ type SendMessageRequest struct { func (x *SendMessageRequest) Reset() { *x = SendMessageRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[10] + mi := &file_chat_v2_chat_service_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1431,7 +1668,7 @@ func (x *SendMessageRequest) String() string { func (*SendMessageRequest) ProtoMessage() {} func (x *SendMessageRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[10] + mi := &file_chat_v2_chat_service_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1444,7 +1681,7 @@ func (x *SendMessageRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SendMessageRequest.ProtoReflect.Descriptor instead. func (*SendMessageRequest) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{10} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{13} } func (x *SendMessageRequest) GetChatId() *ChatId { @@ -1488,15 +1725,15 @@ type SendMessageResponse struct { unknownFields protoimpl.UnknownFields Result SendMessageResponse_Result `protobuf:"varint,1,opt,name=result,proto3,enum=code.chat.v2.SendMessageResponse_Result" json:"result,omitempty"` - // The chat message that was sent, which includes server-side metadata like - // the generated message ID and official timestamp + // The chat message that was sent if the RPC was succesful, which includes + // server-side metadata like the generated message ID and official timestamp Message *ChatMessage `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` } func (x *SendMessageResponse) Reset() { *x = SendMessageResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[11] + mi := &file_chat_v2_chat_service_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1509,7 +1746,7 @@ func (x *SendMessageResponse) String() string { func (*SendMessageResponse) ProtoMessage() {} func (x *SendMessageResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[11] + mi := &file_chat_v2_chat_service_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1522,7 +1759,7 @@ func (x *SendMessageResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SendMessageResponse.ProtoReflect.Descriptor instead. func (*SendMessageResponse) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{11} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{14} } func (x *SendMessageResponse) GetResult() SendMessageResponse_Result { @@ -1553,7 +1790,7 @@ type AdvancePointerRequest struct { func (x *AdvancePointerRequest) Reset() { *x = AdvancePointerRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[12] + mi := &file_chat_v2_chat_service_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1566,7 +1803,7 @@ func (x *AdvancePointerRequest) String() string { func (*AdvancePointerRequest) ProtoMessage() {} func (x *AdvancePointerRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[12] + mi := &file_chat_v2_chat_service_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1579,7 +1816,7 @@ func (x *AdvancePointerRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use AdvancePointerRequest.ProtoReflect.Descriptor instead. func (*AdvancePointerRequest) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{12} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{15} } func (x *AdvancePointerRequest) GetChatId() *ChatId { @@ -1621,7 +1858,7 @@ type AdvancePointerResponse struct { func (x *AdvancePointerResponse) Reset() { *x = AdvancePointerResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[13] + mi := &file_chat_v2_chat_service_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1634,7 +1871,7 @@ func (x *AdvancePointerResponse) String() string { func (*AdvancePointerResponse) ProtoMessage() {} func (x *AdvancePointerResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[13] + mi := &file_chat_v2_chat_service_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1647,7 +1884,7 @@ func (x *AdvancePointerResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use AdvancePointerResponse.ProtoReflect.Descriptor instead. func (*AdvancePointerResponse) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{13} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{16} } func (x *AdvancePointerResponse) GetResult() AdvancePointerResponse_Result { @@ -1672,7 +1909,7 @@ type SetMuteStateRequest struct { func (x *SetMuteStateRequest) Reset() { *x = SetMuteStateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[14] + mi := &file_chat_v2_chat_service_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1685,7 +1922,7 @@ func (x *SetMuteStateRequest) String() string { func (*SetMuteStateRequest) ProtoMessage() {} func (x *SetMuteStateRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[14] + mi := &file_chat_v2_chat_service_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1698,7 +1935,7 @@ func (x *SetMuteStateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetMuteStateRequest.ProtoReflect.Descriptor instead. func (*SetMuteStateRequest) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{14} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{17} } func (x *SetMuteStateRequest) GetChatId() *ChatId { @@ -1747,7 +1984,7 @@ type SetMuteStateResponse struct { func (x *SetMuteStateResponse) Reset() { *x = SetMuteStateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[15] + mi := &file_chat_v2_chat_service_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1760,7 +1997,7 @@ func (x *SetMuteStateResponse) String() string { func (*SetMuteStateResponse) ProtoMessage() {} func (x *SetMuteStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[15] + mi := &file_chat_v2_chat_service_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1773,7 +2010,7 @@ func (x *SetMuteStateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SetMuteStateResponse.ProtoReflect.Descriptor instead. func (*SetMuteStateResponse) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{15} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{18} } func (x *SetMuteStateResponse) GetResult() SetMuteStateResponse_Result { @@ -1798,7 +2035,7 @@ type SetSubscriptionStateRequest struct { func (x *SetSubscriptionStateRequest) Reset() { *x = SetSubscriptionStateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[16] + mi := &file_chat_v2_chat_service_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1811,7 +2048,7 @@ func (x *SetSubscriptionStateRequest) String() string { func (*SetSubscriptionStateRequest) ProtoMessage() {} func (x *SetSubscriptionStateRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[16] + mi := &file_chat_v2_chat_service_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1824,7 +2061,7 @@ func (x *SetSubscriptionStateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetSubscriptionStateRequest.ProtoReflect.Descriptor instead. func (*SetSubscriptionStateRequest) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{16} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{19} } func (x *SetSubscriptionStateRequest) GetChatId() *ChatId { @@ -1873,7 +2110,7 @@ type SetSubscriptionStateResponse struct { func (x *SetSubscriptionStateResponse) Reset() { *x = SetSubscriptionStateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[17] + mi := &file_chat_v2_chat_service_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1886,7 +2123,7 @@ func (x *SetSubscriptionStateResponse) String() string { func (*SetSubscriptionStateResponse) ProtoMessage() {} func (x *SetSubscriptionStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[17] + mi := &file_chat_v2_chat_service_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1899,7 +2136,7 @@ func (x *SetSubscriptionStateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SetSubscriptionStateResponse.ProtoReflect.Descriptor instead. func (*SetSubscriptionStateResponse) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{17} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{20} } func (x *SetSubscriptionStateResponse) GetResult() SetSubscriptionStateResponse_Result { @@ -1920,7 +2157,7 @@ type ChatId struct { func (x *ChatId) Reset() { *x = ChatId{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[18] + mi := &file_chat_v2_chat_service_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1933,7 +2170,7 @@ func (x *ChatId) String() string { func (*ChatId) ProtoMessage() {} func (x *ChatId) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[18] + mi := &file_chat_v2_chat_service_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1946,7 +2183,7 @@ func (x *ChatId) ProtoReflect() protoreflect.Message { // Deprecated: Use ChatId.ProtoReflect.Descriptor instead. func (*ChatId) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{18} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{21} } func (x *ChatId) GetValue() []byte { @@ -1969,7 +2206,7 @@ type ChatMessageId struct { func (x *ChatMessageId) Reset() { *x = ChatMessageId{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[19] + mi := &file_chat_v2_chat_service_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1982,7 +2219,7 @@ func (x *ChatMessageId) String() string { func (*ChatMessageId) ProtoMessage() {} func (x *ChatMessageId) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[19] + mi := &file_chat_v2_chat_service_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1995,7 +2232,7 @@ func (x *ChatMessageId) ProtoReflect() protoreflect.Message { // Deprecated: Use ChatMessageId.ProtoReflect.Descriptor instead. func (*ChatMessageId) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{19} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{22} } func (x *ChatMessageId) GetValue() []byte { @@ -2017,7 +2254,7 @@ type ChatMemberId struct { func (x *ChatMemberId) Reset() { *x = ChatMemberId{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[20] + mi := &file_chat_v2_chat_service_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2030,7 +2267,7 @@ func (x *ChatMemberId) String() string { func (*ChatMemberId) ProtoMessage() {} func (x *ChatMemberId) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[20] + mi := &file_chat_v2_chat_service_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2043,7 +2280,7 @@ func (x *ChatMemberId) ProtoReflect() protoreflect.Message { // Deprecated: Use ChatMemberId.ProtoReflect.Descriptor instead. func (*ChatMemberId) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{20} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{23} } func (x *ChatMemberId) GetValue() []byte { @@ -2062,7 +2299,7 @@ type ChatMetadata struct { // Globally unique ID for this chat ChatId *ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` // The type of chat - Kind ChatMetadata_Kind `protobuf:"varint,2,opt,name=kind,proto3,enum=code.chat.v2.ChatMetadata_Kind" json:"kind,omitempty"` + Kind ChatType `protobuf:"varint,2,opt,name=kind,proto3,enum=code.chat.v2.ChatType" json:"kind,omitempty"` // The chat title, which will be localized by server when applicable Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"` // The members in this chat @@ -2092,7 +2329,7 @@ type ChatMetadata struct { func (x *ChatMetadata) Reset() { *x = ChatMetadata{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[21] + mi := &file_chat_v2_chat_service_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2105,7 +2342,7 @@ func (x *ChatMetadata) String() string { func (*ChatMetadata) ProtoMessage() {} func (x *ChatMetadata) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[21] + mi := &file_chat_v2_chat_service_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2118,7 +2355,7 @@ func (x *ChatMetadata) ProtoReflect() protoreflect.Message { // Deprecated: Use ChatMetadata.ProtoReflect.Descriptor instead. func (*ChatMetadata) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{21} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{24} } func (x *ChatMetadata) GetChatId() *ChatId { @@ -2128,11 +2365,11 @@ func (x *ChatMetadata) GetChatId() *ChatId { return nil } -func (x *ChatMetadata) GetKind() ChatMetadata_Kind { +func (x *ChatMetadata) GetKind() ChatType { if x != nil { return x.Kind } - return ChatMetadata_UNKNOWN + return ChatType_UNKNOWN_CHAT_TYPE } func (x *ChatMetadata) GetTitle() string { @@ -2213,7 +2450,7 @@ type ChatMessage struct { func (x *ChatMessage) Reset() { *x = ChatMessage{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[22] + mi := &file_chat_v2_chat_service_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2226,7 +2463,7 @@ func (x *ChatMessage) String() string { func (*ChatMessage) ProtoMessage() {} func (x *ChatMessage) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[22] + mi := &file_chat_v2_chat_service_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2239,7 +2476,7 @@ func (x *ChatMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use ChatMessage.ProtoReflect.Descriptor instead. func (*ChatMessage) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{22} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{25} } func (x *ChatMessage) GetMessageId() *ChatMessageId { @@ -2298,7 +2535,7 @@ type ChatMember struct { func (x *ChatMember) Reset() { *x = ChatMember{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[23] + mi := &file_chat_v2_chat_service_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2311,7 +2548,7 @@ func (x *ChatMember) String() string { func (*ChatMember) ProtoMessage() {} func (x *ChatMember) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[23] + mi := &file_chat_v2_chat_service_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2324,7 +2561,7 @@ func (x *ChatMember) ProtoReflect() protoreflect.Message { // Deprecated: Use ChatMember.ProtoReflect.Descriptor instead. func (*ChatMember) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{23} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{26} } func (x *ChatMember) GetMemberId() *ChatMemberId { @@ -2369,7 +2606,7 @@ type ChatMemberIdentity struct { func (x *ChatMemberIdentity) Reset() { *x = ChatMemberIdentity{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[24] + mi := &file_chat_v2_chat_service_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2382,7 +2619,7 @@ func (x *ChatMemberIdentity) String() string { func (*ChatMemberIdentity) ProtoMessage() {} func (x *ChatMemberIdentity) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[24] + mi := &file_chat_v2_chat_service_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2395,7 +2632,7 @@ func (x *ChatMemberIdentity) ProtoReflect() protoreflect.Message { // Deprecated: Use ChatMemberIdentity.ProtoReflect.Descriptor instead. func (*ChatMemberIdentity) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{24} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{27} } func (x *ChatMemberIdentity) GetPlatform() ChatMemberIdentity_Platform { @@ -2418,7 +2655,7 @@ type Pointer struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Kind Pointer_Kind `protobuf:"varint,1,opt,name=kind,proto3,enum=code.chat.v2.Pointer_Kind" json:"kind,omitempty"` + Kind PointerType `protobuf:"varint,1,opt,name=kind,proto3,enum=code.chat.v2.PointerType" json:"kind,omitempty"` // Everything at or before this message ID is considered to have the state // inferred by the type of pointer. Value *ChatMessageId `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` @@ -2429,7 +2666,7 @@ type Pointer struct { func (x *Pointer) Reset() { *x = Pointer{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[25] + mi := &file_chat_v2_chat_service_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2442,7 +2679,7 @@ func (x *Pointer) String() string { func (*Pointer) ProtoMessage() {} func (x *Pointer) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[25] + mi := &file_chat_v2_chat_service_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2455,14 +2692,14 @@ func (x *Pointer) ProtoReflect() protoreflect.Message { // Deprecated: Use Pointer.ProtoReflect.Descriptor instead. func (*Pointer) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{25} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{28} } -func (x *Pointer) GetKind() Pointer_Kind { +func (x *Pointer) GetKind() PointerType { if x != nil { return x.Kind } - return Pointer_UNKNOWN + return PointerType_UNKNOWN_POINTER_TYPE } func (x *Pointer) GetValue() *ChatMessageId { @@ -2498,7 +2735,7 @@ type Content struct { func (x *Content) Reset() { *x = Content{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[26] + mi := &file_chat_v2_chat_service_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2511,7 +2748,7 @@ func (x *Content) String() string { func (*Content) ProtoMessage() {} func (x *Content) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[26] + mi := &file_chat_v2_chat_service_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2524,7 +2761,7 @@ func (x *Content) ProtoReflect() protoreflect.Message { // Deprecated: Use Content.ProtoReflect.Descriptor instead. func (*Content) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{26} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{29} } func (m *Content) GetType() isContent_Type { @@ -2615,7 +2852,7 @@ type TextContent struct { func (x *TextContent) Reset() { *x = TextContent{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[27] + mi := &file_chat_v2_chat_service_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2628,7 +2865,7 @@ func (x *TextContent) String() string { func (*TextContent) ProtoMessage() {} func (x *TextContent) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[27] + mi := &file_chat_v2_chat_service_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2641,7 +2878,7 @@ func (x *TextContent) ProtoReflect() protoreflect.Message { // Deprecated: Use TextContent.ProtoReflect.Descriptor instead. func (*TextContent) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{27} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{30} } func (x *TextContent) GetText() string { @@ -2664,7 +2901,7 @@ type LocalizedContent struct { func (x *LocalizedContent) Reset() { *x = LocalizedContent{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[28] + mi := &file_chat_v2_chat_service_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2677,7 +2914,7 @@ func (x *LocalizedContent) String() string { func (*LocalizedContent) ProtoMessage() {} func (x *LocalizedContent) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[28] + mi := &file_chat_v2_chat_service_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2690,7 +2927,7 @@ func (x *LocalizedContent) ProtoReflect() protoreflect.Message { // Deprecated: Use LocalizedContent.ProtoReflect.Descriptor instead. func (*LocalizedContent) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{28} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{31} } func (x *LocalizedContent) GetKeyOrText() string { @@ -2732,7 +2969,7 @@ type ExchangeDataContent struct { func (x *ExchangeDataContent) Reset() { *x = ExchangeDataContent{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[29] + mi := &file_chat_v2_chat_service_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2745,7 +2982,7 @@ func (x *ExchangeDataContent) String() string { func (*ExchangeDataContent) ProtoMessage() {} func (x *ExchangeDataContent) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[29] + mi := &file_chat_v2_chat_service_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2758,7 +2995,7 @@ func (x *ExchangeDataContent) ProtoReflect() protoreflect.Message { // Deprecated: Use ExchangeDataContent.ProtoReflect.Descriptor instead. func (*ExchangeDataContent) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{29} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{32} } func (x *ExchangeDataContent) GetVerb() ExchangeDataContent_Verb { @@ -2856,7 +3093,7 @@ type NaclBoxEncryptedContent struct { func (x *NaclBoxEncryptedContent) Reset() { *x = NaclBoxEncryptedContent{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[30] + mi := &file_chat_v2_chat_service_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2869,7 +3106,7 @@ func (x *NaclBoxEncryptedContent) String() string { func (*NaclBoxEncryptedContent) ProtoMessage() {} func (x *NaclBoxEncryptedContent) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[30] + mi := &file_chat_v2_chat_service_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2882,7 +3119,7 @@ func (x *NaclBoxEncryptedContent) ProtoReflect() protoreflect.Message { // Deprecated: Use NaclBoxEncryptedContent.ProtoReflect.Descriptor instead. func (*NaclBoxEncryptedContent) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{30} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{33} } func (x *NaclBoxEncryptedContent) GetPeerPublicKey() *v1.SolanaAccountId { @@ -2918,7 +3155,7 @@ type ThankYouContent struct { func (x *ThankYouContent) Reset() { *x = ThankYouContent{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[31] + mi := &file_chat_v2_chat_service_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2931,7 +3168,7 @@ func (x *ThankYouContent) String() string { func (*ThankYouContent) ProtoMessage() {} func (x *ThankYouContent) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[31] + mi := &file_chat_v2_chat_service_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2944,7 +3181,7 @@ func (x *ThankYouContent) ProtoReflect() protoreflect.Message { // Deprecated: Use ThankYouContent.ProtoReflect.Descriptor instead. func (*ThankYouContent) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{31} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{34} } func (x *ThankYouContent) GetTipIntent() *v1.IntentId { @@ -2968,7 +3205,7 @@ type Cursor struct { func (x *Cursor) Reset() { *x = Cursor{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[32] + mi := &file_chat_v2_chat_service_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2981,7 +3218,7 @@ func (x *Cursor) String() string { func (*Cursor) ProtoMessage() {} func (x *Cursor) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[32] + mi := &file_chat_v2_chat_service_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2994,7 +3231,7 @@ func (x *Cursor) ProtoReflect() protoreflect.Message { // Deprecated: Use Cursor.ProtoReflect.Descriptor instead. func (*Cursor) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{32} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{35} } func (x *Cursor) GetValue() []byte { @@ -3158,176 +3395,205 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x42, 0x0d, - 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xdb, 0x02, - 0x0a, 0x12, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xf2, 0x01, + 0x0a, 0x10, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, + 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, + 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x12, 0x41, 0x0a, 0x08, 0x74, 0x69, + 0x70, 0x5f, 0x63, 0x68, 0x61, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x54, 0x69, 0x70, 0x43, 0x68, 0x61, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, + 0x72, 0x73, 0x48, 0x00, 0x52, 0x07, 0x74, 0x69, 0x70, 0x43, 0x68, 0x61, 0x74, 0x42, 0x13, 0x0a, + 0x0a, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x05, 0xb8, 0xe9, 0xc0, + 0x03, 0x01, 0x22, 0x5b, 0x0a, 0x16, 0x53, 0x74, 0x61, 0x72, 0x74, 0x54, 0x69, 0x70, 0x43, 0x68, + 0x61, 0x74, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74, 0x65, 0x72, 0x73, 0x12, 0x41, 0x0a, 0x09, + 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x22, + 0xb8, 0x01, 0x0a, 0x11, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x63, 0x68, 0x61, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x52, + 0x04, 0x63, 0x68, 0x61, 0x74, 0x22, 0x33, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, + 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, + 0x44, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x50, + 0x41, 0x52, 0x41, 0x4d, 0x45, 0x54, 0x45, 0x52, 0x10, 0x02, 0x22, 0xdb, 0x02, 0x0a, 0x12, 0x53, + 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, + 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, + 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, + 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x01, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, + 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, + 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xef, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x6e, + 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x40, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x28, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x07, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x61, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, + 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, + 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x4e, 0x56, + 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x03, + 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x43, 0x4f, 0x4e, 0x54, + 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x04, 0x22, 0x97, 0x02, 0x0a, 0x15, 0x41, + 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, - 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, - 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, - 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, - 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x01, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, - 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, - 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xef, 0x01, 0x0a, 0x13, - 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x28, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x61, 0x0a, 0x06, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, - 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, - 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, - 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x43, - 0x4f, 0x4e, 0x54, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x04, 0x22, 0x97, 0x02, - 0x0a, 0x15, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, - 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, - 0x49, 0x64, 0x12, 0x3b, 0x0a, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, - 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, - 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, - 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, - 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xc0, 0x01, 0x0a, 0x16, 0x41, 0x64, 0x76, 0x61, - 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, - 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x61, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, - 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, - 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x45, 0x53, - 0x53, 0x41, 0x47, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x03, - 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x50, 0x4f, 0x49, 0x4e, - 0x54, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x04, 0x22, 0xb8, 0x02, 0x0a, 0x13, 0x53, - 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, - 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, - 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, - 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x41, 0x0a, - 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, - 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, - 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, - 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, - 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x9a, 0x01, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, - 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, - 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x22, 0x3f, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, - 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, - 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, - 0x44, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x4d, 0x55, 0x54, 0x45, - 0x10, 0x03, 0x22, 0xca, 0x02, 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, - 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, - 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, - 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x62, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, - 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, - 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, - 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, - 0xb1, 0x01, 0x0a, 0x1c, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x49, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x31, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x46, 0x0a, 0x06, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, - 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, - 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x14, 0x0a, - 0x10, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, - 0x45, 0x10, 0x03, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, - 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x20, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0x32, 0x0a, 0x0d, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, + 0x3b, 0x0a, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, + 0x02, 0x10, 0x01, 0x52, 0x07, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x41, 0x0a, 0x05, + 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, + 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, + 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, + 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, + 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x22, 0xc0, 0x01, 0x0a, 0x16, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x43, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x2b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, + 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x22, 0x61, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, + 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, + 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, + 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, + 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x03, 0x12, 0x18, 0x0a, + 0x14, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x04, 0x22, 0xb8, 0x02, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x4d, + 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, + 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, + 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, + 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, + 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, + 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, + 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x22, 0x9a, 0x01, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, + 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x3f, + 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, + 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, + 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, + 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x4d, 0x55, 0x54, 0x45, 0x10, 0x03, 0x22, + 0xca, 0x02, 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, + 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, + 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, + 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x62, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, + 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, + 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, + 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xb1, 0x01, 0x0a, + 0x1c, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, + 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, + 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x46, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, + 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, + 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, + 0x4e, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x10, 0x03, + 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, + 0x7a, 0x04, 0x10, 0x20, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x32, 0x0a, + 0x0d, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x21, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, + 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x22, 0x31, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x22, 0x31, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xf5, 0x03, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, - 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, - 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, - 0x74, 0x49, 0x64, 0x12, 0x3f, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x4b, 0x69, - 0x6e, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, - 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x22, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, - 0x08, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, - 0x02, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, - 0x6d, 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, - 0x6e, 0x75, 0x6d, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x61, 0x6e, - 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x61, 0x6e, - 0x4d, 0x75, 0x74, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, - 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, - 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x6e, 0x5f, 0x75, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x62, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x63, 0x61, 0x6e, 0x55, 0x6e, 0x73, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x73, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x12, 0x2c, 0x0a, - 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, - 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0x32, 0x0a, 0x04, 0x4b, - 0x69, 0x6e, 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, - 0x12, 0x10, 0x0a, 0x0c, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, - 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x4f, 0x5f, 0x57, 0x41, 0x59, 0x10, 0x02, 0x22, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0xb8, 0x03, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x74, + 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, + 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, + 0x12, 0x36, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, + 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, + 0x20, 0x00, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x22, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, + 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x40, 0x0a, 0x07, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, + 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, + 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x1d, + 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x19, 0x0a, + 0x08, 0x63, 0x61, 0x6e, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x07, 0x63, 0x61, 0x6e, 0x4d, 0x75, 0x74, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, + 0x75, 0x74, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, + 0x74, 0x65, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x6e, 0x5f, 0x75, 0x6e, 0x73, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x63, 0x61, + 0x6e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x23, 0x0a, 0x0d, + 0x69, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, + 0x64, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xb3, 0x02, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x46, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, @@ -3374,156 +3640,166 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x24, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x49, 0x54, 0x54, 0x45, 0x52, 0x10, 0x01, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, - 0x22, 0x81, 0x02, 0x0a, 0x07, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x3a, 0x0a, 0x04, - 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, + 0x22, 0xc8, 0x01, 0x0a, 0x07, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x04, + 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x2e, 0x4b, 0x69, 0x6e, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, - 0x20, 0x00, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x3d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, - 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x22, 0x36, 0x0a, 0x04, - 0x4b, 0x69, 0x6e, 0x64, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, - 0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x44, - 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, 0x44, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x52, 0x45, - 0x41, 0x44, 0x10, 0x03, 0x22, 0xd5, 0x02, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x12, 0x2f, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x65, - 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x04, 0x74, 0x65, 0x78, - 0x74, 0x12, 0x3e, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, - 0x64, 0x12, 0x48, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, - 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x65, - 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x42, 0x0a, 0x08, 0x6e, - 0x61, 0x63, 0x6c, 0x5f, 0x62, 0x6f, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x63, - 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x6e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x12, - 0x3c, 0x0a, 0x09, 0x74, 0x68, 0x61, 0x6e, 0x6b, 0x5f, 0x79, 0x6f, 0x75, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x54, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x48, 0x00, 0x52, 0x08, 0x74, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x42, 0x0d, 0x0a, - 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x2f, 0x0a, 0x0b, - 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x04, 0x74, - 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, - 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x40, 0x0a, - 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x12, 0x2c, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x72, 0x5f, 0x74, 0x65, 0x78, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, - 0x01, 0x18, 0x80, 0x08, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x4f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x22, - 0xa4, 0x04, 0x0a, 0x13, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x42, 0x0a, 0xba, - 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, 0x12, - 0x39, 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x48, 0x00, 0x52, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, 0x07, 0x70, 0x61, - 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, - 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x57, 0x69, - 0x74, 0x68, 0x6f, 0x75, 0x74, 0x52, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, 0x61, 0x72, - 0x74, 0x69, 0x61, 0x6c, 0x12, 0x32, 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, - 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x48, 0x01, - 0x52, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x22, 0xa4, 0x01, 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, 0x0b, 0x0a, 0x07, - 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x47, 0x41, 0x56, - 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x10, - 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x45, 0x57, 0x10, 0x03, 0x12, - 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x08, - 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x54, 0x55, - 0x52, 0x4e, 0x45, 0x44, 0x10, 0x06, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, 0x4e, 0x54, 0x10, - 0x07, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x41, 0x49, 0x44, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x50, - 0x55, 0x52, 0x43, 0x48, 0x41, 0x53, 0x45, 0x44, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x45, - 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0a, 0x12, 0x0c, 0x0a, 0x08, - 0x53, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0b, 0x42, 0x16, 0x0a, 0x0d, 0x65, 0x78, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x12, 0x05, 0xb8, 0xe9, 0xc0, - 0x03, 0x01, 0x42, 0x12, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, - 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xcc, 0x01, 0x0a, 0x17, 0x4e, 0x61, 0x63, 0x6c, 0x42, - 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, - 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, - 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x70, 0x65, 0x65, 0x72, 0x50, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, - 0x18, 0x18, 0x18, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x11, 0x65, 0x6e, - 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, 0x05, 0x10, 0x01, - 0x18, 0x80, 0x08, 0x52, 0x10, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x62, 0x0a, 0x0f, 0x54, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, - 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x0a, 0x74, 0x69, 0x70, 0x5f, - 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x09, 0x74, 0x69, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4a, 0x04, 0x08, - 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, - 0x73, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x08, 0x18, 0x20, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x32, 0x83, 0x05, 0x0a, 0x04, 0x43, 0x68, 0x61, 0x74, 0x12, - 0x49, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x12, 0x1d, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, - 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, - 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x47, 0x65, - 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, - 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, - 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x52, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x41, 0x64, 0x76, - 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x23, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, - 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x72, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, + 0x00, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x3d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, + 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x22, 0xd5, 0x02, 0x0a, 0x07, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x48, 0x00, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3e, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, + 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x6c, + 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x12, 0x42, 0x0a, 0x08, 0x6e, 0x61, 0x63, 0x6c, 0x5f, 0x62, 0x6f, 0x78, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, + 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x6e, + 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x12, 0x3c, 0x0a, 0x09, 0x74, 0x68, 0x61, 0x6e, 0x6b, 0x5f, + 0x79, 0x6f, 0x75, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, + 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x08, 0x74, 0x68, 0x61, 0x6e, + 0x6b, 0x59, 0x6f, 0x75, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, + 0xc0, 0x03, 0x01, 0x22, 0x2f, 0x0a, 0x0b, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x04, + 0x74, 0x65, 0x78, 0x74, 0x22, 0x40, 0x0a, 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, + 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, + 0x6f, 0x72, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, + 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x09, 0x6b, 0x65, 0x79, + 0x4f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x22, 0xa4, 0x04, 0x0a, 0x13, 0x45, 0x78, 0x63, 0x68, 0x61, + 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x46, + 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, + 0x56, 0x65, 0x72, 0x62, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, + 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, 0x12, 0x39, 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x05, 0x65, 0x78, 0x61, 0x63, + 0x74, 0x12, 0x48, 0x0a, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x44, 0x61, 0x74, 0x61, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x52, 0x61, 0x74, 0x65, + 0x48, 0x00, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x32, 0x0a, 0x06, 0x69, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x49, 0x64, 0x48, 0x01, 0x52, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, + 0x39, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x01, 0x52, + 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xa4, 0x01, 0x0a, 0x04, 0x56, + 0x65, 0x72, 0x62, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, + 0x12, 0x08, 0x0a, 0x04, 0x47, 0x41, 0x56, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, + 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x57, 0x49, 0x54, 0x48, + 0x44, 0x52, 0x45, 0x57, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, + 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x05, 0x12, + 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x45, 0x44, 0x10, 0x06, 0x12, 0x09, 0x0a, + 0x05, 0x53, 0x50, 0x45, 0x4e, 0x54, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x41, 0x49, 0x44, + 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x55, 0x52, 0x43, 0x48, 0x41, 0x53, 0x45, 0x44, 0x10, + 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x5f, 0x54, 0x49, + 0x50, 0x10, 0x0a, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x49, 0x50, 0x10, + 0x0b, 0x42, 0x16, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, + 0x74, 0x61, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x42, 0x12, 0x0a, 0x09, 0x72, 0x65, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xcc, 0x01, + 0x0a, 0x17, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, + 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x0f, 0x70, 0x65, 0x65, + 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, + 0x0d, 0x70, 0x65, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x21, + 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, + 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x18, 0x18, 0x18, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, + 0x65, 0x12, 0x39, 0x0a, 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x70, + 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0c, 0xba, 0xe9, + 0xc0, 0x03, 0x07, 0x7a, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x10, 0x65, 0x6e, 0x63, 0x72, + 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x62, 0x0a, 0x0f, + 0x54, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, + 0x43, 0x0a, 0x0a, 0x74, 0x69, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, + 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, + 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x74, 0x69, 0x70, 0x49, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, + 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, + 0x7a, 0x04, 0x10, 0x08, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x40, 0x0a, + 0x08, 0x43, 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x55, 0x4e, 0x4b, + 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, + 0x12, 0x10, 0x0a, 0x0c, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, + 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x4f, 0x5f, 0x57, 0x41, 0x59, 0x10, 0x02, 0x2a, + 0x4a, 0x0a, 0x0b, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, + 0x0a, 0x14, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x45, + 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, + 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, 0x44, 0x10, + 0x02, 0x12, 0x08, 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, 0x03, 0x32, 0xd1, 0x05, 0x0a, 0x04, + 0x43, 0x68, 0x61, 0x74, 0x12, 0x49, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, + 0x12, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, + 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x52, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x20, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, + 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, + 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, + 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x4c, 0x0a, 0x09, 0x53, 0x74, + 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x12, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, + 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x23, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, + 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0c, 0x53, 0x65, 0x74, + 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, - 0x14, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, - 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x73, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, - 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, - 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2f, 0x76, 0x32, 0x3b, 0x63, 0x68, 0x61, 0x74, 0xa2, 0x02, 0x09, - 0x43, 0x50, 0x42, 0x43, 0x68, 0x61, 0x74, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x33, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, + 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x6d, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, + 0x6b, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, + 0x65, 0x6e, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, 0x79, 0x6d, + 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, + 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2f, 0x76, 0x32, 0x3b, 0x63, 0x68, 0x61, 0x74, + 0xa2, 0x02, 0x09, 0x43, 0x50, 0x42, 0x43, 0x68, 0x61, 0x74, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3538,161 +3814,173 @@ func file_chat_v2_chat_service_proto_rawDescGZIP() []byte { return file_chat_v2_chat_service_proto_rawDescData } -var file_chat_v2_chat_service_proto_enumTypes = make([]protoimpl.EnumInfo, 13) -var file_chat_v2_chat_service_proto_msgTypes = make([]protoimpl.MessageInfo, 33) +var file_chat_v2_chat_service_proto_enumTypes = make([]protoimpl.EnumInfo, 14) +var file_chat_v2_chat_service_proto_msgTypes = make([]protoimpl.MessageInfo, 36) var file_chat_v2_chat_service_proto_goTypes = []interface{}{ - (GetChatsRequest_Direction)(0), // 0: code.chat.v2.GetChatsRequest.Direction - (GetChatsResponse_Result)(0), // 1: code.chat.v2.GetChatsResponse.Result - (GetMessagesRequest_Direction)(0), // 2: code.chat.v2.GetMessagesRequest.Direction - (GetMessagesResponse_Result)(0), // 3: code.chat.v2.GetMessagesResponse.Result - (ChatStreamEventError_Code)(0), // 4: code.chat.v2.ChatStreamEventError.Code - (SendMessageResponse_Result)(0), // 5: code.chat.v2.SendMessageResponse.Result - (AdvancePointerResponse_Result)(0), // 6: code.chat.v2.AdvancePointerResponse.Result - (SetMuteStateResponse_Result)(0), // 7: code.chat.v2.SetMuteStateResponse.Result - (SetSubscriptionStateResponse_Result)(0), // 8: code.chat.v2.SetSubscriptionStateResponse.Result - (ChatMetadata_Kind)(0), // 9: code.chat.v2.ChatMetadata.Kind - (ChatMemberIdentity_Platform)(0), // 10: code.chat.v2.ChatMemberIdentity.Platform - (Pointer_Kind)(0), // 11: code.chat.v2.Pointer.Kind - (ExchangeDataContent_Verb)(0), // 12: code.chat.v2.ExchangeDataContent.Verb - (*GetChatsRequest)(nil), // 13: code.chat.v2.GetChatsRequest - (*GetChatsResponse)(nil), // 14: code.chat.v2.GetChatsResponse - (*GetMessagesRequest)(nil), // 15: code.chat.v2.GetMessagesRequest - (*GetMessagesResponse)(nil), // 16: code.chat.v2.GetMessagesResponse - (*OpenChatEventStream)(nil), // 17: code.chat.v2.OpenChatEventStream - (*ChatStreamEvent)(nil), // 18: code.chat.v2.ChatStreamEvent - (*ChatStreamEventBatch)(nil), // 19: code.chat.v2.ChatStreamEventBatch - (*ChatStreamEventError)(nil), // 20: code.chat.v2.ChatStreamEventError - (*StreamChatEventsRequest)(nil), // 21: code.chat.v2.StreamChatEventsRequest - (*StreamChatEventsResponse)(nil), // 22: code.chat.v2.StreamChatEventsResponse - (*SendMessageRequest)(nil), // 23: code.chat.v2.SendMessageRequest - (*SendMessageResponse)(nil), // 24: code.chat.v2.SendMessageResponse - (*AdvancePointerRequest)(nil), // 25: code.chat.v2.AdvancePointerRequest - (*AdvancePointerResponse)(nil), // 26: code.chat.v2.AdvancePointerResponse - (*SetMuteStateRequest)(nil), // 27: code.chat.v2.SetMuteStateRequest - (*SetMuteStateResponse)(nil), // 28: code.chat.v2.SetMuteStateResponse - (*SetSubscriptionStateRequest)(nil), // 29: code.chat.v2.SetSubscriptionStateRequest - (*SetSubscriptionStateResponse)(nil), // 30: code.chat.v2.SetSubscriptionStateResponse - (*ChatId)(nil), // 31: code.chat.v2.ChatId - (*ChatMessageId)(nil), // 32: code.chat.v2.ChatMessageId - (*ChatMemberId)(nil), // 33: code.chat.v2.ChatMemberId - (*ChatMetadata)(nil), // 34: code.chat.v2.ChatMetadata - (*ChatMessage)(nil), // 35: code.chat.v2.ChatMessage - (*ChatMember)(nil), // 36: code.chat.v2.ChatMember - (*ChatMemberIdentity)(nil), // 37: code.chat.v2.ChatMemberIdentity - (*Pointer)(nil), // 38: code.chat.v2.Pointer - (*Content)(nil), // 39: code.chat.v2.Content - (*TextContent)(nil), // 40: code.chat.v2.TextContent - (*LocalizedContent)(nil), // 41: code.chat.v2.LocalizedContent - (*ExchangeDataContent)(nil), // 42: code.chat.v2.ExchangeDataContent - (*NaclBoxEncryptedContent)(nil), // 43: code.chat.v2.NaclBoxEncryptedContent - (*ThankYouContent)(nil), // 44: code.chat.v2.ThankYouContent - (*Cursor)(nil), // 45: code.chat.v2.Cursor - (*v1.SolanaAccountId)(nil), // 46: code.common.v1.SolanaAccountId - (*v1.Signature)(nil), // 47: code.common.v1.Signature - (*v1.ClientPong)(nil), // 48: code.common.v1.ClientPong - (*v1.ServerPing)(nil), // 49: code.common.v1.ServerPing - (*timestamppb.Timestamp)(nil), // 50: google.protobuf.Timestamp - (*v2.ExchangeData)(nil), // 51: code.transaction.v2.ExchangeData - (*v2.ExchangeDataWithoutRate)(nil), // 52: code.transaction.v2.ExchangeDataWithoutRate - (*v1.IntentId)(nil), // 53: code.common.v1.IntentId + (ChatType)(0), // 0: code.chat.v2.ChatType + (PointerType)(0), // 1: code.chat.v2.PointerType + (GetChatsRequest_Direction)(0), // 2: code.chat.v2.GetChatsRequest.Direction + (GetChatsResponse_Result)(0), // 3: code.chat.v2.GetChatsResponse.Result + (GetMessagesRequest_Direction)(0), // 4: code.chat.v2.GetMessagesRequest.Direction + (GetMessagesResponse_Result)(0), // 5: code.chat.v2.GetMessagesResponse.Result + (ChatStreamEventError_Code)(0), // 6: code.chat.v2.ChatStreamEventError.Code + (StartChatResponse_Result)(0), // 7: code.chat.v2.StartChatResponse.Result + (SendMessageResponse_Result)(0), // 8: code.chat.v2.SendMessageResponse.Result + (AdvancePointerResponse_Result)(0), // 9: code.chat.v2.AdvancePointerResponse.Result + (SetMuteStateResponse_Result)(0), // 10: code.chat.v2.SetMuteStateResponse.Result + (SetSubscriptionStateResponse_Result)(0), // 11: code.chat.v2.SetSubscriptionStateResponse.Result + (ChatMemberIdentity_Platform)(0), // 12: code.chat.v2.ChatMemberIdentity.Platform + (ExchangeDataContent_Verb)(0), // 13: code.chat.v2.ExchangeDataContent.Verb + (*GetChatsRequest)(nil), // 14: code.chat.v2.GetChatsRequest + (*GetChatsResponse)(nil), // 15: code.chat.v2.GetChatsResponse + (*GetMessagesRequest)(nil), // 16: code.chat.v2.GetMessagesRequest + (*GetMessagesResponse)(nil), // 17: code.chat.v2.GetMessagesResponse + (*OpenChatEventStream)(nil), // 18: code.chat.v2.OpenChatEventStream + (*ChatStreamEvent)(nil), // 19: code.chat.v2.ChatStreamEvent + (*ChatStreamEventBatch)(nil), // 20: code.chat.v2.ChatStreamEventBatch + (*ChatStreamEventError)(nil), // 21: code.chat.v2.ChatStreamEventError + (*StreamChatEventsRequest)(nil), // 22: code.chat.v2.StreamChatEventsRequest + (*StreamChatEventsResponse)(nil), // 23: code.chat.v2.StreamChatEventsResponse + (*StartChatRequest)(nil), // 24: code.chat.v2.StartChatRequest + (*StartTipChatParameters)(nil), // 25: code.chat.v2.StartTipChatParameters + (*StartChatResponse)(nil), // 26: code.chat.v2.StartChatResponse + (*SendMessageRequest)(nil), // 27: code.chat.v2.SendMessageRequest + (*SendMessageResponse)(nil), // 28: code.chat.v2.SendMessageResponse + (*AdvancePointerRequest)(nil), // 29: code.chat.v2.AdvancePointerRequest + (*AdvancePointerResponse)(nil), // 30: code.chat.v2.AdvancePointerResponse + (*SetMuteStateRequest)(nil), // 31: code.chat.v2.SetMuteStateRequest + (*SetMuteStateResponse)(nil), // 32: code.chat.v2.SetMuteStateResponse + (*SetSubscriptionStateRequest)(nil), // 33: code.chat.v2.SetSubscriptionStateRequest + (*SetSubscriptionStateResponse)(nil), // 34: code.chat.v2.SetSubscriptionStateResponse + (*ChatId)(nil), // 35: code.chat.v2.ChatId + (*ChatMessageId)(nil), // 36: code.chat.v2.ChatMessageId + (*ChatMemberId)(nil), // 37: code.chat.v2.ChatMemberId + (*ChatMetadata)(nil), // 38: code.chat.v2.ChatMetadata + (*ChatMessage)(nil), // 39: code.chat.v2.ChatMessage + (*ChatMember)(nil), // 40: code.chat.v2.ChatMember + (*ChatMemberIdentity)(nil), // 41: code.chat.v2.ChatMemberIdentity + (*Pointer)(nil), // 42: code.chat.v2.Pointer + (*Content)(nil), // 43: code.chat.v2.Content + (*TextContent)(nil), // 44: code.chat.v2.TextContent + (*LocalizedContent)(nil), // 45: code.chat.v2.LocalizedContent + (*ExchangeDataContent)(nil), // 46: code.chat.v2.ExchangeDataContent + (*NaclBoxEncryptedContent)(nil), // 47: code.chat.v2.NaclBoxEncryptedContent + (*ThankYouContent)(nil), // 48: code.chat.v2.ThankYouContent + (*Cursor)(nil), // 49: code.chat.v2.Cursor + (*v1.SolanaAccountId)(nil), // 50: code.common.v1.SolanaAccountId + (*v1.Signature)(nil), // 51: code.common.v1.Signature + (*v1.ClientPong)(nil), // 52: code.common.v1.ClientPong + (*v1.ServerPing)(nil), // 53: code.common.v1.ServerPing + (*v1.IntentId)(nil), // 54: code.common.v1.IntentId + (*timestamppb.Timestamp)(nil), // 55: google.protobuf.Timestamp + (*v2.ExchangeData)(nil), // 56: code.transaction.v2.ExchangeData + (*v2.ExchangeDataWithoutRate)(nil), // 57: code.transaction.v2.ExchangeDataWithoutRate } var file_chat_v2_chat_service_proto_depIdxs = []int32{ - 46, // 0: code.chat.v2.GetChatsRequest.owner:type_name -> code.common.v1.SolanaAccountId - 47, // 1: code.chat.v2.GetChatsRequest.signature:type_name -> code.common.v1.Signature - 45, // 2: code.chat.v2.GetChatsRequest.cursor:type_name -> code.chat.v2.Cursor - 0, // 3: code.chat.v2.GetChatsRequest.direction:type_name -> code.chat.v2.GetChatsRequest.Direction - 1, // 4: code.chat.v2.GetChatsResponse.result:type_name -> code.chat.v2.GetChatsResponse.Result - 34, // 5: code.chat.v2.GetChatsResponse.chats:type_name -> code.chat.v2.ChatMetadata - 31, // 6: code.chat.v2.GetMessagesRequest.chat_id:type_name -> code.chat.v2.ChatId - 33, // 7: code.chat.v2.GetMessagesRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 46, // 8: code.chat.v2.GetMessagesRequest.owner:type_name -> code.common.v1.SolanaAccountId - 47, // 9: code.chat.v2.GetMessagesRequest.signature:type_name -> code.common.v1.Signature - 45, // 10: code.chat.v2.GetMessagesRequest.cursor:type_name -> code.chat.v2.Cursor - 2, // 11: code.chat.v2.GetMessagesRequest.direction:type_name -> code.chat.v2.GetMessagesRequest.Direction - 3, // 12: code.chat.v2.GetMessagesResponse.result:type_name -> code.chat.v2.GetMessagesResponse.Result - 35, // 13: code.chat.v2.GetMessagesResponse.messages:type_name -> code.chat.v2.ChatMessage - 31, // 14: code.chat.v2.OpenChatEventStream.chat_id:type_name -> code.chat.v2.ChatId - 33, // 15: code.chat.v2.OpenChatEventStream.member_id:type_name -> code.chat.v2.ChatMemberId - 46, // 16: code.chat.v2.OpenChatEventStream.owner:type_name -> code.common.v1.SolanaAccountId - 47, // 17: code.chat.v2.OpenChatEventStream.signature:type_name -> code.common.v1.Signature - 35, // 18: code.chat.v2.ChatStreamEvent.message:type_name -> code.chat.v2.ChatMessage - 38, // 19: code.chat.v2.ChatStreamEvent.pointer:type_name -> code.chat.v2.Pointer - 18, // 20: code.chat.v2.ChatStreamEventBatch.events:type_name -> code.chat.v2.ChatStreamEvent - 4, // 21: code.chat.v2.ChatStreamEventError.code:type_name -> code.chat.v2.ChatStreamEventError.Code - 17, // 22: code.chat.v2.StreamChatEventsRequest.open_stream:type_name -> code.chat.v2.OpenChatEventStream - 48, // 23: code.chat.v2.StreamChatEventsRequest.pong:type_name -> code.common.v1.ClientPong - 19, // 24: code.chat.v2.StreamChatEventsResponse.events:type_name -> code.chat.v2.ChatStreamEventBatch - 49, // 25: code.chat.v2.StreamChatEventsResponse.ping:type_name -> code.common.v1.ServerPing - 20, // 26: code.chat.v2.StreamChatEventsResponse.error:type_name -> code.chat.v2.ChatStreamEventError - 31, // 27: code.chat.v2.SendMessageRequest.chat_id:type_name -> code.chat.v2.ChatId - 33, // 28: code.chat.v2.SendMessageRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 39, // 29: code.chat.v2.SendMessageRequest.content:type_name -> code.chat.v2.Content - 46, // 30: code.chat.v2.SendMessageRequest.owner:type_name -> code.common.v1.SolanaAccountId - 47, // 31: code.chat.v2.SendMessageRequest.signature:type_name -> code.common.v1.Signature - 5, // 32: code.chat.v2.SendMessageResponse.result:type_name -> code.chat.v2.SendMessageResponse.Result - 35, // 33: code.chat.v2.SendMessageResponse.message:type_name -> code.chat.v2.ChatMessage - 31, // 34: code.chat.v2.AdvancePointerRequest.chat_id:type_name -> code.chat.v2.ChatId - 38, // 35: code.chat.v2.AdvancePointerRequest.pointer:type_name -> code.chat.v2.Pointer - 46, // 36: code.chat.v2.AdvancePointerRequest.owner:type_name -> code.common.v1.SolanaAccountId - 47, // 37: code.chat.v2.AdvancePointerRequest.signature:type_name -> code.common.v1.Signature - 6, // 38: code.chat.v2.AdvancePointerResponse.result:type_name -> code.chat.v2.AdvancePointerResponse.Result - 31, // 39: code.chat.v2.SetMuteStateRequest.chat_id:type_name -> code.chat.v2.ChatId - 33, // 40: code.chat.v2.SetMuteStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 46, // 41: code.chat.v2.SetMuteStateRequest.owner:type_name -> code.common.v1.SolanaAccountId - 47, // 42: code.chat.v2.SetMuteStateRequest.signature:type_name -> code.common.v1.Signature - 7, // 43: code.chat.v2.SetMuteStateResponse.result:type_name -> code.chat.v2.SetMuteStateResponse.Result - 31, // 44: code.chat.v2.SetSubscriptionStateRequest.chat_id:type_name -> code.chat.v2.ChatId - 33, // 45: code.chat.v2.SetSubscriptionStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 46, // 46: code.chat.v2.SetSubscriptionStateRequest.owner:type_name -> code.common.v1.SolanaAccountId - 47, // 47: code.chat.v2.SetSubscriptionStateRequest.signature:type_name -> code.common.v1.Signature - 8, // 48: code.chat.v2.SetSubscriptionStateResponse.result:type_name -> code.chat.v2.SetSubscriptionStateResponse.Result - 31, // 49: code.chat.v2.ChatMetadata.chat_id:type_name -> code.chat.v2.ChatId - 9, // 50: code.chat.v2.ChatMetadata.kind:type_name -> code.chat.v2.ChatMetadata.Kind - 36, // 51: code.chat.v2.ChatMetadata.members:type_name -> code.chat.v2.ChatMember - 45, // 52: code.chat.v2.ChatMetadata.cursor:type_name -> code.chat.v2.Cursor - 32, // 53: code.chat.v2.ChatMessage.message_id:type_name -> code.chat.v2.ChatMessageId - 33, // 54: code.chat.v2.ChatMessage.sender_id:type_name -> code.chat.v2.ChatMemberId - 39, // 55: code.chat.v2.ChatMessage.content:type_name -> code.chat.v2.Content - 50, // 56: code.chat.v2.ChatMessage.ts:type_name -> google.protobuf.Timestamp - 45, // 57: code.chat.v2.ChatMessage.cursor:type_name -> code.chat.v2.Cursor - 33, // 58: code.chat.v2.ChatMember.member_id:type_name -> code.chat.v2.ChatMemberId - 37, // 59: code.chat.v2.ChatMember.identity:type_name -> code.chat.v2.ChatMemberIdentity - 38, // 60: code.chat.v2.ChatMember.pointers:type_name -> code.chat.v2.Pointer - 10, // 61: code.chat.v2.ChatMemberIdentity.platform:type_name -> code.chat.v2.ChatMemberIdentity.Platform - 11, // 62: code.chat.v2.Pointer.kind:type_name -> code.chat.v2.Pointer.Kind - 32, // 63: code.chat.v2.Pointer.value:type_name -> code.chat.v2.ChatMessageId - 33, // 64: code.chat.v2.Pointer.member_id:type_name -> code.chat.v2.ChatMemberId - 40, // 65: code.chat.v2.Content.text:type_name -> code.chat.v2.TextContent - 41, // 66: code.chat.v2.Content.localized:type_name -> code.chat.v2.LocalizedContent - 42, // 67: code.chat.v2.Content.exchange_data:type_name -> code.chat.v2.ExchangeDataContent - 43, // 68: code.chat.v2.Content.nacl_box:type_name -> code.chat.v2.NaclBoxEncryptedContent - 44, // 69: code.chat.v2.Content.thank_you:type_name -> code.chat.v2.ThankYouContent - 12, // 70: code.chat.v2.ExchangeDataContent.verb:type_name -> code.chat.v2.ExchangeDataContent.Verb - 51, // 71: code.chat.v2.ExchangeDataContent.exact:type_name -> code.transaction.v2.ExchangeData - 52, // 72: code.chat.v2.ExchangeDataContent.partial:type_name -> code.transaction.v2.ExchangeDataWithoutRate - 53, // 73: code.chat.v2.ExchangeDataContent.intent:type_name -> code.common.v1.IntentId - 47, // 74: code.chat.v2.ExchangeDataContent.signature:type_name -> code.common.v1.Signature - 46, // 75: code.chat.v2.NaclBoxEncryptedContent.peer_public_key:type_name -> code.common.v1.SolanaAccountId - 53, // 76: code.chat.v2.ThankYouContent.tip_intent:type_name -> code.common.v1.IntentId - 13, // 77: code.chat.v2.Chat.GetChats:input_type -> code.chat.v2.GetChatsRequest - 15, // 78: code.chat.v2.Chat.GetMessages:input_type -> code.chat.v2.GetMessagesRequest - 21, // 79: code.chat.v2.Chat.StreamChatEvents:input_type -> code.chat.v2.StreamChatEventsRequest - 23, // 80: code.chat.v2.Chat.SendMessage:input_type -> code.chat.v2.SendMessageRequest - 25, // 81: code.chat.v2.Chat.AdvancePointer:input_type -> code.chat.v2.AdvancePointerRequest - 27, // 82: code.chat.v2.Chat.SetMuteState:input_type -> code.chat.v2.SetMuteStateRequest - 29, // 83: code.chat.v2.Chat.SetSubscriptionState:input_type -> code.chat.v2.SetSubscriptionStateRequest - 14, // 84: code.chat.v2.Chat.GetChats:output_type -> code.chat.v2.GetChatsResponse - 16, // 85: code.chat.v2.Chat.GetMessages:output_type -> code.chat.v2.GetMessagesResponse - 22, // 86: code.chat.v2.Chat.StreamChatEvents:output_type -> code.chat.v2.StreamChatEventsResponse - 24, // 87: code.chat.v2.Chat.SendMessage:output_type -> code.chat.v2.SendMessageResponse - 26, // 88: code.chat.v2.Chat.AdvancePointer:output_type -> code.chat.v2.AdvancePointerResponse - 28, // 89: code.chat.v2.Chat.SetMuteState:output_type -> code.chat.v2.SetMuteStateResponse - 30, // 90: code.chat.v2.Chat.SetSubscriptionState:output_type -> code.chat.v2.SetSubscriptionStateResponse - 84, // [84:91] is the sub-list for method output_type - 77, // [77:84] is the sub-list for method input_type - 77, // [77:77] is the sub-list for extension type_name - 77, // [77:77] is the sub-list for extension extendee - 0, // [0:77] is the sub-list for field type_name + 50, // 0: code.chat.v2.GetChatsRequest.owner:type_name -> code.common.v1.SolanaAccountId + 51, // 1: code.chat.v2.GetChatsRequest.signature:type_name -> code.common.v1.Signature + 49, // 2: code.chat.v2.GetChatsRequest.cursor:type_name -> code.chat.v2.Cursor + 2, // 3: code.chat.v2.GetChatsRequest.direction:type_name -> code.chat.v2.GetChatsRequest.Direction + 3, // 4: code.chat.v2.GetChatsResponse.result:type_name -> code.chat.v2.GetChatsResponse.Result + 38, // 5: code.chat.v2.GetChatsResponse.chats:type_name -> code.chat.v2.ChatMetadata + 35, // 6: code.chat.v2.GetMessagesRequest.chat_id:type_name -> code.chat.v2.ChatId + 37, // 7: code.chat.v2.GetMessagesRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 50, // 8: code.chat.v2.GetMessagesRequest.owner:type_name -> code.common.v1.SolanaAccountId + 51, // 9: code.chat.v2.GetMessagesRequest.signature:type_name -> code.common.v1.Signature + 49, // 10: code.chat.v2.GetMessagesRequest.cursor:type_name -> code.chat.v2.Cursor + 4, // 11: code.chat.v2.GetMessagesRequest.direction:type_name -> code.chat.v2.GetMessagesRequest.Direction + 5, // 12: code.chat.v2.GetMessagesResponse.result:type_name -> code.chat.v2.GetMessagesResponse.Result + 39, // 13: code.chat.v2.GetMessagesResponse.messages:type_name -> code.chat.v2.ChatMessage + 35, // 14: code.chat.v2.OpenChatEventStream.chat_id:type_name -> code.chat.v2.ChatId + 37, // 15: code.chat.v2.OpenChatEventStream.member_id:type_name -> code.chat.v2.ChatMemberId + 50, // 16: code.chat.v2.OpenChatEventStream.owner:type_name -> code.common.v1.SolanaAccountId + 51, // 17: code.chat.v2.OpenChatEventStream.signature:type_name -> code.common.v1.Signature + 39, // 18: code.chat.v2.ChatStreamEvent.message:type_name -> code.chat.v2.ChatMessage + 42, // 19: code.chat.v2.ChatStreamEvent.pointer:type_name -> code.chat.v2.Pointer + 19, // 20: code.chat.v2.ChatStreamEventBatch.events:type_name -> code.chat.v2.ChatStreamEvent + 6, // 21: code.chat.v2.ChatStreamEventError.code:type_name -> code.chat.v2.ChatStreamEventError.Code + 18, // 22: code.chat.v2.StreamChatEventsRequest.open_stream:type_name -> code.chat.v2.OpenChatEventStream + 52, // 23: code.chat.v2.StreamChatEventsRequest.pong:type_name -> code.common.v1.ClientPong + 20, // 24: code.chat.v2.StreamChatEventsResponse.events:type_name -> code.chat.v2.ChatStreamEventBatch + 53, // 25: code.chat.v2.StreamChatEventsResponse.ping:type_name -> code.common.v1.ServerPing + 21, // 26: code.chat.v2.StreamChatEventsResponse.error:type_name -> code.chat.v2.ChatStreamEventError + 50, // 27: code.chat.v2.StartChatRequest.owner:type_name -> code.common.v1.SolanaAccountId + 51, // 28: code.chat.v2.StartChatRequest.signature:type_name -> code.common.v1.Signature + 25, // 29: code.chat.v2.StartChatRequest.tip_chat:type_name -> code.chat.v2.StartTipChatParameters + 54, // 30: code.chat.v2.StartTipChatParameters.intent_id:type_name -> code.common.v1.IntentId + 7, // 31: code.chat.v2.StartChatResponse.result:type_name -> code.chat.v2.StartChatResponse.Result + 38, // 32: code.chat.v2.StartChatResponse.chat:type_name -> code.chat.v2.ChatMetadata + 35, // 33: code.chat.v2.SendMessageRequest.chat_id:type_name -> code.chat.v2.ChatId + 37, // 34: code.chat.v2.SendMessageRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 43, // 35: code.chat.v2.SendMessageRequest.content:type_name -> code.chat.v2.Content + 50, // 36: code.chat.v2.SendMessageRequest.owner:type_name -> code.common.v1.SolanaAccountId + 51, // 37: code.chat.v2.SendMessageRequest.signature:type_name -> code.common.v1.Signature + 8, // 38: code.chat.v2.SendMessageResponse.result:type_name -> code.chat.v2.SendMessageResponse.Result + 39, // 39: code.chat.v2.SendMessageResponse.message:type_name -> code.chat.v2.ChatMessage + 35, // 40: code.chat.v2.AdvancePointerRequest.chat_id:type_name -> code.chat.v2.ChatId + 42, // 41: code.chat.v2.AdvancePointerRequest.pointer:type_name -> code.chat.v2.Pointer + 50, // 42: code.chat.v2.AdvancePointerRequest.owner:type_name -> code.common.v1.SolanaAccountId + 51, // 43: code.chat.v2.AdvancePointerRequest.signature:type_name -> code.common.v1.Signature + 9, // 44: code.chat.v2.AdvancePointerResponse.result:type_name -> code.chat.v2.AdvancePointerResponse.Result + 35, // 45: code.chat.v2.SetMuteStateRequest.chat_id:type_name -> code.chat.v2.ChatId + 37, // 46: code.chat.v2.SetMuteStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 50, // 47: code.chat.v2.SetMuteStateRequest.owner:type_name -> code.common.v1.SolanaAccountId + 51, // 48: code.chat.v2.SetMuteStateRequest.signature:type_name -> code.common.v1.Signature + 10, // 49: code.chat.v2.SetMuteStateResponse.result:type_name -> code.chat.v2.SetMuteStateResponse.Result + 35, // 50: code.chat.v2.SetSubscriptionStateRequest.chat_id:type_name -> code.chat.v2.ChatId + 37, // 51: code.chat.v2.SetSubscriptionStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 50, // 52: code.chat.v2.SetSubscriptionStateRequest.owner:type_name -> code.common.v1.SolanaAccountId + 51, // 53: code.chat.v2.SetSubscriptionStateRequest.signature:type_name -> code.common.v1.Signature + 11, // 54: code.chat.v2.SetSubscriptionStateResponse.result:type_name -> code.chat.v2.SetSubscriptionStateResponse.Result + 35, // 55: code.chat.v2.ChatMetadata.chat_id:type_name -> code.chat.v2.ChatId + 0, // 56: code.chat.v2.ChatMetadata.kind:type_name -> code.chat.v2.ChatType + 40, // 57: code.chat.v2.ChatMetadata.members:type_name -> code.chat.v2.ChatMember + 49, // 58: code.chat.v2.ChatMetadata.cursor:type_name -> code.chat.v2.Cursor + 36, // 59: code.chat.v2.ChatMessage.message_id:type_name -> code.chat.v2.ChatMessageId + 37, // 60: code.chat.v2.ChatMessage.sender_id:type_name -> code.chat.v2.ChatMemberId + 43, // 61: code.chat.v2.ChatMessage.content:type_name -> code.chat.v2.Content + 55, // 62: code.chat.v2.ChatMessage.ts:type_name -> google.protobuf.Timestamp + 49, // 63: code.chat.v2.ChatMessage.cursor:type_name -> code.chat.v2.Cursor + 37, // 64: code.chat.v2.ChatMember.member_id:type_name -> code.chat.v2.ChatMemberId + 41, // 65: code.chat.v2.ChatMember.identity:type_name -> code.chat.v2.ChatMemberIdentity + 42, // 66: code.chat.v2.ChatMember.pointers:type_name -> code.chat.v2.Pointer + 12, // 67: code.chat.v2.ChatMemberIdentity.platform:type_name -> code.chat.v2.ChatMemberIdentity.Platform + 1, // 68: code.chat.v2.Pointer.kind:type_name -> code.chat.v2.PointerType + 36, // 69: code.chat.v2.Pointer.value:type_name -> code.chat.v2.ChatMessageId + 37, // 70: code.chat.v2.Pointer.member_id:type_name -> code.chat.v2.ChatMemberId + 44, // 71: code.chat.v2.Content.text:type_name -> code.chat.v2.TextContent + 45, // 72: code.chat.v2.Content.localized:type_name -> code.chat.v2.LocalizedContent + 46, // 73: code.chat.v2.Content.exchange_data:type_name -> code.chat.v2.ExchangeDataContent + 47, // 74: code.chat.v2.Content.nacl_box:type_name -> code.chat.v2.NaclBoxEncryptedContent + 48, // 75: code.chat.v2.Content.thank_you:type_name -> code.chat.v2.ThankYouContent + 13, // 76: code.chat.v2.ExchangeDataContent.verb:type_name -> code.chat.v2.ExchangeDataContent.Verb + 56, // 77: code.chat.v2.ExchangeDataContent.exact:type_name -> code.transaction.v2.ExchangeData + 57, // 78: code.chat.v2.ExchangeDataContent.partial:type_name -> code.transaction.v2.ExchangeDataWithoutRate + 54, // 79: code.chat.v2.ExchangeDataContent.intent:type_name -> code.common.v1.IntentId + 51, // 80: code.chat.v2.ExchangeDataContent.signature:type_name -> code.common.v1.Signature + 50, // 81: code.chat.v2.NaclBoxEncryptedContent.peer_public_key:type_name -> code.common.v1.SolanaAccountId + 54, // 82: code.chat.v2.ThankYouContent.tip_intent:type_name -> code.common.v1.IntentId + 14, // 83: code.chat.v2.Chat.GetChats:input_type -> code.chat.v2.GetChatsRequest + 16, // 84: code.chat.v2.Chat.GetMessages:input_type -> code.chat.v2.GetMessagesRequest + 22, // 85: code.chat.v2.Chat.StreamChatEvents:input_type -> code.chat.v2.StreamChatEventsRequest + 24, // 86: code.chat.v2.Chat.StartChat:input_type -> code.chat.v2.StartChatRequest + 27, // 87: code.chat.v2.Chat.SendMessage:input_type -> code.chat.v2.SendMessageRequest + 29, // 88: code.chat.v2.Chat.AdvancePointer:input_type -> code.chat.v2.AdvancePointerRequest + 31, // 89: code.chat.v2.Chat.SetMuteState:input_type -> code.chat.v2.SetMuteStateRequest + 33, // 90: code.chat.v2.Chat.SetSubscriptionState:input_type -> code.chat.v2.SetSubscriptionStateRequest + 15, // 91: code.chat.v2.Chat.GetChats:output_type -> code.chat.v2.GetChatsResponse + 17, // 92: code.chat.v2.Chat.GetMessages:output_type -> code.chat.v2.GetMessagesResponse + 23, // 93: code.chat.v2.Chat.StreamChatEvents:output_type -> code.chat.v2.StreamChatEventsResponse + 26, // 94: code.chat.v2.Chat.StartChat:output_type -> code.chat.v2.StartChatResponse + 28, // 95: code.chat.v2.Chat.SendMessage:output_type -> code.chat.v2.SendMessageResponse + 30, // 96: code.chat.v2.Chat.AdvancePointer:output_type -> code.chat.v2.AdvancePointerResponse + 32, // 97: code.chat.v2.Chat.SetMuteState:output_type -> code.chat.v2.SetMuteStateResponse + 34, // 98: code.chat.v2.Chat.SetSubscriptionState:output_type -> code.chat.v2.SetSubscriptionStateResponse + 91, // [91:99] is the sub-list for method output_type + 83, // [83:91] is the sub-list for method input_type + 83, // [83:83] is the sub-list for extension type_name + 83, // [83:83] is the sub-list for extension extendee + 0, // [0:83] is the sub-list for field type_name } func init() { file_chat_v2_chat_service_proto_init() } @@ -3822,7 +4110,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SendMessageRequest); i { + switch v := v.(*StartChatRequest); i { case 0: return &v.state case 1: @@ -3834,7 +4122,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SendMessageResponse); i { + switch v := v.(*StartTipChatParameters); i { case 0: return &v.state case 1: @@ -3846,7 +4134,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AdvancePointerRequest); i { + switch v := v.(*StartChatResponse); i { case 0: return &v.state case 1: @@ -3858,7 +4146,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*AdvancePointerResponse); i { + switch v := v.(*SendMessageRequest); i { case 0: return &v.state case 1: @@ -3870,7 +4158,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetMuteStateRequest); i { + switch v := v.(*SendMessageResponse); i { case 0: return &v.state case 1: @@ -3882,7 +4170,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetMuteStateResponse); i { + switch v := v.(*AdvancePointerRequest); i { case 0: return &v.state case 1: @@ -3894,7 +4182,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetSubscriptionStateRequest); i { + switch v := v.(*AdvancePointerResponse); i { case 0: return &v.state case 1: @@ -3906,7 +4194,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetSubscriptionStateResponse); i { + switch v := v.(*SetMuteStateRequest); i { case 0: return &v.state case 1: @@ -3918,7 +4206,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatId); i { + switch v := v.(*SetMuteStateResponse); i { case 0: return &v.state case 1: @@ -3930,7 +4218,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatMessageId); i { + switch v := v.(*SetSubscriptionStateRequest); i { case 0: return &v.state case 1: @@ -3942,7 +4230,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatMemberId); i { + switch v := v.(*SetSubscriptionStateResponse); i { case 0: return &v.state case 1: @@ -3954,7 +4242,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatMetadata); i { + switch v := v.(*ChatId); i { case 0: return &v.state case 1: @@ -3966,7 +4254,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatMessage); i { + switch v := v.(*ChatMessageId); i { case 0: return &v.state case 1: @@ -3978,7 +4266,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatMember); i { + switch v := v.(*ChatMemberId); i { case 0: return &v.state case 1: @@ -3990,7 +4278,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatMemberIdentity); i { + switch v := v.(*ChatMetadata); i { case 0: return &v.state case 1: @@ -4002,7 +4290,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Pointer); i { + switch v := v.(*ChatMessage); i { case 0: return &v.state case 1: @@ -4014,7 +4302,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Content); i { + switch v := v.(*ChatMember); i { case 0: return &v.state case 1: @@ -4026,7 +4314,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TextContent); i { + switch v := v.(*ChatMemberIdentity); i { case 0: return &v.state case 1: @@ -4038,7 +4326,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LocalizedContent); i { + switch v := v.(*Pointer); i { case 0: return &v.state case 1: @@ -4050,7 +4338,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExchangeDataContent); i { + switch v := v.(*Content); i { case 0: return &v.state case 1: @@ -4062,7 +4350,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NaclBoxEncryptedContent); i { + switch v := v.(*TextContent); i { case 0: return &v.state case 1: @@ -4074,7 +4362,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ThankYouContent); i { + switch v := v.(*LocalizedContent); i { case 0: return &v.state case 1: @@ -4086,6 +4374,42 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ExchangeDataContent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NaclBoxEncryptedContent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ThankYouContent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Cursor); i { case 0: return &v.state @@ -4111,14 +4435,17 @@ func file_chat_v2_chat_service_proto_init() { (*StreamChatEventsResponse_Ping)(nil), (*StreamChatEventsResponse_Error)(nil), } - file_chat_v2_chat_service_proto_msgTypes[26].OneofWrappers = []interface{}{ + file_chat_v2_chat_service_proto_msgTypes[10].OneofWrappers = []interface{}{ + (*StartChatRequest_TipChat)(nil), + } + file_chat_v2_chat_service_proto_msgTypes[29].OneofWrappers = []interface{}{ (*Content_Text)(nil), (*Content_Localized)(nil), (*Content_ExchangeData)(nil), (*Content_NaclBox)(nil), (*Content_ThankYou)(nil), } - file_chat_v2_chat_service_proto_msgTypes[29].OneofWrappers = []interface{}{ + file_chat_v2_chat_service_proto_msgTypes[32].OneofWrappers = []interface{}{ (*ExchangeDataContent_Exact)(nil), (*ExchangeDataContent_Partial)(nil), (*ExchangeDataContent_Intent)(nil), @@ -4129,8 +4456,8 @@ func file_chat_v2_chat_service_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_chat_v2_chat_service_proto_rawDesc, - NumEnums: 13, - NumMessages: 33, + NumEnums: 14, + NumMessages: 36, NumExtensions: 0, NumServices: 1, }, diff --git a/generated/go/chat/v2/chat_service.pb.validate.go b/generated/go/chat/v2/chat_service.pb.validate.go index aae25fc..873f4c0 100644 --- a/generated/go/chat/v2/chat_service.pb.validate.go +++ b/generated/go/chat/v2/chat_service.pb.validate.go @@ -1091,6 +1091,290 @@ var _ interface { ErrorName() string } = StreamChatEventsResponseValidationError{} +// Validate checks the field values on StartChatRequest with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *StartChatRequest) Validate() error { + if m == nil { + return nil + } + + if m.GetOwner() == nil { + return StartChatRequestValidationError{ + field: "Owner", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StartChatRequestValidationError{ + field: "Owner", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetSignature() == nil { + return StartChatRequestValidationError{ + field: "Signature", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StartChatRequestValidationError{ + field: "Signature", + reason: "embedded message failed validation", + cause: err, + } + } + } + + switch m.Parameters.(type) { + + case *StartChatRequest_TipChat: + + if v, ok := interface{}(m.GetTipChat()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StartChatRequestValidationError{ + field: "TipChat", + reason: "embedded message failed validation", + cause: err, + } + } + } + + default: + return StartChatRequestValidationError{ + field: "Parameters", + reason: "value is required", + } + + } + + return nil +} + +// StartChatRequestValidationError is the validation error returned by +// StartChatRequest.Validate if the designated constraints aren't met. +type StartChatRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e StartChatRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e StartChatRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e StartChatRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e StartChatRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e StartChatRequestValidationError) ErrorName() string { return "StartChatRequestValidationError" } + +// Error satisfies the builtin error interface +func (e StartChatRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sStartChatRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = StartChatRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = StartChatRequestValidationError{} + +// Validate checks the field values on StartTipChatParameters with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *StartTipChatParameters) Validate() error { + if m == nil { + return nil + } + + if m.GetIntentId() == nil { + return StartTipChatParametersValidationError{ + field: "IntentId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetIntentId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StartTipChatParametersValidationError{ + field: "IntentId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// StartTipChatParametersValidationError is the validation error returned by +// StartTipChatParameters.Validate if the designated constraints aren't met. +type StartTipChatParametersValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e StartTipChatParametersValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e StartTipChatParametersValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e StartTipChatParametersValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e StartTipChatParametersValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e StartTipChatParametersValidationError) ErrorName() string { + return "StartTipChatParametersValidationError" +} + +// Error satisfies the builtin error interface +func (e StartTipChatParametersValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sStartTipChatParameters.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = StartTipChatParametersValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = StartTipChatParametersValidationError{} + +// Validate checks the field values on StartChatResponse with the rules defined +// in the proto definition for this message. If any rules are violated, an +// error is returned. +func (m *StartChatResponse) Validate() error { + if m == nil { + return nil + } + + // no validation rules for Result + + if v, ok := interface{}(m.GetChat()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return StartChatResponseValidationError{ + field: "Chat", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// StartChatResponseValidationError is the validation error returned by +// StartChatResponse.Validate if the designated constraints aren't met. +type StartChatResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e StartChatResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e StartChatResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e StartChatResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e StartChatResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e StartChatResponseValidationError) ErrorName() string { + return "StartChatResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e StartChatResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sStartChatResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = StartChatResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = StartChatResponseValidationError{} + // Validate checks the field values on SendMessageRequest with the rules // defined in the proto definition for this message. If any rules are // violated, an error is returned. @@ -2298,7 +2582,7 @@ var _ interface { ErrorName() string } = ChatMetadataValidationError{} -var _ChatMetadata_Kind_NotInLookup = map[ChatMetadata_Kind]struct{}{ +var _ChatMetadata_Kind_NotInLookup = map[ChatType]struct{}{ 0: {}, } @@ -2738,7 +3022,7 @@ var _ interface { ErrorName() string } = PointerValidationError{} -var _Pointer_Kind_NotInLookup = map[Pointer_Kind]struct{}{ +var _Pointer_Kind_NotInLookup = map[PointerType]struct{}{ 0: {}, } diff --git a/generated/go/chat/v2/chat_service_grpc.pb.go b/generated/go/chat/v2/chat_service_grpc.pb.go index 778247b..a58200f 100644 --- a/generated/go/chat/v2/chat_service_grpc.pb.go +++ b/generated/go/chat/v2/chat_service_grpc.pb.go @@ -29,6 +29,9 @@ type ChatClient interface { // StreamChatEvents streams chat events in real-time. This RPC also supports // flushes to push initial chat state after stream open. StreamChatEvents(ctx context.Context, opts ...grpc.CallOption) (Chat_StreamChatEventsClient, error) + // StartChat starts a chat. The RPC call is idempotent and will use existing + // chats whenever applicable within the context of message routing. + StartChat(ctx context.Context, in *StartChatRequest, opts ...grpc.CallOption) (*StartChatResponse, error) // SendMessage sends a message to a chat SendMessage(ctx context.Context, in *SendMessageRequest, opts ...grpc.CallOption) (*SendMessageResponse, error) // AdvancePointer advances a pointer in chat history @@ -96,6 +99,15 @@ func (x *chatStreamChatEventsClient) Recv() (*StreamChatEventsResponse, error) { return m, nil } +func (c *chatClient) StartChat(ctx context.Context, in *StartChatRequest, opts ...grpc.CallOption) (*StartChatResponse, error) { + out := new(StartChatResponse) + err := c.cc.Invoke(ctx, "/code.chat.v2.Chat/StartChat", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *chatClient) SendMessage(ctx context.Context, in *SendMessageRequest, opts ...grpc.CallOption) (*SendMessageResponse, error) { out := new(SendMessageResponse) err := c.cc.Invoke(ctx, "/code.chat.v2.Chat/SendMessage", in, out, opts...) @@ -143,6 +155,9 @@ type ChatServer interface { // StreamChatEvents streams chat events in real-time. This RPC also supports // flushes to push initial chat state after stream open. StreamChatEvents(Chat_StreamChatEventsServer) error + // StartChat starts a chat. The RPC call is idempotent and will use existing + // chats whenever applicable within the context of message routing. + StartChat(context.Context, *StartChatRequest) (*StartChatResponse, error) // SendMessage sends a message to a chat SendMessage(context.Context, *SendMessageRequest) (*SendMessageResponse, error) // AdvancePointer advances a pointer in chat history @@ -167,6 +182,9 @@ func (UnimplementedChatServer) GetMessages(context.Context, *GetMessagesRequest) func (UnimplementedChatServer) StreamChatEvents(Chat_StreamChatEventsServer) error { return status.Errorf(codes.Unimplemented, "method StreamChatEvents not implemented") } +func (UnimplementedChatServer) StartChat(context.Context, *StartChatRequest) (*StartChatResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method StartChat not implemented") +} func (UnimplementedChatServer) SendMessage(context.Context, *SendMessageRequest) (*SendMessageResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method SendMessage not implemented") } @@ -254,6 +272,24 @@ func (x *chatStreamChatEventsServer) Recv() (*StreamChatEventsRequest, error) { return m, nil } +func _Chat_StartChat_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(StartChatRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ChatServer).StartChat(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/code.chat.v2.Chat/StartChat", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ChatServer).StartChat(ctx, req.(*StartChatRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Chat_SendMessage_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(SendMessageRequest) if err := dec(in); err != nil { @@ -341,6 +377,10 @@ var Chat_ServiceDesc = grpc.ServiceDesc{ MethodName: "GetMessages", Handler: _Chat_GetMessages_Handler, }, + { + MethodName: "StartChat", + Handler: _Chat_StartChat_Handler, + }, { MethodName: "SendMessage", Handler: _Chat_SendMessage_Handler, diff --git a/proto/chat/v2/chat_service.proto b/proto/chat/v2/chat_service.proto index 5bcb40e..49f78b1 100644 --- a/proto/chat/v2/chat_service.proto +++ b/proto/chat/v2/chat_service.proto @@ -22,6 +22,10 @@ service Chat { // flushes to push initial chat state after stream open. rpc StreamChatEvents(stream StreamChatEventsRequest) returns (stream StreamChatEventsResponse); + // StartChat starts a chat. The RPC call is idempotent and will use existing + // chats whenever applicable within the context of message routing. + rpc StartChat(StartChatRequest) returns (StartChatResponse); + // SendMessage sends a message to a chat rpc SendMessage(SendMessageRequest) returns (SendMessageResponse); @@ -152,6 +156,37 @@ message StreamChatEventsResponse { } } +message StartChatRequest { + common.v1.SolanaAccountId owner = 1 [(validate.rules).message.required = true]; + + common.v1.Signature signature = 2 [(validate.rules).message.required = true]; + + oneof parameters { + option (validate.required) = true; + + StartTipChatParameters tip_chat = 3; + // GroupChatParameters group_chat = 4; + } +} + +// Starts a two-way chat between a tipper and tippee. Chat members are +// inferred from the 12 word public keys +message StartTipChatParameters { + common.v1.IntentId intent_id = 1 [(validate.rules).message.required = true]; +} + +message StartChatResponse { + Result result = 1; + enum Result { + OK = 0; + DENIED = 1; + INVALID_PARAMETER = 2; + } + + // The chat to use if the RPC was successful + ChatMetadata chat = 2; +} + message SendMessageRequest { ChatId chat_id = 1 [(validate.rules).message.required = true]; @@ -177,8 +212,8 @@ message SendMessageResponse { INVALID_CONTENT_TYPE = 4; } - // The chat message that was sent, which includes server-side metadata like - // the generated message ID and official timestamp + // The chat message that was sent if the RPC was succesful, which includes + // server-side metadata like the generated message ID and official timestamp ChatMessage message = 2; } @@ -271,21 +306,29 @@ message ChatMemberId { }]; } +enum ChatType { + UNKNOWN_CHAT_TYPE = 0; + NOTIFICATION = 1; + TWO_WAY = 2; + // GROUP = 3; +} + +enum PointerType { + UNKNOWN_POINTER_TYPE = 0; + SENT = 1; // Always inferred by OK result in SendMessageResponse or message presence in a chat + DELIVERED = 2; + READ = 3; +} + // todo: Support is_verified in a clean way message ChatMetadata { // Globally unique ID for this chat ChatId chat_id = 1 [(validate.rules).message.required = true]; // The type of chat - Kind kind = 2 [(validate.rules).enum = { + ChatType kind = 2 [(validate.rules).enum = { not_in: [0] // UNKNOWN }]; - enum Kind { - UNKNOWN = 0; - NOTIFICATION = 1; - TWO_WAY = 2; - // GROUP = 3; - } // The chat title, which will be localized by server when applicable string title = 3 [(validate.rules).string = { @@ -389,15 +432,9 @@ message ChatMemberIdentity { // Pointer in a chat indicating a user's message state in a chat. message Pointer { - Kind kind = 1 [(validate.rules).enum = { + PointerType kind = 1 [(validate.rules).enum = { not_in: [0] // UNKNOWN }]; - enum Kind { - UNKNOWN = 0; - SENT = 1; // Always inferred by OK result in SendMessageResponse or message presence in a chat - DELIVERED = 2; - READ = 3; - } // Everything at or before this message ID is considered to have the state // inferred by the type of pointer. From 59879f60968751d22ce3ab6a668fc6b207264b93 Mon Sep 17 00:00:00 2001 From: Jeff Yanta Date: Tue, 18 Jun 2024 09:56:51 -0400 Subject: [PATCH 09/16] Move some ChatMetadata fields into ChatMember --- generated/go/chat/v2/chat_service.pb.go | 164 +++++++++--------- .../go/chat/v2/chat_service.pb.validate.go | 12 +- proto/chat/v2/chat_service.proto | 30 ++-- 3 files changed, 109 insertions(+), 97 deletions(-) diff --git a/generated/go/chat/v2/chat_service.pb.go b/generated/go/chat/v2/chat_service.pb.go index a22f464..f43c113 100644 --- a/generated/go/chat/v2/chat_service.pb.go +++ b/generated/go/chat/v2/chat_service.pb.go @@ -2312,18 +2312,12 @@ type ChatMetadata struct { // or a prioritized list. The remaining members would be fetched via // a new RPC. Members []*ChatMember `protobuf:"bytes,4,rep,name=members,proto3" json:"members,omitempty"` - // Estimated number of unread messages in this chat - NumUnread uint32 `protobuf:"varint,5,opt,name=num_unread,json=numUnread,proto3" json:"num_unread,omitempty"` // Can the user mute this chat? - CanMute bool `protobuf:"varint,6,opt,name=can_mute,json=canMute,proto3" json:"can_mute,omitempty"` - // Has the user muted this chat? - IsMuted bool `protobuf:"varint,7,opt,name=is_muted,json=isMuted,proto3" json:"is_muted,omitempty"` + CanMute bool `protobuf:"varint,5,opt,name=can_mute,json=canMute,proto3" json:"can_mute,omitempty"` // Can the user unsubscribe from this chat? - CanUnsubscribe bool `protobuf:"varint,8,opt,name=can_unsubscribe,json=canUnsubscribe,proto3" json:"can_unsubscribe,omitempty"` - // Is the user subscribed to this chat? - IsSubscribed bool `protobuf:"varint,9,opt,name=is_subscribed,json=isSubscribed,proto3" json:"is_subscribed,omitempty"` + CanUnsubscribe bool `protobuf:"varint,6,opt,name=can_unsubscribe,json=canUnsubscribe,proto3" json:"can_unsubscribe,omitempty"` // Cursor value for this chat for reference in subsequent GetChatsRequest - Cursor *Cursor `protobuf:"bytes,10,opt,name=cursor,proto3" json:"cursor,omitempty"` + Cursor *Cursor `protobuf:"bytes,7,opt,name=cursor,proto3" json:"cursor,omitempty"` } func (x *ChatMetadata) Reset() { @@ -2386,13 +2380,6 @@ func (x *ChatMetadata) GetMembers() []*ChatMember { return nil } -func (x *ChatMetadata) GetNumUnread() uint32 { - if x != nil { - return x.NumUnread - } - return 0 -} - func (x *ChatMetadata) GetCanMute() bool { if x != nil { return x.CanMute @@ -2400,13 +2387,6 @@ func (x *ChatMetadata) GetCanMute() bool { return false } -func (x *ChatMetadata) GetIsMuted() bool { - if x != nil { - return x.IsMuted - } - return false -} - func (x *ChatMetadata) GetCanUnsubscribe() bool { if x != nil { return x.CanUnsubscribe @@ -2414,13 +2394,6 @@ func (x *ChatMetadata) GetCanUnsubscribe() bool { return false } -func (x *ChatMetadata) GetIsSubscribed() bool { - if x != nil { - return x.IsSubscribed - } - return false -} - func (x *ChatMetadata) GetCursor() *Cursor { if x != nil { return x.Cursor @@ -2530,6 +2503,18 @@ type ChatMember struct { // pointers, if they exist. SENT pointers should be inferred by persistence // on server. Pointers []*Pointer `protobuf:"bytes,4,rep,name=pointers,proto3" json:"pointers,omitempty"` + // Estimated number of unread messages in this chat + // + // Set when is_self = true + NumUnread uint32 `protobuf:"varint,5,opt,name=num_unread,json=numUnread,proto3" json:"num_unread,omitempty"` + // Has the chat member muted this chat? + // + // Set when is_self = true + IsMuted bool `protobuf:"varint,6,opt,name=is_muted,json=isMuted,proto3" json:"is_muted,omitempty"` + // Is the chat member to this chat? + // + // Set when is_self = true + IsSubscribed bool `protobuf:"varint,7,opt,name=is_subscribed,json=isSubscribed,proto3" json:"is_subscribed,omitempty"` } func (x *ChatMember) Reset() { @@ -2592,6 +2577,27 @@ func (x *ChatMember) GetPointers() []*Pointer { return nil } +func (x *ChatMember) GetNumUnread() uint32 { + if x != nil { + return x.NumUnread + } + return 0 +} + +func (x *ChatMember) GetIsMuted() bool { + if x != nil { + return x.IsMuted + } + return false +} + +func (x *ChatMember) GetIsSubscribed() bool { + if x != nil { + return x.IsSubscribed + } + return false +} + type ChatMemberIdentity struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3566,7 +3572,7 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x65, 0x22, 0x31, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x22, 0xb8, 0x03, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x74, + 0x61, 0x6c, 0x75, 0x65, 0x22, 0xd9, 0x02, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, @@ -3580,55 +3586,55 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, - 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x1d, - 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x19, 0x0a, - 0x08, 0x63, 0x61, 0x6e, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x63, 0x61, 0x6e, 0x4d, 0x75, 0x74, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, - 0x75, 0x74, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, - 0x74, 0x65, 0x64, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x6e, 0x5f, 0x75, 0x6e, 0x73, 0x75, 0x62, - 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x63, 0x61, - 0x6e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x23, 0x0a, 0x0d, - 0x69, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, - 0x64, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x0a, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, - 0xb3, 0x02, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x46, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, - 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, - 0x01, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, - 0x36, 0x0a, 0x02, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, - 0x02, 0x08, 0x01, 0x52, 0x02, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, - 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, - 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xe9, 0x01, 0x0a, 0x0a, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, - 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, - 0x73, 0x65, 0x6c, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x53, 0x65, - 0x6c, 0x66, 0x12, 0x3c, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x12, 0x3f, 0x0a, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x19, + 0x0a, 0x08, 0x63, 0x61, 0x6e, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x07, 0x63, 0x61, 0x6e, 0x4d, 0x75, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x6e, + 0x5f, 0x75, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0e, 0x63, 0x61, 0x6e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x62, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, + 0x22, 0xb3, 0x02, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x46, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, + 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, + 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x49, + 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, - 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x02, 0x52, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x73, 0x22, 0xbc, 0x01, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, + 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x12, 0x36, 0x0a, 0x02, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, + 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, + 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, + 0x01, 0x02, 0x08, 0x01, 0x52, 0x02, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, + 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, + 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xc8, 0x02, 0x0a, 0x0a, 0x43, 0x68, 0x61, 0x74, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, + 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, + 0x5f, 0x73, 0x65, 0x6c, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x53, + 0x65, 0x6c, 0x66, 0x12, 0x3c, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x12, 0x3f, 0x0a, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, + 0x07, 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x02, 0x52, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x55, 0x6e, 0x72, 0x65, 0x61, + 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, + 0x69, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, + 0x64, 0x22, 0xbc, 0x01, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x51, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, diff --git a/generated/go/chat/v2/chat_service.pb.validate.go b/generated/go/chat/v2/chat_service.pb.validate.go index 873f4c0..fd04992 100644 --- a/generated/go/chat/v2/chat_service.pb.validate.go +++ b/generated/go/chat/v2/chat_service.pb.validate.go @@ -2505,16 +2505,10 @@ func (m *ChatMetadata) Validate() error { } - // no validation rules for NumUnread - // no validation rules for CanMute - // no validation rules for IsMuted - // no validation rules for CanUnsubscribe - // no validation rules for IsSubscribed - if v, ok := interface{}(m.GetCursor()).(interface{ Validate() error }); ok { if err := v.Validate(); err != nil { return ChatMetadataValidationError{ @@ -2775,6 +2769,12 @@ func (m *ChatMember) Validate() error { } + // no validation rules for NumUnread + + // no validation rules for IsMuted + + // no validation rules for IsSubscribed + return nil } diff --git a/proto/chat/v2/chat_service.proto b/proto/chat/v2/chat_service.proto index 49f78b1..2207dbb 100644 --- a/proto/chat/v2/chat_service.proto +++ b/proto/chat/v2/chat_service.proto @@ -349,23 +349,14 @@ message ChatMetadata { max_items: 2 }]; - // Estimated number of unread messages in this chat - uint32 num_unread = 5; - // Can the user mute this chat? - bool can_mute = 6; - - // Has the user muted this chat? - bool is_muted = 7; + bool can_mute = 5; // Can the user unsubscribe from this chat? - bool can_unsubscribe = 8; - - // Is the user subscribed to this chat? - bool is_subscribed = 9; + bool can_unsubscribe = 6; // Cursor value for this chat for reference in subsequent GetChatsRequest - Cursor cursor = 10; + Cursor cursor = 7; } message ChatMessage { @@ -408,6 +399,21 @@ message ChatMember { min_items: 0 max_items: 2 }]; + + // Estimated number of unread messages in this chat + // + // Set when is_self = true + uint32 num_unread = 5; + + // Has the chat member muted this chat? + // + // Set when is_self = true + bool is_muted = 6; + + // Is the chat member to this chat? + // + // Set when is_self = true + bool is_subscribed = 7; } message ChatMemberIdentity { From 6de2cf41ac40efc826fe694a8b5b15aac31f7f95 Mon Sep 17 00:00:00 2001 From: Jeff Yanta Date: Tue, 18 Jun 2024 10:11:24 -0400 Subject: [PATCH 10/16] Update ChatMember field comments --- generated/go/chat/v2/chat_service.pb.go | 8 ++++---- proto/chat/v2/chat_service.proto | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/generated/go/chat/v2/chat_service.pb.go b/generated/go/chat/v2/chat_service.pb.go index f43c113..c559fe8 100644 --- a/generated/go/chat/v2/chat_service.pb.go +++ b/generated/go/chat/v2/chat_service.pb.go @@ -2505,15 +2505,15 @@ type ChatMember struct { Pointers []*Pointer `protobuf:"bytes,4,rep,name=pointers,proto3" json:"pointers,omitempty"` // Estimated number of unread messages in this chat // - // Set when is_self = true + // Only valid when is_self = true NumUnread uint32 `protobuf:"varint,5,opt,name=num_unread,json=numUnread,proto3" json:"num_unread,omitempty"` // Has the chat member muted this chat? // - // Set when is_self = true + // Only valid when is_self = true IsMuted bool `protobuf:"varint,6,opt,name=is_muted,json=isMuted,proto3" json:"is_muted,omitempty"` - // Is the chat member to this chat? + // Is the chat member subscribed to this chat? // - // Set when is_self = true + // Only valid when is_self = true IsSubscribed bool `protobuf:"varint,7,opt,name=is_subscribed,json=isSubscribed,proto3" json:"is_subscribed,omitempty"` } diff --git a/proto/chat/v2/chat_service.proto b/proto/chat/v2/chat_service.proto index 2207dbb..321d2eb 100644 --- a/proto/chat/v2/chat_service.proto +++ b/proto/chat/v2/chat_service.proto @@ -402,17 +402,17 @@ message ChatMember { // Estimated number of unread messages in this chat // - // Set when is_self = true + // Only valid when is_self = true uint32 num_unread = 5; // Has the chat member muted this chat? // - // Set when is_self = true + // Only valid when is_self = true bool is_muted = 6; - // Is the chat member to this chat? + // Is the chat member subscribed to this chat? // - // Set when is_self = true + // Only valid when is_self = true bool is_subscribed = 7; } From 15dbdebff8612984759fd920925a098df5a33f38 Mon Sep 17 00:00:00 2001 From: Jeff Yanta Date: Tue, 18 Jun 2024 12:07:42 -0400 Subject: [PATCH 11/16] Add a new chat RPC for revealing identity --- generated/go/chat/v2/chat_service.pb.go | 1393 ++++++++++------- .../go/chat/v2/chat_service.pb.validate.go | 300 ++++ generated/go/chat/v2/chat_service_grpc.pb.go | 40 + proto/chat/v2/chat_service.proto | 41 +- 4 files changed, 1233 insertions(+), 541 deletions(-) diff --git a/generated/go/chat/v2/chat_service.pb.go b/generated/go/chat/v2/chat_service.pb.go index c559fe8..9b1f1c2 100644 --- a/generated/go/chat/v2/chat_service.pb.go +++ b/generated/go/chat/v2/chat_service.pb.go @@ -520,6 +520,55 @@ func (AdvancePointerResponse_Result) EnumDescriptor() ([]byte, []int) { return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{16, 0} } +type RevealIdentityResponse_Result int32 + +const ( + RevealIdentityResponse_OK RevealIdentityResponse_Result = 0 + RevealIdentityResponse_DENIED RevealIdentityResponse_Result = 1 + RevealIdentityResponse_CHAT_NOT_FOUND RevealIdentityResponse_Result = 2 +) + +// Enum value maps for RevealIdentityResponse_Result. +var ( + RevealIdentityResponse_Result_name = map[int32]string{ + 0: "OK", + 1: "DENIED", + 2: "CHAT_NOT_FOUND", + } + RevealIdentityResponse_Result_value = map[string]int32{ + "OK": 0, + "DENIED": 1, + "CHAT_NOT_FOUND": 2, + } +) + +func (x RevealIdentityResponse_Result) Enum() *RevealIdentityResponse_Result { + p := new(RevealIdentityResponse_Result) + *p = x + return p +} + +func (x RevealIdentityResponse_Result) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (RevealIdentityResponse_Result) Descriptor() protoreflect.EnumDescriptor { + return file_chat_v2_chat_service_proto_enumTypes[10].Descriptor() +} + +func (RevealIdentityResponse_Result) Type() protoreflect.EnumType { + return &file_chat_v2_chat_service_proto_enumTypes[10] +} + +func (x RevealIdentityResponse_Result) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use RevealIdentityResponse_Result.Descriptor instead. +func (RevealIdentityResponse_Result) EnumDescriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{18, 0} +} + type SetMuteStateResponse_Result int32 const ( @@ -556,11 +605,11 @@ func (x SetMuteStateResponse_Result) String() string { } func (SetMuteStateResponse_Result) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[10].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[11].Descriptor() } func (SetMuteStateResponse_Result) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[10] + return &file_chat_v2_chat_service_proto_enumTypes[11] } func (x SetMuteStateResponse_Result) Number() protoreflect.EnumNumber { @@ -569,7 +618,7 @@ func (x SetMuteStateResponse_Result) Number() protoreflect.EnumNumber { // Deprecated: Use SetMuteStateResponse_Result.Descriptor instead. func (SetMuteStateResponse_Result) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{18, 0} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{20, 0} } type SetSubscriptionStateResponse_Result int32 @@ -608,11 +657,11 @@ func (x SetSubscriptionStateResponse_Result) String() string { } func (SetSubscriptionStateResponse_Result) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[11].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[12].Descriptor() } func (SetSubscriptionStateResponse_Result) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[11] + return &file_chat_v2_chat_service_proto_enumTypes[12] } func (x SetSubscriptionStateResponse_Result) Number() protoreflect.EnumNumber { @@ -621,7 +670,7 @@ func (x SetSubscriptionStateResponse_Result) Number() protoreflect.EnumNumber { // Deprecated: Use SetSubscriptionStateResponse_Result.Descriptor instead. func (SetSubscriptionStateResponse_Result) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{20, 0} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{22, 0} } type ChatMemberIdentity_Platform int32 @@ -654,11 +703,11 @@ func (x ChatMemberIdentity_Platform) String() string { } func (ChatMemberIdentity_Platform) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[12].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[13].Descriptor() } func (ChatMemberIdentity_Platform) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[12] + return &file_chat_v2_chat_service_proto_enumTypes[13] } func (x ChatMemberIdentity_Platform) Number() protoreflect.EnumNumber { @@ -667,7 +716,7 @@ func (x ChatMemberIdentity_Platform) Number() protoreflect.EnumNumber { // Deprecated: Use ChatMemberIdentity_Platform.Descriptor instead. func (ChatMemberIdentity_Platform) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{27, 0} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{29, 0} } type ExchangeDataContent_Verb int32 @@ -730,11 +779,11 @@ func (x ExchangeDataContent_Verb) String() string { } func (ExchangeDataContent_Verb) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[13].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[14].Descriptor() } func (ExchangeDataContent_Verb) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[13] + return &file_chat_v2_chat_service_proto_enumTypes[14] } func (x ExchangeDataContent_Verb) Number() protoreflect.EnumNumber { @@ -743,7 +792,7 @@ func (x ExchangeDataContent_Verb) Number() protoreflect.EnumNumber { // Deprecated: Use ExchangeDataContent_Verb.Descriptor instead. func (ExchangeDataContent_Verb) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{32, 0} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{34, 0} } type GetChatsRequest struct { @@ -1894,6 +1943,132 @@ func (x *AdvancePointerResponse) GetResult() AdvancePointerResponse_Result { return AdvancePointerResponse_OK } +type RevealIdentityRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ChatId *ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` + MemberId *ChatMemberId `protobuf:"bytes,2,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` + Identity *ChatMemberIdentity `protobuf:"bytes,3,opt,name=identity,proto3" json:"identity,omitempty"` + Owner *v1.SolanaAccountId `protobuf:"bytes,4,opt,name=owner,proto3" json:"owner,omitempty"` + Signature *v1.Signature `protobuf:"bytes,5,opt,name=signature,proto3" json:"signature,omitempty"` +} + +func (x *RevealIdentityRequest) Reset() { + *x = RevealIdentityRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RevealIdentityRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RevealIdentityRequest) ProtoMessage() {} + +func (x *RevealIdentityRequest) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[17] + 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 RevealIdentityRequest.ProtoReflect.Descriptor instead. +func (*RevealIdentityRequest) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{17} +} + +func (x *RevealIdentityRequest) GetChatId() *ChatId { + if x != nil { + return x.ChatId + } + return nil +} + +func (x *RevealIdentityRequest) GetMemberId() *ChatMemberId { + if x != nil { + return x.MemberId + } + return nil +} + +func (x *RevealIdentityRequest) GetIdentity() *ChatMemberIdentity { + if x != nil { + return x.Identity + } + return nil +} + +func (x *RevealIdentityRequest) GetOwner() *v1.SolanaAccountId { + if x != nil { + return x.Owner + } + return nil +} + +func (x *RevealIdentityRequest) GetSignature() *v1.Signature { + if x != nil { + return x.Signature + } + return nil +} + +type RevealIdentityResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Result RevealIdentityResponse_Result `protobuf:"varint,1,opt,name=result,proto3,enum=code.chat.v2.RevealIdentityResponse_Result" json:"result,omitempty"` +} + +func (x *RevealIdentityResponse) Reset() { + *x = RevealIdentityResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *RevealIdentityResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RevealIdentityResponse) ProtoMessage() {} + +func (x *RevealIdentityResponse) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[18] + 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 RevealIdentityResponse.ProtoReflect.Descriptor instead. +func (*RevealIdentityResponse) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{18} +} + +func (x *RevealIdentityResponse) GetResult() RevealIdentityResponse_Result { + if x != nil { + return x.Result + } + return RevealIdentityResponse_OK +} + type SetMuteStateRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1909,7 +2084,7 @@ type SetMuteStateRequest struct { func (x *SetMuteStateRequest) Reset() { *x = SetMuteStateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[17] + mi := &file_chat_v2_chat_service_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1922,7 +2097,7 @@ func (x *SetMuteStateRequest) String() string { func (*SetMuteStateRequest) ProtoMessage() {} func (x *SetMuteStateRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[17] + mi := &file_chat_v2_chat_service_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1935,7 +2110,7 @@ func (x *SetMuteStateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetMuteStateRequest.ProtoReflect.Descriptor instead. func (*SetMuteStateRequest) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{17} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{19} } func (x *SetMuteStateRequest) GetChatId() *ChatId { @@ -1984,7 +2159,7 @@ type SetMuteStateResponse struct { func (x *SetMuteStateResponse) Reset() { *x = SetMuteStateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[18] + mi := &file_chat_v2_chat_service_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1997,7 +2172,7 @@ func (x *SetMuteStateResponse) String() string { func (*SetMuteStateResponse) ProtoMessage() {} func (x *SetMuteStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[18] + mi := &file_chat_v2_chat_service_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2010,7 +2185,7 @@ func (x *SetMuteStateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SetMuteStateResponse.ProtoReflect.Descriptor instead. func (*SetMuteStateResponse) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{18} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{20} } func (x *SetMuteStateResponse) GetResult() SetMuteStateResponse_Result { @@ -2035,7 +2210,7 @@ type SetSubscriptionStateRequest struct { func (x *SetSubscriptionStateRequest) Reset() { *x = SetSubscriptionStateRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[19] + mi := &file_chat_v2_chat_service_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2048,7 +2223,7 @@ func (x *SetSubscriptionStateRequest) String() string { func (*SetSubscriptionStateRequest) ProtoMessage() {} func (x *SetSubscriptionStateRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[19] + mi := &file_chat_v2_chat_service_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2061,7 +2236,7 @@ func (x *SetSubscriptionStateRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use SetSubscriptionStateRequest.ProtoReflect.Descriptor instead. func (*SetSubscriptionStateRequest) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{19} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{21} } func (x *SetSubscriptionStateRequest) GetChatId() *ChatId { @@ -2110,7 +2285,7 @@ type SetSubscriptionStateResponse struct { func (x *SetSubscriptionStateResponse) Reset() { *x = SetSubscriptionStateResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[20] + mi := &file_chat_v2_chat_service_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2123,7 +2298,7 @@ func (x *SetSubscriptionStateResponse) String() string { func (*SetSubscriptionStateResponse) ProtoMessage() {} func (x *SetSubscriptionStateResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[20] + mi := &file_chat_v2_chat_service_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2136,7 +2311,7 @@ func (x *SetSubscriptionStateResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SetSubscriptionStateResponse.ProtoReflect.Descriptor instead. func (*SetSubscriptionStateResponse) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{20} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{22} } func (x *SetSubscriptionStateResponse) GetResult() SetSubscriptionStateResponse_Result { @@ -2157,7 +2332,7 @@ type ChatId struct { func (x *ChatId) Reset() { *x = ChatId{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[21] + mi := &file_chat_v2_chat_service_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2170,7 +2345,7 @@ func (x *ChatId) String() string { func (*ChatId) ProtoMessage() {} func (x *ChatId) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[21] + mi := &file_chat_v2_chat_service_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2183,7 +2358,7 @@ func (x *ChatId) ProtoReflect() protoreflect.Message { // Deprecated: Use ChatId.ProtoReflect.Descriptor instead. func (*ChatId) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{21} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{23} } func (x *ChatId) GetValue() []byte { @@ -2206,7 +2381,7 @@ type ChatMessageId struct { func (x *ChatMessageId) Reset() { *x = ChatMessageId{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[22] + mi := &file_chat_v2_chat_service_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2219,7 +2394,7 @@ func (x *ChatMessageId) String() string { func (*ChatMessageId) ProtoMessage() {} func (x *ChatMessageId) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[22] + mi := &file_chat_v2_chat_service_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2232,7 +2407,7 @@ func (x *ChatMessageId) ProtoReflect() protoreflect.Message { // Deprecated: Use ChatMessageId.ProtoReflect.Descriptor instead. func (*ChatMessageId) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{22} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{24} } func (x *ChatMessageId) GetValue() []byte { @@ -2254,7 +2429,7 @@ type ChatMemberId struct { func (x *ChatMemberId) Reset() { *x = ChatMemberId{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[23] + mi := &file_chat_v2_chat_service_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2267,7 +2442,7 @@ func (x *ChatMemberId) String() string { func (*ChatMemberId) ProtoMessage() {} func (x *ChatMemberId) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[23] + mi := &file_chat_v2_chat_service_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2280,7 +2455,7 @@ func (x *ChatMemberId) ProtoReflect() protoreflect.Message { // Deprecated: Use ChatMemberId.ProtoReflect.Descriptor instead. func (*ChatMemberId) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{23} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{25} } func (x *ChatMemberId) GetValue() []byte { @@ -2323,7 +2498,7 @@ type ChatMetadata struct { func (x *ChatMetadata) Reset() { *x = ChatMetadata{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[24] + mi := &file_chat_v2_chat_service_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2336,7 +2511,7 @@ func (x *ChatMetadata) String() string { func (*ChatMetadata) ProtoMessage() {} func (x *ChatMetadata) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[24] + mi := &file_chat_v2_chat_service_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2349,7 +2524,7 @@ func (x *ChatMetadata) ProtoReflect() protoreflect.Message { // Deprecated: Use ChatMetadata.ProtoReflect.Descriptor instead. func (*ChatMetadata) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{24} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{26} } func (x *ChatMetadata) GetChatId() *ChatId { @@ -2423,7 +2598,7 @@ type ChatMessage struct { func (x *ChatMessage) Reset() { *x = ChatMessage{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[25] + mi := &file_chat_v2_chat_service_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2436,7 +2611,7 @@ func (x *ChatMessage) String() string { func (*ChatMessage) ProtoMessage() {} func (x *ChatMessage) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[25] + mi := &file_chat_v2_chat_service_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2449,7 +2624,7 @@ func (x *ChatMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use ChatMessage.ProtoReflect.Descriptor instead. func (*ChatMessage) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{25} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{27} } func (x *ChatMessage) GetMessageId() *ChatMessageId { @@ -2520,7 +2695,7 @@ type ChatMember struct { func (x *ChatMember) Reset() { *x = ChatMember{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[26] + mi := &file_chat_v2_chat_service_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2533,7 +2708,7 @@ func (x *ChatMember) String() string { func (*ChatMember) ProtoMessage() {} func (x *ChatMember) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[26] + mi := &file_chat_v2_chat_service_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2546,7 +2721,7 @@ func (x *ChatMember) ProtoReflect() protoreflect.Message { // Deprecated: Use ChatMember.ProtoReflect.Descriptor instead. func (*ChatMember) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{26} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{28} } func (x *ChatMember) GetMemberId() *ChatMemberId { @@ -2612,7 +2787,7 @@ type ChatMemberIdentity struct { func (x *ChatMemberIdentity) Reset() { *x = ChatMemberIdentity{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[27] + mi := &file_chat_v2_chat_service_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2625,7 +2800,7 @@ func (x *ChatMemberIdentity) String() string { func (*ChatMemberIdentity) ProtoMessage() {} func (x *ChatMemberIdentity) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[27] + mi := &file_chat_v2_chat_service_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2638,7 +2813,7 @@ func (x *ChatMemberIdentity) ProtoReflect() protoreflect.Message { // Deprecated: Use ChatMemberIdentity.ProtoReflect.Descriptor instead. func (*ChatMemberIdentity) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{27} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{29} } func (x *ChatMemberIdentity) GetPlatform() ChatMemberIdentity_Platform { @@ -2672,7 +2847,7 @@ type Pointer struct { func (x *Pointer) Reset() { *x = Pointer{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[28] + mi := &file_chat_v2_chat_service_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2685,7 +2860,7 @@ func (x *Pointer) String() string { func (*Pointer) ProtoMessage() {} func (x *Pointer) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[28] + mi := &file_chat_v2_chat_service_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2698,7 +2873,7 @@ func (x *Pointer) ProtoReflect() protoreflect.Message { // Deprecated: Use Pointer.ProtoReflect.Descriptor instead. func (*Pointer) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{28} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{30} } func (x *Pointer) GetKind() PointerType { @@ -2735,13 +2910,14 @@ type Content struct { // *Content_ExchangeData // *Content_NaclBox // *Content_ThankYou + // *Content_IdentityRevealed Type isContent_Type `protobuf_oneof:"type"` } func (x *Content) Reset() { *x = Content{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[29] + mi := &file_chat_v2_chat_service_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2754,7 +2930,7 @@ func (x *Content) String() string { func (*Content) ProtoMessage() {} func (x *Content) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[29] + mi := &file_chat_v2_chat_service_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2767,7 +2943,7 @@ func (x *Content) ProtoReflect() protoreflect.Message { // Deprecated: Use Content.ProtoReflect.Descriptor instead. func (*Content) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{29} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{31} } func (m *Content) GetType() isContent_Type { @@ -2812,6 +2988,13 @@ func (x *Content) GetThankYou() *ThankYouContent { return nil } +func (x *Content) GetIdentityRevealed() *IdentityRevealedContent { + if x, ok := x.GetType().(*Content_IdentityRevealed); ok { + return x.IdentityRevealed + } + return nil +} + type isContent_Type interface { isContent_Type() } @@ -2836,6 +3019,10 @@ type Content_ThankYou struct { ThankYou *ThankYouContent `protobuf:"bytes,5,opt,name=thank_you,json=thankYou,proto3,oneof"` } +type Content_IdentityRevealed struct { + IdentityRevealed *IdentityRevealedContent `protobuf:"bytes,6,opt,name=identity_revealed,json=identityRevealed,proto3,oneof"` +} + func (*Content_Text) isContent_Type() {} func (*Content_Localized) isContent_Type() {} @@ -2846,6 +3033,8 @@ func (*Content_NaclBox) isContent_Type() {} func (*Content_ThankYou) isContent_Type() {} +func (*Content_IdentityRevealed) isContent_Type() {} + // Raw text content type TextContent struct { state protoimpl.MessageState @@ -2858,7 +3047,7 @@ type TextContent struct { func (x *TextContent) Reset() { *x = TextContent{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[30] + mi := &file_chat_v2_chat_service_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2871,7 +3060,7 @@ func (x *TextContent) String() string { func (*TextContent) ProtoMessage() {} func (x *TextContent) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[30] + mi := &file_chat_v2_chat_service_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2884,7 +3073,7 @@ func (x *TextContent) ProtoReflect() protoreflect.Message { // Deprecated: Use TextContent.ProtoReflect.Descriptor instead. func (*TextContent) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{30} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{32} } func (x *TextContent) GetText() string { @@ -2907,7 +3096,7 @@ type LocalizedContent struct { func (x *LocalizedContent) Reset() { *x = LocalizedContent{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[31] + mi := &file_chat_v2_chat_service_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2920,7 +3109,7 @@ func (x *LocalizedContent) String() string { func (*LocalizedContent) ProtoMessage() {} func (x *LocalizedContent) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[31] + mi := &file_chat_v2_chat_service_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2933,7 +3122,7 @@ func (x *LocalizedContent) ProtoReflect() protoreflect.Message { // Deprecated: Use LocalizedContent.ProtoReflect.Descriptor instead. func (*LocalizedContent) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{31} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{33} } func (x *LocalizedContent) GetKeyOrText() string { @@ -2975,7 +3164,7 @@ type ExchangeDataContent struct { func (x *ExchangeDataContent) Reset() { *x = ExchangeDataContent{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[32] + mi := &file_chat_v2_chat_service_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2988,7 +3177,7 @@ func (x *ExchangeDataContent) String() string { func (*ExchangeDataContent) ProtoMessage() {} func (x *ExchangeDataContent) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[32] + mi := &file_chat_v2_chat_service_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3001,7 +3190,7 @@ func (x *ExchangeDataContent) ProtoReflect() protoreflect.Message { // Deprecated: Use ExchangeDataContent.ProtoReflect.Descriptor instead. func (*ExchangeDataContent) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{32} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{34} } func (x *ExchangeDataContent) GetVerb() ExchangeDataContent_Verb { @@ -3099,7 +3288,7 @@ type NaclBoxEncryptedContent struct { func (x *NaclBoxEncryptedContent) Reset() { *x = NaclBoxEncryptedContent{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[33] + mi := &file_chat_v2_chat_service_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3112,7 +3301,7 @@ func (x *NaclBoxEncryptedContent) String() string { func (*NaclBoxEncryptedContent) ProtoMessage() {} func (x *NaclBoxEncryptedContent) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[33] + mi := &file_chat_v2_chat_service_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3125,7 +3314,7 @@ func (x *NaclBoxEncryptedContent) ProtoReflect() protoreflect.Message { // Deprecated: Use NaclBoxEncryptedContent.ProtoReflect.Descriptor instead. func (*NaclBoxEncryptedContent) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{33} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{35} } func (x *NaclBoxEncryptedContent) GetPeerPublicKey() *v1.SolanaAccountId { @@ -3161,7 +3350,7 @@ type ThankYouContent struct { func (x *ThankYouContent) Reset() { *x = ThankYouContent{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[34] + mi := &file_chat_v2_chat_service_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3174,7 +3363,7 @@ func (x *ThankYouContent) String() string { func (*ThankYouContent) ProtoMessage() {} func (x *ThankYouContent) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[34] + mi := &file_chat_v2_chat_service_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3187,7 +3376,7 @@ func (x *ThankYouContent) ProtoReflect() protoreflect.Message { // Deprecated: Use ThankYouContent.ProtoReflect.Descriptor instead. func (*ThankYouContent) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{34} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{36} } func (x *ThankYouContent) GetTipIntent() *v1.IntentId { @@ -3197,6 +3386,44 @@ func (x *ThankYouContent) GetTipIntent() *v1.IntentId { return nil } +type IdentityRevealedContent struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *IdentityRevealedContent) Reset() { + *x = IdentityRevealedContent{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v2_chat_service_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *IdentityRevealedContent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*IdentityRevealedContent) ProtoMessage() {} + +func (x *IdentityRevealedContent) ProtoReflect() protoreflect.Message { + mi := &file_chat_v2_chat_service_proto_msgTypes[37] + 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 IdentityRevealedContent.ProtoReflect.Descriptor instead. +func (*IdentityRevealedContent) Descriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{37} +} + // Opaque cursor used across paged APIs. Underlying bytes may change as paging // strategies evolve. Expected length value will vary based on the RPC being // executed.package @@ -3211,7 +3438,7 @@ type Cursor struct { func (x *Cursor) Reset() { *x = Cursor{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v2_chat_service_proto_msgTypes[35] + mi := &file_chat_v2_chat_service_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3224,7 +3451,7 @@ func (x *Cursor) String() string { func (*Cursor) ProtoMessage() {} func (x *Cursor) ProtoReflect() protoreflect.Message { - mi := &file_chat_v2_chat_service_proto_msgTypes[35] + mi := &file_chat_v2_chat_service_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3237,7 +3464,7 @@ func (x *Cursor) ProtoReflect() protoreflect.Message { // Deprecated: Use Cursor.ProtoReflect.Descriptor instead. func (*Cursor) Descriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{35} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{38} } func (x *Cursor) GetValue() []byte { @@ -3501,311 +3728,355 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x15, 0x0a, 0x11, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, 0x49, 0x4e, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x04, 0x22, 0xb8, 0x02, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x4d, - 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, - 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, - 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, - 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, - 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, - 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, - 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, - 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x22, 0x9a, 0x01, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, - 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x3f, - 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, - 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, - 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, - 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x4d, 0x55, 0x54, 0x45, 0x10, 0x03, 0x22, - 0xca, 0x02, 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, - 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, - 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x62, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, - 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, - 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xb1, 0x01, 0x0a, - 0x1c, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, - 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, - 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x46, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, - 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, - 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, - 0x4e, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x10, 0x03, - 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, - 0x7a, 0x04, 0x10, 0x20, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x32, 0x0a, - 0x0d, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x21, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, - 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0x31, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, - 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x22, 0xd9, 0x02, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, - 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, - 0x12, 0x36, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, - 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, - 0x20, 0x00, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x22, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, - 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x40, 0x0a, 0x07, - 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, - 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, - 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x19, - 0x0a, 0x08, 0x63, 0x61, 0x6e, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x07, 0x63, 0x61, 0x6e, 0x4d, 0x75, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x6e, - 0x5f, 0x75, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0e, 0x63, 0x61, 0x6e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x62, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x04, 0x22, 0xe9, 0x02, 0x0a, 0x15, 0x52, 0x65, 0x76, 0x65, + 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, - 0x22, 0xb3, 0x02, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x12, 0x46, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, - 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, + 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, + 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, + 0x64, 0x12, 0x48, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, + 0x01, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x41, 0x0a, 0x05, 0x6f, + 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, + 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, + 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, + 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x22, 0x8f, 0x01, 0x0a, 0x16, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, + 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, + 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x22, 0x30, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, + 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, + 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, + 0x55, 0x4e, 0x44, 0x10, 0x02, 0x22, 0xb8, 0x02, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, + 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, + 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, + 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, - 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x12, 0x36, 0x0a, 0x02, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, - 0x01, 0x02, 0x08, 0x01, 0x52, 0x02, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, - 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, - 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xc8, 0x02, 0x0a, 0x0a, 0x43, 0x68, 0x61, 0x74, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, - 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, - 0x5f, 0x73, 0x65, 0x6c, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x53, - 0x65, 0x6c, 0x66, 0x12, 0x3c, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x12, 0x3f, 0x0a, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, - 0x07, 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x02, 0x52, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x55, 0x6e, 0x72, 0x65, 0x61, - 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, - 0x69, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, - 0x64, 0x22, 0xbc, 0x01, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x51, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x18, - 0x01, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x27, 0x0a, 0x08, 0x75, - 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xba, - 0xe9, 0xc0, 0x03, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x0f, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, - 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x24, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, - 0x07, 0x54, 0x57, 0x49, 0x54, 0x54, 0x45, 0x52, 0x10, 0x01, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, - 0x22, 0xc8, 0x01, 0x0a, 0x07, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x04, - 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, - 0x00, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x3d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, + 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, + 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, + 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x22, 0x9a, 0x01, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x72, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x3f, 0x0a, 0x06, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, + 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, + 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x0d, + 0x0a, 0x09, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x4d, 0x55, 0x54, 0x45, 0x10, 0x03, 0x22, 0xca, 0x02, + 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, + 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, + 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, + 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, + 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, + 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x23, 0x0a, + 0x0d, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, + 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, + 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, + 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, + 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xb1, 0x01, 0x0a, 0x1c, 0x53, + 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x06, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x46, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, + 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, + 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, 0x4e, 0x54, + 0x5f, 0x55, 0x4e, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x10, 0x03, 0x22, 0x2b, + 0x0a, 0x06, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, + 0x10, 0x20, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x32, 0x0a, 0x0d, 0x43, + 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, + 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, + 0x31, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, + 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, + 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x22, 0xd9, 0x02, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x36, + 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, + 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, + 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x22, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, + 0x18, 0x80, 0x08, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x6d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, + 0x01, 0x10, 0x02, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x19, 0x0a, 0x08, + 0x63, 0x61, 0x6e, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, + 0x63, 0x61, 0x6e, 0x4d, 0x75, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x6e, 0x5f, 0x75, + 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0e, 0x63, 0x61, 0x6e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, + 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xb3, + 0x02, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x46, + 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, - 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x22, 0xd5, 0x02, 0x0a, 0x07, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3e, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, - 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, - 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x6c, - 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, + 0x62, 0x65, 0x72, 0x49, 0x64, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, + 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, + 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x36, + 0x0a, 0x02, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, + 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, + 0x08, 0x01, 0x52, 0x02, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, + 0x72, 0x73, 0x6f, 0x72, 0x22, 0xc8, 0x02, 0x0a, 0x0a, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x73, + 0x65, 0x6c, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x53, 0x65, 0x6c, + 0x66, 0x12, 0x3c, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, + 0x3f, 0x0a, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, + 0x01, 0x04, 0x08, 0x00, 0x10, 0x02, 0x52, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, + 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x12, + 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, + 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x22, + 0xbc, 0x01, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x51, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x18, 0x01, 0x52, + 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x27, 0x0a, 0x08, 0x75, 0x73, 0x65, + 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xba, 0xe9, 0xc0, + 0x03, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x0f, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, + 0x6d, 0x65, 0x22, 0x24, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0b, + 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x54, + 0x57, 0x49, 0x54, 0x54, 0x45, 0x52, 0x10, 0x01, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0xc8, + 0x01, 0x0a, 0x07, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x04, 0x6b, 0x69, + 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x54, + 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, + 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x3d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, + 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, + 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x22, 0xab, 0x03, 0x0a, 0x07, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3e, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, + 0x7a, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, + 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x63, + 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x48, 0x00, 0x52, 0x0c, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, + 0x12, 0x42, 0x0a, 0x08, 0x6e, 0x61, 0x63, 0x6c, 0x5f, 0x62, 0x6f, 0x78, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, + 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x6e, 0x61, 0x63, + 0x6c, 0x42, 0x6f, 0x78, 0x12, 0x3c, 0x0a, 0x09, 0x74, 0x68, 0x61, 0x6e, 0x6b, 0x5f, 0x79, 0x6f, + 0x75, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x08, 0x74, 0x68, 0x61, 0x6e, 0x6b, 0x59, + 0x6f, 0x75, 0x12, 0x54, 0x0a, 0x11, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x72, + 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, + 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x2f, 0x0a, 0x0b, 0x54, 0x65, 0x78, 0x74, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, + 0x80, 0x08, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x40, 0x0a, 0x10, 0x4c, 0x6f, 0x63, 0x61, + 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x0b, + 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x72, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, + 0x09, 0x6b, 0x65, 0x79, 0x4f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x22, 0xa4, 0x04, 0x0a, 0x13, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, - 0x74, 0x61, 0x12, 0x42, 0x0a, 0x08, 0x6e, 0x61, 0x63, 0x6c, 0x5f, 0x62, 0x6f, 0x78, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, - 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x6e, - 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x12, 0x3c, 0x0a, 0x09, 0x74, 0x68, 0x61, 0x6e, 0x6b, 0x5f, - 0x79, 0x6f, 0x75, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, - 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x08, 0x74, 0x68, 0x61, 0x6e, - 0x6b, 0x59, 0x6f, 0x75, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, - 0xc0, 0x03, 0x01, 0x22, 0x2f, 0x0a, 0x0b, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x04, - 0x74, 0x65, 0x78, 0x74, 0x22, 0x40, 0x0a, 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, - 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, - 0x6f, 0x72, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, - 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x09, 0x6b, 0x65, 0x79, - 0x4f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x22, 0xa4, 0x04, 0x0a, 0x13, 0x45, 0x78, 0x63, 0x68, 0x61, - 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x46, - 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, - 0x56, 0x65, 0x72, 0x62, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, - 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, 0x12, 0x39, 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x05, 0x65, 0x78, 0x61, 0x63, - 0x74, 0x12, 0x48, 0x0a, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x44, 0x61, 0x74, 0x61, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x52, 0x61, 0x74, 0x65, - 0x48, 0x00, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x32, 0x0a, 0x06, 0x69, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x49, 0x64, 0x48, 0x01, 0x52, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, - 0x39, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x01, 0x52, - 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xa4, 0x01, 0x0a, 0x04, 0x56, - 0x65, 0x72, 0x62, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, - 0x12, 0x08, 0x0a, 0x04, 0x47, 0x41, 0x56, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, - 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x57, 0x49, 0x54, 0x48, - 0x44, 0x52, 0x45, 0x57, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, - 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x05, 0x12, - 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x45, 0x44, 0x10, 0x06, 0x12, 0x09, 0x0a, - 0x05, 0x53, 0x50, 0x45, 0x4e, 0x54, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x41, 0x49, 0x44, - 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x55, 0x52, 0x43, 0x48, 0x41, 0x53, 0x45, 0x44, 0x10, - 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x5f, 0x54, 0x49, - 0x50, 0x10, 0x0a, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x49, 0x50, 0x10, - 0x0b, 0x42, 0x16, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, - 0x74, 0x61, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x42, 0x12, 0x0a, 0x09, 0x72, 0x65, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xcc, 0x01, - 0x0a, 0x17, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, - 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x0f, 0x70, 0x65, 0x65, - 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, - 0x0d, 0x70, 0x65, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x21, - 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, - 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x18, 0x18, 0x18, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, - 0x65, 0x12, 0x39, 0x0a, 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x70, - 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0c, 0xba, 0xe9, - 0xc0, 0x03, 0x07, 0x7a, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x10, 0x65, 0x6e, 0x63, 0x72, - 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x62, 0x0a, 0x0f, - 0x54, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, - 0x43, 0x0a, 0x0a, 0x74, 0x69, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, - 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, - 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x74, 0x69, 0x70, 0x49, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, - 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, - 0x7a, 0x04, 0x10, 0x08, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x40, 0x0a, - 0x08, 0x43, 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x55, 0x4e, 0x4b, - 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, - 0x12, 0x10, 0x0a, 0x0c, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, - 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x4f, 0x5f, 0x57, 0x41, 0x59, 0x10, 0x02, 0x2a, - 0x4a, 0x0a, 0x0b, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, - 0x0a, 0x14, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x45, - 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, - 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, 0x44, 0x10, - 0x02, 0x12, 0x08, 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, 0x03, 0x32, 0xd1, 0x05, 0x0a, 0x04, - 0x43, 0x68, 0x61, 0x74, 0x12, 0x49, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, - 0x12, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, - 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x52, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x20, + 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, + 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, 0x12, 0x39, 0x0a, 0x05, 0x65, 0x78, + 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, + 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x05, + 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, + 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, + 0x52, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x12, + 0x32, 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x48, 0x01, 0x52, 0x06, 0x69, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x48, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xa4, + 0x01, 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, + 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x47, 0x41, 0x56, 0x45, 0x10, 0x01, 0x12, 0x0c, + 0x0a, 0x08, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, + 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x45, 0x57, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, + 0x50, 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, + 0x54, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x45, 0x44, 0x10, + 0x06, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, 0x4e, 0x54, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, + 0x50, 0x41, 0x49, 0x44, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x55, 0x52, 0x43, 0x48, 0x41, + 0x53, 0x45, 0x44, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, + 0x44, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0a, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x45, 0x4e, 0x54, 0x5f, + 0x54, 0x49, 0x50, 0x10, 0x0b, 0x42, 0x16, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x42, 0x12, 0x0a, + 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, + 0x01, 0x22, 0xcc, 0x01, 0x0a, 0x17, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, + 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, + 0x0f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, + 0x02, 0x10, 0x01, 0x52, 0x0d, 0x70, 0x65, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, + 0x65, 0x79, 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x18, 0x18, 0x18, 0x52, 0x05, + 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, + 0x65, 0x64, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, + 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x10, + 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x22, 0x62, 0x0a, 0x0f, 0x54, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x0a, 0x74, 0x69, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, + 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x74, + 0x69, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, + 0x08, 0x03, 0x10, 0x04, 0x22, 0x19, 0x0a, 0x17, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, + 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, + 0x04, 0x10, 0x08, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x40, 0x0a, 0x08, + 0x43, 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x55, 0x4e, 0x4b, 0x4e, + 0x4f, 0x57, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, + 0x10, 0x0a, 0x0c, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, + 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x4f, 0x5f, 0x57, 0x41, 0x59, 0x10, 0x02, 0x2a, 0x4a, + 0x0a, 0x0b, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, + 0x14, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, + 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, 0x44, 0x10, 0x02, + 0x12, 0x08, 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, 0x03, 0x32, 0xae, 0x06, 0x0a, 0x04, 0x43, + 0x68, 0x61, 0x74, 0x12, 0x49, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x12, + 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, + 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, - 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, - 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, - 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x4c, 0x0a, 0x09, 0x53, 0x74, - 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x12, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, - 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x23, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, - 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0c, 0x53, 0x65, 0x74, - 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, - 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x6d, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, - 0x6b, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, - 0x65, 0x6e, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, - 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2f, 0x76, 0x32, 0x3b, 0x63, 0x68, 0x61, 0x74, - 0xa2, 0x02, 0x09, 0x43, 0x50, 0x42, 0x43, 0x68, 0x61, 0x74, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, + 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, + 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x20, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, + 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x65, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x4c, 0x0a, 0x09, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x12, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x41, + 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x23, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, + 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x52, 0x65, 0x76, 0x65, + 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, + 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x14, + 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, + 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, 0x63, + 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, + 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, + 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, 0x61, + 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, 0x2f, + 0x63, 0x68, 0x61, 0x74, 0x2f, 0x76, 0x32, 0x3b, 0x63, 0x68, 0x61, 0x74, 0xa2, 0x02, 0x09, 0x43, + 0x50, 0x42, 0x43, 0x68, 0x61, 0x74, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3820,8 +4091,8 @@ func file_chat_v2_chat_service_proto_rawDescGZIP() []byte { return file_chat_v2_chat_service_proto_rawDescData } -var file_chat_v2_chat_service_proto_enumTypes = make([]protoimpl.EnumInfo, 14) -var file_chat_v2_chat_service_proto_msgTypes = make([]protoimpl.MessageInfo, 36) +var file_chat_v2_chat_service_proto_enumTypes = make([]protoimpl.EnumInfo, 15) +var file_chat_v2_chat_service_proto_msgTypes = make([]protoimpl.MessageInfo, 39) var file_chat_v2_chat_service_proto_goTypes = []interface{}{ (ChatType)(0), // 0: code.chat.v2.ChatType (PointerType)(0), // 1: code.chat.v2.PointerType @@ -3833,160 +4104,173 @@ var file_chat_v2_chat_service_proto_goTypes = []interface{}{ (StartChatResponse_Result)(0), // 7: code.chat.v2.StartChatResponse.Result (SendMessageResponse_Result)(0), // 8: code.chat.v2.SendMessageResponse.Result (AdvancePointerResponse_Result)(0), // 9: code.chat.v2.AdvancePointerResponse.Result - (SetMuteStateResponse_Result)(0), // 10: code.chat.v2.SetMuteStateResponse.Result - (SetSubscriptionStateResponse_Result)(0), // 11: code.chat.v2.SetSubscriptionStateResponse.Result - (ChatMemberIdentity_Platform)(0), // 12: code.chat.v2.ChatMemberIdentity.Platform - (ExchangeDataContent_Verb)(0), // 13: code.chat.v2.ExchangeDataContent.Verb - (*GetChatsRequest)(nil), // 14: code.chat.v2.GetChatsRequest - (*GetChatsResponse)(nil), // 15: code.chat.v2.GetChatsResponse - (*GetMessagesRequest)(nil), // 16: code.chat.v2.GetMessagesRequest - (*GetMessagesResponse)(nil), // 17: code.chat.v2.GetMessagesResponse - (*OpenChatEventStream)(nil), // 18: code.chat.v2.OpenChatEventStream - (*ChatStreamEvent)(nil), // 19: code.chat.v2.ChatStreamEvent - (*ChatStreamEventBatch)(nil), // 20: code.chat.v2.ChatStreamEventBatch - (*ChatStreamEventError)(nil), // 21: code.chat.v2.ChatStreamEventError - (*StreamChatEventsRequest)(nil), // 22: code.chat.v2.StreamChatEventsRequest - (*StreamChatEventsResponse)(nil), // 23: code.chat.v2.StreamChatEventsResponse - (*StartChatRequest)(nil), // 24: code.chat.v2.StartChatRequest - (*StartTipChatParameters)(nil), // 25: code.chat.v2.StartTipChatParameters - (*StartChatResponse)(nil), // 26: code.chat.v2.StartChatResponse - (*SendMessageRequest)(nil), // 27: code.chat.v2.SendMessageRequest - (*SendMessageResponse)(nil), // 28: code.chat.v2.SendMessageResponse - (*AdvancePointerRequest)(nil), // 29: code.chat.v2.AdvancePointerRequest - (*AdvancePointerResponse)(nil), // 30: code.chat.v2.AdvancePointerResponse - (*SetMuteStateRequest)(nil), // 31: code.chat.v2.SetMuteStateRequest - (*SetMuteStateResponse)(nil), // 32: code.chat.v2.SetMuteStateResponse - (*SetSubscriptionStateRequest)(nil), // 33: code.chat.v2.SetSubscriptionStateRequest - (*SetSubscriptionStateResponse)(nil), // 34: code.chat.v2.SetSubscriptionStateResponse - (*ChatId)(nil), // 35: code.chat.v2.ChatId - (*ChatMessageId)(nil), // 36: code.chat.v2.ChatMessageId - (*ChatMemberId)(nil), // 37: code.chat.v2.ChatMemberId - (*ChatMetadata)(nil), // 38: code.chat.v2.ChatMetadata - (*ChatMessage)(nil), // 39: code.chat.v2.ChatMessage - (*ChatMember)(nil), // 40: code.chat.v2.ChatMember - (*ChatMemberIdentity)(nil), // 41: code.chat.v2.ChatMemberIdentity - (*Pointer)(nil), // 42: code.chat.v2.Pointer - (*Content)(nil), // 43: code.chat.v2.Content - (*TextContent)(nil), // 44: code.chat.v2.TextContent - (*LocalizedContent)(nil), // 45: code.chat.v2.LocalizedContent - (*ExchangeDataContent)(nil), // 46: code.chat.v2.ExchangeDataContent - (*NaclBoxEncryptedContent)(nil), // 47: code.chat.v2.NaclBoxEncryptedContent - (*ThankYouContent)(nil), // 48: code.chat.v2.ThankYouContent - (*Cursor)(nil), // 49: code.chat.v2.Cursor - (*v1.SolanaAccountId)(nil), // 50: code.common.v1.SolanaAccountId - (*v1.Signature)(nil), // 51: code.common.v1.Signature - (*v1.ClientPong)(nil), // 52: code.common.v1.ClientPong - (*v1.ServerPing)(nil), // 53: code.common.v1.ServerPing - (*v1.IntentId)(nil), // 54: code.common.v1.IntentId - (*timestamppb.Timestamp)(nil), // 55: google.protobuf.Timestamp - (*v2.ExchangeData)(nil), // 56: code.transaction.v2.ExchangeData - (*v2.ExchangeDataWithoutRate)(nil), // 57: code.transaction.v2.ExchangeDataWithoutRate + (RevealIdentityResponse_Result)(0), // 10: code.chat.v2.RevealIdentityResponse.Result + (SetMuteStateResponse_Result)(0), // 11: code.chat.v2.SetMuteStateResponse.Result + (SetSubscriptionStateResponse_Result)(0), // 12: code.chat.v2.SetSubscriptionStateResponse.Result + (ChatMemberIdentity_Platform)(0), // 13: code.chat.v2.ChatMemberIdentity.Platform + (ExchangeDataContent_Verb)(0), // 14: code.chat.v2.ExchangeDataContent.Verb + (*GetChatsRequest)(nil), // 15: code.chat.v2.GetChatsRequest + (*GetChatsResponse)(nil), // 16: code.chat.v2.GetChatsResponse + (*GetMessagesRequest)(nil), // 17: code.chat.v2.GetMessagesRequest + (*GetMessagesResponse)(nil), // 18: code.chat.v2.GetMessagesResponse + (*OpenChatEventStream)(nil), // 19: code.chat.v2.OpenChatEventStream + (*ChatStreamEvent)(nil), // 20: code.chat.v2.ChatStreamEvent + (*ChatStreamEventBatch)(nil), // 21: code.chat.v2.ChatStreamEventBatch + (*ChatStreamEventError)(nil), // 22: code.chat.v2.ChatStreamEventError + (*StreamChatEventsRequest)(nil), // 23: code.chat.v2.StreamChatEventsRequest + (*StreamChatEventsResponse)(nil), // 24: code.chat.v2.StreamChatEventsResponse + (*StartChatRequest)(nil), // 25: code.chat.v2.StartChatRequest + (*StartTipChatParameters)(nil), // 26: code.chat.v2.StartTipChatParameters + (*StartChatResponse)(nil), // 27: code.chat.v2.StartChatResponse + (*SendMessageRequest)(nil), // 28: code.chat.v2.SendMessageRequest + (*SendMessageResponse)(nil), // 29: code.chat.v2.SendMessageResponse + (*AdvancePointerRequest)(nil), // 30: code.chat.v2.AdvancePointerRequest + (*AdvancePointerResponse)(nil), // 31: code.chat.v2.AdvancePointerResponse + (*RevealIdentityRequest)(nil), // 32: code.chat.v2.RevealIdentityRequest + (*RevealIdentityResponse)(nil), // 33: code.chat.v2.RevealIdentityResponse + (*SetMuteStateRequest)(nil), // 34: code.chat.v2.SetMuteStateRequest + (*SetMuteStateResponse)(nil), // 35: code.chat.v2.SetMuteStateResponse + (*SetSubscriptionStateRequest)(nil), // 36: code.chat.v2.SetSubscriptionStateRequest + (*SetSubscriptionStateResponse)(nil), // 37: code.chat.v2.SetSubscriptionStateResponse + (*ChatId)(nil), // 38: code.chat.v2.ChatId + (*ChatMessageId)(nil), // 39: code.chat.v2.ChatMessageId + (*ChatMemberId)(nil), // 40: code.chat.v2.ChatMemberId + (*ChatMetadata)(nil), // 41: code.chat.v2.ChatMetadata + (*ChatMessage)(nil), // 42: code.chat.v2.ChatMessage + (*ChatMember)(nil), // 43: code.chat.v2.ChatMember + (*ChatMemberIdentity)(nil), // 44: code.chat.v2.ChatMemberIdentity + (*Pointer)(nil), // 45: code.chat.v2.Pointer + (*Content)(nil), // 46: code.chat.v2.Content + (*TextContent)(nil), // 47: code.chat.v2.TextContent + (*LocalizedContent)(nil), // 48: code.chat.v2.LocalizedContent + (*ExchangeDataContent)(nil), // 49: code.chat.v2.ExchangeDataContent + (*NaclBoxEncryptedContent)(nil), // 50: code.chat.v2.NaclBoxEncryptedContent + (*ThankYouContent)(nil), // 51: code.chat.v2.ThankYouContent + (*IdentityRevealedContent)(nil), // 52: code.chat.v2.IdentityRevealedContent + (*Cursor)(nil), // 53: code.chat.v2.Cursor + (*v1.SolanaAccountId)(nil), // 54: code.common.v1.SolanaAccountId + (*v1.Signature)(nil), // 55: code.common.v1.Signature + (*v1.ClientPong)(nil), // 56: code.common.v1.ClientPong + (*v1.ServerPing)(nil), // 57: code.common.v1.ServerPing + (*v1.IntentId)(nil), // 58: code.common.v1.IntentId + (*timestamppb.Timestamp)(nil), // 59: google.protobuf.Timestamp + (*v2.ExchangeData)(nil), // 60: code.transaction.v2.ExchangeData + (*v2.ExchangeDataWithoutRate)(nil), // 61: code.transaction.v2.ExchangeDataWithoutRate } var file_chat_v2_chat_service_proto_depIdxs = []int32{ - 50, // 0: code.chat.v2.GetChatsRequest.owner:type_name -> code.common.v1.SolanaAccountId - 51, // 1: code.chat.v2.GetChatsRequest.signature:type_name -> code.common.v1.Signature - 49, // 2: code.chat.v2.GetChatsRequest.cursor:type_name -> code.chat.v2.Cursor + 54, // 0: code.chat.v2.GetChatsRequest.owner:type_name -> code.common.v1.SolanaAccountId + 55, // 1: code.chat.v2.GetChatsRequest.signature:type_name -> code.common.v1.Signature + 53, // 2: code.chat.v2.GetChatsRequest.cursor:type_name -> code.chat.v2.Cursor 2, // 3: code.chat.v2.GetChatsRequest.direction:type_name -> code.chat.v2.GetChatsRequest.Direction 3, // 4: code.chat.v2.GetChatsResponse.result:type_name -> code.chat.v2.GetChatsResponse.Result - 38, // 5: code.chat.v2.GetChatsResponse.chats:type_name -> code.chat.v2.ChatMetadata - 35, // 6: code.chat.v2.GetMessagesRequest.chat_id:type_name -> code.chat.v2.ChatId - 37, // 7: code.chat.v2.GetMessagesRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 50, // 8: code.chat.v2.GetMessagesRequest.owner:type_name -> code.common.v1.SolanaAccountId - 51, // 9: code.chat.v2.GetMessagesRequest.signature:type_name -> code.common.v1.Signature - 49, // 10: code.chat.v2.GetMessagesRequest.cursor:type_name -> code.chat.v2.Cursor + 41, // 5: code.chat.v2.GetChatsResponse.chats:type_name -> code.chat.v2.ChatMetadata + 38, // 6: code.chat.v2.GetMessagesRequest.chat_id:type_name -> code.chat.v2.ChatId + 40, // 7: code.chat.v2.GetMessagesRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 54, // 8: code.chat.v2.GetMessagesRequest.owner:type_name -> code.common.v1.SolanaAccountId + 55, // 9: code.chat.v2.GetMessagesRequest.signature:type_name -> code.common.v1.Signature + 53, // 10: code.chat.v2.GetMessagesRequest.cursor:type_name -> code.chat.v2.Cursor 4, // 11: code.chat.v2.GetMessagesRequest.direction:type_name -> code.chat.v2.GetMessagesRequest.Direction 5, // 12: code.chat.v2.GetMessagesResponse.result:type_name -> code.chat.v2.GetMessagesResponse.Result - 39, // 13: code.chat.v2.GetMessagesResponse.messages:type_name -> code.chat.v2.ChatMessage - 35, // 14: code.chat.v2.OpenChatEventStream.chat_id:type_name -> code.chat.v2.ChatId - 37, // 15: code.chat.v2.OpenChatEventStream.member_id:type_name -> code.chat.v2.ChatMemberId - 50, // 16: code.chat.v2.OpenChatEventStream.owner:type_name -> code.common.v1.SolanaAccountId - 51, // 17: code.chat.v2.OpenChatEventStream.signature:type_name -> code.common.v1.Signature - 39, // 18: code.chat.v2.ChatStreamEvent.message:type_name -> code.chat.v2.ChatMessage - 42, // 19: code.chat.v2.ChatStreamEvent.pointer:type_name -> code.chat.v2.Pointer - 19, // 20: code.chat.v2.ChatStreamEventBatch.events:type_name -> code.chat.v2.ChatStreamEvent + 42, // 13: code.chat.v2.GetMessagesResponse.messages:type_name -> code.chat.v2.ChatMessage + 38, // 14: code.chat.v2.OpenChatEventStream.chat_id:type_name -> code.chat.v2.ChatId + 40, // 15: code.chat.v2.OpenChatEventStream.member_id:type_name -> code.chat.v2.ChatMemberId + 54, // 16: code.chat.v2.OpenChatEventStream.owner:type_name -> code.common.v1.SolanaAccountId + 55, // 17: code.chat.v2.OpenChatEventStream.signature:type_name -> code.common.v1.Signature + 42, // 18: code.chat.v2.ChatStreamEvent.message:type_name -> code.chat.v2.ChatMessage + 45, // 19: code.chat.v2.ChatStreamEvent.pointer:type_name -> code.chat.v2.Pointer + 20, // 20: code.chat.v2.ChatStreamEventBatch.events:type_name -> code.chat.v2.ChatStreamEvent 6, // 21: code.chat.v2.ChatStreamEventError.code:type_name -> code.chat.v2.ChatStreamEventError.Code - 18, // 22: code.chat.v2.StreamChatEventsRequest.open_stream:type_name -> code.chat.v2.OpenChatEventStream - 52, // 23: code.chat.v2.StreamChatEventsRequest.pong:type_name -> code.common.v1.ClientPong - 20, // 24: code.chat.v2.StreamChatEventsResponse.events:type_name -> code.chat.v2.ChatStreamEventBatch - 53, // 25: code.chat.v2.StreamChatEventsResponse.ping:type_name -> code.common.v1.ServerPing - 21, // 26: code.chat.v2.StreamChatEventsResponse.error:type_name -> code.chat.v2.ChatStreamEventError - 50, // 27: code.chat.v2.StartChatRequest.owner:type_name -> code.common.v1.SolanaAccountId - 51, // 28: code.chat.v2.StartChatRequest.signature:type_name -> code.common.v1.Signature - 25, // 29: code.chat.v2.StartChatRequest.tip_chat:type_name -> code.chat.v2.StartTipChatParameters - 54, // 30: code.chat.v2.StartTipChatParameters.intent_id:type_name -> code.common.v1.IntentId + 19, // 22: code.chat.v2.StreamChatEventsRequest.open_stream:type_name -> code.chat.v2.OpenChatEventStream + 56, // 23: code.chat.v2.StreamChatEventsRequest.pong:type_name -> code.common.v1.ClientPong + 21, // 24: code.chat.v2.StreamChatEventsResponse.events:type_name -> code.chat.v2.ChatStreamEventBatch + 57, // 25: code.chat.v2.StreamChatEventsResponse.ping:type_name -> code.common.v1.ServerPing + 22, // 26: code.chat.v2.StreamChatEventsResponse.error:type_name -> code.chat.v2.ChatStreamEventError + 54, // 27: code.chat.v2.StartChatRequest.owner:type_name -> code.common.v1.SolanaAccountId + 55, // 28: code.chat.v2.StartChatRequest.signature:type_name -> code.common.v1.Signature + 26, // 29: code.chat.v2.StartChatRequest.tip_chat:type_name -> code.chat.v2.StartTipChatParameters + 58, // 30: code.chat.v2.StartTipChatParameters.intent_id:type_name -> code.common.v1.IntentId 7, // 31: code.chat.v2.StartChatResponse.result:type_name -> code.chat.v2.StartChatResponse.Result - 38, // 32: code.chat.v2.StartChatResponse.chat:type_name -> code.chat.v2.ChatMetadata - 35, // 33: code.chat.v2.SendMessageRequest.chat_id:type_name -> code.chat.v2.ChatId - 37, // 34: code.chat.v2.SendMessageRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 43, // 35: code.chat.v2.SendMessageRequest.content:type_name -> code.chat.v2.Content - 50, // 36: code.chat.v2.SendMessageRequest.owner:type_name -> code.common.v1.SolanaAccountId - 51, // 37: code.chat.v2.SendMessageRequest.signature:type_name -> code.common.v1.Signature + 41, // 32: code.chat.v2.StartChatResponse.chat:type_name -> code.chat.v2.ChatMetadata + 38, // 33: code.chat.v2.SendMessageRequest.chat_id:type_name -> code.chat.v2.ChatId + 40, // 34: code.chat.v2.SendMessageRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 46, // 35: code.chat.v2.SendMessageRequest.content:type_name -> code.chat.v2.Content + 54, // 36: code.chat.v2.SendMessageRequest.owner:type_name -> code.common.v1.SolanaAccountId + 55, // 37: code.chat.v2.SendMessageRequest.signature:type_name -> code.common.v1.Signature 8, // 38: code.chat.v2.SendMessageResponse.result:type_name -> code.chat.v2.SendMessageResponse.Result - 39, // 39: code.chat.v2.SendMessageResponse.message:type_name -> code.chat.v2.ChatMessage - 35, // 40: code.chat.v2.AdvancePointerRequest.chat_id:type_name -> code.chat.v2.ChatId - 42, // 41: code.chat.v2.AdvancePointerRequest.pointer:type_name -> code.chat.v2.Pointer - 50, // 42: code.chat.v2.AdvancePointerRequest.owner:type_name -> code.common.v1.SolanaAccountId - 51, // 43: code.chat.v2.AdvancePointerRequest.signature:type_name -> code.common.v1.Signature + 42, // 39: code.chat.v2.SendMessageResponse.message:type_name -> code.chat.v2.ChatMessage + 38, // 40: code.chat.v2.AdvancePointerRequest.chat_id:type_name -> code.chat.v2.ChatId + 45, // 41: code.chat.v2.AdvancePointerRequest.pointer:type_name -> code.chat.v2.Pointer + 54, // 42: code.chat.v2.AdvancePointerRequest.owner:type_name -> code.common.v1.SolanaAccountId + 55, // 43: code.chat.v2.AdvancePointerRequest.signature:type_name -> code.common.v1.Signature 9, // 44: code.chat.v2.AdvancePointerResponse.result:type_name -> code.chat.v2.AdvancePointerResponse.Result - 35, // 45: code.chat.v2.SetMuteStateRequest.chat_id:type_name -> code.chat.v2.ChatId - 37, // 46: code.chat.v2.SetMuteStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 50, // 47: code.chat.v2.SetMuteStateRequest.owner:type_name -> code.common.v1.SolanaAccountId - 51, // 48: code.chat.v2.SetMuteStateRequest.signature:type_name -> code.common.v1.Signature - 10, // 49: code.chat.v2.SetMuteStateResponse.result:type_name -> code.chat.v2.SetMuteStateResponse.Result - 35, // 50: code.chat.v2.SetSubscriptionStateRequest.chat_id:type_name -> code.chat.v2.ChatId - 37, // 51: code.chat.v2.SetSubscriptionStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 50, // 52: code.chat.v2.SetSubscriptionStateRequest.owner:type_name -> code.common.v1.SolanaAccountId - 51, // 53: code.chat.v2.SetSubscriptionStateRequest.signature:type_name -> code.common.v1.Signature - 11, // 54: code.chat.v2.SetSubscriptionStateResponse.result:type_name -> code.chat.v2.SetSubscriptionStateResponse.Result - 35, // 55: code.chat.v2.ChatMetadata.chat_id:type_name -> code.chat.v2.ChatId - 0, // 56: code.chat.v2.ChatMetadata.kind:type_name -> code.chat.v2.ChatType - 40, // 57: code.chat.v2.ChatMetadata.members:type_name -> code.chat.v2.ChatMember - 49, // 58: code.chat.v2.ChatMetadata.cursor:type_name -> code.chat.v2.Cursor - 36, // 59: code.chat.v2.ChatMessage.message_id:type_name -> code.chat.v2.ChatMessageId - 37, // 60: code.chat.v2.ChatMessage.sender_id:type_name -> code.chat.v2.ChatMemberId - 43, // 61: code.chat.v2.ChatMessage.content:type_name -> code.chat.v2.Content - 55, // 62: code.chat.v2.ChatMessage.ts:type_name -> google.protobuf.Timestamp - 49, // 63: code.chat.v2.ChatMessage.cursor:type_name -> code.chat.v2.Cursor - 37, // 64: code.chat.v2.ChatMember.member_id:type_name -> code.chat.v2.ChatMemberId - 41, // 65: code.chat.v2.ChatMember.identity:type_name -> code.chat.v2.ChatMemberIdentity - 42, // 66: code.chat.v2.ChatMember.pointers:type_name -> code.chat.v2.Pointer - 12, // 67: code.chat.v2.ChatMemberIdentity.platform:type_name -> code.chat.v2.ChatMemberIdentity.Platform - 1, // 68: code.chat.v2.Pointer.kind:type_name -> code.chat.v2.PointerType - 36, // 69: code.chat.v2.Pointer.value:type_name -> code.chat.v2.ChatMessageId - 37, // 70: code.chat.v2.Pointer.member_id:type_name -> code.chat.v2.ChatMemberId - 44, // 71: code.chat.v2.Content.text:type_name -> code.chat.v2.TextContent - 45, // 72: code.chat.v2.Content.localized:type_name -> code.chat.v2.LocalizedContent - 46, // 73: code.chat.v2.Content.exchange_data:type_name -> code.chat.v2.ExchangeDataContent - 47, // 74: code.chat.v2.Content.nacl_box:type_name -> code.chat.v2.NaclBoxEncryptedContent - 48, // 75: code.chat.v2.Content.thank_you:type_name -> code.chat.v2.ThankYouContent - 13, // 76: code.chat.v2.ExchangeDataContent.verb:type_name -> code.chat.v2.ExchangeDataContent.Verb - 56, // 77: code.chat.v2.ExchangeDataContent.exact:type_name -> code.transaction.v2.ExchangeData - 57, // 78: code.chat.v2.ExchangeDataContent.partial:type_name -> code.transaction.v2.ExchangeDataWithoutRate - 54, // 79: code.chat.v2.ExchangeDataContent.intent:type_name -> code.common.v1.IntentId - 51, // 80: code.chat.v2.ExchangeDataContent.signature:type_name -> code.common.v1.Signature - 50, // 81: code.chat.v2.NaclBoxEncryptedContent.peer_public_key:type_name -> code.common.v1.SolanaAccountId - 54, // 82: code.chat.v2.ThankYouContent.tip_intent:type_name -> code.common.v1.IntentId - 14, // 83: code.chat.v2.Chat.GetChats:input_type -> code.chat.v2.GetChatsRequest - 16, // 84: code.chat.v2.Chat.GetMessages:input_type -> code.chat.v2.GetMessagesRequest - 22, // 85: code.chat.v2.Chat.StreamChatEvents:input_type -> code.chat.v2.StreamChatEventsRequest - 24, // 86: code.chat.v2.Chat.StartChat:input_type -> code.chat.v2.StartChatRequest - 27, // 87: code.chat.v2.Chat.SendMessage:input_type -> code.chat.v2.SendMessageRequest - 29, // 88: code.chat.v2.Chat.AdvancePointer:input_type -> code.chat.v2.AdvancePointerRequest - 31, // 89: code.chat.v2.Chat.SetMuteState:input_type -> code.chat.v2.SetMuteStateRequest - 33, // 90: code.chat.v2.Chat.SetSubscriptionState:input_type -> code.chat.v2.SetSubscriptionStateRequest - 15, // 91: code.chat.v2.Chat.GetChats:output_type -> code.chat.v2.GetChatsResponse - 17, // 92: code.chat.v2.Chat.GetMessages:output_type -> code.chat.v2.GetMessagesResponse - 23, // 93: code.chat.v2.Chat.StreamChatEvents:output_type -> code.chat.v2.StreamChatEventsResponse - 26, // 94: code.chat.v2.Chat.StartChat:output_type -> code.chat.v2.StartChatResponse - 28, // 95: code.chat.v2.Chat.SendMessage:output_type -> code.chat.v2.SendMessageResponse - 30, // 96: code.chat.v2.Chat.AdvancePointer:output_type -> code.chat.v2.AdvancePointerResponse - 32, // 97: code.chat.v2.Chat.SetMuteState:output_type -> code.chat.v2.SetMuteStateResponse - 34, // 98: code.chat.v2.Chat.SetSubscriptionState:output_type -> code.chat.v2.SetSubscriptionStateResponse - 91, // [91:99] is the sub-list for method output_type - 83, // [83:91] is the sub-list for method input_type - 83, // [83:83] is the sub-list for extension type_name - 83, // [83:83] is the sub-list for extension extendee - 0, // [0:83] is the sub-list for field type_name + 38, // 45: code.chat.v2.RevealIdentityRequest.chat_id:type_name -> code.chat.v2.ChatId + 40, // 46: code.chat.v2.RevealIdentityRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 44, // 47: code.chat.v2.RevealIdentityRequest.identity:type_name -> code.chat.v2.ChatMemberIdentity + 54, // 48: code.chat.v2.RevealIdentityRequest.owner:type_name -> code.common.v1.SolanaAccountId + 55, // 49: code.chat.v2.RevealIdentityRequest.signature:type_name -> code.common.v1.Signature + 10, // 50: code.chat.v2.RevealIdentityResponse.result:type_name -> code.chat.v2.RevealIdentityResponse.Result + 38, // 51: code.chat.v2.SetMuteStateRequest.chat_id:type_name -> code.chat.v2.ChatId + 40, // 52: code.chat.v2.SetMuteStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 54, // 53: code.chat.v2.SetMuteStateRequest.owner:type_name -> code.common.v1.SolanaAccountId + 55, // 54: code.chat.v2.SetMuteStateRequest.signature:type_name -> code.common.v1.Signature + 11, // 55: code.chat.v2.SetMuteStateResponse.result:type_name -> code.chat.v2.SetMuteStateResponse.Result + 38, // 56: code.chat.v2.SetSubscriptionStateRequest.chat_id:type_name -> code.chat.v2.ChatId + 40, // 57: code.chat.v2.SetSubscriptionStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 54, // 58: code.chat.v2.SetSubscriptionStateRequest.owner:type_name -> code.common.v1.SolanaAccountId + 55, // 59: code.chat.v2.SetSubscriptionStateRequest.signature:type_name -> code.common.v1.Signature + 12, // 60: code.chat.v2.SetSubscriptionStateResponse.result:type_name -> code.chat.v2.SetSubscriptionStateResponse.Result + 38, // 61: code.chat.v2.ChatMetadata.chat_id:type_name -> code.chat.v2.ChatId + 0, // 62: code.chat.v2.ChatMetadata.kind:type_name -> code.chat.v2.ChatType + 43, // 63: code.chat.v2.ChatMetadata.members:type_name -> code.chat.v2.ChatMember + 53, // 64: code.chat.v2.ChatMetadata.cursor:type_name -> code.chat.v2.Cursor + 39, // 65: code.chat.v2.ChatMessage.message_id:type_name -> code.chat.v2.ChatMessageId + 40, // 66: code.chat.v2.ChatMessage.sender_id:type_name -> code.chat.v2.ChatMemberId + 46, // 67: code.chat.v2.ChatMessage.content:type_name -> code.chat.v2.Content + 59, // 68: code.chat.v2.ChatMessage.ts:type_name -> google.protobuf.Timestamp + 53, // 69: code.chat.v2.ChatMessage.cursor:type_name -> code.chat.v2.Cursor + 40, // 70: code.chat.v2.ChatMember.member_id:type_name -> code.chat.v2.ChatMemberId + 44, // 71: code.chat.v2.ChatMember.identity:type_name -> code.chat.v2.ChatMemberIdentity + 45, // 72: code.chat.v2.ChatMember.pointers:type_name -> code.chat.v2.Pointer + 13, // 73: code.chat.v2.ChatMemberIdentity.platform:type_name -> code.chat.v2.ChatMemberIdentity.Platform + 1, // 74: code.chat.v2.Pointer.kind:type_name -> code.chat.v2.PointerType + 39, // 75: code.chat.v2.Pointer.value:type_name -> code.chat.v2.ChatMessageId + 40, // 76: code.chat.v2.Pointer.member_id:type_name -> code.chat.v2.ChatMemberId + 47, // 77: code.chat.v2.Content.text:type_name -> code.chat.v2.TextContent + 48, // 78: code.chat.v2.Content.localized:type_name -> code.chat.v2.LocalizedContent + 49, // 79: code.chat.v2.Content.exchange_data:type_name -> code.chat.v2.ExchangeDataContent + 50, // 80: code.chat.v2.Content.nacl_box:type_name -> code.chat.v2.NaclBoxEncryptedContent + 51, // 81: code.chat.v2.Content.thank_you:type_name -> code.chat.v2.ThankYouContent + 52, // 82: code.chat.v2.Content.identity_revealed:type_name -> code.chat.v2.IdentityRevealedContent + 14, // 83: code.chat.v2.ExchangeDataContent.verb:type_name -> code.chat.v2.ExchangeDataContent.Verb + 60, // 84: code.chat.v2.ExchangeDataContent.exact:type_name -> code.transaction.v2.ExchangeData + 61, // 85: code.chat.v2.ExchangeDataContent.partial:type_name -> code.transaction.v2.ExchangeDataWithoutRate + 58, // 86: code.chat.v2.ExchangeDataContent.intent:type_name -> code.common.v1.IntentId + 55, // 87: code.chat.v2.ExchangeDataContent.signature:type_name -> code.common.v1.Signature + 54, // 88: code.chat.v2.NaclBoxEncryptedContent.peer_public_key:type_name -> code.common.v1.SolanaAccountId + 58, // 89: code.chat.v2.ThankYouContent.tip_intent:type_name -> code.common.v1.IntentId + 15, // 90: code.chat.v2.Chat.GetChats:input_type -> code.chat.v2.GetChatsRequest + 17, // 91: code.chat.v2.Chat.GetMessages:input_type -> code.chat.v2.GetMessagesRequest + 23, // 92: code.chat.v2.Chat.StreamChatEvents:input_type -> code.chat.v2.StreamChatEventsRequest + 25, // 93: code.chat.v2.Chat.StartChat:input_type -> code.chat.v2.StartChatRequest + 28, // 94: code.chat.v2.Chat.SendMessage:input_type -> code.chat.v2.SendMessageRequest + 30, // 95: code.chat.v2.Chat.AdvancePointer:input_type -> code.chat.v2.AdvancePointerRequest + 32, // 96: code.chat.v2.Chat.RevealIdentity:input_type -> code.chat.v2.RevealIdentityRequest + 34, // 97: code.chat.v2.Chat.SetMuteState:input_type -> code.chat.v2.SetMuteStateRequest + 36, // 98: code.chat.v2.Chat.SetSubscriptionState:input_type -> code.chat.v2.SetSubscriptionStateRequest + 16, // 99: code.chat.v2.Chat.GetChats:output_type -> code.chat.v2.GetChatsResponse + 18, // 100: code.chat.v2.Chat.GetMessages:output_type -> code.chat.v2.GetMessagesResponse + 24, // 101: code.chat.v2.Chat.StreamChatEvents:output_type -> code.chat.v2.StreamChatEventsResponse + 27, // 102: code.chat.v2.Chat.StartChat:output_type -> code.chat.v2.StartChatResponse + 29, // 103: code.chat.v2.Chat.SendMessage:output_type -> code.chat.v2.SendMessageResponse + 31, // 104: code.chat.v2.Chat.AdvancePointer:output_type -> code.chat.v2.AdvancePointerResponse + 33, // 105: code.chat.v2.Chat.RevealIdentity:output_type -> code.chat.v2.RevealIdentityResponse + 35, // 106: code.chat.v2.Chat.SetMuteState:output_type -> code.chat.v2.SetMuteStateResponse + 37, // 107: code.chat.v2.Chat.SetSubscriptionState:output_type -> code.chat.v2.SetSubscriptionStateResponse + 99, // [99:108] is the sub-list for method output_type + 90, // [90:99] is the sub-list for method input_type + 90, // [90:90] is the sub-list for extension type_name + 90, // [90:90] is the sub-list for extension extendee + 0, // [0:90] is the sub-list for field type_name } func init() { file_chat_v2_chat_service_proto_init() } @@ -4200,7 +4484,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetMuteStateRequest); i { + switch v := v.(*RevealIdentityRequest); i { case 0: return &v.state case 1: @@ -4212,7 +4496,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetMuteStateResponse); i { + switch v := v.(*RevealIdentityResponse); i { case 0: return &v.state case 1: @@ -4224,7 +4508,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetSubscriptionStateRequest); i { + switch v := v.(*SetMuteStateRequest); i { case 0: return &v.state case 1: @@ -4236,7 +4520,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetSubscriptionStateResponse); i { + switch v := v.(*SetMuteStateResponse); i { case 0: return &v.state case 1: @@ -4248,7 +4532,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatId); i { + switch v := v.(*SetSubscriptionStateRequest); i { case 0: return &v.state case 1: @@ -4260,7 +4544,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatMessageId); i { + switch v := v.(*SetSubscriptionStateResponse); i { case 0: return &v.state case 1: @@ -4272,7 +4556,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatMemberId); i { + switch v := v.(*ChatId); i { case 0: return &v.state case 1: @@ -4284,7 +4568,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatMetadata); i { + switch v := v.(*ChatMessageId); i { case 0: return &v.state case 1: @@ -4296,7 +4580,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatMessage); i { + switch v := v.(*ChatMemberId); i { case 0: return &v.state case 1: @@ -4308,7 +4592,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatMember); i { + switch v := v.(*ChatMetadata); i { case 0: return &v.state case 1: @@ -4320,7 +4604,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ChatMemberIdentity); i { + switch v := v.(*ChatMessage); i { case 0: return &v.state case 1: @@ -4332,7 +4616,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Pointer); i { + switch v := v.(*ChatMember); i { case 0: return &v.state case 1: @@ -4344,7 +4628,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Content); i { + switch v := v.(*ChatMemberIdentity); i { case 0: return &v.state case 1: @@ -4356,7 +4640,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TextContent); i { + switch v := v.(*Pointer); i { case 0: return &v.state case 1: @@ -4368,7 +4652,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LocalizedContent); i { + switch v := v.(*Content); i { case 0: return &v.state case 1: @@ -4380,7 +4664,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ExchangeDataContent); i { + switch v := v.(*TextContent); i { case 0: return &v.state case 1: @@ -4392,7 +4676,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NaclBoxEncryptedContent); i { + switch v := v.(*LocalizedContent); i { case 0: return &v.state case 1: @@ -4404,7 +4688,7 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ThankYouContent); i { + switch v := v.(*ExchangeDataContent); i { case 0: return &v.state case 1: @@ -4416,6 +4700,42 @@ func file_chat_v2_chat_service_proto_init() { } } file_chat_v2_chat_service_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*NaclBoxEncryptedContent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ThankYouContent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*IdentityRevealedContent); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v2_chat_service_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Cursor); i { case 0: return &v.state @@ -4444,14 +4764,15 @@ func file_chat_v2_chat_service_proto_init() { file_chat_v2_chat_service_proto_msgTypes[10].OneofWrappers = []interface{}{ (*StartChatRequest_TipChat)(nil), } - file_chat_v2_chat_service_proto_msgTypes[29].OneofWrappers = []interface{}{ + file_chat_v2_chat_service_proto_msgTypes[31].OneofWrappers = []interface{}{ (*Content_Text)(nil), (*Content_Localized)(nil), (*Content_ExchangeData)(nil), (*Content_NaclBox)(nil), (*Content_ThankYou)(nil), + (*Content_IdentityRevealed)(nil), } - file_chat_v2_chat_service_proto_msgTypes[32].OneofWrappers = []interface{}{ + file_chat_v2_chat_service_proto_msgTypes[34].OneofWrappers = []interface{}{ (*ExchangeDataContent_Exact)(nil), (*ExchangeDataContent_Partial)(nil), (*ExchangeDataContent_Intent)(nil), @@ -4462,8 +4783,8 @@ func file_chat_v2_chat_service_proto_init() { File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_chat_v2_chat_service_proto_rawDesc, - NumEnums: 14, - NumMessages: 36, + NumEnums: 15, + NumMessages: 39, NumExtensions: 0, NumServices: 1, }, diff --git a/generated/go/chat/v2/chat_service.pb.validate.go b/generated/go/chat/v2/chat_service.pb.validate.go index fd04992..216c8b7 100644 --- a/generated/go/chat/v2/chat_service.pb.validate.go +++ b/generated/go/chat/v2/chat_service.pb.validate.go @@ -1815,6 +1815,227 @@ var _ interface { ErrorName() string } = AdvancePointerResponseValidationError{} +// Validate checks the field values on RevealIdentityRequest with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *RevealIdentityRequest) Validate() error { + if m == nil { + return nil + } + + if m.GetChatId() == nil { + return RevealIdentityRequestValidationError{ + field: "ChatId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetChatId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RevealIdentityRequestValidationError{ + field: "ChatId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetMemberId() == nil { + return RevealIdentityRequestValidationError{ + field: "MemberId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetMemberId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RevealIdentityRequestValidationError{ + field: "MemberId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetIdentity() == nil { + return RevealIdentityRequestValidationError{ + field: "Identity", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetIdentity()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RevealIdentityRequestValidationError{ + field: "Identity", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetOwner() == nil { + return RevealIdentityRequestValidationError{ + field: "Owner", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetOwner()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RevealIdentityRequestValidationError{ + field: "Owner", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetSignature() == nil { + return RevealIdentityRequestValidationError{ + field: "Signature", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetSignature()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RevealIdentityRequestValidationError{ + field: "Signature", + reason: "embedded message failed validation", + cause: err, + } + } + } + + return nil +} + +// RevealIdentityRequestValidationError is the validation error returned by +// RevealIdentityRequest.Validate if the designated constraints aren't met. +type RevealIdentityRequestValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RevealIdentityRequestValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RevealIdentityRequestValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RevealIdentityRequestValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RevealIdentityRequestValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RevealIdentityRequestValidationError) ErrorName() string { + return "RevealIdentityRequestValidationError" +} + +// Error satisfies the builtin error interface +func (e RevealIdentityRequestValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRevealIdentityRequest.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RevealIdentityRequestValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RevealIdentityRequestValidationError{} + +// Validate checks the field values on RevealIdentityResponse with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *RevealIdentityResponse) Validate() error { + if m == nil { + return nil + } + + // no validation rules for Result + + return nil +} + +// RevealIdentityResponseValidationError is the validation error returned by +// RevealIdentityResponse.Validate if the designated constraints aren't met. +type RevealIdentityResponseValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e RevealIdentityResponseValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e RevealIdentityResponseValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e RevealIdentityResponseValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e RevealIdentityResponseValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e RevealIdentityResponseValidationError) ErrorName() string { + return "RevealIdentityResponseValidationError" +} + +// Error satisfies the builtin error interface +func (e RevealIdentityResponseValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sRevealIdentityResponse.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = RevealIdentityResponseValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = RevealIdentityResponseValidationError{} + // Validate checks the field values on SetMuteStateRequest with the rules // defined in the proto definition for this message. If any rules are // violated, an error is returned. @@ -3095,6 +3316,18 @@ func (m *Content) Validate() error { } } + case *Content_IdentityRevealed: + + if v, ok := interface{}(m.GetIdentityRevealed()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return ContentValidationError{ + field: "IdentityRevealed", + reason: "embedded message failed validation", + cause: err, + } + } + } + default: return ContentValidationError{ field: "Type", @@ -3630,6 +3863,73 @@ var _ interface { ErrorName() string } = ThankYouContentValidationError{} +// Validate checks the field values on IdentityRevealedContent with the rules +// defined in the proto definition for this message. If any rules are +// violated, an error is returned. +func (m *IdentityRevealedContent) Validate() error { + if m == nil { + return nil + } + + return nil +} + +// IdentityRevealedContentValidationError is the validation error returned by +// IdentityRevealedContent.Validate if the designated constraints aren't met. +type IdentityRevealedContentValidationError struct { + field string + reason string + cause error + key bool +} + +// Field function returns field value. +func (e IdentityRevealedContentValidationError) Field() string { return e.field } + +// Reason function returns reason value. +func (e IdentityRevealedContentValidationError) Reason() string { return e.reason } + +// Cause function returns cause value. +func (e IdentityRevealedContentValidationError) Cause() error { return e.cause } + +// Key function returns key value. +func (e IdentityRevealedContentValidationError) Key() bool { return e.key } + +// ErrorName returns error name. +func (e IdentityRevealedContentValidationError) ErrorName() string { + return "IdentityRevealedContentValidationError" +} + +// Error satisfies the builtin error interface +func (e IdentityRevealedContentValidationError) Error() string { + cause := "" + if e.cause != nil { + cause = fmt.Sprintf(" | caused by: %v", e.cause) + } + + key := "" + if e.key { + key = "key for " + } + + return fmt.Sprintf( + "invalid %sIdentityRevealedContent.%s: %s%s", + key, + e.field, + e.reason, + cause) +} + +var _ error = IdentityRevealedContentValidationError{} + +var _ interface { + Field() string + Reason() string + Key() bool + Cause() error + ErrorName() string +} = IdentityRevealedContentValidationError{} + // Validate checks the field values on Cursor with the rules defined in the // proto definition for this message. If any rules are violated, an error is returned. func (m *Cursor) Validate() error { diff --git a/generated/go/chat/v2/chat_service_grpc.pb.go b/generated/go/chat/v2/chat_service_grpc.pb.go index a58200f..2db32b5 100644 --- a/generated/go/chat/v2/chat_service_grpc.pb.go +++ b/generated/go/chat/v2/chat_service_grpc.pb.go @@ -36,6 +36,9 @@ type ChatClient interface { SendMessage(ctx context.Context, in *SendMessageRequest, opts ...grpc.CallOption) (*SendMessageResponse, error) // AdvancePointer advances a pointer in chat history AdvancePointer(ctx context.Context, in *AdvancePointerRequest, opts ...grpc.CallOption) (*AdvancePointerResponse, error) + // RevealIdentity reveals a chat member's identity if it is anonymous. A chat + // message will be inserted on success. + RevealIdentity(ctx context.Context, in *RevealIdentityRequest, opts ...grpc.CallOption) (*RevealIdentityResponse, error) // SetMuteState configures the mute state of a chat SetMuteState(ctx context.Context, in *SetMuteStateRequest, opts ...grpc.CallOption) (*SetMuteStateResponse, error) // SetSubscriptionState configures the susbscription state of a chat @@ -126,6 +129,15 @@ func (c *chatClient) AdvancePointer(ctx context.Context, in *AdvancePointerReque return out, nil } +func (c *chatClient) RevealIdentity(ctx context.Context, in *RevealIdentityRequest, opts ...grpc.CallOption) (*RevealIdentityResponse, error) { + out := new(RevealIdentityResponse) + err := c.cc.Invoke(ctx, "/code.chat.v2.Chat/RevealIdentity", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + func (c *chatClient) SetMuteState(ctx context.Context, in *SetMuteStateRequest, opts ...grpc.CallOption) (*SetMuteStateResponse, error) { out := new(SetMuteStateResponse) err := c.cc.Invoke(ctx, "/code.chat.v2.Chat/SetMuteState", in, out, opts...) @@ -162,6 +174,9 @@ type ChatServer interface { SendMessage(context.Context, *SendMessageRequest) (*SendMessageResponse, error) // AdvancePointer advances a pointer in chat history AdvancePointer(context.Context, *AdvancePointerRequest) (*AdvancePointerResponse, error) + // RevealIdentity reveals a chat member's identity if it is anonymous. A chat + // message will be inserted on success. + RevealIdentity(context.Context, *RevealIdentityRequest) (*RevealIdentityResponse, error) // SetMuteState configures the mute state of a chat SetMuteState(context.Context, *SetMuteStateRequest) (*SetMuteStateResponse, error) // SetSubscriptionState configures the susbscription state of a chat @@ -191,6 +206,9 @@ func (UnimplementedChatServer) SendMessage(context.Context, *SendMessageRequest) func (UnimplementedChatServer) AdvancePointer(context.Context, *AdvancePointerRequest) (*AdvancePointerResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method AdvancePointer not implemented") } +func (UnimplementedChatServer) RevealIdentity(context.Context, *RevealIdentityRequest) (*RevealIdentityResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method RevealIdentity not implemented") +} func (UnimplementedChatServer) SetMuteState(context.Context, *SetMuteStateRequest) (*SetMuteStateResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method SetMuteState not implemented") } @@ -326,6 +344,24 @@ func _Chat_AdvancePointer_Handler(srv interface{}, ctx context.Context, dec func return interceptor(ctx, in, info, handler) } +func _Chat_RevealIdentity_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(RevealIdentityRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ChatServer).RevealIdentity(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/code.chat.v2.Chat/RevealIdentity", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ChatServer).RevealIdentity(ctx, req.(*RevealIdentityRequest)) + } + return interceptor(ctx, in, info, handler) +} + func _Chat_SetMuteState_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { in := new(SetMuteStateRequest) if err := dec(in); err != nil { @@ -389,6 +425,10 @@ var Chat_ServiceDesc = grpc.ServiceDesc{ MethodName: "AdvancePointer", Handler: _Chat_AdvancePointer_Handler, }, + { + MethodName: "RevealIdentity", + Handler: _Chat_RevealIdentity_Handler, + }, { MethodName: "SetMuteState", Handler: _Chat_SetMuteState_Handler, diff --git a/proto/chat/v2/chat_service.proto b/proto/chat/v2/chat_service.proto index 321d2eb..25ea446 100644 --- a/proto/chat/v2/chat_service.proto +++ b/proto/chat/v2/chat_service.proto @@ -32,6 +32,10 @@ service Chat { // AdvancePointer advances a pointer in chat history rpc AdvancePointer(AdvancePointerRequest) returns (AdvancePointerResponse); + // RevealIdentity reveals a chat member's identity if it is anonymous. A chat + // message will be inserted on success. + rpc RevealIdentity(RevealIdentityRequest) returns (RevealIdentityResponse); + // SetMuteState configures the mute state of a chat rpc SetMuteState(SetMuteStateRequest) returns (SetMuteStateResponse); @@ -238,6 +242,27 @@ message AdvancePointerResponse { } } +message RevealIdentityRequest { + ChatId chat_id = 1 [(validate.rules).message.required = true]; + + ChatMemberId member_id = 2 [(validate.rules).message.required = true]; + + ChatMemberIdentity identity = 3 [(validate.rules).message.required = true]; + + common.v1.SolanaAccountId owner = 4 [(validate.rules).message.required = true]; + + common.v1.Signature signature = 5 [(validate.rules).message.required = true]; +} + +message RevealIdentityResponse { + Result result = 1; + enum Result { + OK = 0; + DENIED = 1; + CHAT_NOT_FOUND = 2; + } +} + message SetMuteStateRequest { ChatId chat_id = 1 [(validate.rules).message.required = true]; @@ -455,11 +480,12 @@ message Content { oneof type { option (validate.required) = true; - TextContent text = 1; - LocalizedContent localized = 2; - ExchangeDataContent exchange_data = 3; - NaclBoxEncryptedContent nacl_box = 4; - ThankYouContent thank_you = 5; + TextContent text = 1; + LocalizedContent localized = 2; + ExchangeDataContent exchange_data = 3; + NaclBoxEncryptedContent nacl_box = 4; + ThankYouContent thank_you = 5; + IdentityRevealedContent identity_revealed = 6; } } @@ -551,6 +577,11 @@ message ThankYouContent { reserved 3; } +message IdentityRevealedContent { + // No fields as of right now. The chat member ID that was revealed can be inferred + // from the message sender ID, and the identity from the chat member's metadata. +} + // Opaque cursor used across paged APIs. Underlying bytes may change as paging // strategies evolve. Expected length value will vary based on the RPC being // executed.package From c476a5519e4429d3aa0da6d46d57d99ec691bc7d Mon Sep 17 00:00:00 2001 From: Jeff Yanta Date: Tue, 18 Jun 2024 12:18:58 -0400 Subject: [PATCH 12/16] Add IDENTITY_ALREADY_REVEALED to RevealIdentityResponse result --- generated/go/chat/v2/chat_service.pb.go | 641 ++++++++++++------------ proto/chat/v2/chat_service.proto | 7 +- 2 files changed, 327 insertions(+), 321 deletions(-) diff --git a/generated/go/chat/v2/chat_service.pb.go b/generated/go/chat/v2/chat_service.pb.go index 9b1f1c2..87a2a0d 100644 --- a/generated/go/chat/v2/chat_service.pb.go +++ b/generated/go/chat/v2/chat_service.pb.go @@ -523,9 +523,10 @@ func (AdvancePointerResponse_Result) EnumDescriptor() ([]byte, []int) { type RevealIdentityResponse_Result int32 const ( - RevealIdentityResponse_OK RevealIdentityResponse_Result = 0 - RevealIdentityResponse_DENIED RevealIdentityResponse_Result = 1 - RevealIdentityResponse_CHAT_NOT_FOUND RevealIdentityResponse_Result = 2 + RevealIdentityResponse_OK RevealIdentityResponse_Result = 0 + RevealIdentityResponse_DENIED RevealIdentityResponse_Result = 1 + RevealIdentityResponse_CHAT_NOT_FOUND RevealIdentityResponse_Result = 2 + RevealIdentityResponse_IDENTITY_ALREADY_REVEALED RevealIdentityResponse_Result = 3 ) // Enum value maps for RevealIdentityResponse_Result. @@ -534,11 +535,13 @@ var ( 0: "OK", 1: "DENIED", 2: "CHAT_NOT_FOUND", + 3: "IDENTITY_ALREADY_REVEALED", } RevealIdentityResponse_Result_value = map[string]int32{ - "OK": 0, - "DENIED": 1, - "CHAT_NOT_FOUND": 2, + "OK": 0, + "DENIED": 1, + "CHAT_NOT_FOUND": 2, + "IDENTITY_ALREADY_REVEALED": 3, } ) @@ -3751,332 +3754,334 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x22, 0x8f, 0x01, 0x0a, 0x16, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, + 0x75, 0x72, 0x65, 0x22, 0xae, 0x01, 0x0a, 0x16, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x22, 0x30, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, + 0x75, 0x6c, 0x74, 0x22, 0x4f, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, - 0x55, 0x4e, 0x44, 0x10, 0x02, 0x22, 0xb8, 0x02, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, - 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, - 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, - 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, - 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, - 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, - 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, - 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, - 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, - 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x22, 0x9a, 0x01, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x3f, 0x0a, 0x06, - 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, - 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, - 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x0d, - 0x0a, 0x09, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x4d, 0x55, 0x54, 0x45, 0x10, 0x03, 0x22, 0xca, 0x02, - 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, - 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, - 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, - 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, - 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x23, 0x0a, - 0x0d, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, - 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, - 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, - 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, - 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xb1, 0x01, 0x0a, 0x1c, 0x53, - 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x06, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x46, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, - 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, - 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, - 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, 0x4e, 0x54, - 0x5f, 0x55, 0x4e, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x10, 0x03, 0x22, 0x2b, - 0x0a, 0x06, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, - 0x10, 0x20, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x32, 0x0a, 0x0d, 0x43, - 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, - 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, - 0x31, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, - 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x22, 0xd9, 0x02, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, - 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x36, - 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, - 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, - 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x22, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, - 0x18, 0x80, 0x08, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x6d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, - 0x01, 0x10, 0x02, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x19, 0x0a, 0x08, - 0x63, 0x61, 0x6e, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, - 0x63, 0x61, 0x6e, 0x4d, 0x75, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x6e, 0x5f, 0x75, - 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0e, 0x63, 0x61, 0x6e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, - 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xb3, - 0x02, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x46, - 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, - 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x49, 0x64, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, - 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, + 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x1d, 0x0a, 0x19, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, + 0x59, 0x5f, 0x41, 0x4c, 0x52, 0x45, 0x41, 0x44, 0x59, 0x5f, 0x52, 0x45, 0x56, 0x45, 0x41, 0x4c, + 0x45, 0x44, 0x10, 0x03, 0x22, 0xb8, 0x02, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x07, + 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, + 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, + 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, + 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, + 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, + 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, + 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, + 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, + 0x9a, 0x01, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, + 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x3f, 0x0a, 0x06, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, + 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, + 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x0d, 0x0a, + 0x09, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x4d, 0x55, 0x54, 0x45, 0x10, 0x03, 0x22, 0xca, 0x02, 0x0a, + 0x1b, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x07, + 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, + 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, + 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, + 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, + 0x69, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, + 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, + 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, + 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, + 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, + 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, + 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xb1, 0x01, 0x0a, 0x1c, 0x53, 0x65, + 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x06, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x46, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, + 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, + 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, + 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, 0x4e, 0x54, 0x5f, + 0x55, 0x4e, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x10, 0x03, 0x22, 0x2b, 0x0a, + 0x06, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, + 0x20, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x32, 0x0a, 0x0d, 0x43, 0x68, + 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, + 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x31, + 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, + 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x22, 0xd9, 0x02, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x36, 0x0a, + 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x54, + 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, + 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x22, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, + 0x80, 0x08, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x6d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, + 0x10, 0x02, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x63, + 0x61, 0x6e, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, + 0x61, 0x6e, 0x4d, 0x75, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x6e, 0x5f, 0x75, 0x6e, + 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0e, 0x63, 0x61, 0x6e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, + 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, + 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xb3, 0x02, + 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x46, 0x0a, + 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, + 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x49, 0x64, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3d, + 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, + 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x36, 0x0a, + 0x02, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, + 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, 0x08, + 0x01, 0x52, 0x02, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, + 0x73, 0x6f, 0x72, 0x22, 0xc8, 0x02, 0x0a, 0x0a, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, + 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x73, 0x65, + 0x6c, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x53, 0x65, 0x6c, 0x66, + 0x12, 0x3c, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3f, + 0x0a, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, - 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x36, - 0x0a, 0x02, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, - 0x08, 0x01, 0x52, 0x02, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, - 0x72, 0x73, 0x6f, 0x72, 0x22, 0xc8, 0x02, 0x0a, 0x0a, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, + 0x04, 0x08, 0x00, 0x10, 0x02, 0x52, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x12, + 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x18, 0x05, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x19, + 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, + 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x22, 0xbc, + 0x01, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x51, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x18, 0x01, 0x52, 0x08, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x27, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, + 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x0f, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, + 0x65, 0x22, 0x24, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0b, 0x0a, + 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, + 0x49, 0x54, 0x54, 0x45, 0x52, 0x10, 0x01, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0xc8, 0x01, + 0x0a, 0x07, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x04, 0x6b, 0x69, 0x6e, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x79, + 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, + 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x3d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, + 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, - 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x73, - 0x65, 0x6c, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x53, 0x65, 0x6c, - 0x66, 0x12, 0x3c, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, - 0x3f, 0x0a, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, - 0x01, 0x04, 0x08, 0x00, 0x10, 0x02, 0x52, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, - 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x18, 0x05, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x12, - 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, - 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x22, - 0xbc, 0x01, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x51, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x18, 0x01, 0x52, - 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x27, 0x0a, 0x08, 0x75, 0x73, 0x65, - 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xba, 0xe9, 0xc0, - 0x03, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x0f, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, - 0x6d, 0x65, 0x22, 0x24, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0b, - 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x54, - 0x57, 0x49, 0x54, 0x54, 0x45, 0x52, 0x10, 0x01, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0xc8, - 0x01, 0x0a, 0x07, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x04, 0x6b, 0x69, - 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x54, - 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, - 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x3d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, - 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, - 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x22, 0xab, 0x03, 0x0a, 0x07, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, - 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3e, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, - 0x7a, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, - 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x63, - 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, - 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x48, 0x00, 0x52, 0x0c, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, - 0x12, 0x42, 0x0a, 0x08, 0x6e, 0x61, 0x63, 0x6c, 0x5f, 0x62, 0x6f, 0x78, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, - 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x6e, 0x61, 0x63, - 0x6c, 0x42, 0x6f, 0x78, 0x12, 0x3c, 0x0a, 0x09, 0x74, 0x68, 0x61, 0x6e, 0x6b, 0x5f, 0x79, 0x6f, - 0x75, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x43, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x08, 0x74, 0x68, 0x61, 0x6e, 0x6b, 0x59, - 0x6f, 0x75, 0x12, 0x54, 0x0a, 0x11, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x72, - 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x2f, 0x0a, 0x0b, 0x54, 0x65, 0x78, 0x74, 0x43, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, - 0x80, 0x08, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x40, 0x0a, 0x10, 0x4c, 0x6f, 0x63, 0x61, - 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x0b, - 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x72, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, - 0x09, 0x6b, 0x65, 0x79, 0x4f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x22, 0xa4, 0x04, 0x0a, 0x13, 0x45, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x22, 0xab, 0x03, 0x0a, 0x07, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, + 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3e, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, + 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, + 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, + 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, + 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x0c, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, + 0x42, 0x0a, 0x08, 0x6e, 0x61, 0x63, 0x6c, 0x5f, 0x62, 0x6f, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, + 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x6e, 0x61, 0x63, 0x6c, + 0x42, 0x6f, 0x78, 0x12, 0x3c, 0x0a, 0x09, 0x74, 0x68, 0x61, 0x6e, 0x6b, 0x5f, 0x79, 0x6f, 0x75, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x08, 0x74, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, + 0x75, 0x12, 0x54, 0x0a, 0x11, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, + 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, + 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x2f, 0x0a, 0x0b, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, + 0x08, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x40, 0x0a, 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, + 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x0b, 0x6b, + 0x65, 0x79, 0x5f, 0x6f, 0x72, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x09, + 0x6b, 0x65, 0x79, 0x4f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x22, 0xa4, 0x04, 0x0a, 0x13, 0x45, 0x78, + 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x12, 0x46, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, - 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, 0x12, 0x39, 0x0a, 0x05, 0x65, 0x78, - 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, - 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x05, - 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, - 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, - 0x52, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x12, - 0x32, 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x48, 0x01, 0x52, 0x06, 0x69, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x48, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xa4, - 0x01, 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, - 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x47, 0x41, 0x56, 0x45, 0x10, 0x01, 0x12, 0x0c, - 0x0a, 0x08, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, - 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x45, 0x57, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, - 0x50, 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, - 0x54, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x45, 0x44, 0x10, - 0x06, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, 0x4e, 0x54, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, - 0x50, 0x41, 0x49, 0x44, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x55, 0x52, 0x43, 0x48, 0x41, - 0x53, 0x45, 0x44, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, - 0x44, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0a, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x45, 0x4e, 0x54, 0x5f, - 0x54, 0x49, 0x50, 0x10, 0x0b, 0x42, 0x16, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x42, 0x12, 0x0a, - 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, - 0x01, 0x22, 0xcc, 0x01, 0x0a, 0x17, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, - 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, - 0x0f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, - 0x02, 0x10, 0x01, 0x52, 0x0d, 0x70, 0x65, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, - 0x65, 0x79, 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x18, 0x18, 0x18, 0x52, 0x05, - 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, - 0x65, 0x64, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, - 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x10, - 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, - 0x22, 0x62, 0x0a, 0x0f, 0x54, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x0a, 0x74, 0x69, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, - 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x74, - 0x69, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, - 0x08, 0x03, 0x10, 0x04, 0x22, 0x19, 0x0a, 0x17, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, - 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, - 0x04, 0x10, 0x08, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x40, 0x0a, 0x08, - 0x43, 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x55, 0x4e, 0x4b, 0x4e, - 0x4f, 0x57, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, - 0x10, 0x0a, 0x0c, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, - 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x4f, 0x5f, 0x57, 0x41, 0x59, 0x10, 0x02, 0x2a, 0x4a, - 0x0a, 0x0b, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, - 0x14, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, - 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, 0x44, 0x10, 0x02, - 0x12, 0x08, 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, 0x03, 0x32, 0xae, 0x06, 0x0a, 0x04, 0x43, - 0x68, 0x61, 0x74, 0x12, 0x49, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x12, - 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, - 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, + 0x6e, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, + 0x02, 0x20, 0x00, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, 0x12, 0x39, 0x0a, 0x05, 0x65, 0x78, 0x61, + 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x05, 0x65, + 0x78, 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, + 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x52, + 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x32, + 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x48, 0x01, 0x52, 0x06, 0x69, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x48, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xa4, 0x01, + 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, + 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x47, 0x41, 0x56, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, + 0x08, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x57, + 0x49, 0x54, 0x48, 0x44, 0x52, 0x45, 0x57, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, + 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, + 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x45, 0x44, 0x10, 0x06, + 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, 0x4e, 0x54, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x50, + 0x41, 0x49, 0x44, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x55, 0x52, 0x43, 0x48, 0x41, 0x53, + 0x45, 0x44, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, + 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0a, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x45, 0x4e, 0x54, 0x5f, 0x54, + 0x49, 0x50, 0x10, 0x0b, 0x42, 0x16, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x5f, 0x64, 0x61, 0x74, 0x61, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x42, 0x12, 0x0a, 0x09, + 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, + 0x22, 0xcc, 0x01, 0x0a, 0x17, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, + 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x0f, + 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, + 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, + 0x10, 0x01, 0x52, 0x0d, 0x70, 0x65, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, + 0x79, 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, + 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x18, 0x18, 0x18, 0x52, 0x05, 0x6e, + 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, + 0x64, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, + 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x10, 0x65, + 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, + 0x62, 0x0a, 0x0f, 0x54, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x0a, 0x74, 0x69, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, + 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, + 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x74, 0x69, + 0x70, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, + 0x03, 0x10, 0x04, 0x22, 0x19, 0x0a, 0x17, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, + 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x2b, + 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, + 0x10, 0x08, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x40, 0x0a, 0x08, 0x43, + 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, + 0x57, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x10, + 0x0a, 0x0c, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, + 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x4f, 0x5f, 0x57, 0x41, 0x59, 0x10, 0x02, 0x2a, 0x4a, 0x0a, + 0x0b, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x14, + 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x5f, + 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x01, + 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, 0x44, 0x10, 0x02, 0x12, + 0x08, 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, 0x03, 0x32, 0xae, 0x06, 0x0a, 0x04, 0x43, 0x68, + 0x61, 0x74, 0x12, 0x49, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x12, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, - 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, - 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x20, 0x2e, + 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, - 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x65, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x4c, 0x0a, 0x09, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x12, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x41, - 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x23, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, - 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x52, 0x65, 0x76, 0x65, - 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, - 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, - 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x14, - 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, + 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, + 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, + 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x65, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, + 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, + 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x4c, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x72, + 0x74, 0x43, 0x68, 0x61, 0x74, 0x12, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x41, 0x64, + 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x23, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, + 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x52, 0x65, 0x76, 0x65, 0x61, + 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, + 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, 0x63, - 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, 0x61, - 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, 0x2f, - 0x63, 0x68, 0x61, 0x74, 0x2f, 0x76, 0x32, 0x3b, 0x63, 0x68, 0x61, 0x74, 0xa2, 0x02, 0x09, 0x43, - 0x50, 0x42, 0x43, 0x68, 0x61, 0x74, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x61, 0x74, 0x65, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, + 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, 0x63, 0x6f, + 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, + 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, + 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, 0x61, 0x70, + 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, 0x2f, 0x63, + 0x68, 0x61, 0x74, 0x2f, 0x76, 0x32, 0x3b, 0x63, 0x68, 0x61, 0x74, 0xa2, 0x02, 0x09, 0x43, 0x50, + 0x42, 0x43, 0x68, 0x61, 0x74, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/proto/chat/v2/chat_service.proto b/proto/chat/v2/chat_service.proto index 25ea446..5aae75c 100644 --- a/proto/chat/v2/chat_service.proto +++ b/proto/chat/v2/chat_service.proto @@ -257,9 +257,10 @@ message RevealIdentityRequest { message RevealIdentityResponse { Result result = 1; enum Result { - OK = 0; - DENIED = 1; - CHAT_NOT_FOUND = 2; + OK = 0; + DENIED = 1; + CHAT_NOT_FOUND = 2; + IDENTITY_ALREADY_REVEALED = 3; } } From bb587a7f24cef79b4f4f2d131e94c3ab98d3bc06 Mon Sep 17 00:00:00 2001 From: Jeff Yanta Date: Tue, 18 Jun 2024 13:18:29 -0400 Subject: [PATCH 13/16] Small refactor on chat stuff --- generated/go/chat/v2/chat_service.pb.go | 848 +++++++++--------- .../go/chat/v2/chat_service.pb.validate.go | 2 +- proto/chat/v2/chat_service.proto | 17 +- 3 files changed, 434 insertions(+), 433 deletions(-) diff --git a/generated/go/chat/v2/chat_service.pb.go b/generated/go/chat/v2/chat_service.pb.go index 87a2a0d..401b049 100644 --- a/generated/go/chat/v2/chat_service.pb.go +++ b/generated/go/chat/v2/chat_service.pb.go @@ -73,6 +73,52 @@ func (ChatType) EnumDescriptor() ([]byte, []int) { return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{0} } +type Platform int32 + +const ( + Platform_UNKNOWN_PLATFORM Platform = 0 + Platform_TWITTER Platform = 1 +) + +// Enum value maps for Platform. +var ( + Platform_name = map[int32]string{ + 0: "UNKNOWN_PLATFORM", + 1: "TWITTER", + } + Platform_value = map[string]int32{ + "UNKNOWN_PLATFORM": 0, + "TWITTER": 1, + } +) + +func (x Platform) Enum() *Platform { + p := new(Platform) + *p = x + return p +} + +func (x Platform) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Platform) Descriptor() protoreflect.EnumDescriptor { + return file_chat_v2_chat_service_proto_enumTypes[1].Descriptor() +} + +func (Platform) Type() protoreflect.EnumType { + return &file_chat_v2_chat_service_proto_enumTypes[1] +} + +func (x Platform) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use Platform.Descriptor instead. +func (Platform) EnumDescriptor() ([]byte, []int) { + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{1} +} + type PointerType int32 const ( @@ -109,11 +155,11 @@ func (x PointerType) String() string { } func (PointerType) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[1].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[2].Descriptor() } func (PointerType) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[1] + return &file_chat_v2_chat_service_proto_enumTypes[2] } func (x PointerType) Number() protoreflect.EnumNumber { @@ -122,7 +168,7 @@ func (x PointerType) Number() protoreflect.EnumNumber { // Deprecated: Use PointerType.Descriptor instead. func (PointerType) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{1} + return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{2} } type GetChatsRequest_Direction int32 @@ -155,11 +201,11 @@ func (x GetChatsRequest_Direction) String() string { } func (GetChatsRequest_Direction) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[2].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[3].Descriptor() } func (GetChatsRequest_Direction) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[2] + return &file_chat_v2_chat_service_proto_enumTypes[3] } func (x GetChatsRequest_Direction) Number() protoreflect.EnumNumber { @@ -201,11 +247,11 @@ func (x GetChatsResponse_Result) String() string { } func (GetChatsResponse_Result) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[3].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[4].Descriptor() } func (GetChatsResponse_Result) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[3] + return &file_chat_v2_chat_service_proto_enumTypes[4] } func (x GetChatsResponse_Result) Number() protoreflect.EnumNumber { @@ -247,11 +293,11 @@ func (x GetMessagesRequest_Direction) String() string { } func (GetMessagesRequest_Direction) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[4].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[5].Descriptor() } func (GetMessagesRequest_Direction) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[4] + return &file_chat_v2_chat_service_proto_enumTypes[5] } func (x GetMessagesRequest_Direction) Number() protoreflect.EnumNumber { @@ -299,11 +345,11 @@ func (x GetMessagesResponse_Result) String() string { } func (GetMessagesResponse_Result) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[5].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[6].Descriptor() } func (GetMessagesResponse_Result) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[5] + return &file_chat_v2_chat_service_proto_enumTypes[6] } func (x GetMessagesResponse_Result) Number() protoreflect.EnumNumber { @@ -345,11 +391,11 @@ func (x ChatStreamEventError_Code) String() string { } func (ChatStreamEventError_Code) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[6].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[7].Descriptor() } func (ChatStreamEventError_Code) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[6] + return &file_chat_v2_chat_service_proto_enumTypes[7] } func (x ChatStreamEventError_Code) Number() protoreflect.EnumNumber { @@ -394,11 +440,11 @@ func (x StartChatResponse_Result) String() string { } func (StartChatResponse_Result) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[7].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[8].Descriptor() } func (StartChatResponse_Result) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[7] + return &file_chat_v2_chat_service_proto_enumTypes[8] } func (x StartChatResponse_Result) Number() protoreflect.EnumNumber { @@ -449,11 +495,11 @@ func (x SendMessageResponse_Result) String() string { } func (SendMessageResponse_Result) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[8].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[9].Descriptor() } func (SendMessageResponse_Result) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[8] + return &file_chat_v2_chat_service_proto_enumTypes[9] } func (x SendMessageResponse_Result) Number() protoreflect.EnumNumber { @@ -504,11 +550,11 @@ func (x AdvancePointerResponse_Result) String() string { } func (AdvancePointerResponse_Result) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[9].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[10].Descriptor() } func (AdvancePointerResponse_Result) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[9] + return &file_chat_v2_chat_service_proto_enumTypes[10] } func (x AdvancePointerResponse_Result) Number() protoreflect.EnumNumber { @@ -523,10 +569,10 @@ func (AdvancePointerResponse_Result) EnumDescriptor() ([]byte, []int) { type RevealIdentityResponse_Result int32 const ( - RevealIdentityResponse_OK RevealIdentityResponse_Result = 0 - RevealIdentityResponse_DENIED RevealIdentityResponse_Result = 1 - RevealIdentityResponse_CHAT_NOT_FOUND RevealIdentityResponse_Result = 2 - RevealIdentityResponse_IDENTITY_ALREADY_REVEALED RevealIdentityResponse_Result = 3 + RevealIdentityResponse_OK RevealIdentityResponse_Result = 0 + RevealIdentityResponse_DENIED RevealIdentityResponse_Result = 1 + RevealIdentityResponse_CHAT_NOT_FOUND RevealIdentityResponse_Result = 2 + RevealIdentityResponse_DIFFERENT_IDENTITY_REVEALED RevealIdentityResponse_Result = 3 ) // Enum value maps for RevealIdentityResponse_Result. @@ -535,13 +581,13 @@ var ( 0: "OK", 1: "DENIED", 2: "CHAT_NOT_FOUND", - 3: "IDENTITY_ALREADY_REVEALED", + 3: "DIFFERENT_IDENTITY_REVEALED", } RevealIdentityResponse_Result_value = map[string]int32{ - "OK": 0, - "DENIED": 1, - "CHAT_NOT_FOUND": 2, - "IDENTITY_ALREADY_REVEALED": 3, + "OK": 0, + "DENIED": 1, + "CHAT_NOT_FOUND": 2, + "DIFFERENT_IDENTITY_REVEALED": 3, } ) @@ -556,11 +602,11 @@ func (x RevealIdentityResponse_Result) String() string { } func (RevealIdentityResponse_Result) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[10].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[11].Descriptor() } func (RevealIdentityResponse_Result) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[10] + return &file_chat_v2_chat_service_proto_enumTypes[11] } func (x RevealIdentityResponse_Result) Number() protoreflect.EnumNumber { @@ -608,11 +654,11 @@ func (x SetMuteStateResponse_Result) String() string { } func (SetMuteStateResponse_Result) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[11].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[12].Descriptor() } func (SetMuteStateResponse_Result) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[11] + return &file_chat_v2_chat_service_proto_enumTypes[12] } func (x SetMuteStateResponse_Result) Number() protoreflect.EnumNumber { @@ -660,11 +706,11 @@ func (x SetSubscriptionStateResponse_Result) String() string { } func (SetSubscriptionStateResponse_Result) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[12].Descriptor() + return file_chat_v2_chat_service_proto_enumTypes[13].Descriptor() } func (SetSubscriptionStateResponse_Result) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[12] + return &file_chat_v2_chat_service_proto_enumTypes[13] } func (x SetSubscriptionStateResponse_Result) Number() protoreflect.EnumNumber { @@ -676,52 +722,6 @@ func (SetSubscriptionStateResponse_Result) EnumDescriptor() ([]byte, []int) { return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{22, 0} } -type ChatMemberIdentity_Platform int32 - -const ( - ChatMemberIdentity_UNKNOWN ChatMemberIdentity_Platform = 0 - ChatMemberIdentity_TWITTER ChatMemberIdentity_Platform = 1 -) - -// Enum value maps for ChatMemberIdentity_Platform. -var ( - ChatMemberIdentity_Platform_name = map[int32]string{ - 0: "UNKNOWN", - 1: "TWITTER", - } - ChatMemberIdentity_Platform_value = map[string]int32{ - "UNKNOWN": 0, - "TWITTER": 1, - } -) - -func (x ChatMemberIdentity_Platform) Enum() *ChatMemberIdentity_Platform { - p := new(ChatMemberIdentity_Platform) - *p = x - return p -} - -func (x ChatMemberIdentity_Platform) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (ChatMemberIdentity_Platform) Descriptor() protoreflect.EnumDescriptor { - return file_chat_v2_chat_service_proto_enumTypes[13].Descriptor() -} - -func (ChatMemberIdentity_Platform) Type() protoreflect.EnumType { - return &file_chat_v2_chat_service_proto_enumTypes[13] -} - -func (x ChatMemberIdentity_Platform) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Use ChatMemberIdentity_Platform.Descriptor instead. -func (ChatMemberIdentity_Platform) EnumDescriptor() ([]byte, []int) { - return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{29, 0} -} - type ExchangeDataContent_Verb int32 const ( @@ -2782,7 +2782,7 @@ type ChatMemberIdentity struct { unknownFields protoimpl.UnknownFields // The external social platform linked to this chat member - Platform ChatMemberIdentity_Platform `protobuf:"varint,1,opt,name=platform,proto3,enum=code.chat.v2.ChatMemberIdentity_Platform" json:"platform,omitempty"` + Platform Platform `protobuf:"varint,1,opt,name=platform,proto3,enum=code.chat.v2.Platform" json:"platform,omitempty"` // The chat member's username on the external social platform Username string `protobuf:"bytes,2,opt,name=username,proto3" json:"username,omitempty"` } @@ -2819,11 +2819,11 @@ func (*ChatMemberIdentity) Descriptor() ([]byte, []int) { return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{29} } -func (x *ChatMemberIdentity) GetPlatform() ChatMemberIdentity_Platform { +func (x *ChatMemberIdentity) GetPlatform() Platform { if x != nil { return x.Platform } - return ChatMemberIdentity_UNKNOWN + return Platform_UNKNOWN_PLATFORM } func (x *ChatMemberIdentity) GetUsername() string { @@ -3754,334 +3754,334 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x22, 0xae, 0x01, 0x0a, 0x16, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, + 0x75, 0x72, 0x65, 0x22, 0xb0, 0x01, 0x0a, 0x16, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x22, 0x4f, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, + 0x75, 0x6c, 0x74, 0x22, 0x51, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, - 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x1d, 0x0a, 0x19, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, - 0x59, 0x5f, 0x41, 0x4c, 0x52, 0x45, 0x41, 0x44, 0x59, 0x5f, 0x52, 0x45, 0x56, 0x45, 0x41, 0x4c, - 0x45, 0x44, 0x10, 0x03, 0x22, 0xb8, 0x02, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x07, - 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, + 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x1f, 0x0a, 0x1b, 0x44, 0x49, 0x46, 0x46, 0x45, 0x52, 0x45, + 0x4e, 0x54, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x52, 0x45, 0x56, 0x45, + 0x41, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x22, 0xb8, 0x02, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x4d, 0x75, + 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, + 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, + 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, + 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x19, + 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, + 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, + 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, + 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, + 0x65, 0x22, 0x9a, 0x01, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x72, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x3f, 0x0a, + 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, + 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, + 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, + 0x0d, 0x0a, 0x09, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x4d, 0x55, 0x54, 0x45, 0x10, 0x03, 0x22, 0xca, + 0x02, 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, + 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, + 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, + 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, + 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x23, + 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x62, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, - 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, - 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, - 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, - 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, - 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, - 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, - 0x9a, 0x01, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, - 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x3f, 0x0a, 0x06, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, - 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, - 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x0d, 0x0a, - 0x09, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x4d, 0x55, 0x54, 0x45, 0x10, 0x03, 0x22, 0xca, 0x02, 0x0a, - 0x1b, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x07, - 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, + 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, + 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, + 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xb1, 0x01, 0x0a, 0x1c, + 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x06, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, + 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, + 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x46, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, + 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, + 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, + 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, 0x4e, + 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x10, 0x03, 0x22, + 0x2b, 0x0a, 0x06, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, + 0x04, 0x10, 0x20, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x32, 0x0a, 0x0d, + 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, + 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x22, 0x31, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, + 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, + 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x22, 0xd9, 0x02, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x74, 0x61, + 0x64, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, + 0x36, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, - 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, - 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x74, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, + 0x00, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x22, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, + 0x01, 0x18, 0x80, 0x08, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x6d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, + 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x19, 0x0a, + 0x08, 0x63, 0x61, 0x6e, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x07, 0x63, 0x61, 0x6e, 0x4d, 0x75, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x6e, 0x5f, + 0x75, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0e, 0x63, 0x61, 0x6e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, + 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, + 0xb3, 0x02, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x46, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, + 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, - 0x69, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, - 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, - 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, - 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, - 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xb1, 0x01, 0x0a, 0x1c, 0x53, 0x65, - 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x06, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, - 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x46, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, - 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, - 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, - 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, 0x4e, 0x54, 0x5f, - 0x55, 0x4e, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x10, 0x03, 0x22, 0x2b, 0x0a, - 0x06, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, - 0x20, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x32, 0x0a, 0x0d, 0x43, 0x68, - 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, - 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x31, - 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, - 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0xd9, 0x02, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, - 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x36, 0x0a, - 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x54, - 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, - 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x22, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, - 0x80, 0x08, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x6d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, - 0x10, 0x02, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x63, - 0x61, 0x6e, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, - 0x61, 0x6e, 0x4d, 0x75, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x6e, 0x5f, 0x75, 0x6e, - 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x0e, 0x63, 0x61, 0x6e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, - 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, - 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xb3, 0x02, - 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x46, 0x0a, - 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, - 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x49, 0x64, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3d, - 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, - 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x36, 0x0a, - 0x02, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, 0x08, - 0x01, 0x52, 0x02, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, - 0x73, 0x6f, 0x72, 0x22, 0xc8, 0x02, 0x0a, 0x0a, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, - 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x73, 0x65, - 0x6c, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x53, 0x65, 0x6c, 0x66, - 0x12, 0x3c, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3f, - 0x0a, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, - 0x04, 0x08, 0x00, 0x10, 0x02, 0x52, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x12, - 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x19, - 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, - 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x22, 0xbc, - 0x01, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x51, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x49, 0x64, + 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, + 0x01, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, + 0x36, 0x0a, 0x02, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, + 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, + 0x02, 0x08, 0x01, 0x52, 0x02, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, + 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, + 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xc8, 0x02, 0x0a, 0x0a, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x18, 0x01, 0x52, 0x08, - 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x27, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, - 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x0f, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, - 0x65, 0x22, 0x24, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x0b, 0x0a, - 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, - 0x49, 0x54, 0x54, 0x45, 0x52, 0x10, 0x01, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0xc8, 0x01, - 0x0a, 0x07, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x39, 0x0a, 0x04, 0x6b, 0x69, 0x6e, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x79, - 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, - 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x3d, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, - 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, - 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x22, 0xab, 0x03, 0x0a, 0x07, 0x43, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, - 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3e, 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, - 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, - 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, - 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, - 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, - 0x00, 0x52, 0x0c, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, - 0x42, 0x0a, 0x08, 0x6e, 0x61, 0x63, 0x6c, 0x5f, 0x62, 0x6f, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, - 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x6e, 0x61, 0x63, 0x6c, - 0x42, 0x6f, 0x78, 0x12, 0x3c, 0x0a, 0x09, 0x74, 0x68, 0x61, 0x6e, 0x6b, 0x5f, 0x79, 0x6f, 0x75, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x08, 0x74, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, - 0x75, 0x12, 0x54, 0x0a, 0x11, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, - 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, - 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, - 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x2f, 0x0a, 0x0b, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, - 0x08, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x40, 0x0a, 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, - 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x0b, 0x6b, - 0x65, 0x79, 0x5f, 0x6f, 0x72, 0x5f, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x09, - 0x6b, 0x65, 0x79, 0x4f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x22, 0xa4, 0x04, 0x0a, 0x13, 0x45, 0x78, - 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x12, 0x46, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, - 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, - 0x02, 0x20, 0x00, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, 0x12, 0x39, 0x0a, 0x05, 0x65, 0x78, 0x61, - 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, - 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x05, 0x65, - 0x78, 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, - 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x52, - 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x32, - 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, + 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, + 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, + 0x73, 0x65, 0x6c, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x53, 0x65, + 0x6c, 0x66, 0x12, 0x3c, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, + 0x12, 0x3f, 0x0a, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, + 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x02, 0x52, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, + 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, + 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, + 0x22, 0x83, 0x01, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3e, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, + 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, + 0x6d, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x18, 0x01, 0x52, 0x08, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x27, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, + 0x72, 0x04, 0x10, 0x01, 0x18, 0x0f, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, + 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0xc8, 0x01, 0x0a, 0x07, 0x50, 0x6f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x12, 0x39, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x3d, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x09, + 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, + 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, + 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, + 0x64, 0x22, 0xab, 0x03, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, + 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3e, + 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x48, + 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x78, 0x63, 0x68, + 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x42, 0x0a, 0x08, 0x6e, 0x61, 0x63, 0x6c, + 0x5f, 0x62, 0x6f, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, + 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x48, 0x00, 0x52, 0x07, 0x6e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x12, 0x3c, 0x0a, 0x09, + 0x74, 0x68, 0x61, 0x6e, 0x6b, 0x5f, 0x79, 0x6f, 0x75, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, + 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, + 0x52, 0x08, 0x74, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x12, 0x54, 0x0a, 0x11, 0x69, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, + 0x65, 0x61, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, + 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, + 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, + 0x2f, 0x0a, 0x0b, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x20, + 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, + 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, + 0x22, 0x40, 0x0a, 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x72, 0x5f, 0x74, + 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, + 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x4f, 0x72, 0x54, 0x65, + 0x78, 0x74, 0x22, 0xa4, 0x04, 0x0a, 0x13, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, + 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x04, 0x76, 0x65, + 0x72, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x62, + 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x76, 0x65, + 0x72, 0x62, 0x12, 0x39, 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, + 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, + 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x52, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, + 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x32, 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, + 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, + 0x64, 0x48, 0x01, 0x52, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x73, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x48, 0x01, 0x52, 0x06, 0x69, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x48, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xa4, 0x01, - 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, - 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x47, 0x41, 0x56, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, - 0x08, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x57, - 0x49, 0x54, 0x48, 0x44, 0x52, 0x45, 0x57, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, - 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, - 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x54, 0x55, 0x52, 0x4e, 0x45, 0x44, 0x10, 0x06, - 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, 0x4e, 0x54, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x50, - 0x41, 0x49, 0x44, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x55, 0x52, 0x43, 0x48, 0x41, 0x53, - 0x45, 0x44, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, - 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0a, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x45, 0x4e, 0x54, 0x5f, 0x54, - 0x49, 0x50, 0x10, 0x0b, 0x42, 0x16, 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x5f, 0x64, 0x61, 0x74, 0x61, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x42, 0x12, 0x0a, 0x09, - 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, - 0x22, 0xcc, 0x01, 0x0a, 0x17, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, - 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x0f, - 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, - 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, - 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, - 0x10, 0x01, 0x52, 0x0d, 0x70, 0x65, 0x65, 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, - 0x79, 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, - 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x18, 0x18, 0x18, 0x52, 0x05, 0x6e, - 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, - 0x64, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, - 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x10, 0x65, - 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, - 0x62, 0x0a, 0x0f, 0x54, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x0a, 0x74, 0x69, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, - 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, - 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x74, 0x69, - 0x70, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, - 0x03, 0x10, 0x04, 0x22, 0x19, 0x0a, 0x17, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, - 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x2b, - 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, - 0x10, 0x08, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x40, 0x0a, 0x08, 0x43, - 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, - 0x57, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x10, - 0x0a, 0x0c, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, - 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x4f, 0x5f, 0x57, 0x41, 0x59, 0x10, 0x02, 0x2a, 0x4a, 0x0a, - 0x0b, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x14, - 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x5f, - 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x01, - 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, 0x44, 0x10, 0x02, 0x12, - 0x08, 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, 0x03, 0x32, 0xae, 0x06, 0x0a, 0x04, 0x43, 0x68, - 0x61, 0x74, 0x12, 0x49, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x12, 0x1d, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, - 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, - 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, - 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, - 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x65, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x4c, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x72, - 0x74, 0x43, 0x68, 0x61, 0x74, 0x12, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x41, 0x64, - 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x12, 0x23, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, - 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x52, 0x65, 0x76, 0x65, 0x61, - 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, - 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x14, 0x53, - 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, - 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, 0x63, 0x6f, - 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, - 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, 0x61, 0x70, - 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, 0x2f, 0x63, - 0x68, 0x61, 0x74, 0x2f, 0x76, 0x32, 0x3b, 0x63, 0x68, 0x61, 0x74, 0xa2, 0x02, 0x09, 0x43, 0x50, - 0x42, 0x43, 0x68, 0x61, 0x74, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xa4, 0x01, 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, + 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, + 0x47, 0x41, 0x56, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, + 0x45, 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x45, 0x57, + 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, + 0x04, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x52, + 0x45, 0x54, 0x55, 0x52, 0x4e, 0x45, 0x44, 0x10, 0x06, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, + 0x4e, 0x54, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x41, 0x49, 0x44, 0x10, 0x08, 0x12, 0x0d, + 0x0a, 0x09, 0x50, 0x55, 0x52, 0x43, 0x48, 0x41, 0x53, 0x45, 0x44, 0x10, 0x09, 0x12, 0x10, 0x0a, + 0x0c, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0a, 0x12, + 0x0c, 0x0a, 0x08, 0x53, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0b, 0x42, 0x16, 0x0a, + 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x12, 0x05, + 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x42, 0x12, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xcc, 0x01, 0x0a, 0x17, 0x4e, 0x61, + 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, 0x75, + 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x70, 0x65, 0x65, + 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6f, + 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, + 0x7a, 0x04, 0x10, 0x18, 0x18, 0x18, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, + 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, + 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x10, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, + 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x62, 0x0a, 0x0f, 0x54, 0x68, 0x61, 0x6e, + 0x6b, 0x59, 0x6f, 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x0a, 0x74, + 0x69, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, + 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x74, 0x69, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x19, 0x0a, 0x17, + 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, + 0x72, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, + 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x08, 0x18, 0x20, 0x52, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x40, 0x0a, 0x08, 0x43, 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, + 0x12, 0x15, 0x0a, 0x11, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x54, + 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x4e, 0x4f, 0x54, 0x49, 0x46, + 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x4f, + 0x5f, 0x57, 0x41, 0x59, 0x10, 0x02, 0x2a, 0x2d, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x12, 0x14, 0x0a, 0x10, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4c, + 0x41, 0x54, 0x46, 0x4f, 0x52, 0x4d, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x49, 0x54, + 0x54, 0x45, 0x52, 0x10, 0x01, 0x2a, 0x4a, 0x0a, 0x0b, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, + 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x08, + 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x4c, 0x49, + 0x56, 0x45, 0x52, 0x45, 0x44, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, + 0x03, 0x32, 0xae, 0x06, 0x0a, 0x04, 0x43, 0x68, 0x61, 0x74, 0x12, 0x49, 0x0a, 0x08, 0x47, 0x65, + 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x12, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x10, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, + 0x12, 0x4c, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x12, 0x1e, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, + 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, + 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, + 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, + 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, + 0x6e, 0x74, 0x65, 0x72, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, + 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x5b, 0x0a, 0x0e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0c, + 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, + 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, + 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x29, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, + 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, + 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x5a, 0x44, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, + 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, + 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2f, 0x76, 0x32, 0x3b, 0x63, + 0x68, 0x61, 0x74, 0xa2, 0x02, 0x09, 0x43, 0x50, 0x42, 0x43, 0x68, 0x61, 0x74, 0x56, 0x32, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -4100,19 +4100,19 @@ var file_chat_v2_chat_service_proto_enumTypes = make([]protoimpl.EnumInfo, 15) var file_chat_v2_chat_service_proto_msgTypes = make([]protoimpl.MessageInfo, 39) var file_chat_v2_chat_service_proto_goTypes = []interface{}{ (ChatType)(0), // 0: code.chat.v2.ChatType - (PointerType)(0), // 1: code.chat.v2.PointerType - (GetChatsRequest_Direction)(0), // 2: code.chat.v2.GetChatsRequest.Direction - (GetChatsResponse_Result)(0), // 3: code.chat.v2.GetChatsResponse.Result - (GetMessagesRequest_Direction)(0), // 4: code.chat.v2.GetMessagesRequest.Direction - (GetMessagesResponse_Result)(0), // 5: code.chat.v2.GetMessagesResponse.Result - (ChatStreamEventError_Code)(0), // 6: code.chat.v2.ChatStreamEventError.Code - (StartChatResponse_Result)(0), // 7: code.chat.v2.StartChatResponse.Result - (SendMessageResponse_Result)(0), // 8: code.chat.v2.SendMessageResponse.Result - (AdvancePointerResponse_Result)(0), // 9: code.chat.v2.AdvancePointerResponse.Result - (RevealIdentityResponse_Result)(0), // 10: code.chat.v2.RevealIdentityResponse.Result - (SetMuteStateResponse_Result)(0), // 11: code.chat.v2.SetMuteStateResponse.Result - (SetSubscriptionStateResponse_Result)(0), // 12: code.chat.v2.SetSubscriptionStateResponse.Result - (ChatMemberIdentity_Platform)(0), // 13: code.chat.v2.ChatMemberIdentity.Platform + (Platform)(0), // 1: code.chat.v2.Platform + (PointerType)(0), // 2: code.chat.v2.PointerType + (GetChatsRequest_Direction)(0), // 3: code.chat.v2.GetChatsRequest.Direction + (GetChatsResponse_Result)(0), // 4: code.chat.v2.GetChatsResponse.Result + (GetMessagesRequest_Direction)(0), // 5: code.chat.v2.GetMessagesRequest.Direction + (GetMessagesResponse_Result)(0), // 6: code.chat.v2.GetMessagesResponse.Result + (ChatStreamEventError_Code)(0), // 7: code.chat.v2.ChatStreamEventError.Code + (StartChatResponse_Result)(0), // 8: code.chat.v2.StartChatResponse.Result + (SendMessageResponse_Result)(0), // 9: code.chat.v2.SendMessageResponse.Result + (AdvancePointerResponse_Result)(0), // 10: code.chat.v2.AdvancePointerResponse.Result + (RevealIdentityResponse_Result)(0), // 11: code.chat.v2.RevealIdentityResponse.Result + (SetMuteStateResponse_Result)(0), // 12: code.chat.v2.SetMuteStateResponse.Result + (SetSubscriptionStateResponse_Result)(0), // 13: code.chat.v2.SetSubscriptionStateResponse.Result (ExchangeDataContent_Verb)(0), // 14: code.chat.v2.ExchangeDataContent.Verb (*GetChatsRequest)(nil), // 15: code.chat.v2.GetChatsRequest (*GetChatsResponse)(nil), // 16: code.chat.v2.GetChatsResponse @@ -4166,16 +4166,16 @@ var file_chat_v2_chat_service_proto_depIdxs = []int32{ 54, // 0: code.chat.v2.GetChatsRequest.owner:type_name -> code.common.v1.SolanaAccountId 55, // 1: code.chat.v2.GetChatsRequest.signature:type_name -> code.common.v1.Signature 53, // 2: code.chat.v2.GetChatsRequest.cursor:type_name -> code.chat.v2.Cursor - 2, // 3: code.chat.v2.GetChatsRequest.direction:type_name -> code.chat.v2.GetChatsRequest.Direction - 3, // 4: code.chat.v2.GetChatsResponse.result:type_name -> code.chat.v2.GetChatsResponse.Result + 3, // 3: code.chat.v2.GetChatsRequest.direction:type_name -> code.chat.v2.GetChatsRequest.Direction + 4, // 4: code.chat.v2.GetChatsResponse.result:type_name -> code.chat.v2.GetChatsResponse.Result 41, // 5: code.chat.v2.GetChatsResponse.chats:type_name -> code.chat.v2.ChatMetadata 38, // 6: code.chat.v2.GetMessagesRequest.chat_id:type_name -> code.chat.v2.ChatId 40, // 7: code.chat.v2.GetMessagesRequest.member_id:type_name -> code.chat.v2.ChatMemberId 54, // 8: code.chat.v2.GetMessagesRequest.owner:type_name -> code.common.v1.SolanaAccountId 55, // 9: code.chat.v2.GetMessagesRequest.signature:type_name -> code.common.v1.Signature 53, // 10: code.chat.v2.GetMessagesRequest.cursor:type_name -> code.chat.v2.Cursor - 4, // 11: code.chat.v2.GetMessagesRequest.direction:type_name -> code.chat.v2.GetMessagesRequest.Direction - 5, // 12: code.chat.v2.GetMessagesResponse.result:type_name -> code.chat.v2.GetMessagesResponse.Result + 5, // 11: code.chat.v2.GetMessagesRequest.direction:type_name -> code.chat.v2.GetMessagesRequest.Direction + 6, // 12: code.chat.v2.GetMessagesResponse.result:type_name -> code.chat.v2.GetMessagesResponse.Result 42, // 13: code.chat.v2.GetMessagesResponse.messages:type_name -> code.chat.v2.ChatMessage 38, // 14: code.chat.v2.OpenChatEventStream.chat_id:type_name -> code.chat.v2.ChatId 40, // 15: code.chat.v2.OpenChatEventStream.member_id:type_name -> code.chat.v2.ChatMemberId @@ -4184,7 +4184,7 @@ var file_chat_v2_chat_service_proto_depIdxs = []int32{ 42, // 18: code.chat.v2.ChatStreamEvent.message:type_name -> code.chat.v2.ChatMessage 45, // 19: code.chat.v2.ChatStreamEvent.pointer:type_name -> code.chat.v2.Pointer 20, // 20: code.chat.v2.ChatStreamEventBatch.events:type_name -> code.chat.v2.ChatStreamEvent - 6, // 21: code.chat.v2.ChatStreamEventError.code:type_name -> code.chat.v2.ChatStreamEventError.Code + 7, // 21: code.chat.v2.ChatStreamEventError.code:type_name -> code.chat.v2.ChatStreamEventError.Code 19, // 22: code.chat.v2.StreamChatEventsRequest.open_stream:type_name -> code.chat.v2.OpenChatEventStream 56, // 23: code.chat.v2.StreamChatEventsRequest.pong:type_name -> code.common.v1.ClientPong 21, // 24: code.chat.v2.StreamChatEventsResponse.events:type_name -> code.chat.v2.ChatStreamEventBatch @@ -4194,36 +4194,36 @@ var file_chat_v2_chat_service_proto_depIdxs = []int32{ 55, // 28: code.chat.v2.StartChatRequest.signature:type_name -> code.common.v1.Signature 26, // 29: code.chat.v2.StartChatRequest.tip_chat:type_name -> code.chat.v2.StartTipChatParameters 58, // 30: code.chat.v2.StartTipChatParameters.intent_id:type_name -> code.common.v1.IntentId - 7, // 31: code.chat.v2.StartChatResponse.result:type_name -> code.chat.v2.StartChatResponse.Result + 8, // 31: code.chat.v2.StartChatResponse.result:type_name -> code.chat.v2.StartChatResponse.Result 41, // 32: code.chat.v2.StartChatResponse.chat:type_name -> code.chat.v2.ChatMetadata 38, // 33: code.chat.v2.SendMessageRequest.chat_id:type_name -> code.chat.v2.ChatId 40, // 34: code.chat.v2.SendMessageRequest.member_id:type_name -> code.chat.v2.ChatMemberId 46, // 35: code.chat.v2.SendMessageRequest.content:type_name -> code.chat.v2.Content 54, // 36: code.chat.v2.SendMessageRequest.owner:type_name -> code.common.v1.SolanaAccountId 55, // 37: code.chat.v2.SendMessageRequest.signature:type_name -> code.common.v1.Signature - 8, // 38: code.chat.v2.SendMessageResponse.result:type_name -> code.chat.v2.SendMessageResponse.Result + 9, // 38: code.chat.v2.SendMessageResponse.result:type_name -> code.chat.v2.SendMessageResponse.Result 42, // 39: code.chat.v2.SendMessageResponse.message:type_name -> code.chat.v2.ChatMessage 38, // 40: code.chat.v2.AdvancePointerRequest.chat_id:type_name -> code.chat.v2.ChatId 45, // 41: code.chat.v2.AdvancePointerRequest.pointer:type_name -> code.chat.v2.Pointer 54, // 42: code.chat.v2.AdvancePointerRequest.owner:type_name -> code.common.v1.SolanaAccountId 55, // 43: code.chat.v2.AdvancePointerRequest.signature:type_name -> code.common.v1.Signature - 9, // 44: code.chat.v2.AdvancePointerResponse.result:type_name -> code.chat.v2.AdvancePointerResponse.Result + 10, // 44: code.chat.v2.AdvancePointerResponse.result:type_name -> code.chat.v2.AdvancePointerResponse.Result 38, // 45: code.chat.v2.RevealIdentityRequest.chat_id:type_name -> code.chat.v2.ChatId 40, // 46: code.chat.v2.RevealIdentityRequest.member_id:type_name -> code.chat.v2.ChatMemberId 44, // 47: code.chat.v2.RevealIdentityRequest.identity:type_name -> code.chat.v2.ChatMemberIdentity 54, // 48: code.chat.v2.RevealIdentityRequest.owner:type_name -> code.common.v1.SolanaAccountId 55, // 49: code.chat.v2.RevealIdentityRequest.signature:type_name -> code.common.v1.Signature - 10, // 50: code.chat.v2.RevealIdentityResponse.result:type_name -> code.chat.v2.RevealIdentityResponse.Result + 11, // 50: code.chat.v2.RevealIdentityResponse.result:type_name -> code.chat.v2.RevealIdentityResponse.Result 38, // 51: code.chat.v2.SetMuteStateRequest.chat_id:type_name -> code.chat.v2.ChatId 40, // 52: code.chat.v2.SetMuteStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId 54, // 53: code.chat.v2.SetMuteStateRequest.owner:type_name -> code.common.v1.SolanaAccountId 55, // 54: code.chat.v2.SetMuteStateRequest.signature:type_name -> code.common.v1.Signature - 11, // 55: code.chat.v2.SetMuteStateResponse.result:type_name -> code.chat.v2.SetMuteStateResponse.Result + 12, // 55: code.chat.v2.SetMuteStateResponse.result:type_name -> code.chat.v2.SetMuteStateResponse.Result 38, // 56: code.chat.v2.SetSubscriptionStateRequest.chat_id:type_name -> code.chat.v2.ChatId 40, // 57: code.chat.v2.SetSubscriptionStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId 54, // 58: code.chat.v2.SetSubscriptionStateRequest.owner:type_name -> code.common.v1.SolanaAccountId 55, // 59: code.chat.v2.SetSubscriptionStateRequest.signature:type_name -> code.common.v1.Signature - 12, // 60: code.chat.v2.SetSubscriptionStateResponse.result:type_name -> code.chat.v2.SetSubscriptionStateResponse.Result + 13, // 60: code.chat.v2.SetSubscriptionStateResponse.result:type_name -> code.chat.v2.SetSubscriptionStateResponse.Result 38, // 61: code.chat.v2.ChatMetadata.chat_id:type_name -> code.chat.v2.ChatId 0, // 62: code.chat.v2.ChatMetadata.kind:type_name -> code.chat.v2.ChatType 43, // 63: code.chat.v2.ChatMetadata.members:type_name -> code.chat.v2.ChatMember @@ -4236,8 +4236,8 @@ var file_chat_v2_chat_service_proto_depIdxs = []int32{ 40, // 70: code.chat.v2.ChatMember.member_id:type_name -> code.chat.v2.ChatMemberId 44, // 71: code.chat.v2.ChatMember.identity:type_name -> code.chat.v2.ChatMemberIdentity 45, // 72: code.chat.v2.ChatMember.pointers:type_name -> code.chat.v2.Pointer - 13, // 73: code.chat.v2.ChatMemberIdentity.platform:type_name -> code.chat.v2.ChatMemberIdentity.Platform - 1, // 74: code.chat.v2.Pointer.kind:type_name -> code.chat.v2.PointerType + 1, // 73: code.chat.v2.ChatMemberIdentity.platform:type_name -> code.chat.v2.Platform + 2, // 74: code.chat.v2.Pointer.kind:type_name -> code.chat.v2.PointerType 39, // 75: code.chat.v2.Pointer.value:type_name -> code.chat.v2.ChatMessageId 40, // 76: code.chat.v2.Pointer.member_id:type_name -> code.chat.v2.ChatMemberId 47, // 77: code.chat.v2.Content.text:type_name -> code.chat.v2.TextContent diff --git a/generated/go/chat/v2/chat_service.pb.validate.go b/generated/go/chat/v2/chat_service.pb.validate.go index 216c8b7..5b820b8 100644 --- a/generated/go/chat/v2/chat_service.pb.validate.go +++ b/generated/go/chat/v2/chat_service.pb.validate.go @@ -3134,7 +3134,7 @@ var _ interface { ErrorName() string } = ChatMemberIdentityValidationError{} -var _ChatMemberIdentity_Platform_InLookup = map[ChatMemberIdentity_Platform]struct{}{ +var _ChatMemberIdentity_Platform_InLookup = map[Platform]struct{}{ 1: {}, } diff --git a/proto/chat/v2/chat_service.proto b/proto/chat/v2/chat_service.proto index 5aae75c..643c634 100644 --- a/proto/chat/v2/chat_service.proto +++ b/proto/chat/v2/chat_service.proto @@ -257,10 +257,10 @@ message RevealIdentityRequest { message RevealIdentityResponse { Result result = 1; enum Result { - OK = 0; - DENIED = 1; - CHAT_NOT_FOUND = 2; - IDENTITY_ALREADY_REVEALED = 3; + OK = 0; + DENIED = 1; + CHAT_NOT_FOUND = 2; + DIFFERENT_IDENTITY_REVEALED = 3; } } @@ -339,6 +339,11 @@ enum ChatType { // GROUP = 3; } +enum Platform { + UNKNOWN_PLATFORM = 0; + TWITTER = 1; +} + enum PointerType { UNKNOWN_POINTER_TYPE = 0; SENT = 1; // Always inferred by OK result in SendMessageResponse or message presence in a chat @@ -447,10 +452,6 @@ message ChatMemberIdentity { Platform platform = 1 [(validate.rules).enum = { in: [1] // TWITTER }]; - enum Platform { - UNKNOWN = 0; - TWITTER = 1; - } // The chat member's username on the external social platform string username = 2 [(validate.rules).string = { From bde7104d446706f46d5f34f9ca0eb07f476ac140 Mon Sep 17 00:00:00 2001 From: Jeff Yanta Date: Wed, 19 Jun 2024 09:46:35 -0400 Subject: [PATCH 14/16] Add relevant fields to IdentityRevealedContent --- generated/go/chat/v2/chat_service.pb.go | 262 ++++++++++-------- .../go/chat/v2/chat_service.pb.validate.go | 34 +++ proto/chat/v2/chat_service.proto | 7 +- 3 files changed, 185 insertions(+), 118 deletions(-) diff --git a/generated/go/chat/v2/chat_service.pb.go b/generated/go/chat/v2/chat_service.pb.go index 401b049..538da7c 100644 --- a/generated/go/chat/v2/chat_service.pb.go +++ b/generated/go/chat/v2/chat_service.pb.go @@ -3393,6 +3393,11 @@ type IdentityRevealedContent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + + // The chat member who revealed their identity + MemberId *ChatMemberId `protobuf:"bytes,1,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` + // The identity that was revealed + Identity *ChatMemberIdentity `protobuf:"bytes,2,opt,name=identity,proto3" json:"identity,omitempty"` } func (x *IdentityRevealedContent) Reset() { @@ -3427,6 +3432,20 @@ func (*IdentityRevealedContent) Descriptor() ([]byte, []int) { return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{37} } +func (x *IdentityRevealedContent) GetMemberId() *ChatMemberId { + if x != nil { + return x.MemberId + } + return nil +} + +func (x *IdentityRevealedContent) GetIdentity() *ChatMemberIdentity { + if x != nil { + return x.Identity + } + return nil +} + // Opaque cursor used across paged APIs. Underlying bytes may change as paging // strategies evolve. Expected length value will vary based on the RPC being // executed.package @@ -4006,9 +4025,18 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x74, 0x69, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0x19, 0x0a, 0x17, - 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, - 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, + 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0xa8, 0x01, 0x0a, + 0x17, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, + 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, + 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, + 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x48, 0x0a, + 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, + 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, + 0x79, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x69, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x08, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x40, 0x0a, 0x08, 0x43, 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, @@ -4163,119 +4191,121 @@ var file_chat_v2_chat_service_proto_goTypes = []interface{}{ (*v2.ExchangeDataWithoutRate)(nil), // 61: code.transaction.v2.ExchangeDataWithoutRate } var file_chat_v2_chat_service_proto_depIdxs = []int32{ - 54, // 0: code.chat.v2.GetChatsRequest.owner:type_name -> code.common.v1.SolanaAccountId - 55, // 1: code.chat.v2.GetChatsRequest.signature:type_name -> code.common.v1.Signature - 53, // 2: code.chat.v2.GetChatsRequest.cursor:type_name -> code.chat.v2.Cursor - 3, // 3: code.chat.v2.GetChatsRequest.direction:type_name -> code.chat.v2.GetChatsRequest.Direction - 4, // 4: code.chat.v2.GetChatsResponse.result:type_name -> code.chat.v2.GetChatsResponse.Result - 41, // 5: code.chat.v2.GetChatsResponse.chats:type_name -> code.chat.v2.ChatMetadata - 38, // 6: code.chat.v2.GetMessagesRequest.chat_id:type_name -> code.chat.v2.ChatId - 40, // 7: code.chat.v2.GetMessagesRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 54, // 8: code.chat.v2.GetMessagesRequest.owner:type_name -> code.common.v1.SolanaAccountId - 55, // 9: code.chat.v2.GetMessagesRequest.signature:type_name -> code.common.v1.Signature - 53, // 10: code.chat.v2.GetMessagesRequest.cursor:type_name -> code.chat.v2.Cursor - 5, // 11: code.chat.v2.GetMessagesRequest.direction:type_name -> code.chat.v2.GetMessagesRequest.Direction - 6, // 12: code.chat.v2.GetMessagesResponse.result:type_name -> code.chat.v2.GetMessagesResponse.Result - 42, // 13: code.chat.v2.GetMessagesResponse.messages:type_name -> code.chat.v2.ChatMessage - 38, // 14: code.chat.v2.OpenChatEventStream.chat_id:type_name -> code.chat.v2.ChatId - 40, // 15: code.chat.v2.OpenChatEventStream.member_id:type_name -> code.chat.v2.ChatMemberId - 54, // 16: code.chat.v2.OpenChatEventStream.owner:type_name -> code.common.v1.SolanaAccountId - 55, // 17: code.chat.v2.OpenChatEventStream.signature:type_name -> code.common.v1.Signature - 42, // 18: code.chat.v2.ChatStreamEvent.message:type_name -> code.chat.v2.ChatMessage - 45, // 19: code.chat.v2.ChatStreamEvent.pointer:type_name -> code.chat.v2.Pointer - 20, // 20: code.chat.v2.ChatStreamEventBatch.events:type_name -> code.chat.v2.ChatStreamEvent - 7, // 21: code.chat.v2.ChatStreamEventError.code:type_name -> code.chat.v2.ChatStreamEventError.Code - 19, // 22: code.chat.v2.StreamChatEventsRequest.open_stream:type_name -> code.chat.v2.OpenChatEventStream - 56, // 23: code.chat.v2.StreamChatEventsRequest.pong:type_name -> code.common.v1.ClientPong - 21, // 24: code.chat.v2.StreamChatEventsResponse.events:type_name -> code.chat.v2.ChatStreamEventBatch - 57, // 25: code.chat.v2.StreamChatEventsResponse.ping:type_name -> code.common.v1.ServerPing - 22, // 26: code.chat.v2.StreamChatEventsResponse.error:type_name -> code.chat.v2.ChatStreamEventError - 54, // 27: code.chat.v2.StartChatRequest.owner:type_name -> code.common.v1.SolanaAccountId - 55, // 28: code.chat.v2.StartChatRequest.signature:type_name -> code.common.v1.Signature - 26, // 29: code.chat.v2.StartChatRequest.tip_chat:type_name -> code.chat.v2.StartTipChatParameters - 58, // 30: code.chat.v2.StartTipChatParameters.intent_id:type_name -> code.common.v1.IntentId - 8, // 31: code.chat.v2.StartChatResponse.result:type_name -> code.chat.v2.StartChatResponse.Result - 41, // 32: code.chat.v2.StartChatResponse.chat:type_name -> code.chat.v2.ChatMetadata - 38, // 33: code.chat.v2.SendMessageRequest.chat_id:type_name -> code.chat.v2.ChatId - 40, // 34: code.chat.v2.SendMessageRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 46, // 35: code.chat.v2.SendMessageRequest.content:type_name -> code.chat.v2.Content - 54, // 36: code.chat.v2.SendMessageRequest.owner:type_name -> code.common.v1.SolanaAccountId - 55, // 37: code.chat.v2.SendMessageRequest.signature:type_name -> code.common.v1.Signature - 9, // 38: code.chat.v2.SendMessageResponse.result:type_name -> code.chat.v2.SendMessageResponse.Result - 42, // 39: code.chat.v2.SendMessageResponse.message:type_name -> code.chat.v2.ChatMessage - 38, // 40: code.chat.v2.AdvancePointerRequest.chat_id:type_name -> code.chat.v2.ChatId - 45, // 41: code.chat.v2.AdvancePointerRequest.pointer:type_name -> code.chat.v2.Pointer - 54, // 42: code.chat.v2.AdvancePointerRequest.owner:type_name -> code.common.v1.SolanaAccountId - 55, // 43: code.chat.v2.AdvancePointerRequest.signature:type_name -> code.common.v1.Signature - 10, // 44: code.chat.v2.AdvancePointerResponse.result:type_name -> code.chat.v2.AdvancePointerResponse.Result - 38, // 45: code.chat.v2.RevealIdentityRequest.chat_id:type_name -> code.chat.v2.ChatId - 40, // 46: code.chat.v2.RevealIdentityRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 44, // 47: code.chat.v2.RevealIdentityRequest.identity:type_name -> code.chat.v2.ChatMemberIdentity - 54, // 48: code.chat.v2.RevealIdentityRequest.owner:type_name -> code.common.v1.SolanaAccountId - 55, // 49: code.chat.v2.RevealIdentityRequest.signature:type_name -> code.common.v1.Signature - 11, // 50: code.chat.v2.RevealIdentityResponse.result:type_name -> code.chat.v2.RevealIdentityResponse.Result - 38, // 51: code.chat.v2.SetMuteStateRequest.chat_id:type_name -> code.chat.v2.ChatId - 40, // 52: code.chat.v2.SetMuteStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 54, // 53: code.chat.v2.SetMuteStateRequest.owner:type_name -> code.common.v1.SolanaAccountId - 55, // 54: code.chat.v2.SetMuteStateRequest.signature:type_name -> code.common.v1.Signature - 12, // 55: code.chat.v2.SetMuteStateResponse.result:type_name -> code.chat.v2.SetMuteStateResponse.Result - 38, // 56: code.chat.v2.SetSubscriptionStateRequest.chat_id:type_name -> code.chat.v2.ChatId - 40, // 57: code.chat.v2.SetSubscriptionStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 54, // 58: code.chat.v2.SetSubscriptionStateRequest.owner:type_name -> code.common.v1.SolanaAccountId - 55, // 59: code.chat.v2.SetSubscriptionStateRequest.signature:type_name -> code.common.v1.Signature - 13, // 60: code.chat.v2.SetSubscriptionStateResponse.result:type_name -> code.chat.v2.SetSubscriptionStateResponse.Result - 38, // 61: code.chat.v2.ChatMetadata.chat_id:type_name -> code.chat.v2.ChatId - 0, // 62: code.chat.v2.ChatMetadata.kind:type_name -> code.chat.v2.ChatType - 43, // 63: code.chat.v2.ChatMetadata.members:type_name -> code.chat.v2.ChatMember - 53, // 64: code.chat.v2.ChatMetadata.cursor:type_name -> code.chat.v2.Cursor - 39, // 65: code.chat.v2.ChatMessage.message_id:type_name -> code.chat.v2.ChatMessageId - 40, // 66: code.chat.v2.ChatMessage.sender_id:type_name -> code.chat.v2.ChatMemberId - 46, // 67: code.chat.v2.ChatMessage.content:type_name -> code.chat.v2.Content - 59, // 68: code.chat.v2.ChatMessage.ts:type_name -> google.protobuf.Timestamp - 53, // 69: code.chat.v2.ChatMessage.cursor:type_name -> code.chat.v2.Cursor - 40, // 70: code.chat.v2.ChatMember.member_id:type_name -> code.chat.v2.ChatMemberId - 44, // 71: code.chat.v2.ChatMember.identity:type_name -> code.chat.v2.ChatMemberIdentity - 45, // 72: code.chat.v2.ChatMember.pointers:type_name -> code.chat.v2.Pointer - 1, // 73: code.chat.v2.ChatMemberIdentity.platform:type_name -> code.chat.v2.Platform - 2, // 74: code.chat.v2.Pointer.kind:type_name -> code.chat.v2.PointerType - 39, // 75: code.chat.v2.Pointer.value:type_name -> code.chat.v2.ChatMessageId - 40, // 76: code.chat.v2.Pointer.member_id:type_name -> code.chat.v2.ChatMemberId - 47, // 77: code.chat.v2.Content.text:type_name -> code.chat.v2.TextContent - 48, // 78: code.chat.v2.Content.localized:type_name -> code.chat.v2.LocalizedContent - 49, // 79: code.chat.v2.Content.exchange_data:type_name -> code.chat.v2.ExchangeDataContent - 50, // 80: code.chat.v2.Content.nacl_box:type_name -> code.chat.v2.NaclBoxEncryptedContent - 51, // 81: code.chat.v2.Content.thank_you:type_name -> code.chat.v2.ThankYouContent - 52, // 82: code.chat.v2.Content.identity_revealed:type_name -> code.chat.v2.IdentityRevealedContent - 14, // 83: code.chat.v2.ExchangeDataContent.verb:type_name -> code.chat.v2.ExchangeDataContent.Verb - 60, // 84: code.chat.v2.ExchangeDataContent.exact:type_name -> code.transaction.v2.ExchangeData - 61, // 85: code.chat.v2.ExchangeDataContent.partial:type_name -> code.transaction.v2.ExchangeDataWithoutRate - 58, // 86: code.chat.v2.ExchangeDataContent.intent:type_name -> code.common.v1.IntentId - 55, // 87: code.chat.v2.ExchangeDataContent.signature:type_name -> code.common.v1.Signature - 54, // 88: code.chat.v2.NaclBoxEncryptedContent.peer_public_key:type_name -> code.common.v1.SolanaAccountId - 58, // 89: code.chat.v2.ThankYouContent.tip_intent:type_name -> code.common.v1.IntentId - 15, // 90: code.chat.v2.Chat.GetChats:input_type -> code.chat.v2.GetChatsRequest - 17, // 91: code.chat.v2.Chat.GetMessages:input_type -> code.chat.v2.GetMessagesRequest - 23, // 92: code.chat.v2.Chat.StreamChatEvents:input_type -> code.chat.v2.StreamChatEventsRequest - 25, // 93: code.chat.v2.Chat.StartChat:input_type -> code.chat.v2.StartChatRequest - 28, // 94: code.chat.v2.Chat.SendMessage:input_type -> code.chat.v2.SendMessageRequest - 30, // 95: code.chat.v2.Chat.AdvancePointer:input_type -> code.chat.v2.AdvancePointerRequest - 32, // 96: code.chat.v2.Chat.RevealIdentity:input_type -> code.chat.v2.RevealIdentityRequest - 34, // 97: code.chat.v2.Chat.SetMuteState:input_type -> code.chat.v2.SetMuteStateRequest - 36, // 98: code.chat.v2.Chat.SetSubscriptionState:input_type -> code.chat.v2.SetSubscriptionStateRequest - 16, // 99: code.chat.v2.Chat.GetChats:output_type -> code.chat.v2.GetChatsResponse - 18, // 100: code.chat.v2.Chat.GetMessages:output_type -> code.chat.v2.GetMessagesResponse - 24, // 101: code.chat.v2.Chat.StreamChatEvents:output_type -> code.chat.v2.StreamChatEventsResponse - 27, // 102: code.chat.v2.Chat.StartChat:output_type -> code.chat.v2.StartChatResponse - 29, // 103: code.chat.v2.Chat.SendMessage:output_type -> code.chat.v2.SendMessageResponse - 31, // 104: code.chat.v2.Chat.AdvancePointer:output_type -> code.chat.v2.AdvancePointerResponse - 33, // 105: code.chat.v2.Chat.RevealIdentity:output_type -> code.chat.v2.RevealIdentityResponse - 35, // 106: code.chat.v2.Chat.SetMuteState:output_type -> code.chat.v2.SetMuteStateResponse - 37, // 107: code.chat.v2.Chat.SetSubscriptionState:output_type -> code.chat.v2.SetSubscriptionStateResponse - 99, // [99:108] is the sub-list for method output_type - 90, // [90:99] is the sub-list for method input_type - 90, // [90:90] is the sub-list for extension type_name - 90, // [90:90] is the sub-list for extension extendee - 0, // [0:90] is the sub-list for field type_name + 54, // 0: code.chat.v2.GetChatsRequest.owner:type_name -> code.common.v1.SolanaAccountId + 55, // 1: code.chat.v2.GetChatsRequest.signature:type_name -> code.common.v1.Signature + 53, // 2: code.chat.v2.GetChatsRequest.cursor:type_name -> code.chat.v2.Cursor + 3, // 3: code.chat.v2.GetChatsRequest.direction:type_name -> code.chat.v2.GetChatsRequest.Direction + 4, // 4: code.chat.v2.GetChatsResponse.result:type_name -> code.chat.v2.GetChatsResponse.Result + 41, // 5: code.chat.v2.GetChatsResponse.chats:type_name -> code.chat.v2.ChatMetadata + 38, // 6: code.chat.v2.GetMessagesRequest.chat_id:type_name -> code.chat.v2.ChatId + 40, // 7: code.chat.v2.GetMessagesRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 54, // 8: code.chat.v2.GetMessagesRequest.owner:type_name -> code.common.v1.SolanaAccountId + 55, // 9: code.chat.v2.GetMessagesRequest.signature:type_name -> code.common.v1.Signature + 53, // 10: code.chat.v2.GetMessagesRequest.cursor:type_name -> code.chat.v2.Cursor + 5, // 11: code.chat.v2.GetMessagesRequest.direction:type_name -> code.chat.v2.GetMessagesRequest.Direction + 6, // 12: code.chat.v2.GetMessagesResponse.result:type_name -> code.chat.v2.GetMessagesResponse.Result + 42, // 13: code.chat.v2.GetMessagesResponse.messages:type_name -> code.chat.v2.ChatMessage + 38, // 14: code.chat.v2.OpenChatEventStream.chat_id:type_name -> code.chat.v2.ChatId + 40, // 15: code.chat.v2.OpenChatEventStream.member_id:type_name -> code.chat.v2.ChatMemberId + 54, // 16: code.chat.v2.OpenChatEventStream.owner:type_name -> code.common.v1.SolanaAccountId + 55, // 17: code.chat.v2.OpenChatEventStream.signature:type_name -> code.common.v1.Signature + 42, // 18: code.chat.v2.ChatStreamEvent.message:type_name -> code.chat.v2.ChatMessage + 45, // 19: code.chat.v2.ChatStreamEvent.pointer:type_name -> code.chat.v2.Pointer + 20, // 20: code.chat.v2.ChatStreamEventBatch.events:type_name -> code.chat.v2.ChatStreamEvent + 7, // 21: code.chat.v2.ChatStreamEventError.code:type_name -> code.chat.v2.ChatStreamEventError.Code + 19, // 22: code.chat.v2.StreamChatEventsRequest.open_stream:type_name -> code.chat.v2.OpenChatEventStream + 56, // 23: code.chat.v2.StreamChatEventsRequest.pong:type_name -> code.common.v1.ClientPong + 21, // 24: code.chat.v2.StreamChatEventsResponse.events:type_name -> code.chat.v2.ChatStreamEventBatch + 57, // 25: code.chat.v2.StreamChatEventsResponse.ping:type_name -> code.common.v1.ServerPing + 22, // 26: code.chat.v2.StreamChatEventsResponse.error:type_name -> code.chat.v2.ChatStreamEventError + 54, // 27: code.chat.v2.StartChatRequest.owner:type_name -> code.common.v1.SolanaAccountId + 55, // 28: code.chat.v2.StartChatRequest.signature:type_name -> code.common.v1.Signature + 26, // 29: code.chat.v2.StartChatRequest.tip_chat:type_name -> code.chat.v2.StartTipChatParameters + 58, // 30: code.chat.v2.StartTipChatParameters.intent_id:type_name -> code.common.v1.IntentId + 8, // 31: code.chat.v2.StartChatResponse.result:type_name -> code.chat.v2.StartChatResponse.Result + 41, // 32: code.chat.v2.StartChatResponse.chat:type_name -> code.chat.v2.ChatMetadata + 38, // 33: code.chat.v2.SendMessageRequest.chat_id:type_name -> code.chat.v2.ChatId + 40, // 34: code.chat.v2.SendMessageRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 46, // 35: code.chat.v2.SendMessageRequest.content:type_name -> code.chat.v2.Content + 54, // 36: code.chat.v2.SendMessageRequest.owner:type_name -> code.common.v1.SolanaAccountId + 55, // 37: code.chat.v2.SendMessageRequest.signature:type_name -> code.common.v1.Signature + 9, // 38: code.chat.v2.SendMessageResponse.result:type_name -> code.chat.v2.SendMessageResponse.Result + 42, // 39: code.chat.v2.SendMessageResponse.message:type_name -> code.chat.v2.ChatMessage + 38, // 40: code.chat.v2.AdvancePointerRequest.chat_id:type_name -> code.chat.v2.ChatId + 45, // 41: code.chat.v2.AdvancePointerRequest.pointer:type_name -> code.chat.v2.Pointer + 54, // 42: code.chat.v2.AdvancePointerRequest.owner:type_name -> code.common.v1.SolanaAccountId + 55, // 43: code.chat.v2.AdvancePointerRequest.signature:type_name -> code.common.v1.Signature + 10, // 44: code.chat.v2.AdvancePointerResponse.result:type_name -> code.chat.v2.AdvancePointerResponse.Result + 38, // 45: code.chat.v2.RevealIdentityRequest.chat_id:type_name -> code.chat.v2.ChatId + 40, // 46: code.chat.v2.RevealIdentityRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 44, // 47: code.chat.v2.RevealIdentityRequest.identity:type_name -> code.chat.v2.ChatMemberIdentity + 54, // 48: code.chat.v2.RevealIdentityRequest.owner:type_name -> code.common.v1.SolanaAccountId + 55, // 49: code.chat.v2.RevealIdentityRequest.signature:type_name -> code.common.v1.Signature + 11, // 50: code.chat.v2.RevealIdentityResponse.result:type_name -> code.chat.v2.RevealIdentityResponse.Result + 38, // 51: code.chat.v2.SetMuteStateRequest.chat_id:type_name -> code.chat.v2.ChatId + 40, // 52: code.chat.v2.SetMuteStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 54, // 53: code.chat.v2.SetMuteStateRequest.owner:type_name -> code.common.v1.SolanaAccountId + 55, // 54: code.chat.v2.SetMuteStateRequest.signature:type_name -> code.common.v1.Signature + 12, // 55: code.chat.v2.SetMuteStateResponse.result:type_name -> code.chat.v2.SetMuteStateResponse.Result + 38, // 56: code.chat.v2.SetSubscriptionStateRequest.chat_id:type_name -> code.chat.v2.ChatId + 40, // 57: code.chat.v2.SetSubscriptionStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 54, // 58: code.chat.v2.SetSubscriptionStateRequest.owner:type_name -> code.common.v1.SolanaAccountId + 55, // 59: code.chat.v2.SetSubscriptionStateRequest.signature:type_name -> code.common.v1.Signature + 13, // 60: code.chat.v2.SetSubscriptionStateResponse.result:type_name -> code.chat.v2.SetSubscriptionStateResponse.Result + 38, // 61: code.chat.v2.ChatMetadata.chat_id:type_name -> code.chat.v2.ChatId + 0, // 62: code.chat.v2.ChatMetadata.kind:type_name -> code.chat.v2.ChatType + 43, // 63: code.chat.v2.ChatMetadata.members:type_name -> code.chat.v2.ChatMember + 53, // 64: code.chat.v2.ChatMetadata.cursor:type_name -> code.chat.v2.Cursor + 39, // 65: code.chat.v2.ChatMessage.message_id:type_name -> code.chat.v2.ChatMessageId + 40, // 66: code.chat.v2.ChatMessage.sender_id:type_name -> code.chat.v2.ChatMemberId + 46, // 67: code.chat.v2.ChatMessage.content:type_name -> code.chat.v2.Content + 59, // 68: code.chat.v2.ChatMessage.ts:type_name -> google.protobuf.Timestamp + 53, // 69: code.chat.v2.ChatMessage.cursor:type_name -> code.chat.v2.Cursor + 40, // 70: code.chat.v2.ChatMember.member_id:type_name -> code.chat.v2.ChatMemberId + 44, // 71: code.chat.v2.ChatMember.identity:type_name -> code.chat.v2.ChatMemberIdentity + 45, // 72: code.chat.v2.ChatMember.pointers:type_name -> code.chat.v2.Pointer + 1, // 73: code.chat.v2.ChatMemberIdentity.platform:type_name -> code.chat.v2.Platform + 2, // 74: code.chat.v2.Pointer.kind:type_name -> code.chat.v2.PointerType + 39, // 75: code.chat.v2.Pointer.value:type_name -> code.chat.v2.ChatMessageId + 40, // 76: code.chat.v2.Pointer.member_id:type_name -> code.chat.v2.ChatMemberId + 47, // 77: code.chat.v2.Content.text:type_name -> code.chat.v2.TextContent + 48, // 78: code.chat.v2.Content.localized:type_name -> code.chat.v2.LocalizedContent + 49, // 79: code.chat.v2.Content.exchange_data:type_name -> code.chat.v2.ExchangeDataContent + 50, // 80: code.chat.v2.Content.nacl_box:type_name -> code.chat.v2.NaclBoxEncryptedContent + 51, // 81: code.chat.v2.Content.thank_you:type_name -> code.chat.v2.ThankYouContent + 52, // 82: code.chat.v2.Content.identity_revealed:type_name -> code.chat.v2.IdentityRevealedContent + 14, // 83: code.chat.v2.ExchangeDataContent.verb:type_name -> code.chat.v2.ExchangeDataContent.Verb + 60, // 84: code.chat.v2.ExchangeDataContent.exact:type_name -> code.transaction.v2.ExchangeData + 61, // 85: code.chat.v2.ExchangeDataContent.partial:type_name -> code.transaction.v2.ExchangeDataWithoutRate + 58, // 86: code.chat.v2.ExchangeDataContent.intent:type_name -> code.common.v1.IntentId + 55, // 87: code.chat.v2.ExchangeDataContent.signature:type_name -> code.common.v1.Signature + 54, // 88: code.chat.v2.NaclBoxEncryptedContent.peer_public_key:type_name -> code.common.v1.SolanaAccountId + 58, // 89: code.chat.v2.ThankYouContent.tip_intent:type_name -> code.common.v1.IntentId + 40, // 90: code.chat.v2.IdentityRevealedContent.member_id:type_name -> code.chat.v2.ChatMemberId + 44, // 91: code.chat.v2.IdentityRevealedContent.identity:type_name -> code.chat.v2.ChatMemberIdentity + 15, // 92: code.chat.v2.Chat.GetChats:input_type -> code.chat.v2.GetChatsRequest + 17, // 93: code.chat.v2.Chat.GetMessages:input_type -> code.chat.v2.GetMessagesRequest + 23, // 94: code.chat.v2.Chat.StreamChatEvents:input_type -> code.chat.v2.StreamChatEventsRequest + 25, // 95: code.chat.v2.Chat.StartChat:input_type -> code.chat.v2.StartChatRequest + 28, // 96: code.chat.v2.Chat.SendMessage:input_type -> code.chat.v2.SendMessageRequest + 30, // 97: code.chat.v2.Chat.AdvancePointer:input_type -> code.chat.v2.AdvancePointerRequest + 32, // 98: code.chat.v2.Chat.RevealIdentity:input_type -> code.chat.v2.RevealIdentityRequest + 34, // 99: code.chat.v2.Chat.SetMuteState:input_type -> code.chat.v2.SetMuteStateRequest + 36, // 100: code.chat.v2.Chat.SetSubscriptionState:input_type -> code.chat.v2.SetSubscriptionStateRequest + 16, // 101: code.chat.v2.Chat.GetChats:output_type -> code.chat.v2.GetChatsResponse + 18, // 102: code.chat.v2.Chat.GetMessages:output_type -> code.chat.v2.GetMessagesResponse + 24, // 103: code.chat.v2.Chat.StreamChatEvents:output_type -> code.chat.v2.StreamChatEventsResponse + 27, // 104: code.chat.v2.Chat.StartChat:output_type -> code.chat.v2.StartChatResponse + 29, // 105: code.chat.v2.Chat.SendMessage:output_type -> code.chat.v2.SendMessageResponse + 31, // 106: code.chat.v2.Chat.AdvancePointer:output_type -> code.chat.v2.AdvancePointerResponse + 33, // 107: code.chat.v2.Chat.RevealIdentity:output_type -> code.chat.v2.RevealIdentityResponse + 35, // 108: code.chat.v2.Chat.SetMuteState:output_type -> code.chat.v2.SetMuteStateResponse + 37, // 109: code.chat.v2.Chat.SetSubscriptionState:output_type -> code.chat.v2.SetSubscriptionStateResponse + 101, // [101:110] is the sub-list for method output_type + 92, // [92:101] is the sub-list for method input_type + 92, // [92:92] is the sub-list for extension type_name + 92, // [92:92] is the sub-list for extension extendee + 0, // [0:92] is the sub-list for field type_name } func init() { file_chat_v2_chat_service_proto_init() } diff --git a/generated/go/chat/v2/chat_service.pb.validate.go b/generated/go/chat/v2/chat_service.pb.validate.go index 5b820b8..5ae1c49 100644 --- a/generated/go/chat/v2/chat_service.pb.validate.go +++ b/generated/go/chat/v2/chat_service.pb.validate.go @@ -3871,6 +3871,40 @@ func (m *IdentityRevealedContent) Validate() error { return nil } + if m.GetMemberId() == nil { + return IdentityRevealedContentValidationError{ + field: "MemberId", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetMemberId()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return IdentityRevealedContentValidationError{ + field: "MemberId", + reason: "embedded message failed validation", + cause: err, + } + } + } + + if m.GetIdentity() == nil { + return IdentityRevealedContentValidationError{ + field: "Identity", + reason: "value is required", + } + } + + if v, ok := interface{}(m.GetIdentity()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return IdentityRevealedContentValidationError{ + field: "Identity", + reason: "embedded message failed validation", + cause: err, + } + } + } + return nil } diff --git a/proto/chat/v2/chat_service.proto b/proto/chat/v2/chat_service.proto index 643c634..8b0514b 100644 --- a/proto/chat/v2/chat_service.proto +++ b/proto/chat/v2/chat_service.proto @@ -580,8 +580,11 @@ message ThankYouContent { } message IdentityRevealedContent { - // No fields as of right now. The chat member ID that was revealed can be inferred - // from the message sender ID, and the identity from the chat member's metadata. + // The chat member who revealed their identity + ChatMemberId member_id = 1 [(validate.rules).message.required = true]; + + // The identity that was revealed + ChatMemberIdentity identity = 2 [(validate.rules).message.required = true]; } // Opaque cursor used across paged APIs. Underlying bytes may change as paging From a8c06e297df23336fad6156156045defb1096b55 Mon Sep 17 00:00:00 2001 From: Jeff Yanta Date: Thu, 20 Jun 2024 13:56:19 -0400 Subject: [PATCH 15/16] Add additional comments and a few minor tweaks --- generated/go/chat/v2/chat_service.pb.go | 837 +++++++++--------- .../go/chat/v2/chat_service.pb.validate.go | 22 +- generated/go/chat/v2/chat_service_grpc.pb.go | 86 +- proto/chat/v2/chat_service.proto | 83 +- 4 files changed, 583 insertions(+), 445 deletions(-) diff --git a/generated/go/chat/v2/chat_service.pb.go b/generated/go/chat/v2/chat_service.pb.go index 538da7c..024f4ba 100644 --- a/generated/go/chat/v2/chat_service.pb.go +++ b/generated/go/chat/v2/chat_service.pb.go @@ -1588,12 +1588,16 @@ type StartChatRequest_TipChat struct { func (*StartChatRequest_TipChat) isStartChatRequest_Parameters() {} // Starts a two-way chat between a tipper and tippee. Chat members are -// inferred from the 12 word public keys +// inferred from the 12 word public keys involved in the intent. Only +// the tippee can start the chat, and the tipper is anonymous if this +// is the first between the involved Code users. type StartTipChatParameters struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // The tip's intent ID, which can be extracted from the reference in + // an ExchangeDataContent message content where the verb is RECEIVED_TIP. IntentId *v1.IntentId `protobuf:"bytes,1,opt,name=intent_id,json=intentId,proto3" json:"intent_id,omitempty"` } @@ -1697,8 +1701,11 @@ type SendMessageRequest struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ChatId *ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` - MemberId *ChatMemberId `protobuf:"bytes,2,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` + ChatId *ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` + MemberId *ChatMemberId `protobuf:"bytes,2,opt,name=member_id,json=memberId,proto3" json:"member_id,omitempty"` + // Allowed content types that can be sent by client: + // - TextContent + // - ThankYouContent Content []*Content `protobuf:"bytes,3,rep,name=content,proto3" json:"content,omitempty"` Owner *v1.SolanaAccountId `protobuf:"bytes,4,opt,name=owner,proto3" json:"owner,omitempty"` Signature *v1.Signature `protobuf:"bytes,5,opt,name=signature,proto3" json:"signature,omitempty"` @@ -2031,6 +2038,8 @@ type RevealIdentityResponse struct { unknownFields protoimpl.UnknownFields Result RevealIdentityResponse_Result `protobuf:"varint,1,opt,name=result,proto3,enum=code.chat.v2.RevealIdentityResponse_Result" json:"result,omitempty"` + // The chat message that was sent if the RPC was successful + Message *ChatMessage `protobuf:"bytes,2,opt,name=message,proto3" json:"message,omitempty"` } func (x *RevealIdentityResponse) Reset() { @@ -2072,6 +2081,13 @@ func (x *RevealIdentityResponse) GetResult() RevealIdentityResponse_Result { return RevealIdentityResponse_OK } +func (x *RevealIdentityResponse) GetMessage() *ChatMessage { + if x != nil { + return x.Message + } + return nil +} + type SetMuteStateRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2329,6 +2345,8 @@ type ChatId struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields + // Sufficient space is left for a consistent hash value, though other types + // of values may be used. Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` } @@ -2377,7 +2395,8 @@ type ChatMessageId struct { unknownFields protoimpl.UnknownFields // Guaranteed to be a time-based UUID. This should be used to construct a - // consistently ordered message history based on time. + // consistently ordered message history based on time using a simple byte + // comparison. Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` } @@ -2425,7 +2444,7 @@ type ChatMemberId struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - // Random UUID + // Globally random UUID Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` } @@ -2477,7 +2496,7 @@ type ChatMetadata struct { // Globally unique ID for this chat ChatId *ChatId `protobuf:"bytes,1,opt,name=chat_id,json=chatId,proto3" json:"chat_id,omitempty"` // The type of chat - Kind ChatType `protobuf:"varint,2,opt,name=kind,proto3,enum=code.chat.v2.ChatType" json:"kind,omitempty"` + Type ChatType `protobuf:"varint,2,opt,name=type,proto3,enum=code.chat.v2.ChatType" json:"type,omitempty"` // The chat title, which will be localized by server when applicable Title string `protobuf:"bytes,3,opt,name=title,proto3" json:"title,omitempty"` // The members in this chat @@ -2537,9 +2556,9 @@ func (x *ChatMetadata) GetChatId() *ChatId { return nil } -func (x *ChatMetadata) GetKind() ChatType { +func (x *ChatMetadata) GetType() ChatType { if x != nil { - return x.Kind + return x.Type } return ChatType_UNKNOWN_CHAT_TYPE } @@ -2681,7 +2700,7 @@ type ChatMember struct { // pointers, if they exist. SENT pointers should be inferred by persistence // on server. Pointers []*Pointer `protobuf:"bytes,4,rep,name=pointers,proto3" json:"pointers,omitempty"` - // Estimated number of unread messages in this chat + // Estimated number of unread messages for the chat member in this chat // // Only valid when is_self = true NumUnread uint32 `protobuf:"varint,5,opt,name=num_unread,json=numUnread,proto3" json:"num_unread,omitempty"` @@ -2833,13 +2852,17 @@ func (x *ChatMemberIdentity) GetUsername() string { return "" } -// Pointer in a chat indicating a user's message state in a chat. +// Pointer in a chat indicating a user's message history state in a chat. type Pointer struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Kind PointerType `protobuf:"varint,1,opt,name=kind,proto3,enum=code.chat.v2.PointerType" json:"kind,omitempty"` + // The type of pointer indicates which user's message history state can be + // inferred from the pointer value. It is also possible to infer cross-pointer + // state. For example, if a chat member has a READ pointer for a message with + // ID N, then the DELIVERED pointer must be at least N. + Type PointerType `protobuf:"varint,1,opt,name=type,proto3,enum=code.chat.v2.PointerType" json:"type,omitempty"` // Everything at or before this message ID is considered to have the state // inferred by the type of pointer. Value *ChatMessageId `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` @@ -2879,9 +2902,9 @@ func (*Pointer) Descriptor() ([]byte, []int) { return file_chat_v2_chat_service_proto_rawDescGZIP(), []int{30} } -func (x *Pointer) GetKind() PointerType { +func (x *Pointer) GetType() PointerType { if x != nil { - return x.Kind + return x.Type } return PointerType_UNKNOWN_POINTER_TYPE } @@ -3448,7 +3471,7 @@ func (x *IdentityRevealedContent) GetIdentity() *ChatMemberIdentity { // Opaque cursor used across paged APIs. Underlying bytes may change as paging // strategies evolve. Expected length value will vary based on the RPC being -// executed.package +// executed. type Cursor struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3773,343 +3796,346 @@ var file_chat_v2_chat_service_proto_rawDesc = []byte{ 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x22, 0xb0, 0x01, 0x0a, 0x16, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, + 0x75, 0x72, 0x65, 0x22, 0xe5, 0x01, 0x0a, 0x16, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x43, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x22, 0x51, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, - 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, - 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, - 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x1f, 0x0a, 0x1b, 0x44, 0x49, 0x46, 0x46, 0x45, 0x52, 0x45, - 0x4e, 0x54, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, 0x5f, 0x52, 0x45, 0x56, 0x45, - 0x41, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x22, 0xb8, 0x02, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x4d, 0x75, - 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, - 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, - 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, - 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, - 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x19, - 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, - 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, - 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, - 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, - 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, - 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x22, 0x9a, 0x01, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x41, 0x0a, 0x06, 0x72, 0x65, - 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, - 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, - 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x3f, 0x0a, - 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, - 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, - 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, - 0x0d, 0x0a, 0x09, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x4d, 0x55, 0x54, 0x45, 0x10, 0x03, 0x22, 0xca, - 0x02, 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x39, - 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, - 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, - 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, + 0x75, 0x6c, 0x74, 0x12, 0x33, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, + 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x51, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, + 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, + 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x1f, 0x0a, 0x1b, 0x44, 0x49, + 0x46, 0x46, 0x45, 0x52, 0x45, 0x4e, 0x54, 0x5f, 0x49, 0x44, 0x45, 0x4e, 0x54, 0x49, 0x54, 0x59, + 0x5f, 0x52, 0x45, 0x56, 0x45, 0x41, 0x4c, 0x45, 0x44, 0x10, 0x03, 0x22, 0xb8, 0x02, 0x0a, 0x13, + 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, + 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, + 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x41, + 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, + 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, + 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, + 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0x9a, 0x01, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x4d, 0x75, + 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x41, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, + 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, + 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, + 0x6c, 0x74, 0x22, 0x3f, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, + 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, + 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, + 0x4e, 0x44, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x4d, 0x55, 0x54, + 0x45, 0x10, 0x03, 0x22, 0xca, 0x02, 0x0a, 0x1b, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x43, + 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, + 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x49, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, + 0x69, 0x62, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, + 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, + 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, + 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, + 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, + 0x22, 0xb1, 0x01, 0x0a, 0x1c, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x49, 0x0a, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0e, 0x32, 0x31, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, + 0x73, 0x75, 0x6c, 0x74, 0x52, 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x46, 0x0a, 0x06, + 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, + 0x0a, 0x06, 0x44, 0x45, 0x4e, 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, + 0x41, 0x54, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x14, + 0x0a, 0x10, 0x43, 0x41, 0x4e, 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, + 0x42, 0x45, 0x10, 0x03, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x21, + 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, + 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x20, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x22, 0x32, 0x0a, 0x0d, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, + 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x31, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, + 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xd9, 0x02, 0x0a, 0x0c, 0x43, 0x68, 0x61, + 0x74, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, + 0x74, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, + 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, + 0x61, 0x74, 0x49, 0x64, 0x12, 0x36, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, + 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x22, 0x0a, 0x05, + 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, + 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, + 0x12, 0x40, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, + 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, + 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, + 0x72, 0x73, 0x12, 0x19, 0x0a, 0x08, 0x63, 0x61, 0x6e, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x63, 0x61, 0x6e, 0x4d, 0x75, 0x74, 0x65, 0x12, 0x27, 0x0a, + 0x0f, 0x63, 0x61, 0x6e, 0x5f, 0x75, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x63, 0x61, 0x6e, 0x55, 0x6e, 0x73, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, + 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, + 0x72, 0x73, 0x6f, 0x72, 0x22, 0xb3, 0x02, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x12, 0x46, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, + 0x01, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x09, + 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, + 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x52, 0x08, 0x73, 0x65, 0x6e, + 0x64, 0x65, 0x72, 0x49, 0x64, 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, + 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x63, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x12, 0x36, 0x0a, 0x02, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, + 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, + 0xc0, 0x03, 0x05, 0xb2, 0x01, 0x02, 0x08, 0x01, 0x52, 0x02, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x06, + 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, + 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xc8, 0x02, 0x0a, 0x0a, 0x43, + 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, - 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x23, - 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x62, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, - 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, - 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, 0x67, 0x6e, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, - 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xb1, 0x01, 0x0a, 0x1c, - 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x49, 0x0a, 0x06, - 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, - 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2e, 0x52, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x52, - 0x06, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x22, 0x46, 0x0a, 0x06, 0x52, 0x65, 0x73, 0x75, 0x6c, - 0x74, 0x12, 0x06, 0x0a, 0x02, 0x4f, 0x4b, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4e, - 0x49, 0x45, 0x44, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x4e, 0x4f, - 0x54, 0x5f, 0x46, 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x43, 0x41, 0x4e, - 0x54, 0x5f, 0x55, 0x4e, 0x53, 0x55, 0x42, 0x53, 0x43, 0x52, 0x49, 0x42, 0x45, 0x10, 0x03, 0x22, - 0x2b, 0x0a, 0x06, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, - 0x04, 0x10, 0x20, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x32, 0x0a, 0x0d, - 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x21, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, - 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x22, 0x31, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, - 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x10, 0x18, 0x10, 0x52, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x22, 0xd9, 0x02, 0x0a, 0x0c, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x12, 0x39, 0x0a, 0x07, 0x63, 0x68, 0x61, 0x74, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, - 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x06, 0x63, 0x68, 0x61, 0x74, 0x49, 0x64, 0x12, - 0x36, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, - 0x00, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x22, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, - 0x01, 0x18, 0x80, 0x08, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x6d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, - 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x12, 0x19, 0x0a, - 0x08, 0x63, 0x61, 0x6e, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x63, 0x61, 0x6e, 0x4d, 0x75, 0x74, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x63, 0x61, 0x6e, 0x5f, - 0x75, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x0e, 0x63, 0x61, 0x6e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, - 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, - 0xb3, 0x02, 0x0a, 0x0b, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, - 0x46, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, - 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, - 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x37, 0x0a, 0x09, 0x73, 0x65, 0x6e, 0x64, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, + 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, + 0x0a, 0x07, 0x69, 0x73, 0x5f, 0x73, 0x65, 0x6c, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x06, 0x69, 0x73, 0x53, 0x65, 0x6c, 0x66, 0x12, 0x3c, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x74, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x69, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3f, 0x0a, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0c, + 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x02, 0x52, 0x08, 0x70, 0x6f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x6e, + 0x72, 0x65, 0x61, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x55, + 0x6e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, + 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, + 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, + 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, + 0x72, 0x69, 0x62, 0x65, 0x64, 0x22, 0x7d, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3e, 0x0a, 0x08, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6c, 0x61, + 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x18, + 0x01, 0x52, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x27, 0x0a, 0x08, 0x75, + 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xba, + 0xe9, 0xc0, 0x03, 0x06, 0x72, 0x04, 0x10, 0x01, 0x18, 0x0f, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, + 0x6e, 0x61, 0x6d, 0x65, 0x22, 0xc8, 0x01, 0x0a, 0x07, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x12, 0x39, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, + 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x3d, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x52, 0x08, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x49, 0x64, - 0x12, 0x3d, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x92, - 0x01, 0x04, 0x08, 0x01, 0x10, 0x02, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, - 0x36, 0x0a, 0x02, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, - 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0xb2, 0x01, - 0x02, 0x08, 0x01, 0x52, 0x02, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, - 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, - 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xc8, 0x02, 0x0a, 0x0a, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, - 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x73, 0x5f, - 0x73, 0x65, 0x6c, 0x66, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x69, 0x73, 0x53, 0x65, - 0x6c, 0x66, 0x12, 0x3c, 0x0a, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x12, 0x3f, 0x0a, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x18, 0x04, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x32, 0x2e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, - 0x92, 0x01, 0x04, 0x08, 0x00, 0x10, 0x02, 0x52, 0x08, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x73, 0x12, 0x1d, 0x0a, 0x0a, 0x6e, 0x75, 0x6d, 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x09, 0x6e, 0x75, 0x6d, 0x55, 0x6e, 0x72, 0x65, 0x61, 0x64, - 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x69, - 0x73, 0x5f, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x64, - 0x22, 0x83, 0x01, 0x0a, 0x12, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, 0x3e, 0x0a, 0x08, 0x70, 0x6c, 0x61, 0x74, 0x66, - 0x6f, 0x72, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x18, 0x01, 0x52, 0x08, 0x70, - 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x12, 0x27, 0x0a, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, - 0x72, 0x04, 0x10, 0x01, 0x18, 0x0f, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, - 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0xc8, 0x01, 0x0a, 0x07, 0x50, 0x6f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x12, 0x39, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x42, 0x0a, 0xba, 0xe9, 0xc0, - 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x3d, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, - 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x09, - 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, - 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, - 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, - 0x64, 0x22, 0xab, 0x03, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, - 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x43, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3e, - 0x0a, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x48, 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x48, - 0x0a, 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x78, 0x63, 0x68, - 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x42, 0x0a, 0x08, 0x6e, 0x61, 0x63, 0x6c, - 0x5f, 0x62, 0x6f, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, - 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, - 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x48, 0x00, 0x52, 0x07, 0x6e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x12, 0x3c, 0x0a, 0x09, - 0x74, 0x68, 0x61, 0x6e, 0x6b, 0x5f, 0x79, 0x6f, 0x75, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, - 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, - 0x52, 0x08, 0x74, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x12, 0x54, 0x0a, 0x11, 0x69, 0x64, - 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, - 0x65, 0x61, 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, - 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, - 0x42, 0x0d, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, - 0x2f, 0x0a, 0x0b, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x20, - 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, - 0xc0, 0x03, 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, - 0x22, 0x40, 0x0a, 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x72, 0x5f, 0x74, - 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, - 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x4f, 0x72, 0x54, 0x65, - 0x78, 0x74, 0x22, 0xa4, 0x04, 0x0a, 0x13, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, - 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x04, 0x76, 0x65, - 0x72, 0x62, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x44, 0x61, 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x62, - 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x76, 0x65, - 0x72, 0x62, 0x12, 0x39, 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, - 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, - 0x07, 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, - 0x61, 0x57, 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x52, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, - 0x70, 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x32, 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, - 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, - 0x64, 0x48, 0x01, 0x52, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x73, - 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, - 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x22, 0xa4, 0x01, 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, - 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, - 0x47, 0x41, 0x56, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, - 0x45, 0x44, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x45, 0x57, - 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, - 0x04, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x52, - 0x45, 0x54, 0x55, 0x52, 0x4e, 0x45, 0x44, 0x10, 0x06, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, - 0x4e, 0x54, 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x41, 0x49, 0x44, 0x10, 0x08, 0x12, 0x0d, - 0x0a, 0x09, 0x50, 0x55, 0x52, 0x43, 0x48, 0x41, 0x53, 0x45, 0x44, 0x10, 0x09, 0x12, 0x10, 0x0a, - 0x0c, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0a, 0x12, - 0x0c, 0x0a, 0x08, 0x53, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0b, 0x42, 0x16, 0x0a, - 0x0d, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x12, 0x05, - 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x42, 0x12, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xcc, 0x01, 0x0a, 0x17, 0x4e, 0x61, - 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, 0x75, - 0x62, 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x6f, 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, - 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x70, 0x65, 0x65, - 0x72, 0x50, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6f, - 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, - 0x7a, 0x04, 0x10, 0x18, 0x18, 0x18, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, - 0x11, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, - 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x10, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, - 0x64, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x62, 0x0a, 0x0f, 0x54, 0x68, 0x61, 0x6e, - 0x6b, 0x59, 0x6f, 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x0a, 0x74, - 0x69, 0x70, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, - 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, - 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x09, 0x74, 0x69, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0xa8, 0x01, 0x0a, - 0x17, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, - 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, - 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x48, 0x0a, - 0x08, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, - 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x69, - 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, - 0x72, 0x12, 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, - 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x08, 0x18, 0x20, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x2a, 0x40, 0x0a, 0x08, 0x43, 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x15, 0x0a, 0x11, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x54, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x4e, 0x4f, 0x54, 0x49, 0x46, - 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x4f, - 0x5f, 0x57, 0x41, 0x59, 0x10, 0x02, 0x2a, 0x2d, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x12, 0x14, 0x0a, 0x10, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4c, - 0x41, 0x54, 0x46, 0x4f, 0x52, 0x4d, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x49, 0x54, - 0x54, 0x45, 0x52, 0x10, 0x01, 0x2a, 0x4a, 0x0a, 0x0b, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, - 0x50, 0x4f, 0x49, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x08, - 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x4c, 0x49, - 0x56, 0x45, 0x52, 0x45, 0x44, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, - 0x03, 0x32, 0xae, 0x06, 0x0a, 0x04, 0x43, 0x68, 0x61, 0x74, 0x12, 0x49, 0x0a, 0x08, 0x47, 0x65, - 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x12, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x73, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, + 0x02, 0x10, 0x01, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, + 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, + 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x22, + 0xab, 0x03, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x2f, 0x0a, 0x04, 0x74, + 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x3e, 0x0a, 0x09, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4c, + 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x0d, + 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x65, 0x78, 0x63, 0x68, 0x61, 0x6e, + 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x42, 0x0a, 0x08, 0x6e, 0x61, 0x63, 0x6c, 0x5f, 0x62, + 0x6f, 0x78, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x45, + 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x07, 0x6e, 0x61, 0x63, 0x6c, 0x42, 0x6f, 0x78, 0x12, 0x3c, 0x0a, 0x09, 0x74, 0x68, + 0x61, 0x6e, 0x6b, 0x5f, 0x79, 0x6f, 0x75, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x68, 0x61, + 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x08, + 0x74, 0x68, 0x61, 0x6e, 0x6b, 0x59, 0x6f, 0x75, 0x12, 0x54, 0x0a, 0x11, 0x69, 0x64, 0x65, 0x6e, + 0x74, 0x69, 0x74, 0x79, 0x5f, 0x72, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, + 0x6c, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x10, 0x69, 0x64, + 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x42, 0x0d, + 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0x2f, 0x0a, + 0x0b, 0x54, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, 0x04, + 0x74, 0x65, 0x78, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, + 0x07, 0x72, 0x05, 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x22, 0x40, + 0x0a, 0x10, 0x4c, 0x6f, 0x63, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x12, 0x2c, 0x0a, 0x0b, 0x6b, 0x65, 0x79, 0x5f, 0x6f, 0x72, 0x5f, 0x74, 0x65, 0x78, + 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x72, 0x05, + 0x10, 0x01, 0x18, 0x80, 0x08, 0x52, 0x09, 0x6b, 0x65, 0x79, 0x4f, 0x72, 0x54, 0x65, 0x78, 0x74, + 0x22, 0xa4, 0x04, 0x0a, 0x13, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, + 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x04, 0x76, 0x65, 0x72, 0x62, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x2e, 0x56, 0x65, 0x72, 0x62, 0x42, 0x0a, + 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x82, 0x01, 0x02, 0x20, 0x00, 0x52, 0x04, 0x76, 0x65, 0x72, 0x62, + 0x12, 0x39, 0x0a, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x2e, 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, + 0x74, 0x61, 0x48, 0x00, 0x52, 0x05, 0x65, 0x78, 0x61, 0x63, 0x74, 0x12, 0x48, 0x0a, 0x07, 0x70, + 0x61, 0x72, 0x74, 0x69, 0x61, 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2e, + 0x76, 0x32, 0x2e, 0x45, 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x57, + 0x69, 0x74, 0x68, 0x6f, 0x75, 0x74, 0x52, 0x61, 0x74, 0x65, 0x48, 0x00, 0x52, 0x07, 0x70, 0x61, + 0x72, 0x74, 0x69, 0x61, 0x6c, 0x12, 0x32, 0x0a, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, + 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x48, + 0x01, 0x52, 0x06, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x73, 0x69, 0x67, + 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x69, + 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x48, 0x01, 0x52, 0x09, 0x73, 0x69, 0x67, 0x6e, 0x61, + 0x74, 0x75, 0x72, 0x65, 0x22, 0xa4, 0x01, 0x0a, 0x04, 0x56, 0x65, 0x72, 0x62, 0x12, 0x0b, 0x0a, + 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x47, 0x41, + 0x56, 0x45, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, + 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x57, 0x49, 0x54, 0x48, 0x44, 0x52, 0x45, 0x57, 0x10, 0x03, + 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x50, 0x4f, 0x53, 0x49, 0x54, 0x45, 0x44, 0x10, 0x04, 0x12, + 0x08, 0x0a, 0x04, 0x53, 0x45, 0x4e, 0x54, 0x10, 0x05, 0x12, 0x0c, 0x0a, 0x08, 0x52, 0x45, 0x54, + 0x55, 0x52, 0x4e, 0x45, 0x44, 0x10, 0x06, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, 0x45, 0x4e, 0x54, + 0x10, 0x07, 0x12, 0x08, 0x0a, 0x04, 0x50, 0x41, 0x49, 0x44, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, + 0x50, 0x55, 0x52, 0x43, 0x48, 0x41, 0x53, 0x45, 0x44, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x52, + 0x45, 0x43, 0x45, 0x49, 0x56, 0x45, 0x44, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0a, 0x12, 0x0c, 0x0a, + 0x08, 0x53, 0x45, 0x4e, 0x54, 0x5f, 0x54, 0x49, 0x50, 0x10, 0x0b, 0x42, 0x16, 0x0a, 0x0d, 0x65, + 0x78, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x12, 0x05, 0xb8, 0xe9, + 0xc0, 0x03, 0x01, 0x42, 0x12, 0x0a, 0x09, 0x72, 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x12, 0x05, 0xb8, 0xe9, 0xc0, 0x03, 0x01, 0x22, 0xcc, 0x01, 0x0a, 0x17, 0x4e, 0x61, 0x63, 0x6c, + 0x42, 0x6f, 0x78, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x12, 0x53, 0x0a, 0x0f, 0x70, 0x65, 0x65, 0x72, 0x5f, 0x70, 0x75, 0x62, 0x6c, + 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, + 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x6f, + 0x6c, 0x61, 0x6e, 0x61, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, + 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x0d, 0x70, 0x65, 0x65, 0x72, 0x50, + 0x75, 0x62, 0x6c, 0x69, 0x63, 0x4b, 0x65, 0x79, 0x12, 0x21, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, + 0x10, 0x18, 0x18, 0x18, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x39, 0x0a, 0x11, 0x65, + 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x5f, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0c, 0xba, 0xe9, 0xc0, 0x03, 0x07, 0x7a, 0x05, 0x10, + 0x01, 0x18, 0x80, 0x08, 0x52, 0x10, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, + 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x22, 0x62, 0x0a, 0x0f, 0x54, 0x68, 0x61, 0x6e, 0x6b, 0x59, + 0x6f, 0x75, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x0a, 0x74, 0x69, 0x70, + 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x6f, 0x6d, 0x6d, 0x6f, 0x6e, 0x2e, 0x76, 0x31, 0x2e, 0x49, + 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, + 0x02, 0x10, 0x01, 0x52, 0x09, 0x74, 0x69, 0x70, 0x49, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x4a, 0x04, + 0x08, 0x02, 0x10, 0x03, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0xa8, 0x01, 0x0a, 0x17, 0x49, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x65, 0x64, 0x43, + 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x43, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, + 0x01, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x48, 0x0a, 0x08, 0x69, + 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x43, 0x68, 0x61, + 0x74, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x42, + 0x0a, 0xba, 0xe9, 0xc0, 0x03, 0x05, 0x8a, 0x01, 0x02, 0x10, 0x01, 0x52, 0x08, 0x69, 0x64, 0x65, + 0x6e, 0x74, 0x69, 0x74, 0x79, 0x22, 0x2b, 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, + 0x21, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x42, 0x0b, + 0xba, 0xe9, 0xc0, 0x03, 0x06, 0x7a, 0x04, 0x10, 0x08, 0x18, 0x20, 0x52, 0x05, 0x76, 0x61, 0x6c, + 0x75, 0x65, 0x2a, 0x40, 0x0a, 0x08, 0x43, 0x68, 0x61, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x15, + 0x0a, 0x11, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x43, 0x48, 0x41, 0x54, 0x5f, 0x54, + 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x10, 0x0a, 0x0c, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x49, 0x43, + 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x4f, 0x5f, 0x57, + 0x41, 0x59, 0x10, 0x02, 0x2a, 0x2d, 0x0a, 0x08, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x12, 0x14, 0x0a, 0x10, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4c, 0x41, 0x54, + 0x46, 0x4f, 0x52, 0x4d, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x54, 0x57, 0x49, 0x54, 0x54, 0x45, + 0x52, 0x10, 0x01, 0x2a, 0x4a, 0x0a, 0x0b, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x50, 0x4f, + 0x49, 0x4e, 0x54, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, + 0x53, 0x45, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, + 0x52, 0x45, 0x44, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x52, 0x45, 0x41, 0x44, 0x10, 0x03, 0x32, + 0xae, 0x06, 0x0a, 0x04, 0x43, 0x68, 0x61, 0x74, 0x12, 0x49, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x43, + 0x68, 0x61, 0x74, 0x73, 0x12, 0x1d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x43, 0x68, 0x61, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x73, 0x12, 0x20, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x47, 0x65, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x10, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, - 0x12, 0x4c, 0x0a, 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x12, 0x1e, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, - 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, - 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, - 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x2e, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x65, 0x0a, 0x10, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x43, 0x68, 0x61, 0x74, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x28, 0x01, 0x30, 0x01, 0x12, 0x4c, + 0x0a, 0x09, 0x53, 0x74, 0x61, 0x72, 0x74, 0x43, 0x68, 0x61, 0x74, 0x12, 0x1e, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x72, 0x74, + 0x43, 0x68, 0x61, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x52, 0x0a, 0x0b, + 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x20, 0x2e, 0x63, 0x6f, + 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x6e, - 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x21, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, - 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x5b, 0x0a, 0x0e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, - 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x5b, 0x0a, 0x0e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, - 0x79, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, - 0x2e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, - 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0c, - 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x63, - 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, - 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x22, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, - 0x65, 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x6d, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x29, 0x2e, 0x63, 0x6f, - 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, - 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, - 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x42, 0x6b, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, - 0x63, 0x2e, 0x67, 0x65, 0x6e, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x5a, 0x44, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, - 0x61, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, - 0x74, 0x65, 0x64, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2f, 0x76, 0x32, 0x3b, 0x63, - 0x68, 0x61, 0x74, 0xa2, 0x02, 0x09, 0x43, 0x50, 0x42, 0x43, 0x68, 0x61, 0x74, 0x56, 0x32, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x5b, 0x0a, 0x0e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, + 0x65, 0x72, 0x12, 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, + 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x41, 0x64, 0x76, 0x61, 0x6e, 0x63, 0x65, 0x50, 0x6f, + 0x69, 0x6e, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5b, 0x0a, + 0x0e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x12, + 0x23, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x52, + 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x76, 0x65, 0x61, 0x6c, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, + 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x55, 0x0a, 0x0c, 0x53, 0x65, + 0x74, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x21, 0x2e, 0x63, 0x6f, 0x64, + 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x4d, 0x75, 0x74, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x22, 0x2e, + 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, + 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x6d, 0x0a, 0x14, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x29, 0x2e, 0x63, 0x6f, 0x64, 0x65, + 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, + 0x63, 0x72, 0x69, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x42, 0x6b, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x2e, 0x63, 0x6f, 0x64, 0x65, 0x69, 0x6e, 0x63, 0x2e, + 0x67, 0x65, 0x6e, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x32, 0x5a, 0x44, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x61, 0x79, + 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x64, 0x65, 0x2d, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x75, 0x66, 0x2d, 0x61, 0x70, 0x69, 0x2f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, + 0x64, 0x2f, 0x67, 0x6f, 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2f, 0x76, 0x32, 0x3b, 0x63, 0x68, 0x61, + 0x74, 0xa2, 0x02, 0x09, 0x43, 0x50, 0x42, 0x43, 0x68, 0x61, 0x74, 0x56, 0x32, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -4242,70 +4268,71 @@ var file_chat_v2_chat_service_proto_depIdxs = []int32{ 54, // 48: code.chat.v2.RevealIdentityRequest.owner:type_name -> code.common.v1.SolanaAccountId 55, // 49: code.chat.v2.RevealIdentityRequest.signature:type_name -> code.common.v1.Signature 11, // 50: code.chat.v2.RevealIdentityResponse.result:type_name -> code.chat.v2.RevealIdentityResponse.Result - 38, // 51: code.chat.v2.SetMuteStateRequest.chat_id:type_name -> code.chat.v2.ChatId - 40, // 52: code.chat.v2.SetMuteStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 54, // 53: code.chat.v2.SetMuteStateRequest.owner:type_name -> code.common.v1.SolanaAccountId - 55, // 54: code.chat.v2.SetMuteStateRequest.signature:type_name -> code.common.v1.Signature - 12, // 55: code.chat.v2.SetMuteStateResponse.result:type_name -> code.chat.v2.SetMuteStateResponse.Result - 38, // 56: code.chat.v2.SetSubscriptionStateRequest.chat_id:type_name -> code.chat.v2.ChatId - 40, // 57: code.chat.v2.SetSubscriptionStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId - 54, // 58: code.chat.v2.SetSubscriptionStateRequest.owner:type_name -> code.common.v1.SolanaAccountId - 55, // 59: code.chat.v2.SetSubscriptionStateRequest.signature:type_name -> code.common.v1.Signature - 13, // 60: code.chat.v2.SetSubscriptionStateResponse.result:type_name -> code.chat.v2.SetSubscriptionStateResponse.Result - 38, // 61: code.chat.v2.ChatMetadata.chat_id:type_name -> code.chat.v2.ChatId - 0, // 62: code.chat.v2.ChatMetadata.kind:type_name -> code.chat.v2.ChatType - 43, // 63: code.chat.v2.ChatMetadata.members:type_name -> code.chat.v2.ChatMember - 53, // 64: code.chat.v2.ChatMetadata.cursor:type_name -> code.chat.v2.Cursor - 39, // 65: code.chat.v2.ChatMessage.message_id:type_name -> code.chat.v2.ChatMessageId - 40, // 66: code.chat.v2.ChatMessage.sender_id:type_name -> code.chat.v2.ChatMemberId - 46, // 67: code.chat.v2.ChatMessage.content:type_name -> code.chat.v2.Content - 59, // 68: code.chat.v2.ChatMessage.ts:type_name -> google.protobuf.Timestamp - 53, // 69: code.chat.v2.ChatMessage.cursor:type_name -> code.chat.v2.Cursor - 40, // 70: code.chat.v2.ChatMember.member_id:type_name -> code.chat.v2.ChatMemberId - 44, // 71: code.chat.v2.ChatMember.identity:type_name -> code.chat.v2.ChatMemberIdentity - 45, // 72: code.chat.v2.ChatMember.pointers:type_name -> code.chat.v2.Pointer - 1, // 73: code.chat.v2.ChatMemberIdentity.platform:type_name -> code.chat.v2.Platform - 2, // 74: code.chat.v2.Pointer.kind:type_name -> code.chat.v2.PointerType - 39, // 75: code.chat.v2.Pointer.value:type_name -> code.chat.v2.ChatMessageId - 40, // 76: code.chat.v2.Pointer.member_id:type_name -> code.chat.v2.ChatMemberId - 47, // 77: code.chat.v2.Content.text:type_name -> code.chat.v2.TextContent - 48, // 78: code.chat.v2.Content.localized:type_name -> code.chat.v2.LocalizedContent - 49, // 79: code.chat.v2.Content.exchange_data:type_name -> code.chat.v2.ExchangeDataContent - 50, // 80: code.chat.v2.Content.nacl_box:type_name -> code.chat.v2.NaclBoxEncryptedContent - 51, // 81: code.chat.v2.Content.thank_you:type_name -> code.chat.v2.ThankYouContent - 52, // 82: code.chat.v2.Content.identity_revealed:type_name -> code.chat.v2.IdentityRevealedContent - 14, // 83: code.chat.v2.ExchangeDataContent.verb:type_name -> code.chat.v2.ExchangeDataContent.Verb - 60, // 84: code.chat.v2.ExchangeDataContent.exact:type_name -> code.transaction.v2.ExchangeData - 61, // 85: code.chat.v2.ExchangeDataContent.partial:type_name -> code.transaction.v2.ExchangeDataWithoutRate - 58, // 86: code.chat.v2.ExchangeDataContent.intent:type_name -> code.common.v1.IntentId - 55, // 87: code.chat.v2.ExchangeDataContent.signature:type_name -> code.common.v1.Signature - 54, // 88: code.chat.v2.NaclBoxEncryptedContent.peer_public_key:type_name -> code.common.v1.SolanaAccountId - 58, // 89: code.chat.v2.ThankYouContent.tip_intent:type_name -> code.common.v1.IntentId - 40, // 90: code.chat.v2.IdentityRevealedContent.member_id:type_name -> code.chat.v2.ChatMemberId - 44, // 91: code.chat.v2.IdentityRevealedContent.identity:type_name -> code.chat.v2.ChatMemberIdentity - 15, // 92: code.chat.v2.Chat.GetChats:input_type -> code.chat.v2.GetChatsRequest - 17, // 93: code.chat.v2.Chat.GetMessages:input_type -> code.chat.v2.GetMessagesRequest - 23, // 94: code.chat.v2.Chat.StreamChatEvents:input_type -> code.chat.v2.StreamChatEventsRequest - 25, // 95: code.chat.v2.Chat.StartChat:input_type -> code.chat.v2.StartChatRequest - 28, // 96: code.chat.v2.Chat.SendMessage:input_type -> code.chat.v2.SendMessageRequest - 30, // 97: code.chat.v2.Chat.AdvancePointer:input_type -> code.chat.v2.AdvancePointerRequest - 32, // 98: code.chat.v2.Chat.RevealIdentity:input_type -> code.chat.v2.RevealIdentityRequest - 34, // 99: code.chat.v2.Chat.SetMuteState:input_type -> code.chat.v2.SetMuteStateRequest - 36, // 100: code.chat.v2.Chat.SetSubscriptionState:input_type -> code.chat.v2.SetSubscriptionStateRequest - 16, // 101: code.chat.v2.Chat.GetChats:output_type -> code.chat.v2.GetChatsResponse - 18, // 102: code.chat.v2.Chat.GetMessages:output_type -> code.chat.v2.GetMessagesResponse - 24, // 103: code.chat.v2.Chat.StreamChatEvents:output_type -> code.chat.v2.StreamChatEventsResponse - 27, // 104: code.chat.v2.Chat.StartChat:output_type -> code.chat.v2.StartChatResponse - 29, // 105: code.chat.v2.Chat.SendMessage:output_type -> code.chat.v2.SendMessageResponse - 31, // 106: code.chat.v2.Chat.AdvancePointer:output_type -> code.chat.v2.AdvancePointerResponse - 33, // 107: code.chat.v2.Chat.RevealIdentity:output_type -> code.chat.v2.RevealIdentityResponse - 35, // 108: code.chat.v2.Chat.SetMuteState:output_type -> code.chat.v2.SetMuteStateResponse - 37, // 109: code.chat.v2.Chat.SetSubscriptionState:output_type -> code.chat.v2.SetSubscriptionStateResponse - 101, // [101:110] is the sub-list for method output_type - 92, // [92:101] is the sub-list for method input_type - 92, // [92:92] is the sub-list for extension type_name - 92, // [92:92] is the sub-list for extension extendee - 0, // [0:92] is the sub-list for field type_name + 42, // 51: code.chat.v2.RevealIdentityResponse.message:type_name -> code.chat.v2.ChatMessage + 38, // 52: code.chat.v2.SetMuteStateRequest.chat_id:type_name -> code.chat.v2.ChatId + 40, // 53: code.chat.v2.SetMuteStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 54, // 54: code.chat.v2.SetMuteStateRequest.owner:type_name -> code.common.v1.SolanaAccountId + 55, // 55: code.chat.v2.SetMuteStateRequest.signature:type_name -> code.common.v1.Signature + 12, // 56: code.chat.v2.SetMuteStateResponse.result:type_name -> code.chat.v2.SetMuteStateResponse.Result + 38, // 57: code.chat.v2.SetSubscriptionStateRequest.chat_id:type_name -> code.chat.v2.ChatId + 40, // 58: code.chat.v2.SetSubscriptionStateRequest.member_id:type_name -> code.chat.v2.ChatMemberId + 54, // 59: code.chat.v2.SetSubscriptionStateRequest.owner:type_name -> code.common.v1.SolanaAccountId + 55, // 60: code.chat.v2.SetSubscriptionStateRequest.signature:type_name -> code.common.v1.Signature + 13, // 61: code.chat.v2.SetSubscriptionStateResponse.result:type_name -> code.chat.v2.SetSubscriptionStateResponse.Result + 38, // 62: code.chat.v2.ChatMetadata.chat_id:type_name -> code.chat.v2.ChatId + 0, // 63: code.chat.v2.ChatMetadata.type:type_name -> code.chat.v2.ChatType + 43, // 64: code.chat.v2.ChatMetadata.members:type_name -> code.chat.v2.ChatMember + 53, // 65: code.chat.v2.ChatMetadata.cursor:type_name -> code.chat.v2.Cursor + 39, // 66: code.chat.v2.ChatMessage.message_id:type_name -> code.chat.v2.ChatMessageId + 40, // 67: code.chat.v2.ChatMessage.sender_id:type_name -> code.chat.v2.ChatMemberId + 46, // 68: code.chat.v2.ChatMessage.content:type_name -> code.chat.v2.Content + 59, // 69: code.chat.v2.ChatMessage.ts:type_name -> google.protobuf.Timestamp + 53, // 70: code.chat.v2.ChatMessage.cursor:type_name -> code.chat.v2.Cursor + 40, // 71: code.chat.v2.ChatMember.member_id:type_name -> code.chat.v2.ChatMemberId + 44, // 72: code.chat.v2.ChatMember.identity:type_name -> code.chat.v2.ChatMemberIdentity + 45, // 73: code.chat.v2.ChatMember.pointers:type_name -> code.chat.v2.Pointer + 1, // 74: code.chat.v2.ChatMemberIdentity.platform:type_name -> code.chat.v2.Platform + 2, // 75: code.chat.v2.Pointer.type:type_name -> code.chat.v2.PointerType + 39, // 76: code.chat.v2.Pointer.value:type_name -> code.chat.v2.ChatMessageId + 40, // 77: code.chat.v2.Pointer.member_id:type_name -> code.chat.v2.ChatMemberId + 47, // 78: code.chat.v2.Content.text:type_name -> code.chat.v2.TextContent + 48, // 79: code.chat.v2.Content.localized:type_name -> code.chat.v2.LocalizedContent + 49, // 80: code.chat.v2.Content.exchange_data:type_name -> code.chat.v2.ExchangeDataContent + 50, // 81: code.chat.v2.Content.nacl_box:type_name -> code.chat.v2.NaclBoxEncryptedContent + 51, // 82: code.chat.v2.Content.thank_you:type_name -> code.chat.v2.ThankYouContent + 52, // 83: code.chat.v2.Content.identity_revealed:type_name -> code.chat.v2.IdentityRevealedContent + 14, // 84: code.chat.v2.ExchangeDataContent.verb:type_name -> code.chat.v2.ExchangeDataContent.Verb + 60, // 85: code.chat.v2.ExchangeDataContent.exact:type_name -> code.transaction.v2.ExchangeData + 61, // 86: code.chat.v2.ExchangeDataContent.partial:type_name -> code.transaction.v2.ExchangeDataWithoutRate + 58, // 87: code.chat.v2.ExchangeDataContent.intent:type_name -> code.common.v1.IntentId + 55, // 88: code.chat.v2.ExchangeDataContent.signature:type_name -> code.common.v1.Signature + 54, // 89: code.chat.v2.NaclBoxEncryptedContent.peer_public_key:type_name -> code.common.v1.SolanaAccountId + 58, // 90: code.chat.v2.ThankYouContent.tip_intent:type_name -> code.common.v1.IntentId + 40, // 91: code.chat.v2.IdentityRevealedContent.member_id:type_name -> code.chat.v2.ChatMemberId + 44, // 92: code.chat.v2.IdentityRevealedContent.identity:type_name -> code.chat.v2.ChatMemberIdentity + 15, // 93: code.chat.v2.Chat.GetChats:input_type -> code.chat.v2.GetChatsRequest + 17, // 94: code.chat.v2.Chat.GetMessages:input_type -> code.chat.v2.GetMessagesRequest + 23, // 95: code.chat.v2.Chat.StreamChatEvents:input_type -> code.chat.v2.StreamChatEventsRequest + 25, // 96: code.chat.v2.Chat.StartChat:input_type -> code.chat.v2.StartChatRequest + 28, // 97: code.chat.v2.Chat.SendMessage:input_type -> code.chat.v2.SendMessageRequest + 30, // 98: code.chat.v2.Chat.AdvancePointer:input_type -> code.chat.v2.AdvancePointerRequest + 32, // 99: code.chat.v2.Chat.RevealIdentity:input_type -> code.chat.v2.RevealIdentityRequest + 34, // 100: code.chat.v2.Chat.SetMuteState:input_type -> code.chat.v2.SetMuteStateRequest + 36, // 101: code.chat.v2.Chat.SetSubscriptionState:input_type -> code.chat.v2.SetSubscriptionStateRequest + 16, // 102: code.chat.v2.Chat.GetChats:output_type -> code.chat.v2.GetChatsResponse + 18, // 103: code.chat.v2.Chat.GetMessages:output_type -> code.chat.v2.GetMessagesResponse + 24, // 104: code.chat.v2.Chat.StreamChatEvents:output_type -> code.chat.v2.StreamChatEventsResponse + 27, // 105: code.chat.v2.Chat.StartChat:output_type -> code.chat.v2.StartChatResponse + 29, // 106: code.chat.v2.Chat.SendMessage:output_type -> code.chat.v2.SendMessageResponse + 31, // 107: code.chat.v2.Chat.AdvancePointer:output_type -> code.chat.v2.AdvancePointerResponse + 33, // 108: code.chat.v2.Chat.RevealIdentity:output_type -> code.chat.v2.RevealIdentityResponse + 35, // 109: code.chat.v2.Chat.SetMuteState:output_type -> code.chat.v2.SetMuteStateResponse + 37, // 110: code.chat.v2.Chat.SetSubscriptionState:output_type -> code.chat.v2.SetSubscriptionStateResponse + 102, // [102:111] is the sub-list for method output_type + 93, // [93:102] is the sub-list for method input_type + 93, // [93:93] is the sub-list for extension type_name + 93, // [93:93] is the sub-list for extension extendee + 0, // [0:93] is the sub-list for field type_name } func init() { file_chat_v2_chat_service_proto_init() } diff --git a/generated/go/chat/v2/chat_service.pb.validate.go b/generated/go/chat/v2/chat_service.pb.validate.go index 5ae1c49..d8c5b2c 100644 --- a/generated/go/chat/v2/chat_service.pb.validate.go +++ b/generated/go/chat/v2/chat_service.pb.validate.go @@ -1977,6 +1977,16 @@ func (m *RevealIdentityResponse) Validate() error { // no validation rules for Result + if v, ok := interface{}(m.GetMessage()).(interface{ Validate() error }); ok { + if err := v.Validate(); err != nil { + return RevealIdentityResponseValidationError{ + field: "Message", + reason: "embedded message failed validation", + cause: err, + } + } + } + return nil } @@ -2690,9 +2700,9 @@ func (m *ChatMetadata) Validate() error { } } - if _, ok := _ChatMetadata_Kind_NotInLookup[m.GetKind()]; ok { + if _, ok := _ChatMetadata_Type_NotInLookup[m.GetType()]; ok { return ChatMetadataValidationError{ - field: "Kind", + field: "Type", reason: "value must not be in list [0]", } } @@ -2797,7 +2807,7 @@ var _ interface { ErrorName() string } = ChatMetadataValidationError{} -var _ChatMetadata_Kind_NotInLookup = map[ChatType]struct{}{ +var _ChatMetadata_Type_NotInLookup = map[ChatType]struct{}{ 0: {}, } @@ -3145,9 +3155,9 @@ func (m *Pointer) Validate() error { return nil } - if _, ok := _Pointer_Kind_NotInLookup[m.GetKind()]; ok { + if _, ok := _Pointer_Type_NotInLookup[m.GetType()]; ok { return PointerValidationError{ - field: "Kind", + field: "Type", reason: "value must not be in list [0]", } } @@ -3243,7 +3253,7 @@ var _ interface { ErrorName() string } = PointerValidationError{} -var _Pointer_Kind_NotInLookup = map[PointerType]struct{}{ +var _Pointer_Type_NotInLookup = map[PointerType]struct{}{ 0: {}, } diff --git a/generated/go/chat/v2/chat_service_grpc.pb.go b/generated/go/chat/v2/chat_service_grpc.pb.go index 2db32b5..c8f189c 100644 --- a/generated/go/chat/v2/chat_service_grpc.pb.go +++ b/generated/go/chat/v2/chat_service_grpc.pb.go @@ -22,26 +22,55 @@ const _ = grpc.SupportPackageIsVersion7 // // 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 ChatClient interface { - // GetChats gets the set of chats for an owner account using a paged API + // GetChats gets the set of chats for an owner account using a paged API. + // This RPC is aware of all identities tied to the owner account. GetChats(ctx context.Context, in *GetChatsRequest, opts ...grpc.CallOption) (*GetChatsResponse, error) - // GetMessages gets the set of messages for a chat using a paged API + // GetMessages gets the set of messages for a chat member using a paged API GetMessages(ctx context.Context, in *GetMessagesRequest, opts ...grpc.CallOption) (*GetMessagesResponse, error) - // StreamChatEvents streams chat events in real-time. This RPC also supports - // flushes to push initial chat state after stream open. + // StreamChatEvents streams chat events in real-time. Chat events include + // messages, pointer updates, etc. + // + // The streaming protocol is follows: + // 1. Client initiates a stream by sending an OpenChatEventStream message. + // 2. If an error is encoutered, a ChatStreamEventError message will be + // returned by server and the stream will be closed. + // 3. Server will immediately flush initial chat state. + // 4. New chat events will be pushed to the stream in real time as they + // are received. + // + // This RPC supports a keepalive protocol as follows: + // 1. Client initiates a stream by sending an OpenChatEventStream message. + // 2. Upon stream initialization, server begins the keepalive protocol. + // 3. Server sends a ping to the client. + // 4. Client responds with a pong as fast as possible, making note of + // the delay for when to expect the next ping. + // 5. Steps 3 and 4 are repeated until the stream is explicitly terminated + // or is deemed to be unhealthy. + // + // Client notes: + // - Client should be careful to process events async, so any responses to pings are + // not delayed. + // - Clients should implement a reasonable backoff strategy upon continued timeout + // failures. + // - Clients that abuse pong messages may have their streams terminated by server. + // + // At any point in the stream, server will respond with events in real time as + // they are observed. Events sent over the stream should not affect the ping/pong + // protocol timings. StreamChatEvents(ctx context.Context, opts ...grpc.CallOption) (Chat_StreamChatEventsClient, error) // StartChat starts a chat. The RPC call is idempotent and will use existing // chats whenever applicable within the context of message routing. StartChat(ctx context.Context, in *StartChatRequest, opts ...grpc.CallOption) (*StartChatResponse, error) // SendMessage sends a message to a chat SendMessage(ctx context.Context, in *SendMessageRequest, opts ...grpc.CallOption) (*SendMessageResponse, error) - // AdvancePointer advances a pointer in chat history + // AdvancePointer advances a pointer in message history for a chat member AdvancePointer(ctx context.Context, in *AdvancePointerRequest, opts ...grpc.CallOption) (*AdvancePointerResponse, error) // RevealIdentity reveals a chat member's identity if it is anonymous. A chat // message will be inserted on success. RevealIdentity(ctx context.Context, in *RevealIdentityRequest, opts ...grpc.CallOption) (*RevealIdentityResponse, error) - // SetMuteState configures the mute state of a chat + // SetMuteState configures a chat member's mute state SetMuteState(ctx context.Context, in *SetMuteStateRequest, opts ...grpc.CallOption) (*SetMuteStateResponse, error) - // SetSubscriptionState configures the susbscription state of a chat + // SetSubscriptionState configures a chat member's susbscription state SetSubscriptionState(ctx context.Context, in *SetSubscriptionStateRequest, opts ...grpc.CallOption) (*SetSubscriptionStateResponse, error) } @@ -160,26 +189,55 @@ func (c *chatClient) SetSubscriptionState(ctx context.Context, in *SetSubscripti // All implementations must embed UnimplementedChatServer // for forward compatibility type ChatServer interface { - // GetChats gets the set of chats for an owner account using a paged API + // GetChats gets the set of chats for an owner account using a paged API. + // This RPC is aware of all identities tied to the owner account. GetChats(context.Context, *GetChatsRequest) (*GetChatsResponse, error) - // GetMessages gets the set of messages for a chat using a paged API + // GetMessages gets the set of messages for a chat member using a paged API GetMessages(context.Context, *GetMessagesRequest) (*GetMessagesResponse, error) - // StreamChatEvents streams chat events in real-time. This RPC also supports - // flushes to push initial chat state after stream open. + // StreamChatEvents streams chat events in real-time. Chat events include + // messages, pointer updates, etc. + // + // The streaming protocol is follows: + // 1. Client initiates a stream by sending an OpenChatEventStream message. + // 2. If an error is encoutered, a ChatStreamEventError message will be + // returned by server and the stream will be closed. + // 3. Server will immediately flush initial chat state. + // 4. New chat events will be pushed to the stream in real time as they + // are received. + // + // This RPC supports a keepalive protocol as follows: + // 1. Client initiates a stream by sending an OpenChatEventStream message. + // 2. Upon stream initialization, server begins the keepalive protocol. + // 3. Server sends a ping to the client. + // 4. Client responds with a pong as fast as possible, making note of + // the delay for when to expect the next ping. + // 5. Steps 3 and 4 are repeated until the stream is explicitly terminated + // or is deemed to be unhealthy. + // + // Client notes: + // - Client should be careful to process events async, so any responses to pings are + // not delayed. + // - Clients should implement a reasonable backoff strategy upon continued timeout + // failures. + // - Clients that abuse pong messages may have their streams terminated by server. + // + // At any point in the stream, server will respond with events in real time as + // they are observed. Events sent over the stream should not affect the ping/pong + // protocol timings. StreamChatEvents(Chat_StreamChatEventsServer) error // StartChat starts a chat. The RPC call is idempotent and will use existing // chats whenever applicable within the context of message routing. StartChat(context.Context, *StartChatRequest) (*StartChatResponse, error) // SendMessage sends a message to a chat SendMessage(context.Context, *SendMessageRequest) (*SendMessageResponse, error) - // AdvancePointer advances a pointer in chat history + // AdvancePointer advances a pointer in message history for a chat member AdvancePointer(context.Context, *AdvancePointerRequest) (*AdvancePointerResponse, error) // RevealIdentity reveals a chat member's identity if it is anonymous. A chat // message will be inserted on success. RevealIdentity(context.Context, *RevealIdentityRequest) (*RevealIdentityResponse, error) - // SetMuteState configures the mute state of a chat + // SetMuteState configures a chat member's mute state SetMuteState(context.Context, *SetMuteStateRequest) (*SetMuteStateResponse, error) - // SetSubscriptionState configures the susbscription state of a chat + // SetSubscriptionState configures a chat member's susbscription state SetSubscriptionState(context.Context, *SetSubscriptionStateRequest) (*SetSubscriptionStateResponse, error) mustEmbedUnimplementedChatServer() } diff --git a/proto/chat/v2/chat_service.proto b/proto/chat/v2/chat_service.proto index 8b0514b..6368951 100644 --- a/proto/chat/v2/chat_service.proto +++ b/proto/chat/v2/chat_service.proto @@ -12,14 +12,43 @@ import "google/protobuf/timestamp.proto"; import "validate/validate.proto"; service Chat { - // GetChats gets the set of chats for an owner account using a paged API + // GetChats gets the set of chats for an owner account using a paged API. + // This RPC is aware of all identities tied to the owner account. rpc GetChats(GetChatsRequest) returns (GetChatsResponse); - // GetMessages gets the set of messages for a chat using a paged API + // GetMessages gets the set of messages for a chat member using a paged API rpc GetMessages(GetMessagesRequest) returns (GetMessagesResponse); - // StreamChatEvents streams chat events in real-time. This RPC also supports - // flushes to push initial chat state after stream open. + // StreamChatEvents streams chat events in real-time. Chat events include + // messages, pointer updates, etc. + // + // The streaming protocol is follows: + // 1. Client initiates a stream by sending an OpenChatEventStream message. + // 2. If an error is encoutered, a ChatStreamEventError message will be + // returned by server and the stream will be closed. + // 3. Server will immediately flush initial chat state. + // 4. New chat events will be pushed to the stream in real time as they + // are received. + // + // This RPC supports a keepalive protocol as follows: + // 1. Client initiates a stream by sending an OpenChatEventStream message. + // 2. Upon stream initialization, server begins the keepalive protocol. + // 3. Server sends a ping to the client. + // 4. Client responds with a pong as fast as possible, making note of + // the delay for when to expect the next ping. + // 5. Steps 3 and 4 are repeated until the stream is explicitly terminated + // or is deemed to be unhealthy. + // + // Client notes: + // * Client should be careful to process events async, so any responses to pings are + // not delayed. + // * Clients should implement a reasonable backoff strategy upon continued timeout + // failures. + // * Clients that abuse pong messages may have their streams terminated by server. + // + // At any point in the stream, server will respond with events in real time as + // they are observed. Events sent over the stream should not affect the ping/pong + // protocol timings. rpc StreamChatEvents(stream StreamChatEventsRequest) returns (stream StreamChatEventsResponse); // StartChat starts a chat. The RPC call is idempotent and will use existing @@ -29,17 +58,17 @@ service Chat { // SendMessage sends a message to a chat rpc SendMessage(SendMessageRequest) returns (SendMessageResponse); - // AdvancePointer advances a pointer in chat history + // AdvancePointer advances a pointer in message history for a chat member rpc AdvancePointer(AdvancePointerRequest) returns (AdvancePointerResponse); // RevealIdentity reveals a chat member's identity if it is anonymous. A chat // message will be inserted on success. rpc RevealIdentity(RevealIdentityRequest) returns (RevealIdentityResponse); - // SetMuteState configures the mute state of a chat + // SetMuteState configures a chat member's mute state rpc SetMuteState(SetMuteStateRequest) returns (SetMuteStateResponse); - // SetSubscriptionState configures the susbscription state of a chat + // SetSubscriptionState configures a chat member's susbscription state rpc SetSubscriptionState(SetSubscriptionStateRequest) returns (SetSubscriptionStateResponse); } @@ -174,8 +203,12 @@ message StartChatRequest { } // Starts a two-way chat between a tipper and tippee. Chat members are -// inferred from the 12 word public keys +// inferred from the 12 word public keys involved in the intent. Only +// the tippee can start the chat, and the tipper is anonymous if this +// is the first between the involved Code users. message StartTipChatParameters { + // The tip's intent ID, which can be extracted from the reference in + // an ExchangeDataContent message content where the verb is RECEIVED_TIP. common.v1.IntentId intent_id = 1 [(validate.rules).message.required = true]; } @@ -196,6 +229,9 @@ message SendMessageRequest { ChatMemberId member_id = 2 [(validate.rules).message.required = true]; + // Allowed content types that can be sent by client: + // - TextContent + // - ThankYouContent repeated Content content = 3 [(validate.rules).repeated = { min_items: 1 max_items: 1 @@ -262,6 +298,9 @@ message RevealIdentityResponse { CHAT_NOT_FOUND = 2; DIFFERENT_IDENTITY_REVEALED = 3; } + + // The chat message that was sent if the RPC was successful + ChatMessage message = 2; } message SetMuteStateRequest { @@ -309,6 +348,8 @@ message SetSubscriptionStateResponse { } message ChatId { + // Sufficient space is left for a consistent hash value, though other types + // of values may be used. bytes value = 1 [(validate.rules).bytes = { min_len: 32 max_len: 32 @@ -317,7 +358,8 @@ message ChatId { message ChatMessageId { // Guaranteed to be a time-based UUID. This should be used to construct a - // consistently ordered message history based on time. + // consistently ordered message history based on time using a simple byte + // comparison. bytes value = 1 [(validate.rules).bytes = { min_len: 16 max_len: 16 @@ -325,7 +367,7 @@ message ChatMessageId { } message ChatMemberId { - // Random UUID + // Globally random UUID bytes value = 1 [(validate.rules).bytes = { min_len: 16 max_len: 16 @@ -357,8 +399,8 @@ message ChatMetadata { ChatId chat_id = 1 [(validate.rules).message.required = true]; // The type of chat - ChatType kind = 2 [(validate.rules).enum = { - not_in: [0] // UNKNOWN + ChatType type = 2 [(validate.rules).enum = { + not_in: [0] // UNKNOWN_CHAT_TYPE }]; // The chat title, which will be localized by server when applicable @@ -431,7 +473,7 @@ message ChatMember { max_items: 2 }]; - // Estimated number of unread messages in this chat + // Estimated number of unread messages for the chat member in this chat // // Only valid when is_self = true uint32 num_unread = 5; @@ -458,15 +500,16 @@ message ChatMemberIdentity { min_len: 1 max_len: 15 // Twitter limit }]; - - // Reserved for a display name - reserved 3; } -// Pointer in a chat indicating a user's message state in a chat. +// Pointer in a chat indicating a user's message history state in a chat. message Pointer { - PointerType kind = 1 [(validate.rules).enum = { - not_in: [0] // UNKNOWN + // The type of pointer indicates which user's message history state can be + // inferred from the pointer value. It is also possible to infer cross-pointer + // state. For example, if a chat member has a READ pointer for a message with + // ID N, then the DELIVERED pointer must be at least N. + PointerType type = 1 [(validate.rules).enum = { + not_in: [0] // UNKNOWN_POINTER_TYPE }]; // Everything at or before this message ID is considered to have the state @@ -589,7 +632,7 @@ message IdentityRevealedContent { // Opaque cursor used across paged APIs. Underlying bytes may change as paging // strategies evolve. Expected length value will vary based on the RPC being -// executed.package +// executed. message Cursor { bytes value = 1 [(validate.rules).bytes = { min_len: 8 From d6c4fde5dfbebec2d0a40cf17bcf217c115c7491 Mon Sep 17 00:00:00 2001 From: Jeff Yanta Date: Thu, 20 Jun 2024 14:14:36 -0400 Subject: [PATCH 16/16] Fill out more comments within the chat models --- generated/go/chat/v2/chat_service.pb.go | 20 ++++++++++++++++---- proto/chat/v2/chat_service.proto | 14 +++++++++++++- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/generated/go/chat/v2/chat_service.pb.go b/generated/go/chat/v2/chat_service.pb.go index 024f4ba..7ae020b 100644 --- a/generated/go/chat/v2/chat_service.pb.go +++ b/generated/go/chat/v2/chat_service.pb.go @@ -2487,6 +2487,8 @@ func (x *ChatMemberId) GetValue() []byte { return nil } +// A chat +// // todo: Support is_verified in a clean way type ChatMetadata struct { state protoimpl.MessageState @@ -2598,6 +2600,7 @@ func (x *ChatMetadata) GetCursor() *Cursor { return nil } +// A message in a chat type ChatMessage struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2684,6 +2687,7 @@ func (x *ChatMessage) GetCursor() *Cursor { return nil } +// A user in a chat type ChatMember struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2795,6 +2799,7 @@ func (x *ChatMember) GetIsSubscribed() bool { return false } +// Identity to an external social platform that can be linked to a Code account type ChatMemberIdentity struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3158,7 +3163,7 @@ func (x *LocalizedContent) GetKeyOrText() string { return "" } -// Exchange data content for movement of a value of Kin. +// Exchange data content for movement of a value of Kin type ExchangeDataContent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3306,9 +3311,13 @@ type NaclBoxEncryptedContent struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - PeerPublicKey *v1.SolanaAccountId `protobuf:"bytes,1,opt,name=peer_public_key,json=peerPublicKey,proto3" json:"peer_public_key,omitempty"` - Nonce []byte `protobuf:"bytes,2,opt,name=nonce,proto3" json:"nonce,omitempty"` - EncryptedPayload []byte `protobuf:"bytes,3,opt,name=encrypted_payload,json=encryptedPayload,proto3" json:"encrypted_payload,omitempty"` + // The sender's public key that is used to derive the shared private key for + // decryption for message content. + PeerPublicKey *v1.SolanaAccountId `protobuf:"bytes,1,opt,name=peer_public_key,json=peerPublicKey,proto3" json:"peer_public_key,omitempty"` + // Globally random nonce that is unique to this encrypted piece of content + Nonce []byte `protobuf:"bytes,2,opt,name=nonce,proto3" json:"nonce,omitempty"` + // The encrypted piece of message content + EncryptedPayload []byte `protobuf:"bytes,3,opt,name=encrypted_payload,json=encryptedPayload,proto3" json:"encrypted_payload,omitempty"` } func (x *NaclBoxEncryptedContent) Reset() { @@ -3364,6 +3373,7 @@ func (x *NaclBoxEncryptedContent) GetEncryptedPayload() []byte { return nil } +// Thank you content that is used to thank Code users for tips type ThankYouContent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -3412,6 +3422,8 @@ func (x *ThankYouContent) GetTipIntent() *v1.IntentId { return nil } +// Identity revealed content that is inserted into chat whenever a chat member +// reveals their identity type IdentityRevealedContent struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache diff --git a/proto/chat/v2/chat_service.proto b/proto/chat/v2/chat_service.proto index 6368951..52f8f96 100644 --- a/proto/chat/v2/chat_service.proto +++ b/proto/chat/v2/chat_service.proto @@ -393,6 +393,8 @@ enum PointerType { READ = 3; } +// A chat +// // todo: Support is_verified in a clean way message ChatMetadata { // Globally unique ID for this chat @@ -432,6 +434,7 @@ message ChatMetadata { Cursor cursor = 7; } +// A message in a chat message ChatMessage { // Globally unique ID for this message ChatMessageId message_id = 1 [(validate.rules).message.required = true]; @@ -454,6 +457,7 @@ message ChatMessage { Cursor cursor = 5; } +// A user in a chat message ChatMember { // Globally unique ID for this chat member ChatMemberId member_id = 1 [(validate.rules).message.required = true]; @@ -489,6 +493,7 @@ message ChatMember { bool is_subscribed = 7; } +// Identity to an external social platform that can be linked to a Code account message ChatMemberIdentity { // The external social platform linked to this chat member Platform platform = 1 [(validate.rules).enum = { @@ -551,7 +556,7 @@ message LocalizedContent { }]; } -// Exchange data content for movement of a value of Kin. +// Exchange data content for movement of a value of Kin message ExchangeDataContent { enum Verb { UNKNOWN = 0; @@ -596,19 +601,24 @@ message ExchangeDataContent { // Encrypted piece of content using NaCl box encryption message NaclBoxEncryptedContent { + // The sender's public key that is used to derive the shared private key for + // decryption for message content. common.v1.SolanaAccountId peer_public_key = 1 [(validate.rules).message.required = true]; + // Globally random nonce that is unique to this encrypted piece of content bytes nonce = 2 [(validate.rules).bytes = { min_len: 24 max_len: 24 }]; + // The encrypted piece of message content bytes encrypted_payload = 3 [(validate.rules).bytes = { min_len: 1 max_len: 1024 }]; } +// Thank you content that is used to thank Code users for tips message ThankYouContent { // The tip intent that is being thanked. common.v1.IntentId tip_intent = 1 [(validate.rules).message.required = true]; @@ -622,6 +632,8 @@ message ThankYouContent { reserved 3; } +// Identity revealed content that is inserted into chat whenever a chat member +// reveals their identity message IdentityRevealedContent { // The chat member who revealed their identity ChatMemberId member_id = 1 [(validate.rules).message.required = true];