Remove hackiness in long polling and ack sending

This commit is contained in:
Tulir Asokan 2023-07-15 15:49:51 +03:00
parent bbc4da21b7
commit 25236fffa9
12 changed files with 570 additions and 815 deletions

View file

@ -271,194 +271,6 @@ func (x *MessageReadPayload) GetMessageID() string {
return "" return ""
} }
type AckMessageResponse struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Container *AckContainer `protobuf:"bytes,1,opt,name=container,proto3" json:"container,omitempty"`
}
func (x *AckMessageResponse) Reset() {
*x = AckMessageResponse{}
if protoimpl.UnsafeEnabled {
mi := &file_client_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *AckMessageResponse) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*AckMessageResponse) ProtoMessage() {}
func (x *AckMessageResponse) ProtoReflect() protoreflect.Message {
mi := &file_client_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 AckMessageResponse.ProtoReflect.Descriptor instead.
func (*AckMessageResponse) Descriptor() ([]byte, []int) {
return file_client_proto_rawDescGZIP(), []int{2}
}
func (x *AckMessageResponse) GetContainer() *AckContainer {
if x != nil {
return x.Container
}
return nil
}
type AckContainer struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Data *AckData `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"`
}
func (x *AckContainer) Reset() {
*x = AckContainer{}
if protoimpl.UnsafeEnabled {
mi := &file_client_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *AckContainer) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*AckContainer) ProtoMessage() {}
func (x *AckContainer) ProtoReflect() protoreflect.Message {
mi := &file_client_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 AckContainer.ProtoReflect.Descriptor instead.
func (*AckContainer) Descriptor() ([]byte, []int) {
return file_client_proto_rawDescGZIP(), []int{3}
}
func (x *AckContainer) GetData() *AckData {
if x != nil {
return x.Data
}
return nil
}
type AckData struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
AckAmount *AckAmount `protobuf:"bytes,4,opt,name=ackAmount,proto3" json:"ackAmount,omitempty"`
}
func (x *AckData) Reset() {
*x = AckData{}
if protoimpl.UnsafeEnabled {
mi := &file_client_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *AckData) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*AckData) ProtoMessage() {}
func (x *AckData) ProtoReflect() protoreflect.Message {
mi := &file_client_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 AckData.ProtoReflect.Descriptor instead.
func (*AckData) Descriptor() ([]byte, []int) {
return file_client_proto_rawDescGZIP(), []int{4}
}
func (x *AckData) GetAckAmount() *AckAmount {
if x != nil {
return x.AckAmount
}
return nil
}
type AckAmount struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Count int32 `protobuf:"varint,1,opt,name=count,proto3" json:"count,omitempty"`
}
func (x *AckAmount) Reset() {
*x = AckAmount{}
if protoimpl.UnsafeEnabled {
mi := &file_client_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *AckAmount) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*AckAmount) ProtoMessage() {}
func (x *AckAmount) ProtoReflect() protoreflect.Message {
mi := &file_client_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 AckAmount.ProtoReflect.Descriptor instead.
func (*AckAmount) Descriptor() ([]byte, []int) {
return file_client_proto_rawDescGZIP(), []int{5}
}
func (x *AckAmount) GetCount() int32 {
if x != nil {
return x.Count
}
return 0
}
type AckMessagePayload struct { type AckMessagePayload struct {
state protoimpl.MessageState state protoimpl.MessageState
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
@ -466,13 +278,13 @@ type AckMessagePayload struct {
AuthData *AuthMessage `protobuf:"bytes,1,opt,name=authData,proto3" json:"authData,omitempty"` AuthData *AuthMessage `protobuf:"bytes,1,opt,name=authData,proto3" json:"authData,omitempty"`
EmptyArr *EmptyArr `protobuf:"bytes,2,opt,name=emptyArr,proto3" json:"emptyArr,omitempty"` EmptyArr *EmptyArr `protobuf:"bytes,2,opt,name=emptyArr,proto3" json:"emptyArr,omitempty"`
NoClue []byte `protobuf:"bytes,3,opt,name=noClue,proto3" json:"noClue,omitempty"` Acks []*AckMessageData `protobuf:"bytes,4,rep,name=acks,proto3" json:"acks,omitempty"`
} }
func (x *AckMessagePayload) Reset() { func (x *AckMessagePayload) Reset() {
*x = AckMessagePayload{} *x = AckMessagePayload{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_client_proto_msgTypes[6] mi := &file_client_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -485,7 +297,7 @@ func (x *AckMessagePayload) String() string {
func (*AckMessagePayload) ProtoMessage() {} func (*AckMessagePayload) ProtoMessage() {}
func (x *AckMessagePayload) ProtoReflect() protoreflect.Message { func (x *AckMessagePayload) ProtoReflect() protoreflect.Message {
mi := &file_client_proto_msgTypes[6] mi := &file_client_proto_msgTypes[2]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -498,7 +310,7 @@ func (x *AckMessagePayload) ProtoReflect() protoreflect.Message {
// Deprecated: Use AckMessagePayload.ProtoReflect.Descriptor instead. // Deprecated: Use AckMessagePayload.ProtoReflect.Descriptor instead.
func (*AckMessagePayload) Descriptor() ([]byte, []int) { func (*AckMessagePayload) Descriptor() ([]byte, []int) {
return file_client_proto_rawDescGZIP(), []int{6} return file_client_proto_rawDescGZIP(), []int{2}
} }
func (x *AckMessagePayload) GetAuthData() *AuthMessage { func (x *AckMessagePayload) GetAuthData() *AuthMessage {
@ -515,9 +327,9 @@ func (x *AckMessagePayload) GetEmptyArr() *EmptyArr {
return nil return nil
} }
func (x *AckMessagePayload) GetNoClue() []byte { func (x *AckMessagePayload) GetAcks() []*AckMessageData {
if x != nil { if x != nil {
return x.NoClue return x.Acks
} }
return nil return nil
} }
@ -534,7 +346,7 @@ type AckMessageData struct {
func (x *AckMessageData) Reset() { func (x *AckMessageData) Reset() {
*x = AckMessageData{} *x = AckMessageData{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_client_proto_msgTypes[7] mi := &file_client_proto_msgTypes[3]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -547,7 +359,7 @@ func (x *AckMessageData) String() string {
func (*AckMessageData) ProtoMessage() {} func (*AckMessageData) ProtoMessage() {}
func (x *AckMessageData) ProtoReflect() protoreflect.Message { func (x *AckMessageData) ProtoReflect() protoreflect.Message {
mi := &file_client_proto_msgTypes[7] mi := &file_client_proto_msgTypes[3]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -560,7 +372,7 @@ func (x *AckMessageData) ProtoReflect() protoreflect.Message {
// Deprecated: Use AckMessageData.ProtoReflect.Descriptor instead. // Deprecated: Use AckMessageData.ProtoReflect.Descriptor instead.
func (*AckMessageData) Descriptor() ([]byte, []int) { func (*AckMessageData) Descriptor() ([]byte, []int) {
return file_client_proto_rawDescGZIP(), []int{7} return file_client_proto_rawDescGZIP(), []int{3}
} }
func (x *AckMessageData) GetRequestID() string { func (x *AckMessageData) GetRequestID() string {
@ -589,7 +401,7 @@ type ImageMetaData struct {
func (x *ImageMetaData) Reset() { func (x *ImageMetaData) Reset() {
*x = ImageMetaData{} *x = ImageMetaData{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_client_proto_msgTypes[8] mi := &file_client_proto_msgTypes[4]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -602,7 +414,7 @@ func (x *ImageMetaData) String() string {
func (*ImageMetaData) ProtoMessage() {} func (*ImageMetaData) ProtoMessage() {}
func (x *ImageMetaData) ProtoReflect() protoreflect.Message { func (x *ImageMetaData) ProtoReflect() protoreflect.Message {
mi := &file_client_proto_msgTypes[8] mi := &file_client_proto_msgTypes[4]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -615,7 +427,7 @@ func (x *ImageMetaData) ProtoReflect() protoreflect.Message {
// Deprecated: Use ImageMetaData.ProtoReflect.Descriptor instead. // Deprecated: Use ImageMetaData.ProtoReflect.Descriptor instead.
func (*ImageMetaData) Descriptor() ([]byte, []int) { func (*ImageMetaData) Descriptor() ([]byte, []int) {
return file_client_proto_rawDescGZIP(), []int{8} return file_client_proto_rawDescGZIP(), []int{4}
} }
func (x *ImageMetaData) GetImageID() string { func (x *ImageMetaData) GetImageID() string {
@ -644,7 +456,7 @@ type UploadImagePayload struct {
func (x *UploadImagePayload) Reset() { func (x *UploadImagePayload) Reset() {
*x = UploadImagePayload{} *x = UploadImagePayload{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_client_proto_msgTypes[9] mi := &file_client_proto_msgTypes[5]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -657,7 +469,7 @@ func (x *UploadImagePayload) String() string {
func (*UploadImagePayload) ProtoMessage() {} func (*UploadImagePayload) ProtoMessage() {}
func (x *UploadImagePayload) ProtoReflect() protoreflect.Message { func (x *UploadImagePayload) ProtoReflect() protoreflect.Message {
mi := &file_client_proto_msgTypes[9] mi := &file_client_proto_msgTypes[5]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -670,7 +482,7 @@ func (x *UploadImagePayload) ProtoReflect() protoreflect.Message {
// Deprecated: Use UploadImagePayload.ProtoReflect.Descriptor instead. // Deprecated: Use UploadImagePayload.ProtoReflect.Descriptor instead.
func (*UploadImagePayload) Descriptor() ([]byte, []int) { func (*UploadImagePayload) Descriptor() ([]byte, []int) {
return file_client_proto_rawDescGZIP(), []int{9} return file_client_proto_rawDescGZIP(), []int{5}
} }
func (x *UploadImagePayload) GetMetaData() *ImageMetaData { func (x *UploadImagePayload) GetMetaData() *ImageMetaData {
@ -698,7 +510,7 @@ type BugleBackendService struct {
func (x *BugleBackendService) Reset() { func (x *BugleBackendService) Reset() {
*x = BugleBackendService{} *x = BugleBackendService{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_client_proto_msgTypes[10] mi := &file_client_proto_msgTypes[6]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -711,7 +523,7 @@ func (x *BugleBackendService) String() string {
func (*BugleBackendService) ProtoMessage() {} func (*BugleBackendService) ProtoMessage() {}
func (x *BugleBackendService) ProtoReflect() protoreflect.Message { func (x *BugleBackendService) ProtoReflect() protoreflect.Message {
mi := &file_client_proto_msgTypes[10] mi := &file_client_proto_msgTypes[6]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -724,7 +536,7 @@ func (x *BugleBackendService) ProtoReflect() protoreflect.Message {
// Deprecated: Use BugleBackendService.ProtoReflect.Descriptor instead. // Deprecated: Use BugleBackendService.ProtoReflect.Descriptor instead.
func (*BugleBackendService) Descriptor() ([]byte, []int) { func (*BugleBackendService) Descriptor() ([]byte, []int) {
return file_client_proto_rawDescGZIP(), []int{10} return file_client_proto_rawDescGZIP(), []int{6}
} }
func (x *BugleBackendService) GetData() *BugleCode { func (x *BugleBackendService) GetData() *BugleCode {
@ -745,7 +557,7 @@ type BugleCode struct {
func (x *BugleCode) Reset() { func (x *BugleCode) Reset() {
*x = BugleCode{} *x = BugleCode{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_client_proto_msgTypes[11] mi := &file_client_proto_msgTypes[7]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi) ms.StoreMessageInfo(mi)
} }
@ -758,7 +570,7 @@ func (x *BugleCode) String() string {
func (*BugleCode) ProtoMessage() {} func (*BugleCode) ProtoMessage() {}
func (x *BugleCode) ProtoReflect() protoreflect.Message { func (x *BugleCode) ProtoReflect() protoreflect.Message {
mi := &file_client_proto_msgTypes[11] mi := &file_client_proto_msgTypes[7]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil { if ms.LoadMessageInfo() == nil {
@ -771,7 +583,7 @@ func (x *BugleCode) ProtoReflect() protoreflect.Message {
// Deprecated: Use BugleCode.ProtoReflect.Descriptor instead. // Deprecated: Use BugleCode.ProtoReflect.Descriptor instead.
func (*BugleCode) Descriptor() ([]byte, []int) { func (*BugleCode) Descriptor() ([]byte, []int) {
return file_client_proto_rawDescGZIP(), []int{11} return file_client_proto_rawDescGZIP(), []int{7}
} }
func (x *BugleCode) GetType() int64 { func (x *BugleCode) GetType() int64 {
@ -795,80 +607,67 @@ var file_client_proto_rawDesc = []byte{
0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x6f, 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, 0x1c, 0x0a, 0x09, 0x6e, 0x76, 0x65, 0x72, 0x73, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09,
0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x44, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x44, 0x22, 0x48, 0x0a, 0x12, 0x41, 0x63, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x44, 0x22, 0xa2, 0x01, 0x0a, 0x11, 0x41,
0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64,
0x12, 0x32, 0x0a, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x12, 0x31, 0x0a, 0x08, 0x61, 0x75, 0x74, 0x68, 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01,
0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x63, 0x6b, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x41, 0x75,
0x43, 0x6f, 0x6e, 0x74, 0x61, 0x69, 0x6e, 0x65, 0x72, 0x52, 0x09, 0x63, 0x6f, 0x6e, 0x74, 0x61, 0x74, 0x68, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x61, 0x75, 0x74, 0x68, 0x44,
0x69, 0x6e, 0x65, 0x72, 0x22, 0x33, 0x0a, 0x0c, 0x41, 0x63, 0x6b, 0x43, 0x6f, 0x6e, 0x74, 0x61, 0x61, 0x74, 0x61, 0x12, 0x2e, 0x0a, 0x08, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x72, 0x18,
0x69, 0x6e, 0x65, 0x72, 0x12, 0x23, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73,
0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x63, 0x6b, 0x44, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x72, 0x52, 0x08, 0x65, 0x6d, 0x70, 0x74, 0x79,
0x61, 0x74, 0x61, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x3a, 0x0a, 0x07, 0x41, 0x63, 0x6b, 0x41, 0x72, 0x72, 0x12, 0x2a, 0x0a, 0x04, 0x61, 0x63, 0x6b, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28,
0x44, 0x61, 0x74, 0x61, 0x12, 0x2f, 0x0a, 0x09, 0x61, 0x63, 0x6b, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x0b, 0x32, 0x16, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x63, 0x6b, 0x4d, 0x65,
0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x73, 0x73, 0x61, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x61, 0x63, 0x6b, 0x73, 0x22,
0x2e, 0x41, 0x63, 0x6b, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x52, 0x09, 0x61, 0x63, 0x6b, 0x41, 0x58, 0x0a, 0x0e, 0x41, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x44, 0x61, 0x74,
0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x21, 0x0a, 0x09, 0x41, 0x63, 0x6b, 0x41, 0x6d, 0x6f, 0x75, 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x18, 0x01,
0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x12,
0x05, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x8e, 0x01, 0x0a, 0x11, 0x41, 0x63, 0x6b, 0x28, 0x0a, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x31, 0x10, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63,
0x0a, 0x08, 0x61, 0x75, 0x74, 0x68, 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x65, 0x52, 0x06, 0x64, 0x65, 0x76, 0x69, 0x63, 0x65, 0x22, 0x47, 0x0a, 0x0d, 0x49, 0x6d, 0x61,
0x32, 0x15, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x6d,
0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x61, 0x75, 0x74, 0x68, 0x44, 0x61, 0x74, 0x61, 0x67, 0x65, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x69, 0x6d, 0x61,
0x61, 0x12, 0x2e, 0x0a, 0x08, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x72, 0x18, 0x02, 0x20, 0x67, 0x65, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65,
0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x45, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x09, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74,
0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x72, 0x52, 0x08, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x65, 0x64, 0x22, 0x7a, 0x0a, 0x12, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x6d, 0x61, 0x67,
0x72, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x6f, 0x43, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x12, 0x31, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61,
0x0c, 0x52, 0x06, 0x6e, 0x6f, 0x43, 0x6c, 0x75, 0x65, 0x22, 0x58, 0x0a, 0x0e, 0x41, 0x63, 0x6b, 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6c, 0x69,
0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x6e, 0x74, 0x2e, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74,
0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x12, 0x31, 0x0a, 0x08, 0x61,
0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x12, 0x28, 0x0a, 0x06, 0x64, 0x65, 0x76, 0x75, 0x74, 0x68, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e,
0x69, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x4d, 0x65, 0x73,
0x61, 0x67, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x06, 0x64, 0x65, 0x76, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x61, 0x75, 0x74, 0x68, 0x44, 0x61, 0x74, 0x61, 0x22, 0x3c,
0x69, 0x63, 0x65, 0x22, 0x47, 0x0a, 0x0d, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x0a, 0x13, 0x42, 0x75, 0x67, 0x6c, 0x65, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x53, 0x65,
0x44, 0x61, 0x74, 0x61, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x49, 0x44, 0x18, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x25, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x49, 0x44, 0x12, 0x1c, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x42, 0x75, 0x67,
0x0a, 0x09, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x6c, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x1f, 0x0a, 0x09,
0x08, 0x52, 0x09, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x22, 0x7a, 0x0a, 0x12, 0x42, 0x75, 0x67, 0x6c, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70,
0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x2a, 0x90, 0x02,
0x61, 0x64, 0x12, 0x31, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x18, 0x01, 0x0a, 0x10, 0x42, 0x75, 0x67, 0x6c, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x49, 0x6d, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x1a, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x42, 0x55,
0x61, 0x67, 0x65, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x47, 0x4c, 0x45, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45,
0x61, 0x44, 0x61, 0x74, 0x61, 0x12, 0x31, 0x0a, 0x08, 0x61, 0x75, 0x74, 0x68, 0x44, 0x61, 0x74, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x53, 0x4d, 0x53, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x4d,
0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x4d, 0x53, 0x10, 0x02, 0x12, 0x07, 0x0a, 0x03, 0x52, 0x43, 0x53, 0x10, 0x03, 0x12, 0x0e, 0x0a,
0x65, 0x73, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x08, 0x0a, 0x43, 0x4c, 0x4f, 0x55, 0x44, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x10, 0x04, 0x12, 0x12, 0x0a,
0x61, 0x75, 0x74, 0x68, 0x44, 0x61, 0x74, 0x61, 0x22, 0x3c, 0x0a, 0x13, 0x42, 0x75, 0x67, 0x6c, 0x0e, 0x49, 0x4d, 0x44, 0x4e, 0x5f, 0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, 0x44, 0x10,
0x65, 0x42, 0x61, 0x63, 0x6b, 0x65, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x49, 0x4d, 0x44, 0x4e, 0x5f, 0x44, 0x49, 0x53, 0x50, 0x4c, 0x41,
0x25, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x59, 0x45, 0x44, 0x10, 0x06, 0x12, 0x11, 0x0a, 0x0d, 0x49, 0x4d, 0x44, 0x4e, 0x5f, 0x46, 0x41,
0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x2e, 0x42, 0x75, 0x67, 0x6c, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x10, 0x07, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x43, 0x53, 0x5f,
0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x1f, 0x0a, 0x09, 0x42, 0x75, 0x67, 0x6c, 0x65, 0x43, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x49, 0x43, 0x10, 0x08, 0x12, 0x07, 0x0a, 0x03, 0x46, 0x54, 0x44,
0x6f, 0x64, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x10, 0x09, 0x12, 0x12, 0x0a, 0x0e, 0x46, 0x54, 0x5f, 0x45, 0x32, 0x45, 0x45, 0x5f, 0x4c, 0x45,
0x03, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x2a, 0x90, 0x02, 0x0a, 0x10, 0x42, 0x75, 0x67, 0x6c, 0x47, 0x41, 0x43, 0x59, 0x10, 0x0a, 0x12, 0x0f, 0x0a, 0x0b, 0x46, 0x54, 0x5f, 0x45, 0x32, 0x45,
0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x1a, 0x45, 0x5f, 0x58, 0x4d, 0x4c, 0x10, 0x0b, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x49, 0x47, 0x48, 0x54,
0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x42, 0x55, 0x47, 0x4c, 0x45, 0x5f, 0x4d, 0x45, 0x45, 0x52, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0x0c, 0x12, 0x13, 0x0a, 0x0f,
0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x07, 0x0a, 0x03, 0x52, 0x42, 0x4d, 0x5f, 0x53, 0x50, 0x41, 0x4d, 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x52, 0x54, 0x10,
0x53, 0x4d, 0x53, 0x10, 0x01, 0x12, 0x07, 0x0a, 0x03, 0x4d, 0x4d, 0x53, 0x10, 0x02, 0x12, 0x07, 0x0d, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x41, 0x54, 0x45, 0x4c, 0x4c, 0x49, 0x54, 0x45, 0x10, 0x0e,
0x0a, 0x03, 0x52, 0x43, 0x53, 0x10, 0x03, 0x12, 0x0e, 0x0a, 0x0a, 0x43, 0x4c, 0x4f, 0x55, 0x44, 0x2a, 0x75, 0x0a, 0x0c, 0x42, 0x72, 0x6f, 0x77, 0x73, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x73,
0x5f, 0x53, 0x59, 0x4e, 0x43, 0x10, 0x04, 0x12, 0x12, 0x0a, 0x0e, 0x49, 0x4d, 0x44, 0x4e, 0x5f, 0x12, 0x18, 0x0a, 0x14, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x42, 0x52, 0x4f, 0x57,
0x44, 0x45, 0x4c, 0x49, 0x56, 0x45, 0x52, 0x45, 0x44, 0x10, 0x05, 0x12, 0x12, 0x0a, 0x0e, 0x49, 0x53, 0x45, 0x52, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x4f, 0x54,
0x4d, 0x44, 0x4e, 0x5f, 0x44, 0x49, 0x53, 0x50, 0x4c, 0x41, 0x59, 0x45, 0x44, 0x10, 0x06, 0x12, 0x48, 0x45, 0x52, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x48, 0x52, 0x4f, 0x4d, 0x45, 0x10,
0x11, 0x0a, 0x0d, 0x49, 0x4d, 0x44, 0x4e, 0x5f, 0x46, 0x41, 0x4c, 0x4c, 0x42, 0x41, 0x43, 0x4b, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x46, 0x49, 0x52, 0x45, 0x46, 0x4f, 0x58, 0x10, 0x03, 0x12, 0x0a,
0x10, 0x07, 0x12, 0x0f, 0x0a, 0x0b, 0x52, 0x43, 0x53, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x49, 0x0a, 0x06, 0x53, 0x41, 0x46, 0x41, 0x52, 0x49, 0x10, 0x04, 0x12, 0x09, 0x0a, 0x05, 0x4f, 0x50,
0x43, 0x10, 0x08, 0x12, 0x07, 0x0a, 0x03, 0x46, 0x54, 0x44, 0x10, 0x09, 0x12, 0x12, 0x0a, 0x0e, 0x45, 0x52, 0x41, 0x10, 0x05, 0x12, 0x06, 0x0a, 0x02, 0x49, 0x45, 0x10, 0x06, 0x12, 0x08, 0x0a,
0x46, 0x54, 0x5f, 0x45, 0x32, 0x45, 0x45, 0x5f, 0x4c, 0x45, 0x47, 0x41, 0x43, 0x59, 0x10, 0x0a, 0x04, 0x45, 0x44, 0x47, 0x45, 0x10, 0x07, 0x42, 0x0e, 0x5a, 0x0c, 0x2e, 0x2e, 0x2f, 0x2e, 0x2e,
0x12, 0x0f, 0x0a, 0x0b, 0x46, 0x54, 0x5f, 0x45, 0x32, 0x45, 0x45, 0x5f, 0x58, 0x4d, 0x4c, 0x10, 0x2f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x0b, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x49, 0x47, 0x48, 0x54, 0x45, 0x52, 0x5f, 0x4d, 0x45, 0x53,
0x53, 0x41, 0x47, 0x45, 0x10, 0x0c, 0x12, 0x13, 0x0a, 0x0f, 0x52, 0x42, 0x4d, 0x5f, 0x53, 0x50,
0x41, 0x4d, 0x5f, 0x52, 0x45, 0x50, 0x4f, 0x52, 0x54, 0x10, 0x0d, 0x12, 0x0d, 0x0a, 0x09, 0x53,
0x41, 0x54, 0x45, 0x4c, 0x4c, 0x49, 0x54, 0x45, 0x10, 0x0e, 0x2a, 0x75, 0x0a, 0x0c, 0x42, 0x72,
0x6f, 0x77, 0x73, 0x65, 0x72, 0x54, 0x79, 0x70, 0x65, 0x73, 0x12, 0x18, 0x0a, 0x14, 0x55, 0x4e,
0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x42, 0x52, 0x4f, 0x57, 0x53, 0x45, 0x52, 0x5f, 0x54, 0x59,
0x50, 0x45, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x4f, 0x54, 0x48, 0x45, 0x52, 0x10, 0x01, 0x12,
0x0a, 0x0a, 0x06, 0x43, 0x48, 0x52, 0x4f, 0x4d, 0x45, 0x10, 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x46,
0x49, 0x52, 0x45, 0x46, 0x4f, 0x58, 0x10, 0x03, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x41, 0x46, 0x41,
0x52, 0x49, 0x10, 0x04, 0x12, 0x09, 0x0a, 0x05, 0x4f, 0x50, 0x45, 0x52, 0x41, 0x10, 0x05, 0x12,
0x06, 0x0a, 0x02, 0x49, 0x45, 0x10, 0x06, 0x12, 0x08, 0x0a, 0x04, 0x45, 0x44, 0x47, 0x45, 0x10,
0x07, 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 ( var (
@ -884,41 +683,35 @@ func file_client_proto_rawDescGZIP() []byte {
} }
var file_client_proto_enumTypes = make([]protoimpl.EnumInfo, 2) var file_client_proto_enumTypes = make([]protoimpl.EnumInfo, 2)
var file_client_proto_msgTypes = make([]protoimpl.MessageInfo, 12) var file_client_proto_msgTypes = make([]protoimpl.MessageInfo, 8)
var file_client_proto_goTypes = []interface{}{ var file_client_proto_goTypes = []interface{}{
(BugleMessageType)(0), // 0: client.BugleMessageType (BugleMessageType)(0), // 0: client.BugleMessageType
(BrowserTypes)(0), // 1: client.BrowserTypes (BrowserTypes)(0), // 1: client.BrowserTypes
(*NotifyDittoActivityPayload)(nil), // 2: client.NotifyDittoActivityPayload (*NotifyDittoActivityPayload)(nil), // 2: client.NotifyDittoActivityPayload
(*MessageReadPayload)(nil), // 3: client.MessageReadPayload (*MessageReadPayload)(nil), // 3: client.MessageReadPayload
(*AckMessageResponse)(nil), // 4: client.AckMessageResponse (*AckMessagePayload)(nil), // 4: client.AckMessagePayload
(*AckContainer)(nil), // 5: client.AckContainer (*AckMessageData)(nil), // 5: client.AckMessageData
(*AckData)(nil), // 6: client.AckData (*ImageMetaData)(nil), // 6: client.ImageMetaData
(*AckAmount)(nil), // 7: client.AckAmount (*UploadImagePayload)(nil), // 7: client.UploadImagePayload
(*AckMessagePayload)(nil), // 8: client.AckMessagePayload (*BugleBackendService)(nil), // 8: client.BugleBackendService
(*AckMessageData)(nil), // 9: client.AckMessageData (*BugleCode)(nil), // 9: client.BugleCode
(*ImageMetaData)(nil), // 10: client.ImageMetaData (*AuthMessage)(nil), // 10: messages.AuthMessage
(*UploadImagePayload)(nil), // 11: client.UploadImagePayload (*EmptyArr)(nil), // 11: messages.EmptyArr
(*BugleBackendService)(nil), // 12: client.BugleBackendService (*Device)(nil), // 12: messages.Device
(*BugleCode)(nil), // 13: client.BugleCode
(*AuthMessage)(nil), // 14: messages.AuthMessage
(*EmptyArr)(nil), // 15: messages.EmptyArr
(*Device)(nil), // 16: messages.Device
} }
var file_client_proto_depIdxs = []int32{ var file_client_proto_depIdxs = []int32{
5, // 0: client.AckMessageResponse.container:type_name -> client.AckContainer 10, // 0: client.AckMessagePayload.authData:type_name -> messages.AuthMessage
6, // 1: client.AckContainer.data:type_name -> client.AckData 11, // 1: client.AckMessagePayload.emptyArr:type_name -> messages.EmptyArr
7, // 2: client.AckData.ackAmount:type_name -> client.AckAmount 5, // 2: client.AckMessagePayload.acks:type_name -> client.AckMessageData
14, // 3: client.AckMessagePayload.authData:type_name -> messages.AuthMessage 12, // 3: client.AckMessageData.device:type_name -> messages.Device
15, // 4: client.AckMessagePayload.emptyArr:type_name -> messages.EmptyArr 6, // 4: client.UploadImagePayload.metaData:type_name -> client.ImageMetaData
16, // 5: client.AckMessageData.device:type_name -> messages.Device 10, // 5: client.UploadImagePayload.authData:type_name -> messages.AuthMessage
10, // 6: client.UploadImagePayload.metaData:type_name -> client.ImageMetaData 9, // 6: client.BugleBackendService.data:type_name -> client.BugleCode
14, // 7: client.UploadImagePayload.authData:type_name -> messages.AuthMessage 7, // [7:7] is the sub-list for method output_type
13, // 8: client.BugleBackendService.data:type_name -> client.BugleCode 7, // [7:7] is the sub-list for method input_type
9, // [9:9] is the sub-list for method output_type 7, // [7:7] is the sub-list for extension type_name
9, // [9:9] is the sub-list for method input_type 7, // [7:7] is the sub-list for extension extendee
9, // [9:9] is the sub-list for extension type_name 0, // [0:7] is the sub-list for field type_name
9, // [9:9] is the sub-list for extension extendee
0, // [0:9] is the sub-list for field type_name
} }
func init() { file_client_proto_init() } func init() { file_client_proto_init() }
@ -953,54 +746,6 @@ func file_client_proto_init() {
} }
} }
file_client_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { file_client_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*AckMessageResponse); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_client_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*AckContainer); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_client_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*AckData); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_client_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*AckAmount); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
file_client_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*AckMessagePayload); i { switch v := v.(*AckMessagePayload); i {
case 0: case 0:
return &v.state return &v.state
@ -1012,7 +757,7 @@ func file_client_proto_init() {
return nil return nil
} }
} }
file_client_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { file_client_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*AckMessageData); i { switch v := v.(*AckMessageData); i {
case 0: case 0:
return &v.state return &v.state
@ -1024,7 +769,7 @@ func file_client_proto_init() {
return nil return nil
} }
} }
file_client_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { file_client_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ImageMetaData); i { switch v := v.(*ImageMetaData); i {
case 0: case 0:
return &v.state return &v.state
@ -1036,7 +781,7 @@ func file_client_proto_init() {
return nil return nil
} }
} }
file_client_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { file_client_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*UploadImagePayload); i { switch v := v.(*UploadImagePayload); i {
case 0: case 0:
return &v.state return &v.state
@ -1048,7 +793,7 @@ func file_client_proto_init() {
return nil return nil
} }
} }
file_client_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { file_client_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*BugleBackendService); i { switch v := v.(*BugleBackendService); i {
case 0: case 0:
return &v.state return &v.state
@ -1060,7 +805,7 @@ func file_client_proto_init() {
return nil return nil
} }
} }
file_client_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { file_client_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*BugleCode); i { switch v := v.(*BugleCode); i {
case 0: case 0:
return &v.state return &v.state
@ -1079,7 +824,7 @@ func file_client_proto_init() {
GoPackagePath: reflect.TypeOf(x{}).PkgPath(), GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_client_proto_rawDesc, RawDescriptor: file_client_proto_rawDesc,
NumEnums: 2, NumEnums: 2,
NumMessages: 12, NumMessages: 8,
NumExtensions: 0, NumExtensions: 0,
NumServices: 0, NumServices: 0,
}, },

View file

@ -388,7 +388,7 @@ type EmptyRefreshArr struct {
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields unknownFields protoimpl.UnknownFields
EmptyArr *EmptyEmptyArr `protobuf:"bytes,9,opt,name=emptyArr,proto3" json:"emptyArr,omitempty"` EmptyArr *EmptyArr `protobuf:"bytes,9,opt,name=emptyArr,proto3" json:"emptyArr,omitempty"`
} }
func (x *EmptyRefreshArr) Reset() { func (x *EmptyRefreshArr) Reset() {
@ -423,21 +423,23 @@ func (*EmptyRefreshArr) Descriptor() ([]byte, []int) {
return file_messages_proto_rawDescGZIP(), []int{1} return file_messages_proto_rawDescGZIP(), []int{1}
} }
func (x *EmptyRefreshArr) GetEmptyArr() *EmptyEmptyArr { func (x *EmptyRefreshArr) GetEmptyArr() *EmptyArr {
if x != nil { if x != nil {
return x.EmptyArr return x.EmptyArr
} }
return nil return nil
} }
type EmptyEmptyArr struct { type StartAckMessage struct {
state protoimpl.MessageState state protoimpl.MessageState
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields unknownFields protoimpl.UnknownFields
Count *int32 `protobuf:"varint,1,opt,name=count,proto3,oneof" json:"count,omitempty"`
} }
func (x *EmptyEmptyArr) Reset() { func (x *StartAckMessage) Reset() {
*x = EmptyEmptyArr{} *x = StartAckMessage{}
if protoimpl.UnsafeEnabled { if protoimpl.UnsafeEnabled {
mi := &file_messages_proto_msgTypes[2] mi := &file_messages_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@ -445,13 +447,13 @@ func (x *EmptyEmptyArr) Reset() {
} }
} }
func (x *EmptyEmptyArr) String() string { func (x *StartAckMessage) String() string {
return protoimpl.X.MessageStringOf(x) return protoimpl.X.MessageStringOf(x)
} }
func (*EmptyEmptyArr) ProtoMessage() {} func (*StartAckMessage) ProtoMessage() {}
func (x *EmptyEmptyArr) ProtoReflect() protoreflect.Message { func (x *StartAckMessage) ProtoReflect() protoreflect.Message {
mi := &file_messages_proto_msgTypes[2] mi := &file_messages_proto_msgTypes[2]
if protoimpl.UnsafeEnabled && x != nil { if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@ -463,18 +465,27 @@ func (x *EmptyEmptyArr) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x) return mi.MessageOf(x)
} }
// Deprecated: Use EmptyEmptyArr.ProtoReflect.Descriptor instead. // Deprecated: Use StartAckMessage.ProtoReflect.Descriptor instead.
func (*EmptyEmptyArr) Descriptor() ([]byte, []int) { func (*StartAckMessage) Descriptor() ([]byte, []int) {
return file_messages_proto_rawDescGZIP(), []int{2} return file_messages_proto_rawDescGZIP(), []int{2}
} }
func (x *StartAckMessage) GetCount() int32 {
if x != nil && x.Count != nil {
return *x.Count
}
return 0
}
type InternalMessage struct { type InternalMessage struct {
state protoimpl.MessageState state protoimpl.MessageState
sizeCache protoimpl.SizeCache sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields unknownFields protoimpl.UnknownFields
Unknown1 []byte `protobuf:"bytes,1,opt,name=unknown1,proto3" json:"unknown1,omitempty"` Data *InternalMessageData `protobuf:"bytes,2,opt,name=data,proto3,oneof" json:"data,omitempty"`
Data *InternalMessageData `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` Heartbeat *EmptyArr `protobuf:"bytes,3,opt,name=heartbeat,proto3,oneof" json:"heartbeat,omitempty"`
Ack *StartAckMessage `protobuf:"bytes,4,opt,name=ack,proto3,oneof" json:"ack,omitempty"`
StartRead *EmptyArr `protobuf:"bytes,5,opt,name=startRead,proto3,oneof" json:"startRead,omitempty"`
} }
func (x *InternalMessage) Reset() { func (x *InternalMessage) Reset() {
@ -509,16 +520,30 @@ func (*InternalMessage) Descriptor() ([]byte, []int) {
return file_messages_proto_rawDescGZIP(), []int{3} return file_messages_proto_rawDescGZIP(), []int{3}
} }
func (x *InternalMessage) GetUnknown1() []byte { func (x *InternalMessage) GetData() *InternalMessageData {
if x != nil { if x != nil {
return x.Unknown1 return x.Data
} }
return nil return nil
} }
func (x *InternalMessage) GetData() *InternalMessageData { func (x *InternalMessage) GetHeartbeat() *EmptyArr {
if x != nil { if x != nil {
return x.Data return x.Heartbeat
}
return nil
}
func (x *InternalMessage) GetAck() *StartAckMessage {
if x != nil {
return x.Ack
}
return nil
}
func (x *InternalMessage) GetStartRead() *EmptyArr {
if x != nil {
return x.StartRead
} }
return nil return nil
} }
@ -1590,249 +1615,262 @@ var file_messages_proto_rawDesc = []byte{
0x65, 0x73, 0x68, 0x41, 0x72, 0x72, 0x52, 0x0f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x66, 0x65, 0x73, 0x68, 0x41, 0x72, 0x72, 0x52, 0x0f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x52, 0x65, 0x66,
0x72, 0x65, 0x73, 0x68, 0x41, 0x72, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x72, 0x65, 0x73, 0x68, 0x41, 0x72, 0x72, 0x12, 0x20, 0x0a, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61,
0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x65, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0b, 0x6d, 0x65,
0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x46, 0x0a, 0x0f, 0x45, 0x6d, 0x70, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x41, 0x0a, 0x0f, 0x45, 0x6d, 0x70,
0x74, 0x79, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x41, 0x72, 0x72, 0x12, 0x33, 0x0a, 0x08, 0x74, 0x79, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x41, 0x72, 0x72, 0x12, 0x2e, 0x0a, 0x08,
0x65, 0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12,
0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x45, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x41,
0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x72, 0x52, 0x08, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x72, 0x72, 0x52, 0x08, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x72, 0x22, 0x36, 0x0a, 0x0f,
0x72, 0x22, 0x0f, 0x0a, 0x0d, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x41, 0x53, 0x74, 0x61, 0x72, 0x74, 0x41, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12,
0x72, 0x72, 0x22, 0x60, 0x0a, 0x0f, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x19, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x48, 0x00,
0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x88, 0x01, 0x01, 0x42, 0x08, 0x0a, 0x06, 0x5f, 0x63,
0x31, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x08, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x96, 0x02, 0x0a, 0x0f, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61,
0x31, 0x12, 0x31, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x36, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61,
0x1d, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x04, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
0x64, 0x61, 0x74, 0x61, 0x22, 0xd6, 0x03, 0x0a, 0x13, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x65, 0x44, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x88, 0x01, 0x01,
0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1e, 0x0a, 0x0a, 0x12, 0x35, 0x0a, 0x09, 0x68, 0x65, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x18, 0x03, 0x20,
0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x52, 0x0a, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x49, 0x44, 0x12, 0x34, 0x0a, 0x0a,
0x62, 0x75, 0x67, 0x6c, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e,
0x32, 0x14, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x42, 0x75, 0x67, 0x6c,
0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x0a, 0x62, 0x75, 0x67, 0x6c, 0x65, 0x52, 0x6f, 0x75,
0x74, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75,
0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x45,
0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x12, 0x37, 0x0a, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x6d, 0x65,
0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79,
0x70, 0x65, 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12,
0x24, 0x0a, 0x0d, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65,
0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x45, 0x78,
0x65, 0x63, 0x75, 0x74, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x65,
0x63, 0x6f, 0x6e, 0x64, 0x73, 0x54, 0x61, 0x6b, 0x65, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09,
0x52, 0x11, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x54, 0x61,
0x6b, 0x65, 0x6e, 0x12, 0x28, 0x0a, 0x06, 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x18, 0x08, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x44,
0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x06, 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x12, 0x2a, 0x0a,
0x07, 0x62, 0x72, 0x6f, 0x77, 0x73, 0x65, 0x72, 0x18, 0x09, 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, 0x22, 0x0a, 0x0c, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x62, 0x75, 0x66, 0x44, 0x61, 0x74, 0x61, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0c, 0x52,
0x0c, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x44, 0x61, 0x74, 0x61, 0x12, 0x20, 0x0a,
0x0b, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x44, 0x18, 0x11, 0x20, 0x01,
0x28, 0x09, 0x52, 0x0b, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x44, 0x12,
0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x15, 0x20, 0x01,
0x28, 0x09, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xe7, 0x01,
0x0a, 0x13, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e,
0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f,
0x6e, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70,
0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d,
0x70, 0x12, 0x2c, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28,
0x0e, 0x32, 0x14, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x41, 0x63, 0x74,
0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12,
0x14, 0x0a, 0x05, 0x62, 0x6f, 0x6f, 0x6c, 0x31, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05,
0x62, 0x6f, 0x6f, 0x6c, 0x31, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x6f, 0x6f, 0x6c, 0x32, 0x18, 0x07,
0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x62, 0x6f, 0x6f, 0x6c, 0x32, 0x12, 0x24, 0x0a, 0x0d, 0x65,
0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x18, 0x08, 0x20, 0x01,
0x28, 0x0c, 0x52, 0x0d, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74,
0x61, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x6f, 0x6f, 0x6c, 0x33, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08,
0x52, 0x05, 0x62, 0x6f, 0x6f, 0x6c, 0x33, 0x22, 0xf3, 0x01, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64,
0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x28, 0x0a, 0x06, 0x6d, 0x6f, 0x62, 0x69, 0x6c,
0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
0x65, 0x73, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x06, 0x6d, 0x6f, 0x62, 0x69, 0x6c,
0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61,
0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
0x73, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x44, 0x61, 0x74,
0x61, 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3b,
0x0a, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x75, 0x74, 0x68, 0x18, 0x03, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x53,
0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x75, 0x74, 0x68, 0x52, 0x0b,
0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x75, 0x74, 0x68, 0x12, 0x10, 0x0a, 0x03, 0x54,
0x54, 0x4c, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x54, 0x54, 0x4c, 0x12, 0x2e, 0x0a,
0x08, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x12, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79,
0x41, 0x72, 0x72, 0x52, 0x08, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x72, 0x22, 0x9a, 0x01,
0x0a, 0x0f, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x75, 0x74,
0x68, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x12,
0x2a, 0x0a, 0x10, 0x74, 0x61, 0x63, 0x68, 0x79, 0x6f, 0x6e, 0x41, 0x75, 0x74, 0x68, 0x54, 0x6f,
0x6b, 0x65, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x10, 0x74, 0x61, 0x63, 0x68, 0x79,
0x6f, 0x6e, 0x41, 0x75, 0x74, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x3d, 0x0a, 0x0d, 0x63,
0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x43, 0x6f,
0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x63, 0x6f, 0x6e,
0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xaf, 0x01, 0x0a, 0x13, 0x53,
0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e,
0x61, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44,
0x12, 0x2c, 0x0a, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e,
0x32, 0x14, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69,
0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e,
0x0a, 0x12, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f,
0x44, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x12, 0x65, 0x6e, 0x63, 0x72,
0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1c,
0x0a, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x06, 0x20, 0x01, 0x28,
0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, 0xce, 0x01, 0x0a,
0x0f, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61,
0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20,
0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x12, 0x34,
0x0a, 0x0a, 0x62, 0x75, 0x67, 0x6c, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01,
0x28, 0x0e, 0x32, 0x14, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x42, 0x75,
0x67, 0x6c, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52, 0x0a, 0x62, 0x75, 0x67, 0x6c, 0x65, 0x52,
0x6f, 0x75, 0x74, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
0x44, 0x61, 0x74, 0x61, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x62, 0x75, 0x66, 0x44, 0x61, 0x74, 0x61, 0x12, 0x43, 0x0a, 0x0f, 0x6d, 0x65, 0x73, 0x73,
0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x44, 0x61, 0x74, 0x61, 0x18, 0x17, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x19, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x4d, 0x65, 0x73,
0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0f, 0x6d, 0x65,
0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, 0x7a, 0x0a,
0x0f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x44, 0x61, 0x74, 0x61,
0x12, 0x2e, 0x0a, 0x08, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x72, 0x18, 0x01, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x45, 0x6d,
0x70, 0x74, 0x79, 0x41, 0x72, 0x72, 0x52, 0x08, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x72,
0x12, 0x37, 0x0a, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18,
0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73,
0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x6d, 0x65,
0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x22, 0x0a, 0x0a, 0x08, 0x45, 0x6d, 0x70,
0x74, 0x79, 0x41, 0x72, 0x72, 0x22, 0x96, 0x01, 0x0a, 0x0b, 0x41, 0x75, 0x74, 0x68, 0x4d, 0x65,
0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73,
0x74, 0x49, 0x44, 0x12, 0x2a, 0x0a, 0x10, 0x74, 0x61, 0x63, 0x68, 0x79, 0x6f, 0x6e, 0x41, 0x75,
0x74, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x10, 0x74,
0x61, 0x63, 0x68, 0x79, 0x6f, 0x6e, 0x41, 0x75, 0x74, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12,
0x3d, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e,
0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52,
0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xa2,
0x02, 0x0a, 0x16, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x04, 0x61, 0x75, 0x74,
0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
0x65, 0x73, 0x2e, 0x41, 0x75, 0x74, 0x68, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x04,
0x61, 0x75, 0x74, 0x68, 0x12, 0x53, 0x0a, 0x07, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x18,
0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73,
0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73,
0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x45,
0x6d, 0x70, 0x74, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x32, 0x48, 0x00, 0x52, 0x07, 0x75,
0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x88, 0x01, 0x01, 0x1a, 0x15, 0x0a, 0x13, 0x55, 0x6e, 0x6b,
0x6e, 0x6f, 0x77, 0x6e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x31,
0x1a, 0x65, 0x0a, 0x13, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x45, 0x6d, 0x70, 0x74, 0x79,
0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x32, 0x12, 0x4e, 0x0a, 0x07, 0x75, 0x6e, 0x6b, 0x6e, 0x6f,
0x77, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61,
0x67, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61,
0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x2e, 0x55, 0x6e, 0x6b, 0x6e, 0x6f,
0x77, 0x6e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x31, 0x52, 0x07,
0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x75, 0x6e, 0x6b, 0x6e,
0x6f, 0x77, 0x6e, 0x22, 0x4c, 0x0a, 0x08, 0x42, 0x61, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12,
0x10, 0x0a, 0x03, 0x54, 0x54, 0x4c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x54, 0x54,
0x4c, 0x12, 0x2e, 0x0a, 0x08, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x72, 0x18, 0x06, 0x20,
0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x45, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x45,
0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x72, 0x52, 0x08, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x72, 0x48, 0x01, 0x52, 0x09, 0x68, 0x65, 0x61, 0x72, 0x74,
0x72, 0x22, 0x56, 0x0a, 0x06, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x62, 0x65, 0x61, 0x74, 0x88, 0x01, 0x01, 0x12, 0x30, 0x0a, 0x03, 0x61, 0x63, 0x6b, 0x18, 0x04,
0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e,
0x72, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x44, 0x18, 0x53, 0x74, 0x61, 0x72, 0x74, 0x41, 0x63, 0x6b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x48,
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x44, 0x12, 0x02, 0x52, 0x03, 0x61, 0x63, 0x6b, 0x88, 0x01, 0x01, 0x12, 0x35, 0x0a, 0x09, 0x73, 0x74, 0x61,
0x18, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x72, 0x74, 0x52, 0x65, 0x61, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d,
0x52, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x22, 0x5f, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x72,
0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x56, 0x31, 0x48, 0x03, 0x52, 0x09, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x61, 0x64, 0x88, 0x01, 0x01,
0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x56, 0x31, 0x12, 0x0e, 0x0a, 0x02, 0x56, 0x32, 0x42, 0x07, 0x0a, 0x05, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x68, 0x65,
0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x56, 0x32, 0x12, 0x0e, 0x0a, 0x02, 0x56, 0x33, 0x61, 0x72, 0x74, 0x62, 0x65, 0x61, 0x74, 0x42, 0x06, 0x0a, 0x04, 0x5f, 0x61, 0x63, 0x6b, 0x42,
0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x56, 0x33, 0x12, 0x0e, 0x0a, 0x02, 0x56, 0x34, 0x0c, 0x0a, 0x0a, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x52, 0x65, 0x61, 0x64, 0x22, 0xd6, 0x03,
0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x56, 0x34, 0x12, 0x0e, 0x0a, 0x02, 0x56, 0x35, 0x0a, 0x13, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x56, 0x35, 0x2a, 0x43, 0x0a, 0x0a, 0x42, 0x75, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
0x67, 0x6c, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x55, 0x4e, 0x4b, 0x4e, 0x65, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x73, 0x70, 0x6f,
0x4f, 0x57, 0x4e, 0x5f, 0x42, 0x55, 0x47, 0x4c, 0x45, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x45, 0x10, 0x6e, 0x73, 0x65, 0x49, 0x44, 0x12, 0x34, 0x0a, 0x0a, 0x62, 0x75, 0x67, 0x6c, 0x65, 0x52, 0x6f,
0x00, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x61, 0x74, 0x61, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x10, 0x13, 0x75, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x6d, 0x65, 0x73, 0x73,
0x12, 0x0d, 0x0a, 0x09, 0x50, 0x61, 0x69, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x10, 0x0e, 0x2a, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x42, 0x75, 0x67, 0x6c, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x52,
0x8b, 0x09, 0x0a, 0x0a, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x62, 0x75, 0x67, 0x6c, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x73,
0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x74, 0x61, 0x72, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28,
0x16, 0x0a, 0x12, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x56, 0x45, 0x52, 0x53, 0x41, 0x09, 0x52, 0x0c, 0x73, 0x74, 0x61, 0x72, 0x74, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x12,
0x54, 0x49, 0x4f, 0x4e, 0x53, 0x10, 0x01, 0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x37, 0x0a, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x05,
0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x53, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x45, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e,
0x4e, 0x44, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0x03, 0x12, 0x1c, 0x0a, 0x17, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x6d, 0x65, 0x73,
0x4c, 0x49, 0x53, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x56, 0x45, 0x52, 0x53, 0x41, 0x54, 0x49, 0x4f, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x66, 0x69, 0x6e, 0x69,
0x4e, 0x53, 0x5f, 0x53, 0x59, 0x4e, 0x43, 0x10, 0xd7, 0x08, 0x12, 0x13, 0x0a, 0x0f, 0x4d, 0x45, 0x73, 0x68, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52,
0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x53, 0x10, 0x04, 0x12, 0x0d, 0x66, 0x69, 0x6e, 0x69, 0x73, 0x68, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x12, 0x2c,
0x11, 0x0a, 0x0d, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x43, 0x54, 0x53, 0x0a, 0x11, 0x6d, 0x69, 0x6c, 0x6c, 0x69, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x54, 0x61,
0x10, 0x06, 0x12, 0x18, 0x0a, 0x14, 0x43, 0x4f, 0x4e, 0x56, 0x45, 0x52, 0x53, 0x41, 0x54, 0x49, 0x6b, 0x65, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6d, 0x69, 0x6c, 0x6c, 0x69,
0x4f, 0x4e, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x53, 0x10, 0x07, 0x12, 0x1e, 0x0a, 0x1a, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x54, 0x61, 0x6b, 0x65, 0x6e, 0x12, 0x28, 0x0a, 0x06,
0x47, 0x45, 0x54, 0x5f, 0x4f, 0x52, 0x5f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4f, 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d,
0x4e, 0x56, 0x45, 0x52, 0x53, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x06,
0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x10, 0x0a, 0x12, 0x1a, 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x12, 0x2a, 0x0a, 0x07, 0x62, 0x72, 0x6f, 0x77, 0x73, 0x65,
0x0a, 0x16, 0x42, 0x52, 0x4f, 0x57, 0x53, 0x45, 0x52, 0x5f, 0x50, 0x52, 0x45, 0x53, 0x45, 0x4e, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67,
0x43, 0x45, 0x5f, 0x43, 0x48, 0x45, 0x43, 0x4b, 0x10, 0x0b, 0x12, 0x12, 0x0a, 0x0e, 0x54, 0x59, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x76, 0x69, 0x63, 0x65, 0x52, 0x07, 0x62, 0x72, 0x6f, 0x77, 0x73,
0x50, 0x49, 0x4e, 0x47, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x53, 0x10, 0x0c, 0x12, 0x13, 0x65, 0x72, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x44, 0x61,
0x0a, 0x0f, 0x53, 0x45, 0x54, 0x54, 0x49, 0x4e, 0x47, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x74, 0x61, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62,
0x45, 0x10, 0x0d, 0x12, 0x0e, 0x0a, 0x0a, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x41, 0x4c, 0x45, 0x52, 0x75, 0x66, 0x44, 0x61, 0x74, 0x61, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x74,
0x54, 0x10, 0x0e, 0x12, 0x17, 0x0a, 0x13, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4f, 0x75, 0x72, 0x65, 0x49, 0x44, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, 0x69, 0x67,
0x4e, 0x56, 0x45, 0x52, 0x53, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x0f, 0x12, 0x0f, 0x0a, 0x0b, 0x6e, 0x61, 0x74, 0x75, 0x72, 0x65, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09, 0x74, 0x69, 0x6d, 0x65,
0x47, 0x45, 0x54, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x53, 0x10, 0x10, 0x12, 0x18, 0x0a, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x15, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x74, 0x69, 0x6d,
0x14, 0x41, 0x43, 0x4b, 0x5f, 0x42, 0x52, 0x4f, 0x57, 0x53, 0x45, 0x52, 0x5f, 0x50, 0x52, 0x45, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xe7, 0x01, 0x0a, 0x13, 0x49, 0x6e, 0x74, 0x65, 0x72,
0x53, 0x45, 0x4e, 0x43, 0x45, 0x10, 0x11, 0x12, 0x15, 0x0a, 0x11, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x6e, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1c,
0x53, 0x54, 0x49, 0x43, 0x4b, 0x45, 0x52, 0x5f, 0x53, 0x45, 0x54, 0x53, 0x10, 0x12, 0x12, 0x13, 0x0a, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28,
0x0a, 0x0f, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x5f, 0x52, 0x43, 0x53, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x1c, 0x0a, 0x09,
0x50, 0x10, 0x13, 0x12, 0x20, 0x0a, 0x1c, 0x41, 0x44, 0x44, 0x5f, 0x50, 0x41, 0x52, 0x54, 0x49, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52,
0x43, 0x49, 0x50, 0x41, 0x4e, 0x54, 0x5f, 0x54, 0x4f, 0x5f, 0x52, 0x43, 0x53, 0x5f, 0x47, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, 0x2c, 0x0a, 0x06, 0x61, 0x63,
0x4f, 0x55, 0x50, 0x10, 0x14, 0x12, 0x19, 0x0a, 0x15, 0x47, 0x45, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x6d, 0x65, 0x73,
0x56, 0x45, 0x52, 0x53, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x15, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65,
0x12, 0x19, 0x0a, 0x15, 0x4e, 0x4f, 0x54, 0x49, 0x46, 0x59, 0x5f, 0x44, 0x49, 0x54, 0x54, 0x4f, 0x52, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x6f, 0x6f, 0x6c,
0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x49, 0x54, 0x59, 0x10, 0x16, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x31, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x62, 0x6f, 0x6f, 0x6c, 0x31, 0x12, 0x14,
0x45, 0x4c, 0x45, 0x54, 0x45, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0x17, 0x12, 0x0a, 0x05, 0x62, 0x6f, 0x6f, 0x6c, 0x32, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x62,
0x17, 0x0a, 0x13, 0x49, 0x4e, 0x53, 0x54, 0x41, 0x4c, 0x4c, 0x5f, 0x53, 0x54, 0x49, 0x43, 0x4b, 0x6f, 0x6f, 0x6c, 0x32, 0x12, 0x24, 0x0a, 0x0d, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65,
0x45, 0x52, 0x5f, 0x53, 0x45, 0x54, 0x10, 0x18, 0x12, 0x12, 0x0a, 0x0e, 0x52, 0x45, 0x53, 0x45, 0x64, 0x44, 0x61, 0x74, 0x61, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0d, 0x65, 0x6e, 0x63,
0x4e, 0x44, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0x19, 0x12, 0x20, 0x0a, 0x1c, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x44, 0x61, 0x74, 0x61, 0x12, 0x14, 0x0a, 0x05, 0x62, 0x6f,
0x47, 0x45, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x43, 0x54, 0x5f, 0x52, 0x43, 0x53, 0x5f, 0x6f, 0x6c, 0x33, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x62, 0x6f, 0x6f, 0x6c, 0x33,
0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x53, 0x54, 0x41, 0x54, 0x55, 0x53, 0x10, 0x1a, 0x12, 0x14, 0x22, 0xf3, 0x01, 0x0a, 0x0b, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
0x0a, 0x10, 0x44, 0x4f, 0x57, 0x4e, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x12, 0x28, 0x0a, 0x06, 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
0x47, 0x45, 0x10, 0x1b, 0x12, 0x15, 0x0a, 0x11, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x54, 0x4f, 0x50, 0x32, 0x10, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x44, 0x65, 0x76, 0x69,
0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x43, 0x54, 0x53, 0x10, 0x1c, 0x12, 0x1a, 0x0a, 0x16, 0x47, 0x63, 0x65, 0x52, 0x06, 0x6d, 0x6f, 0x62, 0x69, 0x6c, 0x65, 0x12, 0x3b, 0x0a, 0x0b, 0x6d, 0x65,
0x45, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x43, 0x54, 0x53, 0x5f, 0x54, 0x48, 0x55, 0x4d, 0x73, 0x73, 0x61, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x42, 0x4e, 0x41, 0x49, 0x4c, 0x10, 0x1d, 0x12, 0x1c, 0x0a, 0x18, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x19, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d,
0x45, 0x5f, 0x50, 0x41, 0x52, 0x54, 0x49, 0x43, 0x49, 0x50, 0x41, 0x4e, 0x54, 0x5f, 0x43, 0x4f, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73,
0x4c, 0x4f, 0x52, 0x10, 0x1e, 0x12, 0x14, 0x0a, 0x10, 0x49, 0x53, 0x5f, 0x42, 0x55, 0x47, 0x4c, 0x61, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x3b, 0x0a, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61,
0x45, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55, 0x4c, 0x54, 0x10, 0x1f, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x67, 0x65, 0x41, 0x75, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6d,
0x54, 0x49, 0x43, 0x4b, 0x45, 0x52, 0x5f, 0x55, 0x53, 0x45, 0x52, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73,
0x45, 0x58, 0x54, 0x10, 0x20, 0x12, 0x1a, 0x0a, 0x16, 0x46, 0x41, 0x56, 0x4f, 0x52, 0x49, 0x54, 0x61, 0x67, 0x65, 0x41, 0x75, 0x74, 0x68, 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
0x45, 0x5f, 0x53, 0x54, 0x49, 0x43, 0x4b, 0x45, 0x52, 0x5f, 0x50, 0x41, 0x43, 0x4b, 0x53, 0x10, 0x41, 0x75, 0x74, 0x68, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x54, 0x4c, 0x18, 0x05, 0x20, 0x01, 0x28,
0x21, 0x12, 0x13, 0x0a, 0x0f, 0x52, 0x45, 0x43, 0x45, 0x4e, 0x54, 0x5f, 0x53, 0x54, 0x49, 0x43, 0x03, 0x52, 0x03, 0x54, 0x54, 0x4c, 0x12, 0x2e, 0x0a, 0x08, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x41,
0x4b, 0x45, 0x52, 0x53, 0x10, 0x22, 0x12, 0x1a, 0x0a, 0x16, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x72, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61,
0x5f, 0x52, 0x45, 0x43, 0x45, 0x4e, 0x54, 0x5f, 0x53, 0x54, 0x49, 0x43, 0x4b, 0x45, 0x52, 0x53, 0x67, 0x65, 0x73, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x72, 0x52, 0x08, 0x65, 0x6d,
0x10, 0x23, 0x12, 0x17, 0x0a, 0x13, 0x47, 0x45, 0x54, 0x5f, 0x46, 0x55, 0x4c, 0x4c, 0x5f, 0x53, 0x70, 0x74, 0x79, 0x41, 0x72, 0x72, 0x22, 0x9a, 0x01, 0x0a, 0x0f, 0x53, 0x65, 0x6e, 0x64, 0x4d,
0x49, 0x5a, 0x45, 0x5f, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x10, 0x24, 0x12, 0x1e, 0x0a, 0x1a, 0x47, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x41, 0x75, 0x74, 0x68, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65,
0x45, 0x54, 0x5f, 0x50, 0x41, 0x52, 0x54, 0x49, 0x43, 0x49, 0x50, 0x41, 0x4e, 0x54, 0x53, 0x5f, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72,
0x54, 0x48, 0x55, 0x4d, 0x42, 0x4e, 0x41, 0x49, 0x4c, 0x10, 0x25, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x12, 0x2a, 0x0a, 0x10, 0x74, 0x61, 0x63, 0x68,
0x45, 0x4e, 0x44, 0x5f, 0x52, 0x45, 0x41, 0x43, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x26, 0x12, 0x0e, 0x79, 0x6f, 0x6e, 0x41, 0x75, 0x74, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x06, 0x20, 0x01,
0x0a, 0x0a, 0x53, 0x45, 0x4e, 0x44, 0x5f, 0x52, 0x45, 0x50, 0x4c, 0x59, 0x10, 0x27, 0x12, 0x1b, 0x28, 0x0c, 0x52, 0x10, 0x74, 0x61, 0x63, 0x68, 0x79, 0x6f, 0x6e, 0x41, 0x75, 0x74, 0x68, 0x54,
0x0a, 0x17, 0x47, 0x45, 0x54, 0x5f, 0x42, 0x4c, 0x4f, 0x42, 0x5f, 0x46, 0x4f, 0x52, 0x5f, 0x41, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x3d, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65,
0x54, 0x54, 0x41, 0x43, 0x48, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x28, 0x12, 0x2a, 0x0a, 0x26, 0x47, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x6d, 0x65,
0x45, 0x54, 0x5f, 0x44, 0x45, 0x56, 0x49, 0x43, 0x45, 0x53, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72,
0x41, 0x42, 0x4c, 0x45, 0x5f, 0x46, 0x4f, 0x52, 0x5f, 0x47, 0x41, 0x49, 0x41, 0x5f, 0x50, 0x41, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73,
0x49, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x29, 0x12, 0x17, 0x0a, 0x13, 0x43, 0x52, 0x45, 0x41, 0x54, 0x69, 0x6f, 0x6e, 0x22, 0xaf, 0x01, 0x0a, 0x13, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73,
0x45, 0x5f, 0x47, 0x41, 0x49, 0x41, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x2a, 0x61, 0x67, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x12, 0x1c, 0x0a, 0x09, 0x72,
0x12, 0x14, 0x0a, 0x10, 0x47, 0x45, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x56, 0x45, 0x52, 0x53, 0x41, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09,
0x54, 0x49, 0x4f, 0x4e, 0x10, 0x2b, 0x12, 0x23, 0x0a, 0x1f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x12, 0x2c, 0x0a, 0x06, 0x61, 0x63, 0x74,
0x5f, 0x47, 0x41, 0x49, 0x41, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x43, 0x4c, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x6d, 0x65, 0x73, 0x73,
0x49, 0x45, 0x4e, 0x54, 0x5f, 0x49, 0x4e, 0x49, 0x54, 0x10, 0x2c, 0x12, 0x27, 0x0a, 0x23, 0x43, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x52,
0x52, 0x45, 0x41, 0x54, 0x45, 0x5f, 0x47, 0x41, 0x49, 0x41, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x49, 0x06, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x2e, 0x0a, 0x12, 0x65, 0x6e, 0x63, 0x72, 0x79,
0x4e, 0x47, 0x5f, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x46, 0x49, 0x4e, 0x49, 0x53, 0x48, 0x70, 0x74, 0x65, 0x64, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x18, 0x05, 0x20,
0x45, 0x44, 0x10, 0x2d, 0x12, 0x17, 0x0a, 0x13, 0x55, 0x4e, 0x50, 0x41, 0x49, 0x52, 0x5f, 0x47, 0x01, 0x28, 0x0c, 0x52, 0x12, 0x65, 0x6e, 0x63, 0x72, 0x79, 0x70, 0x74, 0x65, 0x64, 0x50, 0x72,
0x41, 0x49, 0x41, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x2e, 0x2a, 0x50, 0x0a, 0x6f, 0x74, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x73, 0x65, 0x73, 0x73, 0x69,
0x0b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x73, 0x65, 0x73, 0x73,
0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x22, 0xce, 0x01, 0x0a, 0x0f, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65,
0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d, 0x42, 0x55, 0x47, 0x4c, 0x45, 0x5f, 0x73, 0x73, 0x61, 0x67, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x1c, 0x0a, 0x09, 0x72, 0x65, 0x71,
0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x42, 0x55, 0x47, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x72, 0x65,
0x4c, 0x45, 0x5f, 0x41, 0x4e, 0x4e, 0x4f, 0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x10, 0x42, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x12, 0x34, 0x0a, 0x0a, 0x62, 0x75, 0x67, 0x6c, 0x65,
0x0e, 0x5a, 0x0c, 0x2e, 0x2e, 0x2f, 0x2e, 0x2e, 0x2f, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x62, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x14, 0x2e, 0x6d, 0x65,
0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x42, 0x75, 0x67, 0x6c, 0x65, 0x52, 0x6f, 0x75, 0x74,
0x65, 0x52, 0x0a, 0x62, 0x75, 0x67, 0x6c, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x12, 0x22, 0x0a,
0x0c, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x44, 0x61, 0x74, 0x61, 0x18, 0x0c, 0x20,
0x01, 0x28, 0x0c, 0x52, 0x0c, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x44, 0x61, 0x74,
0x61, 0x12, 0x43, 0x0a, 0x0f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65,
0x44, 0x61, 0x74, 0x61, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6d, 0x65, 0x73,
0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70,
0x65, 0x44, 0x61, 0x74, 0x61, 0x52, 0x0f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79,
0x70, 0x65, 0x44, 0x61, 0x74, 0x61, 0x22, 0x7a, 0x0a, 0x0f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
0x65, 0x54, 0x79, 0x70, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x2e, 0x0a, 0x08, 0x65, 0x6d, 0x70,
0x74, 0x79, 0x41, 0x72, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d, 0x65,
0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x72, 0x52,
0x08, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x72, 0x12, 0x37, 0x0a, 0x0b, 0x6d, 0x65, 0x73,
0x73, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15,
0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
0x65, 0x54, 0x79, 0x70, 0x65, 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, 0x79,
0x70, 0x65, 0x22, 0x0a, 0x0a, 0x08, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x72, 0x22, 0x96,
0x01, 0x0a, 0x0b, 0x41, 0x75, 0x74, 0x68, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1c,
0x0a, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28,
0x09, 0x52, 0x09, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x49, 0x44, 0x12, 0x2a, 0x0a, 0x10,
0x74, 0x61, 0x63, 0x68, 0x79, 0x6f, 0x6e, 0x41, 0x75, 0x74, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e,
0x18, 0x06, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x10, 0x74, 0x61, 0x63, 0x68, 0x79, 0x6f, 0x6e, 0x41,
0x75, 0x74, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x3d, 0x0a, 0x0d, 0x63, 0x6f, 0x6e, 0x66,
0x69, 0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32,
0x17, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x43, 0x6f, 0x6e, 0x66, 0x69,
0x67, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67,
0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xa2, 0x02, 0x0a, 0x16, 0x52, 0x65, 0x63, 0x65,
0x69, 0x76, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65,
0x73, 0x74, 0x12, 0x29, 0x0a, 0x04, 0x61, 0x75, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b,
0x32, 0x15, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x41, 0x75, 0x74, 0x68,
0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x04, 0x61, 0x75, 0x74, 0x68, 0x12, 0x53, 0x0a,
0x07, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34,
0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76,
0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74,
0x2e, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4f, 0x62, 0x6a,
0x65, 0x63, 0x74, 0x32, 0x48, 0x00, 0x52, 0x07, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x88,
0x01, 0x01, 0x1a, 0x15, 0x0a, 0x13, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x45, 0x6d, 0x70,
0x74, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x31, 0x1a, 0x65, 0x0a, 0x13, 0x55, 0x6e, 0x6b,
0x6e, 0x6f, 0x77, 0x6e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x32,
0x12, 0x4e, 0x0a, 0x07, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x34, 0x2e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x52, 0x65, 0x63,
0x65, 0x69, 0x76, 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75,
0x65, 0x73, 0x74, 0x2e, 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x45, 0x6d, 0x70, 0x74, 0x79,
0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x31, 0x52, 0x07, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e,
0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x75, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x22, 0x4c, 0x0a, 0x08,
0x42, 0x61, 0x73, 0x65, 0x44, 0x61, 0x74, 0x61, 0x12, 0x10, 0x0a, 0x03, 0x54, 0x54, 0x4c, 0x18,
0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x03, 0x54, 0x54, 0x4c, 0x12, 0x2e, 0x0a, 0x08, 0x65, 0x6d,
0x70, 0x74, 0x79, 0x41, 0x72, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x6d,
0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x73, 0x2e, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x72,
0x52, 0x08, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x41, 0x72, 0x72, 0x22, 0x56, 0x0a, 0x06, 0x44, 0x65,
0x76, 0x69, 0x63, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x18, 0x01,
0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08,
0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x44, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08,
0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x6e, 0x65, 0x74, 0x77,
0x6f, 0x72, 0x6b, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f,
0x72, 0x6b, 0x22, 0x5f, 0x0a, 0x0d, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x56, 0x65, 0x72, 0x73,
0x69, 0x6f, 0x6e, 0x12, 0x0e, 0x0a, 0x02, 0x56, 0x31, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52,
0x02, 0x56, 0x31, 0x12, 0x0e, 0x0a, 0x02, 0x56, 0x32, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52,
0x02, 0x56, 0x32, 0x12, 0x0e, 0x0a, 0x02, 0x56, 0x33, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52,
0x02, 0x56, 0x33, 0x12, 0x0e, 0x0a, 0x02, 0x56, 0x34, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52,
0x02, 0x56, 0x34, 0x12, 0x0e, 0x0a, 0x02, 0x56, 0x35, 0x18, 0x09, 0x20, 0x01, 0x28, 0x05, 0x52,
0x02, 0x56, 0x35, 0x2a, 0x43, 0x0a, 0x0a, 0x42, 0x75, 0x67, 0x6c, 0x65, 0x52, 0x6f, 0x75, 0x74,
0x65, 0x12, 0x17, 0x0a, 0x13, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x42, 0x55, 0x47,
0x4c, 0x45, 0x5f, 0x52, 0x4f, 0x55, 0x54, 0x45, 0x10, 0x00, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x61,
0x74, 0x61, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x10, 0x13, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x61, 0x69,
0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x10, 0x0e, 0x2a, 0x8b, 0x09, 0x0a, 0x0a, 0x41, 0x63, 0x74,
0x69, 0x6f, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x55, 0x4e, 0x53, 0x50, 0x45,
0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x16, 0x0a, 0x12, 0x4c, 0x49, 0x53, 0x54,
0x5f, 0x43, 0x4f, 0x4e, 0x56, 0x45, 0x52, 0x53, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x10, 0x01,
0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45,
0x53, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x45, 0x4e, 0x44, 0x5f, 0x4d, 0x45, 0x53, 0x53,
0x41, 0x47, 0x45, 0x10, 0x03, 0x12, 0x1c, 0x0a, 0x17, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x43, 0x4f,
0x4e, 0x56, 0x45, 0x52, 0x53, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x53, 0x5f, 0x53, 0x59, 0x4e, 0x43,
0x10, 0xd7, 0x08, 0x12, 0x13, 0x0a, 0x0f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x55,
0x50, 0x44, 0x41, 0x54, 0x45, 0x53, 0x10, 0x04, 0x12, 0x11, 0x0a, 0x0d, 0x4c, 0x49, 0x53, 0x54,
0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x43, 0x54, 0x53, 0x10, 0x06, 0x12, 0x18, 0x0a, 0x14, 0x43,
0x4f, 0x4e, 0x56, 0x45, 0x52, 0x53, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x50, 0x44, 0x41,
0x54, 0x45, 0x53, 0x10, 0x07, 0x12, 0x1e, 0x0a, 0x1a, 0x47, 0x45, 0x54, 0x5f, 0x4f, 0x52, 0x5f,
0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x56, 0x45, 0x52, 0x53, 0x41, 0x54,
0x49, 0x4f, 0x4e, 0x10, 0x09, 0x12, 0x10, 0x0a, 0x0c, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45,
0x5f, 0x52, 0x45, 0x41, 0x44, 0x10, 0x0a, 0x12, 0x1a, 0x0a, 0x16, 0x42, 0x52, 0x4f, 0x57, 0x53,
0x45, 0x52, 0x5f, 0x50, 0x52, 0x45, 0x53, 0x45, 0x4e, 0x43, 0x45, 0x5f, 0x43, 0x48, 0x45, 0x43,
0x4b, 0x10, 0x0b, 0x12, 0x12, 0x0a, 0x0e, 0x54, 0x59, 0x50, 0x49, 0x4e, 0x47, 0x5f, 0x55, 0x50,
0x44, 0x41, 0x54, 0x45, 0x53, 0x10, 0x0c, 0x12, 0x13, 0x0a, 0x0f, 0x53, 0x45, 0x54, 0x54, 0x49,
0x4e, 0x47, 0x53, 0x5f, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x10, 0x0d, 0x12, 0x0e, 0x0a, 0x0a,
0x55, 0x53, 0x45, 0x52, 0x5f, 0x41, 0x4c, 0x45, 0x52, 0x54, 0x10, 0x0e, 0x12, 0x17, 0x0a, 0x13,
0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x43, 0x4f, 0x4e, 0x56, 0x45, 0x52, 0x53, 0x41, 0x54,
0x49, 0x4f, 0x4e, 0x10, 0x0f, 0x12, 0x0f, 0x0a, 0x0b, 0x47, 0x45, 0x54, 0x5f, 0x55, 0x50, 0x44,
0x41, 0x54, 0x45, 0x53, 0x10, 0x10, 0x12, 0x18, 0x0a, 0x14, 0x41, 0x43, 0x4b, 0x5f, 0x42, 0x52,
0x4f, 0x57, 0x53, 0x45, 0x52, 0x5f, 0x50, 0x52, 0x45, 0x53, 0x45, 0x4e, 0x43, 0x45, 0x10, 0x11,
0x12, 0x15, 0x0a, 0x11, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x53, 0x54, 0x49, 0x43, 0x4b, 0x45, 0x52,
0x5f, 0x53, 0x45, 0x54, 0x53, 0x10, 0x12, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x45, 0x41, 0x56, 0x45,
0x5f, 0x52, 0x43, 0x53, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x10, 0x13, 0x12, 0x20, 0x0a, 0x1c,
0x41, 0x44, 0x44, 0x5f, 0x50, 0x41, 0x52, 0x54, 0x49, 0x43, 0x49, 0x50, 0x41, 0x4e, 0x54, 0x5f,
0x54, 0x4f, 0x5f, 0x52, 0x43, 0x53, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x10, 0x14, 0x12, 0x19,
0x0a, 0x15, 0x47, 0x45, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x56, 0x45, 0x52, 0x53, 0x41, 0x54, 0x49,
0x4f, 0x4e, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x15, 0x12, 0x19, 0x0a, 0x15, 0x4e, 0x4f, 0x54,
0x49, 0x46, 0x59, 0x5f, 0x44, 0x49, 0x54, 0x54, 0x4f, 0x5f, 0x41, 0x43, 0x54, 0x49, 0x56, 0x49,
0x54, 0x59, 0x10, 0x16, 0x12, 0x12, 0x0a, 0x0e, 0x44, 0x45, 0x4c, 0x45, 0x54, 0x45, 0x5f, 0x4d,
0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0x17, 0x12, 0x17, 0x0a, 0x13, 0x49, 0x4e, 0x53, 0x54,
0x41, 0x4c, 0x4c, 0x5f, 0x53, 0x54, 0x49, 0x43, 0x4b, 0x45, 0x52, 0x5f, 0x53, 0x45, 0x54, 0x10,
0x18, 0x12, 0x12, 0x0a, 0x0e, 0x52, 0x45, 0x53, 0x45, 0x4e, 0x44, 0x5f, 0x4d, 0x45, 0x53, 0x53,
0x41, 0x47, 0x45, 0x10, 0x19, 0x12, 0x20, 0x0a, 0x1c, 0x47, 0x45, 0x54, 0x5f, 0x43, 0x4f, 0x4e,
0x54, 0x41, 0x43, 0x54, 0x5f, 0x52, 0x43, 0x53, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x53,
0x54, 0x41, 0x54, 0x55, 0x53, 0x10, 0x1a, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x4f, 0x57, 0x4e, 0x4c,
0x4f, 0x41, 0x44, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0x1b, 0x12, 0x15, 0x0a,
0x11, 0x4c, 0x49, 0x53, 0x54, 0x5f, 0x54, 0x4f, 0x50, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x41, 0x43,
0x54, 0x53, 0x10, 0x1c, 0x12, 0x1a, 0x0a, 0x16, 0x47, 0x45, 0x54, 0x5f, 0x43, 0x4f, 0x4e, 0x54,
0x41, 0x43, 0x54, 0x53, 0x5f, 0x54, 0x48, 0x55, 0x4d, 0x42, 0x4e, 0x41, 0x49, 0x4c, 0x10, 0x1d,
0x12, 0x1c, 0x0a, 0x18, 0x43, 0x48, 0x41, 0x4e, 0x47, 0x45, 0x5f, 0x50, 0x41, 0x52, 0x54, 0x49,
0x43, 0x49, 0x50, 0x41, 0x4e, 0x54, 0x5f, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x10, 0x1e, 0x12, 0x14,
0x0a, 0x10, 0x49, 0x53, 0x5f, 0x42, 0x55, 0x47, 0x4c, 0x45, 0x5f, 0x44, 0x45, 0x46, 0x41, 0x55,
0x4c, 0x54, 0x10, 0x1f, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x54, 0x49, 0x43, 0x4b, 0x45, 0x52, 0x5f,
0x55, 0x53, 0x45, 0x52, 0x5f, 0x43, 0x4f, 0x4e, 0x54, 0x45, 0x58, 0x54, 0x10, 0x20, 0x12, 0x1a,
0x0a, 0x16, 0x46, 0x41, 0x56, 0x4f, 0x52, 0x49, 0x54, 0x45, 0x5f, 0x53, 0x54, 0x49, 0x43, 0x4b,
0x45, 0x52, 0x5f, 0x50, 0x41, 0x43, 0x4b, 0x53, 0x10, 0x21, 0x12, 0x13, 0x0a, 0x0f, 0x52, 0x45,
0x43, 0x45, 0x4e, 0x54, 0x5f, 0x53, 0x54, 0x49, 0x43, 0x4b, 0x45, 0x52, 0x53, 0x10, 0x22, 0x12,
0x1a, 0x0a, 0x16, 0x55, 0x50, 0x44, 0x41, 0x54, 0x45, 0x5f, 0x52, 0x45, 0x43, 0x45, 0x4e, 0x54,
0x5f, 0x53, 0x54, 0x49, 0x43, 0x4b, 0x45, 0x52, 0x53, 0x10, 0x23, 0x12, 0x17, 0x0a, 0x13, 0x47,
0x45, 0x54, 0x5f, 0x46, 0x55, 0x4c, 0x4c, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x5f, 0x49, 0x4d, 0x41,
0x47, 0x45, 0x10, 0x24, 0x12, 0x1e, 0x0a, 0x1a, 0x47, 0x45, 0x54, 0x5f, 0x50, 0x41, 0x52, 0x54,
0x49, 0x43, 0x49, 0x50, 0x41, 0x4e, 0x54, 0x53, 0x5f, 0x54, 0x48, 0x55, 0x4d, 0x42, 0x4e, 0x41,
0x49, 0x4c, 0x10, 0x25, 0x12, 0x11, 0x0a, 0x0d, 0x53, 0x45, 0x4e, 0x44, 0x5f, 0x52, 0x45, 0x41,
0x43, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x26, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x45, 0x4e, 0x44, 0x5f,
0x52, 0x45, 0x50, 0x4c, 0x59, 0x10, 0x27, 0x12, 0x1b, 0x0a, 0x17, 0x47, 0x45, 0x54, 0x5f, 0x42,
0x4c, 0x4f, 0x42, 0x5f, 0x46, 0x4f, 0x52, 0x5f, 0x41, 0x54, 0x54, 0x41, 0x43, 0x48, 0x4d, 0x45,
0x4e, 0x54, 0x10, 0x28, 0x12, 0x2a, 0x0a, 0x26, 0x47, 0x45, 0x54, 0x5f, 0x44, 0x45, 0x56, 0x49,
0x43, 0x45, 0x53, 0x5f, 0x41, 0x56, 0x41, 0x49, 0x4c, 0x41, 0x42, 0x4c, 0x45, 0x5f, 0x46, 0x4f,
0x52, 0x5f, 0x47, 0x41, 0x49, 0x41, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x29,
0x12, 0x17, 0x0a, 0x13, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x5f, 0x47, 0x41, 0x49, 0x41, 0x5f,
0x50, 0x41, 0x49, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x2a, 0x12, 0x14, 0x0a, 0x10, 0x47, 0x45, 0x54,
0x5f, 0x43, 0x4f, 0x4e, 0x56, 0x45, 0x52, 0x53, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x2b, 0x12,
0x23, 0x0a, 0x1f, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x5f, 0x47, 0x41, 0x49, 0x41, 0x5f, 0x50,
0x41, 0x49, 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x43, 0x4c, 0x49, 0x45, 0x4e, 0x54, 0x5f, 0x49, 0x4e,
0x49, 0x54, 0x10, 0x2c, 0x12, 0x27, 0x0a, 0x23, 0x43, 0x52, 0x45, 0x41, 0x54, 0x45, 0x5f, 0x47,
0x41, 0x49, 0x41, 0x5f, 0x50, 0x41, 0x49, 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x43, 0x4c, 0x49, 0x45,
0x4e, 0x54, 0x5f, 0x46, 0x49, 0x4e, 0x49, 0x53, 0x48, 0x45, 0x44, 0x10, 0x2d, 0x12, 0x17, 0x0a,
0x13, 0x55, 0x4e, 0x50, 0x41, 0x49, 0x52, 0x5f, 0x47, 0x41, 0x49, 0x41, 0x5f, 0x50, 0x41, 0x49,
0x52, 0x49, 0x4e, 0x47, 0x10, 0x2e, 0x2a, 0x50, 0x0a, 0x0b, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67,
0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x14, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e,
0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x10, 0x00, 0x12,
0x11, 0x0a, 0x0d, 0x42, 0x55, 0x47, 0x4c, 0x45, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45,
0x10, 0x02, 0x12, 0x14, 0x0a, 0x10, 0x42, 0x55, 0x47, 0x4c, 0x45, 0x5f, 0x41, 0x4e, 0x4e, 0x4f,
0x54, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x10, 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 ( var (
@ -1855,7 +1893,7 @@ var file_messages_proto_goTypes = []interface{}{
(MessageType)(0), // 2: messages.MessageType (MessageType)(0), // 2: messages.MessageType
(*RegisterRefreshPayload)(nil), // 3: messages.RegisterRefreshPayload (*RegisterRefreshPayload)(nil), // 3: messages.RegisterRefreshPayload
(*EmptyRefreshArr)(nil), // 4: messages.EmptyRefreshArr (*EmptyRefreshArr)(nil), // 4: messages.EmptyRefreshArr
(*EmptyEmptyArr)(nil), // 5: messages.EmptyEmptyArr (*StartAckMessage)(nil), // 5: messages.StartAckMessage
(*InternalMessage)(nil), // 6: messages.InternalMessage (*InternalMessage)(nil), // 6: messages.InternalMessage
(*InternalMessageData)(nil), // 7: messages.InternalMessageData (*InternalMessageData)(nil), // 7: messages.InternalMessageData
(*InternalRequestData)(nil), // 8: messages.InternalRequestData (*InternalRequestData)(nil), // 8: messages.InternalRequestData
@ -1877,33 +1915,36 @@ var file_messages_proto_depIdxs = []int32{
15, // 0: messages.RegisterRefreshPayload.messageAuth:type_name -> messages.AuthMessage 15, // 0: messages.RegisterRefreshPayload.messageAuth:type_name -> messages.AuthMessage
18, // 1: messages.RegisterRefreshPayload.currBrowserDevice:type_name -> messages.Device 18, // 1: messages.RegisterRefreshPayload.currBrowserDevice:type_name -> messages.Device
4, // 2: messages.RegisterRefreshPayload.emptyRefreshArr:type_name -> messages.EmptyRefreshArr 4, // 2: messages.RegisterRefreshPayload.emptyRefreshArr:type_name -> messages.EmptyRefreshArr
5, // 3: messages.EmptyRefreshArr.emptyArr:type_name -> messages.EmptyEmptyArr 14, // 3: messages.EmptyRefreshArr.emptyArr:type_name -> messages.EmptyArr
7, // 4: messages.InternalMessage.data:type_name -> messages.InternalMessageData 7, // 4: messages.InternalMessage.data:type_name -> messages.InternalMessageData
0, // 5: messages.InternalMessageData.bugleRoute:type_name -> messages.BugleRoute 14, // 5: messages.InternalMessage.heartbeat:type_name -> messages.EmptyArr
2, // 6: messages.InternalMessageData.messageType:type_name -> messages.MessageType 5, // 6: messages.InternalMessage.ack:type_name -> messages.StartAckMessage
18, // 7: messages.InternalMessageData.mobile:type_name -> messages.Device 14, // 7: messages.InternalMessage.startRead:type_name -> messages.EmptyArr
18, // 8: messages.InternalMessageData.browser:type_name -> messages.Device 0, // 8: messages.InternalMessageData.bugleRoute:type_name -> messages.BugleRoute
1, // 9: messages.InternalRequestData.action:type_name -> messages.ActionType 2, // 9: messages.InternalMessageData.messageType:type_name -> messages.MessageType
18, // 10: messages.SendMessage.mobile:type_name -> messages.Device 18, // 10: messages.InternalMessageData.mobile:type_name -> messages.Device
12, // 11: messages.SendMessage.messageData:type_name -> messages.SendMessageData 18, // 11: messages.InternalMessageData.browser:type_name -> messages.Device
10, // 12: messages.SendMessage.messageAuth:type_name -> messages.SendMessageAuth 1, // 12: messages.InternalRequestData.action:type_name -> messages.ActionType
14, // 13: messages.SendMessage.emptyArr:type_name -> messages.EmptyArr 18, // 13: messages.SendMessage.mobile:type_name -> messages.Device
19, // 14: messages.SendMessageAuth.configVersion:type_name -> messages.ConfigVersion 12, // 14: messages.SendMessage.messageData:type_name -> messages.SendMessageData
1, // 15: messages.SendMessageInternal.action:type_name -> messages.ActionType 10, // 15: messages.SendMessage.messageAuth:type_name -> messages.SendMessageAuth
0, // 16: messages.SendMessageData.bugleRoute:type_name -> messages.BugleRoute 14, // 16: messages.SendMessage.emptyArr:type_name -> messages.EmptyArr
13, // 17: messages.SendMessageData.messageTypeData:type_name -> messages.MessageTypeData 19, // 17: messages.SendMessageAuth.configVersion:type_name -> messages.ConfigVersion
14, // 18: messages.MessageTypeData.emptyArr:type_name -> messages.EmptyArr 1, // 18: messages.SendMessageInternal.action:type_name -> messages.ActionType
2, // 19: messages.MessageTypeData.messageType:type_name -> messages.MessageType 0, // 19: messages.SendMessageData.bugleRoute:type_name -> messages.BugleRoute
19, // 20: messages.AuthMessage.configVersion:type_name -> messages.ConfigVersion 13, // 20: messages.SendMessageData.messageTypeData:type_name -> messages.MessageTypeData
15, // 21: messages.ReceiveMessagesRequest.auth:type_name -> messages.AuthMessage 14, // 21: messages.MessageTypeData.emptyArr:type_name -> messages.EmptyArr
21, // 22: messages.ReceiveMessagesRequest.unknown:type_name -> messages.ReceiveMessagesRequest.UnknownEmptyObject2 2, // 22: messages.MessageTypeData.messageType:type_name -> messages.MessageType
14, // 23: messages.BaseData.emptyArr:type_name -> messages.EmptyArr 19, // 23: messages.AuthMessage.configVersion:type_name -> messages.ConfigVersion
20, // 24: messages.ReceiveMessagesRequest.UnknownEmptyObject2.unknown:type_name -> messages.ReceiveMessagesRequest.UnknownEmptyObject1 15, // 24: messages.ReceiveMessagesRequest.auth:type_name -> messages.AuthMessage
25, // [25:25] is the sub-list for method output_type 21, // 25: messages.ReceiveMessagesRequest.unknown:type_name -> messages.ReceiveMessagesRequest.UnknownEmptyObject2
25, // [25:25] is the sub-list for method input_type 14, // 26: messages.BaseData.emptyArr:type_name -> messages.EmptyArr
25, // [25:25] is the sub-list for extension type_name 20, // 27: messages.ReceiveMessagesRequest.UnknownEmptyObject2.unknown:type_name -> messages.ReceiveMessagesRequest.UnknownEmptyObject1
25, // [25:25] is the sub-list for extension extendee 28, // [28:28] is the sub-list for method output_type
0, // [0:25] is the sub-list for field type_name 28, // [28:28] is the sub-list for method input_type
28, // [28:28] is the sub-list for extension type_name
28, // [28:28] is the sub-list for extension extendee
0, // [0:28] is the sub-list for field type_name
} }
func init() { file_messages_proto_init() } func init() { file_messages_proto_init() }
@ -1937,7 +1978,7 @@ func file_messages_proto_init() {
} }
} }
file_messages_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { file_messages_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*EmptyEmptyArr); i { switch v := v.(*StartAckMessage); i {
case 0: case 0:
return &v.state return &v.state
case 1: case 1:
@ -2141,6 +2182,8 @@ func file_messages_proto_init() {
} }
} }
} }
file_messages_proto_msgTypes[2].OneofWrappers = []interface{}{}
file_messages_proto_msgTypes[3].OneofWrappers = []interface{}{}
file_messages_proto_msgTypes[13].OneofWrappers = []interface{}{} file_messages_proto_msgTypes[13].OneofWrappers = []interface{}{}
type x struct{} type x struct{}
out := protoimpl.TypeBuilder{ out := protoimpl.TypeBuilder{

View file

@ -14,23 +14,10 @@ message MessageReadPayload {
string messageID = 3; string messageID = 3;
} }
message AckMessageResponse {
AckContainer container = 1;
}
message AckContainer {
AckData data = 1;
}
message AckData {
AckAmount ackAmount = 4;
}
message AckAmount {
int32 count = 1;
}
message AckMessagePayload { message AckMessagePayload {
messages.AuthMessage authData = 1; messages.AuthMessage authData = 1;
messages.EmptyArr emptyArr = 2; messages.EmptyArr emptyArr = 2;
bytes noClue = 3; repeated AckMessageData acks = 4;
} }
message AckMessageData { message AckMessageData {

View file

@ -13,16 +13,18 @@ message RegisterRefreshPayload {
} }
message EmptyRefreshArr { message EmptyRefreshArr {
EmptyEmptyArr emptyArr = 9; EmptyArr emptyArr = 9;
} }
message EmptyEmptyArr { message StartAckMessage {
optional int32 count = 1;
} }
message InternalMessage { message InternalMessage {
bytes unknown1 = 1; optional InternalMessageData data = 2;
InternalMessageData data = 2; optional EmptyArr heartbeat = 3;
optional StartAckMessage ack = 4;
optional EmptyArr startRead = 5;
} }
message InternalMessageData { message InternalMessageData {

View file

@ -3,8 +3,6 @@ package libgm
import ( import (
"crypto/sha256" "crypto/sha256"
"encoding/base64" "encoding/base64"
"encoding/json"
"fmt"
"go.mau.fi/mautrix-gmessages/libgm/pblite" "go.mau.fi/mautrix-gmessages/libgm/pblite"
@ -41,15 +39,15 @@ func (r *RPC) deduplicateUpdate(response *pblite.Response) bool {
return false return false
} }
func (r *RPC) HandleRPCMsg(msgArr []interface{}) { func (r *RPC) HandleRPCMsg(msg *binary.InternalMessage) {
response, decodeErr := pblite.DecodeAndDecryptInternalMessage(msgArr, r.client.authData.Cryptor) response, decodeErr := pblite.DecryptInternalMessage(msg, r.client.authData.Cryptor)
if decodeErr != nil { if decodeErr != nil {
r.client.Logger.Error().Err(fmt.Errorf("failed to deserialize response %s", msgArr)).Msg("rpc deserialize msg err") r.client.Logger.Error().Err(decodeErr).Msg("rpc decrypt msg err")
return return
} }
//r.client.Logger.Debug().Any("byteLength", len(data)).Any("unmarshaled", response).Any("raw", string(data)).Msg("RPC Msg") //r.client.Logger.Debug().Any("byteLength", len(data)).Any("unmarshaled", response).Any("raw", string(data)).Msg("RPC Msg")
if response == nil { if response == nil {
r.client.Logger.Error().Err(fmt.Errorf("response data was nil %s", msgArr)).Msg("rpc msg data err") r.client.Logger.Error().Msg("nil response in rpc handler")
return return
} }
//r.client.Logger.Debug().Any("response", response).Msg("decrypted & decoded response") //r.client.Logger.Debug().Any("response", response).Msg("decrypted & decoded response")
@ -93,11 +91,6 @@ func (r *RPC) HandleRPCMsg(msgArr []interface{}) {
} }
func (r *RPC) tryUnmarshalJSON(jsonData []byte, msgArr *[]interface{}) error {
err := json.Unmarshal(jsonData, &msgArr)
return err
}
func (r *RPC) HandleByLength(data []byte) { func (r *RPC) HandleByLength(data []byte) {
r.client.Logger.Debug().Any("byteLength", len(data)).Any("corrupt raw", string(data)).Msg("RPC Corrupt json") r.client.Logger.Debug().Any("byteLength", len(data)).Any("corrupt raw", string(data)).Msg("RPC Corrupt json")
} }

View file

@ -9,14 +9,14 @@ import (
var ConfigMessage = &binary.ConfigVersion{ var ConfigMessage = &binary.ConfigVersion{
V1: 2023, V1: 2023,
V2: 7, V2: 7,
V3: 3, V3: 10,
V4: 4, V4: 4,
V5: 6, V5: 6,
} }
var Network = "Bugle" var Network = "Bugle"
var BrowserDetailsMessage = &binary.BrowserDetails{ var BrowserDetailsMessage = &binary.BrowserDetails{
UserAgent: util.USER_AGENT, UserAgent: util.UserAgent,
BrowserType: util.BROWSER_TYPE, BrowserType: util.BrowserType,
Os: util.OS, Os: util.OS,
SomeBool: true, SomeBool: true,
} }

View file

@ -17,7 +17,7 @@ func RegisterRefresh(sig []byte, requestID string, timestamp int64, browser *bin
CurrBrowserDevice: browser, CurrBrowserDevice: browser,
UnixTimestamp: timestamp, UnixTimestamp: timestamp,
Signature: sig, Signature: sig,
EmptyRefreshArr: &binary.EmptyRefreshArr{EmptyArr: &binary.EmptyEmptyArr{}}, EmptyRefreshArr: &binary.EmptyRefreshArr{EmptyArr: &binary.EmptyArr{}},
MessageType: 2, // hmm MessageType: 2, // hmm
} }

View file

@ -39,12 +39,7 @@ type Response struct {
Timestamp string `json:"timestamp"` Timestamp string `json:"timestamp"`
} }
func DecodeAndDecryptInternalMessage(data []interface{}, cryptor *crypto.Cryptor) (*Response, error) { func DecryptInternalMessage(internalMessage *binary.InternalMessage, cryptor *crypto.Cryptor) (*Response, error) {
internalMessage := &binary.InternalMessage{}
deserializeErr := Deserialize(data, internalMessage.ProtoReflect())
if deserializeErr != nil {
return nil, deserializeErr
}
var resp *Response var resp *Response
switch internalMessage.Data.BugleRoute { switch internalMessage.Data.BugleRoute {
case binary.BugleRoute_PairEvent: case binary.BugleRoute_PairEvent:

View file

@ -54,11 +54,58 @@ This means that any slice inside of the current slice, indicates another message
import ( import (
"encoding/base64" "encoding/base64"
"encoding/json"
"fmt" "fmt"
"google.golang.org/protobuf/proto"
"google.golang.org/protobuf/reflect/protoreflect" "google.golang.org/protobuf/reflect/protoreflect"
) )
func serializeOneOrList(fieldDescriptor protoreflect.FieldDescriptor, fieldValue protoreflect.Value) (any, error) {
switch {
case fieldDescriptor.IsList():
var serializedList []any
list := fieldValue.List()
for i := 0; i < list.Len(); i++ {
serialized, err := serializeOne(fieldDescriptor, list.Get(i))
if err != nil {
return nil, err
}
serializedList = append(serializedList, serialized)
}
return serializedList, nil
default:
return serializeOne(fieldDescriptor, fieldValue)
}
}
func serializeOne(fieldDescriptor protoreflect.FieldDescriptor, fieldValue protoreflect.Value) (any, error) {
switch fieldDescriptor.Kind() {
case protoreflect.MessageKind:
serializedMsg, err := Serialize(fieldValue.Message().Interface().ProtoReflect())
if err != nil {
return nil, err
}
return serializedMsg, nil
case protoreflect.BytesKind:
return base64.StdEncoding.EncodeToString(fieldValue.Bytes()), nil
case protoreflect.Int32Kind, protoreflect.Int64Kind:
return fieldValue.Int(), nil
case protoreflect.Uint32Kind, protoreflect.Uint64Kind:
return fieldValue.Uint(), nil
case protoreflect.FloatKind, protoreflect.DoubleKind:
return fieldValue.Float(), nil
case protoreflect.EnumKind:
return int(fieldValue.Enum()), nil
case protoreflect.BoolKind:
return fieldValue.Bool(), nil
case protoreflect.StringKind:
return fieldValue.String(), nil
default:
return nil, fmt.Errorf("unsupported field type %s in %s", fieldDescriptor.Kind(), fieldDescriptor.FullName())
}
}
func Serialize(m protoreflect.Message) ([]any, error) { func Serialize(m protoreflect.Message) ([]any, error) {
maxFieldNumber := 0 maxFieldNumber := 0
for i := 0; i < m.Descriptor().Fields().Len(); i++ { for i := 0; i < m.Descriptor().Fields().Len(); i++ {
@ -76,31 +123,20 @@ func Serialize(m protoreflect.Message) ([]any, error) {
if !m.Has(fieldDescriptor) { if !m.Has(fieldDescriptor) {
continue continue
} }
switch fieldDescriptor.Kind() { serializedVal, err := serializeOneOrList(fieldDescriptor, fieldValue)
case protoreflect.MessageKind:
serializedMsg, err := Serialize(fieldValue.Message().Interface().ProtoReflect())
if err != nil { if err != nil {
return nil, err return nil, err
} }
serialized[fieldNumber-1] = serializedMsg serialized[fieldNumber-1] = serializedVal
case protoreflect.BytesKind:
serialized[fieldNumber-1] = base64.StdEncoding.EncodeToString(fieldValue.Bytes())
case protoreflect.Int32Kind, protoreflect.Int64Kind:
serialized[fieldNumber-1] = fieldValue.Int()
case protoreflect.Uint32Kind, protoreflect.Uint64Kind:
serialized[fieldNumber-1] = fieldValue.Uint()
case protoreflect.FloatKind, protoreflect.DoubleKind:
serialized[fieldNumber-1] = fieldValue.Float()
case protoreflect.EnumKind:
serialized[fieldNumber-1] = int(fieldValue.Enum())
case protoreflect.BoolKind:
serialized[fieldNumber-1] = fieldValue.Bool()
case protoreflect.StringKind:
serialized[fieldNumber-1] = fieldValue.String()
default:
return nil, fmt.Errorf("unsupported field type %s in %s", fieldDescriptor.Kind(), fieldDescriptor.FullName())
}
} }
return serialized, nil return serialized, nil
} }
func SerializeToJSON(m proto.Message) ([]byte, error) {
serialized, err := Serialize(m.ProtoReflect())
if err != nil {
return nil, err
}
return json.Marshal(serialized)
}

View file

@ -106,8 +106,16 @@ func (r *RPC) startReadingData(rc io.ReadCloser) {
reader := bufio.NewReader(rc) reader := bufio.NewReader(rc)
buf := make([]byte, 2621440) buf := make([]byte, 2621440)
var accumulatedData []byte var accumulatedData []byte
n, err := reader.Read(buf[:2])
if err != nil {
r.client.Logger.Err(err).Msg("Error reading opening bytes")
return
} else if n != 2 || string(buf[:2]) != "[[" {
r.client.Logger.Err(err).Msg("Opening is not [[")
return
}
for { for {
n, err := reader.Read(buf) n, err = reader.Read(buf)
if err != nil { if err != nil {
if errors.Is(err, os.ErrClosed) { if errors.Is(err, os.ErrClosed) {
r.client.Logger.Err(err).Msg("Closed body from server") r.client.Logger.Err(err).Msg("Closed body from server")
@ -118,81 +126,44 @@ func (r *RPC) startReadingData(rc io.ReadCloser) {
return return
} }
chunk := buf[:n] chunk := buf[:n]
if n <= 25 { // this will catch the acknowledgement message unless you are required to ack 1000 messages for some reason
isAck := r.isAcknowledgeMessage(chunk)
if isAck {
r.client.Logger.Info().Any("isAck", isAck).Msg("Got Ack Message")
}
isHeartBeat := r.isHeartBeat(chunk)
if isHeartBeat {
r.client.Logger.Info().Any("heartBeat", isHeartBeat).Msg("Got heartbeat message")
}
isStartData := r.isStartRead(chunk)
if isStartData {
r.client.Logger.Info().Any("startRead", isHeartBeat).Msg("Got startReading message")
}
accumulatedData = []byte{}
continue
}
if len(accumulatedData) == 0 { if len(accumulatedData) == 0 {
chunk = bytes.TrimPrefix(chunk, []byte{44}) if len(chunk) == 2 && string(chunk) == "]]" {
r.client.Logger.Debug().Msg("Got stream end marker")
}
chunk = bytes.TrimPrefix(chunk, []byte{','})
} }
accumulatedData = append(accumulatedData, chunk...) accumulatedData = append(accumulatedData, chunk...)
var msgArr []interface{} if !json.Valid(accumulatedData) {
err = r.tryUnmarshalJSON(accumulatedData, &msgArr) r.client.Logger.Debug().Str("data", string(chunk)).Msg("Invalid JSON")
if err != nil {
//r.client.Logger.Err(err).Any("accumulated", string(accumulatedData)).Msg("Unable to unmarshal data, will wait for more data")
continue continue
} }
var msgArr []any
accumulatedData = []byte{} err = json.Unmarshal(accumulatedData, &msgArr)
//r.client.Logger.Info().Any("val", msgArr).Msg("MsgArr") if err != nil {
r.HandleRPCMsg(msgArr) r.client.Logger.Err(err).Msg("Error unmarshalling json")
continue
}
accumulatedData = accumulatedData[:0]
msg := &binary.InternalMessage{}
err = pblite.Deserialize(msgArr, msg.ProtoReflect())
if err != nil {
r.client.Logger.Err(err).Msg("Error deserializing pblite message")
continue
}
switch {
case msg.GetData() != nil:
r.HandleRPCMsg(msg)
case msg.GetAck() != nil:
r.client.Logger.Debug().Int32("count", msg.GetAck().GetCount()).Msg("Got startup ack count message")
r.skipCount = int(msg.GetAck().GetCount())
case msg.GetStartRead() != nil:
r.client.Logger.Trace().Msg("Got startRead message")
case msg.GetHeartbeat() != nil:
r.client.Logger.Trace().Msg("Got heartbeat message")
default:
r.client.Logger.Warn().Interface("data", msgArr).Msg("Got unknown message")
} }
} }
func (r *RPC) isAcknowledgeMessage(data []byte) bool {
if data[0] == 44 {
return false
}
if len(data) >= 3 && data[0] == 91 && data[1] == 91 && data[2] == 91 {
parsed, parseErr := r.parseAckMessage(data)
if parseErr != nil {
panic(parseErr)
}
r.skipCount = int(parsed.Container.Data.GetAckAmount().Count)
r.client.Logger.Info().Any("count", r.skipCount).Msg("Messages To Skip")
} else {
return false
}
return true
}
func (r *RPC) parseAckMessage(data []byte) (*binary.AckMessageResponse, error) {
data = append(data, 93)
data = append(data, 93)
var msgArr []interface{}
marshalErr := json.Unmarshal(data, &msgArr)
if marshalErr != nil {
return nil, marshalErr
}
msg := &binary.AckMessageResponse{}
deserializeErr := pblite.Deserialize(msgArr, msg.ProtoReflect())
if deserializeErr != nil {
return nil, deserializeErr
}
return msg, nil
}
func (r *RPC) isStartRead(data []byte) bool {
return string(data) == "[[[null,null,null,[]]"
}
func (r *RPC) isHeartBeat(data []byte) bool {
return string(data) == ",[null,null,[]]"
} }
func (r *RPC) CloseConnection() { func (r *RPC) CloseConnection() {

View file

@ -1,7 +1,6 @@
package libgm package libgm
import ( import (
"encoding/json"
"fmt" "fmt"
"time" "time"
@ -125,38 +124,31 @@ func (s *SessionHandler) sendAckRequest() {
if len(s.ackMap) <= 0 { if len(s.ackMap) <= 0 {
return return
} }
reqId := util.RandomUUIDv4() dataToAck := s.ackMap
s.ackMap = nil
ackMessages := make([]*binary.AckMessageData, len(dataToAck))
for i, reqID := range dataToAck {
ackMessages[i] = &binary.AckMessageData{
RequestID: reqID,
Device: s.client.authData.DevicePair.Browser,
}
}
ackMessagePayload := &binary.AckMessagePayload{ ackMessagePayload := &binary.AckMessagePayload{
AuthData: &binary.AuthMessage{ AuthData: &binary.AuthMessage{
RequestID: reqId, RequestID: util.RandomUUIDv4(),
TachyonAuthToken: s.client.authData.TachyonAuthToken, TachyonAuthToken: s.client.authData.TachyonAuthToken,
ConfigVersion: payload.ConfigMessage, ConfigVersion: payload.ConfigMessage,
}, },
EmptyArr: &binary.EmptyArr{}, EmptyArr: &binary.EmptyArr{},
NoClue: nil, Acks: ackMessages,
} }
dataArray, err := pblite.Serialize(ackMessagePayload.ProtoReflect()) jsonData, err := pblite.SerializeToJSON(ackMessagePayload)
if err != nil { if err != nil {
panic(err) panic(err)
} }
ackMessages := make([][]interface{}, 0)
for _, reqId := range s.ackMap {
ackMessageData := &binary.AckMessageData{RequestID: reqId, Device: s.client.authData.DevicePair.Browser}
ackMessageDataArr, err := pblite.Serialize(ackMessageData.ProtoReflect())
if err != nil {
panic(err)
}
ackMessages = append(ackMessages, ackMessageDataArr)
s.ackMap = util.RemoveFromSlice(s.ackMap, reqId)
}
dataArray = append(dataArray, ackMessages)
jsonData, jsonErr := json.Marshal(dataArray)
if jsonErr != nil {
panic(err)
}
_, err = s.client.rpc.sendMessageRequest(util.ACK_MESSAGES, jsonData) _, err = s.client.rpc.sendMessageRequest(util.ACK_MESSAGES, jsonData)
if err != nil { if err != nil {
panic(err) panic(err)
} }
s.client.Logger.Debug().Any("payload", jsonData).Msg("[ACK] Sent Request") s.client.Logger.Debug().Any("payload", jsonData).Msg("Sent acks")
} }

View file

@ -11,12 +11,3 @@ const UserAgent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, li
const OS = "Linux" const OS = "Linux"
const XUserAgent = "grpc-web-javascript/0.1" const XUserAgent = "grpc-web-javascript/0.1"
const QRCodeURLBase = "https://support.google.com/messages/?p=web_computer#?c=" const QRCodeURLBase = "https://support.google.com/messages/?p=web_computer#?c="
// Deprecated
var (
BROWSER_TYPE = BrowserType
GOOG_API_KEY = GoogleAPIKey
USER_AGENT = UserAgent
X_USER_AGENT = XUserAgent
QR_CODE_URL = QRCodeURLBase
)