From 6786c10fdafedb736a51d86eb7ca5f6d790b6ec7 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Mon, 17 Jul 2023 00:51:17 +0300 Subject: [PATCH] Add methods for getting contacts and starting chats --- gmtest/main.go | 11 + libgm/binary/conversations.pb.go | 2232 ++++++++++++++++---------- libgm/binary/raw/conversations.proto | 50 +- libgm/binary/raw/responses.proto | 14 + libgm/binary/responses.pb.go | 530 ++++-- libgm/conversations.go | 67 + libgm/response_handler.go | 2 + libgm/routes/mapped.go | 3 + libgm/routes/session.go | 27 + 9 files changed, 1949 insertions(+), 987 deletions(-) diff --git a/gmtest/main.go b/gmtest/main.go index 65a7fa1..9114b83 100644 --- a/gmtest/main.go +++ b/gmtest/main.go @@ -98,6 +98,17 @@ func main() { args := strings.Fields(cmd) cmd = args[0] args = args[1:] + switch cmd { + //case "getavatar": + // _, err := cli.GetFullSizeImage(args) + // fmt.Println(err) + case "listcontacts": + cli.ListContacts() + case "topcontacts": + cli.ListTopContacts() + case "getorcreate": + cli.GetOrCreateConversation(args) + } //go handleCmd(strings.ToLower(cmd), args) } } diff --git a/libgm/binary/conversations.pb.go b/libgm/binary/conversations.pb.go index 3c4c5b2..4e4294f 100644 --- a/libgm/binary/conversations.pb.go +++ b/libgm/binary/conversations.pb.go @@ -20,6 +20,55 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +type IdentifierType int32 + +const ( + IdentifierType_UNKNOWN IdentifierType = 0 + IdentifierType_PHONE IdentifierType = 1 + IdentifierType_EMAIL IdentifierType = 2 +) + +// Enum value maps for IdentifierType. +var ( + IdentifierType_name = map[int32]string{ + 0: "UNKNOWN", + 1: "PHONE", + 2: "EMAIL", + } + IdentifierType_value = map[string]int32{ + "UNKNOWN": 0, + "PHONE": 1, + "EMAIL": 2, + } +) + +func (x IdentifierType) Enum() *IdentifierType { + p := new(IdentifierType) + *p = x + return p +} + +func (x IdentifierType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (IdentifierType) Descriptor() protoreflect.EnumDescriptor { + return file_conversations_proto_enumTypes[0].Descriptor() +} + +func (IdentifierType) Type() protoreflect.EnumType { + return &file_conversations_proto_enumTypes[0] +} + +func (x IdentifierType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use IdentifierType.Descriptor instead. +func (IdentifierType) EnumDescriptor() ([]byte, []int) { + return file_conversations_proto_rawDescGZIP(), []int{0} +} + type ConversationType int32 const ( @@ -53,11 +102,11 @@ func (x ConversationType) String() string { } func (ConversationType) Descriptor() protoreflect.EnumDescriptor { - return file_conversations_proto_enumTypes[0].Descriptor() + return file_conversations_proto_enumTypes[1].Descriptor() } func (ConversationType) Type() protoreflect.EnumType { - return &file_conversations_proto_enumTypes[0] + return &file_conversations_proto_enumTypes[1] } func (x ConversationType) Number() protoreflect.EnumNumber { @@ -66,7 +115,7 @@ func (x ConversationType) Number() protoreflect.EnumNumber { // Deprecated: Use ConversationType.Descriptor instead. func (ConversationType) EnumDescriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{0} + return file_conversations_proto_rawDescGZIP(), []int{1} } type MessageStatusType int32 @@ -330,11 +379,11 @@ func (x MessageStatusType) String() string { } func (MessageStatusType) Descriptor() protoreflect.EnumDescriptor { - return file_conversations_proto_enumTypes[1].Descriptor() + return file_conversations_proto_enumTypes[2].Descriptor() } func (MessageStatusType) Type() protoreflect.EnumType { - return &file_conversations_proto_enumTypes[1] + return &file_conversations_proto_enumTypes[2] } func (x MessageStatusType) Number() protoreflect.EnumNumber { @@ -343,7 +392,7 @@ func (x MessageStatusType) Number() protoreflect.EnumNumber { // Deprecated: Use MessageStatusType.Descriptor instead. func (MessageStatusType) EnumDescriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{1} + return file_conversations_proto_rawDescGZIP(), []int{2} } type ConversationStatus int32 @@ -382,11 +431,11 @@ func (x ConversationStatus) String() string { } func (ConversationStatus) Descriptor() protoreflect.EnumDescriptor { - return file_conversations_proto_enumTypes[2].Descriptor() + return file_conversations_proto_enumTypes[3].Descriptor() } func (ConversationStatus) Type() protoreflect.EnumType { - return &file_conversations_proto_enumTypes[2] + return &file_conversations_proto_enumTypes[3] } func (x ConversationStatus) Number() protoreflect.EnumNumber { @@ -395,7 +444,7 @@ func (x ConversationStatus) Number() protoreflect.EnumNumber { // Deprecated: Use ConversationStatus.Descriptor instead. func (ConversationStatus) EnumDescriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{2} + return file_conversations_proto_rawDescGZIP(), []int{3} } type ConversationActionStatus int32 @@ -434,11 +483,11 @@ func (x ConversationActionStatus) String() string { } func (ConversationActionStatus) Descriptor() protoreflect.EnumDescriptor { - return file_conversations_proto_enumTypes[3].Descriptor() + return file_conversations_proto_enumTypes[4].Descriptor() } func (ConversationActionStatus) Type() protoreflect.EnumType { - return &file_conversations_proto_enumTypes[3] + return &file_conversations_proto_enumTypes[4] } func (x ConversationActionStatus) Number() protoreflect.EnumNumber { @@ -447,7 +496,7 @@ func (x ConversationActionStatus) Number() protoreflect.EnumNumber { // Deprecated: Use ConversationActionStatus.Descriptor instead. func (ConversationActionStatus) EnumDescriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{3} + return file_conversations_proto_rawDescGZIP(), []int{4} } type ConversationMuteStatus int32 @@ -480,11 +529,11 @@ func (x ConversationMuteStatus) String() string { } func (ConversationMuteStatus) Descriptor() protoreflect.EnumDescriptor { - return file_conversations_proto_enumTypes[4].Descriptor() + return file_conversations_proto_enumTypes[5].Descriptor() } func (ConversationMuteStatus) Type() protoreflect.EnumType { - return &file_conversations_proto_enumTypes[4] + return &file_conversations_proto_enumTypes[5] } func (x ConversationMuteStatus) Number() protoreflect.EnumNumber { @@ -493,7 +542,7 @@ func (x ConversationMuteStatus) Number() protoreflect.EnumNumber { // Deprecated: Use ConversationMuteStatus.Descriptor instead. func (ConversationMuteStatus) EnumDescriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{4} + return file_conversations_proto_rawDescGZIP(), []int{5} } type ConvUpdateTypes int32 @@ -538,11 +587,11 @@ func (x ConvUpdateTypes) String() string { } func (ConvUpdateTypes) Descriptor() protoreflect.EnumDescriptor { - return file_conversations_proto_enumTypes[5].Descriptor() + return file_conversations_proto_enumTypes[6].Descriptor() } func (ConvUpdateTypes) Type() protoreflect.EnumType { - return &file_conversations_proto_enumTypes[5] + return &file_conversations_proto_enumTypes[6] } func (x ConvUpdateTypes) Number() protoreflect.EnumNumber { @@ -551,7 +600,7 @@ func (x ConvUpdateTypes) Number() protoreflect.EnumNumber { // Deprecated: Use ConvUpdateTypes.Descriptor instead. func (ConvUpdateTypes) EnumDescriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{5} + return file_conversations_proto_rawDescGZIP(), []int{6} } type MediaFormats int32 @@ -710,11 +759,11 @@ func (x MediaFormats) String() string { } func (MediaFormats) Descriptor() protoreflect.EnumDescriptor { - return file_conversations_proto_enumTypes[6].Descriptor() + return file_conversations_proto_enumTypes[7].Descriptor() } func (MediaFormats) Type() protoreflect.EnumType { - return &file_conversations_proto_enumTypes[6] + return &file_conversations_proto_enumTypes[7] } func (x MediaFormats) Number() protoreflect.EnumNumber { @@ -723,7 +772,7 @@ func (x MediaFormats) Number() protoreflect.EnumNumber { // Deprecated: Use MediaFormats.Descriptor instead. func (MediaFormats) EnumDescriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{6} + return file_conversations_proto_rawDescGZIP(), []int{7} } type ListConversationsPayload_Folder int32 @@ -762,11 +811,11 @@ func (x ListConversationsPayload_Folder) String() string { } func (ListConversationsPayload_Folder) Descriptor() protoreflect.EnumDescriptor { - return file_conversations_proto_enumTypes[7].Descriptor() + return file_conversations_proto_enumTypes[8].Descriptor() } func (ListConversationsPayload_Folder) Type() protoreflect.EnumType { - return &file_conversations_proto_enumTypes[7] + return &file_conversations_proto_enumTypes[8] } func (x ListConversationsPayload_Folder) Number() protoreflect.EnumNumber { @@ -775,7 +824,7 @@ func (x ListConversationsPayload_Folder) Number() protoreflect.EnumNumber { // Deprecated: Use ListConversationsPayload_Folder.Descriptor instead. func (ListConversationsPayload_Folder) EnumDescriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{16, 0} + return file_conversations_proto_rawDescGZIP(), []int{22, 0} } type GetParticipantThumbnailPayload struct { @@ -825,6 +874,369 @@ func (x *GetParticipantThumbnailPayload) GetConversationID() string { return "" } +type ListContactsPayload struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + I1 int32 `protobuf:"varint,5,opt,name=i1,proto3" json:"i1,omitempty"` // = 1 + I2 int32 `protobuf:"varint,6,opt,name=i2,proto3" json:"i2,omitempty"` // = 350 + I3 int32 `protobuf:"varint,7,opt,name=i3,proto3" json:"i3,omitempty"` // = 50 +} + +func (x *ListContactsPayload) Reset() { + *x = ListContactsPayload{} + if protoimpl.UnsafeEnabled { + mi := &file_conversations_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListContactsPayload) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListContactsPayload) ProtoMessage() {} + +func (x *ListContactsPayload) ProtoReflect() protoreflect.Message { + mi := &file_conversations_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 ListContactsPayload.ProtoReflect.Descriptor instead. +func (*ListContactsPayload) Descriptor() ([]byte, []int) { + return file_conversations_proto_rawDescGZIP(), []int{1} +} + +func (x *ListContactsPayload) GetI1() int32 { + if x != nil { + return x.I1 + } + return 0 +} + +func (x *ListContactsPayload) GetI2() int32 { + if x != nil { + return x.I2 + } + return 0 +} + +func (x *ListContactsPayload) GetI3() int32 { + if x != nil { + return x.I3 + } + return 0 +} + +type ListTopContactsPayload struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Count int32 `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"` +} + +func (x *ListTopContactsPayload) Reset() { + *x = ListTopContactsPayload{} + if protoimpl.UnsafeEnabled { + mi := &file_conversations_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListTopContactsPayload) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListTopContactsPayload) ProtoMessage() {} + +func (x *ListTopContactsPayload) ProtoReflect() protoreflect.Message { + mi := &file_conversations_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 ListTopContactsPayload.ProtoReflect.Descriptor instead. +func (*ListTopContactsPayload) Descriptor() ([]byte, []int) { + return file_conversations_proto_rawDescGZIP(), []int{2} +} + +func (x *ListTopContactsPayload) GetCount() int32 { + if x != nil { + return x.Count + } + return 0 +} + +type GetContactsThumbnailPayload struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + AvatarIDs []string `protobuf:"bytes,1,rep,name=avatarIDs,proto3" json:"avatarIDs,omitempty"` +} + +func (x *GetContactsThumbnailPayload) Reset() { + *x = GetContactsThumbnailPayload{} + if protoimpl.UnsafeEnabled { + mi := &file_conversations_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetContactsThumbnailPayload) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetContactsThumbnailPayload) ProtoMessage() {} + +func (x *GetContactsThumbnailPayload) ProtoReflect() protoreflect.Message { + mi := &file_conversations_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 GetContactsThumbnailPayload.ProtoReflect.Descriptor instead. +func (*GetContactsThumbnailPayload) Descriptor() ([]byte, []int) { + return file_conversations_proto_rawDescGZIP(), []int{3} +} + +func (x *GetContactsThumbnailPayload) GetAvatarIDs() []string { + if x != nil { + return x.AvatarIDs + } + return nil +} + +type Contact struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ID string `protobuf:"bytes,1,opt,name=ID,proto3" json:"ID,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + Number *ContactNumber `protobuf:"bytes,3,opt,name=number,proto3" json:"number,omitempty"` + AvatarHexColor string `protobuf:"bytes,7,opt,name=avatarHexColor,proto3" json:"avatarHexColor,omitempty"` + UnknownBool bool `protobuf:"varint,10,opt,name=unknownBool,proto3" json:"unknownBool,omitempty"` + AvatarID string `protobuf:"bytes,11,opt,name=avatarID,proto3" json:"avatarID,omitempty"` +} + +func (x *Contact) Reset() { + *x = Contact{} + if protoimpl.UnsafeEnabled { + mi := &file_conversations_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *Contact) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Contact) ProtoMessage() {} + +func (x *Contact) ProtoReflect() protoreflect.Message { + mi := &file_conversations_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 Contact.ProtoReflect.Descriptor instead. +func (*Contact) Descriptor() ([]byte, []int) { + return file_conversations_proto_rawDescGZIP(), []int{4} +} + +func (x *Contact) GetID() string { + if x != nil { + return x.ID + } + return "" +} + +func (x *Contact) GetName() string { + if x != nil { + return x.Name + } + return "" +} + +func (x *Contact) GetNumber() *ContactNumber { + if x != nil { + return x.Number + } + return nil +} + +func (x *Contact) GetAvatarHexColor() string { + if x != nil { + return x.AvatarHexColor + } + return "" +} + +func (x *Contact) GetUnknownBool() bool { + if x != nil { + return x.UnknownBool + } + return false +} + +func (x *Contact) GetAvatarID() string { + if x != nil { + return x.AvatarID + } + return "" +} + +type ContactNumber struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Might be 2 for contact and 7 for user input? + MysteriousInt int32 `protobuf:"varint,1,opt,name=mysteriousInt,proto3" json:"mysteriousInt,omitempty"` + Number string `protobuf:"bytes,2,opt,name=number,proto3" json:"number,omitempty"` + Number2 string `protobuf:"bytes,3,opt,name=number2,proto3" json:"number2,omitempty"` + FormattedNumber *string `protobuf:"bytes,4,opt,name=formattedNumber,proto3,oneof" json:"formattedNumber,omitempty"` +} + +func (x *ContactNumber) Reset() { + *x = ContactNumber{} + if protoimpl.UnsafeEnabled { + mi := &file_conversations_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ContactNumber) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ContactNumber) ProtoMessage() {} + +func (x *ContactNumber) ProtoReflect() protoreflect.Message { + mi := &file_conversations_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 ContactNumber.ProtoReflect.Descriptor instead. +func (*ContactNumber) Descriptor() ([]byte, []int) { + return file_conversations_proto_rawDescGZIP(), []int{5} +} + +func (x *ContactNumber) GetMysteriousInt() int32 { + if x != nil { + return x.MysteriousInt + } + return 0 +} + +func (x *ContactNumber) GetNumber() string { + if x != nil { + return x.Number + } + return "" +} + +func (x *ContactNumber) GetNumber2() string { + if x != nil { + return x.Number2 + } + return "" +} + +func (x *ContactNumber) GetFormattedNumber() string { + if x != nil && x.FormattedNumber != nil { + return *x.FormattedNumber + } + return "" +} + +type GetOrCreateConversationPayload struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Numbers []*ContactNumber `protobuf:"bytes,2,rep,name=numbers,proto3" json:"numbers,omitempty"` +} + +func (x *GetOrCreateConversationPayload) Reset() { + *x = GetOrCreateConversationPayload{} + if protoimpl.UnsafeEnabled { + mi := &file_conversations_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetOrCreateConversationPayload) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetOrCreateConversationPayload) ProtoMessage() {} + +func (x *GetOrCreateConversationPayload) ProtoReflect() protoreflect.Message { + mi := &file_conversations_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 GetOrCreateConversationPayload.ProtoReflect.Descriptor instead. +func (*GetOrCreateConversationPayload) Descriptor() ([]byte, []int) { + return file_conversations_proto_rawDescGZIP(), []int{6} +} + +func (x *GetOrCreateConversationPayload) GetNumbers() []*ContactNumber { + if x != nil { + return x.Numbers + } + return nil +} + type ResendMessagePayload struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -836,7 +1248,7 @@ type ResendMessagePayload struct { func (x *ResendMessagePayload) Reset() { *x = ResendMessagePayload{} if protoimpl.UnsafeEnabled { - mi := &file_conversations_proto_msgTypes[1] + mi := &file_conversations_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -849,7 +1261,7 @@ func (x *ResendMessagePayload) String() string { func (*ResendMessagePayload) ProtoMessage() {} func (x *ResendMessagePayload) ProtoReflect() protoreflect.Message { - mi := &file_conversations_proto_msgTypes[1] + mi := &file_conversations_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -862,7 +1274,7 @@ func (x *ResendMessagePayload) ProtoReflect() protoreflect.Message { // Deprecated: Use ResendMessagePayload.ProtoReflect.Descriptor instead. func (*ResendMessagePayload) Descriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{1} + return file_conversations_proto_rawDescGZIP(), []int{7} } func (x *ResendMessagePayload) GetMessageID() string { @@ -883,7 +1295,7 @@ type ConversationTypePayload struct { func (x *ConversationTypePayload) Reset() { *x = ConversationTypePayload{} if protoimpl.UnsafeEnabled { - mi := &file_conversations_proto_msgTypes[2] + mi := &file_conversations_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -896,7 +1308,7 @@ func (x *ConversationTypePayload) String() string { func (*ConversationTypePayload) ProtoMessage() {} func (x *ConversationTypePayload) ProtoReflect() protoreflect.Message { - mi := &file_conversations_proto_msgTypes[2] + mi := &file_conversations_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -909,7 +1321,7 @@ func (x *ConversationTypePayload) ProtoReflect() protoreflect.Message { // Deprecated: Use ConversationTypePayload.ProtoReflect.Descriptor instead. func (*ConversationTypePayload) Descriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{2} + return file_conversations_proto_rawDescGZIP(), []int{8} } func (x *ConversationTypePayload) GetConversationID() string { @@ -930,7 +1342,7 @@ type TypingUpdatePayload struct { func (x *TypingUpdatePayload) Reset() { *x = TypingUpdatePayload{} if protoimpl.UnsafeEnabled { - mi := &file_conversations_proto_msgTypes[3] + mi := &file_conversations_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -943,7 +1355,7 @@ func (x *TypingUpdatePayload) String() string { func (*TypingUpdatePayload) ProtoMessage() {} func (x *TypingUpdatePayload) ProtoReflect() protoreflect.Message { - mi := &file_conversations_proto_msgTypes[3] + mi := &file_conversations_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -956,7 +1368,7 @@ func (x *TypingUpdatePayload) ProtoReflect() protoreflect.Message { // Deprecated: Use TypingUpdatePayload.ProtoReflect.Descriptor instead. func (*TypingUpdatePayload) Descriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{3} + return file_conversations_proto_rawDescGZIP(), []int{9} } func (x *TypingUpdatePayload) GetData() *SetTypingIn { @@ -978,7 +1390,7 @@ type SetTypingIn struct { func (x *SetTypingIn) Reset() { *x = SetTypingIn{} if protoimpl.UnsafeEnabled { - mi := &file_conversations_proto_msgTypes[4] + mi := &file_conversations_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -991,7 +1403,7 @@ func (x *SetTypingIn) String() string { func (*SetTypingIn) ProtoMessage() {} func (x *SetTypingIn) ProtoReflect() protoreflect.Message { - mi := &file_conversations_proto_msgTypes[4] + mi := &file_conversations_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1004,7 +1416,7 @@ func (x *SetTypingIn) ProtoReflect() protoreflect.Message { // Deprecated: Use SetTypingIn.ProtoReflect.Descriptor instead. func (*SetTypingIn) Descriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{4} + return file_conversations_proto_rawDescGZIP(), []int{10} } func (x *SetTypingIn) GetConversationID() string { @@ -1035,7 +1447,7 @@ type UpdateConversationPayload struct { func (x *UpdateConversationPayload) Reset() { *x = UpdateConversationPayload{} if protoimpl.UnsafeEnabled { - mi := &file_conversations_proto_msgTypes[5] + mi := &file_conversations_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1048,7 +1460,7 @@ func (x *UpdateConversationPayload) String() string { func (*UpdateConversationPayload) ProtoMessage() {} func (x *UpdateConversationPayload) ProtoReflect() protoreflect.Message { - mi := &file_conversations_proto_msgTypes[5] + mi := &file_conversations_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1061,7 +1473,7 @@ func (x *UpdateConversationPayload) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateConversationPayload.ProtoReflect.Descriptor instead. func (*UpdateConversationPayload) Descriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{5} + return file_conversations_proto_rawDescGZIP(), []int{11} } func (x *UpdateConversationPayload) GetData() *UpdateConversationData { @@ -1103,7 +1515,7 @@ type ConversationAction5 struct { func (x *ConversationAction5) Reset() { *x = ConversationAction5{} if protoimpl.UnsafeEnabled { - mi := &file_conversations_proto_msgTypes[6] + mi := &file_conversations_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1116,7 +1528,7 @@ func (x *ConversationAction5) String() string { func (*ConversationAction5) ProtoMessage() {} func (x *ConversationAction5) ProtoReflect() protoreflect.Message { - mi := &file_conversations_proto_msgTypes[6] + mi := &file_conversations_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1129,7 +1541,7 @@ func (x *ConversationAction5) ProtoReflect() protoreflect.Message { // Deprecated: Use ConversationAction5.ProtoReflect.Descriptor instead. func (*ConversationAction5) Descriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{6} + return file_conversations_proto_rawDescGZIP(), []int{12} } func (x *ConversationAction5) GetField2() bool { @@ -1155,7 +1567,7 @@ type UpdateConversationData struct { func (x *UpdateConversationData) Reset() { *x = UpdateConversationData{} if protoimpl.UnsafeEnabled { - mi := &file_conversations_proto_msgTypes[7] + mi := &file_conversations_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1168,7 +1580,7 @@ func (x *UpdateConversationData) String() string { func (*UpdateConversationData) ProtoMessage() {} func (x *UpdateConversationData) ProtoReflect() protoreflect.Message { - mi := &file_conversations_proto_msgTypes[7] + mi := &file_conversations_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1181,7 +1593,7 @@ func (x *UpdateConversationData) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateConversationData.ProtoReflect.Descriptor instead. func (*UpdateConversationData) Descriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{7} + return file_conversations_proto_rawDescGZIP(), []int{13} } func (x *UpdateConversationData) GetConversationID() string { @@ -1239,7 +1651,7 @@ type DeleteMessagePayload struct { func (x *DeleteMessagePayload) Reset() { *x = DeleteMessagePayload{} if protoimpl.UnsafeEnabled { - mi := &file_conversations_proto_msgTypes[8] + mi := &file_conversations_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1252,7 +1664,7 @@ func (x *DeleteMessagePayload) String() string { func (*DeleteMessagePayload) ProtoMessage() {} func (x *DeleteMessagePayload) ProtoReflect() protoreflect.Message { - mi := &file_conversations_proto_msgTypes[8] + mi := &file_conversations_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1265,7 +1677,7 @@ func (x *DeleteMessagePayload) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteMessagePayload.ProtoReflect.Descriptor instead. func (*DeleteMessagePayload) Descriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{8} + return file_conversations_proto_rawDescGZIP(), []int{14} } func (x *DeleteMessagePayload) GetMessageID() string { @@ -1290,7 +1702,7 @@ type SendMessagePayload struct { func (x *SendMessagePayload) Reset() { *x = SendMessagePayload{} if protoimpl.UnsafeEnabled { - mi := &file_conversations_proto_msgTypes[9] + mi := &file_conversations_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1303,7 +1715,7 @@ func (x *SendMessagePayload) String() string { func (*SendMessagePayload) ProtoMessage() {} func (x *SendMessagePayload) ProtoReflect() protoreflect.Message { - mi := &file_conversations_proto_msgTypes[9] + mi := &file_conversations_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1316,7 +1728,7 @@ func (x *SendMessagePayload) ProtoReflect() protoreflect.Message { // Deprecated: Use SendMessagePayload.ProtoReflect.Descriptor instead. func (*SendMessagePayload) Descriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{9} + return file_conversations_proto_rawDescGZIP(), []int{15} } func (x *SendMessagePayload) GetConversationID() string { @@ -1365,7 +1777,7 @@ type ReplyPayload struct { func (x *ReplyPayload) Reset() { *x = ReplyPayload{} if protoimpl.UnsafeEnabled { - mi := &file_conversations_proto_msgTypes[10] + mi := &file_conversations_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1378,7 +1790,7 @@ func (x *ReplyPayload) String() string { func (*ReplyPayload) ProtoMessage() {} func (x *ReplyPayload) ProtoReflect() protoreflect.Message { - mi := &file_conversations_proto_msgTypes[10] + mi := &file_conversations_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1391,7 +1803,7 @@ func (x *ReplyPayload) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplyPayload.ProtoReflect.Descriptor instead. func (*ReplyPayload) Descriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{10} + return file_conversations_proto_rawDescGZIP(), []int{16} } func (x *ReplyPayload) GetMessageID() string { @@ -1417,7 +1829,7 @@ type MessagePayload struct { func (x *MessagePayload) Reset() { *x = MessagePayload{} if protoimpl.UnsafeEnabled { - mi := &file_conversations_proto_msgTypes[11] + mi := &file_conversations_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1430,7 +1842,7 @@ func (x *MessagePayload) String() string { func (*MessagePayload) ProtoMessage() {} func (x *MessagePayload) ProtoReflect() protoreflect.Message { - mi := &file_conversations_proto_msgTypes[11] + mi := &file_conversations_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1443,7 +1855,7 @@ func (x *MessagePayload) ProtoReflect() protoreflect.Message { // Deprecated: Use MessagePayload.ProtoReflect.Descriptor instead. func (*MessagePayload) Descriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{11} + return file_conversations_proto_rawDescGZIP(), []int{17} } func (x *MessagePayload) GetTmpID() string { @@ -1499,7 +1911,7 @@ type MessagePayloadContent struct { func (x *MessagePayloadContent) Reset() { *x = MessagePayloadContent{} if protoimpl.UnsafeEnabled { - mi := &file_conversations_proto_msgTypes[12] + mi := &file_conversations_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1512,7 +1924,7 @@ func (x *MessagePayloadContent) String() string { func (*MessagePayloadContent) ProtoMessage() {} func (x *MessagePayloadContent) ProtoReflect() protoreflect.Message { - mi := &file_conversations_proto_msgTypes[12] + mi := &file_conversations_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1525,7 +1937,7 @@ func (x *MessagePayloadContent) ProtoReflect() protoreflect.Message { // Deprecated: Use MessagePayloadContent.ProtoReflect.Descriptor instead. func (*MessagePayloadContent) Descriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{12} + return file_conversations_proto_rawDescGZIP(), []int{18} } func (x *MessagePayloadContent) GetMessageContent() *MessageContent { @@ -1546,7 +1958,7 @@ type OpenConversationPayload struct { func (x *OpenConversationPayload) Reset() { *x = OpenConversationPayload{} if protoimpl.UnsafeEnabled { - mi := &file_conversations_proto_msgTypes[13] + mi := &file_conversations_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1559,7 +1971,7 @@ func (x *OpenConversationPayload) String() string { func (*OpenConversationPayload) ProtoMessage() {} func (x *OpenConversationPayload) ProtoReflect() protoreflect.Message { - mi := &file_conversations_proto_msgTypes[13] + mi := &file_conversations_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1572,7 +1984,7 @@ func (x *OpenConversationPayload) ProtoReflect() protoreflect.Message { // Deprecated: Use OpenConversationPayload.ProtoReflect.Descriptor instead. func (*OpenConversationPayload) Descriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{13} + return file_conversations_proto_rawDescGZIP(), []int{19} } func (x *OpenConversationPayload) GetConversationID() string { @@ -1593,7 +2005,7 @@ type PrepareOpenConversationPayload struct { func (x *PrepareOpenConversationPayload) Reset() { *x = PrepareOpenConversationPayload{} if protoimpl.UnsafeEnabled { - mi := &file_conversations_proto_msgTypes[14] + mi := &file_conversations_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1606,7 +2018,7 @@ func (x *PrepareOpenConversationPayload) String() string { func (*PrepareOpenConversationPayload) ProtoMessage() {} func (x *PrepareOpenConversationPayload) ProtoReflect() protoreflect.Message { - mi := &file_conversations_proto_msgTypes[14] + mi := &file_conversations_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1619,7 +2031,7 @@ func (x *PrepareOpenConversationPayload) ProtoReflect() protoreflect.Message { // Deprecated: Use PrepareOpenConversationPayload.ProtoReflect.Descriptor instead. func (*PrepareOpenConversationPayload) Descriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{14} + return file_conversations_proto_rawDescGZIP(), []int{20} } func (x *PrepareOpenConversationPayload) GetField2() int64 { @@ -1642,7 +2054,7 @@ type FetchConversationMessagesPayload struct { func (x *FetchConversationMessagesPayload) Reset() { *x = FetchConversationMessagesPayload{} if protoimpl.UnsafeEnabled { - mi := &file_conversations_proto_msgTypes[15] + mi := &file_conversations_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1655,7 +2067,7 @@ func (x *FetchConversationMessagesPayload) String() string { func (*FetchConversationMessagesPayload) ProtoMessage() {} func (x *FetchConversationMessagesPayload) ProtoReflect() protoreflect.Message { - mi := &file_conversations_proto_msgTypes[15] + mi := &file_conversations_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1668,7 +2080,7 @@ func (x *FetchConversationMessagesPayload) ProtoReflect() protoreflect.Message { // Deprecated: Use FetchConversationMessagesPayload.ProtoReflect.Descriptor instead. func (*FetchConversationMessagesPayload) Descriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{15} + return file_conversations_proto_rawDescGZIP(), []int{21} } func (x *FetchConversationMessagesPayload) GetConversationID() string { @@ -1699,12 +2111,13 @@ type ListConversationsPayload struct { Count int64 `protobuf:"varint,2,opt,name=count,proto3" json:"count,omitempty"` Folder ListConversationsPayload_Folder `protobuf:"varint,4,opt,name=folder,proto3,enum=conversations.ListConversationsPayload_Folder" json:"folder,omitempty"` + Cursor *Cursor `protobuf:"bytes,5,opt,name=cursor,proto3,oneof" json:"cursor,omitempty"` } func (x *ListConversationsPayload) Reset() { *x = ListConversationsPayload{} if protoimpl.UnsafeEnabled { - mi := &file_conversations_proto_msgTypes[16] + mi := &file_conversations_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1717,7 +2130,7 @@ func (x *ListConversationsPayload) String() string { func (*ListConversationsPayload) ProtoMessage() {} func (x *ListConversationsPayload) ProtoReflect() protoreflect.Message { - mi := &file_conversations_proto_msgTypes[16] + mi := &file_conversations_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1730,7 +2143,7 @@ func (x *ListConversationsPayload) ProtoReflect() protoreflect.Message { // Deprecated: Use ListConversationsPayload.ProtoReflect.Descriptor instead. func (*ListConversationsPayload) Descriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{16} + return file_conversations_proto_rawDescGZIP(), []int{22} } func (x *ListConversationsPayload) GetCount() int64 { @@ -1747,19 +2160,26 @@ func (x *ListConversationsPayload) GetFolder() ListConversationsPayload_Folder { return ListConversationsPayload_UNKNOWN } +func (x *ListConversationsPayload) GetCursor() *Cursor { + if x != nil { + return x.Cursor + } + return nil +} + type Cursor struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - SomeStr string `protobuf:"bytes,1,opt,name=someStr,proto3" json:"someStr,omitempty"` - NextCursor int64 `protobuf:"varint,2,opt,name=nextCursor,proto3" json:"nextCursor,omitempty"` + LastItemID string `protobuf:"bytes,1,opt,name=lastItemID,proto3" json:"lastItemID,omitempty"` + LastItemTimestamp int64 `protobuf:"varint,2,opt,name=lastItemTimestamp,proto3" json:"lastItemTimestamp,omitempty"` } func (x *Cursor) Reset() { *x = Cursor{} if protoimpl.UnsafeEnabled { - mi := &file_conversations_proto_msgTypes[17] + mi := &file_conversations_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1772,7 +2192,7 @@ func (x *Cursor) String() string { func (*Cursor) ProtoMessage() {} func (x *Cursor) ProtoReflect() protoreflect.Message { - mi := &file_conversations_proto_msgTypes[17] + mi := &file_conversations_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1785,19 +2205,19 @@ func (x *Cursor) ProtoReflect() protoreflect.Message { // Deprecated: Use Cursor.ProtoReflect.Descriptor instead. func (*Cursor) Descriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{17} + return file_conversations_proto_rawDescGZIP(), []int{23} } -func (x *Cursor) GetSomeStr() string { +func (x *Cursor) GetLastItemID() string { if x != nil { - return x.SomeStr + return x.LastItemID } return "" } -func (x *Cursor) GetNextCursor() int64 { +func (x *Cursor) GetLastItemTimestamp() int64 { if x != nil { - return x.NextCursor + return x.LastItemTimestamp } return 0 } @@ -1825,7 +2245,7 @@ type Message struct { func (x *Message) Reset() { *x = Message{} if protoimpl.UnsafeEnabled { - mi := &file_conversations_proto_msgTypes[18] + mi := &file_conversations_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1838,7 +2258,7 @@ func (x *Message) String() string { func (*Message) ProtoMessage() {} func (x *Message) ProtoReflect() protoreflect.Message { - mi := &file_conversations_proto_msgTypes[18] + mi := &file_conversations_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1851,7 +2271,7 @@ func (x *Message) ProtoReflect() protoreflect.Message { // Deprecated: Use Message.ProtoReflect.Descriptor instead. func (*Message) Descriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{18} + return file_conversations_proto_rawDescGZIP(), []int{24} } func (x *Message) GetMessageID() string { @@ -1958,7 +2378,7 @@ type ReplyMessage struct { func (x *ReplyMessage) Reset() { *x = ReplyMessage{} if protoimpl.UnsafeEnabled { - mi := &file_conversations_proto_msgTypes[19] + mi := &file_conversations_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1971,7 +2391,7 @@ func (x *ReplyMessage) String() string { func (*ReplyMessage) ProtoMessage() {} func (x *ReplyMessage) ProtoReflect() protoreflect.Message { - mi := &file_conversations_proto_msgTypes[19] + mi := &file_conversations_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1984,7 +2404,7 @@ func (x *ReplyMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplyMessage.ProtoReflect.Descriptor instead. func (*ReplyMessage) Descriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{19} + return file_conversations_proto_rawDescGZIP(), []int{25} } func (x *ReplyMessage) GetMessageID() string { @@ -2017,7 +2437,7 @@ type ReplyMessageData struct { func (x *ReplyMessageData) Reset() { *x = ReplyMessageData{} if protoimpl.UnsafeEnabled { - mi := &file_conversations_proto_msgTypes[20] + mi := &file_conversations_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2030,7 +2450,7 @@ func (x *ReplyMessageData) String() string { func (*ReplyMessageData) ProtoMessage() {} func (x *ReplyMessageData) ProtoReflect() protoreflect.Message { - mi := &file_conversations_proto_msgTypes[20] + mi := &file_conversations_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2043,7 +2463,7 @@ func (x *ReplyMessageData) ProtoReflect() protoreflect.Message { // Deprecated: Use ReplyMessageData.ProtoReflect.Descriptor instead. func (*ReplyMessageData) Descriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{20} + return file_conversations_proto_rawDescGZIP(), []int{26} } type MessageInfo struct { @@ -2062,7 +2482,7 @@ type MessageInfo struct { func (x *MessageInfo) Reset() { *x = MessageInfo{} if protoimpl.UnsafeEnabled { - mi := &file_conversations_proto_msgTypes[21] + mi := &file_conversations_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2075,7 +2495,7 @@ func (x *MessageInfo) String() string { func (*MessageInfo) ProtoMessage() {} func (x *MessageInfo) ProtoReflect() protoreflect.Message { - mi := &file_conversations_proto_msgTypes[21] + mi := &file_conversations_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2088,7 +2508,7 @@ func (x *MessageInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use MessageInfo.ProtoReflect.Descriptor instead. func (*MessageInfo) Descriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{21} + return file_conversations_proto_rawDescGZIP(), []int{27} } func (x *MessageInfo) GetActionMessageID() string { @@ -2154,7 +2574,7 @@ type MediaContent struct { func (x *MediaContent) Reset() { *x = MediaContent{} if protoimpl.UnsafeEnabled { - mi := &file_conversations_proto_msgTypes[22] + mi := &file_conversations_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2167,7 +2587,7 @@ func (x *MediaContent) String() string { func (*MediaContent) ProtoMessage() {} func (x *MediaContent) ProtoReflect() protoreflect.Message { - mi := &file_conversations_proto_msgTypes[22] + mi := &file_conversations_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2180,7 +2600,7 @@ func (x *MediaContent) ProtoReflect() protoreflect.Message { // Deprecated: Use MediaContent.ProtoReflect.Descriptor instead. func (*MediaContent) Descriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{22} + return file_conversations_proto_rawDescGZIP(), []int{28} } func (x *MediaContent) GetFormat() MediaFormats { @@ -2258,7 +2678,7 @@ type Pixels struct { func (x *Pixels) Reset() { *x = Pixels{} if protoimpl.UnsafeEnabled { - mi := &file_conversations_proto_msgTypes[23] + mi := &file_conversations_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2271,7 +2691,7 @@ func (x *Pixels) String() string { func (*Pixels) ProtoMessage() {} func (x *Pixels) ProtoReflect() protoreflect.Message { - mi := &file_conversations_proto_msgTypes[23] + mi := &file_conversations_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2284,7 +2704,7 @@ func (x *Pixels) ProtoReflect() protoreflect.Message { // Deprecated: Use Pixels.ProtoReflect.Descriptor instead. func (*Pixels) Descriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{23} + return file_conversations_proto_rawDescGZIP(), []int{29} } func (x *Pixels) GetWidth() int64 { @@ -2312,7 +2732,7 @@ type MessageContent struct { func (x *MessageContent) Reset() { *x = MessageContent{} if protoimpl.UnsafeEnabled { - mi := &file_conversations_proto_msgTypes[24] + mi := &file_conversations_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2325,7 +2745,7 @@ func (x *MessageContent) String() string { func (*MessageContent) ProtoMessage() {} func (x *MessageContent) ProtoReflect() protoreflect.Message { - mi := &file_conversations_proto_msgTypes[24] + mi := &file_conversations_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2338,7 +2758,7 @@ func (x *MessageContent) ProtoReflect() protoreflect.Message { // Deprecated: Use MessageContent.ProtoReflect.Descriptor instead. func (*MessageContent) Descriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{24} + return file_conversations_proto_rawDescGZIP(), []int{30} } func (x *MessageContent) GetContent() string { @@ -2359,7 +2779,7 @@ type MsgType struct { func (x *MsgType) Reset() { *x = MsgType{} if protoimpl.UnsafeEnabled { - mi := &file_conversations_proto_msgTypes[25] + mi := &file_conversations_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2372,7 +2792,7 @@ func (x *MsgType) String() string { func (*MsgType) ProtoMessage() {} func (x *MsgType) ProtoReflect() protoreflect.Message { - mi := &file_conversations_proto_msgTypes[25] + mi := &file_conversations_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2385,7 +2805,7 @@ func (x *MsgType) ProtoReflect() protoreflect.Message { // Deprecated: Use MsgType.ProtoReflect.Descriptor instead. func (*MsgType) Descriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{25} + return file_conversations_proto_rawDescGZIP(), []int{31} } func (x *MsgType) GetType() int64 { @@ -2410,7 +2830,7 @@ type MessageStatus struct { func (x *MessageStatus) Reset() { *x = MessageStatus{} if protoimpl.UnsafeEnabled { - mi := &file_conversations_proto_msgTypes[26] + mi := &file_conversations_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2423,7 +2843,7 @@ func (x *MessageStatus) String() string { func (*MessageStatus) ProtoMessage() {} func (x *MessageStatus) ProtoReflect() protoreflect.Message { - mi := &file_conversations_proto_msgTypes[26] + mi := &file_conversations_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2436,7 +2856,7 @@ func (x *MessageStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use MessageStatus.ProtoReflect.Descriptor instead. func (*MessageStatus) Descriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{26} + return file_conversations_proto_rawDescGZIP(), []int{32} } func (x *MessageStatus) GetStatus() MessageStatusType { @@ -2480,12 +2900,14 @@ type Conversations struct { unknownFields protoimpl.UnknownFields Conversations []*Conversation `protobuf:"bytes,2,rep,name=conversations,proto3" json:"conversations,omitempty"` + CursorBytes []byte `protobuf:"bytes,3,opt,name=cursorBytes,proto3,oneof" json:"cursorBytes,omitempty"` + Cursor *Cursor `protobuf:"bytes,5,opt,name=cursor,proto3,oneof" json:"cursor,omitempty"` } func (x *Conversations) Reset() { *x = Conversations{} if protoimpl.UnsafeEnabled { - mi := &file_conversations_proto_msgTypes[27] + mi := &file_conversations_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2498,7 +2920,7 @@ func (x *Conversations) String() string { func (*Conversations) ProtoMessage() {} func (x *Conversations) ProtoReflect() protoreflect.Message { - mi := &file_conversations_proto_msgTypes[27] + mi := &file_conversations_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2511,7 +2933,7 @@ func (x *Conversations) ProtoReflect() protoreflect.Message { // Deprecated: Use Conversations.ProtoReflect.Descriptor instead. func (*Conversations) Descriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{27} + return file_conversations_proto_rawDescGZIP(), []int{33} } func (x *Conversations) GetConversations() []*Conversation { @@ -2521,6 +2943,20 @@ func (x *Conversations) GetConversations() []*Conversation { return nil } +func (x *Conversations) GetCursorBytes() []byte { + if x != nil { + return x.CursorBytes + } + return nil +} + +func (x *Conversations) GetCursor() *Cursor { + if x != nil { + return x.Cursor + } + return nil +} + type Conversation struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2548,7 +2984,7 @@ type Conversation struct { func (x *Conversation) Reset() { *x = Conversation{} if protoimpl.UnsafeEnabled { - mi := &file_conversations_proto_msgTypes[28] + mi := &file_conversations_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2561,7 +2997,7 @@ func (x *Conversation) String() string { func (*Conversation) ProtoMessage() {} func (x *Conversation) ProtoReflect() protoreflect.Message { - mi := &file_conversations_proto_msgTypes[28] + mi := &file_conversations_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2574,7 +3010,7 @@ func (x *Conversation) ProtoReflect() protoreflect.Message { // Deprecated: Use Conversation.ProtoReflect.Descriptor instead. func (*Conversation) Descriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{28} + return file_conversations_proto_rawDescGZIP(), []int{34} } func (x *Conversation) GetConversationID() string { @@ -2711,7 +3147,7 @@ type Participant struct { func (x *Participant) Reset() { *x = Participant{} if protoimpl.UnsafeEnabled { - mi := &file_conversations_proto_msgTypes[29] + mi := &file_conversations_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2724,7 +3160,7 @@ func (x *Participant) String() string { func (*Participant) ProtoMessage() {} func (x *Participant) ProtoReflect() protoreflect.Message { - mi := &file_conversations_proto_msgTypes[29] + mi := &file_conversations_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2737,7 +3173,7 @@ func (x *Participant) ProtoReflect() protoreflect.Message { // Deprecated: Use Participant.ProtoReflect.Descriptor instead. func (*Participant) Descriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{29} + return file_conversations_proto_rawDescGZIP(), []int{35} } func (x *Participant) GetID() *SmallInfo { @@ -2829,15 +3265,15 @@ type SmallInfo struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - Type int64 `protobuf:"varint,1,opt,name=type,proto3" json:"type,omitempty"` - Number string `protobuf:"bytes,2,opt,name=number,proto3" json:"number,omitempty"` - ParticipantID string `protobuf:"bytes,3,opt,name=participantID,proto3" json:"participantID,omitempty"` + Type IdentifierType `protobuf:"varint,1,opt,name=type,proto3,enum=conversations.IdentifierType" json:"type,omitempty"` + Number string `protobuf:"bytes,2,opt,name=number,proto3" json:"number,omitempty"` + ParticipantID string `protobuf:"bytes,3,opt,name=participantID,proto3" json:"participantID,omitempty"` } func (x *SmallInfo) Reset() { *x = SmallInfo{} if protoimpl.UnsafeEnabled { - mi := &file_conversations_proto_msgTypes[30] + mi := &file_conversations_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2850,7 +3286,7 @@ func (x *SmallInfo) String() string { func (*SmallInfo) ProtoMessage() {} func (x *SmallInfo) ProtoReflect() protoreflect.Message { - mi := &file_conversations_proto_msgTypes[30] + mi := &file_conversations_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2863,14 +3299,14 @@ func (x *SmallInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use SmallInfo.ProtoReflect.Descriptor instead. func (*SmallInfo) Descriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{30} + return file_conversations_proto_rawDescGZIP(), []int{36} } -func (x *SmallInfo) GetType() int64 { +func (x *SmallInfo) GetType() IdentifierType { if x != nil { return x.Type } - return 0 + return IdentifierType_UNKNOWN } func (x *SmallInfo) GetNumber() string { @@ -2901,7 +3337,7 @@ type LatestMessage struct { func (x *LatestMessage) Reset() { *x = LatestMessage{} if protoimpl.UnsafeEnabled { - mi := &file_conversations_proto_msgTypes[31] + mi := &file_conversations_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2914,7 +3350,7 @@ func (x *LatestMessage) String() string { func (*LatestMessage) ProtoMessage() {} func (x *LatestMessage) ProtoReflect() protoreflect.Message { - mi := &file_conversations_proto_msgTypes[31] + mi := &file_conversations_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2927,7 +3363,7 @@ func (x *LatestMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use LatestMessage.ProtoReflect.Descriptor instead. func (*LatestMessage) Descriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{31} + return file_conversations_proto_rawDescGZIP(), []int{37} } func (x *LatestMessage) GetDisplayContent() string { @@ -2970,7 +3406,7 @@ type LatestMessageStatus struct { func (x *LatestMessageStatus) Reset() { *x = LatestMessageStatus{} if protoimpl.UnsafeEnabled { - mi := &file_conversations_proto_msgTypes[32] + mi := &file_conversations_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2983,7 +3419,7 @@ func (x *LatestMessageStatus) String() string { func (*LatestMessageStatus) ProtoMessage() {} func (x *LatestMessageStatus) ProtoReflect() protoreflect.Message { - mi := &file_conversations_proto_msgTypes[32] + mi := &file_conversations_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2996,7 +3432,7 @@ func (x *LatestMessageStatus) ProtoReflect() protoreflect.Message { // Deprecated: Use LatestMessageStatus.ProtoReflect.Descriptor instead. func (*LatestMessageStatus) Descriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{32} + return file_conversations_proto_rawDescGZIP(), []int{38} } func (x *LatestMessageStatus) GetStatus2() int64 { @@ -3024,7 +3460,7 @@ type Muted struct { func (x *Muted) Reset() { *x = Muted{} if protoimpl.UnsafeEnabled { - mi := &file_conversations_proto_msgTypes[33] + mi := &file_conversations_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3037,7 +3473,7 @@ func (x *Muted) String() string { func (*Muted) ProtoMessage() {} func (x *Muted) ProtoReflect() protoreflect.Message { - mi := &file_conversations_proto_msgTypes[33] + mi := &file_conversations_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3050,7 +3486,7 @@ func (x *Muted) ProtoReflect() protoreflect.Message { // Deprecated: Use Muted.ProtoReflect.Descriptor instead. func (*Muted) Descriptor() ([]byte, []int) { - return file_conversations_proto_rawDescGZIP(), []int{33} + return file_conversations_proto_rawDescGZIP(), []int{39} } func (x *Muted) GetIsMuted() int64 { @@ -3071,310 +3507,365 @@ var file_conversations_proto_rawDesc = []byte{ 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, - 0x34, 0x0a, 0x14, 0x52, 0x65, 0x73, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x49, 0x44, 0x22, 0x41, 0x0a, 0x17, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, - 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, - 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, 0x45, 0x0a, 0x13, 0x54, 0x79, 0x70, 0x69, - 0x6e, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, - 0x2e, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, - 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, - 0x74, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, - 0x4d, 0x0a, 0x0b, 0x53, 0x65, 0x74, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x12, 0x26, - 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x79, 0x70, 0x69, 0x6e, 0x67, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x74, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x22, 0xfd, - 0x01, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x39, 0x0a, 0x04, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x6e, - 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, - 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3f, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, - 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, - 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, - 0x12, 0x3c, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x35, 0x18, 0x05, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x35, 0x52, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x35, 0x22, 0x2d, - 0x0a, 0x13, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x35, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x22, 0xc2, 0x01, - 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, - 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, - 0x12, 0x3b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x3b, 0x0a, - 0x04, 0x6d, 0x75, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x63, 0x6f, - 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x76, - 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x48, 0x00, 0x52, 0x04, 0x6d, 0x75, 0x74, 0x65, 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, - 0x74, 0x61, 0x22, 0x34, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x44, 0x22, 0xe6, 0x01, 0x0a, 0x12, 0x53, 0x65, 0x6e, - 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, + 0x45, 0x0a, 0x13, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x73, 0x50, + 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x31, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x02, 0x69, 0x31, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x32, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x02, 0x69, 0x32, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x33, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x05, 0x52, 0x02, 0x69, 0x33, 0x22, 0x2e, 0x0a, 0x16, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6f, + 0x70, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x73, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, + 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x3b, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, + 0x74, 0x61, 0x63, 0x74, 0x73, 0x54, 0x68, 0x75, 0x6d, 0x62, 0x6e, 0x61, 0x69, 0x6c, 0x50, 0x61, + 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x49, + 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x09, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, + 0x49, 0x44, 0x73, 0x22, 0xc9, 0x01, 0x0a, 0x07, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x12, + 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x44, 0x12, + 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x26, 0x0a, 0x0e, 0x61, 0x76, 0x61, + 0x74, 0x61, 0x72, 0x48, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x07, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0e, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x48, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, + 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x42, 0x6f, 0x6f, 0x6c, + 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x42, + 0x6f, 0x6f, 0x6c, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x49, 0x44, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x49, 0x44, 0x22, + 0xaa, 0x01, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x12, 0x24, 0x0a, 0x0d, 0x6d, 0x79, 0x73, 0x74, 0x65, 0x72, 0x69, 0x6f, 0x75, 0x73, 0x49, + 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0d, 0x6d, 0x79, 0x73, 0x74, 0x65, 0x72, + 0x69, 0x6f, 0x75, 0x73, 0x49, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, + 0x18, 0x0a, 0x07, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x32, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x32, 0x12, 0x2d, 0x0a, 0x0f, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x74, 0x65, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, + 0x28, 0x09, 0x48, 0x00, 0x52, 0x0f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x74, 0x65, 0x64, 0x4e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x88, 0x01, 0x01, 0x42, 0x12, 0x0a, 0x10, 0x5f, 0x66, 0x6f, 0x72, + 0x6d, 0x61, 0x74, 0x74, 0x65, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x22, 0x58, 0x0a, 0x1e, + 0x47, 0x65, 0x74, 0x4f, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x76, 0x65, + 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x36, + 0x0a, 0x07, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x1c, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x07, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0x34, 0x0a, 0x14, 0x52, 0x65, 0x73, 0x65, 0x6e, 0x64, + 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x1c, + 0x0a, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x44, 0x22, 0x41, 0x0a, 0x17, + 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, + 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, + 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, + 0x45, 0x0a, 0x13, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x50, + 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x2e, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x65, 0x74, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x49, 0x6e, + 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x4d, 0x0a, 0x0b, 0x53, 0x65, 0x74, 0x54, 0x79, 0x70, + 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, + 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x16, 0x0a, + 0x06, 0x74, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x74, + 0x79, 0x70, 0x69, 0x6e, 0x67, 0x22, 0xfd, 0x01, 0x0a, 0x19, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x12, 0x39, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x12, 0x3f, + 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, + 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, + 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x45, 0x0a, 0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1d, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x0e, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x14, - 0x0a, 0x05, 0x74, 0x6d, 0x70, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, - 0x6d, 0x70, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x31, - 0x0a, 0x05, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, - 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, - 0x70, 0x6c, 0x79, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x05, 0x72, 0x65, 0x70, 0x6c, - 0x79, 0x22, 0x2c, 0x0a, 0x0c, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, - 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x44, 0x18, 0x01, + 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x3c, 0x0a, 0x07, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x35, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, + 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x35, 0x52, 0x07, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x35, 0x22, 0x2d, 0x0a, 0x13, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x35, 0x12, 0x16, 0x0a, 0x06, + 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x66, 0x69, + 0x65, 0x6c, 0x64, 0x32, 0x22, 0xc2, 0x01, 0x0a, 0x16, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, + 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, + 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x3b, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x21, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, + 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x48, 0x00, 0x52, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x12, 0x3b, 0x0a, 0x04, 0x6d, 0x75, 0x74, 0x65, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0e, 0x32, 0x25, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, + 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x48, 0x00, 0x52, 0x04, 0x6d, 0x75, 0x74, + 0x65, 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x34, 0x0a, 0x14, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, + 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x44, 0x22, - 0xae, 0x02, 0x0a, 0x0e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6d, 0x70, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x05, 0x74, 0x6d, 0x70, 0x49, 0x44, 0x12, 0x5a, 0x0a, 0x15, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, - 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, - 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x15, 0x6d, + 0xe6, 0x01, 0x0a, 0x12, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, + 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, + 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, + 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x45, + 0x0a, 0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x61, + 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x61, + 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6d, 0x70, 0x49, 0x44, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6d, 0x70, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x69, + 0x73, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, + 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x31, 0x0a, 0x05, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, + 0x64, 0x52, 0x05, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x22, 0x2c, 0x0a, 0x0c, 0x52, 0x65, 0x70, 0x6c, + 0x79, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x49, 0x44, 0x22, 0xae, 0x02, 0x0a, 0x0e, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6d, 0x70, + 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6d, 0x70, 0x49, 0x44, 0x12, + 0x5a, 0x0a, 0x15, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, + 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, + 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, - 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x2c, 0x0a, 0x11, - 0x73, 0x65, 0x6c, 0x66, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x49, - 0x44, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x73, 0x65, 0x6c, 0x66, 0x50, 0x61, 0x72, - 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x3c, 0x0a, 0x0b, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x6d, 0x70, 0x49, - 0x44, 0x32, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x6d, 0x70, 0x49, 0x44, 0x32, - 0x22, 0x5e, 0x0a, 0x15, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, - 0x61, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x45, 0x0a, 0x0e, 0x6d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x52, 0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, - 0x22, 0x41, 0x0a, 0x17, 0x4f, 0x70, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x63, - 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, + 0x74, 0x65, 0x6e, 0x74, 0x52, 0x15, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x61, 0x79, + 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x63, + 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x49, 0x44, 0x22, 0x38, 0x0a, 0x1e, 0x50, 0x72, 0x65, 0x70, 0x61, 0x72, 0x65, 0x4f, 0x70, - 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, - 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x22, 0x8f, 0x01, - 0x0a, 0x20, 0x46, 0x65, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x50, 0x61, 0x79, 0x6c, 0x6f, + 0x6e, 0x49, 0x44, 0x12, 0x2c, 0x0a, 0x11, 0x73, 0x65, 0x6c, 0x66, 0x50, 0x61, 0x72, 0x74, 0x69, + 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x49, 0x44, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, + 0x73, 0x65, 0x6c, 0x66, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x49, + 0x44, 0x12, 0x3c, 0x0a, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, + 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, + 0x66, 0x6f, 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, + 0x16, 0x0a, 0x06, 0x74, 0x6d, 0x70, 0x49, 0x44, 0x32, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x74, 0x6d, 0x70, 0x49, 0x44, 0x32, 0x22, 0x5e, 0x0a, 0x15, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, + 0x12, 0x45, 0x0a, 0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, + 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x52, 0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x41, 0x0a, 0x17, 0x4f, 0x70, 0x65, 0x6e, 0x43, + 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, - 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, - 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, - 0x12, 0x2d, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, - 0xb9, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x14, 0x0a, 0x05, - 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, - 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x06, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x2e, 0x46, 0x6f, 0x6c, 0x64, - 0x65, 0x72, 0x52, 0x06, 0x66, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x22, 0x3f, 0x0a, 0x06, 0x46, 0x6f, - 0x6c, 0x64, 0x65, 0x72, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, - 0x00, 0x12, 0x09, 0x0a, 0x05, 0x49, 0x4e, 0x42, 0x4f, 0x58, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, - 0x41, 0x52, 0x43, 0x48, 0x49, 0x56, 0x45, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x50, 0x41, - 0x4d, 0x5f, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x45, 0x44, 0x10, 0x05, 0x22, 0x42, 0x0a, 0x06, 0x43, - 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x6f, 0x6d, 0x65, 0x53, 0x74, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x73, 0x6f, 0x6d, 0x65, 0x53, 0x74, 0x72, 0x12, - 0x1e, 0x0a, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x0a, 0x6e, 0x65, 0x78, 0x74, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, - 0xc8, 0x04, 0x0a, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x44, 0x12, 0x30, 0x0a, 0x07, 0x6d, 0x73, 0x67, - 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x6e, - 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4d, 0x73, 0x67, 0x54, 0x79, - 0x70, 0x65, 0x52, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x42, 0x0a, 0x0d, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x52, 0x0d, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, - 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x26, 0x0a, - 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x24, 0x0a, 0x0d, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, - 0x70, 0x61, 0x6e, 0x74, 0x49, 0x44, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x61, - 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x3c, 0x0a, 0x0b, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, - 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, - 0x05, 0x74, 0x6d, 0x70, 0x49, 0x44, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6d, - 0x70, 0x49, 0x44, 0x12, 0x1d, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x0e, - 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x88, - 0x01, 0x01, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x6f, 0x6d, 0x65, 0x49, 0x6e, 0x74, 0x18, 0x10, 0x20, - 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x6f, 0x6d, 0x65, 0x49, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x09, - 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x1b, 0x2e, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x09, 0x72, 0x65, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x44, 0x0a, 0x0c, 0x72, 0x65, 0x70, 0x6c, 0x79, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, - 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, - 0x70, 0x6c, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48, 0x01, 0x52, 0x0c, 0x72, 0x65, - 0x70, 0x6c, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0a, 0x0a, - 0x08, 0x5f, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x72, 0x65, - 0x70, 0x6c, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0xa1, 0x01, 0x0a, 0x0c, 0x52, - 0x65, 0x70, 0x6c, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x44, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, + 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, 0x38, 0x0a, 0x1e, 0x50, 0x72, + 0x65, 0x70, 0x61, 0x72, 0x65, 0x4f, 0x70, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x16, 0x0a, 0x06, + 0x66, 0x69, 0x65, 0x6c, 0x64, 0x32, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x66, 0x69, + 0x65, 0x6c, 0x64, 0x32, 0x22, 0x8f, 0x01, 0x0a, 0x20, 0x46, 0x65, 0x74, 0x63, 0x68, 0x43, 0x6f, + 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x73, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, - 0x44, 0x12, 0x4b, 0x0a, 0x10, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x44, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, - 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x70, 0x6c, - 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x10, 0x72, 0x65, - 0x70, 0x6c, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, 0x12, - 0x0a, 0x10, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x44, 0x61, - 0x74, 0x61, 0x22, 0xcb, 0x01, 0x0a, 0x0b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, - 0x66, 0x6f, 0x12, 0x28, 0x0a, 0x0f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x44, 0x12, 0x47, 0x0a, 0x0e, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x41, 0x0a, 0x0c, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x43, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, - 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4d, 0x65, 0x64, 0x69, - 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x6d, 0x65, 0x64, 0x69, - 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x22, 0xc6, 0x02, 0x0a, 0x0c, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, - 0x74, 0x12, 0x33, 0x0a, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x52, 0x06, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x49, - 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x49, 0x44, - 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, - 0x7a, 0x65, 0x12, 0x2d, 0x0a, 0x06, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x52, 0x06, 0x70, 0x69, 0x78, 0x65, 0x6c, - 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x44, 0x61, 0x74, 0x61, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x44, 0x61, 0x74, 0x61, 0x12, - 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x49, 0x44, 0x32, 0x18, 0x09, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x08, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x49, 0x44, 0x32, 0x12, 0x24, 0x0a, 0x0d, 0x64, - 0x65, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x18, 0x0b, 0x20, 0x01, - 0x28, 0x0c, 0x52, 0x0d, 0x64, 0x65, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, - 0x79, 0x12, 0x26, 0x0a, 0x0e, 0x64, 0x65, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, - 0x65, 0x79, 0x32, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x64, 0x65, 0x63, 0x72, 0x79, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x32, 0x22, 0x36, 0x0a, 0x06, 0x50, 0x69, 0x78, - 0x65, 0x6c, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x03, 0x52, 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x22, 0x2a, 0x0a, 0x0e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x1d, 0x0a, - 0x07, 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xb9, 0x01, 0x0a, - 0x0d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x38, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, + 0x44, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x2d, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, + 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, + 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, 0x06, + 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xf8, 0x01, 0x0a, 0x18, 0x4c, 0x69, 0x73, 0x74, 0x43, + 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x79, 0x6c, + 0x6f, 0x61, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x46, 0x0a, 0x06, 0x66, 0x6f, 0x6c, + 0x64, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x63, 0x6f, 0x6e, 0x76, + 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x43, 0x6f, + 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x50, 0x61, 0x79, 0x6c, 0x6f, + 0x61, 0x64, 0x2e, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x52, 0x06, 0x66, 0x6f, 0x6c, 0x64, 0x65, + 0x72, 0x12, 0x32, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, + 0x6f, 0x72, 0x88, 0x01, 0x01, 0x22, 0x3f, 0x0a, 0x06, 0x46, 0x6f, 0x6c, 0x64, 0x65, 0x72, 0x12, + 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, + 0x49, 0x4e, 0x42, 0x4f, 0x58, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x52, 0x43, 0x48, 0x49, + 0x56, 0x45, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x50, 0x41, 0x4d, 0x5f, 0x42, 0x4c, 0x4f, + 0x43, 0x4b, 0x45, 0x44, 0x10, 0x05, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x63, 0x75, 0x72, 0x73, 0x6f, + 0x72, 0x22, 0x56, 0x0a, 0x06, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x6c, + 0x61, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x49, 0x44, 0x12, 0x2c, 0x0a, 0x11, 0x6c, + 0x61, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x11, 0x6c, 0x61, 0x73, 0x74, 0x49, 0x74, 0x65, 0x6d, + 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xc8, 0x04, 0x0a, 0x07, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x49, 0x44, 0x12, 0x30, 0x0a, 0x07, 0x6d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4d, 0x73, 0x67, 0x54, 0x79, 0x70, 0x65, 0x52, 0x07, 0x6d, 0x73, + 0x67, 0x54, 0x79, 0x70, 0x65, 0x12, 0x42, 0x0a, 0x0d, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x63, + 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x0d, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, + 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, + 0x24, 0x0a, 0x0d, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x49, 0x44, + 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, + 0x61, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x3c, 0x0a, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6e, + 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, + 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6d, 0x70, 0x49, 0x44, + 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6d, 0x70, 0x49, 0x44, 0x12, 0x1d, 0x0a, + 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, + 0x52, 0x07, 0x73, 0x75, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x88, 0x01, 0x01, 0x12, 0x18, 0x0a, 0x07, + 0x73, 0x6f, 0x6d, 0x65, 0x49, 0x6e, 0x74, 0x18, 0x10, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, + 0x6f, 0x6d, 0x65, 0x49, 0x6e, 0x74, 0x12, 0x39, 0x0a, 0x09, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x18, 0x13, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x72, 0x65, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x52, 0x09, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x12, 0x44, 0x0a, 0x0c, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, + 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x48, 0x01, 0x52, 0x0c, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x73, 0x75, 0x62, 0x6a, + 0x65, 0x63, 0x74, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x22, 0xa1, 0x01, 0x0a, 0x0c, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x4d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x49, 0x44, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, + 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x4b, 0x0a, 0x10, 0x72, + 0x65, 0x70, 0x6c, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x10, 0x72, 0x65, 0x70, 0x6c, 0x79, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, 0x12, 0x0a, 0x10, 0x52, 0x65, 0x70, 0x6c, + 0x79, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, 0xcb, 0x01, 0x0a, + 0x0b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x28, 0x0a, 0x0f, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x44, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x49, 0x44, 0x12, 0x47, 0x0a, 0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, - 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x43, - 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x75, 0x62, 0x43, 0x6f, - 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x72, 0x72, 0x4d, 0x73, 0x67, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x06, 0x65, 0x72, 0x72, 0x4d, 0x73, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x54, 0x65, 0x78, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x65, 0x78, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x68, - 0x69, 0x72, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, - 0x68, 0x69, 0x72, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x22, 0x52, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x76, - 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x41, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, - 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x63, - 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xbb, 0x05, 0x0a, - 0x0c, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, 0x0a, - 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x0d, 0x6c, 0x61, 0x74, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x0d, - 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x32, 0x0a, - 0x14, 0x6c, 0x61, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x69, 0x6d, 0x65, - 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x6c, 0x61, 0x73, - 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, - 0x70, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x06, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x73, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x43, 0x68, 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, - 0x69, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x68, 0x61, 0x74, 0x12, 0x2c, 0x0a, 0x11, 0x73, - 0x65, 0x6c, 0x66, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x49, 0x44, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x73, 0x65, 0x6c, 0x66, 0x50, 0x61, 0x72, 0x74, - 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x36, 0x0a, 0x06, 0x73, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x6e, 0x76, - 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x48, 0x65, 0x78, 0x43, 0x6f, - 0x6c, 0x6f, 0x72, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x76, 0x61, 0x74, 0x61, - 0x72, 0x48, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x28, 0x0a, 0x0f, 0x6c, 0x61, 0x74, - 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x44, 0x18, 0x11, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x49, 0x44, 0x12, 0x3e, 0x0a, 0x0c, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, - 0x6e, 0x74, 0x73, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6e, 0x76, - 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, - 0x69, 0x70, 0x61, 0x6e, 0x74, 0x52, 0x0c, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, - 0x6e, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x61, 0x72, 0x74, - 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x15, 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, - 0x6f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, - 0x73, 0x12, 0x33, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x1f, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, - 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x54, 0x79, 0x70, - 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x62, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x2a, 0x0a, 0x10, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, - 0x74, 0x61, 0x6d, 0x70, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x75, 0x6e, 0x6b, 0x6e, - 0x6f, 0x77, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1c, 0x0a, 0x09, - 0x74, 0x68, 0x69, 0x72, 0x64, 0x54, 0x79, 0x70, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x09, 0x74, 0x68, 0x69, 0x72, 0x64, 0x54, 0x79, 0x70, 0x65, 0x22, 0x81, 0x03, 0x0a, 0x0b, 0x50, - 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x02, 0x49, 0x44, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x02, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x4e, 0x61, 0x6d, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x4e, 0x61, - 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x26, - 0x0a, 0x0e, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x48, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x48, 0x65, - 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x73, 0x4d, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x69, 0x73, 0x4d, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x6d, 0x75, - 0x74, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x6e, 0x76, - 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x52, - 0x05, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x6f, 0x6d, 0x65, 0x49, 0x6e, - 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x6f, 0x6d, 0x65, 0x49, 0x6e, 0x74, - 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x49, 0x44, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x49, 0x44, 0x12, 0x0e, 0x0a, 0x02, - 0x62, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x62, 0x73, 0x12, 0x28, 0x0a, 0x0f, - 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x74, 0x65, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, - 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x74, 0x65, 0x64, - 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x6f, 0x6d, 0x65, 0x49, 0x6e, - 0x74, 0x31, 0x18, 0x13, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x6f, 0x6d, 0x65, 0x49, 0x6e, - 0x74, 0x31, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x6f, 0x6d, 0x65, 0x49, 0x6e, 0x74, 0x32, 0x18, 0x14, - 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x6f, 0x6d, 0x65, 0x49, 0x6e, 0x74, 0x32, 0x22, 0x5d, - 0x0a, 0x09, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, + 0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, + 0x41, 0x0a, 0x0c, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0c, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, + 0x6e, 0x74, 0x42, 0x06, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xc6, 0x02, 0x0a, 0x0c, 0x4d, + 0x65, 0x64, 0x69, 0x61, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x33, 0x0a, 0x06, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1b, 0x2e, 0x63, 0x6f, + 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4d, 0x65, 0x64, 0x69, + 0x61, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x52, 0x06, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, + 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x6d, 0x65, 0x64, 0x69, 0x61, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x6d, 0x65, + 0x64, 0x69, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x6d, + 0x65, 0x64, 0x69, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x2d, 0x0a, 0x06, + 0x70, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, + 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x50, 0x69, 0x78, + 0x65, 0x6c, 0x73, 0x52, 0x06, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x6d, + 0x65, 0x64, 0x69, 0x61, 0x44, 0x61, 0x74, 0x61, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, + 0x6d, 0x65, 0x64, 0x69, 0x61, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x65, 0x64, + 0x69, 0x61, 0x49, 0x44, 0x32, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x65, 0x64, + 0x69, 0x61, 0x49, 0x44, 0x32, 0x12, 0x24, 0x0a, 0x0d, 0x64, 0x65, 0x63, 0x72, 0x79, 0x70, 0x74, + 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x64, 0x65, + 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x12, 0x26, 0x0a, 0x0e, 0x64, + 0x65, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x32, 0x18, 0x0c, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x0e, 0x64, 0x65, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, + 0x65, 0x79, 0x32, 0x22, 0x36, 0x0a, 0x06, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x12, 0x14, 0x0a, + 0x05, 0x77, 0x69, 0x64, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x77, 0x69, + 0x64, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x06, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x2a, 0x0a, 0x0e, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x12, 0x18, 0x0a, + 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22, 0x1d, 0x0a, 0x07, 0x4d, 0x73, 0x67, 0x54, 0x79, + 0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0xb9, 0x01, 0x0a, 0x0d, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x38, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x20, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, + 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x75, 0x62, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x16, 0x0a, 0x06, + 0x65, 0x72, 0x72, 0x4d, 0x73, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x65, 0x72, + 0x72, 0x4d, 0x73, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x65, + 0x78, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, + 0x54, 0x65, 0x78, 0x74, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x68, 0x69, 0x72, 0x64, 0x43, 0x6f, 0x64, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x68, 0x69, 0x72, 0x64, 0x43, 0x6f, + 0x64, 0x65, 0x22, 0xc8, 0x01, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x41, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, + 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x76, + 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, + 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x0b, 0x63, 0x75, 0x72, 0x73, 0x6f, + 0x72, 0x42, 0x79, 0x74, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x48, 0x00, 0x52, 0x0b, + 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x42, 0x79, 0x74, 0x65, 0x73, 0x88, 0x01, 0x01, 0x12, 0x32, + 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, + 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, + 0x75, 0x72, 0x73, 0x6f, 0x72, 0x48, 0x01, 0x52, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x88, + 0x01, 0x01, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x42, 0x79, 0x74, + 0x65, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x5f, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0xbb, 0x05, + 0x0a, 0x0c, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x26, + 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x0d, 0x6c, 0x61, + 0x74, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1c, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, + 0x0d, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x32, + 0x0a, 0x14, 0x6c, 0x61, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x6c, 0x61, + 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, + 0x6d, 0x70, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x06, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x64, 0x12, 0x20, 0x0a, 0x0b, 0x69, 0x73, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x68, 0x61, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0b, 0x69, 0x73, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x68, 0x61, 0x74, 0x12, 0x2c, 0x0a, 0x11, + 0x73, 0x65, 0x6c, 0x66, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x49, + 0x44, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x73, 0x65, 0x6c, 0x66, 0x50, 0x61, 0x72, + 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x49, 0x44, 0x12, 0x36, 0x0a, 0x06, 0x73, 0x74, + 0x61, 0x74, 0x75, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1e, 0x2e, 0x63, 0x6f, 0x6e, + 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x26, 0x0a, 0x0e, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x48, 0x65, 0x78, 0x43, + 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x76, 0x61, 0x74, + 0x61, 0x72, 0x48, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x28, 0x0a, 0x0f, 0x6c, 0x61, + 0x74, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x44, 0x18, 0x11, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, + 0x67, 0x65, 0x49, 0x44, 0x12, 0x3e, 0x0a, 0x0c, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, + 0x61, 0x6e, 0x74, 0x73, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x63, 0x6f, 0x6e, + 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x50, 0x61, 0x72, 0x74, 0x69, + 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x52, 0x0c, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, + 0x61, 0x6e, 0x74, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x61, 0x72, + 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x73, 0x18, 0x15, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x11, 0x6f, 0x74, 0x68, 0x65, 0x72, 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, + 0x74, 0x73, 0x12, 0x33, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0e, + 0x32, 0x1f, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, + 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x62, 0x54, 0x79, + 0x70, 0x65, 0x18, 0x18, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x62, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x54, 0x69, 0x6d, 0x65, + 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x75, 0x6e, 0x6b, + 0x6e, 0x6f, 0x77, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x1c, 0x0a, + 0x09, 0x74, 0x68, 0x69, 0x72, 0x64, 0x54, 0x79, 0x70, 0x65, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x09, 0x74, 0x68, 0x69, 0x72, 0x64, 0x54, 0x79, 0x70, 0x65, 0x22, 0x81, 0x03, 0x0a, 0x0b, + 0x50, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x12, 0x28, 0x0a, 0x02, 0x49, + 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, + 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x02, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x4e, 0x61, + 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x66, 0x69, 0x72, 0x73, 0x74, 0x4e, + 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x75, 0x6c, 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, + 0x26, 0x0a, 0x0e, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x48, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, + 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x48, + 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x73, 0x4d, 0x65, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x04, 0x69, 0x73, 0x4d, 0x65, 0x12, 0x2a, 0x0a, 0x05, 0x6d, + 0x75, 0x74, 0x65, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6f, 0x6e, + 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4d, 0x75, 0x74, 0x65, 0x64, + 0x52, 0x05, 0x6d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x6f, 0x6d, 0x65, 0x49, + 0x6e, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x73, 0x6f, 0x6d, 0x65, 0x49, 0x6e, + 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x49, 0x44, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x08, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x49, 0x44, 0x12, 0x0e, 0x0a, + 0x02, 0x62, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x03, 0x52, 0x02, 0x62, 0x73, 0x12, 0x28, 0x0a, + 0x0f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x74, 0x65, 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, + 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x74, 0x65, + 0x64, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x6f, 0x6d, 0x65, 0x49, + 0x6e, 0x74, 0x31, 0x18, 0x13, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x6f, 0x6d, 0x65, 0x49, + 0x6e, 0x74, 0x31, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x6f, 0x6d, 0x65, 0x49, 0x6e, 0x74, 0x32, 0x18, + 0x14, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x73, 0x6f, 0x6d, 0x65, 0x49, 0x6e, 0x74, 0x32, 0x22, + 0x7c, 0x0a, 0x09, 0x53, 0x6d, 0x61, 0x6c, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x31, 0x0a, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x63, 0x6f, 0x6e, + 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x49, 0x64, 0x65, 0x6e, 0x74, + 0x69, 0x66, 0x69, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x24, 0x0a, 0x0d, 0x70, 0x61, 0x72, 0x74, 0x69, 0x63, 0x69, 0x70, 0x61, 0x6e, 0x74, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, @@ -3400,287 +3891,291 @@ var file_conversations_proto_rawDesc = []byte{ 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x21, 0x0a, 0x05, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x73, 0x4d, 0x75, 0x74, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, 0x69, 0x73, - 0x4d, 0x75, 0x74, 0x65, 0x64, 0x2a, 0x43, 0x0a, 0x10, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, 0x0a, 0x19, 0x55, 0x4e, 0x4b, - 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x56, 0x45, 0x52, 0x53, 0x41, 0x54, 0x49, 0x4f, - 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x4d, 0x53, 0x10, - 0x01, 0x12, 0x07, 0x0a, 0x03, 0x52, 0x43, 0x53, 0x10, 0x02, 0x2a, 0xc2, 0x19, 0x0a, 0x11, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, - 0x57, 0x4e, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x4f, 0x55, 0x54, 0x47, 0x4f, 0x49, 0x4e, 0x47, - 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x4f, - 0x55, 0x54, 0x47, 0x4f, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, - 0x44, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x55, 0x54, 0x47, 0x4f, 0x49, 0x4e, 0x47, 0x5f, - 0x44, 0x49, 0x53, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x44, 0x10, 0x0b, 0x12, 0x12, 0x0a, 0x0e, 0x4f, - 0x55, 0x54, 0x47, 0x4f, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x52, 0x41, 0x46, 0x54, 0x10, 0x03, 0x12, - 0x22, 0x0a, 0x1e, 0x4f, 0x55, 0x54, 0x47, 0x4f, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x45, 0x4e, 0x44, - 0x5f, 0x41, 0x46, 0x54, 0x45, 0x52, 0x5f, 0x50, 0x52, 0x4f, 0x43, 0x45, 0x53, 0x53, 0x49, 0x4e, - 0x47, 0x10, 0x0a, 0x12, 0x18, 0x0a, 0x14, 0x4f, 0x55, 0x54, 0x47, 0x4f, 0x49, 0x4e, 0x47, 0x5f, - 0x59, 0x45, 0x54, 0x5f, 0x54, 0x4f, 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x10, 0x04, 0x12, 0x14, 0x0a, - 0x10, 0x4f, 0x55, 0x54, 0x47, 0x4f, 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x49, 0x4e, - 0x47, 0x10, 0x05, 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x55, 0x54, 0x47, 0x4f, 0x49, 0x4e, 0x47, 0x5f, - 0x52, 0x45, 0x53, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x06, 0x12, 0x1b, 0x0a, 0x17, 0x4f, - 0x55, 0x54, 0x47, 0x4f, 0x49, 0x4e, 0x47, 0x5f, 0x41, 0x57, 0x41, 0x49, 0x54, 0x49, 0x4e, 0x47, - 0x5f, 0x52, 0x45, 0x54, 0x52, 0x59, 0x10, 0x07, 0x12, 0x1b, 0x0a, 0x17, 0x4f, 0x55, 0x54, 0x47, - 0x4f, 0x49, 0x4e, 0x47, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x47, 0x45, 0x4e, 0x45, - 0x52, 0x49, 0x43, 0x10, 0x08, 0x12, 0x24, 0x0a, 0x20, 0x4f, 0x55, 0x54, 0x47, 0x4f, 0x49, 0x4e, - 0x47, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x45, 0x4d, 0x45, 0x52, 0x47, 0x45, 0x4e, - 0x43, 0x59, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x09, 0x12, 0x15, 0x0a, 0x11, 0x4f, - 0x55, 0x54, 0x47, 0x4f, 0x49, 0x4e, 0x47, 0x5f, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x44, - 0x10, 0x0c, 0x12, 0x1d, 0x0a, 0x19, 0x4f, 0x55, 0x54, 0x47, 0x4f, 0x49, 0x4e, 0x47, 0x5f, 0x46, - 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x54, 0x4f, 0x4f, 0x5f, 0x4c, 0x41, 0x52, 0x47, 0x45, 0x10, - 0x0d, 0x12, 0x1e, 0x0a, 0x1a, 0x4f, 0x55, 0x54, 0x47, 0x4f, 0x49, 0x4e, 0x47, 0x5f, 0x4e, 0x4f, - 0x54, 0x5f, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, 0x44, 0x5f, 0x59, 0x45, 0x54, 0x10, - 0x0e, 0x12, 0x1f, 0x0a, 0x1b, 0x4f, 0x55, 0x54, 0x47, 0x4f, 0x49, 0x4e, 0x47, 0x5f, 0x52, 0x45, - 0x56, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, - 0x10, 0x0f, 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x55, 0x54, 0x47, 0x4f, 0x49, 0x4e, 0x47, 0x5f, 0x53, - 0x43, 0x48, 0x45, 0x44, 0x55, 0x4c, 0x45, 0x44, 0x10, 0x10, 0x12, 0x26, 0x0a, 0x22, 0x4f, 0x55, - 0x54, 0x47, 0x4f, 0x49, 0x4e, 0x47, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x52, 0x45, - 0x43, 0x49, 0x50, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x4c, 0x4f, 0x53, 0x54, 0x5f, 0x52, 0x43, 0x53, - 0x10, 0x11, 0x12, 0x28, 0x0a, 0x24, 0x4f, 0x55, 0x54, 0x47, 0x4f, 0x49, 0x4e, 0x47, 0x5f, 0x46, - 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4e, 0x4f, 0x5f, 0x52, 0x45, 0x54, 0x52, 0x59, 0x5f, 0x4e, - 0x4f, 0x5f, 0x46, 0x41, 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x10, 0x12, 0x12, 0x2d, 0x0a, 0x29, - 0x4f, 0x55, 0x54, 0x47, 0x4f, 0x49, 0x4e, 0x47, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, - 0x52, 0x45, 0x43, 0x49, 0x50, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x44, 0x49, 0x44, 0x5f, 0x4e, 0x4f, - 0x54, 0x5f, 0x44, 0x45, 0x43, 0x52, 0x59, 0x50, 0x54, 0x10, 0x13, 0x12, 0x17, 0x0a, 0x13, 0x4f, - 0x55, 0x54, 0x47, 0x4f, 0x49, 0x4e, 0x47, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x49, - 0x4e, 0x47, 0x10, 0x14, 0x12, 0x2d, 0x0a, 0x29, 0x4f, 0x55, 0x54, 0x47, 0x4f, 0x49, 0x4e, 0x47, - 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x52, 0x45, 0x43, 0x49, 0x50, 0x49, 0x45, 0x4e, - 0x54, 0x5f, 0x4c, 0x4f, 0x53, 0x54, 0x5f, 0x45, 0x4e, 0x43, 0x52, 0x59, 0x50, 0x54, 0x49, 0x4f, - 0x4e, 0x10, 0x15, 0x12, 0x3b, 0x0a, 0x37, 0x4f, 0x55, 0x54, 0x47, 0x4f, 0x49, 0x4e, 0x47, 0x5f, - 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x52, 0x45, 0x43, 0x49, 0x50, 0x49, 0x45, 0x4e, 0x54, - 0x5f, 0x44, 0x49, 0x44, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x44, 0x45, 0x43, 0x52, 0x59, 0x50, 0x54, - 0x5f, 0x4e, 0x4f, 0x5f, 0x4d, 0x4f, 0x52, 0x45, 0x5f, 0x52, 0x45, 0x54, 0x52, 0x59, 0x10, 0x16, - 0x12, 0x15, 0x0a, 0x11, 0x49, 0x4e, 0x43, 0x4f, 0x4d, 0x49, 0x4e, 0x47, 0x5f, 0x43, 0x4f, 0x4d, - 0x50, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x64, 0x12, 0x23, 0x0a, 0x1f, 0x49, 0x4e, 0x43, 0x4f, 0x4d, - 0x49, 0x4e, 0x47, 0x5f, 0x59, 0x45, 0x54, 0x5f, 0x54, 0x4f, 0x5f, 0x4d, 0x41, 0x4e, 0x55, 0x41, - 0x4c, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x10, 0x65, 0x12, 0x25, 0x0a, 0x21, - 0x49, 0x4e, 0x43, 0x4f, 0x4d, 0x49, 0x4e, 0x47, 0x5f, 0x52, 0x45, 0x54, 0x52, 0x59, 0x49, 0x4e, - 0x47, 0x5f, 0x4d, 0x41, 0x4e, 0x55, 0x41, 0x4c, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x4f, 0x41, - 0x44, 0x10, 0x66, 0x12, 0x1f, 0x0a, 0x1b, 0x49, 0x4e, 0x43, 0x4f, 0x4d, 0x49, 0x4e, 0x47, 0x5f, - 0x4d, 0x41, 0x4e, 0x55, 0x41, 0x4c, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x49, - 0x4e, 0x47, 0x10, 0x67, 0x12, 0x23, 0x0a, 0x1f, 0x49, 0x4e, 0x43, 0x4f, 0x4d, 0x49, 0x4e, 0x47, - 0x5f, 0x52, 0x45, 0x54, 0x52, 0x59, 0x49, 0x4e, 0x47, 0x5f, 0x41, 0x55, 0x54, 0x4f, 0x5f, 0x44, - 0x4f, 0x57, 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x10, 0x68, 0x12, 0x1d, 0x0a, 0x19, 0x49, 0x4e, 0x43, - 0x4f, 0x4d, 0x49, 0x4e, 0x47, 0x5f, 0x41, 0x55, 0x54, 0x4f, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x4c, - 0x4f, 0x41, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x69, 0x12, 0x1c, 0x0a, 0x18, 0x49, 0x4e, 0x43, 0x4f, - 0x4d, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x46, 0x41, - 0x49, 0x4c, 0x45, 0x44, 0x10, 0x6a, 0x12, 0x25, 0x0a, 0x21, 0x49, 0x4e, 0x43, 0x4f, 0x4d, 0x49, - 0x4e, 0x47, 0x5f, 0x45, 0x58, 0x50, 0x49, 0x52, 0x45, 0x44, 0x5f, 0x4f, 0x52, 0x5f, 0x4e, 0x4f, - 0x54, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x10, 0x6b, 0x12, 0x16, 0x0a, - 0x12, 0x49, 0x4e, 0x43, 0x4f, 0x4d, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, - 0x52, 0x45, 0x44, 0x10, 0x6c, 0x12, 0x16, 0x0a, 0x12, 0x49, 0x4e, 0x43, 0x4f, 0x4d, 0x49, 0x4e, - 0x47, 0x5f, 0x44, 0x49, 0x53, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x44, 0x10, 0x6d, 0x12, 0x1e, 0x0a, - 0x1a, 0x49, 0x4e, 0x43, 0x4f, 0x4d, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x4f, - 0x41, 0x44, 0x5f, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x44, 0x10, 0x6e, 0x12, 0x26, 0x0a, - 0x22, 0x49, 0x4e, 0x43, 0x4f, 0x4d, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x4f, - 0x41, 0x44, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x54, 0x4f, 0x4f, 0x5f, 0x4c, 0x41, - 0x52, 0x47, 0x45, 0x10, 0x6f, 0x12, 0x2c, 0x0a, 0x28, 0x49, 0x4e, 0x43, 0x4f, 0x4d, 0x49, 0x4e, - 0x47, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, - 0x44, 0x5f, 0x53, 0x49, 0x4d, 0x5f, 0x48, 0x41, 0x53, 0x5f, 0x4e, 0x4f, 0x5f, 0x44, 0x41, 0x54, - 0x41, 0x10, 0x70, 0x12, 0x1e, 0x0a, 0x1a, 0x49, 0x4e, 0x43, 0x4f, 0x4d, 0x49, 0x4e, 0x47, 0x5f, - 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x54, 0x4f, 0x5f, 0x44, 0x45, 0x43, 0x52, 0x59, 0x50, - 0x54, 0x10, 0x71, 0x12, 0x1f, 0x0a, 0x1b, 0x49, 0x4e, 0x43, 0x4f, 0x4d, 0x49, 0x4e, 0x47, 0x5f, - 0x44, 0x45, 0x43, 0x52, 0x59, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x41, 0x42, 0x4f, 0x52, 0x54, - 0x45, 0x44, 0x10, 0x72, 0x12, 0x21, 0x0a, 0x1c, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, - 0x45, 0x5f, 0x50, 0x41, 0x52, 0x54, 0x49, 0x43, 0x49, 0x50, 0x41, 0x4e, 0x54, 0x5f, 0x4a, 0x4f, - 0x49, 0x4e, 0x45, 0x44, 0x10, 0xc8, 0x01, 0x12, 0x1f, 0x0a, 0x1a, 0x54, 0x4f, 0x4d, 0x42, 0x53, - 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x50, 0x41, 0x52, 0x54, 0x49, 0x43, 0x49, 0x50, 0x41, 0x4e, 0x54, - 0x5f, 0x4c, 0x45, 0x46, 0x54, 0x10, 0xc9, 0x01, 0x12, 0x18, 0x0a, 0x13, 0x54, 0x4f, 0x4d, 0x42, - 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x4c, 0x45, 0x46, 0x54, 0x10, - 0xca, 0x01, 0x12, 0x20, 0x0a, 0x1b, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, - 0x52, 0x43, 0x53, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, - 0x44, 0x10, 0xcb, 0x01, 0x12, 0x20, 0x0a, 0x1b, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, - 0x45, 0x5f, 0x4d, 0x4d, 0x53, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x43, 0x52, 0x45, 0x41, - 0x54, 0x45, 0x44, 0x10, 0xcc, 0x01, 0x12, 0x24, 0x0a, 0x1f, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, - 0x4f, 0x4e, 0x45, 0x5f, 0x53, 0x4d, 0x53, 0x5f, 0x42, 0x52, 0x4f, 0x41, 0x44, 0x43, 0x41, 0x53, - 0x54, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0xcd, 0x01, 0x12, 0x25, 0x0a, 0x20, - 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x4f, 0x4e, 0x45, 0x5f, 0x4f, 0x4e, - 0x5f, 0x4f, 0x4e, 0x45, 0x5f, 0x53, 0x4d, 0x53, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, - 0x10, 0xce, 0x01, 0x12, 0x25, 0x0a, 0x20, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, - 0x5f, 0x4f, 0x4e, 0x45, 0x5f, 0x4f, 0x4e, 0x5f, 0x4f, 0x4e, 0x45, 0x5f, 0x52, 0x43, 0x53, 0x5f, - 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0xcf, 0x01, 0x12, 0x22, 0x0a, 0x1d, 0x54, 0x4f, - 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x5f, 0x54, - 0x4f, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x4d, 0x4d, 0x53, 0x10, 0xd0, 0x01, 0x12, 0x26, - 0x0a, 0x21, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x53, 0x57, 0x49, 0x54, - 0x43, 0x48, 0x5f, 0x54, 0x4f, 0x5f, 0x42, 0x52, 0x4f, 0x41, 0x44, 0x43, 0x41, 0x53, 0x54, 0x5f, - 0x53, 0x4d, 0x53, 0x10, 0xd1, 0x01, 0x12, 0x21, 0x0a, 0x1c, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, - 0x4f, 0x4e, 0x45, 0x5f, 0x53, 0x48, 0x4f, 0x57, 0x5f, 0x4c, 0x49, 0x4e, 0x4b, 0x5f, 0x50, 0x52, - 0x45, 0x56, 0x49, 0x45, 0x57, 0x53, 0x10, 0xd2, 0x01, 0x12, 0x22, 0x0a, 0x1d, 0x54, 0x4f, 0x4d, - 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x52, 0x45, 0x4e, - 0x41, 0x4d, 0x45, 0x44, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x4c, 0x10, 0xd3, 0x01, 0x12, 0x26, 0x0a, - 0x21, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x56, 0x45, 0x52, 0x49, 0x46, - 0x49, 0x45, 0x44, 0x5f, 0x53, 0x4d, 0x53, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x42, - 0x4c, 0x45, 0x10, 0xd4, 0x01, 0x12, 0x2f, 0x0a, 0x2a, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, - 0x4e, 0x45, 0x5f, 0x45, 0x4e, 0x43, 0x52, 0x59, 0x50, 0x54, 0x45, 0x44, 0x5f, 0x4f, 0x4e, 0x45, - 0x5f, 0x4f, 0x4e, 0x5f, 0x4f, 0x4e, 0x45, 0x5f, 0x52, 0x43, 0x53, 0x5f, 0x43, 0x52, 0x45, 0x41, - 0x54, 0x45, 0x44, 0x10, 0xd5, 0x01, 0x12, 0x26, 0x0a, 0x21, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, - 0x4f, 0x4e, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x53, 0x57, 0x49, - 0x54, 0x43, 0x48, 0x5f, 0x54, 0x4f, 0x5f, 0x54, 0x45, 0x58, 0x54, 0x10, 0xd6, 0x01, 0x12, 0x25, - 0x0a, 0x20, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x54, - 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x5f, 0x54, 0x4f, 0x5f, 0x52, - 0x43, 0x53, 0x10, 0xd7, 0x01, 0x12, 0x2f, 0x0a, 0x2a, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, - 0x4e, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x53, 0x57, 0x49, 0x54, - 0x43, 0x48, 0x5f, 0x54, 0x4f, 0x5f, 0x45, 0x4e, 0x43, 0x52, 0x59, 0x50, 0x54, 0x45, 0x44, 0x5f, - 0x52, 0x43, 0x53, 0x10, 0xd8, 0x01, 0x12, 0x23, 0x0a, 0x1e, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, - 0x4f, 0x4e, 0x45, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x52, 0x45, 0x4e, 0x41, 0x4d, 0x45, - 0x44, 0x5f, 0x47, 0x4c, 0x4f, 0x42, 0x41, 0x4c, 0x10, 0xd9, 0x01, 0x12, 0x28, 0x0a, 0x23, 0x54, - 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x4e, - 0x41, 0x4d, 0x45, 0x5f, 0x43, 0x4c, 0x45, 0x41, 0x52, 0x45, 0x44, 0x5f, 0x47, 0x4c, 0x4f, 0x42, - 0x41, 0x4c, 0x10, 0xda, 0x01, 0x12, 0x34, 0x0a, 0x2f, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, - 0x4e, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x53, 0x57, 0x49, 0x54, - 0x43, 0x48, 0x5f, 0x54, 0x4f, 0x5f, 0x45, 0x4e, 0x43, 0x52, 0x59, 0x50, 0x54, 0x45, 0x44, 0x5f, - 0x52, 0x43, 0x53, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xdb, 0x01, 0x12, 0x26, 0x0a, 0x21, 0x54, - 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x52, 0x45, - 0x4d, 0x4f, 0x56, 0x45, 0x44, 0x5f, 0x46, 0x52, 0x4f, 0x4d, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, - 0x10, 0xdc, 0x01, 0x12, 0x3c, 0x0a, 0x37, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x53, - 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, - 0x50, 0x41, 0x52, 0x54, 0x49, 0x43, 0x49, 0x50, 0x41, 0x4e, 0x54, 0x5f, 0x52, 0x45, 0x4d, 0x4f, - 0x56, 0x45, 0x44, 0x5f, 0x46, 0x52, 0x4f, 0x4d, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x10, 0xdd, - 0x01, 0x12, 0x3b, 0x0a, 0x36, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, - 0x54, 0x55, 0x53, 0x5f, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x53, 0x4d, - 0x53, 0x5f, 0x4e, 0x4f, 0x52, 0x4d, 0x5f, 0x50, 0x41, 0x52, 0x54, 0x49, 0x43, 0x49, 0x50, 0x41, - 0x4e, 0x54, 0x5f, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x45, 0x44, 0x10, 0xde, 0x01, 0x12, 0x3b, - 0x0a, 0x36, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, - 0x5f, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x52, 0x43, 0x53, 0x5f, 0x4e, - 0x4f, 0x52, 0x4d, 0x5f, 0x50, 0x41, 0x52, 0x54, 0x49, 0x43, 0x49, 0x50, 0x41, 0x4e, 0x54, 0x5f, - 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x45, 0x44, 0x10, 0xdf, 0x01, 0x12, 0x45, 0x0a, 0x40, 0x4d, - 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x4f, + 0x4d, 0x75, 0x74, 0x65, 0x64, 0x2a, 0x33, 0x0a, 0x0e, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, + 0x69, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, + 0x57, 0x4e, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x50, 0x48, 0x4f, 0x4e, 0x45, 0x10, 0x01, 0x12, + 0x09, 0x0a, 0x05, 0x45, 0x4d, 0x41, 0x49, 0x4c, 0x10, 0x02, 0x2a, 0x43, 0x0a, 0x10, 0x43, 0x6f, + 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1d, + 0x0a, 0x19, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x56, 0x45, 0x52, + 0x53, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x07, 0x0a, + 0x03, 0x53, 0x4d, 0x53, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x52, 0x43, 0x53, 0x10, 0x02, 0x2a, + 0xc2, 0x19, 0x0a, 0x11, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, + 0x73, 0x54, 0x79, 0x70, 0x65, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, + 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x4f, 0x55, 0x54, + 0x47, 0x4f, 0x49, 0x4e, 0x47, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x01, + 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x55, 0x54, 0x47, 0x4f, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x45, 0x4c, + 0x49, 0x56, 0x45, 0x52, 0x45, 0x44, 0x10, 0x02, 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x55, 0x54, 0x47, + 0x4f, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x49, 0x53, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x44, 0x10, 0x0b, + 0x12, 0x12, 0x0a, 0x0e, 0x4f, 0x55, 0x54, 0x47, 0x4f, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x52, 0x41, + 0x46, 0x54, 0x10, 0x03, 0x12, 0x22, 0x0a, 0x1e, 0x4f, 0x55, 0x54, 0x47, 0x4f, 0x49, 0x4e, 0x47, + 0x5f, 0x53, 0x45, 0x4e, 0x44, 0x5f, 0x41, 0x46, 0x54, 0x45, 0x52, 0x5f, 0x50, 0x52, 0x4f, 0x43, + 0x45, 0x53, 0x53, 0x49, 0x4e, 0x47, 0x10, 0x0a, 0x12, 0x18, 0x0a, 0x14, 0x4f, 0x55, 0x54, 0x47, + 0x4f, 0x49, 0x4e, 0x47, 0x5f, 0x59, 0x45, 0x54, 0x5f, 0x54, 0x4f, 0x5f, 0x53, 0x45, 0x4e, 0x44, + 0x10, 0x04, 0x12, 0x14, 0x0a, 0x10, 0x4f, 0x55, 0x54, 0x47, 0x4f, 0x49, 0x4e, 0x47, 0x5f, 0x53, + 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x05, 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x55, 0x54, 0x47, + 0x4f, 0x49, 0x4e, 0x47, 0x5f, 0x52, 0x45, 0x53, 0x45, 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x06, + 0x12, 0x1b, 0x0a, 0x17, 0x4f, 0x55, 0x54, 0x47, 0x4f, 0x49, 0x4e, 0x47, 0x5f, 0x41, 0x57, 0x41, + 0x49, 0x54, 0x49, 0x4e, 0x47, 0x5f, 0x52, 0x45, 0x54, 0x52, 0x59, 0x10, 0x07, 0x12, 0x1b, 0x0a, + 0x17, 0x4f, 0x55, 0x54, 0x47, 0x4f, 0x49, 0x4e, 0x47, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, + 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x49, 0x43, 0x10, 0x08, 0x12, 0x24, 0x0a, 0x20, 0x4f, 0x55, + 0x54, 0x47, 0x4f, 0x49, 0x4e, 0x47, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x45, 0x4d, + 0x45, 0x52, 0x47, 0x45, 0x4e, 0x43, 0x59, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x09, + 0x12, 0x15, 0x0a, 0x11, 0x4f, 0x55, 0x54, 0x47, 0x4f, 0x49, 0x4e, 0x47, 0x5f, 0x43, 0x41, 0x4e, + 0x43, 0x45, 0x4c, 0x45, 0x44, 0x10, 0x0c, 0x12, 0x1d, 0x0a, 0x19, 0x4f, 0x55, 0x54, 0x47, 0x4f, + 0x49, 0x4e, 0x47, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x54, 0x4f, 0x4f, 0x5f, 0x4c, + 0x41, 0x52, 0x47, 0x45, 0x10, 0x0d, 0x12, 0x1e, 0x0a, 0x1a, 0x4f, 0x55, 0x54, 0x47, 0x4f, 0x49, + 0x4e, 0x47, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, 0x44, + 0x5f, 0x59, 0x45, 0x54, 0x10, 0x0e, 0x12, 0x1f, 0x0a, 0x1b, 0x4f, 0x55, 0x54, 0x47, 0x4f, 0x49, + 0x4e, 0x47, 0x5f, 0x52, 0x45, 0x56, 0x4f, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x45, + 0x4e, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x0f, 0x12, 0x16, 0x0a, 0x12, 0x4f, 0x55, 0x54, 0x47, 0x4f, + 0x49, 0x4e, 0x47, 0x5f, 0x53, 0x43, 0x48, 0x45, 0x44, 0x55, 0x4c, 0x45, 0x44, 0x10, 0x10, 0x12, + 0x26, 0x0a, 0x22, 0x4f, 0x55, 0x54, 0x47, 0x4f, 0x49, 0x4e, 0x47, 0x5f, 0x46, 0x41, 0x49, 0x4c, + 0x45, 0x44, 0x5f, 0x52, 0x45, 0x43, 0x49, 0x50, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x4c, 0x4f, 0x53, + 0x54, 0x5f, 0x52, 0x43, 0x53, 0x10, 0x11, 0x12, 0x28, 0x0a, 0x24, 0x4f, 0x55, 0x54, 0x47, 0x4f, + 0x49, 0x4e, 0x47, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x4e, 0x4f, 0x5f, 0x52, 0x45, + 0x54, 0x52, 0x59, 0x5f, 0x4e, 0x4f, 0x5f, 0x46, 0x41, 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x10, + 0x12, 0x12, 0x2d, 0x0a, 0x29, 0x4f, 0x55, 0x54, 0x47, 0x4f, 0x49, 0x4e, 0x47, 0x5f, 0x46, 0x41, + 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x52, 0x45, 0x43, 0x49, 0x50, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x44, + 0x49, 0x44, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x44, 0x45, 0x43, 0x52, 0x59, 0x50, 0x54, 0x10, 0x13, + 0x12, 0x17, 0x0a, 0x13, 0x4f, 0x55, 0x54, 0x47, 0x4f, 0x49, 0x4e, 0x47, 0x5f, 0x56, 0x41, 0x4c, + 0x49, 0x44, 0x41, 0x54, 0x49, 0x4e, 0x47, 0x10, 0x14, 0x12, 0x2d, 0x0a, 0x29, 0x4f, 0x55, 0x54, + 0x47, 0x4f, 0x49, 0x4e, 0x47, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x52, 0x45, 0x43, + 0x49, 0x50, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x4c, 0x4f, 0x53, 0x54, 0x5f, 0x45, 0x4e, 0x43, 0x52, + 0x59, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x15, 0x12, 0x3b, 0x0a, 0x37, 0x4f, 0x55, 0x54, 0x47, + 0x4f, 0x49, 0x4e, 0x47, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x52, 0x45, 0x43, 0x49, + 0x50, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x44, 0x49, 0x44, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x44, 0x45, + 0x43, 0x52, 0x59, 0x50, 0x54, 0x5f, 0x4e, 0x4f, 0x5f, 0x4d, 0x4f, 0x52, 0x45, 0x5f, 0x52, 0x45, + 0x54, 0x52, 0x59, 0x10, 0x16, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x4e, 0x43, 0x4f, 0x4d, 0x49, 0x4e, + 0x47, 0x5f, 0x43, 0x4f, 0x4d, 0x50, 0x4c, 0x45, 0x54, 0x45, 0x10, 0x64, 0x12, 0x23, 0x0a, 0x1f, + 0x49, 0x4e, 0x43, 0x4f, 0x4d, 0x49, 0x4e, 0x47, 0x5f, 0x59, 0x45, 0x54, 0x5f, 0x54, 0x4f, 0x5f, + 0x4d, 0x41, 0x4e, 0x55, 0x41, 0x4c, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x10, + 0x65, 0x12, 0x25, 0x0a, 0x21, 0x49, 0x4e, 0x43, 0x4f, 0x4d, 0x49, 0x4e, 0x47, 0x5f, 0x52, 0x45, + 0x54, 0x52, 0x59, 0x49, 0x4e, 0x47, 0x5f, 0x4d, 0x41, 0x4e, 0x55, 0x41, 0x4c, 0x5f, 0x44, 0x4f, + 0x57, 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x10, 0x66, 0x12, 0x1f, 0x0a, 0x1b, 0x49, 0x4e, 0x43, 0x4f, + 0x4d, 0x49, 0x4e, 0x47, 0x5f, 0x4d, 0x41, 0x4e, 0x55, 0x41, 0x4c, 0x5f, 0x44, 0x4f, 0x57, 0x4e, + 0x4c, 0x4f, 0x41, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x67, 0x12, 0x23, 0x0a, 0x1f, 0x49, 0x4e, 0x43, + 0x4f, 0x4d, 0x49, 0x4e, 0x47, 0x5f, 0x52, 0x45, 0x54, 0x52, 0x59, 0x49, 0x4e, 0x47, 0x5f, 0x41, + 0x55, 0x54, 0x4f, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x10, 0x68, 0x12, 0x1d, + 0x0a, 0x19, 0x49, 0x4e, 0x43, 0x4f, 0x4d, 0x49, 0x4e, 0x47, 0x5f, 0x41, 0x55, 0x54, 0x4f, 0x5f, + 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x49, 0x4e, 0x47, 0x10, 0x69, 0x12, 0x1c, 0x0a, + 0x18, 0x49, 0x4e, 0x43, 0x4f, 0x4d, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x4f, + 0x41, 0x44, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x6a, 0x12, 0x25, 0x0a, 0x21, 0x49, + 0x4e, 0x43, 0x4f, 0x4d, 0x49, 0x4e, 0x47, 0x5f, 0x45, 0x58, 0x50, 0x49, 0x52, 0x45, 0x44, 0x5f, + 0x4f, 0x52, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, + 0x10, 0x6b, 0x12, 0x16, 0x0a, 0x12, 0x49, 0x4e, 0x43, 0x4f, 0x4d, 0x49, 0x4e, 0x47, 0x5f, 0x44, + 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, 0x44, 0x10, 0x6c, 0x12, 0x16, 0x0a, 0x12, 0x49, 0x4e, + 0x43, 0x4f, 0x4d, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x49, 0x53, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x44, + 0x10, 0x6d, 0x12, 0x1e, 0x0a, 0x1a, 0x49, 0x4e, 0x43, 0x4f, 0x4d, 0x49, 0x4e, 0x47, 0x5f, 0x44, + 0x4f, 0x57, 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x43, 0x41, 0x4e, 0x43, 0x45, 0x4c, 0x45, 0x44, + 0x10, 0x6e, 0x12, 0x26, 0x0a, 0x22, 0x49, 0x4e, 0x43, 0x4f, 0x4d, 0x49, 0x4e, 0x47, 0x5f, 0x44, + 0x4f, 0x57, 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x54, + 0x4f, 0x4f, 0x5f, 0x4c, 0x41, 0x52, 0x47, 0x45, 0x10, 0x6f, 0x12, 0x2c, 0x0a, 0x28, 0x49, 0x4e, + 0x43, 0x4f, 0x4d, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x5f, + 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x53, 0x49, 0x4d, 0x5f, 0x48, 0x41, 0x53, 0x5f, 0x4e, + 0x4f, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x10, 0x70, 0x12, 0x1e, 0x0a, 0x1a, 0x49, 0x4e, 0x43, 0x4f, + 0x4d, 0x49, 0x4e, 0x47, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x5f, 0x54, 0x4f, 0x5f, 0x44, + 0x45, 0x43, 0x52, 0x59, 0x50, 0x54, 0x10, 0x71, 0x12, 0x1f, 0x0a, 0x1b, 0x49, 0x4e, 0x43, 0x4f, + 0x4d, 0x49, 0x4e, 0x47, 0x5f, 0x44, 0x45, 0x43, 0x52, 0x59, 0x50, 0x54, 0x49, 0x4f, 0x4e, 0x5f, + 0x41, 0x42, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x10, 0x72, 0x12, 0x21, 0x0a, 0x1c, 0x54, 0x4f, 0x4d, + 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x50, 0x41, 0x52, 0x54, 0x49, 0x43, 0x49, 0x50, 0x41, + 0x4e, 0x54, 0x5f, 0x4a, 0x4f, 0x49, 0x4e, 0x45, 0x44, 0x10, 0xc8, 0x01, 0x12, 0x1f, 0x0a, 0x1a, + 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x50, 0x41, 0x52, 0x54, 0x49, 0x43, + 0x49, 0x50, 0x41, 0x4e, 0x54, 0x5f, 0x4c, 0x45, 0x46, 0x54, 0x10, 0xc9, 0x01, 0x12, 0x18, 0x0a, + 0x13, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, + 0x4c, 0x45, 0x46, 0x54, 0x10, 0xca, 0x01, 0x12, 0x20, 0x0a, 0x1b, 0x54, 0x4f, 0x4d, 0x42, 0x53, + 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x52, 0x43, 0x53, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x43, + 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0xcb, 0x01, 0x12, 0x20, 0x0a, 0x1b, 0x54, 0x4f, 0x4d, + 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x4d, 0x4d, 0x53, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, + 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0xcc, 0x01, 0x12, 0x24, 0x0a, 0x1f, 0x54, + 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x53, 0x4d, 0x53, 0x5f, 0x42, 0x52, 0x4f, + 0x41, 0x44, 0x43, 0x41, 0x53, 0x54, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0xcd, + 0x01, 0x12, 0x25, 0x0a, 0x20, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x4f, + 0x4e, 0x45, 0x5f, 0x4f, 0x4e, 0x5f, 0x4f, 0x4e, 0x45, 0x5f, 0x53, 0x4d, 0x53, 0x5f, 0x43, 0x52, + 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0xce, 0x01, 0x12, 0x25, 0x0a, 0x20, 0x54, 0x4f, 0x4d, 0x42, + 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x4f, 0x4e, 0x45, 0x5f, 0x4f, 0x4e, 0x5f, 0x4f, 0x4e, 0x45, + 0x5f, 0x52, 0x43, 0x53, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0xcf, 0x01, 0x12, + 0x22, 0x0a, 0x1d, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x53, 0x57, 0x49, + 0x54, 0x43, 0x48, 0x5f, 0x54, 0x4f, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x4d, 0x4d, 0x53, + 0x10, 0xd0, 0x01, 0x12, 0x26, 0x0a, 0x21, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, + 0x5f, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x5f, 0x54, 0x4f, 0x5f, 0x42, 0x52, 0x4f, 0x41, 0x44, + 0x43, 0x41, 0x53, 0x54, 0x5f, 0x53, 0x4d, 0x53, 0x10, 0xd1, 0x01, 0x12, 0x21, 0x0a, 0x1c, 0x54, + 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x53, 0x48, 0x4f, 0x57, 0x5f, 0x4c, 0x49, + 0x4e, 0x4b, 0x5f, 0x50, 0x52, 0x45, 0x56, 0x49, 0x45, 0x57, 0x53, 0x10, 0xd2, 0x01, 0x12, 0x22, + 0x0a, 0x1d, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x47, 0x52, 0x4f, 0x55, + 0x50, 0x5f, 0x52, 0x45, 0x4e, 0x41, 0x4d, 0x45, 0x44, 0x5f, 0x4c, 0x4f, 0x43, 0x41, 0x4c, 0x10, + 0xd3, 0x01, 0x12, 0x26, 0x0a, 0x21, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, + 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, 0x45, 0x44, 0x5f, 0x53, 0x4d, 0x53, 0x5f, 0x41, 0x50, 0x50, + 0x4c, 0x49, 0x43, 0x41, 0x42, 0x4c, 0x45, 0x10, 0xd4, 0x01, 0x12, 0x2f, 0x0a, 0x2a, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x45, 0x4e, 0x43, 0x52, 0x59, 0x50, 0x54, 0x45, - 0x44, 0x5f, 0x52, 0x43, 0x53, 0x5f, 0x4e, 0x4f, 0x52, 0x4d, 0x5f, 0x50, 0x41, 0x52, 0x54, 0x49, - 0x43, 0x49, 0x50, 0x41, 0x4e, 0x54, 0x5f, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x45, 0x44, 0x10, - 0xe0, 0x01, 0x12, 0x40, 0x0a, 0x3b, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x54, - 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x45, - 0x4e, 0x43, 0x52, 0x59, 0x50, 0x54, 0x45, 0x44, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x50, - 0x41, 0x52, 0x54, 0x49, 0x43, 0x49, 0x50, 0x41, 0x4e, 0x54, 0x5f, 0x4a, 0x4f, 0x49, 0x4e, 0x45, - 0x44, 0x10, 0xe1, 0x01, 0x12, 0x45, 0x0a, 0x40, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, - 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, - 0x5f, 0x45, 0x4e, 0x43, 0x52, 0x59, 0x50, 0x54, 0x45, 0x44, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, - 0x5f, 0x50, 0x41, 0x52, 0x54, 0x49, 0x43, 0x49, 0x50, 0x41, 0x4e, 0x54, 0x5f, 0x4a, 0x4f, 0x49, - 0x4e, 0x45, 0x44, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe2, 0x01, 0x12, 0x3e, 0x0a, 0x39, 0x4d, - 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x4f, - 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x45, 0x4e, 0x43, 0x52, 0x59, 0x50, 0x54, 0x45, - 0x44, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x50, 0x41, 0x52, 0x54, 0x49, 0x43, 0x49, 0x50, - 0x41, 0x4e, 0x54, 0x5f, 0x4c, 0x45, 0x46, 0x54, 0x10, 0xe3, 0x01, 0x12, 0x37, 0x0a, 0x32, 0x4d, - 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x4f, - 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x45, 0x4e, 0x43, 0x52, 0x59, 0x50, 0x54, 0x45, - 0x44, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x4c, 0x45, 0x46, - 0x54, 0x10, 0xe4, 0x01, 0x12, 0x35, 0x0a, 0x30, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, - 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, - 0x5f, 0x45, 0x4e, 0x43, 0x52, 0x59, 0x50, 0x54, 0x45, 0x44, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, - 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0xe5, 0x01, 0x12, 0x3f, 0x0a, 0x3a, 0x4d, - 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x4f, - 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x53, 0x45, 0x4c, 0x46, 0x5f, 0x52, 0x45, 0x4d, - 0x4f, 0x56, 0x45, 0x44, 0x5f, 0x46, 0x52, 0x4f, 0x4d, 0x5f, 0x45, 0x4e, 0x43, 0x52, 0x59, 0x50, - 0x54, 0x45, 0x44, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x10, 0xe6, 0x01, 0x12, 0x46, 0x0a, 0x41, - 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, - 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x50, 0x41, 0x52, 0x54, 0x49, 0x43, 0x49, - 0x50, 0x41, 0x4e, 0x54, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x44, 0x5f, 0x46, 0x52, 0x4f, - 0x4d, 0x5f, 0x45, 0x4e, 0x43, 0x52, 0x59, 0x50, 0x54, 0x45, 0x44, 0x5f, 0x47, 0x52, 0x4f, 0x55, - 0x50, 0x10, 0xe7, 0x01, 0x12, 0x40, 0x0a, 0x3b, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, - 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, - 0x5f, 0x53, 0x55, 0x47, 0x47, 0x45, 0x53, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x48, 0x4f, 0x52, - 0x54, 0x43, 0x55, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x5f, 0x54, 0x4f, 0x4f, 0x4c, 0x53, 0x54, - 0x4f, 0x4e, 0x45, 0x10, 0xe8, 0x01, 0x12, 0x3f, 0x0a, 0x3a, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, - 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, - 0x4e, 0x45, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, - 0x4c, 0x5f, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x5f, 0x52, 0x43, 0x53, 0x5f, 0x54, 0x4f, 0x5f, - 0x45, 0x32, 0x45, 0x45, 0x10, 0xe9, 0x01, 0x12, 0x3f, 0x0a, 0x3a, 0x4d, 0x45, 0x53, 0x53, 0x41, - 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, - 0x4f, 0x4e, 0x45, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, - 0x4f, 0x4c, 0x5f, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x5f, 0x45, 0x32, 0x45, 0x45, 0x5f, 0x54, - 0x4f, 0x5f, 0x52, 0x43, 0x53, 0x10, 0xea, 0x01, 0x12, 0x3a, 0x0a, 0x35, 0x4d, 0x45, 0x53, 0x53, - 0x41, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x4f, 0x4d, 0x42, 0x53, - 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x53, 0x57, - 0x49, 0x54, 0x43, 0x48, 0x5f, 0x54, 0x45, 0x58, 0x54, 0x5f, 0x54, 0x4f, 0x5f, 0x45, 0x32, 0x45, - 0x45, 0x10, 0xeb, 0x01, 0x12, 0x3a, 0x0a, 0x35, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, - 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, + 0x44, 0x5f, 0x4f, 0x4e, 0x45, 0x5f, 0x4f, 0x4e, 0x5f, 0x4f, 0x4e, 0x45, 0x5f, 0x52, 0x43, 0x53, + 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0xd5, 0x01, 0x12, 0x26, 0x0a, 0x21, 0x54, + 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, + 0x4c, 0x5f, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x5f, 0x54, 0x4f, 0x5f, 0x54, 0x45, 0x58, 0x54, + 0x10, 0xd6, 0x01, 0x12, 0x25, 0x0a, 0x20, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, - 0x5f, 0x45, 0x32, 0x45, 0x45, 0x5f, 0x54, 0x4f, 0x5f, 0x54, 0x45, 0x58, 0x54, 0x10, 0xec, 0x01, + 0x5f, 0x54, 0x4f, 0x5f, 0x52, 0x43, 0x53, 0x10, 0xd7, 0x01, 0x12, 0x2f, 0x0a, 0x2a, 0x54, 0x4f, + 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, + 0x5f, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x5f, 0x54, 0x4f, 0x5f, 0x45, 0x4e, 0x43, 0x52, 0x59, + 0x50, 0x54, 0x45, 0x44, 0x5f, 0x52, 0x43, 0x53, 0x10, 0xd8, 0x01, 0x12, 0x23, 0x0a, 0x1e, 0x54, + 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x52, + 0x45, 0x4e, 0x41, 0x4d, 0x45, 0x44, 0x5f, 0x47, 0x4c, 0x4f, 0x42, 0x41, 0x4c, 0x10, 0xd9, 0x01, + 0x12, 0x28, 0x0a, 0x23, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x47, 0x52, + 0x4f, 0x55, 0x50, 0x5f, 0x4e, 0x41, 0x4d, 0x45, 0x5f, 0x43, 0x4c, 0x45, 0x41, 0x52, 0x45, 0x44, + 0x5f, 0x47, 0x4c, 0x4f, 0x42, 0x41, 0x4c, 0x10, 0xda, 0x01, 0x12, 0x34, 0x0a, 0x2f, 0x54, 0x4f, + 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, + 0x5f, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x5f, 0x54, 0x4f, 0x5f, 0x45, 0x4e, 0x43, 0x52, 0x59, + 0x50, 0x54, 0x45, 0x44, 0x5f, 0x52, 0x43, 0x53, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xdb, 0x01, + 0x12, 0x26, 0x0a, 0x21, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x53, 0x45, + 0x4c, 0x46, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x44, 0x5f, 0x46, 0x52, 0x4f, 0x4d, 0x5f, + 0x47, 0x52, 0x4f, 0x55, 0x50, 0x10, 0xdc, 0x01, 0x12, 0x3c, 0x0a, 0x37, 0x4d, 0x45, 0x53, 0x53, + 0x41, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x4f, 0x4d, 0x42, 0x53, + 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x50, 0x41, 0x52, 0x54, 0x49, 0x43, 0x49, 0x50, 0x41, 0x4e, 0x54, + 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x44, 0x5f, 0x46, 0x52, 0x4f, 0x4d, 0x5f, 0x47, 0x52, + 0x4f, 0x55, 0x50, 0x10, 0xdd, 0x01, 0x12, 0x3b, 0x0a, 0x36, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, + 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, + 0x4e, 0x45, 0x5f, 0x53, 0x4d, 0x53, 0x5f, 0x4e, 0x4f, 0x52, 0x4d, 0x5f, 0x50, 0x41, 0x52, 0x54, + 0x49, 0x43, 0x49, 0x50, 0x41, 0x4e, 0x54, 0x5f, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x45, 0x44, + 0x10, 0xde, 0x01, 0x12, 0x3b, 0x0a, 0x36, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x53, + 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, + 0x52, 0x43, 0x53, 0x5f, 0x4e, 0x4f, 0x52, 0x4d, 0x5f, 0x50, 0x41, 0x52, 0x54, 0x49, 0x43, 0x49, + 0x50, 0x41, 0x4e, 0x54, 0x5f, 0x55, 0x50, 0x47, 0x52, 0x41, 0x44, 0x45, 0x44, 0x10, 0xdf, 0x01, + 0x12, 0x45, 0x0a, 0x40, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x45, 0x4e, 0x43, + 0x52, 0x59, 0x50, 0x54, 0x45, 0x44, 0x5f, 0x52, 0x43, 0x53, 0x5f, 0x4e, 0x4f, 0x52, 0x4d, 0x5f, + 0x50, 0x41, 0x52, 0x54, 0x49, 0x43, 0x49, 0x50, 0x41, 0x4e, 0x54, 0x5f, 0x55, 0x50, 0x47, 0x52, + 0x41, 0x44, 0x45, 0x44, 0x10, 0xe0, 0x01, 0x12, 0x40, 0x0a, 0x3b, 0x4d, 0x45, 0x53, 0x53, 0x41, + 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, + 0x4f, 0x4e, 0x45, 0x5f, 0x45, 0x4e, 0x43, 0x52, 0x59, 0x50, 0x54, 0x45, 0x44, 0x5f, 0x47, 0x52, + 0x4f, 0x55, 0x50, 0x5f, 0x50, 0x41, 0x52, 0x54, 0x49, 0x43, 0x49, 0x50, 0x41, 0x4e, 0x54, 0x5f, + 0x4a, 0x4f, 0x49, 0x4e, 0x45, 0x44, 0x10, 0xe1, 0x01, 0x12, 0x45, 0x0a, 0x40, 0x4d, 0x45, 0x53, + 0x53, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x4f, 0x4d, 0x42, + 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x45, 0x4e, 0x43, 0x52, 0x59, 0x50, 0x54, 0x45, 0x44, 0x5f, + 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x50, 0x41, 0x52, 0x54, 0x49, 0x43, 0x49, 0x50, 0x41, 0x4e, + 0x54, 0x5f, 0x4a, 0x4f, 0x49, 0x4e, 0x45, 0x44, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x10, 0xe2, 0x01, + 0x12, 0x3e, 0x0a, 0x39, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x45, 0x4e, 0x43, + 0x52, 0x59, 0x50, 0x54, 0x45, 0x44, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x50, 0x41, 0x52, + 0x54, 0x49, 0x43, 0x49, 0x50, 0x41, 0x4e, 0x54, 0x5f, 0x4c, 0x45, 0x46, 0x54, 0x10, 0xe3, 0x01, + 0x12, 0x37, 0x0a, 0x32, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x45, 0x4e, 0x43, + 0x52, 0x59, 0x50, 0x54, 0x45, 0x44, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x53, 0x45, 0x4c, + 0x46, 0x5f, 0x4c, 0x45, 0x46, 0x54, 0x10, 0xe4, 0x01, 0x12, 0x35, 0x0a, 0x30, 0x4d, 0x45, 0x53, + 0x53, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x4f, 0x4d, 0x42, + 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x45, 0x4e, 0x43, 0x52, 0x59, 0x50, 0x54, 0x45, 0x44, 0x5f, + 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0xe5, 0x01, + 0x12, 0x3f, 0x0a, 0x3a, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, + 0x55, 0x53, 0x5f, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x53, 0x45, 0x4c, + 0x46, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, 0x44, 0x5f, 0x46, 0x52, 0x4f, 0x4d, 0x5f, 0x45, + 0x4e, 0x43, 0x52, 0x59, 0x50, 0x54, 0x45, 0x44, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x10, 0xe6, + 0x01, 0x12, 0x46, 0x0a, 0x41, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, + 0x54, 0x55, 0x53, 0x5f, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x50, 0x41, + 0x52, 0x54, 0x49, 0x43, 0x49, 0x50, 0x41, 0x4e, 0x54, 0x5f, 0x52, 0x45, 0x4d, 0x4f, 0x56, 0x45, + 0x44, 0x5f, 0x46, 0x52, 0x4f, 0x4d, 0x5f, 0x45, 0x4e, 0x43, 0x52, 0x59, 0x50, 0x54, 0x45, 0x44, + 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x10, 0xe7, 0x01, 0x12, 0x40, 0x0a, 0x3b, 0x4d, 0x45, 0x53, + 0x53, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x4f, 0x4d, 0x42, + 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x53, 0x55, 0x47, 0x47, 0x45, 0x53, 0x54, 0x49, 0x4f, 0x4e, + 0x5f, 0x53, 0x48, 0x4f, 0x52, 0x54, 0x43, 0x55, 0x54, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x5f, 0x54, + 0x4f, 0x4f, 0x4c, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x10, 0xe8, 0x01, 0x12, 0x3f, 0x0a, 0x3a, 0x4d, + 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x4f, + 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x50, 0x52, + 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x5f, 0x52, 0x43, + 0x53, 0x5f, 0x54, 0x4f, 0x5f, 0x45, 0x32, 0x45, 0x45, 0x10, 0xe9, 0x01, 0x12, 0x3f, 0x0a, 0x3a, + 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, + 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x50, + 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x5f, 0x45, + 0x32, 0x45, 0x45, 0x5f, 0x54, 0x4f, 0x5f, 0x52, 0x43, 0x53, 0x10, 0xea, 0x01, 0x12, 0x3a, 0x0a, + 0x35, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, + 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, + 0x4f, 0x4c, 0x5f, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x5f, 0x54, 0x45, 0x58, 0x54, 0x5f, 0x54, + 0x4f, 0x5f, 0x45, 0x32, 0x45, 0x45, 0x10, 0xeb, 0x01, 0x12, 0x3a, 0x0a, 0x35, 0x4d, 0x45, 0x53, + 0x53, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x4f, 0x4d, 0x42, + 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x53, + 0x57, 0x49, 0x54, 0x43, 0x48, 0x5f, 0x45, 0x32, 0x45, 0x45, 0x5f, 0x54, 0x4f, 0x5f, 0x54, 0x45, + 0x58, 0x54, 0x10, 0xec, 0x01, 0x12, 0x39, 0x0a, 0x34, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, + 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, + 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x53, 0x57, 0x49, 0x54, 0x43, + 0x48, 0x5f, 0x52, 0x43, 0x53, 0x5f, 0x54, 0x4f, 0x5f, 0x45, 0x32, 0x45, 0x45, 0x10, 0xed, 0x01, 0x12, 0x39, 0x0a, 0x34, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x50, 0x52, 0x4f, - 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x5f, 0x52, 0x43, 0x53, - 0x5f, 0x54, 0x4f, 0x5f, 0x45, 0x32, 0x45, 0x45, 0x10, 0xed, 0x01, 0x12, 0x39, 0x0a, 0x34, 0x4d, + 0x54, 0x4f, 0x43, 0x4f, 0x4c, 0x5f, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x5f, 0x45, 0x32, 0x45, + 0x45, 0x5f, 0x54, 0x4f, 0x5f, 0x52, 0x43, 0x53, 0x10, 0xee, 0x01, 0x12, 0x31, 0x0a, 0x2c, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x4f, - 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x43, 0x4f, 0x4c, - 0x5f, 0x53, 0x57, 0x49, 0x54, 0x43, 0x48, 0x5f, 0x45, 0x32, 0x45, 0x45, 0x5f, 0x54, 0x4f, 0x5f, - 0x52, 0x43, 0x53, 0x10, 0xee, 0x01, 0x12, 0x31, 0x0a, 0x2c, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, - 0x45, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x5f, 0x54, 0x4f, 0x4d, 0x42, 0x53, 0x54, 0x4f, - 0x4e, 0x45, 0x5f, 0x53, 0x41, 0x54, 0x45, 0x4c, 0x4c, 0x49, 0x54, 0x45, 0x5f, 0x45, 0x44, 0x55, - 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0xef, 0x01, 0x12, 0x14, 0x0a, 0x0f, 0x4d, 0x45, 0x53, - 0x53, 0x41, 0x47, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0xac, 0x02, 0x2a, - 0x50, 0x0a, 0x12, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x0e, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, - 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x55, 0x4e, 0x41, - 0x52, 0x43, 0x48, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x52, 0x43, 0x48, - 0x49, 0x56, 0x45, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x10, - 0x03, 0x2a, 0x63, 0x0a, 0x18, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x19, 0x0a, - 0x15, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x5f, - 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x55, 0x4e, 0x42, 0x4c, - 0x4f, 0x43, 0x4b, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x07, - 0x12, 0x14, 0x0a, 0x10, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x52, 0x45, - 0x50, 0x4f, 0x52, 0x54, 0x10, 0x08, 0x2a, 0x2e, 0x0a, 0x16, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, - 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x74, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x0a, 0x0a, 0x06, 0x55, 0x4e, 0x4d, 0x55, 0x54, 0x45, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, - 0x4d, 0x55, 0x54, 0x45, 0x10, 0x01, 0x2a, 0x79, 0x0a, 0x0f, 0x43, 0x6f, 0x6e, 0x76, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x10, 0x55, 0x4e, 0x4b, - 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x56, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, - 0x0e, 0x0a, 0x0a, 0x55, 0x4e, 0x41, 0x52, 0x43, 0x48, 0x49, 0x56, 0x45, 0x44, 0x10, 0x01, 0x12, - 0x0c, 0x0a, 0x08, 0x41, 0x52, 0x43, 0x48, 0x49, 0x56, 0x45, 0x44, 0x10, 0x02, 0x12, 0x0b, 0x0a, - 0x07, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x03, 0x12, 0x18, 0x0a, 0x14, 0x42, 0x4c, - 0x4f, 0x43, 0x4b, 0x45, 0x44, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x52, 0x54, - 0x45, 0x44, 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x45, 0x44, 0x10, - 0x06, 0x2a, 0x80, 0x06, 0x0a, 0x0c, 0x4d, 0x65, 0x64, 0x69, 0x61, 0x46, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x73, 0x12, 0x14, 0x0a, 0x10, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, - 0x44, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x4d, 0x41, 0x47, - 0x45, 0x5f, 0x4a, 0x50, 0x45, 0x47, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x49, 0x4d, 0x41, 0x47, - 0x45, 0x5f, 0x4a, 0x50, 0x47, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, 0x49, 0x4d, 0x41, 0x47, 0x45, - 0x5f, 0x50, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x5f, - 0x47, 0x49, 0x46, 0x10, 0x04, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x5f, 0x57, - 0x42, 0x4d, 0x50, 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x5f, 0x58, - 0x5f, 0x4d, 0x53, 0x5f, 0x42, 0x4d, 0x50, 0x10, 0x06, 0x12, 0x15, 0x0a, 0x11, 0x49, 0x4d, 0x41, - 0x47, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x07, - 0x12, 0x0d, 0x0a, 0x09, 0x56, 0x49, 0x44, 0x45, 0x4f, 0x5f, 0x4d, 0x50, 0x34, 0x10, 0x08, 0x12, - 0x0d, 0x0a, 0x09, 0x56, 0x49, 0x44, 0x45, 0x4f, 0x5f, 0x33, 0x47, 0x32, 0x10, 0x09, 0x12, 0x0e, - 0x0a, 0x0a, 0x56, 0x49, 0x44, 0x45, 0x4f, 0x5f, 0x33, 0x47, 0x50, 0x50, 0x10, 0x0a, 0x12, 0x0e, - 0x0a, 0x0a, 0x56, 0x49, 0x44, 0x45, 0x4f, 0x5f, 0x57, 0x45, 0x42, 0x4d, 0x10, 0x0b, 0x12, 0x0d, - 0x0a, 0x09, 0x56, 0x49, 0x44, 0x45, 0x4f, 0x5f, 0x4d, 0x4b, 0x56, 0x10, 0x0c, 0x12, 0x15, 0x0a, - 0x11, 0x56, 0x49, 0x44, 0x45, 0x4f, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, - 0x45, 0x44, 0x10, 0x0d, 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x55, 0x44, 0x49, 0x4f, 0x5f, 0x41, 0x41, - 0x43, 0x10, 0x0e, 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x55, 0x44, 0x49, 0x4f, 0x5f, 0x41, 0x4d, 0x52, - 0x10, 0x0f, 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x55, 0x44, 0x49, 0x4f, 0x5f, 0x4d, 0x50, 0x33, 0x10, - 0x10, 0x12, 0x0e, 0x0a, 0x0a, 0x41, 0x55, 0x44, 0x49, 0x4f, 0x5f, 0x4d, 0x50, 0x45, 0x47, 0x10, - 0x11, 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x55, 0x44, 0x49, 0x4f, 0x5f, 0x4d, 0x50, 0x47, 0x10, 0x12, - 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x55, 0x44, 0x49, 0x4f, 0x5f, 0x4d, 0x50, 0x34, 0x10, 0x13, 0x12, - 0x12, 0x0a, 0x0e, 0x41, 0x55, 0x44, 0x49, 0x4f, 0x5f, 0x4d, 0x50, 0x34, 0x5f, 0x4c, 0x41, 0x54, - 0x4d, 0x10, 0x14, 0x12, 0x0e, 0x0a, 0x0a, 0x41, 0x55, 0x44, 0x49, 0x4f, 0x5f, 0x33, 0x47, 0x50, - 0x50, 0x10, 0x15, 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x55, 0x44, 0x49, 0x4f, 0x5f, 0x4f, 0x47, 0x47, - 0x10, 0x16, 0x12, 0x15, 0x0a, 0x11, 0x41, 0x55, 0x44, 0x49, 0x4f, 0x5f, 0x55, 0x4e, 0x53, 0x50, - 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x17, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x45, 0x58, - 0x54, 0x5f, 0x56, 0x43, 0x41, 0x52, 0x44, 0x10, 0x18, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x50, 0x50, - 0x5f, 0x50, 0x44, 0x46, 0x10, 0x19, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x50, 0x50, 0x5f, 0x54, 0x58, - 0x54, 0x10, 0x1a, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x50, 0x50, 0x5f, 0x48, 0x54, 0x4d, 0x4c, 0x10, - 0x1b, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x50, 0x50, 0x5f, 0x44, 0x4f, 0x43, 0x10, 0x1c, 0x12, 0x0c, - 0x0a, 0x08, 0x41, 0x50, 0x50, 0x5f, 0x44, 0x4f, 0x43, 0x58, 0x10, 0x1d, 0x12, 0x0c, 0x0a, 0x08, - 0x41, 0x50, 0x50, 0x5f, 0x50, 0x50, 0x54, 0x58, 0x10, 0x1e, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x50, - 0x50, 0x5f, 0x50, 0x50, 0x54, 0x10, 0x1f, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x50, 0x50, 0x5f, 0x58, - 0x4c, 0x53, 0x58, 0x10, 0x20, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x50, 0x50, 0x5f, 0x58, 0x4c, 0x53, - 0x10, 0x21, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x50, 0x50, 0x5f, 0x41, 0x50, 0x4b, 0x10, 0x22, 0x12, - 0x0b, 0x0a, 0x07, 0x41, 0x50, 0x50, 0x5f, 0x5a, 0x49, 0x50, 0x10, 0x23, 0x12, 0x0b, 0x0a, 0x07, - 0x41, 0x50, 0x50, 0x5f, 0x4a, 0x41, 0x52, 0x10, 0x24, 0x12, 0x13, 0x0a, 0x0f, 0x41, 0x50, 0x50, - 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x25, 0x12, 0x16, - 0x0a, 0x12, 0x43, 0x41, 0x4c, 0x5f, 0x54, 0x45, 0x58, 0x54, 0x5f, 0x56, 0x43, 0x41, 0x4c, 0x45, - 0x4e, 0x44, 0x41, 0x52, 0x10, 0x26, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x41, 0x4c, 0x5f, 0x54, 0x45, - 0x58, 0x54, 0x5f, 0x58, 0x56, 0x43, 0x41, 0x4c, 0x45, 0x4e, 0x44, 0x41, 0x52, 0x10, 0x27, 0x12, - 0x15, 0x0a, 0x11, 0x43, 0x41, 0x4c, 0x5f, 0x54, 0x45, 0x58, 0x54, 0x5f, 0x43, 0x41, 0x4c, 0x45, - 0x4e, 0x44, 0x41, 0x52, 0x10, 0x28, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x41, 0x4c, 0x5f, 0x41, 0x50, - 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x56, 0x43, 0x53, 0x10, 0x29, 0x12, - 0x17, 0x0a, 0x13, 0x43, 0x41, 0x4c, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x49, 0x43, 0x53, 0x10, 0x2a, 0x12, 0x1a, 0x0a, 0x16, 0x43, 0x41, 0x4c, 0x5f, - 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x48, 0x42, 0x53, 0x56, - 0x43, 0x53, 0x10, 0x2b, 0x42, 0x0e, 0x5a, 0x0c, 0x2e, 0x2e, 0x2f, 0x2e, 0x2e, 0x2f, 0x62, 0x69, - 0x6e, 0x61, 0x72, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x4d, 0x42, 0x53, 0x54, 0x4f, 0x4e, 0x45, 0x5f, 0x53, 0x41, 0x54, 0x45, 0x4c, 0x4c, 0x49, 0x54, + 0x45, 0x5f, 0x45, 0x44, 0x55, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0xef, 0x01, 0x12, 0x14, + 0x0a, 0x0f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, + 0x44, 0x10, 0xac, 0x02, 0x2a, 0x50, 0x0a, 0x12, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x12, 0x0a, 0x0e, 0x55, 0x4e, + 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x10, 0x00, 0x12, 0x0d, + 0x0a, 0x09, 0x55, 0x4e, 0x41, 0x52, 0x43, 0x48, 0x49, 0x56, 0x45, 0x10, 0x01, 0x12, 0x0b, 0x0a, + 0x07, 0x41, 0x52, 0x43, 0x48, 0x49, 0x56, 0x45, 0x10, 0x02, 0x12, 0x0a, 0x0a, 0x06, 0x44, 0x45, + 0x4c, 0x45, 0x54, 0x45, 0x10, 0x03, 0x2a, 0x63, 0x0a, 0x18, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, + 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, + 0x75, 0x73, 0x12, 0x19, 0x0a, 0x15, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x41, 0x43, + 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x10, 0x00, 0x12, 0x0b, 0x0a, + 0x07, 0x55, 0x4e, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x10, 0x02, 0x12, 0x09, 0x0a, 0x05, 0x42, 0x4c, + 0x4f, 0x43, 0x4b, 0x10, 0x07, 0x12, 0x14, 0x0a, 0x10, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x5f, 0x41, + 0x4e, 0x44, 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x52, 0x54, 0x10, 0x08, 0x2a, 0x2e, 0x0a, 0x16, 0x43, + 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4d, 0x75, 0x74, 0x65, 0x53, + 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x0a, 0x0a, 0x06, 0x55, 0x4e, 0x4d, 0x55, 0x54, 0x45, 0x10, + 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4d, 0x55, 0x54, 0x45, 0x10, 0x01, 0x2a, 0x79, 0x0a, 0x0f, 0x43, + 0x6f, 0x6e, 0x76, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x14, + 0x0a, 0x10, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x43, 0x4f, 0x4e, 0x56, 0x54, 0x59, + 0x50, 0x45, 0x10, 0x00, 0x12, 0x0e, 0x0a, 0x0a, 0x55, 0x4e, 0x41, 0x52, 0x43, 0x48, 0x49, 0x56, + 0x45, 0x44, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x52, 0x43, 0x48, 0x49, 0x56, 0x45, 0x44, + 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x44, 0x10, 0x03, 0x12, + 0x18, 0x0a, 0x14, 0x42, 0x4c, 0x4f, 0x43, 0x4b, 0x45, 0x44, 0x5f, 0x41, 0x4e, 0x44, 0x5f, 0x52, + 0x45, 0x50, 0x4f, 0x52, 0x54, 0x45, 0x44, 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x42, 0x4c, 0x4f, + 0x43, 0x4b, 0x45, 0x44, 0x10, 0x06, 0x2a, 0x80, 0x06, 0x0a, 0x0c, 0x4d, 0x65, 0x64, 0x69, 0x61, + 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x73, 0x12, 0x14, 0x0a, 0x10, 0x55, 0x4e, 0x53, 0x50, 0x45, + 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x0e, 0x0a, + 0x0a, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x5f, 0x4a, 0x50, 0x45, 0x47, 0x10, 0x01, 0x12, 0x0d, 0x0a, + 0x09, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x5f, 0x4a, 0x50, 0x47, 0x10, 0x02, 0x12, 0x0d, 0x0a, 0x09, + 0x49, 0x4d, 0x41, 0x47, 0x45, 0x5f, 0x50, 0x4e, 0x47, 0x10, 0x03, 0x12, 0x0d, 0x0a, 0x09, 0x49, + 0x4d, 0x41, 0x47, 0x45, 0x5f, 0x47, 0x49, 0x46, 0x10, 0x04, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x4d, + 0x41, 0x47, 0x45, 0x5f, 0x57, 0x42, 0x4d, 0x50, 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x49, 0x4d, + 0x41, 0x47, 0x45, 0x5f, 0x58, 0x5f, 0x4d, 0x53, 0x5f, 0x42, 0x4d, 0x50, 0x10, 0x06, 0x12, 0x15, + 0x0a, 0x11, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, + 0x49, 0x45, 0x44, 0x10, 0x07, 0x12, 0x0d, 0x0a, 0x09, 0x56, 0x49, 0x44, 0x45, 0x4f, 0x5f, 0x4d, + 0x50, 0x34, 0x10, 0x08, 0x12, 0x0d, 0x0a, 0x09, 0x56, 0x49, 0x44, 0x45, 0x4f, 0x5f, 0x33, 0x47, + 0x32, 0x10, 0x09, 0x12, 0x0e, 0x0a, 0x0a, 0x56, 0x49, 0x44, 0x45, 0x4f, 0x5f, 0x33, 0x47, 0x50, + 0x50, 0x10, 0x0a, 0x12, 0x0e, 0x0a, 0x0a, 0x56, 0x49, 0x44, 0x45, 0x4f, 0x5f, 0x57, 0x45, 0x42, + 0x4d, 0x10, 0x0b, 0x12, 0x0d, 0x0a, 0x09, 0x56, 0x49, 0x44, 0x45, 0x4f, 0x5f, 0x4d, 0x4b, 0x56, + 0x10, 0x0c, 0x12, 0x15, 0x0a, 0x11, 0x56, 0x49, 0x44, 0x45, 0x4f, 0x5f, 0x55, 0x4e, 0x53, 0x50, + 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x0d, 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x55, 0x44, + 0x49, 0x4f, 0x5f, 0x41, 0x41, 0x43, 0x10, 0x0e, 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x55, 0x44, 0x49, + 0x4f, 0x5f, 0x41, 0x4d, 0x52, 0x10, 0x0f, 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x55, 0x44, 0x49, 0x4f, + 0x5f, 0x4d, 0x50, 0x33, 0x10, 0x10, 0x12, 0x0e, 0x0a, 0x0a, 0x41, 0x55, 0x44, 0x49, 0x4f, 0x5f, + 0x4d, 0x50, 0x45, 0x47, 0x10, 0x11, 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x55, 0x44, 0x49, 0x4f, 0x5f, + 0x4d, 0x50, 0x47, 0x10, 0x12, 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x55, 0x44, 0x49, 0x4f, 0x5f, 0x4d, + 0x50, 0x34, 0x10, 0x13, 0x12, 0x12, 0x0a, 0x0e, 0x41, 0x55, 0x44, 0x49, 0x4f, 0x5f, 0x4d, 0x50, + 0x34, 0x5f, 0x4c, 0x41, 0x54, 0x4d, 0x10, 0x14, 0x12, 0x0e, 0x0a, 0x0a, 0x41, 0x55, 0x44, 0x49, + 0x4f, 0x5f, 0x33, 0x47, 0x50, 0x50, 0x10, 0x15, 0x12, 0x0d, 0x0a, 0x09, 0x41, 0x55, 0x44, 0x49, + 0x4f, 0x5f, 0x4f, 0x47, 0x47, 0x10, 0x16, 0x12, 0x15, 0x0a, 0x11, 0x41, 0x55, 0x44, 0x49, 0x4f, + 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x17, 0x12, 0x0e, + 0x0a, 0x0a, 0x54, 0x45, 0x58, 0x54, 0x5f, 0x56, 0x43, 0x41, 0x52, 0x44, 0x10, 0x18, 0x12, 0x0b, + 0x0a, 0x07, 0x41, 0x50, 0x50, 0x5f, 0x50, 0x44, 0x46, 0x10, 0x19, 0x12, 0x0b, 0x0a, 0x07, 0x41, + 0x50, 0x50, 0x5f, 0x54, 0x58, 0x54, 0x10, 0x1a, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x50, 0x50, 0x5f, + 0x48, 0x54, 0x4d, 0x4c, 0x10, 0x1b, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x50, 0x50, 0x5f, 0x44, 0x4f, + 0x43, 0x10, 0x1c, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x50, 0x50, 0x5f, 0x44, 0x4f, 0x43, 0x58, 0x10, + 0x1d, 0x12, 0x0c, 0x0a, 0x08, 0x41, 0x50, 0x50, 0x5f, 0x50, 0x50, 0x54, 0x58, 0x10, 0x1e, 0x12, + 0x0b, 0x0a, 0x07, 0x41, 0x50, 0x50, 0x5f, 0x50, 0x50, 0x54, 0x10, 0x1f, 0x12, 0x0c, 0x0a, 0x08, + 0x41, 0x50, 0x50, 0x5f, 0x58, 0x4c, 0x53, 0x58, 0x10, 0x20, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x50, + 0x50, 0x5f, 0x58, 0x4c, 0x53, 0x10, 0x21, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x50, 0x50, 0x5f, 0x41, + 0x50, 0x4b, 0x10, 0x22, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x50, 0x50, 0x5f, 0x5a, 0x49, 0x50, 0x10, + 0x23, 0x12, 0x0b, 0x0a, 0x07, 0x41, 0x50, 0x50, 0x5f, 0x4a, 0x41, 0x52, 0x10, 0x24, 0x12, 0x13, + 0x0a, 0x0f, 0x41, 0x50, 0x50, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, + 0x44, 0x10, 0x25, 0x12, 0x16, 0x0a, 0x12, 0x43, 0x41, 0x4c, 0x5f, 0x54, 0x45, 0x58, 0x54, 0x5f, + 0x56, 0x43, 0x41, 0x4c, 0x45, 0x4e, 0x44, 0x41, 0x52, 0x10, 0x26, 0x12, 0x17, 0x0a, 0x13, 0x43, + 0x41, 0x4c, 0x5f, 0x54, 0x45, 0x58, 0x54, 0x5f, 0x58, 0x56, 0x43, 0x41, 0x4c, 0x45, 0x4e, 0x44, + 0x41, 0x52, 0x10, 0x27, 0x12, 0x15, 0x0a, 0x11, 0x43, 0x41, 0x4c, 0x5f, 0x54, 0x45, 0x58, 0x54, + 0x5f, 0x43, 0x41, 0x4c, 0x45, 0x4e, 0x44, 0x41, 0x52, 0x10, 0x28, 0x12, 0x17, 0x0a, 0x13, 0x43, + 0x41, 0x4c, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x56, + 0x43, 0x53, 0x10, 0x29, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x41, 0x4c, 0x5f, 0x41, 0x50, 0x50, 0x4c, + 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x49, 0x43, 0x53, 0x10, 0x2a, 0x12, 0x1a, 0x0a, + 0x16, 0x43, 0x41, 0x4c, 0x5f, 0x41, 0x50, 0x50, 0x4c, 0x49, 0x43, 0x41, 0x54, 0x49, 0x4f, 0x4e, + 0x5f, 0x48, 0x42, 0x53, 0x56, 0x43, 0x53, 0x10, 0x2b, 0x42, 0x0e, 0x5a, 0x0c, 0x2e, 0x2e, 0x2f, + 0x2e, 0x2e, 0x2f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x33, } var ( @@ -3695,92 +4190,104 @@ func file_conversations_proto_rawDescGZIP() []byte { return file_conversations_proto_rawDescData } -var file_conversations_proto_enumTypes = make([]protoimpl.EnumInfo, 8) -var file_conversations_proto_msgTypes = make([]protoimpl.MessageInfo, 34) +var file_conversations_proto_enumTypes = make([]protoimpl.EnumInfo, 9) +var file_conversations_proto_msgTypes = make([]protoimpl.MessageInfo, 40) var file_conversations_proto_goTypes = []interface{}{ - (ConversationType)(0), // 0: conversations.ConversationType - (MessageStatusType)(0), // 1: conversations.MessageStatusType - (ConversationStatus)(0), // 2: conversations.ConversationStatus - (ConversationActionStatus)(0), // 3: conversations.ConversationActionStatus - (ConversationMuteStatus)(0), // 4: conversations.ConversationMuteStatus - (ConvUpdateTypes)(0), // 5: conversations.ConvUpdateTypes - (MediaFormats)(0), // 6: conversations.MediaFormats - (ListConversationsPayload_Folder)(0), // 7: conversations.ListConversationsPayload.Folder - (*GetParticipantThumbnailPayload)(nil), // 8: conversations.GetParticipantThumbnailPayload - (*ResendMessagePayload)(nil), // 9: conversations.ResendMessagePayload - (*ConversationTypePayload)(nil), // 10: conversations.ConversationTypePayload - (*TypingUpdatePayload)(nil), // 11: conversations.TypingUpdatePayload - (*SetTypingIn)(nil), // 12: conversations.SetTypingIn - (*UpdateConversationPayload)(nil), // 13: conversations.UpdateConversationPayload - (*ConversationAction5)(nil), // 14: conversations.ConversationAction5 - (*UpdateConversationData)(nil), // 15: conversations.UpdateConversationData - (*DeleteMessagePayload)(nil), // 16: conversations.DeleteMessagePayload - (*SendMessagePayload)(nil), // 17: conversations.SendMessagePayload - (*ReplyPayload)(nil), // 18: conversations.ReplyPayload - (*MessagePayload)(nil), // 19: conversations.MessagePayload - (*MessagePayloadContent)(nil), // 20: conversations.MessagePayloadContent - (*OpenConversationPayload)(nil), // 21: conversations.OpenConversationPayload - (*PrepareOpenConversationPayload)(nil), // 22: conversations.PrepareOpenConversationPayload - (*FetchConversationMessagesPayload)(nil), // 23: conversations.FetchConversationMessagesPayload - (*ListConversationsPayload)(nil), // 24: conversations.ListConversationsPayload - (*Cursor)(nil), // 25: conversations.Cursor - (*Message)(nil), // 26: conversations.Message - (*ReplyMessage)(nil), // 27: conversations.ReplyMessage - (*ReplyMessageData)(nil), // 28: conversations.ReplyMessageData - (*MessageInfo)(nil), // 29: conversations.MessageInfo - (*MediaContent)(nil), // 30: conversations.MediaContent - (*Pixels)(nil), // 31: conversations.Pixels - (*MessageContent)(nil), // 32: conversations.MessageContent - (*MsgType)(nil), // 33: conversations.MsgType - (*MessageStatus)(nil), // 34: conversations.MessageStatus - (*Conversations)(nil), // 35: conversations.Conversations - (*Conversation)(nil), // 36: conversations.Conversation - (*Participant)(nil), // 37: conversations.Participant - (*SmallInfo)(nil), // 38: conversations.SmallInfo - (*LatestMessage)(nil), // 39: conversations.LatestMessage - (*LatestMessageStatus)(nil), // 40: conversations.LatestMessageStatus - (*Muted)(nil), // 41: conversations.Muted - (*ReactionResponse)(nil), // 42: reactions.ReactionResponse + (IdentifierType)(0), // 0: conversations.IdentifierType + (ConversationType)(0), // 1: conversations.ConversationType + (MessageStatusType)(0), // 2: conversations.MessageStatusType + (ConversationStatus)(0), // 3: conversations.ConversationStatus + (ConversationActionStatus)(0), // 4: conversations.ConversationActionStatus + (ConversationMuteStatus)(0), // 5: conversations.ConversationMuteStatus + (ConvUpdateTypes)(0), // 6: conversations.ConvUpdateTypes + (MediaFormats)(0), // 7: conversations.MediaFormats + (ListConversationsPayload_Folder)(0), // 8: conversations.ListConversationsPayload.Folder + (*GetParticipantThumbnailPayload)(nil), // 9: conversations.GetParticipantThumbnailPayload + (*ListContactsPayload)(nil), // 10: conversations.ListContactsPayload + (*ListTopContactsPayload)(nil), // 11: conversations.ListTopContactsPayload + (*GetContactsThumbnailPayload)(nil), // 12: conversations.GetContactsThumbnailPayload + (*Contact)(nil), // 13: conversations.Contact + (*ContactNumber)(nil), // 14: conversations.ContactNumber + (*GetOrCreateConversationPayload)(nil), // 15: conversations.GetOrCreateConversationPayload + (*ResendMessagePayload)(nil), // 16: conversations.ResendMessagePayload + (*ConversationTypePayload)(nil), // 17: conversations.ConversationTypePayload + (*TypingUpdatePayload)(nil), // 18: conversations.TypingUpdatePayload + (*SetTypingIn)(nil), // 19: conversations.SetTypingIn + (*UpdateConversationPayload)(nil), // 20: conversations.UpdateConversationPayload + (*ConversationAction5)(nil), // 21: conversations.ConversationAction5 + (*UpdateConversationData)(nil), // 22: conversations.UpdateConversationData + (*DeleteMessagePayload)(nil), // 23: conversations.DeleteMessagePayload + (*SendMessagePayload)(nil), // 24: conversations.SendMessagePayload + (*ReplyPayload)(nil), // 25: conversations.ReplyPayload + (*MessagePayload)(nil), // 26: conversations.MessagePayload + (*MessagePayloadContent)(nil), // 27: conversations.MessagePayloadContent + (*OpenConversationPayload)(nil), // 28: conversations.OpenConversationPayload + (*PrepareOpenConversationPayload)(nil), // 29: conversations.PrepareOpenConversationPayload + (*FetchConversationMessagesPayload)(nil), // 30: conversations.FetchConversationMessagesPayload + (*ListConversationsPayload)(nil), // 31: conversations.ListConversationsPayload + (*Cursor)(nil), // 32: conversations.Cursor + (*Message)(nil), // 33: conversations.Message + (*ReplyMessage)(nil), // 34: conversations.ReplyMessage + (*ReplyMessageData)(nil), // 35: conversations.ReplyMessageData + (*MessageInfo)(nil), // 36: conversations.MessageInfo + (*MediaContent)(nil), // 37: conversations.MediaContent + (*Pixels)(nil), // 38: conversations.Pixels + (*MessageContent)(nil), // 39: conversations.MessageContent + (*MsgType)(nil), // 40: conversations.MsgType + (*MessageStatus)(nil), // 41: conversations.MessageStatus + (*Conversations)(nil), // 42: conversations.Conversations + (*Conversation)(nil), // 43: conversations.Conversation + (*Participant)(nil), // 44: conversations.Participant + (*SmallInfo)(nil), // 45: conversations.SmallInfo + (*LatestMessage)(nil), // 46: conversations.LatestMessage + (*LatestMessageStatus)(nil), // 47: conversations.LatestMessageStatus + (*Muted)(nil), // 48: conversations.Muted + (*ReactionResponse)(nil), // 49: reactions.ReactionResponse } var file_conversations_proto_depIdxs = []int32{ - 12, // 0: conversations.TypingUpdatePayload.data:type_name -> conversations.SetTypingIn - 15, // 1: conversations.UpdateConversationPayload.data:type_name -> conversations.UpdateConversationData - 3, // 2: conversations.UpdateConversationPayload.action:type_name -> conversations.ConversationActionStatus - 14, // 3: conversations.UpdateConversationPayload.action5:type_name -> conversations.ConversationAction5 - 2, // 4: conversations.UpdateConversationData.status:type_name -> conversations.ConversationStatus - 4, // 5: conversations.UpdateConversationData.mute:type_name -> conversations.ConversationMuteStatus - 19, // 6: conversations.SendMessagePayload.messagePayload:type_name -> conversations.MessagePayload - 18, // 7: conversations.SendMessagePayload.reply:type_name -> conversations.ReplyPayload - 20, // 8: conversations.MessagePayload.messagePayloadContent:type_name -> conversations.MessagePayloadContent - 29, // 9: conversations.MessagePayload.messageInfo:type_name -> conversations.MessageInfo - 32, // 10: conversations.MessagePayloadContent.messageContent:type_name -> conversations.MessageContent - 25, // 11: conversations.FetchConversationMessagesPayload.cursor:type_name -> conversations.Cursor - 7, // 12: conversations.ListConversationsPayload.folder:type_name -> conversations.ListConversationsPayload.Folder - 33, // 13: conversations.Message.msgType:type_name -> conversations.MsgType - 34, // 14: conversations.Message.messageStatus:type_name -> conversations.MessageStatus - 29, // 15: conversations.Message.messageInfo:type_name -> conversations.MessageInfo - 42, // 16: conversations.Message.reactions:type_name -> reactions.ReactionResponse - 27, // 17: conversations.Message.replyMessage:type_name -> conversations.ReplyMessage - 28, // 18: conversations.ReplyMessage.replyMessageData:type_name -> conversations.ReplyMessageData - 32, // 19: conversations.MessageInfo.messageContent:type_name -> conversations.MessageContent - 30, // 20: conversations.MessageInfo.mediaContent:type_name -> conversations.MediaContent - 6, // 21: conversations.MediaContent.format:type_name -> conversations.MediaFormats - 31, // 22: conversations.MediaContent.pixels:type_name -> conversations.Pixels - 1, // 23: conversations.MessageStatus.status:type_name -> conversations.MessageStatusType - 36, // 24: conversations.Conversations.conversations:type_name -> conversations.Conversation - 39, // 25: conversations.Conversation.latestMessage:type_name -> conversations.LatestMessage - 5, // 26: conversations.Conversation.status:type_name -> conversations.ConvUpdateTypes - 37, // 27: conversations.Conversation.participants:type_name -> conversations.Participant - 0, // 28: conversations.Conversation.type:type_name -> conversations.ConversationType - 38, // 29: conversations.Participant.ID:type_name -> conversations.SmallInfo - 41, // 30: conversations.Participant.muted:type_name -> conversations.Muted - 40, // 31: conversations.LatestMessage.latestMessageStatus:type_name -> conversations.LatestMessageStatus - 1, // 32: conversations.LatestMessageStatus.status:type_name -> conversations.MessageStatusType - 33, // [33:33] is the sub-list for method output_type - 33, // [33:33] is the sub-list for method input_type - 33, // [33:33] is the sub-list for extension type_name - 33, // [33:33] is the sub-list for extension extendee - 0, // [0:33] is the sub-list for field type_name + 14, // 0: conversations.Contact.number:type_name -> conversations.ContactNumber + 14, // 1: conversations.GetOrCreateConversationPayload.numbers:type_name -> conversations.ContactNumber + 19, // 2: conversations.TypingUpdatePayload.data:type_name -> conversations.SetTypingIn + 22, // 3: conversations.UpdateConversationPayload.data:type_name -> conversations.UpdateConversationData + 4, // 4: conversations.UpdateConversationPayload.action:type_name -> conversations.ConversationActionStatus + 21, // 5: conversations.UpdateConversationPayload.action5:type_name -> conversations.ConversationAction5 + 3, // 6: conversations.UpdateConversationData.status:type_name -> conversations.ConversationStatus + 5, // 7: conversations.UpdateConversationData.mute:type_name -> conversations.ConversationMuteStatus + 26, // 8: conversations.SendMessagePayload.messagePayload:type_name -> conversations.MessagePayload + 25, // 9: conversations.SendMessagePayload.reply:type_name -> conversations.ReplyPayload + 27, // 10: conversations.MessagePayload.messagePayloadContent:type_name -> conversations.MessagePayloadContent + 36, // 11: conversations.MessagePayload.messageInfo:type_name -> conversations.MessageInfo + 39, // 12: conversations.MessagePayloadContent.messageContent:type_name -> conversations.MessageContent + 32, // 13: conversations.FetchConversationMessagesPayload.cursor:type_name -> conversations.Cursor + 8, // 14: conversations.ListConversationsPayload.folder:type_name -> conversations.ListConversationsPayload.Folder + 32, // 15: conversations.ListConversationsPayload.cursor:type_name -> conversations.Cursor + 40, // 16: conversations.Message.msgType:type_name -> conversations.MsgType + 41, // 17: conversations.Message.messageStatus:type_name -> conversations.MessageStatus + 36, // 18: conversations.Message.messageInfo:type_name -> conversations.MessageInfo + 49, // 19: conversations.Message.reactions:type_name -> reactions.ReactionResponse + 34, // 20: conversations.Message.replyMessage:type_name -> conversations.ReplyMessage + 35, // 21: conversations.ReplyMessage.replyMessageData:type_name -> conversations.ReplyMessageData + 39, // 22: conversations.MessageInfo.messageContent:type_name -> conversations.MessageContent + 37, // 23: conversations.MessageInfo.mediaContent:type_name -> conversations.MediaContent + 7, // 24: conversations.MediaContent.format:type_name -> conversations.MediaFormats + 38, // 25: conversations.MediaContent.pixels:type_name -> conversations.Pixels + 2, // 26: conversations.MessageStatus.status:type_name -> conversations.MessageStatusType + 43, // 27: conversations.Conversations.conversations:type_name -> conversations.Conversation + 32, // 28: conversations.Conversations.cursor:type_name -> conversations.Cursor + 46, // 29: conversations.Conversation.latestMessage:type_name -> conversations.LatestMessage + 6, // 30: conversations.Conversation.status:type_name -> conversations.ConvUpdateTypes + 44, // 31: conversations.Conversation.participants:type_name -> conversations.Participant + 1, // 32: conversations.Conversation.type:type_name -> conversations.ConversationType + 45, // 33: conversations.Participant.ID:type_name -> conversations.SmallInfo + 48, // 34: conversations.Participant.muted:type_name -> conversations.Muted + 0, // 35: conversations.SmallInfo.type:type_name -> conversations.IdentifierType + 47, // 36: conversations.LatestMessage.latestMessageStatus:type_name -> conversations.LatestMessageStatus + 2, // 37: conversations.LatestMessageStatus.status:type_name -> conversations.MessageStatusType + 38, // [38:38] is the sub-list for method output_type + 38, // [38:38] is the sub-list for method input_type + 38, // [38:38] is the sub-list for extension type_name + 38, // [38:38] is the sub-list for extension extendee + 0, // [0:38] is the sub-list for field type_name } func init() { file_conversations_proto_init() } @@ -3803,7 +4310,7 @@ func file_conversations_proto_init() { } } file_conversations_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ResendMessagePayload); i { + switch v := v.(*ListContactsPayload); i { case 0: return &v.state case 1: @@ -3815,7 +4322,7 @@ func file_conversations_proto_init() { } } file_conversations_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ConversationTypePayload); i { + switch v := v.(*ListTopContactsPayload); i { case 0: return &v.state case 1: @@ -3827,7 +4334,7 @@ func file_conversations_proto_init() { } } file_conversations_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*TypingUpdatePayload); i { + switch v := v.(*GetContactsThumbnailPayload); i { case 0: return &v.state case 1: @@ -3839,7 +4346,7 @@ func file_conversations_proto_init() { } } file_conversations_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SetTypingIn); i { + switch v := v.(*Contact); i { case 0: return &v.state case 1: @@ -3851,7 +4358,7 @@ func file_conversations_proto_init() { } } file_conversations_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateConversationPayload); i { + switch v := v.(*ContactNumber); i { case 0: return &v.state case 1: @@ -3863,7 +4370,7 @@ func file_conversations_proto_init() { } } file_conversations_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ConversationAction5); i { + switch v := v.(*GetOrCreateConversationPayload); i { case 0: return &v.state case 1: @@ -3875,7 +4382,7 @@ func file_conversations_proto_init() { } } file_conversations_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateConversationData); i { + switch v := v.(*ResendMessagePayload); i { case 0: return &v.state case 1: @@ -3887,7 +4394,7 @@ func file_conversations_proto_init() { } } file_conversations_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteMessagePayload); i { + switch v := v.(*ConversationTypePayload); i { case 0: return &v.state case 1: @@ -3899,7 +4406,7 @@ func file_conversations_proto_init() { } } file_conversations_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SendMessagePayload); i { + switch v := v.(*TypingUpdatePayload); i { case 0: return &v.state case 1: @@ -3911,7 +4418,7 @@ func file_conversations_proto_init() { } } file_conversations_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReplyPayload); i { + switch v := v.(*SetTypingIn); i { case 0: return &v.state case 1: @@ -3923,7 +4430,7 @@ func file_conversations_proto_init() { } } file_conversations_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MessagePayload); i { + switch v := v.(*UpdateConversationPayload); i { case 0: return &v.state case 1: @@ -3935,7 +4442,7 @@ func file_conversations_proto_init() { } } file_conversations_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MessagePayloadContent); i { + switch v := v.(*ConversationAction5); i { case 0: return &v.state case 1: @@ -3947,7 +4454,7 @@ func file_conversations_proto_init() { } } file_conversations_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*OpenConversationPayload); i { + switch v := v.(*UpdateConversationData); i { case 0: return &v.state case 1: @@ -3959,7 +4466,7 @@ func file_conversations_proto_init() { } } file_conversations_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PrepareOpenConversationPayload); i { + switch v := v.(*DeleteMessagePayload); i { case 0: return &v.state case 1: @@ -3971,7 +4478,7 @@ func file_conversations_proto_init() { } } file_conversations_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*FetchConversationMessagesPayload); i { + switch v := v.(*SendMessagePayload); i { case 0: return &v.state case 1: @@ -3983,7 +4490,7 @@ func file_conversations_proto_init() { } } file_conversations_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ListConversationsPayload); i { + switch v := v.(*ReplyPayload); i { case 0: return &v.state case 1: @@ -3995,7 +4502,7 @@ func file_conversations_proto_init() { } } file_conversations_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Cursor); i { + switch v := v.(*MessagePayload); i { case 0: return &v.state case 1: @@ -4007,7 +4514,7 @@ func file_conversations_proto_init() { } } file_conversations_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Message); i { + switch v := v.(*MessagePayloadContent); i { case 0: return &v.state case 1: @@ -4019,7 +4526,7 @@ func file_conversations_proto_init() { } } file_conversations_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReplyMessage); i { + switch v := v.(*OpenConversationPayload); i { case 0: return &v.state case 1: @@ -4031,7 +4538,7 @@ func file_conversations_proto_init() { } } file_conversations_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*ReplyMessageData); i { + switch v := v.(*PrepareOpenConversationPayload); i { case 0: return &v.state case 1: @@ -4043,7 +4550,7 @@ func file_conversations_proto_init() { } } file_conversations_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MessageInfo); i { + switch v := v.(*FetchConversationMessagesPayload); i { case 0: return &v.state case 1: @@ -4055,7 +4562,7 @@ func file_conversations_proto_init() { } } file_conversations_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MediaContent); i { + switch v := v.(*ListConversationsPayload); i { case 0: return &v.state case 1: @@ -4067,7 +4574,7 @@ func file_conversations_proto_init() { } } file_conversations_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Pixels); i { + switch v := v.(*Cursor); i { case 0: return &v.state case 1: @@ -4079,7 +4586,7 @@ func file_conversations_proto_init() { } } file_conversations_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MessageContent); i { + switch v := v.(*Message); i { case 0: return &v.state case 1: @@ -4091,7 +4598,7 @@ func file_conversations_proto_init() { } } file_conversations_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MsgType); i { + switch v := v.(*ReplyMessage); i { case 0: return &v.state case 1: @@ -4103,7 +4610,7 @@ func file_conversations_proto_init() { } } file_conversations_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*MessageStatus); i { + switch v := v.(*ReplyMessageData); i { case 0: return &v.state case 1: @@ -4115,7 +4622,7 @@ func file_conversations_proto_init() { } } file_conversations_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Conversations); i { + switch v := v.(*MessageInfo); i { case 0: return &v.state case 1: @@ -4127,7 +4634,7 @@ func file_conversations_proto_init() { } } file_conversations_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Conversation); i { + switch v := v.(*MediaContent); i { case 0: return &v.state case 1: @@ -4139,7 +4646,7 @@ func file_conversations_proto_init() { } } file_conversations_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Participant); i { + switch v := v.(*Pixels); i { case 0: return &v.state case 1: @@ -4151,7 +4658,7 @@ func file_conversations_proto_init() { } } file_conversations_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SmallInfo); i { + switch v := v.(*MessageContent); i { case 0: return &v.state case 1: @@ -4163,7 +4670,7 @@ func file_conversations_proto_init() { } } file_conversations_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LatestMessage); i { + switch v := v.(*MsgType); i { case 0: return &v.state case 1: @@ -4175,7 +4682,7 @@ func file_conversations_proto_init() { } } file_conversations_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LatestMessageStatus); i { + switch v := v.(*MessageStatus); i { case 0: return &v.state case 1: @@ -4187,6 +4694,78 @@ func file_conversations_proto_init() { } } file_conversations_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Conversations); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_conversations_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Conversation); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_conversations_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*Participant); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_conversations_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*SmallInfo); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_conversations_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LatestMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_conversations_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LatestMessageStatus); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_conversations_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*Muted); i { case 0: return &v.state @@ -4199,22 +4778,25 @@ func file_conversations_proto_init() { } } } - file_conversations_proto_msgTypes[7].OneofWrappers = []interface{}{ + file_conversations_proto_msgTypes[5].OneofWrappers = []interface{}{} + file_conversations_proto_msgTypes[13].OneofWrappers = []interface{}{ (*UpdateConversationData_Status)(nil), (*UpdateConversationData_Mute)(nil), } - file_conversations_proto_msgTypes[18].OneofWrappers = []interface{}{} - file_conversations_proto_msgTypes[21].OneofWrappers = []interface{}{ + file_conversations_proto_msgTypes[22].OneofWrappers = []interface{}{} + file_conversations_proto_msgTypes[24].OneofWrappers = []interface{}{} + file_conversations_proto_msgTypes[27].OneofWrappers = []interface{}{ (*MessageInfo_MessageContent)(nil), (*MessageInfo_MediaContent)(nil), } + file_conversations_proto_msgTypes[33].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_conversations_proto_rawDesc, - NumEnums: 8, - NumMessages: 34, + NumEnums: 9, + NumMessages: 40, NumExtensions: 0, NumServices: 0, }, diff --git a/libgm/binary/raw/conversations.proto b/libgm/binary/raw/conversations.proto index 095e144..fdd4c41 100644 --- a/libgm/binary/raw/conversations.proto +++ b/libgm/binary/raw/conversations.proto @@ -9,6 +9,41 @@ message GetParticipantThumbnailPayload { string conversationID = 1; } +message ListContactsPayload { + int32 i1 = 5; // = 1 + int32 i2 = 6; // = 350 + int32 i3 = 7; // = 50 +} + +message ListTopContactsPayload { + int32 count = 1; +} + +message GetContactsThumbnailPayload { + repeated string avatarIDs = 1; +} + +message Contact { + string ID = 1; + string name = 2; + ContactNumber number = 3; + string avatarHexColor = 7; + bool unknownBool = 10; + string avatarID = 11; +} + +message ContactNumber { + // Might be 2 for contact and 7 for user input? + int32 mysteriousInt = 1; + string number = 2; + string number2 = 3; + optional string formattedNumber = 4; +} + +message GetOrCreateConversationPayload { + repeated ContactNumber numbers = 2; +} + message ResendMessagePayload { string messageID = 2; } @@ -99,11 +134,12 @@ message ListConversationsPayload { int64 count = 2; Folder folder = 4; + optional Cursor cursor = 5; } message Cursor { - string someStr = 1; - int64 nextCursor = 2; + string lastItemID = 1; + int64 lastItemTimestamp = 2; } message Message { @@ -175,6 +211,8 @@ message MessageStatus { message Conversations { repeated Conversation conversations = 2; + optional bytes cursorBytes = 3; + optional Cursor cursor = 5; } message Conversation { @@ -214,8 +252,14 @@ message Participant { int64 someInt2 = 20; } +enum IdentifierType { + UNKNOWN = 0; + PHONE = 1; + EMAIL = 2; +} + message SmallInfo { - int64 type = 1; + IdentifierType type = 1; string number = 2; string participantID = 3; } diff --git a/libgm/binary/raw/responses.proto b/libgm/binary/raw/responses.proto index 040b290..97f01f0 100644 --- a/libgm/binary/raw/responses.proto +++ b/libgm/binary/raw/responses.proto @@ -42,6 +42,20 @@ message FetchMessagesResponse { conversations.Cursor cursor = 5; } +message ListContactsResponse { + repeated conversations.Contact contacts = 2; +} + +message ListTopContactsResponse { + repeated conversations.Contact contacts = 1; +} + +message GetOrCreateConversationResponse { + conversations.Conversation conversation = 2; + // uncertain, never seen any other value than 1 + bool success = 3; +} + message DeleteMessageResponse { bool success = 2; } diff --git a/libgm/binary/responses.pb.go b/libgm/binary/responses.pb.go index cbda147..8d76f48 100644 --- a/libgm/binary/responses.pb.go +++ b/libgm/binary/responses.pb.go @@ -396,6 +396,156 @@ func (x *FetchMessagesResponse) GetCursor() *Cursor { return nil } +type ListContactsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Contacts []*Contact `protobuf:"bytes,2,rep,name=contacts,proto3" json:"contacts,omitempty"` +} + +func (x *ListContactsResponse) Reset() { + *x = ListContactsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_responses_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListContactsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListContactsResponse) ProtoMessage() {} + +func (x *ListContactsResponse) ProtoReflect() protoreflect.Message { + mi := &file_responses_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 ListContactsResponse.ProtoReflect.Descriptor instead. +func (*ListContactsResponse) Descriptor() ([]byte, []int) { + return file_responses_proto_rawDescGZIP(), []int{7} +} + +func (x *ListContactsResponse) GetContacts() []*Contact { + if x != nil { + return x.Contacts + } + return nil +} + +type ListTopContactsResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Contacts []*Contact `protobuf:"bytes,1,rep,name=contacts,proto3" json:"contacts,omitempty"` +} + +func (x *ListTopContactsResponse) Reset() { + *x = ListTopContactsResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_responses_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ListTopContactsResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListTopContactsResponse) ProtoMessage() {} + +func (x *ListTopContactsResponse) ProtoReflect() protoreflect.Message { + mi := &file_responses_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 ListTopContactsResponse.ProtoReflect.Descriptor instead. +func (*ListTopContactsResponse) Descriptor() ([]byte, []int) { + return file_responses_proto_rawDescGZIP(), []int{8} +} + +func (x *ListTopContactsResponse) GetContacts() []*Contact { + if x != nil { + return x.Contacts + } + return nil +} + +type GetOrCreateConversationResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Conversation *Conversation `protobuf:"bytes,2,opt,name=conversation,proto3" json:"conversation,omitempty"` + // uncertain, never seen any other value than 1 + Success bool `protobuf:"varint,3,opt,name=success,proto3" json:"success,omitempty"` +} + +func (x *GetOrCreateConversationResponse) Reset() { + *x = GetOrCreateConversationResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_responses_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GetOrCreateConversationResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GetOrCreateConversationResponse) ProtoMessage() {} + +func (x *GetOrCreateConversationResponse) ProtoReflect() protoreflect.Message { + mi := &file_responses_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 GetOrCreateConversationResponse.ProtoReflect.Descriptor instead. +func (*GetOrCreateConversationResponse) Descriptor() ([]byte, []int) { + return file_responses_proto_rawDescGZIP(), []int{9} +} + +func (x *GetOrCreateConversationResponse) GetConversation() *Conversation { + if x != nil { + return x.Conversation + } + return nil +} + +func (x *GetOrCreateConversationResponse) GetSuccess() bool { + if x != nil { + return x.Success + } + return false +} + type DeleteMessageResponse struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -407,7 +557,7 @@ type DeleteMessageResponse struct { func (x *DeleteMessageResponse) Reset() { *x = DeleteMessageResponse{} if protoimpl.UnsafeEnabled { - mi := &file_responses_proto_msgTypes[7] + mi := &file_responses_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -420,7 +570,7 @@ func (x *DeleteMessageResponse) String() string { func (*DeleteMessageResponse) ProtoMessage() {} func (x *DeleteMessageResponse) ProtoReflect() protoreflect.Message { - mi := &file_responses_proto_msgTypes[7] + mi := &file_responses_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -433,7 +583,7 @@ func (x *DeleteMessageResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteMessageResponse.ProtoReflect.Descriptor instead. func (*DeleteMessageResponse) Descriptor() ([]byte, []int) { - return file_responses_proto_rawDescGZIP(), []int{7} + return file_responses_proto_rawDescGZIP(), []int{10} } func (x *DeleteMessageResponse) GetSuccess() bool { @@ -454,7 +604,7 @@ type UpdateConversationResponse struct { func (x *UpdateConversationResponse) Reset() { *x = UpdateConversationResponse{} if protoimpl.UnsafeEnabled { - mi := &file_responses_proto_msgTypes[8] + mi := &file_responses_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -467,7 +617,7 @@ func (x *UpdateConversationResponse) String() string { func (*UpdateConversationResponse) ProtoMessage() {} func (x *UpdateConversationResponse) ProtoReflect() protoreflect.Message { - mi := &file_responses_proto_msgTypes[8] + mi := &file_responses_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -480,7 +630,7 @@ func (x *UpdateConversationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateConversationResponse.ProtoReflect.Descriptor instead. func (*UpdateConversationResponse) Descriptor() ([]byte, []int) { - return file_responses_proto_rawDescGZIP(), []int{8} + return file_responses_proto_rawDescGZIP(), []int{11} } func (x *UpdateConversationResponse) GetSuccess() bool { @@ -504,7 +654,7 @@ type GetConversationTypeResponse struct { func (x *GetConversationTypeResponse) Reset() { *x = GetConversationTypeResponse{} if protoimpl.UnsafeEnabled { - mi := &file_responses_proto_msgTypes[9] + mi := &file_responses_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -517,7 +667,7 @@ func (x *GetConversationTypeResponse) String() string { func (*GetConversationTypeResponse) ProtoMessage() {} func (x *GetConversationTypeResponse) ProtoReflect() protoreflect.Message { - mi := &file_responses_proto_msgTypes[9] + mi := &file_responses_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -530,7 +680,7 @@ func (x *GetConversationTypeResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetConversationTypeResponse.ProtoReflect.Descriptor instead. func (*GetConversationTypeResponse) Descriptor() ([]byte, []int) { - return file_responses_proto_rawDescGZIP(), []int{9} + return file_responses_proto_rawDescGZIP(), []int{12} } func (x *GetConversationTypeResponse) GetConversationID() string { @@ -570,7 +720,7 @@ type NotifyDittoActivityResponse struct { func (x *NotifyDittoActivityResponse) Reset() { *x = NotifyDittoActivityResponse{} if protoimpl.UnsafeEnabled { - mi := &file_responses_proto_msgTypes[10] + mi := &file_responses_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -583,7 +733,7 @@ func (x *NotifyDittoActivityResponse) String() string { func (*NotifyDittoActivityResponse) ProtoMessage() {} func (x *NotifyDittoActivityResponse) ProtoReflect() protoreflect.Message { - mi := &file_responses_proto_msgTypes[10] + mi := &file_responses_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -596,7 +746,7 @@ func (x *NotifyDittoActivityResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use NotifyDittoActivityResponse.ProtoReflect.Descriptor instead. func (*NotifyDittoActivityResponse) Descriptor() ([]byte, []int) { - return file_responses_proto_rawDescGZIP(), []int{10} + return file_responses_proto_rawDescGZIP(), []int{13} } type IsBugleDefaultResponse struct { @@ -610,7 +760,7 @@ type IsBugleDefaultResponse struct { func (x *IsBugleDefaultResponse) Reset() { *x = IsBugleDefaultResponse{} if protoimpl.UnsafeEnabled { - mi := &file_responses_proto_msgTypes[11] + mi := &file_responses_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -623,7 +773,7 @@ func (x *IsBugleDefaultResponse) String() string { func (*IsBugleDefaultResponse) ProtoMessage() {} func (x *IsBugleDefaultResponse) ProtoReflect() protoreflect.Message { - mi := &file_responses_proto_msgTypes[11] + mi := &file_responses_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -636,7 +786,7 @@ func (x *IsBugleDefaultResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use IsBugleDefaultResponse.ProtoReflect.Descriptor instead. func (*IsBugleDefaultResponse) Descriptor() ([]byte, []int) { - return file_responses_proto_rawDescGZIP(), []int{11} + return file_responses_proto_rawDescGZIP(), []int{14} } func (x *IsBugleDefaultResponse) GetSuccess() bool { @@ -657,7 +807,7 @@ type GetUpdatesResponse struct { func (x *GetUpdatesResponse) Reset() { *x = GetUpdatesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_responses_proto_msgTypes[12] + mi := &file_responses_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -670,7 +820,7 @@ func (x *GetUpdatesResponse) String() string { func (*GetUpdatesResponse) ProtoMessage() {} func (x *GetUpdatesResponse) ProtoReflect() protoreflect.Message { - mi := &file_responses_proto_msgTypes[12] + mi := &file_responses_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -683,7 +833,7 @@ func (x *GetUpdatesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetUpdatesResponse.ProtoReflect.Descriptor instead. func (*GetUpdatesResponse) Descriptor() ([]byte, []int) { - return file_responses_proto_rawDescGZIP(), []int{12} + return file_responses_proto_rawDescGZIP(), []int{15} } func (x *GetUpdatesResponse) GetData() *UserAlertEvent { @@ -704,7 +854,7 @@ type SendMessageResponse struct { func (x *SendMessageResponse) Reset() { *x = SendMessageResponse{} if protoimpl.UnsafeEnabled { - mi := &file_responses_proto_msgTypes[13] + mi := &file_responses_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -717,7 +867,7 @@ func (x *SendMessageResponse) String() string { func (*SendMessageResponse) ProtoMessage() {} func (x *SendMessageResponse) ProtoReflect() protoreflect.Message { - mi := &file_responses_proto_msgTypes[13] + mi := &file_responses_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -730,7 +880,7 @@ func (x *SendMessageResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use SendMessageResponse.ProtoReflect.Descriptor instead. func (*SendMessageResponse) Descriptor() ([]byte, []int) { - return file_responses_proto_rawDescGZIP(), []int{13} + return file_responses_proto_rawDescGZIP(), []int{16} } func (x *SendMessageResponse) GetType() int64 { @@ -753,7 +903,7 @@ type RefreshPhoneRelayResponse struct { func (x *RefreshPhoneRelayResponse) Reset() { *x = RefreshPhoneRelayResponse{} if protoimpl.UnsafeEnabled { - mi := &file_responses_proto_msgTypes[14] + mi := &file_responses_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -766,7 +916,7 @@ func (x *RefreshPhoneRelayResponse) String() string { func (*RefreshPhoneRelayResponse) ProtoMessage() {} func (x *RefreshPhoneRelayResponse) ProtoReflect() protoreflect.Message { - mi := &file_responses_proto_msgTypes[14] + mi := &file_responses_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -779,7 +929,7 @@ func (x *RefreshPhoneRelayResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RefreshPhoneRelayResponse.ProtoReflect.Descriptor instead. func (*RefreshPhoneRelayResponse) Descriptor() ([]byte, []int) { - return file_responses_proto_rawDescGZIP(), []int{14} + return file_responses_proto_rawDescGZIP(), []int{17} } func (x *RefreshPhoneRelayResponse) GetCoordinates() *CoordinateMessage { @@ -815,7 +965,7 @@ type WebEncryptionKeyResponse struct { func (x *WebEncryptionKeyResponse) Reset() { *x = WebEncryptionKeyResponse{} if protoimpl.UnsafeEnabled { - mi := &file_responses_proto_msgTypes[15] + mi := &file_responses_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -828,7 +978,7 @@ func (x *WebEncryptionKeyResponse) String() string { func (*WebEncryptionKeyResponse) ProtoMessage() {} func (x *WebEncryptionKeyResponse) ProtoReflect() protoreflect.Message { - mi := &file_responses_proto_msgTypes[15] + mi := &file_responses_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -841,7 +991,7 @@ func (x *WebEncryptionKeyResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use WebEncryptionKeyResponse.ProtoReflect.Descriptor instead. func (*WebEncryptionKeyResponse) Descriptor() ([]byte, []int) { - return file_responses_proto_rawDescGZIP(), []int{15} + return file_responses_proto_rawDescGZIP(), []int{18} } func (x *WebEncryptionKeyResponse) GetCoordinates() *CoordinateMessage { @@ -874,7 +1024,7 @@ type RegisterPhoneRelayResponse struct { func (x *RegisterPhoneRelayResponse) Reset() { *x = RegisterPhoneRelayResponse{} if protoimpl.UnsafeEnabled { - mi := &file_responses_proto_msgTypes[16] + mi := &file_responses_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -887,7 +1037,7 @@ func (x *RegisterPhoneRelayResponse) String() string { func (*RegisterPhoneRelayResponse) ProtoMessage() {} func (x *RegisterPhoneRelayResponse) ProtoReflect() protoreflect.Message { - mi := &file_responses_proto_msgTypes[16] + mi := &file_responses_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -900,7 +1050,7 @@ func (x *RegisterPhoneRelayResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RegisterPhoneRelayResponse.ProtoReflect.Descriptor instead. func (*RegisterPhoneRelayResponse) Descriptor() ([]byte, []int) { - return file_responses_proto_rawDescGZIP(), []int{16} + return file_responses_proto_rawDescGZIP(), []int{19} } func (x *RegisterPhoneRelayResponse) GetCoordinates() *CoordinateMessage { @@ -956,7 +1106,7 @@ type CoordinateMessage struct { func (x *CoordinateMessage) Reset() { *x = CoordinateMessage{} if protoimpl.UnsafeEnabled { - mi := &file_responses_proto_msgTypes[17] + mi := &file_responses_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -969,7 +1119,7 @@ func (x *CoordinateMessage) String() string { func (*CoordinateMessage) ProtoMessage() {} func (x *CoordinateMessage) ProtoReflect() protoreflect.Message { - mi := &file_responses_proto_msgTypes[17] + mi := &file_responses_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -982,7 +1132,7 @@ func (x *CoordinateMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use CoordinateMessage.ProtoReflect.Descriptor instead. func (*CoordinateMessage) Descriptor() ([]byte, []int) { - return file_responses_proto_rawDescGZIP(), []int{17} + return file_responses_proto_rawDescGZIP(), []int{20} } func (x *CoordinateMessage) GetCoord1() int64 { @@ -1004,7 +1154,7 @@ type AuthKeyData struct { func (x *AuthKeyData) Reset() { *x = AuthKeyData{} if protoimpl.UnsafeEnabled { - mi := &file_responses_proto_msgTypes[18] + mi := &file_responses_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1017,7 +1167,7 @@ func (x *AuthKeyData) String() string { func (*AuthKeyData) ProtoMessage() {} func (x *AuthKeyData) ProtoReflect() protoreflect.Message { - mi := &file_responses_proto_msgTypes[18] + mi := &file_responses_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1030,7 +1180,7 @@ func (x *AuthKeyData) ProtoReflect() protoreflect.Message { // Deprecated: Use AuthKeyData.ProtoReflect.Descriptor instead. func (*AuthKeyData) Descriptor() ([]byte, []int) { - return file_responses_proto_rawDescGZIP(), []int{18} + return file_responses_proto_rawDescGZIP(), []int{21} } func (x *AuthKeyData) GetTachyonAuthToken() []byte { @@ -1098,78 +1248,96 @@ var file_responses_proto_rawDesc = []byte{ 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x52, - 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0x31, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x36, 0x0a, 0x1a, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, - 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x22, 0x89, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, - 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, - 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x62, 0x6f, 0x6f, 0x6c, 0x31, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x62, - 0x6f, 0x6f, 0x6c, 0x31, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x32, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x32, 0x22, 0x1d, - 0x0a, 0x1b, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x44, 0x69, 0x74, 0x74, 0x6f, 0x41, 0x63, 0x74, - 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x0a, - 0x16, 0x49, 0x73, 0x42, 0x75, 0x67, 0x6c, 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, - 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, - 0x73, 0x22, 0x40, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2a, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x55, - 0x73, 0x65, 0x72, 0x41, 0x6c, 0x65, 0x72, 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x22, 0x29, 0x0a, 0x13, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, - 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x91, - 0x01, 0x0a, 0x19, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x52, - 0x65, 0x6c, 0x61, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0b, - 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1c, 0x2e, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x2e, 0x43, 0x6f, - 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, - 0x0b, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, - 0x70, 0x61, 0x69, 0x72, 0x4b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, - 0x61, 0x69, 0x72, 0x4b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x46, - 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x46, - 0x6f, 0x72, 0x22, 0x6c, 0x0a, 0x18, 0x57, 0x65, 0x62, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, - 0x0a, 0x0b, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x2e, - 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x52, 0x0b, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x73, 0x12, 0x10, - 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, - 0x22, 0x9e, 0x02, 0x0a, 0x1a, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x68, 0x6f, - 0x6e, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x3e, 0x0a, 0x0b, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, - 0x2e, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x52, 0x0b, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x73, 0x12, - 0x2a, 0x0a, 0x07, 0x62, 0x72, 0x6f, 0x77, 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x10, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x76, 0x69, - 0x63, 0x65, 0x52, 0x07, 0x62, 0x72, 0x6f, 0x77, 0x73, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x70, - 0x61, 0x69, 0x72, 0x69, 0x6e, 0x67, 0x4b, 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, - 0x0a, 0x70, 0x61, 0x69, 0x72, 0x69, 0x6e, 0x67, 0x4b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x46, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x76, - 0x61, 0x6c, 0x69, 0x64, 0x46, 0x6f, 0x72, 0x12, 0x38, 0x0a, 0x0b, 0x61, 0x75, 0x74, 0x68, 0x4b, - 0x65, 0x79, 0x44, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x72, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, - 0x44, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x61, 0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x44, 0x61, 0x74, - 0x61, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x49, 0x44, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x49, - 0x44, 0x22, 0x2b, 0x0a, 0x11, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x31, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x31, 0x22, 0x55, - 0x0a, 0x0b, 0x41, 0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2a, 0x0a, - 0x10, 0x74, 0x61, 0x63, 0x68, 0x79, 0x6f, 0x6e, 0x41, 0x75, 0x74, 0x68, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x10, 0x74, 0x61, 0x63, 0x68, 0x79, 0x6f, 0x6e, - 0x41, 0x75, 0x74, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x46, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x76, 0x61, 0x6c, - 0x69, 0x64, 0x46, 0x6f, 0x72, 0x42, 0x0e, 0x5a, 0x0c, 0x2e, 0x2e, 0x2f, 0x2e, 0x2e, 0x2f, 0x62, - 0x69, 0x6e, 0x61, 0x72, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x06, 0x63, 0x75, 0x72, 0x73, 0x6f, 0x72, 0x22, 0x4a, 0x0a, 0x14, 0x4c, 0x69, 0x73, 0x74, 0x43, + 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x32, 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x61, + 0x63, 0x74, 0x73, 0x22, 0x4d, 0x0a, 0x17, 0x4c, 0x69, 0x73, 0x74, 0x54, 0x6f, 0x70, 0x43, 0x6f, + 0x6e, 0x74, 0x61, 0x63, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x32, + 0x0a, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x16, 0x2e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x63, 0x74, 0x52, 0x08, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x63, + 0x74, 0x73, 0x22, 0x7c, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x4f, 0x72, 0x43, 0x72, 0x65, 0x61, 0x74, + 0x65, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x63, 0x6f, + 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x76, + 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, + 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, + 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, + 0x22, 0x31, 0x0a, 0x15, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, + 0x63, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, + 0x65, 0x73, 0x73, 0x22, 0x36, 0x0a, 0x1a, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x43, 0x6f, 0x6e, + 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x89, 0x01, 0x0a, 0x1b, + 0x47, 0x65, 0x74, 0x43, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x54, + 0x79, 0x70, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x63, + 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x49, 0x44, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x05, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x6f, 0x6f, 0x6c, 0x31, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x62, 0x6f, 0x6f, 0x6c, 0x31, 0x12, 0x18, 0x0a, + 0x07, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x32, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x07, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x32, 0x22, 0x1d, 0x0a, 0x1b, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x79, 0x44, 0x69, 0x74, 0x74, 0x6f, 0x41, 0x63, 0x74, 0x69, 0x76, 0x69, 0x74, 0x79, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x0a, 0x16, 0x49, 0x73, 0x42, 0x75, 0x67, 0x6c, + 0x65, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x07, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x22, 0x40, 0x0a, 0x12, 0x47, 0x65, + 0x74, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x2a, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x41, 0x6c, 0x65, 0x72, + 0x74, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x29, 0x0a, 0x13, + 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x22, 0x91, 0x01, 0x0a, 0x19, 0x52, 0x65, 0x66, 0x72, + 0x65, 0x73, 0x68, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x79, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0b, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, + 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x72, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, + 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x0b, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69, + 0x6e, 0x61, 0x74, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x61, 0x69, 0x72, 0x4b, 0x65, 0x79, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x70, 0x61, 0x69, 0x72, 0x4b, 0x65, 0x79, 0x12, + 0x1a, 0x0a, 0x08, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x46, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x08, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x46, 0x6f, 0x72, 0x22, 0x6c, 0x0a, 0x18, 0x57, + 0x65, 0x62, 0x45, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0b, 0x63, 0x6f, 0x6f, 0x72, 0x64, + 0x69, 0x6e, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x72, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, 0x6e, + 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x0b, 0x63, 0x6f, 0x6f, 0x72, + 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x73, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x22, 0x9e, 0x02, 0x0a, 0x1a, 0x52, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x50, 0x68, 0x6f, 0x6e, 0x65, 0x52, 0x65, 0x6c, 0x61, 0x79, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0b, 0x63, 0x6f, 0x6f, 0x72, + 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x69, + 0x6e, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x0b, 0x63, 0x6f, 0x6f, + 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x73, 0x12, 0x2a, 0x0a, 0x07, 0x62, 0x72, 0x6f, 0x77, + 0x73, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x07, 0x62, 0x72, 0x6f, + 0x77, 0x73, 0x65, 0x72, 0x12, 0x1e, 0x0a, 0x0a, 0x70, 0x61, 0x69, 0x72, 0x69, 0x6e, 0x67, 0x4b, + 0x65, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x70, 0x61, 0x69, 0x72, 0x69, 0x6e, + 0x67, 0x4b, 0x65, 0x79, 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x46, 0x6f, 0x72, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x46, 0x6f, 0x72, + 0x12, 0x38, 0x0a, 0x0b, 0x61, 0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x44, 0x61, 0x74, 0x61, 0x18, + 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x73, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x61, + 0x75, 0x74, 0x68, 0x4b, 0x65, 0x79, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x49, 0x44, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, + 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x49, 0x44, 0x22, 0x2b, 0x0a, 0x11, 0x43, 0x6f, + 0x6f, 0x72, 0x64, 0x69, 0x6e, 0x61, 0x74, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x31, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x06, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x31, 0x22, 0x55, 0x0a, 0x0b, 0x41, 0x75, 0x74, 0x68, 0x4b, + 0x65, 0x79, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2a, 0x0a, 0x10, 0x74, 0x61, 0x63, 0x68, 0x79, 0x6f, + 0x6e, 0x41, 0x75, 0x74, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, + 0x52, 0x10, 0x74, 0x61, 0x63, 0x68, 0x79, 0x6f, 0x6e, 0x41, 0x75, 0x74, 0x68, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x12, 0x1a, 0x0a, 0x08, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x46, 0x6f, 0x72, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x03, 0x52, 0x08, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x46, 0x6f, 0x72, 0x42, 0x0e, + 0x5a, 0x0c, 0x2e, 0x2e, 0x2f, 0x2e, 0x2e, 0x2f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1184,51 +1352,59 @@ func file_responses_proto_rawDescGZIP() []byte { return file_responses_proto_rawDescData } -var file_responses_proto_msgTypes = make([]protoimpl.MessageInfo, 19) +var file_responses_proto_msgTypes = make([]protoimpl.MessageInfo, 22) var file_responses_proto_goTypes = []interface{}{ - (*ParticipantThumbnail)(nil), // 0: responses.ParticipantThumbnail - (*Thumbnail)(nil), // 1: responses.Thumbnail - (*ThumbnailData)(nil), // 2: responses.ThumbnailData - (*RegisterRefreshResponse)(nil), // 3: responses.RegisterRefreshResponse - (*RevokeRelayPairingResponse)(nil), // 4: responses.RevokeRelayPairingResponse - (*RefreshAuthData)(nil), // 5: responses.RefreshAuthData - (*FetchMessagesResponse)(nil), // 6: responses.FetchMessagesResponse - (*DeleteMessageResponse)(nil), // 7: responses.DeleteMessageResponse - (*UpdateConversationResponse)(nil), // 8: responses.UpdateConversationResponse - (*GetConversationTypeResponse)(nil), // 9: responses.GetConversationTypeResponse - (*NotifyDittoActivityResponse)(nil), // 10: responses.NotifyDittoActivityResponse - (*IsBugleDefaultResponse)(nil), // 11: responses.IsBugleDefaultResponse - (*GetUpdatesResponse)(nil), // 12: responses.GetUpdatesResponse - (*SendMessageResponse)(nil), // 13: responses.SendMessageResponse - (*RefreshPhoneRelayResponse)(nil), // 14: responses.RefreshPhoneRelayResponse - (*WebEncryptionKeyResponse)(nil), // 15: responses.WebEncryptionKeyResponse - (*RegisterPhoneRelayResponse)(nil), // 16: responses.RegisterPhoneRelayResponse - (*CoordinateMessage)(nil), // 17: responses.CoordinateMessage - (*AuthKeyData)(nil), // 18: responses.AuthKeyData - (*Pixels)(nil), // 19: conversations.Pixels - (*Message)(nil), // 20: conversations.Message - (*Cursor)(nil), // 21: conversations.Cursor - (*UserAlertEvent)(nil), // 22: events.UserAlertEvent - (*Device)(nil), // 23: messages.Device + (*ParticipantThumbnail)(nil), // 0: responses.ParticipantThumbnail + (*Thumbnail)(nil), // 1: responses.Thumbnail + (*ThumbnailData)(nil), // 2: responses.ThumbnailData + (*RegisterRefreshResponse)(nil), // 3: responses.RegisterRefreshResponse + (*RevokeRelayPairingResponse)(nil), // 4: responses.RevokeRelayPairingResponse + (*RefreshAuthData)(nil), // 5: responses.RefreshAuthData + (*FetchMessagesResponse)(nil), // 6: responses.FetchMessagesResponse + (*ListContactsResponse)(nil), // 7: responses.ListContactsResponse + (*ListTopContactsResponse)(nil), // 8: responses.ListTopContactsResponse + (*GetOrCreateConversationResponse)(nil), // 9: responses.GetOrCreateConversationResponse + (*DeleteMessageResponse)(nil), // 10: responses.DeleteMessageResponse + (*UpdateConversationResponse)(nil), // 11: responses.UpdateConversationResponse + (*GetConversationTypeResponse)(nil), // 12: responses.GetConversationTypeResponse + (*NotifyDittoActivityResponse)(nil), // 13: responses.NotifyDittoActivityResponse + (*IsBugleDefaultResponse)(nil), // 14: responses.IsBugleDefaultResponse + (*GetUpdatesResponse)(nil), // 15: responses.GetUpdatesResponse + (*SendMessageResponse)(nil), // 16: responses.SendMessageResponse + (*RefreshPhoneRelayResponse)(nil), // 17: responses.RefreshPhoneRelayResponse + (*WebEncryptionKeyResponse)(nil), // 18: responses.WebEncryptionKeyResponse + (*RegisterPhoneRelayResponse)(nil), // 19: responses.RegisterPhoneRelayResponse + (*CoordinateMessage)(nil), // 20: responses.CoordinateMessage + (*AuthKeyData)(nil), // 21: responses.AuthKeyData + (*Pixels)(nil), // 22: conversations.Pixels + (*Message)(nil), // 23: conversations.Message + (*Cursor)(nil), // 24: conversations.Cursor + (*Contact)(nil), // 25: conversations.Contact + (*Conversation)(nil), // 26: conversations.Conversation + (*UserAlertEvent)(nil), // 27: events.UserAlertEvent + (*Device)(nil), // 28: messages.Device } var file_responses_proto_depIdxs = []int32{ 1, // 0: responses.ParticipantThumbnail.thumbnail:type_name -> responses.Thumbnail 2, // 1: responses.Thumbnail.data:type_name -> responses.ThumbnailData - 19, // 2: responses.ThumbnailData.pixels:type_name -> conversations.Pixels + 22, // 2: responses.ThumbnailData.pixels:type_name -> conversations.Pixels 5, // 3: responses.RegisterRefreshResponse.tokenData:type_name -> responses.RefreshAuthData - 20, // 4: responses.FetchMessagesResponse.messages:type_name -> conversations.Message - 21, // 5: responses.FetchMessagesResponse.cursor:type_name -> conversations.Cursor - 22, // 6: responses.GetUpdatesResponse.data:type_name -> events.UserAlertEvent - 17, // 7: responses.RefreshPhoneRelayResponse.coordinates:type_name -> responses.CoordinateMessage - 17, // 8: responses.WebEncryptionKeyResponse.coordinates:type_name -> responses.CoordinateMessage - 17, // 9: responses.RegisterPhoneRelayResponse.coordinates:type_name -> responses.CoordinateMessage - 23, // 10: responses.RegisterPhoneRelayResponse.browser:type_name -> messages.Device - 18, // 11: responses.RegisterPhoneRelayResponse.authKeyData:type_name -> responses.AuthKeyData - 12, // [12:12] is the sub-list for method output_type - 12, // [12:12] is the sub-list for method input_type - 12, // [12:12] is the sub-list for extension type_name - 12, // [12:12] is the sub-list for extension extendee - 0, // [0:12] is the sub-list for field type_name + 23, // 4: responses.FetchMessagesResponse.messages:type_name -> conversations.Message + 24, // 5: responses.FetchMessagesResponse.cursor:type_name -> conversations.Cursor + 25, // 6: responses.ListContactsResponse.contacts:type_name -> conversations.Contact + 25, // 7: responses.ListTopContactsResponse.contacts:type_name -> conversations.Contact + 26, // 8: responses.GetOrCreateConversationResponse.conversation:type_name -> conversations.Conversation + 27, // 9: responses.GetUpdatesResponse.data:type_name -> events.UserAlertEvent + 20, // 10: responses.RefreshPhoneRelayResponse.coordinates:type_name -> responses.CoordinateMessage + 20, // 11: responses.WebEncryptionKeyResponse.coordinates:type_name -> responses.CoordinateMessage + 20, // 12: responses.RegisterPhoneRelayResponse.coordinates:type_name -> responses.CoordinateMessage + 28, // 13: responses.RegisterPhoneRelayResponse.browser:type_name -> messages.Device + 21, // 14: responses.RegisterPhoneRelayResponse.authKeyData:type_name -> responses.AuthKeyData + 15, // [15:15] is the sub-list for method output_type + 15, // [15:15] is the sub-list for method input_type + 15, // [15:15] is the sub-list for extension type_name + 15, // [15:15] is the sub-list for extension extendee + 0, // [0:15] is the sub-list for field type_name } func init() { file_responses_proto_init() } @@ -1325,7 +1501,7 @@ func file_responses_proto_init() { } } file_responses_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteMessageResponse); i { + switch v := v.(*ListContactsResponse); i { case 0: return &v.state case 1: @@ -1337,7 +1513,7 @@ func file_responses_proto_init() { } } file_responses_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateConversationResponse); i { + switch v := v.(*ListTopContactsResponse); i { case 0: return &v.state case 1: @@ -1349,7 +1525,7 @@ func file_responses_proto_init() { } } file_responses_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetConversationTypeResponse); i { + switch v := v.(*GetOrCreateConversationResponse); i { case 0: return &v.state case 1: @@ -1361,7 +1537,7 @@ func file_responses_proto_init() { } } file_responses_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*NotifyDittoActivityResponse); i { + switch v := v.(*DeleteMessageResponse); i { case 0: return &v.state case 1: @@ -1373,7 +1549,7 @@ func file_responses_proto_init() { } } file_responses_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IsBugleDefaultResponse); i { + switch v := v.(*UpdateConversationResponse); i { case 0: return &v.state case 1: @@ -1385,7 +1561,7 @@ func file_responses_proto_init() { } } file_responses_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetUpdatesResponse); i { + switch v := v.(*GetConversationTypeResponse); i { case 0: return &v.state case 1: @@ -1397,7 +1573,7 @@ func file_responses_proto_init() { } } file_responses_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*SendMessageResponse); i { + switch v := v.(*NotifyDittoActivityResponse); i { case 0: return &v.state case 1: @@ -1409,7 +1585,7 @@ func file_responses_proto_init() { } } file_responses_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RefreshPhoneRelayResponse); i { + switch v := v.(*IsBugleDefaultResponse); i { case 0: return &v.state case 1: @@ -1421,7 +1597,7 @@ func file_responses_proto_init() { } } file_responses_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*WebEncryptionKeyResponse); i { + switch v := v.(*GetUpdatesResponse); i { case 0: return &v.state case 1: @@ -1433,7 +1609,7 @@ func file_responses_proto_init() { } } file_responses_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RegisterPhoneRelayResponse); i { + switch v := v.(*SendMessageResponse); i { case 0: return &v.state case 1: @@ -1445,7 +1621,7 @@ func file_responses_proto_init() { } } file_responses_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CoordinateMessage); i { + switch v := v.(*RefreshPhoneRelayResponse); i { case 0: return &v.state case 1: @@ -1457,6 +1633,42 @@ func file_responses_proto_init() { } } file_responses_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*WebEncryptionKeyResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_responses_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*RegisterPhoneRelayResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_responses_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CoordinateMessage); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_responses_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AuthKeyData); i { case 0: return &v.state @@ -1475,7 +1687,7 @@ func file_responses_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_responses_proto_rawDesc, NumEnums: 0, - NumMessages: 19, + NumMessages: 22, NumExtensions: 0, NumServices: 0, }, diff --git a/libgm/conversations.go b/libgm/conversations.go index f18ea0d..16e933d 100644 --- a/libgm/conversations.go +++ b/libgm/conversations.go @@ -28,6 +28,73 @@ func (c *Client) ListConversations(count int64, folder binary.ListConversationsP return res, nil } +func (c *Client) ListContacts() (*binary.ListContactsResponse, error) { + payload := &binary.ListContactsPayload{ + I1: 1, + I2: 350, + I3: 50, + } + actionType := binary.ActionType_LIST_CONTACTS + + response, err := c.sessionHandler.sendMessage(actionType, payload) + if err != nil { + return nil, err + } + + res, ok := response.Data.Decrypted.(*binary.ListContactsResponse) + if !ok { + return nil, fmt.Errorf("unexpected response type %T, expected *binary.ListContactsResponse", response.Data.Decrypted) + } + + return res, nil +} + +func (c *Client) ListTopContacts() (*binary.ListTopContactsResponse, error) { + payload := &binary.ListTopContactsPayload{ + Count: 8, + } + actionType := binary.ActionType_LIST_TOP_CONTACTS + + response, err := c.sessionHandler.sendMessage(actionType, payload) + if err != nil { + return nil, err + } + + res, ok := response.Data.Decrypted.(*binary.ListTopContactsResponse) + if !ok { + return nil, fmt.Errorf("unexpected response type %T, expected *binary.ListTopContactsResponse", response.Data.Decrypted) + } + + return res, nil +} + +func (c *Client) GetOrCreateConversation(numbers []string) (*binary.GetOrCreateConversationResponse, error) { + contacts := make([]*binary.ContactNumber, len(numbers)) + for i, number := range numbers { + contacts[i] = &binary.ContactNumber{ + MysteriousInt: 7, + Number: number, + Number2: number, + } + } + payload := &binary.GetOrCreateConversationPayload{ + Numbers: contacts, + } + actionType := binary.ActionType_GET_OR_CREATE_CONVERSATION + + response, err := c.sessionHandler.sendMessage(actionType, payload) + if err != nil { + return nil, err + } + + res, ok := response.Data.Decrypted.(*binary.GetOrCreateConversationResponse) + if !ok { + return nil, fmt.Errorf("unexpected response type %T, expected *binary.GetOrCreateConversationResponse", response.Data.Decrypted) + } + + return res, nil +} + func (c *Client) GetConversationType(conversationID string) (*binary.GetConversationTypeResponse, error) { payload := &binary.ConversationTypePayload{ConversationID: conversationID} actionType := binary.ActionType_GET_CONVERSATION_TYPE diff --git a/libgm/response_handler.go b/libgm/response_handler.go index 1129667..8799ce6 100644 --- a/libgm/response_handler.go +++ b/libgm/response_handler.go @@ -41,6 +41,8 @@ func (s *SessionHandler) receiveResponse(resp *pblite.Response) bool { if evt.Enabled() && resp.Data.Decrypted != nil { evt.Str("proto_name", string(resp.Data.Decrypted.ProtoReflect().Descriptor().FullName())). Str("data", base64.StdEncoding.EncodeToString(resp.Data.RawDecrypted)) + } else if resp.Data.RawDecrypted != nil { + evt.Str("unrecognized_data", base64.StdEncoding.EncodeToString(resp.Data.RawDecrypted)) } evt.Msg("Received response") ch <- resp diff --git a/libgm/routes/mapped.go b/libgm/routes/mapped.go index 50a483c..dbc67d2 100644 --- a/libgm/routes/mapped.go +++ b/libgm/routes/mapped.go @@ -29,4 +29,7 @@ var Routes = map[binary.ActionType]Route{ binary.ActionType_DELETE_MESSAGE: DELETE_MESSAGE, binary.ActionType_TYPING_UPDATES: TYPING_UPDATES, binary.ActionType_GET_PARTICIPANTS_THUMBNAIL: GET_PARTICIPANT_THUMBNAIL, + binary.ActionType_LIST_CONTACTS: LIST_CONTACTS, + binary.ActionType_LIST_TOP_CONTACTS: LIST_TOP_CONTACTS, + binary.ActionType_GET_OR_CREATE_CONVERSATION: GET_OR_CREATE_CONVERSATION, } diff --git a/libgm/routes/session.go b/libgm/routes/session.go index b1a4560..5a1f1a7 100644 --- a/libgm/routes/session.go +++ b/libgm/routes/session.go @@ -28,3 +28,30 @@ var NOTIFY_DITTO_ACTIVITY = Route{ UseSessionID: false, UseTTL: true, } + +var LIST_CONTACTS = Route{ + Action: binary.ActionType_LIST_CONTACTS, + MessageType: binary.MessageType_BUGLE_MESSAGE, + BugleRoute: binary.BugleRoute_DataEvent, + ResponseStruct: &binary.ListContactsResponse{}, + UseSessionID: false, + UseTTL: true, +} + +var LIST_TOP_CONTACTS = Route{ + Action: binary.ActionType_LIST_TOP_CONTACTS, + MessageType: binary.MessageType_BUGLE_MESSAGE, + BugleRoute: binary.BugleRoute_DataEvent, + ResponseStruct: &binary.ListTopContactsResponse{}, + UseSessionID: false, + UseTTL: true, +} + +var GET_OR_CREATE_CONVERSATION = Route{ + Action: binary.ActionType_GET_OR_CREATE_CONVERSATION, + MessageType: binary.MessageType_BUGLE_MESSAGE, + BugleRoute: binary.BugleRoute_DataEvent, + ResponseStruct: &binary.GetOrCreateConversationResponse{}, + UseSessionID: false, + UseTTL: true, +}